@aziontech/webkit 1.1.0 → 1.3.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.
Files changed (59) hide show
  1. package/package.json +5 -3
  2. package/src/components/azion-system-status/azion-system-status.vue +122 -0
  3. package/src/components/azion-system-status/azion-system-status.vue.d.ts +4 -0
  4. package/src/components/azion-system-status/azion-system-status.vue.d.ts.map +1 -0
  5. package/src/components/azion-system-status/package.json +11 -0
  6. package/src/core/form/field-auto-complete/field-auto-complete.vue +48 -45
  7. package/src/core/form/field-auto-complete/field-auto-complete.vue.d.ts +4 -4
  8. package/src/core/form/field-auto-complete/field-auto-complete.vue.d.ts.map +1 -1
  9. package/src/core/form/field-checkbox-block/field-checkbox-block.vue.d.ts +3 -3
  10. package/src/core/form/field-dropdown/field-dropdown.vue +68 -65
  11. package/src/core/form/field-dropdown/field-dropdown.vue.d.ts +5 -5
  12. package/src/core/form/field-dropdown/field-dropdown.vue.d.ts.map +1 -1
  13. package/src/core/form/field-dropdown-icon/field-dropdown-icon.vue +49 -46
  14. package/src/core/form/field-dropdown-icon/field-dropdown-icon.vue.d.ts +4 -4
  15. package/src/core/form/field-dropdown-icon/field-dropdown-icon.vue.d.ts.map +1 -1
  16. package/src/core/form/field-dropdown-lazy-loader/field-dropdown-lazy-loader.vue +116 -113
  17. package/src/core/form/field-dropdown-lazy-loader/field-dropdown-lazy-loader.vue.d.ts +2 -2
  18. package/src/core/form/field-dropdown-lazy-loader/field-dropdown-lazy-loader.vue.d.ts.map +1 -1
  19. package/src/core/form/field-dropdown-lazy-loader-dynamic/field-dropdown-lazy-loader-dynamic.vue +93 -90
  20. package/src/core/form/field-dropdown-lazy-loader-dynamic/field-dropdown-lazy-loader-dynamic.vue.d.ts +2 -2
  21. package/src/core/form/field-dropdown-lazy-loader-dynamic/field-dropdown-lazy-loader-dynamic.vue.d.ts.map +1 -1
  22. package/src/core/form/field-dropdown-lazy-loader-with-filter/field-dropdown-lazy-loader-with-filter.vue +111 -108
  23. package/src/core/form/field-dropdown-lazy-loader-with-filter/field-dropdown-lazy-loader-with-filter.vue.d.ts +2 -2
  24. package/src/core/form/field-dropdown-lazy-loader-with-filter/field-dropdown-lazy-loader-with-filter.vue.d.ts.map +1 -1
  25. package/src/core/form/field-dropdown-multi-select-lazy-loader/field-dropdown-multi-select-lazy-loader.vue +92 -89
  26. package/src/core/form/field-dropdown-multi-select-lazy-loader/field-dropdown-multi-select-lazy-loader.vue.d.ts +2 -2
  27. package/src/core/form/field-dropdown-multi-select-lazy-loader/field-dropdown-multi-select-lazy-loader.vue.d.ts.map +1 -1
  28. package/src/core/form/field-input-group/field-input-group.vue +44 -41
  29. package/src/core/form/field-input-group/field-input-group.vue.d.ts +3 -3
  30. package/src/core/form/field-input-group/field-input-group.vue.d.ts.map +1 -1
  31. package/src/core/form/field-multi-select/field-multi-select.vue +2 -2
  32. package/src/core/form/field-multi-select/field-multi-select.vue.d.ts +5 -5
  33. package/src/core/form/field-number/field-number.vue +46 -43
  34. package/src/core/form/field-number/field-number.vue.d.ts +3 -3
  35. package/src/core/form/field-number/field-number.vue.d.ts.map +1 -1
  36. package/src/core/form/field-phone-number/field-phone-number.vue +2 -2
  37. package/src/core/form/field-phone-number/field-phone-number.vue.d.ts +2 -2
  38. package/src/core/form/field-radio-block/field-radio-block.vue.d.ts +2 -2
  39. package/src/core/form/field-switch/field-switch.vue.d.ts +1 -1
  40. package/src/core/form/field-switch-block/field-switch-block.vue.d.ts +1 -1
  41. package/src/core/form/field-text/field-text.vue +43 -40
  42. package/src/core/form/field-text/field-text.vue.d.ts +3 -3
  43. package/src/core/form/field-text/field-text.vue.d.ts.map +1 -1
  44. package/src/core/form/field-text-area/field-text-area.vue +61 -58
  45. package/src/core/form/field-text-area/field-text-area.vue.d.ts +3 -3
  46. package/src/core/form/field-text-area/field-text-area.vue.d.ts.map +1 -1
  47. package/src/core/form/field-text-icon/field-text-icon.vue +48 -42
  48. package/src/core/form/field-text-icon/field-text-icon.vue.d.ts +4 -4
  49. package/src/core/form/field-text-icon/field-text-icon.vue.d.ts.map +1 -1
  50. package/src/core/form/field-text-password/field-text-password.vue +42 -39
  51. package/src/core/form/field-text-password/field-text-password.vue.d.ts +3 -3
  52. package/src/core/form/field-text-password/field-text-password.vue.d.ts.map +1 -1
  53. package/src/core/form/field-text-privacy/field-text-privacy.vue +132 -129
  54. package/src/core/form/field-text-privacy/field-text-privacy.vue.d.ts +3 -3
  55. package/src/core/form/field-text-privacy/field-text-privacy.vue.d.ts.map +1 -1
  56. package/src/core/form/slots/input-slot/input-slot.vue +8 -0
  57. package/src/core/form/slots/input-slot/input-slot.vue.d.ts +11 -0
  58. package/src/core/form/slots/input-slot/input-slot.vue.d.ts.map +1 -0
  59. package/src/core/form/slots/input-slot/package.json +11 -0
