@eqproject/eqp-dynamic-module 2.8.8 → 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/{esm2020 → esm2022}/eqproject-eqp-dynamic-module.mjs +4 -4
- package/esm2022/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +531 -0
- package/esm2022/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +1245 -0
- package/esm2022/lib/components/private/add-form-field/add-form-field.component.mjs +1263 -0
- package/esm2022/lib/components/private/add-formula-field/add-formula-field.component.mjs +200 -0
- package/esm2022/lib/components/private/dbgetter/dbgetter.component.mjs +233 -0
- package/esm2022/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +280 -0
- package/esm2022/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +143 -0
- package/esm2022/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +75 -0
- package/esm2022/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +106 -0
- package/esm2022/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +107 -0
- package/esm2022/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +265 -0
- package/esm2022/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.mjs +261 -0
- package/esm2022/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +82 -0
- package/esm2022/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +176 -0
- package/esm2022/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +129 -0
- package/esm2022/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +103 -0
- package/esm2022/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +78 -0
- package/esm2022/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +837 -0
- package/esm2022/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +408 -0
- package/esm2022/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +651 -0
- package/esm2022/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +82 -0
- package/esm2022/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +59 -0
- package/esm2022/lib/components/private/form-records/view-form-record/view-form-record.component.mjs +131 -0
- package/esm2022/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.mjs +89 -0
- package/esm2022/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +460 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.mjs +58 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +110 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +108 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.mjs +58 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +135 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.mjs +58 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +141 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +126 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +111 -0
- package/esm2022/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +111 -0
- package/esm2022/lib/components/private/graphs/graph/graph.component.mjs +186 -0
- package/esm2022/lib/components/private/graphs/graphs.component.mjs +175 -0
- package/esm2022/lib/components/private/spinner/spinner.component.mjs +21 -0
- package/{esm2020 → esm2022}/lib/components/private/tmw-image-drawer/i18n.mjs +62 -62
- package/esm2022/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +413 -0
- package/esm2022/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +348 -0
- package/esm2022/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.mjs +81 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-creator.component.mjs +199 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +91 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +88 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.mjs +61 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +69 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +107 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +92 -0
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +92 -0
- package/esm2022/lib/directives/dynamic-loader/dynamic-loader.directive.mjs +63 -0
- package/esm2022/lib/directives/speech-to-text/speech-to-text.directive.mjs +192 -0
- package/esm2022/lib/eqp-dynamic-module.module.mjs +253 -0
- package/{esm2020 → esm2022}/lib/interfaces/iBaseFieldComponent.interface.mjs +1 -1
- package/{esm2020 → esm2022}/lib/interfaces/iRootObject.interface.mjs +1 -1
- package/esm2022/lib/models/baseField.model.mjs +133 -0
- package/esm2022/lib/models/baseObj.model.mjs +10 -0
- package/{esm2020 → esm2022}/lib/models/context.model.mjs +10 -8
- package/esm2022/lib/models/dynAttachment.mjs +52 -0
- package/esm2022/lib/models/dynamicModuleCompileConfig.model.mjs +45 -0
- package/esm2022/lib/models/dynamicModuleConfig.model.mjs +13 -0
- package/esm2022/lib/models/dynamicModuleConfiguratorConfig.model.mjs +11 -0
- package/esm2022/lib/models/dynamicModuleConfiguratorSpecificConfig.model.mjs +16 -0
- package/{esm2020 → esm2022}/lib/models/dynamicModuleFilterResultViewModeEnum.model.mjs +6 -6
- package/esm2022/lib/models/dynamicModuleGeneralConfig.model.mjs +36 -0
- package/esm2022/lib/models/dynamicModuleListConfig.model.mjs +48 -0
- package/esm2022/lib/models/dynamicModuleListFormRecordActionsDefault.mjs +35 -0
- package/{esm2020 → esm2022}/lib/models/dynamicModuleRepairConfig.model.mjs +10 -10
- package/{esm2020 → esm2022}/lib/models/dynamicModuleViewModeEnum.mjs +11 -11
- package/esm2022/lib/models/endPointConfiguration.model.mjs +211 -0
- package/{esm2020 → esm2022}/lib/models/entity.model.mjs +10 -7
- package/esm2022/lib/models/fields/attachmentField.model.mjs +28 -0
- package/esm2022/lib/models/fields/booleanField.model.mjs +15 -0
- package/esm2022/lib/models/fields/dateField.model.mjs +15 -0
- package/esm2022/lib/models/fields/imageField.model.mjs +14 -0
- package/esm2022/lib/models/fields/imageSelectorField.model.mjs +10 -0
- package/esm2022/lib/models/fields/imageWithMarkersField.model.mjs +7 -0
- package/{esm2020 → esm2022}/lib/models/fields/labelField.model.mjs +5 -4
- package/esm2022/lib/models/fields/listValueField.model.mjs +24 -0
- package/esm2022/lib/models/fields/lookupField.model.mjs +11 -0
- package/esm2022/lib/models/fields/numericField.model.mjs +13 -0
- package/esm2022/lib/models/fields/textField.model.mjs +18 -0
- package/esm2022/lib/models/fields/textareaField.model.mjs +9 -0
- package/esm2022/lib/models/form.model.mjs +63 -0
- package/esm2022/lib/models/getter.model.mjs +6 -0
- package/esm2022/lib/models/graph.model.mjs +19 -0
- package/{esm2020 → esm2022}/lib/models/logicOperator.model.mjs +55 -55
- package/esm2022/lib/models/record.model.mjs +39 -0
- package/esm2022/lib/models/statistic.model.mjs +12 -0
- package/esm2022/lib/models/trigger.model.mjs +63 -0
- package/esm2022/lib/modules/formula.model.mjs +266 -0
- package/{esm2020 → esm2022}/lib/modules/material.module.mjs +231 -231
- package/{esm2020 → esm2022}/lib/services/custom-form-validators.service.mjs +18 -18
- package/esm2022/lib/services/db-date.service.mjs +178 -0
- package/esm2022/lib/services/eqp-dynamic-module-dialog.service.mjs +114 -0
- package/esm2022/lib/services/global.service.mjs +43 -0
- package/esm2022/lib/services/spinner.service.mjs +41 -0
- package/esm2022/lib/services/utilityHelper.services.mjs +601 -0
- package/{esm2020 → esm2022}/public-api.mjs +56 -56
- package/fesm2022/eqproject-eqp-dynamic-module.mjs +13506 -0
- package/fesm2022/eqproject-eqp-dynamic-module.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +162 -162
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +308 -308
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +263 -263
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +45 -45
- package/lib/components/private/dbgetter/dbgetter.component.d.ts +51 -51
- package/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.d.ts +84 -84
- package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +57 -57
- package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +27 -27
- package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +36 -36
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +33 -33
- package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +80 -80
- package/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.d.ts +78 -78
- package/lib/components/private/field-templates/label-field-template/label-field-template.component.d.ts +33 -33
- package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +59 -59
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +40 -40
- package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +35 -35
- package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +31 -31
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +104 -104
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +83 -83
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +151 -151
- package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +39 -39
- package/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.d.ts +20 -20
- package/lib/components/private/form-records/view-form-record/view-form-record.component.d.ts +36 -36
- package/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.d.ts +42 -42
- package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +109 -109
- package/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.d.ts +21 -21
- package/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.d.ts +37 -37
- package/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.d.ts +37 -37
- package/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.d.ts +21 -21
- package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +47 -47
- package/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.d.ts +21 -21
- package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +47 -47
- package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +40 -40
- package/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.d.ts +38 -38
- package/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.d.ts +38 -38
- package/lib/components/private/graphs/graph/graph.component.d.ts +25 -25
- package/lib/components/private/graphs/graphs.component.d.ts +47 -47
- package/lib/components/private/spinner/spinner.component.d.ts +12 -12
- package/lib/components/private/tmw-image-drawer/i18n.d.ts +27 -27
- package/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.d.ts +70 -70
- package/lib/components/private/tmw-image-marker/tmw-image-marker.component.d.ts +62 -62
- package/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.d.ts +42 -42
- package/lib/components/private/trigger-creator/trigger-creator.component.d.ts +42 -42
- package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +34 -34
- package/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.d.ts +34 -34
- package/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.d.ts +24 -24
- package/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.d.ts +34 -34
- package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +37 -37
- package/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.d.ts +36 -36
- package/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.d.ts +36 -36
- package/lib/directives/dynamic-loader/dynamic-loader.directive.d.ts +26 -26
- package/lib/directives/speech-to-text/speech-to-text.directive.d.ts +31 -31
- package/lib/eqp-dynamic-module.module.d.ts +85 -85
- package/lib/interfaces/iBaseFieldComponent.interface.d.ts +8 -8
- package/lib/interfaces/iRootObject.interface.d.ts +11 -11
- package/lib/models/baseField.model.d.ts +126 -126
- package/lib/models/baseObj.model.d.ts +9 -9
- package/lib/models/context.model.d.ts +9 -9
- package/lib/models/dynAttachment.d.ts +49 -49
- package/lib/models/dynamicModuleCompileConfig.model.d.ts +35 -35
- package/lib/models/dynamicModuleConfig.model.d.ts +11 -11
- package/lib/models/dynamicModuleConfiguratorConfig.model.d.ts +7 -7
- package/lib/models/dynamicModuleConfiguratorSpecificConfig.model.d.ts +11 -11
- package/lib/models/dynamicModuleFilterResultViewModeEnum.model.d.ts +5 -5
- package/lib/models/dynamicModuleGeneralConfig.model.d.ts +29 -29
- package/lib/models/dynamicModuleListConfig.model.d.ts +39 -39
- package/lib/models/dynamicModuleListFormRecordActionsDefault.d.ts +9 -9
- package/lib/models/dynamicModuleRepairConfig.model.d.ts +4 -4
- package/lib/models/dynamicModuleViewModeEnum.d.ts +10 -10
- package/lib/models/endPointConfiguration.model.d.ts +46 -46
- package/lib/models/entity.model.d.ts +11 -11
- package/lib/models/fields/attachmentField.model.d.ts +17 -17
- package/lib/models/fields/booleanField.model.d.ts +11 -11
- package/lib/models/fields/dateField.model.d.ts +13 -13
- package/lib/models/fields/imageField.model.d.ts +13 -13
- package/lib/models/fields/imageSelectorField.model.d.ts +12 -12
- package/lib/models/fields/imageWithMarkersField.model.d.ts +7 -7
- package/lib/models/fields/labelField.model.d.ts +4 -4
- package/lib/models/fields/listValueField.model.d.ts +24 -24
- package/lib/models/fields/lookupField.model.d.ts +10 -10
- package/lib/models/fields/numericField.model.d.ts +12 -12
- package/lib/models/fields/textField.model.d.ts +16 -16
- package/lib/models/fields/textareaField.model.d.ts +8 -8
- package/lib/models/form.model.d.ts +61 -61
- package/lib/models/getter.model.d.ts +5 -5
- package/lib/models/graph.model.d.ts +18 -18
- package/lib/models/logicOperator.model.d.ts +48 -48
- package/lib/models/record.model.d.ts +41 -41
- package/lib/models/statistic.model.d.ts +13 -13
- package/lib/models/trigger.model.d.ts +51 -51
- package/lib/modules/formula.model.d.ts +32 -32
- package/lib/modules/material.module.d.ts +37 -37
- package/lib/services/custom-form-validators.service.d.ts +5 -5
- package/lib/services/db-date.service.d.ts +24 -24
- package/lib/services/eqp-dynamic-module-dialog.service.d.ts +44 -44
- package/lib/services/global.service.d.ts +16 -16
- package/lib/services/spinner.service.d.ts +18 -18
- package/lib/services/utilityHelper.services.d.ts +101 -101
- package/package.json +20 -25
- package/public-api.d.ts +53 -53
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +0 -516
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +0 -1196
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +0 -1202
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +0 -196
- package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +0 -226
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +0 -263
- package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +0 -138
- package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +0 -71
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +0 -104
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +0 -100
- package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +0 -256
- package/esm2020/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.mjs +0 -252
- package/esm2020/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +0 -74
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +0 -172
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +0 -124
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +0 -95
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +0 -71
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +0 -828
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +0 -400
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +0 -628
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +0 -75
- package/esm2020/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +0 -54
- package/esm2020/lib/components/private/form-records/view-form-record/view-form-record.component.mjs +0 -125
- package/esm2020/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.mjs +0 -76
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +0 -453
- package/esm2020/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.mjs +0 -57
- package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +0 -104
- package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +0 -105
- package/esm2020/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.mjs +0 -57
- package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +0 -128
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.mjs +0 -57
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +0 -135
- package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +0 -120
- package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +0 -102
- package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +0 -102
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +0 -180
- package/esm2020/lib/components/private/graphs/graphs.component.mjs +0 -164
- package/esm2020/lib/components/private/spinner/spinner.component.mjs +0 -19
- package/esm2020/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +0 -403
- package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +0 -336
- package/esm2020/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.mjs +0 -69
- package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +0 -191
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +0 -86
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +0 -86
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.mjs +0 -60
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +0 -66
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +0 -102
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +0 -84
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +0 -84
- package/esm2020/lib/directives/dynamic-loader/dynamic-loader.directive.mjs +0 -59
- package/esm2020/lib/directives/speech-to-text/speech-to-text.directive.mjs +0 -186
- package/esm2020/lib/eqp-dynamic-module.module.mjs +0 -253
- package/esm2020/lib/models/baseField.model.mjs +0 -101
- package/esm2020/lib/models/baseObj.model.mjs +0 -9
- package/esm2020/lib/models/dynAttachment.mjs +0 -21
- package/esm2020/lib/models/dynamicModuleCompileConfig.model.mjs +0 -13
- package/esm2020/lib/models/dynamicModuleConfig.model.mjs +0 -9
- package/esm2020/lib/models/dynamicModuleConfiguratorConfig.model.mjs +0 -9
- package/esm2020/lib/models/dynamicModuleConfiguratorSpecificConfig.model.mjs +0 -15
- package/esm2020/lib/models/dynamicModuleGeneralConfig.model.mjs +0 -36
- package/esm2020/lib/models/dynamicModuleListConfig.model.mjs +0 -30
- package/esm2020/lib/models/dynamicModuleListFormRecordActionsDefault.mjs +0 -11
- package/esm2020/lib/models/endPointConfiguration.model.mjs +0 -205
- package/esm2020/lib/models/fields/attachmentField.model.mjs +0 -22
- package/esm2020/lib/models/fields/booleanField.model.mjs +0 -12
- package/esm2020/lib/models/fields/dateField.model.mjs +0 -15
- package/esm2020/lib/models/fields/imageField.model.mjs +0 -15
- package/esm2020/lib/models/fields/imageSelectorField.model.mjs +0 -8
- package/esm2020/lib/models/fields/imageWithMarkersField.model.mjs +0 -8
- package/esm2020/lib/models/fields/listValueField.model.mjs +0 -11
- package/esm2020/lib/models/fields/lookupField.model.mjs +0 -5
- package/esm2020/lib/models/fields/numericField.model.mjs +0 -5
- package/esm2020/lib/models/fields/textField.model.mjs +0 -14
- package/esm2020/lib/models/fields/textareaField.model.mjs +0 -4
- package/esm2020/lib/models/form.model.mjs +0 -24
- package/esm2020/lib/models/getter.model.mjs +0 -3
- package/esm2020/lib/models/graph.model.mjs +0 -15
- package/esm2020/lib/models/record.model.mjs +0 -10
- package/esm2020/lib/models/statistic.model.mjs +0 -8
- package/esm2020/lib/models/trigger.model.mjs +0 -41
- package/esm2020/lib/modules/formula.model.mjs +0 -265
- package/esm2020/lib/services/db-date.service.mjs +0 -178
- package/esm2020/lib/services/eqp-dynamic-module-dialog.service.mjs +0 -114
- package/esm2020/lib/services/global.service.mjs +0 -41
- package/esm2020/lib/services/spinner.service.mjs +0 -43
- package/esm2020/lib/services/utilityHelper.services.mjs +0 -598
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +0 -12782
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +0 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +0 -12751
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eqproject-eqp-dynamic-module.mjs","sources":["../../../projects/eqp-dynamic-module/src/lib/models/context.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleCompileConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListFormRecordActionsDefault.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleRepairConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleViewModeEnum.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseObj.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/endPointConfiguration.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/form.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/eqp-dynamic-module-dialog.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textField.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/custom-form-validators.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/spinner.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/utilityHelper.services.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleFilterResultViewModeEnum.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/global.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/record.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/dateField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/services/db-date.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/logicOperator.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/trigger.model.ts","../../../projects/eqp-dynamic-module/src/lib/directives/speech-to-text/speech-to-text.directive.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/booleanField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/attachmentField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/i18n.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/dynAttachment.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/label-field-template/label-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/label-field-template/label-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-marker/tmw-image-marker.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-marker/tmw-image-marker.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/directives/dynamic-loader/dynamic-loader.directive.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dbgetter/dbgetter.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dbgetter/dbgetter.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.html","../../../projects/eqp-dynamic-module/src/lib/models/graph.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.html","../../../projects/eqp-dynamic-module/src/lib/models/statistic.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.html","../../../projects/eqp-dynamic-module/src/lib/modules/material.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorSpecificConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleGeneralConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/modules/formula.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/dialog-data-example.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-creator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-creator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/eqp-dynamic-module.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/entity.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageSelectorField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/lookupField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/numericField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textareaField.model.ts","../../../projects/eqp-dynamic-module/src/public-api.ts","../../../projects/eqp-dynamic-module/src/eqproject-eqp-dynamic-module.ts"],"sourcesContent":["export class Context {\r\n User: ContextUser = new ContextUser();\r\n Organizzation: string;\r\n}\r\n\r\nexport class ContextUser {\r\n Name: string;\r\n Surname: string;\r\n Role: string;\r\n}","export class DynamicModuleCompileConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean;\r\n\r\n /**\r\n * Show/Hide form save button\r\n */\r\n showSaveButton: boolean;\r\n /**\r\n * Show/Hide form back/annulla button\r\n */\r\n showBackButton: boolean;\r\n /**\r\n * Set id for save\r\n */\r\n userID: string;\r\n /**\r\n * Bag di informazioni utilizzate lato server per filtrare le risposte sulla base di parametnri dell'applicazione ospitante\r\n */\r\n additionalParams: any;\r\n /**\r\n * Bag di informazioni utilizzate lato client per operazioni dinamiche come label custom\r\n */\r\n additionalInfo: any; \r\n /**\r\n * Prefilter Params for filtering\r\n */\r\n prefilterParams: any; \r\n /**\r\n * Mostra bottone \"nuova ricerca\"\r\n */\r\n showNewSearchButton: boolean;\r\n\r\n constructor(\r\n showTitle: boolean = true,\r\n showSaveButton: boolean = true,\r\n showBackButton: boolean = true,\r\n userID: string = \"0\",\r\n additionalParams: any = null,\r\n additionalInfo: any = null,\r\n prefilterParams: any = null,\r\n showNewSearchButton: boolean = true\r\n ) {\r\n this.showTitle = showTitle;\r\n this.showSaveButton = showSaveButton;\r\n this.showBackButton = showBackButton;\r\n this.userID = userID;\r\n this.additionalParams = additionalParams;\r\n this.additionalInfo = additionalInfo;\r\n this.prefilterParams = prefilterParams;\r\n this.showNewSearchButton = showNewSearchButton;\r\n }\r\n}\r\n","export class DynamicModuleListFormRecordActionsDefault {\r\n /*\r\n * pulsante aggiungi in alto\r\n */\r\n add: boolean\r\n /*\r\n * pulsante visualizza nel menu della risposta\r\n */\r\n view: boolean\r\n /*\r\n * pulsante modifica nel menu della risposta\r\n */\r\n edit: boolean\r\n /*\r\n * pulsante duplica nel menu della risposta\r\n */\r\n duplicate: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n delete: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n graphs: boolean \r\n\r\n constructor(add: boolean = true, view: boolean = true, edit: boolean = true, duplicate: boolean = true, del: boolean = true, graphs: boolean = true){\r\n this.add = add\r\n this.view = view\r\n this.edit = edit\r\n this.duplicate = duplicate\r\n this.delete = del\r\n this.graphs = graphs\r\n }\r\n\r\n}\r\n","import { DynamicModuleListFormRecordActionsDefault } from \"./dynamicModuleListFormRecordActionsDefault\";\r\nimport { Record, RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleListConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean = true;\r\n\r\n /**\r\n * Lista delle azioni di default da mostrare per visualizzare/modificare/duplicare/eliminare in LIST MODE\r\n */\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault\r\n\r\n /**\r\n * Lista dei record da mostrare in LIST MODE\r\n */\r\n values: Array<Record>;\r\n\r\n /**\r\n * Lista degli eventuali bottoni esterni dipendenti dall'applicazione utilizzatrice in aggiunta ai defaultListActions\r\n */\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n /**\r\n * Bag di informazioni utilizzate lato client per operazioni dinamiche come label custom\r\n * Utilizzata per aggironare alcuni valori dell additionInfo delle risposte\r\n */\r\n updateInfo: any;\r\n \r\n /**\r\n * Lista di chiavi da utilizzare per comporre il titolo dell'accordion del record\r\n * le strignhe vengono cercate nell'AdditionalInfo del record e se non trovate non viene stampato niente\r\n */\r\n listViewRecordTitle: Array<string>;\r\n\r\n /**\r\n * L'Id utente per filtrare le risposte\r\n */\r\n userID: string = \"0\";\r\n\r\n /**\r\n * Controllo se è draggabile\r\n */\r\n\r\n isDraggableListView: boolean = true;\r\n\r\n constructor(\r\n showTitle: boolean = true,\r\n values: Array<Record> = null,\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(),\r\n userID: string = \"0\",\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>(),\r\n updateInfo = null,\r\n listViewRecordTitle = new Array<string>(),\r\n isDraggableListView: boolean = true\r\n ) {\r\n this.showTitle = showTitle;\r\n this.values = values;\r\n this.defaultListActions = defaultListActions;\r\n this.userID = userID;\r\n this.externalButtons = externalButtons;\r\n this.updateInfo = updateInfo;\r\n this.listViewRecordTitle = listViewRecordTitle;\r\n this.isDraggableListView = isDraggableListView;\r\n }\r\n}\r\n","export class DynamicModuleRepairConfig {\r\n /*\r\n * stringa da passare in REPAIR MODE\r\n */\r\n FormJSON: string = \"\";\r\n\r\n constructor(formJson: string){\r\n this.FormJSON = formJson;\r\n }\r\n}\r\n","export enum DynamicModuleViewModeEnum {\r\n NONE = 0,\r\n VIEW = 1,\r\n COMPILE = 2,\r\n LIST = 3,\r\n REPAIR = 4,\r\n LISTWIEW = 5,\r\n FILTER = 6,\r\n GRAPHS = 7\r\n}","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class BaseObj {\r\n ID: string;\r\n}","import { UntypedFormGroup } from '@angular/forms';\r\nimport { BaseObj } from './baseObj.model';\r\nimport { Contestualization } from './getter.model';\r\n\r\n/**\r\n * Contiene le informazioni di base del campo, indipendentemente dal tipo.\r\n * Questa classe è volutamente astratta perché il tipo di campo è dettato dal tipo\r\n */\r\nexport class BaseField extends BaseObj {\r\n /**\r\n * Nome del campo che per progettazione è una sostituzione della label\r\n * Il vero identificativo del campo è l'ID\r\n */\r\n Name: string;\r\n Label: string;\r\n Description: string;\r\n Required: boolean;\r\n Formula: string;\r\n Tooltip: string;\r\n OrdinalPosition: number;\r\n Disabled: boolean;\r\n Readonly: boolean;\r\n FieldstyleCSS: string;\r\n LabelstyleCSS: string;\r\n\r\n // rappresentazione grafica di default per gli elementi di risposta\r\n AnswerStyle: AnswerStyle = { InListView: true, Invisibility: FieldInvisibilityEnum.NASCOSTO, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n\r\n\r\n /**\r\n * Entità a cui appartiene il campo. Si tenga presente che sono ammessi anche campi\r\n * di sola visualizzazione e calcolati, da utilizzare nelle form, \r\n * e per questo motivo possono essere con Entity == null\r\n */\r\n EntityID: string;\r\n\r\n FieldGroup: string;\r\n ColSpanSizes: Array<ColSpanSizesEnum>;\r\n VisibleIf: string; // condizione di visualizzazione\r\n InListView: boolean; // visualizzazione (impostata di default oppure condizionata calcolata durante la compilazione del questionario)\r\n Invisibility: FieldInvisibilityEnum;\r\n\r\n // Proprità client\r\n FieldType: FieldTypeEnum;\r\n FieldValue: any;\r\n\r\n DataGetter: DataGetter = new DataGetter();\r\n DataGetterValueBase64String: string = \"\";\r\n\r\n FormFormGroup: UntypedFormGroup;\r\n}\r\n\r\n\r\nexport class AnswerStyle {\r\n InListView: boolean // visible\r\n Invisibility: FieldInvisibilityEnum\r\n VisibleIf: string // formula visible\r\n FieldstyleCSS: string\r\n LabelstyleCSS: string\r\n ColSpanSizes: Array<ColSpanSizesEnum>\r\n};\r\n\r\nexport class DataGetter {\r\n DataGetterType: DataGetterTypeEnum = DataGetterTypeEnum.Manuale;\r\n DataGetterValue: any = null;\r\n DataGetterColumnForce: any = null;\r\n DataGetterCardinality: DataGetterCardinalityEnum = DataGetterCardinalityEnum['PIU RECENTE']; // Usato solo in caso di DM Getter\r\n DataGetterContestualization: Contestualization; // Usato per contestualizzare il DM Getter\r\n}\r\n\r\nexport enum FieldTypeEnum {\r\n 'Campo di testo' = 1,\r\n 'Area di testo' = 2,\r\n 'Booleano' = 3,\r\n 'Data e/o ora' = 4,\r\n 'Campo numerico' = 5,\r\n 'Allegato' = 6,\r\n 'Immagine' = 7,\r\n 'Elenco generico' = 8,\r\n 'Lookup' = 9,\r\n 'Form di dettaglio' = 10,\r\n 'Elenco immagini' = 11,\r\n \"Etichetta\" = 12,\r\n \"Immagine con markers\" =13\r\n}\r\n\r\nexport enum DataGetterTypeEnum {\r\n 'Manuale' = 1,\r\n 'Formula' = 2,\r\n 'Da database' = 3,\r\n 'Da modulo dinamico' = 4\r\n}\r\n\r\nexport enum ColSpanSizesEnum {\r\n 'col-sm-3' = 1,\r\n 'col-sm-4' = 2,\r\n 'col-sm-6' = 3,\r\n 'col-sm-12' = 4,\r\n\r\n 'col-md-3' = 5,\r\n 'col-md-4' = 6,\r\n 'col-md-6' = 7,\r\n 'col-md-12' = 8,\r\n\r\n 'col-lg-3' = 9,\r\n 'col-lg-4' = 10,\r\n 'col-lg-6' = 11,\r\n 'col-lg-12' = 12,\r\n\r\n 'align-self-start' = 13,\r\n 'align-self-center' = 14,\r\n 'align-self-end' = 15,\r\n\r\n 'col-sm-1' = 16,\r\n 'col-sm-2' = 17,\r\n 'col-sm-5' = 18,\r\n 'col-sm-7' = 19,\r\n 'col-sm-8' = 20,\r\n 'col-sm-9' = 21,\r\n 'col-sm-10' = 22,\r\n 'col-sm-11' = 23,\r\n\r\n 'col-md-1' = 24,\r\n 'col-md-2' = 25,\r\n 'col-md-5' = 26,\r\n 'col-md-7' = 27,\r\n 'col-md-8' = 28,\r\n 'col-md-9' = 29,\r\n 'col-md-10' = 30,\r\n 'col-md-11' = 31,\r\n\r\n 'col-lg-1' = 32,\r\n 'col-lg-2' = 33,\r\n 'col-lg-5' = 34,\r\n 'col-lg-7' = 35,\r\n 'col-lg-8' = 36,\r\n 'col-lg-9' = 37,\r\n 'col-lg-10' = 38,\r\n 'col-lg-11' = 39\r\n}\r\n\r\nexport enum FieldInvisibilityEnum {\r\n 'NASCOSTO' = 1,\r\n 'NASCOSTO CON AREA VISIBILE' = 2\r\n}\r\n\r\nexport enum DataGetterCardinalityEnum {\r\n 'PIU RECENTE' = 2,\r\n 'MENO RECENTE' = 3\r\n }","import { BaseField } from \"../baseField.model\";\r\nimport { DynAttachment } from \"../dynAttachment\";\r\n\r\nexport class ImageField extends BaseField {\r\n\r\n DynAttachment: DynAttachment;\r\n DynAttachmentID: number;\r\n ResizedImagesHeightPx: number = 128;\r\n EnableDrawing: boolean = false;\r\n\r\n}\r\n\r\nexport enum ImageFolderEnum {\r\n \"Regular\" = 1,\r\n \"Resized\" = 2,\r\n \"Thumbnail\" = 3,\r\n \r\n}","import { ImageFolderEnum } from \"./fields/imageField.model\";\r\n\r\nexport class EndPointConfiguration {\r\n Records: {\r\n GetByFormIDEndPoint?: EndPointData;\r\n GetByFormCodeEndPoint?: EndPointData;\r\n GetAllByEntAndUserIDEndPoint?: EndPointData;\r\n GetByIDEndPoint?: EndPointData;\r\n SaveEndPoint?: EndPointData;\r\n DuplicateEndPoint?: EndPointData;\r\n DeleteEndPoint?: EndPointData;\r\n RepairEndPoint?: EndPointData;\r\n ApplyFilter?:EndPointData;\r\n GetAllAttachmentsEndPoint?:EndPointData;\r\n };\r\n Forms: {\r\n GetAttachmentWithBases64: EndPointData;\r\n GetByIDEndPoint: EndPointData;\r\n GetAllFormEndPoint: EndPointData;\r\n GetByIDAndVersionEndPoint: EndPointData;\r\n SaveEndPoint: EndPointData;\r\n SaveAttachmentEndPoint: EndPointData;\r\n ExportByIDEndPoint: EndPointData;\r\n };\r\n\r\n constructor(baseUrl: string = null, userToken: string = null) {\r\n if (baseUrl != null) {\r\n this.Records = {\r\n GetByFormCodeEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/GetSerializedValuesByFormCode\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"FormCode\",\r\n ParamValue: \"TESTFORMCODE\",\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"mode\",\r\n ParamValue: 2,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: 65,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"OrgaID\",\r\n ParamValue: 2,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ], \r\n }, \r\n GetByFormIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getall\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"test\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetAllAttachmentsEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getallattachments\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"test\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n }, \r\n GetAllByEntAndUserIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/GetAllByUserID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getByID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/save\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"CompanyID\",\r\n ParamValue: 3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n {\r\n ParamName: \"sendNotification\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n DuplicateEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/duplicate\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n DeleteEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/delete\",\r\n RequestMethod: RequestMethodEnum.DELETE,\r\n },\r\n ApplyFilter: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/applyfilter\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue:3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ],\r\n },\r\n };\r\n this.Forms = {\r\n GetAttachmentWithBases64: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/getattachmentwithbases64\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"AttachmentID\",\r\n ParamValue: 5,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Types\",\r\n ParamValue: [ImageFolderEnum.Regular],\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n }, \r\n GetAllFormEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/all\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"orgaid\",\r\n ParamValue: 2,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ], \r\n }, \r\n GetByIDAndVersionEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/getbyidadnversion\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n },\r\n SaveAttachmentEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/saveattachmentfilebase\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n },\r\n ExportByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/exportbyid\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: \"\",\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ], \r\n },\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport class EndPointData {\r\n Url: string;\r\n Token?: string;\r\n RequestMethod: RequestMethodEnum;\r\n Params?: EndPointDataParams[];\r\n}\r\n\r\nexport class EndPointDataParams {\r\n ParamName: string;\r\n ParamValue: any = null;\r\n ParamType: ParamTypeEnum;\r\n}\r\n\r\nexport enum ParamTypeEnum {\r\n \"Query param\" = 1,\r\n \"In route\" = 2,\r\n \"In Body\" = 3,\r\n}\r\n\r\nexport enum RequestMethodEnum {\r\n GET = \"GET\",\r\n POST = \"POST\",\r\n PUT = \"PUT\",\r\n DELETE = \"DELETE\",\r\n}\r\n","import { BaseObj } from \"./baseObj.model\";\r\nimport { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { Trigger } from \"./trigger.model\";\r\n\r\n/**\r\n * Classe che rappresenta una Form completa.\r\n * Si tratta dell'oggetto che viene rappresentato a video e con cui l'utente interagisce.\r\n */\r\nexport class Form extends BaseObj implements IRootObject {\r\n Code: string;\r\n Name: string;\r\n Description: string;\r\n Version: number;\r\n OrgaID: string;\r\n ProjectName: string;\r\n // FormType: FormTypeEnum;\r\n FormScalarType: FormScalarTypeEnum;\r\n FormFieldsGroups: Array<FormFieldGroup>;\r\n\r\n /**\r\n * Elenco dei campi rappresentati nella form\r\n * possono appartenere ad una sola entità\r\n */\r\n\r\n Fields: Array<BaseField>;\r\n ActionsOnRecord: Array<ActionOnRecord>;\r\n\r\n /**\r\n * Triggers\r\n */\r\n\r\n Triggers: Array<Trigger>;\r\n\r\n /**\r\n * Elenco delle form contenute nella form base, ad esempio possono essere le varie form di\r\n * dettaglio\r\n */\r\n\r\n InnerForms: Array<Form>;\r\n CreationDate: Date;\r\n CreationUser: number;\r\n ModifyDate: Date;\r\n ModifyUser: number;\r\n RootEntityID: string;\r\n\r\n // Proprietà client\r\n OldName?: string;\r\n ObjectFields: any[];\r\n ObjectTriggers: any;\r\n}\r\n\r\nexport class FormFieldGroup {\r\n Name: string;\r\n OrdinalPosition?: number;\r\n}\r\n\r\nexport class ActionOnRecord {\r\n Name: string;\r\n Icon: string;\r\n Action: string; //Codice js\r\n OrdinalPosition: number;\r\n}\r\n\r\nexport enum FormTypeEnum {\r\n SCALAR = 1, /* form di tipo scalare */\r\n LIST = 2 /* form di tipo lista che viene rappresentata con molti record */\r\n}\r\n\r\nexport enum FormScalarTypeEnum {\r\n \"Semplice\" = 1, //FLAT\r\n \"A step\" = 2, //STEPPER\r\n \"In tab\" = 3, //GROUPED_BY_TAB\r\n \"In accordion\" = 4 //GROUPED_BY_ACCORDION\r\n}","import { Injectable } from \"@angular/core\";\r\nimport Swal from 'sweetalert2';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EqpDynamicModuleDialogService {\r\n\r\n constructor() { }\r\n \r\n /**\r\n * Mostra uno sweet alert di tipo SUCCESS con il messaggio passato come parametro.\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Operazione completata')\r\n */\r\n static Success(message: string, title: string = null) {\r\n let currentTitle = title != null ? title : 'Operazione completata con successo.';\r\n Swal.fire(currentTitle, message, 'success');\r\n }\r\n\r\n /**\r\n * Mostra uno sweet alert di tipo ERROR con il messaggio passato come parametro.\r\n * @param message Messaggio d'errore da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Errore')\r\n */\r\n static Error(message: string | string[], title: string = null) {\r\n let currentTitle = title != null ? title : 'Errore';\r\n if (Array.isArray(message)) {\r\n currentTitle = title != null ? title : 'Errore';\r\n let htmlErrors: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlErrors,\r\n icon: 'error'\r\n });\r\n }\r\n else {\r\n Swal.fire(currentTitle, message, 'error');\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo CONFIRM con il messaggio passato come parametro.\r\n * Alla pressione del tasto CONFERMA viene invocata la funzione confirmCallback.\r\n * Se viene passata anche la funzione cancellCallback viene invocata quando viene premuto il tasto ANNULLA\r\n * @param message Messaggio da mostrare nello sweetalert (può contenere una lista di messaggi)\r\n * @param confirmCallback Funzione di callback da invocare quando viene premuto il tasto CONFERMA\r\n * @param isWarning Se TRUE allora utilizza l'icona di WARNING all'interno dello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Sei sicuro di voler procedere?')\r\n * @param customWidth Larghezza da impostare per lo sweetalert (default: 32rem)\r\n * @param cancelCallback Funzione di callback da invocare alla pressione del tasto ANNULLA (opzionale)\r\n * @param confirmButtonText Testo da mostrare nel pulsante di conferma (default: Conferma)\r\n * @param cancelButtonText Testo da mostrare nel pulsante di annulla (default: Chiudi)\r\n */\r\n \r\n static Confirm(message: string | string[], confirmCallback: any, isWarning: boolean = false,\r\n title: string = null, customWidth: string = null, cancelCallback: any = null, confirmButtonText: string = null, cancelButtonText: string = null, haveDenyButton: boolean = false, denyButtonText: string = null, denyCallback: any = null, allowOutsideClick = false) {\r\n\r\n let currentTitle = title != null ? title : 'Sei sicuro di voler procedere?';\r\n if (Array.isArray(message)) {\r\n message = message.join(\"<br>\");\r\n }\r\n\r\n Swal.fire({\r\n title: currentTitle,\r\n html: message,\r\n width: customWidth ? customWidth : '32rem',\r\n icon: !isWarning ? 'question' : 'warning',\r\n confirmButtonText: confirmButtonText ? confirmButtonText : 'Conferma',\r\n showCancelButton: true,\r\n denyButtonText: denyButtonText ? denyButtonText : 'No',\r\n showDenyButton: haveDenyButton,\r\n cancelButtonText: cancelButtonText ? cancelButtonText : 'Chiudi',\r\n allowOutsideClick: allowOutsideClick,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value && confirmCallback) {\r\n confirmCallback();\r\n } else if (result.isDenied) {\r\n denyCallback();\r\n } else if (cancelCallback) {\r\n cancelCallback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo INFO con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n */\r\n static Info(message: string, title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Informazione:\";\r\n Swal.fire(currentTitle, message, 'info');\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo WARNING con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Attenzione!')\r\n */\r\n static Warning(message: string | string[], title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Attenzione!\";\r\n\r\n if (Array.isArray(message)) {\r\n let htmlWarnings: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlWarnings,\r\n icon: 'warning'\r\n });\r\n } else {\r\n Swal.fire(currentTitle, message, 'warning');\r\n }\r\n }\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Campo di testo */\r\nexport class TextField extends BaseField {\r\n TextMask: TextMaskEnum;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}\r\n\r\nexport enum TextMaskEnum {\r\n 'Password' = 1,\r\n 'Email' = 2,\r\n 'Telefono' = 3,\r\n 'Url' = 4\r\n}\r\n\r\nexport const UrlRegex = '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?';\r\nexport const TelRegex = '([+]?[0-9]{10,14})';","import { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport class ArrayValidators {\r\n public static minLenght(minLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length >= minLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n\r\n public static maxLenght(maxLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length <= maxLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpinnerService {\r\n isLoading = new Subject<boolean>();\r\n\r\n private requestsCount: number = 0;\r\n\r\n /**\r\n * Mostra lo spinner\r\n */\r\n show() {\r\n setTimeout(() => {\r\n this.isLoading.next(true);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Nasconde lo spinner\r\n */\r\n hide() {\r\n setTimeout(() => {\r\n this.isLoading.next(false);\r\n }, 100);\r\n }\r\n\r\n addRequestCounter() {\r\n this.requestsCount++;\r\n this.show();\r\n }\r\n\r\n removeRequestCounter() {\r\n this.requestsCount--;\r\n if (this.requestsCount == 0)\r\n this.hide();\r\n }\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n FieldInvisibilityEnum,\r\n FieldTypeEnum,\r\n} from \"../models/baseField.model\";\r\nimport { Context } from \"../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointData,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n RequestMethodEnum,\r\n} from \"../models/endPointConfiguration.model\";\r\nimport { AttachmentField } from \"../models/fields/attachmentField.model\";\r\nimport { ImageField } from \"../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../models/fields/listValueField.model\";\r\nimport { TextareaField } from \"../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n UrlRegex,\r\n TelRegex,\r\n} from \"../models/fields/textField.model\";\r\nimport { Form } from \"../models/form.model\";\r\nimport { Record } from \"../models/record.model\";\r\nimport { ArrayValidators } from \"./custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"./eqp-dynamic-module-dialog.service\";\r\nimport { SpinnerService } from \"./spinner.service\";\r\nimport { GlobalService } from \"./global.service\";\r\nimport { ImageSelectorField } from \"../models/fields/imageSelectorField.model\";\r\nimport { DynAttachment } from \"../models/dynAttachment\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class UtilityHelperService {\r\n public static context: Context = new Context();\r\n\r\n debugMode: boolean = false;\r\n debugLog(message: string, item?: any){\r\n if(this.debugMode){\r\n if(item){\r\n console.log(message, item)\r\n }else{\r\n console.log(message)\r\n }\r\n }\r\n }\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private http: HttpClient,\r\n private spinnerService: SpinnerService\r\n ) {}\r\n\r\n public static EvaluateFieldFormula(\r\n formula: string,\r\n rec: Record,\r\n ctx: any\r\n ): any {\r\n const evaluatedValue = eval(formula);\r\n return evaluatedValue ? evaluatedValue : null;\r\n }\r\n\r\n public static SetContext(ctx: Context) {\r\n this.context = ctx;\r\n }\r\n public static isNumeric(n) {\r\n return !isNaN(n);\r\n }\r\n\r\n public static initStyles(stylecss) {\r\n return stylecss.split(\";\").reduce((a, b) => {\r\n const keypar = b.split(\":\");\r\n if (keypar.length > 1) a[keypar[0].trim()] = keypar[1].trim();\r\n return a;\r\n }, {});\r\n }\r\n\r\n public static GetFieldType(field: BaseField) {\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]: {\r\n const t: TextField = Object.assign(new TextField(), field);\r\n return t;\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete per i campi in cui l'utente deve scrivere comandi javascript.\r\n * In base all'ultimo carattere digitato viene impostato un elenco di oggetti o proprietà che l'utente ha a disposizione in quel momento.\r\n * @param fields Array di BaseField aggiunti alla Form\r\n * @param typedFormula Stringa digitata dall'utente\r\n * @summary Il metodo imposta i suggerimenti basandosi su 3 casi:\r\n * 1) l'utente non ha digitato nulla o la stringa digitata dall'utente finisce con uno spazio vuoto\r\n * 2) la stringa digitata dall'utente finisce con un \".\"\r\n * 3) la stringa digitata dall'utente non coincide con nessun altro caso sopra (finisce con un carattere qualunque)\r\n */\r\n public static GetAutocompleteOptions(\r\n fields: Array<BaseField>,\r\n typedFormula: string\r\n ): Array<{ label: string; value: string }> {\r\n let autocompleteOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Recupero i nomi di tutti i campi creati fino ad ora nella form.\r\n const availableRecProperties: Array<string> = fields.map((f) =>\r\n f.Label.split(\" \").join(\"_\")\r\n );\r\n\r\n // Nel casi in cui l'utente non ha inserito nulla oppure la stringa finisce con uno spazio vuoto o un simbolo diverso da \".\"\r\n // (un carattere non alfanumerico) imposto come suggerimenti solo \"rec\" e \"ctx\", ovvero gli unici due oggetti a cui l'utente ha accesso.\r\n if (\r\n !typedFormula ||\r\n (!typedFormula.endsWith(\".\") &&\r\n new RegExp(\"[^0-9a-zA-Z_]\").test(\r\n typedFormula.substring(typedFormula.length - 1, typedFormula.length)\r\n ))\r\n ) {\r\n autocompleteOptions = [\r\n { label: \"rec\", value: (typedFormula ? typedFormula : \"\") + \"rec\" },\r\n { label: \"ctx\", value: (typedFormula ? typedFormula : \"\") + \"ctx\" },\r\n ];\r\n }\r\n // Se la stringa finisce con un \".\" vuol dire che l'utente sta cercando di accedere ad una proprietà di un oggetto\r\n // a sua disposizione. Recupero il nome dell'ultimo oggetto digitato dall'utente e se l'oggetto scelto è \"rec\" o \"ctx\"\r\n // allora suggerisco le proprietà che esistono all'interno di questi oggetti altrimenti non mostro nulla.\r\n else if (typedFormula.endsWith(\".\")) {\r\n const formulaPieces: Array<string> = typedFormula\r\n .split(\" \")\r\n [typedFormula.split(\" \").length - 1].split(\".\");\r\n if (formulaPieces[formulaPieces.length - 2] === \"rec\") {\r\n autocompleteOptions = availableRecProperties.map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else if (formulaPieces[formulaPieces.length - 2] === \"ctx\") {\r\n autocompleteOptions = Object.keys(UtilityHelperService.context).map(\r\n (f) => {\r\n return { label: f, value: typedFormula + f };\r\n }\r\n );\r\n } else if (\r\n formulaPieces.length > 2 &&\r\n formulaPieces[formulaPieces.length - 3] === \"ctx\" &&\r\n formulaPieces[formulaPieces.length - 2] === \"User\"\r\n ) {\r\n autocompleteOptions = Object.keys(\r\n UtilityHelperService.context.User\r\n ).map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else {\r\n autocompleteOptions = [];\r\n }\r\n }\r\n // In tutti gli altri casi, ovvero quando la stringa digitata finisce con un carattere diverso da quelli\r\n // controllati finora, vuol dire che l'utente sta digitanto il nome di un oggetto, una proprietà o una\r\n // funzione javascript. Controllo la parola che l'utente sta digitando e se fa parte di uno degli oggetti a disposizione\r\n // o una proprietà di essi allora suggerisco i possibili match.\r\n else {\r\n const availableOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Prendo tutti i blocchi di caratteri digitati dall'utente\r\n const allFormulaWords: Array<string> = typedFormula.split(\" \");\r\n // Prendo l'ultimo blocco di caratteri digitato dall'utente\r\n const lastTypedString: string =\r\n allFormulaWords[allFormulaWords.length - 1];\r\n\r\n // Se la l'ultima stringa digitata non contiene caratteri speciali allora splitto la stringa\r\n // sui \".\" e imposto i suggerimenti in base al path della prorpietà che si sta digitando.\r\n if (!new RegExp(\"[^0-9a-zA-Z_.]\").test(lastTypedString)) {\r\n const propertyPath = lastTypedString.split(\".\");\r\n const lastTypedWork = propertyPath[propertyPath.length - 1];\r\n\r\n let propertiesToCheck: Array<string> = [];\r\n\r\n if (propertyPath.length == 1) {\r\n propertiesToCheck = [\"rec\", \"ctx\"];\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"ctx\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context);\r\n } else if (\r\n propertyPath.length > 2 &&\r\n propertyPath[propertyPath.length - 3] === \"ctx\" &&\r\n propertyPath[propertyPath.length - 2] === \"User\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context.User);\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"rec\"\r\n ) {\r\n propertiesToCheck = availableRecProperties;\r\n }\r\n\r\n // Eseguo il controllo sulle proprietà recuperate, aggiungo ai suggerimenti tutti i nomi che iniziano con\r\n // quello che sta digitando l'utente.\r\n propertiesToCheck.forEach((prop) => {\r\n if (prop.startsWith(lastTypedWork)) {\r\n availableOptions.push({\r\n label: prop,\r\n value:\r\n typedFormula +\r\n prop.substring(lastTypedWork.length, prop.length),\r\n });\r\n }\r\n });\r\n }\r\n\r\n autocompleteOptions = availableOptions;\r\n }\r\n\r\n return autocompleteOptions;\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldSyleClass(field: BaseField, showAllFields: boolean = false): string {\r\n \r\n var colspanvalues = \"\";\r\n var visibilityvalues = \"\";\r\n if (field.ColSpanSizes && field.ColSpanSizes.length > 0){\r\n colspanvalues = field.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()).join(\" \");\r\n } else {\r\n colspanvalues = this.getDefaultStyleClass(field, 'align-self-end');\r\n }\r\n\r\n if (!field.InListView && !showAllFields){\r\n if (field.Invisibility == FieldInvisibilityEnum.NASCOSTO){ visibilityvalues = \"visibility_hidden\"; }\r\n if (field.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"]){ visibilityvalues = \"visibility_transparent\"; }\r\n }\r\n\r\n return colspanvalues + \" \" + visibilityvalues;\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldAnswerStyleClass(field: BaseField): string {\r\n \r\n var colspanvalues = \"\";\r\n var visibilityvalues = \"\";\r\n\r\n if (field.AnswerStyle && field.AnswerStyle.ColSpanSizes && field.AnswerStyle.ColSpanSizes.length > 0){\r\n\r\n colspanvalues = field.AnswerStyle.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()\r\n ).join(\" \");\r\n } else {\r\n colspanvalues = this.getDefaultStyleClass(field, 'align-self-start');\r\n }\r\n\r\n if (!field.AnswerStyle.InListView){\r\n if (field.AnswerStyle.Invisibility == FieldInvisibilityEnum.NASCOSTO){ visibilityvalues = \"visibility_hidden\"; }\r\n if (field.AnswerStyle.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"]){ visibilityvalues = \"visibility_transparent\"; }\r\n }\r\n\r\n return colspanvalues + \" \" + visibilityvalues;\r\n }\r\n\r\n private getDefaultStyleClass(field: BaseField, defaultAlign: string): string{\r\n \r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n //GlobalService.debugLog('Campo di testo')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n //GlobalService.debugLog('Area di testo')\r\n return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n case FieldTypeEnum[\"Booleano\"]:\r\n //GlobalService.debugLog('Booleano')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n //GlobalService.debugLog('Data e/o ora')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n //GlobalService.debugLog('Campo numerico')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Allegato\"]:\r\n //GlobalService.debugLog('Allegato')\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as AttachmentField).MetadataFields &&\r\n (field as AttachmentField).MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n }\r\n case FieldTypeEnum[\"Immagine\"]:\r\n //GlobalService.debugLog('Immagine')\r\n /*\r\n if (\r\n (field as ImageField).AttachDefinition.IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition.MetadataFields &&\r\n (field as ImageField).AttachDefinition.MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n }*/\r\n \r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n //GlobalService.debugLog('Elenco generico')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Lookup\"]:\r\n //GlobalService.debugLog('Lookup')\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Form di dettaglio\"]:\r\n //GlobalService.debugLog('Form di dettaglio')\r\n return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n case FieldTypeEnum[\"Elenco immagini\"]:\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n case FieldTypeEnum[\"Etichetta\"]:\r\n return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta una Form a partire dai suoi BaseField.\r\n * @param formFields Lista dei BaseField che compongono la form.\r\n * @param record Oggetto di tipo Record che contiene i valori dei campi.\r\n * @param onlyView Se TRUE disabilita la form per renderla in sola lettura.\r\n * @param includeCurrentFormInField Se TRUE popola la proprietà FormFormGroup all'interno di ogni BaseField con il FormGroup corrente.\r\n * @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.\r\n */\r\n public CreateFormFormGroup(\r\n formFields: Array<BaseField>,\r\n record: Record,\r\n onlyView = false,\r\n includeCurrentFormInField = true\r\n ): UntypedFormGroup {\r\n // //GlobalService.debugLog(\"formFields\", formFields);\r\n // //GlobalService.debugLog(\"record\", record);\r\n // //GlobalService.debugLog(\"onlyView\", onlyView);\r\n // //GlobalService.debugLog(\"includeCurrentFormInField\", includeCurrentFormInField);\r\n\r\n const formForm: UntypedFormGroup = this.formBuilder.group([]);\r\n\r\n formFields.forEach((field) => {\r\n // //GlobalService.debugLog(field);\r\n formForm.addControl(\r\n field.Name,\r\n this.createFieldFormControl(field, record)\r\n );\r\n if (includeCurrentFormInField) {\r\n // //GlobalService.debugLog(field);\r\n \r\n field.FormFormGroup = formForm;\r\n }\r\n });\r\n if (onlyView) {\r\n formForm.disable();\r\n }\r\n\r\n return formForm;\r\n }\r\n\r\n /**\r\n * Funzione per creare e aggiungere al FormGroup rappresentante la form un nuovo FormControl a partire da un Field.\r\n * In nuovo FormControl avrà il nome del campo passato e verranno impostati i Validators in base al tipo del campo stesso.\r\n * @param field BaseField per cui creare il FormControl da inserire nel FormGroup dela form.\r\n */\r\n private createFieldFormControl(\r\n field: BaseField,\r\n record: Record\r\n ): AbstractControl {\r\n const validators: Array<ValidatorFn> = [];\r\n\r\n if (field.Required) validators.push(Validators.required);\r\n\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((field as TextField).MaxLenght) {\r\n validators.push(Validators.maxLength((field as TextField).MaxLenght));\r\n }\r\n if ((field as TextField).MinLenght) {\r\n validators.push(Validators.minLength((field as TextField).MinLenght));\r\n }\r\n switch ((field as TextField).TextMask) {\r\n case TextMaskEnum.Url:\r\n validators.push(Validators.pattern(UrlRegex));\r\n break;\r\n case TextMaskEnum.Email:\r\n validators.push(Validators.email);\r\n break;\r\n case TextMaskEnum.Telefono:\r\n validators.push(Validators.pattern(TelRegex));\r\n break;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((field as TextareaField).MaxLenght) {\r\n validators.push(\r\n Validators.maxLength((field as TextareaField).MaxLenght)\r\n );\r\n }\r\n if ((field as TextareaField).MinLenght) {\r\n validators.push(\r\n Validators.minLength((field as TextareaField).MinLenght)\r\n );\r\n }\r\n break;\r\n case FieldTypeEnum.Allegato:\r\n case FieldTypeEnum.Immagine:\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((field as ListValueField).IsMultiChoiche)\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n case FieldTypeEnum[\"Elenco immagini\"]:\r\n if ((field as ImageSelectorField).IsMultiChoiche)\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n }\r\n\r\n return new UntypedFormControl(record[field.Name], validators);\r\n\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * @param baseServerUrl Stringa dell'url base del server (es: \"http://localhost:5000\").\r\n * @param userToken Token dell'utente loggato da usare per autenticarsi se necessario.\r\n * @returns Resituisce la configurazione completa degli endPoint da usare di default.\r\n */\r\n public ConfigureDefaultEndPoints(\r\n baseServerUrl: string,\r\n userToken: string\r\n ): EndPointConfiguration {\r\n let endPointConfiguration: EndPointConfiguration =\r\n new EndPointConfiguration(baseServerUrl, userToken);\r\n\r\n // endPointConfiguration.Records = {\r\n // GetByFormIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getall\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetAllByEntAndUserIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/GetAllByUserID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getByID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/save\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // DuplicateEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/duplicate\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // DeleteEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/delete\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.DELETE,\r\n // },\r\n // };\r\n // endPointConfiguration.Forms = {\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDAndVersionEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/GetByIDAndVersion\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // };\r\n return endPointConfiguration;\r\n }\r\n /**\r\n *\r\n * @param expression prende una stringa in input e verifica che ogni parentesi aperta venga anche chiusa\r\n * @returns true se le parentesi sono pari e ogni parentesi chiude se stessa, false se mancano parentesi o non vengono chiuse\r\n */\r\n public static stringCheckParentesis(expression, required = false) {\r\n if (expression == undefined || expression == null) {\r\n return required ? false : true;\r\n }\r\n let stack = [];\r\n let current;\r\n const matchLookup = {\r\n \"(\": \")\",\r\n \"[\": \"]\",\r\n \"{\": \"}\",\r\n };\r\n\r\n for (let i = 0; i < expression.length; i++) {\r\n current = expression[i]; //easier than writing it over and over\r\n\r\n if (current === \"(\" || current === \"[\" || current === \"{\") {\r\n stack.push(current);\r\n } else if (current === \")\" || current === \"]\" || current === \"}\") {\r\n const lastBracket = stack.pop();\r\n\r\n if (matchLookup[lastBracket] !== current) {\r\n //if the stack is empty, .pop() returns undefined, so this expression is still correct\r\n\r\n return false; //terminate immediately - no need to continue scanning the string\r\n }\r\n }\r\n }\r\n\r\n return stack.length === 0; //any elements mean brackets left open\r\n }\r\n\r\n /**\r\n * Metodo che data la configurazione di un endpoint costruisce l'url da chiamare, gli eventuali parametri\r\n * da passare (nel body o nella rotta) ed effettua la chiamata. Al termine della chiamata esegue le eventuali\r\n * funzioni di callback (sia in caso di successo che in caso di errore) passate in input.\r\n * @param endPointData Cofigurazione dell'endpoint da chiamare.\r\n * @param dynamicModuleParams Array dei parametri aggiunti dal modulo dinamico a quelli già configurati\r\n * (ad esempio il record o la form da salvare oppure l'ID per recuperare una particolare entità).\r\n * @param callback Metodo da eseguire in caso di successo dopo la chiamata http.\r\n * NOTA: in input viene passata la risposta della chiamata stessa.\r\n * @param errorCallBack Metodo da eseguire in caso di errore dopo la chiamata http.\r\n * NOTA: in input viene passato l'errore generato della chiamata stessa.\r\n */\r\n public RunEndPointCall(\r\n endPointData: EndPointData,\r\n dynamicModuleParams: Array<EndPointDataParams> = null,\r\n callback: (e: Form | Array<Form> | Record | Array<Record> | DynAttachment | Array<DynAttachment> | string) => void = null,\r\n errorCallBack: (err: unknown) => void = null\r\n ): void {\r\n this.spinnerService.addRequestCounter();\r\n\r\n let url = `${endPointData.Url}`;\r\n let queryParams: string = null;\r\n const bodyParams = {\r\n AdditionalParams: {},\r\n };\r\n\r\n //#region mergeParam\r\n // unisco i dati di default definiti nella configurazione della chiamata con i dati che imposto nella chiamata specifica\r\n if (endPointData.Params == undefined || endPointData.Params == null) {\r\n endPointData.Params = [];\r\n }\r\n if (dynamicModuleParams == undefined || dynamicModuleParams == null) {\r\n dynamicModuleParams = [];\r\n }\r\n\r\n const mergedParams: Array<EndPointDataParams> = [...endPointData.Params];\r\n\r\n dynamicModuleParams.forEach((obj) => {\r\n const existingIndex = mergedParams.findIndex(\r\n (item) => item.ParamName === obj.ParamName\r\n );\r\n\r\n if (existingIndex !== -1) {\r\n mergedParams[existingIndex].ParamValue = obj.ParamValue;\r\n mergedParams[existingIndex].ParamType = obj.ParamType;\r\n } else {\r\n mergedParams.push(obj);\r\n }\r\n });\r\n\r\n if (mergedParams) {\r\n mergedParams.forEach((param) => {\r\n switch (param.ParamType) {\r\n case ParamTypeEnum[\"Query param\"]: {\r\n const stringParam: string =\r\n param.ParamName + \"=\" + param.ParamValue;\r\n queryParams =\r\n (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In route\"]: {\r\n url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In Body\"]: {\r\n bodyParams[param.ParamName] = param.ParamValue;\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n //#endregion mergeParam\r\n\r\n //#region addDefaultParams\r\n // Se nella configurazione sono stati definiti parametri da aggiungere alla chiamata questi vengono ciclati\r\n // e aggiunti nel punto in cui devono essere usati.\r\n // if (endPointData.Params) {\r\n // endPointData.Params.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams.AdditionalParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // }\r\n //#endregion addDefaultParams\r\n\r\n //#region addSpecificParams\r\n // Se sono stati passati parametri da aggiungere alla chiamata definiti all'interno del modulo dinamico\r\n // vengono ciclati e aggiunti nel punto in cui devono essere usati dopo quelli definiti nella configurazione.\r\n // if (dynamicModuleParams) {\r\n // dynamicModuleParams.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // })\r\n // }\r\n //#endregion addSpecificParams\r\n\r\n if (queryParams != null) {\r\n url =\r\n (url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url) +\r\n \"?\" +\r\n queryParams;\r\n }\r\n\r\n this.http\r\n .request(endPointData.RequestMethod, url, {\r\n headers: endPointData.Token\r\n ? { Authorization: endPointData.Token }\r\n : null,\r\n body: ![RequestMethodEnum.DELETE, RequestMethodEnum.GET].includes(\r\n endPointData.RequestMethod\r\n )\r\n ? bodyParams\r\n : null,\r\n })\r\n .subscribe(\r\n (res: Form | Record | Array<Record>) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (callback) {\r\n callback(res);\r\n }\r\n },\r\n (error) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (errorCallBack) {\r\n errorCallBack(error);\r\n }\r\n EqpDynamicModuleDialogService.Error(error.message);\r\n throw new Error(error.message);\r\n //GlobalService.debugLog(\"RunEndPointCall - subscribe - end\");\r\n }\r\n );\r\n\r\n }\r\n\r\n \r\n static base64ToBlob(b64Data, contentType='', sliceSize=512) {\r\n let byteCharacters = atob(b64Data);\r\n let byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n let slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n let byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n let byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n let blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n}\r\n","export enum DynamicModuleFilterResultViewModeEnum {\r\n EXTERNAL_ONLY = 0,\r\n INTERNAL_LISTVIEW = 1,\r\n INTERNAL_EQPTABLE = 2\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { SpeechToTextDirective } from \"../../lib/directives/speech-to-text/speech-to-text.directive\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalService {\r\n\r\n public static debugMode = false;\r\n \r\n //#region variabili microfono\r\n static isSpeechToTextStarted = false\r\n static speechDirective : SpeechToTextDirective\r\n //#endregion variabili microfono\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n static debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element);\r\n }\r\n }\r\n\r\n //key1|value1 ; key2 | value2\r\n static stringToValuePairs(valueString: string): { [key: string]: string } {\r\n const valuePairs: { [key: string]: string } = {};\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n return valuePairs;\r\n }\r\n}\r\n","export class Record {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n AnswerDate: string;\r\n HTMLreadableValues: string;\r\n AdditionalParams: any;\r\n AdditionalInfo: any;\r\n [key: string]: any;\r\n FK_InsertUser: any; // int o string\r\n InsertDate: Date;\r\n FK_UpdateUser: any; // int o string\r\n UpdateDate: Date;\r\n}\r\n\r\nexport class DynRecord {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n Values: { [key: string]: any; } = {};\r\n SerializedValues: string;\r\n HTMLreadableValues: string;\r\n AnswerDate: string;\r\n AdditionalParams: string;\r\n AdditionalInfo: any;\r\n PrefilterParams: string;\r\n FK_InsertUser: any; // int o string\r\n InsertDate: Date;\r\n FK_UpdateUser: any; // int o string\r\n UpdateDate: Date;\r\n}\r\n\r\nexport class RecordButton {\r\n\tpublic icon: string;\r\n\tpublic text: string;\r\n\tpublic visible: boolean;\r\n\tpublic fn: Function;\r\n\tpublic extraClass: string; \r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Rappresenta la configurazione di un campo Data o Data e ora, o solo ora */\r\nexport class DateField extends BaseField {\r\n IsOnlyDate: DateTimeTypeEnum;\r\n MinDate: Date;\r\n MaxDate: Date;\r\n DateFormat: string =\"dd/MM/YYYY\";\r\n}\r\n\r\nexport enum DateTimeTypeEnum {\r\n \"Solo data\" = 1,\r\n \"Solo orario\" = 2,\r\n \"Data e ora\" = 3\r\n}","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ɵɵNgOnChangesFeature,\r\n ChangeDetectorRef,\r\n} from \"@angular/core\";\r\nimport { IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n NumberColumnPipe,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { AttachmentField } from \"../../../../models/fields/attachmentField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../../../../models/fields/listValueField.model\";\r\nimport { NumericField } from \"../../../../models/fields/numericField.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../../models/endPointConfiguration.model\";\r\nimport { EqpDynamicModuleDialogService } from \"./../../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n\r\n\r\n@Component({\r\n selector: \"list-form-record\",\r\n templateUrl: \"list-form-record.component.html\",\r\n styleUrls: [\"./list-form-record.component.scss\"],\r\n})\r\nexport class ListFormRecordComponent implements OnInit, OnChanges {\r\n\r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // l'una o l'altra per due modalità d'uso\r\n @Input() formID: string;\r\n @Input() form: Form = null; // boh ma c'era prima\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n loader: boolean = false;\r\n\r\n @Output() onViewRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAddViewEditRecord: EventEmitter<{record: Record;onlyView: boolean;}> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n \r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAfterDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void { \r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n // this.values = this.configurations.values\r\n GlobalService.debugLog('list-form-record - ngOnInit - configurations', this.configurations);\r\n\r\n this.getFormByID();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n GlobalService.debugLog('list-form-record - changes', changes);\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n // if (changes['configurations'] != undefined && changes['configurations'].firstChange == false) {\r\n // this.configurations.values = changes['configurations'].currentValue;\r\n // this.reloadTables();\r\n // }\r\n }\r\n\r\n async getFormByID(id: string = this.formID) {\r\n GlobalService.debugLog('list-form-record - getFormByID', this.form);\r\n\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.configureColumns();\r\n },\r\n (err) => {}\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n try{\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n if(this.configurations.userID == null){ \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n } else { \r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ];\r\n \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n \r\n }\r\n }\r\n } catch(e){\r\n console.error('exception', e)\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n this.columns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [],\r\n },\r\n ];\r\n\r\n if (this.defaultListActions.view == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Visualizza\",\r\n icon: \"info\",\r\n fn: (element, index, col) => this.viewRecord(element),\r\n });\r\n }\r\n if (this.defaultListActions.edit == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.viewOrEditRecord(element, false),\r\n });\r\n }\r\n if (this.defaultListActions.duplicate == true) {\r\n /*this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateRecord(element),\r\n });*/\r\n }\r\n if (this.defaultListActions.delete == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteRecord(element),\r\n });\r\n }\r\n\r\n this.externalButtons.forEach((button) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: button.text,\r\n icon: button.icon,\r\n fn: (element, index, col) => button.fn(),\r\n });\r\n });\r\n\r\n this.createAdditionalActions();\r\n this.createColumnsFromFormFields();\r\n this.getRecordsByFormID();\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n * definite dall'utente all'interno della Form.\r\n */\r\n private createAdditionalActions() {\r\n GlobalService.debugLog('list-form-record - createAdditionalActions', this.form);\r\n\r\n if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n this.form.ActionsOnRecord.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n ).forEach((action) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: action.Name,\r\n icon: action.Icon,\r\n fn: (element, index, col) => {\r\n const rec = element;\r\n const ctx = UtilityHelperService.context;\r\n eval(action.Action);\r\n // TODO: salvare le modifiche\r\n },\r\n });\r\n });\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n * seleziona i primi 6.\r\n */\r\n private createColumnsFromFormFields() {\r\n GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n\r\n var fieldsForColumns: Array<BaseField>;\r\n if (this.form.Fields.find((f) => f.InListView)) {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n } else {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n }\r\n fieldsForColumns\r\n .sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n )\r\n .forEach((field) => {\r\n this.columns.push(this.createFieldColumn(field));\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n * @param field BaseField per cui creare la colonna nella eqp-table\r\n * @returns Restituisce una ConfigColumn per la eqp-table\r\n */\r\n private createFieldColumn(field: BaseField): ConfigColumn {\r\n var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Booleano\"]:\r\n column.type = TypeColumn.Boolean;\r\n column.booleanValues = {\r\n false: '<i class=\"fa fa-times error-color\"></i>',\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n };\r\n column.styles = {\r\n flex: \"0 0 7%\",\r\n cellAlignment: CellAlignmentEnum.CENTER,\r\n };\r\n break;\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (\r\n (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n ) {\r\n column.type = TypeColumn.Date;\r\n if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n ) {\r\n column.format = \"dd/MM/yyyy HH:mm\";\r\n } else if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n ) {\r\n column.format = (field as DateField).DateFormat\r\n ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n : \"dd/MM/yyyy\";\r\n }\r\n }\r\n break;\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((field as NumericField).CurrencySymbol) {\r\n column.numberPipe = NumberColumnPipe.CURRENCY;\r\n column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n } else if (!(field as NumericField).IsInteger) {\r\n column.numberPipe = NumberColumnPipe.DECIMAL;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Allegato\"]:\r\n case FieldTypeEnum[\"Immagine\"]:\r\n\r\n /*\r\n column.value = (element: Record) => {\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition &&\r\n (field as ImageField).AttachDefinition.IsMultiAttach)\r\n ) {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)\r\n .map((a) => a.FileName)\r\n .join(\", \")\r\n : null;\r\n } else {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n : null;\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n */\r\n \r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n column.value = (element: Record) => {\r\n if ((field as ListValueField).IsMultiChoiche) {\r\n if (!element[field.Name] || element[field.Name].length == 0) {\r\n return null;\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs)\r\n .filter((k) =>\r\n element[field.Name].includes(\r\n (field as ListValueField).ValuePairs[k]\r\n )\r\n )\r\n .join(\", \");\r\n }\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs).find(\r\n (k) =>\r\n (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n );\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n break;\r\n case FieldTypeEnum[\"Lookup\"]:\r\n // TODO\r\n break;\r\n }\r\n return column;\r\n }\r\n\r\n viewRecord(record: Record){\r\n this.onViewRecord.emit(record);\r\n }\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n private viewOrEditRecord(record: Record, onlyView: boolean) {\r\n this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record) {\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n}\r\n","<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->","import { Injectable } from \"@angular/core\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n })\r\nexport class dbDateService {\r\n\r\n //#region datetime\r\n /**\r\n * Parse date to visualize as a string\r\n */\r\n parseDate(date: Date): string {\r\n let newYear: number = date.getFullYear();\r\n let newMonth: number = date.getMonth() + 1;\r\n let newMonthString: string;\r\n if (newMonth < 10) {\r\n newMonthString = \"0\" + newMonth.toString();\r\n } else {\r\n newMonthString = newMonth.toString();\r\n }\r\n let newDay: number = date.getDate();\r\n let newDayString: string;\r\n if (newDay < 10) {\r\n newDayString = \"0\" + newDay.toString();\r\n } else {\r\n newDayString = newDay.toString();\r\n }\r\n let newHour: number = date.getHours();\r\n let newHourString: string;\r\n if (newHour < 10) {\r\n newHourString = \"0\" + newHour.toString();\r\n } else {\r\n newHourString = newHour.toString();\r\n }\r\n let newMinute: number = date.getMinutes();\r\n let newMinuteString: string;\r\n if (newMinute < 10) {\r\n newMinuteString = \"0\" + newMinute.toString();\r\n } else {\r\n newMinuteString = newMinute.toString();\r\n }\r\n let dateString = newDayString + \"/\" + newMonthString + \"/\" + newYear.toString() + \" \" + newHourString + \":\" + newMinuteString;\r\n return dateString\r\n }\r\n\r\n parseTime(date: Date): string { // parse date to get only the time\r\n let newHour: number = date.getHours();\r\n let newHourString: string;\r\n if (newHour < 10) {\r\n newHourString = \"0\" + newHour.toString();\r\n } else {\r\n newHourString = newHour.toString();\r\n }\r\n let newMinute: number = date.getMinutes();\r\n let newMinuteString: string;\r\n if (newMinute < 10) {\r\n newMinuteString = \"0\" + newMinute.toString();\r\n } else {\r\n newMinuteString = newMinute.toString();\r\n }\r\n let timeString = newHourString + \":\" + newMinuteString;\r\n return timeString\r\n }\r\n\r\n addZeroesOnData(numero: number): string {\r\n let numerostring = \"\";\r\n if (numero < 10) {\r\n numerostring = \"0\" + numero.toString();\r\n } else {\r\n numerostring = numero.toString();\r\n }\r\n return numerostring;\r\n }\r\n\r\n parseDatefromDB(dirtyDateMeasurement): Date {\r\n if (this.isDateFromServer(dirtyDateMeasurement)) {\r\n let dirtyDate: string[] = dirtyDateMeasurement.toString().split(\"T\");\r\n let dirtyHour: string[] = dirtyDate[1].split(\".\");\r\n let yearMonthDay: string[] = dirtyDate[0].split(\"-\");\r\n let hourMinuteSecond: string[] = dirtyHour[0].split(\":\");\r\n let date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]), parseInt(hourMinuteSecond[1]));\r\n let gmtString = date.toString().split(\" \")[5].split(\"T\")[1];\r\n let hour: string = \"\";\r\n let minute: string = \"\";\r\n for (let j = 0; j < gmtString.length; j++) {\r\n if (j == 0) {\r\n hour += gmtString[j];\r\n minute += gmtString[j];\r\n }\r\n if (j > 0 && j < 3) {\r\n hour += gmtString[j];\r\n }\r\n if (j > 2) {\r\n minute += gmtString[j];\r\n }\r\n }\r\n let hourInt = parseInt(hour);\r\n let minuteInt = parseInt(minute);\r\n let newDate: Date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]) + hourInt, parseInt(hourMinuteSecond[1]) + minuteInt);\r\n return newDate\r\n }\r\n else if (this.isDateInstance(dirtyDateMeasurement)) {\r\n return dirtyDateMeasurement;\r\n }\r\n else {\r\n throw new Error(\"Not Conversion Date in parseDatefromDB\")\r\n }\r\n }\r\n\r\n\r\n isDateFromServer(date: any): boolean {\r\n const isoDateFormat = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z)?$/;\r\n return typeof date === 'string' && isoDateFormat.test(date);\r\n }\r\n\r\n isDateInstance(date: any): boolean {\r\n return date instanceof Date;\r\n }\r\n\r\n\r\n parseDatefromDBMilliseconds(dirtyDateMeasurement): Date { //get a date GMT in angular format from DB (millisecond precision)\r\n let dirtyDate: string[] = dirtyDateMeasurement.toString().split(\"T\");\r\n let dirtyHour: string[] = dirtyDate[1].split(\".\");\r\n let yearMonthDay: string[] = dirtyDate[0].split(\"-\");\r\n let hourMinuteSecond: string[] = dirtyHour[0].split(\":\");\r\n let date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]), parseInt(hourMinuteSecond[1]));\r\n let gmtString = date.toString().split(\" \")[5].split(\"T\")[1];\r\n let hour: string = \"\";\r\n let minute: string = \"\";\r\n for (let j = 0; j < gmtString.length; j++) {\r\n if (j == 0) {\r\n hour += gmtString[j];\r\n minute += gmtString[j];\r\n }\r\n if (j > 0 && j < 3) {\r\n hour += gmtString[j];\r\n }\r\n if (j > 2) {\r\n minute += gmtString[j];\r\n }\r\n }\r\n let hourInt = parseInt(hour);\r\n let minuteInt = parseInt(minute);\r\n let newDate: Date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]) + hourInt, parseInt(hourMinuteSecond[1]) + minuteInt, parseInt(hourMinuteSecond[2]), parseInt(dirtyHour[1]));\r\n\r\n return newDate\r\n }\r\n\r\n prepareHourforDB(dirtyHour: Date): Date {\r\n let hourMinutes = dirtyHour.toString().split(\":\")\r\n let date = new Date();\r\n date.setHours(parseInt(hourMinutes[0]))\r\n date.setMinutes(parseInt(hourMinutes[1]))\r\n date.setSeconds(0)\r\n date.setMilliseconds(0)\r\n return date\r\n }\r\n\r\n parseForHour(allMinutes: number): number {\r\n let dirtyHours = allMinutes / 60;\r\n let hours = Math.floor(dirtyHours);\r\n let dirtyMinutes = dirtyHours - hours;\r\n let minutes = this.roundDecimals(dirtyMinutes * 0.6, 2);\r\n let finalHours = hours + minutes;\r\n return finalHours\r\n }\r\n //#endregion datetime\r\n\r\n\r\n /**\r\n * Rounds a number to the our preferred number of decimal places.\r\n * @param number the number we want to round\r\n * @param decimals how many decimal places we want the rounded number to have\r\n * @returns the rounded number\r\n */\r\n roundDecimals(number: number, decimals: number): number {\r\n return Number(number.toFixed(decimals));\r\n }\r\n}","export enum LogicOperatorNumeric {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorDate {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorText {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \"LIKE\" = 3,\r\n \"NOT LIKE\" = 4,\r\n}\r\n\r\nexport enum LogicOperatorBoolean {\r\n \"Si\" = 9,\r\n \"No\" = 10\r\n}\r\n\r\nexport enum LogicOperatorListValue {\r\n \"CONTIENE ALMENO UNO\" = 11,\r\n \"CONTIENE TUTTI\" = 12,\r\n}\r\n\r\nexport enum LogicOperatorImageSelector {\r\n \"=\" = 1,\r\n \"!=\" = 2\r\n}\r\n\r\nexport enum LogicOperator {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \"LIKE\" = 3,\r\n \"NOT LIKE\" = 4, \r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n \"Si\" = 9,\r\n \"No\" = 10,\r\n \"CONTIENE ALMENO UNO\" = 11,\r\n \"CONTIENE TUTTI\" = 12, \r\n}","import { FieldTypeEnum, BaseField } from './baseField.model';\r\nimport { LogicOperatorBoolean, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText, LogicOperatorDate, LogicOperatorImageSelector, LogicOperator } from \"./logicOperator.model\";\r\nimport { Record } from '../models/record.model';\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class Trigger {\r\n CID: string;\r\n description: string;\r\n execution: string;\r\n conditions: Array<TriggerCondition>;\r\n formulas: any = {};\r\n\r\n constructor(){\r\n this.CID = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}\r\n\r\nexport class TriggerCondition {\r\n CID: string;\r\n Field: BaseField;\r\n record: Record = new Record();\r\n logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector | LogicOperator\r\n booleanlogicoperator: BooleanLogicOperatorType\r\n\r\n constructor(){\r\n this.CID = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}\r\n\r\nexport class TriggerProperty {\r\n type: TriggerPropertyTypeEnum;\r\n value: string;\r\n tooltip: string;\r\n\r\n constructor(type){\r\n this.type = type;\r\n }\r\n}\r\n\r\nexport enum TriggerPropertyTypeEnum {\r\n STRING = 1,\r\n DMMODULE = 2\r\n}\r\n\r\nexport class Condition{\r\n fieldType:FieldTypeEnum;\r\n key: string;\r\n value: string;\r\n logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector\r\n booleanlogicoperator: BooleanLogicOperatorType\r\n}\r\n\r\nexport enum BooleanLogicOperatorType {\r\n \"AND\" = 1,\r\n \"AND NOT\" = 2,\r\n \"OR\" = 3,\r\n \"OR NOT\" = 4\r\n}\r\n\r\nexport class FireTrigger {\r\n form: Form;\r\n trigger: Trigger;\r\n record: Record;\r\n formulas: any;\r\n userPatient: string;\r\n userMedicalExamination: number;\r\n}","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n } from \"@angular/core\";\r\n import { interval, Subscription } from \"rxjs\";\r\n import { GlobalService } from \"../../services/global.service\";\r\n \r\n declare var webkitSpeechRecognition: any;\r\n \r\n /* ESEMPIO D'USO\r\n \r\n <textarea\r\n [(ngModel)]=\"text\"\r\n ></textarea>\r\n \r\n <mat-icon\r\n *ngIf=\"true\" <!-- Senza NGIF non funziona -->\r\n style=\"cursor: pointer; border-radius: 80px; padding: 5px;\"\r\n [SpeechToText]\r\n [(bindedText)]=\"text\"\r\n >\r\n keyboard_voice\r\n </mat-icon>\r\n \r\n */\r\n \r\n @Directive({\r\n selector: \"[SpeechToText]\",\r\n })\r\n export class SpeechToTextDirective implements OnDestroy{\r\n \r\n debug = false;\r\n \r\n @Input(\"bindedText\") bindedText: string = \"\";\r\n @Output() bindedTextChange: EventEmitter<string> = new EventEmitter<string>();\r\n beginSentence: string = \"\";\r\n // bindedText = \"\";\r\n private domElement: HTMLElement;\r\n \r\n pausedClass: string = \"keyboard_paused\";\r\n speakingClass: string = \"keyboard_speaking\";\r\n \r\n recognition;\r\n tempWords: any;\r\n transcript_arr = [];\r\n confidence_arr = [];\r\n \r\n // isStarted = false; //<< this Flag to check if the user stop the service\r\n isStoppedSpeechRecog = false;\r\n isStoppedAutomatically = true; //<< this Flag to check if the service stopped automaticically.\r\n \r\n timeInterval = interval(50);\r\n subscription: Subscription;\r\n \r\n @HostListener(\"click\") SpeechToggle() {\r\n this.SpeechToTextToggler();\r\n }\r\n \r\n constructor(\r\n private elementRef: ElementRef\r\n ) {\r\n \r\n this.domElement = this.elementRef.nativeElement as HTMLElement;\r\n \r\n this.printDebug(window.navigator.userAgent);\r\n \r\n try {\r\n // questa operazione fallisce se non c'è webkit\r\n this.recognition = new webkitSpeechRecognition();\r\n \r\n this.printDebug(this.recognition);\r\n \r\n this.recognition.continuous = true;\r\n this.recognition.interimResults = true;\r\n this.recognition.lang = \"it-IT\";\r\n \r\n this.recognition.addEventListener(\"result\", (e: any) => {\r\n const transcript = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.transcript)\r\n .join(\"\");\r\n \r\n this.printDebug(\"construcor transcript: \" + transcript);\r\n \r\n \r\n this.transcript_arr.push(transcript);\r\n this.tempWords = transcript;\r\n \r\n const confidence = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.confidence)\r\n .join(\"\");\r\n this.confidence_arr.push(confidence);\r\n });\r\n \r\n this.recognition.addEventListener(\"end\", (condition: any) => {\r\n //this.wordConcat();\r\n if (this.isStoppedAutomatically) {\r\n this.recognition.stop();\r\n this.recognition.start();\r\n this.isStoppedAutomatically = true;\r\n }\r\n });\r\n } catch (error) {\r\n \r\n this.printDebug(error);\r\n \r\n this.domElement.style.display = \"none\";\r\n }\r\n \r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.printDebug(\"speech onDestroy\");\r\n \r\n if(this.recognition){\r\n this.recognition.abort();\r\n }\r\n }\r\n \r\n SpeechToTextToggler() {\r\n if (!GlobalService.isSpeechToTextStarted) {\r\n \r\n this.printDebug(\"start\");\r\n \r\n this.beginSentence = this.bindedText;\r\n if (\r\n this.bindedText == null ||\r\n this.bindedText == undefined ||\r\n this.bindedText == \"\"\r\n ) {\r\n this.beginSentence = \"\";\r\n this.bindedText = \"\";\r\n }\r\n this.transcript_arr = [];\r\n this.confidence_arr = [];\r\n \r\n let newtext = \"\";\r\n this.start();\r\n //this.isStillRecoginze = this.start() === true ? true : false;\r\n this.subscription = this.timeInterval.subscribe((val) => {\r\n if (this.bindedText == null || this.bindedText == undefined) {\r\n this.bindedText =\r\n this.beginSentence +\r\n this.transcript_arr[this.transcript_arr.length - 1];\r\n this.bindedTextChange.emit(this.bindedText);\r\n } else {\r\n newtext = this.transcript_arr[this.transcript_arr.length - 1];\r\n if (newtext != undefined) {\r\n this.bindedTextChange.emit(this.beginSentence + newtext);\r\n this.transcript_arr[this.transcript_arr.length - 1];\r\n } else {\r\n this.bindedTextChange.emit(this.bindedText);\r\n }\r\n }\r\n });\r\n } else {\r\n if(GlobalService.speechDirective === this){\r\n this.printDebug(\"stop\");\r\n this.printDebug(\"binded: \" + this.bindedText);\r\n \r\n this.transcript_arr = [];\r\n this.stop();\r\n this.subscription.unsubscribe();\r\n } else {\r\n this.printDebug(\"stop other\");\r\n GlobalService.speechDirective.SpeechToTextToggler();\r\n let interval = setInterval(() => {\r\n if(GlobalService.speechDirective == null){\r\n this.SpeechToTextToggler();\r\n clearInterval(interval)\r\n }\r\n }, 100);\r\n }\r\n }\r\n }\r\n \r\n private start() {\r\n if (!GlobalService.isSpeechToTextStarted) {\r\n this.elementRef.nativeElement.classList.remove(this.pausedClass);\r\n this.elementRef.nativeElement.classList.add(this.speakingClass);\r\n this.recognition.start();\r\n GlobalService.isSpeechToTextStarted = true;\r\n GlobalService.speechDirective = this;\r\n }\r\n return true;\r\n }\r\n private stop() { \r\n if (GlobalService.isSpeechToTextStarted) {\r\n this.elementRef.nativeElement.classList.remove(this.speakingClass);\r\n this.elementRef.nativeElement.classList.add(this.pausedClass);\r\n this.isStoppedAutomatically = false;\r\n this.wordConcat();\r\n this.recognition.stop();\r\n GlobalService.isSpeechToTextStarted = false;\r\n GlobalService.speechDirective = null;\r\n this.transcript_arr = [];\r\n }\r\n return false;\r\n }\r\n \r\n private wordConcat() {\r\n this.bindedText = this.bindedText + \". \";\r\n // this.bindedText = this.bindedText + \" \" + this.tempWords + \".\";\r\n // this.tempWords = \"\";\r\n }\r\n \r\n private printDebug(message){\r\n if(this.debug){\r\n console.log(message);\r\n }\r\n }\r\n }\r\n ","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../models/fields/textField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'text-field-template',\r\n templateUrl: './text-field-template.component.html',\r\n styleUrls: ['./text-field-template.component.scss']\r\n})\r\nexport class TextFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n \r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n \r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n \r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n if (!this.field.VisibleIf) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <input\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [type]=\"getInputType()\"\r\n [formControlName]=\"field.Name\"\r\n [readonly]=\"field.Readonly || (field.Formula != null && field.Formula != '')\"\r\n [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onRecordValueChange()\"\r\n />\r\n <mat-error\r\n *ngIf=\"\r\n !field.FormFormGroup.valid &&\r\n field.FormFormGroup.controls[field.Name].touched &&\r\n !field.Readonly\r\n \"\r\n >\r\n Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n {{ field.MaxLenght }}\r\n </mat-error>\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >keyboard_voice</mat-icon\r\n >\r\n</mat-form-field>\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class BooleanField extends BaseField {\r\n /**Se true il boolean accetta anche il valore N/A (non assegnato) */\r\n IsTristate: boolean;\r\n PresetationType: BoolPresentantioEnum;\r\n}\r\n\r\nexport enum BoolPresentantioEnum {\r\n \"Checkbox\" = 1,\r\n \"Toggle\" = 2,\r\n \"Radio button\" = 3,\r\n // \"Stringa true o false\" = 3,\r\n // \"Numerico 0 o 1\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { BooleanField, BoolPresentantioEnum } from '../../../../models/fields/booleanField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'boolean-field-template',\r\n templateUrl: './boolean-field-template.component.html',\r\n styleUrls: ['./boolean-field-template.component.scss']\r\n})\r\nexport class BooleanFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n }\r\n \r\n ngOnInit(): void {\r\n if (this.record[this.field.Name] == undefined || this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.IsTristate ? null : false;\r\n }\r\n\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n } \r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<div [formGroup]=\"field.FormFormGroup\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { ModeEnum, TimeTypeEnum } from \"tmw-picker\";\r\n\r\n@Component({\r\n selector: 'date-field-template',\r\n templateUrl: './date-field-template.component.html',\r\n styleUrls: ['./date-field-template.component.scss']\r\n})\r\nexport class DateFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n modes = ModeEnum;\r\n timeType = TimeTypeEnum;\r\n mode: ModeEnum;\r\n\r\n showSeconds: boolean = false;\r\n outputFormat: string = null;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n this.setOutputFormat();\r\n this.updateField();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n } \r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange(ev) {\r\n this.field.FieldValue=ev;\r\n this.field.FormFormGroup.get([this.field.Name]).setValue(ev);\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n setOutputFormat(){\r\n\r\n if (this.field.DateFormat != null){\r\n this.outputFormat = this.field.DateFormat \r\n } else {\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n this.outputFormat = 'DD/MM/YYYY';\r\n }\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n this.outputFormat = 'DD/MM/YYYY HH:mm';\r\n } \r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n this.outputFormat = 'HH:mm';\r\n } \r\n }\r\n\r\n if (this.outputFormat.indexOf(\"ss\") != -1){\r\n this.showSeconds = true;\r\n }\r\n \r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.mode = ModeEnum.DATEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.mode = ModeEnum.TIMEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.mode = ModeEnum.DATETIMEPICKER;\r\n break;\r\n }\r\n }\r\n}\r\n","<tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onRecordValueChange($event)\" [outputFormat]=\"outputFormat\" [showSeconds]=\"showSeconds\">\r\n</tmw-datetimepicker>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextareaField } from '../../../../models/fields/textareaField.model';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'textarea-field-template',\r\n templateUrl: './textarea-field-template.component.html',\r\n styleUrls: ['./textarea-field-template.component.scss'],\r\n})\r\nexport class TextareaFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n isStillRecoginze = false;\r\n @Input() field: TextareaField;\r\n @Input() record: Record;\r\n source = interval(200);\r\n newtext: string;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n subscription: Subscription;\r\n\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n constructor() {\r\n }\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n } \r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <textarea\r\n class=\"pt-2 mt-2\"\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [placeholder]=\"field.Description\"\r\n [rows]=\"field.Rows\"\r\n [formControlName]=\"field.Name\"\r\n [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onRecordValueChange()\"\r\n ></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n !field.FormFormGroup.valid &&\r\n field.FormFormGroup.controls[field.Name].touched &&\r\n !field.Readonly\r\n \"\r\n >\r\n Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n {{ field.MaxLenght }}\r\n </mat-error>\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >\r\n keyboard_voice\r\n </mat-icon>\r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { Validators } from '@angular/forms';\r\nimport { GlobalService } from '../../../../services/global.service';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'numeric-field-template',\r\n templateUrl: './numeric-field-template.component.html',\r\n styleUrls: ['./numeric-field-template.component.scss']\r\n})\r\nexport class NumericFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nisDirty: boolean = false;\r\n\r\nconstructor() {\r\n}\r\n\r\n ngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers(); \r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n ngOnChanges(changes: SimpleChanges) {\r\n \r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n \r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n //console.log(\"field modified - original value\",this.field.Name,this.record[this.field.Name]);\r\n //this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n //console.log(\"field modified - final value\",this.field.Name,this.record[this.field.Name]);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n if (this.isDirty){\r\n // this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n this.isDirty = false;\r\n }\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare eqp-numeric\r\n */\r\n private configureEqpNumericOptions() {\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined && this.field.ThousandsSeparator.trim().length > 0)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo di aggiunta dei validator dell'input\r\n */\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n setDirty(){\r\n this.isDirty = true;\r\n }\r\n}","<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n</mat-form-field>","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Lista di valori */\r\nexport class ListValueField extends BaseField {\r\n /**\r\n * Lista di valori ordinata. La parte \"Value\", viene utilizzata in modi diversi a seconda del tipo di presentazione, e/o \r\n * come valore relazionato nelle formule\r\n */\r\n ValuePairs: { [key: string]: any};\r\n\r\n /**\r\n * stringa da parsare chiave valore: chiave1 | valore 1; chiave2|valore 2\r\n */\r\n ValueString: string;\r\n\r\n /**Se true è l'utente può scegliere più di un valore */\r\n IsMultiChoiche: boolean;\r\n\r\n /**Modalità di presentazione */\r\n PresentationMode: ListPresentationEnum;\r\n\r\n}\r\n\r\nexport enum ListPresentationEnum {\r\n \"Combo box\" = 1,\r\n \"Radio button\" = 2,\r\n \"Pulsante con testo\" = 3\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../..//services/global.service';\r\n\r\n@Component({\r\n selector: 'list-value-field-template',\r\n templateUrl: './list-value-field-template.component.html',\r\n styleUrls: ['./list-value-field-template.component.scss']\r\n})\r\nexport class ListValueFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n ListPresentationEnum = ListPresentationEnum;\r\n arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n ngOnInit(): void {\r\n GlobalService.debugLog(\"combobox filed\", this.field);\r\n this.updateField();\r\n this.setArrayData();\r\n if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {\r\n this.record[this.field.Name] = [];\r\n }\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n // devo controllare se ho la stringa (ValueString) o il dizionario (ValuePairs)\r\n GlobalService.debugLog(\"list-value-field updateField\", this.field)\r\n if (this.field.Formula) {\r\n GlobalService.debugLog(\"list-value-field - updateField - Formula\")\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n\r\n // for (var key in matches) {\r\n // if(UtilityHelperService.isNumeric(temp[key])){\r\n // this.field.ValuePairs[key] = Number(temp[key]);\r\n // }else{\r\n // this.field.ValuePairs[key] = temp[key];\r\n // }\r\n // }\r\n\r\n // this.setArrayData();\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValuePairs\")\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValueString\")\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n }\r\n\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando viene selezionata un'opzione nella visualizzazione a button\r\n * @param data Rappresenta l'oggetto selezionato\r\n */\r\n buttonSelectClick(data: { Key: string, Value: string, Selected?: boolean, ImgUrl?: string }) {\r\n data.Selected = !data.Selected;\r\n if (this.field.IsMultiChoiche) {\r\n this.updateSelected(false);\r\n } else {\r\n this.arrayData.filter(d => d.Key != data.Key && d.Value != data.Value).forEach(d => d.Selected = false);\r\n\r\n if (UtilityHelperService.isNumeric(data.Value)) {\r\n\r\n this.record[this.field.Name] = Number(data.Value);\r\n }\r\n else {\r\n this.record[this.field.Name] = data.Value;\r\n }\r\n\r\n }\r\n this.onRecordValueChange();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il/i valore/i selezionato/i dall'utente.\r\n * @param emitChange Se true scatena l'evento di output della modifica del valore di record\r\n */\r\n updateSelected(emitChange: boolean = true) {\r\n this.record[this.field.Name] = this.arrayData.filter(data => data.Selected).map(data => data.Value);\r\n this.setFormControlValue();\r\n if (emitChange) {\r\n this.onRecordValueChange();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n if (this.field.ValuePairs != null){\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n }\r\n }\r\n\r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n}\r\n","<eqp-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [isRequired]=\"field.Required\" [isDisabled]=\"field.FormFormGroup.disabled\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\"\r\n (ngModelInputChange)=\"onRecordValueChange()\">\r\n</eqp-select>\r\n\r\n<div *ngIf=\"field.PresentationMode != ListPresentationEnum['Combo box']\" [formGroup]=\"field.FormFormGroup\">\r\n\r\n <mat-label class=\"mr-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description + (field.Required ? \" *\" : \"\")}} </mat-label>\r\n <!-- VISUALIZZAZIONE A RADIO BUTTON (SENZA SELEZIONE MULTIPLA) -->\r\n <mat-radio-group [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && !field.IsMultiChoiche\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"ms-3 d-block\" *ngFor=\"let data of arrayData\" [value]=\"data.Value\" color=\"primary\">\r\n {{data.Key}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX (SELEZIONE MULTIPLA) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && field.IsMultiChoiche\">\r\n <mat-checkbox [ngStyle]=\"FieldstyleObj\" class=\"mr-2\" *ngFor=\"let data of arrayData\" [disabled]=\"field.FormFormGroup.disabled\"\r\n [formControlName]=\"field.Name\" [(ngModel)]=\"data.Selected\" (ngModelChange)=\"updateSelected()\">\r\n {{data.Key}}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <!-- VISUALIZZAZIONE A PULSANTI (CON TESTO O IMMAGINI) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"[ListPresentationEnum['Pulsante con testo']].includes(field.PresentationMode)\">\r\n <button [ngStyle]=\"FieldstyleObj\" mat-raised-button color=\"primary\" class=\"btn btn-primary m-1 data-button\" *ngFor=\"let data of arrayData\"\r\n [ngClass]=\"{'selected-button': data.Selected == true}\"\r\n (click)=\"buttonSelectClick(data)\" [disabled]=\"field.FormFormGroup.disabled\">\r\n\r\n <!-- TESTO DEL PULSANTE -->\r\n <span> {{data.Key}}</span>\r\n\r\n </button>\r\n </div>\r\n\r\n</div>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class AttachmentField extends BaseField {\r\n /**Elenco delle estensioni consentite. Se vuoto usa il default (pdf) */\r\n AllowedExtensions: Array<string>;\r\n\r\n /**Se true permette l'inserimento di più allegati. In questo caso i metadati vengono rappresentati come una detail */\r\n IsMultiAttach: boolean;\r\n\r\n /**Elenco campi che possono rappresentare i metadati dell'allegato, ad esempio nome, ecc... */\r\n MetadataFields: Array<BaseField>;\r\n}\r\n\r\nexport const AvailableFileExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.pdf', key: 'application/pdf' },\r\n { value: '.doc', key: 'application/msword' },\r\n { value: '.xls', key: 'application/vnd.ms-excel' },\r\n { value: '.ppt', key: 'application/vnd.ms-powerpoint' },\r\n { value: '.docx', key: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' },\r\n { value: '.xlsx', key: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' },\r\n { value: '.pptx', key: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' },\r\n { value: '.csv', key: 'text/csv' },\r\n { value: '.txt', key: 'text/plain' },\r\n];\r\n\r\nexport const AvailableImageExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.jpg/.jpeg', key: 'image/jpeg' },\r\n { value: '.png', key: 'image/png' },\r\n { value: '.bmp', key: 'image/bmp' },\r\n { value: '.svg', key: 'image/svg+xml' },\r\n { value: '.ico', key: 'image/x-icon' },\r\n];","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { AttachmentField, AvailableFileExtensions, AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { EqpAttachmentsComponent } from '@eqproject/eqp-attachments';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { ConfigColumn, TypeColumn } from '@eqproject/eqp-table';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'attachment-field-template',\r\n templateUrl: './attachment-field-template.component.html',\r\n styleUrls: ['./attachment-field-template.component.scss']\r\n})\r\nexport class AttachmentFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent, AfterViewInit {\r\n\r\n @Input() onlyImages: boolean = false;\r\n @Input() field: AttachmentField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAttachmentsChange: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild(\"eqpAttachments\", { static: true }) eqpAttachments: EqpAttachmentsComponent;\r\n //@ViewChild('metadataColumnTemplate', { static: true }) metadataColumnTemplate: TemplateRef<any>;\r\n\r\n //metadataFormGroups: Array<UntypedFormGroup> = new Array<UntypedFormGroup>();\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n\r\n // Sempre nel caso in cui sono in modifica creo i FormGroup che rappresentano\r\n // gli eventuali metadata degli allegati recuperati.\r\n //\r\n\r\n if (!this.field.AllowedExtensions) {\r\n this.field.AllowedExtensions = AvailableFileExtensions.concat(AvailableImageExtensions).map(ext => ext.key);\r\n }\r\n this.updateField();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Dopo aver renderizzato il DOM, se il campo ammette molteplici allegati\r\n // configuro le colonne della eqp-table in eqp-attachments.\r\n // if (this.field.IsMultiAttach) {\r\n // this.configureMultiAttachmentColumns();\r\n // }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per intercettare le modifiche agli allegati caricati.\r\n * Se il campo prevede dei metadata allora per ogni allegato caricato crea un FormGroup\r\n * per gestire la validazione degli input che l'utente può/deve riempire. I FormGroup \r\n * seguono lo stesso ordine degli allegati caricati.\r\n * @param event Contiene la lista aggiornata degli Attachment caricati dall'utente.\r\n */\r\n catchAttachmentList(event) {\r\n this.record[this.field.Name] = event;\r\n\r\n // this.createMetadataFormGroups();\r\n\r\n this.setFormControlValue();\r\n this.onRecordValueChange();\r\n \r\n // Scateno un evento di output necessario al componente ImageFieldTemplate al\r\n // variare degli allegati caricati. Viene usato per aprire il dialog per disegnare\r\n // sull'immagine caricata in base alla configurazione del Field.\r\n this.onAttachmentsChange.emit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare lo stato di validazione del FormControl che rappresenta \r\n * il campo Allegato (non i metadata al suo interno). Se tra le form dei metadata\r\n * ne trova una invalida allora marca il controllo come invalido.\r\n */\r\n // updateMetadataValidity() {\r\n // if (this.metadataFormGroups.find(form => form.invalid)) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n /**\r\n * Metodo per recuperare il BaseField che rappresenta il metadata nella riga della eqp-table\r\n * in base alla colonna e alla riga. Una volta trovato il BaseField gli viene associato il \r\n * FormGroup di cui fa parte.\r\n * @param col Colonna della eqp-table.\r\n * @param row Riga della eqp-table (in questo caso eredita da IAttachment).\r\n * @returns Restituisce un BaseField per renderizzare il campo nella eqp-table degli allegati multipli.\r\n */\r\n // getFieldFromMetadata(col: ConfigColumn, row: any) {\r\n // var baseField = JSON.parse(JSON.stringify(this.field.MetadataFields.find(metadata => metadata.Name === col.key)));\r\n // baseField.FormFormGroup = this.metadataFormGroups[this.record[this.field.Name].indexOf(row)];\r\n // return baseField;\r\n // }\r\n\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere alle colonne di eqp-attachments le colonne per modificare i metadata\r\n * configurati per il campo Allegato o Immagine.\r\n */\r\n // private configureMultiAttachmentColumns() {\r\n // if (this.eqpAttachments && this.eqpAttachments.attachmentsColumns && this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.field.MetadataFields.forEach(metadata => {\r\n // this.eqpAttachments.attachmentsColumns.splice(\r\n // this.eqpAttachments.attachmentsColumns.length - 1, 0,\r\n // { key: metadata.Name, display: metadata.Label, type: TypeColumn.ExternalTemplate, externalTemplate: this.metadataColumnTemplate }\r\n // );\r\n // });\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo per creare i FormGroup che rappresentano i metadata degli allegati caricati.\r\n */\r\n // private createMetadataFormGroups() {\r\n // if (this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.metadataFormGroups = [];\r\n // if (this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n // this.record[this.field.Name].forEach(attachment => {\r\n // this.metadataFormGroups.push(this.utilityService.CreateFormFormGroup(this.field.MetadataFields, attachment, this.field.FormFormGroup.disabled, !this.field.IsMultiAttach));\r\n // });\r\n // }\r\n\r\n // this.updateMetadataValidity();\r\n // }\r\n // }\r\n}","<p *ngIf=\"!field.IsMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.IsMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.IsMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->","export const I18nFr: I18nInterface = {\r\n saveBtn: 'Enregistrer',\r\n cancelBtn: 'Annuler',\r\n\r\n loadImage: 'Charger une image depuis votre PC',\r\n loadImageUrl: 'Charger une image depuis une URL',\r\n loading: 'Chargement',\r\n loadError: 'Erreur de chargement %@',\r\n removeImage: 'Supprimer l\\'image',\r\n\r\n sizes: {\r\n small: 'Petit',\r\n medium: 'Moyen',\r\n large: 'Gros'\r\n },\r\n\r\n undo: 'Annuler',\r\n redo: 'Répter',\r\n clear: 'Effacer',\r\n\r\n colors: {\r\n black: 'Noir',\r\n white: 'Blanc',\r\n yellow: 'Jaune',\r\n red: 'Rouge',\r\n green: 'Vert',\r\n blue: 'Blue',\r\n purple: 'Violet'\r\n },\r\n\r\n tools: {\r\n brush: 'Pinceau'\r\n }\r\n};\r\n\r\nexport const I18nEn: I18nInterface = {\r\n saveBtn: 'Save',\r\n cancelBtn: 'Cancel',\r\n\r\n loadImage: 'Load image',\r\n loadImageUrl: 'Load image from URL',\r\n loading: 'Loading',\r\n loadError: 'Error loading %@',\r\n removeImage: 'Remove image',\r\n\r\n sizes: {\r\n small: 'Small',\r\n medium: 'Medium',\r\n large: 'Large'\r\n },\r\n\r\n undo: 'Undo',\r\n redo: 'Redo',\r\n clear: 'Clear',\r\n\r\n colors: {\r\n black: 'Black',\r\n white: 'White',\r\n yellow: 'Yellow',\r\n red: 'Red',\r\n green: 'Green',\r\n blue: 'Blue',\r\n purple: 'Purple',\r\n },\r\n\r\n tools: {\r\n brush: 'Brush'\r\n }\r\n};\r\n\r\nexport const i18nLanguages: { [name: string]: I18nInterface } = {\r\n fr: I18nFr,\r\n en: I18nEn\r\n};\r\n\r\nexport interface I18nInterface {\r\n saveBtn?: string;\r\n cancelBtn?: string;\r\n closeDialog?: string;\r\n\r\n loadImage?: string;\r\n loadImageUrl?: string;\r\n loading?: string;\r\n loadError?: string;\r\n removeImage?: string;\r\n\r\n sizes?: { [name: string]: string };\r\n\r\n undo?: string;\r\n redo?: string;\r\n clear?: string;\r\n\r\n colors?: { [name: string]: string };\r\n\r\n tools?: { [name: string]: string };\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { I18nEn, I18nInterface, i18nLanguages } from './i18n';\r\nimport { fabric } from 'fabric';\r\nimport { Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'tmw-image-drawer',\r\n templateUrl: './tmw-image-drawer.component.html',\r\n styleUrls: ['./tmw-image-drawer.component.scss']\r\n})\r\nexport class TmwImageDrawerComponent implements OnInit, AfterViewInit, OnChanges {\r\n\r\n @Output() closeDialog: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Input() public src?: string;\r\n @Input() public width?: number;\r\n @Input() public height?: number;\r\n\r\n @Input() public forceSizeCanvas = true;\r\n @Input() public forceSizeExport = false;\r\n @Input() public enableRemoveImage = false;\r\n @Input() public enableLoadAnotherImage = false;\r\n @Input() public enableTooltip = false;\r\n @Input() public showCancelButton = true;\r\n\r\n @Input() public inConfig?: boolean = false;\r\n\r\n // @ts-ignore\r\n @Input('i18n') public i18nUser: I18nInterface;\r\n @Input() public locale: string = 'en';\r\n\r\n @Input() public loadingTemplate?: TemplateRef<any>;\r\n @Input() public errorTemplate?: TemplateRef<any>;\r\n\r\n @Input() public outputMimeType = 'image/jpeg';\r\n @Input() public outputQuality = 0.8;\r\n\r\n @Input() public borderCss: string = 'none';\r\n\r\n @Input() public drawingSizes: { [name: string]: number } = {\r\n small: 5,\r\n medium: 10,\r\n large: 25,\r\n };\r\n\r\n @Input() public colors: { [name: string]: string } = {\r\n black: '#000',\r\n white: '#fff',\r\n yellow: '#ffeb3b',\r\n red: '#f44336',\r\n blue: '#2196f3',\r\n green: '#4caf50',\r\n purple: '#7a08af',\r\n };\r\n\r\n @Output() public save: EventEmitter<Blob> = new EventEmitter<Blob>();\r\n @Output() public loadOriginal: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public currentTool = 'brush';\r\n public currentSize = 'medium';\r\n public currentColor = 'black';\r\n public i18n: I18nInterface = I18nEn;\r\n\r\n public canUndo = false;\r\n public canRedo = false;\r\n\r\n public isLoading = true;\r\n public hasError = false;\r\n public errorMessage = '';\r\n\r\n private canvas: fabric.Canvas;\r\n private stack: fabric.Object[] = [];\r\n\r\n public colorsName: string[] = [];\r\n public drawingSizesName: string[] = [];\r\n\r\n private imageUsed?: fabric.Image;\r\n\r\n componentGuid: string;\r\n\r\n constructor() {\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.componentGuid = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.isLoading = false\r\n this.colorsName = Object.keys(this.colors);\r\n this.drawingSizesName = Object.keys(this.drawingSizes);\r\n\r\n const canvasScaledElement = document.getElementById(this.componentGuid);\r\n this.canvas = new fabric.Canvas(canvasScaledElement, {\r\n hoverCursor: 'pointer',\r\n isDrawingMode: true,\r\n });\r\n this.canvas.backgroundColor = 'white';\r\n\r\n if (this.src) {\r\n this.importPhotoFromSrc(this.src);\r\n } else {\r\n if (!this.width || !this.height) {\r\n throw new Error('No width or hight given !');\r\n }\r\n\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.on('path:created', () => {\r\n this.stack = [];\r\n this.setUndoRedo();\r\n });\r\n\r\n this.selectTool(this.currentTool);\r\n this.selectColor(this.currentColor);\r\n this.selectDrawingSize(this.currentSize);\r\n\r\n if (this.locale && i18nLanguages[this.locale.toLowerCase()]) {\r\n this.i18n = i18nLanguages[this.locale.toLowerCase()];\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.src && !changes.src.firstChange && changes.src.currentValue) {\r\n if (typeof changes.src.currentValue === 'string') {\r\n this.importPhotoFromSrc(changes.src.currentValue);\r\n } else if (changes.src.currentValue instanceof Blob) {\r\n this.importPhotoFromBlob(changes.src.currentValue);\r\n }\r\n }\r\n }\r\n\r\n // Tools\r\n public selectTool(tool: string) {\r\n this.currentTool = tool;\r\n }\r\n\r\n public selectDrawingSize(size: string) {\r\n this.currentSize = size;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.width = this.drawingSizes[size];\r\n }\r\n }\r\n\r\n public selectColor(color: string) {\r\n this.currentColor = color;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.color = this.colors[color];\r\n }\r\n }\r\n\r\n // Actions\r\n public undo() {\r\n if (this.canUndo) {\r\n const lastId = this.canvas.getObjects().length - 1;\r\n const lastObj = this.canvas.getObjects()[lastId];\r\n this.stack.push(lastObj);\r\n this.canvas.remove(lastObj);\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public redo() {\r\n if (this.canRedo) {\r\n const firstInStack = this.stack.splice(-1, 1)[0];\r\n if (firstInStack) {\r\n this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n }\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public clearCanvas() {\r\n if (this.canvas) {\r\n this.canvas.remove(...this.canvas.getObjects());\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public saveImage() {\r\n if (!this.forceSizeExport || (this.forceSizeExport && this.width && this.height)) {\r\n const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n canvasScaled.backgroundColor = 'white';\r\n\r\n new Observable<fabric.Canvas>(observer => {\r\n if (this.imageUsed) {\r\n if (this.forceSizeExport) {\r\n canvasScaled.setWidth(this.width);\r\n canvasScaled.setHeight(this.height);\r\n\r\n this.imageUsed.cloneAsImage(imageCloned => {\r\n imageCloned.scaleToWidth(this.width, false);\r\n imageCloned.scaleToHeight(this.height, false);\r\n\r\n canvasScaled.setBackgroundImage(imageCloned, (img: HTMLImageElement) => {\r\n if (!img) {\r\n observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n }\r\n\r\n observer.next(canvasScaled);\r\n observer.complete();\r\n }, {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n });\r\n } else {\r\n canvasScaled.setBackgroundImage(this.imageUsed, (img: HTMLImageElement) => {\r\n if (!img) {\r\n observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n }\r\n\r\n canvasScaled.setWidth(img.width);\r\n canvasScaled.setHeight(img.height);\r\n\r\n observer.next(canvasScaled);\r\n observer.complete();\r\n }, {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n }\r\n } else {\r\n canvasScaled.setWidth(this.width);\r\n canvasScaled.setHeight(this.height);\r\n }\r\n }).pipe(\r\n switchMap(() => {\r\n let process = of(canvasScaled);\r\n\r\n if (this.canvas.getObjects().length > 0) {\r\n const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n process = process.pipe(switchMap(() => {\r\n return new Observable<fabric.Canvas>(observerObject => {\r\n originalObject.clone((clonedObject: fabric.Object) => {\r\n clonedObject.set('left', originalObject.left * ratioX);\r\n clonedObject.set('top', originalObject.top * ratioY);\r\n clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n canvasScaled.insertAt(clonedObject, i, false);\r\n canvasScaled.renderAll();\r\n\r\n observerObject.next(canvasScaled);\r\n observerObject.complete();\r\n });\r\n });\r\n }));\r\n });\r\n }\r\n return process;\r\n }),\r\n ).subscribe(() => {\r\n canvasScaled.renderAll();\r\n canvasScaled.getElement().toBlob(\r\n (data: Blob) => {\r\n this.save.emit(data);\r\n },\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n });\r\n } else {\r\n this.canvas.getElement().toBlob(\r\n (data: Blob) => {\r\n this.save.emit(data);\r\n },\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n }\r\n }\r\n\r\n public doLoadOriginal() {\r\n this.loadOriginal.emit();\r\n }\r\n\r\n public getTextTranslated(name: string): string {\r\n let strOk = name.split('.').reduce((o, i) => o[i], this.i18n as any);\r\n\r\n if (this.i18nUser) {\r\n try {\r\n const str = name.split('.').reduce((o, i) => o[i], this.i18nUser as any);\r\n if (str) {\r\n strOk = str;\r\n }\r\n } catch (e) {\r\n // if we pass here, ignored\r\n }\r\n }\r\n\r\n if (!strOk) {\r\n console.error(name + ' translation not found !');\r\n }\r\n\r\n return strOk;\r\n }\r\n\r\n public getTooltipTranslated(name: string): string {\r\n if (this.enableTooltip) {\r\n return this.getTextTranslated(name)\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private setUndoRedo() {\r\n this.canUndo = this.canvas.getObjects().length > 0;\r\n this.canRedo = this.stack.length > 0;\r\n // this.canvas.renderAll();\r\n }\r\n\r\n public importPhotoFromFile(event: Event | any) {\r\n if (event.target.files && event.target.files.length > 0) {\r\n const file = event.target.files[0];\r\n if (file.type.match('image.*')) {\r\n this.importPhotoFromBlob(file);\r\n } else {\r\n throw new Error('Not an image !');\r\n }\r\n }\r\n }\r\n\r\n public removeImage() {\r\n if (this.imageUsed) {\r\n this.imageUsed.dispose();\r\n this.imageUsed = null;\r\n }\r\n this.canvas.backgroundImage = null;\r\n\r\n if (this.width && this.height) {\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.renderAll();\r\n }\r\n\r\n public get hasImage(): boolean {\r\n return !!this.canvas.backgroundImage;\r\n }\r\n\r\n private importPhotoFromSrc(src: string) {\r\n this.isLoading = true;\r\n let isFirstTry = true;\r\n const imgEl = new Image();\r\n imgEl.setAttribute('crossOrigin', 'anonymous');\r\n imgEl.src = src;\r\n imgEl.onerror = () => {\r\n // Retry with cors proxy\r\n if (isFirstTry) {\r\n imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n isFirstTry = false;\r\n } else {\r\n this.isLoading = false;\r\n this.hasError = true;\r\n this.errorMessage = this.getTextTranslated('loadError').replace('%@', this.src as string);\r\n }\r\n };\r\n imgEl.onload = () => {\r\n this.isLoading = false;\r\n this.imageUsed = new fabric.Image(imgEl);\r\n\r\n this.imageUsed.cloneAsImage(image => {\r\n let width = imgEl.width;\r\n let height = imgEl.height;\r\n\r\n if (this.width) {\r\n width = this.width;\r\n }\r\n if (this.height) {\r\n height = this.height;\r\n }\r\n\r\n image.scaleToWidth(width, false);\r\n image.scaleToHeight(height, false);\r\n\r\n this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n if (img) {\r\n if (this.forceSizeCanvas) {\r\n this.canvas.setWidth(width);\r\n this.canvas.setHeight(height);\r\n } else {\r\n this.canvas.setWidth(image.getScaledWidth());\r\n this.canvas.setHeight(image.getScaledHeight());\r\n }\r\n }\r\n }), {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n });\r\n };\r\n }\r\n\r\n private importPhotoFromBlob(file: Blob | File) {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = (evtReader: any) => {\r\n if (evtReader.target.readyState == FileReader.DONE) {\r\n this.importPhotoFromSrc(evtReader.target.result);\r\n }\r\n };\r\n }\r\n\r\n public importPhotoFromUrl() {\r\n const url = prompt(this.getTooltipTranslated('loadImageUrl'));\r\n if (url) {\r\n this.importPhotoFromSrc(url);\r\n }\r\n }\r\n\r\n public close(){\r\n this.closeDialog.emit();\r\n }\r\n}\r\n","<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n <div class=\"tools\">\r\n\r\n <div class=\"brush\">\r\n <i class=\"title\">tools</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n [title]=\"getTooltipTranslated('tools.brush')\"><mat-icon>brush</mat-icon></i>\r\n <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n (click)=\"selectDrawingSize(drawingSizeName)\">\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"commands\">\r\n <i class=\"title\">options</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n [title]=\"getTooltipTranslated('undo')\"><mat-icon>undo</mat-icon></i>\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n [title]=\"getTooltipTranslated('redo')\"><mat-icon>redo</mat-icon></i>\r\n <i class=\"material-icons btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><mat-icon>clear</mat-icon></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"colors\">\r\n <i class=\"title\">colors</i>\r\n <div class=\"internal\">\r\n <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <i class=\"title\">actions</i>\r\n <div class=\"internal\">\r\n <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n getTextTranslated('saveBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n getTextTranslated('cancelBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n getTextTranslated('closeDialog') }}</a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageField, ImageFolderEnum } from '../../../../models/fields/imageField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { I18nInterface } from '../../tmw-image-drawer/i18n';\r\nimport { EndPointConfiguration, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n/**\r\n * Metodo per recuperare, a partire da un Blob, la stringa contenente il base64 del file.\r\n * Usato per prendere il base64 dell'immagine dopo che l'utente ci ha disegnato sopra.\r\n * @param file Blob che rappresenta l'immagine.\r\n */\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result.toString());\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n@Component({\r\n selector: 'image-field-template',\r\n templateUrl: './image-field-template.component.html',\r\n styleUrls: ['./image-field-template.component.scss']\r\n})\r\nexport class ImageFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record: Record;\r\n @Input() field: ImageField;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() imageDraw: EventEmitter<DynAttachment> = new EventEmitter<DynAttachment>();\r\n\r\n imageWidth: number = 0;\r\n drawingLoaded: boolean = false;\r\n FileBase64: string = \"\";\r\n DrawFileBase64: string = \"\";\r\n FileDataBase64: string = \"\";\r\n\r\n AttachmentID: string | number;\r\n\r\n imageDrawAttachment: DynAttachment;\r\n \r\n\r\n //preLoadedImageMetadataFormGroup: UntypedFormGroup;\r\n\r\n //#region Proprietà per configurare il componente ngx-image-drawing e aprire il relativo dialog.\r\n public width = null;\r\n public height = null;\r\n public i18n: I18nInterface = {\r\n saveBtn: 'Salva modifiche',\r\n cancelBtn: 'Ricarica originale',\r\n closeDialog: 'Annulla disegno',\r\n };\r\n dialogImageDrawingRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImageDrawing\", { static: true }) dialogImageDrawing: TemplateRef<any>;\r\n //#endregion\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == 0){\r\n this.FileDataBase64 = this.field.DynAttachment.FileDataBase64;\r\n this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n this.record[this.field.Name] = this.field.DynAttachment;\r\n\r\n this.imageDrawAttachment = JSON.parse(JSON.stringify(this.field.DynAttachment));\r\n this.imageDrawAttachment.ID = 0;\r\n\r\n this.AttachmentID = this.field.DynAttachment.ID;\r\n\r\n } else {\r\n if (typeof this.record[this.field.Name] === 'string'){\r\n this.record[this.field.Name] = JSON.parse(this.record[this.field.Name]);\r\n }\r\n this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n\r\n if ((this.record[this.field.Name] as DynAttachment).FileBases64 != null){\r\n this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileBases64[ImageFolderEnum.Regular];\r\n } else {\r\n this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileDataBase64;\r\n }\r\n\r\n (this.record[this.field.Name] as DynAttachment).FileDataBase64 = this.FileDataBase64;\r\n\r\n this.imageDrawAttachment = this.record[this.field.Name];\r\n this.imageDrawAttachment.FileDataBase64 = this.FileDataBase64;\r\n\r\n this.AttachmentID = this.imageDrawAttachment.ID;\r\n }\r\n\r\n this.recordChange.emit(this.record);\r\n\r\n\r\n // Clono l'attachment originale, gli cambio il FileBase e gli azzero l'ID\r\n\r\n // this.imageDrawAttachment.FileName = \"\";\r\n // this.imageDrawAttachment.FilePath = \"\";\r\n\r\n this.imageDraw.emit(this.imageDrawAttachment);\r\n\r\n\r\n\r\n\r\n\r\n this.updateField();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n\r\n // updateMetadataValidity() {\r\n // if (this.preLoadedImageMetadataFormGroup.invalid) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n\r\n resetPreLoadedImage() {\r\n this.width = null;\r\n this.height = null;\r\n /*this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];*/\r\n this.getImageDimensions();\r\n }\r\n\r\n /**\r\n * Metodo invocato quando vengono aggiunti o eliminati gli allegati nel componente AttachmentFieldTemplate.\r\n * Se l'ImageField è abilitato al disegno (EnableDrawing == true), non permette allegati multipli (IsMulitAttach == false)\r\n * e nel Record corrente è presente l'immagine caricata dall'utente allora recupera le dimensioni dell'immagine e\r\n * apre il dialog con il componente image-drawing per permettere il disegno sull'immagine appena caricata.\r\n */\r\n onAttachmentsChange() {\r\n /*\r\n if (!this.field.AttachDefinition.IsMultiAttach && this.field.EnableDrawing && this.record[this.field.Name] && this.record[this.field.Name][0]) {\r\n this.getImageDimensions();\r\n this.dialogImageDrowingRef = this.dialog.open(this.dialogImageDrowing, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n */\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio dell'immagine dal componente image-drawing.\r\n * Trasforma il Blob ricevuto in un base64, aggiorna il FileContetType e il FileDataBase64\r\n * dell'allegato caricato e chiude il dialog in cui disegnare.\r\n * @param drawnPicture Blob dell'immagine disegnata.\r\n */\r\n async saveDraw(drawnPicture: Blob) {\r\n let base64File = await toBase64(drawnPicture);\r\n if (base64File) {\r\n this.DrawFileBase64 = base64File.split(\",\")[1];\r\n this.FileDataBase64 = this.DrawFileBase64;\r\n\r\n // Clono l'attachment originale, gli cambio il FileBase e gli azzero l'ID\r\n this.imageDrawAttachment.FileDataBase64 = this.DrawFileBase64;\r\n\r\n this.imageDraw.emit(this.imageDrawAttachment);\r\n\r\n }\r\n\r\n if (this.dialogImageDrawingRef) {\r\n this.closeImageDrowingDialog();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog in cui disegnare sull'immagine cariata e svuotare le dimensioni.\r\n */\r\n closeImageDrowingDialog() {\r\n this.dialogImageDrawingRef.close();\r\n this.width = null;\r\n this.height = null;\r\n }\r\n\r\n /**\r\n * Metodo per recuperare le dimensioni dell'immagine caricata per mostrare correttamente\r\n * il componente image-drawing. Se non viene eseguito questo passaggio l'area in cui disegnare \r\n * è più grande dell'immagine stessa e al salvataggio i tratti disegnati vengono spostati. \r\n */\r\n private getImageDimensions() {\r\n var blob: Blob = this.getBlobFromBase64();\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const image = new Image();\r\n image.src = e.target.result;\r\n image.onload = rs => {\r\n this.height = rs.currentTarget['height'];\r\n this.width = rs.currentTarget['width'];\r\n };\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n\r\n /**\r\n * Metodo per convertire il base64 di un'immagine in un Blob.\r\n * Necessario per il recupero delle dimensioni dell'immagine caricata a partire dal suo base64.\r\n * Viene eseguito solo nel caso in cui l'ImageField non ammette allegati multipli.\r\n * @returns Restituisce il Blob dell'immagine caricata.\r\n */\r\n private getBlobFromBase64() {\r\n const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n public openDraw(){\r\n this.dialogImageDrawingRef = this.dialog.open(this.dialogImageDrawing, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n panelClass: 'image-modal',\r\n width: '75%'\r\n });\r\n\r\n if (this.AttachmentID != null && Number(this.AttachmentID) > 0){\r\n this.load(this.AttachmentID,[ImageFolderEnum.Regular]);\r\n } else {\r\n this.FileBase64 = this.FileDataBase64;\r\n this.drawingLoaded = true;\r\n }\r\n\r\n }\r\n\r\n load(ID,Types){\r\n\r\n this.drawingLoaded = false;\r\n\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"AttachmentID\",\r\n ParamValue: ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Types\",\r\n ParamValue: Types,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ]; \r\n \r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetAttachmentWithBases64,\r\n dynamicModuleParams,\r\n (res: DynAttachment) => {\r\n\r\n this.FileBase64 = res.FileBases64[ImageFolderEnum.Regular];\r\n this.drawingLoaded = true;\r\n\r\n },\r\n (err) => {\r\n\r\n }\r\n ); \r\n }\r\n\r\n loadOriginal(){\r\n this.load(this.field.DynAttachment.ID,[ImageFolderEnum.Regular]);\r\n }\r\n \r\n}","\r\n<div class=\"row imageContainer\" style=\"width: {{imageWidth}}px;\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">{{field.Description}}</div>\r\n <div class=\"col-12\">\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{FileDataBase64}}\"\r\n [height]=\"field.DynAttachment.ResizedImageHeightPx != null ? field.DynAttachment.ResizedImageHeightPx : 128\"\r\n class=\"singleImage\">\r\n </div>\r\n <div *ngIf=\"field.EnableDrawing\" class=\"col-12 drawButton\">\r\n <button class=\"btn btn-primary btn-w100\" (click)=\"openDraw()\">Disegna</button>\r\n </div>\r\n <div *ngIf=\"field.DynAttachment.ButtonKey != null && field.DynAttachment.ButtonKey != ''\" class=\"col-12 flex justify-content-around buttonkey\">\r\n <div>Etichetta</div><div>{{field.DynAttachment.ButtonKey}}</div>\r\n </div>\r\n <div *ngIf=\"field.DynAttachment.ButtonValue != null && field.DynAttachment.ButtonValue != ''\" class=\"col-12 flex justify-content-around buttonvalue\"> \r\n <div>Valore</div><div>{{field.DynAttachment.ButtonValue}}</div>\r\n </div>\r\n </div> \r\n</div>\r\n\r\n<!-- DIALOG PER DISEGNARE SUL NUOVO ALLEGATO CARICATO -->\r\n<ng-template #dialogImageDrawing>\r\n <div class=\"padder\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-12\">\r\n <tmw-image-drawer *ngIf=\"drawingLoaded\"\r\n [src]=\"'data:'+ field.DynAttachment.FileContentType + ';base64,'+ FileBase64\" \r\n [inConfig]=\"inConfig\"\r\n [showCancelButton]=\"false\" \r\n [enableLoadAnotherImage]=\"false\" \r\n [enableRemoveImage]=\"false\" \r\n [width]=\"field.DynAttachment.ImageWidthPx\"\r\n [height]=\"field.DynAttachment.ImageHeightPx\" \r\n [i18n]=\"i18n\" \r\n [showCancelButton]=\"true\" \r\n (save)=\"saveDraw($event)\" \r\n (loadOriginal)=\"loadOriginal()\" \r\n (closeDialog)=\"closeImageDrowingDialog()\"\r\n >\r\n </tmw-image-drawer>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { AttachmentType, IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\n\r\nexport class DynAttachment implements IAttachmentDTO {\r\n\r\n ID: number | string;\r\n FileName?: string;\r\n FileContentType?: string;\r\n FileExtension?: string;\r\n FilePath?: string;\r\n AttachmentType?: AttachmentType;\r\n AttachmentFieldType: AttachmentFieldTypeEnum;\r\n ExtraJSON: string;\r\n\r\n FileDataBase64?: string;\r\n IsImage?: boolean;\r\n FileThumbnailBase64?: string;\r\n TrustedUrl?: any; \r\n\r\n OrdinalPosition?: number;\r\n \r\n Path: string; \r\n ThumbmailPath: string; \r\n Title: string; \r\n CreationDate: Date;\r\n\r\n /// <summary>\r\n /// Nome dell'applicazione che sdta inviando il fiel immagine da archiviare - viene utilizzato per coistruire una struytuura gerarchica per l'archiviazione dei files\r\n /// Esempio Attachmants/TMED/2 dove 2 è l'D della struttura che sta inviando (OrgaID) - questa proprioetà noin viene salvata nel DB\r\n /// </summary>\r\n ProjectName: string; \r\n\r\n OrgaID: string;\r\n FormID: string;\r\n FieldID: string;\r\n AnswerID: string;\r\n \r\n ImageWidthPx: number;\r\n ImageHeightPx: number;\r\n ResizedImageHeightPx: number;\r\n\r\n ButtonValue: string;\r\n ButtonKey: string;\r\n \r\n objectToSelect?: DynAttachmentSelectObject = null;\r\n originalIndex?: number;\r\n\r\n FileBases64?: { [key: string]: string; } = {};\r\n\r\n}\r\n\r\nexport class DynAttachmentSelectObject {\r\n ID: number | string;\r\n ButtonValue: string;\r\n ButtonKey: string;\r\n}\r\n\r\nexport class attachmentTypeEnum{\r\n SINGLE=1\r\n LIST=2\r\n}\r\n\r\nexport enum AttachmentFieldTypeEnum\r\n{\r\n IMMAGINE = 7,\r\n ELENCO_IMMAGINI = 11,\r\n IMMAGINE_CON_MARKERS =13\r\n}","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ImageSelectorField } from '../../../../models/fields/imageSelectorField.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynAttachment, DynAttachmentSelectObject } from '../../../../models/dynAttachment';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'image-field-selector-template',\r\n templateUrl: './image-field-selector-template.component.html',\r\n styleUrls: ['./image-field-selector-template.component.scss']\r\n})\r\nexport class ImageFieldSelectorTemplateComponent {\r\n\r\n @Input() record: Record;\r\n @Input() field: ImageSelectorField;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n transformedRecord: any;\r\n \r\n constructor(\r\n private dialog: MatDialog,\r\n public utilityService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n GlobalService.debugLog(\"ImageFieldSelectorTemplateComponent - RECORD ngOnInit() - record\", this.record[this.field.Name]);\r\n GlobalService.debugLog(\"ImageFieldSelectorTemplateComponent - RECORD ngOnInit() - field\", this.field);\r\n\r\n this.initStyles();\r\n this.initializeAttachments();\r\n \r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n} \r\n\r\n ToLowerCase(el:string){\r\n return el.toLowerCase();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n\r\n }\r\n\r\n initializeAttachments(){\r\n this.field.AttachmentList.forEach((attachment) => {\r\n attachment.objectToSelect = new DynAttachmentSelectObject();\r\n attachment.objectToSelect.ID = attachment.ID;\r\n attachment.objectToSelect.ButtonKey = attachment.ButtonKey;\r\n attachment.objectToSelect.ButtonValue = attachment.ButtonValue;\r\n });\r\n\r\n if (this.record[this.field.Name] != null){\r\n if (!this.field.IsMultiChoiche){\r\n this.transformedRecord = this.record[this.field.Name].ID;\r\n } else {\r\n (this.record[this.field.Name] as Array<DynAttachment>).forEach((element) => {\r\n this.transformedRecord.push(Number(element.ID));\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange(event: number) {\r\n\r\n this.record[this.field.Name] = new Array<DynAttachment>();\r\n\r\n if (!this.field.IsMultiChoiche){\r\n\r\n var dynAttachment: DynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == event)));\r\n dynAttachment.FileDataBase64 = null;\r\n this.record[this.field.Name] = dynAttachment;\r\n\r\n } else {\r\n this.transformedRecord.forEach((element) => {\r\n var dynAttachment: DynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == element)));\r\n dynAttachment.FileDataBase64 = null;\r\n this.record[this.field.Name].push(dynAttachment);\r\n });\r\n }\r\n\r\n this.recordChange.emit(this.record);\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\"> \r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple>\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\"> \r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n</mat-form-field>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LabelField } from '../../../../models/fields/labelField.model';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'label-field-template',\r\n templateUrl: './label-field-template.component.html',\r\n styleUrls: ['./label-field-template.component.scss']\r\n})\r\nexport class LabelFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: LabelField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n } \r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n if (!this.field.VisibleIf) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<div class=\"dm-etichetta\" [ngStyle]=\"LabelstyleObj\" [innerHTML]=\"field.Etichetta\"></div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { fabric } from 'fabric';\r\nimport { Observable, of, switchMap } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'tmw-image-marker',\r\n templateUrl: './tmw-image-marker.component.html',\r\n styleUrls: ['./tmw-image-marker.component.scss']\r\n})\r\nexport class TmwImageMarkerComponent {\r\n\r\n @Input() src: string;\r\n @Input() width: number;\r\n @Input() height: number;\r\n @Input() inConfig: boolean = false;\r\n @Input() savedMarkers: string = null;\r\n\r\n @Input() public outputMimeType = 'image/jpeg';\r\n @Input() public outputQuality = 0.8;\r\n\r\n @Input() public forceSizeCanvas = true;\r\n\r\n @Output() closeDialog: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() save: EventEmitter<MarkedImage> = new EventEmitter<MarkedImage>();\r\n\r\n componentGuid: string;\r\n isLoading: boolean = true;\r\n hasError: boolean = false;\r\n\r\n private canvas: fabric.Canvas;\r\n private stack: fabric.Object[] = [];\r\n\r\n markers: Array<Marker> = new Array<Marker>();\r\n outmarkers: Array<OutMarker> = new Array<OutMarker>();\r\n markedImage: MarkedImage = new MarkedImage();\r\n\r\n canUndo: boolean = false;\r\n canRedo: boolean = false;\r\n\r\n errorMessage: string = \"\";\r\n\r\n private imageUsed?: fabric.Image;\r\n\r\n constructor() {}\r\n\r\n public ngOnInit(): void {\r\n\r\n // Creazione di una GUID unica per il componente\r\n this.componentGuid = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.isLoading = false;\r\n\r\n const canvasScaledElement = document.getElementById(this.componentGuid);\r\n this.canvas = new fabric.Canvas(canvasScaledElement, {\r\n hoverCursor: 'pointer',\r\n isDrawingMode: false,\r\n });\r\n this.canvas.backgroundColor = 'white';\r\n\r\n if (this.src) {\r\n this.importPhotoFromSrc(this.src);\r\n } else {\r\n if (!this.width || !this.height) {\r\n throw new Error('No width or hight given !');\r\n }\r\n\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.on('path:created', () => {\r\n this.stack = [];\r\n this.setUndoRedo();\r\n });\r\n\r\n } \r\n\r\n newMarker(){\r\n var startX = Math.floor(this.width / 2);\r\n var startY = Math.floor(this.height / 2);\r\n\r\n var left = this.randomIntFromInterval(startX-100,startX+100);\r\n var top = this.randomIntFromInterval(startY-100,startY+100);\r\n var description: '';\r\n var caption = '0';\r\n\r\n // Creazione della caption\r\n for (var i = 1; i <= 100000; i++){\r\n if (this.markers.find(x => x.caption == i.toString()) == null){\r\n caption = i.toString();\r\n break;\r\n }\r\n }\r\n \r\n\r\n this.createMarker(top,left,caption,description);\r\n }\r\n\r\n createMarker(top: number, left: number, caption: string, description: string){\r\n\r\n /*\r\n * Creo un nuovo Marker\r\n */\r\n\r\n // Creo il cerchio\r\n var circle = new fabric.Circle({\r\n radius: 30,\r\n opacity: 0.7,\r\n fill: 'darkblue',\r\n stroke: 'white',\r\n strokeWidth: 2,\r\n originX: 'center', \r\n originY: 'center' \r\n });\r\n\r\n // Creo il testo dentro al cerchio \r\n var text = new fabric.Text(caption,\r\n { fontSize: 25, \r\n originX: 'center', \r\n originY: 'center',\r\n fill : 'white' \r\n });\r\n\r\n // Creo il gruppo nel quale metto cerchio e testo in modo che si muovano insieme\r\n var group = new fabric.Group([ circle, text ], { left: left, top: top }); \r\n\r\n // Creo un oggetto marker che contiene gli elementi atomici. Serve per le cancellazioni e il rollback/modifica degli elementi\r\n var marker: Marker = new Marker();\r\n marker.circle = circle;\r\n marker.text = text;\r\n marker.group = group;\r\n marker.caption = caption;\r\n marker.description = description;\r\n\r\n // Aggiungo il gruppo nella lista dei gruppi\r\n this.markers.push(marker);\r\n this.markers.sort((a,b)=> { return Number(a.caption) - Number(b.caption) });\r\n\r\n // Aggiungo il gruppo all'immagine a schermo\r\n this.canvas.add(group);\r\n }\r\n\r\n deleteMarkerByIndex(index: number){\r\n this.canvas.remove(this.markers[index].group);\r\n this.markers.splice(index,1);\r\n }\r\n\r\n removeAllMarkers(){\r\n this.markers.forEach((marker) => {\r\n this.canvas.remove(marker.group);\r\n });\r\n this.markers = new Array<Marker>();\r\n }\r\n\r\n private setUndoRedo() {\r\n this.canUndo = this.canvas.getObjects().length > 0;\r\n this.canRedo = this.stack.length > 0;\r\n }\r\n\r\n /*\r\n\r\n // Actions\r\n public undo() {\r\n if (this.canUndo) {\r\n const lastId = this.canvas.getObjects().length - 1;\r\n const lastObj = this.canvas.getObjects()[lastId];\r\n this.stack.push(lastObj);\r\n this.canvas.remove(lastObj);\r\n this.setUndoRedo();\r\n }\r\n }\r\n \r\n public redo() {\r\n if (this.canRedo) {\r\n const firstInStack = this.stack.splice(-1, 1)[0];\r\n if (firstInStack) {\r\n this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n }\r\n this.setUndoRedo();\r\n }\r\n }\r\n \r\n public clearCanvas() {\r\n if (this.canvas) {\r\n this.canvas.remove(...this.canvas.getObjects());\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n*/\r\n\r\n private importPhotoFromSrc(src: string) {\r\n this.isLoading = true;\r\n let isFirstTry = true;\r\n const imgEl = new Image();\r\n imgEl.setAttribute('crossOrigin', 'anonymous');\r\n imgEl.src = src;\r\n imgEl.onerror = () => {\r\n // Retry with cors proxy\r\n if (isFirstTry) {\r\n imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n isFirstTry = false;\r\n } else {\r\n this.isLoading = false;\r\n this.hasError = true;\r\n this.errorMessage = \"CORS Error\";\r\n }\r\n };\r\n imgEl.onload = () => {\r\n this.isLoading = false;\r\n this.imageUsed = new fabric.Image(imgEl);\r\n\r\n this.imageUsed.cloneAsImage(image => {\r\n let width = imgEl.width;\r\n let height = imgEl.height;\r\n\r\n if (this.width) {\r\n width = this.width;\r\n }\r\n if (this.height) {\r\n height = this.height;\r\n }\r\n\r\n image.scaleToWidth(width, false);\r\n image.scaleToHeight(height, false);\r\n\r\n this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n if (img) {\r\n if (this.forceSizeCanvas) {\r\n this.canvas.setWidth(width);\r\n this.canvas.setHeight(height);\r\n } else {\r\n this.canvas.setWidth(image.getScaledWidth());\r\n this.canvas.setHeight(image.getScaledHeight());\r\n }\r\n }\r\n }), {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n });\r\n\r\n if (this.savedMarkers != null){ this.loadMarkers(); }\r\n };\r\n }\r\n\r\n loadMarkers(){\r\n var markersObj: Array<OutMarker> = JSON.parse(this.savedMarkers);\r\n markersObj.forEach((marker) => {\r\n this.createMarker(marker.top,marker.left,marker.caption,marker.description);\r\n });\r\n }\r\n\r\n public saveImage(){\r\n\r\n this.outmarkers = new Array<OutMarker>();\r\n\r\n this.markers.forEach((marker) => {\r\n var outmarker = new OutMarker();\r\n outmarker.caption = marker.caption;\r\n outmarker.description = marker.description;\r\n outmarker.top = marker.group.top;\r\n outmarker.left = marker.group.left;\r\n this.outmarkers.push(outmarker);\r\n })\r\n\r\n if (this.width && this.height) {\r\n const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n canvasScaled.backgroundColor = 'white';\r\n\r\n new Observable<fabric.Canvas>(observer => {\r\n if (this.imageUsed) {\r\n\r\n canvasScaled.setBackgroundImage(this.imageUsed, (img: HTMLImageElement) => {\r\n if (!img) {\r\n observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n }\r\n\r\n canvasScaled.setWidth(img.width);\r\n canvasScaled.setHeight(img.height);\r\n\r\n observer.next(canvasScaled);\r\n observer.complete();\r\n }, {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n \r\n } else {\r\n canvasScaled.setWidth(this.width);\r\n canvasScaled.setHeight(this.height);\r\n }\r\n }).pipe(\r\n switchMap(() => {\r\n let process = of(canvasScaled);\r\n\r\n if (this.canvas.getObjects().length > 0) {\r\n const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n process = process.pipe(switchMap(() => {\r\n return new Observable<fabric.Canvas>(observerObject => {\r\n originalObject.clone((clonedObject: fabric.Object) => {\r\n clonedObject.set('left', originalObject.left * ratioX);\r\n clonedObject.set('top', originalObject.top * ratioY);\r\n clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n canvasScaled.insertAt(clonedObject, i, false);\r\n canvasScaled.renderAll();\r\n\r\n observerObject.next(canvasScaled);\r\n observerObject.complete();\r\n });\r\n });\r\n }));\r\n });\r\n }\r\n return process;\r\n }),\r\n ).subscribe(() => {\r\n canvasScaled.renderAll();\r\n canvasScaled.getElement().toBlob(\r\n (data: Blob) => {\r\n this.markedImage.image = data;\r\n this.markedImage.outmarkers = this.outmarkers;\r\n this.save.emit(this.markedImage);\r\n },\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n });\r\n } else {\r\n this.canvas.getElement().toBlob(\r\n (data: Blob) => {\r\n this.markedImage.image = data;\r\n this.markedImage.outmarkers = this.outmarkers;\r\n this.save.emit(this.markedImage);\r\n },\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //this.save.emit();\r\n }\r\n\r\n public close(){\r\n this.closeDialog.emit();\r\n }\r\n\r\n randomIntFromInterval(min, max) { // min and max included \r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n }\r\n\r\n log(el){\r\n console.log(el);\r\n }\r\n\r\n}\r\n\r\nexport class Marker {\r\n circle: fabric.Circle;\r\n text: fabric.Text;\r\n group: fabric.Group;\r\n top: number;\r\n left: number;\r\n caption: string;\r\n description: string = \"\";\r\n}\r\n\r\nexport class OutMarker {\r\n top: number;\r\n left: number;\r\n caption: string;\r\n description: string = \"\";\r\n}\r\n\r\nexport class MarkedImage {\r\n outmarkers: Array<OutMarker>;\r\n image: Blob;\r\n}","<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"toolbox\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n\r\n <div class=\"legend_overflow_container\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-12 mt-2\" *ngIf=\"!inConfig\">\r\n <button class=\"btn btn-success markerButton\" (click)=\"saveImage()\">Salva Immagine</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-warning markerButton\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n </div> \r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-danger markerButton\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageField, ImageFolderEnum } from '../../../../models/fields/imageField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { EndPointConfiguration, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { MarkedImage } from '../../tmw-image-marker/tmw-image-marker.component';\r\nimport { ImageWithMarkersField } from '../../../../models/fields/imageWithMarkersField.model';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\n/**\r\n * Metodo per recuperare, a partire da un Blob, la stringa contenente il base64 del file.\r\n * Usato per prendere il base64 dell'immagine dopo che l'utente ci ha disegnato sopra.\r\n * @param file Blob che rappresenta l'immagine.\r\n */\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result.toString());\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n@Component({\r\n selector: 'image-with-markers-field-template',\r\n templateUrl: './image-with-markers-field-template.component.html',\r\n styleUrls: ['./image-with-markers-field-template.component.scss']\r\n})\r\n\r\nexport class ImageWithMarkersFieldTemplateComponent {\r\n\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record: Record;\r\n @Input() field: ImageWithMarkersField;\r\n @Input() inConfig: boolean = false;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() imageMark: EventEmitter<DynAttachment> = new EventEmitter<DynAttachment>();\r\n\r\n imageWidth: number = 0;\r\n MarkingLoaded: boolean = false;\r\n FileBase64: string = \"\";\r\n MarkFileBase64: string = \"\";\r\n FileDataBase64: string = \"\";\r\n\r\n AttachmentID: string | number;\r\n\r\n imageMarkAttachment: DynAttachment;\r\n extraJSON: string = null;\r\n \r\n\r\n //preLoadedImageMetadataFormGroup: UntypedFormGroup;\r\n\r\n //#region Proprietà per configurare il componente ngx-image-Marking e aprire il relativo dialog.\r\n public width = null;\r\n public height = null;\r\n\r\n dialogImageMarkingRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImageMarking\", { static: true }) dialogImageMarking: TemplateRef<any>;\r\n //#endregion\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == 0){\r\n this.FileDataBase64 = this.field.DynAttachment.FileDataBase64;\r\n this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n this.record[this.field.Name] = this.field.DynAttachment;\r\n\r\n this.imageMarkAttachment = JSON.parse(JSON.stringify(this.field.DynAttachment));\r\n this.imageMarkAttachment.ID = 0;\r\n\r\n this.AttachmentID = this.field.DynAttachment.ID; \r\n\r\n } else {\r\n if (typeof this.record[this.field.Name] === 'string'){\r\n this.record[this.field.Name] = JSON.parse(this.record[this.field.Name]);\r\n }\r\n this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n\r\n if ((this.record[this.field.Name] as DynAttachment).FileBases64 != null){\r\n this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileBases64[ImageFolderEnum.Regular];\r\n } else {\r\n this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileDataBase64;\r\n } \r\n\r\n (this.record[this.field.Name] as DynAttachment).FileDataBase64 = this.FileDataBase64;\r\n this.extraJSON = (this.record[this.field.Name] as DynAttachment).ExtraJSON;\r\n\r\n this.imageMarkAttachment = this.record[this.field.Name];\r\n this.imageMarkAttachment.FileDataBase64 = this.FileDataBase64;\r\n\r\n this.AttachmentID = this.field.DynAttachment.ID;\r\n }\r\n\r\n this.recordChange.emit(this.record);\r\n\r\n\r\n // Clono l'attachment originale, gli cambio il FileBase e gli azzero l'ID\r\n\r\n // this.imageMarkAttachment.FileName = \"\";\r\n // this.imageMarkAttachment.FilePath = \"\";\r\n\r\n this.imageMark.emit(this.imageMarkAttachment);\r\n\r\n\r\n\r\n\r\n\r\n this.updateField();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n\r\n // updateMetadataValidity() {\r\n // if (this.preLoadedImageMetadataFormGroup.invalid) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n\r\n resetPreLoadedImage() {\r\n this.width = null;\r\n this.height = null;\r\n /*this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];*/\r\n this.getImageDimensions();\r\n }\r\n\r\n /**\r\n * Metodo invocato quando vengono aggiunti o eliminati gli allegati nel componente AttachmentFieldTemplate.\r\n * Se l'ImageField è abilitato al disegno (EnableMarking == true), non permette allegati multipli (IsMulitAttach == false)\r\n * e nel Record corrente è presente l'immagine caricata dall'utente allora recupera le dimensioni dell'immagine e\r\n * apre il dialog con il componente image-Marking per permettere il disegno sull'immagine appena caricata.\r\n */\r\n onAttachmentsChange() {\r\n /*\r\n if (!this.field.AttachDefinition.IsMultiAttach && this.field.EnableMarking && this.record[this.field.Name] && this.record[this.field.Name][0]) {\r\n this.getImageDimensions();\r\n this.dialogImageDrowingRef = this.dialog.open(this.dialogImageDrowing, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n */\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio dell'immagine dal componente image-Marking.\r\n * Trasforma il Blob ricevuto in un base64, aggiorna il FileContetType e il FileDataBase64\r\n * dell'allegato caricato e chiude il dialog in cui disegnare.\r\n * @param MarknPicture Blob dell'immagine disegnata.\r\n */\r\n async saveMark(markedImage: MarkedImage) {\r\n let base64File = await toBase64(markedImage.image);\r\n if (base64File) {\r\n this.MarkFileBase64 = base64File.split(\",\")[1];\r\n this.FileDataBase64 = this.MarkFileBase64;\r\n\r\n // Clono l'attachment originale, gli cambio il FileBase e gli azzero l'ID\r\n this.imageMarkAttachment.FileDataBase64 = this.MarkFileBase64;\r\n this.imageMarkAttachment.ExtraJSON = JSON.stringify(markedImage.outmarkers);\r\n this.extraJSON = this.imageMarkAttachment.ExtraJSON;\r\n\r\n this.imageMark.emit(this.imageMarkAttachment);\r\n\r\n }\r\n\r\n if (this.dialogImageMarkingRef) {\r\n this.closeDialog();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog in cui disegnare sull'immagine cariata e svuotare le dimensioni.\r\n */\r\n closeDialog() {\r\n this.dialogImageMarkingRef.close();\r\n this.width = null;\r\n this.height = null;\r\n }\r\n\r\n /**\r\n * Metodo per recuperare le dimensioni dell'immagine caricata per mostrare correttamente\r\n * il componente image-Marking. Se non viene eseguito questo passaggio l'area in cui disegnare \r\n * è più grande dell'immagine stessa e al salvataggio i tratti disegnati vengono spostati. \r\n */\r\n private getImageDimensions() {\r\n var blob: Blob = this.getBlobFromBase64();\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const image = new Image();\r\n image.src = e.target.result;\r\n image.onload = rs => {\r\n this.height = rs.currentTarget['height'];\r\n this.width = rs.currentTarget['width'];\r\n };\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n\r\n /**\r\n * Metodo per convertire il base64 di un'immagine in un Blob.\r\n * Necessario per il recupero delle dimensioni dell'immagine caricata a partire dal suo base64.\r\n * Viene eseguito solo nel caso in cui l'ImageField non ammette allegati multipli.\r\n * @returns Restituisce il Blob dell'immagine caricata.\r\n */\r\n private getBlobFromBase64() {\r\n const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n public openMark(){\r\n this.dialogImageMarkingRef = this.dialog.open(this.dialogImageMarking, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n panelClass: 'image-modal',\r\n width: '75%'\r\n });\r\n\r\n if (this.AttachmentID != null && Number(this.AttachmentID) > 0){\r\n this.load(this.AttachmentID,[ImageFolderEnum.Regular]);\r\n } else {\r\n this.FileBase64 = this.FileDataBase64;\r\n this.MarkingLoaded = true;\r\n }\r\n\r\n }\r\n\r\n load(ID,Types){\r\n\r\n this.MarkingLoaded = false;\r\n\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"AttachmentID\",\r\n ParamValue: ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Types\",\r\n ParamValue: Types,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ]; \r\n \r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetAttachmentWithBases64,\r\n dynamicModuleParams,\r\n (res: DynAttachment) => {\r\n\r\n this.FileBase64 = res.FileBases64[ImageFolderEnum.Regular];\r\n this.MarkingLoaded = true;\r\n\r\n },\r\n (err) => {\r\n\r\n }\r\n ); \r\n }\r\n\r\n}\r\n","<div class=\"row imageContainer\" style=\"width: {{imageWidth}}px;\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">{{field.Description}}</div>\r\n <div class=\"col-12\"><img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{FileDataBase64}}\"\r\n [height]=\"field.DynAttachment.ResizedImageHeightPx != null ? field.DynAttachment.ResizedImageHeightPx : 128\"\r\n class=\"singleImage\"></div>\r\n <div class=\"col-12 drawButton\">\r\n <button class=\"btn btn-primary btn-w100\" (click)=\"openMark()\">Marca</button>\r\n </div>\r\n <div class=\"col-12 flex justify-content-around buttonkey\" *ngIf=\"field.DynAttachment.ButtonKey != null && field.DynAttachment.ButtonKey != ''\">\r\n <div>Etichetta</div><div>{{field.DynAttachment.ButtonKey}}</div>\r\n </div>\r\n <div class=\"col-12 flex justify-content-around buttonvalue\" *ngIf=\"field.DynAttachment.ButtonValue != null && field.DynAttachment.ButtonValue != ''\"> \r\n <div>Valore</div><div>{{field.DynAttachment.ButtonValue}}</div>\r\n </div>\r\n </div> \r\n</div>\r\n\r\n<!-- DIALOG PER DISEGNARE SUL NUOVO ALLEGATO CARICATO -->\r\n<ng-template #dialogImageMarking>\r\n <div class=\"padder\">\r\n <div\r\n class=\"row\">\r\n <div class=\"col-sm-12 col-md-12\">\r\n <tmw-image-marker\r\n *ngIf=\"MarkingLoaded\"\r\n [src]=\"'data:'+ field.DynAttachment.FileContentType + ';base64,'+ FileBase64\" [inConfig]=\"inConfig\" [savedMarkers]=\"extraJSON\"\r\n [width]=\"field.DynAttachment.ImageWidthPx\" [height]=\"field.DynAttachment.ImageHeightPx\" \r\n (save)=\"saveMark($event)\" (closeDialog)=\"closeDialog()\">\r\n </tmw-image-marker>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { Directive, Input, ViewContainerRef, ComponentFactoryResolver, ComponentRef, EventEmitter, Output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appDynamicLoader]'\r\n})\r\n\r\nexport class DynamicLoaderDirective {\r\n\r\n // In input verrà passato il selettore del componente da ricreare\r\n @Input() set data(data: DynamicLoaderDirectiveData) {\r\n this.load(data.component, data.inputParams);\r\n }\r\n\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n\r\n constructor(private resolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef) { }\r\n\r\n load(component: any, inputParams: any = null): any {\r\n\r\n if (!component) {\r\n throw new Error('Failed to load dynamic component');\r\n }\r\n\r\n this.viewContainerRef.clear();\r\n let componentInstance = component;\r\n const componentFactory = this.resolver.resolveComponentFactory(componentInstance);\r\n const componentRef = this.viewContainerRef.createComponent<any>(componentFactory);\r\n\r\n //Se sono stati passati dei parameters di input allora li memorizza nel componente caricato dinamicamente.\r\n //E' ovvio che il nome dei parameters di input passati al DynamicLoader deve coincidere con il nome del parametro di input passato al componente caricato dinamicamente\r\n if (inputParams != null) {\r\n let inputProperties = Object.keys(inputParams);\r\n inputProperties.forEach(p => {\r\n componentRef.instance[p] = inputParams[p];\r\n });\r\n }\r\n\r\n componentRef.instance.out.subscribe(val => { this.out.emit(val); });\r\n\r\n }\r\n\r\n /**\r\n* Restrituisce un componente passandogli come parametro la chiave\r\n* @param key\r\n*/\r\n getComponent(key: any) {\r\n let component = key;\r\n return component;\r\n }\r\n}\r\n\r\nexport class DynamicLoaderDirectiveData {\r\n component: any;\r\n inputParams: any;\r\n}\r\n\r\nexport class eventOut {\r\n EventName: string;\r\n Behaviours: Array<string> = new Array<string>();\r\n Params: any;\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Form } from '@angular/forms';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { BaseField } from '../../../models/baseField.model';\r\nimport { Record } from '../../../models/record.model';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Component({\r\n selector: 'dbgetter',\r\n templateUrl: './dbgetter.component.html',\r\n styleUrls: ['./dbgetter.component.scss']\r\n})\r\nexport class DbgetterComponent {\r\n\r\n @Input() form: Form;\r\n @Input() field: BaseField;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Input() DirectlyOpenTable: boolean = false;\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData = null; // L'intero componente query Editor\r\n @Input() data: any = null; // Lo facciamo funzionare tipo EQP-TABLE\r\n\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() selectedValue: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n keys: Array<string> = null;\r\n loaded: boolean = false;\r\n value: any;\r\n\r\n showTable: boolean = false;\r\n showQE: boolean = true;\r\n\r\n haveQuestions: boolean = false;\r\n haveRelations: boolean = false;\r\n reload: boolean = true;\r\n\r\n interval: any;\r\n\r\n relations: Array<{field: string, loaded: boolean, actualvalue: any}> = new Array<{field: string, loaded: boolean, actualvalue: any}>();\r\n relationsLoaded: boolean;\r\n backupQuestionFields: Array<string> = null;\r\n\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n ngOnInit(): void {\r\n\r\n //console.log(\"INSIDE DBGETTER\", this.form, this.record, this.field, this.QueryEditorComponent);\r\n\r\n if (this.QueryEditorComponent != null){\r\n this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.RESULT;\r\n this.QueryEditorComponent.inputParams.config.field = this.field;\r\n this.QueryEditorComponent.inputParams.config.record = this.record;\r\n this.QueryEditorComponent.inputParams.config.inConfig = this.inConfig;\r\n\r\n if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue == '?') != null){\r\n \r\n // Il campo ha almeno un valore con \"?\"\r\n this.haveQuestions = true;\r\n\r\n //console.log(\"CHECKING BACKUPS OPENED FIELDS....\", this.backupQuestionFields);\r\n\r\n if (this.backupQuestionFields == null){\r\n this.backupQuestionFields = new Array<string>();\r\n this.field.DataGetter.DataGetterValue.openedFields.forEach((rqf) => {\r\n this.backupQuestionFields.push(rqf.PropertyName);\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue.indexOf('!') != -1) != null){\r\n\r\n // Il campo ha almeno un valore con \"!nomerelazione\"\r\n this.haveRelations = true;\r\n\r\n this.field.DataGetter.DataGetterValue.openedFields.filter(x => x.QueryPropertyValue.indexOf('!') != -1).forEach((fieldWithRelation) => {\r\n\r\n var fieldRelated = fieldWithRelation.QueryPropertyValue.replace(\"!\",\"\");\r\n\r\n if (this.record[fieldRelated] == null){\r\n //console.log(\"this.record[fieldRelated] E' NULL\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n this.relations.push({field: fieldRelated, loaded: false, actualvalue: this.record[fieldRelated]});\r\n this.checkRelations();\r\n this.interval = setInterval(() => {\r\n //console.log(\"this.record[fieldRelated] CHECK\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n var currentRelation = this.relations.find(x => x.field == fieldRelated);\r\n if (currentRelation != null){\r\n\r\n // Gestione dei cambi di valore dei campi relazionati\r\n // Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore in qualcosa che NON E' NULL\r\n if (currentRelation.actualvalue != null && this.record[fieldRelated] != null && this.record[fieldRelated] != currentRelation.actualvalue){\r\n //console.log(\"this.record[fieldRelated] HA CAMBIATO VALORE!!\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n currentRelation.actualvalue = this.record[fieldRelated];\r\n currentRelation.loaded = true;\r\n fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];\r\n this.record[this.field.Name] = null;\r\n this.reloadComponent();\r\n }\r\n\r\n // Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore IN NULL\r\n else if (currentRelation.actualvalue != null && this.record[fieldRelated] == null){\r\n //console.log(\"this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n currentRelation.actualvalue = this.record[fieldRelated];\r\n currentRelation.loaded = true;\r\n fieldWithRelation.QueryPropertyValue = \"!\"+fieldRelated;\r\n this.record[this.field.Name] = null;\r\n\r\n // Recupero Backup\r\n this.backupQuestionFields.forEach((bof) => {\r\n this.field.DataGetter.DataGetterValue.openedFields.find(x => x.PropertyName == bof).QueryPropertyValue = \"?\";\r\n });\r\n\r\n this.reloadComponent();\r\n }\r\n\r\n // Il campo relazionato INIZIALMENTE E' NULL, e cambia valore\r\n else if (currentRelation.actualvalue == null && this.record[fieldRelated] != null){\r\n //console.log(\"this.record[fieldRelated] NON E' PIU' NULL!! :)\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n currentRelation.actualvalue = this.record[fieldRelated];\r\n currentRelation.loaded = true;\r\n fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];\r\n this.reloadComponent();\r\n }\r\n\r\n this.checkRelations();\r\n \r\n }\r\n },200);\r\n\r\n\r\n } else {\r\n //console.log(\"this.record[fieldRelated] NON E' NULL!! :)\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n fieldWithRelation.QueryPropertyValue = this.record[fieldRelated] != null ? this.record[fieldRelated] : '';\r\n this.relations.push({field: fieldRelated, loaded: true, actualvalue: this.record[fieldRelated]});\r\n this.checkRelations();\r\n }\r\n \r\n }); \r\n\r\n\r\n }\r\n\r\n if (!this.haveRelations){\r\n this.relationsLoaded = true;\r\n } \r\n\r\n } else {\r\n\r\n if (this.data == null){\r\n\r\n this.httpClient.get('./assets/mockups/mockedFromQueryEditor_RESULT_MANY.txt', {responseType: 'text'})\r\n .subscribe(mockedFromQueryEditor => {\r\n this.data = JSON.parse(mockedFromQueryEditor);\r\n this.data = JSON.parse(this.data.result);\r\n this.processResult(this.data,[]);\r\n }); \r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n reloadComponent(){\r\n //console.log(\"RELOAD COMPONENT CALLED\", this.record, this.QueryEditorComponent.inputParams.config.record);\r\n\r\n this.reload = false;\r\n this.QueryEditorComponent.inputParams.config.record = this.record;\r\n this.QueryEditorComponent.inputParams.config.field = this.field;\r\n\r\n setTimeout(() => { this.reload = true; \r\n //console.log(\"RELOADED QUERYEDITOR\"); \r\n }, 3000); \r\n }\r\n\r\n checkRelations(){\r\n this.relationsLoaded = this.relations.find(x => x.loaded) != null;\r\n }\r\n\r\n onExternalSQLResultOut(ev: eventOut){\r\n\r\n //console.log(\"Risultato dell'elaborazione del query editor: onExternalSQLResultOut\", ev);\r\n\r\n if (ev.Behaviours.indexOf(\"send-out\") != -1){ this.out.emit(ev); }\r\n\r\n this.data = JSON.parse(ev.Params.result);\r\n this.processResult(this.data,ev.Behaviours);\r\n\r\n }\r\n\r\n processResult(data: any, behaviours: Array<string> = []){\r\n \r\n if (data.length > 0){\r\n this.keys = Object.keys(data[0]);\r\n if (this.keys.length == 2 && data.length == 1){\r\n // Se ho un solo occhietto selezionato e la query restituisce un solo valore, lo butto fuori automaticamente\r\n this.showTable = false;\r\n this.record[this.field.Name] = data[0][this.keys[1]];\r\n this.selectedValue.emit([data[0][this.keys[1]],true]);\r\n } else if (data.length == 1 && this.field.DataGetter.DataGetterColumnForce != null){\r\n this.showTable = false;\r\n this.record[this.field.Name] = data[0][this.field.DataGetter.DataGetterColumnForce.key];\r\n this.selectedValue.emit([data[0][this.keys[1]],true]);\r\n } else {\r\n\r\n if (behaviours.indexOf(\"manage-question-in-dbgetter\") != -1){\r\n this.showTable = true;\r\n } else {\r\n\r\n if (!this.DirectlyOpenTable){\r\n this.showTable = false;\r\n } else {\r\n this.showTable = true; \r\n }\r\n\r\n }\r\n\r\n }\r\n } else {\r\n //this.showQE = true;\r\n }\r\n \r\n }\r\n\r\n selectValue(row, value){\r\n\r\n var valueToBeSet = \"\";\r\n\r\n if(this.field.DataGetter.DataGetterColumnForce == null){\r\n valueToBeSet = value;\r\n } else {\r\n valueToBeSet = row[this.field.DataGetter.DataGetterColumnForce.key];\r\n }\r\n\r\n if (valueToBeSet == null){ valueToBeSet = \"\"; }\r\n\r\n this.record[this.field.Name] = valueToBeSet;\r\n this.showTable = false;\r\n //this.showQE = false;\r\n\r\n //EqpDynamicModuleDialogService.Success(\"Un solo risultato trovato, è stato inserito in automatico\");\r\n\r\n this.selectedValue.emit([valueToBeSet,false]); \r\n }\r\n\r\n close(){\r\n this.selectedValue.emit([\"****CLOSE****\",true]);\r\n this.showTable = false;\r\n }\r\n \r\n delete(){\r\n this.selectedValue.emit([null,true]);\r\n this.showTable = false;\r\n } \r\n}\r\n\r\n// O così o schiantato a mano\r\nexport enum QueryEditorModeEnum {\r\n \"CONFIGURATOR\" = 1,\r\n \"COMPOSER\" = 2,\r\n \"RESULT\" = 3\r\n}","<div [hidden]=\"!showQE\">\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n <div class=\"header\">\r\n <div class=\"left\"><button class=\"btn btn-small btn-danger\" (click)=\"close()\">Chiudi finestra <mat-icon>close</mat-icon></button></div>\r\n <div class=\"left\"><button class=\"btn btn-small btn-danger\" (click)=\"delete()\">Cancella valore <mat-icon>delete</mat-icon></button></div>\r\n <div class=\"right\"><mat-icon>drag_indicator</mat-icon> Seleziona il valore da registrare. Clicca su questa barra per trascinare.</div>\r\n </div>\r\n\r\n \r\n <table class=\"table\" [ngClass]=\"field.DataGetter.DataGetterColumnForce == null ? 'table-notforced' : 'table-forced'\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, row[key])\">\r\n <!-- \r\n <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n </span> \r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n </span>\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n -->\r\n\r\n <span [innerHTML]=\"row[key]\">\r\n\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <!-- \r\n <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n <td *ngFor=\"let key of keys\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum, DataGetterTypeEnum, AnswerStyle, DataGetterCardinalityEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../models/dynAttachment';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'dynamic-module-field-fix',\r\n templateUrl: './dynamic-module-field.component.html',\r\n styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldFixComponent implements OnInit, IBaseFieldComponent {\r\n\r\n @Input() configurations: DynamicModuleCompileConfig = null;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Input() inConfig: boolean = false;\r\n @Input() userID: number;\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n DataGetterTypeEnum = DataGetterTypeEnum;\r\n DBGetterValue: any = null;\r\n DBGetterLoaded: boolean = false;\r\n DBGetterExact: boolean = false;\r\n DBGetterHaveQuestions: boolean = false;\r\n directlyOpenTable: boolean = false;\r\n dmloaded: boolean = false;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n\r\n updateField(): void {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach(f => f.updateField());\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n GlobalService.debugLog(\"dynamic-module-field\",this.field);\r\n\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n\r\n if (this.field.DataGetterValueBase64String != null && this.field.DataGetterValueBase64String != \"\"){\r\n this.field.DataGetter = JSON.parse(atob(this.field.DataGetterValueBase64String));\r\n }\r\n\r\n if (this.field.DataGetter != null && this.field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']){\r\n this.manageDMGetter();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n this.selectedInnerForm = this.getInnerFormFromField(field);\r\n if (record == null) {\r\n this.selectedInnerFormRecord = new Record();\r\n this.indexInnerFormRecord = null;\r\n this.onlyViewInnerFormRecord = false;\r\n } else {\r\n this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n this.onlyViewInnerFormRecord = record.onlyView;\r\n }\r\n\r\n this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n * di un record di una form di dettaglio.\r\n * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n */\r\n onSaveInnerFormRecord(record: Record) {\r\n if (record != null) {\r\n const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n this.record[arrayName][this.indexInnerFormRecord] = record;\r\n } else {\r\n if (!this.record[arrayName]) {\r\n this.record[arrayName] = [];\r\n }\r\n this.record[arrayName].push(record);\r\n }\r\n }\r\n this.dialogInnerFormRecordRef.close();\r\n\r\n // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n this.listInnerFormRecords.forEach(list => {\r\n if (list && list.tableRecords) {\r\n list.tableRecords.reloadDatatable();\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Passo l'immagine disegnata al livello superiore\r\n onImageDraw(event: DynAttachment){\r\n this.record[this.field.Name] = event;\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n // Passo l'immagine disegnata al livello superiore\r\n onImageMark(event: DynAttachment){\r\n this.record[this.field.Name] = event;\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n onExternalComponentOut(ev: eventOut){\r\n this.out.emit(ev);\r\n }\r\n\r\n onSelectedValue(value: any){\r\n \r\n this.DBGetterLoaded = false;\r\n if (value[0] == \"****CLOSE****\"){ return; }\r\n\r\n this.record[this.field.Name] = value[0];\r\n this.DBGetterValue = value[0];\r\n this.DBGetterExact = value[1];\r\n if (this.field.DataGetter.DataGetterValue.openedFields.find(x => x.QueryPropertyValue == '?') != null){ this.DBGetterHaveQuestions = true; }\r\n\r\n }\r\n\r\n manageDMGetter(){\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n\r\n dynamicModuleParams.push({\r\n ParamName: \"FormCode\",\r\n ParamValue: this.field.DataGetter.DataGetterValue,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n dynamicModuleParams.push({\r\n ParamName: \"mode\",\r\n ParamValue: 2,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n dynamicModuleParams.push({\r\n ParamName: \"UserID\",\r\n ParamValue: this.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n dynamicModuleParams.push({\r\n ParamName: \"OrgaID\",\r\n ParamValue: this.form.OrgaID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormCodeEndPoint,\r\n dynamicModuleParams,\r\n (res: any) => {\r\n\r\n if (res == null || res.Answers.length == 0){\r\n this.dmloaded = true;\r\n return;\r\n }\r\n\r\n var answers = res.Answers;\r\n\r\n // Filtro contestualizzazione\r\n\r\n if (this.field.DataGetter.DataGetterContestualization != null && \r\n this.field.DataGetter.DataGetterContestualization.entityDMAdditionalParam != null && \r\n this.configurations != null && \r\n this.configurations.additionalParams != null){\r\n var contestualizationParam = this.field.DataGetter.DataGetterContestualization.entityDMAdditionalParam; // Esempio: 'FK_MedicalExamination'\r\n var contestualizationId = this.configurations.additionalParams[contestualizationParam] != null ? this.configurations.additionalParams[contestualizationParam] : null; // Esempio: 1351\r\n if (contestualizationId != null){\r\n \r\n // Esiste sia FK_MedicalExamination sia 1351\r\n answers = [];\r\n res.Answers.forEach((answer, index) => {\r\n var answerAdditionalParams = JSON.parse(res.AdditionalParams[index]);\r\n if (answerAdditionalParams[contestualizationParam] == contestualizationId){\r\n answers.push(answer);\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n // Filtro cardinalità\r\n\r\n var answer = null;\r\n if (answers.length == 1){\r\n answer = answers[0].Answer;\r\n } else if (this.field.DataGetter.DataGetterCardinality == DataGetterCardinalityEnum['PIU RECENTE']){\r\n answer = answers[0].Answer;\r\n } else {\r\n answer = answers[0].Answer;\r\n }\r\n\r\n // Non dovrebbe succedere, ma se non trova neanche una risposta, allora usciamo\r\n if (answer == null){ return; }\r\n\r\n var answerObj = JSON.parse(answer);\r\n this.record[this.field.Name] = answerObj[this.field.DataGetter.DataGetterColumnForce];\r\n this.dmloaded = true; \r\n \r\n },\r\n (err) => { }\r\n ); \r\n } \r\n \r\n}\r\n","<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <dbgetter \r\n [hidden]=\"!field.InListView\" \r\n class=\"flex\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { AnswerStyle, BaseField, DataGetter, DataGetterTypeEnum, FieldInvisibilityEnum, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { ImageSelectorField } from '../../../../models/fields/imageSelectorField.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { LogicOperator } from '../../../../models/logicOperator.model';\r\nimport { FireTrigger, Trigger, TriggerPropertyTypeEnum } from '../../../../models/trigger.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\n\r\n\r\n@Component({\r\n selector: \"add-form-record\",\r\n templateUrl: \"./add-form-record.component.html\",\r\n styleUrls: [\"./add-form-record.component.scss\"],\r\n})\r\nexport class AddFormRecordComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() orgaID: string = null; // preview\r\n \r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() isDuplicate: boolean = false;\r\n @Input() inConfig: boolean = false;\r\n @Input() showAllFields: boolean = false;\r\n\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n loader: boolean = false;\r\n isSaving: boolean = false;\r\n formloaded: boolean = false;\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService,\r\n private datepipe:DatePipe\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n\r\n if (this.form != null && this.orgaID != null) {\r\n this.form.OrgaID = this.orgaID;\r\n }\r\n\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n\r\n GlobalService.debugLog(\"AddFormRecord\")\r\n\r\n if (this.record == null) {\r\n this.showTitle = true;\r\n GlobalService.debugLog(\"AddFormRecord - new\")\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.showTitle = false;\r\n GlobalService.debugLog(\"AddFormRecord - edit\", this.record)\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n\r\n this.cdr.detectChanges();\r\n GlobalService.debugLog('oninit - DynaForm', this.form)\r\n }\r\n\r\n onStepChange(event: any): void {\r\n //console.log(\"IGOR_event.selectedIndex\", event.selectedIndex);\r\n if(GlobalService.isSpeechToTextStarted)\r\n {\r\n GlobalService.speechDirective.SpeechToTextToggler();\r\n }\r\n }\r\n\r\n //#region onRecordChange\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n console.log(\"FOrmForm\",this.formForm);\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach((f) => f.updateField());\r\n }\r\n }\r\n //#endregion onRecordChange\r\n\r\n //#region previewOrNewResponseRecord\r\n previewOrNewResponseRecord() {\r\n this.record = new Record();\r\n // aggiugni nuovo\r\n if (this.form != null) {\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if (this.formID != null) {\r\n // preview per admin\r\n this.getFormByID(); // dentro chiama fieldsConfig\r\n }\r\n }\r\n //#endregion previewOrNewResponseRecord\r\n\r\n //#region editResponseRecord\r\n editResponseRecord() {\r\n\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion(true);\r\n }\r\n }\r\n //#endregion editResponseRecord\r\n\r\n //#region saveOrExitForm\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n GlobalService.debugLog('add-form-record saveRecordEvent')\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.isSaving = true;\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n //#endregion saveOrExitForm\r\n\r\n //#region onSaveRecord\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n async onSaveRecord(event: Record) {\r\n GlobalService.debugLog('onSaveRecord - event', event)\r\n GlobalService.debugLog('onSaveRecord - form', this.form)\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = await this.createHTMLreadableValues(event);\r\n\r\n if (event.FK_InsertUser == null) {\r\n // Nuovo Record\r\n dynRec.FK_InsertUser = this.userID;\r\n dynRec.InsertDate = new Date();\r\n dynRec.FK_UpdateUser = this.userID;\r\n dynRec.UpdateDate = new Date();\r\n } else {\r\n // Modifica del Record\r\n dynRec.FK_InsertUser = event.FK_InsertUser\r\n dynRec.InsertDate = event.InsertDate;\r\n dynRec.FK_UpdateUser = this.userID;\r\n dynRec.UpdateDate = new Date();\r\n }\r\n\r\n var additionalParams = this.configurations.additionalParams == null ? event.AdditionalParams : this.configurations.additionalParams;\r\n dynRec.AdditionalParams = JSON.stringify(additionalParams);\r\n\r\n // var additionalInfo = this.additionalInfo == null ? event.AdditionalInfo : this.additionalInfo;\r\n var additionalInfo = event.AdditionalInfo == null ? this.configurations.additionalInfo : event.AdditionalInfo;\r\n dynRec.AdditionalInfo = JSON.stringify(additionalInfo);\r\n\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n\r\n GlobalService.debugLog('onSaveRecord - dynamicModuleParams', dynamicModuleParams)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n dynRec.ID = res.toString();\r\n event.ID = res.toString();\r\n this.checkTriggers(event);\r\n this.afterSaveRecordEvent.emit(dynRec);\r\n this.isSaving = false;\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(dynRec);\r\n }\r\n }\r\n //#endregion onSaveRecord\r\n\r\n //#region getFormByID\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\") {\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n }\r\n\r\n this.setDataGetter(this.form);\r\n GlobalService.debugLog('getFormByID - DynaForm', this.form)\r\n this.fieldsConfig();\r\n },\r\n (err) => { }\r\n );\r\n }\r\n //#endregion getFormByID\r\n\r\n //#region getRecordByID\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = this.isDuplicate ? \"\" : res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n this.record.FK_InsertUser = res.FK_InsertUser;\r\n this.record.FK_UpdateUser = res.FK_UpdateUser;\r\n this.record.InsertDate = res.InsertDate;\r\n this.record.UpdateDate = res.UpdateDate;\r\n\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n //#endregion getRecordByID\r\n\r\n //#region getFormByIDandVersion\r\n getFormByIDandVersion(getAttachments: boolean = false) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n GlobalService.debugLog(\"AFTER getFormByIDandVersion - this.form\", res)\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\") {\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n }\r\n\r\n this.setDataGetter(this.form);\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n\r\n if (!getAttachments) {\r\n this.loader = true;\r\n this.formloaded = true;\r\n } else {\r\n this.getAllRecordAttachments((<Record>this.record).ID);\r\n }\r\n }\r\n );\r\n }\r\n //#endregion getFormByIDandVersion\r\n\r\n //#region getAllRecordAttachments\r\n getAllRecordAttachments(recordID: string) {\r\n\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"answerId\",\r\n ParamValue: recordID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ];\r\n\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllAttachmentsEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynAttachment>) => {\r\n GlobalService.debugLog(\"GetAllAttachmentsEndPoint()\", res);\r\n\r\n this.form.Fields.forEach((field) => {\r\n if (field.FieldType == FieldTypeEnum.Immagine || field.FieldType == FieldTypeEnum['Immagine con markers']) {\r\n var attachId = this.record[field.Name];\r\n this.record[field.Name] = res.find(x => x.ID == attachId);\r\n }\r\n });\r\n\r\n this.loader = true;\r\n this.formloaded = true;\r\n }\r\n );\r\n\r\n }\r\n //#endregion getAllRecordAttachments\r\n\r\n //#region fieldsConfig\r\n fieldsConfig() {\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n GlobalService.debugLog(\"fieldsConfig - form\", this.form);\r\n this.loader = true;\r\n this.formloaded = true;\r\n }\r\n //#endregion fieldsConfig\r\n\r\n //#region createRecordProperties\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n GlobalService.debugLog(\"createRecordProperties - form\", this.form);\r\n GlobalService.debugLog(\"createRecordProperties - record\", this.record);\r\n }\r\n //#endregion createRecordProperties\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0);\r\n }\r\n GlobalService.debugLog(\"reorderFormFields - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n GlobalService.debugLog(\"createFormGroup - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0)\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n GlobalService.debugLog(\"createFieldGroups - form\", this.form);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //#region createHTMLreadableValues\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private async createHTMLreadableValues(record: Record) {\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - record\", record);\r\n GlobalService.debugLog(\"createHTMLreadableValues - form\", this.form);\r\n\r\n var formnames = new Array<string>();\r\n this.form.Fields.forEach((field) => { formnames.push(field.Name); });\r\n GlobalService.debugLog(\"createHTMLreadableValues - form fields names\", formnames);\r\n\r\n // alert(\"continue for values?\")\r\n\r\n let outputValuesArray = await this.getResponseValues(record, this.form);\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - outputValuesArray\", outputValuesArray);\r\n\r\n // alert(\"continue for templates?\")\r\n let template: string = this.getResponseTemplate(record, this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - template\", template);\r\n // alert(\"continue for output?\")\r\n const regex = /##([\\w]+)##/g;\r\n const output = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex)\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - output\", output);\r\n // alert(\"continue for ending?\")\r\n return output; // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n //#endregion createHTMLreadableValues\r\n\r\n //#region getResponseValues\r\n private async getResponseValues(record: Record, form: Form) {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // GlobalService.debugLog(\"(record).Values\", record);\r\n\r\n form.Fields.forEach(\r\n async (field) => {\r\n try {\r\n //GlobalService.debugLog(\"getResponseValues field\", field);\r\n // let foundObject = record.find(\r\n // (obj) => obj === field.Name\r\n // );\r\n let foundObject = record[field.Name];\r\n\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // PREPARO IL VALUEPAIRS\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Elenco generico\"]: {\r\n if (field.Formula != null && field.Formula) {\r\n // aggiungo a valuepairs i valori calcolati\r\n // (<ListValueField>foundObject).ValuePairs = (<ListValueField>foundObject).ValuePairs ? (<ListValueField>foundObject).ValuePairs : {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n field.Formula,\r\n record,\r\n null\r\n );\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) {\r\n (<ListValueField>field).ValuePairs[Number(key2)] = temp[key2];\r\n } else {\r\n (<ListValueField>field).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n } else if ((<ListValueField>field).ValuePairs != null && (<ListValueField>field).ValuePairs.length > 0) {\r\n // va bene così\r\n } else if ((<ListValueField>field).ValueString != null && (<ListValueField>field).ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n (<ListValueField>field).ValuePairs = GlobalService.stringToValuePairs((<ListValueField>field).ValueString);\r\n }\r\n\r\n let inverted = {};\r\n //GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>field).ValuePairs);\r\n // ValuePairs: {Si: 'Si', No: 'No'}\r\n for (let key in (<ListValueField>field).ValuePairs) {\r\n inverted[(<ListValueField>field).ValuePairs[key]] = key;\r\n }\r\n (<ListValueField>field).ValuePairs = inverted;\r\n if (record[field.Name] != null && (<ListValueField>field).IsMultiChoiche) {\r\n // caso MULTISCELTA\r\n let value = \"\";\r\n record[field.Name].forEach((element, i) => {\r\n value += (<ListValueField>field).ValuePairs[element];\r\n value += i == record[field.Name].length - 1 ? \"\" : \", \"\r\n });\r\n outputValuesArray[field.Name] = value;\r\n } else {\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n }\r\n //console.log(\"outputValuesArray\", outputValuesArray)\r\n\r\n break;\r\n };\r\n case FieldTypeEnum[\"Campo numerico\"]: {\r\n if ((<NumericField>field).IsInteger) {\r\n if ((<NumericField>field).DecimalSeparator == null) {\r\n outputValuesArray[field.Name] = record[field.Name];\r\n } else {\r\n outputValuesArray[field.Name] = record[field.Name];\r\n }\r\n } else {\r\n outputValuesArray[field.Name] = record[field.Name];\r\n }\r\n break;\r\n };\r\n\r\n case FieldTypeEnum['Immagine']: {\r\n console.log(\"immagine \", field.Name, record[field.Name])\r\n // Recupero il BASE64 dell'immagine Resized via promise client\r\n var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name].FileExtension + \";base64,\" + record[field.Name].FileDataBase64);\r\n\r\n // Aggiungo l'HTML con il nuovo BASE64\r\n outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name].ResizedImageHeightPx + \"px'>\";\r\n\r\n break;\r\n };\r\n\r\n\r\n case FieldTypeEnum['Allegato']: {\r\n console.log(\"Allegato \", field.Name, record[field.Name], record)\r\n\r\n if (record[field.Name] != null) {\r\n let resizedBase64;\r\n if (record[field.Name][0].IsImage) {\r\n // Recupero il BASE64 dell'immagine Resized via promise client\r\n resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name][0].FileExtension + \";base64,\" + record[field.Name][0].FileDataBase64);\r\n console.log(\"Allegato resizedBase64\", resizedBase64)\r\n // Aggiungo l'HTML con il nuovo BASE64\r\n outputValuesArray[field.Name] = '<img class=\"image-preview\" src=\"' + resizedBase64 + '\" style=\"height: ' + record[field.Name][0].ResizedImageHeightPx + 'px\">';\r\n } else if (record[field.Name][0].FileContentType == \"application/pdf\") {\r\n outputValuesArray[field.Name] = '<iframe src=\"data:application/pdf;base64,' + record[field.Name][0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n } else {\r\n outputValuesArray[field.Name] = '<iframe src=\"data:\"' + record[field.Name][0].FileExtension + '\";base64,' + record[field.Name][0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n }\r\n\r\n // Aggiungo l'HTML con il nuovo BASE64\r\n // outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name][0].ResizedImageHeightPx + \"px'>\";\r\n console.log(\"Allegato outputValuesArray\", outputValuesArray[field.Name])\r\n }\r\n\r\n break;\r\n };\r\n\r\n case FieldTypeEnum['Immagine con markers']: {\r\n\r\n // Recupero il BASE64 dell'immagine Resized via promise client\r\n var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name].FileExtension + \";base64,\" + record[field.Name].FileDataBase64);\r\n\r\n // Aggiungo l'HTML con il nuovo BASE64\r\n outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name].ResizedImageHeightPx + \"px'>\";\r\n\r\n break;\r\n };\r\n\r\n case FieldTypeEnum['Elenco immagini']: {\r\n outputValuesArray[field.Name] = \"\";\r\n if (record[field.Name] != null && (<ImageSelectorField>field).IsMultiChoiche) {\r\n record[field.Name].forEach((imageobj: number) => {\r\n var attachmentInForm: DynAttachment = (<ImageSelectorField>field).AttachmentList.find(x => x.ID == imageobj);\r\n if (attachmentInForm != null) {\r\n outputValuesArray[field.Name] += attachmentInForm.ButtonKey + \", \";\r\n }\r\n });\r\n var parts = outputValuesArray[field.Name].split(\", \");\r\n outputValuesArray[field.Name] = parts.slice(0, parts.length - 1).join(\", \");\r\n }\r\n else {\r\n var attachmentInForm: DynAttachment = (<ImageSelectorField>field).AttachmentList.find(x => x.ID == record[field.Name]);\r\n if (attachmentInForm != null) {\r\n outputValuesArray[field.Name] = attachmentInForm.ButtonKey;\r\n }\r\n }\r\n \r\n break;\r\n };\r\n case FieldTypeEnum['Data e/o ora']:{\r\n console.log(\"Data e/o ora\",field);\r\n if((<DateField>field).DateFormat!=null){\r\n let fixDateFormat=(<DateField>field).DateFormat.replace(\"DD\",\"dd\");\r\n outputValuesArray[field.Name] =this.datepipe.transform(record[field.Name],fixDateFormat);\r\n }\r\n else{\r\n if ((<DateField>field).IsOnlyDate== DateTimeTypeEnum['Solo data']) {\r\n outputValuesArray[field.Name] =this.datepipe.transform(record[field.Name],\"dd/MM/yyyy\");\r\n } else if ((<DateField>field).IsOnlyDate== DateTimeTypeEnum['Data e ora']) {\r\n outputValuesArray[field.Name] =this.datepipe.transform(record[field.Name],\"dd/MM/yyyy HH:mm\");\r\n } else if ((<DateField>field).IsOnlyDate== DateTimeTypeEnum['Solo orario']) {\r\n outputValuesArray[field.Name] =this.datepipe.transform(record[field.Name],\"HH:mm\");\r\n }\r\n }\r\n break;\r\n }\r\n\r\n default: {\r\n outputValuesArray[field.Name] = record[field.Name];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n )\r\n\r\n // Funziona, ma non è affidabile al 100%\r\n await this.delay(3000);\r\n\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for (const chiave in outputValuesArray) {\r\n if (outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n //#endregion getResponseValues\r\n\r\n //#region getResponseTemplate\r\n private getResponseTemplate(record: Record, form: Form): string {\r\n let template: string = '<div class=\"row\">';\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n GlobalService.debugLog('getResposneTemplate - pre - field', baseField)\r\n if (baseField.AnswerStyle == null || baseField.AnswerStyle == undefined) {\r\n baseField.AnswerStyle = new AnswerStyle();\r\n baseField.AnswerStyle.ColSpanSizes = baseField.ColSpanSizes;\r\n baseField.AnswerStyle.FieldstyleCSS = baseField.FieldstyleCSS;\r\n baseField.AnswerStyle.LabelstyleCSS = baseField.LabelstyleCSS;\r\n if (baseField.VisibleIf) {\r\n baseField.AnswerStyle.InListView = UtilityHelperService.EvaluateFieldFormula(baseField.VisibleIf, record, null);\r\n } else {\r\n baseField.AnswerStyle.InListView = baseField.InListView;\r\n baseField.AnswerStyle.VisibleIf = baseField.VisibleIf;\r\n }\r\n }\r\n if (baseField.AnswerStyle.VisibleIf) {\r\n const visibility = UtilityHelperService.EvaluateFieldFormula(baseField.AnswerStyle.VisibleIf, record, null)\r\n GlobalService.debugLog(\"EvaluateFieldFormula - visibility\", visibility);\r\n baseField.AnswerStyle.InListView = (visibility == true) ? true : false;\r\n }\r\n if (baseField.AnswerStyle.InListView) {\r\n template += '<div class=\"' + this.utilityService.getFieldAnswerStyleClass(baseField) + ' d-flex flex-column dynaform-answer-field\"> ' +\r\n ' <span class=\"dynaform-question\" style=\"' + baseField.AnswerStyle.LabelstyleCSS + '\">' + baseField.Description + ':</span>' +\r\n ' <span class=\"dynaform-response\" style=\"' + baseField.AnswerStyle.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span>' +\r\n '</div> \\n ';\r\n } else if (!baseField.AnswerStyle.InListView && baseField.AnswerStyle.Invisibility == FieldInvisibilityEnum['NASCOSTO CON AREA VISIBILE']) {\r\n template += '<div class=\"' + this.utilityService.getFieldAnswerStyleClass(baseField) + ' d-flex flex-column dynaform-answer-field\"> ' +\r\n '</div> \\n ';\r\n }\r\n\r\n GlobalService.debugLog('getResposneTemplate - post - field', baseField)\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n template += '</div>';\r\n return template;\r\n }\r\n //#endregion getResponseTemplate\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n delay(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n private async resizeBase64Image(base64Image: string) {\r\n return new Promise((resolve, reject) => {\r\n const imagetype = /data:image\\/([\\w]+);/;\r\n const match = base64Image.match(imagetype);\r\n const img = new Image();\r\n img.src = base64Image;\r\n img.onload = function () {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext('2d');\r\n const width = img.width;\r\n const height = img.height;\r\n const aspectRatio = width / height;\r\n\r\n const newHeight = 128;\r\n const newWidth = newHeight * aspectRatio;\r\n\r\n canvas.width = newWidth;\r\n canvas.height = newHeight;\r\n ctx.drawImage(img, 0, 0, newWidth, newHeight);\r\n let quality = 0.8;\r\n let dataURL = canvas.toDataURL('image/'+match[1], quality);\r\n resolve(dataURL);\r\n };\r\n });\r\n }\r\n\r\n setDataGetter(form) {\r\n form.Fields.forEach((field) => {\r\n\r\n // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio\r\n if (field.DataGetterValueBase64String != null) {\r\n field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));\r\n field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;\r\n } else {\r\n field.DataGetter = new DataGetter();\r\n }\r\n\r\n field.DataGetterValueBase64String = null;\r\n\r\n });\r\n }\r\n\r\n //#region checkTriggers\r\n // Controlla e spara il trigger se necessario\r\n checkTriggers(record: Record) {\r\n var fireTrigger = true;\r\n\r\n GlobalService.debugLog(\"checkTriggers - inside checkTriggers()\", this.form.Triggers);\r\n\r\n if (this.form.Triggers != null) {\r\n GlobalService.debugLog(\"checkTriggers - have triggers in form\");\r\n this.form.Triggers.forEach((trigger) => {\r\n fireTrigger = true;\r\n trigger.conditions.forEach((condition) => {\r\n if (!fireTrigger) { return; }\r\n var logicOperator: LogicOperator = condition.logicoperator as LogicOperator;\r\n var conditionKey = Object.keys(condition.record)[0];\r\n var conditionValue = condition.record[conditionKey];\r\n var recordValue = record[conditionKey];\r\n\r\n if (logicOperator == LogicOperator['='] && conditionValue != recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['!='] && conditionValue == recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['<'] && conditionValue <= recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['<='] && conditionValue < recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['>'] && conditionValue >= recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['>='] && conditionValue > recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['LIKE'] && recordValue.indexOf(conditionValue) == -1) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['NOT LIKE'] && recordValue.indexOf(conditionValue) != -1) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator.Si && !recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator.No && recordValue) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n }\r\n\r\n if (logicOperator == LogicOperator['CONTIENE ALMENO UNO'] && !conditionValue.some(c => recordValue.includes(c))) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n } \r\n \r\n if (logicOperator == LogicOperator['CONTIENE TUTTI'] && !conditionValue.every(c => recordValue.includes(c))) {\r\n fireTrigger = false;\r\n this.logTrigger(trigger, condition, record);\r\n return;\r\n } \r\n\r\n });\r\n\r\n GlobalService.debugLog(\"checkTriggers - fireTrigger? \", fireTrigger);\r\n\r\n if (fireTrigger) {\r\n\r\n // Il trigger va sparato. Valuto le funzioni interne\r\n var formulas = JSON.parse(JSON.stringify(trigger.formulas));\r\n GlobalService.debugLog(\"checkTriggers - evaluate formulas \", formulas);\r\n\r\n if (formulas != null && Object.keys(formulas).length > 0){\r\n Object.keys(formulas).forEach((key) => {\r\n var formula = formulas[key].value;\r\n GlobalService.debugLog(\"checkTriggers - formulas[key] \", formulas[key]);\r\n var temp;\r\n if (formulas[key].type == TriggerPropertyTypeEnum.DMMODULE) {\r\n temp = formula\r\n } else {\r\n temp = UtilityHelperService.EvaluateFieldFormula(\r\n formula,\r\n record,\r\n null\r\n );\r\n }\r\n\r\n formulas[key] = temp;\r\n\r\n });\r\n }\r\n\r\n // Sparo il trigger all'esterno\r\n var triggerToFire: FireTrigger = new FireTrigger();\r\n triggerToFire.form = this.form; // Il form che ha provocato il trigger\r\n triggerToFire.record = record; // Il record che ha provocato il trigger\r\n triggerToFire.trigger = trigger; // Il trigger\r\n triggerToFire.formulas = formulas; // Le formule inviate in input al modulo dinamico, valutate nel contesto del trigger e del record\r\n triggerToFire.userPatient = this.userID; // UserID\r\n\r\n console.log(\"checkTriggers - Trigger Fired \", triggerToFire.trigger.description, triggerToFire);\r\n this.fireTrigger.emit(triggerToFire);\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n logTrigger(trigger, condition, record) {\r\n GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger TRIGGER\", trigger);\r\n GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger CONDITION\", condition);\r\n GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger RECORD\", record);\r\n }\r\n //#endregion checkTriggers\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <span>{{form.Name}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n <!-- VISUALIZZAZIONE A STEPPER -->\r\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n class=\"add-form-record-stepper\" (selectionChange)=\"onStepChange($event)\">\r\n <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n \r\n <ng-template matStepLabel>\r\n {{group.Name}}\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n Successivo\r\n </button>\r\n <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\" [disabled]=\"formForm.invalid || formForm.disabled\"\r\n color=\"primary\" mat-raised-button>\r\n Salva\r\n </button>\r\n </div>\r\n\r\n </mat-step>\r\n </mat-horizontal-stepper>\r\n\r\n <!-- VISUALIZZAZIONE A TAB -->\r\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\"> \r\n <div class=\"mt-3\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n class=\"add-form-record-accordion\">\r\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{group.Name}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </form>\r\n\r\n <div class=\"row mt-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled || isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"formloaded\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field, showAllFields)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"field\" [QueryEditorComponent]=\"QueryEditorComponent\" [form]=\"form\" [record]=\"record\" [configurations]=\"configurations\" [endPointConfiguration]=\"endPointConfiguration\" [userID]=\"userID\" [inConfig]=\"inConfig\"\r\n (recordChange)=\"onRecordChange()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n</ng-template>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from \"@angular/core\";\r\nimport { UntypedFormGroup } from \"@angular/forms\";\r\nimport { DynamicModuleCompileConfig } from \"../../../../models/dynamicModuleCompileConfig.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { Form, FormScalarTypeEnum } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleFieldFixComponent } from \"../../dynamic-module-field-fix/dynamic-module-field.component\";\r\nimport {\r\n EndPointConfiguration,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { ListValueField } from \"./../../../../models/fields/listValueField.model\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n// import { DynamicModuleFieldComponent } from '../../dynamic-module-field/dynamic-module-field.component';\r\n\r\n@Component({\r\n selector: \"view-form-record\",\r\n templateUrl: \"./view-form-record.component.html\",\r\n styleUrls: [\"./view-form-record.component.scss\"],\r\n})\r\nexport class ViewFormRecordComponent implements OnInit {\r\n\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record: string | DynRecord;\r\n @Input() showBackButton = true;\r\n\r\n outputString: SafeHtml = \"\";\r\n form: Form;\r\n loader: boolean = false;\r\n // per controllare che il campo non sia una scelta multipla\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() goBackEvent: EventEmitter<null> = new EventEmitter<null>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n public domSanitizer: DomSanitizer) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog('this.record', this.record)\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n // this.getFormByIDandVersion();\r\n this.createOutput()\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n goBack() {\r\n this.goBackEvent.emit();\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new DynRecord();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n this.record.HTMLreadableValues = res.HTMLreadableValues;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n GlobalService.debugLog(\"record\", this.record);\r\n this.createOutput()\r\n // this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<DynRecord>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<DynRecord>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog(\"form\", this.form);\r\n this.createOutput();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createOutput() {\r\n this.outputString = this.domSanitizer.bypassSecurityTrustHtml((<DynRecord>this.record).HTMLreadableValues);\r\n this.loader = true;\r\n return\r\n // let outputValuesArray: Array<any> = this.getResponseValues(<DynRecord>this.record, this.form);\r\n // GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n // let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n // GlobalService.debugLog(\"template\", template);\r\n\r\n // const regex = /##([\\w]+)##/g;\r\n // const outputString = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n // this.outputString = this.domSanitizer.bypassSecurityTrustHtml(outputString);\r\n // GlobalService.debugLog(\"outputString\", this.outputString);\r\n\r\n // STAMPO A SCHERMO\r\n // this.loader = true;\r\n }\r\n\r\n // private getResponseValues(record: Record, form: Form ): Array<any> {\r\n // let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n // //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // for (let fieldName in (record).Values) {\r\n // try {\r\n // // fieldName è il nome del campo\r\n // // PREPARO VARIABILI VALORI CORRETTI\r\n // let foundObject = form.Fields.find(\r\n // (obj) => obj.Name === fieldName\r\n // );\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // GlobalService.debugLog(\"foundObject\", foundObject);\r\n // // gestire caso fieldtype 8 [elenco generico]\r\n // // fare un eval per popolare i valuePairs se è presente una formula\r\n // // prendere la label corretta\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n // {\r\n // if (foundObject.Formula) \r\n // {\r\n // // aggiungo a valuepairs i valori calcolati\r\n // // (<ListValueField>foundObject).ValuePairs = {};\r\n // var temp = UtilityHelperService.EvaluateFieldFormula(\r\n // foundObject.Formula,\r\n // record,\r\n // null\r\n // );\r\n // for (let key2 in temp) {\r\n // if (UtilityHelperService.isNumeric(temp[key2])) \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n // } else \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n // }\r\n // }\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]\", (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]);\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // }\r\n // let inverted = {};\r\n // for (let key in (<ListValueField>foundObject).ValuePairs) \r\n // { \r\n // inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n // }\r\n // (<ListValueField>foundObject).ValuePairs = inverted;\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // } else \r\n // {\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // outputValuesArray[fieldName] = (record).Values[fieldName];\r\n // }\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n // // cancello i valori indefiniti o nulli\r\n // for(const chiave in outputValuesArray){\r\n // if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n // outputValuesArray[chiave] = ''\r\n // }\r\n // return outputValuesArray;\r\n // }\r\n\r\n // private getResponseTemplate(form: Form): string {\r\n // let template: string = \"\";\r\n // // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n // form.Fields.forEach((baseField: BaseField) => {\r\n // template += '<span style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n // });\r\n // // (attualmente non esiste il concetto di tempate di output)\r\n // return template;\r\n // }\r\n\r\n // private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n // return template.replace(regex, (match, group) => {\r\n // return <string>outputValuesArray[group];\r\n // });\r\n // }\r\n\r\n}\r\n","<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DynamicModuleCompileConfig } from '../../../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../../models/endPointConfiguration.model';\r\nimport { Form } from '../../../../../models/form.model';\r\nimport { DynRecord, Record } from \"../../../../../models/record.model\";\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { single } from 'rxjs';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { FireTrigger } from '../../../../../models/trigger.model';\r\n\r\ntype PageState = null | 'visualizzaContenuto' | 'modificaContenuto'\r\n\r\n@Component({\r\n selector: 'lib-single-record',\r\n templateUrl: './single-record.component.html',\r\n styleUrls: ['./single-record.component.scss']\r\n})\r\nexport class SingleRecordComponent implements OnInit {\r\n \r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record;\r\n @Input() pageState: PageState = 'visualizzaContenuto';\r\n @Input() userID: string;\r\n @Input() form: Form;\r\n @Input() showBackButton = true;\r\n @Input() outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() onlyView: boolean = true;\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n loaded = false;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.outCompileConfigurations.showBackButton = false;\r\n \r\n GlobalService.debugLog(\"single-record - outCompileConfigurations\", this.outCompileConfigurations)\r\n this.loaded = true; \r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n GlobalService.debugLog('single-record saveRecordEvent', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n GlobalService.debugLog('single-record afterSaveRecordEvent', event)\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n \r\n onExternalComponentOut(ev: eventOut){\r\n this.out.emit(ev);\r\n }\r\n\r\n onFireTrigger(ev: FireTrigger){\r\n this.fireTrigger.emit(ev);\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n // onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n // this.loaded = false;\r\n // this.record = null;\r\n\r\n // this.onlyView = event.onlyView;\r\n\r\n // this.outCompileConfigurations.showBackButton = false;\r\n // this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n // this.outCompileConfigurations.showTitle = false;\r\n\r\n // if (event != null) {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByIDEndPoint\r\n // ) {\r\n // // preparo la versione corretta del form\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: event.record.EntID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // {\r\n // ParamName: \"Version\",\r\n // ParamValue: event.record.Version,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n\r\n // // preparo i dati del record\r\n // var dynamicRecordParams = [\r\n // {\r\n // ParamName: \"id\",\r\n // ParamValue: event.record.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByIDEndPoint,\r\n // dynamicRecordParams,\r\n // (res: DynRecord) => {\r\n // this.record = JSON.parse(res.SerializedValues);\r\n // this.record.ID = res.ID;\r\n // this.record.EntID = res.EntID;\r\n // this.record.userID = res.userID;\r\n // this.record.Version = res.Version;\r\n // this.record.HTMLreadableValues = res.HTMLreadableValues\r\n\r\n // this.loaded = true;\r\n // }\r\n // );\r\n // }\r\n // );\r\n // } else {\r\n // this.record = JSON.parse(JSON.stringify(event.record));\r\n // this.loaded = true;\r\n // }\r\n // } else {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n // this.record = null;\r\n // this.onlyView = false;\r\n // this.loaded = true;\r\n // },\r\n // (err) => {}\r\n // );\r\n\r\n // // this.record = null;\r\n // // this.onlyView = false;\r\n // // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // }\r\n // }\r\n \r\n}\r\n","<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <!--#region VISUALIZZA CONTENUTO -->\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n <!--#endregion VISUALIZZA CONTENUTO -->\r\n\r\n <!--#region MODIFICA RISPOSTA -->\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n <!--#endregion MODIFICA RISPOSTA -->\r\n\r\n</ng-container>","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class GraphField {\r\n Name: string;\r\n Description: string;\r\n Coords: Array<Coords> = new Array<Coords>();\r\n Visible: boolean = true;\r\n}\r\n\r\nexport class Coords {\r\n x: Date;\r\n y: number;\r\n label: string;\r\n name: string;\r\n}","import { Component, HostListener, Input, OnInit } from '@angular/core';\r\nimport { Coords } from '../../../../models/graph.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport * as ss from 'simple-statistics';\r\n\r\n\r\n@Component({\r\n selector: 'graph',\r\n templateUrl: './graph.component.html',\r\n styleUrls: ['./graph.component.scss']\r\n})\r\n\r\nexport class GraphComponent implements OnInit {\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.loaded = false;\r\n this.loadGraph(Math.floor(window.innerWidth/2));\r\n }\r\n\r\n @Input(\"data\") data: Array<Coords> = new Array<Coords>();\r\n @Input(\"title\") title: string = \"\";\r\n\r\n trendColor: string = '#EB0102';\r\n mainColor: string = '#006cad';\r\n\r\n m: number; // m of the linear regression\r\n q: number; // q of the linear regression\r\n trend: string; // trend string\r\n linearRegression: Array<Coords>; // variable used to store the linear regression points to plot\r\n\r\n\r\n\r\n stockChartOptions: any;\r\n\r\n loaded: boolean = false;\r\n counter: number = 0;\r\n\r\n constructor(\r\n private datePipe: DatePipe\r\n ) {} \r\n\r\n ngOnInit() {\r\n\r\n var self = this;\r\n\r\n // Aggiustamento e scrittura dati\r\n if (this.data.length > 0){\r\n this.loadGraph(Math.floor(window.innerWidth/2));\r\n }\r\n }\r\n\r\n loadGraph(width: number){\r\n\r\n var lastvalue = this.data[0];\r\n var firstvalue = this.data[this.data.length-1];\r\n\r\n var stockChartMinimum = new Date(firstvalue.x);\r\n var stockChartMaximum = new Date(lastvalue.x);\r\n var stockChartTitleText = this.title;\r\n var stockChartdataPoints = this.data;\r\n\r\n this.linearRegression = new Array<Coords>();\r\n this.trend = \"\";\r\n\r\n stockChartdataPoints.reverse();\r\n if (stockChartdataPoints.length > 2) {\r\n let x = [];\r\n for (let i = 0; i<stockChartdataPoints.length; i ++) {\r\n x.push([i, stockChartdataPoints[i].y]);\r\n }\r\n let parameters = ss.linearRegression(x);\r\n this.m = parameters.m;\r\n this.q = parameters.b;\r\n if (this.m > 0) {\r\n this.trend += \" ↗\";\r\n } else if (this.m < 0) {\r\n this.trend += \" ↘\";\r\n }\r\n // console.log(x);\r\n // console.log(stockChartdataPoints);\r\n \r\n for (let i = 0; i<stockChartdataPoints.length; i ++) {\r\n if (i == 0 || i == stockChartdataPoints.length - 1) {\r\n this.linearRegression.push({x: stockChartdataPoints[i].x,\r\n y: this.m*i + this.q,\r\n label: stockChartdataPoints[i].label,\r\n name: stockChartdataPoints[i].name\r\n })\r\n }\r\n }\r\n //this.linearRegression.reverse();\r\n // console.log(this.linearRegression);\r\n // console.log(this.m);\r\n // console.log(this.q);\r\n }\r\n\r\n this.stockChartOptions = {\r\n theme: 'light2',\r\n animationEnabled: true,\r\n width: width,\r\n height: 500,\r\n creditText: \"\",\r\n creditHref: \"\",\r\n title: {\r\n text: stockChartTitleText\r\n },\r\n charts: [{\r\n axisX: {\r\n labelFormatter: this.labelFormatterFunction,\r\n },\r\n data: [\r\n {\r\n toolTipContent: null,\r\n type: 'line',\r\n color: this.trendColor,\r\n showInLegend: true,\r\n legendMarkerType: \"none\",\r\n markerType: \"none\",\r\n legendText: \"Trend\" + this.trend,\r\n dataPoints: this.linearRegression\r\n },\r\n {\r\n type: \"spline\",\r\n dataPoints: stockChartdataPoints,\r\n color: this.mainColor,\r\n }\r\n ],\r\n culture: \"it\"\r\n }],\r\n rangeSelector: {\r\n enabled: false\r\n },\r\n navigator: {\r\n slider: {\r\n minimum: stockChartMinimum,\r\n maximum: stockChartMaximum\r\n }\r\n },\r\n options: {\r\n responsive: true,\r\n maintainAspectRatio: false\r\n }\r\n };\r\n\r\n this.loaded = true;\r\n }\r\n\r\n labelFormatterFunction(e) {\r\n let label = \"\";\r\n let dirtyLabel;\r\n let date = e.value;\r\n\r\n let newYear: number = date.getFullYear();\r\n let newMonth: number = date.getMonth() + 1;\r\n let newMonthString: string;\r\n if (newMonth < 10) {\r\n newMonthString = \"0\" + newMonth.toString();\r\n } else {\r\n newMonthString = newMonth.toString();\r\n }\r\n let newDay: number = date.getDate();\r\n let newDayString: string;\r\n if (newDay < 10) {\r\n newDayString = \"0\" + newDay.toString();\r\n } else {\r\n newDayString = newDay.toString();\r\n }\r\n let newHour: number = date.getHours();\r\n let newHourString: string;\r\n if (newHour < 10) {\r\n newHourString = \"0\" + newHour.toString();\r\n } else {\r\n newHourString = newHour.toString();\r\n }\r\n let newMinute: number = date.getMinutes();\r\n let newMinuteString: string;\r\n if (newMinute < 10) {\r\n newMinuteString = \"0\" + newMinute.toString();\r\n } else {\r\n newMinuteString = newMinute.toString();\r\n }\r\n\r\n dirtyLabel = newDayString + \"/\" + newMonthString + \"/\" + newYear.toString() + \" \" + newHourString + \":\" + newMinuteString;\r\n\r\n for (let i = 0; i < 5; i++) {\r\n label += dirtyLabel[i];\r\n }\r\n label += \" \";\r\n for (let i = 11; i < 16; i++) {\r\n label += dirtyLabel[i];\r\n }\r\n\r\n //label = label.replace(\"00:00\",\"\");\r\n \r\n return label;\r\n } \r\n \r\n\r\n}\r\n","<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\r\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Form } from \"../../../models/form.model\";\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { Coords, GraphField } from '../../../models/graph.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynRecord } from '../../../models/record.model';\r\nimport { FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\n\r\n@Component({\r\n selector: 'graphs',\r\n templateUrl: './graphs.component.html',\r\n styleUrls: ['./graphs.component.scss']\r\n})\r\nexport class GraphsComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n\r\n fieldFormGroup: UntypedFormGroup;\r\n\r\n loaded: boolean = false;\r\n generated: boolean = false;\r\n\r\n minperiod: Date = new Date();\r\n maxperiod: Date = new Date();\r\n minperiodS: string;\r\n maxperiodS: string;\r\n\r\n fields: Array<GraphField> = new Array<GraphField>();\r\n selectedFields: Array<GraphField>;\r\n selectedGeneratedFields: Array<GraphField>;\r\n\r\n answers: Array<DynRecord> = null;\r\n eligibleAnswers: Array<DynRecord> = null;\r\n\r\n // TMW-PICKER\r\n modes = ModeEnum\r\n timeType = TimeTypeEnum\r\n mode: ModeEnum;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private datePipe: DatePipe\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.formID != null){\r\n this.getFormByID();\r\n } else {\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n\r\n this.form = res;\r\n\r\n this.form.Fields.filter(x => x.FieldType == FieldTypeEnum['Campo numerico']).forEach((field) => {\r\n var graphField: GraphField = new GraphField();\r\n graphField.Name = field.Label;\r\n graphField.Description = field.Description;\r\n this.fields.push(graphField);\r\n });\r\n\r\n this.getRecordsByFormID();\r\n\r\n },\r\n (err) => {\r\n }\r\n );\r\n }\r\n }\r\n\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n this.loaded = true;\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n } \r\n\r\n generateGraph(){\r\n this.generated = false;\r\n this.selectedGeneratedFields = JSON.parse(JSON.stringify(this.selectedFields));\r\n this.getEligibleAnswers();\r\n }\r\n\r\n getEligibleAnswers(){\r\n // Azzero le coordinate\r\n this.selectedGeneratedFields.forEach((field) => { field.Coords = new Array<Coords>(); });\r\n this.eligibleAnswers = JSON.parse(JSON.stringify(this.answers));\r\n\r\n this.minperiodS = this.datePipe.transform(this.minperiod,\"yyyy-MM-dd\");\r\n this.maxperiodS = this.datePipe.transform(this.maxperiod,\"yyyy-MM-dd\");\r\n\r\n // Filtro minimo periodo\r\n if (this.minperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] >= this.minperiodS);\r\n }\r\n\r\n // Filtro massimo periodo\r\n if (this.maxperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] <= this.maxperiodS);\r\n }\r\n\r\n // Inserisco i dati trovati\r\n this.eligibleAnswers.forEach((answer) => {\r\n var answervalues = JSON.parse(answer.SerializedValues);\r\n this.selectedGeneratedFields.forEach((field) => {\r\n if (answervalues[field.Name] != null){\r\n var coords: Coords = new Coords();\r\n coords.x = new Date(answer.AnswerDate);\r\n coords.y = parseFloat(answervalues[field.Name]);\r\n coords.label = this.datePipe.transform(coords.x,\"dd/MM HH:mm\");\r\n coords.name = coords.label;\r\n field.Coords.push(coords);\r\n }\r\n });\r\n });\r\n\r\n setTimeout(() => { this.generated = true; }, 1000);\r\n\r\n }\r\n\r\n}\r\n","<mat-card class=\"list-view-form-record\" *ngIf=\"loaded\">\r\n <mat-card-content>\r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"fields\" [(ngModelInput)]=\"selectedFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'Description'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedFields == null || selectedFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateGraph()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div>\r\n <div class=\"generation_box\" *ngIf=\"generated\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <div class=\"generation_options\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"selectedField.Visible\">\r\n {{selectedField.Description}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"generation_graph\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <div class=\"generation_divider\" [hidden]=\"!selectedField.Visible\">\r\n <graph [data]=\"selectedField.Coords\" [title]=\"selectedField.Description\"></graph>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n </mat-card>","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\nimport {\r\n ConfigColumn,\r\n EqpTableComponent\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleCompileConfig } from \"./../../../..//models/dynamicModuleCompileConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { FireTrigger, Trigger } from '../../../../models/trigger.model';\r\nimport { dbDateService } from \"../../../../services/db-date.service\";\r\nimport { DatePipe } from \"@angular/common\";\r\n\r\ntype Panel = {\r\n record: Record,\r\n isOpen: boolean,\r\n pageState: string,\r\n highlighted: boolean\r\n}\r\n\r\n@Component({\r\n selector: \"list-view-form-record\",\r\n templateUrl: \"list-view-form-record.component.html\",\r\n styleUrls: [\"./list-view-form-record.component.scss\"],\r\n})\r\nexport class ListViewFormRecordComponent implements OnInit, OnChanges {\r\n \r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() compileConfigurations: DynamicModuleCompileConfig;\r\n outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string;\r\n @Input() orgaID: string;\r\n @Input() form: Form = null;\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() onlyView: boolean = true;\r\n @Input() records: Array<DynRecord> = null;\r\n @Input() highlightFilter: any = null;\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n test = false;\r\n selectedRecord: Record;\r\n loader: boolean;\r\n loadedform: boolean = false;\r\n panelOpenState: boolean[] = new Array<boolean>();\r\n public selectedIndex: number | null = null;\r\n visualizzaContenuto = false;\r\n modificaContenuto = false;\r\n\r\n\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n panels: Array<Panel>\r\n buttons: Array<RecordButton> = new Array<RecordButton>();\r\n popupLoader: boolean = false;\r\n\r\n @ViewChild(\"openAddDialog\", { static: false }) openAddDialog: TemplateRef<any>;\r\n openAddDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n @ViewChild(\"openGraphDialog\", { static: false }) openGraphDialog: TemplateRef<any>;\r\n openGraphDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n todoList: any;\r\n isFullOpened: boolean = false;\r\n\r\n // add new\r\n @Output() onAddViewEditRecord: EventEmitter<{\r\n record: Record;\r\n onlyView: boolean;\r\n }> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n\r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() dragStarted: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() dragReleased: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialog: MatDialog,\r\n private router: Router,\r\n private dbDateService: dbDateService,\r\n private datePipe: DatePipe\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // this.panelOpenState = [\r\n // ...Array(this.configurations.values.length + 1),\r\n // ].map(() => false);\r\n\r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n\r\n this.outCompileConfigurations = new DynamicModuleCompileConfig(\r\n this.compileConfigurations.showTitle,\r\n this.compileConfigurations.showSaveButton,\r\n this.compileConfigurations.showBackButton,\r\n this.compileConfigurations.userID,\r\n this.compileConfigurations.additionalParams,\r\n this.compileConfigurations.additionalInfo,\r\n this.compileConfigurations.prefilterParams,\r\n );\r\n //GlobalService.debugLog(\"list-view - outcompileConfigurations \", this.outCompileConfigurations);\r\n this.getFormByID();\r\n this.configureListviewButtons();\r\n\r\n // this.outCompileConfigurations.userID;\r\n // this.values = this.configurations.values\r\n // this.configureColumns();\r\n\r\n\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //GlobalService.debugLog('ngOnChanges', changes);\r\n\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (\r\n changes[\"configurations\"] != undefined &&\r\n changes[\"configurations\"].firstChange == false\r\n ) {\r\n this.configurations.values = changes[\"configurations\"].currentValue;\r\n this.reloadTables();\r\n }\r\n }\r\n\r\n onOpening(indice: number) {\r\n this.selectedIndex = indice;\r\n }\r\n\r\n configureListviewButtons() {\r\n this.buttons = [\r\n\r\n {\r\n \"icon\": \"visibility\",\r\n \"text\": \"Visualizza\",\r\n \"visible\": this.defaultListActions.view && (this.defaultListActions.edit || this.defaultListActions.duplicate || this.defaultListActions.delete),\r\n \"extraClass\": \"view-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.viewRecord(panel, true, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"edit\",\r\n \"text\": \"Modifica\",\r\n \"visible\": this.defaultListActions.edit,\r\n \"extraClass\": \"edit-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.EditRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"file_copy\",\r\n \"text\": \"Duplica\",\r\n \"visible\": this.defaultListActions.duplicate,\r\n \"extraClass\": \"duplicate-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.duplicateRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"delete\",\r\n \"text\": \"Cancella\",\r\n \"visible\": this.defaultListActions.delete,\r\n \"extraClass\": \"delete-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.deleteRecord(panel, event);\r\n }\r\n }\r\n\r\n ]\r\n this.buttons = this.buttons.concat(this.externalButtons).filter(x => x.visible);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n } \r\n\r\n this.loadedform = true;\r\n this.configureColumns();\r\n },\r\n (err) => { }\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n // this.createAdditionalActions();\r\n // this.createColumnsFromFormFields();\r\n if (this.records == null) {\r\n this.getRecordsByFormID();\r\n } else {\r\n //GlobalService.debugLog('Records Exists', this.records);\r\n this.generateAnswersArray(this.records);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetByFormIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetAllByEntAndUserIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n }\r\n\r\n private generateAnswersArray(res: Array<DynRecord>) {\r\n this.configurations.values = new Array<Record>();\r\n this.panels = new Array<Panel>();\r\n res.forEach((r) => {\r\n //GlobalService.debugLog(\"generateAnswersArray\", r)\r\n var tmpRec: Record = new Record();\r\n //GlobalService.debugLog(\"SerializedValues\", r.SerializedValues)\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = this.dbDateService.parseDatefromDB(r.AnswerDate).toString();\r\n\r\n tmpRec.HTMLreadableValues = r.HTMLreadableValues;\r\n //GlobalService.debugLog(\"AdditionalParams\", r.AdditionalParams)\r\n tmpRec.AdditionalParams = r.AdditionalParams != \"\" && r.AdditionalParams != null ? JSON.parse(r.AdditionalParams) : \"\";\r\n tmpRec.AdditionalInfo = r.AdditionalInfo != \"\" && r.AdditionalInfo != null ? JSON.parse(r.AdditionalInfo) : \"\";\r\n this.configurations.values.push(tmpRec);\r\n\r\n var isHighlighted = false;\r\n if (this.highlightFilter != null) {\r\n isHighlighted = true;\r\n Object.keys(this.highlightFilter).forEach((filter) => {\r\n if (!tmpRec.AdditionalParams[filter] || tmpRec.AdditionalParams[filter] != this.highlightFilter[filter]) {\r\n isHighlighted = false;\r\n }\r\n });\r\n }\r\n\r\n this.panels.push({ record: tmpRec, isOpen: false, pageState: null, highlighted: isHighlighted });\r\n });\r\n\r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n\r\n togglePanel(panel: any, record: Record) {\r\n //GlobalService.debugLog('togglePanel')\r\n if (this.defaultListViewFunction != null) {\r\n //GlobalService.debugLog('defaultListViewFunction', record)\r\n this.defaultListViewFunction(record);\r\n return;\r\n }\r\n if (!panel.isOpen) {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n // Simula un calcolo asincrono\r\n // setTimeout(() => {\r\n // }, 1000);\r\n } else {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n viewOrEditRecord(record: Record, onlyView: boolean, i) {\r\n //GlobalService.debugLog('viewOrEditRecord')\r\n this.loader = false;\r\n this.onAddViewEditRecord2({ record, onlyView });\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n viewRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('viewRecord')\r\n let record = panel.record\r\n this.visualizzaContenuto = true;\r\n this.modificaContenuto = false;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'visualizzaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n EditRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('EditRecord')\r\n\r\n let record = panel.record\r\n panel.record.AdditionalInfo = Object.assign({}, record.AdditionalInfo, this.configurations.updateInfo);\r\n this.visualizzaContenuto = false;\r\n this.modificaContenuto = true;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'modificaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'modificaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n externalCallback(ev: Event, callback: Function, record: any) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n callback(record);\r\n }\r\n\r\n /**\r\n * Metodo per duplicare un record della form.\r\n * @param record Record da duplicare.\r\n */\r\n duplicateRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n //GlobalService.debugLog('duplicateRecord');\r\n\r\n panel.record.ID = \"\";\r\n this.selectedRecord = panel.record;\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"80vw\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n //GlobalService.debugLog('list-view-form-record save', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n //GlobalService.debugLog('list-view-form-record aftersave', event)\r\n this.saveRecordEvent.emit(event);\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n\r\n this.loader = false;\r\n this.selectedRecord = null;\r\n\r\n this.onlyView = event.onlyView;\r\n\r\n this.outCompileConfigurations.showBackButton = false;\r\n this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n this.outCompileConfigurations.showTitle = false;\r\n\r\n if (event != null) {\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n } \r\n\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n this.selectedRecord.ID = res.ID;\r\n this.selectedRecord.EntID = res.EntID;\r\n this.selectedRecord.userID = res.userID;\r\n this.selectedRecord.Version = res.Version;\r\n\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.loader = true;\r\n }\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n } \r\n\r\n this.selectedRecord = null;\r\n this.onlyView = false;\r\n this.loader = true;\r\n },\r\n (err) => { }\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n openAll(){\r\n this.isFullOpened = !this.isFullOpened;\r\n this.panels.forEach((panel) => {\r\n if (panel.isOpen != this.isFullOpened){\r\n document.getElementById(\"p-\"+panel.record.ID+\"-visibility\").click();\r\n }\r\n })\r\n }\r\n\r\n openAddPopup() {\r\n // mi ssicuro che non ci siano pannelli in modifica perchè altrimenti va in conflitto l'update con l'add\r\n this.panels.forEach((panel) => {\r\n if(panel.pageState = 'modificaContenuto'){\r\n panel.pageState = 'visualizzaContenuto';\r\n }\r\n });\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> = new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.OrgaID = this.orgaID;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n } \r\n\r\n this.popupLoader = true;\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"80vw\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n },\r\n (err) => {\r\n console.error(\"error RunEndPointCall\", err);\r\n }\r\n );\r\n }\r\n\r\n openGraphs() {\r\n \r\n this.openGraphDialogRef = this.dialog.open(this.openGraphDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"80vw\",\r\n minHeight: \"70vh\",\r\n maxHeight: \"100vh\"\r\n });\r\n // this.router.navigate(['dynamic-module-graphs/' + this.formID + '/' + this.userID]);\r\n }\r\n\r\n closeGraphs() {\r\n this.openGraphDialogRef.close()\r\n }\r\n \r\n onAddSaveRecord(record: Record) {\r\n if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n onAddAfterSaveRecord(record: Record) {\r\n if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n printAdditionalInfo(record: Record) {\r\n let out = \"\";\r\n if(this.configurations.listViewRecordTitle != null && this.configurations.listViewRecordTitle.length > 0){\r\n\r\n this.configurations.listViewRecordTitle.forEach((item) => {\r\n if (record.AdditionalInfo != null){\r\n\r\n const regex = /\\((.+)\\)/g;; // pattern per uno o più numeri\r\n \r\n // (dateformat=EEEE, d MMMM y, H:mm:ss)\r\n const match = regex.exec(item);\r\n if (match) {\r\n let mymatch = match[1];\r\n if(mymatch.includes(\"dateformat\")){\r\n let format = mymatch.split(\"=\")[1];\r\n let token = item.split(\"(\")[0];\r\n out += record.AdditionalInfo != null && record.AdditionalInfo[token] != null ? \" \" + this.datePipe.transform(record.AdditionalInfo[token], format) : record[token] ? \" \" + this.datePipe.transform(record[token], format) : \" \" + token;\r\n }\r\n } else {\r\n out += record.AdditionalInfo != null && record.AdditionalInfo[item] != null ? \" \" + record.AdditionalInfo[item] : record[item] ? \" \" + record[item] : \" \" + item;\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n // throw new Error('Method not implemented.');\r\n return out;\r\n }\r\n\r\n onDragStarted(el: any){\r\n this.dragStarted.emit(el);\r\n }\r\n\r\n onDragReleased(){\r\n this.dragReleased.emit();\r\n }\r\n\r\n onExternalComponentOut(ev: eventOut){\r\n this.out.emit(ev);\r\n }\r\n\r\n onFireTrigger(ev: FireTrigger){\r\n this.fireTrigger.emit(ev);\r\n }\r\n\r\n}\r\n\r\n","<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title cdkDrag (cdkDragStarted)=\"onDragStarted([panel.record,form])\" (cdkDragReleased)=\"onDragReleased()\" *ngIf=\"configurations.isDraggableListView\">\r\n <mat-icon class=\"drag-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { SpinnerService } from '../../../services/spinner.service';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements OnInit {\r\n\r\n isLoading: Subject<boolean>;\r\n\r\n constructor(private spinnerService: SpinnerService) { }\r\n\r\n ngOnInit(): void {\r\n this.isLoading = this.spinnerService.isLoading;\r\n }\r\n\r\n}\r\n","<div class=\"eqp-splash-screen\" *ngIf=\"isLoading | async\">\r\n <div id=\"loader\"></div>\r\n</div>","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { DynamicModuleRepairConfig } from '../../../../models/dynamicModuleRepairConfig.model';\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'repair-form-fields',\r\n templateUrl: 'repair-form-fields.component.html',\r\n styleUrls: ['./repair-form-fields.component.scss']\r\n})\r\nexport class RepairFormFieldsComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleRepairConfig\r\n @Input(\"formID\") formID: string;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // @Input() FormJSON: string;\r\n @Output() onSaveJson: EventEmitter<string> = new EventEmitter<string>();\r\n @ViewChild('formJson', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n constructor(private utilityHelperService: UtilityHelperService) { }\r\n\r\n ngOnInit(): void {\r\n this.getFormByID();\r\n }\r\n printTheJSONInPrettyFormat() {\r\n var badJSON = this.configurations.FormJSON;\r\n var parseJSON = JSON.parse(badJSON);\r\n this.configurations.FormJSON = JSON.stringify(parseJSON, undefined, 4);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.configurations.FormJSON = JSON.stringify(res.Fields);\r\n },\r\n (err) => {}\r\n );\r\n}\r\n\r\n saveJson(){\r\n this.onSaveJson.emit(this.configurations.FormJSON);\r\n }\r\n}\r\n","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formJson\" #formJson type=\"textarea\" id=\"formJson\" rows=\"50\" style=\"width: 100%\"\r\n [(ngModel)]=\"configurations.FormJSON\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <button (click)=\"printTheJSONInPrettyFormat()\">Formatta Json</button>\r\n <button class=\"mr-2 save \" mat-raised-button color=\"primary\" (click)=\"saveJson()\" type=\"button\">\r\n Salva\r\n</button>\r\n</div>\r\n\r\n","import { FieldTypeEnum } from \"./baseField.model\";\r\nimport { LogicOperatorBoolean, LogicOperatorDate, LogicOperatorImageSelector, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText } from \"./logicOperator.model\";\r\n\r\nexport class Statistic{\r\n fieldtype:FieldTypeEnum;\r\n key: string;\r\n value: string;\r\n logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector\r\n}\r\n\r\nexport class FilterStatistic {\r\n Statistics: Array<Statistic> = new Array<Statistic>();\r\n PrefilterParams: any;\r\n AdditionalParams: any;\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'text-filter-template',\r\n templateUrl: './text-filter-template.component.html',\r\n styleUrls: ['./text-filter-template.component.scss']\r\n})\r\nexport class TextFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <input\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [type]=\"getInputType()\"\r\n [formControlName]=\"field.Name\"\r\n [readonly]=\"false\"\r\n [required]=\"false\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onFilterChange()\"\r\n />\r\n <mat-error\r\n *ngIf=\"\r\n !field.FormFormGroup.valid &&\r\n field.FormFormGroup.controls[field.Name].touched\r\n \"\r\n >\r\n Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n {{ field.MaxLenght }}\r\n </mat-error>\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >keyboard_voice</mat-icon\r\n >\r\n\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"logicOperatorText\"\r\n [(ngModel)]=\"selectedLogicOperator\"\r\n (ngModelChange)=\"onFilterChange()\"\r\n ></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'numeric-filter-template',\r\n templateUrl: './numeric-filter-template.component.html',\r\n styleUrls: ['./numeric-filter-template.component.scss']\r\n})\r\nexport class NumericFilterTemplateComponent implements OnInit {\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n logicOperatorNumeric = LogicOperatorNumeric;\r\n selectedLogicOperator: LogicOperatorNumeric;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name], //(this.record[this.field.Name] / (Math.pow(10,this.field.DecimalPrecision))).toFixed(this.field.DecimalPrecision).toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onFilterChange()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n selector: 'boolean-filter-template',\r\n templateUrl: './boolean-filter-template.component.html',\r\n styleUrls: ['./boolean-filter-template.component.scss']\r\n})\r\nexport class BooleanFilterTemplateComponent {\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n logicOperatorBoolean = LogicOperatorBoolean;\r\n selectedLogicOperator: LogicOperatorBoolean;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name].toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\n// private configureEqpNumericOptions() {\r\n\r\n// this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n// this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n// this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n// this.eqpNumericOptions.allowNegative=true;\r\n// if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n// this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n// else\r\n// this.eqpNumericOptions.decimal=\".\";\r\n// if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n// this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n// if(this.field.IsInteger== false){\r\n// if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n// else { this.eqpNumericOptions.precision = 2; }\r\n// }else{\r\n// this.eqpNumericOptions.precision = 0;\r\n// }\r\n// }\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" \r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorBoolean\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\n\r\n@Component({\r\n selector: 'date-filter-template',\r\n templateUrl: './date-filter-template.component.html',\r\n styleUrls: ['./date-filter-template.component.scss']\r\n})\r\nexport class DateFilterTemplateComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n logicOperatorNumeric = LogicOperatorDate;\r\n selectedLogicOperator: LogicOperatorDate;\r\n activeCondition: boolean = false; \r\n\r\n modes = ModeEnum;\r\n timeType = TimeTypeEnum;\r\n mode: ModeEnum;\r\n\r\n outputFormat: string = null;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n this.setOutputFormat();\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.mode = ModeEnum.DATEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.mode = ModeEnum.TIMEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.mode = ModeEnum.DATETIMEPICKER;\r\n break;\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n} \r\n\r\nsetOutputFormat(){\r\n if (this.outputFormat != null){\r\n this.outputFormat = this.field.DateFormat; \r\n } else {\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n this.outputFormat = 'DD/MM/YYYY';\r\n }\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n this.outputFormat = 'DD/MM/YYYY HH:mm';\r\n } \r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n this.outputFormat = 'HH:mm';\r\n } \r\n }\r\n \r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onFilterChange()\" [outputFormat]=\"outputFormat\" >\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorListValue } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n@Component({\r\n selector: 'list-value-filter-template',\r\n templateUrl: './list-value-filter-template.component.html',\r\n styleUrls: ['./list-value-filter-template.component.scss']\r\n})\r\nexport class ListValueFilterTemplateComponent {\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n validatorsArray: any[] = [];\r\n logicOperatorListValue = LogicOperatorListValue;\r\n selectedLogicOperator: LogicOperatorListValue;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\narrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n this.setArrayData();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n this.prepareValuePairs();\r\n if (this.field.ValuePairs != null){\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n }\r\n }\r\n\r\n prepareValuePairs() {\r\n if (this.field.Formula) {\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n // va bene così\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n\r\n }\r\n }\r\n \r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-select [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [isRequired]=\"false\" [isDisabled]=\"false\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"true\"\r\n (ngModelInputChange)=\"onFilterChange()\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorListValue\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'textarea-filter-template',\r\n templateUrl: './textarea-filter-template.component.html',\r\n styleUrls: ['./textarea-filter-template.component.scss']\r\n})\r\nexport class TextareaFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row textareaFilterTemplate\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <textarea\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [type]=\"getInputType()\"\r\n [formControlName]=\"field.Name\"\r\n [readonly]=\"false\"\r\n [required]=\"false\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onFilterChange()\"\r\n ></textarea>\r\n <mat-error\r\n *ngIf=\"\r\n !field.FormFormGroup.valid &&\r\n field.FormFormGroup.controls[field.Name].touched\r\n \"\r\n >\r\n Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n {{ field.MaxLenght }}\r\n </mat-error>\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >keyboard_voice</mat-icon\r\n >\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"logicOperatorText\"\r\n [(ngModel)]=\"selectedLogicOperator\"\r\n (ngModelChange)=\"onFilterChange()\"\r\n ></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'attachment-filter-template',\r\n templateUrl: './attachment-filter-template.component.html',\r\n styleUrls: ['./attachment-filter-template.component.scss']\r\n})\r\nexport class AttachmentFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'image-filter-template',\r\n templateUrl: './image-filter-template.component.html',\r\n styleUrls: ['./image-filter-template.component.scss']\r\n})\r\nexport class ImageFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'list-form-record-filter-template',\r\n templateUrl: './list-form-record-filter-template.component.html',\r\n styleUrls: ['./list-form-record-filter-template.component.scss']\r\n})\r\nexport class ListFormRecordFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { ImageSelectorField } from '../../../../../models/fields/imageSelectorField.model';\r\nimport { LogicOperatorImageSelector } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'image-selector-filter-template',\r\n templateUrl: './image-selector-filter-template.component.html',\r\n styleUrls: ['./image-selector-filter-template.component.scss']\r\n})\r\nexport class ImageSelectorFilterTemplateComponent {\r\n //variabili esterne per l'input dei campi\r\n @Input() field: ImageSelectorField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n validatorsArray: any[] = [];\r\n logicOperatorImageSelectorValue = LogicOperatorImageSelector;\r\n selectedLogicOperator: LogicOperatorImageSelector;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\narrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n this.setArrayData();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n this.prepareValuePairs();\r\n if (this.field.ValuePairs != null){\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n }\r\n }\r\n\r\n prepareValuePairs() {\r\n if (this.field.Formula) {\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n // va bene così\r\n\r\n }\r\n }\r\n \r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n}\r\n","<!--<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-select class=\"image-selector\" [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [includeFullObject]=\"false\" [isRequired]=\"false\" [isDisabled]=\"false\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"false\"\r\n (ngModelInputChange)=\"onFilterChange()\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorImageSelectorValue\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>-->","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'dynamic-module-filter-fix',\r\n templateUrl: './dynamic-module-filter-fix.component.html',\r\n styleUrls: ['./dynamic-module-filter-fix.component.scss']\r\n})\r\nexport class DynamicModuleFilterFixComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev) {\r\n this.filterChange.emit(ev);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","\r\n<text-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</text-filter-template>\r\n\r\n<textarea-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</textarea-filter-template>\r\n\r\n<boolean-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</boolean-filter-template>\r\n\r\n<date-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</date-filter-template>\r\n\r\n<numeric-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</numeric-filter-template>\r\n\r\n<list-value-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</list-value-filter-template>\r\n\r\n <attachment-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</attachment-filter-template>\r\n\r\n<image-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-filter-template>\r\n\r\n\r\n<image-selector-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-selector-filter-template>\r\n\r\n<list-form-record-filter-template #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\">\r\n</list-form-record-filter-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record, RecordButton } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { FilterStatistic, Statistic } from '../../../../models/statistic.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { ConfigColumn, CustomExportType, ExportEqpTable, TypeColumn } from '@eqproject/eqp-table';\r\nimport { ExportType } from 'mat-table-exporter';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'filter-form-statistic',\r\n templateUrl: './filter-form-statistic.component.html',\r\n styleUrls: ['./filter-form-statistic.component.scss']\r\n})\r\nexport class FilterFormStatisticComponent {\r\n \r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(false,true,false,false,false);\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n\r\n //Pagination\r\n pageSize: number = 100;\r\n pageIndex: number = 0;\r\n pageLength: Array<number> = [5,10,25,100]\r\n \r\n exportEqpTable: ExportEqpTable = new ExportEqpTable();\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n showNewSearchButton = true;\r\n loader: boolean = false;\r\n showListView: boolean = false;\r\n filterResults: Array<DynRecord> = null;\r\n filterEqpTableResults: Array<any> = new Array<any>();\r\n listViewConfigurations: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n columns: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n filters: FilterStatistic = new FilterStatistic();\r\n filterResultViewModes = DynamicModuleFilterResultViewModeEnum;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.endPointConfiguration.Records.ApplyFilter.Url = this.endPointConfiguration.Records.ApplyFilter.Url + \"/\" + this.formID;\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n this.showNewSearchButton = this.configurations.showNewSearchButton;\r\n\r\n this.listViewConfigurations.showTitle = this.configurations.showTitle;\r\n this.listViewConfigurations.userID = this.configurations.userID;\r\n this.listViewConfigurations.externalButtons = null;\r\n this.listViewConfigurations.values = null;\r\n this.listViewConfigurations.defaultListActions = this.defaultListActions;\r\n\r\n if(this.record == null){\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n \r\n this.cdr.detectChanges();\r\n }\r\n\r\n \r\n configureColumns(){\r\n\r\n this.columns = [];\r\n this.filterEqpTableResults = new Array<any>();\r\n \r\n if (this.filterResults != null && this.filterResults.length > 0){\r\n \r\n // Crea campi e contenuti tabella\r\n this.filterResults.forEach((result,index) => {\r\n var object = JSON.parse(result.SerializedValues);\r\n if (index == 0){\r\n Object.keys(object).forEach((element,index2) => {\r\n this.columns.push({ key: element, display: element, styles: { flex: \"0 0 10%\" }},);\r\n });\r\n this.columns.push({ key: \"AnswerDate\", display: \"AnswerDate\", type: TypeColumn.Date, format: \"dd/MM/yyyy HH:mm:ss\", value: () => { return result.AnswerDate; }, styles: { flex: \"0 0 10%\" }},);\r\n this.columns.push({ key: \"Version\", display: \"Version\", value: () => { return result.Version; }, styles: { flex: \"0 0 10%\" }},);\r\n \r\n }\r\n this.filterEqpTableResults.push(object);\r\n });\r\n }\r\n\r\n }\r\n\r\n configureExport(){\r\n this.exportEqpTable.buttonText = \"Scarica\"\r\n this.exportEqpTable.exportFileType = CustomExportType.XLSX;\r\n this.exportEqpTable.exportFileName = \"DynamicModule_\"+this.form.Code;\r\n this.exportEqpTable.buttonIcon = \"cloud_download\";\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev:Statistic) {\r\n this.filters.Statistics = this.filters.Statistics.filter(x => x.key != ev.key);\r\n if (ev.logicoperator != null){\r\n this.filters.Statistics.push(ev); \r\n }\r\n }\r\n\r\n ApplyFilter(){\r\n this.filters.AdditionalParams = this.configurations.additionalParams;\r\n this.filters.PrefilterParams = this.configurations.prefilterParams;\r\n\r\n var filterParams = [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue: this.filters,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n }\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.ApplyFilter,\r\n filterParams,\r\n (res: Array<DynRecord>) => {\r\n \r\n this.filterResults = res;\r\n this.configureExport();\r\n this.configureColumns();\r\n this.showListView = true;\r\n this.afterFilter.emit(res);\r\n }\r\n );\r\n }\r\n\r\n reset(){\r\n\r\n // Resetto i campi del record\r\n Object.keys(this.record).forEach(key => {\r\n this.record[key] = null;\r\n });\r\n\r\n this.filterResults = null;\r\n this.filters.Statistics = [];\r\n this.showListView = false;\r\n }\r\n\r\n previewOrNewResponseRecord(){ \r\n this.record = new Record();\r\n if(this.onlyView == true){\r\n // modalità preview\r\n if(this.form != null){\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if(this.formID != null){\r\n // preview per admin\r\n this.getFormByID() // dentro chiama fieldsConfig\r\n }\r\n } else {\r\n // aggiugni nuovo\r\n this.fieldsConfig();\r\n }\r\n }\r\n editResponseRecord(){\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(event);\r\n }\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.fieldsConfig();\r\n },\r\n (err) => {}\r\n );\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n \r\n fieldsConfig(){ \r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 )\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createHTMLreadableValues(record:Record) {\r\n GlobalService.debugLog(\"record\", record);\r\n GlobalService.debugLog(\"form\", this.form);\r\n let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n GlobalService.debugLog(\"template\", template);\r\n\r\n const regex = /##([\\w]+)##/g;\r\n return this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n\r\n private getResponseValues(record: Record, form: Form ): Array<any> {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n GlobalService.debugLog(\"(record).Values\", record);\r\n for (let fieldName in record) {\r\n try {\r\n // fieldName è il nome del campo\r\n // PREPARO VARIABILI VALORI CORRETTI\r\n let foundObject = form.Fields.find(\r\n (obj) => obj.Name === fieldName\r\n );\r\n GlobalService.debugLog(\"fieldName\", fieldName);\r\n GlobalService.debugLog(\"foundObject\", foundObject);\r\n // gestire caso fieldtype 8 [elenco generico]\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n {\r\n if (foundObject.Formula) \r\n {\r\n // aggiungo a valuepairs i valori calcolati\r\n // (<ListValueField>foundObject).ValuePairs = {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n foundObject.Formula,\r\n record,\r\n null\r\n );\r\n GlobalService.debugLog(\"temp\", temp);\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) \r\n {\r\n (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n } else \r\n {\r\n (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n }\r\n let inverted = {};\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n for (let key in (<ListValueField>foundObject).ValuePairs) \r\n { \r\n inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n }\r\n (<ListValueField>foundObject).ValuePairs = inverted;\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n } else \r\n {\r\n GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n outputValuesArray[fieldName] = record[fieldName];\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for(const chiave in outputValuesArray){\r\n if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n\r\n private getResponseTemplate(form: Form): string {\r\n let template: string = \"\";\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n template += '<span class=\"dynaform-question\" style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span class=\"dynaform-response\" style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n return template;\r\n }\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n</ng-template>","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from \"@angular/core\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfig } from \"../../../models/dynamicModuleConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"../../../models/dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"../../../models/dynamicModuleRepairConfig.model\";\r\nimport { DynamicModuleViewModeEnum } from \"../../../models/dynamicModuleViewModeEnum\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport { Form, FormTypeEnum } from \"../../../models/form.model\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../models/record.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { FilterResultType } from \"@eqproject/eqp-filters\";\r\nimport { DynamicModuleFilterResultViewModeEnum } from \"../../../models/dynamicModuleFilterResultViewModeEnum.model\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { FireTrigger, Trigger } from \"../../../models/trigger.model\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module\",\r\n templateUrl: \"./eqp-dynamic-module.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n\r\n // @Input() configurations: DynamicModuleConfig;\r\n @Input() configurations: DynamicModuleGeneralConfig;\r\n @Input() formID: string;\r\n @Input() starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n\r\n @Input() userID: string = \"0\";\r\n @Input() orgaID: string = \"0\"; \r\n @Input() showTitle = true;\r\n @Input() showBackButton: boolean = true;\r\n @Input() showSaveButton = true;\r\n @Input() values: Array<Record> = null;\r\n @Input() FormJSON = \"\";\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() listViewRecordTitle: Array<string> = new Array<string>();\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault();\r\n @Input() onSaveBackToList = false;\r\n @Input() onBackTo: DynamicModuleViewModeEnum = null;\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n @Input() additionalParams: any = null;\r\n @Input() additionalInfo: any = null;\r\n @Input() updateInfo: any = null;\r\n @Input() prefilterParams: any = null;\r\n @Input() showNewSearchButton: boolean = true;\r\n @Input() answerToDuplicateId: any;\r\n @Input() highlightFilter: any;\r\n @Input() selectedRecord: Record | string = null;\r\n @Input() isDraggableListView: boolean = true;\r\n \r\n @Input() QueryEditorComponent: any; // L'intero componente query Editor\r\n\r\n context: Context = new Context();\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n //@Input() form: Form = new Form();\r\n // defaultListActions: dynamicModuleListFormRecordActionsDefault = new dynamicModuleListFormRecordActionsDefault();\r\n // FormJSON: string = \"\";\r\n\r\n /**\r\n * Eventi emessi quando si salva, elimina o duplica un record\r\n * se non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() deleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() SaveJSON: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n /**\r\n * Eventi emessi DOPO aver eseguito una chiamata al server per il salvataggio,\r\n * l'eliminazione o la duplicazione di un record all'endpoint specificato.\r\n */\r\n @Output() afterSaveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterDeleteRecord: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n @Output() dragStarted: EventEmitter<Record> = new EventEmitter<any>();\r\n @Output() dragReleased: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n form: Form = new Form();\r\n lastform: Form = new Form();\r\n FormTypeEnum = FormTypeEnum;\r\n dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;\r\n onlyView: boolean;\r\n viewMode: DynamicModuleViewModeEnum;\r\n defaultViewMode: DynamicModuleViewModeEnum;\r\n\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n loader: boolean = false;\r\n isDuplicate: boolean = false;\r\n\r\n constructor(public utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef) {}\r\n\r\n async ngOnInit() {\r\n GlobalService.debugMode = this.debugMode;\r\n\r\n this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;\r\n\r\n this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n this.showTitle,\r\n this.showSaveButton,\r\n this.showBackButton,\r\n this.userID,\r\n this.additionalParams,\r\n this.additionalInfo,\r\n this.prefilterParams,\r\n this.showNewSearchButton\r\n );\r\n this.dynamicModuleListConfig = new DynamicModuleListConfig(\r\n this.showTitle,\r\n this.values,\r\n this.defaultListActions,\r\n this.userID,\r\n new Array<RecordButton>(),\r\n this.updateInfo,\r\n this.listViewRecordTitle,\r\n this.isDraggableListView\r\n );\r\n this.dynamicModuleRepairConfig = new DynamicModuleRepairConfig(\r\n this.FormJSON\r\n );\r\n\r\n this.context = this.configurations.context;\r\n this.baseServerUrl = this.configurations.baseServerUrl;\r\n this.userToken = this.configurations.userToken;\r\n this.endPointConfiguration = this.configurations.endPointConfiguration;\r\n //this.formID = this.configurations.dynamicModuleGeneralConfig.formID\r\n\r\n // this.viewMode = this.starterViewMode\r\n UtilityHelperService.SetContext(this.context);\r\n \r\n this.configureDefaultEndPoints();\r\n\r\n if (this.FormJSON == \"\") {\r\n // prende il form e imposta la viewmode corretta\r\n // await this.getFormByID();\r\n }\r\n\r\n // this.viewMode = this.starterViewMode;\r\n GlobalService.debugLog(\"dynamicModuleCompileConfig\", this.dynamicModuleCompileConfig)\r\n this.loader = true\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE || this.starterViewMode == DynamicModuleViewModeEnum.FILTER) {\r\n // da vedere in getFormByID\r\n this.defaultViewMode = this.starterViewMode;\r\n setTimeout(() => this.onAddViewEditRecord(null), 1000);\r\n } else {\r\n this.viewMode = this.starterViewMode;\r\n this.loader = true;\r\n setTimeout(_ => { this.changeDetector.detectChanges() }, 0); // refresh ui\r\n\r\n }\r\n }\r\n\r\n // getFormByID(id: string = this.formID) {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: id,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.lastform = res;\r\n // this.form = res;\r\n // // this.getRecordsByFormID();\r\n\r\n // // if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE) {\r\n // // this.onAddViewEditRecord(null);\r\n // // }\r\n // // this.viewMode = this.starterViewMode;\r\n // },\r\n // (err) => {}\r\n // );\r\n // }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà \"baseServerUrl\" è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n ); \r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n // async getRecordsByFormID() {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n // ) {\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // await this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Array<DynRecord>) => {\r\n // this.dynamicModuleListConfig.values = new Array<Record>();\r\n // res.forEach((r) => {\r\n // var tmpRec: Record = new Record();\r\n // tmpRec = JSON.parse(r.SerializedValues);\r\n // tmpRec.ID = r.ID;\r\n // tmpRec.EntID = r.EntID;\r\n // tmpRec.Version = r.Version;\r\n // tmpRec.userID = r.userID;\r\n // tmpRec.AnswerDate = r.AnswerDate;\r\n // this.dynamicModuleListConfig.values.push(tmpRec);\r\n // });\r\n // }\r\n // );\r\n // }\r\n // }\r\n\r\n onGoBack(){\r\n this.viewMode = this.onBackTo ;\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord(event: { record: Record; onlyView: boolean }) {\r\n\r\n if (event != null) {\r\n this.onlyView = event.onlyView;\r\n GlobalService.debugLog(\"Version modulo\", event.record.Version)\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"query params\", dynamicModuleParams)\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n GlobalService.debugLog(\"RES\", res)\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n (this.selectedRecord as Record).ID = res.ID;\r\n (this.selectedRecord as Record).EntID = res.EntID;\r\n (this.selectedRecord as Record).userID = res.userID;\r\n (this.selectedRecord as Record).Version = res.Version;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n } else if (this.selectedRecord != null && typeof this.selectedRecord === \"string\"){\r\n\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.selectedRecord,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n (this.selectedRecord as Record).ID = res.ID;\r\n (this.selectedRecord as Record).EntID = res.EntID;\r\n (this.selectedRecord as Record).userID = res.userID;\r\n (this.selectedRecord as Record).Version = res.Version;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n );\r\n\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n // console.log(\"success RunEndPointCall\",res,this.defaultViewMode);\r\n this.form = res;\r\n\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n }\r\n \r\n this.selectedRecord = null;\r\n\r\n if (this.answerToDuplicateId != null){\r\n this.selectedRecord = this.answerToDuplicateId;\r\n this.isDuplicate = true;\r\n }\r\n \r\n this.onlyView = false;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n },\r\n (err) => {\r\n console.error(\"error RunEndPointCall\",err);\r\n }\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onViewRecord(record: Record) {\r\n this.loader = false\r\n this.selectedRecord = record\r\n this.viewMode = DynamicModuleViewModeEnum.VIEW\r\n this.loader = true\r\n\r\n }\r\n\r\n // #region SAVE\r\n /**\r\n * Metodo per gestire il componente dopo che il record è stato aggiunto o modificato.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n // this.getRecordsByFormID();\r\n this.saveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n /**\r\n * Metodo per gestire il componente dopo che e stata richiesta una aggiunto o una modifica del record nell' add-form-record.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onAfterSaveRecord(event: Record) {\r\n this.afterSaveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n\r\n onSaveJson(record: string) {\r\n this.SaveJSON.emit(record);\r\n }\r\n // #endregion SAVE\r\n\r\n\r\n\r\n\r\n\r\n\r\n reload(){\r\n this.loader = false;\r\n setTimeout(\r\n () => this.loader = true,\r\n 50\r\n )\r\n }\r\n\r\n //#region DELETE \r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n onDeleteRecord(record: Record) {\r\n\r\n\r\n console.log(\"onDeleteRecord\", record);\r\n\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records.DeleteEndPoint\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare il record selezionato?\",\r\n () => {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: record.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.DeleteEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n // this.getRecordsByFormID();\r\n this.afterDeleteRecord.emit(record);\r\n // this.reloadTables()\r\n this.reload();\r\n }\r\n );\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n } else {\r\n this.deleteRecord.emit(record);\r\n }\r\n }\r\n onAfterDeleteRecord(record: Record) {\r\n this.loader = false\r\n setTimeout(() => this.ngOnInit(), 50 )\r\n this.afterDeleteRecord.emit(record);\r\n }\r\n //#ednregion DELETE \r\n\r\n onAfterFilter(ev){\r\n this.afterFilter.emit(ev);\r\n }\r\n\r\n onDragStarted(el: any){\r\n this.dragStarted.emit(el);\r\n }\r\n\r\n onDragReleased(){\r\n this.dragReleased.emit();\r\n }\r\n\r\n onExternalComponentOut(ev: eventOut){\r\n this.out.emit(ev);\r\n }\r\n\r\n onFireTrigger(ev: FireTrigger){\r\n this.fireTrigger.emit(ev);\r\n }\r\n\r\n parseValueString(field, record){\r\n var output = null;\r\n if (field.Formula) {\r\n output = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(field.Formula, record, null);\r\n output = GlobalService.stringToValuePairs(temp);\r\n } else if (field.ValuePairs != null) {\r\n output = field.ValuePairs;\r\n } else if (field.ValueString != null && field.ValueString != \"\") {\r\n output = GlobalService.stringToValuePairs(field.ValueString);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n","import { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ],\r\n exports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule\r\n ],\r\n})\r\nexport class MaterialModule { }","import { TemplateRef } from \"@angular/core\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class DynamicModuleConfiguratorSpecificConfig {\r\n form: Form = new Form();\r\n orgaID: string = null;\r\n UserID: number = 0;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n constructor(\r\n form: Form = new Form(),\r\n orgaID: string = null,\r\n UserID: number = 0,\r\n innerFormManagment: boolean = false,\r\n innerFormRef: MatDialogRef<TemplateRef<any>> = null\r\n ) {\r\n this.form = form;\r\n this.orgaID = orgaID;\r\n this.UserID = UserID;\r\n this.innerFormManagment = innerFormManagment;\r\n this.innerFormRef = innerFormRef;\r\n }\r\n}\r\n","import { Context } from \"./context.model\";\r\nimport { DynamicModuleViewModeEnum } from \"./dynamicModuleViewModeEnum\";\r\nimport { EndPointConfiguration } from \"./endPointConfiguration.model\";\r\nimport { RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleGeneralConfig {\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n context: Context = new Context();\r\n\r\n /**\r\n * imposta la modalità di lavoro del componente COMPILE/LIST/REPAIR\r\n */\r\n // starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n /**\r\n * Specifica del form da visualizzare DynaForms.ID\r\n */\r\n // formID: string;\r\n\r\n constructor( baseServerUrl: string = \"\", userToken: string = \"\", context: Context = new Context(), endPointConfiguration: EndPointConfiguration = null){\r\n this.baseServerUrl = baseServerUrl;\r\n this.userToken = userToken;\r\n this.context = context;\r\n this.endPointConfiguration = endPointConfiguration;\r\n }\r\n}\r\n","import { tick } from \"@angular/core/testing\";\r\nimport { DynamicModuleConfiguratorSpecificConfig } from \"./dynamicModuleConfiguratorSpecificConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\n\r\nexport class DynamicModuleConfiguratorConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleConfiguratorSpecificConfig: DynamicModuleConfiguratorSpecificConfig\r\n\r\n constructor( general: DynamicModuleGeneralConfig = new DynamicModuleGeneralConfig(), specific: DynamicModuleConfiguratorSpecificConfig = new DynamicModuleConfiguratorSpecificConfig()) {\r\n this.dynamicModuleGeneralConfig = general\r\n this.dynamicModuleConfiguratorSpecificConfig = specific\r\n }\r\n}\r\n","export class Formula {\r\n formula:string;\r\n current_number:number = 0;\r\n prev_number:number = 0;\r\n stack:string[] = [];\r\n start:boolean = false; \r\n dotted:boolean = false; // input number having dot\r\n is_operand:boolean = false;\r\n radians:boolean = true;\r\n operation:string = '';\r\n memory:number = 0;\r\n in_memory:boolean = false;\r\n bracket:boolean = false;\r\n secondScreen:boolean = false;\r\n\r\n constructor(formula:string='') {\r\n this.formula=formula;\r\n }\r\n\r\n get() {\r\n return this.formula;\r\n }\r\n\r\n parse(value:string):number {\r\n return parseFloat(value);\r\n }\r\n\r\n getCurrentNumber() {\r\n return this.parse(this.formula);\r\n }\r\n\r\n setRadians(switcher:boolean):boolean {\r\n this.radians=switcher;\r\n return this.radians;\r\n }\r\n\r\n\r\n clear():string {\r\n this.formula = '0';\r\n\r\n this.dotted = false;\r\n this.is_operand = false;\r\n this.operation = '';\r\n this.start = false;\r\n this.stack = [];\r\n this.bracket = false;\r\n return this.formula;\r\n }\r\n\r\n clearMemory() {\r\n this.memory = 0;\r\n this.in_memory = false;\r\n }\r\n\r\n sumToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory += value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n deductToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory -= value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n readMemory():string {\r\n this.formula=this.memory.toString();\r\n return this.formula;\r\n }\r\n\r\n addBracket(value:string):void {\r\n // brackets can be set only if we have not set them before and we set operand (if we set brackets first - it will not make sense)\r\n if (value == '(' && this.bracket == false && this.is_operand == true) {\r\n this.stack.push(value);\r\n this.bracket = true;\r\n this.is_operand = false;\r\n }\r\n if (value == ')' && this.bracket == true && this.is_operand != true) {\r\n this.bracket = false;\r\n this.stack.push(this.formula);\r\n this.stack.push(')');\r\n this.is_operand = false;\r\n this.start = true;\r\n this.formula=eval(this.stack.join('')).toString();\r\n this.stack=[this.formula];\r\n }\r\n }\r\n\r\n setOperation(operand:string):void {\r\n this.operation=operand;\r\n // If operator already set - nothing doing\r\n if (this.is_operand) {\r\n this.operation = operand;\r\n return null;\r\n }\r\n this.is_operand = true;\r\n this.stack.push(this.formula);\r\n this.stack.push(this.operation);\r\n this.start=true;\r\n }\r\n\r\n calculate():number {\r\n let result:number;\r\n if (this.stack.length<3) return;\r\n this.is_operand = false;\r\n this.current_number=this.parse(this.stack.pop());\r\n this.operation=this.stack.pop();\r\n this.prev_number=this.parse(this.stack.pop());\r\n if (!this.prev_number) return 0;\r\n\r\n switch (this.operation) {\r\n case '+':\r\n result=this.prev_number+this.current_number;\r\n this.show(result);\r\n break;\r\n case '-':\r\n result=this.prev_number-this.current_number;\r\n this.show(result);\r\n break;\r\n case '*':\r\n result=this.prev_number*this.current_number;\r\n this.show(result);\r\n break;\r\n case '/':\r\n result=this.prev_number/this.current_number;\r\n this.show(result);\r\n break;\r\n case 'sqrt':\r\n result=Math.pow(this.prev_number,1/this.current_number);\r\n this.show(result);\r\n break;\r\n case 'pow':\r\n result=Math.pow(this.prev_number,this.current_number);\r\n this.show(result);\r\n break;\r\n case 'yx':\r\n result = Math.pow(this.current_number, this.prev_number);\r\n this.show(result);\r\n break;\r\n case 'log':\r\n result = Math.log(this.prev_number) / Math.log(this.current_number);\r\n break;\r\n }\r\n\r\n this.current_number=this.parse(this.formula);\r\n\r\n this.start=true;\r\n return result;\r\n }\r\n\r\n\r\n addValue(value:string,start:boolean):string {\r\n if (start || this.start || (this.dotted == false && this.formula == '0' && value != '.')) {\r\n this.formula='';\r\n }\r\n this.start=start;\r\n if (value=='.') {\r\n if (this.dotted==true) {\r\n return this.formula; \r\n }\r\n this.dotted=true;\r\n }\r\n this.formula+=value;\r\n this.is_operand = false;\r\n return this.formula;\r\n }\r\n\r\n removeSymbol():void {\r\n let len=this.formula.length;\r\n let last_symbol=this.formula.substring(len - 1,len);\r\n if (last_symbol == '.') {\r\n this.dotted=false;\r\n }\r\n this.formula=this.formula.slice(0,-1);\r\n }\r\n\r\n singleton(operand:string,data:any):number {\r\n let result:number=0;\r\n let rad:number=0;\r\n let grad=180/Math.PI;\r\n this.current_number=parseFloat(this.formula);\r\n \r\n switch (operand) {\r\n case 'invert':\r\n result=this.current_number*data;\r\n break;\r\n case 'sqrt':\r\n result=Math.sqrt(this.current_number);\r\n break;\r\n case 'sqrt3':\r\n result=Math.pow(this.current_number,1/3);\r\n break;\r\n case 'ln':\r\n result=Math.log(this.current_number);\r\n break;\r\n case 'lg':\r\n result=Math.log(this.current_number)/Math.log(data);\r\n break;\r\n case 'pow_base':\r\n let base=data=='e' ? Math.E : data;\r\n result=Math.pow(base,this.current_number);\r\n break;\r\n case 'pow':\r\n let step=parseFloat(data);\r\n result=Math.pow(this.current_number,step);\r\n break;\r\n case 'div':\r\n result=1/this.current_number;\r\n break;\r\n case 'sin':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.sin(rad);\r\n break;\r\n case 'cos':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.cos(rad);\r\n break;\r\n case 'tan':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.tan(rad);\r\n break;\r\n case 'sinh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/2;\r\n break;\r\n case 'cosh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)+Math.exp(-rad))/2;\r\n break;\r\n case 'tanh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/(Math.exp(rad)+Math.exp(-rad));\r\n break;\r\n case 'asin':\r\n result=Math.asin(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acos':\r\n result=Math.acos(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atan':\r\n result=Math.atan(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'asinh':\r\n result=Math.asinh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acosh':\r\n result=Math.acosh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atanh':\r\n result=Math.atanh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'rand':\r\n result=Math.random();\r\n break;\r\n case 'factorial':\r\n let n=Math.ceil(this.current_number);\r\n result=1;\r\n for (let i=1;i<=n;i++) {\r\n result*=i;\r\n }\r\n break;\r\n case 'percent':\r\n result=this.current_number/100;\r\n break;\r\n case 'ee':\r\n this.formula=this.current_number.toExponential();\r\n return 0;\r\n }\r\n\r\n this.start=true;\r\n this.show(result);\r\n return result;\r\n }\r\n\r\n show(value:number):string {\r\n this.formula=value.toString();\r\n return this.formula;\r\n }\r\n}","import { Component, OnInit, Inject, OnChanges, SimpleChanges, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { Formula } from '../../../modules/formula.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { BaseField } from '../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-add-formula-component',\r\n templateUrl: './add-formula-field.component.html',\r\n styleUrls: ['./add-formula-field.component.scss']\r\n})\r\n\r\nexport class AddFormulaComponent implements OnInit, OnChanges {\r\n\r\n @ViewChild('formula', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n caretPosition: number = 0;\r\n fieldNull: boolean = true;\r\n fieldSearched: string = \"\";\r\n formula = new Formula('0');\r\n stringaFormula: string = \"\";\r\n counter: number = 0;\r\n Fields: Array<BaseField> = [];\r\n fieldBeingDragged: any = null;\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n public dialogRef: MatDialogRef<AddFormulaComponent>,\r\n public dialog: MatDialog) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.Fields = this.data.fields;\r\n if (this.Fields != undefined)\r\n if (this.Fields.length == 0) {\r\n this.fieldNull = true;\r\n } else {\r\n this.fieldNull = false;\r\n }\r\n\r\n if (this.data.formula != undefined && this.data.formula != null && this.data.formula != \"\" && this.data.formula != \"undefined\") {\r\n this.stringaFormula = this.data.formula;\r\n localStorage.setItem(\"formula\", this.data.formula);\r\n } else {\r\n localStorage.setItem(\"formula\", \"\");\r\n }\r\n }\r\n\r\n clear(): any {\r\n this.stringaFormula = \"\";\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.caretPosition = this.formulaTextArea.nativeElement.selectionStart;\r\n }\r\n lostFocus(textArea) {\r\n this.caretPosition = textArea.selectionStart;\r\n }\r\n\r\n fieldSearchEvent(){\r\n this.fieldSearch(this.fieldSearched); \r\n }\r\n\r\n fieldSearch(text: string){\r\n this.Fields = this.data.fields.filter(x => x.Label.indexOf(text) != -1);\r\n }\r\n\r\n back() {\r\n\r\n if (localStorage.getItem('formula') != undefined || localStorage.getItem('formula') != null || localStorage.getItem('formula') != \"undefined\") {\r\n this.dialogRef.close({ formula: localStorage.getItem('formula').toString() });\r\n localStorage.removeItem('formula');\r\n }\r\n else\r\n this.dialogRef.close({ formula: \" \" });\r\n }\r\n addSymbol(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim()\r\n let lastChar = this.stringaFormula.charAt(this.stringaFormula.length - 1);\r\n if (lastChar == '+' || lastChar == '-' || lastChar == '*' || lastChar == '/') {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n\r\n }\r\n else {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" * \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" * \" + value;\r\n }\r\n\r\n }\r\n }\r\n\r\n addListNumberReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = 0; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addListStringrReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = \\\"\\\"; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addArrayList(): void {\r\n this.counter++;\r\n const value = \"var outputList\" + this.counter + \" = { \\\"key\\\" : value , \\\"key2\\\" : value2 }; outputList\" + this.counter + \";\";\r\n this.addNumber(value);\r\n }\r\n\r\n addNumber(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.isNumeric(value)) {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n this.caretPosition += 1;\r\n }\r\n else {\r\n if (value == \".\") {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n } else {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n }\r\n this.caretPosition += 2;\r\n }\r\n }\r\n\r\n addDateNow(){\r\n this.stringaFormula = this.stringaFormula + \" let date = new Date(); date \";\r\n }\r\n\r\n addElencoImmagini(nomechiave){\r\n this.stringaFormula = this.stringaFormula + \" let fieldname = 'NOME DEL CAMPO'; rec[fieldname].\"+nomechiave+\" \";\r\n }\r\n\r\n onDraggedField(){\r\n if (this.fieldBeingDragged != null){\r\n this.stringaFormula = this.stringaFormula.substring(0,this.caretPosition) + \" rec.\"+this.fieldBeingDragged+\" \"+ this.stringaFormula.substring(this.caretPosition);\r\n this.caretPosition = this.stringaFormula.length;\r\n this.fieldBeingDragged = null;\r\n }\r\n }\r\n\r\n onDragStarted(label){\r\n this.fieldBeingDragged = label;\r\n }\r\n\r\n save() {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.stringCheckParentesis(this.stringaFormula)) {\r\n localStorage.removeItem('formula');\r\n this.dialogRef.close({ formula: this.stringaFormula });\r\n }\r\n else {\r\n this.dialog.open(DialogDataExampleDialog, {\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'dialog-data-example',\r\n templateUrl: 'dialog-data-example.component.html'\r\n})\r\nexport class DialogDataExampleDialog {\r\n constructor() { }\r\n}","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea\r\n name=\"formula\"\r\n #formula\r\n type=\"textarea\"\r\n id=\"formula\"\r\n rows=\"10\"\r\n style=\"width: 100%\"\r\n class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\"\r\n (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n (mouseup)=\"onDraggedField()\"\r\n [(ngModel)]=\"stringaFormula\"\r\n ></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addDateNow()\"\r\n >\r\n dateNow\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListStringrReader()\"\r\n >\r\n Leggi Elenco Txt\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListNumberReader()\"\r\n >\r\n Leggi Elenco Num\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addArrayList()\"\r\n >\r\n ArrayList\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"\r\n addNumber(\r\n 'if( Condizione ) { se vera } else { se falsa }'\r\n )\r\n \"\r\n >\r\n IF\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\"\r\n >\r\n %\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\"\r\n >\r\n C\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\"\r\n >\r\n ÷\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\"\r\n >\r\n x<sup>2</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\"\r\n >\r\n x<sup>3</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\"\r\n >\r\n x<sup>y</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\"\r\n >\r\n ℼ\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\"\r\n >\r\n 7\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\"\r\n >\r\n 8\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\"\r\n >\r\n 9\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"\r\n >\r\n <sup>2</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"\r\n >\r\n <sup>y</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\"\r\n >\r\n ln\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\"\r\n >\r\n log\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\"\r\n >\r\n 4\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\"\r\n >\r\n 5\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\"\r\n >\r\n 6\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\"\r\n >\r\n −\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\"\r\n >\r\n sin\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\"\r\n >\r\n cos\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\"\r\n >\r\n tan\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\"\r\n >\r\n e\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\"\r\n >\r\n 1\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\"\r\n >\r\n 2\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\"\r\n >\r\n 3\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addElencoImmagini('ButtonKey')\"\r\n >\r\n Elenco Immagini: Chiave\r\n </button>\r\n </div>\r\n <div class=\"col\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addElencoImmagini('ButtonValue')\"\r\n >\r\n Elenco Immagini: Valore\r\n </button> \r\n </div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\"\r\n >\r\n 0\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\"\r\n >\r\n .\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\"\r\n >\r\n Annulla\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2 overflow-auto\" style=\"max-height: 80vh;\">\r\n <div\r\n [hidden]=\"fieldNull\"\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n class=\"example-list\"\r\n >\r\n\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>Ricerca</mat-label>\r\n <input matInput placeholder=\"Cerca campo\" [(ngModel)]=\"fieldSearched\" (input)=\"fieldSearchEvent()\">\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n\r\n <div\r\n class=\"example-box\"\r\n draggable=\"true\"\r\n (cdkDragStarted)=\"onDragStarted(field.Label)\"\r\n [attr.data-drag-data]=\"field.Label\"\r\n *ngFor=\"let field of Fields\"\r\n cdkDrag\r\n >\r\n {{ field.Label }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","<h1 mat-dialog-title>Errore!</h1>\r\n<div mat-dialog-content>\r\n La funzione inserita contiene parentesi non chiuse! prima di salvare controlla la funzione.\r\n \r\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n AttachmentType,\r\n EqpAttachmentDialogService,\r\n EqpAttachmentsComponent,\r\n IAttachmentDTO,\r\n} from \"@eqproject/eqp-attachments\";\r\nimport { EnumHelper } from \"@eqproject/eqp-select\";\r\nimport { ConfigColumn, TypeColumn } from \"@eqproject/eqp-table\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n DataGetterCardinalityEnum,\r\n FieldInvisibilityEnum,\r\n FieldTypeEnum\r\n} from \"../../../models/baseField.model\";\r\nimport {\r\n AttachmentField,\r\n AvailableFileExtensions,\r\n AvailableImageExtensions,\r\n} from \"../../../models/fields/attachmentField.model\";\r\nimport {\r\n BooleanField,\r\n BoolPresentantioEnum,\r\n} from \"../../../models/fields/booleanField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../models/fields/imageField.model\";\r\nimport {\r\n ListPresentationEnum,\r\n ListValueField,\r\n} from \"../../../models/fields/listValueField.model\";\r\nimport { LookupField } from \"../../../models/fields/lookupField.model\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { TextareaField } from \"../../../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n} from \"../../../models/fields/textField.model\";\r\nimport { FormFieldGroup, Form } from '../../../models/form.model';\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { ImageSelectorField } from \"../../../models/fields/imageSelectorField.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { LabelField } from \"../../../models/fields/labelField.model\";\r\nimport { ImageWithMarkersField } from \"../../../models/fields/imageWithMarkersField.model\";\r\nimport { AttachmentFieldTypeEnum, DynAttachment } from \"../../../models/dynAttachment\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { DataGetterTypeEnum, DataGetter } from '../../../models/baseField.model';\r\nimport { QueryEditorModeEnum } from \"../dbgetter/dbgetter.component\";\r\nimport { ModeEnum, TimeTypeEnum } from \"tmw-picker\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from \"../../../models/endPointConfiguration.model\";\r\nimport { Contestualization } from \"../../../models/getter.model\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-add-form-field\",\r\n templateUrl: \"./add-form-field.component.html\",\r\n styleUrls: [\"./add-form-field.component.scss\"],\r\n})\r\nexport class AddFormFieldComponent implements OnInit {\r\n \r\n @Input() form: Form;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() field: BaseField | any;\r\n @Input() indexField: number;\r\n @Input() formFieldsGroups: Array<FormFieldGroup>;\r\n /** Elenco dei Field creati nella form, usati per popolare l'autocomplete della proprietà Formula. */\r\n @Input() availableFields: Array<BaseField>;\r\n @Input() fieldTypesToExclude: Array<FieldTypeEnum> = [FieldTypeEnum[\"Form di dettaglio\"]];\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n @Input() contestualization: Array<Contestualization> = null;\r\n\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n @Output() saveFieldEvent: EventEmitter<BaseField | any> = new EventEmitter<BaseField | any>();\r\n\r\n resizedImagesHeightPx: number;\r\n fieldFormGroup: UntypedFormGroup;\r\n keyValueObject: { key: string; value: string } = { key: \"\", value: \"\" };\r\n availableColSpanSizesCompilazione: Array<ColSpanSizesEnum> = [];\r\n availableColSpanSizesRisposta: Array<ColSpanSizesEnum> = [];\r\n formulaAutocompleteOptions: Array<{ label: string; value: string }>;\r\n VisibleIfAutocompleteOptions: Array<{ label: string; value: string }>;\r\n AvailableFileExtensions = AvailableFileExtensions;\r\n AvailableImageExtensions = AvailableImageExtensions;\r\n fieldInvisibilityEnum = FieldInvisibilityEnum;\r\n columnKeys: Array<{ key: string; value: string }> = new Array<{ key: string; value: string }>();\r\n\r\n //#region Template dei vari pezzi di form per la creazione di un campo(in base al tipo scelto).\r\n fieldTypeFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textFieldFormTemplate\", { static: true })\r\n textFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"labelFieldFormTemplate\", { static: true })\r\n labelFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textareaFieldFormTemplate\", { static: true })\r\n textareaFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"booleadFieldFormTemplate\", { static: true })\r\n booleadFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"dateFieldFormTemplate\", { static: true })\r\n dateFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"numericFieldFormTemplate\", { static: true })\r\n numericFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"attachmentFieldFormTemplate\", { static: true })\r\n attachmentFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"imageFieldFormTemplate\", { static: true })\r\n imageFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"imageWithMarkersFieldFormTemplate\", { static: true })\r\n imageWithMarkersFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"imageFieldSelectorFormTemplate\", { static: true })\r\n imageFieldSelectorFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"listValueFieldFormTemplate\", { static: true })\r\n listValueFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"lookupFieldFormTemplate\", { static: true })\r\n lookupFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"dataGetterTemplate\", { static: true })\r\n dataGetterTemplate: TemplateRef<any>; \r\n \r\n //#endregion\r\n\r\n //#region Proprietà per gestire i metadata nei campi ti dipo Allegato o Immagine\r\n metadataColumns: Array<ConfigColumn>;\r\n //@ViewChild('metadataFieldsTable', { static: false }) metadataFieldsTable: EqpTableComponent;\r\n selectedMetadata: BaseField;\r\n //indexSelectedMetadata: number;\r\n //dialogMetadataRef: MatDialogRef<TemplateRef<any>>;\r\n dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n dialogVisibleIfRef: MatDialogRef<TemplateRef<any>>;\r\n //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per gestire le immagini nei capi di tipo elenco generico\r\n @ViewChild(\"buttonImagesKeyValueInputColumn\", { static: true })\r\n buttonImagesKeyValueInputColumn: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Enumeratori usati nell'html\r\n FieldTypeEnum = FieldTypeEnum;\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n DateTimeTypeEnum = DateTimeTypeEnum;\r\n ListPresentationEnum = ListPresentationEnum;\r\n TextMaskEnum = TextMaskEnum;\r\n AttachmentType = AttachmentType;\r\n attachmentFieldTypeEnum = AttachmentFieldTypeEnum;\r\n dataGetterTypeEnum = DataGetterTypeEnum;\r\n subscription: any;\r\n\r\n //#endregion\r\n\r\n //#region Gestione delle liste di immagini\r\n configColumnListImages: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n configColumnImage: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n @ViewChild('GenericListImagesImageTemplate', { static: true }) GenericListImagesImageTemplate: TemplateRef<any>;\r\n @ViewChild('GenericListImagesKeyTemplate', { static: true }) GenericListImagesKeyTemplate: TemplateRef<any>;\r\n @ViewChild('GenericListImagesValueTemplate', { static: true }) GenericListImagesValueTemplate: TemplateRef<any>;\r\n @ViewChild('imageSelectorAttachments', { static: false }) imageSelectorAttachments: EqpAttachmentsComponent;\r\n @ViewChild('imageAttachment', { static: false }) imageAttachment: EqpAttachmentsComponent;\r\n //#endregion\r\n\r\n // DB Getter\r\n dialogQERef: MatDialogRef<TemplateRef<any>>;\r\n //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n @ViewChild(\"dialogQE\", { static: true }) dialogQE: TemplateRef<any>;\r\n\r\n // TMW-PICKER\r\n mode = ModeEnum\r\n timeType = TimeTypeEnum\r\n\r\n // DM Getter\r\n forms: Array<Form> = new Array<Form>();\r\n DMModule: any;\r\n DMField: any;\r\n DMFields: Array<{ key: string }>;\r\n DMGetterCardinalities = DataGetterCardinalityEnum;\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private enumHelper: EnumHelper,\r\n private dialog: MatDialog,\r\n private cdr: ChangeDetectorRef,\r\n private httpClient: HttpClient,\r\n private utilityHelperService: UtilityHelperService\r\n ) {}\r\n\r\n async ngOnInit() {\r\n this.configureColumns();\r\n if (this.field.DataGetter == null){ this.field.DataGetter = new DataGetter(); }\r\n if (this.field.DataGetter.DataGetterType != null && this.field.DataGetter.DataGetterType == DataGetterTypeEnum[\"Da modulo dinamico\"]){\r\n await this.getAllModules();\r\n }\r\n\r\n if (typeof this.field.DataGetter.DataGetterValue != \"undefined\" && this.field.DataGetter.DataGetterValue != null){\r\n this.createColumnKeys(this.field.DataGetter.DataGetterValue.Params);\r\n }\r\n\r\n if (\r\n !this.fieldTypesToExclude.includes(FieldTypeEnum[\"Form di dettaglio\"])\r\n ) {\r\n this.fieldTypesToExclude.push(FieldTypeEnum[\"Form di dettaglio\"]);\r\n }\r\n\r\n this.onFieldTypeChange(false);\r\n this.availableFields = this.availableFields\r\n ? this.availableFields.filter((f) => f != this.field)\r\n : [];\r\n\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n // setFormulaAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // // si prederebbe la selezione appena fatta).\r\n // if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n // this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);\r\n // }\r\n // }\r\n setVisibleIfAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.VisibleIfAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.availableFields,\r\n this.field.VisibleIf\r\n );\r\n }\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'aggiunta di un nuovo campo all'interno della form.\r\n * Metodo richiamato ogni volta che cambia il tipo del campo scelto o viene aggiunto/modificato un Field\r\n */\r\n createFieldForm() {\r\n this.fieldFormGroup = this.formBuilder.group({\r\n Label: [\r\n this.field.Label,\r\n [\r\n Validators.required,\r\n this.questionPoll,\r\n Validators.pattern(\"^[a-zA-Z ]*$\"),\r\n ],\r\n ],\r\n Description: [\r\n this.field.Description,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n Readonly: [this.field.Readonly],\r\n Required: [this.field.Required],\r\n FieldType: [\r\n this.field.FieldType,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n DMModule: [null], \r\n DMField: [null], \r\n DataGetterType: [\r\n this.field.DataGetter.DataGetterType,\r\n [Validators.required],\r\n ], \r\n ColSpanSizes: [this.field.ColSpanSizes],\r\n InListView: [this.field.InListView],\r\n Invisibility: [this.field.Invisibility],\r\n VisibleIf: [this.field.VisibleIf, this.questionPoll],\r\n Tooltip: [this.field.Tooltip, this.questionPoll],\r\n LabelstyleCSS: [this.field.LabelstyleCSS, this.questionPoll],\r\n FieldstyleCSS: [this.field.FieldstyleCSS, this.questionPoll],\r\n Formula: [this.field.Formula, this.questionPoll],\r\n DataGetterValue: [this.field.DataGetter.DataGetterValue, this.questionPoll],\r\n\r\n AnswerStyleLabelstyleCSS: [this.field.AnswerStyle.LabelstyleCSS, this.questionPoll],\r\n AnswerStyleFieldstyleCSS: [this.field.AnswerStyle.FieldstyleCSS, this.questionPoll],\r\n AnswerStyleVisibleIf: [this.field.AnswerStyle.VisibleIf, this.questionPoll],\r\n AnswerStyleColSpanSizes: [this.field.AnswerStyle.ColSpanSizes],\r\n AnswerStyleInListView: [this.field.AnswerStyle.InListView],\r\n AnswerStyleInvisibility: [this.field.AnswerStyle.Invisibility],\r\n });\r\n\r\n if (this.formFieldsGroups) {\r\n this.fieldFormGroup.addControl(\r\n \"FieldGroup\",\r\n new UntypedFormControl(this.field.FieldGroup, Validators.required)\r\n );\r\n }\r\n }\r\n questionPoll(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"Missing Parenthesis\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n stringSanitaizedValidator(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"La formula non è valida\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n // getAllFormValidationErrors() {\r\n // Object.keys(this.fieldFormGroup.controls).forEach((key) => {\r\n // const controlErrors: ValidationErrors =\r\n // this.fieldFormGroup.get(key).errors;\r\n // if (controlErrors != null) {\r\n // Object.keys(controlErrors).forEach((keyError) => {\r\n // console.log(\r\n // \"Key control: \" + key + \", keyError: \" + keyError + \", err value: \",\r\n // controlErrors[keyError]\r\n // );\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n /**\r\n * Metodo chiamato dai mat-error per prendere gli errori generati relativi al campo.\r\n * @param control è il nome del GroupControl di cui leggere se ci sono errori\r\n */\r\n getFormValidationErrors(control: string) {\r\n if (control == \"Label\") GlobalService.debugLog('getFormValidationErrors', this.fieldFormGroup.controls[\"Label\"]);\r\n\r\n const controlErrors: ValidationErrors =\r\n this.fieldFormGroup.controls[control].errors;\r\n let errors = [];\r\n let values = [];\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach((keyError) => {\r\n errors.push(keyError);\r\n });\r\n GlobalService.debugLog('control: ', control);\r\n GlobalService.debugLog('errors: ', errors);\r\n GlobalService.debugLog('values: ', values);\r\n }\r\n return errors.join(\", \");\r\n }\r\n\r\n //#region onFieldTypeChange\r\n /**\r\n * Metodo chiamato quando cambia il FieldType del BaseField che si sta aggiungendo/modificando.\r\n * Ricrea l'oggetto field popolando solo le proprietà del BaseField inserite dall'utente\r\n * (quelle comuni a tutte le tipologie di campo), ricrea la form e, in base al FieldType scelto,\r\n * aggiunge alla form i FormControl necessari e seleziona il template corretto da usare.\r\n * @param restoreField Se TRUE ripristina i valori base (ereditati dal modello BaseField) del campo aggiunto/modificato\r\n */\r\n onFieldTypeChange(restoreField: boolean = true) {\r\n if (restoreField) {\r\n this.restoreBaseFieldProperties();\r\n }\r\n\r\n this.createFieldForm();\r\n this.onColSpanSizeSelect();\r\n if ((this.field as BaseField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n if ((this.field as BaseField).Invisibility == null) {\r\n this.field.Invisibility = FieldInvisibilityEnum.NASCOSTO;\r\n } \r\n this.fieldTypeFormTemplate = null;\r\n\r\n switch (this.field.FieldType) {\r\n\r\n //#region CAMPO DI TESTO\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((this.field as TextField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"TextMask\",\r\n new UntypedFormControl((this.field as TextField).TextMask)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textFieldFormTemplate;\r\n break;\r\n //#endregion CAMPO DI TESTO\r\n\r\n //#region LABEL\r\n case FieldTypeEnum['Etichetta']:\r\n if ((this.field as LabelField).Etichetta == null) {\r\n this.field.Etichetta = \"\";\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"Etichetta\",\r\n new UntypedFormControl((this.field as LabelField).Etichetta)\r\n );\r\n this.fieldTypeFormTemplate = this.labelFieldFormTemplate; \r\n break; \r\n //#endregion LABEL\r\n\r\n //#region AREA DI TESTO \r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((this.field as TextareaField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"Rows\",\r\n new UntypedFormControl((this.field as TextareaField).Rows, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextareaField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textareaFieldFormTemplate;\r\n break;\r\n //#endregion AREA DI TESTO \r\n\r\n //#region BOOLEANO\r\n case FieldTypeEnum.Booleano:\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsTristate\",\r\n new UntypedFormControl((this.field as BooleanField).IsTristate)\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"PresetationType\",\r\n new UntypedFormControl(\r\n (this.field as BooleanField).PresetationType,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.booleadFieldFormTemplate;\r\n break;\r\n //#endregion BOOLEANO\r\n\r\n //#region DATA E/I ORA\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (this.field.IsOnlyDate == null) {\r\n this.field.IsOnlyDate = DateTimeTypeEnum[\"Solo data\"];\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsOnlyDate\",\r\n new UntypedFormControl((this.field as DateField).IsOnlyDate, [\r\n Validators.required,\r\n this.questionPoll,\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MinDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MinDate,\r\n this.questionPoll\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MaxDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MaxDate,\r\n this.questionPoll\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"DateFormat\",\r\n new UntypedFormControl((this.field as DateField).DateFormat)\r\n );\r\n this.fieldTypeFormTemplate = this.dateFieldFormTemplate;\r\n break;\r\n //#endregion DATA E/I ORA\r\n\r\n //#region CAMPO NUMERICO\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((this.field as NumericField).IsInteger == null) {\r\n this.field.IsInteger = true;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsInteger\",\r\n new UntypedFormControl((this.field as NumericField).IsInteger)\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MinValue\",\r\n new UntypedFormControl((this.field as NumericField).MinValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MaxValue\",\r\n new UntypedFormControl((this.field as NumericField).MaxValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"DecimalSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"DecimalPrecision\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalPrecision,\r\n [this.questionPoll, Validators.pattern(\"^[0-9]+$\")]\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"ThousandsSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).ThousandsSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"CurrencySymbol\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).CurrencySymbol,\r\n this.questionPoll\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"MeasureUnit\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).MeasureUnit,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.numericFieldFormTemplate;\r\n break;\r\n //#endregion CAMPO NUMERICO\r\n\r\n //#region ALLEGATO\r\n case FieldTypeEnum.Allegato:\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as AttachmentField).AllowedExtensions\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl((this.field as AttachmentField).IsMultiAttach)\r\n );\r\n this.fieldTypeFormTemplate = this.attachmentFieldFormTemplate;\r\n break;\r\n //#endregion ALLEGATO\r\n\r\n //#region IMMAGINE\r\n case FieldTypeEnum.Immagine:\r\n if (typeof (this.field as ImageField).DynAttachment == \"undefined\"){\r\n (this.field as ImageField).DynAttachment = null;\r\n }\r\n\r\n if (typeof (this.field as ImageField).EnableDrawing == \"undefined\"){\r\n (this.field as ImageField).EnableDrawing = false;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"ResizedImagesHeightPx\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ResizedImagesHeightPx,\r\n [Validators.required,Validators.max(4320)]\r\n )\r\n );\r\n (this.field as ImageField).ResizedImagesHeightPx = (this.field as ImageField).ResizedImagesHeightPx != null ? (this.field as ImageField).ResizedImagesHeightPx : 128;\r\n\r\n this.fieldFormGroup.addControl(\r\n \"EnableDrawing\",\r\n new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n );\r\n\r\n this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n break;\r\n\r\n /*\r\n (this.field as ImageField).AttachDefinition = new AttachmentField();\r\n this.fieldFormGroup.addControl(\r\n \"EnableDrawing\",\r\n new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ImageIsContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImageIsContextualAttachment\r\n )\r\n );\r\n // Imposto i FormControl variabili.\r\n this.onImageIsContextualAttachmentChange();\r\n this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n break;\r\n */\r\n //#endregion IMMAGINE\r\n\r\n //#region ELENCO GENERICO\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((this.field as ListValueField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n if ((this.field as ListValueField).Invisibility == null) {\r\n this.field.Invisibility = FieldInvisibilityEnum.NASCOSTO;\r\n } \r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiChoiche\",\r\n new UntypedFormControl((this.field as ListValueField).IsMultiChoiche)\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"PresentationMode\",\r\n new UntypedFormControl(\r\n (this.field as ListValueField).PresentationMode,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.listValueFieldFormTemplate;\r\n\r\n break;\r\n //#endregion ELENCO GENERICO\r\n\r\n //#region ELENCO IMMAGINI\r\n case FieldTypeEnum[\"Elenco immagini\"]:\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiChoiche\",\r\n new UntypedFormControl((this.field as ImageSelectorField).IsMultiChoiche)\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"ResizedImagesHeightPx\",\r\n new UntypedFormControl(\r\n (this.field as ImageSelectorField).ResizedImagesHeightPx,\r\n [Validators.required,Validators.max(4320)]\r\n )\r\n ); \r\n this.fieldTypeFormTemplate = this.imageFieldSelectorFormTemplate;\r\n\r\n break;\r\n //#endregion ELENCO IMMAGINI \r\n\r\n //#region IMMAGINE CON MARKER\r\n case FieldTypeEnum[\"Immagine con markers\"]:\r\n\r\n this.fieldFormGroup.addControl(\r\n \"ResizedImagesHeightPx\",\r\n new UntypedFormControl(\r\n (this.field as ImageWithMarkersField).ResizedImagesHeightPx,\r\n [Validators.required,Validators.max(4320)]\r\n )\r\n ); \r\n this.fieldTypeFormTemplate = this.imageWithMarkersFieldFormTemplate;\r\n\r\n break;\r\n //#endregion IMMAGINE CON MARKER \r\n\r\n //#region LOOKUP\r\n case FieldTypeEnum.Lookup:\r\n\r\n this.fieldFormGroup.addControl(\r\n \"EntitySourceName\",\r\n new UntypedFormControl(\r\n (this.field as LookupField).EntitySourceName,\r\n Validators.required\r\n )\r\n );\r\n\r\n this.fieldFormGroup.addControl(\r\n \"UseAsGetOrDiscard\",\r\n new UntypedFormControl((this.field as LookupField).UseAsGetOrDiscard)\r\n );\r\n this.fieldTypeFormTemplate = this.lookupFieldFormTemplate;\r\n break;\r\n //#endregion LOOKUP\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"Formula\"].disable();\r\n this.fieldFormGroup.controls[\"InListView\"].disable();\r\n this.fieldFormGroup.controls[\"Invisibility\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"Formula\"].enable();\r\n this.fieldFormGroup.controls[\"InListView\"].enable();\r\n this.fieldFormGroup.controls[\"Invisibility\"].enable();\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n FieldTypeEnum[\"Data e/o ora\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].enable();\r\n }\r\n if ([FieldTypeEnum.Booleano].includes(this.field.FieldType)) {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n }\r\n }\r\n //#endregion onFieldTypeChange\r\n\r\n //#region onDataGetterTypeChange\r\n async onDataGetterTypeChange(){\r\n if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico'] && this.forms.length == 0){\r\n this.getAllModules();\r\n }\r\n\r\n if (this.field.DataGetter.DataGetterType != DataGetterTypeEnum.Formula){\r\n this.field.Formula = null;\r\n }\r\n\r\n this.field.DataGetter.DataGetterValue = null;\r\n this.DMModule = null;\r\n this.DMField = null;\r\n }\r\n //#endregion onDataGetterTypeChange\r\n\r\n /**\r\n * Metodo invocato al cambio del valore della proprietà ImageIsContextualAttachment nel caso\r\n * di campi di tipo Immagine. Se TRUE allora rimuove i FormControl per le proprietà IsMultiAttach\r\n * e AllowedExtensions e aggiunge i FormControl per le proprietà ImgName e ContextualAttachment,\r\n * altrimenti il contrario.\r\n */\r\n onImageIsContextualAttachmentChange() {\r\n \r\n /*\r\n (this.field as ImageField).ImgName = null;\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions = [];\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach = false;\r\n (this.field as ImageField).ContextualAttachment = null;\r\n\r\n if ((this.field as ImageField).ImageIsContextualAttachment) {\r\n this.fieldFormGroup.removeControl(\"IsMultiAttach\");\r\n this.fieldFormGroup.removeControl(\"AllowedExtensions\");\r\n this.fieldFormGroup.addControl(\r\n \"ImgName\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImgName,\r\n Validators.required\r\n )\r\n ); \r\n this.fieldFormGroup.addControl(\r\n \"ContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ContextualAttachment,\r\n Validators.required\r\n )\r\n );\r\n } else {\r\n this.fieldFormGroup.removeControl(\"ImgName\");\r\n this.fieldFormGroup.removeControl(\"ContextualAttachment\");\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions\r\n )\r\n );\r\n }\r\n */\r\n\r\n }\r\n\r\n /**\r\n * Metodo per intercettare l'aggiunta di un allegato nei campi di tipo Immagine per aggiornare\r\n * il valore della proprietà ContextualAttachment e la validazione del relativo FormControl.\r\n * @param event Array contenente l'elenco aggiornato degli allegati caricati (nel nostro caso ne contiene al più 1).\r\n */\r\n catchContextualAttachmentChange(event: Array<IAttachmentDTO>) {\r\n /*\r\n if (event && event.length > 0) {\r\n (this.field as ImageField).ContextualAttachment = event[0];\r\n } else {\r\n (this.field as ImageField).ContextualAttachment = null;\r\n }\r\n this.fieldFormGroup.controls[\"ContextualAttachment\"].setValue(\r\n (this.field as ImageField).ContextualAttachment\r\n );\r\n */\r\n }\r\n\r\n /**\r\n * Metodo invocato alla selezione di una classe nella select per le colonne di bootstrap\r\n * da usare nella visualizzazione del campo. Questa funzione manipola la sorgente dati per\r\n * la eqp-select in modo da escludere i valori dell'enumeratore che fanno riferimento ad\r\n * una larghezza di schermo già selezionata. Esempio: per gli schermi piccoli (sm) l'utente\r\n * seleziona la classe \"col-sm-6\", al change del valore questo metodo rimuove dalla select\r\n * tutti gli altri valori per la grandezza di schermo selezionata.\r\n */\r\n onColSpanSizeSelect() {\r\n // Recupero l'array degli oggetti chiave-valore che rappreseta l'enumeratore\r\n let colSizeClassEnumArray = this.enumHelper.getEnumArray(\r\n ColSpanSizesEnum,\r\n false,\r\n null\r\n );\r\n // Costruisco l'array delle classi selezionate dall'utente in formato stringa\r\n let selectedDimensionsCompilazione: Array<string> = this.field.ColSpanSizes\r\n ? this.field.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n : [];\r\n let selectedDimensionsRisposta: Array<string> = this.field.AnswerStyle.ColSpanSizes\r\n ? this.field.AnswerStyle.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n : []; \r\n // Filtro i valori ottenuti dall'enumeratore per escludere tutti i valori per le\r\n // grandezze di schermo già selezionatead esclusione dei valori selezionati.\r\n this.availableColSpanSizesCompilazione = colSizeClassEnumArray.filter(\r\n (value: { key: number; value: string }) =>\r\n !selectedDimensionsCompilazione.find(\r\n (col) =>\r\n value.value.includes(col.substring(4, 6)) && value.value != col\r\n )\r\n );\r\n this.availableColSpanSizesRisposta = colSizeClassEnumArray.filter(\r\n (value: { key: number; value: string }) =>\r\n !selectedDimensionsRisposta.find(\r\n (col) =>\r\n value.value.includes(col.substring(4, 6)) && value.value != col\r\n )\r\n ); \r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione scelta per i campi di tipo elenco generico.\r\n * Se viene scelta la visualizzazione ad immagini svuota la lista delle coppie chiave-valore inserite\r\n * in precedenza, altrimenti svuota la lista delle immagini caricate.\r\n */\r\n onPresentationModeChange() {\r\n\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio degli allegati quando viene configurato un campo di tipo \"Elenco generico\"\r\n * con il tipo di visualizzazione ad immagini. Intercetta l'elenco aggiornato delle immagini caricate e lo\r\n * memorizza nell'oggetto field corrente.\r\n * @param attachments Array aggiornato degli allegati caricati.\r\n */\r\n catchButtonImagesChange(attachments: Array<IAttachmentDTO>) {\r\n\r\n (this.field as ImageSelectorField).AttachmentList = attachments as Array<DynAttachment>;\r\n\r\n (this.field as ImageSelectorField).AttachmentList.forEach((attachment: DynAttachment) => {\r\n if (typeof attachment.ImageHeightPx == \"undefined\"){\r\n\r\n var myBase64 = \"data:image/\"+attachment.FileExtension.toLowerCase()+\";base64,\" + attachment.FileDataBase64;\r\n var img = new Image();\r\n\r\n img.src = myBase64;\r\n var self = this;\r\n img.addEventListener('load',function(){\r\n attachment.ImageWidthPx = img.width;\r\n attachment.ImageHeightPx = img.height;\r\n attachment.AttachmentFieldType = AttachmentFieldTypeEnum.ELENCO_IMMAGINI;\r\n if (self.imageSelectorAttachments){ self.imageSelectorAttachments.reloadData(); }\r\n });\r\n\r\n }\r\n });\r\n \r\n }\r\n\r\n catchButtonImageChange(attachments: Array<IAttachmentDTO>) {\r\n\r\n (this.field as ImageField).DynAttachment = attachments[1] as DynAttachment;\r\n\r\n if (this.field.DynAttachment != null && typeof this.field.DynAttachment.ImageHeightPx == \"undefined\"){\r\n\r\n var myBase64 = \"data:image/\"+this.field.DynAttachment.FileExtension.toLowerCase()+\";base64,\" + this.field.DynAttachment.FileDataBase64;\r\n var img = new Image();\r\n\r\n img.src = myBase64;\r\n var self = this;\r\n img.addEventListener('load',function(){\r\n self.field.DynAttachment.ImageWidthPx = img.width;\r\n self.field.DynAttachment.ImageHeightPx = img.height;\r\n self.field.DynAttachment.AttachmentFieldType = AttachmentFieldTypeEnum.IMMAGINE;\r\n });\r\n\r\n } \r\n \r\n } \r\n\r\n catchButtonImageWithMarkersChange(attachments: Array<IAttachmentDTO>) {\r\n\r\n (this.field as ImageWithMarkersField).DynAttachment = attachments[1] as DynAttachment;\r\n\r\n if (this.field.DynAttachment != null && typeof this.field.DynAttachment.ImageHeightPx == \"undefined\"){\r\n\r\n var myBase64 = \"data:image/\"+this.field.DynAttachment.FileExtension.toLowerCase()+\";base64,\" + this.field.DynAttachment.FileDataBase64;\r\n var img = new Image();\r\n\r\n img.src = myBase64;\r\n var self = this;\r\n img.addEventListener('load',function(){\r\n self.field.DynAttachment.ImageWidthPx = img.width;\r\n self.field.DynAttachment.ImageHeightPx = img.height;\r\n self.field.DynAttachment.AttachmentFieldType = AttachmentFieldTypeEnum.IMMAGINE_CON_MARKERS;\r\n });\r\n\r\n } \r\n \r\n } \r\n\r\n /**\r\n * Metodo chiamato al keyup degli input testuali che prevedono l'aggiunta del valore inserito in un array.\r\n * Se l'utente preme il tasto invio, in base al tipo di campo che sta inserendo/modificando, questo metodo\r\n * aggiunge il valore inserito dall'utente nella lista di stringhe corretta (in input viene passato il nome\r\n * della proprietà in cui inserire la stringa).\r\n * @param event Evento che rappresenta il keyup dell'utente\r\n * @param propertyName Nome della proprietà del field in cui inserire la stringa digitata.\r\n */\r\n onMultiSelectInputKeyup(event, propertyName: string) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum.Lookup:\r\n case FieldTypeEnum.Allegato:\r\n if (!this.field[propertyName]) {\r\n this.field[propertyName] = new Array<string>();\r\n }\r\n this.field[propertyName].push(event.currentTarget.value);\r\n break;\r\n case FieldTypeEnum[\"Immagine con markers\"]:\r\n break; \r\n case FieldTypeEnum.Immagine:\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if (!this.keyValueObject.key || !this.keyValueObject.value) {\r\n return;\r\n }\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n (this.field as ListValueField).ValuePairs[this.keyValueObject.key] =\r\n this.keyValueObject.value;\r\n this.keyValueObject = { key: \"\", value: \"\" };\r\n break;\r\n }\r\n event.currentTarget.value = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo chiamato per mostrare come elenco le opzioni aggiunte in un campo di tipo \"Elenco generico\".\r\n * @returns Restituisce un array di oggetti del tipo { key: string, value: string } con i valori inseriti dall'utente.\r\n */\r\n getDictionaryKeyValue() {\r\n if ((this.field as ListValueField).ValuePairs) {\r\n return Object.keys((this.field as ListValueField).ValuePairs).map((k) => {\r\n return {\r\n key: k,\r\n value: (this.field as ListValueField).ValuePairs[k],\r\n };\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere una opzione aggiunta al campo di tipo \"Elenco generico\"\r\n * @param key Nome della chiave da rimuovere\r\n */\r\n deleteKeyFromDictionary(key: string) {\r\n delete (this.field as ListValueField).ValuePairs[key];\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog per aggiungere/modificare un metadata in un campo di tipo Allegato o Immagine.\r\n * @param metadata Metadata da modificare, se null allora ne sto creando uno nuovo.\r\n */\r\n // openMetadataDialog(field: BaseField = null) {\r\n // if (field) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // this.indexSelectedMetadata = (this.field as AttachmentField).MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // this.indexSelectedMetadata = (this.field as ImageField).AttachDefinition.MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // }\r\n // } else {\r\n // this.selectedMetadata = new BaseField();\r\n // this.indexSelectedMetadata = null;\r\n // }\r\n // this.dialogMetadataRef = this.dialog.open(this.dialogMetadata, {\r\n // disableClose: true,\r\n // hasBackdrop: true,\r\n // width: '75%'\r\n // });\r\n // }\r\n\r\n //#region openFormulaDialog\r\n openFormulaDialog() {\r\n this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.Formula,\r\n },\r\n });\r\n this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n this.field.Formula = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n });\r\n }\r\n //#endregion openFormulaDialog\r\n\r\n //#region openVisibleIfDialog\r\n openVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.VisibleIf = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n });\r\n }\r\n //#endregion openVisibleIfDialog\r\n\r\n //#region openAnswerStyleVisibleIfDialog\r\n openAnswerStyleVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.AnswerStyle.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.AnswerStyle.VisibleIf = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n });\r\n }\r\n //#endregion openAnswerStyleVisibleIfDialog\r\n\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n // alert(\"errore!\");\r\n }\r\n }\r\n /**\r\n * Metodo invocato dall'output dal dialog per aggiungere/modificare un metadata\r\n * nei campi di tipo Allegato o Immagine. Prima di aggiungere il metadata nell'elenco\r\n * contolla se esiste un altro metadata con lo stesso nome e nel caso genera un errore\r\n * (i metadata, come per i campi della form, devono avere un nome univoco).\r\n * @param metadata Metadata aggiunto o modificato, se null allora il dialog è stato chiuso senza fare modifiche.\r\n */\r\n // onSaveMetadata(metadata: BaseField) {\r\n // if (metadata) {\r\n // if (\r\n // (this.field.FieldType === FieldTypeEnum.Allegato\r\n // && (this.field as AttachmentField).MetadataFields\r\n // && (this.field as AttachmentField).MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // ) ||\r\n // (this.field.FieldType === FieldTypeEnum.Immagine\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // )\r\n // ) {\r\n // EqpDynamicModuleDialogService.Warning('Impossibile inserire due metadata con la stessa label.');\r\n // throw new Error('Impossibile inserire due metadata con la stessa label.');\r\n // }\r\n\r\n // if (this.indexSelectedMetadata != null && this.indexSelectedMetadata >= 0) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // (this.field as AttachmentField).MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // }\r\n // } else {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // if (!(this.field as AttachmentField).MetadataFields) {\r\n // (this.field as AttachmentField).MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as AttachmentField).MetadataFields.push(metadata);\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // if (!(this.field as ImageField).AttachDefinition.MetadataFields) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.push(metadata);\r\n // }\r\n // }\r\n // }\r\n // this.dialogMetadataRef.close();\r\n // this.setMetadataOrdinalPosition();\r\n // this.reloadMetadataTable();\r\n // }\r\n\r\n //#region disableSaveField\r\n /**\r\n * Metodo per disabilitare il pulsante per salvare il campo inserito/modificato.\r\n * @returns Restituisce un booleano, se true il salvataggio viene disabilitato.\r\n */\r\n disableSaveField(): boolean {\r\n\r\n if (this.fieldFormGroup.invalid) {\r\n return true;\r\n }\r\n\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n\r\n if (\r\n (this.field as ListValueField).Formula != undefined &&\r\n (this.field as ListValueField).Formula != \"\"\r\n ) {\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n return false;\r\n }\r\n\r\n if(\r\n (this.field as ListValueField).ValueString != undefined &&\r\n (this.field as ListValueField).ValueString != null &&\r\n (this.field as ListValueField).ValueString != \"\"){\r\n return false\r\n }\r\n\r\n return (\r\n !(this.field as ListValueField).ValuePairs ||\r\n (this.field as ListValueField).ValuePairs.length === 0\r\n );\r\n \r\n case FieldTypeEnum[\"Elenco immagini\"]: \r\n\r\n return (\r\n !(this.field as ImageSelectorField).AttachmentList ||\r\n (this.field as ImageSelectorField).AttachmentList.length === 0 ||\r\n (this.field as ImageSelectorField).AttachmentList.find(\r\n (i) => (i.ButtonKey == null || i.ButtonKey === \"undefined\" || i.ButtonKey == '') || (i.ButtonValue == null || i.ButtonValue === \"undefined\" || i.ButtonValue == '')\r\n ) != null\r\n );\r\n\r\n case FieldTypeEnum.Lookup:\r\n return (\r\n !(this.field as LookupField).FieldNames ||\r\n (this.field as LookupField).FieldNames.length === 0\r\n );\r\n default:\r\n return false;\r\n }\r\n }\r\n //#endregion disableSaveField\r\n\r\n //#region saveAndExitAddField\r\n /**\r\n * Metodo per salvare il campo inserito/modificato.\r\n * Se è stato inserito un field con la stessa label viene generato un errore (le label devono essere univoche).\r\n * Una volta aggiunto/aggiornato il campo nell'elenco dei Field della Form chiude il dialog e ricarica la tabella\r\n * che mostra l'elenco dei campi aggiunti alla form.\r\n */\r\n saveAndExitAddField(save: boolean) {\r\n this.setResizedImagesHeightPx();\r\n this.setFieldOrdinalPosition();\r\n if (this.imageSelectorAttachments){ this.imageSelectorAttachments.reloadData(); }\r\n if (save) {\r\n // retrocompatibilità con valuepairs per Elenco Generico\r\n if(this.field.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n if(((this.field as ListValueField).Formula && (this.field as ListValueField).Formula != \"\") || ((this.field as ListValueField).ValueString && (this.field as ListValueField).ValueString != \"\")){\r\n (this.field as ListValueField).ValuePairs = null;\r\n }\r\n }\r\n if(this.field.FieldType == FieldTypeEnum[\"Elenco immagini\"]) {\r\n if(((this.field as ImageSelectorField).AttachmentList.length > 0)){\r\n (this.field as ImageSelectorField).AttachmentList.forEach((attachment) => {\r\n attachment.ResizedImageHeightPx = (this.field as ImageSelectorField).ResizedImagesHeightPx;\r\n });\r\n }\r\n }\r\n if(this.field.FieldType == FieldTypeEnum.Immagine) {\r\n if(((this.field as ImageField).DynAttachment != null)){\r\n (this.field as ImageField).DynAttachment.ResizedImageHeightPx = (this.field as ImageField).ResizedImagesHeightPx;\r\n }\r\n } \r\n if(this.field.FieldType == FieldTypeEnum[\"Immagine con markers\"]) {\r\n if(((this.field as ImageWithMarkersField).DynAttachment != null)){\r\n (this.field as ImageWithMarkersField).DynAttachment.ResizedImageHeightPx = (this.field as ImageWithMarkersField).ResizedImagesHeightPx;\r\n }\r\n } \r\n GlobalService.debugLog('add-form-field save', this.field)\r\n this.saveFieldEvent.emit(this.field);\r\n } else {\r\n this.saveFieldEvent.emit(null);\r\n }\r\n }\r\n //#endregion saveAndExitAddField\r\n\r\n //#region restoreBaseFieldProperties\r\n /**\r\n * Metodo per ripristinare l'oggetto field al cambio del tipo selezionato.\r\n * Lascia valorizzate solo le proprietà dell'oggetto BaseField comune a tutti i tipi di campo.\r\n */\r\n private restoreBaseFieldProperties() {\r\n if (this.field) {\r\n const tmpBaseField = JSON.parse(JSON.stringify(this.field));\r\n this.field = new BaseField();\r\n this.field.Label = tmpBaseField.Label;\r\n this.field.Description = tmpBaseField.Description;\r\n this.field.Required = tmpBaseField.Required;\r\n this.field.FieldType = tmpBaseField.FieldType;\r\n this.field.Formula = tmpBaseField.Formula;\r\n this.field.ColSpanSizes = tmpBaseField.ColSpanSizes;\r\n this.field.InListView = tmpBaseField.InListView;\r\n this.field.Invisibility = tmpBaseField.Invisibility;\r\n this.field.Tooltip = tmpBaseField.Tooltip;\r\n this.field.Readonly = tmpBaseField.Readonly;\r\n this.field.FieldGroup = tmpBaseField.FieldGroup;\r\n this.field.VisibleIf = tmpBaseField.VisibleIf;\r\n }\r\n }\r\n //#region restoreBaseFieldProperties\r\n\r\n countValuePairs(valuePairs): number{\r\n if(valuePairs){\r\n return Object.keys(valuePairs).length;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n configureColumns(){\r\n\r\n // Lista Generica di immagini\r\n this.configColumnListImages = [];\r\n\r\n this.configColumnListImages.push({\r\n key: 'action', display: '', type: TypeColumn.MenuAction, buttonMenuIcon: 'more_vert', styles: { flex: '0 0 6%' },\r\n actions: [\r\n { name: 'Elimina', icon: 'delete', fn: (element, index, col) => this.deleteListImage(element, index, col) },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true),\r\n disabled: (element) => this.field.AttachmentList.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false),\r\n disabled: (element) =>\r\n this.field.AttachmentList.indexOf(element) >= this.field.AttachmentList.length - 1,\r\n },\r\n ]\r\n }); \r\n\r\n this.configColumnListImages.push({\r\n key:\"FileDataBase64\",\r\n display: \"Immagine\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.GenericListImagesImageTemplate,\r\n }); \r\n this.configColumnListImages.push({\r\n key:\"ButtonKey\",\r\n display: \"Chiave\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.GenericListImagesKeyTemplate,\r\n });\r\n this.configColumnListImages.push({\r\n key:\"ButtonValue\",\r\n display: \"Valore\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.GenericListImagesValueTemplate,\r\n }); \r\n this.configColumnListImages.push({\r\n key:\"ImageWidthPx\",\r\n display: \"Larghezza\"\r\n }); \r\n this.configColumnListImages.push({\r\n key:\"ImageHeightPx\",\r\n display: \"Altezza\"\r\n }); \r\n\r\n }\r\n\r\n private moveElement(\r\n element: DynAttachment,\r\n moveUp: boolean\r\n ) {\r\n const startingIndex = this.field.AttachmentList.indexOf(element);\r\n const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n this.field.AttachmentList.splice(startingIndex, 1);\r\n this.field.AttachmentList.splice(endingIndex, 0, element);\r\n\r\n this.setFieldOrdinalPosition();\r\n if (this.imageSelectorAttachments){ this.imageSelectorAttachments.reloadData(); }\r\n }\r\n\r\n private setFieldOrdinalPosition() {\r\n if (this.field.AttachmentList) {\r\n this.field.AttachmentList.forEach((field) => {\r\n field.OrdinalPosition = this.field.AttachmentList.indexOf(field);\r\n });\r\n }\r\n }\r\n\r\n setResizedImagesHeightPx(){\r\n this.resizedImagesHeightPx = this.field.ResizedImagesHeightPx;\r\n }\r\n\r\n deleteListImage(el: DynAttachment, i: number, col: number){\r\n EqpDynamicModuleDialogService.Confirm('Eliminare questa immagine?', () => {\r\n this.field.AttachmentList.splice(el.originalIndex, 1);\r\n if (this.imageSelectorAttachments){ this.imageSelectorAttachments.reloadData(); }\r\n\r\n }, false, 'Richiesta conferma');\r\n }\r\n\r\n deleteImage(el: DynAttachment){\r\n this.field.DynAttachment = null;\r\n }\r\n\r\n // DB GETTER\r\n openDBGetter(){\r\n if (this.QueryEditorComponent != null && !this.QueryEditorComponent.inputParams.useDynamicModuleMock){\r\n\r\n this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.COMPOSER;\r\n this.QueryEditorComponent.inputParams.config.loadQueryStatuses = this.field.DataGetter.DataGetterValue;\r\n\r\n this.dialogQERef = this.dialog.open(this.dialogQE, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n panelClass: 'query-editor-modal',\r\n width: '90%'\r\n });\r\n\r\n } else {\r\n\r\n this.httpClient.get('./assets/mockups/mockedFromQueryEditor_QUERY_WITH_QUESTION.txt', {responseType: 'text'})\r\n .subscribe(mockedFromQueryEditor => {\r\n this.treatDataFromQueryEditor(JSON.parse(mockedFromQueryEditor).Params);\r\n });\r\n\r\n }\r\n }\r\n\r\n closeQEModal(){\r\n this.dialogQERef.close();\r\n }\r\n\r\n onExternalComponentOut(ev: eventOut){\r\n if (ev.Behaviours.indexOf(\"send-out\") != -1){ this.out.emit(ev); }\r\n if (ev.Behaviours.indexOf(\"close-modal\") != -1){ this.closeQEModal(); } \r\n if (ev.Behaviours.indexOf(\"save-query\") != -1){ \r\n \r\n this.treatDataFromQueryEditor(ev.Params);\r\n\r\n }\r\n }\r\n\r\n treatDataFromQueryEditor(data: any){\r\n this.field.DataGetter.DataGetterValue = data;\r\n this.createColumnKeys(data);\r\n }\r\n\r\n createColumnKeys(data){\r\n if (data == null && this.field.DataGetter.DataGetterValue != null){ data = this.field.DataGetter.DataGetterValue; }\r\n if (data != null && typeof data != \"undefined\" && typeof data.selectedFields != \"undefined\"){\r\n this.columnKeys = new Array<{ key: string; value: string }>();\r\n data.selectedFields.forEach((key) => {\r\n this.columnKeys.push({key: key.DatabaseTableName+\"_\"+key.PropertyName+\"__\"+key.CurrentTranslate.replace(\" \",\"_\"), value: key.CurrentTranslate});\r\n });\r\n }\r\n }\r\n\r\n getAllModules(){\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"orgaid\",\r\n ParamValue: this.form.OrgaID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetAllFormEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<Form>) => {\r\n this.forms = res;\r\n this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));\r\n\r\n this.DMField = null;\r\n if (this.DMModule == null && this.field.DataGetter.DataGetterValue != null){\r\n this.DMModule = this.forms.find(x => x.Code == this.field.DataGetter.DataGetterValue);\r\n this.DMModule.Fields = JSON.parse(this.DMModule.JsonFields);\r\n this.DMFields = new Array<{ key: string }>();\r\n this.DMModule.Fields.forEach(element => {\r\n this.DMFields.push({ key: element.Value.Name });\r\n });\r\n\r\n this.DMFields = this.DMFields.sort((uno, due) => uno.key.localeCompare(due.key));\r\n \r\n if (this.field.DataGetter.DataGetterColumnForce != null){\r\n this.DMField = this.DMFields.find(x => x.key == this.field.DataGetter.DataGetterColumnForce);\r\n } \r\n }\r\n\r\n },\r\n (err) => { }\r\n ); \r\n }\r\n\r\n onChangeDMModule(){\r\n console.log(\"this.DMModule\",this.DMModule,this.field.DataGetter.DataGetterValue);\r\n if (this.DMModule != null){\r\n this.DMModule.Fields = JSON.parse(this.DMModule.JsonFields);\r\n this.DMFields = new Array<{ key: string }>();\r\n this.DMModule.Fields.forEach(element => {\r\n this.DMFields.push({ key: element.Value.Name });\r\n });\r\n \r\n this.field.DataGetter.DataGetterValue = this.DMModule.Code;\r\n } else {\r\n this.DMModule = null;\r\n this.field.DataGetter.DataGetterValue = null;\r\n this.DMField = null;\r\n this.field.DataGetter.DataGetterColumnForce = null;\r\n }\r\n }\r\n\r\n onChangeDMField(){\r\n if (this.DMField != null){\r\n this.field.DataGetter.DataGetterColumnForce = this.DMField.key;\r\n } else {\r\n this.field.DataGetter.DataGetterColumnForce = null;\r\n }\r\n }\r\n\r\n onChangeDMContestualization(){\r\n console.log(\"onChangeDMContestualization()\", this.field.DataGetter.DataGetterContestualization);\r\n }\r\n\r\n}\r\n","<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required>\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesCompilazione\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilità del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesRisposta\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n \r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.AnswerStyle.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilità del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleInvisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n <!--#region MODALITA' RECUPERO DATI -->\r\n <mat-tab label=\"Modalità recupero dati\">\r\n <div class=\"row\">\r\n\r\n\r\n\r\n <eqp-select [enumData]=\"dataGetterTypeEnum\" [(ngModelInput)]=\"field.DataGetter.DataGetterType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onDataGetterTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DataGetterType'\">\r\n </eqp-select>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n <mat-label> Valore di Default </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DataGetterValue\" matInput [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n \r\n <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n <div class=\"row\">\r\n <div class=\"col-10\">Configura in Query Editor</div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n <button class=\"btn btn-success\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Seleziona colonna</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"columnKeys\" [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [showCancelButton]=\"true\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n \r\n <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">Modulo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n (ngModelInputChange)=\"onChangeDMModule()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n <div class=\"col-6\">Campo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\" [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n (ngModelInputChange)=\"onChangeDMField()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Cardinalità</div>\r\n <div class=\"col-6\">\r\n <eqp-select [enumData]=\"DMGetterCardinalities\" [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n [showCancelButton]=\"false\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Contestualizzazione</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"contestualization\" [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\" [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n\r\n <!--#region ETICHETTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-form-field>\r\n\r\n <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\" [(ngModel)]=\"field.Etichetta\"></textarea>\r\n\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion ETICHETTA -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unità di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> \r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n\r\n\r\n\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n\r\n <eqp-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n [attachmentsColumns]=\"configColumnListImages\">\r\n </eqp-attachments>\r\n\r\n \r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Immagine disegnabile?\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE CON MARKERS -->\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entità </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entità relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verrà visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Chiave </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Valore </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n </ng-template>\r\n</ng-template>\r\n ","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { BooleanLogicOperatorType, Condition, TriggerCondition } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'text-trigger-template',\r\n templateUrl: './text-trigger-template.component.html',\r\n styleUrls: ['./text-trigger-template.component.scss']\r\n})\r\nexport class TextTriggerTemplateComponent {\r\n\r\n //variabili esterne per l'input dei campi\r\n @Input() condition: TriggerCondition;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText = LogicOperatorText['='];\r\n activeCondition: boolean = false;\r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n field: TextField;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.field = this.condition.Field as TextField;\r\n this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorText;\r\n this.initStyles();\r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n \r\n onTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n }\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"logicOperatorText\"\r\n [(ngModelInput)]=\"selectedLogicOperator\"\r\n (ngModelInputChange)=\"onTriggerChange()\"\r\n ></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <input\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [type]=\"getInputType()\"\r\n [readonly]=\"false\"\r\n [required]=\"false\"\r\n [(ngModel)]=\"this.condition.record[field.Name]\"\r\n (ngModelChange)=\"onTriggerChange()\"\r\n />\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"this.condition.record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >keyboard_voice</mat-icon\r\n >\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"booleanLogicOperatorType\"\r\n [(ngModelInput)]=\"selectedBooleanLogicOperator\"\r\n (ngModelInputChange)=\"onTriggerChange()\"\r\n ></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { TriggerCondition, BooleanLogicOperatorType, Condition } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'numeric-trigger-template',\r\n templateUrl: './numeric-trigger-template.component.html',\r\n styleUrls: ['./numeric-trigger-template.component.scss']\r\n})\r\nexport class NumericTriggerTemplateComponent implements OnInit {\r\n\r\n @Input() condition: TriggerCondition;\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n logicOperatorNumeric = LogicOperatorNumeric;\r\n selectedLogicOperator: LogicOperatorNumeric = LogicOperatorNumeric['='];\r\n activeCondition: boolean = false;\r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n field: NumericField;\r\n\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.field = this.condition.Field as NumericField;\r\n this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorNumeric;\r\n\r\n this.configureEqpNumericOptions();\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"this.condition.record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onTriggerChange()\" />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div> \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n@Component({\r\n selector: 'boolean-trigger-template',\r\n templateUrl: './boolean-trigger-template.component.html',\r\n styleUrls: ['./boolean-trigger-template.component.scss']\r\n})\r\nexport class BooleanTriggerTemplateComponent {\r\n\r\n @Input() condition: TriggerCondition;\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n field: BooleanField;\r\n\r\n validatorsArray: any[] = [];\r\n logicOperatorBoolean = LogicOperatorBoolean;\r\n selectedLogicOperator: LogicOperatorBoolean = LogicOperatorBoolean.Si;\r\n activeCondition: boolean = false;\r\n \r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.field = this.condition.Field as BooleanField;\r\n this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorBoolean;\r\n this.configureControllers();\r\n this.initStyles();\r\n\r\n\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\n// private configureEqpNumericOptions() {\r\n\r\n// this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n// this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n// this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n// this.eqpNumericOptions.allowNegative=true;\r\n// if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n// this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n// else\r\n// this.eqpNumericOptions.decimal=\".\";\r\n// if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n// this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n// if(this.field.IsInteger== false){\r\n// if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n// else { this.eqpNumericOptions.precision = 2; }\r\n// }else{\r\n// this.eqpNumericOptions.precision = 0;\r\n// }\r\n// }\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorBoolean\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n [required]=\"false\" [(ngModel)]=\"this.condition.record[field.Name]\" \r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div> \r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'date-trigger-template',\r\n templateUrl: './date-trigger-template.component.html',\r\n styleUrls: ['./date-trigger-template.component.scss']\r\n})\r\nexport class DateTriggerTemplateComponent {\r\n\r\n @Input() condition: TriggerCondition;\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n field: DateField;\r\n\r\n logicOperatorDate = LogicOperatorDate;\r\n selectedLogicOperator: LogicOperatorDate = LogicOperatorDate['='];\r\n activeCondition: boolean = false; \r\n\r\n modes = ModeEnum;\r\n timeType = TimeTypeEnum;\r\n mode: ModeEnum;\r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n outputFormat: string = null;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.field = this.condition.Field as DateField;\r\n this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorDate;\r\n this.setTimeType();\r\n this.setOutputFormat();\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.mode = ModeEnum.DATEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.mode = ModeEnum.TIMEPICKER;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.mode = ModeEnum.DATETIMEPICKER;\r\n break;\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n}\r\n\r\nsetOutputFormat(){\r\n if (this.outputFormat != null){\r\n this.outputFormat = this.field.DateFormat; \r\n } else {\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n this.outputFormat = 'DD/MM/YYYY';\r\n }\r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n this.outputFormat = 'DD/MM/YYYY HH:mm';\r\n } \r\n if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n this.outputFormat = 'HH:mm';\r\n } \r\n }\r\n \r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorDate\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n <tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [(ngModelInput)]=\"this.condition.record[field.Name]\" (ngModelInputChange)=\"onTriggerChange()\" [outputFormat]=\"outputFormat\" >\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div> \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { BooleanLogicOperatorType, Condition, TriggerCondition } from '../../../../../models/trigger.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { LogicOperatorListValue} from '../../../../../models/logicOperator.model';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'list-value-trigger-template',\r\n templateUrl: './list-value-trigger-template.component.html',\r\n styleUrls: ['./list-value-trigger-template.component.scss']\r\n})\r\nexport class ListValueTriggerTemplateComponent {\r\n\r\n //variabili esterne per l'input dei campi\r\n @Input() condition: TriggerCondition;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n logicOperatorListValue = LogicOperatorListValue;\r\n selectedLogicOperatorListValue: LogicOperatorListValue = LogicOperatorListValue['CONTIENE ALMENO UNO'];\r\n \r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND; \r\n field: ListValueField;\r\n ListPresentationEnum = ListPresentationEnum;\r\n\r\n arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\n ngOnInit(): void {\r\n this.field = this.condition.Field as ListValueField;\r\n this.initStyles();\r\n this.setArrayData();\r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n \r\n onTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperatorListValue,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n } \r\n\r\n private setArrayData() {\r\n this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n\r\n Object.keys(this.field.ValuePairs).forEach((k) => {\r\n this.arrayData.push({Key: k, Value: this.field.ValuePairs[k], Selected: false});\r\n });\r\n }\r\n \r\n\r\n}","<div class=\"row\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorListValue\" [(ngModelInput)]=\"selectedLogicOperatorListValue\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n\r\n <eqp-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\r\n [isRequired]=\"true\"\r\n [(ngModelInput)]=\"condition.record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\">\r\n </eqp-select>\r\n\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></eqp-select>\r\n </div> \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'textarea-trigger-template',\r\n templateUrl: './textarea-trigger-template.component.html',\r\n styleUrls: ['./textarea-trigger-template.component.scss']\r\n})\r\nexport class TextareaTriggerTemplateComponent {\r\n\r\n //variabili esterne per l'input dei campi\r\n @Input() condition: TriggerCondition;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n field: TextField;\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n \r\n InputMaskEnum = TextMaskEnum;\r\n\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText = LogicOperatorText['='];\r\n activeCondition: boolean = false;\r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.field = this.condition.Field as TextField;\r\n this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorText;\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n let output:Condition = new Condition();\r\n output = {\r\n key: this.field.Name,\r\n value: this.condition.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldType: this.field.FieldType,\r\n booleanlogicoperator: this.selectedBooleanLogicOperator\r\n };\r\n\r\n this.triggerChange.emit(output);\r\n}\r\n\r\n}\r\n","<div class=\"row textareaFilterTemplate\">\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"logicOperatorText\"\r\n [(ngModelInput)]=\"selectedLogicOperator\"\r\n (ngModelInputChange)=\"onTriggerChange()\"\r\n ></eqp-select>\r\n </div>\r\n <div class=\"col-md-6 valueCol\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n {{ field.Description }}\r\n </mat-label>\r\n <textarea\r\n [ngStyle]=\"FieldstyleObj\"\r\n matInput\r\n [type]=\"getInputType()\"\r\n [readonly]=\"false\"\r\n [required]=\"false\"\r\n [(ngModel)]=\"this.condition.record[field.Name]\"\r\n (ngModelChange)=\"onTriggerChange()\"\r\n ></textarea>\r\n <mat-icon\r\n [hidden]=\"!field.Microphone\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"this.condition.record[field.Name]\"\r\n style=\"cursor: pointer\"\r\n >keyboard_voice</mat-icon\r\n >\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select\r\n [enumData]=\"booleanLogicOperatorType\"\r\n [(ngModelInput)]=\"selectedBooleanLogicOperator\"\r\n (ngModelInputChange)=\"onTriggerChange()\"\r\n ></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\nimport { TriggerCondition } from '../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'dynamic-module-trigger-fix',\r\n templateUrl: './dynamic-module-trigger-fix.component.html',\r\n styleUrls: ['./dynamic-module-trigger-fix.component.scss']\r\n})\r\nexport class DynamicModuleTriggerFixComponent {\r\n\r\n @Input() condition: TriggerCondition;\r\n @Input() form: Form;\r\n @Output() triggerChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this.configList.values = this.condition.record[this.condition.Field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onTriggerChange(ev) {\r\n this.triggerChange.emit(ev);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","\r\n<text-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</text-trigger-template>\r\n\r\n<numeric-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</numeric-trigger-template>\r\n\r\n<textarea-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</textarea-trigger-template>\r\n\r\n<boolean-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Booleano']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</boolean-trigger-template>\r\n\r\n<date-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</date-trigger-template>\r\n\r\n<list-value-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</list-value-trigger-template>","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Form } from '../../../models/form.model';\r\nimport { BooleanLogicOperatorType, Condition, Trigger, TriggerCondition, TriggerPropertyTypeEnum } from '../../../models/trigger.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { Record } from '../../../models/record.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimerangepicker';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { EndPointDataParams, ParamTypeEnum, EndPointConfiguration } from '../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\n\r\n\r\n@Component({\r\n selector: 'trigger-creator',\r\n templateUrl: './trigger-creator.component.html',\r\n styleUrls: ['./trigger-creator.component.scss']\r\n})\r\nexport class TriggerCreatorComponent {\r\n\r\n @Input(\"form\") form: Form;\r\n @Input(\"trigger\") trigger: Trigger = null;\r\n @Input(\"formulas\") formulas: any = null;\r\n @Input(\"endPointConfiguration\") endPointConfiguration: EndPointConfiguration;\r\n\r\n @Output() onSaveRecord: EventEmitter<Trigger> = new EventEmitter<Trigger>();\r\n\r\n FieldTypeEnum = FieldTypeEnum;\r\n isSaving: boolean = false;\r\n selectedFormula: any;\r\n formulaKeys: Array<any> = new Array<any>();\r\n formulaFieldsStructure: Array<any> = new Array<any>();\r\n pickerModeEnum = PickerModeEnum;\r\n triggerPropertyType = TriggerPropertyTypeEnum;\r\n\r\n dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n\r\n forms: Array<Form>;\r\n\r\n constructor(private dialog: MatDialog, private utilityHelperService: UtilityHelperService){}\r\n \r\n ngOnInit(){\r\n\r\n if (this.trigger == null){\r\n this.trigger = new Trigger();\r\n this.trigger.conditions = new Array<TriggerCondition>();\r\n } else {\r\n this.selectedFormula = {};\r\n this.selectedFormula.key = this.trigger.execution;\r\n\r\n this.formulaFieldsStructure = new Array<any>();\r\n Object.keys(this.formulas[this.selectedFormula.key]).forEach((res) => {\r\n this.formulaFieldsStructure.push({\"key\": res, \"type\": this.formulas[this.selectedFormula.key][res].type, \"tooltip\": this.formulas[this.selectedFormula.key][res].tooltip});\r\n }); \r\n\r\n Object.keys(this.trigger.formulas).forEach((res) => {\r\n this.formulaFieldsStructure.find(x => x.key == res).value = this.trigger.formulas[res].value;\r\n });\r\n\r\n }\r\n\r\n var executeGetModules: boolean = false;\r\n Object.keys(this.formulas).forEach((res) => {\r\n this.formulaKeys.push({\"key\": res});\r\n Object.keys(this.formulas[res]).forEach((property) => {\r\n if (this.formulas[res][property].type == TriggerPropertyTypeEnum.DMMODULE){\r\n executeGetModules = true;\r\n }\r\n });\r\n });\r\n\r\n if (executeGetModules){\r\n this.getAllModules();\r\n }\r\n\r\n }\r\n\r\n onTriggerChange(outputCondition: Condition, TriggerCondition: TriggerCondition){\r\n this.trigger.conditions.find(x => x.CID == TriggerCondition.CID).booleanlogicoperator = outputCondition.booleanlogicoperator;\r\n this.trigger.conditions.find(x => x.CID == TriggerCondition.CID).logicoperator = outputCondition.logicoperator;\r\n\r\n var changeInOr = false;\r\n this.trigger.conditions.forEach((condition) => {\r\n if (condition.booleanlogicoperator == BooleanLogicOperatorType.OR){ changeInOr = true; }\r\n if (changeInOr){ condition.booleanlogicoperator = BooleanLogicOperatorType.OR; }\r\n });\r\n }\r\n\r\n addCondition(){\r\n var triggerCondition = new TriggerCondition();\r\n triggerCondition.Field = new BaseField();\r\n triggerCondition.record = new Record();\r\n triggerCondition.logicoperator = null;\r\n triggerCondition.booleanlogicoperator = null;\r\n this.trigger.conditions.push(triggerCondition);\r\n }\r\n\r\n deleteCondition(element: TriggerCondition){\r\n var index = this.trigger.conditions.findIndex(x => x.CID == element.CID);\r\n this.trigger.conditions.splice(index,1);\r\n }\r\n\r\n onFieldTypeChange(ev: BaseField, condition: TriggerCondition){\r\n condition.Field = ev;\r\n condition.record[ev.Name] = \"\";\r\n }\r\n\r\n saveOrExitForm(exit: boolean) {\r\n GlobalService.debugLog('add-form-record saveRecordEvent')\r\n if (exit) {\r\n this.onSaveRecord.emit(null);\r\n } else {\r\n this.formulaFieldsStructure.forEach((formulaField) => {\r\n if (typeof this.trigger.formulas == \"undefined\"){ this.trigger.formulas = {}; }\r\n this.trigger.formulas[formulaField.key] = formulaField;\r\n this.trigger.execution = this.selectedFormula.key;\r\n });\r\n this.isSaving = true;\r\n\r\n this.onSaveRecord.emit(this.trigger);\r\n }\r\n }\r\n\r\n onChangeFormula(formula: any){\r\n \r\n GlobalService.debugLog('@@trigger-creator:onChangeFormula selected formula',formula)\r\n GlobalService.debugLog('@@trigger-creator:onChangeFormula formulas',this.formulas)\r\n\r\n this.formulaFieldsStructure = new Array<any>();\r\n //------------\r\n Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n this.formulaFieldsStructure.push({\"key\": res, \"type\": this.formulas[formula.key][res].type, \r\n \"tooltip\": this.formulas[formula.key][res].tooltip});\r\n }); \r\n //------------\r\n /* *** originale ***\r\n Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n this.formulaFieldsStructure.push({\"key\": res, \"type\": this.formulas[formula.key][res].type\r\n });\r\n });\r\n *** */\r\n GlobalService.debugLog('@@trigger-creator:onChangeFormula formulaFieldsStructure',this.formulaFieldsStructure)\r\n\r\n\r\n }\r\n\r\n onFormulaFieldChange(formulaField: any){\r\n }\r\n\r\n openFormulaDialog(formulaField: any) {\r\n this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n formula: this.formulaFieldsStructure.find(x => x.key == formulaField.key).value,\r\n fields: this.form.Fields\r\n },\r\n });\r\n this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n var formulaToChange = this.formulaFieldsStructure.find(x => x.key == formulaField.key);\r\n formulaToChange.value = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n this.onFormulaFieldChange(formulaToChange);\r\n });\r\n }\r\n\r\n getAllModules(){\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"orgaid\",\r\n ParamValue: this.form.OrgaID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetAllFormEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<Form>) => {\r\n this.forms = res;\r\n this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));\r\n\r\n this.formulaFieldsStructure.forEach((res) => {\r\n if (res.type == TriggerPropertyTypeEnum.DMMODULE){\r\n res.object = this.forms.find(x => x.ID == res.value);\r\n }\r\n });\r\n\r\n },\r\n (err) => { }\r\n ); \r\n }\r\n \r\n onEqpSelectModule(ev, formulaField){\r\n formulaField.value = ev.ID; \r\n }\r\n\r\n}\r\n","\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{trigger != null ? \"Modifica\" : \"Aggiungi\"}} trigger\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent padder\" *ngIf=\"trigger.conditions != null\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">Descrizione Trigger</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Descrizione </mat-label>\r\n <input matInput [(ngModel)]=\"trigger.description\" [readonly]=\"false\" [required]=\"false\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">Tipo Trigger</div>\r\n <div class=\"col-9\">\r\n <eqp-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n </eqp-select> \r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n <div class=\"col-3\">{{formulaField.key}}</div>\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n\r\n <button class=\"btn btn-primary\" (click)=\"addCondition()\">Aggiungi condizione</button>\r\n\r\n <div class=\"padder\" *ngFor=\"let condition of trigger.conditions\">\r\n <div class=\"row\" *ngIf=\"condition.Field != null\">\r\n <div class=\"col-1\"><button class=\"btn btn-danger\"><mat-icon (click)=\"deleteCondition(condition)\">delete</mat-icon></button></div>\r\n <div class=\"col-2\">\r\n <!-- [includeFullObject]=\"true\" -->\r\n <eqp-select [arrayData]=\"form.Fields\" [(ngModelInput)]=\"condition.Field\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange($event, condition)\"\r\n >\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-9\" *ngIf=\"condition.Field != null\">\r\n <dynamic-module-trigger-fix #fieldTemplate [condition]=\"condition\" [form]=\"form\" (triggerChange)=\"onTriggerChange($event, condition)\"></dynamic-module-trigger-fix>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>","// import { ThrowStmt } from '@angular/compiler';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { BaseField, ColSpanSizesEnum, DataGetter, DataGetterTypeEnum, FieldInvisibilityEnum, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { Context } from \"../../../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport {\r\n ActionOnRecord,\r\n Form,\r\n FormFieldGroup,\r\n FormScalarTypeEnum,\r\n FormTypeEnum,\r\n} from \"../../../models/form.model\";\r\nimport { ArrayValidators } from \"../../../services/custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfiguratorConfig } from \"../../../models/dynamicModuleConfiguratorConfig.model\";\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { Trigger } from \"../../../models/trigger.model\";\r\nimport { Contestualization } from \"../../../models/getter.model\";\r\nimport { ImageSelectorField } from \"../../../models/fields/imageSelectorField.model\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-configurator\",\r\n templateUrl: \"./eqp-dynamic-module-configurator.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module-configurator.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleConfiguratorComponent implements OnInit {\r\n \r\n @Input() debugMode: boolean = false;\r\n\r\n @Input() configurations: DynamicModuleConfiguratorConfig =\r\n new DynamicModuleConfiguratorConfig();\r\n @Input() formID: string = null;\r\n @Input() ProjectName: string;\r\n @Input() viewMode: string = \"addOrEdit\"; // Export\r\n @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n @Input() triggers: any;\r\n @Input() contestualization: Array<Contestualization>;\r\n\r\n loader: boolean = false;\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n /**\r\n * Url del server da chiamare per recuerare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n context: Context = new Context();\r\n\r\n /* export variables */\r\n downloadName: string;\r\n downloadJsonHref: any;\r\n stringifiedForm: string;\r\n\r\n /* import variables */\r\n importedModule: string = null; // json object\r\n dialogImportRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImport\", { static: true }) dialogImport: TemplateRef<any>;\r\n\r\n form: Form = new Form();\r\n backupForm: Form = null;\r\n saved: boolean = false;\r\n orgaID: string = null;\r\n UserID: number = 36;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n /* CONFIGURAZIONE PER VISUALIZZAZIONE FORM CREATA */\r\n viewConfig: DynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n true,\r\n false,\r\n false,\r\n \"0\"\r\n );\r\n\r\n formFormGroup: UntypedFormGroup = null;\r\n formCompleted = false;\r\n previewForm: Form;\r\n formFieldGroupName: string;\r\n\r\n actionAutocompleteOptions: Array<{ label: string; value: string }>;\r\n\r\n //#region Enumeratori usati nell'html\r\n FormTypeEnum = FormTypeEnum;\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n //#endregion\r\n\r\n //#region Proprietà per creazione/modifica campo\r\n fieldsColumns: Array<ConfigColumn>;\r\n @ViewChild(\"fieldsTable\", { static: false }) fieldsTable: EqpTableComponent;\r\n selectedField: BaseField | any;\r\n indexSelectedField: number;\r\n actionOnRecordFormGroup: UntypedFormGroup;\r\n dialogFieldRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogField\", { static: true }) dialogField: TemplateRef<any>;\r\n @ViewChild(\"fieldSectionColumnTemplate\", { static: true })\r\n fieldSectionColumnTemplate: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una Form di dettaglio\r\n selectedInnerForm: Form;\r\n indexSelectedInnerForm: number;\r\n dialogInnerFormRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogInnerForm\", { static: true })\r\n dialogInnerForm: TemplateRef<any>;\r\n innerFormConfig: DynamicModuleConfiguratorConfig;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una action sui record di una Form\r\n actionsOnRecordColumns: Array<ConfigColumn>;\r\n @ViewChild(\"actionsOnRecordTable\", { static: false })\r\n actionsOnRecordTable: EqpTableComponent;\r\n selectedAction: ActionOnRecord;\r\n indexSelectedAction: number;\r\n dialogActionOnRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogActionOnRecord\", { static: true })\r\n dialogActionOnRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n /**\r\n * Evento emesso quando si salva una form e non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n /**\r\n * Evento emesso DOPO aver eseguito una chiamata al server per il salvataggiodi una form all'endpoint specificato.\r\n */\r\n @Output() afterSaveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n // Out componente esterno\r\n @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n\r\n // Triggers\r\n dialogTriggersRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogTriggers\", { static: true }) dialogTriggers: TemplateRef<any>;\r\n selectedTrigger: Trigger;\r\n triggersColumns: Array<ConfigColumn>;\r\n @ViewChild(\"triggersTable\", { static: false }) triggersTable: EqpTableComponent;\r\n\r\n showAllFields: boolean = false;\r\n\r\n // Contestualization\r\n selectedContestualization: string = null;\r\n selectedContestualizationValue: number = null;\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugMode = this.debugMode;\r\n GlobalService.debugLog('ngOnInit - configurations', this.configurations);\r\n GlobalService.debugLog('ngOnInit - formID', this.formID);\r\n\r\n this.baseServerUrl =\r\n this.configurations.dynamicModuleGeneralConfig.baseServerUrl;\r\n this.context = this.configurations.dynamicModuleGeneralConfig.context;\r\n this.endPointConfiguration =\r\n this.configurations.dynamicModuleGeneralConfig.endPointConfiguration;\r\n // this.formID = this.configurations.dynamicModuleGeneralConfig.formID;\r\n this.userToken = this.configurations.dynamicModuleGeneralConfig.userToken;\r\n\r\n this.form =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.form;\r\n this.orgaID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.orgaID;\r\n this.UserID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.UserID;\r\n this.innerFormManagment =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormManagment;\r\n this.innerFormRef =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormRef;\r\n\r\n this.form.OrgaID = this.orgaID;\r\n\r\n this.configureDefaultEndPoints();\r\n this.getFormByID();\r\n if (this.context) {\r\n UtilityHelperService.SetContext(this.context);\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà baseServerUrl è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n );\r\n if (this.formID) {\r\n this.endPointConfiguration.Forms.GetByIDEndPoint.Params = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n alert(\"errore! erano presenti delle parentesi.\");\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n setName(Name: string) {\r\n if(!this.stringSanitizer(Name)){\r\n const RegExpParetesis = /[\\(\\)\\[\\]\\{\\}]/g;\r\n // Rimuovi tutte le parentesi non bilanciate\r\n this.form.Name = Name.replace(RegExpParetesis, '');\r\n }\r\n if(this.form.ID == null){ // this.form.Code == null || this.form.Code == undefined || this.form.Code == \"\" ){\r\n this.setCode(this.form.Name);\r\n }\r\n }\r\n setCode(Code: string) {\r\n this.stringSanitizer(Code);\r\n \r\n const RegExpPlain = /[^\\w]/g;\r\n this.form.Code = Code.toUpperCase().replace(RegExpPlain, \"\");\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /* IMPORT FUNCTION */\r\n onImport(event) {\r\n const selectedFile = event.target.files[0];\r\n const fileReader = new FileReader();\r\n fileReader.readAsText(selectedFile, \"UTF-8\");\r\n fileReader.onload = () => {\r\n GlobalService.debugLog('onImport - fileReader.result.toString()', fileReader.result.toString());\r\n this.importedModule = fileReader.result.toString();\r\n\r\n if (this.importedModule != null) {\r\n if (confirm(\"stai per sovrascrivere il modulo\")) {\r\n // chiamo il parse così da non creare un referenceBinding\r\n var importedForm: Form = JSON.parse(this.importedModule);\r\n importedForm.ID = \"\";\r\n importedForm.Name = importedForm.Name + \" (Importato)\";\r\n\r\n importedForm = this.setImportedForm(importedForm);\r\n this.setFormAndConfigure(importedForm);\r\n this.setName(importedForm.Name);\r\n \r\n this.closeImport();\r\n }\r\n } else {\r\n alert(\"seleziona un file\");\r\n }\r\n };\r\n fileReader.onerror = (error) => {\r\n alert(\"seleziona un file valido o controlla che non sia corrotto\");\r\n console.error(error);\r\n };\r\n }\r\n\r\n setImportedForm(form: Form){\r\n\r\n // Modifica del creation user su Import\r\n form.CreationUser = this.UserID;\r\n\r\n // Modifica dei Field su Import\r\n form.Fields.forEach((field) => {\r\n if (field.FieldType == FieldTypeEnum[\"Elenco immagini\"]){\r\n (field as ImageSelectorField).AttachmentList.forEach((attachment) => {\r\n attachment.ID = 0;\r\n })\r\n }\r\n });\r\n return form;\r\n }\r\n\r\n importModule() {\r\n this.dialogImportRef = this.dialog.open(this.dialogImport, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n // width: \"75%\",\r\n // maxHeight: \"80%\",\r\n // height: \"80%\",\r\n });\r\n }\r\n\r\n closeImport() {\r\n this.dialogImportRef.close();\r\n }\r\n /* END IMPORT FUNCTION */\r\n\r\n\r\n /**\r\n * Funzione di esportazione modulo\r\n */\r\n\r\n export(){\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.ExportByIDEndPoint,\r\n dynamicModuleParams,\r\n (base64res: string) => {\r\n\r\n const newBlob = new Blob([base64res], { type: \"text/plain\" });\r\n const data = window.URL.createObjectURL(newBlob);\r\n const link = document.createElement(\"a\");\r\n link.href = data;\r\n link.download = \"export_\"+this.formID+\"_form.txt\"; // set a name for the file\r\n link.click();\r\n \r\n },\r\n (err) => {\r\n this.setFormAndConfigure(new Form());\r\n }\r\n );\r\n\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.setFormAndConfigure(res);\r\n },\r\n (err) => {\r\n this.setFormAndConfigure(new Form());\r\n }\r\n );\r\n } else {\r\n this.setFormAndConfigure();\r\n }\r\n }\r\n\r\n /**\r\n * Configuro l'export del form\r\n */\r\n\r\n configureExport(res: Form) {\r\n\r\n /* getting ready for export */\r\n let clone = new Form();\r\n clone.Code = \"IMPORT_\" + res.Code;\r\n clone.Name = \"import_\" + res.Name;\r\n clone.Description = res.Description;\r\n clone.FormScalarType = res.FormScalarType;\r\n clone.FormFieldsGroups = res.FormFieldsGroups;\r\n clone.ActionsOnRecord = res.ActionsOnRecord;\r\n clone.Fields = res.Fields;\r\n clone.ObjectFields = res.ObjectFields;\r\n clone.InnerForms = res.InnerForms;\r\n clone.RootEntityID = res.RootEntityID;\r\n clone.OrgaID = res.OrgaID;\r\n\r\n this.downloadName = \"export_\" + res.Name;\r\n this.stringifiedForm = JSON.stringify(clone);\r\n this.downloadJsonHref = this.sanitizer.bypassSecurityTrustUrl(\r\n \"data:text/json;charset=UTF-8,\" +\r\n encodeURIComponent(this.stringifiedForm)\r\n );\r\n \r\n /* end export */\r\n\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione della form.\r\n * Se l'utente sceglie una visualizzazione raggruppata il metodo aggiunge al FormGroup un nuovo\r\n * controllo per l'array dei nomi delle sezioni da creare.\r\n */\r\n onChangeFormScalarType() {\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n if (!this.formFormGroup.contains(\"FormFieldsGroups\")) {\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n this.formFormGroup.addControl(\r\n \"FormFieldsGroups\",\r\n new UntypedFormControl(this.form.FormFieldsGroups, [\r\n Validators.required,\r\n ArrayValidators.minLenght(1),\r\n ])\r\n );\r\n }\r\n } else {\r\n this.form.FormFieldsGroups = null;\r\n if (this.formFormGroup.contains(\"FormFieldsGroups\"))\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n }\r\n this.formFormGroup.updateValueAndValidity();\r\n this.configureColumns();\r\n }\r\n\r\n /**\r\n * Evento invocato al keyup nell'input per inserire i nomi delle sezioni per la visualizzazione\r\n * raggruppata della form. Quanto l'utente preme il tasto invio viene aggiunto il nuovo nome alle\r\n * sezioni dispobili se non ne esiste una con lo stesso nome.\r\n * @param event Evento che rappresenta il keyup sulla tastiera.\r\n */\r\n onFormFieldGroupNameKeyUp(event) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n if (!this.form.FormFieldsGroups) {\r\n this.form.FormFieldsGroups = new Array<FormFieldGroup>();\r\n }\r\n if (\r\n !this.form.FormFieldsGroups.find(\r\n (n) => n.Name == this.formFieldGroupName\r\n )\r\n ) {\r\n this.form.FormFieldsGroups.push({ Name: this.formFieldGroupName });\r\n }\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n this.formFieldGroupName = null;\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere la sezione selezionata da quelle disponibili per la form.\r\n * @param groupName Nome della sezione da eliminare.\r\n */\r\n onDeleteFormFieldGroupName(groupName: string) {\r\n this.form.FormFieldsGroups.splice(\r\n this.form.FormFieldsGroups.findIndex((g) => g.Name === groupName),\r\n 1\r\n );\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n // Se esistono Field legati alla sezione che si vuole eliminare allora rompo il legame.\r\n if (this.form.Fields.find((f) => f.FieldGroup == groupName)) {\r\n this.form.Fields.filter((f) => f.FieldGroup == groupName).forEach(\r\n (f) => (f.FieldGroup = null)\r\n );\r\n }\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n\r\n /**\r\n * Metodo chiamato quando si vuole aggiungere un nuovo campo o si vuole modificare uno esistente.\r\n * Memorizza l'eventuale Field scelto one crea uno nuovo prima di aprire il dialog per modificarlo/aggiungerlo.\r\n * @param field Oggetto BaseField da modificare. Se null ne viene creata una nuova istanza per l'aggiunta.\r\n */\r\n openFieldDialog(field: BaseField = null) {\r\n\r\n console.log(\"openFieldDialog\",field);\r\n\r\n if (field) {\r\n this.indexSelectedField = this.form.Fields.indexOf(field);\r\n this.selectedField = JSON.parse(JSON.stringify(field));\r\n\r\n // Dato che con il JSON.parse si perde per strada la formula, la rimetto dopo.\r\n // Tanto oramai il riferimento con \"field\" è stato perso e stiamo passando una stringa\r\n this.selectedField.Formula = field.Formula;\r\n\r\n if(this.selectedField.AnswerStyle == null){\r\n this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n }\r\n } else {\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n \r\n }\r\n\r\n this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n height: \"80%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che salva il campo appena creato o modificato.\r\n * Prima del salvataggio controlla se esiste un altro campo con la stessa label, in questo\r\n * case genere un errore (i campi devono avere nomi, e quindi label, univoche - i nomi vengono\r\n * ricavati unendo le parole che formano la label tramite \"_\").\r\n * @param field Campo da salvare\r\n */\r\n onSaveField(field: BaseField) {\r\n if (field) {\r\n if (\r\n this.form.Fields &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === field.Label &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due campi con lo stesso Codice.\"\r\n );\r\n throw new Error(\"Impossibile inserire due campi con lo stesso Codice.\");\r\n }\r\n\r\n if (this.indexSelectedField != null && this.indexSelectedField >= 0) {\r\n this.form.Fields[this.indexSelectedField] = field;\r\n } else {\r\n if (!this.form.Fields) {\r\n this.form.Fields = new Array<BaseField>();\r\n }\r\n this.form.Fields.push(field);\r\n }\r\n }\r\n GlobalService.debugLog(\"onSaveField\", this.form)\r\n this.closeFieldDialog();\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n }\r\n\r\n /**\r\n * Metodo che controlla se lo step per l'aggiunta dei campi nella form è concluso.\r\n * @returns Se TRUE lo step viene considerato completato ed è possbile passare al successivo.\r\n */\r\n isFieldStepCompleted(): boolean {\r\n if (!this.form.Fields) {\r\n return false;\r\n }\r\n if (\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice &&\r\n this.form.Fields.find((f) => !f.FieldGroup)\r\n ) {\r\n return false;\r\n }\r\n return this.form.Fields.length > 0;\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle form di dettaglio.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param innenrForm Form di dettaglio da modificare (se null allora vado in add).\r\n */\r\n openInnerFormDialog(innenrForm: Form = null) {\r\n this.innerFormConfig = new DynamicModuleConfiguratorConfig();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormManagment =\r\n true;\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef\r\n // [form]=\"selectedInnerForm\"\r\n // [innerFormManagment]=\"true\"\r\n // [innerFormRef]=\"dialogInnerFormRef\"\r\n\r\n if (innenrForm) {\r\n this.indexSelectedInnerForm = this.form.InnerForms.indexOf(innenrForm);\r\n\r\n // this.selectedInnerForm = JSON.parse(JSON.stringify(innenrForm));\r\n // this.selectedInnerForm.OldName = innenrForm.Name;\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n JSON.parse(JSON.stringify(innenrForm));\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName =\r\n innenrForm.Name;\r\n\r\n this.indexSelectedField = this.form.Fields.findIndex(\r\n (f) => f.Label === innenrForm.Name\r\n );\r\n } else {\r\n // this.selectedInnerForm = new Form();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n new Form();\r\n this.indexSelectedInnerForm = null;\r\n this.indexSelectedField = null;\r\n }\r\n // this.dialogInnerFormRef = this.dialog.open(this.dialogInnerForm, {\r\n\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef =\r\n this.dialog.open(this.dialogInnerForm, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"85%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo scatenato al salvataggio di una form di dettaglio.\r\n * @param event Form creata/modificata dall'utente. Se è null allora l'utente ha abbandonato la configurazione.\r\n */\r\n onSaveOrExitInnerForm(event: Form) {\r\n if (event != null) {\r\n if (\r\n this.form.Name === event.Name ||\r\n (this.form.InnerForms &&\r\n this.form.InnerForms.find(\r\n (a, i) =>\r\n a.Name === event.Name &&\r\n (this.indexSelectedInnerForm == null\r\n ? true\r\n : this.indexSelectedInnerForm !== i)\r\n )) ||\r\n (this.form.Fields &&\r\n this.indexSelectedInnerForm == null &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === event.Name &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n ))\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n throw new Error(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n }\r\n\r\n const innerFormField: BaseField = new BaseField();\r\n innerFormField.Name = event.Name.split(\" \").join(\"_\");\r\n innerFormField.Label = event.Name;\r\n innerFormField.FieldType = FieldTypeEnum[\"Form di dettaglio\"];\r\n innerFormField.FieldGroup =\r\n this.indexSelectedField != null\r\n ? this.form.Fields[this.indexSelectedField].FieldGroup\r\n : null;\r\n\r\n if (\r\n this.indexSelectedInnerForm != null &&\r\n this.indexSelectedInnerForm >= 0\r\n ) {\r\n this.form.InnerForms[this.indexSelectedInnerForm] = event;\r\n this.form.Fields[this.indexSelectedField] = innerFormField;\r\n } else {\r\n if (!this.form.InnerForms) {\r\n this.form.InnerForms = new Array<Form>();\r\n }\r\n this.form.InnerForms.push(event);\r\n this.form.Fields.push(innerFormField);\r\n }\r\n this.reloadFieldsTable();\r\n }\r\n this.dialogInnerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle action.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param action ActionOnRecord da modificare (se null allora vado in add).\r\n */\r\n openActionOnRecordDialog(action: ActionOnRecord = null) {\r\n if (action) {\r\n this.indexSelectedAction = this.form.ActionsOnRecord.indexOf(action);\r\n this.selectedAction = JSON.parse(JSON.stringify(action));\r\n } else {\r\n this.selectedAction = new ActionOnRecord();\r\n this.indexSelectedAction = null;\r\n }\r\n this.createActionOnRecordForm();\r\n this.dialogActionOnRecordRef = this.dialog.open(this.dialogActionOnRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n setActionAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.actionAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.form.Fields,\r\n this.selectedAction.Action\r\n );\r\n }\r\n }\r\n /**\r\n * Metodo per salvare l'azione creata/modificate.\r\n */\r\n saveActionOnRecord() {\r\n if (\r\n this.form.ActionsOnRecord &&\r\n this.form.ActionsOnRecord.find(\r\n (a, i) =>\r\n a.Name === this.selectedAction.Name &&\r\n (this.indexSelectedAction == null\r\n ? true\r\n : this.indexSelectedAction !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due action con lo stesso nome.\"\r\n );\r\n throw new Error(\"Impossibile inserire due action con lo stesso nome.\");\r\n }\r\n\r\n if (this.indexSelectedAction != null && this.indexSelectedAction >= 0) {\r\n this.form.ActionsOnRecord[this.indexSelectedAction] = this.selectedAction;\r\n } else {\r\n if (!this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord = new Array<ActionOnRecord>();\r\n }\r\n this.form.ActionsOnRecord.push(this.selectedAction);\r\n }\r\n this.closeDialogActionOnRecord();\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog della inner form.\r\n */\r\n closeDialogInnerForm() {\r\n this.innerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog di gestione delle action.\r\n */\r\n closeDialogActionOnRecord() {\r\n this.dialogActionOnRecordRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per segnare come conclusa la creazione della form e per crearne una copia\r\n * da visalizzare come anteprima.\r\n * @param completed Se TRUE segna la form come conclusa e ne crea una copia da visualizzare\r\n */\r\n setFormStatus(completed: boolean) {\r\n if (completed) {\r\n this.formCompleted = true;\r\n this.previewForm = JSON.parse(JSON.stringify(this.form));\r\n GlobalService.debugLog(\"previewForm\", this.previewForm)\r\n\r\n // Per visualizzare correttamente l'oanteprima della form appena creata\r\n // bisogna valorizzare la proprietà Name dei campi della form e delle InnerForms.\r\n this.previewForm.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n if (\r\n this.previewForm.InnerForms &&\r\n this.previewForm.InnerForms.length > 0\r\n ) {\r\n this.previewForm.InnerForms.forEach((form) => {\r\n form.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n });\r\n }\r\n } else {\r\n this.formCompleted = false;\r\n this.previewForm = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare la form creata alla fine del wizard.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveFormEvent\".\r\n */\r\n saveForm() {\r\n\r\n if (\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Forms.SaveEndPoint\r\n ) {\r\n\r\n if (!this.saved){\r\n this.backupForm = JSON.parse(JSON.stringify(this.form));\r\n } else {\r\n this.form = JSON.parse(JSON.stringify(this.backupForm));\r\n }\r\n \r\n\r\n // Per far arrivare al server l'array di Field bisogna passarli su Any\r\n this.form.ObjectFields = [];\r\n this.form.Fields.forEach((field) => {\r\n\r\n // Trasformo il datagetter in Base64\r\n field.DataGetterValueBase64String = btoa(JSON.stringify(field.DataGetter));\r\n field.DataGetter = null;\r\n\r\n if (field.FieldType == FieldTypeEnum.Allegato) {\r\n const fldA: any = field;\r\n fldA.MetadataObjectFields = fldA.MetadataFields;\r\n fldA.MetadataFields = [];\r\n this.form.ObjectFields.push(fldA);\r\n } else {\r\n if (field.FieldType == FieldTypeEnum[\"Campo numerico\"]) {\r\n if (\r\n (<NumericField>field).MaxValue == undefined ||\r\n (<NumericField>field).MaxValue == null\r\n ) {\r\n (<NumericField>field).MaxValue = Number.MAX_SAFE_INTEGER;\r\n }\r\n if (\r\n (<NumericField>field).MinValue == undefined ||\r\n (<NumericField>field).MinValue == null\r\n ) {\r\n (<NumericField>field).MinValue = 0;\r\n }\r\n }\r\n this.form.ObjectFields.push(field);\r\n }\r\n });\r\n this.form.ProjectName = this.ProjectName;\r\n this.form.Fields = null;\r\n this.form.OrgaID = this.orgaID;\r\n if (this.form.CreationDate == null) {\r\n this.form.CreationDate = new Date();\r\n this.form.CreationUser = this.UserID;\r\n }\r\n this.form.ModifyUser = this.UserID;\r\n\r\n this.form.ObjectTriggers = JSON.stringify(this.form.Triggers);\r\n this.form.Triggers = null;\r\n\r\n\r\n // chiamata effettiva\r\n const dynamicModuleParams = [\r\n {\r\n ParamName: \"Form\",\r\n ParamValue: this.form,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n\r\n this.saved = true;\r\n\r\n\r\n\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n EqpDynamicModuleDialogService.Success(\"Form salvata con successo!\");\r\n this.afterSaveFormEvent.emit(this.form);\r\n },\r\n (error) => {\r\n EqpDynamicModuleDialogService.Error(\"Errore nel salvataggio della form\");\r\n console.log(\"Errore nel salvataggio della form\",error);\r\n }\r\n );\r\n } else {\r\n this.saveFormEvent.emit(this.form);\r\n }\r\n }\r\n\r\n //#region FUNZIONI PRIVATE\r\n\r\n /**\r\n * Metodo per impostare la form e configurare colonne/FormGourp.\r\n * @param form Form da utilizzare.\r\n */\r\n private setFormAndConfigure(form: Form = null) {\r\n if (form != null) {\r\n this.form = form;\r\n this.form.OrgaID = this.orgaID;\r\n if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n }\r\n \r\n if (typeof this.form.Fields != \"undefined\"){\r\n this.form.Fields.forEach((field) => {\r\n\r\n // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio\r\n if (field.DataGetterValueBase64String != null){\r\n field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));\r\n field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType; \r\n } else {\r\n field.DataGetter = new DataGetter();\r\n }\r\n\r\n field.DataGetterValueBase64String = null;\r\n\r\n });\r\n }\r\n }\r\n this.configureColumns();\r\n this.createFormForm();\r\n }\r\n\r\n /**\r\n * Configura le colonne per le tabelle necessarie alla creazione della form:\r\n * - per la visualizzazione dei campi inseriti\r\n * - per le form di dettaglio create\r\n * - per le azioni configurate sui record della form\r\n */\r\n private configureColumns() {\r\n this.fieldsColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 4rem\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.editField(element),\r\n },\r\n {\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateField(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteElement(element, \"Fields\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"Fields\"),\r\n disabled: (element) => this.form.Fields.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"Fields\"),\r\n disabled: (element) =>\r\n this.form.Fields.indexOf(element) >= this.form.Fields.length - 1,\r\n },\r\n ],\r\n },\r\n {\r\n key: \"FieldType\",\r\n display: \"Tipologia\",\r\n type: TypeColumn.Enum,\r\n enumModel: FieldTypeEnum,\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n { key: \"Label\", display: \"Label\", styles: { flex: \"0 0 8rem\" } },\r\n {\r\n key: \"Description\",\r\n display: \"Descrizione\",\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n {\r\n key: \"DataGetter.DataGetterType\",\r\n display: \"Tipo Recupero Dati\",\r\n type: TypeColumn.Enum,\r\n enumModel: DataGetterTypeEnum,\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n {\r\n key: \"Required\",\r\n display: \"Obbligatorio\",\r\n value: (element) => element.Required,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"Formula\",\r\n display: \"Calcolato\",\r\n value: (element) => element.Formula != null && element.Formula != '',\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"InListView\",\r\n display: \"Visibile in Compilazione\",\r\n value: (element) => element.InListView,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"Invisibility\",\r\n display: \"Occupa spazio?\",\r\n value: (element) => element.InListView || element.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"],\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"VisibleIf\",\r\n display: \"Visibilità condizionata\",\r\n value: (element) => element.VisibleIf != null && element.VisibleIf != \"\",\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"AnswerStyle.InListView\",\r\n display: \"Visibile nella risposta\",\r\n value: (element) => !element.AnswerStyle || element.AnswerStyle && element.AnswerStyle.InListView,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n ];\r\n\r\n if (\r\n this.form.FormScalarType &&\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ) {\r\n this.fieldsColumns.splice(1, 0, {\r\n key: \"FieldGroup\",\r\n display: \"Sezione\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.fieldSectionColumnTemplate,\r\n styles: { flex: \"0 0 14rem\" },\r\n });\r\n // this.fieldsColumns.push(\r\n // {\r\n // key: \"FieldGroup\",\r\n // display: \"Sezione\",\r\n // type: TypeColumn.ExternalTemplate,\r\n // externalTemplate: this.fieldSectionColumnTemplate,\r\n // styles: { flex: \"0 0 14rem\" }\r\n // }\r\n // );\r\n }\r\n\r\n this.actionsOnRecordColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.openActionOnRecordDialog(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) =>\r\n this.deleteElement(element, \"ActionsOnRecord\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) >=\r\n this.form.ActionsOnRecord.length - 1,\r\n },\r\n ],\r\n },\r\n { key: \"Icon\", display: \"Icona\", styles: { flex: \" 0 0 15%\" } },\r\n { key: \"Name\", display: \"Nome\", styles: { flex: \" 0 0 20%\" } },\r\n { key: \"Action\", display: \"Azione\" },\r\n ];\r\n\r\n this.triggersColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.openTriggersDialog(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) =>\r\n this.deleteTrigger(element),\r\n }\r\n ],\r\n },\r\n { key: \"description\", display: \"Descrizione\", styles: { flex: \" 0 0 15%\" } },\r\n { key: \"execution\", display: \"Cosa esegue\", styles: { flex: \" 0 0 15%\" }},\r\n ];\r\n\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'oggetto Form\r\n */\r\n private createFormForm() {\r\n this.formFormGroup = this.formBuilder.group({\r\n Code: [this.form.Code],\r\n Name: [this.form.Name, Validators.required],\r\n Description: [this.form.Description],\r\n FormScalarType: [this.form.FormScalarType, Validators.required],\r\n });\r\n this.onChangeFormScalarType();\r\n }\r\n\r\n /**\r\n * Crea il FormGroup epr l'aggiunta o la modifica di una action sui record della Form.\r\n */\r\n private createActionOnRecordForm() {\r\n this.actionOnRecordFormGroup = this.formBuilder.group({\r\n Name: [this.selectedAction.Name, Validators.required],\r\n Icon: [this.selectedAction.Icon, Validators.required],\r\n Action: [this.selectedAction.Action, Validators.required],\r\n });\r\n }\r\n\r\n /**\r\n * Chiude il dialog per aggiungere/modificare un Field senza salvare\r\n */\r\n private closeFieldDialog() {\r\n if (this.dialogFieldRef != undefined) this.dialogFieldRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per gestire l'apertura del dialog per la modifica di un Field.\r\n * Se il field è di tipo \"Form di dettaglio\" apre il dialog per la modifica di una\r\n * InnerForm altrimenti apre quello per la modifica di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private editField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n this.openFieldDialog(field);\r\n } else {\r\n this.openInnerFormDialog(\r\n this.form.InnerForms.find((f) => f.Name == field.Label)\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per gestire la duplicazione di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private duplicateField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n // ricreo l'oggetto passando per un json\r\n let cloneField: BaseField = JSON.parse(JSON.stringify(field));\r\n\r\n cloneField.Label = field[\"Label\"] + \"Copy\";\r\n cloneField.OrdinalPosition = this.form.Fields.length + 1;\r\n\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n this.onSaveField(cloneField);\r\n } else {\r\n alert(\"non è possibile duplicare una form di dettaglio\");\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere un Field all'interno di una Form.\r\n * Richiede conferma all'utente prima di rimuoverlo.\r\n * @param field BaseField da rimuovere\r\n */\r\n private deleteElement(\r\n element: BaseField | ActionOnRecord | Form,\r\n propertyName: string\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare l'elemento selezionato?\",\r\n () => {\r\n this.form[propertyName].splice(\r\n this.form[propertyName].indexOf(element),\r\n 1\r\n );\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per spostare un campo all'interno della form.\r\n * @param field Oggetto di tipo BaseField da spostare.\r\n * @param moveUp Se TRUE allora sposta verso l'alto il campo (abbassa l'indice) altrimenti il contrario.\r\n */\r\n private moveElement(\r\n element: BaseField | ActionOnRecord,\r\n moveUp: boolean,\r\n propertyName: string\r\n ) {\r\n const startingIndex = this.form[propertyName].indexOf(element);\r\n const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n this.form[propertyName].splice(startingIndex, 1);\r\n this.form[propertyName].splice(endingIndex, 0, element);\r\n\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento delle sezioni che compongono la form.\r\n */\r\n private setFormFieldGroupOrdinalPosition() {\r\n this.form.FormFieldsGroups.forEach((g, i) => (g.OrdinalPosition = i));\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setFieldOrdinalPosition() {\r\n if (this.form.Fields) {\r\n this.form.Fields.forEach((field) => {\r\n field.OrdinalPosition = this.form.Fields.indexOf(field);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella dei campi aggiunti in una form\r\n */\r\n private reloadFieldsTable() {\r\n if (this.fieldsTable) {\r\n this.fieldsTable.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setActionOrdinalPosition() {\r\n if (this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord.forEach((action) => {\r\n action.OrdinalPosition = this.form.ActionsOnRecord.indexOf(action);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form.\r\n */\r\n private reloadActionsOnRecordTable() {\r\n if (this.actionsOnRecordTable) {\r\n this.actionsOnRecordTable.reloadDatatable();\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n onExternalComponentOut(ev: eventOut){\r\n this.out.emit(ev);\r\n }\r\n\r\n /**\r\n * TRIGGERS\r\n */\r\n\r\n openTriggersDialog(ev: Trigger = null) {\r\n\r\n if (ev != null){\r\n this.selectedTrigger = ev;\r\n } else {\r\n this.selectedTrigger = null;\r\n }\r\n\r\n this.dialogTriggersRef = this.dialog.open(this.dialogTriggers, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n height: \"80%\",\r\n });\r\n }\r\n\r\n saveTrigger(element: Trigger){\r\n \r\n if (element != null){\r\n if (this.form.Triggers != null){\r\n var existsTrigger = this.form.Triggers.find(x => x.CID == element.CID);\r\n if (existsTrigger == null){\r\n // Nuovo trigger\r\n this.form.Triggers.push(element);\r\n } else {\r\n existsTrigger = element;\r\n }\r\n } else {\r\n this.form.Triggers = new Array<Trigger>();\r\n this.form.Triggers.push(element);\r\n }\r\n this.triggersTable.reloadDatatable();\r\n }\r\n\r\n this.dialogTriggersRef.close();\r\n }\r\n\r\n deleteTrigger(element: Trigger){\r\n var index = this.form.Triggers.findIndex(x => x.CID == element.CID);\r\n this.form.Triggers.splice(index,1);\r\n this.triggersTable.reloadDatatable();\r\n }\r\n\r\n onContestualizationSelect(){\r\n this.selectedContestualizationValue = this.contestualization.find(x => x.entityTableName == this.selectedContestualization).entityID;\r\n }\r\n\r\n onContestualizationSelectValue(){\r\n this.contestualization.find(x => x.entityTableName == this.selectedContestualization).entityID = this.selectedContestualizationValue;\r\n }\r\n\r\n applyContestualization(element){\r\n this.formCompleted = false;\r\n \r\n if (this.QueryEditorComponent != null){\r\n this.QueryEditorComponent.inputParams.config.contestualization = element;\r\n }\r\n\r\n setTimeout(() => {\r\n this.formCompleted = true;\r\n },50);\r\n }\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n\r\n<div class=\"dynamic-module-configurator-header row title p-1\" *ngIf=\"innerFormManagment\">\r\n <div class=\"col-md-10\">\r\n <div class=\"header-title-standard\">Aggiunta form di dettaglio</div>\r\n </div>\r\n <div class=\"col-md-2 text-right\">\r\n <mat-icon class=\"close\" (click)=\"closeDialogInnerForm()\">close</mat-icon>\r\n </div>\r\n</div>\r\n\r\n<!--#region EXPORT MODULE -->\r\n<div class=\"dynamic-module-configurator-exporter\" *ngIf=\"loader && viewMode == 'Export'\" class=\"p-3\">\r\n \r\n <button mat-raised-button class=\"btn btn-primary\" (click)=\"export()\">Esporta</button>\r\n \r\n <!--<a\r\n class=\"btn btn-clear\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Download JSON\"\r\n [href]=\"downloadJsonHref\"\r\n download=\"{{ downloadName }}.json\"\r\n >Export</a>-->\r\n\r\n</div>\r\n<!--#endregion EXPORT MODULE -->\r\n\r\n<mat-horizontal-stepper\r\n *ngIf=\"loader && formFormGroup && viewMode == 'addOrEdit'\"\r\n linear\r\n #stepper\r\n [ngClass]=\"{ outerForm: true, 'innerFormManagment-stepper': innerFormManagment }\"\r\n class=\"dynamic-module-configurator-stepper {{ 'last-edited-step-' + stepper.selectedIndex }}\"\r\n>\r\n <!--#region DATI GENERALI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-general-data\" [stepControl]=\"formFormGroup\">\r\n <form [formGroup]=\"formFormGroup\" (keydown.enter)=\"(false)\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus(false)\"\r\n ></div>\r\n Dati generali della form\r\n </ng-template>\r\n\r\n <div class=\"row firstRow\">\r\n <!-- \r\n <div class=\"col-md-6\">\r\n <mat-label\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n >\r\n Codice Univoco \r\n </mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n formControlName=\"Code\"\r\n [(ngModel)]=\"form.Code\"\r\n required\r\n (focusout)=\"setCode(form.Code)\"\r\n disabled=\"true\"\r\n readonly=\"true\"\r\n />\r\n </mat-form-field>\r\n </div> \r\n <div class=\"col-md-6\"></div>\r\n -->\r\n <div class=\"col-md-4\">\r\n <mat-form-field class=\"name\" appearance=\"outline\"\r\n > \r\n <mat-label>Nome</mat-label>\r\n <input\r\n placeholder=\"Nome\"\r\n matInput\r\n formControlName=\"Name\"\r\n [(ngModel)]=\"form.Name\"\r\n required\r\n (focusout)=\"setName(form.Name)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-md-4\">\r\n <!-- <mat-label>Tipo di visualizzazione</mat-label> -->\r\n <eqp-select\r\n class=\"nameSection\"\r\n [enumData]=\"FormScalarTypeEnum\"\r\n [(ngModelInput)]=\"form.FormScalarType\"\r\n [isRequired]=\"false\"\r\n required\r\n [showCancelButton]=\"false\"\r\n [formGroupInput]=\"formFormGroup\"\r\n [formControlNameInput]=\"'FormScalarType'\"\r\n (ngModelInputChange)=\"onChangeFormScalarType()\"\r\n placeholder=\"Tipo di visualizzazione\"\r\n\r\n >\r\n </eqp-select>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <mat-form-field class=\"name\" appearance=\"outline\">\r\n <mat-label>Descrizione</mat-label>\r\n <input\r\n matInput\r\n formControlName=\"Description\"\r\n [(ngModel)]=\"form.Description\"\r\n (focusout)=\"stringSanitizer(form.Name)\"\r\n placeholder=\"Descrizione\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row inserted\"\r\n *ngIf=\"\r\n form.FormScalarType &&\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n \"\r\n >\r\n <div class=\"col-md-4\">\r\n <mat-form-field class=\"nameSection\" appearance=\"outline\">\r\n <mat-label> Nome sezione (invio per confermare) </mat-label>\r\n\r\n <input\r\n matInput\r\n [(ngModel)]=\"formFieldGroupName\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (keyup)=\"onFormFieldGroupNameKeyUp($event)\"\r\n placeholder=\"Nome sezione (invio per confermare)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <span class=\"mr-3\">Sezioni inserite:</span>\r\n <ul class=\"section-list\">\r\n <li *ngFor=\"let groupName of form.FormFieldsGroups; let i = index\">\r\n <span class=\"sectionInsert\">\r\n <mat-icon\r\n class=\"mr-1\"\r\n (click)=\"onDeleteFormFieldGroupName(groupName.Name)\"\r\n >close </mat-icon\r\n >{{ groupName.Name }}\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <!-- IMPORT -->\r\n <button\r\n *ngIf=\"!this.formID\"\r\n class=\"btn btn-clear button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"importModule()\"\r\n >\r\n Importa\r\n </button>\r\n <!-- END IMPORT -->\r\n\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"formFormGroup.invalid\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n <!--#endregion DATI GENERALI DELLA FORM -->\r\n\r\n <!--#region AGGIUNTA DEI CAMPI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-add-field\" [completed]=\"isFieldStepCompleted()\">\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n <mat-label>Campi da inserire</mat-label>\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openFieldDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi campo</span>\r\n </button>\r\n\r\n <button\r\n class=\"btn btn-outlined me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openInnerFormDialog()\"\r\n *ngIf=\"!innerFormManagment\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi form di dettaglio</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <eqp-table\r\n class=\"table\"\r\n #fieldsTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"fieldsColumns\"\r\n [data]=\"form.Fields\"\r\n [emptyTableMessage]=\"'Nessun campo inserito'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"!isFieldStepCompleted()\"\r\n [ngClass]=\"{ disabled: formFormGroup.invalid }\"\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DEI CAMPI DELLA FORM -->\r\n\r\n <ng-template matStepperIcon=\"edit\" let-index=\"index\">\r\n <mat-label>{{ index + 1 }}</mat-label>\r\n </ng-template>\r\n\r\n <!--#region AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n <mat-step>\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n Azioni aggiuntive sui record\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openActionOnRecordDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi azione</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table\r\n class=\"table\"\r\n #actionsOnRecordTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"actionsOnRecordColumns\"\r\n [data]=\"form.ActionsOnRecord\"\r\n [emptyTableMessage]=\"'Nessuna action inserita'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end buttonsNextDiv\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n\r\n <!--#region TRIGGERS-->\r\n <mat-step>\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n Triggers\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openTriggersDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi trigger</span>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <eqp-table\r\n class=\"table\"\r\n #triggersTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"triggersColumns\"\r\n [data]=\"form.Triggers\"\r\n [emptyTableMessage]=\"'Nessuna action inserita'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table> \r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"!isFieldStepCompleted()\"\r\n [ngClass]=\"{ disabled: formFormGroup.invalid }\"\r\n (click)=\"setFormStatus(true)\"\r\n >\r\n Successivo\r\n </button>\r\n </div> \r\n\r\n </mat-step>\r\n <!--#endregion TRIGGERS-->\r\n\r\n <!--#region VISUALIZZAZIONE FORM CREATA -->\r\n <mat-step class=\"dynamic-module-configurator-preview\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus( formFormGroup.valid && form.Fields && form.Fields.length > 0 )\"\r\n ></div>\r\n Anteprima\r\n </ng-template>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <mat-slide-toggle [(ngModel)]=\"showAllFields\"\r\n color=\"primary\">\r\n Mostra anche i campi invisibili\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-3\">\r\n <eqp-select [arrayData]=\"contestualization\" [(ngModelInput)]=\"selectedContestualization\"\r\n [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\"\r\n (ngModelInputChange)=\"onContestualizationSelect()\"\r\n [placeholder]=\"'Contestualizzazione del DBGetter'\"></eqp-select>\r\n </div>\r\n <div class=\"col-2\" *ngIf=\"selectedContestualization != null\">\r\n <input matInput class=\"form-control\" [(ngModel)]=\"selectedContestualizationValue\" (change)=\"onContestualizationSelectValue()\">\r\n </div>\r\n <div class=\"col-2\" *ngIf=\"selectedContestualization != null\">\r\n <button class=\"btn btn-primary\" (click)=\"applyContestualization(contestualization)\">Applica</button>\r\n <button class=\"btn btn-danger\" (click)=\"applyContestualization(null)\">Rimuovi</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <hr/>\r\n\r\n <add-form-record\r\n *ngIf=\"previewForm && formCompleted\"\r\n [form]=\"previewForm\"\r\n [userID]=\"UserID\"\r\n [orgaID]=\"orgaID\"\r\n [configurations]=\"viewConfig\"\r\n [showAllFields]=\"showAllFields\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n [inConfig]=\"true\"\r\n >\r\n </add-form-record>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end button-nextDiv\">\r\n <button\r\n class=\"mr-2 button-exit\"\r\n mat-raised-button\r\n matStepperPrevious\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveForm()\"\r\n >\r\n Salva form\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion VISUALIZZAZIONE FORM CREATA -->\r\n\r\n</mat-horizontal-stepper>\r\n\r\n<!-- DIALOG AGGIUNTA/MODIFICA CAMPO -->\r\n<ng-template #dialogField>\r\n <eqp-dynamic-module-add-form-field\r\n [form]=\"form\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [field]=\"selectedField\"\r\n [indexField]=\"indexSelectedField\"\r\n (saveFieldEvent)=\"onSaveField($event)\"\r\n [availableFields]=\"form.Fields\"\r\n [contestualization]=\"contestualization\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [formFieldsGroups]=\"\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ? form.FormFieldsGroups\r\n : null\r\n \"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n >\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<ng-template #fieldSectionColumnTemplate let-row=\"row\">\r\n <eqp-select\r\n [arrayData]=\"form.FormFieldsGroups\"\r\n [(ngModelInput)]=\"row.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\"\r\n [arrayValueProperty]=\"'Name'\"\r\n placeholder=\"Sezione\"\r\n [isRequired]=\"true\"\r\n >\r\n </eqp-select>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE UNA ACTION SUI RECORD DELLA FORM -->\r\n<ng-template #dialogActionOnRecord>\r\n <div\r\n class=\"container-fluid third-modal\"\r\n style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto\"\r\n >\r\n <form [formGroup]=\"actionOnRecordFormGroup\">\r\n <div class=\"row title\">\r\n <div class=\"header-title-standard\">\r\n {{\r\n indexSelectedAction != null && indexSelectedAction >= 0\r\n ? \"Modifica\"\r\n : \"Aggiungi\"\r\n }}\r\n azione sul record\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Nome </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Name\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Name\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Icona </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Icon\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Icon\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\">\r\n <mat-label>Azione (Javascript)</mat-label>\r\n <mat-form-field>\r\n <textarea\r\n matInput\r\n [rows]=\"3\"\r\n formControlName=\"Action\"\r\n required\r\n [(ngModel)]=\"selectedAction.Action\"\r\n [matAutocomplete]=\"actionAutocomplete\"\r\n (keyup)=\"setActionAutocompleteOptions($event)\"\r\n (focus)=\"setActionAutocompleteOptions(null)\"\r\n style=\"\r\n border: 1px solid lightgray !important;\r\n border-radius: 10px !important;\r\n \"\r\n ></textarea>\r\n <mat-autocomplete #actionAutocomplete=\"matAutocomplete\">\r\n <mat-option\r\n *ngFor=\"let option of actionAutocompleteOptions\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1\">\r\n <div class=\"buttonsForm\">\r\n <button\r\n class=\"btn mat-raised-button cancel\"\r\n (click)=\"closeDialogActionOnRecord()\"\r\n type=\"button\"\r\n >\r\n Annulla\r\n </button>\r\n <button\r\n class=\"mr-2 save\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveActionOnRecord()\"\r\n [disabled]=\"actionOnRecordFormGroup.invalid\"\r\n type=\"button\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER CONFIGURARE LE FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerForm>\r\n <!-- [form]=\"selectedInnerForm\"\r\n [innerFormManagment]=\"true\"\r\n [innerFormRef]=\"dialogInnerFormRef\" -->\r\n <eqp-dynamic-module-configurator\r\n [ProjectName]=\"ProjectName\"\r\n [configurations]=\"innerFormConfig\"\r\n (saveFormEvent)=\"onSaveOrExitInnerForm($event)\"\r\n >\r\n </eqp-dynamic-module-configurator>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER IMPORT -->\r\n<ng-template #dialogImport>\r\n <mat-card class=\"importDialog\">\r\n <mat-card-header class=\"p-2 justify-content-around\"> \r\n <mat-card-title>\r\n Import\r\n </mat-card-title> \r\n </mat-card-header>\r\n <mat-card-content class=\"p-2\">\r\n <input type=\"file\" class=\"input-file-btn pb-2\" (change)=\"onImport($event)\" />\r\n </mat-card-content>\r\n <mat-card-footer class=\"p-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn btn-clear button-back me-2\"\r\n mat-raised-button\r\n color=\"disabled\"\r\n (click)=\"closeImport()\"\r\n >\r\n Annulla\r\n </button>\r\n </mat-card-footer>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE I TRIGGERS -->\r\n<ng-template #dialogTriggers>\r\n <trigger-creator [endPointConfiguration]=\"endPointConfiguration\" [form]=\"form\" [formulas]=\"triggers\" [trigger]=\"selectedTrigger\" (onSaveRecord)=\"saveTrigger($event)\"></trigger-creator>\r\n</ng-template>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\nimport { BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n selector: 'list-form-record-trigger-template',\r\n templateUrl: './list-form-record-trigger-template.component.html',\r\n styleUrls: ['./list-form-record-trigger-template.component.scss']\r\n})\r\nexport class ListFormRecordTriggerTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n booleanLogicOperatorType = BooleanLogicOperatorType;\r\n selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n onTriggerChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { EqpDynamicModuleComponent } from './components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { EqpTableModule } from '@eqproject/eqp-table';\r\nimport { EqpAttachmentsModule } from '@eqproject/eqp-attachments';\r\nimport { EqpSelectModule } from '@eqproject/eqp-select';\r\nimport { EqpDatetimerangepickerModule } from '@eqproject/eqp-datetimerangepicker';\r\nimport { EqpFiltersModule } from '@eqproject/eqp-filters';\r\nimport { EqpNumericInputMode, EqpNumericModule } from '@eqproject/eqp-numeric';\r\nimport { EqpDynamicModuleConfiguratorComponent } from './components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nimport { AddFormFieldComponent } from './components/private/add-form-field/add-form-field.component';\r\nimport { TextFieldTemplateComponent } from './components/private/field-templates/text-field-template/text-field-template.component';\r\nimport { BooleanFieldTemplateComponent } from './components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nimport { DateFieldTemplateComponent } from './components/private/field-templates/date-field-template/date-field-template.component';\r\nimport { TextareaFieldTemplateComponent } from './components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nimport { NumericFieldTemplateComponent } from './components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nimport { ListValueFieldTemplateComponent } from './components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nimport { AttachmentFieldTemplateComponent } from './components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nimport { ImageFieldTemplateComponent } from './components/private/field-templates/image-field-template/image-field-template.component';\r\nimport { ListFormRecordComponent } from './components/private/form-records/list-form-record/list-form-record.component';\r\nimport { AddFormRecordComponent } from './components/private/form-records/add-form-record/add-form-record.component';\r\nimport { SpinnerComponent } from './components/private/spinner/spinner.component';\r\nimport { DynamicModuleFieldFixComponent } from './components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { AddFormulaComponent,DialogDataExampleDialog } from './components/private/add-formula-field/add-formula-field.component';\r\nimport { RepairFormFieldsComponent } from './components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nimport { ListViewFormRecordComponent } from './components/private/form-records/list-view-form-record/list-view-form-record.component';\r\nimport { ViewFormRecordComponent } from './components/private/form-records/view-form-record/view-form-record.component';\r\nimport { SingleRecordComponent } from './components/private/form-records/list-view-form-record/single-record/single-record.component';\r\nimport { FilterFormStatisticComponent } from './components/private/form-statistics/filter-form-statistic/filter-form-statistic.component';\r\nimport { DynamicModuleFilterFixComponent } from './components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component';\r\nimport { TextFilterTemplateComponent } from './components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component';\r\nimport { NumericFilterTemplateComponent } from './components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component';\r\nimport { BooleanFilterTemplateComponent } from './components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component';\r\nimport { DateFilterTemplateComponent } from './components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component';\r\nimport { ListValueFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component';\r\nimport { TextareaFilterTemplateComponent } from './components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component';\r\nimport { AttachmentFilterTemplateComponent } from './components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component';\r\nimport { ImageFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component';\r\nimport { ListFormRecordFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component';\r\nimport { GraphsComponent } from './components/private/graphs/graphs.component';\r\nimport { GraphComponent } from './components/private/graphs/graph/graph.component';\r\nimport { CanvasJSAngularStockChartsModule, CanvasJSChart, CanvasJSStockChart } from '@canvasjs/angular-stockcharts';\r\nimport { ImageFieldSelectorTemplateComponent } from './components/private/field-templates/image-field-selector-template/image-field-selector-template.component';\r\nimport { LabelFieldTemplateComponent } from './components/private/field-templates/label-field-template/label-field-template.component';\r\nimport { ImageSelectorFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component';\r\nimport { EqpImgDrawingModule } from '@eqproject/eqp-img-drawing';\r\nimport { TmwImageDrawerComponent } from './components/private/tmw-image-drawer/tmw-image-drawer.component';\r\nimport { ImageWithMarkersFieldTemplateComponent } from './components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component';\r\nimport { TmwImageMarkerComponent } from './components/private/tmw-image-marker/tmw-image-marker.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { DynamicLoaderDirective } from './directives/dynamic-loader/dynamic-loader.directive';\r\nimport { DbgetterComponent } from './components/private/dbgetter/dbgetter.component';\r\nimport {TmwPickerModule} from \"tmw-picker\";\r\nimport { TriggerCreatorComponent } from './components/private/trigger-creator/trigger-creator.component';\r\nimport { DynamicModuleTriggerFixComponent } from './components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component';\r\nimport { TextTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component';\r\nimport { NumericTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component';\r\nimport { BooleanTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component';\r\nimport { DateTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component';\r\nimport { ListValueTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component';\r\nimport { TextareaTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component';\r\nimport { ListFormRecordTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component';\r\nimport { SpeechToTextDirective } from './directives/speech-to-text/speech-to-text.directive';\r\n\r\nexport const customNumericMaskConfig = {\r\n align: \"right\",\r\n allowNegative: true,\r\n allowZero: true,\r\n decimal: \"\",\r\n precision: 0,\r\n prefix: \"\",\r\n suffix: \"\",\r\n thousands: \"\",\r\n nullable: true,\r\n min: null,\r\n max: null,\r\n inputMode: EqpNumericInputMode.FINANCIAL,\r\n};\r\n\r\n@NgModule({\r\n declarations: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n AddFormFieldComponent,\r\n TextFieldTemplateComponent,\r\n BooleanFieldTemplateComponent,\r\n DateFieldTemplateComponent,\r\n TextareaFieldTemplateComponent,\r\n NumericFieldTemplateComponent,\r\n ListValueFieldTemplateComponent,\r\n AttachmentFieldTemplateComponent,\r\n ImageFieldTemplateComponent,\r\n ListFormRecordComponent,\r\n ListViewFormRecordComponent,\r\n AddFormRecordComponent,\r\n ViewFormRecordComponent,\r\n DynamicModuleFieldFixComponent,\r\n SpinnerComponent,\r\n AddFormulaComponent,\r\n DialogDataExampleDialog,\r\n RepairFormFieldsComponent,\r\n SingleRecordComponent,\r\n FilterFormStatisticComponent,\r\n DynamicModuleFilterFixComponent,\r\n DynamicModuleTriggerFixComponent,\r\n TextFilterTemplateComponent,\r\n NumericFilterTemplateComponent,\r\n BooleanFilterTemplateComponent,\r\n DateFilterTemplateComponent,\r\n ListValueFilterTemplateComponent,\r\n TextareaFilterTemplateComponent,\r\n AttachmentFilterTemplateComponent,\r\n ImageFilterTemplateComponent,\r\n ListFormRecordFilterTemplateComponent,\r\n GraphsComponent,\r\n GraphComponent,\r\n ImageFieldSelectorTemplateComponent,\r\n LabelFieldTemplateComponent,\r\n ImageSelectorFilterTemplateComponent,\r\n TmwImageDrawerComponent,\r\n ImageWithMarkersFieldTemplateComponent,\r\n TmwImageMarkerComponent,\r\n DynamicLoaderDirective,\r\n DbgetterComponent,\r\n TriggerCreatorComponent,\r\n TextTriggerTemplateComponent,\r\n NumericTriggerTemplateComponent,\r\n BooleanTriggerTemplateComponent,\r\n DateTriggerTemplateComponent,\r\n ListValueTriggerTemplateComponent,\r\n TextareaTriggerTemplateComponent,\r\n ListFormRecordTriggerTemplateComponent,\r\n SpeechToTextDirective\r\n\r\n ],\r\n imports: [\r\n MaterialModule,\r\n FormsModule,\r\n CommonModule,\r\n ReactiveFormsModule,\r\n EqpTableModule,\r\n EqpAttachmentsModule,\r\n EqpSelectModule,\r\n EqpDatetimerangepickerModule,\r\n EqpFiltersModule,\r\n EqpImgDrawingModule,\r\n DragDropModule,\r\n EqpNumericModule.forRoot(customNumericMaskConfig),\r\n CanvasJSAngularStockChartsModule,\r\n TmwPickerModule\r\n ],\r\n exports: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n DragDropModule,\r\n CanvasJSChart,\r\n CanvasJSStockChart,\r\n DynamicLoaderDirective,\r\n TmwPickerModule\r\n ]\r\n})\r\nexport class EqpDynamicModuleModule { }\r\n","import { DynamicModuleCompileConfig } from \"./dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"./dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"./dynamicModuleRepairConfig.model\";\r\n\r\nexport class DynamicModuleConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n\r\n constructor(\r\n general: DynamicModuleGeneralConfig,\r\n compile: DynamicModuleCompileConfig,\r\n list: DynamicModuleListConfig,\r\n repair: DynamicModuleRepairConfig\r\n ) {\r\n this.dynamicModuleGeneralConfig = general;\r\n this.dynamicModuleCompileConfig = compile;\r\n this.dynamicModuleListConfig = list;\r\n this.dynamicModuleRepairConfig = repair;\r\n }\r\n}\r\n","import { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { BaseObj } from \"./baseObj.model\";\r\n\r\n/**\r\n * Rappresenta l'entità su cui vengono eseguite le operazioni di salvataggio.\r\n */\r\nexport class Entity extends BaseObj implements IRootObject {\r\n Name: string;\r\n Fields: Array<BaseField>;\r\n OrgaID: string;\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\nimport { DynAttachment } from \"../dynAttachment\";\r\n\r\nexport class ImageSelectorField extends BaseField {\r\n\r\n ValuePairs: { [key: string]: any};\r\n DynAttachments: Array<DynAttachment>;\r\n DynAttachmentsIDs: Array<number>;\r\n ResizedImagesHeightPx: number = 128;\r\n IsMultiChoiche: boolean;\r\n AttachmentList: Array<DynAttachment>\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Questo tipo di campo rappresenta una lookup ad altri valori */\r\nexport class LookupField extends BaseField {\r\n /**Entità relazionata (il padre) */\r\n EntitySourceName: string;\r\n\r\n /**Elenco di campi ordinato che verrà visualizzato nella lookup */\r\n FieldNames: string[];\r\n\r\n /**Se true la lookup viene visualizzata in una modale per lo scegli scarta */\r\n UseAsGetOrDiscard: boolean;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Classe contiene la configurazione dei campi numerici */\r\nexport class NumericField extends BaseField {\r\n IsInteger: boolean;\r\n MinValue: number;\r\n MaxValue: number;\r\n DecimalSeparator: string;\r\n DecimalPrecision: number;\r\n ThousandsSeparator: string;\r\n CurrencySymbol: string;\r\n MeasureUnit: string;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class TextareaField extends BaseField {\r\n /**Numero di righe in altezza con cui viene rappresentata la text area */\r\n Rows: number;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}","/*\r\n * Public API Surface of eqp-dynamic-module\r\n */\r\nexport * from './lib/eqp-dynamic-module.module';\r\nexport * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nexport * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nexport * from './lib/components/private/add-form-field/add-form-field.component';\r\nexport * from './lib/components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nexport * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nexport * from './lib/components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nexport * from './lib/components/private/field-templates/date-field-template/date-field-template.component';\r\nexport * from './lib/components/private/field-templates/image-field-template/image-field-template.component';\r\nexport * from './lib/components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nexport * from './lib/components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nexport * from './lib/components/private/field-templates/text-field-template/text-field-template.component';\r\nexport * from './lib/components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nexport * from './lib/components/private/form-records/add-form-record/add-form-record.component';\r\nexport * from './lib/components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nexport * from './lib/components/private/form-records/list-form-record/list-form-record.component';\r\nexport * from './lib/interfaces/iBaseFieldComponent.interface';\r\nexport * from './lib/interfaces/iRootObject.interface';\r\nexport * from './lib/models/baseField.model';\r\nexport * from './lib/models/baseObj.model';\r\nexport * from './lib/models/context.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorConfig.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorSpecificConfig.model';\r\nexport * from './lib/models/dynamicModuleConfig.model';\r\nexport * from './lib/models/dynamicModuleGeneralConfig.model';\r\nexport * from './lib/models/dynamicModuleCompileConfig.model';\r\nexport * from './lib/models/dynamicModuleListConfig.model';\r\nexport * from './lib/models/dynamicModuleRepairConfig.model';\r\nexport * from './lib/models/dynamicModuleFilterResultViewModeEnum.model';\r\nexport * from './lib/models/dynamicModuleViewModeEnum';\r\nexport * from './lib/models/dynamicModuleListFormRecordActionsDefault';\r\nexport * from './lib/models/endPointConfiguration.model';\r\nexport * from './lib/models/entity.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/record.model';\r\nexport * from './lib/models/trigger.model';\r\nexport * from './lib/models/fields/attachmentField.model';\r\nexport * from './lib/models/fields/booleanField.model';\r\nexport * from './lib/models/fields/dateField.model';\r\nexport * from './lib/models/fields/imageField.model';\r\nexport * from './lib/models/fields/listValueField.model';\r\nexport * from './lib/models/fields/imageSelectorField.model';\r\nexport * from './lib/models/fields/lookupField.model';\r\nexport * from './lib/models/fields/numericField.model';\r\nexport * from './lib/models/fields/textareaField.model';\r\nexport * from './lib/models/fields/textField.model';\r\nexport * from './lib/services/custom-form-validators.service';\r\nexport * from './lib/services/eqp-dynamic-module-dialog.service';\r\nexport * from './lib/services/spinner.service';\r\nexport * from './lib/services/utilityHelper.services';\r\nexport * from './lib/models/graph.model';\r\nexport * from './lib/directives/dynamic-loader/dynamic-loader.directive';\r\nexport * from './lib/directives/speech-to-text/speech-to-text.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.SpinnerService","i1.UtilityHelperService","i3","i4","i5","i6.SpeechToTextDirective","i6","i7","toBase64","i2.UtilityHelperService","i4.TmwImageDrawerComponent","switchMap","i4.TmwImageMarkerComponent","i5.DynamicLoaderDirective","i5.TextFieldTemplateComponent","i6.BooleanFieldTemplateComponent","i7.DateFieldTemplateComponent","i8.TextareaFieldTemplateComponent","i9.NumericFieldTemplateComponent","i10.ListValueFieldTemplateComponent","i11.AttachmentFieldTemplateComponent","i12.ImageFieldTemplateComponent","i13.ListFormRecordComponent","i14.ImageFieldSelectorTemplateComponent","i15.LabelFieldTemplateComponent","i16.ImageWithMarkersFieldTemplateComponent","i17.DbgetterComponent","i8.DynamicModuleFieldFixComponent","i3.AddFormRecordComponent","i4.ViewFormRecordComponent","i8","i9.GraphComponent","i4.dbDateService","i9","i10","i12.AddFormRecordComponent","i13.SingleRecordComponent","i14.GraphsComponent","i1.SpinnerService","i7.SpeechToTextDirective","i4.TextFilterTemplateComponent","i5.NumericFilterTemplateComponent","i6.BooleanFilterTemplateComponent","i7.DateFilterTemplateComponent","i8.ListValueFilterTemplateComponent","i9.TextareaFilterTemplateComponent","i10.AttachmentFilterTemplateComponent","i11.ImageFilterTemplateComponent","i12.ListFormRecordFilterTemplateComponent","i13.ImageSelectorFilterTemplateComponent","i6.ListViewFormRecordComponent","i7.DynamicModuleFilterFixComponent","i3.ListFormRecordComponent","i4.ListViewFormRecordComponent","i5.AddFormRecordComponent","i6.ViewFormRecordComponent","i7.SpinnerComponent","i8.RepairFormFieldsComponent","i9.FilterFormStatisticComponent","i10.GraphsComponent","i5.UtilityHelperService","i11","i12","i13","i14","i15","i16","i17.AddFormulaComponent","i18.DynamicLoaderDirective","i3.TextTriggerTemplateComponent","i4.NumericTriggerTemplateComponent","i5.BooleanTriggerTemplateComponent","i6.DateTriggerTemplateComponent","i7.ListValueTriggerTemplateComponent","i8.TextareaTriggerTemplateComponent","i12.AddFormulaComponent","i13.DynamicModuleTriggerFixComponent","i3.UtilityHelperService","i17.AddFormFieldComponent","i18.AddFormRecordComponent","i19.SpinnerComponent","i20.TriggerCreatorComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAa,OAAO,CAAA;AAChB,IAAA,IAAI,GAAgB,IAAI,WAAW,EAAE;AACrC,IAAA,aAAa;AAChB;MAEY,WAAW,CAAA;AACpB,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,IAAI;AACP;;MCTY,0BAA0B,CAAA;AACrC;;AAEG;AACH,IAAA,SAAS;AAET;;AAEG;AACH,IAAA,cAAc;AACd;;AAEG;AACH,IAAA,cAAc;AACd;;AAEG;AACH,IAAA,MAAM;AACN;;AAEG;AACH,IAAA,gBAAgB;AAChB;;AAEG;AACH,IAAA,cAAc;AACd;;AAEG;AACH,IAAA,eAAe;AACf;;AAEG;AACH,IAAA,mBAAmB;IAEnB,WACE,CAAA,SAAA,GAAqB,IAAI,EACzB,cAAA,GAA0B,IAAI,EAC9B,cAAA,GAA0B,IAAI,EAC9B,MAAiB,GAAA,GAAG,EACpB,gBAAwB,GAAA,IAAI,EAC5B,cAAsB,GAAA,IAAI,EAC1B,eAAuB,GAAA,IAAI,EAC3B,mBAAA,GAA+B,IAAI,EAAA;AAEnC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;;AAEjD;;MCtDY,yCAAyC,CAAA;AACpD;;AAEE;AACF,IAAA,GAAG;AACH;;AAEE;AACF,IAAA,IAAI;AACJ;;AAEE;AACF,IAAA,IAAI;AACJ;;AAEE;AACF,IAAA,SAAS;AACT;;AAEE;AACF,IAAA,MAAM;AACN;;AAEE;AACF,IAAA,MAAM;AAEN,IAAA,WAAA,CAAY,MAAe,IAAI,EAAE,IAAgB,GAAA,IAAI,EAAE,IAAgB,GAAA,IAAI,EAAE,SAAA,GAAqB,IAAI,EAAE,GAAA,GAAe,IAAI,EAAE,SAAkB,IAAI,EAAA;AACjJ,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAGvB;;MChCY,uBAAuB,CAAA;AAClC;;AAEG;IACH,SAAS,GAAY,IAAI;AAEzB;;AAEG;AACH,IAAA,kBAAkB;AAElB;;AAEG;AACH,IAAA,MAAM;AAEN;;AAEG;AACH,IAAA,eAAe,GAAwB,IAAI,KAAK,EAAgB;AAEhE;;;AAGG;AACH,IAAA,UAAU;AAEV;;;AAGG;AACH,IAAA,mBAAmB;AAEnB;;AAEG;IACH,MAAM,GAAW,GAAG;AAEpB;;AAEG;IAEH,mBAAmB,GAAY,IAAI;AAEnC,IAAA,WAAA,CACE,SAAqB,GAAA,IAAI,EACzB,MAAA,GAAwB,IAAI,EAC5B,kBAAgE,GAAA,IAAI,yCAAyC,EAAE,EAC/G,MAAA,GAAiB,GAAG,EACpB,eAAuC,GAAA,IAAI,KAAK,EAAgB,EAChE,UAAU,GAAG,IAAI,EACjB,mBAAA,GAAsB,IAAI,KAAK,EAAU,EACzC,sBAA+B,IAAI,EAAA;AAEnC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;;AAEjD;;MClEY,yBAAyB,CAAA;AACpC;;AAEG;IACH,QAAQ,GAAW,EAAE;AAErB,IAAA,WAAA,CAAY,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAE3B;;ICTW;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACjC,IAAA,yBAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,yBAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,yBAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACd,CAAC,EATW,yBAAyB,KAAzB,yBAAyB,GASpC,EAAA,CAAA,CAAA;;ACTD;;;;;AAKG;MACU,OAAO,CAAA;AAChB,IAAA,EAAE;AACL;;ACJD;;;AAGG;AACG,MAAO,SAAU,SAAQ,OAAO,CAAA;AAClC;;;AAGG;AACH,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,WAAW;AACX,IAAA,QAAQ;AACR,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,eAAe;AACf,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,aAAa;AACb,IAAA,aAAa;;AAGb,IAAA,WAAW,GAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;AAGtK;;;;AAIE;AACF,IAAA,QAAQ;AAER,IAAA,UAAU;AACV,IAAA,YAAY;IACZ,SAAS,CAAS;IAClB,UAAU,CAAU;AACpB,IAAA,YAAY;;AAGZ,IAAA,SAAS;AACT,IAAA,UAAU;AAEV,IAAA,UAAU,GAAe,IAAI,UAAU,EAAE;IACzC,2BAA2B,GAAW,EAAE;AAExC,IAAA,aAAa;AAChB;MAGY,WAAW,CAAA;IACpB,UAAU,CAAS;AACnB,IAAA,YAAY;IACZ,SAAS,CAAQ;AACjB,IAAA,aAAa;AACb,IAAA,aAAa;AACb,IAAA,YAAY;AACf;AAAA;MAEY,UAAU,CAAA;AACnB,IAAA,cAAc,GAAuB,kBAAkB,CAAC,OAAO;IAC/D,eAAe,GAAQ,IAAI;IAC3B,qBAAqB,GAAQ,IAAI;AACjC,IAAA,qBAAqB,GAA8B,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC5F,2BAA2B,CAAoB;AAClD;IAEW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAoB;AACpB,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAmB;AACnB,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAkB;AAClB,IAAA,aAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAoB;AACpB,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,aAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAqB;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;AACZ,IAAA,aAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAwB;AACxB,IAAA,aAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAsB;AACtB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,aAAA,CAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,sBAA0B;AAC9B,CAAC,EAdW,aAAa,KAAb,aAAa,GAcxB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACb,IAAA,kBAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACb,IAAA,kBAAA,CAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,kBAAA,CAAA,kBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAwB;AAC5B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAK7B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAe;AAEf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAe;AAEf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAEhB,IAAA,gBAAA,CAAA,gBAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAuB;AACvB,IAAA,gBAAA,CAAA,gBAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAwB;AACxB,IAAA,gBAAA,CAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAqB;AAErB,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAEhB,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAEhB,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAgB;AACpB,CAAC,EA9CW,gBAAgB,KAAhB,gBAAgB,GA8C3B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC7B,IAAA,qBAAA,CAAA,qBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,qBAAA,CAAA,qBAAA,CAAA,4BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,4BAAgC;AACpC,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACjC,IAAA,yBAAA,CAAA,yBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,yBAAA,CAAA,yBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAkB;AACpB,CAAC,EAHS,yBAAyB,KAAzB,yBAAyB,GAGlC,EAAA,CAAA,CAAA;;AClJG,MAAO,UAAW,SAAQ,SAAS,CAAA;AAErC,IAAA,aAAa;AACb,IAAA,eAAe;IACf,qBAAqB,GAAW,GAAG;IACnC,aAAa,GAAY,KAAK;AAEjC;IAEW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACb,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACb,IAAA,eAAA,CAAA,eAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAe;AAEnB,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA;;MCfY,qBAAqB,CAAA;AAChC,IAAA,OAAO;AAYP,IAAA,KAAK;AAUL,IAAA,WAAA,CAAY,OAAkB,GAAA,IAAI,EAAE,SAAA,GAAoB,IAAI,EAAA;AAC1D,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,CAAC,OAAO,GAAG;AACb,gBAAA,qBAAqB,EAAE;AACrB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,mCAAmC;oBAClD,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,UAAU;AACrB,4BAAA,UAAU,EAAE,cAAc;AAC1B,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,mBAAmB,EAAE;AACnB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,YAAY;oBAC3B,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,yBAAyB,EAAE;AACzB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,uBAAuB;oBACtC,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,4BAA4B,EAAE;AAC5B,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,oBAAoB;oBACnC,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,aAAa;oBAC5B,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACrC,iBAAA;AACD,gBAAA,YAAY,EAAE;AACZ,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,UAAU;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,WAAW;AACtB,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,kBAAkB;AAC7B,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,eAAe;oBAC9B,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACrC,iBAAA;AACD,gBAAA,cAAc,EAAE;AACd,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,YAAY;oBAC3B,aAAa,EAAE,iBAAiB,CAAC,MAAM;AACxC,iBAAA;AACD,gBAAA,WAAW,EAAE;AACX,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,iBAAiB;oBAChC,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAC,CAAC;AACZ,4BAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF;YACD,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,wBAAwB,EAAE;AACxB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,gCAAgC;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,cAAc;AACzB,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,UAAU,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;AACrC,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,YAAY;oBAC3B,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACrC,iBAAA;AACD,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,WAAW;oBAC1B,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,yBAAyB,EAAE;AACzB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,yBAAyB;oBACxC,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACrC,iBAAA;AACD,gBAAA,YAAY,EAAE;AACZ,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,YAAY;oBAC3B,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACtC,iBAAA;AACD,gBAAA,sBAAsB,EAAE;AACtB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,8BAA8B;oBAC7C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACtC,iBAAA;AACD,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,OAAO,GAAG,kBAAkB;oBACjC,aAAa,EAAE,iBAAiB,CAAC,GAAG;AACpC,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,SAAS,EAAE,IAAI;AACf,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC;AACF,qBAAA;AACF,iBAAA;aACF;;;AAGN;MAEY,YAAY,CAAA;AACvB,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,aAAa;AACb,IAAA,MAAM;AACP;MAEY,kBAAkB,CAAA;AAC7B,IAAA,SAAS;IACT,UAAU,GAAQ,IAAI;AACtB,IAAA,SAAS;AACV;IAEW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAK5B,EAAA,CAAA,CAAA;;ACnOD;;;AAGG;AACG,MAAO,IAAK,SAAQ,OAAO,CAAA;AAC7B,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,WAAW;;AAEX,IAAA,cAAc;AACd,IAAA,gBAAgB;AAEhB;;;AAGG;AAEH,IAAA,MAAM;AACN,IAAA,eAAe;AAEf;;AAEG;AAEH,IAAA,QAAQ;AAER;;;AAGG;AAEH,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,YAAY;;AAGZ,IAAA,OAAO;AACP,IAAA,YAAY;AACZ,IAAA,cAAc;AACjB;MAEY,cAAc,CAAA;AACvB,IAAA,IAAI;AACJ,IAAA,eAAe;AAClB;MAEY,cAAc,CAAA;AACvB,IAAA,IAAI;AACJ,IAAA,IAAI;IACJ,MAAM,CAAS;AACf,IAAA,eAAe;AAClB;IAEW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;IACV,YAAQ,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA,CAAA;AACZ,CAAC,EAHW,YAAY,KAAZ,YAAY,GAGvB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;AACZ,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;IACZ,kBAAkB,CAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA,CAAA;AACtB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAK7B,EAAA,CAAA,CAAA;;MCpEY,6BAA6B,CAAA;AAEtC,IAAA,WAAA,GAAA;AAEA;;;;AAIG;AACH,IAAA,OAAO,OAAO,CAAC,OAAe,EAAE,QAAgB,IAAI,EAAA;AAChD,QAAA,IAAI,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,qCAAqC;QAChF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC;;AAG/C;;;;AAIG;AACH,IAAA,OAAO,KAAK,CAAC,OAA0B,EAAE,QAAgB,IAAI,EAAA;AACzD,QAAA,IAAI,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,QAAQ;AACnD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACxB,YAAA,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,QAAQ;YAC/C,IAAI,UAAU,GAAW,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC;;aAED;YACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC;;;AAKnD;;;;;;;;;;;;AAYG;AAED,IAAA,OAAO,OAAO,CAAC,OAA0B,EAAE,eAAoB,EAAE,SAAA,GAAqB,KAAK,EACvF,QAAgB,IAAI,EAAE,WAAsB,GAAA,IAAI,EAAE,cAAsB,GAAA,IAAI,EAAE,iBAAA,GAA4B,IAAI,EAAE,gBAAA,GAA2B,IAAI,EAAE,iBAA0B,KAAK,EAAE,cAAyB,GAAA,IAAI,EAAE,YAAoB,GAAA,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAA;AAEpQ,QAAA,IAAI,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,gCAAgC;AAC3E,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC5B,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;QAG9B,IAAI,CAAC,IAAI,CAAC;AACV,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO;YAC1C,IAAI,EAAE,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS;YACzC,iBAAiB,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,UAAU;AACrE,YAAA,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,cAAc,GAAG,cAAc,GAAG,IAAI;AACtD,YAAA,cAAc,EAAE,cAAc;YAC9B,gBAAgB,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,QAAQ;AAChE,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,cAAc,EAAE;AACf,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnB,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE;AACjC,gBAAA,eAAe,EAAE;;AACd,iBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACxB,gBAAA,YAAY,EAAE;;iBACX,IAAI,cAAc,EAAE;AACvB,gBAAA,cAAc,EAAE;;AAEpB,SAAC,CAAC;;AAGN;;;;AAIG;IACH,OAAO,IAAI,CAAC,OAAe,EAAE,KAAgB,GAAA,IAAI,EAAE,OAAA,GAAmB,IAAI,EAAA;AACtE,QAAA,IAAI,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,eAAe;QAC1D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC;;AAG5C;;;;AAIG;IACH,OAAO,OAAO,CAAC,OAA0B,EAAE,KAAgB,GAAA,IAAI,EAAE,OAAA,GAAmB,IAAI,EAAA;AACpF,QAAA,IAAI,YAAY,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,aAAa;AAExD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACxB,IAAI,YAAY,GAAW,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC;;aACC;YACH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC;;;wGA3G1C,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF1B,MAAM,EAAA,CAAA;;4FAET,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACHD;AACM,MAAO,SAAU,SAAQ,SAAS,CAAA;AACpC,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,UAAU;AACb;IAEW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAW;AACX,IAAA,YAAA,CAAA,YAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAS;AACb,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;AAEM,MAAM,QAAQ,GAAG;AACjB,MAAM,QAAQ,GAAG;;MChBX,eAAe,CAAA;IACnB,OAAO,SAAS,CAAC,SAAiB,EAAA;AACvC,QAAA,IAAI,kBAAkB,GAAG,CAAC,OAAwB,KAA6B;YAC7E,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI;AAC7F,kBAAE;AACF,kBAAE,EAAE,YAAY,EAAE,KAAK,EAAE;AAC7B,SAAC;AACD,QAAA,OAAO,kBAAkB;;IAGpB,OAAO,SAAS,CAAC,SAAiB,EAAA;AACvC,QAAA,IAAI,kBAAkB,GAAG,CAAC,OAAwB,KAA6B;YAC7E,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI;AAC7F,kBAAE;AACF,kBAAE,EAAE,YAAY,EAAE,KAAK,EAAE;AAC7B,SAAC;AACD,QAAA,OAAO,kBAAkB;;AAE5B;;MCdY,cAAc,CAAA;AACvB,IAAA,SAAS,GAAG,IAAI,OAAO,EAAW;IAE1B,aAAa,GAAW,CAAC;AAEjC;;AAEG;IACH,IAAI,GAAA;QACA,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5B,EAAE,GAAG,CAAC;;AAGX;;AAEG;IACH,IAAI,GAAA;QACA,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;SAC7B,EAAE,GAAG,CAAC;;IAGX,iBAAiB,GAAA;QACb,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,IAAI,EAAE;;IAGf,oBAAoB,GAAA;QAChB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE;;wGA/BV,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA;;4FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCyCY,oBAAoB,CAAA;AAerB,IAAA,WAAA;AACA,IAAA,IAAA;AACA,IAAA,cAAA;AAhBH,IAAA,OAAO,OAAO,GAAY,IAAI,OAAO,EAAE;IAE9C,SAAS,GAAY,KAAK;IAC1B,QAAQ,CAAC,OAAe,EAAE,IAAU,EAAA;AAClC,QAAA,IAAG,IAAI,CAAC,SAAS,EAAC;YAChB,IAAG,IAAI,EAAC;AACN,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;;iBACvB;AACH,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;;;;AAK1B,IAAA,WAAA,CACU,WAA+B,EAC/B,IAAgB,EAChB,cAA8B,EAAA;QAF9B,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAc,CAAA,cAAA,GAAd,cAAc;;AAGjB,IAAA,OAAO,oBAAoB,CAChC,OAAe,EACf,GAAW,EACX,GAAQ,EAAA;AAER,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,OAAO,cAAc,GAAG,cAAc,GAAG,IAAI;;IAGxC,OAAO,UAAU,CAAC,GAAY,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;;IAEb,OAAO,SAAS,CAAC,CAAC,EAAA;AACvB,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;IAGX,OAAO,UAAU,CAAC,QAAQ,EAAA;AAC/B,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7D,YAAA,OAAO,CAAC;SACT,EAAE,EAAE,CAAC;;IAGD,OAAO,YAAY,CAAC,KAAgB,EAAA;AACzC,QAAA,QAAQ,KAAK,CAAC,SAAS;AACrB,YAAA,KAAK,aAAa,CAAC,gBAAgB,CAAC,EAAE;AACpC,gBAAA,MAAM,CAAC,GAAc,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,EAAE,KAAK,CAAC;AAC1D,gBAAA,OAAO,CAAC;gBACR;;YAEF,SAAS;gBACP;;;;AAKN;;;;;;;;;AASG;AACI,IAAA,OAAO,sBAAsB,CAClC,MAAwB,EACxB,YAAoB,EAAA;QAEpB,IAAI,mBAAmB,GAA4C,EAAE;;QAGrE,MAAM,sBAAsB,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KACzD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC7B;;;AAID,QAAA,IACE,CAAC,YAAY;AACb,aAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC9B,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CACrE,CAAC,EACJ;AACA,YAAA,mBAAmB,GAAG;AACpB,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,GAAG,YAAY,GAAG,EAAE,IAAI,KAAK,EAAE;AACnE,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,GAAG,YAAY,GAAG,EAAE,IAAI,KAAK,EAAE;aACpE;;;;;AAKE,aAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,aAAa,GAAkB;iBAClC,KAAK,CAAC,GAAG,CAAC,CACV,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACjD,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE;gBACrD,mBAAmB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;oBACrD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE;AAC9C,iBAAC,CAAC;;iBACG,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE;AAC5D,gBAAA,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CACjE,CAAC,CAAC,KAAI;oBACJ,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE;AAC9C,iBAAC,CACF;;AACI,iBAAA,IACL,aAAa,CAAC,MAAM,GAAG,CAAC;gBACxB,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK;gBACjD,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAClD;AACA,gBAAA,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAC/B,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAClC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;oBACV,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE;AAC9C,iBAAC,CAAC;;iBACG;gBACL,mBAAmB,GAAG,EAAE;;;;;;;aAOvB;YACH,MAAM,gBAAgB,GAA4C,EAAE;;YAGpE,MAAM,eAAe,GAAkB,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;;YAE9D,MAAM,eAAe,GACnB,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;;;AAI7C,YAAA,IAAI,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBACvD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC/C,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAE3D,IAAI,iBAAiB,GAAkB,EAAE;AAEzC,gBAAA,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;AAC5B,oBAAA,iBAAiB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;;AAC7B,qBAAA,IACL,YAAY,CAAC,MAAM,GAAG,CAAC;oBACvB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,EAC/C;oBACA,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AACxD,qBAAA,IACL,YAAY,CAAC,MAAM,GAAG,CAAC;oBACvB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK;oBAC/C,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAChD;oBACA,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;;AAC7D,qBAAA,IACL,YAAY,CAAC,MAAM,GAAG,CAAC;oBACvB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,EAC/C;oBACA,iBAAiB,GAAG,sBAAsB;;;;AAK5C,gBAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjC,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;wBAClC,gBAAgB,CAAC,IAAI,CAAC;AACpB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,KAAK,EACH,YAAY;gCACZ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACpD,yBAAA,CAAC;;AAEN,iBAAC,CAAC;;YAGJ,mBAAmB,GAAG,gBAAgB;;AAGxC,QAAA,OAAO,mBAAmB;;AAG5B;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,KAAgB,EAAE,aAAA,GAAyB,KAAK,EAAA;QAEhE,IAAI,aAAa,GAAG,EAAE;QACtB,IAAI,gBAAgB,GAAG,EAAE;AACzB,QAAA,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAC;YACtD,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAC5C,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;aACvC;YACL,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC;;QAGpE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,aAAa,EAAC;YACtC,IAAI,KAAK,CAAC,YAAY,IAAI,qBAAqB,CAAC,QAAQ,EAAC;gBAAE,gBAAgB,GAAG,mBAAmB;;YACjG,IAAI,KAAK,CAAC,YAAY,IAAI,qBAAqB,CAAC,4BAA4B,CAAC,EAAC;gBAAE,gBAAgB,GAAG,wBAAwB;;;AAG7H,QAAA,OAAO,aAAa,GAAG,GAAG,GAAG,gBAAgB;;AAG/C;;;;;;AAMG;AACH,IAAA,wBAAwB,CAAC,KAAgB,EAAA;QAEvC,IAAI,aAAa,GAAG,EAAE;QACtB,IAAI,gBAAgB,GAAG,EAAE;QAEzB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAC;YAEnG,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KACtD,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAClC,CAAC,IAAI,CAAC,GAAG,CAAC;;aACN;YACL,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,CAAC;;AAGtE,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAC;YAChC,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,qBAAqB,CAAC,QAAQ,EAAC;gBAAE,gBAAgB,GAAG,mBAAmB;;YAC7G,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,qBAAqB,CAAC,4BAA4B,CAAC,EAAC;gBAAE,gBAAgB,GAAG,wBAAwB;;;AAGzI,QAAA,OAAO,aAAa,GAAG,GAAG,GAAG,gBAAgB;;IAGvC,oBAAoB,CAAC,KAAgB,EAAE,YAAoB,EAAA;AAEjE,QAAA,QAAQ,KAAK,CAAC,SAAS;YACrB,KAAK,aAAa,CAAC,gBAAgB,CAAC;;gBAElC,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,eAAe,CAAC;;gBAEjC,OAAO,gCAAgC,GAAG,YAAY;YACxD,KAAK,aAAa,CAAC,UAAU,CAAC;;gBAE5B,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,cAAc,CAAC;;gBAEhC,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,gBAAgB,CAAC;;gBAElC,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,UAAU,CAAC;;gBAE5B,IACG,KAAyB,CAAC,aAAa;qBACtC,KAAyB,CAAC,cAAc;wBACvC,KAAyB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EACvD;oBACA,OAAO,gCAAgC,GAAG,YAAY;;qBACjD;oBACL,OAAO,8BAA8B,GAAG,YAAY;;AAExD,YAAA,KAAK,aAAa,CAAC,UAAU,CAAC;;AAE5B;;;;;;;;;AASG;YAEL,KAAK,aAAa,CAAC,iBAAiB,CAAC;;gBAEnC,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,QAAQ,CAAC;;gBAE1B,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,mBAAmB,CAAC;;gBAErC,OAAO,gCAAgC,GAAG,YAAY;YACxD,KAAK,aAAa,CAAC,iBAAiB,CAAC;gBACnC,OAAO,8BAA8B,GAAG,YAAY;YACtD,KAAK,aAAa,CAAC,WAAW,CAAC;gBAC7B,OAAO,8BAA8B,GAAG,YAAY;;;AAI1D;;;;;;;AAOG;IACI,mBAAmB,CACxB,UAA4B,EAC5B,MAAc,EACd,QAAQ,GAAG,KAAK,EAChB,yBAAyB,GAAG,IAAI,EAAA;;;;;QAOhC,MAAM,QAAQ,GAAqB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AAE7D,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAE3B,YAAA,QAAQ,CAAC,UAAU,CACjB,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAC3C;YACD,IAAI,yBAAyB,EAAE;;AAG7B,gBAAA,KAAK,CAAC,aAAa,GAAG,QAAQ;;AAElC,SAAC,CAAC;QACF,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,OAAO,EAAE;;AAGpB,QAAA,OAAO,QAAQ;;AAGjB;;;;AAIG;IACK,sBAAsB,CAC5B,KAAgB,EAChB,MAAc,EAAA;QAEd,MAAM,UAAU,GAAuB,EAAE;QAEzC,IAAI,KAAK,CAAC,QAAQ;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAExD,QAAA,QAAQ,KAAK,CAAC,SAAS;YACrB,KAAK,aAAa,CAAC,gBAAgB,CAAC;AAClC,gBAAA,IAAK,KAAmB,CAAC,SAAS,EAAE;AAClC,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAE,KAAmB,CAAC,SAAS,CAAC,CAAC;;AAEvE,gBAAA,IAAK,KAAmB,CAAC,SAAS,EAAE;AAClC,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAE,KAAmB,CAAC,SAAS,CAAC,CAAC;;AAEvE,gBAAA,QAAS,KAAmB,CAAC,QAAQ;oBACnC,KAAK,YAAY,CAAC,GAAG;wBACnB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAC7C;oBACF,KAAK,YAAY,CAAC,KAAK;AACrB,wBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;wBACjC;oBACF,KAAK,YAAY,CAAC,QAAQ;wBACxB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAC7C;;gBAEJ;YACF,KAAK,aAAa,CAAC,eAAe,CAAC;AACjC,gBAAA,IAAK,KAAuB,CAAC,SAAS,EAAE;AACtC,oBAAA,UAAU,CAAC,IAAI,CACb,UAAU,CAAC,SAAS,CAAE,KAAuB,CAAC,SAAS,CAAC,CACzD;;AAEH,gBAAA,IAAK,KAAuB,CAAC,SAAS,EAAE;AACtC,oBAAA,UAAU,CAAC,IAAI,CACb,UAAU,CAAC,SAAS,CAAE,KAAuB,CAAC,SAAS,CAAC,CACzD;;gBAEH;YACF,KAAK,aAAa,CAAC,QAAQ;YAC3B,KAAK,aAAa,CAAC,QAAQ;gBACzB,IAAI,KAAK,CAAC,QAAQ;oBAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjE;YACF,KAAK,aAAa,CAAC,iBAAiB,CAAC;gBACnC,IAAK,KAAwB,CAAC,cAAc;oBAC1C,IAAI,KAAK,CAAC,QAAQ;wBAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnE;YACF,KAAK,aAAa,CAAC,iBAAiB,CAAC;gBACnC,IAAK,KAA4B,CAAC,cAAc;oBAC9C,IAAI,KAAK,CAAC,QAAQ;wBAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnE;;AAGJ,QAAA,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;;AAI/D;;;;;;AAMG;IACI,yBAAyB,CAC9B,aAAqB,EACrB,SAAiB,EAAA;QAEjB,IAAI,qBAAqB,GACvB,IAAI,qBAAqB,CAAC,aAAa,EAAE,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDrD,QAAA,OAAO,qBAAqB;;AAE9B;;;;AAIG;AACI,IAAA,OAAO,qBAAqB,CAAC,UAAU,EAAE,QAAQ,GAAG,KAAK,EAAA;QAC9D,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,IAAI,IAAI,EAAE;YACjD,OAAO,QAAQ,GAAG,KAAK,GAAG,IAAI;;QAEhC,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,IAAI,OAAO;AACX,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,GAAG;SACT;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAExB,YAAA,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,EAAE;AACzD,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AACd,iBAAA,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,EAAE;AAChE,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE;AAE/B,gBAAA,IAAI,WAAW,CAAC,WAAW,CAAC,KAAK,OAAO,EAAE;;oBAGxC,OAAO,KAAK,CAAC;;;;AAKnB,QAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;;AAG5B;;;;;;;;;;;AAWG;IACI,eAAe,CACpB,YAA0B,EAC1B,mBAAiD,GAAA,IAAI,EACrD,QAAqH,GAAA,IAAI,EACzH,aAAA,GAAwC,IAAI,EAAA;AAE5C,QAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;AAEvC,QAAA,IAAI,GAAG,GAAG,CAAA,EAAG,YAAY,CAAC,GAAG,EAAE;QAC/B,IAAI,WAAW,GAAW,IAAI;AAC9B,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,gBAAgB,EAAE,EAAE;SACrB;;;AAID,QAAA,IAAI,YAAY,CAAC,MAAM,IAAI,SAAS,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE;AACnE,YAAA,YAAY,CAAC,MAAM,GAAG,EAAE;;QAE1B,IAAI,mBAAmB,IAAI,SAAS,IAAI,mBAAmB,IAAI,IAAI,EAAE;YACnE,mBAAmB,GAAG,EAAE;;QAG1B,MAAM,YAAY,GAA8B,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAExE,QAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAClC,YAAA,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAC1C,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAC3C;AAED,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;gBACxB,YAAY,CAAC,aAAa,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;gBACvD,YAAY,CAAC,aAAa,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS;;iBAChD;AACL,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE1B,SAAC,CAAC;QAEF,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,gBAAA,QAAQ,KAAK,CAAC,SAAS;AACrB,oBAAA,KAAK,aAAa,CAAC,aAAa,CAAC,EAAE;wBACjC,MAAM,WAAW,GACf,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU;wBAC1C,WAAW;AACT,4BAAA,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE,GAAG,WAAW,GAAG,GAAG,IAAI,WAAW;wBAC9D;;AAEF,oBAAA,KAAK,aAAa,CAAC,UAAU,CAAC,EAAE;wBAC9B,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU;wBAC7D;;AAEF,oBAAA,KAAK,aAAa,CAAC,SAAS,CAAC,EAAE;wBAC7B,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU;wBAC9C;;;AAGN,aAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDJ,QAAA,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,GAAG;gBACD,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;oBAC3D,GAAG;AACH,oBAAA,WAAW;;AAGf,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE;YACxC,OAAO,EAAE,YAAY,CAAC;AACpB,kBAAE,EAAE,aAAa,EAAE,YAAY,CAAC,KAAK;AACrC,kBAAE,IAAI;AACR,YAAA,IAAI,EAAE,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAC/D,YAAY,CAAC,aAAa;AAE1B,kBAAE;AACF,kBAAE,IAAI;SACT;AACA,aAAA,SAAS,CACR,CAAC,GAAkC,KAAI;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE;YAC1C,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,GAAG,CAAC;;AAEjB,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE;YAC1C,IAAI,aAAa,EAAE;gBACjB,aAAa,CAAC,KAAK,CAAC;;AAEtB,YAAA,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAClD,YAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;;AAEhC,SAAC,CACF;;IAKL,OAAO,YAAY,CAAC,OAAO,EAAE,WAAW,GAAC,EAAE,EAAE,SAAS,GAAC,GAAG,EAAA;AACxD,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,UAAU,GAAG,EAAE;AAEnB,QAAA,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE;AACxE,YAAA,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;YAE5D,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACzC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;;AAGtC,YAAA,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;AAC3C,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG5B,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC;AACpD,QAAA,OAAO,IAAI;;wGAtqBF,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;IC7CW;AAAZ,CAAA,UAAY,qCAAqC,EAAA;AAC7C,IAAA,qCAAA,CAAA,qCAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACjB,IAAA,qCAAA,CAAA,qCAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB;AACrB,IAAA,qCAAA,CAAA,qCAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB;AACzB,CAAC,EAJW,qCAAqC,KAArC,qCAAqC,GAIhD,EAAA,CAAA,CAAA;;MCGY,aAAa,CAAA;AASJ,IAAA,IAAA;AAPb,IAAA,OAAO,SAAS,GAAG,KAAK;;AAG/B,IAAA,OAAO,qBAAqB,GAAG,KAAK;IACpC,OAAO,eAAe;;AAGtB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGxB,IAAA,OAAO,QAAQ,CAAC,OAAe,EAAE,OAAa,EAAA;AAC5C,QAAA,IAAG,IAAI,CAAC,SAAS,EAAC;AAChB,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;;;;IAKjC,OAAQ,kBAAkB,CAAC,WAAmB,EAAA;QAC5C,MAAM,UAAU,GAA8B,EAAE;QAChD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1B,YAAA,IAAG,KAAK,CAAC,MAAM,IAAI,CAAC,EAAC;AACnB,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;AACxC,iBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAC;AAC1B,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;AAEjD,SAAC,CAAC;AACF,QAAA,OAAO,UAAU;;wGA9BR,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCNY,MAAM,CAAA;AACf,IAAA,EAAE;AACF,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,UAAU;AACV,IAAA,kBAAkB;AAClB,IAAA,gBAAgB;AAChB,IAAA,cAAc;IAEd,aAAa,CAAM;AACnB,IAAA,UAAU;IACV,aAAa,CAAM;AACnB,IAAA,UAAU;AACb;MAEY,SAAS,CAAA;AAClB,IAAA,EAAE;AACF,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,MAAM;IACN,MAAM,GAA4B,EAAE;AACpC,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;AAClB,IAAA,UAAU;AACV,IAAA,gBAAgB;AAChB,IAAA,cAAc;AACd,IAAA,eAAe;IACf,aAAa,CAAM;AACnB,IAAA,UAAU;IACV,aAAa,CAAM;AACnB,IAAA,UAAU;AACb;MAEY,YAAY,CAAA;AACjB,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,EAAE;AACF,IAAA,UAAU;AACjB;;ACtCD;AACM,MAAO,SAAU,SAAQ,SAAS,CAAA;AACpC,IAAA,UAAU;AACV,IAAA,OAAO;AACP,IAAA,OAAO;IACP,UAAU,GAAU,YAAY;AACnC;IAEW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAe;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,gBAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAgB;AACpB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAI3B,EAAA,CAAA,CAAA;;MCkCY,uBAAuB,CAAA;AA0BxB,IAAA,oBAAA;AACA,IAAA,cAAA;AAzBD,IAAA,cAAc;AACd,IAAA,qBAAqB;;AAGrB,IAAA,MAAM;AACN,IAAA,IAAI,GAAS,IAAI,CAAC;AAClB,IAAA,eAAe,GAAwB,IAAI,KAAK,EAAgB;AAEzE,IAAA,kBAAkB,GAChB,IAAI,yCAAyC,EAAE;IACjD,SAAS,GAAG,IAAI;;AAE6B,IAAA,YAAY;AAEzD,IAAA,OAAO,GAAG,IAAI,KAAK,EAAgB;IACnC,MAAM,GAAY,KAAK;AAEb,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,mBAAmB,GAAsD,IAAI,YAAY,EAAyC;AAElI,IAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AACjE,IAAA,mBAAmB,GAAyB,IAAI,YAAY,EAAU;IAEhF,WACU,CAAA,oBAA0C,EAC1C,cAAiC,EAAA;QADjC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGxB,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB;QAChE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;;QAE9C,aAAa,CAAC,QAAQ,CAAC,8CAA8C,EAAE,IAAI,CAAC,cAAc,CAAC;QAE3F,IAAI,CAAC,WAAW,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,aAAa,CAAC,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;;;;;;;AAQ/D,IAAA,MAAM,WAAW,CAAC,EAAa,GAAA,IAAI,CAAC,MAAM,EAAA;QACxC,aAAa,CAAC,QAAQ,CAAC,gCAAgC,EAAE,IAAI,CAAC,IAAI,CAAC;AAEnE,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACrB,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;gBACf,IAAI,CAAC,gBAAgB,EAAE;aACxB,EACD,CAAC,GAAG,KAAM,GAAC,CACZ;;aACI;YACL,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B;;;;;AAKG;AACH,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAG;YACD,IACE,IAAI,CAAC,qBAAqB;gBAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD;AACA,gBAAA,IAAI,mBAAmB,GAAG;AACtB,oBAAA;AACE,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;iBACF;gBACH,IAAG,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,EAAC;AACpC,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD,mBAAmB,EACnB,CAAC,GAAqB,KAAI;wBACxB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,KAAK,EAAU;AAChD,wBAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAChB,4BAAA,IAAI,MAAM,GAAW,IAAI,MAAM,EAAE;4BACjC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACvC,4BAAA,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAChB,4BAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACtB,4BAAA,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;AAC1B,4BAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACxB,4BAAA,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;4BAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,yBAAC,CAAC;AAEF,wBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,wBAAA,UAAU,CAAC,CAAC,CAAC,KAAI;AACf,4BAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,yBAAC,EAAE,CAAC,CAAC,CAAC;AACR,qBAAC,CACF;;qBACI;AACL,oBAAA,IAAI,mBAAmB,GAAG;AACxB,wBAAA;AACE,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACtC,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC;qBACF;AAED,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,4BAA4B,EAC/D,mBAAmB,EACnB,CAAC,GAAqB,KAAI;wBACxB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,KAAK,EAAU;AAChD,wBAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAChB,4BAAA,IAAI,MAAM,GAAW,IAAI,MAAM,EAAE;4BACjC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACvC,4BAAA,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAChB,4BAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACtB,4BAAA,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;AAC1B,4BAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACxB,4BAAA,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;4BAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,yBAAC,CAAC;AAEF,wBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,wBAAA,UAAU,CAAC,CAAC,CAAC,KAAI;AACf,4BAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,yBAAC,EAAE,CAAC,CAAC,CAAC;AACR,qBAAC,CACF;;;;QAIL,OAAM,CAAC,EAAC;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;;;AAKjC;;AAEG;IACK,gBAAgB,GAAA;QACtB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,UAAU,CAAC,UAAU;AAC3B,gBAAA,cAAc,EAAE,WAAW;AAC3B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC1B,gBAAA,OAAO,EAAE,EAAE;AACZ,aAAA;SACF;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ;iBAC9B,OAAO,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACtD,aAAA,CAAC;;QAEN,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ;iBAC9B,OAAO,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;AACnE,aAAA,CAAC;;QAEN,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,IAAI,IAAI,EAAE;AAC7C;;;;;;AAMO;;QAET,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,IAAI,EAAE;AAC1C,YAAA,IAAI,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ;iBAC9B,OAAO,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxD,aAAA,CAAC;;QAGN,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACtC,YAAA,IAAI,CAAC;iBACJ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ;iBAC9B,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,EAAE,EAAE;AACzC,aAAA,CAAC;AACJ,SAAC,CAAC;QAEF,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,kBAAkB,EAAE;;AAG3B;;;AAGG;IACK,uBAAuB,GAAA;QAC7B,aAAa,CAAC,QAAQ,CAAC,4CAA4C,EAAE,IAAI,CAAC,IAAI,CAAC;AAE/E,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACrE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;AACpB,kBAAE;AACF,kBAAE,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;sBACtB,CAAC;sBACD,CAAC,CACN,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACnB,gBAAA,IAAI,CAAC;qBACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ;qBAC9B,OAAO,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAI;wBAC1B,MAAM,GAAG,GAAG,OAAO;AACnB,wBAAA,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO;AACxC,wBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;qBAEpB;AACF,iBAAA,CAAC;AACN,aAAC,CAAC;;;AAKN;;;;;;AAMG;IACK,2BAA2B,GAAA;QACjC,aAAa,CAAC,QAAQ,CAAC,gDAAgD,EAAE,IAAI,CAAC,IAAI,CAAC;AAEnF,QAAA,IAAI,gBAAkC;AACtC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE;AAC9C,YAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;;aAC1D;YACL,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;;QAE1E;AACG,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACT,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;AACpB,cAAE;AACF,cAAE,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;kBACtB,CAAC;kBACD,CAAC;AAEN,aAAA,OAAO,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClD,SAAC,CAAC;;AAGN;;;;AAIG;AACK,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AACxC,QAAA,IAAI,MAAM,GAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE;AACpE,QAAA,QAAQ,KAAK,CAAC,SAAS;YACrB,KAAK,aAAa,CAAC,UAAU,CAAC;AAC5B,gBAAA,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO;gBAChC,MAAM,CAAC,aAAa,GAAG;AACrB,oBAAA,KAAK,EAAE,yCAAyC;AAChD,oBAAA,IAAI,EAAE,2CAA2C;iBAClD;gBACD,MAAM,CAAC,MAAM,GAAG;AACd,oBAAA,IAAI,EAAE,QAAQ;oBACd,aAAa,EAAE,iBAAiB,CAAC,MAAM;iBACxC;gBACD;YACF,KAAK,aAAa,CAAC,cAAc,CAAC;gBAChC,IACG,KAAmB,CAAC,UAAU,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAClE;AACA,oBAAA,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;oBAC7B,IACG,KAAmB,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,CAAC,EACjE;AACA,wBAAA,MAAM,CAAC,MAAM,GAAG,kBAAkB;;yBAC7B,IACJ,KAAmB,CAAC,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAChE;AACA,wBAAA,MAAM,CAAC,MAAM,GAAI,KAAmB,CAAC;8BAChC,KAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI;8BAClD,YAAY;;;gBAGpB;YACF,KAAK,aAAa,CAAC,gBAAgB,CAAC;AAClC,gBAAA,IAAK,KAAsB,CAAC,cAAc,EAAE;AAC1C,oBAAA,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,QAAQ;AAC7C,oBAAA,MAAM,CAAC,gBAAgB,GAAI,KAAsB,CAAC,cAAc;;AAC3D,qBAAA,IAAI,CAAE,KAAsB,CAAC,SAAS,EAAE;AAC7C,oBAAA,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,OAAO;;gBAE9C;AACF,YAAA,KAAK,aAAa,CAAC,UAAU,CAAC;YAC9B,KAAK,aAAa,CAAC,UAAU,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;AAoBE;gBAEA;YACF,KAAK,aAAa,CAAC,iBAAiB,CAAC;AACnC,gBAAA,MAAM,CAAC,KAAK,GAAG,CAAC,OAAe,KAAI;AACjC,oBAAA,IAAK,KAAwB,CAAC,cAAc,EAAE;AAC5C,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3D,4BAAA,OAAO,IAAI;;6BACN;AACL,4BAAA,OAAO,MAAM,CAAC,IAAI,CAAE,KAAwB,CAAC,UAAU;iCACpD,MAAM,CAAC,CAAC,CAAC,KACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CACzB,KAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CACxC;iCAEF,IAAI,CAAC,IAAI,CAAC;;;yBAEV;AACL,wBAAA,OAAO,MAAM,CAAC,IAAI,CAAE,KAAwB,CAAC,UAAU,CAAC,CAAC,IAAI,CAC3D,CAAC,CAAC,KACC,KAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CACjE;;AAEL,iBAAC;AACD,gBAAA,MAAM,CAAC,UAAU,GAAG,KAAK;AACzB,gBAAA,MAAM,CAAC,YAAY,GAAG,KAAK;gBAC3B;YACF,KAAK,aAAa,CAAC,QAAQ,CAAC;;gBAE1B;;AAEJ,QAAA,OAAO,MAAM;;AAGf,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEhC;;;;;AAKG;IACK,gBAAgB,CAAC,MAAc,EAAE,QAAiB,EAAA;QACxD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;AAGrD;;;AAGG;AACH,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGlC;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;;;wGAja5B,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,ghBChDpC,kzDA0CqE,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDMxD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,kzDAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;sHAMnB,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAM4C,YAAY,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAKjC,YAAY,EAAA,CAAA;sBAArB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBAES,cAAc,EAAA,CAAA;sBAAvB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;;;MEjEU,aAAa,CAAA;;AAGtB;;AAEG;AACH,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,IAAI,OAAO,GAAW,IAAI,CAAC,WAAW,EAAE;QACxC,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1C,QAAA,IAAI,cAAsB;AAC1B,QAAA,IAAI,QAAQ,GAAG,EAAE,EAAE;AACf,YAAA,cAAc,GAAG,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE;;aACvC;AACH,YAAA,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE;;AAExC,QAAA,IAAI,MAAM,GAAW,IAAI,CAAC,OAAO,EAAE;AACnC,QAAA,IAAI,YAAoB;AACxB,QAAA,IAAI,MAAM,GAAG,EAAE,EAAE;AACb,YAAA,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE;;aACnC;AACH,YAAA,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;;AAEpC,QAAA,IAAI,OAAO,GAAW,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAA,IAAI,aAAqB;AACzB,QAAA,IAAI,OAAO,GAAG,EAAE,EAAE;AACd,YAAA,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE;;aACrC;AACH,YAAA,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;;AAEtC,QAAA,IAAI,SAAS,GAAW,IAAI,CAAC,UAAU,EAAE;AACzC,QAAA,IAAI,eAAuB;AAC3B,QAAA,IAAI,SAAS,GAAG,EAAE,EAAE;AAChB,YAAA,eAAe,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE;;aACzC;AACH,YAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,EAAE;;QAE1C,IAAI,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,GAAG,eAAe;AAC7H,QAAA,OAAO,UAAU;;AAGrB,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,IAAI,OAAO,GAAW,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAA,IAAI,aAAqB;AACzB,QAAA,IAAI,OAAO,GAAG,EAAE,EAAE;AACd,YAAA,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE;;aACrC;AACH,YAAA,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;;AAEtC,QAAA,IAAI,SAAS,GAAW,IAAI,CAAC,UAAU,EAAE;AACzC,QAAA,IAAI,eAAuB;AAC3B,QAAA,IAAI,SAAS,GAAG,EAAE,EAAE;AAChB,YAAA,eAAe,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE;;aACzC;AACH,YAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,EAAE;;AAE1C,QAAA,IAAI,UAAU,GAAG,aAAa,GAAG,GAAG,GAAG,eAAe;AACtD,QAAA,OAAO,UAAU;;AAGrB,IAAA,eAAe,CAAC,MAAc,EAAA;QAC1B,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,MAAM,GAAG,EAAE,EAAE;AACb,YAAA,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE;;aACnC;AACH,YAAA,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;;AAEpC,QAAA,OAAO,YAAY;;AAGvB,IAAA,eAAe,CAAC,oBAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE;YAC7C,IAAI,SAAS,GAAa,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;YACpE,IAAI,SAAS,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACjD,IAAI,YAAY,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACpD,IAAI,gBAAgB,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACxD,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtK,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,IAAI,GAAW,EAAE;YACrB,IAAI,MAAM,GAAW,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,oBAAA,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;AACpB,oBAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;;gBAE1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAChB,oBAAA,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;;AAExB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,oBAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;;;AAG9B,YAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,IAAI,OAAO,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AACrM,YAAA,OAAO,OAAO;;AAEb,aAAA,IAAI,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE;AAChD,YAAA,OAAO,oBAAoB;;aAE1B;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;;;AAKjE,IAAA,gBAAgB,CAAC,IAAS,EAAA;QACtB,MAAM,aAAa,GAAG,uDAAuD;QAC7E,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG/D,IAAA,cAAc,CAAC,IAAS,EAAA;QACpB,OAAO,IAAI,YAAY,IAAI;;AAI/B,IAAA,2BAA2B,CAAC,oBAAoB,EAAA;QAC5C,IAAI,SAAS,GAAa,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACpE,IAAI,SAAS,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACjD,IAAI,YAAY,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACpD,IAAI,gBAAgB,GAAa,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACxD,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtK,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,IAAI,GAAW,EAAE;QACrB,IAAI,MAAM,GAAW,EAAE;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,gBAAA,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;AACpB,gBAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;;YAE1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAChB,gBAAA,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;;AAExB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;;;AAG9B,QAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,OAAO,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5P,QAAA,OAAO,OAAO;;AAGlB,IAAA,gBAAgB,CAAC,SAAe,EAAA;QAC5B,IAAI,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACjD,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI;;AAGf,IAAA,YAAY,CAAC,UAAkB,EAAA;AAC3B,QAAA,IAAI,UAAU,GAAG,UAAU,GAAG,EAAE;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAClC,QAAA,IAAI,YAAY,GAAG,UAAU,GAAG,KAAK;AACrC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,UAAU,GAAG,KAAK,GAAG,OAAO;AAChC,QAAA,OAAO,UAAU;;;AAKrB;;;;;AAKG;IACH,aAAa,CAAC,MAAc,EAAE,QAAgB,EAAA;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;wGA3KlC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA;;4FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLH,IAAY,oBAOX;AAPD,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACZ,CAAC,EAPW,oBAAoB,KAApB,oBAAoB,GAO/B,EAAA,CAAA,CAAA;AAED,IAAY,iBAOX;AAPD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,iBAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,iBAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,iBAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACZ,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,GAO5B,EAAA,CAAA,CAAA;AAED,IAAY,iBAKX;AALD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,iBAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAU;AACV,IAAA,iBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AAClB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAK5B,EAAA,CAAA,CAAA;AAED,IAAY,oBAGX;AAHD,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAS;AACb,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAG/B,EAAA,CAAA,CAAA;AAED,IAAY,sBAGX;AAHD,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,sBAAA,CAAA,qBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,qBAA0B;AAC1B,IAAA,sBAAA,CAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAqB;AACzB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,GAGjC,EAAA,CAAA,CAAA;AAED,IAAY,0BAGX;AAHD,CAAA,UAAY,0BAA0B,EAAA;AAClC,IAAA,0BAAA,CAAA,0BAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,0BAAA,CAAA,0BAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACZ,CAAC,EAHW,0BAA0B,KAA1B,0BAA0B,GAGrC,EAAA,CAAA,CAAA;AAED,IAAY,aAaX;AAbD,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAU;AACV,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAS;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,qBAA0B;AAC1B,IAAA,aAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAqB;AACzB,CAAC,EAbW,aAAa,KAAb,aAAa,GAaxB,EAAA,CAAA,CAAA;;MChDY,OAAO,CAAA;AAChB,IAAA,GAAG;AACH,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,UAAU;IACV,QAAQ,GAAQ,EAAE;AAElB,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;AACzD,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5B,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB,SAAC,CAAC;;AAET;MAEY,gBAAgB,CAAA;AACzB,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,MAAM,GAAW,IAAI,MAAM,EAAE;AAC7B,IAAA,aAAa;AACb,IAAA,oBAAoB;AAEpB,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;AACzD,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5B,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB,SAAC,CAAC;;AAET;MAEY,eAAe,CAAA;AACxB,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,OAAO;AAEP,IAAA,WAAA,CAAY,IAAI,EAAA;AACZ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAEvB;IAEW;AAAZ,CAAA,UAAY,uBAAuB,EAAA;AAC/B,IAAA,uBAAA,CAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,uBAAA,CAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AAChB,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,GAGlC,EAAA,CAAA,CAAA;MAEY,SAAS,CAAA;AAClB,IAAA,SAAS;AACT,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,aAAa;AACb,IAAA,oBAAoB;AACvB;IAEW;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAChC,IAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAS;AACT,IAAA,wBAAA,CAAA,wBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAa;AACb,IAAA,wBAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAQ;AACR,IAAA,wBAAA,CAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;AAChB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAKnC,EAAA,CAAA,CAAA;MAEY,WAAW,CAAA;AACpB,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,QAAQ;AACR,IAAA,WAAW;AACX,IAAA,sBAAsB;AACzB;;AC5DC;;;;;;;;;;;;;;;AAeE;MAKW,qBAAqB,CAAA;AA8BtB,IAAA,UAAA;IA5BV,KAAK,GAAG,KAAK;IAEQ,UAAU,GAAW,EAAE;AAClC,IAAA,gBAAgB,GAAyB,IAAI,YAAY,EAAU;IAC7E,aAAa,GAAW,EAAE;;AAElB,IAAA,UAAU;IAElB,WAAW,GAAW,iBAAiB;IACvC,aAAa,GAAW,mBAAmB;AAE3C,IAAA,WAAW;AACX,IAAA,SAAS;IACT,cAAc,GAAG,EAAE;IACnB,cAAc,GAAG,EAAE;;IAGnB,oBAAoB,GAAG,KAAK;AAC5B,IAAA,sBAAsB,GAAG,IAAI,CAAC;AAE9B,IAAA,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC;AAC3B,IAAA,YAAY;IAEW,YAAY,GAAA;QACjC,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,WAAA,CACU,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;QAGlB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;QAE9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AAE3C,QAAA,IAAI;;AAEF,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAuB,EAAE;AAEhD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAEjC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,OAAO;YAE/B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAM,KAAI;gBACrD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;qBACpC,GAAG,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,CAAC,CAAC;qBAC9B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU;qBACjC,IAAI,CAAC,EAAE,CAAC;AAEX,gBAAA,IAAI,CAAC,UAAU,CAAC,yBAAyB,GAAG,UAAU,CAAC;AAGvD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,gBAAA,IAAI,CAAC,SAAS,GAAG,UAAU;gBAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;qBACpC,GAAG,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,CAAC,CAAC;qBAC9B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU;qBACjC,IAAI,CAAC,EAAE,CAAC;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACtC,aAAC,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,SAAc,KAAI;;AAE1D,gBAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;;AAEtC,aAAC,CAAC;;QACF,OAAO,KAAK,EAAE;AAEd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAEtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;;IAK1C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;AAEnC,QAAA,IAAG,IAAI,CAAC,WAAW,EAAC;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;;;IAI5B,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAExC,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAExB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU;AACpC,YAAA,IACE,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,IAAI,CAAC,UAAU,IAAI,SAAS;AAC5B,gBAAA,IAAI,CAAC,UAAU,IAAI,EAAE,EACrB;AACA,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAEtB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YAExB,IAAI,OAAO,GAAG,EAAE;YAChB,IAAI,CAAC,KAAK,EAAE;;AAEZ,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACtD,gBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC3D,oBAAA,IAAI,CAAC,UAAU;AACb,wBAAA,IAAI,CAAC,aAAa;4BAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;qBACtC;AACL,oBAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,oBAAA,IAAI,OAAO,IAAI,SAAS,EAAE;wBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;wBACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;;yBAC9C;wBACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;;AAGjD,aAAC,CAAC;;aACG;AACL,YAAA,IAAG,aAAa,CAAC,eAAe,KAAK,IAAI,EAAC;AACxC,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAE7C,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;gBACxB,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;iBAC1B;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AAC7B,gBAAA,aAAa,CAAC,eAAe,CAAC,mBAAmB,EAAE;AACnD,gBAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC9B,oBAAA,IAAG,aAAa,CAAC,eAAe,IAAI,IAAI,EAAC;wBACvC,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,aAAa,CAAC,QAAQ,CAAC;;iBAE1B,EAAE,GAAG,CAAC;;;;IAKL,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAChE,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,YAAA,aAAa,CAAC,qBAAqB,GAAG,IAAI;AAC1C,YAAA,aAAa,CAAC,eAAe,GAAG,IAAI;;AAEtC,QAAA,OAAO,IAAI;;IAEL,IAAI,GAAA;AACV,QAAA,IAAI,aAAa,CAAC,qBAAqB,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAClE,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7D,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,YAAA,aAAa,CAAC,qBAAqB,GAAG,KAAK;AAC3C,YAAA,aAAa,CAAC,eAAe,GAAG,IAAI;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;AAE1B,QAAA,OAAO,KAAK;;IAGN,UAAU,GAAA;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;;;;AAKlC,IAAA,UAAU,CAAC,OAAO,EAAA;AACxB,QAAA,IAAG,IAAI,CAAC,KAAK,EAAC;AACZ,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;;;wGApLb,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;+EAKsB,UAAU,EAAA,CAAA;sBAA9B,KAAK;uBAAC,YAAY;gBACT,gBAAgB,EAAA,CAAA;sBAAzB;gBAoBsB,YAAY,EAAA,CAAA;sBAAlC,YAAY;uBAAC,OAAO;;;MC9CZ,0BAA0B,CAAA;;IAErC,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;;AAEH,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;IAClC,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;AAEH,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IACzE,aAAa,GAAG,YAAY;AAG5B,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;;IAEnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;IAItB,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,KAAK,YAAY,CAAC,KAAK;AACrB,gBAAA,OAAO,OAAO;YAChB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,UAAU;YACnB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,KAAK;YACd,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,MAAM;;;AAInB;;AAEG;IACH,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;QAE5G,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9G,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;wGAjF5B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,+LCbvC,siCAiCA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDpBa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,siCAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;wDAWtB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAMS,YAAY,EAAA,CAAA;sBAArB;;;AE1BG,MAAO,YAAa,SAAQ,SAAS,CAAA;;AAEvC,IAAA,UAAU;AACV,IAAA,eAAe;AAClB;IAEW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;AACZ,IAAA,oBAAA,CAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAkB;;;AAGtB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,GAM/B,EAAA,CAAA,CAAA;;MCFY,6BAA6B,CAAA;AAE/B,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;;AAE3E,IAAA,aAAa;AACb,IAAA,aAAa;IAEX,oBAAoB,GAAG,oBAAoB;AAE3C,IAAA,WAAA,GAAA;IAEA,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAG/E,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;YACrF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,KAAK;;QAGrE,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;;AAGnB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;QAE5G,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9G,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;wGAxD5B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,4KCZ1C,k9DA8BM,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDlBO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,k9DAAA,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA;wDAMzB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEHU,0BAA0B,CAAA;AAE5B,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IAEzE,KAAK,GAAG,QAAQ;IAChB,QAAQ,GAAG,YAAY;AACvB,IAAA,IAAI;IAEJ,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAW,IAAI;AAE3B,IAAA,WAAA,GAAA;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,WAAW,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;QAE5G,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9G,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;AACH,IAAA,mBAAmB,CAAC,EAAE,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAC,EAAE;QACxB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAIvC,eAAe,GAAA;QAEb,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;;aACpC;YACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAC;AACzD,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;YAElC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAC;AAC1D,gBAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB;;YAExC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAC;AAC3D,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;;AAI/B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;AAK3B;;;AAGG;IACK,WAAW,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU;YAC3B,KAAK,gBAAgB,CAAC,WAAW,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,YAAY,CAAC;AACjC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,cAAc;gBACnC;;;wGA5FK,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,+LCbvC,0cAIqB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDSR,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,0cAAA,EAAA;wDAMtB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MELU,8BAA8B,CAAA;IACzC,gBAAgB,GAAG,KAAK;AACf,IAAA,KAAK;AACL,IAAA,MAAM;AACf,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACG,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AACzE,IAAA,YAAY;;AAGX,IAAA,aAAa;AACb,IAAA,aAAa;AAEd,IAAA,WAAA,GAAA;;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;;IAGnB,UAAU,GAAA;;AAEN,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAGtB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAE5G,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AACtL,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;wGAvD5B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,6KCb3C,4jCAoCA,EAAA,MAAA,EAAA,CAAA,oUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDvBa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,4jCAAA,EAAA,MAAA,EAAA,CAAA,oUAAA,CAAA,EAAA;wDAM1B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAGS,YAAY,EAAA,CAAA;sBAArB;;;MEJU,6BAA6B,CAAA;AAE/B,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IACzE,eAAe,GAAU,EAAE;IAC3B,iBAAiB,GAA+B,EAAE;;AAGpD,IAAA,aAAa;AACb,IAAA,aAAa;IAEb,OAAO,GAAY,KAAK;AAExB,IAAA,WAAA,GAAA;;IAGE,QAAQ,GAAA;QACN,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;;;IAInB,UAAU,GAAA;AACH,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;;AAGrF,IAAA,WAAW,CAAC,OAAsB,EAAA;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;;;AAKjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;QAE5G,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9G,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAC;;AAEf,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;YAEtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAIvC;;AAEG;IACK,0BAA0B,GAAA;QAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAC,IAAI,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAC,GAAG,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,mBAAmB,CAAC,SAAS,GAAG,mBAAmB,CAAC,OAAO;AAC1H,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAC,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS;YACjF,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;AAE5D,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAC,GAAG;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACxI,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAChE,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAG,KAAK,EAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;iBAChJ;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;aACxC;AACH,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;AAI1C;;AAEC;IACO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACjE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACjE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;IAGrF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;wGA5GV,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,kMCf1C,8vBAQiB,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDOJ,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,8vBAAA,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA;wDAMzB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;AElBH;AACM,MAAO,cAAe,SAAQ,SAAS,CAAA;AACzC;;;AAGG;AACH,IAAA,UAAU;AAEV;;AAEE;AACF,IAAA,WAAW;;AAGX,IAAA,cAAc;;AAGd,IAAA,gBAAgB;AAEnB;IAEW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAe;AACf,IAAA,oBAAA,CAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAkB;AAClB,IAAA,oBAAA,CAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAwB;AAC5B,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;MCfY,+BAA+B,CAAA;AAEjC,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IACzE,oBAAoB,GAAG,oBAAoB;IAC3C,SAAS,GAAuE,EAAE;;AAElF,IAAA,aAAa;AACb,IAAA,aAAa;AACb,IAAA,WAAA,GAAA;IAEA,UAAU,GAAA;;AAER,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC3E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAChF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC3E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAElF,QAAQ,GAAA;QACN,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;;;;;QAKnC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,UAAU,EAAE;;AAGnB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;;QAET,aAAa,CAAC,QAAQ,CAAC,8BAA8B,EAAE,IAAI,CAAC,KAAK,CAAC;AAClE,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACtB,YAAA,aAAa,CAAC,QAAQ,CAAC,0CAA0C,CAAC;AAClE,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;AAC1B,YAAA,MAAM,IAAI,GAAW,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;YAGrG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;;;;;;;;;;;AAYzD,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5E,YAAA,aAAa,CAAC,QAAQ,CAAC,6CAA6C,CAAC;;AAEhE,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE;AACzE,YAAA,aAAa,CAAC,QAAQ,CAAC,8CAA8C,CAAC;AACtE,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;AAGlF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;AAI9G;;;AAGG;AACH,IAAA,iBAAiB,CAAC,IAAyE,EAAA;AACzF,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;aACrB;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;YAEvG,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAE9C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;iBAE9C;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;;;QAI7C,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;;AAGG;IACH,cAAc,CAAC,aAAsB,IAAI,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;QACnG,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,mBAAmB,EAAE;;;AAI9B;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrC;;AAEG;IACK,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAC;YAChC,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChG,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;iBAC1E;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;;;AAK/D,IAAA,sBAAsB,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AAC9E,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;AAGrF,IAAA,4BAA4B,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AACpF,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;AAE7F;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;wGA/JhF,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,qMCZ5C,0qFA0CM,EAAA,MAAA,EAAA,CAAA,64HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9BO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,0qFAAA,EAAA,MAAA,EAAA,CAAA,64HAAA,CAAA,EAAA;wDAM5B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;AEfG,MAAO,eAAgB,SAAQ,SAAS,CAAA;;AAE1C,IAAA,iBAAiB;;AAGjB,IAAA,aAAa;;AAGb,IAAA,cAAc;AACjB;AAEY,MAAA,uBAAuB,GAA0C;AAC1E,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE;AAC5C,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,EAAE;AAClD,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,+BAA+B,EAAE;AACvD,IAAA,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,yEAAyE,EAAE;AAClG,IAAA,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,mEAAmE,EAAE;AAC5F,IAAA,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,2EAA2E,EAAE;AACpG,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE;AAClC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE;;AAG3B,MAAA,wBAAwB,GAA0C;AAC3E,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AAC1C,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE;AACnC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE;AACnC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE;;;MCf7B,gCAAgC,CAAA;AAelC,IAAA,cAAA;AACC,IAAA,GAAA;IAdD,UAAU,GAAY,KAAK;AAC3B,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,mBAAmB,GAAuB,IAAI,YAAY,EAAQ;AAE7B,IAAA,cAAc;;;IAK7D,WACS,CAAA,cAAoC,EACnC,GAAsB,EAAA;QADvB,IAAc,CAAA,cAAA,GAAd,cAAc;QACb,IAAG,CAAA,GAAA,GAAH,GAAG;;IAGb,QAAQ,GAAA;;;;QAIN,IAAI,CAAC,mBAAmB,EAAE;;;;AAM1B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;;QAE7G,IAAI,CAAC,WAAW,EAAE;;IAGpB,eAAe,GAAA;;;;;;;AAQf,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;AAI9G;;;;;;AAMG;AACH,IAAA,mBAAmB,CAAC,KAAK,EAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;;QAIpC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,mBAAmB,EAAE;;;;AAK1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAG1B;;;;AAIG;;;;;;;;;AAUH;;;;;;;AAOG;;;;;;AAOH;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAG3F;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;wGA7H5B,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,2YCf7C,g/CAwBkB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDTL,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,g/CAAA,EAAA;sHAM5B,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBAE8C,cAAc,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AExBxC,MAAM,MAAM,GAAkB;AACjC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,SAAS,EAAE,SAAS;AAEpB,IAAA,SAAS,EAAE,mCAAmC;AAC9C,IAAA,YAAY,EAAE,kCAAkC;AAChD,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,SAAS,EAAE,yBAAyB;AACpC,IAAA,WAAW,EAAE,oBAAoB;AAEjC,IAAA,KAAK,EAAE;AACH,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE;AACV,KAAA;AAED,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,SAAS;AAEhB,IAAA,MAAM,EAAE;AACJ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,GAAG,EAAE,OAAO;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE;AACX,KAAA;AAED,IAAA,KAAK,EAAE;AACH,QAAA,KAAK,EAAE;AACV;CACJ;AAEM,MAAM,MAAM,GAAkB;AACjC,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,SAAS,EAAE,QAAQ;AAEnB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,YAAY,EAAE,qBAAqB;AACnC,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE,kBAAkB;AAC7B,IAAA,WAAW,EAAE,cAAc;AAE3B,IAAA,KAAK,EAAE;AACH,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE;AACV,KAAA;AAED,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AAEd,IAAA,MAAM,EAAE;AACJ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,QAAQ;AACnB,KAAA;AAED,IAAA,KAAK,EAAE;AACH,QAAA,KAAK,EAAE;AACV;CACJ;AAEM,MAAM,aAAa,GAAsC;AAC5D,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,EAAE,EAAE;CACP;;MC9DY,uBAAuB,CAAA;AAExB,IAAA,WAAW,GAAuB,IAAI,YAAY,EAAQ;AAEpD,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,MAAM;IAEN,eAAe,GAAG,IAAI;IACtB,eAAe,GAAG,KAAK;IACvB,iBAAiB,GAAG,KAAK;IACzB,sBAAsB,GAAG,KAAK;IAC9B,aAAa,GAAG,KAAK;IACrB,gBAAgB,GAAG,IAAI;IAEvB,QAAQ,GAAa,KAAK;;AAGpB,IAAA,QAAQ;IACd,MAAM,GAAW,IAAI;AAErB,IAAA,eAAe;AACf,IAAA,aAAa;IAEb,cAAc,GAAG,YAAY;IAC7B,aAAa,GAAG,GAAG;IAEnB,SAAS,GAAW,MAAM;AAE1B,IAAA,YAAY,GAA+B;AACzD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,KAAK,EAAE,EAAE;KACV;AAEe,IAAA,MAAM,GAA+B;AACnD,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,SAAS;KAClB;AAEgB,IAAA,IAAI,GAAuB,IAAI,YAAY,EAAQ;AACnD,IAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ;IAErE,WAAW,GAAG,OAAO;IACrB,WAAW,GAAG,QAAQ;IACtB,YAAY,GAAG,OAAO;IACtB,IAAI,GAAkB,MAAM;IAE5B,OAAO,GAAG,KAAK;IACf,OAAO,GAAG,KAAK;IAEf,SAAS,GAAG,IAAI;IAChB,QAAQ,GAAG,KAAK;IAChB,YAAY,GAAG,EAAE;AAEhB,IAAA,MAAM;IACN,KAAK,GAAoB,EAAE;IAE5B,UAAU,GAAa,EAAE;IACzB,gBAAgB,GAAa,EAAE;AAE9B,IAAA,SAAS;AAEjB,IAAA,aAAa;AAEb,IAAA,WAAA,GAAA;;IAGO,QAAQ,GAAA;QACb,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;AACrE,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5B,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvB,SAAC,CAAC;;IAGG,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACnD,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO;AAErC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;;aAC5B;YACL,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;YAG9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAK;AAClC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;AACpB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACnC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;;;AAIxD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;YACvE,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE;gBAChD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;;iBAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,IAAI,EAAE;gBACnD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;;;;;AAMjD,IAAA,UAAU,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGlB,IAAA,iBAAiB,CAAC,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;;AAIzD,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;;IAKpD,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3B,IAAI,CAAC,WAAW,EAAE;;;IAIf,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC;;YAEhF,IAAI,CAAC,WAAW,EAAE;;;IAIf,WAAW,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE;;;IAIf,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAChF,MAAM,mBAAmB,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC3D,YAAA,YAAY,CAAC,eAAe,GAAG,OAAO;AAEtC,YAAA,IAAI,UAAU,CAAgB,QAAQ,IAAG;AACvC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,wBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,wBAAA,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAEnC,wBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,IAAG;4BACxC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;4BAC3C,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;4BAE7C,YAAY,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAqB,KAAI;gCACrE,IAAI,CAAC,GAAG,EAAE;oCACR,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;;AAGnF,gCAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gCAC3B,QAAQ,CAAC,QAAQ,EAAE;AACrB,6BAAC,EAAE;AACD,gCAAA,WAAW,EAAE,WAAW;AACxB,gCAAA,OAAO,EAAE,MAAM;AACf,gCAAA,OAAO,EAAE;AACV,6BAAA,CAAC;AACJ,yBAAC,CAAC;;yBACG;wBACL,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAqB,KAAI;4BACxE,IAAI,CAAC,GAAG,EAAE;gCACR,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;;AAGnF,4BAAA,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,4BAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAElC,4BAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;4BAC3B,QAAQ,CAAC,QAAQ,EAAE;AACrB,yBAAC,EAAE;AACD,4BAAA,WAAW,EAAE,WAAW;AACxB,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,OAAO,EAAE;AACV,yBAAA,CAAC;;;qBAEC;AACL,oBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,oBAAA,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEvC,aAAC,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/D,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAEjE,oBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,cAA6B,EAAE,CAAS,KAAI;wBAC5E,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAK;AACpC,4BAAA,OAAO,IAAI,UAAU,CAAgB,cAAc,IAAG;AACpD,gCAAA,cAAc,CAAC,KAAK,CAAC,CAAC,YAA2B,KAAI;oCACnD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC;oCACtD,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,GAAG,MAAM,CAAC;oCACpD,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;oCACxD,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;oCAE1D,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;oCAC7C,YAAY,CAAC,SAAS,EAAE;AAExB,oCAAA,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;oCACjC,cAAc,CAAC,QAAQ,EAAE;AAC3B,iCAAC,CAAC;AACJ,6BAAC,CAAC;yBACH,CAAC,CAAC;AACL,qBAAC,CAAC;;AAEJ,gBAAA,OAAO,OAAO;AAChB,aAAC,CAAC,CACH,CAAC,SAAS,CAAC,MAAK;gBACf,YAAY,CAAC,SAAS,EAAE;gBACxB,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,CAC9B,CAAC,IAAU,KAAI;AACb,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;iBACrB,EACD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,CACnB;AACH,aAAC,CAAC;;aACG;YACL,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAC7B,CAAC,IAAU,KAAI;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;aACrB,EACD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,CACnB;;;IAIE,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGnB,IAAA,iBAAiB,CAAC,IAAY,EAAA;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAW,CAAC;AAEpE,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAe,CAAC;gBACxE,IAAI,GAAG,EAAE;oBACP,KAAK,GAAG,GAAG;;;YAEb,OAAO,CAAC,EAAE;;;;QAKd,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,0BAA0B,CAAC;;AAGlD,QAAA,OAAO,KAAK;;AAGP,IAAA,oBAAoB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;aAC9B;AACL,YAAA,OAAO,EAAE;;;IAIL,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;;;AAI/B,IAAA,mBAAmB,CAAC,KAAkB,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;iBACzB;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;;;;IAKhC,WAAW,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;AAEvB,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI;QAElC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGpC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;;AAGzB,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;;AAG9B,IAAA,kBAAkB,CAAC,GAAW,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,UAAU,GAAG,IAAI;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC;AAC9C,QAAA,KAAK,CAAC,GAAG,GAAG,GAAG;AACf,QAAA,KAAK,CAAC,OAAO,GAAG,MAAK;;YAEnB,IAAI,UAAU,EAAE;gBACd,KAAK,CAAC,GAAG,GAAG,sCAAsC,GAAG,IAAI,CAAC,GAAG;gBAC7D,UAAU,GAAG,KAAK;;iBACb;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAa,CAAC;;AAE7F,SAAC;AACD,QAAA,KAAK,CAAC,MAAM,GAAG,MAAK;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAExC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAG;AAClC,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,gBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AAEzB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,KAAK,GAAG,IAAI,CAAC,KAAK;;AAEpB,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,oBAAA,MAAM,GAAG,IAAI,CAAC,MAAM;;AAGtB,gBAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAChC,gBAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;gBAElC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAqB,KAAI;oBAC/D,IAAI,GAAG,EAAE;AACP,wBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,4BAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,4BAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;;6BACxB;4BACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;;;AAGpD,iBAAC,GAAG;AACF,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC;;AAGK,IAAA,mBAAmB,CAAC,IAAiB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,SAAc,KAAI;YACjC,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;gBAClD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;AAEpD,SAAC;;IAGI,kBAAkB,GAAA;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;;;IAIzB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;wGAhad,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,0tBCXpC,+/GAyEM,EAAA,MAAA,EAAA,CAAA,8jEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9DO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,+/GAAA,EAAA,MAAA,EAAA,CAAA,8jEAAA,CAAA,EAAA;wDAMlB,WAAW,EAAA,CAAA;sBAApB;gBAEe,GAAG,EAAA,CAAA;sBAAlB;gBACe,KAAK,EAAA,CAAA;sBAApB;gBACe,MAAM,EAAA,CAAA;sBAArB;gBAEe,eAAe,EAAA,CAAA;sBAA9B;gBACe,eAAe,EAAA,CAAA;sBAA9B;gBACe,iBAAiB,EAAA,CAAA;sBAAhC;gBACe,sBAAsB,EAAA,CAAA;sBAArC;gBACe,aAAa,EAAA,CAAA;sBAA5B;gBACe,gBAAgB,EAAA,CAAA;sBAA/B;gBAEe,QAAQ,EAAA,CAAA;sBAAvB;gBAGqB,QAAQ,EAAA,CAAA;sBAA7B,KAAK;uBAAC,MAAM;gBACG,MAAM,EAAA,CAAA;sBAArB;gBAEe,eAAe,EAAA,CAAA;sBAA9B;gBACe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,cAAc,EAAA,CAAA;sBAA7B;gBACe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,SAAS,EAAA,CAAA;sBAAxB;gBAEe,YAAY,EAAA,CAAA;sBAA3B;gBAMe,MAAM,EAAA,CAAA;sBAArB;gBAUgB,IAAI,EAAA,CAAA;sBAApB;gBACgB,YAAY,EAAA,CAAA;sBAA5B;;;AE9CH;;;;AAIG;AACH,MAAMS,UAAQ,GAAG,IAAI,IAAI,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC/D,IAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,IAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,IAAA,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvD,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AACzC,CAAC,CAAC;MAOW,2BAA2B,CAAA;AAmC5B,IAAA,MAAA;AACA,IAAA,oBAAA;AAlCD,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,SAAS,GAAgC,IAAI,YAAY,EAAiB;IAEpF,UAAU,GAAW,CAAC;IACtB,aAAa,GAAY,KAAK;IAC9B,UAAU,GAAW,EAAE;IACvB,cAAc,GAAW,EAAE;IAC3B,cAAc,GAAW,EAAE;AAE3B,IAAA,YAAY;AAEZ,IAAA,mBAAmB;;;IAMZ,KAAK,GAAG,IAAI;IACZ,MAAM,GAAG,IAAI;AACb,IAAA,IAAI,GAAkB;AAC3B,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,WAAW,EAAE,iBAAiB;KAC/B;AACD,IAAA,qBAAqB;AAC8B,IAAA,kBAAkB;;IAGrE,WACU,CAAA,MAAiB,EACjB,oBAA0C,EAAA;QAD1C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAG9B,QAAQ,GAAA;QAEN,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC;YAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc;AAC7D,YAAA,IAAI,CAAC,UAAU,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE;AACxJ,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AAEvD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC;YAE/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;;aAE1C;AACL,YAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEzE,YAAA,IAAI,CAAC,UAAU,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE;AAExJ,YAAA,IAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,WAAW,IAAI,IAAI,EAAC;gBACtE,IAAI,CAAC,cAAc,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC;;iBACrG;AACL,gBAAA,IAAI,CAAC,cAAc,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,cAAc;;AAGrF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AAEpF,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YAE7D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE;;QAGjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;;QAQnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAM7C,IAAI,CAAC,WAAW,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;;;;;;;;;AAetB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;IAK9G,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;QAElB,IAAI,CAAC,kBAAkB,EAAE;;AAG3B;;;;;AAKG;IACH,mBAAmB,GAAA;AACjB;;;;;;;;;AASE;;AAGJ;;;;;AAKG;IACH,MAAM,QAAQ,CAAC,YAAkB,EAAA;AAC/B,QAAA,IAAI,UAAU,GAAG,MAAMA,UAAQ,CAAC,YAAY,CAAC;QAC7C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;;YAGzC,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YAE7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAI/C,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE;;;AAIlC;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB;;;;AAIG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,GAAS,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAM,KAAI;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC3B,YAAA,KAAK,CAAC,MAAM,GAAG,EAAE,IAAG;gBAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;AACxC,aAAC;AACH,SAAC;AACD,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;;AAG5B;;;;;AAKG;IACK,iBAAiB,GAAA;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;;AAE/C,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;QAC7C,OAAO,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;;AAGzF;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAIhC,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACrE,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAC;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;aACjD;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc;AACrC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;IAK7B,IAAI,CAAC,EAAE,EAAC,KAAK,EAAA;AAEX,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAGxB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,wBAAwB,EACzD,mBAAmB,EACnB,CAAC,GAAkB,KAAI;YAErB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC;AAC1D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAE3B,SAAC,EACD,CAAC,GAAG,KAAI;AAER,SAAC,CACF;;IAGH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;wGAlRvD,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,gZC5BxC,k8EA6Cc,EAAA,MAAA,EAAA,CAAA,4OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDjBD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,k8EAAA,EAAA,MAAA,EAAA,CAAA,4OAAA,CAAA,EAAA;gHAMvB,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAwBkD,kBAAkB,EAAA,CAAA;sBAApE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEzDtC,aAAa,CAAA;AAEtB,IAAA,EAAE;AACF,IAAA,QAAQ;AACR,IAAA,eAAe;AACf,IAAA,aAAa;AACb,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,mBAAmB;AACnB,IAAA,SAAS;AAET,IAAA,cAAc;AACd,IAAA,OAAO;AACP,IAAA,mBAAmB;AACnB,IAAA,UAAU;AAEV,IAAA,eAAe;AAEf,IAAA,IAAI;AACJ,IAAA,aAAa;AACb,IAAA,KAAK;AACL,IAAA,YAAY;;;;;AAMZ,IAAA,WAAW;AAEX,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,QAAQ;AAER,IAAA,YAAY;AACZ,IAAA,aAAa;AACb,IAAA,oBAAoB;AAEpB,IAAA,WAAW;AACX,IAAA,SAAS;IAET,cAAc,GAA+B,IAAI;AACjD,IAAA,aAAa;IAEb,WAAW,GAAgC,EAAE;AAEhD;MAEY,yBAAyB,CAAA;AAClC,IAAA,EAAE;AACF,IAAA,WAAW;AACX,IAAA,SAAS;AACZ;MAEY,kBAAkB,CAAA;IAC3B,MAAM,GAAC,CAAC;IACR,IAAI,GAAC,CAAC;AACT;AAED,IAAY,uBAKX;AALD,CAAA,UAAY,uBAAuB,EAAA;AAE/B,IAAA,uBAAA,CAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,uBAAA,CAAA,uBAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB;AACpB,IAAA,uBAAA,CAAA,uBAAA,CAAA,sBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,sBAAwB;AAC5B,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,GAKlC,EAAA,CAAA,CAAA;;MCrDY,mCAAmC,CAAA;AAYpC,IAAA,MAAA;AACD,IAAA,cAAA;AAXA,IAAA,MAAM;AACN,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAEzE,IAAA,aAAa;AACb,IAAA,aAAa;AACb,IAAA,iBAAiB;IAEjB,WACU,CAAA,MAAiB,EAClB,cAAoC,EAAA;QADnC,IAAM,CAAA,MAAA,GAAN,MAAM;QACP,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGvB,QAAQ,GAAA;AAEN,QAAA,aAAa,CAAC,QAAQ,CAAC,kEAAkE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxH,aAAa,CAAC,QAAQ,CAAC,iEAAiE,EAAE,IAAI,CAAC,KAAK,CAAC;QAErG,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,qBAAqB,EAAE;;IAI9B,UAAU,GAAA;;AAEV,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGhF,IAAA,WAAW,CAAC,EAAS,EAAA;AACnB,QAAA,OAAO,EAAE,CAAC,WAAW,EAAE;;AAGzB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;;IAIX,qBAAqB,GAAA;QACnB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC/C,YAAA,UAAU,CAAC,cAAc,GAAG,IAAI,yBAAyB,EAAE;YAC3D,UAAU,CAAC,cAAc,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE;YAC5C,UAAU,CAAC,cAAc,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;YAC1D,UAAU,CAAC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AAChE,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAC;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAC;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;;iBACnD;AACJ,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACzE,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACjD,iBAAC,CAAC;;;;AAKN;;AAEC;AACD,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAE/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,EAAiB;AAEzD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAC;AAE7B,YAAA,IAAI,aAAa,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC;AACjH,YAAA,aAAa,CAAC,cAAc,GAAG,IAAI;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa;;aAEvC;YACL,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACzC,gBAAA,IAAI,aAAa,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC;AACnH,gBAAA,aAAa,CAAC,cAAc,GAAG,IAAI;AACnC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAClD,aAAC,CAAC;;QAGJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;wGA7F5B,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,yMCbhD,w/CAqBiB,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDRJ,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAL/C,SAAS;+BACE,+BAA+B,EAAA,QAAA,EAAA,w/CAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA;gHAMhC,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MELU,2BAA2B,CAAA;;IAEtC,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;;AAEH,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;IAClC,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;AAEH,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAGzE,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;;IAEnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;QAE5G,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9G,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;;AAIxE;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;wGAhE5B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,gMCbxC,gGAAwF,EAAA,MAAA,EAAA,CAAA,oFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDa3E,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,gGAAA,EAAA,MAAA,EAAA,CAAA,oFAAA,CAAA,EAAA;wDAWvB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAMS,YAAY,EAAA,CAAA;sBAArB;;;MEnBU,uBAAuB,CAAA;AAEzB,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAW,IAAI;IAEpB,cAAc,GAAG,YAAY;IAC7B,aAAa,GAAG,GAAG;IAEnB,eAAe,GAAG,IAAI;AAE5B,IAAA,WAAW,GAAuB,IAAI,YAAY,EAAQ;AAC1D,IAAA,IAAI,GAA8B,IAAI,YAAY,EAAe;AAE3E,IAAA,aAAa;IACb,SAAS,GAAY,IAAI;IACzB,QAAQ,GAAY,KAAK;AAEjB,IAAA,MAAM;IACN,KAAK,GAAoB,EAAE;AAEnC,IAAA,OAAO,GAAkB,IAAI,KAAK,EAAU;AAC5C,IAAA,UAAU,GAAqB,IAAI,KAAK,EAAa;AACrD,IAAA,WAAW,GAAgB,IAAI,WAAW,EAAE;IAE5C,OAAO,GAAY,KAAK;IACxB,OAAO,GAAY,KAAK;IAExB,YAAY,GAAW,EAAE;AAEjB,IAAA,SAAS;AAEjB,IAAA,WAAA,GAAA;IAEO,QAAQ,GAAA;;QAGb,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;AACrE,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5B,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvB,SAAC,CAAC;;IAIG,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAEtB,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACnD,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO;AAErC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;;aAC5B;YACL,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;YAG9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAK;AAClC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;AACpB,SAAC,CAAC;;IAIJ,SAAS,GAAA;AACP,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACvC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAC,GAAG,EAAC,MAAM,GAAC,GAAG,CAAC;AAC5D,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAC,GAAG,EAAC,MAAM,GAAC,GAAG,CAAC;AAC3D,QAAA,IAAI,WAAe;QACnB,IAAI,OAAO,GAAG,GAAG;;AAGjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,EAAC;AAC5D,gBAAA,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE;gBACtB;;;QAKJ,IAAI,CAAC,YAAY,CAAC,GAAG,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,CAAC;;AAGjD,IAAA,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe,EAAE,WAAmB,EAAA;AAE1E;;AAEE;;AAGF,QAAA,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;AAC7B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,GAAG;AACZ,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;;AAGF,QAAA,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAClC,EAAG,QAAQ,EAAE,EAAE;AACX,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,IAAI,EAAG;AACR,SAAA,CAAC;;QAGJ,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAE,MAAM,EAAE,IAAI,CAAE,EAAE,EAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAGzE,QAAA,IAAI,MAAM,GAAW,IAAI,MAAM,EAAE;AACjC,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM;AACtB,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI;AAClB,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,MAAM,CAAC,OAAO,GAAG,OAAO;AACxB,QAAA,MAAM,CAAC,WAAW,GAAG,WAAW;;AAGhC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,EAAG,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,EAAE,CAAC;;AAG3E,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGxB,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;;IAG9B,gBAAgB,GAAA;QACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,EAAU;;IAG5B,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA;AAEQ,IAAA,kBAAkB,CAAC,GAAW,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,UAAU,GAAG,IAAI;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC;AAC9C,QAAA,KAAK,CAAC,GAAG,GAAG,GAAG;AACf,QAAA,KAAK,CAAC,OAAO,GAAG,MAAK;;YAEnB,IAAI,UAAU,EAAE;gBACd,KAAK,CAAC,GAAG,GAAG,sCAAsC,GAAG,IAAI,CAAC,GAAG;gBAC7D,UAAU,GAAG,KAAK;;iBACb;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;AAEpC,SAAC;AACD,QAAA,KAAK,CAAC,MAAM,GAAG,MAAK;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAExC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAG;AAClC,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,gBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AAEzB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,KAAK,GAAG,IAAI,CAAC,KAAK;;AAEpB,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,oBAAA,MAAM,GAAG,IAAI,CAAC,MAAM;;AAGtB,gBAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAChC,gBAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;gBAElC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAqB,KAAI;oBAC/D,IAAI,GAAG,EAAE;AACP,wBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,4BAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,4BAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;;6BACxB;4BACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;;;AAGpD,iBAAC,GAAG;AACF,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;AACJ,aAAC,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAC;gBAAE,IAAI,CAAC,WAAW,EAAE;;AACpD,SAAC;;IAGH,WAAW,GAAA;QACT,IAAI,UAAU,GAAqB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AAChE,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAC,MAAM,CAAC,IAAI,EAAC,MAAM,CAAC,OAAO,EAAC,MAAM,CAAC,WAAW,CAAC;AAC7E,SAAC,CAAC;;IAGG,SAAS,GAAA;AAEd,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAa;QAExC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC9B,YAAA,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE;AAC/B,YAAA,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAClC,YAAA,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAC1C,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG;YAChC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,SAAC,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,MAAM,mBAAmB,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC3D,YAAA,YAAY,CAAC,eAAe,GAAG,OAAO;AAEtC,YAAA,IAAI,UAAU,CAAgB,QAAQ,IAAG;AACvC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;oBAEhB,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAqB,KAAI;wBACxE,IAAI,CAAC,GAAG,EAAE;4BACR,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;;AAGnF,wBAAA,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,wBAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAElC,wBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;wBAC3B,QAAQ,CAAC,QAAQ,EAAE;AACrB,qBAAC,EAAE;AACD,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,OAAO,EAAE,MAAM;AACf,wBAAA,OAAO,EAAE;AACV,qBAAA,CAAC;;qBAEC;AACL,oBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,oBAAA,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEvC,aAAC,CAAC,CAAC,IAAI,CACLa,WAAS,CAAC,MAAK;AACb,gBAAA,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/D,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAEjE,oBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,cAA6B,EAAE,CAAS,KAAI;wBAC5E,OAAO,GAAG,OAAO,CAAC,IAAI,CAACA,WAAS,CAAC,MAAK;AACpC,4BAAA,OAAO,IAAI,UAAU,CAAgB,cAAc,IAAG;AACpD,gCAAA,cAAc,CAAC,KAAK,CAAC,CAAC,YAA2B,KAAI;oCACnD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC;oCACtD,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,GAAG,MAAM,CAAC;oCACpD,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;oCACxD,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;oCAE1D,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;oCAC7C,YAAY,CAAC,SAAS,EAAE;AAExB,oCAAA,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;oCACjC,cAAc,CAAC,QAAQ,EAAE;AAC3B,iCAAC,CAAC;AACJ,6BAAC,CAAC;yBACH,CAAC,CAAC;AACL,qBAAC,CAAC;;AAEJ,gBAAA,OAAO,OAAO;AAChB,aAAC,CAAC,CACH,CAAC,SAAS,CAAC,MAAK;gBACf,YAAY,CAAC,SAAS,EAAE;gBACxB,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,CAC9B,CAAC,IAAU,KAAI;AACb,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI;oBAC7B,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;oBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;iBACjC,EACD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,CACnB;AACH,aAAC,CAAC;;aACG;YACL,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAC7B,CAAC,IAAU,KAAI;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI;gBAC7B,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;gBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;aACjC,EACD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,CACnB;;;;IAwBE,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;IAGzB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;;AAG1D,IAAA,GAAG,CAAC,EAAE,EAAA;AACJ,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;;wGAxXN,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,mUCTpC,ooDAoCM,EAAA,MAAA,EAAA,CAAA,mmCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD3BO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,ooDAAA,EAAA,MAAA,EAAA,CAAA,mmCAAA,CAAA,EAAA;wDAMnB,GAAG,EAAA,CAAA;sBAAX;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBAEe,cAAc,EAAA,CAAA;sBAA7B;gBACe,aAAa,EAAA,CAAA;sBAA5B;gBAEe,eAAe,EAAA,CAAA;sBAA9B;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,IAAI,EAAA,CAAA;sBAAb;;MA+WU,MAAM,CAAA;AACjB,IAAA,MAAM;AACN,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,GAAG;AACH,IAAA,IAAI;AACJ,IAAA,OAAO;IACP,WAAW,GAAW,EAAE;AACzB;MAEY,SAAS,CAAA;AACpB,IAAA,GAAG;AACH,IAAA,IAAI;AACJ,IAAA,OAAO;IACP,WAAW,GAAW,EAAE;AACzB;MAEY,WAAW,CAAA;AACtB,IAAA,UAAU;AACV,IAAA,KAAK;AACN;;AE/YD;;;;AAIG;AACH,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC/D,IAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,IAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,IAAA,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvD,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AACzC,CAAC,CAAC;MAQW,sCAAsC,CAAA;AAgCvC,IAAA,MAAA;AACA,IAAA,oBAAA;AA/BD,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;AACxB,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,SAAS,GAAgC,IAAI,YAAY,EAAiB;IAEpF,UAAU,GAAW,CAAC;IACtB,aAAa,GAAY,KAAK;IAC9B,UAAU,GAAW,EAAE;IACvB,cAAc,GAAW,EAAE;IAC3B,cAAc,GAAW,EAAE;AAE3B,IAAA,YAAY;AAEZ,IAAA,mBAAmB;IACnB,SAAS,GAAW,IAAI;;;IAMjB,KAAK,GAAG,IAAI;IACZ,MAAM,GAAG,IAAI;AAEpB,IAAA,qBAAqB;AAC8B,IAAA,kBAAkB;;IAGrE,WACU,CAAA,MAAiB,EACjB,oBAA0C,EAAA;QAD1C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAG9B,QAAQ,GAAA;QAEN,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC;YAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc;AAC7D,YAAA,IAAI,CAAC,UAAU,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE;AACxJ,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AAEvD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC;YAE/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;;aAE1C;AACL,YAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEzE,YAAA,IAAI,CAAC,UAAU,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE;AAExJ,YAAA,IAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,WAAW,IAAI,IAAI,EAAC;gBACtE,IAAI,CAAC,cAAc,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC;;iBACrG;AACL,gBAAA,IAAI,CAAC,cAAc,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,cAAc;;AAGrF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACpF,YAAA,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,SAAS;AAE1E,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YAE7D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;;QAGjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;;QAQnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAM7C,IAAI,CAAC,WAAW,EAAE;;AAGpB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;YACjL,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY;YAC5C,IAAI,CAAC,WAAW,EAAE;;;;;;;;;;;AAetB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACpK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;AAEjH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;IAK9G,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;QAElB,IAAI,CAAC,kBAAkB,EAAE;;AAG3B;;;;;AAKG;IACH,mBAAmB,GAAA;AACjB;;;;;;;;;AASE;;AAGJ;;;;;AAKG;IACH,MAAM,QAAQ,CAAC,WAAwB,EAAA;QACrC,IAAI,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;QAClD,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;;YAGzC,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AAC7D,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC;YAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS;YAEnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAI/C,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB;;;;AAIG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,GAAS,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAM,KAAI;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC3B,YAAA,KAAK,CAAC,MAAM,GAAG,EAAE,IAAG;gBAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;AACxC,aAAC;AACH,SAAC;AACD,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;;AAG5B;;;;;AAKG;IACK,iBAAiB,GAAA;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;;AAE/C,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;QAC7C,OAAO,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;;AAGzF;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAIhC,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACrE,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAC;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;aACjD;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc;AACrC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;IAK7B,IAAI,CAAC,EAAE,EAAC,KAAK,EAAA;AAEX,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAGxB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,wBAAwB,EACzD,mBAAmB,EACnB,CAAC,GAAkB,KAAI;YAErB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC;AAC1D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAE3B,SAAC,EACD,CAAC,GAAG,KAAI;AAER,SAAC,CACF;;wGA9QQ,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,6ZC7BnD,ogEAkCc,EAAA,MAAA,EAAA,CAAA,4OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDLD,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBANlD,SAAS;+BACE,mCAAmC,EAAA,QAAA,EAAA,ogEAAA,EAAA,MAAA,EAAA,CAAA,4OAAA,CAAA,EAAA;gHAOpC,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAqBkD,kBAAkB,EAAA,CAAA;sBAApE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEnDtC,sBAAsB,CAAA;AASb,IAAA,QAAA;AAA4C,IAAA,gBAAA;;IANhE,IAAa,IAAI,CAAC,IAAgC,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;;AAGnC,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;IAEpE,WAAoB,CAAA,QAAkC,EAAU,gBAAkC,EAAA;QAA9E,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAAoC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAEhF,IAAA,IAAI,CAAC,SAAc,EAAE,WAAA,GAAmB,IAAI,EAAA;QAE1C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;;AAGtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC7B,IAAI,iBAAiB,GAAG,SAAS;QACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;QACjF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAM,gBAAgB,CAAC;;;AAIhF,QAAA,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAG;gBAC1B,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3C,aAAC,CAAC;;QAGJ,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAG,EAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;;AAIrE;;;AAGA;AACA,IAAA,YAAY,CAAC,GAAQ,EAAA;QACnB,IAAI,SAAS,GAAG,GAAG;AACnB,QAAA,OAAO,SAAS;;wGAzCP,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;4HAKc,IAAI,EAAA,CAAA;sBAAhB;gBAIS,GAAG,EAAA,CAAA;sBAAZ;;MAsCU,0BAA0B,CAAA;AACrC,IAAA,SAAS;AACT,IAAA,WAAW;AACZ;MAEY,QAAQ,CAAA;AACnB,IAAA,SAAS;AACT,IAAA,UAAU,GAAkB,IAAI,KAAK,EAAU;AAC/C,IAAA,MAAM;AACP;;MChDY,iBAAiB,CAAA;AA8BR,IAAA,UAAA;AA5BX,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;IACzB,iBAAiB,GAAY,KAAK;AAClC,IAAA,oBAAoB,GAA+B,IAAI,CAAC;AACxD,IAAA,IAAI,GAAQ,IAAI,CAAC;AAEhB,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;IAEpE,IAAI,GAAkB,IAAI;IAC1B,MAAM,GAAY,KAAK;AACvB,IAAA,KAAK;IAEL,SAAS,GAAY,KAAK;IAC1B,MAAM,GAAY,IAAI;IAEtB,aAAa,GAAY,KAAK;IAC9B,aAAa,GAAY,KAAK;IAC9B,MAAM,GAAY,IAAI;AAEtB,IAAA,QAAQ;AAER,IAAA,SAAS,GAA8D,IAAI,KAAK,EAAsD;AACtI,IAAA,eAAe;IACf,oBAAoB,GAAkB,IAAI;AAE1C,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;;IAE9B,QAAQ,GAAA;;AAIN,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAC;AACpC,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAC,MAAM;AAC9E,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC/D,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACjE,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAErE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAC;;AAGpG,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAIzB,gBAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAC;AACpC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,KAAK,EAAU;AAC/C,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACjE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AAClD,qBAAC,CAAC;;;AAMN,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAC;;AAGhH,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,KAAI;AAEpI,oBAAA,IAAI,YAAY,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAC,EAAE,CAAC;oBAEvE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,EAAC;;wBAEpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,CAAC;wBACjG,IAAI,CAAC,cAAc,EAAE;AACrB,wBAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAK;;AAE7B,4BAAA,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC;AACvE,4BAAA,IAAI,eAAe,IAAI,IAAI,EAAC;;;gCAI1B,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,WAAW,EAAC;;oCAEvI,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACvD,oCAAA,eAAe,CAAC,MAAM,GAAG,IAAI;oCAC7B,iBAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;oCAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;oCACnC,IAAI,CAAC,eAAe,EAAE;;;AAInB,qCAAA,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,EAAC;;oCAEhF,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACvD,oCAAA,eAAe,CAAC,MAAM,GAAG,IAAI;AAC7B,oCAAA,iBAAiB,CAAC,kBAAkB,GAAG,GAAG,GAAC,YAAY;oCACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;;oCAGnC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wCACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,kBAAkB,GAAG,GAAG;AAC9G,qCAAC,CAAC;oCAEF,IAAI,CAAC,eAAe,EAAE;;;AAInB,qCAAA,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,EAAC;;oCAEhF,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACvD,oCAAA,eAAe,CAAC,MAAM,GAAG,IAAI;oCAC7B,iBAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;oCAChE,IAAI,CAAC,eAAe,EAAE;;gCAGxB,IAAI,CAAC,cAAc,EAAE;;yBAG1B,EAAC,GAAG,CAAC;;yBAGD;;wBAEL,iBAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE;wBACzG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC,CAAC;wBAChG,IAAI,CAAC,cAAc,EAAE;;AAGzB,iBAAC,CAAC;;AAKJ,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAC;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;aAGxB;AAEL,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAC;AAEtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,wDAAwD,EAAE,EAAC,YAAY,EAAE,MAAM,EAAC;qBACnG,SAAS,CAAC,qBAAqB,IAAG;oBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;AAC7C,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAC,EAAE,CAAC;AACjC,iBAAC,CAAC;;;;IAQP,eAAe,GAAA;;AAGb,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACjE,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAE/D,UAAU,CAAC,MAAK;AAAG,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;SAElB,EAAE,IAAI,CAAC;;IAG5B,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI;;AAGnE,IAAA,sBAAsB,CAAC,EAAY,EAAA;;AAIjC,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE/D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAC,EAAE,CAAC,UAAU,CAAC;;AAI7C,IAAA,aAAa,CAAC,IAAS,EAAE,UAAA,GAA4B,EAAE,EAAA;AAErD,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAC;AAClB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAC;;AAE5C,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC;;AAChD,iBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACjF,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC;gBACvF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC;;iBAChD;gBAEL,IAAI,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,EAAC;AAC1D,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;qBAChB;AAEL,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAC;AAC1B,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;yBACjB;AACL,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;;;;aAMtB;;;;IAMT,WAAW,CAAC,GAAG,EAAE,KAAK,EAAA;QAEpB,IAAI,YAAY,GAAG,EAAE;QAErB,IAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,IAAI,IAAI,EAAC;YACrD,YAAY,GAAG,KAAK;;aACf;AACL,YAAA,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC;;AAGrE,QAAA,IAAI,YAAY,IAAI,IAAI,EAAC;YAAE,YAAY,GAAG,EAAE;;QAE5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;;QAKtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAC,KAAK,CAAC,CAAC;;IAG/C,KAAK,GAAA;QACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,eAAe,EAAC,IAAI,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;IAGxB,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;wGAjPb,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,+RCZ9B,u+GAwE4C,EAAA,MAAA,EAAA,CAAA,q4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD5D/B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,u+GAAA,EAAA,MAAA,EAAA,CAAA,q4CAAA,CAAA,EAAA;+EAMX,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,GAAG,EAAA,CAAA;sBAAZ;gBACS,aAAa,EAAA,CAAA;sBAAtB;;AA0OH;AACA,IAAY,mBAIX;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAkB;AAClB,IAAA,mBAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,mBAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAY;AACd,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA;;MEjPY,8BAA8B,CAAA;AAsC/B,IAAA,MAAA;AACA,IAAA,oBAAA;IArCD,cAAc,GAA+B,IAAI;AACjD,IAAA,qBAAqB;AACrB,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,MAAM;IACN,QAAQ,GAAY,KAAK;AACzB,IAAA,MAAM;IACN,oBAAoB,CAA6B;AAEhD,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAGpE,IAAA,UAAU,GAA4B,IAAI,uBAAuB,EAAE;IACnE,aAAa,GAAG,aAAa;IAC7B,kBAAkB,GAAG,kBAAkB;IACvC,aAAa,GAAQ,IAAI;IACzB,cAAc,GAAY,KAAK;IAC/B,aAAa,GAAY,KAAK;IAC9B,qBAAqB,GAAY,KAAK;IACtC,iBAAiB,GAAY,KAAK;IAClC,QAAQ,GAAY,KAAK;;AAGzB,IAAA,iBAAiB;AACjB,IAAA,uBAAuB;AACvB,IAAA,oBAAoB;IACpB,uBAAuB,GAAY,KAAK;AACxC,IAAA,wBAAwB;AAC8B,IAAA,qBAAqB;;AAG5C,IAAA,aAAa;AACN,IAAA,oBAAoB;IAE1D,WACU,CAAA,MAAiB,EACjB,oBAA0C,EAAA;QAD1C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAI9B,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;;;IAIpD,QAAQ,GAAA;QAEN,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAC,IAAI,CAAC,KAAK,CAAC;AAEzD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;QAChC,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,yCAAyC,EAAE;AAEpF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,2BAA2B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,2BAA2B,IAAI,EAAE,EAAC;AACjG,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;;QAGlF,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,EAAC;YACpH,IAAI,CAAC,cAAc,EAAE;;;AAIzB;;;AAGG;IACH,cAAc,GAAA;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrC;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,KAAgB,EAAA;QACpC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YACjF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;;aACvD;AACL,YAAA,OAAO,IAAI;;;AAIf;;;;;;AAMC;IACD,4BAA4B,CAAC,MAA6C,EAAE,KAAgB,EAAA;QAC1F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,MAAM,EAAE;AAC3C,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;;aAC/B;AACL,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,QAAQ;;AAGhD,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC3E,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;;AAGJ;;;;;AAKG;AACH,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,MAAM,SAAS,GAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1E,YAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,EAAE;AACvE,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,MAAM;;iBACrD;gBACL,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC3B,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;;gBAE7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAGvC,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;;AAGrC,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,IAAG;AACvC,gBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,oBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;;AAEvC,aAAC,CAAC;;;;AAKN,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAInC,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrC,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGnB,IAAA,eAAe,CAAC,KAAU,EAAA;AAExB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,EAAC;YAAE;;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAC;AAAE,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;;IAI3I,cAAc,GAAA;AACZ,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QAE/B,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;AACjD,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;QACF,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;QACF,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;QACF,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC5B,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AAEJ,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,qBAAqB,EACxD,mBAAmB,EACnB,CAAC,GAAQ,KAAI;AAEX,YAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAC;AACzC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB;;AAGF,YAAA,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO;;YAIzB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,IAAI,IAAI;gBACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,uBAAuB,IAAI,IAAI;gBACjF,IAAI,CAAC,cAAc,IAAI,IAAI;AAC3B,gBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,IAAI,EAAC;AAC/C,gBAAA,IAAI,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,uBAAuB,CAAC;AACvG,gBAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;AACrK,gBAAA,IAAI,mBAAmB,IAAI,IAAI,EAAC;;oBAG9B,OAAO,GAAG,EAAE;oBACZ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACpC,wBAAA,IAAI,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpE,wBAAA,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,IAAI,mBAAmB,EAAC;AACxE,4BAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;AAExB,qBAAC,CAAC;;;;YAQN,IAAI,MAAM,GAAG,IAAI;AACjB,YAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAC;AACtB,gBAAA,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;;AACrB,iBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,IAAI,yBAAyB,CAAC,aAAa,CAAC,EAAC;AACjG,gBAAA,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;;iBACrB;AACL,gBAAA,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;;;AAI5B,YAAA,IAAI,MAAM,IAAI,IAAI,EAAC;gBAAE;;YAErB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC;AACrF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;SAErB,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;wGA3PM,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,+pBCrB3C,oiKAwFc,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mCAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sCAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnED,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,oiKAAA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA;gHAM3B,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBAmBqD,qBAAqB,EAAA,CAAA;sBAA1E,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrB,aAAa,EAAA,CAAA;sBAA3C,YAAY;uBAAC,eAAe;gBACS,oBAAoB,EAAA,CAAA;sBAAzD,YAAY;uBAAC,sBAAsB;;;ME9BzB,sBAAsB,CAAA;AAsCvB,IAAA,GAAA;AACD,IAAA,cAAA;AACC,IAAA,QAAA;AAtCD,IAAA,cAAc;AACd,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,MAAM,GAAW,IAAI,CAAC;AAEtB,IAAA,MAAM,GAAW,IAAI,CAAC;AACtB,IAAA,IAAI,GAAS,IAAI,CAAC;AAClB,IAAA,MAAM,GAAoB,IAAI,CAAC;IAC/B,QAAQ,GAAY,KAAK;IACzB,WAAW,GAAY,KAAK;IAC5B,QAAQ,GAAY,KAAK;IACzB,aAAa,GAAY,KAAK;IAE9B,oBAAoB,CAA6B;AAEhD,IAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAClE,IAAA,oBAAoB,GAAyB,IAAI,YAAY,EAAU;AACvE,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,WAAW,GAA8B,IAAI,YAAY,EAAe;IAElF,SAAS,GAAG,IAAI;IAChB,cAAc,GAAG,IAAI;IACrB,cAAc,GAAG,IAAI;IACrB,MAAM,GAAY,KAAK;IACvB,QAAQ,GAAY,KAAK;IACzB,UAAU,GAAY,KAAK;AAE3B,IAAA,QAAQ;IACR,WAAW,GAAwC,EAAE;IACrD,kBAAkB,GAAG,kBAAkB;IACvC,aAAa,GAAG,aAAa;AAG7B,IAAA,aAAa;AAEb,IAAA,WAAA,CACU,GAAsB,EACvB,cAAoC,EACnC,QAAiB,EAAA;QAFjB,IAAG,CAAA,GAAA,GAAH,GAAG;QACJ,IAAc,CAAA,cAAA,GAAd,cAAc;QACb,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGlB,QAAQ,GAAA;AAGN,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;;;;;;QAOhC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc;AAExD,QAAA,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;AAEvC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC7C,IAAI,CAAC,0BAA0B,EAAE;;aAC5B;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,kBAAkB,EAAE;;;AAK3B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGxD,IAAA,YAAY,CAAC,KAAU,EAAA;;AAErB,QAAA,IAAG,aAAa,CAAC,qBAAqB,EACtC;AACE,YAAA,aAAa,CAAC,eAAe,CAAC,mBAAmB,EAAE;;;;AAKvD;;;AAGG;IACH,cAAc,GAAA;QACZ,OAAO,CAAC,GAAG,CAAC,UAAU,EAAC,IAAI,CAAC,QAAQ,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;;;;;IAMtD,0BAA0B,GAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE;;AAE1B,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;;YAErB,IAAI,CAAC,YAAY,EAAE;;AACd,aAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;;AAE9B,YAAA,IAAI,CAAC,WAAW,EAAE,CAAC;;;;;IAMvB,kBAAkB,GAAA;;AAGhB,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;;YAEnC,IAAI,CAAC,aAAa,EAAE;;aACf;;;;AAIL,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;;;;;AAMpC;;AAEG;AACH,IAAA,cAAc,CAAC,IAAa,EAAA;AAC1B,QAAA,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACzD,IAAI,IAAI,EAAE;;AAER,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;aAClB;;AAEL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,YAAY,CAAU,IAAI,CAAC,MAAO,CAAC;;;;;AAM5C;;;;;AAKG;IACH,MAAM,YAAY,CAAC,KAAa,EAAA;AAC9B,QAAA,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE,KAAK,CAAC;QACrD,aAAa,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC;QACxD,IACE,KAAK,IAAI,IAAI;YACb,IAAI,CAAC,qBAAqB,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAC/C;AACA,YAAA,IAAI,MAAM,GAAc,IAAI,SAAS,EAAE;YACvC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI;YAC5B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AAClC,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC3B,YAAA,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI;YAC7B,MAAM,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAEtE,YAAA,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE;;AAE/B,gBAAA,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;AAClC,gBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;AAC9B,gBAAA,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;AAClC,gBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;;iBACzB;;AAEL,gBAAA,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;AAC1C,gBAAA,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;AACpC,gBAAA,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;AAClC,gBAAA,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;;YAGhC,IAAI,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB;YACnI,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;YAG1D,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc;YAC7G,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAEtD,YAAA,IAAI,mBAAmB,GAAG;AACxB,gBAAA;AACE,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC,iBAAA;aACF;AAED,YAAA,aAAa,CAAC,QAAQ,CAAC,oCAAoC,EAAE,mBAAmB,CAAC;AACjF,YAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAC/C,mBAAmB,EACnB,CAAC,GAAG,KAAI;AACN,gBAAA,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC1B,gBAAA,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,aAAC,CACF;;aACI;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;AAMrC,IAAA,WAAW,CAAC,EAAA,GAAa,IAAI,CAAC,MAAM,EAAA;AAClC,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;AACtE,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;iBACpD;gBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B,aAAa,CAAC,QAAQ,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,CAAC;YAC3D,IAAI,CAAC,YAAY,EAAE;SACpB,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;;;;IAMH,aAAa,GAAA;;AAGX,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE;YAEjB,IAAI,CAAC,MAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;YAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;YAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;YACvC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;;;YAIvC,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CACF;;;;IAKH,qBAAqB,CAAC,iBAA0B,KAAK,EAAA;;AAEnD,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAW,IAAI,CAAC,MAAO,CAAC,KAAK;AACvC,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,UAAU,EAAW,IAAI,CAAC,MAAO,CAAC,OAAO;AACzC,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;QACD,aAAa,CAAC,QAAQ,CAAC,qCAAqC,EAAU,IAAI,CAAC,MAAM,CAAC;AAClF,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,aAAa,CAAC,QAAQ,CAAC,yCAAyC,EAAE,GAAG,CAAC;AACtE,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;AACtE,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;iBACpD;gBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAE7B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EAAE;gBAC3D,IAAI,CAAC,iBAAiB,EAAE;;YAG1B,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;iBACjB;gBACL,IAAI,CAAC,uBAAuB,CAAU,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC;;AAE1D,SAAC,CACF;;;;AAKH,IAAA,uBAAuB,CAAC,QAAgB,EAAA;AAEtC,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC;SACF;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,yBAAyB,EAC5D,mBAAmB,EACnB,CAAC,GAAyB,KAAI;AAC5B,YAAA,aAAa,CAAC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,CAAC;YAE1D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACjC,gBAAA,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,sBAAsB,CAAC,EAAE;oBACzG,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC;;AAE7D,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACxB,SAAC,CACF;;;;IAMH,YAAY,GAAA;QACV,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EAAE;YAC3D,IAAI,CAAC,iBAAiB,EAAE;;QAE1B,aAAa,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;;;AAKxB;;AAEG;IACK,sBAAsB,GAAA;QAC5B,MAAM,gBAAgB,GAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;gBACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;;AAElC,SAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACpC,gBAAA,MAAM,SAAS,GAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,EAAE;AAClD,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;;AAE/B,aAAC,CAAC;;QAEJ,aAAa,CAAC,QAAQ,CAAC,+BAA+B,EAAE,IAAI,CAAC,IAAI,CAAC;QAClE,aAAa,CAAC,QAAQ,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC;;;AAIxE;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACzB,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;;QAE/F,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE,IAAI,CAAC,IAAI,CAAC;;AAG/D;;AAEG;IACK,eAAe,GAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CACrD,IAAI,CAAC,IAAI,CAAC,MAAM,EACP,IAAI,CAAC,MAAO,EACrB,IAAI,CAAC,QAAQ,CACd;QACD,aAAa,CAAC,QAAQ,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,CAAC;;AAG7D;;;AAGG;IACK,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC;aACjI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;AACjB,aAAA,OAAO,CAAC,CAAC,SAAS,KAAI;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,SAAS,CACjC;AACH,SAAC,CAAC;QACJ,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE,IAAI,CAAC,IAAI,CAAC;;;AAU/D;;AAEG;IACK,MAAM,wBAAwB,CAAC,MAAc,EAAA;AAEnD,QAAA,aAAa,CAAC,QAAQ,CAAC,mCAAmC,EAAE,MAAM,CAAC;QACnE,aAAa,CAAC,QAAQ,CAAC,iCAAiC,EAAE,IAAI,CAAC,IAAI,CAAC;AAEpE,QAAA,IAAI,SAAS,GAAG,IAAI,KAAK,EAAU;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI,EAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACpE,QAAA,aAAa,CAAC,QAAQ,CAAC,8CAA8C,EAAE,SAAS,CAAC;;AAIjF,QAAA,IAAI,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AAEvE,QAAA,aAAa,CAAC,QAAQ,CAAC,8CAA8C,EAAE,iBAAiB,CAAC;;AAGzF,QAAA,IAAI,QAAQ,GAAW,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnE,QAAA,aAAa,CAAC,QAAQ,CAAC,qCAAqC,EAAE,QAAQ,CAAC;;QAEvE,MAAM,KAAK,GAAG,cAAc;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qCAAqC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC;AAE7F,QAAA,aAAa,CAAC,QAAQ,CAAC,mCAAmC,EAAE,MAAM,CAAC;;QAEnE,OAAO,MAAM,CAAC;;;;AAMR,IAAA,MAAM,iBAAiB,CAAC,MAAc,EAAE,IAAU,EAAA;AACxD,QAAA,IAAI,iBAAiB,GAAe,EAAE,CAAC;;;QAIvC,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,OAAO,KAAK,KAAI;AACd,YAAA,IAAI;;;;;gBAKF,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;;;;AAMpC,gBAAA,QAAQ,KAAK,CAAC,SAAS;oBACrB,KAAK,aAAa,CAAC,iBAAiB,CAAC;wBAAE;4BACrC,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;;;AAG1C,gCAAA,IAAI,IAAI,GAAG,oBAAoB,CAAC,oBAAoB,CAClD,KAAK,CAAC,OAAO,EACb,MAAM,EACN,IAAI,CACL;AACD,gCAAA,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;oCACrB,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AAC7B,wCAAA,KAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;;yCACxD;wCACY,KAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;;;AAGzD,gCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAoB,KAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AACjF,iCAAA,IAAqB,KAAM,CAAC,UAAU,IAAI,IAAI,IAAqB,KAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;;AAEjG,iCAAA,IAAqB,KAAM,CAAC,WAAW,IAAI,IAAI,IAAqB,KAAM,CAAC,WAAW,IAAI,EAAE,EAAE;;gCAElF,KAAM,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAkB,KAAM,CAAC,WAAW,CAAC;;4BAG5G,IAAI,QAAQ,GAAG,EAAE;;;AAGjB,4BAAA,KAAK,IAAI,GAAG,IAAqB,KAAM,CAAC,UAAU,EAAE;gCAClD,QAAQ,CAAkB,KAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;;AAExC,4BAAA,KAAM,CAAC,UAAU,GAAG,QAAQ;AAC7C,4BAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAqB,KAAM,CAAC,cAAc,EAAE;;gCAExE,IAAI,KAAK,GAAG,EAAE;AACd,gCAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,KAAI;AACxC,oCAAA,KAAK,IAAqB,KAAM,CAAC,UAAU,CAAC,OAAO,CAAC;oCACpD,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AACzD,iCAAC,CAAC;AACF,gCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;;iCAChC;AACL,gCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAoB,KAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;;4BAIxF;;wBACD;oBACD,KAAK,aAAa,CAAC,gBAAgB,CAAC;wBAAE;AACpC,4BAAA,IAAmB,KAAM,CAAC,SAAS,EAAE;AACnC,gCAAA,IAAmB,KAAM,CAAC,gBAAgB,IAAI,IAAI,EAAE;AAClD,oCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;qCAC7C;AACL,oCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;;iCAE/C;AACL,gCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;4BAEpD;;wBACD;oBAED,KAAK,aAAa,CAAC,UAAU,CAAC;wBAAE;AAC9B,4BAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAExD,4BAAA,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;;4BAGnJ,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,aAAa,GAAG,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,GAAG,MAAM;4BAErI;;wBACD;oBAGD,KAAK,aAAa,CAAC,UAAU,CAAC;wBAAE;AAC9B,4BAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;4BAEhE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9B,gCAAA,IAAI,aAAa;AACjB,gCAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;;AAEjC,oCAAA,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AACrJ,oCAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,aAAa,CAAC;;oCAEpD,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,kCAAkC,GAAG,aAAa,GAAG,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,MAAM;;AACzJ,qCAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,iBAAiB,EAAE;oCACrE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,2CAA2C,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,qDAAqD;;qCACrK;AACL,oCAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,qDAAqD;;;;AAK1M,gCAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;4BAG1E;;wBACD;oBAED,KAAK,aAAa,CAAC,sBAAsB,CAAC;wBAAE;;AAG1C,4BAAA,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;;4BAGnJ,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,aAAa,GAAG,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,GAAG,MAAM;4BAErI;;wBACD;oBAED,KAAK,aAAa,CAAC,iBAAiB,CAAC;wBAAE;AACrC,4BAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;AAClC,4BAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAyB,KAAM,CAAC,cAAc,EAAE;gCAC5E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;AAC9C,oCAAA,IAAI,gBAAgB,GAAuC,KAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC;AAC5G,oCAAA,IAAI,gBAAgB,IAAI,IAAI,EAAE;wCAC5B,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,SAAS,GAAG,IAAI;;AAEtE,iCAAC,CAAC;AACF,gCAAA,IAAI,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gCACrD,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;iCAExE;gCACH,IAAI,gBAAgB,GAAuC,KAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtH,gCAAA,IAAI,gBAAgB,IAAI,IAAI,EAAE;oCAC5B,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS;;;4BAI9D;;wBACD;AACD,oBAAA,KAAM,aAAa,CAAC,cAAc,CAAC,EAAC;AAClC,wBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAC,KAAK,CAAC;AACjC,wBAAA,IAAe,KAAM,CAAC,UAAU,IAAE,IAAI,EAAC;AACrC,4BAAA,IAAI,aAAa,GAAa,KAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAC,IAAI,CAAC;4BAClE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,aAAa,CAAC;;6BAEtF;4BACF,IAAgB,KAAM,CAAC,UAAU,IAAG,gBAAgB,CAAC,WAAW,CAAC,EAAE;gCACjE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,YAAY,CAAC;;iCAClF,IAAgB,KAAM,CAAC,UAAU,IAAG,gBAAgB,CAAC,YAAY,CAAC,EAAE;gCACzE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,kBAAkB,CAAC;;iCACxF,IAAgB,KAAM,CAAC,UAAU,IAAG,gBAAgB,CAAC,aAAa,CAAC,EAAE;gCAC1E,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,OAAO,CAAC;;;wBAGtF;;oBAGF,SAAS;AACP,wBAAA,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;;;YAIxD,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEpB,SAAC,CACF;;AAGD,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAEtB,QAAA,aAAa,CAAC,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;;AAEhE,QAAA,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE;AACtC,YAAA,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI;AAC7E,gBAAA,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE;;AAElC,QAAA,OAAO,iBAAiB;;;;IAKlB,mBAAmB,CAAC,MAAc,EAAE,IAAU,EAAA;QACpD,IAAI,QAAQ,GAAW,mBAAmB;;QAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAoB,KAAI;AAC3C,YAAA,aAAa,CAAC,QAAQ,CAAC,mCAAmC,EAAE,SAAS,CAAC;AACtE,YAAA,IAAI,SAAS,CAAC,WAAW,IAAI,IAAI,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,EAAE;AACvE,gBAAA,SAAS,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE;gBACzC,SAAS,CAAC,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY;gBAC3D,SAAS,CAAC,WAAW,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa;gBAC7D,SAAS,CAAC,WAAW,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa;AAC7D,gBAAA,IAAI,SAAS,CAAC,SAAS,EAAE;AACvB,oBAAA,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;;qBAC1G;oBACL,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;oBACvD,SAAS,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS;;;AAGzD,YAAA,IAAI,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE;AACnC,gBAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;AAC3G,gBAAA,aAAa,CAAC,QAAQ,CAAC,mCAAmC,EAAE,UAAU,CAAC;AACvE,gBAAA,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK;;AAExE,YAAA,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE;AACpC,gBAAA,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,GAAG,8CAA8C;AACnI,oBAAA,0CAA0C,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,WAAW,GAAG,UAAU;AAC5H,oBAAA,0CAA0C,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC,IAAI,GAAG,WAAW;AACzH,oBAAA,YAAY;;AACT,iBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,IAAI,SAAS,CAAC,WAAW,CAAC,YAAY,IAAI,qBAAqB,CAAC,4BAA4B,CAAC,EAAE;AACzI,gBAAA,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,GAAG,8CAA8C;AACnI,oBAAA,YAAY;;AAGhB,YAAA,aAAa,CAAC,QAAQ,CAAC,oCAAoC,EAAE,SAAS,CAAC;AACzE,SAAC,CAAC;;QAEF,QAAQ,IAAI,QAAQ;AACpB,QAAA,OAAO,QAAQ;;;AAIT,IAAA,qCAAqC,CAAC,QAAgB,EAAE,iBAA6B,EAAE,KAAK,EAAA;QAClG,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAI;AAC9C,YAAA,OAAe,iBAAiB,CAAC,KAAK,CAAC;AACzC,SAAC,CAAC;;AAGJ,IAAA,KAAK,CAAC,EAAU,EAAA;AACd,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;;IAGhD,MAAM,iBAAiB,CAAC,WAAmB,EAAA;QACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,MAAM,SAAS,GAAG,sBAAsB;YACxC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1C,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,GAAG,GAAG,WAAW;YACrB,GAAG,CAAC,MAAM,GAAG,YAAA;gBACX,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;AACvB,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;AACzB,gBAAA,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM;gBAElC,MAAM,SAAS,GAAG,GAAG;AACrB,gBAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,WAAW;AAExC,gBAAA,MAAM,CAAC,KAAK,GAAG,QAAQ;AACvB,gBAAA,MAAM,CAAC,MAAM,GAAG,SAAS;AACzB,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC;gBAC7C,IAAI,OAAO,GAAG,GAAG;AACjB,gBAAA,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;gBAC1D,OAAO,CAAC,OAAO,CAAC;AAClB,aAAC;AACH,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,IAAI,EAAA;QAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAG5B,YAAA,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,EAAE;AAC7C,gBAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACtE,KAAK,CAAC,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc;;iBACnI;AACL,gBAAA,KAAK,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE;;AAGrC,YAAA,KAAK,CAAC,2BAA2B,GAAG,IAAI;AAE1C,SAAC,CAAC;;;;AAKJ,IAAA,aAAa,CAAC,MAAc,EAAA;QAC1B,IAAI,WAAW,GAAG,IAAI;QAEtB,aAAa,CAAC,QAAQ,CAAC,wCAAwC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEpF,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC9B,YAAA,aAAa,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBACrC,WAAW,GAAG,IAAI;gBAClB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;oBACvC,IAAI,CAAC,WAAW,EAAE;wBAAE;;AACpB,oBAAA,IAAI,aAAa,GAAkB,SAAS,CAAC,aAA8B;AAC3E,oBAAA,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;AACnD,oBAAA,IAAI,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;oBAEtC,IAAI,aAAa,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,cAAc,IAAI,WAAW,EAAE;wBACxE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,cAAc,IAAI,WAAW,EAAE;wBACzE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,cAAc,IAAI,WAAW,EAAE;wBACxE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,cAAc,GAAG,WAAW,EAAE;wBACxE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,cAAc,IAAI,WAAW,EAAE;wBACxE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,cAAc,GAAG,WAAW,EAAE;wBACxE,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;AAGF,oBAAA,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE;wBACvF,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;AAGF,oBAAA,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE;wBAC3F,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE;wBACrD,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,IAAI,WAAW,EAAE;wBACpD,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC/G,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;oBAGF,IAAI,aAAa,IAAI,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC3G,WAAW,GAAG,KAAK;wBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;wBAC3C;;AAGJ,iBAAC,CAAC;AAEF,gBAAA,aAAa,CAAC,QAAQ,CAAC,+BAA+B,EAAE,WAAW,CAAC;gBAEpE,IAAI,WAAW,EAAE;;AAGf,oBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3D,oBAAA,aAAa,CAAC,QAAQ,CAAC,oCAAoC,EAAE,QAAQ,CAAC;AAEtE,oBAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAC;wBACvD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;4BACpC,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;4BACjC,aAAa,CAAC,QAAQ,CAAC,gCAAgC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvE,4BAAA,IAAI,IAAI;4BACR,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,uBAAuB,CAAC,QAAQ,EAAE;gCAC1D,IAAI,GAAG,OAAO;;iCACT;gCACL,IAAI,GAAG,oBAAoB,CAAC,oBAAoB,CAC9C,OAAO,EACP,MAAM,EACN,IAAI,CACL;;AAGH,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;AAEtB,yBAAC,CAAC;;;AAIJ,oBAAA,IAAI,aAAa,GAAgB,IAAI,WAAW,EAAE;oBAClD,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,oBAAA,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,oBAAA,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;AAChC,oBAAA,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAClC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;AAExC,oBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC;AAC/F,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGxC,aAAC,CAAC;;;AAIN,IAAA,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAA;AACnC,QAAA,aAAa,CAAC,QAAQ,CAAC,gEAAgE,EAAE,OAAO,CAAC;AACjG,QAAA,aAAa,CAAC,QAAQ,CAAC,kEAAkE,EAAE,SAAS,CAAC;AACrG,QAAA,aAAa,CAAC,QAAQ,CAAC,+DAA+D,EAAE,MAAM,CAAC;;wGAt4BtF,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAzB,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,2mBC1BnC,kmKAoGc,EAAA,MAAA,EAAA,CAAA,8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,8BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD1ED,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,kmKAAA,EAAA,MAAA,EAAA,CAAA,8EAAA,CAAA,EAAA;+IAMlB,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAeD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,eAAe;;;AEpC/B;MAOa,uBAAuB,CAAA;AAkBzB,IAAA,cAAA;AACA,IAAA,YAAA;AAjBA,IAAA,qBAAqB;AACrB,IAAA,MAAM;IACN,cAAc,GAAG,IAAI;IAE9B,YAAY,GAAc,EAAE;AAC5B,IAAA,IAAI;IACJ,MAAM,GAAY,KAAK;;IAEvB,aAAa,GAAG,aAAa;AAEnB,IAAA,WAAW,GAAuB,IAAI,YAAY,EAAQ;AAGpE,IAAA,aAAa;IAEb,WACS,CAAA,cAAoC,EACpC,YAA0B,EAAA;QAD1B,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAErB,QAAQ,GAAA;QACN,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;AAClD,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;;YAEnC,IAAI,CAAC,aAAa,EAAE;;aACf;;;;;YAKL,IAAI,CAAC,YAAY,EAAE;;;AAIvB;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;;IAIzB,aAAa,GAAA;;AAEX,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,EAAE;YAEpB,IAAI,CAAC,MAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB;;;YAGvD,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,YAAY,EAAE;;AAErB,SAAC,CACF;;IAEH,qBAAqB,GAAA;;AAEnB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAc,IAAI,CAAC,MAAO,CAAC,KAAK;AAC1C,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,UAAU,EAAc,IAAI,CAAC,MAAO,CAAC,OAAO;AAC5C,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YACf,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,YAAY,EAAE;AACrB,SAAC,CACF;;AAGH;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAa,IAAI,CAAC,MAAO,CAAC,kBAAkB,CAAC;AAC1G,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB;;;;;;;;;;;;wGAxGS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA1B,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,oTC/BpC,wbAgBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDea,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,wbAAA,EAAA;mHAMnB,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAQS,WAAW,EAAA,CAAA;sBAApB;gBAGD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,eAAe;;;ME3BlB,qBAAqB,CAAA;AAqBtB,IAAA,oBAAA;AAnBD,IAAA,qBAAqB;AACrB,IAAA,MAAM;IACN,SAAS,GAAc,qBAAqB;AAC5C,IAAA,MAAM;AACN,IAAA,IAAI;IACJ,cAAc,GAAG,IAAI;AACrB,IAAA,wBAAwB;IACxB,QAAQ,GAAY,IAAI;IACxB,oBAAoB,CAA6B;AAEhD,IAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAClE,IAAA,oBAAoB,GAC5B,IAAI,YAAY,EAAU;AAClB,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,WAAW,GAA8B,IAAI,YAAY,EAAe;IAElF,MAAM,GAAG,KAAK;AAEd,IAAA,WAAA,CACU,oBAA0C,EAAA;QAA1C,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAG9B,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,GAAG,KAAK;QAEpD,aAAa,CAAC,QAAQ,CAAC,0CAA0C,EAAE,IAAI,CAAC,wBAAwB,CAAC;AACjG,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,aAAa,CAAC,QAAQ,CAAC,+BAA+B,EAAE,MAAM,CAAC;AAC/D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEnC,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,aAAa,CAAC,QAAQ,CAAC,oCAAoC,EAAE,KAAK,CAAC;AACnE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGvC,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGnB,IAAA,aAAa,CAAC,EAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;wGAhDhB,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,keClBlC,ixCAiCe,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA6B,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDfF,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,ixCAAA,EAAA;sFAMpB,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;gBAES,GAAG,EAAA,CAAA;sBAAZ;gBACS,WAAW,EAAA,CAAA;sBAApB;;;AElCH;;;;;AAKG;MACU,UAAU,CAAA;AACnB,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,MAAM,GAAkB,IAAI,KAAK,EAAU;IAC3C,OAAO,GAAY,IAAI;AAC1B;MAEY,MAAM,CAAA;AACf,IAAA,CAAC;AACD,IAAA,CAAC;AACD,IAAA,KAAK;AACL,IAAA,IAAI;AACP;;MCNY,cAAc,CAAA;AA2Bf,IAAA,QAAA;IAxBV,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC;;AAGlC,IAAA,IAAI,GAAkB,IAAI,KAAK,EAAU;IACxC,KAAK,GAAW,EAAE;IAElC,UAAU,GAAW,SAAS;IAC9B,SAAS,GAAW,SAAS;IAE7B,CAAC,CAAS;IACV,CAAC,CAAS;IACV,KAAK,CAAS;IACd,gBAAgB,CAAgB;AAIhC,IAAA,iBAAiB;IAEjB,MAAM,GAAY,KAAK;IACvB,OAAO,GAAW,CAAC;AAEnB,IAAA,WAAA,CACU,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGlB,QAAQ,GAAA;QAEN,IAAI,IAAI,GAAG,IAAI;;QAGf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAC;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC;;;AAInD,IAAA,SAAS,CAAC,KAAa,EAAA;QAErB,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC;QAE9C,IAAI,iBAAiB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9C,IAAI,iBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,KAAK;AACpC,QAAA,IAAI,oBAAoB,GAAG,IAAI,CAAC,IAAI;AAEpC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAU;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QAEf,oBAAoB,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,GAAG,EAAE;AACV,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE;AACnD,gBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAExC,IAAI,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AACZ,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI;;AACb,iBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI;;;;AAKtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtD,CAAC,EAAE,IAAI,CAAC,CAAC,GAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpB,wBAAA,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK;AACpC,wBAAA,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC/B,qBAAA,CAAC;;;;;;;;QASR,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA,MAAM,EAAE,CAAC;AACP,oBAAA,KAAK,EAAE;wBACL,cAAc,EAAE,IAAI,CAAC,sBAAsB;AAC5C,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA;AACE,4BAAA,cAAc,EAAE,IAAI;AACpB,4BAAA,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,IAAI,CAAC,UAAU;AACtB,4BAAA,YAAY,EAAE,IAAI;AAClB,4BAAA,gBAAgB,EAAE,MAAM;AACxB,4BAAA,UAAU,EAAE,MAAM;AAClB,4BAAA,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC,KAAK;4BAChC,UAAU,EAAE,IAAI,CAAC;AAClB,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,QAAQ;AACd,4BAAA,UAAU,EAAE,oBAAoB;4BAChC,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE;iBACV,CAAC;AACF,YAAA,aAAa,EAAE;AACb,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,OAAO,EAAE;AACV;AACF,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,mBAAmB,EAAE;AACtB;SACF;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB,IAAA,sBAAsB,CAAC,CAAC,EAAA;QACtB,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK;AAEhB,QAAA,IAAI,OAAO,GAAW,IAAI,CAAC,WAAW,EAAE;QACxC,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1C,QAAA,IAAI,cAAsB;AAC1B,QAAA,IAAI,QAAQ,GAAG,EAAE,EAAE;AACnB,YAAA,cAAc,GAAG,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE;;aACnC;AACP,YAAA,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE;;AAEpC,QAAA,IAAI,MAAM,GAAW,IAAI,CAAC,OAAO,EAAE;AACnC,QAAA,IAAI,YAAoB;AACxB,QAAA,IAAI,MAAM,GAAG,EAAE,EAAE;AACjB,YAAA,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE;;aAC/B;AACP,YAAA,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;;AAEhC,QAAA,IAAI,OAAO,GAAW,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAA,IAAI,aAAqB;AACzB,QAAA,IAAI,OAAO,GAAG,EAAE,EAAE;AAClB,YAAA,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE;;aACjC;AACP,YAAA,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;;AAElC,QAAA,IAAI,SAAS,GAAW,IAAI,CAAC,UAAU,EAAE;AACzC,QAAA,IAAI,eAAuB;AAC3B,QAAA,IAAI,SAAS,GAAG,EAAE,EAAE;AACpB,YAAA,eAAe,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE;;aACrC;AACP,YAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,EAAE;;QAGtC,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,aAAa,GAAI,GAAG,GAAG,eAAe;AAE1H,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;;QAExB,KAAK,IAAI,GAAG;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;;;AAK1B,QAAA,OAAO,KAAK;;wGAvLH,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA/B,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,qJCZ3B,iNAC2G,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDW9F,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,OAAO,EAAA,QAAA,EAAA,iNAAA,EAAA;+EAQjB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;gBAM1B,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM;gBACG,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO;;;MEJH,eAAe,CAAA;AA+BhB,IAAA,oBAAA;AACA,IAAA,QAAA;AA9BD,IAAA,cAAc;AACd,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,MAAM,GAAW,IAAI,CAAC;AACtB,IAAA,IAAI,GAAS,IAAI,CAAC;AAE3B,IAAA,cAAc;IAEd,MAAM,GAAY,KAAK;IACvB,SAAS,GAAY,KAAK;AAE1B,IAAA,SAAS,GAAS,IAAI,IAAI,EAAE;AAC5B,IAAA,SAAS,GAAS,IAAI,IAAI,EAAE;AAC5B,IAAA,UAAU;AACV,IAAA,UAAU;AAEV,IAAA,MAAM,GAAsB,IAAI,KAAK,EAAc;AACnD,IAAA,cAAc;AACd,IAAA,uBAAuB;IAEvB,OAAO,GAAqB,IAAI;IAChC,eAAe,GAAqB,IAAI;;IAGxC,KAAK,GAAG,QAAQ;IAChB,QAAQ,GAAG,YAAY;AACvB,IAAA,IAAI;IAEJ,WACU,CAAA,oBAA0C,EAC1C,QAAkB,EAAA;QADlB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGlB,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAC;YACtB,IAAI,CAAC,WAAW,EAAE;;aACb;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;;AAItB;;;AAGG;IACH,WAAW,GAAA;QACT,IACE,IAAI,CAAC,MAAM;AACX,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAChC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD;AACA,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AAEZ,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;gBAEf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7F,oBAAA,IAAI,UAAU,GAAe,IAAI,UAAU,EAAE;AAC7C,oBAAA,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK;AAC7B,oBAAA,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AAC1C,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,iBAAC,CAAC;gBAEF,IAAI,CAAC,kBAAkB,EAAE;AAE3B,aAAC,EACD,CAAC,GAAG,KAAI;AACR,aAAC,CACF;;;AAIL,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AAED,QAAA,IACE,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD;;AAEA,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD,mBAAmB,EACnB,CAAC,GAAqB,KAAI;AACxB,gBAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AACpB,aAAC,CACF;;AACI,aAAA,IACL,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,4BAA4B,EAC/D;;AAEA,YAAA,IAAI,mBAAmB,GAAG;AACxB,gBAAA;AACE,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACtC,oBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,iBAAA;aACF;AAED,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,4BAA4B,EAC/D,mBAAmB,EACnB,CAAC,GAAqB,KAAI;AACxB,gBAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,aAAC,CACF;;aACI;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;;;IAIhE,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9E,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,kBAAkB,GAAA;;QAEhB,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI,EAAG,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,EAAU,CAAC,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAC,YAAY,CAAC;AACtE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAC,YAAY,CAAC;;AAGtE,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAC;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;;;AAIxG,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAC;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;;;QAIxG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACtC,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACtD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBAC7C,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAC;AACnC,oBAAA,IAAI,MAAM,GAAW,IAAI,MAAM,EAAE;oBACjC,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACtC,oBAAA,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/C,oBAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC,aAAa,CAAC;AAC9D,oBAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AAC1B,oBAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE7B,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;wGAnLzC,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,8LCjB5B,k4FAyDa,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDxCA,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,QAAQ,EAAA,QAAA,EAAA,k4FAAA,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA;+GAMT,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;;;MEuBU,2BAA2B,CAAA;AA8D5B,IAAA,oBAAA;AACA,IAAA,cAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,QAAA;AAjED,IAAA,cAAc;AACd,IAAA,qBAAqB;AAC9B,IAAA,wBAAwB;AACf,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,MAAM;IACN,IAAI,GAAS,IAAI;IACjB,uBAAuB,GAAa,IAAI;AACxC,IAAA,eAAe,GAAwB,IAAI,KAAK,EAAgB;IAChE,QAAQ,GAAY,IAAI;IACxB,OAAO,GAAqB,IAAI;IAChC,eAAe,GAAQ,IAAI;IAC3B,oBAAoB,CAA6B;AAE1D,IAAA,kBAAkB,GAChB,IAAI,yCAAyC,EAAE;IACjD,SAAS,GAAG,IAAI;;IAEhB,IAAI,GAAG,KAAK;AACZ,IAAA,cAAc;AACd,IAAA,MAAM;IACN,UAAU,GAAY,KAAK;AAC3B,IAAA,cAAc,GAAc,IAAI,KAAK,EAAW;IACzC,aAAa,GAAkB,IAAI;IAC1C,mBAAmB,GAAG,KAAK;IAC3B,iBAAiB,GAAG,KAAK;AAGoB,IAAA,YAAY;AAEzD,IAAA,OAAO,GAAG,IAAI,KAAK,EAAgB;AACnC,IAAA,MAAM;AACN,IAAA,OAAO,GAAwB,IAAI,KAAK,EAAgB;IACxD,WAAW,GAAY,KAAK;AAEmB,IAAA,aAAa;AAC5D,IAAA,gBAAgB;AAEiC,IAAA,eAAe;AAChE,IAAA,kBAAkB;AAElB,IAAA,QAAQ;IACR,YAAY,GAAY,KAAK;;AAGnB,IAAA,mBAAmB,GAGxB,IAAI,YAAY,EAAyC;AAEpD,IAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;AACjE,IAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAClE,IAAA,oBAAoB,GAAyB,IAAI,YAAY,EAAU;AACvE,IAAA,WAAW,GAAsB,IAAI,YAAY,EAAO;AACxD,IAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ;AAC3D,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,WAAW,GAA8B,IAAI,YAAY,EAAe;IAElF,WACU,CAAA,oBAA0C,EAC1C,cAAiC,EACjC,MAAiB,EACjB,MAAc,EACd,aAA4B,EAC5B,QAAkB,EAAA;QALlB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGlB,QAAQ,GAAA;;;;QAKN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB;QAChE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;QAE9C,IAAI,CAAC,wBAAwB,GAAG,IAAI,0BAA0B,CAC5D,IAAI,CAAC,qBAAqB,CAAC,SAAS,EACpC,IAAI,CAAC,qBAAqB,CAAC,cAAc,EACzC,IAAI,CAAC,qBAAqB,CAAC,cAAc,EACzC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EACjC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAC3C,IAAI,CAAC,qBAAqB,CAAC,cAAc,EACzC,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAC3C;;QAED,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,wBAAwB,EAAE;;;;;AAUjC,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAIhC,QAAA,IACE,OAAO,CAAC,gBAAgB,CAAC,IAAI,SAAS;YACtC,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,IAAI,KAAK,EAC9C;YACA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,YAAY;YACnE,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;IAG7B,wBAAwB,GAAA;QACtB,IAAI,CAAC,OAAO,GAAG;AAEb,YAAA;AACE,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAChJ,gBAAA,YAAY,EAAE,kBAAkB;gBAChC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAI;oBACxB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;;AAEzC,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI;AACvC,gBAAA,YAAY,EAAE,kBAAkB;gBAChC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAI;oBACxB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC;;AAE1C,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS;AAC5C,gBAAA,YAAY,EAAE,uBAAuB;gBACrC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAI;oBACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC;;AAE/C,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM;AACzC,gBAAA,YAAY,EAAE,oBAAoB;gBAClC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAI;AACxB,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;;AAElC;SAEF;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;;AAGjF,IAAA,WAAW,CAAC,EAAA,GAAa,IAAI,CAAC,MAAM,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACrB,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;qBACpD;oBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;gBACtB,IAAI,CAAC,gBAAgB,EAAE;aACxB,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;aACI;YACL,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B;;AAEG;IACK,gBAAgB,GAAA;;;AAGtB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,kBAAkB,EAAE;;aACpB;;AAEL,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAI3C;;;;;AAKG;AACH,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AAED,QAAA,IACE,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD;;AAEA,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,EACtD,mBAAmB,EACnB,CAAC,GAAqB,KAAI;;AAExB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAChC,aAAC,CACF;;AACI,aAAA,IACL,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,4BAA4B,EAC/D;;AAEA,YAAA,IAAI,mBAAmB,GAAG;AACxB,gBAAA;AACE,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACtC,oBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,iBAAA;aACF;AAED,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,4BAA4B,EAC/D,mBAAmB,EACnB,CAAC,GAAqB,KAAI;;AAExB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAChC,aAAC,CACF;;aACI;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;;;AAIxD,IAAA,oBAAoB,CAAC,GAAqB,EAAA;QAChD,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,KAAK,EAAU;AAChD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAS;AAChC,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;;AAEhB,YAAA,IAAI,MAAM,GAAW,IAAI,MAAM,EAAE;;YAEjC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACvC,YAAA,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAChB,YAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACtB,YAAA,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;AAC1B,YAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACxB,YAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;AAE/E,YAAA,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB;;AAEhD,YAAA,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,IAAI,EAAE,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE;AACtH,YAAA,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE;YAC9G,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAEvC,IAAI,aAAa,GAAG,KAAK;AACzB,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;gBAChC,aAAa,GAAG,IAAI;AACpB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;oBACnD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;wBACvG,aAAa,GAAG,KAAK;;AAEzB,iBAAC,CAAC;;YAGJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAClG,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,UAAU,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,SAAC,EAAE,CAAC,CAAC,CAAC;;IAGR,WAAW,CAAC,KAAU,EAAE,MAAc,EAAA;;AAEpC,QAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE;;AAExC,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACpC;;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI;AACnB,YAAA,KAAK,CAAC,SAAS,GAAG,qBAAqB;;;;;aAIlC;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,KAAK;AACpB,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;;;AAI1B;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,MAAc,EAAE,QAAiB,EAAE,CAAC,EAAA;;AAEnD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;;;AAGxE,IAAA,UAAU,CAAC,KAAY,EAAE,QAAiB,EAAE,CAAC,EAAE,EAAS,EAAA;QACtD,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;;AAEpB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAEnB,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,qBAAqB,EAAE;AAC5C,YAAA,KAAK,CAAC,MAAM,GAAG,KAAK;AACpB,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;;aACjB;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI;AACnB,YAAA,KAAK,CAAC,SAAS,GAAG,qBAAqB;;QAEzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;;;AAGxE,IAAA,UAAU,CAAC,KAAY,EAAE,QAAiB,EAAE,CAAC,EAAE,EAAS,EAAA;QACtD,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;;AAGpB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;QACzB,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACtG,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAEnB,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,mBAAmB,EAAE;AAC1C,YAAA,KAAK,CAAC,MAAM,GAAG,KAAK;AACpB,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;;aACjB;AACL,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI;AACnB,YAAA,KAAK,CAAC,SAAS,GAAG,mBAAmB;;QAEvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;;;AAIxE,IAAA,gBAAgB,CAAC,EAAS,EAAE,QAAkB,EAAE,MAAW,EAAA;QACzD,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;QACpB,QAAQ,CAAC,MAAM,CAAC;;AAGlB;;;AAGG;AACH,IAAA,eAAe,CAAC,KAAY,EAAE,QAAiB,EAAE,CAAC,EAAE,EAAS,EAAA;QAC3D,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;;AAIpB,QAAA,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM;AAElC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,OAAO;AACnB,SAAA,CAAC;;AAIJ;;;AAGG;IACH,YAAY,CAAC,MAAc,EAAE,EAAS,EAAA;QACpC,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGlC;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;;;AAIvC;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;;AAE3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEnC,IAAA,iBAAiB,CAAC,KAAK,EAAA;;AAErB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlC;;;;;;;;AAQG;AACH,IAAA,oBAAoB,CAAC,KAA4C,EAAA;AAE/D,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAE9B,QAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,GAAG,KAAK;QACpD,IAAI,CAAC,wBAAwB,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,QAAQ;AAC9D,QAAA,IAAI,CAAC,wBAAwB,CAAC,SAAS,GAAG,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,IACE,IAAI,CAAC,qBAAqB;gBAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD;;AAEA,gBAAA,IAAI,mBAAmB,GAAG;AACxB,oBAAA;AACE,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AAC9B,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;AACD,oBAAA;AACE,wBAAA,SAAS,EAAE,SAAS;AACpB,wBAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAChC,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;iBACF;AACD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,oBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;oBACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,oBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,wBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;yBACpD;wBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;;AAI3C,oBAAA,IAAI,mBAAmB,GAAG;AACxB,wBAAA;AACE,4BAAA,SAAS,EAAE,IAAI;AACf,4BAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;AAC3B,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;qBACF;AACD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;wBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;wBACtD,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;wBAC/B,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;wBACrC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;wBACvC,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AAEzC,wBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,qBAAC,CACF;AACH,iBAAC,CACF;;iBACI;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;;aAEf;AACL,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;qBACpD;oBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;aACnB,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;;;;;IAQL,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAC;AACpC,gBAAA,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAC,aAAa,CAAC,CAAC,KAAK,EAAE;;AAEvE,SAAC,CAAC;;IAGJ,YAAY,GAAA;;QAEV,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5B,YAAA,IAAG,KAAK,CAAC,SAAS,GAAG,mBAAmB,EAAC;AACvC,gBAAA,KAAK,CAAC,SAAS,GAAG,qBAAqB;;AAE3C,SAAC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAA8B,IAAI,KAAK,EAAsB;QACtF,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE9B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;iBACpD;gBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3D,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,SAAS,EAAE,OAAO;AACnB,aAAA,CAAC;AAEJ,SAAC,EACD,CAAC,GAAG,KAAI;AACN,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAC7C,SAAC,CACF;;IAGH,UAAU,GAAA;AAER,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC/D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;;;IAIJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;;AAGjC,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;QAClE,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGnC,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;QAClE,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGnC,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAC;YAEzG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvD,gBAAA,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,EAAC;oBAEhC,MAAM,KAAK,GAAG,WAAW;AAAC,oBAAA,CAAC;;oBAG3B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC9B,IAAI,KAAK,EAAE;AACT,wBAAA,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AACtB,wBAAA,IAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAC;4BAChC,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAClC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9B,4BAAA,GAAG,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAI,GAAG,GAAG,KAAK;;;yBAErO;wBACL,GAAG,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAI,GAAG,GAAG,IAAI;;;AAKvK,aAAC,CAAC;;;AAKF,QAAA,OAAO,GAAG;;AAGZ,IAAA,aAAa,CAAC,EAAO,EAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG7B,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG5B,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGnB,IAAA,aAAa,CAAC,EAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;wGAzqBhB,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA9B,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA8B,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA5B,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,ykCC9CxC,4rOAmLA,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA9B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDrIa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,4rOAAA,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA;yNAMxB,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAEQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAgB4C,YAAY,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAOI,aAAa,EAAA,CAAA;sBAA3D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAGI,eAAe,EAAA,CAAA;sBAA/D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAOrC,mBAAmB,EAAA,CAAA;sBAA5B;gBAKS,cAAc,EAAA,CAAA;sBAAvB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBACS,WAAW,EAAA,CAAA;sBAApB;;;MEhGU,gBAAgB,CAAA;AAIP,IAAA,cAAA;AAFpB,IAAA,SAAS;AAET,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc;;IAElC,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;;wGAPrC,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,kECT7B,0GAEM,EAAA,MAAA,EAAA,CAAA,ggDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FDOO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,0GAAA,EAAA,MAAA,EAAA,CAAA,ggDAAA,CAAA,EAAA;;;MEM3B,yBAAyB,CAAA;AAShB,IAAA,oBAAA;AAPX,IAAA,cAAc;AACN,IAAA,MAAM;AACd,IAAA,qBAAqB;;AAGpB,IAAA,UAAU,GAAyB,IAAI,YAAY,EAAU;AAC7B,IAAA,eAAe;AACzD,IAAA,WAAA,CAAoB,oBAA0C,EAAA;QAA1C,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAExC,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;;IAEpB,0BAA0B,GAAA;AACxB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;QAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;;AAGzE,IAAA,WAAW,CAAC,EAAA,GAAa,IAAI,CAAC,MAAM,EAAA;AAEjC,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;SAC1D,EACD,CAAC,GAAG,KAAM,GAAC,CACZ;;IAGJ,QAAQ,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;wGAxCvC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,8TCXtC,qmBAeA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDJa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,qmBAAA,EAAA;sFAMrB,cAAc,EAAA,CAAA;sBAAtB;gBACgB,MAAM,EAAA,CAAA;sBAAtB,KAAK;uBAAC,QAAQ;gBACN,qBAAqB,EAAA,CAAA;sBAA7B;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBACyC,eAAe,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEhB7B,SAAS,CAAA;AAClB,IAAA,SAAS;AACT,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,aAAa;AAChB;MAEY,eAAe,CAAA;AACxB,IAAA,UAAU,GAAqB,IAAI,KAAK,EAAa;AACrD,IAAA,eAAe;AACf,IAAA,gBAAgB;AACnB;;MCDY,2BAA2B,CAAA;;IAGtC,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;;AAEH,IAAA,KAAK;AACL,IAAA,MAAM;IACf,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;AAEH,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IACzE,aAAa,GAAG,YAAY;AAElB,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;AAEhC,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;;IAEnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlF,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,KAAK,YAAY,CAAC,KAAK;AACrB,gBAAA,OAAO,OAAO;YAChB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,UAAU;YACnB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,KAAK;YACd,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,MAAM;;;AAIrB;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGAxFF,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,mLCbxC,w2CA4CA,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Ba,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,w2CAAA,EAAA,MAAA,EAAA,CAAA,6TAAA,CAAA,EAAA;wDAYvB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAMS,YAAY,EAAA,CAAA;sBAArB;gBAGS,YAAY,EAAA,CAAA;sBAArB;;;MEjBU,8BAA8B,CAAA;AAEhC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,eAAe,GAAU,EAAE;IAC3B,iBAAiB,GAA+B,EAAE;IAClD,oBAAoB,GAAG,oBAAoB;AAC3C,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;;AAGlC,IAAA,aAAa;AACb,IAAA,aAAa;AAEb,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;;;IAIjB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AAC7E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;AAGf;;AAEE;IACM,0BAA0B,GAAA;QAEhC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAC,IAAI,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAC,GAAG,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,mBAAmB,CAAC,SAAS,GAAG,mBAAmB,CAAC,OAAO;AAC1H,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAC,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS;YACnF,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;AAE5D,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAC,GAAG;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,SAAS;YACvF,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAChE,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAG,KAAK,EAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;iBAChJ;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;aACxC;AACH,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;AAIxC;;AAEE;IACM,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;wGAvGxE,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,wJCd3C,ojCAeM,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDDO,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,ojCAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;wDAM1B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEPU,8BAA8B,CAAA;AAChC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,eAAe,GAAU,EAAE;IAC3B,oBAAoB,GAAG,oBAAoB;AAC3C,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;;AAGlC,IAAA,aAAa;AACb,IAAA,aAAa;AAEb,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;;;IAIjB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGjF;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;QAE1D,IAAI,IAAI,CAAC,eAAe,IAAK,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AAC9D,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAC9C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;AAGf;;AAEE;;;;;;;;;;;;;;;;;;;AAqBF;;AAEE;IACM,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;wGA9FxE,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,wJCX3C,0uBAaA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDFa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,0uBAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;wDAK1B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEFU,2BAA2B,CAAA;AAE7B,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IAEnE,oBAAoB,GAAG,iBAAiB;AACxC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;IAEhC,KAAK,GAAG,QAAQ;IAChB,QAAQ,GAAG,YAAY;AACvB,IAAA,IAAI;IAEJ,YAAY,GAAW,IAAI;AAE3B,IAAA,WAAA,GAAA;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,eAAe,EAAE;;AAGxB;;;AAGG;IACK,WAAW,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU;YAC3B,KAAK,gBAAgB,CAAC,WAAW,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,YAAY,CAAC;AACjC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,cAAc;gBACnC;;;AAIR;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AAC7E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;IAGf,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;;aACpC;YACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAC;AACzD,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;YAElC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAC;AAC1D,gBAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB;;YAExC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAC;AAC3D,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;;;wGA3FpB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,qJCZxC,8zBAYM,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDAO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,8zBAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;wDAMvB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEJU,gCAAgC,CAAA;AAClC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAA4B,IAAI,YAAY,EAAa;IAC/E,eAAe,GAAU,EAAE;IAC3B,sBAAsB,GAAG,sBAAsB;AAC/C,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;;AAGlC,IAAA,aAAa;AACb,IAAA,aAAa;IAEb,SAAS,GAAuE,EAAE;AAElF,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,YAAY,EAAE;;;IAInB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGjF;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;QAE1D,IAAI,IAAI,CAAC,eAAe,IAAK,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AAC9D,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;AAGf;;AAEE;IACQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;AAGpF;;AAEE;IACM,YAAY,GAAA;QACnB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAC;YAChC,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChG,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;iBAC1E;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAKvE,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;AAC1B,YAAA,MAAM,IAAI,GAAW,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;YAGrG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;;;AAGzD,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;;AAGvE,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE;;AAEzE,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;;AAK5E,IAAA,sBAAsB,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AAC9E,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;AAGrF,IAAA,4BAA4B,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AACpF,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;wGAjIlF,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,2JCZ7C,8zBAaM,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDDO,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,8zBAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;wDAK7B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEFU,+BAA+B,CAAA;;IAG1C,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;;AAEH,IAAA,KAAK;AACL,IAAA,MAAM;IACf,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;AAEH,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;IACzE,aAAa,GAAG,YAAY;AAElB,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;AAEhC,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;;IAEnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlF,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,KAAK,YAAY,CAAC,KAAK;AACrB,gBAAA,OAAO,OAAO;YAChB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,UAAU;YACnB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,KAAK;YACd,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,MAAM;;;AAIrB;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGAxFF,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,uLCb5C,w4CA2CA,EAAA,MAAA,EAAA,CAAA,uYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9Ba,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,w4CAAA,EAAA,MAAA,EAAA,CAAA,uYAAA,CAAA,EAAA;wDAY3B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAMS,YAAY,EAAA,CAAA;sBAArB;gBAGS,YAAY,EAAA,CAAA;sBAArB;;;MEpBU,iCAAiC,CAAA;AAEnC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;IAEhC,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAInE;;AAEG;AAED,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGA1CJ,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,2JCX9C,EAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,CAAA;;4FDWa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,EAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;8BAM7B,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEJU,4BAA4B,CAAA;AAE9B,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;IAEhC,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAInE;;AAEG;AAED,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGA1CJ,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,sJCXzC,EAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA,CAAA;;4FDWa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,EAAA,EAAA,MAAA,EAAA,CAAA,gSAAA,CAAA,EAAA;8BAMxB,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEJU,qCAAqC,CAAA;AAEvC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;IAEhC,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAInE;;AAEG;AAED,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGA1CJ,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,iKCXlD,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDWa,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBALjD,SAAS;+BACE,kCAAkC,EAAA,QAAA,EAAA,EAAA,EAAA;8BAMnC,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEFU,oCAAoC,CAAA;;AAEtC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAA4B,IAAI,YAAY,EAAa;IAC/E,eAAe,GAAU,EAAE;IAC3B,+BAA+B,GAAG,0BAA0B;AAC5D,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;;AAGlC,IAAA,aAAa;AACb,IAAA,aAAa;IAEb,SAAS,GAAuE,EAAE;AAElF,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,YAAY,EAAE;;;IAInB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGjF;;AAEE;IACF,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;QAE1D,IAAI,IAAI,CAAC,eAAe,IAAK,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AAC9D,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAIjE;;AAEG;AAEH,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;AAGf;;AAEE;IACQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;AAGpF;;AAEE;IACM,YAAY,GAAA;QACnB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAC;YAChC,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChG,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;iBAC1E;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CACvC,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAKvE,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;AAC1B,YAAA,MAAM,IAAI,GAAW,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;;;YAGrG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;;;AAGzD,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;;;AAMxE,IAAA,sBAAsB,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AAC9E,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;AAGrF,IAAA,4BAA4B,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,IAAI,EAAA;AACpF,QAAA,IAAI,gBAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACxG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;;aAClE;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;;QAE3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;wGA9HlF,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,+JCbjD,s4BAaS,EAAA,MAAA,EAAA,CAAA,uWAAA,CAAA,EAAA,CAAA;;4FDAI,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBALhD,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,s4BAAA,EAAA,MAAA,EAAA,CAAA,uWAAA,CAAA,EAAA;wDAMjC,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEDU,+BAA+B,CAAA;AAuBhC,IAAA,MAAA;AArBD,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,MAAM;AACL,IAAA,YAAY,GAA4B,IAAI,YAAY,EAAa;AAE/E,IAAA,UAAU,GAA4B,IAAI,uBAAuB,EAAE;IACnE,aAAa,GAAG,aAAa;;AAG7B,IAAA,iBAAiB;AACjB,IAAA,uBAAuB;AACvB,IAAA,oBAAoB;IACpB,uBAAuB,GAAY,KAAK;AACxC,IAAA,wBAAwB;AAC8B,IAAA,qBAAqB;;AAG5C,IAAA,aAAa;AACN,IAAA,oBAAoB;AAE1D,IAAA,WAAA,CACU,MAAiB,EAAA;QAAjB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;QAChC,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,yCAAyC,EAAE;;AAGtF;;;AAGG;AACH,IAAA,cAAc,CAAC,EAAE,EAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG5B;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,KAAgB,EAAA;QACpC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YACjF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;;aACvD;AACL,YAAA,OAAO,IAAI;;;wGAjDJ,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzC,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,4eChB5C,s8EAuCmC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qCAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDvBtB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,s8EAAA,EAAA;gFAM5B,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAWqD,qBAAqB,EAAA,CAAA;sBAA1E,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrB,aAAa,EAAA,CAAA;sBAA3C,YAAY;uBAAC,eAAe;gBACS,oBAAoB,EAAA,CAAA;sBAAzD,YAAY;uBAAC,sBAAsB;;;MEbzB,4BAA4B,CAAA;AA+C7B,IAAA,GAAA;AACD,IAAA,cAAA;AA9CA,IAAA,cAAc;AACd,IAAA,qBAAqB;AACrB,IAAA,MAAM;AACN,IAAA,eAAe,GAAwB,IAAI,KAAK,EAAgB;AAEhE,IAAA,MAAM,GAAW,IAAI,CAAC;AACtB,IAAA,IAAI,GAAS,IAAI,CAAC;AAClB,IAAA,MAAM,GAAoB,IAAI,CAAC;IAC/B,QAAQ,GAAY,KAAK;AACzB,IAAA,kBAAkB,GAA8C,IAAI,yCAAyC,CAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC;AAC3I,IAAA,oBAAoB,GAA0C,qCAAqC,CAAC,iBAAiB;;IAG9H,QAAQ,GAAW,GAAG;IACtB,SAAS,GAAW,CAAC;IACrB,UAAU,GAAkB,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;AAEzC,IAAA,cAAc,GAAmB,IAAI,cAAc,EAAE;IAErD,SAAS,GAAG,IAAI;IAChB,cAAc,GAAG,IAAI;IACrB,cAAc,GAAG,IAAI;IACrB,mBAAmB,GAAG,IAAI;IAC1B,MAAM,GAAY,KAAK;IACvB,YAAY,GAAY,KAAK;IAC7B,aAAa,GAAqB,IAAI;AACtC,IAAA,qBAAqB,GAAe,IAAI,KAAK,EAAO;AACpD,IAAA,sBAAsB,GAA4B,IAAI,uBAAuB,EAAE;AAC/E,IAAA,OAAO,GAAwB,IAAI,KAAK,EAAgB;AAExD,IAAA,QAAQ;IACR,WAAW,GAAwC,EAAE;IACrD,kBAAkB,GAAG,kBAAkB;IACvC,aAAa,GAAG,aAAa;AAEnB,IAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAClE,IAAA,oBAAoB,GAAyB,IAAI,YAAY,EAAU;AACvE,IAAA,WAAW,GAAmC,IAAI,YAAY,EAAoB;AAG5F,IAAA,aAAa;AACb,IAAA,OAAO,GAAoB,IAAI,eAAe,EAAE;IAChD,qBAAqB,GAAG,qCAAqC;IAE7D,WACU,CAAA,GAAsB,EACvB,cAAoC,EAAA;QADnC,IAAG,CAAA,GAAA,GAAH,GAAG;QACJ,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGvB,QAAQ,GAAA;;;;;QAKN,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM;QAC3H,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc;QACxD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB;QAElE,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;QACrE,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;AAC/D,QAAA,IAAI,CAAC,sBAAsB,CAAC,eAAe,GAAG,IAAI;AAClD,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,IAAI;QACzC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAExE,QAAA,IAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAC;YACrB,IAAI,CAAC,0BAA0B,EAAE;;aAC5B;YACL,IAAI,CAAC,kBAAkB,EAAE;;;AAK3B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;IAI1B,gBAAgB,GAAA;AAEd,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,KAAK,EAAO;AAE7C,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAC;;YAG9D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAC,KAAK,KAAI;gBAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAChD,gBAAA,IAAI,KAAK,IAAI,CAAC,EAAC;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,KAAI;wBAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAC,CAAE;AACtF,qBAAC,CAAC;oBACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAK,EAAG,OAAO,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAC,CAAE;AAC9L,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAQ,EAAA,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAC,CAAE;;AAGjI,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,aAAC,CAAC;;;IAKN,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,SAAS;QAC1C,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,gBAAgB,CAAC,IAAI;AAC1D,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,gBAAgB,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AACpE,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,gBAAgB;;AAGnD;;;AAGG;AACH,IAAA,cAAc,CAAC,EAAY,EAAA;QACzB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC;AAC9E,QAAA,IAAI,EAAE,CAAC,aAAa,IAAI,IAAI,EAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;;;IAInC,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB;QACpE,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe;AAElE,QAAA,IAAI,YAAY,GAAG;AACjB,YAAA;AACE,gBAAA,SAAS,EAAE,QAAQ;gBACnB,UAAU,EAAE,IAAI,CAAC,OAAO;AACxB,gBAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC;SACF;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAC9C,YAAY,EACZ,CAAC,GAAqB,KAAI;AAExB,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG;YACxB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,SAAC,CACF;;IAGH,KAAK,GAAA;;AAGH,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;AACzB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;IAG3B,0BAA0B,GAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE;AAC1B,QAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAC;;AAEvB,YAAA,IAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAC;;gBAEnB,IAAI,CAAC,YAAY,EAAE;;AACd,iBAAA,IAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAC;;AAE5B,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAA;;;aAEf;;YAEL,IAAI,CAAC,YAAY,EAAE;;;IAGvB,kBAAkB,GAAA;;AAEd,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;;YAEnC,IAAI,CAAC,aAAa,EAAE;;aACf;;;;YAIL,IAAI,CAAC,qBAAqB,EAAE;;;AAIlC;;AAEG;AACH,IAAA,cAAc,CAAC,IAAa,EAAA;QAC1B,IAAI,IAAI,EAAE;;AAER,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;aAClB;;AAEL,YAAA,IAAI,CAAC,YAAY,CAAU,IAAI,CAAC,MAAO,CAAC;;;AAI5C;;;;;AAKG;AACH,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,IACE,KAAK,IAAI,IAAI;YACb,IAAI,CAAC,qBAAqB,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAC/C;AACA,YAAA,IAAI,MAAM,GAAc,IAAI,SAAS,EAAE;YACvC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI;YAC5B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AAClC,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC3B,YAAA,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI;YAC7B,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAChE,YAAA,IAAI,mBAAmB,GAAG;AACxB,gBAAA;AACE,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC,iBAAA;aACF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAC/C,mBAAmB,EACnB,CAAC,GAAG,KAAI;AACN,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,aAAC,CACF;;aACI;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIpC,IAAA,WAAW,CAAC,EAAA,GAAa,IAAI,CAAC,MAAM,EAAA;AAClC,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YACf,IAAI,CAAC,YAAY,EAAE;SACpB,EACD,CAAC,GAAG,KAAM,GAAC,CACZ;;;IAIH,aAAa,GAAA;;AAEX,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE;YAEjB,IAAI,CAAC,MAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;YAGrD,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CACF;;IAEH,qBAAqB,GAAA;;AAEnB,QAAA,IAAI,mBAAmB,GAAG;AACxB,YAAA;AACE,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,UAAU,EAAW,IAAI,CAAC,MAAO,CAAC,KAAK;AACvC,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,UAAU,EAAW,IAAI,CAAC,MAAO,CAAC,OAAO;AACzC,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA;SACF;QACD,aAAa,CAAC,QAAQ,CAAC,qCAAqC,EAAU,IAAI,CAAC,MAAM,CAAC;AAClF,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;YAEf,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EAAE;gBAC3D,IAAI,CAAC,iBAAiB,EAAE;;AAE1B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,SAAC,CACF;;IAGH,YAAY,GAAA;QACV,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EAAE;YAC3D,IAAI,CAAC,iBAAiB,EAAE;;AAE1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB;;AAEG;IACK,sBAAsB,GAAA;QAC5B,MAAM,gBAAgB,GAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;gBACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;;AAElC,SAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACpC,gBAAA,MAAM,SAAS,GAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,EAAE;AAClD,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;;AAE/B,aAAC,CAAC;;;AAIN;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACzB,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE;;;AAIlG;;AAEG;IACK,eAAe,GAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CACrD,IAAI,CAAC,IAAI,CAAC,MAAM,EACP,IAAI,CAAC,MAAO,EACrB,IAAI,CAAC,QAAQ,CACd;;AAGH;;;AAGG;IACK,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC;aACjI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;AACjB,aAAA,OAAO,CAAC,CAAC,SAAS,KAAI;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,SAAS,CACjC;AACH,SAAC,CAAC;;AASN;;AAEG;AACK,IAAA,wBAAwB,CAAC,MAAa,EAAA;AAC5C,QAAA,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,iBAAiB,GAAe,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AAC7E,QAAA,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAE9D,QAAA,IAAI,QAAQ,GAAW,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAA,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;QAE5C,MAAM,KAAK,GAAG,cAAc;AAC5B,QAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;;IAIhF,iBAAiB,CAAC,MAAc,EAAE,IAAU,EAAA;AAClD,QAAA,IAAI,iBAAiB,GAAe,EAAE,CAAC;;AAEvC,QAAA,aAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;AACjD,QAAA,KAAK,IAAI,SAAS,IAAI,MAAM,EAAE;AAC5B,YAAA,IAAI;;;AAGF,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,SAAS,CAChC;AACD,gBAAA,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AAC9C,gBAAA,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;;;;;gBAKlD,IAAI,WAAW,CAAC,SAAS,IAAI,aAAa,CAAC,iBAAiB,CAAC,EAC7D;AACE,oBAAA,IAAI,WAAW,CAAC,OAAO,EACvB;;;AAGE,wBAAA,IAAI,IAAI,GAAG,oBAAoB,CAAC,oBAAoB,CAClD,WAAW,CAAC,OAAO,EACnB,MAAM,EACN,IAAI,CACL;AACC,wBAAA,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;AACpC,wBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;4BACvB,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAC9C;AACmB,gCAAA,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;;iCAErE;gCACmB,WAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;;;wBAG/D,aAAa,CAAC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACvE,wBAAA,aAAa,CAAC,QAAQ,CAAC,6DAA6D,EAAmB,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAClJ,wBAAA,iBAAiB,CAAC,SAAS,CAAC,GAAoB,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;;oBAE5F,IAAI,QAAQ,GAAG,EAAE;oBACb,aAAa,CAAC,QAAQ,CAAC,0CAA0C,EAAmB,WAAY,CAAC,UAAU,CAAC;AAC5G,oBAAA,KAAK,IAAI,GAAG,IAAqB,WAAY,CAAC,UAAU,EAC5D;wBACE,QAAQ,CAAkB,WAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;;AAE9C,oBAAA,WAAY,CAAC,UAAU,GAAG,QAAQ;AACnD,oBAAA,iBAAiB,CAAC,SAAS,CAAC,GAAoB,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;;qBAE5F;oBACE,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC9D,iBAAiB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;;;;YAGlD,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAGpB,QAAA,aAAa,CAAC,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;;AAEhE,QAAA,KAAI,MAAM,MAAM,IAAI,iBAAiB,EAAC;AACpC,YAAA,IAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI;AAC9E,gBAAA,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE;;AAEhC,QAAA,OAAO,iBAAiB;;AAGlB,IAAA,mBAAmB,CAAC,IAAU,EAAA;QACpC,IAAI,QAAQ,GAAW,EAAE;;QAEzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAoB,KAAI;YAC3C,QAAQ,IAAI,yCAAyC,GAAG,SAAS,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,WAAW,GAAG,kDAAkD,GAAG,SAAS,CAAC,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC,IAAI,GAAG,oBAAoB;AACjP,SAAC,CAAC;;AAEF,QAAA,OAAO,QAAQ;;AAGT,IAAA,qCAAqC,CAAC,QAAgB,EAAE,iBAA6B,EAAE,KAAK,EAAA;QAClG,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAI;AAC9C,YAAA,OAAe,iBAAiB,CAAC,KAAK,CAAC;AACzC,SAAC,CAAC;;wGAxeO,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,+kBCvBzC,y7GAkFc,EAAA,MAAA,EAAA,CAAA,2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA8C,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD3DD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,y7GAAA,EAAA,MAAA,EAAA,CAAA,2CAAA,CAAA,EAAA;sHAMxB,cAAc,EAAA,CAAA;sBAAtB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAyBS,eAAe,EAAA,CAAA;sBAAxB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,eAAe;;;ME3BlB,yBAAyB,CAAA;AA8FjB,IAAA,oBAAA;AACT,IAAA,cAAA;IA7FD,SAAS,GAAY,KAAK;;AAG1B,IAAA,cAAc;AACd,IAAA,MAAM;AACN,IAAA,eAAe,GAA8B,yBAAyB,CAAC,IAAI;IAE3E,MAAM,GAAW,GAAG;IACpB,MAAM,GAAW,GAAG;IACpB,SAAS,GAAG,IAAI;IAChB,cAAc,GAAY,IAAI;IAC9B,cAAc,GAAG,IAAI;IACrB,MAAM,GAAkB,IAAI;IAC5B,QAAQ,GAAG,EAAE;AACb,IAAA,eAAe,GAAwB,IAAI,KAAK,EAAgB;AAChE,IAAA,mBAAmB,GAAkB,IAAI,KAAK,EAAU;IACxD,uBAAuB,GAAa,IAAI;AACxC,IAAA,kBAAkB,GAA8C,IAAI,yCAAyC,EAAE;IAC/G,gBAAgB,GAAG,KAAK;IACxB,QAAQ,GAA8B,IAAI;AAC1C,IAAA,oBAAoB,GAA0C,qCAAqC,CAAC,iBAAiB;IACrH,gBAAgB,GAAQ,IAAI;IAC5B,cAAc,GAAQ,IAAI;IAC1B,UAAU,GAAQ,IAAI;IACtB,eAAe,GAAQ,IAAI;IAC3B,mBAAmB,GAAY,IAAI;AACnC,IAAA,mBAAmB;AACnB,IAAA,eAAe;IACf,cAAc,GAAoB,IAAI;IACtC,mBAAmB,GAAY,IAAI;IAEnC,oBAAoB,CAAM;AAEnC,IAAA,OAAO,GAAY,IAAI,OAAO,EAAE;AAChC;;;AAGG;IACH,aAAa,GAAW,IAAI;AAE5B;;;AAGG;IACH,SAAS,GAAW,IAAI;AAExB;;;;;AAKG;IACH,qBAAqB,GAA0B,IAAI;;;;AAMnD;;;AAGG;AACO,IAAA,UAAU,GAAyB,IAAI,YAAY,EAAU;AAC7D,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,QAAQ,GAAyB,IAAI,YAAY,EAAU;AAC3D,IAAA,WAAW,GAAmC,IAAI,YAAY,EAAoB;AAC5F;;;AAGG;AACO,IAAA,eAAe,GAAyB,IAAI,YAAY,EAAU;AAClE,IAAA,iBAAiB,GACzB,IAAI,YAAY,EAAU;AAClB,IAAA,WAAW,GAAyB,IAAI,YAAY,EAAO;AAC3D,IAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ;AAC3D,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,WAAW,GAA8B,IAAI,YAAY,EAAe;AAElF,IAAA,IAAI,GAAS,IAAI,IAAI,EAAE;AACvB,IAAA,QAAQ,GAAS,IAAI,IAAI,EAAE;IAC3B,YAAY,GAAG,YAAY;IAC3B,yBAAyB,GAAG,yBAAyB;AACrD,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,eAAe;AAEf,IAAA,0BAA0B;AAC1B,IAAA,uBAAuB;AACvB,IAAA,yBAAyB;IACzB,MAAM,GAAY,KAAK;IACvB,WAAW,GAAY,KAAK;IAE5B,WAAmB,CAAA,oBAA0C,EACnD,cAAiC,EAAA;QADxB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QAC7B,IAAc,CAAA,cAAA,GAAd,cAAc;;AAExB,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAExC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ;AAE9E,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,0BAA0B,CAC9D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,mBAAmB,CACzB;AACD,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,CACxD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,MAAM,EACX,IAAI,KAAK,EAAgB,EACzB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,mBAAmB,CACzB;QACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,yBAAyB,CAC5D,IAAI,CAAC,QAAQ,CACd;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa;QACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB;;;AAItE,QAAA,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAE7C,IAAI,CAAC,yBAAyB,EAAE;AAEhC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;;;;;QAMzB,aAAa,CAAC,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACrF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;IAGpB,eAAe,GAAA;AAEb,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,yBAAyB,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,IAAI,yBAAyB,CAAC,MAAM,EAAE;;AAEzH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;AAC3C,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;aACjD;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACpC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,UAAU,CAAC,CAAC,IAAM,EAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAA,EAAE,EAAE,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BhE;;;;;AAKG;IACH,yBAAyB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,aAAa,EAAE;AACrD,YAAA,IAAI,CAAC,qBAAqB;AACxB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CACjD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,CACf;;;AAIP;;;;;AAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkCH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAG/B;;;;;;;;AAQG;AACH,IAAA,mBAAmB,CAAC,KAA4C,EAAA;AAE9D,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;YAC9B,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9D,IACE,IAAI,CAAC,qBAAqB;gBAC1B,IAAI,CAAC,qBAAqB,CAAC,OAAO;AAClC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD;;AAEA,gBAAA,IAAI,mBAAmB,GAAG;AACxB,oBAAA;AACE,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AAC9B,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;AACD,oBAAA;AACE,wBAAA,SAAS,EAAE,SAAS;AACpB,wBAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAChC,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;iBACF;AACD,gBAAA,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;AAC3D,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,oBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACzD,oBAAA,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;;AAElC,oBAAA,IAAI,mBAAmB,GAAG;AACxB,wBAAA;AACE,4BAAA,SAAS,EAAE,IAAI;AACf,4BAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;AAC3B,4BAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,yBAAA;qBACF;AACD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;wBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;wBACrD,IAAI,CAAC,cAAyB,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;wBAC1C,IAAI,CAAC,cAAyB,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;wBAChD,IAAI,CAAC,cAAyB,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;wBAClD,IAAI,CAAC,cAAyB,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACrD,wBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACpC,wBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,qBAAC,CACF;AACH,iBAAC,CACF;;iBACI;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACpC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;;AAEf,aAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAC;;AAG9E,YAAA,IAAI,mBAAmB,GAAG;AACxB,gBAAA;AACE,oBAAA,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,IAAI,CAAC,cAAc;AAC/B,oBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,iBAAA;aACF;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAClD,mBAAmB,EACnB,CAAC,GAAc,KAAI;gBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBACrD,IAAI,CAAC,cAAyB,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;gBAC1C,IAAI,CAAC,cAAyB,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;gBAChD,IAAI,CAAC,cAAyB,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;gBAClD,IAAI,CAAC,cAAyB,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACrD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACpC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,aAAC,CACF;;aAEE;AACL,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;;AAEZ,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AAEf,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;qBACpD;oBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;AAG3C,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,gBAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAC;AACnC,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB;AAC9C,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACpC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,aAAC,EACD,CAAC,GAAG,KAAI;AACN,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAC,GAAG,CAAC;AAC5C,aAAC,CACF;;;;;;AAQL;;;;;;;;AAQG;AACH,IAAA,YAAY,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,yBAAyB,CAAC,IAAI;AAC9C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;;AAKtB;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAa,EAAA;;AAExB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;AAM3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAG/B;;;AAGG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;AAMhC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAI/B,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAS5B,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,UAAU,CACR,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,EACxB,EAAE,CACH;;;AAIH;;;AAGG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAGzB,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAEvC,IACE,IAAI,CAAC,qBAAqB;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,cAAc,EACjD;AACA,YAAA,6BAA6B,CAAC,OAAO,CACnC,kCAAkC,EAClC,MAAK;AACH,gBAAA,IAAI,mBAAmB,GAAG;AACxB,oBAAA;AACE,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;AAC5B,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;iBACF;AACD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,cAAc,EACjD,mBAAmB,EACnB,CAAC,GAAG,KAAI;;AAEN,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;;oBAEnC,IAAI,CAAC,MAAM,EAAE;AACf,iBAAC,CACF;AACH,aAAC,EACD,KAAK,EACL,oBAAoB,CACrB;;aACI;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAGlC,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAIrC,IAAA,aAAa,CAAC,EAAE,EAAA;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG3B,IAAA,aAAa,CAAC,EAAO,EAAA;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG3B,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG1B,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGnB,IAAA,aAAa,CAAC,EAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG3B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAA;QAC5B,IAAI,MAAM,GAAG,IAAI;AACjB,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,MAAM,GAAG,EAAE;AACX,YAAA,MAAM,IAAI,GAAW,oBAAoB,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAC3F,YAAA,MAAM,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;;AAC1C,aAAA,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE;AACnC,YAAA,MAAM,GAAG,KAAK,CAAC,UAAU;;AACpB,aAAA,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE;YAC/D,MAAM,GAAG,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;;AAG9D,QAAA,OAAO,MAAM;;wGA/gBJ,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlD,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,yxCCrCtC,gyHAmHA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqD,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9Ea,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,gyHAAA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA;sHAMrB,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBA+BS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,QAAQ,EAAA,CAAA;sBAAjB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAKS,eAAe,EAAA,CAAA;sBAAxB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBACS,WAAW,EAAA,CAAA;sBAApB;;;MEXU,cAAc,CAAA;wGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAlEvB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,aAAa;YACb,gBAAgB;YAChB,aAAa;YACb,kBAAkB;YAClB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,kBAAkB;YAClB,mBAAmB;AACnB,YAAA,mBAAmB,aAGnB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,aAAa;YACb,gBAAgB;YAChB,aAAa;YACb,kBAAkB;YAClB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,kBAAkB,CAAA,EAAA,CAAA;AAGT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAlEvB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,aAAa;YACb,gBAAgB;YAChB,aAAa;YACb,kBAAkB;YAClB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,kBAAkB;YAClB,mBAAmB;AACnB,YAAA,mBAAmB,EAGnB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,aAAa;YACb,gBAAgB;YAChB,aAAa;YACb,kBAAkB;YAClB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,kBAAkB,CAAA,EAAA,CAAA;;4FAGT,cAAc,EAAA,UAAA,EAAA,CAAA;kBApE1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,qBAAqB;wBACrB,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,kBAAkB;wBAClB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,mBAAmB;wBACnB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,qBAAqB;wBACrB,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,kBAAkB;wBAClB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,cAAc;wBACd,aAAa;wBACb;AACD,qBAAA;AACF,iBAAA;;;MCnGY,uCAAuC,CAAA;AAClD,IAAA,IAAI,GAAS,IAAI,IAAI,EAAE;IACvB,MAAM,GAAW,IAAI;IACrB,MAAM,GAAW,CAAC;IAClB,kBAAkB,GAAY,KAAK;AACnC,IAAA,YAAY;AAEZ,IAAA,WAAA,CACE,IAAa,GAAA,IAAI,IAAI,EAAE,EACvB,MAAiB,GAAA,IAAI,EACrB,MAAA,GAAiB,CAAC,EAClB,kBAAA,GAA8B,KAAK,EACnC,eAA+C,IAAI,EAAA;AAEnD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;AAEnC;;MCnBY,0BAA0B,CAAA;AACrC;;;AAGG;IACH,aAAa,GAAW,IAAI;AAE5B;;;AAGG;IACH,SAAS,GAAW,IAAI;AAExB;;;;;AAKG;IACH,qBAAqB,GAA0B,IAAI;AAEnD,IAAA,OAAO,GAAY,IAAI,OAAO,EAAE;AAEhC;;AAEG;;AAEH;;AAEG;;AAGH,IAAA,WAAA,CAAa,aAAwB,GAAA,EAAE,EAAE,SAAA,GAAoB,EAAE,EAAE,OAAmB,GAAA,IAAI,OAAO,EAAE,EAAE,qBAAA,GAA+C,IAAI,EAAA;AACpJ,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,qBAAqB;;AAErD;;MCvCY,+BAA+B,CAAA;AAC1C,IAAA,0BAA0B;AAC1B,IAAA,uCAAuC;IAEvC,WAAa,CAAA,OAAA,GAAsC,IAAI,0BAA0B,EAAE,EAAE,QAAoD,GAAA,IAAI,uCAAuC,EAAE,EAAA;AACpL,QAAA,IAAI,CAAC,0BAA0B,GAAG,OAAO;AACzC,QAAA,IAAI,CAAC,uCAAuC,GAAG,QAAQ;;AAE1D;;MCZY,OAAO,CAAA;AAChB,IAAA,OAAO;IACP,cAAc,GAAU,CAAC;IACzB,WAAW,GAAU,CAAC;IACtB,KAAK,GAAY,EAAE;IACnB,KAAK,GAAW,KAAK;AACrB,IAAA,MAAM,GAAW,KAAK,CAAC;IACvB,UAAU,GAAW,KAAK;IAC1B,OAAO,GAAW,IAAI;IACtB,SAAS,GAAU,EAAE;IACrB,MAAM,GAAU,CAAC;IACjB,SAAS,GAAW,KAAK;IACzB,OAAO,GAAW,KAAK;IACvB,YAAY,GAAW,KAAK;AAE5B,IAAA,WAAA,CAAY,UAAe,EAAE,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAC,OAAO;;IAGxB,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,OAAO;;AAGvB,IAAA,KAAK,CAAC,KAAY,EAAA;AACd,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC;;IAG5B,gBAAgB,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGnC,IAAA,UAAU,CAAC,QAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAC,QAAQ;QACrB,OAAO,IAAI,CAAC,OAAO;;IAIvB,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAElB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,OAAO,IAAI,CAAC,OAAO;;IAGvB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;IAG1B,WAAW,GAAA;AACP,QAAA,IAAI,KAAK,GAAC,IAAI,CAAC,gBAAgB,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,IAAI,KAAK;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;IAGrB,cAAc,GAAA;AACV,QAAA,IAAI,KAAK,GAAC,IAAI,CAAC,gBAAgB,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,IAAI,KAAK;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;IAGrB,UAAU,GAAA;QACN,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACnC,OAAO,IAAI,CAAC,OAAO;;AAGvB,IAAA,UAAU,CAAC,KAAY,EAAA;;AAEnB,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAClE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAE3B,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AACjE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjD,IAAI,CAAC,KAAK,GAAC,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAIjC,IAAA,YAAY,CAAC,OAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAC,OAAO;;AAEtB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,YAAA,OAAO,IAAI;;AAEf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAC,IAAI;;IAGnB,SAAS,GAAA;AACL,QAAA,IAAI,MAAa;AACjB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAC,CAAC;YAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,GAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,CAAC;AAE/B,QAAA,QAAQ,IAAI,CAAC,SAAS;AAClB,YAAA,KAAK,GAAG;gBACJ,MAAM,GAAC,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,cAAc;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,GAAG;gBACJ,MAAM,GAAC,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,cAAc;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,GAAG;gBACJ,MAAM,GAAC,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,cAAc;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,GAAG;gBACJ,MAAM,GAAC,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,cAAc;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAC,CAAC,GAAC,IAAI,CAAC,cAAc,CAAC;AACvD,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,KAAK;AACN,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAC,IAAI,CAAC,cAAc,CAAC;AACrD,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,IAAI;AACL,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC;AACxD,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjB;AACJ,YAAA,KAAK,KAAK;AACN,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;gBACnE;;QAGR,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAE5C,QAAA,IAAI,CAAC,KAAK,GAAC,IAAI;AACf,QAAA,OAAO,MAAM;;IAIjB,QAAQ,CAAC,KAAY,EAAC,KAAa,EAAA;QAC/B,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,OAAO,GAAC,EAAE;;AAEnB,QAAA,IAAI,CAAC,KAAK,GAAC,KAAK;AAChB,QAAA,IAAI,KAAK,IAAE,GAAG,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,MAAM,IAAE,IAAI,EAAE;gBACnB,OAAO,IAAI,CAAC,OAAO;;AAEvB,YAAA,IAAI,CAAC,MAAM,GAAC,IAAI;;AAEpB,QAAA,IAAI,CAAC,OAAO,IAAE,KAAK;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,OAAO,IAAI,CAAC,OAAO;;IAGvB,YAAY,GAAA;AACR,QAAA,IAAI,GAAG,GAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AAC3B,QAAA,IAAI,WAAW,GAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,EAAC,GAAG,CAAC;AACnD,QAAA,IAAI,WAAW,IAAI,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,GAAC,KAAK;;AAErB,QAAA,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;;IAGzC,SAAS,CAAC,OAAc,EAAC,IAAQ,EAAA;QAC7B,IAAI,MAAM,GAAQ,CAAC;QACnB,IAAI,GAAG,GAAQ,CAAC;AAChB,QAAA,IAAI,IAAI,GAAC,GAAG,GAAC,IAAI,CAAC,EAAE;QACpB,IAAI,CAAC,cAAc,GAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAE5C,QAAQ,OAAO;AACX,YAAA,KAAK,QAAQ;AACT,gBAAA,MAAM,GAAC,IAAI,CAAC,cAAc,GAAC,IAAI;gBACnC;AACA,YAAA,KAAK,MAAM;gBACP,MAAM,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACzC;AACA,YAAA,KAAK,OAAO;AACR,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAC,CAAC,GAAC,CAAC,CAAC;gBAC5C;AACA,YAAA,KAAK,IAAI;gBACL,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;gBACxC;AACA,YAAA,KAAK,IAAI;AACL,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvD;AACA,YAAA,KAAK,UAAU;AACX,gBAAA,IAAI,IAAI,GAAC,IAAI,IAAE,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI;gBAClC,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAC,IAAI,CAAC,cAAc,CAAC;gBAC7C;AACA,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,IAAI,GAAC,UAAU,CAAC,IAAI,CAAC;gBACzB,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC;gBAC7C;AACA,YAAA,KAAK,KAAK;AACN,gBAAA,MAAM,GAAC,CAAC,GAAC,IAAI,CAAC,cAAc;gBAChC;AACA,YAAA,KAAK,KAAK;gBACN,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBACxB;AACA,YAAA,KAAK,KAAK;gBACN,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBACxB;AACA,YAAA,KAAK,KAAK;gBACN,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBACxB;AACA,YAAA,KAAK,MAAM;gBACP,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC;gBAC3C;AACA,YAAA,KAAK,MAAM;gBACP,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC;gBAC3C;AACA,YAAA,KAAK,MAAM;gBACP,GAAG,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAC,IAAI;AACnE,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxE;AACA,YAAA,KAAK,MAAM;gBACP,MAAM,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,MAAM;gBACP,MAAM,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,MAAM;gBACP,MAAM,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,OAAO;gBACR,MAAM,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,OAAO;gBACR,MAAM,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,OAAO;gBACR,MAAM,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,gBAAA,MAAM,GAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,GAAC,IAAI;gBAChD;AACA,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,GAAC,IAAI,CAAC,MAAM,EAAE;gBACxB;AACA,YAAA,KAAK,WAAW;gBACZ,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpC,MAAM,GAAC,CAAC;AACR,gBAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAE;oBACnB,MAAM,IAAE,CAAC;;gBAEjB;AACA,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAC,IAAI,CAAC,cAAc,GAAC,GAAG;gBAClC;AACA,YAAA,KAAK,IAAI;gBACL,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AAChD,gBAAA,OAAO,CAAC;;AAGhB,QAAA,IAAI,CAAC,KAAK,GAAC,IAAI;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjB,QAAA,OAAO,MAAM;;AAGjB,IAAA,IAAI,CAAC,KAAY,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAC,KAAK,CAAC,QAAQ,EAAE;QAC7B,OAAO,IAAI,CAAC,OAAO;;AAE1B;;MClRY,mBAAmB,CAAA;AAWc,IAAA,IAAA;AACnC,IAAA,SAAA;AACA,IAAA,MAAA;AAXgC,IAAA,eAAe;IACxD,aAAa,GAAW,CAAC;IACzB,SAAS,GAAY,IAAI;IACzB,aAAa,GAAW,EAAE;AAC1B,IAAA,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAC1B,cAAc,GAAW,EAAE;IAC3B,OAAO,GAAW,CAAC;IACnB,MAAM,GAAqB,EAAE;IAC7B,iBAAiB,GAAQ,IAAI;AAC7B,IAAA,WAAA,CAA4C,IAAS,EAC5C,SAA4C,EAC5C,MAAiB,EAAA;QAFkB,IAAI,CAAA,IAAA,GAAJ,IAAI;QACvC,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGf,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;iBAChB;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAG1B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE;YAC9H,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YACvC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;aAC7C;AACL,YAAA,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;;IAIvC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;AAE1B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,cAAc;;AAExE,IAAA,SAAS,CAAC,QAAQ,EAAA;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,cAAc;;IAG9C,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGtC,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;IAGzE,IAAI,GAAA;QAEF,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE;AAC7I,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC7E,YAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;;;YAGlC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;;AAE1C,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAChD,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AACzE,QAAA,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE;AAC5E,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,gBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9B,gBAAA,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACzF,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;iBAE7B;gBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,KAAK;;;aAItD;AACH,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,gBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9B,gBAAA,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3F,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;iBAE7B;gBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,KAAK;;;;IAM/D,mBAAmB,GAAA;QACjB,IAAI,CAAC,OAAO,EAAE;QACd,MAAM,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAAC,OAAO,GAAG,wCAAwC,GAAG,IAAI,CAAC,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAAC,OAAO,GAAG,oDAAoD,GAAG,IAAI,CAAC,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI;AACtY,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;IAGvB,oBAAoB,GAAA;QAClB,IAAI,CAAC,OAAO,EAAE;QACd,MAAM,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,qBAAqB,GAAG,IAAI,CAAC,OAAO,GAAG,wCAAwC,GAAG,IAAI,CAAC,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAAC,OAAO,GAAG,oDAAoD,GAAG,IAAI,CAAC,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI;AACzY,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;IAGvB,YAAY,GAAA;QACV,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,wDAAwD,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG;AAC7H,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAGvB,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAChD,QAAA,IAAI,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,gBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9B,gBAAA,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACnF,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;iBAE7B;gBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK;;AAEnD,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC;;aAEpB;AACH,YAAA,IAAI,KAAK,IAAI,GAAG,EAAE;AAChB,gBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAC3B,oBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,oBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9B,oBAAA,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACnF,oBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;qBAE7B;oBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK;;;iBAE9C;AACL,gBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAC3B,oBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,oBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9B,oBAAA,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACzF,oBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;qBAE7B;oBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,KAAK;;;AAG3D,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC;;;IAI3B,UAAU,GAAA;QACR,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,+BAA+B;;AAG7E,IAAA,iBAAiB,CAAC,UAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,oDAAoD,GAAC,UAAU,GAAC,GAAG;;IAGjH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAC;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,GAAC,IAAI,CAAC,iBAAiB,GAAC,GAAG,GAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;YACjK,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;;AAIjC,IAAA,aAAa,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;IAGhC,IAAI,GAAA;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAChD,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AACnE,YAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;;aAEnD;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EACzC,CAAC;;;AA/KK,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAWV,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA7D,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAXxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,iNCbhC,y5dAqYA,EAAA,MAAA,EAAA,CAAA,iuEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDxXa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,0CAA0C,EAAA,QAAA,EAAA,y5dAAA,EAAA,MAAA,EAAA,CAAA,iuEAAA,CAAA,EAAA;;0BAgBvC,MAAM;2BAAC,eAAe;gGATM,eAAe,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;MAuL5B,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;wGADW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,2DEtMpC,gLAIM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA;;4FFkMO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,gLAAA,EAAA;;;MGjHpB,qBAAqB,CAAA;AAoHtB,IAAA,WAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;AACA,IAAA,GAAA;AACA,IAAA,UAAA;AACA,IAAA,oBAAA;AAvHD,IAAA,IAAI;AACJ,IAAA,qBAAqB;AACrB,IAAA,KAAK;AACL,IAAA,UAAU;AACV,IAAA,gBAAgB;;AAEhB,IAAA,eAAe;AACf,IAAA,mBAAmB,GAAyB,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAChF,oBAAoB,CAA6B;IACjD,iBAAiB,GAA6B,IAAI;AAEjD,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;AAC1D,IAAA,cAAc,GAAkC,IAAI,YAAY,EAAmB;AAE7F,IAAA,qBAAqB;AACrB,IAAA,cAAc;IACd,cAAc,GAAmC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACvE,iCAAiC,GAA4B,EAAE;IAC/D,6BAA6B,GAA4B,EAAE;AAC3D,IAAA,0BAA0B;AAC1B,IAAA,4BAA4B;IAC5B,uBAAuB,GAAG,uBAAuB;IACjD,wBAAwB,GAAG,wBAAwB;IACnD,qBAAqB,GAAG,qBAAqB;AAC7C,IAAA,UAAU,GAA0C,IAAI,KAAK,EAAkC;;AAG/F,IAAA,qBAAqB;AAErB,IAAA,qBAAqB;AAErB,IAAA,sBAAsB;AAEtB,IAAA,yBAAyB;AAEzB,IAAA,wBAAwB;AAExB,IAAA,qBAAqB;AAErB,IAAA,wBAAwB;AAExB,IAAA,2BAA2B;AAE3B,IAAA,sBAAsB;AAEtB,IAAA,iCAAiC;AAEjC,IAAA,8BAA8B;AAE9B,IAAA,0BAA0B;AAE1B,IAAA,uBAAuB;AAEvB,IAAA,kBAAkB;;;AAKlB,IAAA,eAAe;;AAEf,IAAA,gBAAgB;;;AAGhB,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;;AAE4B,IAAA,aAAa;;;AAK3D,IAAA,+BAA+B;;;IAI/B,aAAa,GAAG,aAAa;IAC7B,oBAAoB,GAAG,oBAAoB;IAC3C,gBAAgB,GAAG,gBAAgB;IACnC,oBAAoB,GAAG,oBAAoB;IAC3C,YAAY,GAAG,YAAY;IAC3B,cAAc,GAAG,cAAc;IAC/B,uBAAuB,GAAG,uBAAuB;IACjD,kBAAkB,GAAG,kBAAkB;AACvC,IAAA,YAAY;;;AAKZ,IAAA,sBAAsB,GAAwB,IAAI,KAAK,EAAgB;AACvE,IAAA,iBAAiB,GAAwB,IAAI,KAAK,EAAgB;AACH,IAAA,8BAA8B;AAChC,IAAA,4BAA4B;AAC1B,IAAA,8BAA8B;AACnC,IAAA,wBAAwB;AACjC,IAAA,eAAe;;;AAIhE,IAAA,WAAW;;AAE8B,IAAA,QAAQ;;IAGjD,IAAI,GAAG,QAAQ;IACf,QAAQ,GAAG,YAAY;;AAGvB,IAAA,KAAK,GAAgB,IAAI,KAAK,EAAQ;AACtC,IAAA,QAAQ;AACR,IAAA,OAAO;AACP,IAAA,QAAQ;IACR,qBAAqB,GAAG,yBAAyB;IAEjD,WACU,CAAA,WAA+B,EAC/B,UAAsB,EACtB,MAAiB,EACjB,GAAsB,EACtB,UAAsB,EACtB,oBAA0C,EAAA;QAL1C,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;AAG9B,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAC;YAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE;;QAC5E,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,EAAC;AACnI,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;;QAG5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,EAAC;AAC/G,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC;;AAGrE,QAAA,IACE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,EACtE;YACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;;AAGnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC1B,cAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;cAClD,EAAE;;AAIR;;;;;;;AAOG;;;;;;;;;;AAUH,IAAA,+BAA+B,CAAC,aAA4B,EAAA;;;;;AAK1D,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,4BAA4B;AAC/B,gBAAA,oBAAoB,CAAC,sBAAsB,CACzC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB;;;AAGP,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC;AACL,QAAA,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;AACX,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC;AACjB,YAAA,OAAO,KAAK;;;AAIhB;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,YAAA,KAAK,EAAE;gBACL,IAAI,CAAC,KAAK,CAAC,KAAK;AAChB,gBAAA;AACE,oBAAA,UAAU,CAAC,QAAQ;AACnB,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;AACnC,iBAAA;AACF,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,IAAI,CAAC,KAAK,CAAC,WAAW;AACtB,gBAAA,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;AACzC,aAAA;AACD,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC/B,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC/B,YAAA,SAAS,EAAE;gBACT,IAAI,CAAC,KAAK,CAAC,SAAS;AACpB,gBAAA,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;AACzC,aAAA;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,CAAC,IAAI,CAAC;AACf,YAAA,cAAc,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc;gBACpC,CAAC,UAAU,CAAC,QAAQ,CAAC;AACtB,aAAA;AACD,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACvC,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACnC,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YACvC,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;YACpD,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;YAChD,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;YAC5D,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;YAC5D,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;AAChD,YAAA,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;AAE3E,YAAA,wBAAwB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;AACnF,YAAA,wBAAwB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;AACnF,YAAA,oBAAoB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;YAC3E,uBAAuB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;YAC9D,qBAAqB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;YAC1D,uBAAuB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;AAC/D,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CACnE;;;AAGL,IAAA,YAAY,CAAC,OAAoB,EAAA;;AAE/B,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE;AAC9B,YAAA,IACE,oBAAoB,CAAC,qBAAqB,CACxC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC1C,EACD;AACA,gBAAA,OAAO,IAAI;;iBACN;AACL,gBAAA,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE;;;aAEnC;AACL,YAAA,OAAO,IAAI;;;AAGf,IAAA,yBAAyB,CAAC,OAAoB,EAAA;;AAE5C,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE;AAC9B,YAAA,IACE,oBAAoB,CAAC,qBAAqB,CACxC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC1C,EACD;AACA,gBAAA,OAAO,IAAI;;iBACN;AACL,gBAAA,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE;;;aAEvC;AACL,YAAA,OAAO,IAAI;;;;;;;;;;;;;;;;;AAkBf;;;AAGG;AACH,IAAA,uBAAuB,CAAC,OAAe,EAAA;QACrC,IAAI,OAAO,IAAI,OAAO;AAAE,YAAA,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAEhH,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;QAC9C,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC9C,gBAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvB,aAAC,CAAC;AACF,YAAA,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;AAC5C,YAAA,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;AAC1C,YAAA,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;;AAE5C,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI1B;;;;;;AAMG;IACH,iBAAiB,CAAC,eAAwB,IAAI,EAAA;QAC5C,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,0BAA0B,EAAE;;QAGnC,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAK,IAAI,CAAC,KAAmB,CAAC,UAAU,IAAI,IAAI,EAAE;AAChD,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;;QAE9B,IAAK,IAAI,CAAC,KAAmB,CAAC,YAAY,IAAI,IAAI,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,qBAAqB,CAAC,QAAQ;;AAE1D,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAEjC,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS;;YAG1B,KAAK,aAAa,CAAC,gBAAgB,CAAC;gBAClC,IAAK,IAAI,CAAC,KAAmB,CAAC,UAAU,IAAI,IAAI,EAAE;AAChD,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK;;AAE/B,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,UAAU,EACV,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,QAAQ,CAAC,CAC3D;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,SAAS,EAAE;AAC1D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAC,CACH;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,SAAS,EAAE;AAC1D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAC,CACH;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,UAAU,CAAC,CAC7D;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB;gBACvD;;;YAIF,KAAK,aAAa,CAAC,WAAW,CAAC;gBAC7B,IAAK,IAAI,CAAC,KAAoB,CAAC,SAAS,IAAI,IAAI,EAAE;AAChD,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;;AAG3B,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAoB,CAAC,SAAS,CAAC,CAC7D;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,sBAAsB;gBACxD;;;YAIF,KAAK,aAAa,CAAC,eAAe,CAAC;gBACjC,IAAK,IAAI,CAAC,KAAuB,CAAC,UAAU,IAAI,IAAI,EAAE;AACpD,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK;;AAG/B,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,MAAM,EACN,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAuB,CAAC,IAAI,EAAE;AACzD,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAC,CACH;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAuB,CAAC,SAAS,EAAE;AAC9D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAC,CACH;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAuB,CAAC,SAAS,EAAE;AAC9D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/B,iBAAA,CAAC,CACH;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAuB,CAAC,UAAU,CAAC,CACjE;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,yBAAyB;gBAC3D;;;YAIF,KAAK,aAAa,CAAC,QAAQ;AAEzB,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAsB,CAAC,UAAU,CAAC,CAChE;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,iBAAiB,EACjB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,eAAe,EAC5C,UAAU,CAAC,QAAQ,CACpB,CACF;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB;gBAC1D;;;YAIF,KAAK,aAAa,CAAC,cAAc,CAAC;gBAChC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC;;AAGvD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,UAAU,EAAE;AAC3D,oBAAA,UAAU,CAAC,QAAQ;AACnB,oBAAA,IAAI,CAAC,YAAY;AAClB,iBAAA,CAAC,CACH;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,SAAS,EACT,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAmB,CAAC,OAAO,EACjC,IAAI,CAAC,YAAY,CAClB,CACF;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,SAAS,EACT,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAmB,CAAC,OAAO,EACjC,IAAI,CAAC,YAAY,CAClB,CACF;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,YAAY,EACZ,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAmB,CAAC,UAAU,CAAC,CAC7D;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB;gBACvD;;;YAIF,KAAK,aAAa,CAAC,gBAAgB,CAAC;gBAClC,IAAK,IAAI,CAAC,KAAsB,CAAC,SAAS,IAAI,IAAI,EAAE;AAClD,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;;AAG7B,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,WAAW,EACX,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAsB,CAAC,SAAS,CAAC,CAC/D;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,UAAU,EACV,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAsB,CAAC,QAAQ,EAAE;AAC5D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC;AACpD,iBAAA,CAAC,CACH;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,UAAU,EACV,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAsB,CAAC,QAAQ,EAAE;AAC5D,oBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC;AACpD,iBAAA,CAAC,CACH;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,kBAAkB,EAClB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,gBAAgB,EAC7C,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CACnE,CACF;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,kBAAkB,EAClB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,gBAAgB,EAC7C,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CACpD,CACF;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,oBAAoB,EACpB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,kBAAkB,EAC/C,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CACnE,CACF;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,gBAAgB,EAChB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,cAAc,EAC3C,IAAI,CAAC,YAAY,CAClB,CACF;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,aAAa,EACb,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAsB,CAAC,WAAW,EACxC,IAAI,CAAC,YAAY,CAClB,CACF;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB;gBAC1D;;;YAIF,KAAK,aAAa,CAAC,QAAQ;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,mBAAmB,EACnB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAyB,CAAC,iBAAiB,CAClD,CACF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,eAAe,EACf,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAyB,CAAC,aAAa,CAAC,CACtE;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,2BAA2B;gBAC7D;;;YAIF,KAAK,aAAa,CAAC,QAAQ;gBAC3B,IAAI,OAAQ,IAAI,CAAC,KAAoB,CAAC,aAAa,IAAI,WAAW,EAAC;AAChE,oBAAA,IAAI,CAAC,KAAoB,CAAC,aAAa,GAAG,IAAI;;gBAGjD,IAAI,OAAQ,IAAI,CAAC,KAAoB,CAAC,aAAa,IAAI,WAAW,EAAC;AAChE,oBAAA,IAAI,CAAC,KAAoB,CAAC,aAAa,GAAG,KAAK;;AAGhD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,uBAAuB,EACvB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAoB,CAAC,qBAAqB,EAChD,CAAC,UAAU,CAAC,QAAQ,EAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC3C,CACF;gBACA,IAAI,CAAC,KAAoB,CAAC,qBAAqB,GAAI,IAAI,CAAC,KAAoB,CAAC,qBAAqB,IAAI,IAAI,GAAI,IAAI,CAAC,KAAoB,CAAC,qBAAqB,GAAG,GAAG;AAEpK,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,eAAe,EACf,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAoB,CAAC,aAAa,CAAC,CACjE;AAED,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,sBAAsB;gBACxD;AAEA;;;;;;;;;;;;;;;;AAgBE;;;YAIJ,KAAK,aAAa,CAAC,iBAAiB,CAAC;gBACnC,IAAK,IAAI,CAAC,KAAwB,CAAC,UAAU,IAAI,IAAI,EAAE;AACrD,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;;gBAE9B,IAAK,IAAI,CAAC,KAAwB,CAAC,YAAY,IAAI,IAAI,EAAE;oBACvD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,qBAAqB,CAAC,QAAQ;;AAG1D,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,gBAAgB,EAChB,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAwB,CAAC,cAAc,CAAC,CACtE;gBAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,kBAAkB,EAClB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAwB,CAAC,gBAAgB,EAC/C,UAAU,CAAC,QAAQ,CACpB,CACF;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,0BAA0B;gBAE5D;;;YAIF,KAAK,aAAa,CAAC,iBAAiB,CAAC;AAEnC,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,gBAAgB,EAChB,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,CAC1E;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,uBAAuB,EACvB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAA4B,CAAC,qBAAqB,EACxD,CAAC,UAAU,CAAC,QAAQ,EAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC3C,CACF;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,8BAA8B;gBAEhE;;;YAIF,KAAK,aAAa,CAAC,sBAAsB,CAAC;AAExC,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,uBAAuB,EACvB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAA+B,CAAC,qBAAqB,EAC3D,CAAC,UAAU,CAAC,QAAQ,EAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC3C,CACF;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iCAAiC;gBAEnE;;;YAIF,KAAK,aAAa,CAAC,MAAM;gBAEvB,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,kBAAkB,EAClB,IAAI,kBAAkB,CACnB,IAAI,CAAC,KAAqB,CAAC,gBAAgB,EAC5C,UAAU,CAAC,QAAQ,CACpB,CACF;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAC5B,mBAAmB,EACnB,IAAI,kBAAkB,CAAE,IAAI,CAAC,KAAqB,CAAC,iBAAiB,CAAC,CACtE;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,uBAAuB;gBACzD;;;QAGJ,IACE;AACE,YAAA,aAAa,CAAC,QAAQ;AACtB,YAAA,aAAa,CAAC,QAAQ;YACtB,aAAa,CAAC,mBAAmB,CAAC;SACnC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAChC;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI;YACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;YACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;YACpD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;;aACjD;YACL,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;YAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;;QAEvD,IACE;AACE,YAAA,aAAa,CAAC,QAAQ;AACtB,YAAA,aAAa,CAAC,QAAQ;YACtB,aAAa,CAAC,mBAAmB,CAAC;YAClC,aAAa,CAAC,cAAc,CAAC;SAC9B,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAChC;YACA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;;aAClD;YACL,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE;YACtD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE;;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC3D,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;;aAClD;YACL,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE;;;;;AAM1D,IAAA,MAAM,sBAAsB,GAAA;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAC;YAC7G,IAAI,CAAC,aAAa,EAAE;;AAGtB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAC;AACrE,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI;;QAG3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;;AAIrB;;;;;AAKG;IACH,mCAAmC,GAAA;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCE;;AAIJ;;;;AAIG;AACH,IAAA,+BAA+B,CAAC,KAA4B,EAAA;AAC1D;;;;;;;;;AASE;;AAGJ;;;;;;;AAOG;IACH,mBAAmB,GAAA;;AAEjB,QAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CACtD,gBAAgB,EAChB,KAAK,EACL,IAAI,CACL;;AAED,QAAA,IAAI,8BAA8B,GAAkB,IAAI,CAAC,KAAK,CAAC;AAC7D,cAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,CAAC;cAC1D,EAAE;QACJ,IAAI,0BAA0B,GAAkB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;cACrE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,CAAC;cACtE,EAAE;;;QAGN,IAAI,CAAC,iCAAiC,GAAG,qBAAqB,CAAC,MAAM,CACnE,CAAC,KAAqC,KACpC,CAAC,8BAA8B,CAAC,IAAI,CAClC,CAAC,GAAG,KACF,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,CAClE,CACJ;QACD,IAAI,CAAC,6BAA6B,GAAG,qBAAqB,CAAC,MAAM,CAC/D,CAAC,KAAqC,KACpC,CAAC,0BAA0B,CAAC,IAAI,CAC9B,CAAC,GAAG,KACF,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,CAClE,CACJ;;AAGH;;;;AAIG;IACH,wBAAwB,GAAA;;AAIxB;;;;;AAKG;AACH,IAAA,uBAAuB,CAAC,WAAkC,EAAA;AAEvD,QAAA,IAAI,CAAC,KAA4B,CAAC,cAAc,GAAG,WAAmC;QAEpF,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,UAAyB,KAAI;AACtF,YAAA,IAAI,OAAO,UAAU,CAAC,aAAa,IAAI,WAAW,EAAC;AAEjD,gBAAA,IAAI,QAAQ,GAAG,aAAa,GAAC,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,GAAC,UAAU,GAAG,UAAU,CAAC,cAAc;AAC1G,gBAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE;AAErB,gBAAA,GAAG,CAAC,GAAG,GAAG,QAAQ;gBAClB,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAC,YAAA;AACxB,oBAAA,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK;AACnC,oBAAA,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM;AACrC,oBAAA,UAAU,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,eAAe;AACxE,oBAAA,IAAI,IAAI,CAAC,wBAAwB,EAAC;AAAE,wBAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;;AAClF,iBAAC,CAAC;;AAGN,SAAC,CAAC;;AAIN,IAAA,sBAAsB,CAAC,WAAkC,EAAA;QAEtD,IAAI,CAAC,KAAoB,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAkB;AAExE,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,WAAW,EAAC;YAEnG,IAAI,QAAQ,GAAG,aAAa,GAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,EAAE,GAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc;AACtI,YAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE;AAErB,YAAA,GAAG,CAAC,GAAG,GAAG,QAAQ;YAClB,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAC,YAAA;gBAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK;gBACjD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM;gBACnD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,QAAQ;AACjF,aAAC,CAAC;;;AAMR,IAAA,iCAAiC,CAAC,WAAkC,EAAA;QAEjE,IAAI,CAAC,KAA+B,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAkB;AAEnF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,WAAW,EAAC;YAEnG,IAAI,QAAQ,GAAG,aAAa,GAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,EAAE,GAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc;AACtI,YAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE;AAErB,YAAA,GAAG,CAAC,GAAG,GAAG,QAAQ;YAClB,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAC,YAAA;gBAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK;gBACjD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM;gBACnD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,oBAAoB;AAC7F,aAAC,CAAC;;;AAMR;;;;;;;AAOG;IACH,uBAAuB,CAAC,KAAK,EAAE,YAAoB,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;AAC1D,YAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS;gBAC1B,KAAK,aAAa,CAAC,MAAM;gBACzB,KAAK,aAAa,CAAC,QAAQ;oBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;wBAC7B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,KAAK,EAAU;;AAEhD,oBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;oBACxD;gBACA,KAAK,aAAa,CAAC,sBAAsB,CAAC;oBACxC;gBACJ,KAAK,aAAa,CAAC,QAAQ;oBACzB;gBACF,KAAK,aAAa,CAAC,iBAAiB,CAAC;AACnC,oBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;wBAC1D;;AAEF,oBAAA,IAAI,CAAE,IAAI,CAAC,KAAwB,CAAC,UAAU,EAAE;AAC7C,wBAAA,IAAI,CAAC,KAAwB,CAAC,UAAU,GAAG,EAAE;;oBAE/C,IAAI,CAAC,KAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAChE,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK;AAC3B,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC5C;;AAEJ,YAAA,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;;;AAIpC;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAK,IAAI,CAAC,KAAwB,CAAC,UAAU,EAAE;AAC7C,YAAA,OAAO,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,KAAwB,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;gBACtE,OAAO;AACL,oBAAA,GAAG,EAAE,CAAC;oBACN,KAAK,EAAG,IAAI,CAAC,KAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;iBACpD;AACH,aAAC,CAAC;;aACG;AACL,YAAA,OAAO,EAAE;;;AAIb;;;AAGG;AACH,IAAA,uBAAuB,CAAC,GAAW,EAAA;QACjC,OAAQ,IAAI,CAAC,KAAwB,CAAC,UAAU,CAAC,GAAG,CAAC;;AAGvD;;;AAGG;;;;;;;;;;;;;;;;;;;;;IAsBH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,IAAI,CAAC,eAAe;AAC5B,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AAC5B,aAAA;AACF,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACvD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzF,SAAC,CAAC;;;;IAKJ,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC7D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,IAAI,CAAC,eAAe;AAC5B,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC9B,aAAA;AACF,SAAA,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACzD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC3F,SAAC,CAAC;;;;IAKJ,8BAA8B,GAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC7D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,IAAI,CAAC,eAAe;AAC5B,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS;AAC1C,aAAA;AACF,SAAA,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvG,SAAC,CAAC;;;AAIJ,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;;;;AAI1D;;;;;;AAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDH;;;AAGG;IACH,gBAAgB,GAAA;AAEd,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC/B,YAAA,OAAO,IAAI;;AAGb,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS;YAC1B,KAAK,aAAa,CAAC,iBAAiB,CAAC;AAEnC,gBAAA,IACG,IAAI,CAAC,KAAwB,CAAC,OAAO,IAAI,SAAS;AAClD,oBAAA,IAAI,CAAC,KAAwB,CAAC,OAAO,IAAI,EAAE,EAC5C;AACA,oBAAA,IAAI,CAAE,IAAI,CAAC,KAAwB,CAAC,UAAU,EAAE;AAC7C,wBAAA,IAAI,CAAC,KAAwB,CAAC,UAAU,GAAG,EAAE;;AAEhD,oBAAA,OAAO,KAAK;;AAGd,gBAAA,IACG,IAAI,CAAC,KAAwB,CAAC,WAAW,IAAI,SAAS;AACtD,oBAAA,IAAI,CAAC,KAAwB,CAAC,WAAW,IAAI,IAAI;AACjD,oBAAA,IAAI,CAAC,KAAwB,CAAC,WAAW,IAAI,EAAE,EAAC;AACjD,oBAAA,OAAO,KAAK;;AAGd,gBAAA,QACE,CAAE,IAAI,CAAC,KAAwB,CAAC,UAAU;oBACzC,IAAI,CAAC,KAAwB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAG1D,KAAK,aAAa,CAAC,iBAAiB,CAAC;AAErC,gBAAA,QACE,CAAE,IAAI,CAAC,KAA4B,CAAC,cAAc;AACjD,oBAAA,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;oBAC7D,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,IAAI,CACpD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CACpK,IAAI,IAAI;YAGX,KAAK,aAAa,CAAC,MAAM;AACvB,gBAAA,QACE,CAAE,IAAI,CAAC,KAAqB,CAAC,UAAU;oBACtC,IAAI,CAAC,KAAqB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;AAEvD,YAAA;AACE,gBAAA,OAAO,KAAK;;;;;AAMlB;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,IAAa,EAAA;QAC/B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAC;AAAE,YAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;;QAC9E,IAAI,IAAI,EAAE;;YAER,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,iBAAiB,CAAC,EAAE;AAC3D,gBAAA,IAAG,CAAE,IAAI,CAAC,KAAwB,CAAC,OAAO,IAAK,IAAI,CAAC,KAAwB,CAAC,OAAO,IAAI,EAAE,MAAO,IAAI,CAAC,KAAwB,CAAC,WAAW,IAAK,IAAI,CAAC,KAAwB,CAAC,WAAW,IAAI,EAAE,CAAC,EAAC;AAC7L,oBAAA,IAAI,CAAC,KAAwB,CAAC,UAAU,GAAG,IAAI;;;YAGpD,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,iBAAiB,CAAC,EAAE;AAC3D,gBAAA,KAAK,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAE;oBAC/D,IAAI,CAAC,KAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;wBACvE,UAAU,CAAC,oBAAoB,GAAI,IAAI,CAAC,KAA4B,CAAC,qBAAqB;AAC5F,qBAAC,CAAC;;;YAGN,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,QAAQ,EAAE;gBACjD,KAAK,IAAI,CAAC,KAAoB,CAAC,aAAa,IAAI,IAAI,GAAE;AACnD,oBAAA,IAAI,CAAC,KAAoB,CAAC,aAAa,CAAC,oBAAoB,GAAI,IAAI,CAAC,KAAoB,CAAC,qBAAqB;;;YAGpH,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,sBAAsB,CAAC,EAAE;gBAChE,KAAK,IAAI,CAAC,KAA+B,CAAC,aAAa,IAAI,IAAI,GAAE;AAC9D,oBAAA,IAAI,CAAC,KAA+B,CAAC,aAAa,CAAC,oBAAoB,GAAI,IAAI,CAAC,KAA+B,CAAC,qBAAqB;;;YAG1I,aAAa,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC;YACzD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;AAMlC;;;AAGG;IACK,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;YACrC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW;YACjD,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;YAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;YACzC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY;YACnD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU;YAC/C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY;YACnD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;YACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;YAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU;YAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS;;;;AAKjD,IAAA,eAAe,CAAC,UAAU,EAAA;QACxB,IAAG,UAAU,EAAC;YACZ,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;;aAChC;AACL,YAAA,OAAO,CAAC;;;IAIZ,gBAAgB,GAAA;;AAGd,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAE9B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC/B,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAChH,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;AAC3G,gBAAA;AACE,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC;AACjC,oBAAA,QAAQ,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACxE,iBAAA;AACD,gBAAA;AACE,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;oBAClC,QAAQ,EAAE,CAAC,OAAO,KAChB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;AACrF,iBAAA;AACF;AACF,SAAA,CAAC;AAEJ,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,EAAC,gBAAgB;AACpB,YAAA,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,UAAU,CAAC,gBAAgB;YACjC,gBAAgB,EAAE,IAAI,CAAC,8BAA8B;AACtD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,EAAC,WAAW;AACf,YAAA,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,UAAU,CAAC,gBAAgB;YACjC,gBAAgB,EAAE,IAAI,CAAC,4BAA4B;AACpD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,EAAC,aAAa;AACjB,YAAA,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,UAAU,CAAC,gBAAgB;YACjC,gBAAgB,EAAE,IAAI,CAAC,8BAA8B;AACtD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,EAAC,cAAc;AAClB,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,EAAC,eAAe;AACnB,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;;IAII,WAAW,CACjB,OAAsB,EACtB,MAAe,EAAA;AAEf,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;AAChE,QAAA,MAAM,WAAW,GAAG,aAAa,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAErD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC;QAEzD,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAC;AAAE,YAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;;;IAGxE,uBAAuB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC1C,gBAAA,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;AAClE,aAAC,CAAC;;;IAIN,wBAAwB,GAAA;QACtB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB;;AAG/D,IAAA,eAAe,CAAC,EAAiB,EAAE,CAAS,EAAE,GAAW,EAAA;AACnD,QAAA,6BAA6B,CAAC,OAAO,CAAC,4BAA4B,EAAE,MAAK;AACzE,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAC;AAAE,gBAAA,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;;AAEjF,SAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC;;AAGlC,IAAA,WAAW,CAAC,EAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI;;;IAIjC,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,oBAAoB,EAAC;AAEnG,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAC,QAAQ;AAChF,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;AAEtG,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjD,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,UAAU,EAAE,oBAAoB;AAChC,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;;aAEG;AAEL,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gEAAgE,EAAE,EAAC,YAAY,EAAE,MAAM,EAAC;iBAC3G,SAAS,CAAC,qBAAqB,IAAG;AACjC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;AACxE,aAAC,CAAC;;;IAKP,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;;AAG1B,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAC/D,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;YAAE,IAAI,CAAC,YAAY,EAAE;;AACpE,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAC;AAE5C,YAAA,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,MAAM,CAAC;;;AAK5C,IAAA,wBAAwB,CAAC,IAAS,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI;AAC5C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;AAG7B,IAAA,gBAAgB,CAAC,IAAI,EAAA;AACnB,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,EAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe;;AAChH,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,WAAW,IAAI,OAAO,IAAI,CAAC,cAAc,IAAI,WAAW,EAAC;AAC1F,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAkC;YAC7D,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,GAAG,CAAC,iBAAiB,GAAC,GAAG,GAAC,GAAG,CAAC,YAAY,GAAC,IAAI,GAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,gBAAgB,EAAC,CAAC;AACjJ,aAAC,CAAC;;;IAIN,aAAa,GAAA;AACX,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC5B,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,kBAAkB,EACnD,mBAAmB,EACnB,CAAC,GAAgB,KAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE5E,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,EAAC;gBACzE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;AACrF,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3D,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAmB;gBAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAG;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACnD,iBAAC,CAAC;gBAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEhF,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,IAAI,IAAI,EAAC;oBACtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC;;;SAIjG,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;IAGH,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAC,IAAI,CAAC,QAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;AAChF,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAmB;YAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAG;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACjD,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;;aACrD;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI;AAC5C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,GAAG,IAAI;;;IAItD,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;;aACzD;YACL,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,GAAG,IAAI;;;IAItD,2BAA2B,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC;;wGAl8CtF,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAyD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,8oGClFlC,ilwEAqwCE,EAAA,MAAA,EAAA,CAAA,+jwCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtD,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2B,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjE,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlE,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmE,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmE,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnrCW,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mCAAmC,EAAA,QAAA,EAAA,ilwEAAA,EAAA,MAAA,EAAA,CAAA,+jwCAAA,CAAA,EAAA;qOAMpC,IAAI,EAAA,CAAA;sBAAZ;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAES,GAAG,EAAA,CAAA;sBAAZ;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAiBD,qBAAqB,EAAA,CAAA;sBADpB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGpD,sBAAsB,EAAA,CAAA;sBADrB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrD,yBAAyB,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,2BAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGxD,wBAAwB,EAAA,CAAA;sBADvB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGvD,qBAAqB,EAAA,CAAA;sBADpB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGpD,wBAAwB,EAAA,CAAA;sBADvB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGvD,2BAA2B,EAAA,CAAA;sBAD1B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,6BAA6B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAG1D,sBAAsB,EAAA,CAAA;sBADrB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrD,iCAAiC,EAAA,CAAA;sBADhC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mCAAmC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGhE,8BAA8B,EAAA,CAAA;sBAD7B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gCAAgC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAG7D,0BAA0B,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGzD,uBAAuB,EAAA,CAAA;sBADtB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGtD,kBAAkB,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAcH,aAAa,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAK5C,+BAA+B,EAAA,CAAA;sBAD9B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iCAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAoBC,8BAA8B,EAAA,CAAA;sBAA5F,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gCAAgC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACA,4BAA4B,EAAA,CAAA;sBAAxF,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,8BAA8B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACI,8BAA8B,EAAA,CAAA;sBAA5F,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gCAAgC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACH,wBAAwB,EAAA,CAAA;sBAAjF,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACP,eAAe,EAAA,CAAA;sBAA/D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAMN,QAAQ,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;ME3K5B,4BAA4B,CAAA;;AAG5B,IAAA,SAAS;AAER,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;;IAGtE,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;IAEZ,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;IAEb,aAAa,GAAG,YAAY;IAE5B,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB,GAAsB,iBAAiB,CAAC,GAAG,CAAC;IACjE,eAAe,GAAY,KAAK;IAEhC,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;AACrF,IAAA,KAAK;AAEL,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAkB;QAC9C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAkC;QAC9E,IAAI,CAAC,UAAU,EAAE;;IAGnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlF,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,KAAK,YAAY,CAAC,KAAK;AACrB,gBAAA,OAAO,OAAO;YAChB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,UAAU;YACnB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,KAAK;YACd,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,MAAM;;;AAInB;;AAEE;IAEF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;wGA7EtB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,4KCbzC,yxCAwCA,EAAA,MAAA,EAAA,CAAA,odAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtE,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD3Ba,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,yxCAAA,EAAA,MAAA,EAAA,CAAA,odAAA,CAAA,EAAA;wDAOtB,SAAS,EAAA,CAAA;sBAAjB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MENQ,+BAA+B,CAAA;AAEjC,IAAA,SAAS;AACR,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;IACpE,eAAe,GAAU,EAAE;IAC3B,iBAAiB,GAA+B,EAAE;IAClD,oBAAoB,GAAG,oBAAoB;AAC3C,IAAA,qBAAqB,GAAyB,oBAAoB,CAAC,GAAG,CAAC;IACvE,eAAe,GAAY,KAAK;IAEhC,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;AAErF,IAAA,KAAK;;AAGL,IAAA,aAAa;AACb,IAAA,aAAa;AAEf,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAqB;QACjD,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAqC;QAEjF,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;;;IAIjB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF;;AAEE;IACF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGjC;;AAEE;IACM,0BAA0B,GAAA;QAEhC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAC,IAAI,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAC,GAAG,GAAG,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,mBAAmB,CAAC,SAAS,GAAG,mBAAmB,CAAC,OAAO;AAC1H,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAC,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS;YACnF,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;AAE5D,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAC,GAAG;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,SAAS;YACvF,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAChE,IAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAG,KAAK,EAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;;iBAChJ;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;aACxC;AACH,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC;;;AAIxC;;AAEE;IACM,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;wGAzFxE,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,iJCb5C,0gCAeM,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDFO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,0gCAAA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA;wDAM3B,SAAS,EAAA,CAAA;sBAAjB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MENU,+BAA+B,CAAA;AAEjC,IAAA,SAAS;AACR,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;AAEpE,IAAA,KAAK;IAEL,eAAe,GAAU,EAAE;IAC3B,oBAAoB,GAAG,oBAAoB;AAC3C,IAAA,qBAAqB,GAAyB,oBAAoB,CAAC,EAAE;IACrE,eAAe,GAAY,KAAK;IAEhC,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;;AAGvF,IAAA,aAAa;AACb,IAAA,aAAa;AAEb,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAqB;QACjD,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAqC;QACjF,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,EAAE;;;IAMjB,UAAU,GAAA;AACR,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC5E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGjF;;AAEE;IACF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGjC;;AAEE;;;;;;;;;;;;;;;;;;;AAqBF;;AAEE;IACM,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;;wGAnFxE,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,iJCV5C,++BAgBA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDNa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,++BAAA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA;wDAM3B,SAAS,EAAA,CAAA;sBAAjB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,4BAA4B,CAAA;AAE9B,IAAA,SAAS;AACR,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;AAEpE,IAAA,KAAK;IAEL,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB,GAAsB,iBAAiB,CAAC,GAAG,CAAC;IACjE,eAAe,GAAY,KAAK;IAEhC,KAAK,GAAG,QAAQ;IAChB,QAAQ,GAAG,YAAY;AACvB,IAAA,IAAI;IAEJ,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;IAErF,YAAY,GAAW,IAAI;AAE3B,IAAA,WAAA,GAAA;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAkB;QAC9C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAkC;QAC9E,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,eAAe,EAAE;;AAGxB;;;AAGG;IACK,WAAW,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU;YAC3B,KAAK,gBAAgB,CAAC,WAAW,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU;gBAC/B;YACF,KAAK,gBAAgB,CAAC,YAAY,CAAC;AACjC,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,cAAc;gBACnC;;;AAIR;;AAEE;IACF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGjC,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;;aACpC;YACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAC;AACzD,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;YAElC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAC;AAC1D,gBAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB;;YAExC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAC;AAC3D,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;;;wGA5EpB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,8ICXzC,66BAaM,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDFO,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,66BAAA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA;wDAMxB,SAAS,EAAA,CAAA;sBAAjB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEDU,iCAAiC,CAAA;;AAGjC,IAAA,SAAS;AAER,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;IAEpE,sBAAsB,GAAG,sBAAsB;AAC/C,IAAA,8BAA8B,GAA2B,sBAAsB,CAAC,qBAAqB,CAAC;AAEtG,IAAA,aAAa;AACb,IAAA,aAAa;IAEb,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;AACrF,IAAA,KAAK;IACL,oBAAoB,GAAG,oBAAoB;IAE3C,SAAS,GAAuE,EAAE;IAElF,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAuB;QACnD,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,YAAY,EAAE;;IAGrB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;AAGlF;;AAEE;IAEF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,8BAA8B;AAClD,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGzB,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAEhF,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;AACjF,SAAC,CAAC;;wGA1DK,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,kLCb9C,u+BAgBM,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDHO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;+BACE,6BAA6B,EAAA,QAAA,EAAA,u+BAAA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA;8BAO5B,SAAS,EAAA,CAAA;sBAAjB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MENQ,gCAAgC,CAAA;;AAGhC,IAAA,SAAS;AAER,IAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;AAC/D,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO;AAEpE,IAAA,KAAK;;IAGP,gBAAgB,GAAG,KAAK;AACxB,IAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,IAAA,OAAO;AACP,IAAA,YAAY;IAEZ,GAAG,GAAU,IAAI;;AAEjB,IAAA,aAAa;AACb,IAAA,aAAa;IAGb,aAAa,GAAG,YAAY;IAE5B,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB,GAAsB,iBAAiB,CAAC,GAAG,CAAC;IACjE,eAAe,GAAY,KAAK;IAEhC,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;AAErF,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAkB;QAC9C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAkC;QAC9E,IAAI,CAAC,UAAU,EAAE;;IAEnB,UAAU,GAAA;;AAER,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC/E,QAAA,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlF,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,KAAK,YAAY,CAAC,KAAK;AACrB,gBAAA,OAAO,OAAO;YAChB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,UAAU;YACnB,KAAK,YAAY,CAAC,QAAQ;AACxB,gBAAA,OAAO,KAAK;YACd,KAAK,YAAY,CAAC,GAAG;AACnB,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,MAAM;;;AAIrB;;AAEE;IACF,eAAe,GAAA;AAEb,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7C,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,oBAAoB,EAAE,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;;wGA7EpB,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,gLCb7C,6zCAwCA,EAAA,MAAA,EAAA,CAAA,8hBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD3Ba,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,6zCAAA,EAAA,MAAA,EAAA,CAAA,8hBAAA,CAAA,EAAA;wDAO1B,SAAS,EAAA,CAAA;sBAAjB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFQ,gCAAgC,CAAA;AAsBjC,IAAA,MAAA;AApBD,IAAA,SAAS;AACT,IAAA,IAAI;AACH,IAAA,aAAa,GAA4B,IAAI,YAAY,EAAa;AAEhF,IAAA,UAAU,GAA4B,IAAI,uBAAuB,EAAE;IACnE,aAAa,GAAG,aAAa;;AAG7B,IAAA,iBAAiB;AACjB,IAAA,uBAAuB;AACvB,IAAA,oBAAoB;IACpB,uBAAuB,GAAY,KAAK;AACxC,IAAA,wBAAwB;AAC8B,IAAA,qBAAqB;;AAG5C,IAAA,aAAa;AACN,IAAA,oBAAoB;AAE1D,IAAA,WAAA,CACU,MAAiB,EAAA;QAAjB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,QAAQ,GAAA;AAEN,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACzE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;QAChC,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,yCAAyC,EAAE;;AAGtF;;;AAGG;AACH,IAAA,eAAe,CAAC,EAAE,EAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG7B;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,KAAgB,EAAA;QACpC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YACjF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;;aACvD;AACL,YAAA,OAAO,IAAI;;;wGAjDJ,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzC,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,qeCjB7C,00CAuB8B,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsE,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDNjB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,00CAAA,EAAA;gFAM7B,SAAS,EAAA,CAAA;sBAAjB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBAWqD,qBAAqB,EAAA,CAAA;sBAA1E,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrB,aAAa,EAAA,CAAA;sBAA3C,YAAY;uBAAC,eAAe;gBACS,oBAAoB,EAAA,CAAA;sBAAzD,YAAY;uBAAC,sBAAsB;;;MEnBzB,uBAAuB,CAAA;AAsBd,IAAA,MAAA;AAA2B,IAAA,oBAAA;AApBhC,IAAA,IAAI;IACD,OAAO,GAAY,IAAI;IACtB,QAAQ,GAAQ,IAAI;AACP,IAAA,qBAAqB;AAE3C,IAAA,YAAY,GAA0B,IAAI,YAAY,EAAW;IAE3E,aAAa,GAAG,aAAa;IAC7B,QAAQ,GAAY,KAAK;AACzB,IAAA,eAAe;AACf,IAAA,WAAW,GAAe,IAAI,KAAK,EAAO;AAC1C,IAAA,sBAAsB,GAAe,IAAI,KAAK,EAAO;IACrD,cAAc,GAAG,cAAc;IAC/B,mBAAmB,GAAG,uBAAuB;AAE7C,IAAA,gBAAgB;AAC8B,IAAA,aAAa;AAE3D,IAAA,KAAK;IAEL,WAAoB,CAAA,MAAiB,EAAU,oBAA0C,EAAA;QAArE,IAAM,CAAA,MAAA,GAAN,MAAM;QAAqB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAEnE,QAAQ,GAAA;AAEN,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAC;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,KAAK,EAAoB;;aAClD;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YACzB,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AAEjD,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,KAAK,EAAO;YAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACnE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAC,CAAC;AAC5K,aAAC,CAAC;AAEF,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACjD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;AAC9F,aAAC,CAAC;;QAIJ,IAAI,iBAAiB,GAAY,KAAK;AACtC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACnD,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,uBAAuB,CAAC,QAAQ,EAAC;oBACxE,iBAAiB,GAAG,IAAI;;AAE5B,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAI,iBAAiB,EAAC;YACpB,IAAI,CAAC,aAAa,EAAE;;;IAKxB,eAAe,CAAC,eAA0B,EAAE,gBAAkC,EAAA;QAC5E,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,oBAAoB,GAAG,eAAe,CAAC,oBAAoB;QAC5H,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa;QAE9G,IAAI,UAAU,GAAG,KAAK;QACtB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC5C,IAAI,SAAS,CAAC,oBAAoB,IAAI,wBAAwB,CAAC,EAAE,EAAC;gBAAE,UAAU,GAAG,IAAI;;YACrF,IAAI,UAAU,EAAC;AAAE,gBAAA,SAAS,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,EAAE;;AAC/E,SAAC,CAAC;;IAGJ,YAAY,GAAA;AACV,QAAA,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;AAC7C,QAAA,gBAAgB,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE;AACxC,QAAA,gBAAgB,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE;AACtC,QAAA,gBAAgB,CAAC,aAAa,GAAG,IAAI;AACrC,QAAA,gBAAgB,CAAC,oBAAoB,GAAG,IAAI;QAC5C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAGhD,IAAA,eAAe,CAAC,OAAyB,EAAA;QACvC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;;IAGzC,iBAAiB,CAAC,EAAa,EAAE,SAA2B,EAAA;AAC1D,QAAA,SAAS,CAAC,KAAK,GAAG,EAAE;QACpB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;;AAGhC,IAAA,cAAc,CAAC,IAAa,EAAA;AAC1B,QAAA,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACzD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;aACvB;YACL,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;gBACnD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,WAAW,EAAC;AAAE,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;;gBAC5E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY;gBACtD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG;AACnD,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YAEpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAIxC,IAAA,eAAe,CAAC,OAAY,EAAA;AAE1B,QAAA,aAAa,CAAC,QAAQ,CAAC,oDAAoD,EAAC,OAAO,CAAC;QACpF,aAAa,CAAC,QAAQ,CAAC,4CAA4C,EAAC,IAAI,CAAC,QAAQ,CAAC;AAElF,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,KAAK,EAAO;;AAE9C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACtD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI;AACxF,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAC,CAAC;AACxD,SAAC,CAAC;;AAEF;;;;;AAKM;QACN,aAAa,CAAC,QAAQ,CAAC,0DAA0D,EAAC,IAAI,CAAC,sBAAsB,CAAC;;AAKhH,IAAA,oBAAoB,CAAC,YAAiB,EAAA;;AAGtC,IAAA,iBAAiB,CAAC,YAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;AAC/E,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA;AACF,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACvD,IAAI,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;YACtF,eAAe,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC1F,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;AAC5C,SAAC,CAAC;;IAGJ,aAAa,GAAA;AAEX,QAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;QACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC5B,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,kBAAkB,EACnD,mBAAmB,EACnB,CAAC,GAAgB,KAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5E,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC1C,IAAI,GAAG,CAAC,IAAI,IAAI,uBAAuB,CAAC,QAAQ,EAAC;oBAC/C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC;;AAExD,aAAC,CAAC;SAEH,EACD,CAAC,GAAG,KAAO,GAAC,CACb;;IAGH,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAA;AAChC,QAAA,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE;;wGAjLjB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5E,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,oVCjBpC,2gJAwFc,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2B,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDvED,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,2gJAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA;gHAMZ,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM;gBACK,OAAO,EAAA,CAAA;sBAAxB,KAAK;uBAAC,SAAS;gBACG,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU;gBACe,qBAAqB,EAAA,CAAA;sBAApD,KAAK;uBAAC,uBAAuB;gBAEpB,YAAY,EAAA,CAAA;sBAArB;gBAW6C,aAAa,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEnC9C;MAwDa,qCAAqC,CAAA;AAkItC,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,oBAAA;AACA,IAAA,SAAA;IAnID,SAAS,GAAY,KAAK;AAE1B,IAAA,cAAc,GACrB,IAAI,+BAA+B,EAAE;IAC9B,MAAM,GAAW,IAAI;AACrB,IAAA,WAAW;AACX,IAAA,QAAQ,GAAW,WAAW,CAAC;IAC/B,oBAAoB,CAA6B;AACjD,IAAA,QAAQ;AACR,IAAA,iBAAiB;IAE1B,MAAM,GAAY,KAAK;AACvB;;;AAGG;IACH,SAAS,GAAW,IAAI;AACxB;;;;;AAKG;IACH,qBAAqB,GAA0B,IAAI;AACnD;;;AAGG;IACH,aAAa,GAAW,IAAI;AAC5B,IAAA,OAAO,GAAY,IAAI,OAAO,EAAE;;AAGhC,IAAA,YAAY;AACZ,IAAA,gBAAgB;AAChB,IAAA,eAAe;;AAGf,IAAA,cAAc,GAAW,IAAI,CAAC;AAC9B,IAAA,eAAe;AAC8B,IAAA,YAAY;AAEzD,IAAA,IAAI,GAAS,IAAI,IAAI,EAAE;IACvB,UAAU,GAAS,IAAI;IACvB,KAAK,GAAY,KAAK;IACtB,MAAM,GAAW,IAAI;IACrB,MAAM,GAAW,EAAE;IACnB,kBAAkB,GAAY,KAAK;AACnC,IAAA,YAAY;;AAGZ,IAAA,UAAU,GAA+B,IAAI,0BAA0B,CACrE,IAAI,EACJ,KAAK,EACL,KAAK,EACL,GAAG,CACJ;IAED,aAAa,GAAqB,IAAI;IACtC,aAAa,GAAG,KAAK;AACrB,IAAA,WAAW;AACX,IAAA,kBAAkB;AAElB,IAAA,yBAAyB;;IAGzB,YAAY,GAAG,YAAY;IAC3B,kBAAkB,GAAG,kBAAkB;;;AAIvC,IAAA,aAAa;AACgC,IAAA,WAAW;AACxD,IAAA,aAAa;AACb,IAAA,kBAAkB;AAClB,IAAA,uBAAuB;AACvB,IAAA,cAAc;AAC8B,IAAA,WAAW;AAEvD,IAAA,0BAA0B;;;AAI1B,IAAA,iBAAiB;AACjB,IAAA,sBAAsB;AACtB,IAAA,kBAAkB;AAElB,IAAA,eAAe;AACf,IAAA,eAAe;;;AAIf,IAAA,sBAAsB;AAEtB,IAAA,oBAAoB;AACpB,IAAA,cAAc;AACd,IAAA,mBAAmB;AACnB,IAAA,uBAAuB;AAEvB,IAAA,oBAAoB;;AAGpB;;AAEG;AACO,IAAA,aAAa,GAAuB,IAAI,YAAY,EAAQ;AAEtE;;AAEG;AACO,IAAA,kBAAkB,GAAuB,IAAI,YAAY,EAAQ;;AAGjE,IAAA,GAAG,GAA2B,IAAI,YAAY,EAAY;;AAGpE,IAAA,iBAAiB;AAC8B,IAAA,cAAc;AAC7D,IAAA,eAAe;AACf,IAAA,eAAe;AACgC,IAAA,aAAa;IAE5D,aAAa,GAAY,KAAK;;IAG9B,yBAAyB,GAAW,IAAI;IACxC,8BAA8B,GAAW,IAAI;AAE7C,IAAA,WAAA,CACU,WAA+B,EAC/B,MAAiB,EACjB,oBAA0C,EAC1C,SAAuB,EAAA;QAHvB,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAGnB,QAAQ,GAAA;AACN,QAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QACxC,aAAa,CAAC,QAAQ,CAAC,2BAA2B,EAAE,IAAI,CAAC,cAAc,CAAC;QACxE,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC;AAExD,QAAA,IAAI,CAAC,aAAa;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,aAAa;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,OAAO;AACrE,QAAA,IAAI,CAAC,qBAAqB;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,qBAAqB;;QAEtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,SAAS;AAEzE,QAAA,IAAI,CAAC,IAAI;AACP,YAAA,IAAI,CAAC,cAAc,CAAC,uCAAuC,CAAC,IAAI;AAClE,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,IAAI,CAAC,cAAc,CAAC,uCAAuC,CAAC,MAAM;AACpE,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,IAAI,CAAC,cAAc,CAAC,uCAAuC,CAAC,MAAM;AACpE,QAAA,IAAI,CAAC,kBAAkB;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,uCAAuC,CAAC,kBAAkB;AAChF,QAAA,IAAI,CAAC,YAAY;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,uCAAuC,CAAC,YAAY;QAExE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAEhC,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;AAE/C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGpB;;;;;AAKG;IACH,yBAAyB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,aAAa,EAAE;AACrD,YAAA,IAAI,CAAC,qBAAqB;AACxB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CACjD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,SAAS,CACf;AACH,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG;AACxD,oBAAA;AACE,wBAAA,SAAS,EAAE,IAAI;wBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,wBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,qBAAA;iBACF;;;;AAIP,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;YACtD,KAAK,CAAC,yCAAyC,CAAC;AAChD,YAAA,OAAO,KAAK;;aACP;AACL,YAAA,OAAO,IAAI;;;AAGf,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,IAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC;YAC7B,MAAM,eAAe,GAAG,iBAAiB;;AAEzC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;;QAEpD,IAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,EAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAGhC,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE1B,MAAM,WAAW,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;;AAE9D,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC;AACL,QAAA,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;AACX,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC;AACjB,YAAA,OAAO,KAAK;;;;AAKhB,IAAA,QAAQ,CAAC,KAAK,EAAA;QACZ,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,QAAA,UAAU,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC;AAC5C,QAAA,UAAU,CAAC,MAAM,GAAG,MAAK;AACzB,YAAA,aAAa,CAAC,QAAQ,CAAC,yCAAyC,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7F,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE;AAElD,YAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;AAC/B,gBAAA,IAAI,OAAO,CAAC,kCAAkC,CAAC,EAAE;;oBAE/C,IAAI,YAAY,GAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACxD,oBAAA,YAAY,CAAC,EAAE,GAAG,EAAE;oBACpB,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,cAAc;AAEtD,oBAAA,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AACjD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AACtC,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;oBAE/B,IAAI,CAAC,WAAW,EAAE;;;iBAEf;gBACL,KAAK,CAAC,mBAAmB,CAAC;;AAE9B,SAAC;AACD,QAAA,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;YAC7B,KAAK,CAAC,2DAA2D,CAAC;AAClE,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACtB,SAAC;;AAGH,IAAA,eAAe,CAAC,IAAU,EAAA;;AAGxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM;;QAG/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC5B,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,iBAAiB,CAAC,EAAC;gBACrD,KAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAClE,oBAAA,UAAU,CAAC,EAAE,GAAG,CAAC;AACnB,iBAAC,CAAC;;AAEN,SAAC,CAAC;AACF,QAAA,OAAO,IAAI;;IAGb,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;;;;AAIlB,SAAA,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;;AAK9B;;AAEG;IAEH,MAAM,GAAA;AAEJ,QAAA,MAAM,mBAAmB,GACzB,IAAI,KAAK,EAAsB;QAC/B,mBAAmB,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,YAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,kBAAkB,EACnD,mBAAmB,EACnB,CAAC,SAAiB,KAAI;AAEpB,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;YAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAC,IAAI,CAAC,MAAM,GAAC,WAAW,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE;AAEd,SAAC,EACD,CAAC,GAAG,KAAI;AACN,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,EAAE,CAAC;AACtC,SAAC,CACF;;AAIH;;;AAGG;IACH,WAAW,GAAA;QACT,IACE,IAAI,CAAC,MAAM;AACX,YAAA,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAChC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD;AACA,YAAA,MAAM,mBAAmB,GACvB,IAAI,KAAK,EAAsB;YACjC,mBAAmB,CAAC,IAAI,CAAC;AACvB,gBAAA,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,gBAAA,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,EAChD,mBAAmB,EACnB,CAAC,GAAS,KAAI;AACZ,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC/B,aAAC,EACD,CAAC,GAAG,KAAI;AACN,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,EAAE,CAAC;AACtC,aAAC,CACF;;aACI;YACL,IAAI,CAAC,mBAAmB,EAAE;;;AAI9B;;AAEG;AAEH,IAAA,eAAe,CAAC,GAAS,EAAA;;AAGrB,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE;QACtB,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI;QACjC,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI;AACjC,QAAA,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;AACnC,QAAA,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc;AACzC,QAAA,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB;AAC7C,QAAA,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe;AAC3C,QAAA,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACzB,QAAA,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY;AACrC,QAAA,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;AACjC,QAAA,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY;AACrC,QAAA,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;QAEzB,IAAI,CAAC,YAAY,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI;QACxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAC3D,+BAA+B;AAC7B,YAAA,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAC3C;;;AAML;;;;AAIG;IACH,sBAAsB,GAAA;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EAAE;YAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC;AACpD,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,kBAAkB,EAClB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACjD,oBAAA,UAAU,CAAC,QAAQ;AACnB,oBAAA,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7B,iBAAA,CAAC,CACH;;;aAEE;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACjC,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACjD,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC;;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;QAC3C,IAAI,CAAC,gBAAgB,EAAE;;AAGzB;;;;;AAKG;AACH,IAAA,yBAAyB,CAAC,KAAK,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAkB;;YAE1D,IACE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CACzC,EACD;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;;;AAGpE,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CACtD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3B;AACD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAC9B,IAAI,CAAC,gCAAgC,EAAE;;;AAI3C;;;AAGG;AACH,IAAA,0BAA0B,CAAC,SAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EACjE,CAAC,CACF;;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CACtD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3B;;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,OAAO,CAC/D,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAC7B;;QAEH,IAAI,CAAC,gCAAgC,EAAE;;AAGzC;;;;AAIG;IACH,eAAe,CAAC,QAAmB,IAAI,EAAA;AAErC,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAC,KAAK,CAAC;QAEpC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;;YAItD,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;YAE1C,IAAG,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,EAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;;;aAE3H;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;AAIhC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACvD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC;;AAGJ;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,KAAK,EAAE;AACT,YAAA,IACE,IAAI,CAAC,IAAI,CAAC,MAAM;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;AACvB,qBAAC,IAAI,CAAC,kBAAkB,IAAI;AAC1B,0BAAE;0BACA,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CACrC,EACD;AACA,gBAAA,6BAA6B,CAAC,OAAO,CACnC,sDAAsD,CACvD;AACD,gBAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;;AAGzE,YAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE;gBACnE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK;;iBAC5C;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAa;;gBAE3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;;QAGhC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,KAAK;;QAEd,IACE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ;AACvD,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAC3C;AACA,YAAA,OAAO,KAAK;;QAEd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;;AAGpC;;;;AAIG;IACH,mBAAmB,CAAC,aAAmB,IAAI,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,+BAA+B,EAAE;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,kBAAkB;AAC7E,YAAA,IAAI;;;;;;;QAQN,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;;;AAItE,YAAA,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,IAAI;gBAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,IAAI,CAAC,OAAO;gBACvE,UAAU,CAAC,IAAI;YAEjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAClD,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,IAAI,CACnC;;aACI;;AAEL,YAAA,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,IAAI;gBAC/D,IAAI,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;AAIhC,QAAA,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,YAAY;YACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACrC,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC;;AAGN;;;AAGG;AACH,IAAA,qBAAqB,CAAC,KAAW,EAAA;AAC/B,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AAC7B,iBAAC,IAAI,CAAC,IAAI,CAAC,UAAU;oBACnB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AACrB,yBAAC,IAAI,CAAC,sBAAsB,IAAI;AAC9B,8BAAE;8BACA,IAAI,CAAC,sBAAsB,KAAK,CAAC,CAAC,CACzC,CAAC;AACJ,iBAAC,IAAI,CAAC,IAAI,CAAC,MAAM;oBACf,IAAI,CAAC,sBAAsB,IAAI,IAAI;oBACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI;AACtB,yBAAC,IAAI,CAAC,kBAAkB,IAAI;AAC1B,8BAAE;8BACA,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CACrC,CAAC,EACJ;AACA,gBAAA,6BAA6B,CAAC,OAAO,CACnC,gEAAgE,CACjE;AACD,gBAAA,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE;;AAGH,YAAA,MAAM,cAAc,GAAc,IAAI,SAAS,EAAE;AACjD,YAAA,cAAc,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,YAAA,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;AACjC,YAAA,cAAc,CAAC,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC;AAC7D,YAAA,cAAc,CAAC,UAAU;gBACvB,IAAI,CAAC,kBAAkB,IAAI;AACzB,sBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;sBAC1C,IAAI;AAEV,YAAA,IACE,IAAI,CAAC,sBAAsB,IAAI,IAAI;AACnC,gBAAA,IAAI,CAAC,sBAAsB,IAAI,CAAC,EAChC;gBACA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,KAAK;gBACzD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,cAAc;;iBACrD;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAQ;;gBAE1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;;YAEvC,IAAI,CAAC,iBAAiB,EAAE;;AAE1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;;AAGjC;;;;AAIG;IACH,wBAAwB,CAAC,SAAyB,IAAI,EAAA;QACpD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;AACpE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;aACnD;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE;AAC1C,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;QAEjC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACzE,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC;;AAGJ;;;;;;;AAOG;AACH,IAAA,4BAA4B,CAAC,aAA4B,EAAA;;;;;AAKvD,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,yBAAyB;AAC5B,gBAAA,oBAAoB,CAAC,sBAAsB,CACzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,IAAI,CAAC,cAAc,CAAC,MAAM,CAC3B;;;AAGP;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IACE,IAAI,CAAC,IAAI,CAAC,eAAe;YACzB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI;AACnC,iBAAC,IAAI,CAAC,mBAAmB,IAAI;AAC3B,sBAAE;sBACA,IAAI,CAAC,mBAAmB,KAAK,CAAC,CAAC,CACtC,EACD;AACA,YAAA,6BAA6B,CAAC,OAAO,CACnC,qDAAqD,CACtD;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC;;AAGxE,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,cAAc;;aACpE;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,EAAkB;;YAEzD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;QAErD,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,0BAA0B,EAAE;;AAGnC;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;AAG3B;;AAEG;IACH,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;;AAGtC;;;;AAIG;AACH,IAAA,aAAa,CAAC,SAAkB,EAAA;QAC9B,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;;;YAIvD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxC,gBAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/C,aAAC,CAAC;AACF,YAAA,IACE,IAAI,CAAC,WAAW,CAAC,UAAU;gBAC3B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EACtC;gBACA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5B,wBAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/C,qBAAC,CAAC;AACJ,iBAAC,CAAC;;;aAEC;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;AAI3B;;;;AAIG;IACH,QAAQ,GAAA;AAEN,QAAA,IACE,IAAI,CAAC,qBAAqB,IAAI,IAAI;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAC7C;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;AACd,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;iBAClD;AACL,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;AAKzD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAGjC,gBAAA,KAAK,CAAC,2BAA2B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC1E,gBAAA,KAAK,CAAC,UAAU,GAAG,IAAI;gBAEvB,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,QAAQ,EAAE;oBAC7C,MAAM,IAAI,GAAQ,KAAK;AACvB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc;AAC/C,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;oBACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;qBAC5B;oBACL,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,gBAAgB,CAAC,EAAE;AACtD,wBAAA,IACiB,KAAM,CAAC,QAAQ,IAAI,SAAS;AAC5B,4BAAA,KAAM,CAAC,QAAQ,IAAI,IAAI,EACtC;AACe,4BAAA,KAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,gBAAgB;;AAE1D,wBAAA,IACiB,KAAM,CAAC,QAAQ,IAAI,SAAS;AAC5B,4BAAA,KAAM,CAAC,QAAQ,IAAI,IAAI,EACtC;AACe,4BAAA,KAAM,CAAC,QAAQ,GAAG,CAAC;;;oBAGtC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEtC,aAAC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE;gBACnC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM;;YAEtC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;AAElC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI;;AAIzB,YAAA,MAAM,mBAAmB,GAAG;AAC1B,gBAAA;AACE,oBAAA,SAAS,EAAE,MAAM;oBACjB,UAAU,EAAE,IAAI,CAAC,IAAI;AACrB,oBAAA,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;AACpC,iBAAA;aACF;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAIjB,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAC7C,mBAAmB,EACnB,CAAC,GAAG,KAAI;AACN,gBAAA,6BAA6B,CAAC,OAAO,CAAC,4BAA4B,CAAC;gBACnE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,aAAC,EACD,CAAC,KAAK,KAAI;AACR,gBAAA,6BAA6B,CAAC,KAAK,CAAC,mCAAmC,CAAC;AACxE,gBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAC,KAAK,CAAC;AACxD,aAAC,CACF;;aACI;YACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;;;AAMtC;;;AAGG;IACK,mBAAmB,CAAC,OAAa,IAAI,EAAA;AAC3C,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC9B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;AACrE,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;iBACpD;gBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;;YAG3C,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,EAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;AAGnC,oBAAA,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,EAAC;AAC5C,wBAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;wBACtE,KAAK,CAAC,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc;;yBACnI;AACL,wBAAA,KAAK,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE;;AAGrC,oBAAA,KAAK,CAAC,2BAA2B,GAAG,IAAI;AAExC,iBAAC,CAAC;;;QAGN,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,cAAc,EAAE;;AAGvB;;;;;AAKG;IACK,gBAAgB,GAAA;QACtB,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,UAAU,CAAC,UAAU;AAC3B,gBAAA,cAAc,EAAE,WAAW;AAC3B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC5B,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACrD,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1D,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;AACnE,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;AAC3C,wBAAA,QAAQ,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/D,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,gBAAgB;AACtB,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;wBAC5C,QAAQ,EAAE,CAAC,OAAO,KAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACnE,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,gBAAA,SAAS,EAAE,aAAa;AACxB,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9B,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;AAChE,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,2BAA2B;AAChC,gBAAA,OAAO,EAAE,oBAAoB;gBAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,OAAO,EAAE,cAAc;gBACvB,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ;gBACpC,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;gBACpE,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,OAAO,EAAE,0BAA0B;gBACnC,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU;gBACtC,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC,4BAA4B,CAAC;gBACrH,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE;gBACxE,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,wBAAwB;AAC7B,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,UAAU;gBACjG,IAAI,EAAE,UAAU,CAAC,OAAO;AACxB,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE,2CAA2C;AACjD,oBAAA,KAAK,EAAE,yCAAyC;AACjD,iBAAA;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE;AACtE,aAAA;SACF;AAED,QAAA,IACE,IAAI,CAAC,IAAI,CAAC,cAAc;YACxB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,QAAQ,EACvD;YACA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAC9B,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,UAAU,CAAC,gBAAgB;gBACjC,gBAAgB,EAAE,IAAI,CAAC,0BAA0B;AACjD,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9B,aAAA,CAAC;;;;;;;;;;;QAYJ,IAAI,CAAC,sBAAsB,GAAG;AAC5B,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,UAAU,CAAC,UAAU;AAC3B,gBAAA,cAAc,EAAE,WAAW;AAC3B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;AACpE,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC;AACjD,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC;AACpD,wBAAA,QAAQ,EAAE,CAAC,OAAO,KAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACnD,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,gBAAgB;AACtB,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC;AACrD,wBAAA,QAAQ,EAAE,CAAC,OAAO,KAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;AAC1C,4BAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;AACvC,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;AAC/D,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;AAC9D,YAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;SACrC;QAED,IAAI,CAAC,eAAe,GAAG;AACrB,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,UAAU,CAAC,UAAU;AAC3B,gBAAA,cAAc,EAAE,WAAW;AAC3B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAC9D,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KACtB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9B;AACF,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;AAC5E,YAAA,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAC;SAC1E;;AAIH;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC3C,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACpC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC;AAChE,SAAA,CAAC;QACF,IAAI,CAAC,sBAAsB,EAAE;;AAG/B;;AAEG;IACK,wBAAwB,GAAA;QAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACpD,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrD,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrD,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC1D,SAAA,CAAC;;AAGJ;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;AAGnE;;;;;AAKG;AACK,IAAA,SAAS,CAAC,KAAgB,EAAA;QAChC,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,mBAAmB,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;aACtB;YACL,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CACxD;;;AAIL;;;AAGG;AACK,IAAA,cAAc,CAAC,KAAgB,EAAA;QACrC,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,mBAAmB,CAAC,EAAE;;AAEzD,YAAA,IAAI,UAAU,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAE7D,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;AAC1C,YAAA,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAExD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;aACvB;YACL,KAAK,CAAC,iDAAiD,CAAC;;;AAI5D;;;;AAIG;IACK,aAAa,CACnB,OAA0C,EAC1C,YAAoB,EAAA;AAEpB,QAAA,6BAA6B,CAAC,OAAO,CACnC,mCAAmC,EACnC,MAAK;YACH,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EACxC,CAAC,CACF;AACD,YAAA,IAAI,YAAY,KAAK,QAAQ,EAAE;gBAC7B,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,IAAI,CAAC,iBAAiB,EAAE;;AACnB,iBAAA,IAAI,YAAY,KAAK,iBAAiB,EAAE;gBAC7C,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,0BAA0B,EAAE;;AAErC,SAAC,EACD,KAAK,EACL,oBAAoB,CACrB;;AAGH;;;;AAIG;AACK,IAAA,WAAW,CACjB,OAAmC,EACnC,MAAe,EACf,YAAoB,EAAA;AAEpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,aAAa,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC;AAEvD,QAAA,IAAI,YAAY,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE;;AACnB,aAAA,IAAI,YAAY,KAAK,iBAAiB,EAAE;YAC7C,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,0BAA0B,EAAE;;;AAIrC;;AAEG;IACK,gCAAgC,GAAA;QACtC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;;AAGvE;;;AAGG;IACK,uBAAuB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACjC,gBAAA,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD,aAAC,CAAC;;;AAIN;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;;;AAItC;;;AAGG;IACK,wBAAwB,GAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC3C,gBAAA,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;AACpE,aAAC,CAAC;;;AAIN;;AAEG;IACK,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;;;;AAM/C,IAAA,sBAAsB,CAAC,EAAY,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGnB;;AAEG;IAEH,kBAAkB,CAAC,KAAc,IAAI,EAAA;AAEnC,QAAA,IAAI,EAAE,IAAI,IAAI,EAAC;AACb,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;aACpB;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;AAG7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC7D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAgB,EAAA;AAE1B,QAAA,IAAI,OAAO,IAAI,IAAI,EAAC;YAClB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAC;gBAC7B,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;AACtE,gBAAA,IAAI,aAAa,IAAI,IAAI,EAAC;;oBAExB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;qBAC3B;oBACL,aAAa,GAAG,OAAO;;;iBAEpB;gBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAW;gBACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;AAElC,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;;AAGtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;;AAGhC,IAAA,aAAa,CAAC,OAAgB,EAAA;QAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;;IAGtC,yBAAyB,GAAA;QACvB,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,QAAQ;;IAGtI,8BAA8B,GAAA;QAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,8BAA8B;;AAGtI,IAAA,sBAAsB,CAAC,OAAO,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAE1B,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAC;YACpC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,GAAG,OAAO;;QAG1E,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;SAC1B,EAAC,EAAE,CAAC;;wGAl2CI,qCAAqC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA9E,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA8E,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA1E,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArC,qCAAqC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxDlD,i8nBA+kBc,EAAA,MAAA,EAAA,CAAA,2v/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjE,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlE,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmE,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvhBD,qCAAqC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,qBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBALjD,SAAS;+BACE,iCAAiC,EAAA,QAAA,EAAA,i8nBAAA,EAAA,MAAA,EAAA,CAAA,2v/CAAA,CAAA,EAAA;8KAMlC,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBA8B4C,YAAY,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAgCE,WAAW,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAKC,WAAW,EAAA,CAAA;sBAAtD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE1C,0BAA0B,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBASzD,eAAe,EAAA,CAAA;sBADd,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAQ9C,oBAAoB,EAAA,CAAA;sBADnB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAMpD,oBAAoB,EAAA,CAAA;sBADnB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAOzC,aAAa,EAAA,CAAA;sBAAtB;gBAKS,kBAAkB,EAAA,CAAA;sBAA3B;gBAGS,GAAG,EAAA,CAAA;sBAAZ;gBAI8C,cAAc,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGE,aAAa,EAAA,CAAA;sBAA3D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MErKlC,sCAAsC,CAAA;AAExC,IAAA,KAAK;AACL,IAAA,MAAM;AACL,IAAA,YAAY,GAAsB,IAAI,YAAY,EAAO;IACnE,iBAAiB,GAAG,iBAAiB;AACrC,IAAA,qBAAqB;IACrB,eAAe,GAAY,KAAK;IAEhC,wBAAwB,GAAG,wBAAwB;AACnD,IAAA,4BAA4B,GAA6B,wBAAwB,CAAC,GAAG;IAErF,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAC;AACnH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAC;AAC7I,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;;AAInE;;AAEG;AAED,IAAA,iBAAiB,CAAC,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,GAAa,IAAI,SAAS,EAAE;AACtC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAC;AACnB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,qBAAqB;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;aACvB;;aACI;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACpB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,SAAS,EAAE;aACZ;;AAGH,QAAA,OAAO,MAAM;;wGA7CJ,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,kKCZnD,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDYa,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBALlD,SAAS;+BACE,mCAAmC,EAAA,QAAA,EAAA,EAAA,EAAA;8BAMpC,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACS,YAAY,EAAA,CAAA;sBAArB;;;AEkDU,MAAA,uBAAuB,GAAG;AACrC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,mBAAmB,CAAC,SAAS;;MAqF7B,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAhF/B,yBAAyB;YACzB,qCAAqC;YACrC,qBAAqB;YACrB,0BAA0B;YAC1B,6BAA6B;YAC7B,0BAA0B;YAC1B,8BAA8B;YAC9B,6BAA6B;YAC7B,+BAA+B;YAC/B,gCAAgC;YAChC,2BAA2B;YAC3B,uBAAuB;YACvB,2BAA2B;YAC3B,sBAAsB;YACtB,uBAAuB;YACvB,8BAA8B;YAC9B,gBAAgB;YAChB,mBAAmB;YACnB,uBAAuB;YACvB,yBAAyB;YACzB,qBAAqB;YACrB,4BAA4B;YAC5B,+BAA+B;YAC/B,gCAAgC;YAChC,2BAA2B;YAC3B,8BAA8B;YAC9B,8BAA8B;YAC9B,2BAA2B;YAC3B,gCAAgC;YAChC,+BAA+B;YAC/B,iCAAiC;YACjC,4BAA4B;YAC5B,qCAAqC;YACrC,eAAe;YACf,cAAc;YACd,mCAAmC;YACnC,2BAA2B;YAC3B,oCAAoC;YACpC,uBAAuB;YACvB,sCAAsC;YACtC,uBAAuB;YACvB,sBAAsB;YACtB,iBAAiB;YACjB,uBAAuB;YACvB,4BAA4B;YAC5B,+BAA+B;YAC/B,+BAA+B;YAC/B,4BAA4B;YAC5B,iCAAiC;YACjC,gCAAgC;YAChC,sCAAsC;AACtC,YAAA,qBAAqB,aAIrB,cAAc;YACd,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,oBAAoB;YACpB,eAAe;YACf,4BAA4B;YAC5B,gBAAgB;YAChB,mBAAmB;AACnB,YAAA,cAAc,yBAEd,gCAAgC;AAChC,YAAA,eAAe,aAGf,yBAAyB;YACzB,qCAAqC;YACrC,cAAc;YACd,aAAa;YACb,kBAAkB;YAClB,sBAAsB;YACtB,eAAe,CAAA,EAAA,CAAA;AAGN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAzB/B,cAAc;YACd,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,oBAAoB;YACpB,eAAe;YACf,4BAA4B;YAC5B,gBAAgB;YAChB,mBAAmB;YACnB,cAAc;AACd,YAAA,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAC;YACjD,gCAAgC;AAChC,YAAA,eAAe,EAKf,cAAc;YAId,eAAe,CAAA,EAAA,CAAA;;4FAGN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlFlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,yBAAyB;wBACzB,qCAAqC;wBACrC,qBAAqB;wBACrB,0BAA0B;wBAC1B,6BAA6B;wBAC7B,0BAA0B;wBAC1B,8BAA8B;wBAC9B,6BAA6B;wBAC7B,+BAA+B;wBAC/B,gCAAgC;wBAChC,2BAA2B;wBAC3B,uBAAuB;wBACvB,2BAA2B;wBAC3B,sBAAsB;wBACtB,uBAAuB;wBACvB,8BAA8B;wBAC9B,gBAAgB;wBAChB,mBAAmB;wBACnB,uBAAuB;wBACvB,yBAAyB;wBACzB,qBAAqB;wBACrB,4BAA4B;wBAC5B,+BAA+B;wBAC/B,gCAAgC;wBAChC,2BAA2B;wBAC3B,8BAA8B;wBAC9B,8BAA8B;wBAC9B,2BAA2B;wBAC3B,gCAAgC;wBAChC,+BAA+B;wBAC/B,iCAAiC;wBACjC,4BAA4B;wBAC5B,qCAAqC;wBACrC,eAAe;wBACf,cAAc;wBACd,mCAAmC;wBACnC,2BAA2B;wBAC3B,oCAAoC;wBACpC,uBAAuB;wBACvB,sCAAsC;wBACtC,uBAAuB;wBACvB,sBAAsB;wBACtB,iBAAiB;wBACjB,uBAAuB;wBACvB,4BAA4B;wBAC5B,+BAA+B;wBAC/B,+BAA+B;wBAC/B,4BAA4B;wBAC5B,iCAAiC;wBACjC,gCAAgC;wBAChC,sCAAsC;wBACtC;AAED,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,WAAW;wBACX,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,oBAAoB;wBACpB,eAAe;wBACf,4BAA4B;wBAC5B,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;AACd,wBAAA,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAC;wBACjD,gCAAgC;wBAChC;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,yBAAyB;wBACzB,qCAAqC;wBACrC,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,sBAAsB;wBACtB;AACD;AACF,iBAAA;;;MC7JY,mBAAmB,CAAA;AAC9B,IAAA,0BAA0B;AAC1B,IAAA,0BAA0B;AAC1B,IAAA,uBAAuB;AACvB,IAAA,yBAAyB;AAEzB,IAAA,WAAA,CACE,OAAmC,EACnC,OAAmC,EACnC,IAA6B,EAC7B,MAAiC,EAAA;AAEjC,QAAA,IAAI,CAAC,0BAA0B,GAAG,OAAO;AACzC,QAAA,IAAI,CAAC,0BAA0B,GAAG,OAAO;AACzC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,yBAAyB,GAAG,MAAM;;AAE1C;;AClBD;;AAEG;AACG,MAAO,MAAO,SAAQ,OAAO,CAAA;AAC/B,IAAA,IAAI;AACJ,IAAA,MAAM;AACN,IAAA,MAAM;AACT;;ACRK,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AAE7C,IAAA,UAAU;AACV,IAAA,cAAc;AACd,IAAA,iBAAiB;IACjB,qBAAqB,GAAW,GAAG;AACnC,IAAA,cAAc;AACd,IAAA,cAAc;AACjB;;ACTD;AACM,MAAO,WAAY,SAAQ,SAAS,CAAA;;AAEtC,IAAA,gBAAgB;;AAGhB,IAAA,UAAU;;AAGV,IAAA,iBAAiB;AACpB;;ACVD;AACM,MAAO,YAAa,SAAQ,SAAS,CAAA;AACvC,IAAA,SAAS;AACT,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,gBAAgB;AAChB,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;AAClB,IAAA,cAAc;AACd,IAAA,WAAW;AACd;;ACVK,MAAO,aAAc,SAAQ,SAAS,CAAA;;AAExC,IAAA,IAAI;AACJ,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,UAAU;AACb;;ACRD;;AAEG;;ACFH;;AAEG;;;;"}
|