@@ -4,7 +4,8 @@
4
4
  import Dropdown from 'primevue/dropdown'
5
5
  import InputText from 'primevue/inputtext'
6
6
  import { useField } from 'vee-validate'
7
- import LabelBlock from '../label'
7
+ import Label from '../label'
8
+ import InputSlot from '../slots/input-slot'
8
9
 
9
10
  const props = defineProps({
10
11
  value: {
@@ -525,124 +526,126 @@
525
526
  </script>
526
527
 
527
528
  <template>
528
- <LabelBlock
529
- v-if="props.label"
530
- :for="props.name"
531
- :label="props.label"
532
- :isRequired="$attrs.required"
533
- :data-testid="customTestId.label"
534
- />
535
- <Dropdown
536
- appendTo="self"
537
- :id="name"
538
- :name="props.name"
539
- :loading="loading"
540
- v-model="inputValue"
541
- :options="data"
542
- :optionLabel="props.optionLabel"
543
- :optionDisabled="props.optionDisabled"
544
- :optionValue="props.optionValue"
545
- :optionGroupLabel="props.optionGroupLabel"
546
- :optionGroupChildren="props.optionGroupChildren"
547
- :placeholder="props.placeholder"
548
- :showClear="props.enableClearOption"
549
- @change="emitChange"
550
- @blur="emitBlur"
551
- :class="errorMessage ? 'p-invalid' : ''"
552
- v-bind="$attrs"
553
- class="w-full"
554
- :pt="{
555
- clearIcon: {
556
- 'data-testid': customTestId.clearIcon
557
- },
558
- filterInput: {
559
- class: 'w-full',
560
- 'data-testid': customTestId.filterInput
561
- },
562
- trigger: {
563
- 'data-testid': customTestId.trigger
564
- },
565
- loadingIcon: {
566
- 'data-testid': customTestId.loadingIcon
567
- }
568
- }"
569
- :data-testid="customTestId.dropdown"
570
- :virtualScrollerOptions="VIRTUAL_SCROLLER_CONFIG"
571
- >
572
- <template
573
- v-if="enableCustomLabel"
574
- #value="slotProps"
529
+ <InputSlot>
530
+ <Label
531
+ v-if="props.label"
532
+ :for="props.name"
533
+ :label="props.label"
534
+ :isRequired="$attrs.required"
535
+ :data-testid="customTestId.label"
536
+ />
537
+ <Dropdown
538
+ appendTo="self"
539
+ :id="name"
540
+ :name="props.name"
541
+ :loading="loading"
542
+ v-model="inputValue"
543
+ :options="data"
544
+ :optionLabel="props.optionLabel"
545
+ :optionDisabled="props.optionDisabled"
546
+ :optionValue="props.optionValue"
547
+ :optionGroupLabel="props.optionGroupLabel"
548
+ :optionGroupChildren="props.optionGroupChildren"
549
+ :placeholder="props.placeholder"
550
+ :showClear="props.enableClearOption"
551
+ @change="emitChange"
552
+ @blur="emitBlur"
553
+ :class="errorMessage ? 'p-invalid' : ''"
554
+ v-bind="$attrs"
555
+ class="w-full"
556
+ :pt="{
557
+ clearIcon: {
558
+ 'data-testid': customTestId.clearIcon
559
+ },
560
+ filterInput: {
561
+ class: 'w-full',
562
+ 'data-testid': customTestId.filterInput
563
+ },
564
+ trigger: {
565
+ 'data-testid': customTestId.trigger
566
+ },
567
+ loadingIcon: {
568
+ 'data-testid': customTestId.loadingIcon
569
+ }
570
+ }"
571
+ :data-testid="customTestId.dropdown"
572
+ :virtualScrollerOptions="VIRTUAL_SCROLLER_CONFIG"
575
573
  >
576
- <span
577
- class="flex align-items-center gap-2 max-w-full"
578
- :data-testid="customTestId.value"
574
+ <template
575
+ v-if="enableCustomLabel"
576
+ #value="slotProps"
579
577
  >
580
- <i
581
- v-if="showIcon"
582
- :class="`pi ${iconSelected} ${applyIconColor(iconSelected)}`"
583
- ></i>
584
578
  <span
585
- class="truncate max-w-full"
586
- :title="getLabelBySelectedValue(slotProps.value)"
579
+ class="flex align-items-center gap-2 max-w-full"
580
+ :data-testid="customTestId.value"
587
581
  >
588
- {{ getLabelBySelectedValue(slotProps.value) }}
589
- </span>
590
- </span>
591
- </template>
592
- <template #option="slotProps">
593
- <div class="flex align-items-center gap-2">
594
- <i
595
- v-if="slotProps.option.icon"
596
- :class="`pi ${slotProps.option.icon} ${applyIconColor(slotProps.option.icon)}`"
597
- ></i>
598
- <span
599
- v-else-if="!slotProps.option.icon && showIcon"
600
- class="w-4"
601
- ></span>
602
- <div>{{ slotProps.option.name }}</div>
603
- </div>
604
- </template>
605
-
606
- <template #header>
607
- <div class="p-2 flex">
608
- <div class="p-inputgroup">
609
- <InputText
610
- type="text"
611
- v-model="search"
612
- placeholder="Search"
613
- class="w-full rounded-r-none"
614
- ref="focusSearch"
615
- :data-testid="customTestId.search"
616
- />
582
+ <i
583
+ v-if="showIcon"
584
+ :class="`pi ${iconSelected} ${applyIconColor(iconSelected)}`"
585
+ ></i>
617
586
  <span
618
- class="p-inputgroup-addon"
619
- @click="searchFilter"
587
+ class="truncate max-w-full"
588
+ :title="getLabelBySelectedValue(slotProps.value)"
620
589
  >
621
- <i class="pi pi-search"></i>
590
+ {{ getLabelBySelectedValue(slotProps.value) }}
622
591
  </span>
592
+ </span>
593
+ </template>
594
+ <template #option="slotProps">
595
+ <div class="flex align-items-center gap-2">
596
+ <i
597
+ v-if="slotProps.option.icon"
598
+ :class="`pi ${slotProps.option.icon} ${applyIconColor(slotProps.option.icon)}`"
599
+ ></i>
600
+ <span
601
+ v-else-if="!slotProps.option.icon && showIcon"
602
+ class="w-4"
603
+ ></span>
604
+ <div>{{ slotProps.option.name }}</div>
623
605
  </div>
624
- </div>
625
- </template>
626
-
627
- <template #footer>
628
- <slot name="footer" />
629
- </template>
630
- </Dropdown>
631
-
632
- <small
633
- v-if="errorMessage"
634
- :data-testid="customTestId.error"
635
- class="p-error text-xs font-normal leading-tight"
636
- >
637
- {{ errorMessage }}
638
- </small>
639
- <small
640
- class="text-xs text-color-secondary font-normal leading-5"
641
- :data-testid="customTestId.description"
642
- v-if="props.description || hasDescriptionSlot"
643
- >
644
- <slot name="description">
645
- {{ props.description }}
646
- </slot>
647
- </small>
606
+ </template>
607
+
608
+ <template #header>
609
+ <div class="p-2 flex">
610
+ <div class="p-inputgroup">
611
+ <InputText
612
+ type="text"
613
+ v-model="search"
614
+ placeholder="Search"
615
+ class="w-full rounded-r-none"
616
+ ref="focusSearch"
617
+ :data-testid="customTestId.search"
618
+ />
619
+ <span
620
+ class="p-inputgroup-addon"
621
+ @click="searchFilter"
622
+ >
623
+ <i class="pi pi-search"></i>
624
+ </span>
625
+ </div>
626
+ </div>
627
+ </template>
628
+
629
+ <template #footer>
630
+ <slot name="footer" />
631
+ </template>
632
+ </Dropdown>
633
+
634
+ <small
635
+ v-if="errorMessage"
636
+ :data-testid="customTestId.error"
637
+ class="p-error text-xs font-normal leading-tight"
638
+ >
639
+ {{ errorMessage }}
640
+ </small>
641
+ <small
642
+ class="text-xs text-color-secondary font-normal leading-5"
643
+ :data-testid="customTestId.description"
644
+ v-if="props.description || hasDescriptionSlot"
645
+ >
646
+ <slot name="description">
647
+ {{ props.description }}
648
+ </slot>
649
+ </small>
650
+ </InputSlot>
648
651
  </template>
@@ -173,10 +173,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
173
173
  onOnAccessDenied?: ((...args: any[]) => any) | undefined;
174
174
  onOnLoaded?: ((...args: any[]) => any) | undefined;
175
175
  }>, {
176
- value: string | number;
176
+ description: string;
177
177
  label: string;
178
+ value: string | number;
178
179
  placeholder: string;
179
- description: string;
180
180
  optionLabel: string;
181
181
  optionDisabled: string | Function;
182
182
  optionGroupLabel: string;
@@ -1 +1 @@
1
- {"version":3,"file":"field-dropdown-lazy-loader.vue.d.ts","sourceRoot":"","sources":["field-dropdown-lazy-loader.vue"],"names":[],"mappings":"wBAwgDqB,OAAO,YAAY;;AADxC,4BAA2B,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;qBAEtD,CAAC,EAAE,CAAC;;;AApFzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAiFG"}
1
+ {"version":3,"file":"field-dropdown-lazy-loader.vue.d.ts","sourceRoot":"","sources":["field-dropdown-lazy-loader.vue"],"names":[],"mappings":"wBA4hDqB,OAAO,YAAY;;AADxC,4BAA2B,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;qBAEtD,CAAC,EAAE,CAAC;;;AApFzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAiFG"}
@@ -1,95 +1,97 @@
1
1
  <template>
2
- <LabelBlock
3
- v-if="props.label"
4
- :for="props.name"
5
- :label="props.label"
6
- :isRequired="$attrs.required"
7
- :data-testid="customTestId.label"
8
- />
9
- <Dropdown
10
- appendTo="self"
11
- :id="name"
12
- :name="props.name"
13
- :loading="loading"
14
- v-model="inputValue"
15
- :options="data"
16
- :optionLabel="props.optionLabel"
17
- :optionDisabled="props.optionDisabled"
18
- :optionValue="props.optionValue"
19
- :placeholder="props.placeholder"
20
- :showClear="props.enableClearOption"
21
- @change="emitChange"
22
- @blur="emitBlur"
23
- :class="errorMessage ? 'p-invalid' : ''"
24
- v-bind="$attrs"
25
- class="w-full"
26
- :pt="{
27
- filterInput: {
28
- class: 'w-full',
29
- 'data-testid': customTestId.filterInput
30
- },
31
- trigger: {
32
- 'data-testid': customTestId.trigger
33
- },
34
- loadingIcon: {
35
- 'data-testid': customTestId.loadingIcon
36
- }
37
- }"
38
- :data-testid="customTestId.dropdown"
39
- :virtualScrollerOptions="VIRTUAL_SCROLLER_CONFIG"
40
- >
41
- <template
42
- v-if="enableCustomLabel"
43
- #value="slotProps"
2
+ <InputSlot>
3
+ <Label
4
+ v-if="props.label"
5
+ :for="props.name"
6
+ :label="props.label"
7
+ :isRequired="$attrs.required"
8
+ :data-testid="customTestId.label"
9
+ />
10
+ <Dropdown
11
+ appendTo="self"
12
+ :id="name"
13
+ :name="props.name"
14
+ :loading="loading"
15
+ v-model="inputValue"
16
+ :options="data"
17
+ :optionLabel="props.optionLabel"
18
+ :optionDisabled="props.optionDisabled"
19
+ :optionValue="props.optionValue"
20
+ :placeholder="props.placeholder"
21
+ :showClear="props.enableClearOption"
22
+ @change="emitChange"
23
+ @blur="emitBlur"
24
+ :class="errorMessage ? 'p-invalid' : ''"
25
+ v-bind="$attrs"
26
+ class="w-full"
27
+ :pt="{
28
+ filterInput: {
29
+ class: 'w-full',
30
+ 'data-testid': customTestId.filterInput
31
+ },
32
+ trigger: {
33
+ 'data-testid': customTestId.trigger
34
+ },
35
+ loadingIcon: {
36
+ 'data-testid': customTestId.loadingIcon
37
+ }
38
+ }"
39
+ :data-testid="customTestId.dropdown"
40
+ :virtualScrollerOptions="VIRTUAL_SCROLLER_CONFIG"
44
41
  >
45
- <span :data-testid="customTestId.value">
46
- {{ getLabelBySelectedValue(slotProps.value) }}
47
- </span>
48
- </template>
49
-
50
- <template #header>
51
- <div class="p-2 flex">
52
- <div class="p-inputgroup">
53
- <InputText
54
- type="text"
55
- v-model="search"
56
- placeholder="Search"
57
- class="w-full rounded-r-none"
58
- :disabled="!hasServiceAccess"
59
- ref="focusSearch"
60
- :data-testid="customTestId.search"
61
- />
62
- <span
63
- class="p-inputgroup-addon"
64
- @click="searchFilter"
65
- >
66
- <i class="pi pi-search"></i>
67
- </span>
42
+ <template
43
+ v-if="enableCustomLabel"
44
+ #value="slotProps"
45
+ >
46
+ <span :data-testid="customTestId.value">
47
+ {{ getLabelBySelectedValue(slotProps.value) }}
48
+ </span>
49
+ </template>
50
+
51
+ <template #header>
52
+ <div class="p-2 flex">
53
+ <div class="p-inputgroup">
54
+ <InputText
55
+ type="text"
56
+ v-model="search"
57
+ placeholder="Search"
58
+ class="w-full rounded-r-none"
59
+ :disabled="!hasServiceAccess"
60
+ ref="focusSearch"
61
+ :data-testid="customTestId.search"
62
+ />
63
+ <span
64
+ class="p-inputgroup-addon"
65
+ @click="searchFilter"
66
+ >
67
+ <i class="pi pi-search"></i>
68
+ </span>
69
+ </div>
68
70
  </div>
69
- </div>
70
- </template>
71
-
72
- <template #footer>
73
- <slot name="footer" />
74
- </template>
75
- </Dropdown>
76
-
77
- <small
78
- v-if="errorMessage"
79
- :data-testid="customTestId.error"
80
- class="p-error text-xs font-normal leading-tight"
81
- >
82
- {{ errorMessage }}
83
- </small>
84
- <small
85
- class="text-xs text-color-secondary font-normal leading-5"
86
- :data-testid="customTestId.description"
87
- v-if="props.description || hasDescriptionSlot"
88
- >
89
- <slot name="description">
90
- {{ props.description }}
91
- </slot>
92
- </small>
71
+ </template>
72
+
73
+ <template #footer>
74
+ <slot name="footer" />
75
+ </template>
76
+ </Dropdown>
77
+
78
+ <small
79
+ v-if="errorMessage"
80
+ :data-testid="customTestId.error"
81
+ class="p-error text-xs font-normal leading-tight"
82
+ >
83
+ {{ errorMessage }}
84
+ </small>
85
+ <small
86
+ class="text-xs text-color-secondary font-normal leading-5"
87
+ :data-testid="customTestId.description"
88
+ v-if="props.description || hasDescriptionSlot"
89
+ >
90
+ <slot name="description">
91
+ {{ props.description }}
92
+ </slot>
93
+ </small>
94
+ </InputSlot>
93
95
  </template>
94
96
 
95
97
  <script setup>
@@ -98,7 +100,8 @@
98
100
  import { useField } from 'vee-validate'
99
101
  import { computed, toRef, useSlots, useAttrs, ref, onMounted, watchEffect, watch } from 'vue'
100
102
  import { watchDebounced } from '@vueuse/core'
101
- import LabelBlock from '../label'
103
+ import Label from '../label'
104
+ import InputSlot from '../slots/input-slot'
102
105
 
103
106
  const props = defineProps({
104
107
  value: {
@@ -137,10 +137,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
137
137
  onOnChange?: ((...args: any[]) => any) | undefined;
138
138
  onOnSelectOption?: ((...args: any[]) => any) | undefined;
139
139
  }>, {
140
- value: string | number;
140
+ description: string;
141
141
  label: string;
142
+ value: string | number;
142
143
  placeholder: string;
143
- description: string;
144
144
  optionLabel: string;
145
145
  optionDisabled: string | Function;
146
146
  optionValue: string;
@@ -1 +1 @@
1
- {"version":3,"file":"field-dropdown-lazy-loader-dynamic.vue.d.ts","sourceRoot":"","sources":["field-dropdown-lazy-loader-dynamic.vue"],"names":[],"mappings":"wBAsiCqB,OAAO,YAAY;;AADxC,4BAA2B,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;qBAEtD,CAAC,EAAE,CAAC;;;AApEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAiEG"}
1
+ {"version":3,"file":"field-dropdown-lazy-loader-dynamic.vue.d.ts","sourceRoot":"","sources":["field-dropdown-lazy-loader-dynamic.vue"],"names":[],"mappings":"wBA0jCqB,OAAO,YAAY;;AADxC,4BAA2B,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;qBAEtD,CAAC,EAAE,CAAC;;;AApEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAiEG"}