From 7076e54c4fbb2857e57f9b59f9e71a712d83eccd Mon Sep 17 00:00:00 2001
From: xiangcongshuai <xiangcongshuai@supervision.ltd>
Date: Tue, 22 Oct 2024 15:02:29 +0800
Subject: [PATCH] =?UTF-8?q?feat:ocr2.0=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json                                  |   3 +
 pnpm-lock.yaml                                | 372 +++++++-
 src/api/caseDetails/evidence.js               |  68 ++
 src/api/caseDetails/ocr.js                    |   1 -
 src/api/promptManagement/index.js             |  33 +-
 src/assets/caseManagement/empty.png           | Bin 0 -> 45158 bytes
 src/assets/common/file_empty.png              | Bin 0 -> 45158 bytes
 src/assets/file/check.png                     | Bin 0 -> 694 bytes
 src/assets/file/type1.png                     | Bin 0 -> 2279 bytes
 src/assets/file/type2.png                     | Bin 0 -> 3542 bytes
 src/assets/file/type3.png                     | Bin 0 -> 3273 bytes
 src/assets/file/type4.png                     | Bin 0 -> 2970 bytes
 src/assets/file/type5.png                     | Bin 0 -> 3370 bytes
 src/assets/file/type6.png                     | Bin 0 -> 3028 bytes
 src/components/Search/index.vue               |   2 +-
 src/config/net.config.js                      |   2 +-
 src/icons/svg/docx.svg                        |   7 +
 src/router/index.js                           |  64 +-
 .../components/AddEvidence/AddFolder.vue      | 126 ++-
 .../components/AddEvidence/MoveFolder.vue     |  99 +++
 .../components/EvidenceConfirm.vue            | 526 +++++++++++
 .../components/EvidenceExtract.vue            | 216 +++++
 .../AddEvidence/components/UploadEvidence.vue | 516 +++++++++++
 .../components/AddEvidence/edit.vue           | 162 ++++
 .../components/AddEvidence/index.vue          | 376 ++------
 .../caseDetails/components/CaseEvidence.vue   | 117 ++-
 .../components/EditEvidence/index.vue         | 681 +++++++-------
 .../components/edit/EditEvidence.vue          |   1 -
 src/views/caseDetails/index.vue               |  73 +-
 .../PromptConfig/add/PromptDebug.vue          | 182 ++++
 .../PromptConfig/add/PromptInput.vue          | 831 ++++++++++++++++++
 .../PromptConfig/add/SelectImg.vue            |  90 ++
 .../PromptConfig/add/index.vue                | 434 ++++++++-
 .../promptManagement/PromptConfig/index.vue   |  53 +-
 .../atomicIndex/components/EditAtomic.vue     | 220 +++--
 .../atomicIndex/components/SelectSql.vue      | 102 ++-
 .../indexRule/components/CustomLogic.vue      | 106 ++-
 37 files changed, 4564 insertions(+), 899 deletions(-)
 create mode 100644 src/api/caseDetails/evidence.js
 create mode 100644 src/assets/caseManagement/empty.png
 create mode 100644 src/assets/common/file_empty.png
 create mode 100644 src/assets/file/check.png
 create mode 100644 src/assets/file/type1.png
 create mode 100644 src/assets/file/type2.png
 create mode 100644 src/assets/file/type3.png
 create mode 100644 src/assets/file/type4.png
 create mode 100644 src/assets/file/type5.png
 create mode 100644 src/assets/file/type6.png
 create mode 100644 src/icons/svg/docx.svg
 create mode 100644 src/views/caseDetails/components/AddEvidence/MoveFolder.vue
 create mode 100644 src/views/caseDetails/components/AddEvidence/components/EvidenceConfirm.vue
 create mode 100644 src/views/caseDetails/components/AddEvidence/components/EvidenceExtract.vue
 create mode 100644 src/views/caseDetails/components/AddEvidence/components/UploadEvidence.vue
 create mode 100644 src/views/caseDetails/components/AddEvidence/edit.vue
 create mode 100644 src/views/promptManagement/PromptConfig/add/PromptDebug.vue
 create mode 100644 src/views/promptManagement/PromptConfig/add/PromptInput.vue
 create mode 100644 src/views/promptManagement/PromptConfig/add/SelectImg.vue

diff --git a/package.json b/package.json
index 32d6796..f741e54 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,9 @@
   "dependencies": {
     "@riophae/vue-treeselect": "0.4.0",
     "@vue/composition-api": "1.7.1",
+    "@wangeditor/editor": "^5.1.23",
+    "@wangeditor/editor-for-vue": "^1.0.2",
+    "@wangeditor/plugin-mention": "^1.0.0",
     "axios": "1.6.0",
     "core-js": "3.30.1",
     "countup.js": "^2.8.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7c6846d..695ce6e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -11,6 +11,15 @@ dependencies:
   '@vue/composition-api':
     specifier: 1.7.1
     version: 1.7.1(vue@2.6.14)
+  '@wangeditor/editor':
+    specifier: ^5.1.23
+    version: 5.1.23
+  '@wangeditor/editor-for-vue':
+    specifier: ^1.0.2
+    version: 1.0.2(@wangeditor/editor@5.1.23)(vue@2.6.14)
+  '@wangeditor/plugin-mention':
+    specifier: ^1.0.0
+    version: 1.0.0(@wangeditor/editor@5.1.23)(snabbdom@3.6.2)
   axios:
     specifier: 1.6.0
     version: 1.6.0
@@ -1674,6 +1683,10 @@ packages:
     resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==}
     dev: true
 
+  /@transloadit/prettier-bytes@0.0.7:
+    resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
+    dev: false
+
   /@trysound/sax@0.2.0:
     resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
     engines: {node: '>=10.13.0'}
@@ -1721,6 +1734,10 @@ packages:
   /@types/estree@1.0.5:
     resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
 
+  /@types/event-emitter@0.3.5:
+    resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==}
+    dev: false
+
   /@types/express-serve-static-core@4.19.5:
     resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==}
     dependencies:
@@ -1863,6 +1880,47 @@ packages:
       '@types/node': 20.14.10
     dev: true
 
+  /@uppy/companion-client@2.2.2:
+    resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==}
+    dependencies:
+      '@uppy/utils': 4.1.3
+      namespace-emitter: 2.0.1
+    dev: false
+
+  /@uppy/core@2.3.4:
+    resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==}
+    dependencies:
+      '@transloadit/prettier-bytes': 0.0.7
+      '@uppy/store-default': 2.1.1
+      '@uppy/utils': 4.1.3
+      lodash.throttle: 4.1.1
+      mime-match: 1.0.2
+      namespace-emitter: 2.0.1
+      nanoid: 3.3.7
+      preact: 10.24.3
+    dev: false
+
+  /@uppy/store-default@2.1.1:
+    resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==}
+    dev: false
+
+  /@uppy/utils@4.1.3:
+    resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==}
+    dependencies:
+      lodash.throttle: 4.1.1
+    dev: false
+
+  /@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4):
+    resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==}
+    peerDependencies:
+      '@uppy/core': ^2.3.3
+    dependencies:
+      '@uppy/companion-client': 2.2.2
+      '@uppy/core': 2.3.4
+      '@uppy/utils': 4.1.3
+      nanoid: 3.3.7
+    dev: false
+
   /@vue/babel-helper-vue-jsx-merge-props@1.4.0:
     resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==}
     dev: true
@@ -2440,6 +2498,202 @@ packages:
     resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==}
     dev: true
 
+  /@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==}
+    peerDependencies:
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      lodash.throttle: ^4.1.1
+      nanoid: ^3.2.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      is-url: 1.2.4
+      lodash.throttle: 4.1.1
+      nanoid: 3.3.7
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==}
+    peerDependencies:
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      prismjs: 1.29.0
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==}
+    peerDependencies:
+      '@uppy/core': ^2.1.1
+      '@uppy/xhr-upload': ^2.0.3
+      dom7: ^3.0.0
+      is-hotkey: ^0.2.0
+      lodash.camelcase: ^4.3.0
+      lodash.clonedeep: ^4.5.0
+      lodash.debounce: ^4.0.8
+      lodash.foreach: ^4.5.0
+      lodash.isequal: ^4.5.0
+      lodash.throttle: ^4.1.1
+      lodash.toarray: ^4.4.0
+      nanoid: ^3.2.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@types/event-emitter': 0.3.5
+      '@uppy/core': 2.3.4
+      '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+      dom7: 3.0.0
+      event-emitter: 0.3.5
+      html-void-elements: 2.0.1
+      i18next: 20.6.1
+      is-hotkey: 0.2.0
+      lodash.camelcase: 4.3.0
+      lodash.clonedeep: 4.5.0
+      lodash.debounce: 4.0.8
+      lodash.foreach: 4.5.0
+      lodash.isequal: 4.5.0
+      lodash.throttle: 4.1.1
+      lodash.toarray: 4.4.0
+      nanoid: 3.3.7
+      scroll-into-view-if-needed: 2.2.31
+      slate: 0.72.8
+      slate-history: 0.66.0(slate@0.72.8)
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/editor-for-vue@1.0.2(@wangeditor/editor@5.1.23)(vue@2.6.14):
+    resolution: {integrity: sha512-BOENvAXJVtVXlE2X50AAvjV82YlCUeu5cbeR0cvEQHQjYtiVnJtq7HSoj85r2kTgGouI5OrpJG9BBEjSjUSPyA==}
+    peerDependencies:
+      '@wangeditor/editor': '>=5.1.0'
+      vue: ^2.6.14
+    dependencies:
+      '@wangeditor/editor': 5.1.23
+      vue: 2.6.14
+    dev: false
+
+  /@wangeditor/editor@5.1.23:
+    resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==}
+    dependencies:
+      '@uppy/core': 2.3.4
+      '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/basic-modules@1.1.7)(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/core@1.1.19)(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      is-hotkey: 0.2.0
+      lodash.camelcase: 4.3.0
+      lodash.clonedeep: 4.5.0
+      lodash.debounce: 4.0.8
+      lodash.foreach: 4.5.0
+      lodash.isequal: 4.5.0
+      lodash.throttle: 4.1.1
+      lodash.toarray: 4.4.0
+      nanoid: 3.3.7
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==}
+    peerDependencies:
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/plugin-mention@1.0.0(@wangeditor/editor@5.1.23)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-txQEoHxzil78WoTGXn0ENONZ2sdEL8GI5qBxETn6TMEXQkqiUXA4Kc8bV8D8nZDniC00oFb80kDmOIpT/KUBGw==}
+    peerDependencies:
+      '@wangeditor/editor': '>=5.0.0'
+      snabbdom: ^3.3.1
+    dependencies:
+      '@wangeditor/editor': 5.1.23
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==}
+    peerDependencies:
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      lodash.isequal: ^4.5.0
+      lodash.throttle: ^4.1.1
+      nanoid: ^3.2.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      lodash.isequal: 4.5.0
+      lodash.throttle: 4.1.1
+      nanoid: 3.3.7
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/basic-modules@1.1.7)(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==}
+    peerDependencies:
+      '@uppy/core': ^2.0.3
+      '@uppy/xhr-upload': ^2.0.3
+      '@wangeditor/basic-modules': 1.x
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      lodash.foreach: ^4.5.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@uppy/core': 2.3.4
+      '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      lodash.foreach: 4.5.0
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
+  /@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/core@1.1.19)(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2):
+    resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==}
+    peerDependencies:
+      '@uppy/core': ^2.1.4
+      '@uppy/xhr-upload': ^2.0.7
+      '@wangeditor/core': 1.x
+      dom7: ^3.0.0
+      nanoid: ^3.2.0
+      slate: ^0.72.0
+      snabbdom: ^3.1.0
+    dependencies:
+      '@uppy/core': 2.3.4
+      '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+      dom7: 3.0.0
+      nanoid: 3.3.7
+      slate: 0.72.8
+      snabbdom: 3.6.2
+    dev: false
+
   /@webassemblyjs/ast@1.12.1:
     resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
     dependencies:
@@ -3827,6 +4081,10 @@ packages:
       - supports-color
     dev: true
 
+  /compute-scroll-into-view@1.0.20:
+    resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
+    dev: false
+
   /concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
@@ -4699,6 +4957,12 @@ packages:
       entities: 2.2.0
     dev: true
 
+  /dom7@3.0.0:
+    resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==}
+    dependencies:
+      ssr-window: 3.0.0
+    dev: false
+
   /domain-browser@4.23.0:
     resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==}
     engines: {node: '>=10'}
@@ -6445,6 +6709,10 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /html-void-elements@2.0.1:
+    resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
+    dev: false
+
   /html-webpack-plugin@5.6.0(webpack@5.93.0):
     resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==}
     engines: {node: '>=10.13.0'}
@@ -6575,6 +6843,12 @@ packages:
     requiresBuild: true
     dev: true
 
+  /i18next@20.6.1:
+    resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==}
+    dependencies:
+      '@babel/runtime': 7.24.8
+    dev: false
+
   /iconv-lite@0.4.24:
     resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
     engines: {node: '>=0.10.0'}
@@ -6710,6 +6984,10 @@ packages:
     resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
     dev: false
 
+  /immer@9.0.21:
+    resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
+    dev: false
+
   /immutable@4.3.6:
     resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==}
     dev: true
@@ -6995,6 +7273,10 @@ packages:
       is-extglob: 2.1.1
     dev: true
 
+  /is-hotkey@0.2.0:
+    resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
+    dev: false
+
   /is-interactive@1.0.0:
     resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
     engines: {node: '>=8'}
@@ -7067,6 +7349,11 @@ packages:
     dependencies:
       isobject: 3.0.1
 
+  /is-plain-object@5.0.0:
+    resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /is-png@2.0.0:
     resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==}
     engines: {node: '>=8'}
@@ -7145,6 +7432,10 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /is-url@1.2.4:
+    resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
+    dev: false
+
   /is-weakref@1.0.2:
     resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
     dependencies:
@@ -7431,9 +7722,16 @@ packages:
     dependencies:
       p-locate: 4.1.0
 
+  /lodash.camelcase@4.3.0:
+    resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+    dev: false
+
+  /lodash.clonedeep@4.5.0:
+    resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+    dev: false
+
   /lodash.debounce@4.0.8:
     resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-    dev: true
 
   /lodash.defaults@4.2.0:
     resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
@@ -7455,6 +7753,10 @@ packages:
     resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
     dev: false
 
+  /lodash.foreach@4.5.0:
+    resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
+    dev: false
+
   /lodash.groupby@4.6.0:
     resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==}
     dev: false
@@ -7495,6 +7797,14 @@ packages:
     resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
     dev: true
 
+  /lodash.throttle@4.1.1:
+    resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+    dev: false
+
+  /lodash.toarray@4.4.0:
+    resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==}
+    dev: false
+
   /lodash.union@4.6.0:
     resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
     dev: false
@@ -7711,6 +8021,12 @@ packages:
     engines: {node: '>= 0.6'}
     dev: true
 
+  /mime-match@1.0.2:
+    resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==}
+    dependencies:
+      wildcard: 1.1.2
+    dev: false
+
   /mime-types@2.1.35:
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
@@ -7854,11 +8170,14 @@ packages:
       thenify-all: 1.6.0
     dev: true
 
+  /namespace-emitter@2.0.1:
+    resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
+    dev: false
+
   /nanoid@3.3.7:
     resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
-    dev: true
 
   /nanomatch@1.2.13:
     resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
@@ -8968,6 +9287,10 @@ packages:
       posthtml-render: 1.4.0
     dev: true
 
+  /preact@10.24.3:
+    resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==}
+    dev: false
+
   /prelude-ls@1.1.2:
     resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
     engines: {node: '>= 0.8.0'}
@@ -9007,6 +9330,11 @@ packages:
     engines: {node: '>=4'}
     dev: true
 
+  /prismjs@1.29.0:
+    resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+    engines: {node: '>=6'}
+    dev: false
+
   /process-nextick-args@2.0.1:
     resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 
@@ -9582,6 +9910,12 @@ packages:
     engines: {node: ^14.13.1 || >=16.0.0}
     dev: false
 
+  /scroll-into-view-if-needed@2.2.31:
+    resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
+    dependencies:
+      compute-scroll-into-view: 1.0.20
+    dev: false
+
   /seek-bzip@1.0.6:
     resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
     hasBin: true
@@ -9798,6 +10132,23 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /slate-history@0.66.0(slate@0.72.8):
+    resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==}
+    peerDependencies:
+      slate: '>=0.65.3'
+    dependencies:
+      is-plain-object: 5.0.0
+      slate: 0.72.8
+    dev: false
+
+  /slate@0.72.8:
+    resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==}
+    dependencies:
+      immer: 9.0.21
+      is-plain-object: 5.0.0
+      tiny-warning: 1.0.3
+    dev: false
+
   /slice-ansi@2.1.0:
     resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==}
     engines: {node: '>=6'}
@@ -9807,6 +10158,11 @@ packages:
       is-fullwidth-code-point: 2.0.0
     dev: true
 
+  /snabbdom@3.6.2:
+    resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==}
+    engines: {node: '>=12.17.0'}
+    dev: false
+
   /snapdragon-node@2.1.1:
     resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
     engines: {node: '>=0.10.0'}
@@ -9980,6 +10336,10 @@ packages:
       frac: 1.1.2
     dev: false
 
+  /ssr-window@3.0.0:
+    resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==}
+    dev: false
+
   /ssri@8.0.1:
     resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
     engines: {node: '>= 8'}
@@ -10450,6 +10810,10 @@ packages:
       setimmediate: 1.0.5
     dev: false
 
+  /tiny-warning@1.0.3:
+    resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
+    dev: false
+
   /tmp@0.0.33:
     resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
     engines: {node: '>=0.6.0'}
@@ -11419,6 +11783,10 @@ packages:
     dependencies:
       isexe: 2.0.0
 
+  /wildcard@1.1.2:
+    resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==}
+    dev: false
+
   /wildcard@2.0.1:
     resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
 
diff --git a/src/api/caseDetails/evidence.js b/src/api/caseDetails/evidence.js
new file mode 100644
index 0000000..7a7814f
--- /dev/null
+++ b/src/api/caseDetails/evidence.js
@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+/** 案件证据分类树 */
+export function getCaseEvidenceTree(data) {
+  return request({
+    url: `/caseEvidence/category/tree`,
+    method: 'get',
+    params: data
+  })
+}
+/** 案件证据文件目录树 */
+export function getCaseEvidenceFileTree(data) {
+  return request({
+    url: `/caseEvidence/directory/tree`,
+    method: 'get',
+    params: data
+  })
+}
+
+/** 创建目录 */
+export function createDirectory(data) {
+  return request({
+    url: `/caseEvidence/directory/save`,
+    method: 'post',
+    data
+  })
+}
+
+/** 证据识别并提取 */
+export function ocrAndExtract(data) {
+  return request({
+    url: `/caseEvidence/ocrAndExtract`,
+    method: 'post',
+    data
+  })
+}
+/** 案件证据文件目录树 */
+export function getCaseEvidenceDirectoryList(data) {
+  return request({
+    url: `/caseEvidence/directory/ls`,
+    method: 'get',
+    params: data
+  })
+}
+/** 识别并提取列表 */
+export function ocrAndExtractList(data) {
+  return request({
+    url: `/caseEvidence/ocrAndExtract/list`,
+    method: 'get',
+    params: data
+  })
+}
+/** 查询证据详情-结果以树的方式展示 */
+export function ocrAndExtractDetails(data) {
+  return request({
+    url: `/caseEvidence/ocrAndExtract/details`,
+    method: 'get',
+    params: data
+  })
+}
+/** 核实证据 */
+export function caseEvidenceVerify(data) {
+  return request({
+    url: `/caseEvidence/verify`,
+    method: 'post',
+    data
+  })
+}
\ No newline at end of file
diff --git a/src/api/caseDetails/ocr.js b/src/api/caseDetails/ocr.js
index e72a4fd..43b3f1d 100644
--- a/src/api/caseDetails/ocr.js
+++ b/src/api/caseDetails/ocr.js
@@ -1,5 +1,4 @@
 import request from '@/utils/request'
-import routes from '../gateway-routes'
 
 /** 获取笔录基本信息 */
 export function getRocordInfo(data) {
diff --git a/src/api/promptManagement/index.js b/src/api/promptManagement/index.js
index e98dc02..1a0ae07 100644
--- a/src/api/promptManagement/index.js
+++ b/src/api/promptManagement/index.js
@@ -24,13 +24,13 @@ export function saveChunkClassify(data) {
   })
 }
 /** 保存提示词 */
-export function addOrUpdPrompt(data) {
-  return request({
-    url: `${routes.record}/addOrUpdPrompt`,
-    method: 'post',
-    data
-  })
-}
+// export function addOrUpdPrompt(data) {
+//   return request({
+//     url: `${routes.record}/addOrUpdPrompt`,
+//     method: 'post',
+//     data
+//   })
+// }
 /** 删除提示词 */
 export function delPrompt(data) {
   return request({
@@ -54,4 +54,21 @@ export function queryResult(data) {
     method: 'get',
     params: data
   })
-}
\ No newline at end of file
+}
+/** 提示词列表分页查询 */
+export function queryPromptList(data) {
+  return request({
+    url: `/prompt/list`,
+    method: 'post',
+    data
+  })
+}
+
+/** 添加或更新 */
+export function addOrUpdPrompt(data) {
+  return request({
+    url: `/record/addOrUpdPrompt`,
+    method: 'post',
+    data
+  })
+}
diff --git a/src/assets/caseManagement/empty.png b/src/assets/caseManagement/empty.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebd23b956a57b39e6781ef9276589a81e295f355
GIT binary patch
literal 45158
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

literal 0
HcmV?d00001

diff --git a/src/assets/common/file_empty.png b/src/assets/common/file_empty.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebd23b956a57b39e6781ef9276589a81e295f355
GIT binary patch
literal 45158
zcmeFY^;erg*EV{G;Dthgq6Gq_P>O4DLUAw9LUDJu1}C@|DDK6f#ogWAtw?cq_b<<R
z-{-9J<M{)=wO3YFvL?A_X3w^3Ula0KK@uC26cYddY-uSmWdHz0{pW>_iueZJ$~}a5
z134;7egaBH-s}PZ1dtXJ`QoB;(7gSVk^d)cpt8F9-Bh&NW!h2FQPMnj%98rggw*<d
zE9iMVKF8jqrm>W-p(@Ms$gXX5H8^-kSv{_=X0nzY3|a*q98r1)hKGmc%`zl>{wpN(
zWfOprL}>L|1k(SAm=7w%nu-(ie`H7;@zF85xOwXR*#8KSQ~dw_y8itbV8mQeoj{86
zzXGq~`rmQyS&2|c;X~pzSIXJY{}FIh4eEbKZe>BiQT2T@Iu-<G|0BS}%>RzdZqp(#
z1K5e?7i9lCD{SZj>Hm%+NDM>5hHg=7x)&<_`X2#FX@dVd(oyLbs87qtl7;Jkm%s^_
zTmJ7jB|T<LP9Q1F>M-}e8-Q3W_Wxb%|D&`2tJ(h^PSXD$$Cv=c#>S>&dfK_JrRC+#
z{n=h}dPz}{|8(4RSxXD4s+!sk|5LSMb{o42;ykjCdXc$j!GYe*>DQp%;Y;~C44<bN
zN_g*wHX~=QqM{Q2h|5cfZV8{<T!dNVrrmMdWdi1;32Hg6=<whfeUR8P6+~V8MNGtH
zPBdpIHzp$)!nhd!hS#2ce-E6rwT2B2ic}H|spe!ZE`FYmxU5D@f?{SymCTq7CH@D(
zUgB*A{=&IXn3<U|cuGp=zq|vKvVYzPigC1GJHz`HG{Dg{RsY|C3JRm>0-TVkAyuvc
zk$V6RNF^IK7nd6U$83$054mT2k$@kQm6c{c*Ca(rgC##98x|Lb2<IeKEU;@*AgoM1
zz24^SR|3FAOItgj@;pqZp-p{6DAMaJ^9^+cH@C(YRZX)&QG|CH<e0V22}L5XcgA?`
zjguu}6Yp2T!KS{gefTiY8Oybl%E|W;lM(wr>mB~G?ei(QrM^C|>?_~luN=z|=1=B#
zyb@&Q?9!)7y*sK%<ZYex7*e}oXRiQ}IUDo|mKn|>N-(^gRH`u0Zr<vy!(DT7Se(RQ
zUoyL``9GRzj&V691<w6%15<l%bUDZ2Bx@f{LWf95KFj3&CLa;aj=}$Hi46Jk0>6+3
zaBv=`8{Smm__`~)outDPp<_XX4GmNkbAL)jc)|_d;jQ3u0D@bC35?@ijQ#2OR>_&3
zYkOa!8?WLcmro`tFWBd3MuEP1$RU55_hDQ@?EHOWV>6d$)KjelDGH$vLQjPHgcM~s
zrl#Ag9|DWru#_8=-M2u&@e7BJ4C9LV_%bMGbE_pzb|-7pUF($6F=PLFNx$*(R-a-t
zlfni58Q91R@*#Fg;Eq7R3hjsDNMF1#!PlwTKOgG;<(f^<L*J>Q>IfuR`CnE~2Y{pg
zj`#wDBi|>XHnM|PPm`Gl-R5(s!6qiN*C&_Vs{FMXc9OsEV4*x`V7m`9??LrTc$}{1
zUONBrS;VjxMaPC7h5jr~&xazksHh)*R2GQ@iJpa#lk`x$qZi6~(RD+f@>={mikOzY
z^leEjo|}TX@XRby>R#k+AxMg?B`z*@EoVlJe;E}L$@{1HFenc(fuOvbx3w?_Jg%tZ
zpl@}p7mj^}`o~>m3dn_YPc5V>UIKh@F}jBRjWI`>Aar?}WP;2BuJM*n=$gYJPkjtc
zT+dO6*l`v$<+V|xr@<!}fYWt51&0z{9%$Ag<EFs&GE?{Q0;XR;US05Q>k!;5m@2-4
zvZB>N_ci`R*e~1jRA{GP_L0GSQfz^Wwiw3*ZF~t&x9`i8K^A1i0pHBAyQL0x|4ciq
ziOU&utjVUf`JSs|Eta=q?K4a2&UAmocEG&;!8>9m=hw_i?rE_NwR^cmiYAk3-t8#t
zbR}t{AN!ZcK5#pF_=lh4IHmy4f0V`3PnqA249W7jFn`I#LC_$C`nkyuVn1il@##Ga
z<rerH30}s?0<&DqpL$_VwylQ_4TP6{Kgq>AzW>6BtB$kH^8&y0_}$di*2g?^k&@D&
z30z9kgeq0j|2PwM`YW+Pci>Z!>9F*HfeVFbIV4N>WC|6Z1q=S~15Z-s^=gx{<#l`_
zE*d&WOXEDrT_Ym?@(Y0c&(q%iwau?bY;rHEH7J7?c1ntXH@4K44%_HnH!5V*f^Xk%
z7eIIPIg+k--BqgOB>_OJeGy*WB!b;tdP3^jnz;uxu;Bul0F3$j`?fK##PLZu#r5!T
zj9nIo3mD2g_@LuSC%X=!^w$s5HCoP{SauiskM2CSDqu9saP;7vkM}=x?)N@j&w}s?
zljLFvWIe-<5zZ2?4PrZ^y>b@h7VSwy%P37+`1i<6ciBbouE0UD9Sy0q_w^FUmJ`}*
zYV3#A)fIeej>vdWA+i;y$WXiI?gFxF0#Q?uW_PNdu}#^lJGCkBN)V6LJS$RLun=zU
zE0EN`s^&lUTr?Bt+|LWWWQr@q&8LDWfX^0{G!5FUZxRgY%J~hl=YtiJY=twCTOz`0
z-Q12!9K{J#6|3X*Y4Pz^(O!!3d}Nsarh2YzdOVFa*r==3hB?}nLkqJL!RH@7#krmB
zc8cqr>=m>0B*5D%U#-ozqwKrwMj7w)x>(el%%sQ{8(*q+Jv~x&|FfI<AMcX+{;}^c
z7O40{XpL;+u=V}s6VFSTrEnz;r;QNo(rK5DxHHL3mT}?N);(E^ACK^#6o+K>K9ilM
zpQ<Ot-KcN0I6krLjRGAeoJV4)uhLxJy?jSlq1VnS+HfxyD~^WCy-r0|i5kUxc<3+<
zd9m{4+)v;vP$z1O49?gmwg~$u08j-`YrpyG;3@R_vzHdFS7k?nGRE8H5H4CF#?iN8
zJfw1{xHER>(2X~r1o}`X)g<0!XiS)1S+Y6?Ifu84!6Tk`;67i>?^rxv<wzgf<M5Nt
ztAL`Y#pSnijHGq{WVYi}pkuHdyN_1g1<@lC%S4IMEdMK?K6q6}n~Q#~t-lTC`KIZG
zwoCbs)$(HofXaqhPaLb^?Mhx=p<+V`I?qp}Wwu|h;lJ8_C~qv3CItAjl{i_oH(QM1
z7i}=5BmP1rjUuqtW?1aguF4SktK!ti8~mWN<<G&+lhAY&&ALknDSR>6UojgA6m@<c
zw)_&t_&HkNL`AVs-{nC4V;h#5CxBl5>Uj=*)-22Lt&6?jMZ;;o6PDsBFLC+`rOjJG
zu1%CKc6hui-MM?c@l<X7KUh`_#=h^{@o$esL#6><zl;$cwtSm1D*+oy;XCkRED#N{
z?BjTdrZ0qj?_$#7A}M>EE=1LN`9pq6i~cUHg_CxkAeR{C!P}rrFi_T|g@o?y$b~D&
zP4s!lUB)5ddpZ*QAF@}&KrMR)(!{b>Q9Bx*N-AU9gpIa~7$OL}imeG7O%g&eIijO)
zWFz!jIs-L)OMf`-K(Zann9Mn2$v@_+N*}Jed^&S=0vRz5TR&T_pcLo)QAF4$+T>KD
zQ>Y&eb`Gd-F888nkPC2~nM^_ZIO9J}6*P>pxhXTja_Q57t2e|)WVlDBVq*1d{cN?w
zz@YC~K@4k|m7*8IbsrsMgsjMYt7M+q)@%Xwou_FUHt4IoB+qfQmVK*|a*@|)7tGt$
zMoz1>VM01E$tmm2NGt=h{IzrGsVAT)13rBtPa(CpVq>!)((!JU#4vCkFv5yU7fBMq
z7UNhG$`g3eiMnJ1hJ1qk%|k=x`dnmAG*frX>wjXy<ShMeb5Il%oaz`owpYGw^bH)M
z;FLs(BV}0?NfKl4xIV|7(SBtvTJRZ>2>fJ>cnNoro6qk4hN=M$6T<FnS@%&X&fpsE
zI=|bi;QE#5O#Wr(440PCQwk4YT17TYbYp>kgA@))p8E_nd`q{zML0#6%|2~W3)>2c
zUs^yt3+dz1Sk-c!A%%!h4Gs!~r#CZ(N_j8A#TE_L8yU&q0TI>HOd_MHe*;zx<E}0i
zhAAT46ijh4poq;JBG`{iRI#p@tMbZ)qQgI+z6$usq~MW&$>tLDT^dYccxDNleNkP>
zzN`fGWk)~hli2`gz(q^FYm}eAC*Z3@9ae6JuA?lbwaw3mIY^~B38m0u5{#xr1f1xQ
z2J4T<NYKEE+LfBf(bdOZc75{&k#hhJ#ZN+k_KetqqqfVGk4>-;AwKZO3*A8hfIU7l
zoTLc`>q)#$mm!gUa#6cZxQK9<0=GAMFtM%_W(m*ubB#73&fJGTXHWO@z{Zn#6D|`v
z{GWtSigtCB&U%1ihyRIgT0QqW+;;P0UI`PH*ov>{W*DLhYNI3Ls)siC{7(uL#d9;?
zfVh^m>L4WCF%<fFOGkPI=fx#`5c2VOaX81=7qC1yiUj?7D2y9$-NI+=Tpt^S!bFD7
z`-x=ZFtRP=3Q}f2u6$fGIsYn`q8#0|*jCBPi`0A;e{4`d0daYh<BSpNe!hzMx}yTd
z%@V%LtNb^@@oFL=B?Z9U1>=SfUj<bq@B(76YET~&?NL(m0<e)JZ)VK{13~np^fWZq
z;*WC*-v=^aaS29JWlN`om=G50|07qhou0O-LSD>gn_4D{km1lO6>Nd!9QfIkqJA<2
zkPW9tEN$O#JIK)0GCrwto<YU#3~ik*03%iG19~L%9R&?FWNi(Y*ylIF8;uqxx{JR3
zvzN>mhIN~)WbnnGaK%k$5N;~@7%hED%M!bye!=(Dw5nqnc0zeTZU`w{E#qjkXw%v|
zH-mJ;X~ncy7f_hZ?@dpaJlUUw?r3P|D5)*PqX@`S{#|i86PVHeJ8Hf~;*SF51au`P
z6MEkk_m8Ep)W6s$OcgU7Yr?F1@w9fvXGcKlhXImk5+d<luj!7!ZaL2J4E(QW76U<K
zRHE8LrZQ;k^1~&ANr8|q7Azg_))&5nCamuwW&y?8LXf4Lt`<Cu`nO4kUct=vuU!Vf
zpxwGaxYl(f`rEA@6@X>JdFm6aD6`dTkx1d0jt75}k&3biio9Sl6#j)#qMR<rO+mxx
zZq-Uyt_6+~PmOcmi9wC}fZHaJ>jbkD^0CdrC*0HG)SOi461G>H@##>+!|92L4iy~R
ze_M~jAWdm-tUv;WctoqX_SydDxe6wH)OFm$-I}!P9y2{^+5K5y^!Sd=>37<x0WYS|
zIZb(Z`t`>=;!XILuvq80BD!?35jNnX&SDTJ3b0R^{>j9OD;1<P2t1!@L_dxIMX3|d
zYyU7$w_D1`g!J)X|AY6-q+p@#?$SJ^T3Pw`8>Pu<Vv98pSOM&Hztbgs{v!3A|LS=B
zVGs@4V3us@BSlZ$?4`>`hUlQX*qYUVA?*2+CL<0BpTSX$i|Q}5X0wo_Rst#9U#>Iv
zd!=w^ARra~8FAF8QQaT?(j{DiWUfJ%%I6I8E1UctntkkLTuV)Zn^znA7Qop?zTF~_
zP7Mzyn>UEX6Yh+{e=L{#29wSeN5(ay2(G$wa9X?L7icSZRJ{RZANwnJ7L^1(Hj|&x
zRkP~qC?S^ZV9I2tjRe`~`kJ9myg(c>?Pzda&6YR9W^`%waFm4YJmF>4EI#MhO~MeZ
z5bSm)^hPGxT=>P3vuEYlK6B4;gz+oT#@QKrYMO4~Waatq?@B2|2L6J<zqY+?P5Fy#
zi<EY3?-8Y9G8ZJ}7vab^!#0hj>tN%ReKB*Az`xfXeW~vbuh}mCvVK!Md*dLqf7O#%
zCUD-*sK-uVY_gvmKtWhw;oC!vgziCsKA+ZaF4TJzL}J-c|7vD-cH8Ctwt0dxYWrjU
zR}5ktt0$U4fJtwtqfCHx*U(H9?<|U2Wk03bHPU#D3n-lLuHN`y9QYFN2V3sc0vXtj
ztBnlllRBs9=1Eihho|xyyq6N`X=yQ6Y_s{_304ZRl6$XaVyP<wuX?mRT@6?eq0s=J
z+ZGl;A41X{vvyyF3yM!hWeZGl&qKNpt=*qq>E*G!*fG5GOpeXpblJR5EuN83Q0K5I
zd4WGu<WzLoK4B89D!Nri6~)I_55a%6x!Uo#V`-^x>6oU_Bpm-0?RIHogt=q>w!7)C
z=#T!BdqIpjIG3iTibDZdD&cVwFp^e<qu`DTteWE*lI(d#kH^d%|0(_({`HQYuJuyC
z)9Fkz>HG)@x|P|9D+t0$_oU3rJU{<)^0(Iz38#Ozx~2v13Rc^(Jma5p)_Vi+oZxH=
zEh;h@=AmLbYh;*BfvGi9V#@04MXrk(@ADDyvIs5&sN>-YEV91k=x}xH+ZDyyUFG9m
z#LIDQz?&_=r_0}7og7zpc|J{KP{M+FyOZj?u?p~8+O-2;e@4n<ctas}WAjxdn`VMx
zRbqlls%Lxp_3SRQV+~$4)~$lM0ylRD?MosXftPyAV2tgO3Q*r-j=Kg6Gc}xNyC$7b
zDMQJY3o1uzx!S#~>hg$0^~Z<iK2le)gXQ?G3o$Ui`0Yi|{omE$!6nJezJ3f~!}rX+
z9>DW1B1x5+AHxB0=TU2;=1+hiJh?3g8ULvckO*Hv<NYsQ2oIfy{W-baVf46j_>@^z
zc1U?3-<i@$er6ACc)r=BdAMswi)v0AwyVRzHriL};X{TP@);MYr>R{y-ni?PSOOCr
zF1<y?rb=7&K%b!nQ{;S2E&B0qVcj327y?4xg7U)$$5w%`QW!nj)Gi5U)cVQOy7Z9*
zr@lP*OouGIcUe`2{CSLQiy6o%9p&~;G1?QaSvG#=#Qu+t0rVBW6Fa{nLx-!RCk0xU
zxgvL)lk>gwfWnuT*k3BDl5?Nb3qAfeZ0Gj&j?%5JCrsLTBzNj@{l~N7!#y56W<XIy
zjhd^Q?ce9-(}(yL`5AD|$=)eo%~EM4bvM`eYL2<3t=UMve`m{Slypr7FEF;_;FfwC
z$!q+2K};|PWRYa|b~!%>wxKHY2+@__Yl(L|K|5KkPd8<Rn~obIxnrwJpKD5}=)L81
z`Qc#N96n(N$b!%?*sbAZq*wlS0tn)Z&TxBRqu8<EnN}v4=D$Aqf?Yo|+(U1xL%+fM
zX7!zMq32N43=%ZQ@5J!)jT36@+M*J2aNK^|4`-RdR~^_#(Ri6Cj%d&hTMK>bqT=Y9
zX}NF1{+Gl}4@wIMVB8n)388Kzhiz1hp#~w><>$<s`=V5MdCg0XwU(z+y1fc%6e0sM
z=%#nBa^#`jbNtXiAij5y(&G1VxQ||hXe8BPSK8ZkV%oFb6;8;y748Vk;|`O9(30e@
zX3U9$w+vN-WbZa&XV*{Yg*wl7x7_Cb1}0gy)|FXwg)h2BvjIOpO<}w<ATqN~KH3q-
z`1k90ljbMt1VH0!GYLKN5MeP0z<}O-(IgC&Pt2MjZt~OjOopRUXZoPvVuZ!M?0Xt|
z!!6@C?jJWGzLi4!PYSUAtET0R3#>uAa(W(zw0b%0U7e&ZK4XSx(^ZZ&UX^Tlch^&(
zv^01l$q^-}fkrN#Z_o4XoSj93z`6&Dong&~C!0I5a$34Sh_&oC8QyH4cv{&CdVOCI
z0?M8C%!u8{^@l?+u<koB{`&TGB)Puo`Rf50Mym*3e4@CUvd@xz(^~x;{;z;gEc8gG
z;?rOm7LWrAtlR2)s`qs0y2{e(rcf=G<tu(+#>)L`_SJRo&>xvADcS@xg+fr`Y_4yO
ziBK`ry7A)qY4hz;E}Ob;ekFO3yGrPo@2w1AWNS+L5~l_+%U<4V{d-2>)05x?De|Rg
z8SMvK%s&5jCXB*(buQT3!oPf~93jL0Tqd%@VeG2lOc8oihOO6ssEkmZ@k>f<JG>t*
z=u=bI#|TSIxM)f4n<E_z&v1q{ymKETE~m>lmeBb%Q#MYR1lC0rUKjHXVL}X5e{B2z
zE_5~ApZp+k{D#<_aKuAPCrDSALTQItL95lXUIjoO32t()C%S^=A7Oh+(rqJij+xl)
zyo}b`czcQ*z_w1Jgo=jIA5v05uBJ;?f%3x)C)(UeR-a#LZlXT&8_Q^x6bRxbw(w?s
z(e_7{uHs1N{pg!5j4eB7$FzrVMIRpYE(B77O=kH=-_}xQWR<835F`^%C?rhwzswo6
z=$wFWn7a$Yeb>~~5^`Bk`myQTS3kfU<&2=CIaKofv)Pq)4n0`6jkWhiEx!2VEw}*Y
z19hL&AM$N0q(-dPCShvah8Caqt$0^8bjaK%g^NVNL&y+VnI0M3h?*OJhMch=|8qAn
zFisj0zI%S^dUN?WdvYFB3fe|F;@7_NoWy(inYI06P~&R%2rXO3#cs^ci1`oZcIm1H
zXyex<T;tAFL9ZL$W7Oxf2K{Q?$n*_)p)K*bV~_Mn=iTR=74goh%LpJb?9aYk=!U;(
z!s_MV(#h(i^o@s;jK((3@zt(X-yJCs)_%3N_Tf!hdQfSv>8fAoR0l_FwrHTcroQat
z-Ag(RK+McZ?W_BImJ$pcg(#7#d(!0uxiSCfC8v)IKV1nwJ&NA!K5n0EeoF(nuxDTK
zW5x{p@jE=}OaUXsyd=H=!BMb^m8R0oO_o9E(}`fcS+!ZCbdhvA&`TC7YCnuK&f@5p
zkJ9()AtP_Y)WN_Dv)6ie0IvUCNogtWNkvxY;VRhf_NG33VnW`^*4n?b*_xYjxl_^-
zqNBRgg4HD|&D2bsjS4~JO!_1&-{Za_YE#bcHanMt&h5z)@23@S?E{~s3Yho9s<F$p
z1xp*7mPa7xOB_al`@5*aR=j9no0k*E42c525@OKWDHIvIzStD<o|M0arzbMQ?#b|7
z6OSILIdHqr!l(s7kva4;EAI3wF7s5p4w0qR@thrgfH}`OZdZw{jS;ijKcUc_q~PT6
zj@$NorH|}418Z2|pn<1D7RpXV%2t6ik&*Gq$3yvn+l#ABicRkiA~|aW69EE2wLiFO
zYzSj#e;Kr@#Gc64g$e}-^|B63AA#HdQ^`hsZ@SKUneQnpkz<dBALn$)8kMH2GY;xp
z5%PE^j{+jRX%njp6b-brQUJ$@|Aw`6AA3z?XaY%;0?3SSRuZW(IdRS0u%V>z9Ah6(
ze{AUyVdt4(tD$iv*Tw)|G+1M&nh6M()xY)e?%jj#^A!VI(Du{(QnLRn8vp8a82QiG
zc8~7bwprTE$Q(0DQT*D2&u^H1P>Y=uXbTJcJ~T5}SXeM}R25b%QYC4okBz6GM2ZX>
zv~&0_5`?2T%F=Q7f&X;%%gQ%Rx_{qvb#qtxb82d~B&;GxdK1}6p`rE4RO5zwB$}v@
zdY|`2-;1roI;fNU3~u$=>u5DOytg;~<w1eI*bcgQQ*#0CDGppfITn&NWC0az;3=cE
zsZ~Bkac`-g&t~Q?`tzOQig;cS80Gr;6pC8A-+pZWm!k#Og_{mvqn5#*#}n8QoNVo1
z$q>r;sfb)x#jBpp@%HA}P<n$4s4t!G<dFuO0~JjGbqan^lwAUlBglsFB`x+3gMJKi
zOuex4LknSZcnBxcJNdoV+{5dP9~jW5^#sN1>9l}im}SMQr>CHV)fBbHE?g#+OB#pB
zKvl<6R7U4$T>R~gwTBN{S~^{3wd|3E<c>;8nxaRqCx}&5cc(ZpgbC8R6SP9OGyh)Q
zWqZd|%!EA6#f11p8c8&M${ORTk$Pjx5=lS#k#?*Cgsx&n-|3QRtfg!;$OS_C^j7>u
zVR9jj*3W}RkEorNujh@6iJpJ~30js-{A;LQYp=14t<HgR4&eyv1)KVyp7BT^(B+PE
z4B@)Hbe{6nhlL7-rZ&nF=jf1o((z;lSmAc!10;<lW0aIogPRj#WU{|=OapB2e~Xx!
zcy~u3t>PTJ)2NW7P+2qxfHh~A>1-Ba93K#Xf_c)Gx475^Ds&09jF+LPv%-d2eQe{5
zCxJq75}BgkpV+||Jf4prR<<2joD(_X0>ZL4={UKzdyzjBJBK5rCb)XLKj%bwd5NkU
zwqGprH<|WR{NiJ7X-CuPv2i4YQe+7u`f0>aM0@4^tm5I*MmvhxC$8)7wXTjOKa5!Y
zuoo3U*bq@B#!8IAiLFTCCX8d9L)67cwwsWlISzAIs5~vOzVzhgga_&aW0azGZsNY`
zma}cy@LqNyg>zD(7q1xC<A`xa#!Pa|@|sUC+epfx|Cb9OVnP*EsH*nf6gNk}U!Hld
z7bPn6Vjjpz?Vd&ZyLw-Xw%Yg+ZD}`6#kUkRFk8Ae(^}UPcyJ?%wpqrE0X-VqZFB)T
zgm5jto>z2V9FAvxQFnQ%vCJh%6laTdX-N+thoRFlz=McL=V5NnQE-BWzC1>w9j&R)
zD+s)etpgRZS)@qkagE~fR@m#@cPQc7-UpAy69;NxIks@GG$LW6FUSqh)6XRg8^52F
z1>=ei8jnHsO8EE%^Aj)GLvtzK2on@$W*Ek-8SObaI_ishN`lbsf8mnCoz%I9ptuB2
zPxlG210JS)ry@pDZ%JIz<-d76nWaZ+Hx42}q_#&O17A|;*xHEQMB#cd|LzjkMjM8d
z%^-boe&0_2z8NCbK+$83>6e&m$algPJ;V{DM8^Fp0*>P2;vKqv9dP?;J@ryljtQyy
zni<&OrW{@T3iRQ&CG}X+ripXvW5B=N8AEqpw)~Wq@cDe5hB#gwqZH66_|eXdKXvKR
z`P=+y-8TozrW}s5+Tf^{e%~-w!6QD1yyM{>FC9!Gs>iy~*<5_G^v5%Fg7i|_zRu#D
zw-(<5D2KVkNEk4e?U}?x!lwQxTv|Yqg+~D9FjPna`g-?kt`C?$s&Vrq$;DDb=xL{f
zwmF&P!66#Ujvw_wJPL}V^a>tZqho=}qr9d|GCas|DZaxbvZhudguk4CdTEUK`5T%*
z<>L8M$YPH?5T(}lS~`74L(eALoQ~Sxq<y#<VdU3VH?gYzL(G+ya?FATCb6#aR)%H*
zvLvCu!-1bGmE-0Q%_(=XDHww%+kMoAakuK=sCN@kt@G)`VPZ$U{<y3(6m3_pvQ~UY
z`eD=7bmR3QWo{7qVOA)?o5n@JNWd6YL%X5Z+nNOAOd!h@?`rXFY8%n#vbw9sN+HQ6
z)yfh>Y?5f0jEtv^u0r40trGrZDLEUC;HlS%cpq*lrjQ+(KlK=Q0d#?tA5g=Pg~=8&
zZpGY5HhW;HMYUgOIWtF>{hd7=WVRSmx%2t4Xp{`JgpqL_gzJjzi^vO_ErtgJGw);G
zEr@fh6)@Y{wnr~lf{tw|FJ}(SAzb(0&wT_YXatojc|37WQfw4DaBQ!3k=`#t=3vIB
zS;=J+%i#)6-1^492$=j6GYmh)((i=nw)x1JIm1W@AEi{h_f0Yc;cYa~gwwv=e|3pF
z!obV(C8SW4R5AOWGzgr!wX;7ItQi*XVm}r_;q$7H)9c=Y;OXi~_Ga_(w3z7IpMSeb
zz`RMTYc<i+YLJ?~dxMe|6^rjZwFQJN`=J@{jg|kX4+0Cp#NHU3HRRKy0kY!MMrD%E
zo`ZjvfO^bmXoeFvL&HlHv7r#_RUx#7ww((Bj|VqWuRA*euUk8((v<SAEr|qeBngMR
z{zxcK4?!@W7{>Q8qrSILW@ehCti=4S{Qa@Z_t;RG1tE9rjq`+c_(=<mk7O^*!Ovxd
z>$8i=X8L7Fm?I$xG-qG6STeXWr~AptiNfpFg}}=OU>BxyTeDqz`RYdG=|007y^aM%
zBZTXjF%+M?@c12BDVN~%5m%|aB2$rCf-P;4T!bkOM7Je9%1AqPEH3=5$I*_0@Z_%l
zOJb@$<7lBP|B9vec4E}kf&-pHLO8-;=<-Kwqv)*@w!5?Zm1##GK`tN(MeYuc=svK6
z`$#{rZPXML1kD{&TSS0}r}Bj+vCSZ1*pOvuZPX|ZQfY8huikXnJT1Gz^ZKz)04&Iz
zz~8~yQ#={ti76DHgcSXjx0E-nF)?#&<&ASURg<C0m<zqWQ6Qo9Lu9=}ydqdVF1xMo
zFL@fVLEg_}WC)wt;+7<G!49h)fF8HGk{=ThAXjAeQOtaxf$IGA1Ld#&?QBPOT`uem
zw%RR&Ds0+^AX^;zw`>l+`s6+s=gz1wr;?3$(boX|apX3?tjp3iHh<X6MlOd;eYXK$
zjOO>p{?-;JfciynR{lS%a1B)bK8vSx;vx`kY(DJPq7_#xJB01ts6*o)tB!5AK{gGb
zu8EP+nvOu4&NT0jP){CHJY|-AE19e0-@j!lan^nVyrS$Q#x{IEs%;(l4~B}nc>YvX
zTG#St`t$&VtluO`BsuPj^uDNs2AY)6ma-wHYlR<Ao&umBt@UgpfEq*>qY+47bzf;&
z$Szy<(?-QjB?IAW(*UpVXGEiPZK$=YK0gK#H(F<d`p8ut=`H`0?YgiD#O(0_6~RJL
zvi^JLo{-9A5c@tS7dDMb5vZ@|kLfP~O9)xc8uLW{7FdK*9bAuv;5JNcj`o^5y)-Jq
zL9RI+j;JoHnc&!R$#2RFQ7Baoi#IWWDC9kG+w3#%t@-3+47Ao+W%=*{PWbpI{bAZ$
zlZQ#)Sojb5<FLei+z)S$6WO|I_F9Uc;_qktv}=(erPm!IO>y?)seKz@CBPuQBh9um
z4`EvRn2UaONY!4B6?Jsu%}dB8)Y5b$&=EvR-0}l83Xx-WY2AHFuzsQfp}tw9VTC08
z1Od|gq5-!_tXfa1Ch5jStEBx(?^-^*#@APw0-(rYH_c~u?~mvbkS2tU7{(6j0Z>z<
zP|lVk?Kk`Fp6Jh_=)jb7aTfs}C*~#eX)4LsxCyD8Ftr#wzeW~mee)JLGl0e1iMdu2
z_Js@q9rLt5BURWHvCL>H{jV@{5qy_d@HgZc6Ke*-k}$4$l>AzJrji@cXz%gy=v;~i
z7(+S=$#OD|+NYq83#us4Dhx|P;P!MW?BuF@q~M;-%FVhT_g6JI@I|-FS2J4a=MRcW
zGX})MJh2=y=;9x29|Es1clp`vo&@v3iqK6nF5~-6COA6TG-aXMayv-yA+49`+VA}d
zjo$dmTRr_-<pPU5k*s`+scauK=Gj@bY{Fk$`b?x?6!^a)HR;MaB<g14U)u29yjDu;
zfvgDcg4XNXhxwE;01`Vuv#e?oGGF^k%%Vn#Ocb9zt%Bsm&|0}rM-FcCpa?Rx^%jGI
zePp9Q-zTs>{tPDXxG4yi2cOP~S?^)BKRHc<!$;lhW0-WF-U%2Z)~bX9RM^r|9`YyE
zJ(&6@dyjkVce`OEWy!WeTxGw4aeLx)Q#%49Y$KUtrequ_fV}Hsaj}a}aQdScjd5q-
z8WGglWx)`Q50hcyy#d*BPd3hxrw3U7d>Cvf8Dzk6XxDEc>?k#>Ll<+wzHHQsujrff
z9XesL8AQ+m<|$V+IPVL?N)Gl7+Y^#&0b6IsU(R<1zb_}kB6XF{<1XaC1uzT#HW)>#
zFr#HOgBXHxa2RDM+LCqpS@b$Iv!|{jt6L@I7r?JIJ^-$eWQXAOI}Nz#Bb(3|E%OKo
zG*GB6kSIw!Gk3_cgVZ8h(0hSkjFzzh&u8QlRIja_K1ONE>pHL`u9DQNmtAj4H0Zek
zBaEz)&`+HSJ$)-$ehS@iE9Pcyd+<pe6Yvq!;m{v$0DAbA>~ycTwv3$i{MGN37$VEp
z@R+QAvr&di9$lfH=v59|bdXLeFq}KlpBy5}MO@ywwC||;OQ9amamXZ7@^z1->YPAH
zQI2T6C&c%!#Jrqf2KRhgQo|+akq|q_ZFgoeZ7<0k;m)!^dVS287H%(K;Ylc4REgie
z*EFWsY^f)&qHI)V1;^GU1@^q(V&wFZ4?fQLq0qUq92wb>oatV?gP#L{`u3YoJ^@{)
z8Ns8H9STJ_Qh`i>=*p$BBA#)+hva((b#gZl4c|EZ%_n`SL)8xD&J((vvK~Sog47=I
zPe~d7oR-ZK5>TOCXv&(wqy#-TQWl#iPF*0JAU>M-#uJ?IB-h0@v)pnaT>Tj2*`bha
zQh0dgIeVNm;Ohtx%sj@+8#1P0Od(46R)c5wLyiQRE%FZhYPlg(kAQVw1e-=eL&l}n
zxmS9Q=Td@7wudZ^CCuSXAxRBTF(MR|=fl_@R}<XvlQFG!{^EQ=Y1K?rVzPR=8ja0#
z{&ZyWIL~L%Bv+sn*6knQ2tk3n=oxf*q550>l$k2mH;p^4M3VZwA{q76KfXSGoYKOD
zuS&aKIs2a?1JzM~={lYW*ERTJw(i*|Jfzrm2;q9&#RZD*+~vP{j)aqnURg=SxzV1y
zmFV@1uvim=&3Z=mO!2>{w(m9yl?UtZF`>ZQe1vA&xd+|;VCc=f97LPqar*8ahChKV
z9zQf-FegUTG0p}UJ^WoJM(j%d3VZAU5KQhQ;3NGc?!GJ|eb)cHV;yCtQ6cgn81D^o
z)Q%WkHc>`J_#)Fnro|zNqv~Sf=FWkM1)w};Y7U4IAB+XIS~s<Lwoc`!y*G*<Qbz}i
zUFrU@z;P}+OC9yl3OGNvA6LUE_JJCRnw>vg(a1$%zWHwCNRrT-fT<tHE0(`M<N6_7
zOd)>o#qBivYmB%^=f*kB9J1X!e)^a)DWbvT8@tTA9F}qxh0fpTlH9zKJQE?VF?-#1
z?Nc@HGIGV-D9CzS=I4|BcenV&_g~2yZpvL(tUEoKTfeiC=kB<2N}F+qb+`#E^*C|L
zfJ1<ZKd$a{T+JwJhmv6Euz#GXQz4KuC`CZ^;Z@KN;1kQVS1Fr`cKXzc^LH$24cRyD
z=job3fhfJVUmuQ%vG%|Xk-DQDipQ-Jt$)47MrMrgYVyhSO&eZa)#U3Vwc^67=vH&`
z5^_MV^!{P=34-yfUZqmAx*++Kuxz%6zF9uAXK-=xl~T$u{vG;ie@F!-aksn+t%0&o
zUh)@VUefda={^?z_oaoH=NgK^SP@ekXwG7fk)RcHa(NK}Y?7^Bu71aYge3bYxvHtE
z$riUedD8+uSNL>`*l)_=O1wTcV51^cQQ#BOKZAF2&4)T^+mG*%qf+lpzTHqde)!F-
z7f03kbOAt5+A|q7E*PkPYw(2d&-NGlSV|o4rM|d3+ui34IDNW!8Wgbn?Sl4{@ez&x
z!WQPv-q1p$P8K+j!mBD;i+`T*!^rx~bT{xFb!1lH8g?88vcZ|ypJ}r^WpFLyFQco`
zWNg?N7+2Ba3J6&^07V_$5VR52cMi~x)wdfppWU!)bM=R4DU>ib`COM8a?2#9MMd9@
zdb<qkmwwwSd}dP}n1}Zx6J|uP>5H5Po_rZmvgt(qxpQ1Ei0**?X=@{iaVm~8mJJgw
z@Wp6zNB$fgB>@+~QylQT^EH6<ys^}*O?FnBJOY=q0kg0#bKX~{`%7uy+jUrJ$J0ox
z9K=wF8MlC_x(j>4;4eNtr*TzT;XWhHQDQ1<rEH0qB?~!(<3p(N)me)Zx=Y6XV8@_Y
z1l4cVsUoDP<a!AY&k2@SH`P6F;S99zZLw$eYIi?PxQy2()_wL9s2Xm)--0yp&3zCx
z#9!#)N}M8Xrd8|c@fZDv*6C8(V@!BdB+{b8DNBR<4^;>o%I*^nKnGZLB*VTc?TN}t
zrbmKt<_kQNN6JWQQ1KSgtY*CA2f!GE>>RL9o=$j=@wALLJa&qGl&#+4LXlM7l52FL
zTd8KEujolCvd|#)EsPB?8uz$H?c_uDE9K7JNg)?zYN;+vs%Xv6a&of>u-=-8)jIk1
z=eV<+A~(6mhY>wljeyB=<irXW*{g;Ak6g%*#0<*i!+?)0HT1%%Da#E!j+wwFEplR4
z4=6aX5A~|719KVLQ~u>5cj{Bl7NV(!458!sMx>(WH@<+skVKFc7nh5tW4_hs#=&kc
zJREZA;kLrX!HO4c{#QcY*g5rn^3acKe*Q}Ka}xvLvwk@owuGpqo68GQ2h_LXbIrwW
ziF@ct{W_gaV~9NIe!`GQE^TU?>J#2_+a`JH6DmCsSQ-qToBGgu!3y5duU@{jETM<X
zul&jK{mEG%(|X`Wk7&Y3{pL?DWjq<X4n_5qL_kvhA6aT|K7AN26XccS^u59A7wQG0
zcgI~>PutvAKLrnLo6#Wf9s+1$dpv)YCHq;%{&27JMyS|}lgV@=?(PMNd7p!g;qXu`
zs#6hE0Z<T@Nz?7L5g*w^jMpu;4NhkFJHw8&o%|f1hr`<2w4KtIHJ!&R%~&Zh^LQib
zG11{Oh8on;M8y2Sd+ABLDx9r^cZQJyRVNq(o7AVFPvX1F9KVCNjJQZ}hR}g*mV8tS
zLfaw?hSI;B``yX*APyEbTI(j!Zdt{S2cZ&eYrHS}XL_cj%WrIgJ_c!q`t+t>vU(KR
z-i-Btq;hId{P$q8y!hmL6Q`4_PNcfO0Ail;6dWUr5g#b{lsi*fDD1)$eTrRWA8Acs
zz3gzDH)>@IEowO8@?^`7?&0RDd*{fd1*fwYkK^q!W!i*v)@c0ik$1`gRW@#7KkF6^
zzM-Q;uQtHf{6S>n+Q@T5W3s_zQ1!|tcM&A!MAFHO5=BnFQtZ=F0w9-=cqx&Xf8TsA
zfHsf0Y2xzGT5+eNyp{!aHrf%DU4weWh?R`ly=@4h0qG-Y5r%KX8<YAfU4&houwvSz
zRWzN^h`yjxu>v|SnhRYAC2SwNnQsz-4$@wiyG7V-xnMmL{6Maq^*cRiWo{G~fjN^h
z5zJ&n&p8IH&bCQmNhW0`2p-)K=6G?i9`eN3eEzsiG^u2;E~oZoASB&kSaK#o*-SaS
z=qhxPw7KE(`d%kg6R1|D%WJ{y7;H9oajzrSIkKhuJ>DWk`eHkM0!uqxw(bByvbYNs
zS)z5!aXTP+Q%>2}^#1vC=zuI_f$O$poFosCCSb!|qTd>l{B7FoF?$s-MMQMU2zS)=
zY-EDNl>jK>KO>F|GNgNxgDifSb8g)U$i)(J+?+vwnKl?u7<fWnABtK6_ESiZc=Q?X
zaU2`tV29yYwRGhnwdL=gTub!hh6huW{0Va2douqBY8c>O%|sSodfi=ZDj=pTiiWp~
z-|m~f9mdW9FW6?qe^ptMS`YQM55C$9-F6heXIwKOT?o@y$Bhs_@c76r!@!9juOlLx
z>4OfxQ8@CVFeO@v8g2hGtl5@L=zKB1Q&G+4f|h?_tBmGB;VDCBye>|BY^&R;>z#7^
z2L0#<;*n&(Lc$*rX9fwG&AuSiYU=B_#1PVca&Q)FVKs_<LD<!{`6mOU4}dPTBe~?u
zTuJOUb<0-th)%&k_4lvYVFZ*&a!W9S8)?z~$d@s9OJz&wNMBGvA4sF(wy2yRZft~`
z1Q#(`t@q^WuxMojD_>EcHYSD(F!`4-k6kZDE`6KemY0vbFd_0ss@ejpqvFr(st@$+
z|Fz5hobzUu!moN?iaThA*y{1fe6Gvo2FKnYLD~E$###;B_SwCQRc`91bFwC#pvKe9
z<%X(I)Qb1{PikAc1&^WLNg+Pk5BhTPB6NY>SZo>Ytc2bptm#>GRbtwJ-;}AGK9{hJ
zd<RjX4w|%?j`1UA?r4^~gGb+SG$0NV+c-|6Kbc8Z6Bd_~{Z;|0L;hhe6gmV97*(}2
z;3439QOtEFAw%w1H_#)*)D7zna<><@b|LWw>6L9q^ECtHEvXU$pF@hO`p591w&x&#
zK0@EW1L8z5J@@@qdvsX6rs(4ZE_~-{>W-G%ZE3(-?pt5N1?*VIU+w;H_Qb6FKdLGz
z-^Ng@8MO0)(Gc}Gz+jiYod*x~03;PZ<LFo8{XMWi2t?;tLv2Yh|KrFvS6$1H6W3B>
z9|;}5SLxq}Xp_yp6AGGpo5WK3d?1Hd^I+`A>FvYKp$N~SBeUxHjC*(Bpikry?m(4k
z&zx8D@PSXnQ39Cp#AhtP-f-c~AWynky{T<S$7M<7B3jlv(Vzda@W1>StqC_#t&q4+
z^{UloP<4yDyW^yILF;L}3t3I2W%Rf5dUg|Tn%ln<zT<2gukn-wzY0vreUw}63Xfx{
zG8$_!rw4oUYNjnJ?d8-Zc3zN)eiU7}!#p_<JlRh9Wuc_Gp{KgdW6@UJd+1k$1L;qA
z#So>u(zHm6cDJmsX`;|8HZ@OaC?_X6<Ppz@IxvA^KOCYkSyctB`M`VUdgB`zKJS42
z?vZmpf$IZsHV#*HTwrzhS2euWk7JTozqwvHSC#igmrT6Sa*P1cNtp5J$s4NvRHQBJ
zph|5Grlh(YEubm%?yu58ibX+}&9HIkEHPQw<p@IVD$6Ty=J5fGl{!tc)mrUl#JqFx
z9oWcb3r}Bg9P!)%hrU0%UZL>!Yc`*Y|H4hUdG7(4k{Dg3EoBxgp!z&+?5qinhoeGV
zr<s}HSZp=MUS4E$cf!v%fmzml`U~fUNr9OESmjbD7GG19-~G!-ERzZJqjA4_o9ug)
zMAOFBf}?*kq-(Gc`z<h$;ou}%-PB~Tdb8z9(qTL?F0$9~pus!7)mem1Qs24fC_+&@
zMY=-lkLMSzE(8flSNit(F25E*`c(*djjbeOmnbee=C?Pl_p^tLE_r*fC`er-FstlF
z=5G+*4q+0Jpf|uP$db)T=*mr)V_OS~dVauJQGQv}#rnZ8nFwm-e3u%qE$YBU(9Ig1
z9X2`WN1v#2tFYqO+W%h63w2~=AY-GJ3VA$e_REcJZ}iXQp(LR-#iZyUL`$9A>)x&d
zw#<NJF_|>;ULZ1gx@_XQAOenjccO>HOp*qqg*JTv6vwfmYoGUpy(L}8g6B0T{jas7
zU_&}%$NWGn(0RvJwZ)DMQ6RJIJNzC5yA3DV%ZgV=0_xFcKN|nu{wpU@Xn!5lwVaox
z?AvTDU)d~-1BaismEY(-BL}h_=oNv`Io=k#NpW8s-M)yeRx(MZiubiBQQ^??Csm}i
zjNP$~K868$5aVZE?_1IziYy(sn_t-qvjSXzwcDYhU71)2DsDC#1~Fdyx<DUDu#_?9
zVmhv@yqxsuUf5d==VdvN75(1iUomQYFrnEoz7qT&QgH3-z$!{GyGQ2Kk~Zqczeid{
z6NtXW$jFExySO`bB3*}L(;mG6*VjZv4C1>a9lu*!uiDWZ4T-O}L|>=(Vy>JYm--mV
zw~i#i{Vqv_46ExzFW1vH-=K58Oe}sHq--VES|t>ycqncY)tA~{lnnnq@ne;SJ}iV5
z`$Mv0-xW@_S5w=2A@6I4gskrLP~Nrkgvpcr{B=7gH<7m|9<)du8en=4x!2DMU1+~&
zIn>9G@er*^k$$#P6Y^tfw1p!lyr+k2+t52Jf=q43nkBY#WiScLiLssi55(068hmp^
zDfR;EAxsDUy<PR)FEjkw@Ii@>t}Bg)w?H>A>rCzDIneDfHgJgrUO-Tl)2zmtDZL+_
zHvbVifx7rS;}qNYA`VlX(+0|41jN1p(S(8>x{n6Ijzaon*O8k4ZY~5K9-iKN@CqrC
zx8J;oiI-kdy4E!c!b|Y^-rf?L)8B0ra^)3s(F~k3>PbKSv0XV(_N*>w&3xoW=4mKh
zztVuUT4E2+Y#&x5a^9B^Pq}%`F;9&F;<ghSz9e5E?0iNQc4i#^K+ZJuglLhQaNNfv
zH0bx*kDV!xY3&bcHIcd4I!Q@c9Eh8CPLY*ND{Qqi9jEQ>MitaC808$HtGyz<YAj!T
zTYI|$m5QIwR)g75Qd6~QB}Uh?zs6_({$ibeMOCQfz~)u!$i-S~a3(FClc1w?dd$-v
z)Hr#vl+tWhC(PvkiwYY&dYS&)91_1f8>|LKYp%W9%X;eSs35fOTvM6QkYp<2eZdrm
zy2d0yHoY#*NntJ6Sdq`Ji7_zw{cbPWIeVw&NAz+|lZ`0_;9C9>yVczh3QNEC6aY@;
zm~y@ru&Uq)oTOa&=rvvSv{N_N%h-g3{b)n}<x><E0~?WdS}FB;sivm3y0*smusO@J
zdVo})F&Aj`_?kCdmDr8mUUMbrrKKo;bD`2kkMV>H=S3_*+hVh8`Rk{XrLZ#Id14yH
z6;hTpT>t1l;+#EQo5g7hI@M{_fbaFMW^O=V27z+)(Vn+;fWym87^r_?FjQZbi;2Hm
zir~CxLiV4KR3;n!_v0%qrY+d(&JFJgld`XL-BEw_DN@+u{wH;^N848{Nj7-bN#$#n
zd>kAGk&HiO@Kv@zjSVI4@mN?v(_ETE;%;9RgQ1!GtT8k@X7U_C6BKy3JFSaRSMzhY
z)XPdlX0Z5>(*D4k#YLWA$Jeh5!kq$3J~SrquPU~>8#@Y|VJBDEyP;1H`)Hz8W1C|y
zBBxBfKP_cP`OB5He+CSeRGM@Q5V$@84qojr$!|-G>P-})TViw0K$OMAom`E_GSY!x
zq-;$cFt8%U4H1*We|5~?9Dgx=*4B8D&p)+T)2nEL62*4y?cx>Ll^9MbQ-w3}{(T;2
zB$T6Xqs{q9j0iO=22I&L&>j7J4DVgFZDQf9xBlmTF;%<diqYKouOm|C2JGV|3=BSa
zsJ|~6E~FiGGI1gkDBafEWA^HC)X!+u4f0FoLZ%eZ5tOC35FQY1k-D&PUudnvBWbZq
z-bVBqiXaYQPGF0yxI9>$8>p99Y|?hw#9Qz78y+P3TQ;xuSJ)Gq8YJbROYHf3=^z*x
zx2Cy{L*@SUIkuz95|P{6P}7FqM@_ZZtPR4?P+kUjc=L0%p^(z4H5Y9%u`bPy-Cm?a
z)@BMyz!3VNa}<e9lWqqse(b$ekuIc!NFBA1$RHG7;*Ss1o^eT$`S%0Khh9}|0ZuTB
zog7F?#L$L1|6@6X*)s)<NVcs5Y;}(OXM?=pzWLg*_XREA1+i7iM*gl=A`KGbB1jmq
z2*P9O&&l2#(H%3~q}`p#9<J#{i`Sc|AEWT^*UeEiQp%Hi#$4am4p(VT)r2cts3R`B
zEI#|#t4o;32hNm~-U}IJ&%*K&lv}-PdBM`mNuDf9#|Yp<`S)n^!Q}f;qaV>v>EGAQ
zUz%mc?{)o%OSCv>%ylg%%=$F}N+1EcMpj^@-#h;%H0pbsPOzoA#{T**7eN0qO#ksy
zq`-94u{puI1--0#L~dUDKPH)+8~;zO+nK#{u=q}YXL1}o4YKLPWA!iOdAs3yu^*<;
zRYX%l58dii;_#|lsMGEf<`Gv>uDzXx=<;MKetjE$%MqDg1qq>o4dz_GH7&zx=!CAn
zxM=(~o`s+E^75;g{-7K`si*>XT%zT0lO$Z9^k)jnIX~}u3HR=F55r*npVL@CYP8$D
zL?MliNqLyc5~gl=|JdkvGW;hEK_QN|GWEpb{knP3yOELTo_XEGlaF5xlFHk40HKE&
zuM3V-#7s9XIVUH+a4-Quc6CSj8Ll=C=OS{y#tN|}i-LC>pF6oUlNOaYk=c~y{Srnp
z+h4|T56OL16D+hLv3k<EgD}EfCYnqsV(u_0vC<5UdTmVpd67PAq*WI%G-EYD;{TTQ
z<27$)uar`JsRHm?*AXt@@#x(WlxL5F4xjRCt(w`)Rq7d{?8k=goRK&>shWM}-&kc^
z)KG8!9AqWE;bdn;B>GsE+#e;8wU1zmPd=-2MrGa$Gs3^M3$p#W`4!xNXHDfBx;&WP
z^Y78*n1*FoHg~Gnr}yfGcBXgW5toX}ogkG;lSJ*w{fVgM*<K89Adtf^#JxoL816%!
z#zARrjb{Nn!lUQR<zeO@c`U|QdOo!X+z;PI^^<ffNAyII(8GSTpspRxVZw7NU%#$Y
zIW)39q$&9^met@~^EnNt&l2ZxMr#@#D1@f$zj^^$4JYkuA2GRky7X~>4x+UT%G4;P
zN)EBmZ~nd~P^m^0poy9<r&gxB4xxG^B6)7&pCpIpeZWE*2v813er044j(u1FL^vh?
zouFp-nDTV+B8gJ^*3b$3#Qvm>?UUh}oY7I?H0yp9)5T}_jqu*W;d3Aw1(Mf-2g)<r
zCzorO9N%;D7^eg->4!-)8d1_9H=Tn7io;w`AA$yR+ii@sZj5ad+@3F=2cmoW28U`*
zF)&!J2HH$2B?o*^g#Y5kk^3yYCl=n2nA5e(8)efl<Gl-8X&1MBC}bJf<qJbaQt58&
zY#w=}^!)zVA@COKwHFE+sHuQq$y71>m3(^)(HJ-TF|`^#-usuiX&GPp4rwB1eK2=E
zBNw$Go9_t6w@+_6-|TiO@$k1|Ay~96qg{y)0ucpMGQ{CL3#BPoRe;;}{{g)~LchKb
z&v&Bd;E&%O(&_W<>4twuYJi~L;n(B`iTj9wJhnQ<Do|;Y+A?*qa#nG0#d;cmED?a5
z#d9Fp83zU~DJ@2_hfyBDT$f$&BAsflB(KqH0uYs}F@uW%t#p!WrGIe`jfne3fxqtA
zMm+!cIXcmQ8$L)_yZ@sGAhq=B(r<h2BT2cjK*vmF?&Q`C&I6F$tx4FLZV-4pg%3`g
z|K-=u;p3Onm}Z?Q;$Br-0ISlt3S6el)Lj7SnC9a8pj0qw$yor&J|1r6fBW-y1j=$S
zGt~=i+F{O#iI<(^Zv%e2;@u?BDNr=vQp?QH0VG|Qvq(gHo%Iy_Q&?}a_Hj9!=q!@v
z6BKt5OIV|{=I^y2^mtJO83-yqlO$jXqo;afSWMq6Gd}P~|E(A>wsJIdP)ZEe2=c#A
zN9W<^4`0L2AC3ptQ|<nb(Ey^)Rp_%X!T`;Ai&+6g1|aXfez6laD0TaNE`mX_jV^$G
z|Ic4OhYz1m5`ah~mRE_@KnjgQomH_yw#|(t1}q}KM4<^HM<CF3gPK^&|Hr@lKzG4(
zr2EQ<lU6^5BC6B+y{zOJ;i{sYXiGxJwCn`g=%ZZdW&@BsSxW>UanQGt;O$aUj5;xT
z#l1ZqMMm(*-TQc$07gQBu>hj`$bbV28#5jHe`W}DK<p-5T}4)*0Oa%WdHC()aroua
zNp)M-?*Gtd4=nQ*Oe>^aB=GZ6-YWp{z(|va>PzLjxu0}<-@e{^QZf9H@c-jyXdov%
zZz?Ly($}Ru5#4i$XJ#wHg!b=<Un9O=gy|+>BQjHbhd*huwi^E1fBKFXEcmdPYqbhf
zn9ZVAVi%cK`1|CsJ^-cNVog*|R$vPt)~sg%4!cXvfHVzc8FFDo6P8_UX<?AjS}j=%
zFqYxtJ28IYSPmd~Ca)ntD4s`U!<c7SajBtBG|P#XmIe%U{)!Ht!8AlS+2IDgD{;i)
zcWI031+W~QoQGdOpM+mN)-{m6`#*%qX_^<N4{Z{W`z2BVf!D~^j8Lf=n`l~vPo)wm
zB_Q;}yMr;Z?!uJ8#ZiCx1psoE`c%*$X#=Ipq4az3t6=I^&H)zBd?gx*1}rZSL`+zd
z_0_Pwxe@;9$Cq>iA)VGn*4lxnL~pCiN_=fHwkES#>l!ML`f*_zXwd*<X#m7T&uA0R
z(25y)4!}{&e<fc1Tu6rwIFtZ1w2hR{MgRmjrlNs4YUVmz0wi!x_w_X=A{=lCvIfF+
zL9)UJ8VHj1^#Mrj{*ONJU}@GOLd+<u=q!NX1<)ksDPxZeu>dG-3R4UgO(1#Vbh=KC
z^hN%FF=H<O$G^W%bE=`WW+L?HFLb9fAjWat0T1g_s@yFi^p=B;JJa=WxVstNyx?ri
z!dyA+2meFXV_XL-=B`Die_!9429l|>6ecXO;}&;RS3#tQnR^y2(pa$TXqzUk9_4xF
z->wv<G#IZhI(kPd9T7kfvxLn{3^f7<q(=HpJ6X;B3NrPw!G!_nE`B+=7zB{o{U3wc
zN9+JI!210a)&XAF@}-V+L_F(|)(0TWQy4Cs=g1f=ceWP_oi>|QI7kQo91Tgonk8aW
zVPed2{cuOA5E%U>(zjn;htEf6$!s+QAksG`ZP_t=t>qC*!cGj_)ut?3A8K*vdC)+=
zyFCeS_qW3S&Uzu4lcXL2g@qJI?=clfGzSU5JQYA`0J1~?LSeiyAsk7x5@#7D`1C!}
zWF?xgc>gKRT`SMW2;vzNZDNuublK$92`Gta-fxmg%vjPCfJpUdh)fVSoE#Dxn9Wny
zbbiF}vcdi6g>m8~+;;ctr+yPw?f#D%fLOl=!<?@mSq;RRYy=cE<4b>=Ou808@LkS<
zM95EcDw(5wn*9$YK;&<hakFbCn&OI=x`3y7KIZZga~<#e=z>=Fw0xnFQ~-qOZGlDg
zPlfGDcg5so%~y6#UhHm$?_X_?if%()>?g@*ang4&4>=+CgA4kB3N!#&HUJT(!dGGs
ze`J$+C%A>_$vq!dyD;w(KxuPR{7#)9;jYW}EqGl6Fk(J0O6^@7CL11(X1LaFtL?{9
z(-;$0?fwr7Ac<*d#ZFoMQm!XO1|4POnOM?zjCsWa3#;kWz$dk%qQXiuQHCqeD(Lwo
zNI~kkFUIR{`b|x%Zg1$|U}t;?+a+IExlWRNq)mVkK>FH~`o)z(TE)src)5=Y#YUzt
zah5FBC0#STu}%?k_o|ijn6M?)OrJE?0Az^(1m{4Cj|GPz{#yeR``&=Fu-XT^v*R5Y
zkUnt>9ZVS=zrj$S$3Cx|(j5X2@BWXPO`aH@0uOwb7=(1_PCvKF17pRB|3x#RHEETm
zD>02_n`1KX44pc+C*mD{iY2e>)UE)4H<zMuWr(u(c$868p3}Haf4lrkjYG0R>M>Yt
zM)%p%VzxHd!>he%@_*EpUrpon%8N#_zP=Xt0w?^pFKlsO(UTB|Ob;cJjsXl?a|4iN
z2as8ry|q78G?PJ~!p<~p)8-`m^mVv~13YGW74sB7pVc@u7D4=SUyd)rFCUMpPIT}7
z56z%GMkv4OR3&Lt${$c;go$w}=~3PnErX?FZYkFj8D{#uG%0mWYu%hzR;!v9K*oVb
z?r$247v>y0p@Gwy&`_jy%V45{Xk3c$H4Vgqhm<?m*$A)prvYZHyZF!)E8hwGO*k}I
zZUdCxs_hvqgSMRokXeFhl>f5<$PxjFq%xUlVb7|ibUBKmunLum8$%cpfdo0iBXEc_
zyr%Vd8iNOB`u!2$Q#7}-LOu{gVEyvp$R(S1|Az$-4SAjfTXbt6<F0GFFC=`H&^3AH
z1`r!oY@)b4g18z8I<2GRD)TU$uAQ}!ng}7<O9tbzqyUJWgPfzjTfYY&8LUe{20h-q
z*reo%JDcl%qEPMLs|jD0KHe$xm6ZUEM9f`$pl_8j92eojQQIIvA`+kjAQg?oUGNgQ
z9|e;JAj=FO9yrt(uD6JVb~P=g#{AWLawY>NDmW>bL0BVo{62%W<OPZKCQ+=^O#t%g
zDE#u?KL_I7|KXWok|q+hEUkrT?SnN2CylyD*~a->1E*30=`uR69r;bjPg%_jGxIbY
z&1ghhB%hX(u06HkfSzSod@M<)5AoBMlqS1ei|xAvTiE^<-&ORLOqKPGNraz0tcY^o
zzuqAY<U!NJL;%=WL)sLWw^r$2)kGyuc_+xi1C6vbRM@kaz#4!oDS#9<*gh@8lNJY@
z<-N)AD0&J$4UX;S%~=A5aszaw&DfuGveslP(Hp=8kyya9ASZ?+xr$;GRv&=q`#-Ga
zLHw_B-UH9PQ|B6dM2oOK4h=?{avcdic1TZQSNc{UA*QWJoNj&Gau-y5tw19F`m_%V
zwtD`&+Zd}Fj!MStfu7YG(m0gqrtgMBy<ch?2*RO%_jWhD+`Aj|m8$`a_)#Leppn24
zk6c{PO5T4w3e!#GKHDH43IM(U&zespB{$8hO;~^&B5Vf<m*5~FOjt#_Zn1TUxH_as
z#MO3waTU(a&cp8R7X4BzL&ryg4NWJ%WAqdb_2tBLzCl7+Jvtzw&9%j`kk}Wof0rPG
zoL6cCI2(}|PwYS2p7|gl`9K^EMDG898B3cDEW>BtO=-rFpjOM=J-qhJHeMTD(^VdC
zryZjKFfv4dr~sb_kiv+)S>$sQ0y;h5V--%7^Q-80B^Q{b*%$zkH6ja`rpVE@q+Frt
zSuKzY1^C0heZ3tHwkIRl{QVV4ev{Reu(q;F0vjS0zkEFj>uc*_XL~d3?reqijWP@q
z<1hA>)i^|WQ(bQWl8N!`4-#I)bnYD+@eHP+v-9(CbbKC;k59wP7kgo{xe;*lTJeeX
zNpeDxB#}NO0*FX@w}>O@-F@2RK%0V`j;rKfvE~R{k=A}7q2ch_&mWG$FHSN=x&PxJ
z0;$xcnR@~cg|r$F3LCqU0JZjEnX}a*d^3|~+@%T2lj3UtVlA4U_L0VIh-tIa3fL4<
zuQ8+8<cJnPYV<1lPy+&O9>n5v!gkBPWzb7nM+H1k^3B0CygJwlJ4oMtU!NJA-B`Z}
zMmayf496$u0a2LP3tL;80c&<|Z#!jNsCC!fFKSV+Kfa|hq3wNRcgKA#f=8;C07SK2
z+|MCuswV=gcRqeP3ZK3lhx7A`u(!Jt4)(Xg)^t*&g<!M9O}MzYBCUfN3F7a|8zPvg
zXA@TbE@>wE%Xi2qxvxr<C>8^dl<n~YyCci*tbzDWbh-aycdIm62!r;P6Mn1RA#P1Z
z!f<PTj+!Z@17xa#DtJ(1kzvL^YbLP{0GNsBwvh{X0MxG?sRM{gODIfA(r;Z+L|{?=
zs^Dc#oR@%=0R(^fr`NOQ^5ff`u#faGleI)k(FQ0%!*!JK(KmHaQJ8S;z85|_#p_ZF
zBw~V+->gXr<+0~aP9XH*6h9M6&Y1l0-7AXZlC(W(mbBC`z^fX7WCAS*fOvOskIc;Z
z*PlLylhd<sd3l+r2JqP5+YbA?TjbLaQx&w0AwW>1j{r0PFwrTiQ7~=L1W;o{v?wvf
z++Dn1O7oU%SW4#(6P6Q&CHH?!*4Ojq)&On&1(kz&dE=H2bk`KtSAUF*DKr$%G$W9j
zY*M*W(iYS61VvT1R?WQDts{<2%pi&(a>^M#gh%2;ETc_kB!ZZOh&8~~JWu>6$>Gg2
zWx$fZcT8bIhgiM_AX3?%|L!H_6+@n@^ij-TnwF>O98d%llS&TBqxG>N1~5n7N#J56
z6VMayoSdGAFJF)Xztm;7w<ckG3m0BZ!p6o%*dX9jWjxD-0hb0K%LX8t0ht9=bA;gr
zIH<ut|N4<^shUB-aX8(agzfFk0G~ik%Mp(r7h!*%rCd4`Z{{eNgnn5?MHb9nBs0<>
zOO3)dCytHyJDtQ&Qg;a;?6X)Q9|)VUx?#My|AQ_JT2nVGCZ=O->V<S)UQDDVOHbR-
zOw~GbEwfE^84$2$ucBORG?|>#yUesJ{Z(VlP*aY(<~QN?S-X(>ZP0@NM9qYkmv8K!
zK^Qr>S!imi5&B&vO!Tx5O{W@wFcS^oKmWsPIyqkT2^xPP%}Me`$K|WTe9hl{jy|q;
z{4J;|V-nzvAbfIso^JWX9zH!iD?*FmTnB(a2oz^K>WA~4vh0qyC#C_&G69HT{??q}
z0SGjT<C8OTz<oXP@5I1j+gMu*d;8mbflgd_az}P4A=Nd6B!Makk<@oiL6_N;ah_-u
zUfXQFFvcut;tE|!{8;X6UEk-Ua{>>5h<xP!kAMB+ceK&OfnL=Z6bGzDUI|0h(z7*%
zb#gF?O~2r<=GMF+^Obr|8H=5drx8RszEj#WU)3zbeARdk+qTWu(yeR0TY#GZ5c__|
zd=}S{HVbK!R|kv}ux2{pT`~!+uZDm5!z-75Lq7_TdDrtuON0?--CGSs+JW{D^YPcO
zr?kfTQmfT)d~(|9%I0JvOgGoVbZe8wfe(cNQwn;?9&8#`wKM=(QUDoa=mBXEZT0!f
zarp4*$h|jOugDh%J0y{>Aw77!Fi<u}DyMdYRoU(89(q2sG3k9UsAxv0nh5m%&^s3C
z+yNjTkHXLIGl0nbAJ9PbCp(P|Bh~=YlRku)moo7b%s5J!`Zvuyv(r7Zb}Rk6lDzp*
zo3Mm|c1%0!2f_dpgni$f`w&nZ@_PskZP;!Kwn&VgOLk0jQh~WF$^{IA5GZ3$sIy?7
zuY)aV-d%N*4Zi>5Pv0-b{VK2)oSt3KKYaMG;YvDZmG>eCm~3utgq@uXAo3hq$;LYN
zGoOC<J`F&Y2tdUAWO!t;E;K*E;=m?`_VL?qpD7nrT#;4Yjqt#&ZK%X+e2~cl3>*5Z
zYO{SSB(Ru+zK7qJV~I?+Q+_o%CFA`cRS9ryC4BlKQCJy3^!*>!ywfp3c@n;(6<~jM
zoYrQ~dQR;wbN2y+n4*e8N(|B@bF}``&iGV=rC&jAb}Uczc-n`qvoGq(OO~knrvX<_
zynuq%*zjA?UnkpcP5ZD~RmLlxNQCdc+TRTC4!5iOBK3vll&+psoQE7hA;k4qtppDw
z@)qxluLT{C-!A|jCl}!?f=Az87at6ntkze<i^G@zQq>1^g@(Ppz8;{h&^Xk(Yyh&v
z0Ad$vG7m>7`3fd4(n2o6*Q3+$<?C_fK95|}=43rgr<-AGYeLz6MJ*>SK&6kTMQF0|
zrp=MW+E{P2U}+0*$uM|Nb}q2GR^3IN%IA?btdefi`_ewnfzX}kr3p*!|M=$B9(5y|
zczC-OLVXW_bj>}bI$&+yS)=HJgzg9bohekbqk||+7%Qie$udICbXCw^eUWn?gMJUO
z)sro%@M#x!j=LI@Gd8=9tya;YjfuR{^pZA9EvI`>Qa|6{-VE<vZig2;{`n6py;B<)
zdpd>@nKA%Gn+EiHP5VVH*uqD_{*=?>^Kf={$$>7UmX>Qp6bUf{@_#v%{O;aVMP*4o
z9PSeS!LmU4w@_Z)L?|HA3w%rP@YzRUSq-EHASefi8ys)2oyrFM^yw?z>}Q!1p35e|
zVwy}g!q(PC*xKIA8SJ!#g+lUOOH}xc#bjSXv)oymHUJj(Vm-SdA+d?QVr2W|L^mcZ
z-2d^z>w~bj%{R^oGttQr=|MtdrgZW#L@wn!Wi#9KqHYM=;vCqhB+Kw!#;HwYa{`FW
zwe7z>_c5e>q$nf>x}sHB@Q}6IrxD5Wuw{yOd%#1#pWd;Nbj5d$_&D63h9BSVh0TrG
zZg#ve*C{~2;z;zU7Mk^%1TeF4>7A%iA!PUL^n%x<10aPfQ3b4^C`?(K(@E!mAz!$|
z8V?R8l79qdF#rnPu-MLl&~|_B=Rj-(RY!7*o8#!{B)tD{6fQ0=DLP|ox<QNU=;(~j
ze;`~}+lXyFtn#jf!<W19{txE#X@f|>lsE=O>H@>JD!SFdwOMQ+rL}B0*<j4=V{eUJ
zOZ+9={z}rEKH(st0TA5(@ptbI$={=yWCsvpTg8P@Dp_KO{>C09V4=%-0AhUtnqg{2
z*!kT_*DjzVl4%tLKuUemJXY=r7e)VTmt3Xy^8|S&tP&KnpF-NOVY_L{ldzGYDQ82-
zJ+w5p^yc=tJZJ;o!s{1X;rH+M?R0j&dw?<c(hLQ#Ur$ai$$^fAu7$tu!q*VZ0D${=
zwzoC|tO#R1<Rc+J2`6=2_RrD+h?qEV=;-UwSvWpE3l|p`nb*b(Zs2HxgAS=oko?dH
z*v0z6f<m16bh<%~INESgCHJCD#xA~e4Z0(uO8r!qHkpmB+$m=PWOIEjygA$rzkB;4
zo37M*#BkBKWSUV<+H%i!eI8=kk^1bN+=j`PCarNfs#5>7Mx>m^C5HLoyUENm03ao^
zcYHifYW6-2#51XBlbe?;QTIXCj;2A)?;*gWwHce63}v>b8{zH27MZZj2Iw9vG3%>O
z2;(*E+`!edma%sw+k+GnnvG@fv|s5WE4f~Dc=MnvLV`CpH>t~G+ZwL<X_Z(?0HJKS
zI4ypC9Zt`Xq68@qF2gl0Z;JCLsR|IPi1PA|HrMK@mIZ`pC8SM&_5w+b{2(>k#2u^^
zUH@IRWdQ_fD&D@>4d1-l?*K@W))jyhVY^8qVfIv$)<x<i24nI+6$~*+!c07Cw-+YJ
zRcNOOm-oVUYmVunT?=ICd!EFuR@4O}tzlGsHl{7^M;@=3_<4N1BCSs<F;fBc<b#Rz
zIBnpkzWzy_hkKjh^}$wnxyR;A`e;XkUDtij<|(V{`~3CP+!=2xOq7t0b_z@;>y$|t
z7KE{P@5p^5&_pP#J%$0-T7Ry;FCBouq{ZODcZnm~3fcvJPaiGfIf*}p76ZqbZ;&SP
zsGk|7Iq9nfkeB;g;qAe0INaa%0YsU|TxojXz7Ju5#13O9sm5H(nDck$jurrtNhb5x
zWX%u&v5s?NNlVjK^VuYgL@{<f*EOGn^_i4oFM%SlK8=IQ8BfZPPWR#YF04jZ0D4!0
z>zdHYGHCDJ;Z}J4Vw>;(=m8M!S_C+6FfjwP(13A>Pv#dNHCa}G`}EmAr`6qe@z}j{
zr!_!eGKm1fouSt)ZMF6!0;c#v<f1D#P0FJ(f%|QIIRGR%VQ<3e>3K>W0RZ{<@hHWL
z+XbT+QC|P$^7a-P%5H6Lgx%dKop4PIZwy1XWyZX7i#6hz6yQYv>BHA_4g~jqym_$`
zwl_KA#@fu&k5<Bu4BT^oCy80x1XY+RKZlH6+L;+F@_?<sqUuA4uXMns4*(?9h;vto
z1`ykaj?+7`L>vya05TL*pfwL~nuiV!x`3rBO7mcTOaADn?r56-?(JT9bFf8W>-NL`
z@R9*{@F4!s??EW{nXChW7g`-FA$<Lu4+;*N#~e^VSD<-dEC3P<ULBLQ8k;s-i5UyR
z<1&HBQUD1295~N`6Xr7MNb`<Nok)G)e(a59v)o`77bUXxBK(#2VBS>vdurRN`8Bm)
z1BwSOwdY#et4MgV0j&n|<GaJ~=3s|T9v1*26297XzKN)w7DR&)+OIp2OVH>ug)zBv
zr=$&LiqQ!j(|BJ~J~6|r%)6Rg_TZm29ch6gG5?O~PN-O3IqL~2HS?PIF>0nOsms+U
zI$#lvVZ}j0AEaTT{lho=l!5m?K4U;Yw+r88p>fJXj<aO~%io#6{8!v#@MU0J>ua+`
zl-2wmFliAet*;Me{=E+xK4hKG7C^AE02qj%f|Mrra>xQb1$dmCh06=X!e)}&MUkW_
zZEH5sOuQJ&X`|~l*H**+-WFfG85w(GFbY)kVorCns>NPlNs9bXwg?;OuDcRNNh|FY
zEK`Hq%}w}xd=`GfIgs~9VY0p!eti2P(ET5hu0<HM0uZjxWZg9yNZBoUBl;>LbDsx5
zG+<=SAk#;5nF1$7vUUK(t4}lJDtM)XdwEPul?<Ty-8g=A?z97ZRqZIp7kNG)3wWAu
zQh96kQZK-?tCy1n*WIm2_~Fg&o!x)Ve7yAI%)$V1{=+)aXL%oGp?!ei7uVvBsH6rU
z_#OUF?0dN_@wqzLpCy0*IOrec$GJ2&0IrbF1I}|gxhfnda@gu(_H<k34hntZpX#@r
z-D%j2x1o7!a!B2;uVd5k5evRn#P$Iih?uYrwl~AKulK_Xb^iyMXbLolOj0>}HC;O<
z9WCK28-30HVf_=He?gmK3Z{qSH6|N#>Hp~Z0p<me%&5ymhnij%Kse>U&IX);Mb~FR
zq0pw(!<tD?+I3B420)mp^N%(Yz`Mhp@aDx<*ozlP+4hFOz-kyZflazJq>&(eSA3fD
zYyrqb>l=JnkQJ4zk=D%9WA?0=w4l{M@FIYUdAH{2=c2yz>;MD{UYo3}REO_;(aa@<
z<+>luVYmV=)))6(DT8zf+grF&b6lMHZ5GPVW*b|#1`zl@5P`La1Cka02R2m7t&{|R
zW}?>0*0H(kvkD@Or(}a7ndY9?z^J2nNM~bY5h+73k*SVaU@Cw^4lYWrE77*(%v;6m
zRjV`iFCL1FL-OcTXgC=~nErG@7@c^iEL{ep6v<`;pVSYPyfdF8;VMh5rflZ--@FJ1
zyOXemH0Vlu7`wJ=<;E~&?_F3HaQGM3MN@x<I%1p}xS<dsx#ASJ;~&x-hFp|*4sC?}
zEHN$0P#>Sr^JfDf6lQyMMScxoGT!8#UtAD?o>Y4D001BWNkl<ZTwKV(K$}}cW{(dV
zVZ(Oa5jhrQ%!N%j8^U3|<{0jXh2lwUR_Ys3O)4@5WHf-_{tv|cr*kdYu%GG#v$7XP
z^=Tc6w=3|dn}zxrnrwIrAW1({8c62F0&ZpU!1UY@G>s+ow{rf(YN;wL*43g^J2j>)
zZA;aZOgWCJ>~H^lAG&MSKa^;w0Kc}z{>z`<l3BBJBj+rOaAesb<}CdNc(92Y+9u}?
z5<tN3_QTIuxRG@|1QcGE`{YSoUbIDMBFI>wvssTM#ljYQ@&H28FWr9(vlY}?mcKHy
z;J;);;G!8g&`~}<sRZikfI%BP*!PT<uc|wc32SqcPq5zhGh`yTZT)y3K9Ik?=P0ay
z`Fq^|!LjZgrjp$Z#tfq(acWviqENipNF-uqLg0BT=g(urR8H#C<}sD&w`8FFh6h@y
zTs%i&&1$wk<vKHUR(&7VY^6uwk69ETIs1_`IpR*4039GzbCmn4_J^Wd4aAut^W|6n
z%RhZX`3&b_xOcHOZ5^5p5F(K=g8N(EQ6gqS@pF)$Vogq?59%$Qu8#$e{33%EnX`~v
zE1I?zg^u&i&65WZn5)F!!O}*lqmsI>cE*>lr{U@v*UmcP;=EKGcn_KfCtUOs&y8(X
zFSgrgA+`3T{;vR#4@cpzzkUh-?H|AAi*_Q9>S!>Lj5;N{);{RI6EbminU)529uH@S
z^rZ1R<1YO%>D|~|-+do_07CUpce>2JkM`buA0_BzABSf4V(t^r^k@JEG!(Xr&{pYt
zs!Jw3PGX-165+aYo^BoYe{8IVfBoazvCB0w@*=lk@vawWI7aL6J0ORBb)0tw1~KVL
zAPD|Dk56KD;LyZpK|!4B*c*2tRL(RZcU<_%0*FWyh@@hMm5df5Q_+7l<3X8^pO0@v
zLcRH{^w5bJS1kcRa0{9~7veeThJc|@0~urP@+2N<Q=TD0?Wf<4!oU6eDg5t${;_bF
zYvzRE;naDea~6|}Q{WoJ2_~Y{O#Ri#4IQVg$50F4k=b?~2Ym8e9%<%e=`8EXE)L2a
zg&%v&R|TVvjR~w-;Pd1b4Y=w2y!Bnk)xbstD-sd*nam8Gs^fL81IDYHleMrrorHh<
z-67W`S_t*CtMN0V<sFf?X1swj@l+>miGv{G-AH=9qCsBI3Yeo+f_tXS%{bQ+&B)p3
z5#Ni0(&tR{!uNrryW^9_sxDs4Yf78GS^GgAE~3=@$aE`ycH5VqB!EEUz{znWQscFh
z7cfs?T;uA#2{Cnj{(_UM%EW||sUrO*YFd+3+A&<B;7FbirTacoB|rm#>e^vavA!{j
z$TIud0vKDa_Wp05j>G@=w@=|uKfI11j;f@&Pea$CH9O%2uEeXHxB@C7g_oKE&#&Q|
zZcZ+gBu&Sd)^z`5y^O6-0Hid5X@;o)RFf!1R^@iOej;8<-S<5qg0;BZK!>IRa01A>
ztm&8DF&ezQ`I1)=b@lcT0Tq1yBlEi$=n&_V*RZCRXCAV`p6*e9`Mj>nh$*2nGz<I<
zQx;6sA3q(F6C3G;_IHtbMKOnxb@0}X1J38+>*g({SAGNE%k^JIbk#5dei#Y&y)8q3
z==Yx-fKV!u7@{kVv&hxs!Y(IVCKQYX?;^Xd;0G^t(d!lIYc3Dt+lZG-TbD=oJH?tK
z@mh99&pXjrur;8u&-%&^wSRna5#E124r?oGVRs96zenIRjHw6<HO^gWLo>USuDz(I
z|4Leo*}6_6q$fX&+`^c&o%oU#Hne77{T#wcit`((j<Qt`0E7`~=Imc0WhHl3;kw#U
zd6pzII`JRL4p87JnndJUsh<|)h!A<fTVO?T_&jiM@cTFWVLH)SX!X0yOsz&RA}&hz
zXfTe7+aL(b*C41fTH^qu4hm*O1O2f;=m96!*r#B~ee9f|akj&ZL;Lu?pFbG@VGZJj
zv<?8skf}!qCjbK5F#rS+SaJEKgQ`PB_Vf{v!n_UV)rV8u$hR}usOQI;-~KzCK0^95
zwhcOjd36<j{_QC2<Hp5JgdiH>a^Cws41v;IN**jn()KilnpPmnjXdv|i25XX4HRI)
z#>!ID4m$ml;DMwObbU3VaWOzD+1FIoo31^Y*u=&!U@ImnYu3~>L0Q=!o<BmsV}ECp
z(zhd|TYqZr$lkEP-&cNU4|bkcHl?g@PXjsFn|3r=%h-qZa~=Z=Jpe556$#?m-k$b?
zMQxny)Q6vGJ*=)EtaxUMJjx4C20*~j03Lk52h&P3!y3Vbc?f{u@ZebRxtkeb2}Bmh
zbQAY!bo*ap@I#x<(m>ZOb?Qyw(aC#9-u;iCKZUKygd)k1@<E%2Aoz{Ba#k3m)d=W!
z&9Kwo{rRq}{hsDCR%97|YCC~Of4cUfyz+ZwT9z6}XZ+&*k^ZFr4g&})1CnZ`OmJI(
zAuaycBLh%Lv#Nl!&9*CM7|(o&DyAE&;fL3I;bkTFm0e?F*Oy&$eQU7qSq-EvF1scy
z4IsLoL-h~w0c7(&IzFW%1mC<nB$L?~bF^140EEn0bA<d4_47WSFFb&NIdIr5fP=SD
zAAo2lRt6c?ULYkPjMskp`~@}bqsCA?$2iIYKya84;k;Vf>>P#fq;s419OF>Wg$tEV
zW)E~=&I03s_QbY$#e|j9m1ysT$9kHAYksO}2BxqEkd83mTo~n<uJrsB{WDH;S#Mpl
zQa5DRGBbSFQB$r@$QhempEm!NfE@kTL|xfFSkRX5o<^tJg`jh=GYP-{=Af4$+IspV
zXK!zMzjgO#{-q`~+I?38kUqd06NF;H20oVKlT+eR_#j00#lcS4*~UE~!)k;FUU&~6
z0)8>3j{5+Hv2`vifXJrD#E8ktI{aj_3`sp={z5&+01$1uw45xOR@1QrMM-j!IprDE
zBC=W0hE9GV<0psm)@_`1hCfC^>Xz~A(`J*-{j<)hL3yG-MX;>U&2QM8d>6Pn7)e^d
zO}w6zD<V?i<n+M#U;!PLz+)#YW0jw+CSl5@?6U<YEn;i9Z>pZ$S0$h*6FZNC&s(JT
z)T#NzlpOFc9N(QWWP&q5m4lJCxQ;GiSn<N0u&N$KYpbc{xP?*>liIO#DYSHLC2YcH
zH`$=H?R@8j&kW1;G?wke^$|@#rHPTB)l5q@o-B-3a(Tgog=`bniEg*&5RbRxv-|Al
zUp}#b8?#z~eu%8v*`89+OkaC_v?ISrJb1XsAhNIkLJ1I~*@_ofSNpIMgOx61A<Fx3
zx*we&|5e;^9wI>fj0{6dS15}1m~kp57ZVJ|{1V+A6ps$`odfIfK%T!zhQ{MB_HLwy
zY{+uq)##VlXQ%I8f1nAToLz*=OJZHjyd(}GGFffrVx5EuR)ff7zn2|V_*yio<m9TE
z>6hKk3|nO>EO;MRo|ZtGN*xNG=SOQVT?aSnVsK4kQ%g(X4$Bv+t6GMUa*0wM(;5E|
zXHcU>d1)3E(u3`q>+B?_HBN`zGJxRR2bdT%5v*NA3Ly}rwnllcbprroY|?H=zEY`T
zw02=ZWQ-7%_GjQIESS7Md@Q4|QbJIxI>ioJji}adx=-ka?-M#Xy$F{V7m2jcLZ(}j
zu)DLBuF93>bo=;CzGvQ*Qvjha0CCKNE!Sl<kMqky0tgr&%uO7oYo#*&K7`7(_r8A3
z_Xj*A$&v9BQCKw-mo=m5@7~{eVUJOhGtD$zhG<x$4{W{wkqg}5Xf-nPl4o*o-=XyC
z&|p}rNsI=EL&-Gek8?<ZOx=kZ5^+iO(GgpAyw?9zV{n?eS)qd!ix@dn>8wYOAql)j
z_u6}w5%#_>CdybD0AzcU55nq<1m60|!b`bF<@d3Sux3{7GdF7{Y)x3u3J&(S+`CG=
zI=%fU3_l+uxC)c$I^8LBqJncU<uE@@Hz(oH1Rm)9C-wD>3G@PZ(_!Axi~Zp^+rj~e
zPKJ0FWUxSTbaGCI*E+WIy!!aBp~)H}5{Xnpi(oBDBX=>b$F2iv`{@}{;%CWg-ac7r
ze5jsT%MaD3pYy@I*@91JsoyKxH=c*;k66iuu3z5TnuO_u)ADf0?0f>976R`=sIhc~
z0E#vG{^Jpuf&@S`$czz0z49MF9R=J&f-Jx=N#h@^8|UZj2hpE*Zw`7h@s6P%SP`@u
z(0tKAWT5~A#FYCxstkU{-D>Nh>ucdxsiiWh7$&VWI!ia`!WuFIJgpe-zA<v%AwE~b
z=W?<tVzsP6TJ`w*-MVHiZ#vN1zgV|qQo{Pto7R4}3`V}sL<4G*TkJ@_McA89$(h<x
z+PfZ0X(;R_i<FkJmdTujD_{|Jx~|WK^v`r3P>f-ugX>5Y7y=L!t<7bv9h8S(<?GiI
z5}xo~5+h>y>+Ie#C+rW|B<q7KJoKFF(&Yix0K!Gf=({ig!grKk#rr#~J8_n!Q<k*=
zLgB#V^wKBD^E*_Y9H`OmtRyUJ!Wi2t9KyrKn<w|q*ft)k95xa*6|x(9nNM%quRfc*
zSNE*t`}(Krs+k^z5#2>!Y~Sy4EVXg=jj{HQ+;0Kqi4-RYIbAe6J)HwNuWKOluFLly
zzEb*l@DPH1C0S}~F8{njK?yrMo1_8V=8zz&L!Hn<=<bps3(33#obkPd0T4<}a)EHs
zas*7MVP~Mff!SYfeF$=22<2Y%Z1^<^w{Y%u@-}i8bQy|j!2v={`mnFUj^VZpWefuv
zQ)Y<C0z~i+5n8i+Zrk=OZQWJbr`YGa8oO5yv=FRs{2QZT&ntw@ItFOR*yq1}I3_KD
zOjvtJWs*N*`XXi6hjSBt`sEW<Ks+TT+bp6wO-ErapH4TZ{h?&4WBP-b9B3i80i#)I
z*}MO5?#fnli(bj;a=x>?!$#u|-6$e2?St11&mqQ6dSvA__XX5!Reir(e@IkI!ECms
zeJ9WJVC^(`W(jLbDK~>(*ANJekz_p6gQcmM4CJK0NAp5rvm4ELb!!rTcRby5GDD92
zen2b_F%E&}tlQ_g0uUr^XxV#|Zz@aXL*wlWROk!9s0SI8kziPlbVoVeQ;tl}^D!!D
zGq}Z6)_1DK+53?IxuF|?$RzCVZTr_E#FC=5Sb^8>b24X<`SAAFL(E4F1;URFAe08+
zip?Kvle~KXNfJW}HN**OzV?=+X036IRTKt1x!6#A`aG+fHIR@Idv@SH+wj<DV*o&C
zR0EV+-=sXwUtC|^&<4x*viQq$R-3&Cl(|2C8}l*>PfqZED@~k3pv3g`@Bi-5V~oRX
zRzc^soMPa8i~;{(u4U%7Iy!P_Nb(+<lM-l30D)kGl>Cs~B~R86DQtU~Hv*62({$em
zGYt;o9`iv|7P4^<X(4v4dpraE<NR6dhkDG<qnoghS_I5o4uF+5S(0TUeS8f>gF^>;
zR9w0z5z}>;7Ytk-hEs;qbJd<{%K}b}?S{#UC578%-@S{)F~&hTrp%bWKvFx47j`}5
zohxJd_GHTR1PP=uL>s%C+-Y9)ydwfp)&+`ATBZBOAx!mY&;8)*19eRZu|Azr&@lGp
zA_rOA;zokS``{DEU~zPOrn)*CfUpL%9`^UjY{q?4<@u+i19%1yf$4Cp%zH=ETU7IC
z03uBL<TOvp7;_3s8~I97`@M_U{U!;H>5dvuB#qs_ec$DVGwKsgYe&t4qBG=>;eE{9
zh&qQPyAf5)RRq@tpP$19J;Em<ceIK|7r(QKc_pk$Os#Beags%^qF5mDn2N|jPsIr2
z2uLa2art=6gdTBRe*ciAyyi2Vh;H+P7x689O6^6P`gP3Q+SSClUtastcj~_!EsWQ;
z4o#q~&-<?HK!5up*!6sH`0Rv2P-Q%0_V`er`<@SJ`S#tq;FNg`*7ND<MS!pyVJ7~!
zYY&S-%@Tr>@jf#AmxsG?t(D==p4rL+T?;CR?y>-V8~V-q?xO$*hy}CNWxCH}T(^0{
zkBd9cHP#*QSyj!qnO&u;ZpZa0O9af2AZ1{aWeKTX&k%#R&-=>HW6>CDe>Mt~rNumm
z%c&mrV<R1gTK6I&I&4P$V5L~gM8?R2+WtAKQGV9()y6+Y%^9K{p7+s%pNW425kxTM
z+~sG!HJs^hfm&+>Qa6$$o}D4muzSv<o6D{rU|+x5>-EEM<_4zgnEjt3;#ME$py8tc
zh}`D^|3}V+QCn6yLLI~<0aMiXQ7f@DeN|hD8U*b4tl_}4RSzeY?S}~z`!B1NvZ?wy
zcUMec6am~qW6bRH*Up;=V2|i5%s0|L+}|e!U6a-ljUJtAjfybK)S1jkd8K6lC|SE=
zI%*(tM>+pwPgCTAHJHkYUg{~@@;!dK{&F<lnDt8ZOG}^YZb0km>zo%c29%t2EYp?t
z1?>&^NRSWi?n2scyN(lpMC9mZJiyts%LE{`8IYMC+SvdQqIy+s@YhhE#S&(6gi^!m
z@z9?K2N2di_);iJe3ml&l#-jC*iv5ODPn?(eN=5!BLMP5<=GlC4>NeM)&dZL73TWt
zDp^Lb;c2pBB!oD$1Vn7eaW@L3Ci#iPQLe1KLCW`h8*tz9wU^omu=?-JqtWmza6jdJ
zGG*Zo7x=j-13)ZM5!91;WDE|Q-Qtae9oPQ0(m#8Qa!3RySC(ITsQo_uqj)z8Gqte@
zxjcPntd3)K2|K=_=e0g)<|?Vm*8n0ha;uM_YAL+WY}jX3tL=FU9(v*Cb%<=>R|F#X
zHwHkwb%D09XC<{s*{96UY+tF5YH;3j)GL=!-M5L*uJQ*55RSUaso4uSwp`2GEq0|u
z%^}_TWhm@P6uF8DXW>rK|9?4xJ)fm$NKp7MRPpVtjWDItrIz*dU+z>3Z?%k9PgK7n
z(3h*d_nEO<0Ase`E?h@avZlE{h9-T0>W|z+ta0A+r-q?5w6Ns!$XQA-{R8m0tmY`5
zDl#;M-6fX#KzGWkgRg}}X^7NA;<ERCq$90K6;+ms*5o5omzZ9Vp&GByI#T<ehpg^U
z??Vr#pF@7BOu!y^jcsDx3V_(A$Y(W}Z<_br+WK19-P!cj4>i6%FzgI97G`?#A;X9K
zJQ#oo6NEjnaCBLtW1l$UE@*RQoB<&VAl~G3nL0Owsy=-_rfi!yGa?_H?btz1py?#<
zn;uT;h0)rfWHML{qy)J!(NcPhC@<2_tfalGg(#6M*obH695y}1M<jF5r!{Juaqe%P
z^`TVq^)ZeR`7;-afAt9@of(g*OU&<T9g*~{g9akA(n>W#RC~4Rnq(k7cJ31?dSutN
zBfzOm(D^g<UnbKGS2TG}i=s?0eeISDJlCkz6-(}#N-gEQ=dnIC2Q7pmMio7+b-_FH
zBI{fZToz-r3%sUo)tQBQ0t*AK&1N6dLun!p3LtW;AdPTfVUHGxJq}PvGL`}J3w3^9
z+90a{vb{-%1bG<!cOG+#o~Bavg-sURKG&=6e~#m1Kp4-cW-VW5sN<e=O*UdGW1k4p
zo`5I9JV^J4WR^pJl|fmcYgt0RCHe$JEXdv9c)A+RqU;S32{BSL#qHx6$OwiYf1}Lx
z4gW5tRp}lJ+_8T3oXV$p;`e3V@K*{?SKgJh5>)%51?IB~k#12AuL<A;kZ~{ZcxwI6
zSFq}tWPzlA{pNK1e3=-R=W+9RnO-#BR2Sb5!==R2lS;&!7kRz`f&?ThfuwZtE5?H}
z-G$eSn6Y>tm<;fY4!=fv_^3gjLy)X#tyarLKgmZL!p0i1aU;Mcf@B{M_ieT6xVUkg
zQpXX3S$M>_o$Z%;FaROPIr%;+W(*Z8&g!u;UdO*Zgm=X+Elto_kaF-+wJUTOpUmek
zCv-Tj&_K2}!Y%>Ggu*K2GsM^R+}H3^%E<H8l^m6!N6{lN-DW*7)J4+Ix(DT5VkmJl
zSq%Ynl!K$V@1^)eXRCxn6Bw*;FaujS<i<m#b>jYLnKLSgI8(5(cz+8q*w_v|<Mk&#
zE5!I`|5aqb$;Xy^m(B{s_GEksK$weW03lGp{W07&gA@~m*0<a*Lrj+C3xX$gKSq2p
zjYWE+wNPT<7;mbt1T_5)-n04G_yVQ@0EzoY09Qf{1h9B~3P9rRC)C~wPJhQWoaj%e
zQA|A@^aFsz@OL^##e-7&ORoFvF+17K*sH!)tQUGA$NKo7>~%Q1K=uli&AX;Gu*5;&
z$O$O<(BH}`)1wm$UDK-UZXVc_bhwZ}_+cFC4+0<{m}nmf1S|rlQ{ovsin0-43gY7(
zL#P`ai0*MTvpAA;m29_aw*;858~~XzfY6O&25|bq@LUFKlnITUv_XaUm3yhs;EJ_p
z!YY#_J%Dbhj%pZT*U@L!vIRBzu6$GiECeE#oCzR(gzPbA7|k=T0$E#OGma>RT7378
zP$jUCnz50z_9tx;#3*plJ2gI|pG^7A$zwSfAp<b&b^2pDLgIL;KYFs&jf2Hnkv>XN
zP<d$kE84z9FZhh5)Q|B^e(BOrYa{@9Mn5xtS3*+sPQx|_OKz^i>KZd$3i;Lb)R?DL
z&x`<>*H{@*;qoFStR}EmeV}aKI5*Y@ObXv9@{DdGHFP)QvKm9*xsbvIpqEpu^C1&1
zJ_vxo_RXn7t}+70f!9<m0SW;K`@N(a&zM)2019o1==AIJ3s`}|1(2wL;KCSBKyc<%
zNl~&V`WbTC6V67od&>4<=()$jES`(RZE5O)#6X3faE1CQfhIsC-8i{I5*ss(At{rY
ztXR0H^mxl&x5tsc%KaO>peoG1<hESMTvS=S>y__JT0BwVwdn|3^7_p+=#WzY$pu+6
z(?XBGhH;&REgGK$VL-wjnzu5lXs9WiXy=sas-(77SQEey;K&Bo0x2WKP*>7(TwOr_
zaMiPWEd*<u>+49r&Q5I`HQ5Ik3Am(R);g2I&7qOOr&ul;z7ChKkht&9y#t6a3WRZL
zd;Fj?I7+UG(4Fs*G;DI_kF)tQfJi~D5@+&i2|R|i(8DnRQWJP&A<)@^$QM~7Na{{!
z^2L0VdZvF+e;56=+J(N&btF^m0!ZYFvRI}6s_Qh8!tQI#j=Xb<`Jo|1GY;N|HX?W4
zGimgM4lVz#>E$N+0BQhKe;)f8eNYJ%;=;=GsWF=J{Vs^}dqe#z7jnMdv`Yy#%`!jq
za>)6#>#Q#+R@p<<@}_zb&TPm$uMd6kl-Dn{sLW%z8(hq6bTeNpLtQ39#|!Mes_g*O
zLU&E#x(;vfkq==WB{&2TT4dtBxe1dAXUdg(LSU(r{h#=OXAQ718?uLGOT}$L-lVvv
z;)+T~8Z=Mk1d{ik_Wj-g1eymVO#n#Mu`@<OD<)Q<MH0FC0c7xo!L*S^ny_}*2Qv8a
zIdh*Ef3V7;fG3^yNUUz<HWb=!A_0O5jUs1^yifZl;#TjW0j-TI&NnoJ5SV&M8jJc^
ziQJC2_MDX-Xh7<|blrV%7FQ(f&indqa-|^*^)K;6!CvxFSfmyuP5N7E;C;eb3j0+|
zjJ5kXeI0sce@&kL;r67?6eY&oo;6JK@w8uFa$HvYJ0#V|t6jxB8hg!UYXYRFv6%c^
z-9GtN4H8JzyAXbGsTy)+!K}5vyA@4VYY{lKG*{W$T77m^NW~zd$~`22Q&{gB-x_(J
zpL+)ooB;q~S=G~$ca4}4YOCf0rw$E3<_^$~PsD4shjV@Ua@uvG!v~@Pqz@!)-8Emt
ztlYDsbr{LGW^3~LQ)}CEa&$%O(jhohzqJv@2p0~rP?HmxE-_sFv%}!a0*+(U_SqS)
z@aWn_mFc;PdP>|)bN$=yR>#g?m(RyFcB}VIfBdlNas8ONltT--nU6J-HIBfOzy$3_
zt(dgC=p`c($=;YWYIpo9rvKs7Q8+q2C9~G+!(EEDO6H>^NYw60b~NseJyzRC4gagu
z4?qQt#@x{|^Sl(>wCa($O||(j9dgL<MvLmUz6dazP_qPts3Q%y5=GUq9GD3aqMHft
zL_BD<)MK2+M*8vdF$0K742bYuj>6gy8$ui-+di$MKT*<S$bHPm*+9Ls;+6M+qz|md
z)G>Bx^!4A^pmU&wL@hCCI}AP6DN<?5_-g<)9qx+1Cn4K_y(AwL$1o*tjJXc1VvO%1
z&`EtMd0`ZfIQ~nb#v-9io5j}=+M-erV%=pXhE7C}ogdXkks+C)-s*kK<IksQY*@6-
zh1q4$(pSzOkz8C+v*2@(YCL9ba(ny{`csh@u{YU(b2^qGUOYy?jJ2imT?t>t!R(P@
z=<?7EB3l5#1yXdNui#nA$)sW=+zdZ@2#Fv15;X<3DWeJ1r^3u(Qls@)6I{pc<x07G
z(?Hk>i##$>tkguee-|2rwrR${JK!P8jCxR6IO(K;Cpmk}+epad134W45RbSu&7+uY
zHS>AJmbF;`s7<&o=lv~Xwa)}lYnsK__UBoM3akZmFUXt)y2P+hJNIJN5C#;Jqj~#7
zZ@Fke>6kfIuujt$)nRDiSZ3c^Y2L`I$s{iz;x3K&<5=SYQA3uByc=JR{B5+)To|H|
zwPxW+^zzzMgQ6)^-)%o_FhMFGZTpfuS%L@2N2n%K#+SmJ#nlx39+YD%=Gh{1O#~N4
zoPx2$xz`=`7)xm=$v%h5Y^{Xw;iJ_+YBvVLoE7UCsTSfK6c0mInpxFCP%WUR;_%6=
z7h&r2Y}3AX?hQaFZW{iN3w>{F5AhrV5N&EX_%w<$zwspmngA1b9hoL+3*L={ikVhT
zSWyEhqQpEVExi(n+vX2v@gPTOnErI)#(Mx{&?)Gs_=N)MNW;Av)m^Pd1yV2r@Y>-C
z?ObtenU~J3<!M_Mm@U$b0s2|S>1h;WfAjhp-xY>lbf3<d;H*X0M^Zf>W$Uvlfu)BY
zdjxz}X%bD3^4lpU?955>-*lD_001BWNkl<ZkC?y=k!4boT9~s=W<?16iSs5njF``~
z7-WlKa=e~(;EnN7*f6|g(XjP#FQEav2Y?)D6BYxAC)5mS9CoQ?01;zH#e`+~XRHWO
zVCi7yEbDk=*?R*JIL&qLBbl_Ma>d9IL^J3x9ewf`Gr$DTl7xLOl7^skdY()dzLe21
zGgX{wA3sGCmPutICalEZd(=eh@X}1X2=4<;?70>JKO1%!C%6_4=+3{{p|<T}<3=!a
z`=iEcEub9`Q{2XD&jK*YaH7p?vMJk7asP@s7)Kg!ypN@C?K69GGNh^Z^?dP3_3<Wv
zq4Gn|Glt~xXgS(G7hYX6QF!gq_~Lq^gOst-q8-{lDi@U^sxCKnJR|uLZ)aKCBVXe3
z9FYeQ0hqv9pRr3o0zn65l(=Qk@{;CPaVx}wf!#1<4Ipn`?FHoblA8jFznL>!TsH?t
z2>)Yp^Gp;*3S*M8^@+(!2xrG5Hy7TQGyPrw1oV;UD@%}qLVAICrjjwg^+}zW3<014
zdx2&e`tK@$>`dvhoT1N9w1j2|v<*D5CG9GX`4@GbQ)Y}cgj6_yaX@y)V}cTf#>?{^
zx3szuQu@g!pNAQ;_(aCsYG@fw0cwh4BygiN9QmUes@6y~ZCL}zfHnl&#k-ass(mpj
zF+&$lu1-1&GaZ=cs*pk_zUvvm60IU&<Wu|6pC>2jEA8i0Dsj&BjZ-~q%M(1jwIy>S
ze50mia}-v#D1dR|-+DZl$`~_Zuc-7o94^b_(jaB~S!y8r3?LiGqLAk^wQtln;ZGVs
ziuzr3FN0t@(C=xEu>*24eZ=U;Z11AX{QwBv1#wMTcNO(Z`*WYF+y^XufYH%`2LOcZ
zr6nUttR?;q06~ZzPN2#Mz_GKl8Mfshp*J&;*Q6#q6Q&+#%(bLr#uM$5l9si#Qd+Fc
zyB^<=SXX=A_nx6&al|F<9nOa&bWTpbAwZ9&%gZZHq1}J3uxn6OI&1NAo(~hP6&Xxo
z#C8oTMpEm#B}eaW6mw8of^lxm`ktvy)8NpQ3t4$QF=qiLNB}Mh0R2;?EeMK9kE9p3
zT>sc5Y|9q&839XcjF7zPA0No*|7f1n5nkm4SEQ-}qXIx)LIc_0#E=$1oYv#+=sC1n
zxsSlh^;zMmYsk_Y&3iK=#J~&p0w9nY*#t525~03{t4ieEiS))=)j;U=DA5;;TsAWQ
zh-8Y0!s-IZGy{k}hMbsPA>+mtvIY_NEdQ=|x|R5yqtWWlGGWu*1*pd-f76h&6kX6O
zIrp6B9w)N&tI>04eD0)WwsLjNssEET%Udfwi`=lcYRN7Hl|_f1OX;EZs`WUMrdL;A
z{qD1h1Y0FUPx+z#6whaEcMi_hOY7J^0|-ZIu`i&~P_4i1y;WOWO|UkM3;~iL1BBoV
zg9iu%cXyYBAi>>(4-5{0K?fZ|a0?n-6Fk5m!Cit41b6qBXYc(VzLReq)j?JFUDdVL
zb*=8Mx-YzK?wg<JYo9N+@t`QOLV3S5v?yQqTzT9W1s-5Yc86!4^el#(*5gjHndQXH
z@<ehdxpjq<Sc^N7-y%m8)VX_<X8&e|J5e#5;d2{=|3!!OeXzs+`s%OQk#+j4ZLQXF
zYrGBa-jP@G&gXqo9bOqmoo+&qVVACe8}7;;aYAVLt0Q8F7lxxKTd_yabJ&1+!Ug&L
zG<s(X-h?}KOTHy#bgLa(cdtlLUij8IGZsqLY}wxCK!j$7Yx6+67SY|1-4Lkl{WwXY
z&;g-E)aW3Owf54UFHlN5<Z7v!$=WD>c338CdZi9ClbZTg^<5|FcEF($Zi9CYpU$U)
zz<uKKCl5AzyP)WV{r(?jIrk~Zg0EV&<oGaziFGQl>)p+7JObW|Fp4ZbwXUi}u3nK*
zD7F!hGnN0%w0k1+s_NDvb>U&(nXvcGu*I|g#!Cb^dTjJA9I8PzcxDWhOeVK8Y&<@`
zCKmC^fLLp<F%gQ+vXr=7{(`*yIOODtP9RAYRM7piVNndF^x1z%r&I&?hcIz4=&MDs
zdi}$!M*paOpzvC)xl=Zd&mA+fWd5W0#Y9>*K>A)rjMO+)ek#xd?}4x?<?@eG{ojV(
zB{bogUiiC-4RnuzIR3>A2MnKe?R#<u4Qv~)d6?vnn>afWzSU!QmGt=YFBbA49f=v|
zSiepw?2}YAZ`ncL0Vl}7M<2go%l8`~)t3Wgb0<lN&Y;bRtiga$%;jF+7|DT?sdr>q
zthRwF15xZ2W8$|A)STW^P+Z$dq%Qx0@A$UI<EaKw@ZAGLe6{r_`q0(8XlzGj<5?jT
zh0r)l-i1DnrLaB3Ir;VD;z)mLQa`)!8~+c4HW7=pc%^WIODa2=JcV$bpjzY6_fdEl
zxeRiH7aPs`#mD^a)P&FvLAFI=Mb=~OD<Z(x9Fj6e$IEA@49SS$Hg%RSlf?v0+<l-+
znYgxKkv=(9Hu+?;K(_Id^-!M$Ncqd0l**IgZ<k(HshH1qA+ZBEfzu};CIauPTzX2g
zP`f%V(>Ae~H=lOBi+JhRAEFv!^;&?P*$-zk*$;QAj~qqVk5{x3BiTCG54OjV$(o`7
zqO%fO1rU;Yc5s_KT8Q%V{JYVp(`z&SsT`$1l^J#YxQoZ#kwA{+pF(e?cOK&wa8#bT
zwM2@mt=}Lm9q3KPB_I($E8C|m!t-MhbSbpm^<?7L|CIRS?qlK9nV0$OWkLIcXk~Z;
zH9**>o<<wXLDqbJ<E-kcmp^F0!jUyZIISVxo>yD4+K>CN?()rsd{LF7TUkw`LnTp{
zcF}j|(;@>t>zQ}f*{RmdHSay|#0c|fbxHc>_f+1FB0p}9`aUY98#yUY8Qzul*Q4gU
z#pOBKQBO?(C7kuejK7K>G++N7Y3JnRk3$_&u=*fNuGxw>p*y=RjW!@`*E7yTFUCAx
zS6}8FO4iSsM{*Ln#-d${twP$Q-UB(0D8TeF|IOpw{-gYhz^iMMz?<vkhr)tV6s_A)
zbi^|STxy|!%)s8)AAdaj%1P`L!gEb~?>Cld0qc$6E?VM(jz#|!d9R$JcHU4noPIgn
zU-<^Pdh<r8W|=%Vz#tkWjj2o164hBwMW@cjT`1n(4#VxZT|O^S5V@C0_TG62z_7a%
zjhSpyieADKq=`fms=-s2-f{_8@}uJ!!sN5LS`NHk&_F)INBAG_-2ET(KY9JejpED(
z6>$h@*rlnD^DCF|5he86oe$=7!q1g}=~Ewb_S;mic3n<C`duS}dTnqjVmYw*gw~nH
z9ubofS?+r5NmK8KKEAhnILuDePYr6)pYd62Gh%YoQX27z`QW_5&KBn6Q^Gi@3kv)Q
z(o%m@U)}Ukgv!g|`b`OL$x;cX|9;}z8UJU&$<ew2V=j9{qi#U75{F=s*>4v`a_u3X
zkcA5E$tu+WZ0rvjkBj0-d({T4>#~-_{TSsnG;=q9yj9U$YZFEs%a&OpVf!;;=_t05
zjX)=w>dRR~f?eDeM1D6v7b5r#vHJU*5TLDKSWkN?mp6+wC3AHB;q!{}@>a#w6Hz#>
zc2dI{{+wT-f3lB<2QwCsf`ellbGy+v->{POLfF%ISccRV>)B2wivw;r^(lg=Pb$v4
zJs}|Q**KzV)Q&uQthGZ$MfYsqBq5grV~k2XyZ$e_3Q)ke&0s-@K4EG?+^6X~P_p}$
zRex+Wjf9)cGomP=mr)I^g!6!PzR3Aa@R>iw{q70r9SqcTMXF$bY7lj`$-h~-PfBF#
zT}n%yx;Hz`-0J*}-Ywq3trW$8`PZ<k^{LZEk~yi@w1?!ZBoEVx!Fuo$jTNofkHUR3
zt)jR)_<Dq>mDq!-p?MkPaun6%(iZS~cQ_CZgmoj{lM6<D)u}n&&*!%<6UUBVgIpWx
zhsuT(Ih_~+ge-}>Dyx~^gu#eA?Q?mtg3k-d3t8J6N6JWd`YYxeGj^mJFY;Dh|6Der
z*0@hfk}ts4BiaL${X=Qv#3JX8OE-DUH)jLun)5>*=Vd>Lr$~xMr~^1;#0i!pF6K(z
z?vGx?j20QaY0gmC;f<Kt^_CWnGfF*SoG3;Wo!?$TsoYl-aDRyuXca9dh^uSYtDU;F
ztK7SO3zevs!Q1!Qh7-y*Dh+L4x~F`?=F49fFdu(eG|=t;ig7PM_Q>{oGFCwGtd@zJ
zfMffDgZIJkZ+H8$M2)?NdKczojc->I8Z+zxVUlrsGOZp<bo0aguL5r1M9KB9rJ3LE
zK<9oR3pV#>XDDDJ8SH5_Cbe~F%s^XpGJve|VJN9F11<NjZ6qU-fqbrW+e~b`Nzpd8
zk2Ld~elmq_M}lo-jk)AHW;#aMA^igW@QW=`K?~?}do?|=a(p}y0Q4Fsi*IRZ`^T7n
zt~D8X#=dP*`vMcm%H?{+r6dLv<Yi%GiMK_5y8g<@E(=QNR8J5#RTVGdlaNYb6#Buq
zqeDeAfFbXHLf1fQ&&S-*o+a$A8H?bpL0NbJakc?w3z0$caF%bA1FrdPvLMt`GeC!l
zIg+Nj{4wUpp!0LP@WfjRrWNR{l1VbJ=)G-fa}XWI^;e+Vr%i^h`lAej+NKn5O}n&{
z{RjesBks_|^r7N8IhRI3uJpP^o+2m>2v_Er#qvZ-=X(iRS2<CB7LI6n2-oKL--HGL
zV;Vk~gyWf{E1|%v*qElnD+oq{qM^CItgzp_Jv!D0w0*+?XWIdV%-ny1C3Gd^1cD!!
zfWh(}+6_S0tz!S5y1t?&cO(V@n&W01p_AOAvR~t6`)}U*4__|zre7h6lqB{EV&$(!
zMc5WzzuOtXh>RC*5{15VPuRROYnGnox^hpj%5pMVqSLru)oUo#c=I^kD9lQ;zWcI!
zb!Ox1g$%OMug&jiqbvXj=~3^<Z`D(=N;)ckwy=~>abYN-FtVHfpx_TfmctJyzh5t`
zG!QAuKJU}W?M_WSW$G|my7^)b4@)dE4h(d}Efc|=S}MeIXuqpkmsT9gDPSZkEpKyl
zyJPy{qb)5oO;WV+Lv4<+=&hBrwoj}ngY@^X&UezDb$l~f=$d!m`CMuy49sOL)DV{@
znY!-i(tlAUO_usL#HSTQ=370+Rwg;E&2R+UcAlujzfgR1(65{e4Nj_EtFb#!jfRR}
zTjuHprSjkxD<Xbsff8CJxULT_@*w^;+TTE=1+S)?wM~Jv=LNN?kZK9FN~p8`v5W3X
zS#tt)wgIB*;TU3fLX5NidDg?7g7qu?x=>f}j^Ilv<x|2z0&K-YN6=UgQCg$T`;tkz
z*CBLnD*E^a!omUhC!=3yGJkSk^Zwqu_uS-6$?R38uXK}H@{<Be0O;g&>nd@K5i$48
zO2W@s_b0zRaaCv(L^^Wp%TWi_6>Rq~8sMjJa(nm*wBeLlm6Ouk5q2FwWJTz`h~0*a
z1Cb#wArl1*RNE+b+-}N*LreN#;Y8Ht+AE8V*Z4xX>%}5Cp+XGn9@~vwgu%(qbKf{P
zke4#@E6R#8j;VNl$(X21S(*HoDXE7unl<`u!n(Bf-LuHu%wiS8`5W&+1NMk@zRgnM
z8j~K*H$)V9o`kq^8>s!<dvTZa#8$iEltTjF+mn^Ogra023e1GYqBcfsm){QQy1$Nm
zI+jyz3ht1Eedt@RueK9~o$2^Le$)1{Cy8TUSH2v*cDLDT(M}Oo`YHMw&qY66=cX2H
zxl{y`<7u+>jpYu{qZv(@YT$KNk2Cf+*!Nk;wK%p8TxvLE*~BBUH5orC{+LyE-g+;p
zum0P~#*ZnO?1@xuXs}7FOn^u-TM>lRi-Sj{0l+_4DQHzP6vJ38=*W7zzSGH*FWJY}
z6$z=kD#02bm9GK!Ij(vIT;Zz;%R0SX{#CK}=ejOBOD`K5ZLrW<Oh(38o&yAZph(mk
zY>(BHiKzfK-q_%wK-Q{6jAX_3V)ibbIu`=+_<OFOfy@K_h=%vlQV(WiE9E8dp9BS;
zSf)}xkA_=Qt_upurs*0`PV!$;XyxEdqtg#)R|uEE(0$l%OGUH9^Q`Ll^bUoc>oj7~
z1m%tY@c!}@4E;;}@N3c?8|M&wBr-@hOD8;5e}rkY_R7)gq@=qtfHe5d*AjHjvZaVQ
z7nEABrwk6#A9EX-1r<;(Ssn&UnDDc-4kIn%y&LM!8fzt2fj4RcpE`$S%%%CK=zXIq
zngPeseK&WxMtRF%u-tCob05h1Vkb}3j3SzE{N5iTQe-8|hm#V%IB||9)A5Vd8ydxK
zT~R9+iC(COuO%&#NO$w)B@y0;E)LmJBuA#X)EvISNywln$8Xjk`8dW4UxwJs`B5qx
zO6X82j1L1`Au%Owkr8JB=fW(|CH}luyv%z4o$ScdD1>csbDSGsO`r6jKRwSgiO#I|
zc4|N7ljwSyQ7*T8JV;0uo<I3Bb4R4ldz;ggICoXy1@WBNAmkV18w#8J*u&BPXPa{X
zpQO<{;L%EMK?7VlUGOj*j`1TkFidjbovxcr=t2&rNe-+-QXs9zB5~48ClAyP-wF}j
zqr;YH{=!WMuDc{FQo_kJv|X2?dRqxsUp?ykVzEF^{%{Mz30V81Lg;v+)ulh(rcVpJ
z&##$yULER4DZ=B;g-yatQ-`c&E;z+99F%fUi8`C@TKPFG(Kn8a4vl^o4zg@sb9;v$
zQc&Gui;aDrZv4~vo7GDV-#C}&!+kAZ=kwivQM6H!<ORiGG43*XAAYT9GZk%>a-EzO
z+NN&0bnwe}(%+z^i!aSb)gJWTPa!-^jxs_==;uX}4}|#Yn?TBnMX_<_TYb#naCcEZ
z@bq_iQ|z0qOs$7co5blAqB0=jS!luO02EDxiNQ>NdGXoDDK>?M+fO+^bI2`HT?~9R
z``iZPOH9nkS@Np38OV=+8R-7bhZaDalFR2tNIngDH69UPOMQbThpmn`fnU@R3@u%a
z&DyC8inlgcz(4M)dUu#O#Y_bvBnMiz1XS)myGJyg%BIs(O~HcE|GG~5UEy9BV}Z#J
zV4A(I){Lh!Y;itfPOo#0tJGToA=-y!r7bTE;Z%OF#&s0fLJ`zrPTJI-HUSm?{wyoi
z&ZBO^hm(bt`?LwORc7^nf8>?dI!rWT21ZIczqsp&0x%|s+*F^D`UWgIX>-SWC8!kF
z7+q;$ltAfddqHSCgD@=sf6UIm!q+1VjZ<wVU0vqw8|7&@3>e<@N52BEj9T+E6?_Fe
z&sc(~+K7$VJ(KoqcqFdq3Kx!dv^M-JmAd8jF4^MIej7Z%y-&I*Ohp^dA9DO@@xKEk
z4KloS9yPWu5BQBBi(-M!U9aaB5`3u0{HcP^I`8fe+b16xLbsj`rmBbz8hKOxnPzCu
zIWo(+w}|~4jN$j(F$?#A9N_tRJ-=)oomr#S&`R_Q7XrH%+wM>*`uzY2lz#lU&sX}G
ze|J2>fQ7DDE%7g`;9?abcJu56QpJX1+>QR+V^RCau^``Ie)n%jp@#GOA?uhRqT(iT
zp~wmpDj8r0;MPm`Yi*!4&$Ss7{N||TDm=X-{SYjj*s|sQu;A8GjQLx`DdU!SYxE<t
z6~VSP1}*U)`Z7S~ch2`nVFwnu_In1cV;Hmg(QdLaMr5C}5RH??W<`o&oY8__{6DE<
zVyB|^mPjn`&J7{ggCY<-;DF#K2HcJ(q29)9H=`k0vR5?W-=drJvp&n!FK2WK)dIgS
z&FNyw{Oj6`_od&t08ZXtXkjcacf0>k$D`;8urt}9)>nWR`v59rWhY{NHeg3$H9p{s
z)#7ww;@vZx*nS0i;j;E^AzPPki^dUixitfZBMNAmj}~A)D-6}5pZJ(IH=IuOj3i+M
zkFg4U=JE;}$v~+7j!M#E8akcN*4N@fgBw~aV3xr%r2zu$@rTf7FMATI`gI-v=Y=_p
z+~M0eLc$pz59$tI8?c&;Pwtgjf$ri%$vj?F&cs_=YQ>S)zCzC$W4~AsmKX02eWmeo
zu`PB^COi348;Yoe`B6+Abe|cYTZRwu?i*(OW@nyr`BGRJX1XONH0dR1F%bh(Xq7b{
z+V(-9nch5Ag?lh;0w|NTgp)z+?<6rSARf%z;8!7>V*J8tRsB2^39Rm#NjFzm0*=zk
z5cR?ACpBrbeRu!qoZRPssbM5(r;N#rKY?r^7wO1g^{}~!9Z-7G`i((flNH+pRQpfc
z%@t`{eCtIsBLKo8xd!M;UD52Q{?w`Zucd&1=ICV-pqoDdIP=s&zV0^8nOO{H4V~!n
z!=J~o9J8$#?C(xHOu<-fVKeH+)cay-{v<q5VN4<6ZI|ydOn~Phtj{t>2fk|xt`UL1
zUW+=^auelhe$keWCyBlA|C#@7$2(#`y0owj`11^xN3HlD*(#J}QHHQpQww44foEWs
zZJiSlP~>G>w+tRnh^)np2LJnlW~Xbh*fC8_wol-X?iu;{m(t$i(bKC&Y(@tk!2-UW
z9p8&xgL8}WnPc5^Zj{Jusx&M*vq5K=Sc2U`%z>CBnDs*oHspubYs6`&AIDkMuF_h|
zsG6hgSw(19A1zVPYiK4$GmV(o<r-+_Tm@$xt;O#XFkDxafutJvo5kkwb}C%~`p5PP
zAo`Hy2)C;8OKZ5}AUAJEnQ6^e7wF&-HWam*Ei<b*5L=<Qiu{~Mvnoi#bRxK~@WExZ
ze^&N#utt$w<1oV@pa&L5Am=O7-kLCG>{Mqyns=Gs${Ob2{dqE4b@v;W=TV<A0~90X
z-RiPc0xZLv<zAqwUN~UY<nlsOLiC3tWI}xF>Xsw(N7=hiv4mrHA2Rrn(eP5y*O<9&
z=<<DE_(!RZiK<+wc@`=!<~bsVJV|6bmxKJ_O3HqT;6V?6u2h9Ymn+)vp*3lTf5#pd
zTB^IR$YFIcSQ7L(f`_=wk=yzn0%YlOTvH1p%!0hx&u<ZZ;c})d(*Lw(;)`Z4s1h>8
z$C(d_=n^g_al%C?g>7*q-c*KRV@$ir>oPF2s2C7w9ec4E?@Z=a8haw!fTVrZ`*EQ|
z<g+m(cRszCdvkJnes8%j($<r~m(yBJ?XbYnGYd-+h<)8k5iRU!E2U4f>|PR}y`S^e
z@J#V<XumFbCCbMfgF?RC8jmuZ|L9mS$avOb&#+_J(9YmwoT}fs5s?WZQW!pQ7WIK9
zq7XR!6f<v)zukXw(kTn{6kWQZkXp*MsH7qyO*G<47p*x(6@9d%{bFH~5Ui<sQ&P_C
z<Xq;Y)cNt%VH(8y{5UNCRmT%An;|4{Q#qs!>8ko7z3jrR{*jrwjqk#*0(^7^rENJ)
zCGI=6{`pxEwX257F;9~;l=K~1&|b^Iq1~)vJo2?h6)Xvae2HaV17m0eGyptr+%WVn
zWMJ<Pa2zLs$}fIwiu@HH`xi%bsJZ#K3L@ZhFg;cTKb+WTH_X<BVjCk<y-ltUHvrln
z_2*02`L*GlkO8WprRr|;b1Sh+mc&6Hh4icdR(TyXA3BK^LobzxVu^?Ji^dPr(fPV>
z#~*7%M>Ue_vAtJ*iCC+=rYZNjy=eG5nCn0NHt<*i)om&A<8{Z3NI3J+jyq`_+^?ZK
zbjHZ4Ek;tAX$?eJdZpdcI?PEP%!gZvR-|UyZ)!_Dc*Tw#d^36@M;tXM!%Wg+-PtNO
zi7y3NH^d=ce9p4n=hi!}C#a9VK&KE_=;}&kD+F(Y{Q8cU66&@2XY{7se6ZMgQv9`1
zB4(dA6+%j#cF2VTt;S<=SGhsuUiDHU3+}Brt9M~Bhh0--zRbBOn0?n>CNLJE<IqSt
zY(o5%9z*=N`8fIVxn8o@Wx+|q<@@eVybKYgAv*{Blm-VmM;NT7Ns)Mo5)E=wO@-HE
z>(;lvAgyIyw;nYg${TKk(Jai#9`QzKX{(8kilY_$NJ!@xEjoI4y!K`;gLg(yOG!33
z;PK4~%T*v_Fcn7f>z4}>B-Dn)DQ|=*a={jYCcNLE)8O|?*EAL=3tf7%cz>m^HP0KG
zKMdfSJjUof&1BNpPkh+XRHOL8dg|)*rW|YRHAe*N)r_Phyh`ivfABepZTJONwF5b&
zOVWsxox1W(yyaxymLJ^*<HV;LX-go91wWIsMqfCG%}8YAnmsVoa)gMqQrxp15N09=
zGKx0|6a($MxFVU8Hzb?s<(`=*kVGMF*J(NTgU^hj*5ak~!->fix^sPy6>9S9lHFc&
zGpfJ<glg`CfdxfB{Gsn8p^zYDYYr_QGpV;&h*`FYqB&o@9LLB#XMXWGZY+Ai79KE{
zL$R9Qn4x~J`*~18iw3PmS#M7SlgK$M=WG;NCNQ)dCmH3I%(-W<&W*Qah6=Hi%f#2y
zNo6wX2FXR>B23?hJY9>W>BjFguw3<gTbPOMp;&E<Gq{j_Ca34(Pr&xJc4C#?Wy{1v
zchQIVx<Jtv*F%z$4m$c7CA_)}Jeei74{bT}+x64z1)GDnF4<ClY;m<Y;zmE$TGD*I
z1P}|NR<2`;KKHXBQpi)9eq{JH8ON>E+++aFv;;rXSor0nZPIh4M9p6VH?_pyRPq@b
zrey~KnLt1e#h<SnWUHo*HUbd=fTwiG_Tse|I_!519Q%Hq7gA~5MFD(qtz2kJNMixH
z;gC~%<}_YyQ}HtFa^vgdk&2(OD!U(4)<$i<e?0V3RF7MaOd%t3Dpeq4gBE_a)|%uh
zE1G2EmsrvA#4yR^z1Pd5uCZ*3Kg8@k4G*NaktqXnp+&D9lDo4dk>kMo44;|%-`MD{
z9g!t`|H`HuM^?ljQ}9@3QBQ?XAk|3gkkyQqzc~>W<!q+w^rfW;HsE)S!1tvD`e|k|
zTgA@X*NK9?!;tE~XegWKEB+CX-0sk(L8clj%1iD@RrKEX9S8JLYZ-Zj81X&t58BoP
z18e>{Rt)TTN_(h^K;+NK_US387QdwP)rz8r+LTj0F1@YEXQ9)xkPNfyFBfafaz)ym
zTlGIiZ6?P2^7{U#(Ys%mDZoFKvHTsUFH^zZk7YD8f^{WXsrS;cb_(QU!eb}eVZK(^
z($S9D-(F5L{AG+c66Ns8>RPq`bqKm7=9WEgV*BmfTILHa4ImMq&w)1nv4Gt=1EeD@
z4TewNgvqNVz``33_eYWr475&?L$*oPD!GJ|)dLSzrOWW6g2Wh_LrusDfB6qiqza_h
zDAJm(#_o6{p;N&|or7J!$0M*gmm;iOj777$D6i4&M!FL{W#q-%BkbDypH_F+n<;+n
zksd!x<f*8{KLmvRmUWpc%C%TI(J=iep?~Au@CqQJ7y5xodaJNx#c~}WR3Du2E57G=
zS2uis1Dnc6eGlhib1dTZq0zlzXG|__e<#OBSKoie1urQoU$fD5Xl~l?x>W1WBY-(k
zdRR|?V~0L^d2N4ba9%gj9%eQGlV7a(`acyR`B;->mU?_nDiF$@CJ0bN;>#hYEsgFz
zniBMY0ph`*o{b#wFw-S?+hxZ`UsA?V7$fecPkY3R{f4TpG^`-w0f6VK$>jaW@AKiK
zaSk#5?CT*alNq)Wov!-oF!?!5<u-5mBLykOuBfc|?5l`52C6t4IBtk_hH%{l0N1s3
zP`;VMy~W{~8&PLTzqz2YHP<!0iWbSMHIgA*vRGfLS_OJKfnW$&o9RWSsWCQw1gewa
zP4?)&&m<kL=|Aba(z`jgV~u<`N@qfG$0L|gOSXoLFhyv*lqWp_kgk#V8?K_IS_QvJ
zUr)RMdwPA%O0|2L>WlYDl2pSJhL$ZqhC2lEUz!K?JZQ>GzMSxo9=FtiISJYzWixMV
z$l=W3byn|e5HnpiY*`*e!)TBc-Y7+l4I@icOc4YY+pLuP2t}nZqcY9onJVkol|5nH
z`1{sVxiZd`ebxL6Qoe`nYN%H=H;Ves*^3wP#-!N8q0LMkT(q6R8o^jyHW-x;t6&1g
zrgeAEnuv=C<g#KDLokF&rRu4HH22Fkn>UL`b-0VMQE#Z#Fw`tHjCOr3cANi!T2H{(
zF;sblG#(;5>wd4WbA&Y47kA1Jc}_hrG@lKQv5b6~N<#lqCt8X{n^;@3^A#!|93%Nc
zy=kBR?`Ll5Fgl`QLP=ZoPxPSvVTDH)G&A&!FJkrncItUTp?*Q6WSY=h!1&kRy8{)y
zzTjLJ8@o7SA+o`D_Pr=RcFP<@Xc2MH?K1*bJK}6&0<exjuShV5U+ak7dls`l%z3=V
zY{ZhC(shAsWXH2)E;95otX(r9q%WWaF0PN7<b;i{N=$~D5y#a*m?MuokR#JSgOFbD
zp6r~x`a#f8vpqC{yq)LdcDLo8=_jwHGT5583n7rlWuJ5e3D2|InH>!rM3riJO(xgj
z^e1Y#WsI-Cs>Q5gU&$m+M9Ib}bxja6p1=}z2&Pi0M59ETd6pR8snH@VmO2L~viWTo
z3>C=qy$rIF3JojoWj8%IE3KZvAiNl4PNXs&L`tY@*%KD8(@1i~%;Fp8e3Ftp*dVvK
z28m7m@tHecsWy&Mw6PdBeMV(Nb3Xk6p_h^lC7e0`Z1y=4JMH8Z($4A~i3tU{!uftD
z8IYfm{Y5mJAfz{RueWPt+_mpv0WBZh!qQO#aj%Dwo1<r0gPB9Z`qyk!qoI{&n$5Gk
zf8FWUUIZq2IQl9|x&+g2>Z;|w<>#k9eg0Kmqr-VAULI8UDx<cF`0ll8aket$CQASg
z#<3+sWtQI3L%A(-Vc1KEMAt>YOQVOG>W^5WzcHJK($;A~Dr20W{p7&Z&ByAyNk%sD
z1KMy&@f2BnnE<eMoBhh6fy8l?-9Lri-JRKrX}Dd8?7qZk*kdlvx~htpi^YDa#O~jy
zjtTP7iT&m0;rZ3f$WzOOxLkkB1T<?2<>_}Ezx{WZe$LEh&C(uU+>>r#JPY{MBI18I
zdHnpra>1CqW^n=hS@3G%z9+&Z(Qx2~j)zcu>!vj?q9!p&$G2OO1F!u=NNnVKAfP?3
za(Qad;6ns)Rjgrn$1ODP(KdbTL<^MVEb)eb^^xA1iYm@U3X~#21CD?34DmsN3>}U-
zNxnA4(e@w@K9r<EZY4>!K}bIhD~r!5<-+s_N!v}!-%Ds2$qfcpvsU~)Txr!oiX6o@
znEVJml%_JWS`L>)SaF=K1<k}$Z~UbD!krz93yuP_S103o_9!j0(qH@izIJ*mrqi-V
zSkZS_vdc=(iZ^A|ZbTztXpTF_94`VMc|TnX*!pTS23|N37QS&_KmNf@sP<^m9Ouv2
z<vDw{FPC>>K&<QUENG#38HLHo)78X)vc~rNAVr1ABgrM)V%XjyGDt&ujBzvD<<@vF
zA7tqNAeqwU^bBmxU{bi4E|Bw^cuMG?Xx`IH;`Ku2onhvWl%?k{-Yls#iE_84TmDk|
z0v%%TdAXP<`4u;f)!zdn{=~ZO2M5Qyr}HH4EcHuQIr={(hIM-@)U@A9Y1r$zjk3_3
zYqMLu9Es&`v)+lV>^YoxIEkj#eyI;WKeHgA4SywZ{XJGF44V#%_v25pW!E%ii#Z0u
zV9Da#95Kv;4vvT=X2_wl&Cv2fgltGI?ncbe3ej_+V{4$U>~}?dxQtv4!F`nu6cZXU
z=ri-@r%R|uq4^Z|=+T&I51q?uPv30*vO%GF)r3t+AclnDQYcii)WY#52j!+7>GFXc
zS5~v}RkZ_9+$B-iqu(wvjlgg|N`2G{(i@gB|61FVM<rifH!@17S#j8KfP#<|@w?W#
zk&KKBdy~$cf>)NS)-rj1gP}1V*axBq-f1K11+a`L!$R_)9uhF#Y|#slS+u3Z#c%OP
z_Xrw?dCnw2o~buksT@hq*E#NCSh1o%2U`x1%HxXt&Em&PgHz{-W)8#8b~0`&YY>b>
zbR#A^`5YSajL+_S5hW<V;Ja3T&g1<ppzx}x%(!3viNvw_(YVVl7q09_QzFIDj(W$Z
zYaf#x^|-sPUI?BfZi>o@6QVvcO1=4NE^<O_#jdViuvdjH59X|>uDw+<A|vUOhem{z
zDAi-xl_RG+g^D#VS&idsH8BH)KP)hJf%E5mpA4L3$TdgB{C=$|fdoo2DBUbW+`Crs
zg}7NcBCLQf++cp>!Idwdh%J^s`F<;3EBKq~j6*QL>$y$+u1+c>!xJH65k$oNK?{=W
zLi~=gB%6nbnCV}Dt@v3e$!pLtV0|3@4RuocgR=}8C$sKhN+4(xM}2`9@j+D!v0P?Q
z*A4eKz&u4w5y1<ZS!RQ`L<p-E$Y%vCT%}0<=80p$UYJfbf~E3IV7Xe%Wfp2Vi9r;J
zc6HOvY$0_)LPw^e@U2z-LUKRIadbkAj=&kQzj^9%#+vkzCH){xFCp&@yxM0|sZ&As
zH<+_cwu5?s7~eliv~WUgSnRponxT4PoQk^#3tO&~WWifE*f*n`J*`2OgjSz*l(6v*
z+HKO&hQ8|4W;bud=VWeg#U@*qhzH$D9nQy}_ph)2*;>ra_<eD?(z@+?xlT9aiwh9)
zNao9d8M*=HX;hOXNwLQOV_?Cy?jAY>qGJ@oj!j>pk=VH)5Szi_mS}lo9%gwyppnVV
z$Zi>!c<_UDWy;15JCkCMUq-^d)XyG!&esJhB>eZ5-v4u6p33)TR%bhr3sGE#@EP50
z5o&;^BTHUV2A}6!Tf!_x!Q@Om^5F9fc+ukzA>W}~wOh7VIsc#@Gpj~<Qeoe>XGGd?
zfXeGDeCoJ{2FnI-qll83YUOq^7!oo_`+chW-QEEbCCwp!wdYZ2KlltBx)#S2x=a3Q
zAw-^Y&?g|gny9oeP6@-58`z23dQ2thX}XG}LX-RTy)3aPy|=``G6j1&vo^n&F_b_i
zj(ECfo}!y$IrUkbVySu1=bgaH<+OjP$E;9cTfZdbKFaw_Q&nxyAicSMd?v_97M213
zF!7h#8o97}QwWgm*I&Sl94O>yR6fxX%C8ZPwez@JZuKMTdu@mo`*Jk^$1o%T%*EPu
zCL6EAdn*ZW5+di&K5*DE)~>yPho73G7GoV-6Z{MApS~Xf`Bp7tq}mv=duiIbE9-Wc
z33-jih+o*j4Dry<es*jhssALq3gYghV79D%I_O{;4`*Z}AoTj2e6vFSY(VnHMVHAl
zRW0VY=8qOdW0;04w#XAj5R_06qZu2CG)$`ri^y!7PURc@8(BHE;B-2S!}ms}P89iJ
zkR=<$s8*Tva*E>cReFu%+w4H<|6&v2-?Uj4hbnfF%VU|Zzo0577Fi1RT|aG*%Xf9s
z=-WvWZyb;&YC4i?D=R4NXRCLL)motE*%jX7EL~=QtjA#p_TzY1UHYLoV(<n=1e>BU
z0nepyz66x4Z0opxRnP$@#`IClX~60nQtG)9xG~DIrd-4yjsLUb^#45;kT(JA^W#f|
zf5RDA<4qLKlIuk!Y-S>2+M;B|1g+8>o)ka*K3te=Tj<nU8Sk96K4W<BI<&#9q*`)I
zXsg}3rHcog1PJ>WMwas(u!T&xyf(7iRH(RRcracBbIT6+-j28(evu^VgKnc1l#_tF
zjUW8+??Qo!7}us7g<AmtFM+XpG0T40mH!#(-Xn`%9pJoNr=i&XU+ygH9188o=ETE1
z%SFtT0lZI1IWA5VEDHiE0vev8J{Q8l#)uIq366gPT7bv!zoO$4s2VIoU1h-ks$wWn
zD*mrHD-FW6e9=&z{B-*9pA{gH|H<+{vFbmNq>lQmPb2?lh0Ead-y~0>>5Hf2;Fzt^
z{%?{eRU*at|CtXXvV-&qqG6R);s4+vdQz+VUuZ<Z98X9aOb3<!7uu7W9p?XuhEGTx
uI}s`W=f#sl&;C#R{~daY<NsGH^hh8Uu35YI#V-`?=~0qXm#vUC4f%hK`1aZW

literal 0
HcmV?d00001

diff --git a/src/assets/file/check.png b/src/assets/file/check.png
new file mode 100644
index 0000000000000000000000000000000000000000..72ab799079f60e98eeab1f90a0d7032fe4085624
GIT binary patch
literal 694
zcmV;n0!jUeP)<h;3K|Lk000e1NJLTq001li001lq1^@s69)wx}00001b5ch_0Itp)
z=>Px%a7jc#R9HvtnLljPKorKmmxv*hN=UGDs0ahBbU-9yBEg7Y?1Gy984v@Mfw{?u
z7)TbTf+991DrTgHtyLxPiWmrD=mHWFhz_WJ=sAt*T8Z!3@!77FTO!-<-uvad@6Kl(
zA<(WjxK<?G1>p_|<>2#_t{pHOa?#r9Qr};bh8ML4pFb#I1BCUIpj2gCMtjCZtJkGp
z(!m4vV2juWu%OD4evnf-L|vdg;K~X=&zrJAO+@LvSM->w4K8yLU(**Ydc{LRoo+01
zmkL;l-aUgJE;>|M<xe^G?nzY`eF5eSw2EDF3LINHWyh()N}*zhO%;wJ-P}cB?KU94
zZ{7nRWPvrb%oG;L7f*n>3&(`F9s<Arh7)H3JPKAYA3Os-e$E;2IM^@WfqN~JA%IjB
z4uchSO?L41!)d*mlYmtNUzrCMZvuY~fX#P0CH#Y%6s!t(_AKyv<9IfU*R;bY1;)Yd
z{}|-i|7rHEKf-8<tMdb3f73!I4XaXEg5Ewoxn9aW6SRzstg~V#e~YW^Fo#j$uwfks
zZ3|Yda1>~pu#tc@&=O<A29YLRa1MtpQ4*W9XM^=s9@at!<0hS8qZYhaz+v_n7O?>v
z*~40;ZNW|qJW6Ssu!#T<p=GZjyDj;0(CoTK`BQT*wud#zZNyB0ZKyiYi^DdMDgP<7
z#0vL8xMccgd3er%LzQK2qku<w08%h?sk+8BX74~I_l?fr^59TrmD@n>RqpJ*r1jHr
z>_u=&=TPspkB+@W<)gE@W)79^lxEQsSZ^;8G;Z}im)(D85@P{`Ynd3E@ePD6B5dt!
cQqRxuANyQ8-(<0fsQ>@~07*qoM6N<$f)|uHS^xk5

literal 0
HcmV?d00001

diff --git a/src/assets/file/type1.png b/src/assets/file/type1.png
new file mode 100644
index 0000000000000000000000000000000000000000..f447d4992e928c2ea55f7afeeeb45b9049d9ef1d
GIT binary patch
literal 2279
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

literal 0
HcmV?d00001

diff --git a/src/assets/file/type2.png b/src/assets/file/type2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3c9846de9d1ec7c20d69c0b57646d6730a03438
GIT binary patch
literal 3542
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
O20$S#5tYX7@&5yEb!t}t

literal 0
HcmV?d00001

diff --git a/src/assets/file/type3.png b/src/assets/file/type3.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6141460085ffb4814a3216252bce4bdc0e93f02
GIT binary patch
literal 3273
zcmcgvdo<MF7M~eYGb9F+keED25z&;w7>t<l$dG3!<SijTk-UF0Gbl93GkuA?g-UsZ
zD37E>9^>^B2@@I5@tQlo`_FIPweDT(x9+;@{&CLvoU_i}d!6&y`|N!vW~K%QdBk`?
zAkaaAA>N!bcKzAl`#Jrz>%>#e0KRE%pbM(_C_V=Q@x~DFI+ubSf98;UtgMeVv*Xgt
z;pNw_dV8ime;X%-o`ht2NL_Qw<V_3b?_Q0)cR1hn;IF*>&Z@xz`TUViz1u@E6y+d_
zm<vQy4y*3G--4_-|J1@y=HnR^*yRyNEu~oDk)_<wUiNDJgw~s^U;Q`tHg+P|E8p&H
zgwKxm!eLNU60y19MIIQ6LXlf#A|tuLc>hSe5FEvG69nOdBHF=%Ca6gC2QXY6fkVO!
zPe*|O6&Pv~2O^21K0_hoR`I_h6q%0hG`tdL=nWHD5>iP$k^c)V8TA1$?tbR87EZWU
z)Um34j|F|l?w!e&`CePRGiNzTi^0i}Qj&W#+GUjEA2tOPNS==`INmu;vdZ|B{r3GW
zVOh~(b#$Sp%uZ5Q(A{g7QfBDJGk}Aqx)?3;0lKpT_vqpG15&MPhE2MU)MC<uW)_H*
zQV2h!tA%BP=<(LbBSE|rhH9$OtXR-aGQXxJt-iE#pyQlpL2n75^UU;=IG)wN;+)oK
zU$mS$SNkpH^v2EdzK62EAzW7kPBEQb3azV1@`bHR-=YWF{MGq@JFkz+{jt?1;PKOq
zFu?0LUL;6G84*FGG~~;KtQMmjqfp|<LLCt4G}?{QGFGWr%kxE;l=d1)$v&NG1WVhh
z&F;Mq0ydYsKWm6$V$!#71{N3{<wg;;Cgp{88SE0+=FTjhw!>g<7^lP(2C(pZpjCS>
z2)Vky&Hdy1m#b@k<ZhRdQ;y`gzgL275WHWyBVN}FJrqmT5ISrUAv<`|7w<1$P7ion
zBXuA9_{al~IjG<{d7<xltj#ZnzZ{vk5rww(@O%+A&7FJ^TPm7tlL3DyUAQopU*Ujg
zPo)Lbe@~U759<~sVlHdmvPH-qu^s!G)pV?Hug=#PaFtd`WvDK!7hvUoM-NxczgXM@
z4B5V85Aof^NnmcIQK?)AC=lRbZ5+yxdbI1<p@yKxM!qeHMxR9Ky?6%LIH}JYTs7y*
z%pJqL0bQVNrMiFr5EhF68uoZRpS-<82<Qu3Dt<-6JVGl`3>U^C{H51>!$V39ElMNA
zrTXQne4ZE@Rd&4374!`E*jJfZF@}+R+AT-DK6Xa7`Zl#1m*>x2Hh!{?l|bfbHbb@(
ztKH1oD&)iw9)S=gEh&eI%v606?VduiWtmJOR$GKE4k<kougPqfqE>r(8J?GS;*DYo
zRFx7J_CGn~`m-&mY*N~q<;E>aSlGWUV5~#C;#<;{|Dd6Qe9qDlG6pMg+dZqbbUSC*
zCN*e$!E)SI*R5}zRWfX|hMc)|q_i&@ZCoTM<S|#CS?;c-9}<>#{KDoB%c&4uFLR7W
z1&T)q3{ik0Vih1@7=%0pqR4Tg?>h)84o6YBWHLF?_mB(W#|ccnBo7D}@5F~|<^-lX
z4&depodf+JgqSy~0fT~Khl1iBZ7VWd(q15=;gD2-t+N!difE_sdYxKUPA>a#Fi7lq
zv!tWYt03ZZqxFDp8X5sW6$*EinxnoX9_xq!m8n?Y#baL!Lrr4#>m%1%G1W3PDrJi4
zC+>*XYo9~tJJ9wdKinDhT6JM0bX<8e_QTdAQIb?^X!`zHX=j>R$*~17M&i-3<7)eG
z$N@^7o7wcT%Rd)$T%^uA7B3)p0s`<PrM4|SwOg;d0!G!9m>>DOQxY#qkf-#P9yhtZ
z!e*E-CZwgT`Aem|K3ydPcItRiyKUZ|i1+UzNfKk@(19@b&#ZzDdA<RO!m;$V^*`b^
z+=q{LYble5L_+u$Z}*t%(KJ`wKVw7m30X;v%H&mEW$dMT%JNrMJKOiH$BUmGxn3i6
z)doKO5**{N8h`?mz<Lw5TD(tUMuP(L-K<xUlXdF27@+j^2+4+YX<x=cD}EBgbV55^
zloX9zbu_a=S~igZY7MRhq5oXuFBGC5vTgR$z|Z<1*+<Ma`02?(bjVrnfW%e|wFK2P
zh(6mJ-+-yzOzMM{JwG}=OEJRh&~z!zFc;;ni7@@P3dBwR?b>VgZ_6Dtip%{t6D{J#
z_)hPlG!K9@rJ=Z(yi_!K>RhbwV(z+tLI;71!zG?uwGkl;{|bT5RHS<eAoLHpM@1i_
zdY$@r=nmf2Bdf8ok=~>gmem;6@?!VoOv}+WpPIqr%7905_PqzzwAy+jPdbCGs;C+s
zw0vpEZRxTbepyz%GQyEG<W^~S7sNUAAulbwQ&yuF_hIh4=n|U1zcI?Bww?(cP=&%d
z8_ZVzb>a+Lp3siBkMP_(6S}QPNV~qier9FVW#+<*;RU1!DNubpaY~vxkE2CD344<t
zn7JPwgD%n6MOtR><Kd`l$Nf$8OQ7AiMp8qAowyp5wKLMPDrxqd&bZEo-QcIwyMt!^
za}NhzRvBH(%#k3Q!%2N|*G3L782l+%bmwRrqkDy6v|26U`K?Q=(w{C(_4>)IKzsH+
z*lg;-n$)(VP&_9%wAQpRsZ%SOJak43jTx0!_8+f9@OGBgo4T35Zd2E{=7v`ms}mlo
zhgxW9*F3ypJDXs!-2e<tS_yAEbd0_nrZ15g%3CAl>z;8r{RhJDt7cym48?N1rZyyf
zVF?RNpLd!xB}b!m3Pk{Di(O=%eg0EnFzJ%NFj@q7D$Mm?qv_*!$AtSv*Zl_9;`Gnw
zemGQ}l=JQ*dFR{ETfMA0S?5P339~rbhv$nUC;HSHs?ZrR7{560BDZlL(f3j4jCr3&
zIuikM7U||^O+zQkG&`k<g?1wYZCI=BQ+lXe%Y7u(9#%u|Z`aNfxG)!Jq3x=ku11cM
zPpQd|YlEI_Y5*UUr2$k|v@^%^6`9)D6J7QyoMV!we*KXYAA;9G!bpr#0?bt7bV31P
zB!0UqCaT^s!+Tgm(OEmXJ={K&Fuhf5gGLc6i1f3WW#Wiu$`Rz{V0HsJOwUyl2DDjt
ztFCe0b%|d;#Q4E@O3~MA^PHkVbMiAr0zwwNSl-zm0|J7Z^Sw2p2-#e_2gNWjemT-$
zFc^*^YCe~<;OC?Z@coKq1dbN$Wl|`?DdD&z9KIckL@)Pe8f$U#2Tb$zJ3SC-su+`T
zo0C=eg98)eK>tI-W{4SnjS|)0)b2?NQr(@C=IkL#jg~cQj3zs?z6i;gp33Ybes+^&
zH3F>^HFH1bG(G%g^F`X5qvugeiQ>viGJ-L<Z8ca=^L^7z3bXgh_0(H$B6JFUxsZ?<
z=})5y)r<AJZVs;fMo9X(SF5Am%$6*TZUagJApdEv|3**qMf2I9c}!O=n!VL-`pSO?
z!}@W1)gEjn1-VyB=@}x>JZ&rXHX{>ucj}B2Qpw0-yiqf;`n$J5kIVM`Iu$?RnOsFS
zYc5_jr2eg}`gN3<A*9<Xu{*O;60<u|90Jz9#mK;Cute4uu%g?;0wL^;D}u>Qy3tq7
z5H@7omoEQ|x-fIQ#cUP&h4(eMF2%0V$<Ej&zE@wm=2K$TuP^B3ZI?Q4UF>hDnF$*#
z#b)?h!I5#1gH-eE(<0o^RzV!C>JG(G5JEOj(M`Ev!(ly5`LmHOh(t6u?1LMDNUcoS
z+XN2X1RjEz6Q@G7X~HXWgYgQ4V+3hMFrK?R{f8`vZ&?Ky&);Pu(M~MEMj0sLiA=0a
sVim_}6t4j3zk>i;K~jN0S~DB8SUV&<UmqLG`I~?U`lk2_-K)|60IJN)761SM

literal 0
HcmV?d00001

diff --git a/src/assets/file/type4.png b/src/assets/file/type4.png
new file mode 100644
index 0000000000000000000000000000000000000000..aacb39bfaa80e3c6eafcba86030c7b555dc18de8
GIT binary patch
literal 2970
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

literal 0
HcmV?d00001

diff --git a/src/assets/file/type5.png b/src/assets/file/type5.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebe84a46bd6c7aca248c9d3a2a4ec80e5527cbee
GIT binary patch
literal 3370
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

literal 0
HcmV?d00001

diff --git a/src/assets/file/type6.png b/src/assets/file/type6.png
new file mode 100644
index 0000000000000000000000000000000000000000..47f2bc3ae0a9afd2c8e6a4f9ef3572f3490889e2
GIT binary patch
literal 3028
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
JawE6ce*z0hW+eas

literal 0
HcmV?d00001

diff --git a/src/components/Search/index.vue b/src/components/Search/index.vue
index 1114282..9832089 100644
--- a/src/components/Search/index.vue
+++ b/src/components/Search/index.vue
@@ -9,7 +9,7 @@
 <template>
   <div ref="screenRef" v-clickoutside="handleClose" class="screen-body">
     <div v-if="title" class="title">{{ title }}</div>
-    <el-form label-width="60px" label-position="left" size="mini">
+    <el-form label-width="80px" label-position="left" size="mini">
       <el-row :gutter="10" type="flex" class="search_header" style="align-items: stretch">
         <el-col class="search_left">
           <el-row :gutter="40">
diff --git a/src/config/net.config.js b/src/config/net.config.js
index 223c560..f8258a8 100644
--- a/src/config/net.config.js
+++ b/src/config/net.config.js
@@ -5,7 +5,7 @@ const network = {
   // 默认的接口地址 如果是开发环境和生产环境走vab-mock-server,当然你也可以选择自己配置成需要的接口地址
   baseURL:
     process.env.NODE_ENV === 'development'
-      ? 'http://192.168.10.137:8097/fu-hsi-server'
+      ? 'http://192.168.10.25:8097/fu-hsi-server'
       : '/fuHsiApi',
   // 配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
   contentType: 'application/json;charset=UTF-8',
diff --git a/src/icons/svg/docx.svg b/src/icons/svg/docx.svg
new file mode 100644
index 0000000..fd3c69d
--- /dev/null
+++ b/src/icons/svg/docx.svg
@@ -0,0 +1,7 @@
+<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M20.7777 6.05V19.5556C20.7777 20.9 19.6777 22 18.3333 22H3.66661C2.32217 22 1.22217 20.9 1.22217 19.5556V2.44444C1.22217 1.1 2.32217 0 3.66661 0H14.7277L20.7777 6.05Z" fill="#4F6BF6"/>
+<path d="M12.488 16.2343H13.7634L15.8889 9.43262H14.6141L12.488 16.2343Z" fill="white"/>
+<path d="M14.7278 4.82778V0L20.7778 6.05H15.95C15.2778 6.05 14.7278 5.5 14.7278 4.82778Z" fill="#243EBB"/>
+<path d="M13.7634 16.2343H12.488L10.3626 10.2827H11.6374L13.7634 16.2343ZM9.51192 16.2343H8.23653L6.11108 9.43262H7.38586L9.51192 16.2343Z" fill="white"/>
+<path d="M8.23657 16.2338H9.51196L11.6374 10.2822H10.3626L8.23657 16.2338Z" fill="white"/>
+</svg>
diff --git a/src/router/index.js b/src/router/index.js
index e1025d1..92f3f20 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -126,6 +126,37 @@ export const asyncRoutes = [
       }
     ]
   },
+  {
+    path: '/prompt',
+    name: 'Prompt',
+    permission: 'p_promptProject',
+    component: Layout,
+    meta: { title: '提示工程' },
+    children: [
+      {
+        path: '/prompt-config',
+        name: 'PromptConfig',
+        permission: 'p_promptManagement',
+        component: () => import('@/views/promptManagement/PromptConfig/index.vue'),
+        meta: { title: '提示词配置', affix: false }
+      },
+
+      {
+        path: '/prompt-management',
+        name: 'PromptManagement',
+        permission: 'p_promptManagement',
+        component: () => import('@/views/promptManagement/index.vue'),
+        meta: { title: '提示词模板', affix: false }
+      },
+      {
+        path: '/prompt-test',
+        name: 'PromptTest',
+        permission: 'p_promptTest',
+        component: () => import('@/views/promptManagement/PromptTest.vue'),
+        meta: { title: '提示词调试', affix: false }
+      }
+    ]
+  },
   {
     path: '/system',
     name: 'System',
@@ -191,46 +222,17 @@ export const asyncRoutes = [
         permission: 'p_caseDetails',
         component: () => import('@/views/caseDetails/components/EditEvidence/index.vue'),
         meta: { title: '编辑图像证据', affix: true }
-      }
-    ]
-  },
-  {
-    path: '/prompt',
-    name: 'Prompt',
-    permission: 'p_promptProject',
-    component: Layout,
-    meta: { title: '提示工程' },
-    children: [
-      {
-        path: '/prompt-config',
-        name: 'PromptConfig',
-        permission: 'p_promptManagement',
-        component: () => import('@/views/promptManagement/PromptConfig/index.vue'),
-        meta: { title: '提示词配置', affix: false }
       },
       {
         path: '/add-prompt',
         name: 'AddPrompt',
         permission: 'p_promptManagement',
         component: () => import('@/views/promptManagement/PromptConfig/add/index.vue'),
-        meta: { title: '新增提示词', affix: false }
-      },
-      {
-        path: '/prompt-management',
-        name: 'PromptManagement',
-        permission: 'p_promptManagement',
-        component: () => import('@/views/promptManagement/index.vue'),
-        meta: { title: '提示词模板', affix: false }
-      },
-      {
-        path: '/prompt-test',
-        name: 'PromptTest',
-        permission: 'p_promptTest',
-        component: () => import('@/views/promptManagement/PromptTest.vue'),
-        meta: { title: '提示词调试', affix: false }
+        meta: { title: '新增提示词', affix: true }
       }
     ]
   },
+
   {
     path: '*',
     redirect: '/404',
diff --git a/src/views/caseDetails/components/AddEvidence/AddFolder.vue b/src/views/caseDetails/components/AddEvidence/AddFolder.vue
index fbfe2a0..397e7aa 100644
--- a/src/views/caseDetails/components/AddEvidence/AddFolder.vue
+++ b/src/views/caseDetails/components/AddEvidence/AddFolder.vue
@@ -2,64 +2,148 @@
 <template>
   <cs-dialog
     :dialog="dialogOptions"
+    @onSubmit="handleSubmit"
   >
     <template slot="content">
       <div>
         <el-form ref="form" :model="addInfo" :rules="rules" label-width="90px">
-          <el-form-item label="选择目录" prop="caseType">
-            <el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
-              <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-            </el-select>
+          <el-form-item label="选择目录" prop="directoryList">
+            <el-cascader
+              ref="cascaderRef"
+              v-model="addInfo.directoryList"
+              style="width: 100%;"
+              :options="treeData"
+              :props="{ checkStrictly: true,label:'categoryName',children:'child',value:'id' }"
+              clearable
+              @change="selectDirectory"
+            />
           </el-form-item>
-          <el-form-item label="提供人" prop="caseNo">
-            <el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
-              <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-            </el-select>
+          <el-form-item label="提供人" prop="provider">
+            <div class="flex-row" style="justify-content: space-between">
+              <el-select
+                v-model="addInfo.provider"
+                placeholder="请选择姓名"
+                style="width: 83%"
+                @change="selectProvider"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :value="item.name"
+                  :label="item.name"
+                >
+                  <span>{{ `${item.name}` }}</span>
+                </el-option>
+              </el-select>
+              <el-button type="primary" @click="handleAdd">新增</el-button>
+            </div>
           </el-form-item>
-          <el-form-item label="模版类型" prop="caseNo">
-            <el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
+          <el-form-item label="模版类型" prop="type">
+            <el-input v-model="addInfo['type']" clearable placeholder="请输入" />
           </el-form-item>
-          <el-form-item label="备注" prop="caseNo">
-            <el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
+          <el-form-item label="文件夹名称" prop="directoryName">
+            <el-input v-model="addInfo['directoryName']" clearable placeholder="请输入" />
           </el-form-item>
         </el-form>
+        <!--新增用户-->
+        <add-case-user ref="add" @reloadData="getUserList" />
       </div>
     </template>
   </cs-dialog>
 </template>
 
 <script>
-
+import AddCaseUser from '../edit/AddCaseUser.vue'
+import { queryUserList } from '@/api/caseDetails'
+import { createDirectory, getCaseEvidenceTree } from '@/api/caseDetails/evidence'
 export default {
   name: 'AddFolder',
+  components: { AddCaseUser },
   data() {
     return {
       dialogOptions: {
         show: false,
-        width: '930px',
+        width: '510px',
         title: {
           title: '新建文件夹'
         },
-        hiddenFooter: true,
         appendToBody: true
       },
-      addInfo:{
-        
+      options: [],
+      rules: {},
+      treeData: [],
+      selectName: '',
+      // 用户
+      userList: [],
+      // 角色
+      roleList: JSON.parse(sessionStorage.getItem('case_role')),
+      addInfo: {
+        parentId: '',
+        directoryList: []
       }
 
     }
   },
+  watch: {
+    selectName: {
+      handler: function(val) {
+        if (val && this.addInfo.provider) {
+          this.$set(this.addInfo, 'directoryName', `${val}-${this.addInfo.provider}`)
+        }
+      },
+      immediate: true
+    }
+  },
   mounted() {
-
+    this.getUserList()
   },
   methods: {
     // 显示弹窗
     show() {
       this.dialogOptions.show = true
+      this.getTreeList()
+    },
+    selectProvider(val) {
+      if (val && this.selectName) {
+        this.$set(this.addInfo, 'directoryName', `${this.selectName}-${val}`)
+      }
+    },
+    getTreeList() {
+      getCaseEvidenceTree({ caseId: this.caseId, caseType: 1 }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+        }
+      })
+    },
+    handleAdd() {
+      this.$refs.add.show()
+    },
+    selectDirectory(item) {
+      const nodes = this.$refs.cascaderRef.getCheckedNodes()
+      console.log(nodes)
+      this.$set(this.addInfo, 'type', nodes[0].data.promptName)
+      this.selectName = nodes[0].data.categoryName
+      // this.addInfo.type = nodes[0].data.promptName
+    },
+    // 获取人员列表
+    getUserList() {
+      queryUserList({ caseId: this.$route.params.id }).then(res => {
+        this.userList = res.data
+      })
     },
-    handleSelect(val) {
-      this.$emit('selectOk', val)
-      this.dialogOptions.show = false
+    handleSubmit() {
+      createDirectory({
+        caseId: this.$route.params.id,
+        directoryName: this.addInfo.directoryName,
+        provider: this.addInfo.provider,
+        categoryId: this.addInfo.directoryList[this.addInfo.directoryList.length - 1]
+      }).then(res => {
+        if (res.code === 200) {
+          this.$message.success('添加成功')
+          this.$emit('addOk', res.data)
+          this.dialogOptions.show = false
+        }
+      })
     }
   }
 }
diff --git a/src/views/caseDetails/components/AddEvidence/MoveFolder.vue b/src/views/caseDetails/components/AddEvidence/MoveFolder.vue
new file mode 100644
index 0000000..1fc17a3
--- /dev/null
+++ b/src/views/caseDetails/components/AddEvidence/MoveFolder.vue
@@ -0,0 +1,99 @@
+
+<template>
+  <cs-dialog
+    :dialog="dialogOptions"
+    @onSubmit="handleSubmit"
+  >
+    <template slot="content">
+      <div class="move-tree">
+        <el-input
+          v-model="filterText"
+          prefix-icon="el-icon-search"
+          placeholder="搜索名称"
+        />
+        <el-tree
+          :data="treeData"
+          highlight-current
+          default-expand-all
+          :props="defaultProps"
+          @node-click="handleNodeClick"
+        />
+      </div>
+    </template>
+  </cs-dialog>
+</template>
+
+<script>
+import { getCaseEvidenceFileTree } from '@/api/caseDetails/evidence'
+export default {
+  name: 'MoveFolder',
+  data() {
+    return {
+      dialogOptions: {
+        show: false,
+        width: '510px',
+        title: {
+          title: '移动文件到'
+        },
+        appendToBody: true
+      },
+      selectId: '',
+      filterText: '',
+      treeData: [],
+      defaultProps: {
+        children: 'child',
+        label: 'directoryName'
+      }
+
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    // 显示弹窗
+    show() {
+      this.dialogOptions.show = true
+      this.getTreeList()
+    },
+    handleNodeClick(data) {
+      this.selectId = data.id
+    },
+    // 查询左侧树
+    getTreeList() {
+      getCaseEvidenceFileTree({ caseId: this.$route.params.id }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+        }
+      })
+    },
+    handleSubmit() {
+      this.dialogOptions.show = false
+      this.$emit('selectOk', this.selectId)
+    }
+  }
+}
+</script>
+
+  <style scoped lang="scss">
+.move-tree {
+        background: #F9FAFB;
+        ::v-deep {
+        .el-tree {
+            background: #F9FAFB;
+            .el-tree-node {
+            // height: 40px;
+            font-size: 16px;
+            color: #333333;
+            }
+            .el-tree-node__content {
+            height: 40px;
+            }
+            .el-tree-node.is-current > .el-tree-node__content {
+            background: #dce3ed;
+            color: #666666;
+            }
+        }
+    }
+ }
+  </style>
diff --git a/src/views/caseDetails/components/AddEvidence/components/EvidenceConfirm.vue b/src/views/caseDetails/components/AddEvidence/components/EvidenceConfirm.vue
new file mode 100644
index 0000000..20dde08
--- /dev/null
+++ b/src/views/caseDetails/components/AddEvidence/components/EvidenceConfirm.vue
@@ -0,0 +1,526 @@
+<template>
+  <div class="EvidenceConfirm">
+    <div class="header">
+      <div class="nav-list">
+        <div v-for="(item,index) in navList" :key="index" class="nav-item">
+          <span>{{ item }}</span>
+          <span v-if="index !== navList.length -1">></span>
+        </div>
+      </div>
+      <div class="title">
+        <span>{{ `案件名称:${caseName}` }}</span>
+        <span>{{ `案件编号:${caseNo}` }}</span>
+      </div>
+    </div>
+    <div class="proofread-content">
+      <div class="left-tree">
+        <el-tree
+          ref="tree"
+          :data="treeData"
+          :props="defaultProps"
+          :expand-on-click-node="false"
+          default-expand-all
+          node-key="id"
+          highlight-current
+          @node-click="handleNodeClick"
+        />
+      </div>
+      <div class="mid-content">
+        <div class="left">
+          <el-scrollbar v-if="selectList.length > 0" class="left-scroll">
+            <vuedraggable v-model="selectList" animation="400" class="img_list">
+              <div v-for="(item,index) in selectList" :key="index" class="img_item" :class="[item.fileId === selectInfo.fileId?'actived':'']">
+                <img v-if="['jpg', 'png'].includes(item.fileType)" :src="getImgUrl(item.fileId)" @click="selectItem(item)">
+
+                </img>
+                <svg-icon v-if="[ 'doc', 'docx'].includes(item.fileType)" class="svg-img" icon-class="docx" />
+              </div>
+
+            </vuedraggable>
+          </el-scrollbar>
+          <div v-if="selectList.length > 0 && ['jpg', 'png'].includes(selectInfo.fileType)" class="act_img">
+            <img v-if="selectInfo.fileId" :src="getImgUrl(selectInfo.fileId)" alt="">
+          </div>
+          <div v-if="selectList.length === 0" class="empty-content">
+            <img src="@/assets/caseManagement/empty.png" alt="">
+            <span>暂无本次证据材料</span>
+          </div>
+          <span class="boder1" />
+          <span class="boder2" />
+          <span class="boder3" />
+          <span class="boder4" />
+        </div>
+        <div class="right">
+          <div class="title">识别结果</div>
+          <el-input
+            v-model="selectInfo.ocrText"
+            class="right-text"
+            type="textarea"
+          />
+          <span class="boder1" />
+          <span class="boder2" />
+          <span class="boder3" />
+          <span class="boder4" />
+        </div>
+      </div>
+      <div class="FormInfo">
+        <el-form ref="form" :model="selectInfo" :rules="rules" label-width="100px" style="margin-top: 10px">
+          <el-row :gutter="10" class="form-content">
+            <el-col :span="24">
+              <el-form-item label="证据名称" prop="title">
+                <el-input v-model="selectInfo.evidenceInfo.title" placeholder="请输入证据名称" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row v-if="selectInfo.evidenceInfo.property.length > 0" :gutter="10" class="form-content">
+            <el-col v-for="(item,index) in selectInfo.evidenceInfo.property" :key="index" :span="24">
+              <el-form-item :label="item.attrName">
+                <el-input v-if="item.attrValueType ==='text'" v-model="item.attrValue" placeholder="请输入" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+    </div>
+    <div class="footer-btns">
+      <div class="btn" @click="submit">确认并提交</div>
+      <div class="btn" @click="save">保存</div>
+      <div class="reset_btn" @click="reset">重置</div>
+    </div>
+  </div>
+
+</template>
+<script>
+import * as vuedraggable from 'vuedraggable'
+import { baseURL } from '@/config'
+import { commonDownloadFile } from '@/api/config/uploadApi'
+import { ocrAndExtractDetails, caseEvidenceVerify } from '@/api/caseDetails/evidence'
+export default {
+  name: 'RecordProofread',
+  components: { vuedraggable },
+  data() {
+    return {
+      selectList: [],
+      activedImg: '',
+      caseNo: '',
+      caseName: '',
+      dataInfo: {},
+      navList: [],
+      // 证据类型
+      evidenceTypeList: JSON.parse(sessionStorage.getItem('evidence_type')),
+      defaultProps: {
+        children: 'child',
+        label: 'directoryName'
+      },
+      rules: {
+        title: [{ required: true, message: '证据名称不能为空!', trigger: 'blur' }]
+      },
+      treeData: [],
+      flag: true,
+      selectInfo: {
+        evidenceInfo: {
+          property: [],
+          title: ''
+        },
+        ocrText: ''
+      }
+    }
+  },
+  mounted() {
+    this.getTreeList()
+    this.caseNo = this.$route.query.caseNo
+    this.caseName = this.$route.query.caseName
+  },
+  methods: {
+    getParentNames(node, treeData, parentNames = []) {
+      // 找到节点的直接父节点
+      const parent = treeData.find(parentNode =>
+        parentNode.child && parentNode.child.some(child => child.id === node.id)
+      )
+
+      // 如果找到父节点,将其名称添加到数组中,并递归检查更上层的父节点
+      if (parent) {
+        parentNames.push(parent.directoryName)
+        return this.getParentNames(parent, treeData, parentNames)
+      }
+
+      // 如果没有找到更上层的父节点,返回所有父节点的名称
+      return parentNames
+    },
+    // 查询左侧树
+    getTreeList() {
+      ocrAndExtractDetails({ caseId: this.$route.params.id, batchNo: this.$route.query.recordId }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+          this.$nextTick(() => {
+            this.handleNodeClick(res.data[0])
+          })
+        }
+      })
+    },
+    getImgUrl(id) {
+      return `${baseURL}${commonDownloadFile}${id}`
+    },
+    selectItem(item) {
+      this.selectInfo = item
+      this.activedImg = `${baseURL}${commonDownloadFile}${this.selectInfo.fileId}`
+    },
+    reset() {
+
+    },
+    findNodeById(nodes, id) {
+      for (const node of nodes) {
+        if (node.id === id) {
+          return node
+        } else if (node.child) {
+          const foundNode = this.findNodeById(node.child, id)
+          if (foundNode) {
+            return foundNode
+          }
+        }
+      }
+      return null
+    },
+    // 获取有文件的list
+    getFileList(nodes) {
+      for (const node of nodes) {
+        if (node.fileInfoList.length > 0) {
+          return node
+        } else if (node.child) {
+          const foundNode = this.getFileList(node.child)
+          if (foundNode) {
+            return foundNode
+          }
+        }
+      }
+      return null
+    },
+    handleNodeClick(data) {
+      this.selectId = data.id
+      this.navList = []
+      this.navList = this.getParentNames(data, this.treeData)
+      const nodeItem = this.findNodeById(this.treeData, this.selectId)
+      if (nodeItem.fileInfoList.length === 0) {
+        const newNodeItem = this.getFileList(nodeItem.child)
+        this.$refs.tree.setCurrentKey(newNodeItem.id)
+        this.selectList = newNodeItem.fileInfoList
+        this.selectInfo = this.selectList[0]
+      } else {
+        this.selectList = nodeItem.fileInfoList
+        this.selectInfo = this.selectList[0]
+      }
+      this.navList.push(data.directoryName)
+    },
+    checkEvidence(nodes) {
+      for (const item of nodes) {
+        if (item.fileInfoList.length > 0) {
+          for (let i = 0; i < item.fileInfoList.length; i++) {
+            if (!item.fileInfoList[i].evidenceInfo.title) {
+              this.handleNodeClick(item)
+              this.selectItem(item.fileInfoList[i])
+              this.flag = false
+              break
+            }
+          }
+        } else if (item.child) {
+          this.checkEvidence(item.child)
+        }
+      }
+    },
+    save() {
+      this.checkEvidence(this.treeData)
+      if (this.flag) {
+        caseEvidenceVerify({
+          batchNo: this.$route.query.recordId,
+          caseId: this.$route.params.id,
+          evidenceDirectoryList: this.treeData
+        }).then(res => {
+          if (res.code === 200) {
+            this.$baseMessage.success(res.msg || '保存成功!')
+            this.$store.dispatch(
+              'tabsBar/delRoute',
+              this.$route
+            )
+            this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
+          }
+        })
+      } else {
+        this.$baseMessage.error('证据不能为空!')
+      }
+    },
+    submit() {
+      this.save()
+      this.$emit('submit')
+    }
+  }
+}
+</script>
+    <style lang="scss" scoped>
+    .EvidenceConfirm {
+        display: flex;
+        flex: 1;
+        padding: 0 24px;
+        flex-direction: column;
+        :deep(.el-scrollbar__wrap) {
+          overflow-x: hidden;
+
+        }
+        .left-tree {
+                width: 210px;
+                margin-right: 16px;
+                background: #F9FAFB;
+                ::v-deep {
+                .el-tree {
+                    background: #F9FAFB;
+                    .el-tree-node {
+                    // height: 40px;
+                    font-size: 16px;
+                    color: #333333;
+                    }
+                    .el-tree-node__content {
+                    height: 40px;
+                    }
+                    .el-tree-node.is-current > .el-tree-node__content {
+                    background: #dce3ed;
+                    color: #666666;
+                    }
+                }
+            }
+
+        }
+        .proofread-content {
+           flex: 1;
+            margin-left: 18px;
+            display: flex;
+
+            .mid-content {
+                display: flex;
+                flex: 1;
+                .left {
+                    width: 55%;
+                    margin-right: 24px;
+                    position: relative;
+                    // background: #F6F8F9;
+                    border: 1px solid #DCE3EB;
+                    display: flex;
+                    padding: 8px;
+              .empty-content {
+                  flex: 1;
+                  padding: 24px;
+                  display: flex;
+                  margin-top: 16px;
+                  flex-direction: column;
+                  display: flex;
+                  justify-content: center;
+                  align-items: center;font-size: 16px;
+                  color: #333333;
+                  img {
+                    width: 200px;
+                    height: 200px;
+                  }
+              }
+              .left-scroll {
+                background: #F6F8F9;
+                width: 150px;
+                margin-right: 14px;
+              }
+              .act_img {
+                padding: 16px 28px;
+                flex: 1;
+                background: #F6F8F9;
+                height: calc(100vh - 420px);
+                background-size: 100% 100%;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                img {
+                  height: 100%;
+                }
+              }
+              .actived {
+                border: 2px solid #3763FF !important;
+              }
+            }
+            .right {
+              width: 45%;
+              position: relative;
+              border: 1px solid #DCE3EB;
+              display: flex;
+              padding: 8px;
+              flex-direction: column;
+              .title {
+                background: #F6F8F9;
+                border-bottom: 1px solid #DCE3EB;
+                height: 70px;
+                padding-left: 24px;
+                line-height: 70px;
+                font-weight: bold;
+                font-size: 18px;
+                color: #333333;
+              }
+              .right-text {
+                width: 100%;
+                height: 500px;
+              }
+            }
+            }
+            .FormInfo {
+            width: 410px;
+            background: #F6F8F9;
+            border-radius: 8px 8px 8px 8px;
+            margin-left: 24px;
+            // height: calc(100vh - 350px);
+            padding: 0 24px;
+            margin-bottom: 72px;
+            .expand {
+              display: flex;
+              flex-direction: row-reverse;
+              padding: 0 24px;
+              align-items: center;
+              cursor: pointer;
+              margin-bottom: 16px;
+              img {
+                width: 18px;
+                height: 18px;
+                margin-right: 8px;
+              }
+              .line {
+                flex: 1;
+                height: 1px;
+                background: #E9E9E9;
+                margin-right: 8px;
+              }
+            }
+        }
+            .img_list {
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                padding-top: 25px;
+                overflow-x: hidden;
+                padding: 24px;
+                background: #F6F8F9;
+                .img_item {
+                    width: 98px;
+                    height: 138px;
+                    margin-bottom: 16px;
+                    border-radius: 6px 6px 6px 6px;
+                    border: 1px solid #D1D3D6;
+                    cursor: move;
+                }
+                .svg-img {
+                  width: 98px;
+                    height: 138px;
+                    margin-bottom: 16px;
+                    border-radius: 6px 6px 6px 6px;
+                    border: 1px solid #D1D3D6;
+                    cursor: move;
+                }
+            }
+            .boder1 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                left: 0;
+                top: 0;
+                border-top: 2px solid #2073FF;
+                border-left: 2px solid #2073FF;
+            }
+            .boder2 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                right: 0;
+                top: 0;
+                border-top: 2px solid #2073FF;
+                border-right: 2px solid #2073FF;
+            }
+            .boder3 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                left: 0;
+                bottom: 0;
+                border-bottom: 2px solid #2073FF;
+                border-left: 2px solid #2073FF;
+            }
+            .boder4 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                right: 0;
+                bottom: 0;
+                border-bottom: 2px solid #2073FF;
+                border-right: 2px solid #2073FF;
+            }
+        }
+        .header {
+            display: flex;
+            justify-content: space-between;
+            padding-left: 210px;
+            .nav-list {
+            display: flex;
+            font-size: 16px;
+            color: #333333;
+            margin-bottom: 16px;
+            .nav-item {
+                display: flex;
+                span {
+                    margin-right: 16px;
+                }
+            }
+        }
+            .title {
+                // display: flex;
+                text-align: right;font-size: 16px;
+                color: #333333;
+                margin-bottom: 24px;
+                span {
+                    margin-left: 32px;
+                }
+             }
+        }
+        .footer-btns {
+          padding-top: 24px;
+          height: 68px;
+          display: flex;
+          flex-direction: row-reverse;
+          .btn {
+            width: 188px;
+            height: 48px;
+            background: #3763FF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #FFFFFF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+          .reset_btn {
+            width: 188px;
+            height: 48px;
+            background: #FFFFFF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+        }
+    }
+    </style>
+  <style lang="scss" scoped>
+
+    ::v-deep .el-textarea__inner {
+    height: calc(100vh - 450px);
+    border: none;
+    box-shadow: none;
+  }
+  </style>
diff --git a/src/views/caseDetails/components/AddEvidence/components/EvidenceExtract.vue b/src/views/caseDetails/components/AddEvidence/components/EvidenceExtract.vue
new file mode 100644
index 0000000..65b9236
--- /dev/null
+++ b/src/views/caseDetails/components/AddEvidence/components/EvidenceExtract.vue
@@ -0,0 +1,216 @@
+<template>
+  <div class="EvidenceExtract">
+    <div class="title">
+      <span>{{ `案件名称:${caseName}` }}</span>
+      <span>{{ `案件编号:${caseNo}` }}</span>
+    </div>
+    <vxe-grid v-bind="gridOptions" class="record_table">
+      <template #status="{row}">
+        <div v-if="row.status === '2'" class="status">
+          <img src="@/assets/record/success.png" alt="">
+          <span>识别成功</span>
+        </div>
+        <div v-if="row.status === '3'" class="status">
+          <img src="@/assets/record/error.png" alt="">
+          <span>识别失败</span>
+        </div>
+        <!-- <div v-if="row.status === '0'">
+          <img src="@/assets/record/error.png" alt="">
+          <span>未识别</span>
+        </div> -->
+        <div v-if="row.status === '1' || row.status === '0'" class="status">
+          <!-- <img src="@/assets/record/error.png" alt=""> -->
+          <div v-loading="true" style="width: 20px;height: 20px;margin-right: 8px;position: relative;top: 12px;" />
+          <span>正在识别</span>
+        </div>
+      </template>
+      <template #opera="{ row, rowIndex}">
+        <div class="btn-list">
+          <!-- <img src="@/assets/record/reset_identify.png" alt=""> -->
+          <!-- <img src="@/assets/record/view_detail.png" alt=""> -->
+          <el-image
+            style="width: 16px; height: 16px;margin-right: 16px;"
+            :src="detailImg"
+            :preview-src-list="getImgUrlList(row)"
+            fit="cover"
+            @click="openDeatils(row)"
+          />
+          <!-- <img src="@/assets/record/del.png" alt="" @click="del(row,rowIndex )"> -->
+        </div>
+      </template>
+    </vxe-grid>
+    <div class="footer-btns">
+      <div class="reset_btn" @click="closed">关闭,后台提取</div>
+      <div class="btn" @click="next">下一步,内容确认</div>
+    </div>
+  </div>
+
+</template>
+<script>
+import * as vuedraggable from 'vuedraggable'
+import { baseURL } from '@/config'
+import { commonDownloadFile } from '@/api/config/uploadApi'
+import { saveRecord, deleteFile } from '@/api/caseDetails/ocr'
+import { ocrAndExtractList } from '@/api/caseDetails/evidence'
+export default {
+  name: 'EvidenceExtract',
+  components: { vuedraggable },
+  data() {
+    return {
+      detailImg: require('@/assets/record/view_detail.png'),
+      caseNo: '',
+      caseName: '',
+      props: {
+        recordId: {
+          type: String,
+          default: ''
+        }
+      },
+      gridOptions: {
+
+        columns: [
+          { title: '序号', type: 'seq', width: '80px' },
+          { title: '证据名称', field: 'evidenceName' },
+          { title: '附件名称', field: 'attachmentName' },
+          { title: '模板类型', field: 'templateName',width:'200px'  },
+          { title: '证据类型', field: 'evidenceTypeName',width:'200px'  },
+          { title: '附件大小', field: 'attachmentSize',width:'150px' },
+          { title: '状态', slots: { default: 'status' }, align: 'center' },
+          // { title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '200px' }
+        ],
+        data: [
+        ]
+      },
+      srcList: []
+    }
+  },
+  mounted() {
+    this.getDataList()
+    this.caseNo = this.$route.query.caseNo
+    this.caseName = this.$route.query.caseName
+  },
+  methods: {
+    getImgUrlList(row) {
+      return [`${baseURL}${commonDownloadFile}${row.fileId}`]
+    },
+    getDataList() {
+      ocrAndExtractList({
+        batchNo: this.$route.query.recordId,
+        caseId: this.$route.params.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.$set(this.gridOptions, 'data', res.data)
+          this.gridOptions.data = res.data
+          for (const item of res.data) {
+            if (item.status !== '2' && item.status !== '3') {
+              setTimeout(() => {
+                this.getDataList()
+              }, 3000)
+              return
+            }
+          }
+        }
+      })
+    },
+    del(row, index) {
+      if (this.gridOptions.data.length === 1) {
+        this.$baseMessage.error('至少保留一条数据!')
+        return
+      }
+      deleteFile({ recordId: this.$route.query.recordId, fileId: row.fileId }).then(res => {
+        if (res.code === 200) {
+          this.gridOptions.data.splice(index, 1)
+          this.$baseMessage.success('删除成功!')
+        }
+      })
+    },
+    closed() {
+      this.$store.dispatch(
+        'tabsBar/delRoute',
+        this.$route
+      )
+      this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
+    },
+    next() {
+      this.$emit('save', this.$route.query.recordId)
+    }
+  }
+}
+</script>
+  <style lang="scss" scoped>
+  .EvidenceExtract {
+    display: flex;
+    flex-direction: column;
+    padding: 0 24px;
+    .title {
+        // display: flex;
+        text-align: right;font-size: 16px;
+        color: #333333;
+        margin-bottom: 24px;
+        span {
+            margin-left: 32px;
+        }
+    }
+    .record_table {
+      flex: 1;
+      margin-left: 18px;
+    }
+    .status {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      img {
+        width: 20px;
+        height: 20px;
+        margin-right: 8px;
+      }
+      ::v-deep {
+        .el-loading-spinner .circular {
+          width: 20px;
+          height: 20px;
+        }
+      }
+    }
+    .btn-list {
+      img {
+        width: 16px;
+        height: 16px;
+        cursor: pointer;
+        margin-right: 16px;
+      }
+    }
+    .footer-btns {
+      position: absolute;
+      right: 24px;
+      bottom: 24px;
+      display: flex;
+      .reset_btn {
+            width: 188px;
+            height: 48px;
+            background: #FFFFFF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+      .btn {
+        width: 188px;
+        height: 48px;
+        background: #3763FF;
+        box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+        border-radius: 6px 6px 6px 6px;
+        text-align: center;
+        line-height: 48px;
+        font-size: 16px;
+        color: #FFFFFF;
+        cursor: pointer;
+        margin-left: 24px;
+      }
+    }
+  }
+  </style>
diff --git a/src/views/caseDetails/components/AddEvidence/components/UploadEvidence.vue b/src/views/caseDetails/components/AddEvidence/components/UploadEvidence.vue
new file mode 100644
index 0000000..7d072d0
--- /dev/null
+++ b/src/views/caseDetails/components/AddEvidence/components/UploadEvidence.vue
@@ -0,0 +1,516 @@
+<template>
+  <div class="UploadEvidence">
+    <div class="left-tree">
+      <el-input
+        v-model="filterText"
+        prefix-icon="el-icon-search"
+        placeholder="搜索名称"
+      />
+      <el-tree
+        :data="treeData"
+        :props="defaultProps"
+        node-key="id"
+        current-node-key="1"
+        highlight-current
+        default-expand-all
+        @node-click="handleNodeClick"
+      />
+    </div>
+    <div class="main-content">
+      <div class="nav-list">
+        <div v-for="(item,index) in navList" :key="index" class="nav-item">
+          <span>{{ item }}</span>
+          <span v-if="index !== navList.length -1">></span>
+        </div>
+      </div>
+      <div class="btn-list">
+        <el-button type="primary" icon="el-icon-folder-add" @click="addFolder">新建文件夹</el-button>
+        <el-upload
+          :headers="{
+            token: token
+          }"
+          :action="uploadOption.action"
+          :accept="uploadOption.accept"
+          multiple
+          :on-success="handleSuccess"
+          :before-upload="beforeUpload"
+          :show-file-list="false"
+          class="drag-content btn-list"
+        >
+          <el-button type="primary" style="height: 42px;margin-left: 24px;" icon="el-icon-circle-plus-outline">添加证据</el-button>
+        </el-upload>
+        <div class="plain-btn" @click="move">移动</div>
+        <!-- <div class="plain-btn">删除文件夹</div> -->
+        <div class="plain-btn" @click="del">删除</div>
+        <div class="case-content">
+          <span>{{ `案件名称:${caseName}` }}</span>
+          <span>{{ `案件编号:${caseNo}` }}</span>
+        </div>
+      </div>
+      <div v-if="selectList.length > 0" class="file-content">
+        <vuedraggable v-model="selectList" animation="400" class="file-list">
+          <div v-for="(item,index) in selectList" :key="index" class="file-item" @click="selectItem(index)">
+            <div class="main-content">
+              <img v-if="item.type === 1" src="@/assets/file/type1.png" alt="">
+              <svg-icon v-if="item.type === 3" class="svg-img" icon-class="docx" />
+              <img v-if="item.type === 2" class="file-img" :src="getImgUrl(item.fileId)" alt="">
+            </div>
+            <div class="footer">{{ item.fileName }}</div>
+            <div v-if="!item.check" class="no-select" />
+            <img v-else src="@/assets/file/check.png" class="selected" alt="">
+          </div>
+        </vuedraggable>
+
+      </div>
+      <div v-else class="empty-content">
+        <img src="@/assets/caseManagement/empty.png" alt="">
+        <span>暂无本次证据材料</span>
+      </div>
+      <div class="footer-btns">
+
+        <div class="btn" @click="save">下一步,证据识别</div>
+        <div class="reset_btn" @click="closed">关闭</div>
+      </div>
+    </div>
+    <AddFolder ref="AddFolderRef" @addOk="addFolderOk" />
+    <MoveFolder ref="MoveFolderRef" @selectOk="selectOk" />
+  </div>
+</template>
+<script>
+import { baseURL } from '@/config'
+import { getAccessToken } from '@/utils/accessToken'
+import { commonDownloadFile } from '@/api/config/uploadApi'
+import * as vuedraggable from 'vuedraggable'
+import AddFolder from '../AddFolder.vue'
+import MoveFolder from '../MoveFolder.vue'
+import { getCaseEvidenceFileTree, ocrAndExtract } from '@/api/caseDetails/evidence'
+export default {
+  name: 'UploadEvidence',
+  components: { vuedraggable, AddFolder, MoveFolder },
+  data() {
+    return {
+      // 上传配置
+      uploadOption: {
+        action: `${baseURL}/minio/uploadFile`,
+        accept: '.bmp,.jpg,.png,.doc,.docx'
+      },
+      token: getAccessToken(),
+      filterText: '',
+      defaultProps: {
+        children: 'child',
+        label: 'directoryName'
+      },
+      navList: ['未分类'],
+      caseNo: '',
+      caseName: '',
+      selectList: [],
+      selectId: '1',
+      treeData: []
+    }
+  },
+  mounted() {
+    this.getTreeList()
+    this.caseNo = this.$route.query.caseNo
+    this.caseName = this.$route.query.caseName
+  },
+  methods: {
+    beforeUpload(file) {
+      const isLt5M = file.size / 1024 / 1024 < 5
+      const filename = file.name
+      const postfix = filename.substring(filename.lastIndexOf('.'))
+      if (!['.jpg', '.png', '.doc', '.docx'].includes(postfix)) {
+        this.$message.error('上传的文件格式不符合要求!')
+        return false
+      }
+      if (!isLt5M) {
+        this.$message.error('上传文件大小不能超过 5MB!')
+        return false
+      }
+      return true
+    },
+    handleSuccess(res, file) {
+      const filename = file.name
+      const postfix = filename.substring(filename.lastIndexOf('.'))
+      const obj = {
+        fileName: file.name,
+        fileId: res.data,
+        type: 2,
+        check: false
+      }
+      if (['.doc', '.docx'].includes(postfix)) {
+        obj.type = 3
+      }
+      // const selectItem = this.findSelectNode(this.treeData)
+      this.addNodeProperty(this.selectId, obj)
+      this.selectList.push(obj)
+    },
+    del() {
+      const list = this.getSelectList()
+      if (list.length === 0) {
+        this.$baseMessage.error('请选择文件!')
+        return
+      }
+      list.forEach(e => {
+        if (e.type === 1) {
+          this.$baseMessage.error('不能删除文件夹!')
+          return
+        }
+      })
+      this.delFiles()
+    },
+    // 删除文件
+    delFiles() {
+      const node = this.findNodeById(this.treeData, this.selectId)
+      for (let i = node.fileInfoList.length - 1; i >= 0; i--) {
+        if (node.fileInfoList[i].check === true) {
+          node.fileInfoList.splice(i, 1)
+        }
+      }
+      this.selectList = JSON.parse(JSON.stringify(node.fileInfoList))
+    },
+    // 选择移动的文件夹
+    selectOk(val) {
+      if (this.selectId === val) {
+        this.$message.error('不能移动到相同的文件夹')
+        return false
+      }
+      const list = this.getSelectList()
+      this.moveNodeFileList(val, list)
+      this.delFiles()
+    },
+    moveNodeFileList(toId, list) {
+      const node = this.findNodeById(this.treeData, toId)
+      for (const item of list) {
+        node.fileInfoList.push(item)
+      }
+    },
+    addNodeProperty(nodeId, data) {
+      const node = this.findNodeById(this.treeData, nodeId)
+      if (node) {
+        node.fileInfoList.push(data)
+        node.fileIdList.push(data.fileId)
+      }
+      console.log('111', this.treeData)
+    },
+    findNodeById(nodes, id) {
+      for (const node of nodes) {
+        if (node.id === id) {
+          return node
+        } else if (node.child) {
+          const foundNode = this.findNodeById(node.child, id)
+          if (foundNode) {
+            return foundNode
+          }
+        }
+      }
+      return null
+    },
+    getParentNames(node, treeData, parentNames = []) {
+      // 找到节点的直接父节点
+      const parent = treeData.find(parentNode =>
+        parentNode.child && parentNode.child.some(child => child.id === node.id)
+      )
+
+      // 如果找到父节点,将其名称添加到数组中,并递归检查更上层的父节点
+      if (parent) {
+        parentNames.push(parent.directoryName)
+        return this.getParentNames(parent, treeData, parentNames)
+      }
+
+      // 如果没有找到更上层的父节点,返回所有父节点的名称
+      return parentNames
+    },
+    // 查询左侧树
+    getTreeList() {
+      getCaseEvidenceFileTree({ caseId: this.$route.params.id }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+          this.treeData.unshift({
+            directoryName: '未分类',
+            id: '1',
+            fileIdList: [],
+            fileInfoList: []
+          })
+        }
+      })
+    },
+    handleNodeClick(data) {
+      this.selectId = data.id
+      this.selectList = []
+      this.navList = []
+      if (this.selectId === '1') {
+        this.selectList = JSON.parse(JSON.stringify(this.treeData[0].fileInfoList))
+      } else {
+        const nodeItem = this.findNodeById(this.treeData, this.selectId)
+        if (nodeItem.child && nodeItem.child.length > 0) {
+          for (const item of nodeItem.child) {
+            this.selectList.push({
+              fileName: item.directoryName,
+              type: 1,
+              check: false
+            })
+          }
+        }
+        for (const item of nodeItem.fileInfoList) {
+          this.selectList.push(item)
+        }
+      }
+
+      this.navList = this.getParentNames(data, this.treeData)
+      this.navList.push(data.directoryName)
+    },
+    // 选择文件
+    selectItem(index) {
+      this.selectList[index].check = !this.selectList[index].check
+    },
+    addFolderOk(item) {
+      const node = this.findNodeById(this.treeData, item.parentId)
+      node.child.push({
+        ...item,
+        child: [],
+        fileIdList: [],
+        fileInfoList: []
+      })
+    },
+    getSelectList() {
+      const list = []
+      for (const item of this.selectList) {
+        if (item.check) {
+          list.push(item)
+        }
+      }
+      return list
+    },
+    // 移动到文件夹
+    move() {
+      const list = this.getSelectList()
+      if (list.length === 0) {
+        this.$baseMessage.error('请选择文件!')
+        return
+      }
+      list.forEach(e => {
+        if (e.type === 1) {
+          this.$baseMessage.error('不能移动文件夹!')
+          return
+        }
+      })
+      this.$refs.MoveFolderRef.show()
+    },
+    closed() {
+      this.$store.dispatch(
+        'tabsBar/delRoute',
+        this.$route
+      )
+      this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
+    },
+    save() {
+      if (this.treeData[0].fileInfoList && this.treeData[0].fileInfoList.length > 0) {
+        this.$baseMessage.error('请分类!')
+        return
+      }
+      const list = JSON.parse(JSON.stringify(this.treeData))
+      list.splice(0, 1)
+      ocrAndExtract({
+        evidenceFileList: list,
+        caseId: this.$route.params.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.$baseMessage.success('新增成功!')
+          this.$emit('save', res.data)
+        }
+      })
+    },
+    addFolder() {
+      this.$refs.AddFolderRef.show()
+    },
+    getImgUrl(id) {
+      return `${baseURL}${commonDownloadFile}${id}`
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.UploadEvidence {
+    display: flex;
+    padding: 0 24px;
+    flex: 1;
+    .left-tree {
+        width: 210px;
+        margin-right: 16px;
+        background: #F9FAFB;
+        ::v-deep {
+        .el-tree {
+            background: #F9FAFB;
+            .el-tree-node {
+            // height: 40px;
+            font-size: 16px;
+            color: #333333;
+            }
+            .el-tree-node__content {
+            height: 40px;
+            }
+            .el-tree-node.is-current > .el-tree-node__content {
+            background: #dce3ed;
+            color: #666666;
+            }
+        }
+    }
+
+    }
+    .main-content {
+        display: flex;
+        flex-direction: column;
+        flex: 1;
+        .svg-img {
+
+        }
+        .nav-list {
+            display: flex;
+            font-size: 16px;
+            color: #333333;
+            margin-bottom: 16px;
+            .nav-item {
+                display: flex;
+                span {
+                    margin-right: 16px;
+                }
+            }
+        }
+        .btn-list {
+            display: flex;
+            position: relative;
+            .plain-btn {
+                height: 42px;
+                background: #FFFFFF;
+                border-radius: 6px 6px 6px 6px;
+                border: 1px solid #3763FF;
+                padding: 0 24px;
+                line-height: 42px;
+                cursor: pointer;
+                margin-left: 24px;font-size: 16px;
+                color: #3763FF;
+            }
+            .case-content {
+                position: absolute;
+                right: 0px;
+                span {
+                    font-size: 16px;
+                    color: #333333;
+                    margin-left: 32px;
+                }
+            }
+        }
+        .file-content {
+            flex: 1;
+            border: 1px dashed #3763ff;
+            padding: 24px;
+            display: flex;
+            margin-top: 16px;
+            .file-list {
+              display: flex;
+            }
+            .file-item {
+                width: 190px;
+                height: 230px;
+                position: relative;
+                margin-right: 16px;
+                cursor: pointer;
+                .main-content {
+                    background: #F5F5F5;
+                    height: 188px;
+                    display: flex;
+                    justify-content: center;
+                    align-items: center;
+                    .svg-img, img {
+                        width: 120px;
+                        height: 120px;
+                    }
+                    .file-img {
+                      width: 132px;
+                      height: 188px;
+                    }
+                }
+                .footer {
+                    line-height: 42px;
+                    height: 42px;
+                    background: #FFFFFF;
+                    border-radius: 0px 0px 12px 12px;
+                    padding-left: 16px;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    vertical-align: middle;
+                    box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.08);font-size: 16px;
+                    color: #333333;
+                }
+                .no-select {
+                    position: absolute;
+                    top: 12px;
+                    right: 12px;width: 22px;
+                    height: 22px;
+                    background: #FFFFFF;
+                    border-radius: 4px 4px 4px 4px;
+                    border: 1px solid #D9D9D9;
+                    cursor: pointer;
+                }
+                .selected {
+                    width: 22px;
+                    height: 22px;
+                    position: absolute;
+                    top: 12px;
+                    right: 12px;
+                    cursor: pointer;
+                }
+            }
+        }
+        .empty-content {
+            flex: 1;
+            border: 1px dashed #3763ff;
+            padding: 24px;
+            display: flex;
+            margin-top: 16px;
+            flex-direction: column;
+            display: flex;
+            justify-content: center;
+            align-items: center;font-size: 16px;
+            color: #333333;
+            img {
+              width: 200px;
+              height: 200px;
+            }
+        }
+        .footer-btns {
+          display: flex;
+          flex-direction: row-reverse;
+          padding: 24px 0;
+          .reset_btn {
+            width: 188px;
+            height: 48px;
+            background: #FFFFFF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+          .btn {
+            width: 188px;
+            height: 48px;
+            background: #3763FF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #FFFFFF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+        }
+    }
+}
+</style>
diff --git a/src/views/caseDetails/components/AddEvidence/edit.vue b/src/views/caseDetails/components/AddEvidence/edit.vue
new file mode 100644
index 0000000..518a2fb
--- /dev/null
+++ b/src/views/caseDetails/components/AddEvidence/edit.vue
@@ -0,0 +1,162 @@
+<template>
+  <div class="EditEvidence">
+    <div class="step-list">
+      <div class="step-list-item">
+        <img :src="actUploadImg" alt="">
+        <span class="actived">证据上传并归档</span>
+      </div>
+      <div :class="[activeStep > 0 ?'act-step-line':'step-line']">
+        <span>>></span>
+      </div>
+      <div class="step-list-item">
+        <img v-if="activeStep > 0" :src="actIdentifyImg" alt="">
+        <img v-else :src="identifyImg" alt="">
+        <span :class="[activeStep > 0 ?'actived':'']">证据识别并提取</span>
+      </div>
+      <div :class="[activeStep > 0 ?'act-step-line':'step-line']">
+        <span>>></span>
+      </div>
+      <div class="step-list-item">
+        <img v-if="activeStep > 1" :src="actUploadImg" alt="">
+        <img v-else :src="uploadImg" alt="">
+        <span :class="[activeStep > 1 ?'actived':'']">证据确认</span>
+      </div>
+    </div>
+    <UploadEvidence v-show="activeStep === 0" ref="UploadEvidenceRef" @save="saveOk" />
+    <EvidenceExtract v-if="activeStep === 1" ref="EvidenceExtractRef" @save="saveOk" />
+    <EvidenceConfirm v-if="activeStep === 2" ref="EvidenceConfirmRef" />
+  </div>
+</template>
+<script>
+import { baseURL } from '@/config'
+import { commonDownloadFile } from '@/api/config/uploadApi'
+import * as vuedraggable from 'vuedraggable'
+import UploadEvidence from './components/UploadEvidence.vue'
+import EvidenceExtract from './components/EvidenceExtract.vue'
+import EvidenceConfirm from './components/EvidenceConfirm.vue'
+export default {
+  name: 'EditEvidence',
+  components: { vuedraggable, UploadEvidence, EvidenceExtract, EvidenceConfirm },
+  data() {
+    return {
+      fileList: [],
+      actRecordImg: require('@/assets/record/act_record.png'),
+      actIdentifyImg: require('@/assets/record/act_identify.png'),
+      actUploadImg: require('@/assets/record/act_upload.png'),
+      identifyImg: require('@/assets/record/identify.png'),
+      uploadImg: require('@/assets/record/upload.png'),
+      activeStep: 0,
+      status: '1',
+      interval: undefined
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    getImgUrl(id) {
+      return `${baseURL}${commonDownloadFile}${id}`
+    },
+    beforeUpload(file) {
+      const isLt5M = file.size / 1024 / 1024 < 5
+      const filename = file.name
+      const postfix = filename.substring(filename.lastIndexOf('.'))
+      if (!['.jpg', '.png'].includes(postfix)) {
+        this.$message.error('上传图片只能是 JPG,PNG 格式!')
+        return false
+      }
+      if (!isLt5M) {
+        this.$message.error('上传头像图片大小不能超过 5MB!')
+        return false
+      }
+      if (this.fileList >= 12) {
+        this.$message.error('上传文件数量不能超过12张!')
+        return false
+      }
+      return true
+    },
+    del(index) {
+      this.fileList.splice(index, 1)
+    },
+    handleSuccess(res, file) {
+      const obj = {
+        name: file.name,
+        fileId: res.data
+      }
+      this.fileList.push(obj)
+      this.imgOcrIdentify(res.data)
+    },
+    saveOk() {
+      this.activeStep += 1
+    },
+    async submit() {
+
+    }
+  }
+}
+</script>
+
+  <style scoped lang="scss">
+  .EditEvidence {
+    width: 100%;
+      height: 100%;
+      background: #fff;
+    display: flex;
+    flex-direction: column;
+    .step-list {
+        display: flex;
+        align-items: center;
+        width: 100%;
+        justify-content: center;
+        padding-top: 36px;
+        margin-bottom: 32px;
+        .step-list-item {
+          display: flex;
+          align-items: center;
+          span {
+            font-size: 20px;
+            color: #999999;
+            margin-left: 16px;
+            margin-right: 16px;
+          }
+          .actived {
+            color: #3763FF;
+          }
+        }
+        .step-line {
+          width: 137px;
+          height: 2px;
+          border-top: 2px dashed #999999;
+          display: flex;
+          position: relative;
+          margin-right: 42px;
+          span {
+            position: absolute;
+            right: -24px;
+            top: -11px;
+            color: #999999;
+            font-size: 16px;
+          }
+        }
+        .act-step-line {
+          width: 137px;
+          height: 2px;
+          border-top: 2px dashed #3763FF;
+          display: flex;
+          position: relative;
+          margin-right: 42px;
+          span {
+            position: absolute;
+            right: -24px;
+            top: -11px;
+            color: #3763FF;
+            font-size: 16px;
+          }
+        }
+        img {
+          width: 36px;
+          height: 36px;
+        }
+      }
+  }
+  </style>
diff --git a/src/views/caseDetails/components/AddEvidence/index.vue b/src/views/caseDetails/components/AddEvidence/index.vue
index 2aee4fa..073c9b3 100644
--- a/src/views/caseDetails/components/AddEvidence/index.vue
+++ b/src/views/caseDetails/components/AddEvidence/index.vue
@@ -1,108 +1,56 @@
 <template>
-  <div v-loading="loading" element-loading-text="识别中..." class="AddEvidence">
-    <div v-if="fileList.length === 0 && status === '1'" class="no-upload-main">
-      <el-upload
-        drag
-        :headers="{
-          token: token
-        }"
-        :action="uploadOption.action"
-        :accept="uploadOption.accept"
-        multiple
-        :on-success="handleSuccess"
-        :before-upload="beforeUpload"
-        :show-file-list="false"
-        class="drag-content"
-      >
-        <div class="upload-content">
-          <!-- <div>点击或将文件拖拽到这里上传</div>
-              <div>支持PNG、JPG、JPEG、BMP、WEBP图片格式OCR转换,一次可以处理12张</div>
-              <el-button type="primary" icon="el-icon-upload2" style="margin-top: 10px">点击上传</el-button> -->
-          <img src="@/assets/record/upload_content.png" alt="">
-          <div class="upload-content-main">
-            <span class="title">点击或将文件拖拽到这里上传</span>
-            <span class="desc">支持PNG、JPG、JPEG图片格式OCR转换,一次可以处理12张</span>
-          </div>
-        </div>
-      </el-upload>
-    </div>
-    <div v-if=" fileList.length > 0&& status === '1'" class="handle-upload-main">
-      <el-upload
-        drag
-        :headers="{
-          token: token
-        }"
-        :action="uploadOption.action"
-        :accept="uploadOption.accept"
-        multiple
-        :on-success="handleSuccess"
-        :before-upload="beforeUpload"
-        :show-file-list="false"
-        class="handle-drag-content"
-      >
-
-        <div class="upload-content-main">
-          <span class="title">点击或将文件拖拽到这里上传</span>
-          <span class="desc">支持PNG、JPG、JPEG图片格式OCR转换,一次可以处理12张</span>
-          <div class="up-btn">
-            <img src="@/assets/record/upload_btn.png" alt="">
-            <span>选择文件</span>
-          </div>
-        </div>
-
-      </el-upload>
-      <div class="upload-list">
-        <vuedraggable v-model="fileList" animation="400" class="img_list">
-          <!-- <transition-group> -->
-          <div v-for="(item,index) in fileList" :key="index" class="img_item">
-            <!-- <img :src="getImgUrl(item.id)" alt=""> -->
-            <el-image
-              class="img_item_url"
-              :src="getImgUrl(item.fileId)"
-              :zoom-rate="1.2"
-              :max-scale="7"
-              :min-scale="0.2"
-              :preview-src-list="[getImgUrl(item.fileId)]"
-              fit="cover"
-            />
-            <span>{{ item.name }}</span>
-            <img class="del" @click="del(index)" src="@/assets/record/del_img.png" alt="">
-          </div>
-          <!-- </transition-group> -->
-        </vuedraggable>
+  <div class="AddEvidence">
+    <div class="step-list">
+      <div class="step-list-item">
+        <img :src="actUploadImg" alt="">
+        <span class="actived">证据上传并归档</span>
+      </div>
+      <div :class="[activeStep > 0 ?'act-step-line':'step-line']">
+        <span>>></span>
+      </div>
+      <div class="step-list-item">
+        <img v-if="activeStep > 0" :src="actIdentifyImg" alt="">
+        <img v-else :src="identifyImg" alt="">
+        <span :class="[activeStep > 0 ?'actived':'']">证据识别并提取</span>
+      </div>
+      <div :class="[activeStep > 0 ?'act-step-line':'step-line']">
+        <span>>></span>
+      </div>
+      <div class="step-list-item">
+        <img v-if="activeStep > 1" :src="actUploadImg" alt="">
+        <img v-else :src="uploadImg" alt="">
+        <span :class="[activeStep > 1 ?'actived':'']">证据确认</span>
       </div>
-      <div class="submit-btn" @click="submit">内容核实</div>
     </div>
-    <EvidenceProofread v-if="status ==='2'" :file-list="fileList" />
+    <UploadEvidence v-show="activeStep === 0" ref="UploadEvidenceRef" @save="saveOk" />
+    <EvidenceExtract v-if="activeStep === 1" ref="EvidenceExtractRef" @save="saveOk" />
+    <EvidenceConfirm v-if="activeStep === 2" ref="EvidenceConfirmRef"  />
   </div>
 </template>
 <script>
 import { baseURL } from '@/config'
-import { getAccessToken } from '@/utils/accessToken'
 import { commonDownloadFile } from '@/api/config/uploadApi'
 import * as vuedraggable from 'vuedraggable'
-import EvidenceProofread from './EvidenceProofread.vue'
-import { submitOrcTask, retrieveTitle, retrieveTitleProcess } from '@/api/caseDetails/ocr'
+import UploadEvidence from './components/UploadEvidence.vue'
+import EvidenceExtract from './components/EvidenceExtract.vue'
+import EvidenceConfirm from './components/EvidenceConfirm.vue'
 export default {
   name: 'AddEvidence',
-  components: { vuedraggable, EvidenceProofread },
+  components: { vuedraggable, UploadEvidence, EvidenceExtract, EvidenceConfirm },
   data() {
     return {
       fileList: [],
+      actRecordImg: require('@/assets/record/act_record.png'),
+      actIdentifyImg: require('@/assets/record/act_identify.png'),
+      actUploadImg: require('@/assets/record/act_upload.png'),
+      identifyImg: require('@/assets/record/identify.png'),
+      uploadImg: require('@/assets/record/upload.png'),
+      activeStep: 0,
+      recordId: '',
       status: '1',
-      loading: false,
-      // 上传配置
-      uploadOption: {
-        action: `${baseURL}/minio/uploadFile`,
-        accept: '.bmp,.jpg,.png'
-      },
-      interval: undefined,
-      token: getAccessToken()
+      interval: undefined
     }
   },
-  beforeDestroy() {
-    clearInterval(this.interval) // 组件销毁前清除定时器
-  },
   mounted() {
 
   },
@@ -119,11 +67,7 @@ export default {
         return false
       }
       if (!isLt5M) {
-        this.$message.error('上传头像图片大小不能超过 5MB!')
-        return false
-      }
-      if (this.fileList >= 12) {
-        this.$message.error('上传文件数量不能超过12张!')
+        this.$message.error('上传图片大小不能超过 5MB!')
         return false
       }
       return true
@@ -139,34 +83,13 @@ export default {
       this.fileList.push(obj)
       this.imgOcrIdentify(res.data)
     },
-    // 图片识别
-    imgOcrIdentify(id) {
-      submitOrcTask({ fileId: id })
-    },
-    // 查询进度
-    queryProcess() {
-      const list = []
-      this.fileList.forEach(e => {
-        list.push(e.fileId)
-      })
-      retrieveTitleProcess(list).then(res => {
-        if (res.code === 200 && res.data === true) {
-          this.loading = false
-          this.status = '2'
-          clearInterval(this.interval)
-        }
-      })
+    saveOk(val) {
+      this.activeStep += 1
+      this.recordId = val
+      this.$route.query.recordId = val
     },
     async submit() {
-      const list = []
-      this.fileList.forEach(e => {
-        list.push(e.fileId)
-      })
-      this.loading = true
-      const res = await retrieveTitle(list)
-      if (res.code === 200) {
-        this.interval = setInterval(this.queryProcess, 3000)
-      }
+
     }
   }
 }
@@ -174,184 +97,65 @@ export default {
 
 <style scoped lang="scss">
 .AddEvidence {
-  display: flex;
-  background: #FFFFFF;
-  height: 100%;
-
-  .no-upload-main {
-
-    margin: auto 270px;
-    flex: 1;
-    border: 1px dashed  #3763FF;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: calc(100vh - 400px);
-    .drag-content {
-        .upload-content {
-            position: relative;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            img {
-                width: 463px;
-                height:361px ;
-            }
-            .upload-content-main {
-                position: absolute;
-                top: 200px;
-
-                display: flex;
-                flex-direction: column;
-                .title {
-                    font-size: 20px;
-                    color: #333333;
-                }
-                .desc {
-                    font-size: 16px;
-                    color: #999999;
-                    margin-top: 12px;
-                }
-            }
-
-        }
-    }
-  }
-  .handle-upload-main {
+  width: 100%;
+    height: 100%;
+    background: #fff;
     display: flex;
     flex-direction: column;
-    margin-top: 16px;
-    flex: 1;
-    // align-items: center;
-    justify-content: center;
-    height: calc(100vh - 330px);
-    padding: 0 26px;
-    .handle-drag-content {
-      height: 240px;
-      border: 1px dashed transparent;
-                  background: linear-gradient(#fff,#fff) padding-box,
-					repeating-linear-gradient(-45deg,#3763FF 0, #3763FF 0.3em, #fff 0,#fff 0.6em);
+  .step-list {
       display: flex;
-      width: 100%;
       align-items: center;
+      width: 100%;
       justify-content: center;
-      margin-bottom: 16px;
-      ::v-deep {
-        .el-upload-dragger {
-          border: 0;
-        }
-      }
-      .upload-content-main {
+      padding-top: 36px;
+      margin-bottom: 32px;
+      .step-list-item {
         display: flex;
-        flex-direction: column;
-        justify-content: center;
         align-items: center;
-        .title {
-            font-size: 20px;
-            color: #333333;
+        span {
+          font-size: 20px;
+          color: #999999;
+          margin-left: 16px;
+          margin-right: 16px;
         }
-        .desc {
-            font-size: 16px;
-            color: #999999;
-            margin-top: 12px;
+        .actived {
+          color: #3763FF;
         }
-        .up-btn {
-            margin-left: 16px;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            width: 122px;
-            height: 42px;
-            background: #3763FF;
-            border-radius: 6px 6px 6px 6px;
-            cursor: pointer;
-            font-size: 16px;
-            color: #FFFFFF;
-            margin-top: 32px;
-            img {
-                width: 20px;
-                height: 20px;
-                margin-right: 6px;
-            }
+      }
+      .step-line {
+        width: 137px;
+        height: 2px;
+        border-top: 2px dashed #999999;
+        display: flex;
+        position: relative;
+        margin-right: 42px;
+        span {
+          position: absolute;
+          right: -24px;
+          top: -11px;
+          color: #999999;
+          font-size: 16px;
         }
       }
+      .act-step-line {
+        width: 137px;
+        height: 2px;
+        border-top: 2px dashed #3763FF;
+        display: flex;
+        position: relative;
+        margin-right: 42px;
+        span {
+          position: absolute;
+          right: -24px;
+          top: -11px;
+          color: #3763FF;
+          font-size: 16px;
+        }
+      }
+      img {
+        width: 36px;
+        height: 36px;
+      }
     }
-    .upload-list {
-      flex: 1;
-      width: 100%;
-      border: 1px dashed transparent;
-                  background: linear-gradient(#fff,#fff) padding-box,
-					repeating-linear-gradient(-45deg,#3763FF 0, #3763FF 0.3em, #fff 0,#fff 0.6em);
-                    .img_list {
-                        display: flex;
-                        flex-wrap: wrap;
-                        padding: 24px 0 0 24px;
-                        .img_item {
-                            display: flex;
-                            flex-direction: column;
-                            margin-right: 16px;
-                            margin-bottom: 16px;
-                            position: relative;
-                            .img_item_url {
-                                width: 136px;
-                                height: 190px;
-                                border-radius: 6px 6px 6px 6px;
-                                border: 1px solid #D1D3D6;
-                                margin-bottom: 8px;
-                                cursor: move;
-                            }
-                            span {
-                                font-size: 16px;
-                                color: #333333;
-                                word-break: break-all;
-                            }
-                            .del {
-                                position: absolute;
-                                width: 24px;
-                                height: 24px;
-                                right: 8px;
-                                top: 8px;
-                                display: none;
-                                cursor: pointer;
-                            }
-                        }
-                        .img_item:hover {
-                            .del {
-                                display: block;
-                            }
-
-                        }
-                    }
-    }
-    .submit-btn {
-      position: absolute;
-      bottom: 16px;
-      right: 16px;width: 188px;
-      height: 48px;
-      background: #3763FF;
-      box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
-      border-radius: 6px 6px 6px 6px;font-size: 16px;
-      color: #FFFFFF;
-      text-align: center;
-      line-height: 48px;
-      cursor: pointer;
-    }
-  }
-  ::v-deep {
-    .el-upload {
-      width: 100%;
-    }
-    .el-upload-dragger {
-      width: 100%;
-      height: 100%;
-    }
-    .el-steps--simple {
-      padding: 0;
-      background: none;
-    }
-    .el-step.is-simple .el-step__title {
-      font-size: 14px;
-    }
-  }
 }
 </style>
diff --git a/src/views/caseDetails/components/CaseEvidence.vue b/src/views/caseDetails/components/CaseEvidence.vue
index aa9d699..99245c6 100644
--- a/src/views/caseDetails/components/CaseEvidence.vue
+++ b/src/views/caseDetails/components/CaseEvidence.vue
@@ -2,16 +2,31 @@
 <template>
   <div class="evidence-content">
     <div class="evidence-tree">
-      11
+      <el-tree
+        ref="tree"
+        node-key="id"
+        :data="treeData"
+        current-node-key="1"
+        :props="defaultProps"
+        highlight-current
+        default-expand-all
+        @node-click="handleNodeClick"
+      />
     </div>
     <div class="evidence-main">
       <div v-if="isEdit" class="flex-row" style="align-items: center; justify-content: space-between">
         <div>
           <el-button type="primary" icon="el-icon-folder-add" @click="addFolder">新建文件夹</el-button>
-          <el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd">添加证据</el-button>
+          <el-button type="primary" icon="el-icon-circle-plus-outline" @click="addEvidence">添加证据</el-button>
         </div>
 
-        <el-input v-model="searchName" placeholder="搜索名称" style="width: 300px" />
+        <!-- <el-input v-model="searchName" placeholder="搜索名称" style="width: 300px" /> -->
+      </div>
+      <div class="nav-list">
+        <div v-for="(item,index) in navList" :key="index" class="nav-item">
+          <span>{{ item }}</span>
+          <span v-if="index !== navList.length -1">></span>
+        </div>
       </div>
       <vxe-grid v-bind="gridOptions" style="margin-top: 10px">
         <template #opera="{row}">
@@ -28,7 +43,7 @@
         />
       </div>
     </div>
-
+    <AddFolder ref="AddFolderRef" @addOk="getTreeList" />
     <!--编辑/新增证据-->
     <!-- <edit-evidence ref="edit" @onClose="fetchData" /> -->
     <!--选择上传笔录方式-->
@@ -40,12 +55,14 @@
 
 import mixin from '@/views/mixin'
 import EditEvidence from '@/views/caseDetails/components/edit/EditEvidence.vue'
+import AddFolder from './AddEvidence/AddFolder.vue'
 import { queryEvidenceList, deleteEvidence } from '@/api/caseDetails'
 import { debounce } from '@/utils'
+import { getCaseEvidenceFileTree, getCaseEvidenceDirectoryList } from '@/api/caseDetails/evidence'
 import SelectUploadType from './SelectUploadType.vue'
 export default {
   name: 'CaseEvidence',
-  components: { EditEvidence, SelectUploadType },
+  components: { EditEvidence, SelectUploadType, AddFolder },
   mixins: [mixin],
   props: {
     // 是否编辑
@@ -73,6 +90,13 @@ export default {
           { title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '100px' }
         ],
         data: [{}]
+      },
+      treeData: [],
+      selectId: '',
+      navList: ['全部'],
+      defaultProps: {
+        children: 'child',
+        label: 'directoryName'
       }
     }
   },
@@ -80,7 +104,7 @@ export default {
     isExpand: {
       handler: function(newVal, oldVal) {
         if (newVal !== oldVal) {
-          this.tableHeight(this.isExpand ? this.isEdit ? 580 : 530 : this.isEdit ? 400 : 320)
+          this.tableHeight(this.isExpand ? this.isEdit ? 630 : 580 : this.isEdit ? 450 : 370)
         }
       },
       immediate: true
@@ -92,8 +116,9 @@ export default {
   mounted() {
     this.caseId = this.$route.params.id
     this.$nextTick(() => {
-      this.tableHeight(this.isExpand ? (this.isEdit ? 580 : 530) : (this.isEdit ? 400 : 320))
+      this.tableHeight(this.isExpand ? (this.isEdit ? 630 : 580) : (this.isEdit ? 450 : 370))
     })
+    this.getTreeList()
     this.fetchData()
   },
   methods: {
@@ -102,7 +127,11 @@ export default {
       _this.fetchData()
     }),
     addFolder() {
-      
+      this.$refs.AddFolderRef.show()
+    },
+    // 添加证据
+    addEvidence() {
+      this.$router.push({ path: `/add-evidence/${this.caseId}`, query: { caseName: this.$route.params.caseName, caseNo: this.$route.query.caseNo }})
     },
     // 获取数据
     fetchData() {
@@ -110,13 +139,49 @@ export default {
         caseId: this.caseId,
         evidenceName: this.searchName,
         pageNum: this.queryForm.page,
-        pageSize: this.queryForm.size
+        pageSize: this.queryForm.size,
+        directoryId: this.selectId === '1' ? '' : this.selectId
       }
       queryEvidenceList(params).then(res => {
         this.gridOptions.data = res.data.records
         this.queryForm.total = res.data.total
       })
     },
+    // 查询左侧树
+    getTreeList() {
+      getCaseEvidenceFileTree({ caseId: this.caseId }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+          this.treeData.unshift({
+            directoryName: '全部',
+            id: '1'
+          })
+          // this.$refs.tree.setCurrentKey(this.treeData[0].id)
+        }
+      })
+    },
+    getParentNames(node, treeData, parentNames = []) {
+      // 找到节点的直接父节点
+      const parent = treeData.find(parentNode =>
+        parentNode.child && parentNode.child.some(child => child.id === node.id)
+      )
+
+      // 如果找到父节点,将其名称添加到数组中,并递归检查更上层的父节点
+      if (parent) {
+        parentNames.push(parent.directoryName)
+        return this.getParentNames(parent, treeData, parentNames)
+      }
+
+      // 如果没有找到更上层的父节点,返回所有父节点的名称
+      return parentNames
+    },
+    handleNodeClick(data) {
+      this.selectId = data.id
+      this.navList = []
+      this.navList = this.getParentNames(data, this.treeData)
+      this.navList.push(data.directoryName)
+      this.fetchData()
+    },
     // 添加证据
     handleAdd() {
       // this.$refs.edit.show()
@@ -151,10 +216,42 @@ export default {
 .evidence-content {
   display: flex;
   .evidence-tree {
-    width: 200px;
+    width: 210px;
+    margin-right: 16px;
+    background: #F9FAFB;
+    ::v-deep {
+      .el-tree {
+        background: #F9FAFB;
+        .el-tree-node {
+          // height: 40px;
+          font-size: 16px;
+          color: #333333;
+        }
+        .el-tree-node__content {
+          height: 40px;
+        }
+        .el-tree-node.is-current > .el-tree-node__content {
+          background: #dce3ed;
+          color: #666666;
+        }
+      }
+    }
   }
   .evidence-main {
     flex: 1;
   }
+  .nav-list {
+            display: flex;
+            font-size: 16px;
+            color: #333333;
+            margin-bottom: 16px;
+            margin-top: 24px;
+            .nav-item {
+                display: flex;
+                span {
+                    margin-right: 16px;
+                }
+            }
+        }
 }
 </style>
diff --git a/src/views/caseDetails/components/EditEvidence/index.vue b/src/views/caseDetails/components/EditEvidence/index.vue
index 995da0e..b4c0293 100644
--- a/src/views/caseDetails/components/EditEvidence/index.vue
+++ b/src/views/caseDetails/components/EditEvidence/index.vue
@@ -1,101 +1,32 @@
 <template>
   <div class="EditEvidence">
-    <div class="EvidenceProofread">
-      <div class="FormInfo">
-        <el-form ref="form" :model="dataInfo" :rules="rules" label-width="100px" style="margin-top: 10px">
-          <el-row :gutter="10" class="form-content">
-            <el-col :span="24">
-              <el-form-item label="案件编号">
-                <span>{{ caseNo }}</span>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="案件名称">
-                <span>{{ caseName }}</span>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="证据名称" prop="evidenceName">
-                <el-input v-model="dataInfo['evidenceName']" placeholder="请输入证据名称" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="证据类型" prop="evidenceType">
-                <el-select v-model="dataInfo['evidenceType']" style="width: 100%" placeholder="请选择证据类型">
-                  <el-option
-                    v-for="item in evidenceTypeList"
-                    :key="item.value"
-                    :value="item.value"
-                    :label="item.label"
-                  />
-                </el-select></el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="提供人" prop="provider">
-                <el-input v-model="dataInfo.property['provider']" placeholder="请输入提供人" />
-              </el-form-item>
-            </el-col>
-            <div class="expand" @click="handleExpand">
-              <span v-show="isExpand">收起</span>
-              <span v-show="!isExpand">展开</span>
-              <img v-show="isExpand" :src="expandImg" alt="">
-
-              <img v-show="!isExpand" :src="unExpandImg" alt="">
-              <span class="line" />
-            </div>
-            <div v-show="isExpand">
-              <el-col :span="24">
-                <el-form-item label="受害人" prop="victim">
-                  <el-input v-model="dataInfo.property['victim']" placeholder="请输入受害人名称" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="合同标的物" prop="contractSubject">
-                  <el-input v-model="dataInfo.property['contractSubject']" placeholder="请输入合同标的物" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="合同签订时间" prop="contractSignTime">
-                  <el-date-picker
-                    v-model="dataInfo.property['contractSignTime']"
-                    type="datetime"
-                    format="yyyy-MM-dd HH:MM:ss"
-                    value-format="yyyy-MM-dd HH:MM:ss"
-                    placeholder="请选择合同签订时间"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="金额" prop="amount">
-                  <el-input v-model="dataInfo.property['amount']" type="number" placeholder="请输入金额" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="证据结果" prop="evidenceResult">
-                  <el-input v-model="dataInfo.property['evidenceResult']" placeholder="请输入证据结果" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="其他" prop="otherDesc">
-                  <el-input
-                    v-model="dataInfo.property.otherDesc"
-                    row
-                    type="textarea"
-                  />
-                </el-form-item>
-              </el-col>
-            </div>
-
-          </el-row>
-        </el-form>
+    <div class="header">
+      <div class="title">
+        <span>{{ `案件名称:${caseName}` }}</span>
+        <span>{{ `案件编号:${caseNo}` }}</span>
       </div>
-      <div class="proofread-content">
+    </div>
+    <div class="proofread-content">
+      <div class="mid-content">
         <div class="left">
-          <div class="show-img">
-            <img :src="activedImg" alt="">
-          </div>
+          <el-scrollbar v-if="selectList.length > 0" class="left-scroll">
+            <vuedraggable v-model="selectList" animation="400" class="img_list">
+              <div v-for="(item,index) in selectList" :key="index" :class="[item.fileId === selectInfo.fileId?'actived':'']">
+                <img v-if="['jpg', 'png'].includes(item.fileType)" class="img_item" :src="getImgUrl(item.fileId)" @click="selectItem(item)">
+
+                </img>
+                <svg-icon v-if="[ 'doc', 'docx'].includes(item.fileType)" class="svg-img" icon-class="docx" />
+              </div>
 
+            </vuedraggable>
+          </el-scrollbar>
+          <div v-if="selectList.length > 0 && ['jpg', 'png'].includes(selectInfo.fileType)" class="act_img">
+            <img v-if="selectInfo.fileId" :src="getImgUrl(selectInfo.fileId)" alt="">
+          </div>
+          <div v-if="selectList.length === 0" class="empty-content">
+            <img src="@/assets/caseManagement/empty.png" alt="">
+            <span>暂无本次证据材料</span>
+          </div>
           <span class="boder1" />
           <span class="boder2" />
           <span class="boder3" />
@@ -104,8 +35,7 @@
         <div class="right">
           <div class="title">识别结果</div>
           <el-input
-            v-model="dataInfo.ocrText"
-            readonly
+            v-model="selectInfo.ocrText"
             class="right-text"
             type="textarea"
           />
@@ -115,11 +45,30 @@
           <span class="boder4" />
         </div>
       </div>
-      <div class="footer-btns">
-        <div class="reset_btn" @click="reset">重置</div>
-        <div class="btn" @click="submit">确认并提交</div>
+      <div class="FormInfo">
+        <el-form ref="form" :model="selectInfo" :rules="rules" label-width="100px" style="margin-top: 10px">
+          <el-row :gutter="10" class="form-content">
+            <el-col :span="24">
+              <el-form-item label="证据名称" prop="title">
+                <el-input v-model="selectInfo.evidenceInfo.title" placeholder="请输入证据名称" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row v-if="selectInfo.evidenceInfo.property" :gutter="10" class="form-content">
+            <el-col v-for="(item,index) in selectInfo.evidenceInfo.property" :key="index" :span="24">
+              <el-form-item :label="item.attrName">
+                <el-input v-if="item.attrValueType ==='text'" v-model="item.attrValue" placeholder="请输入" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
       </div>
     </div>
+    <div class="footer-btns">
+      <div class="btn" @click="submit">确认并提交</div>
+      <div class="reset_btn" @click="reset">重置</div>
+    </div>
   </div>
 
 </template>
@@ -127,249 +76,375 @@
 import * as vuedraggable from 'vuedraggable'
 import { baseURL } from '@/config'
 import { commonDownloadFile } from '@/api/config/uploadApi'
-import { queryEvidenceInfo, updateEvidence } from '@/api/caseDetails/ocr'
+import { ocrAndExtractDetails, caseEvidenceVerify } from '@/api/caseDetails/evidence'
 export default {
-  name: 'EvidenceProofread',
+  name: 'EditEvidence',
   components: { vuedraggable },
   data() {
     return {
-      dataList: [],
-      isExpand: true,
-      rules: {
-        evidenceName: [{ required: true, message: '证据名称不能为空!', trigger: 'blur' }],
-        evidenceType: [{ required: true, message: '证据类型不能为空!', trigger: 'blur' }]
-      },
-      // 证据类型
-      evidenceTypeList: JSON.parse(sessionStorage.getItem('evidence_type')),
-      expandImg: require('@/assets/record/expand.png'),
-      unExpandImg: require('@/assets/record/unExpand.png'),
+      selectList: [],
+      activedImg: '',
       caseNo: '',
       caseName: '',
-      dataInfo: {
-        fileId: '',
-        ocrText: '',
-        property: {}
+      dataInfo: {},
+      // 证据类型
+      evidenceTypeList: JSON.parse(sessionStorage.getItem('evidence_type')),
+      rules: {
+        title: [{ required: true, message: '证据名称不能为空!', trigger: 'blur' }]
       },
-      activedImg: ''
+      flag: true,
+      treeData: [],
+      selectInfo: {
+        evidenceInfo: {
+          property: [],
+          title: ''
+        },
+        ocrText: ''
+      }
     }
   },
   mounted() {
+    this.getTreeList()
     this.caseNo = this.$route.query.caseNo
     this.caseName = this.$route.query.caseName
-    this.getData()
   },
   methods: {
     getImgUrl(id) {
       return `${baseURL}${commonDownloadFile}${id}`
     },
-    handleExpand() {
-      this.isExpand = !this.isExpand
-    },
-    getData() {
-      queryEvidenceInfo({ evidenceId: this.$route.query.evidenceId }).then(res => {
-        this.dataInfo = res.data
-        this.dataInfo.fileId = res.data.fileList[0].fileId
-        this.dataInfo.ocrText = res.data.fileList[0].ocrText
-        this.activedImg = `${baseURL}${commonDownloadFile}${this.dataInfo.fileId}`
-      })
+    selectItem(item) {
+      this.selectInfo = item
+      this.activedImg = `${baseURL}${commonDownloadFile}${this.selectInfo.fileId}`
     },
     reset() {
-      this.getData()
+      this.getTreeList()
     },
-    submit() {
-      const loading = this.$baseLoading(1, '保存中...')
-      this.dataInfo.caseId = this.$route.params.id
-      this.dataInfo.fileIdList = [this.dataInfo.fileList[0].fileId]
-      updateEvidence(this.dataInfo).then(res => {
-        loading.close()
+    getTreeList() {
+      ocrAndExtractDetails({ caseId: this.$route.params.id, evidenceId: this.$route.query.evidenceId }).then(res => {
         if (res.code === 200) {
-          this.$store.dispatch(
-            'tabsBar/delRoute',
-            this.$route
-          )
-          this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { currentKey: '1-2', isEdit: 1 }})
+          this.treeData = res.data
+          this.$nextTick(() => {
+            this.handleNodeClick(res.data[0])
+          })
         }
       })
+    },
+    findNodeById(nodes, id) {
+      for (const node of nodes) {
+        if (node.id === id) {
+          return node
+        } else if (node.child) {
+          const foundNode = this.findNodeById(node.child, id)
+          if (foundNode) {
+            return foundNode
+          }
+        }
+      }
+      return null
+    },
+    // 获取有文件的list
+    getFileList(nodes) {
+      for (const node of nodes) {
+        if (node.fileInfoList.length > 0) {
+          return node
+        } else if (node.child) {
+          const foundNode = this.getFileList(node.child)
+          if (foundNode) {
+            return foundNode
+          }
+        }
+      }
+      return null
+    },
+    handleNodeClick(data) {
+      this.selectId = data.id
+      const nodeItem = this.findNodeById(this.treeData, this.selectId)
+      if (nodeItem.fileInfoList.length === 0) {
+        const newNodeItem = this.getFileList(nodeItem.child)
+        this.selectList = newNodeItem.fileInfoList
+        this.selectId = newNodeItem.id
+        this.selectInfo = this.selectList[0]
+      } else {
+        this.selectList = nodeItem.fileInfoList
+        this.selectInfo = this.selectList[0]
+        this.selectId = nodeItem.id
+      }
+      console.log('111', this.selectList, this.selectInfo)
+    },
+    checkEvidence(nodes) {
+      for (const item of nodes) {
+        if (item.fileInfoList.length > 0) {
+          for (let i = 0; i < item.fileInfoList.length; i++) {
+            if (!item.fileInfoList[i].evidenceInfo.title) {
+              this.handleNodeClick(item)
+              this.selectItem(item.fileInfoList[i])
+              this.flag = false
+              break
+            }
+          }
+        } else if (item.child) {
+          this.checkEvidence(item.child)
+        }
+      }
+    },
+    save() {
+      this.checkEvidence(this.treeData)
+      if (this.flag) {
+        caseEvidenceVerify({
+          batchNo: this.$route.query.recordId,
+          caseId: this.$route.params.id,
+          evidenceDirectoryList: this.treeData
+        }).then(res => {
+          if (res.code === 200) {
+            this.$baseMessage.success(res.msg || '保存成功!')
+            this.$store.dispatch(
+              'tabsBar/delRoute',
+              this.$route
+            )
+            this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
+          }
+        })
+      } else {
+        this.$baseMessage.error('证据不能为空!')
+      }
+    },
+    submit() {
+      this.save()
     }
   }
 }
 </script>
-<style lang="scss" scoped>
-.EditEvidence {
-    display: flex;
-  background: #FFFFFF;
-  height: 100%;
-  .EvidenceProofread {
-    display: flex;
-    margin: 24px;
-    width: 100%;
-    .FormInfo {
-        width: 470px;
-        background: #F6F8F9;
-        border-radius: 8px 8px 8px 8px;
-        // height: calc(100vh - 350px);
-        padding: 0 24px;
-        margin-bottom: 72px;
-        .expand {
+    <style lang="scss" scoped>
+    .EditEvidence {
         display: flex;
-        flex-direction: row-reverse;
         padding: 0 24px;
-        align-items: center;
-        cursor: pointer;
-        margin-bottom: 16px;
-        img {
-            width: 18px;
-            height: 18px;
-            margin-right: 8px;
-        }
-        .line {
-            flex: 1;
-            height: 1px;
-            background: #E9E9E9;
-            margin-right: 8px;
-        }
+        flex-direction: column;
+        background: #fff;
+        height: 100%;
+        :deep(.el-scrollbar__wrap) {
+          overflow-x: hidden;
+
         }
-    }
-    :deep(.el-scrollbar__wrap) {
-    overflow-x: hidden;
-    }
-    .proofread-content {
-        flex: 1;
-        margin-left: 18px;
-        display: flex;
-        margin-bottom: 72px;
-        .left {
-        width: 55%;
-        margin-right: 24px;
-        position: relative;
-        // background: #F6F8F9;
-        border: 1px solid #DCE3EB;
-        display: flex;
-        padding: 8px;
-        .show-img {
-            padding: 16px 28px;
-            flex: 1;
-            background: #F6F8F9;
-            img {
-                width: 100%;
-                height: 100%;
+        .proofread-content {
+           flex: 1;
+            margin-left: 18px;
+            display: flex;
+
+            .mid-content {
+                display: flex;
+                flex: 1;
+                .left {
+
+                    margin-right: 24px;
+                    position: relative;
+                    // background: #F6F8F9;
+                    border: 1px solid #DCE3EB;
+                    display: flex;
+                    padding: 8px;
+              .empty-content {
+                  flex: 1;
+                  padding: 24px;
+                  display: flex;
+                  margin-top: 16px;
+                  flex-direction: column;
+                  display: flex;
+                  justify-content: center;
+                  align-items: center;font-size: 16px;
+                  color: #333333;
+                  img {
+                    width: 200px;
+                    height: 200px;
+                  }
+              }
+              .left-scroll {
+                background: #F6F8F9;
+                width: 150px;
+                margin-right: 14px;
+              }
+              .act_img {
+                padding: 16px 28px;
+                flex: 1;
+                background: #F6F8F9;
+                height: calc(100vh - 420px);
                 background-size: 100% 100%;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                img {
+                  height: 100%;
+                }
+              }
+              .svg-img {
+                  width: 98px;
+                    height: 138px;
+                    // margin-bottom: 16px;
+                    border-radius: 6px 6px 6px 6px;
+                    border: 1px solid #D1D3D6;
+                    cursor: move;
+                }
+              .actived {
+                border: 2px solid #3763FF !important;
+              }
             }
-        }
-        }
-        .right {
-        width: 45%;
-        position: relative;
-        border: 1px solid #DCE3EB;
-        display: flex;
-        padding: 8px;
-        flex-direction: column;
-        .title {
-            background: #F6F8F9;
-            border-bottom: 1px solid #DCE3EB;
-            height: 70px;
-            padding-left: 24px;
-            line-height: 70px;
-            font-weight: bold;
-            font-size: 18px;
-            color: #333333;
-            width: 100%;
-        }
-        ::v-deep .el-textarea__inner {
-            height: calc(100vh - 450px);
-            border: none;
-            box-shadow: none;
+            .right {
+              flex: 1;
+              position: relative;
+              border: 1px solid #DCE3EB;
+              display: flex;
+              padding: 8px;
+              flex-direction: column;
+              .title {
+                background: #F6F8F9;
+                border-bottom: 1px solid #DCE3EB;
+                height: 70px;
+                padding-left: 24px;
+                line-height: 70px;
+                font-weight: bold;
+                font-size: 18px;
+                color: #333333;
+              }
+              .right-text {
+                width: 100%;
+                height: 500px;
+              }
             }
-        }
-        .img_list {
-            display: flex;
-            flex-direction: column;
-            align-items: center;
-            padding-top: 25px;
-            overflow-x: hidden;
-            padding: 24px;
+            }
+            .FormInfo {
+            width: 410px;
             background: #F6F8F9;
-            .img_item {
-                width: 98px;
-                height: 138px;
-                margin-bottom: 16px;
-                border-radius: 6px 6px 6px 6px;
-                border: 1px solid #D1D3D6;
-                cursor: pointer;
+            border-radius: 8px 8px 8px 8px;
+            margin-left: 24px;
+            // height: calc(100vh - 350px);
+            padding: 0 24px;
+            margin-bottom: 72px;
+            .expand {
+              display: flex;
+              flex-direction: row-reverse;
+              padding: 0 24px;
+              align-items: center;
+              cursor: pointer;
+              margin-bottom: 16px;
+              img {
+                width: 18px;
+                height: 18px;
+                margin-right: 8px;
+              }
+              .line {
+                flex: 1;
+                height: 1px;
+                background: #E9E9E9;
+                margin-right: 8px;
+              }
             }
         }
-        .boder1 {
-            position: absolute;
-            width: 15px;
-            height: 15px;
-            left: 0;
-            top: 0;
-            border-top: 2px solid #2073FF;
-            border-left: 2px solid #2073FF;
-        }
-        .boder2 {
-            position: absolute;
-            width: 15px;
-            height: 15px;
-            right: 0;
-            top: 0;
-            border-top: 2px solid #2073FF;
-            border-right: 2px solid #2073FF;
+            .img_list {
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                padding-top: 25px;
+                overflow-x: hidden;
+                padding: 24px;
+                background: #F6F8F9;
+                .img_item {
+                    width: 98px;
+                    height: 138px;
+                    // margin-bottom: 16px;
+                    border-radius: 6px 6px 6px 6px;
+                    border: 1px solid #D1D3D6;
+                    cursor: move;
+                }
+            }
+            .boder1 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                left: 0;
+                top: 0;
+                border-top: 2px solid #2073FF;
+                border-left: 2px solid #2073FF;
+            }
+            .boder2 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                right: 0;
+                top: 0;
+                border-top: 2px solid #2073FF;
+                border-right: 2px solid #2073FF;
+            }
+            .boder3 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                left: 0;
+                bottom: 0;
+                border-bottom: 2px solid #2073FF;
+                border-left: 2px solid #2073FF;
+            }
+            .boder4 {
+                position: absolute;
+                width: 15px;
+                height: 15px;
+                right: 0;
+                bottom: 0;
+                border-bottom: 2px solid #2073FF;
+                border-right: 2px solid #2073FF;
+            }
         }
-        .boder3 {
-            position: absolute;
-            width: 15px;
-            height: 15px;
-            left: 0;
-            bottom: 0;
-            border-bottom: 2px solid #2073FF;
-            border-left: 2px solid #2073FF;
+        .header {
+            display: flex;
+            justify-content: space-between;
+            padding-top: 24px;
+            .title {
+                // display: flex;
+                text-align: right;font-size: 16px;
+                color: #333333;
+                margin-bottom: 24px;
+                span {
+                    margin-left: 32px;
+                }
+             }
         }
-        .boder4 {
-            position: absolute;
-            width: 15px;
-            height: 15px;
-            right: 0;
-            bottom: 0;
-            border-bottom: 2px solid #2073FF;
-            border-right: 2px solid #2073FF;
+        .footer-btns {
+          padding-top: 24px;
+          height: 68px;
+          display: flex;
+          flex-direction: row-reverse;
+          .btn {
+            width: 188px;
+            height: 48px;
+            background: #3763FF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #FFFFFF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+          .reset_btn {
+            width: 188px;
+            height: 48px;
+            background: #FFFFFF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
         }
     }
-    .footer-btns {
-    position: absolute;
-    right: 24px;
-    bottom: 24px;
-    display: flex;
-    .btn {
-        width: 188px;
-        height: 48px;
-        background: #3763FF;
-        box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
-        border-radius: 6px 6px 6px 6px;
-        text-align: center;
-        line-height: 48px;
-        font-size: 16px;
-        color: #FFFFFF;
-        cursor: pointer;
-        margin-left: 24px;
-    }
-    .reset_btn {
-        width: 188px;
-        height: 48px;
-        background: #FFFFFF;
-        box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
-        border-radius: 6px 6px 6px 6px;
-        border: 1px solid #3763FF;
-        text-align: center;
-        line-height: 48px;
-        font-size: 16px;
-        color: #3763FF;
-        cursor: pointer;
-        margin-left: 24px;
-    }
-    }
-}
-}
-
-</style>
+    </style>
+  <style lang="scss" scoped>
 
+    ::v-deep .el-textarea__inner {
+    height: calc(100vh - 450px);
+    border: none;
+    box-shadow: none;
+  }
+  </style>
diff --git a/src/views/caseDetails/components/edit/EditEvidence.vue b/src/views/caseDetails/components/edit/EditEvidence.vue
index 1c5ff8a..3076cde 100644
--- a/src/views/caseDetails/components/edit/EditEvidence.vue
+++ b/src/views/caseDetails/components/edit/EditEvidence.vue
@@ -146,7 +146,6 @@ export default {
       const loading = this.$baseLoading(1, '保存中...')
       this.$refs.form.validate(valid => {
         if (valid) {
-          
           const params = {
             ...this.evidenceForm,
             caseId: this.$route.params.id
diff --git a/src/views/caseDetails/index.vue b/src/views/caseDetails/index.vue
index b9e5dd9..82ecbb8 100644
--- a/src/views/caseDetails/index.vue
+++ b/src/views/caseDetails/index.vue
@@ -334,6 +334,53 @@ export default {
   height: 100%;
   color: #333333;
   box-sizing: border-box;
+  .info-left {
+    ::v-deep {
+  .el-descriptions__body {
+    background: none;
+  }
+  .el-tree-node__content {
+    background: linear-gradient( 90deg, rgba(69, 105, 255, .1) 0%, #FFFFFF 100%);
+    border-radius: 5px;
+    height: 35px;
+    line-height: 35px;
+    margin-bottom: 10px;
+    .el-tree-node__expand-icon {
+      padding: 6px;
+    }
+  }
+  .el-tree-node__children{
+    margin-left: 10px;
+    border-left: 1px solid rgba(51, 51, 51, 0.20);
+  }
+  .el-tree-node__children .el-tree-node__content {
+    background: #FFFFFF;
+    padding-left: 0 !important;
+    margin-left: 8px;
+  }
+  .el-tree-node__children .el-tree-node__content .el-tree-node__expand-icon {
+    padding: 0;
+  }
+  .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
+    background: #3763FF;
+    color: white;
+  }
+  .el-descriptions-item__label {
+    font-weight: 400;
+    font-size: 16px;
+    color: #666666;
+  }
+  .el-descriptions-item__content {
+    font-weight: 400;
+    font-size: 16px;
+    color: #333333;
+  }
+  .el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell {
+    padding-bottom: 16px !important;
+  }
+}
+  }
+
   .details-header {
     padding: 10px;
     box-sizing: border-box;
@@ -471,32 +518,6 @@ export default {
   .el-descriptions__body {
     background: none;
   }
-  .el-tree-node__content {
-    background: linear-gradient( 90deg, rgba(69, 105, 255, .1) 0%, #FFFFFF 100%);
-    border-radius: 5px;
-    height: 35px;
-    line-height: 35px;
-    margin-bottom: 10px;
-    .el-tree-node__expand-icon {
-      padding: 6px;
-    }
-  }
-  .el-tree-node__children{
-    margin-left: 10px;
-    border-left: 1px solid rgba(51, 51, 51, 0.20);
-  }
-  .el-tree-node__children .el-tree-node__content {
-    background: #FFFFFF;
-    padding-left: 0 !important;
-    margin-left: 8px;
-  }
-  .el-tree-node__children .el-tree-node__content .el-tree-node__expand-icon {
-    padding: 0;
-  }
-  .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
-    background: #3763FF;
-    color: white;
-  }
   .el-descriptions-item__label {
     font-weight: 400;
     font-size: 16px;
diff --git a/src/views/promptManagement/PromptConfig/add/PromptDebug.vue b/src/views/promptManagement/PromptConfig/add/PromptDebug.vue
new file mode 100644
index 0000000..afed1c8
--- /dev/null
+++ b/src/views/promptManagement/PromptConfig/add/PromptDebug.vue
@@ -0,0 +1,182 @@
+
+<template>
+  <cs-drawer
+    :drawer-option="drawerOption"
+  >
+    <div slot="content" class="PromptDebug">
+      <div class="left">
+        <div class="title">识别结果预览</div>
+        <div class="left-content">
+          <div class="top">证据模板:买卖合同</div>
+          <!-- <div class="empty">
+            <img src="@/assets/common/file_empty.png" alt="">
+            <span>暂无结果,请在右侧输入调试内容或上传文档</span>
+          </div> -->
+        </div>
+      </div>
+      <div class="right">
+        <div class="right-item">
+          <span>调试内容</span>
+          <el-input
+            v-model="textarea"
+            type="textarea"
+            :rows="8"
+            placeholder="请输入"
+          />
+        </div>
+        <div class="right-item">
+          <span>选择文件</span>
+          <el-upload
+            :headers="{
+              token: token
+            }"
+            :action="uploadOption.action"
+            :accept="uploadOption.accept"
+            :data="{
+              temp: true
+            }"
+            :on-success="handleSuccess"
+            :before-upload="beforeUpload"
+          >
+            <div class="up-btn">
+              请选择文件
+            </div>
+            <div class="desc">支持上传扩展名为txt、doc、docx文件,且仅限一份文件</div>
+          </el-upload>
+        </div>
+      </div>
+    </div>
+  </cs-drawer>
+</template>
+
+<script>
+import { baseURL } from '@/config'
+import { getAccessToken } from '@/utils/accessToken'
+export default {
+  name: 'PromptDebug',
+  data() {
+    return {
+      drawerOption: {
+        show: false,
+        title: '提示词调试',
+        width: '1200px',
+        hiddenFooter: true
+      },
+      textarea: '',
+      // 上传配置
+      uploadOption: {
+        action: `${baseURL}/minio/uploadFile`,
+        accept: '.txt,.doc,.docx'
+      },
+      token: getAccessToken(),
+      fileId: '',
+      fileList: [],
+      dataInfo: undefined
+    }
+  },
+  methods: {
+    show(data) {
+      this.drawerOption.show = true
+      this.dataInfo = data
+    },
+    beforeUpload(file) {
+      const isLt5M = file.size / 1024 / 1024 < 5
+      const filename = file.name
+      const postfix = filename.substring(filename.lastIndexOf('.'))
+      if (!['.txt', '.doc', '.docx'].includes(postfix)) {
+        this.$message.error('上传图片只能是 txt,doc,docx 格式!')
+        return false
+      }
+      if (!isLt5M) {
+        this.$message.error('上传头像图片大小不能超过 5MB!')
+        return false
+      }
+      return true
+    },
+    handleSuccess(res, file) {
+      this.fileId = res.data
+      // const obj = {
+      //   name: file.name,
+      //   fileId: res.data
+      // }
+      // this.fileList.push(obj)
+      // this.imgOcrIdentify(res.data)
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.PromptDebug {
+    display: flex;
+    padding: 16px;
+    overflow: auto;
+    .left {
+        width: 50%;
+
+        .title {
+            font-size: 18px;
+            color: #333333;
+            margin-bottom: 16px;
+        }
+        .left-content {
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #D9D9D9;
+            width: 100%;
+            height: calc(100vh - 300px);
+            .empty {
+                margin: 260px auto;
+                display: flex;
+                flex-direction: column;
+                justify-content: center;
+                align-items: center;
+                img {
+                    width: 200px;
+                    height: 200px;
+                }
+                span {
+                    font-size: 16px;
+                    color: #333333;
+                }
+            }
+            .top {
+                height: 53px;
+                background: #F2F6FA;font-size: 16px;
+                color: #888888;
+                line-height: 53px;
+                padding-left: 24px;
+            }
+        }
+    }
+    .right {
+        margin-left: 32px;
+        flex: 1;
+        .right-item {
+            display: flex;
+            flex-direction: column;
+            margin-top: 24px;
+            span {
+                font-size: 16px;
+                color: #333333;
+                margin-bottom: 16px;
+            }
+            .up-btn {
+                width: 128px;
+                height: 42px;
+                background: #FFFFFF;
+                border-radius: 6px 6px 6px 6px;
+                border: 1px solid #3763FF;
+                line-height: 42px;
+                font-size: 16px;
+                color: #3763FF;
+                cursor: pointer;
+            }
+            .desc {
+                font-size: 16px;
+                color: #B4B4B4;
+                margin-top: 16px;
+            }
+        }
+    }
+}
+</style>
diff --git a/src/views/promptManagement/PromptConfig/add/PromptInput.vue b/src/views/promptManagement/PromptConfig/add/PromptInput.vue
new file mode 100644
index 0000000..f9374de
--- /dev/null
+++ b/src/views/promptManagement/PromptConfig/add/PromptInput.vue
@@ -0,0 +1,831 @@
+<template>
+  <div class="custom-at-box">
+    <div class="custom-textarea-box">
+      <div
+        ref="customInput"
+        :class="[
+          'custom-textarea custom-scroll',
+          { 'show-word-limit': showWordLimit && maxlength },
+          { 'custom-textarea-disabled': disabled },
+        ]"
+        :contenteditable="!disabled"
+        :placeholder="placeholder"
+        @input="onInput($event)"
+        @keydown="onKeyDownInput($event)"
+        @paste="onPaste($event)"
+        @copy="onCopy($event)"
+        @click="showList(false)"
+      />
+      <div v-if="showWordLimit && maxlength" class="custom-at-limit">
+        {{ inputValueLen }}/{{ maxlength }}
+      </div>
+    </div>
+    <div :key="`customInput${taskPanelIsInFullScreen}`">
+      <el-popover
+        ref="popoverRef"
+        v-model="showPopover"
+        trigger="click"
+        class="custom-select-box"
+        :append-to-body="taskPanelPopoverAppendToBody"
+        :style="{ top: popoverOffset + 'px' }"
+        @hide="hidePoppver"
+      >
+        <div
+          ref="customSelectContent"
+          class="custom-select-content custom-scroll"
+        >
+
+          <div
+            v-for="(item, index) in dataList"
+
+            :key="index"
+            :class="[
+              'custom-select-item',
+              { hoverItem: selectedIndex === index },
+            ]"
+            @click="handleClickOperatorItem(item)"
+          >
+            <div class="custom-select-item-content">
+              {{ item.name }}
+            </div>
+          </div>
+        </div>
+      </el-popover>
+    </div>
+  </div>
+</template>
+<script>
+import Vue from 'vue'
+
+export default {
+  props: {
+    // 输入框placeholder
+    placeholder: {
+      type: String,
+      default: '请输入...'
+    },
+    // 是否显示输入字数统计
+    showWordLimit: {
+      type: Boolean,
+      default: false
+    },
+    // 是否禁用
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    // 最大输入长度
+    maxlength: {
+      type: [Number, String],
+      default: '3000'
+    },
+    setRefresh: {
+      type: Object,
+      default: () => {}
+    },
+    // 输入框输入的内容
+    value: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      // 已输入内容的长度
+      inputValueLen: 0,
+      top: '',
+      left: '',
+      message: '',
+      startOffset: 0,
+      // @搜索人dom
+      searSpan: null,
+      // 筛选人数据
+      dataList: [
+        {
+          name: 'xxxx'
+        },
+        {
+          name: 'dddd'
+        }
+      ],
+      // @插入位置
+      selectionIndex: 0,
+      // 当前编辑的dom
+      dom: null,
+      // 当前编辑dom的index
+      domIndex: 0,
+      // 当前编辑dom的childNodes的index
+      childDomIndex: 0,
+      // 编辑前dom内容
+      beforeDomVal: '',
+      // 筛选人选择框
+      showPopover: false,
+      // 筛选人选择框偏移量
+      popoverOffset: 0,
+      listInput: false,
+      listInputValue: '',
+      // 防抖
+      timer: null,
+      // 保存弹窗加载状态
+      addDataLoad: false,
+
+      // 鼠标选择人的索引
+      selectedIndex: 0
+    }
+  },
+  computed: {
+    // 计算属性,用于同步父组件的数据
+    model: {
+      get() {
+        return this.value
+      },
+      set(newValue) {
+        this.$emit('input', newValue)
+        if (this.$refs.customInput) {
+          this.$emit('inputText', this.$refs.customInput.textContent)
+        }
+        const nodeList = this.$refs.customInput.childNodes
+        const list = []
+        nodeList.forEach((e) => {
+          if (e.childNodes) {
+            e.childNodes.forEach(i => {
+              if (i.className === 'active-text') {
+                list.push({
+                  jobNumber: i.getAttribute('data-id'),
+                  name: i.textContent.replace(/{/g, '').replace(/\s/g, '')
+                })
+              }
+            })
+          }
+          if (e.className === 'active-text') {
+            list.push({
+              jobNumber: e.getAttribute('data-id'),
+              name: e.textContent.replace(/{/g, '').replace(/\s/g, '')
+            })
+          }
+        })
+        this.$emit('changeChosen', list)
+      }
+    },
+    taskPanelIsInFullScreen() {
+      return this.$store.getters.taskPanelIsInFullScreen
+    },
+    taskPanelPopoverAppendToBody() {
+      return this.$store.getters.taskPanelPopoverAppendToBody
+    }
+  },
+  mounted() {
+    this.setNativeInputValue()
+  },
+  methods: {
+    // 设置输入框的值
+    setNativeInputValue() {
+      if (this.$refs.customInput) {
+        if (this.value === this.$refs.customInput.innerHTML) return
+        this.$refs.customInput.innerHTML = this.value
+        this.inputValueLen = this.$refs.customInput.innerText.length
+      }
+    },
+    // 筛选人弹窗数据选择
+    handleClickOperatorItem(item) {
+      this.addData(JSON.parse(JSON.stringify(item)))
+      this.$refs.customSelectContent.scrollTop = 0
+      this.selectedIndex = 0
+      this.showPopover = false
+      this.listInput = false
+      this.listInputValue = ''
+    },
+    // 艾特人弹窗关闭
+    hidePoppver() {
+      this.$refs.customSelectContent.scrollTop = 0
+      this.selectedIndex = 0
+      this.showPopover = false
+      this.listInput = false
+      this.listInputValue = ''
+    },
+    // 创建艾特需要插入的元素
+    createAtDom(item) {
+      // 先判断剩余输入长度是否能够完整插入元素
+      const dom = document.createElement('span')
+
+      dom.classList.add('active-text')
+      // 这里的contenteditable属性设置为false,删除时可以整块删除
+      dom.setAttribute('contenteditable', 'false')
+      // 将id存储在dom元素的标签上,便于后续数据处理
+      dom.setAttribute('data-id', item.name)
+
+      dom.innerHTML = `{${item.name}}&nbsp;`
+
+      return dom
+    },
+    // 插入元素
+    addData(item) {
+      const spanElement = this.createAtDom(item)
+
+      const maxlength = Number(this.maxlength) || 3000
+      // 因为插入后需要删除之前输入的@,所以判断长度时需要减去这个1
+      if (maxlength - this.inputValueLen < spanElement.innerText.length - 1) {
+        this.$message('剩余字数不足')
+        return
+      }
+      this.$refs.customInput.focus()
+
+      // 获取当前光标位置的范围
+      const selection = window.getSelection()
+      const range = selection.getRangeAt(0)
+
+      // 找到要插入的节点
+      const nodes = Array.from(this.$refs.customInput.childNodes)
+      let insertNode = ''
+      // 是否是子元素
+      let domIsCustomInputChild = true
+      if (nodes[this.domIndex].nodeType === Node.TEXT_NODE) {
+        insertNode = nodes[this.domIndex]
+      } else {
+        const childNodeList = nodes[this.domIndex].childNodes
+        insertNode = childNodeList[this.childDomIndex]
+        domIsCustomInputChild = false
+      }
+
+      // 如果前一个节点是空的文本节点,@用户无法删除
+      // 添加判断条件:如果前一个节点是空的文本节点,则插入一个空的<span>节点
+      const html = insertNode.textContent
+      // 左边的节点
+      const textLeft = document.createTextNode(
+        html.substring(0, this.selectionIndex - 1) + ''
+      )
+      const emptySpan = document.createElement('span')
+
+      // 如果找到了要插入的节点,则在其前面插入新节点
+      if (insertNode) {
+        if (!textLeft.textContent) {
+          if (domIsCustomInputChild) {
+            this.$refs.customInput.insertBefore(emptySpan, insertNode)
+          } else {
+            nodes[this.domIndex].insertBefore(emptySpan, insertNode)
+          }
+        }
+        insertNode.parentNode.insertBefore(spanElement, insertNode.nextSibling)
+        // 删除多余的@以及搜索条件
+        const textContent = insertNode.textContent.slice(
+          0,
+          -(1 + this.listInputValue.length)
+        )
+        if (!textContent && insertNode.nodeName === '#text') {
+          insertNode.remove()
+        } else {
+          insertNode.textContent = textContent
+        }
+      } else {
+        // 如果未找到要插入的节点,则将新节点直接追加到末尾
+        this.$refs.customInput.appendChild(spanElement)
+      }
+
+      // 将光标移动到 span 元素之后
+      const nextNode = spanElement.nextSibling
+      range.setStart(
+        nextNode || spanElement.parentNode,
+        nextNode ? 0 : spanElement.parentNode.childNodes.length
+      )
+      range.setEnd(
+        nextNode || spanElement.parentNode,
+        nextNode ? 0 : spanElement.parentNode.childNodes.length
+      )
+      selection.removeAllRanges()
+      selection.addRange(range)
+
+      this.model = this.$refs.customInput.innerHTML
+      this.inputValueLen = this.$refs.customInput.innerText.length
+      this.showList(false)
+    },
+    // 检查是否发生了全选操作
+    isSelectAll() {
+      const selection = window.getSelection()
+      return selection.toString() === this.$refs.customInput.innerText
+    },
+    // 获取输入框是否选中文字
+    isSelect() {
+      try {
+        const selection = window.getSelection()
+        return selection.toString().length
+      } catch (error) {
+        return 0
+      }
+    },
+    // 输入事件
+    onKeyDownInput(event) {
+      // 获取当前输入框的长度
+      const currentLength = this.$refs.customInput.innerText.length
+      // 获取最大输入长度限制
+      const maxLength = Number(this.maxlength) || 3000
+
+      // 如果按下的键是非控制键并且当前长度已经达到了最大长度限制
+      if (currentLength >= maxLength) {
+        // 获取按键的 keyCode
+        var keyCode = event.keyCode || event.which
+
+        // 检查是否按下了 Ctrl 键
+        var ctrlKey = event.ctrlKey || event.metaKey // metaKey 用于 macOS 上的 Command 键
+
+        // 允许的按键:Backspace(8)、Delete(46)、方向键和
+        var allowedKeys = [8, 46, 37, 38, 39, 40]
+
+        // 允许的按键 Ctrl+A、Ctrl+C、Ctrl+V
+        const allowedCtrlKey = [65, 67, 86]
+
+        // 检查按键是否在允许列表中并且没有执行选中操作
+        if (!allowedKeys.includes(keyCode) && !this.isSelect()) {
+          if ((allowedCtrlKey.includes(keyCode) && ctrlKey)) {
+            return
+          }
+          // 阻止默认行为
+          event.preventDefault()
+          return false
+        }
+      }
+
+      if (this.showPopover) {
+        const listElement = this.$refs.customSelectContent
+        const itemHeight = listElement.children[0].clientHeight
+        if (event.key === 'ArrowDown') {
+          // 防止光标移动
+          event.preventDefault()
+          // 移动选中索引
+          if (this.selectedIndex === this.dataList.length - 1) {
+            this.selectedIndex = 0 // 跳转到第一项
+            listElement.scrollTop = 0 // 滚动到列表顶部
+          } else {
+            this.selectedIndex++
+            const itemBottom = (this.selectedIndex + 1) * itemHeight
+            const scrollBottom = listElement.scrollTop + listElement.clientHeight
+            if (itemBottom > scrollBottom) {
+              listElement.scrollTop += itemHeight
+            }
+          }
+        } else if (event.key === 'ArrowUp') {
+          event.preventDefault()
+          if (this.selectedIndex === 0) {
+            this.selectedIndex = this.dataList.length - 1 // 跳转到最后一项
+            listElement.scrollTop = listElement.scrollHeight // 滚动到列表底部
+          } else {
+            this.selectedIndex--
+            const itemTop = this.selectedIndex * itemHeight
+            if (itemTop < listElement.scrollTop) {
+              listElement.scrollTop -= itemHeight
+            }
+          }
+        } else if (event.key === 'Enter') {
+          event.preventDefault()
+          this.handleClickOperatorItem(
+            this.dataList[this.selectedIndex]
+          )
+        }
+      } else if (event.key === 'Backspace' && this.isSelectAll()) {
+        // 如果执行了全选操作并删除,清空输入框内容
+        this.$refs.customInput.innerText = ''
+        this.model = this.$refs.customInput.innerHTML
+        this.inputValueLen = 0
+      }
+    },
+    // 监听输入事件
+    onInput(e) {
+      this.inputValueLen = this.$refs.customInput.innerText.length
+      if (
+        ['<div><br></div>', '<br>', '<span></span><br>'].includes(
+          this.$refs.customInput.innerHTML
+        )
+      ) {
+        this.$refs.customInput.innerHTML = ''
+        this.inputValueLen = 0
+      } else if (e.data === '{') {
+        // 保存焦点位置
+        this.saveIndex()
+        this.showList()
+        this.listInput = true
+      } else if (this.showPopover) {
+        const { diffChars } = Vue.internal
+        const diffResult = diffChars(
+          this.beforeDomVal,
+          this.dom.textContent
+        )
+        let result = ''
+        // 遍历差异信息数组
+        for (let i = 0; i < diffResult.length; i++) {
+          const change = diffResult[i]
+
+          // 如果当前差异是添加或修改类型,则将其添加到结果字符串中
+          if (change.added) {
+            result += change.value
+          } else if (change.removed && change.value === '{') {
+            this.showList(false)
+            this.listInputValue = ''
+          }
+        }
+        if (this.timer) {
+          clearTimeout(this.timer)
+        }
+        this.listInputValue = result
+        this.timer = setTimeout(() => {
+          this.remoteMethod()
+        }, 300)
+      }
+      this.model = this.$refs.customInput.innerHTML
+    },
+    onPaste(event) {
+      event.preventDefault()
+      // 获取剪贴板中的 HTML 和文本内容
+      const html = (event.clipboardData || window.clipboardData).getData(
+        'text/html'
+      )
+      const text = (event.clipboardData || window.clipboardData).getData(
+        'text/plain'
+      )
+
+      // 设置最大输入限制
+      const maxLength = Number(this.maxlength) || 3000
+
+      // 此时加个条件  看鼠标选中的文本长度,剩余可输入长度加上选中文本长度
+      const selection1 = window.getSelection()
+      const range1 = selection1.getRangeAt(0)
+      const clonedSelection = range1.cloneContents()
+      let selectTextLen = 0
+      if (clonedSelection.textContent && clonedSelection.textContent.length) {
+        selectTextLen = clonedSelection.textContent.length
+      }
+
+      // 剩余可输入长度
+      const remainingLength = maxLength - this.inputValueLen + selectTextLen
+
+      // 过滤掉不可见字符
+      const cleanText = text.replace(/\s/g, '')
+
+      // 创建一个临时 div 用于处理粘贴的 HTML 内容
+      const tempDiv = document.createElement('div')
+      tempDiv.innerHTML = html
+
+      // 过滤掉不需要的内容,例如注释和换行符
+      const fragment = document.createDocumentFragment()
+      let totalLength = 0
+
+      if (cleanText) {
+        if (remainingLength >= cleanText.length) {
+          fragment.appendChild(document.createTextNode(cleanText))
+        } else {
+          const truncatedText = cleanText.substr(0, remainingLength)
+          fragment.appendChild(document.createTextNode(truncatedText))
+        }
+      } else {
+        Array.from(tempDiv.childNodes).forEach((node) => {
+          const regex = /<span class="active-text" contenteditable="false" data-id="(\d+)">{([^<]+)<\/span>/g
+          // 过滤注释和空白节点
+          if (
+            node.nodeType !== 8 &&
+              !(node.nodeType === 3 && !/\S/.test(node.textContent))
+          ) {
+            const childText = node.textContent || ''
+            const childLength = childText.length
+            const childHtml = node.outerHTML || node.innerHTML
+            // 如果剩余空间足够,插入节点
+            if ((regex.exec(childHtml) !== null) && totalLength + childLength <= remainingLength) {
+              fragment.appendChild(node.cloneNode(true))
+              totalLength += childLength
+            } else if (remainingLength - totalLength > 0) {
+              // 如果还有剩余长度,不插入节点,插入文本内容
+              const lastNodeLength = remainingLength - totalLength
+              const truncatedText = childText.substr(0, lastNodeLength)
+              fragment.appendChild(document.createTextNode(truncatedText))
+              totalLength += truncatedText.length
+            } else {
+              // 如果添加当前节点的内容会超出剩余可插入长度,则结束循环
+              return
+            }
+          }
+        })
+      }
+
+      // 插入处理后的内容到光标位置
+      const selection = window.getSelection()
+      const range = selection.getRangeAt(0)
+      range.deleteContents()
+      range.insertNode(fragment)
+
+      // 更新输入框内容和长度
+      this.model = this.$refs.customInput.innerHTML
+      this.inputValueLen = this.$refs.customInput.innerText.length
+
+      // 设置光标位置为插入内容的后面一位
+      const newRange = document.createRange()
+      newRange.setStart(range.endContainer, range.endOffset)
+      newRange.collapse(true)
+      selection.removeAllRanges()
+      selection.addRange(newRange)
+    },
+    // 修改默认复制事件
+    onCopy(e) {
+      e.preventDefault()
+      const selection = window.getSelection()
+      const range = selection.getRangeAt(0)
+      const clonedSelection = range.cloneContents()
+
+      // 检查复制的内容是否包含符合条件的元素
+      const hasActiveText =
+          clonedSelection.querySelector(
+            '.active-text[contenteditable="false"][data-id]'
+          ) !== null
+
+      const clipboardData = e.clipboardData || window.clipboardData
+      if (hasActiveText) {
+        const div = document.createElement('div')
+        div.appendChild(clonedSelection)
+        const selectedHtml = div.innerHTML
+        clipboardData.setData('text/html', selectedHtml)
+      } else {
+        clipboardData.setData('text/plain', clonedSelection.textContent || '')
+      }
+    },
+    // 保存焦点位置
+    async saveIndex() {
+      const selection = getSelection()
+      this.selectionIndex = selection.anchorOffset
+      const nodeList = this.$refs.customInput.childNodes
+      const range = selection.getRangeAt(0)
+
+      // 保存当前编辑的dom节点
+      for (const [index, value] of nodeList.entries()) {
+        // 这里第二个参数要配置成true,没配置有其他的一些小bug
+        // (range.startContainer.contains(value) && range.endContainer.contains(value))  是为了处理兼容性问题
+        if (
+          selection.containsNode(value, true) ||
+            (range.startContainer.contains(value) &&
+              range.endContainer.contains(value))
+        ) {
+          if (value.nodeType === Node.TEXT_NODE) {
+            this.dom = value
+            this.beforeDomVal = value.textContent
+            this.domIndex = index
+            const selection = window.getSelection()
+            const range = selection.getRangeAt(0)
+            this.startOffset = range.startOffset - 1
+          } else {
+            const childNodeList = value.childNodes
+            for (const [childIndex, childValue] of childNodeList.entries()) {
+              if (selection.containsNode(childValue, true)) {
+                this.dom = value
+                this.beforeDomVal = value.textContent
+                this.domIndex = index
+                this.childDomIndex = childIndex
+                const selection = window.getSelection()
+                const range = selection.getRangeAt(0)
+                this.startOffset = range.startOffset - 1
+              }
+            }
+          }
+        }
+      }
+    },
+    // 筛选人弹窗
+    showList(bool = true) {
+      this.showPopover = bool
+      if (bool) {
+        const offset =
+            this.getCursorDistanceFromDivBottom(this.$refs.customInput) || -1
+        if (offset < 0) {
+          this.popoverOffset = 0
+        } else {
+          this.popoverOffset = -(offset - 1)
+        }
+      }
+      if (!bool) {
+        this.listInputValue = ''
+        this.remoteMethod()
+      }
+    },
+    // 获取光标位置
+    getCursorDistanceFromDivBottom(editableDiv) {
+      // 获取选区
+      const selection = window.getSelection()
+      // 获取选区的范围
+      const range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null
+
+      if (range) {
+        // 创建一个临时元素来标记范围的结束位置
+        const markerElement = document.createElement('span')
+        // 插入临时标记元素
+        range.insertNode(markerElement)
+        markerElement.appendChild(document.createTextNode('\u200B')) // 零宽空格
+
+        // 获取标记元素的位置信息
+        const markerOffsetTop = markerElement.offsetTop
+        const markerHeight = markerElement.offsetHeight
+
+        // 计算光标距离div底部的距离
+        const cursorDistanceFromBottom =
+            editableDiv.offsetHeight - (markerOffsetTop + markerHeight)
+
+        // 滚动条距顶部的高度
+        const scrollTop = editableDiv.scrollTop || 0
+        // 移除临时标记元素
+        markerElement.parentNode.removeChild(markerElement)
+
+        // 返回光标距离底部的距离
+        return cursorDistanceFromBottom + scrollTop
+      }
+
+      // 如果没有选区,则返回-1或者其他错误值
+      return -1
+    },
+    // 搜索筛选人
+    async remoteMethod() {
+
+    },
+    handleNameShift(item) {
+      const name = item.name || ''
+      if (!name) return '--'
+      if (name.length > 1) {
+        return name.slice(0, 1)
+      } else {
+        return name
+      }
+    },
+    // 按钮div点击 聚焦textarea
+    handleBtnBoxClick() {
+      this.$refs.customInput.focus()
+    },
+    getInnerText() {
+      const customInput = this.$refs.customInput
+      if (!customInput) return
+      return customInput.innerText
+    },
+    getJobId() {
+      const nodeList = this.$refs.customInput.childNodes
+      const list = []
+      nodeList.forEach((e) => {
+        if (e.className === 'active-text') {
+          list.push(e.getAttribute('data-id'))
+        }
+      })
+      return list
+    },
+    clearInput() {
+      this.$refs.customInput.innerText = ''
+      this.$refs.customInput.innerHTML = ''
+      this.inputValueLen = 0
+      this.$emit('input', '')
+      this.$emit('inputText', '')
+      this.$emit('changeChosen', [])
+    }
+  }
+}
+</script>
+  <style lang="scss" scoped>
+  .custom-textarea-btn {
+    position: absolute;
+    bottom: 1px;
+    right: 4px;
+    left: 4px;
+    text-align: right;
+    // background: #fff;
+    padding-bottom: 3px;
+    .el-button {
+      font-size: 12px;
+      padding: 4px 10px;
+    }
+  }
+  .custom-textarea-box {
+    position: relative;
+  }
+  .custom-at-limit {
+    position: absolute;
+    right: 12px;
+    bottom: 4px;
+    font-size: 12px;
+    color: #999;
+    line-height: 12px;
+  }
+  ::v-deep.custom-textarea {
+    height: calc(100vh - 400px);
+    background-color: #ffffff;
+    padding: 5px 15px;
+    color: #606266;
+    overflow-y: auto;
+    line-height: 20px;
+    font-size: 14px;
+    transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+    position: relative;
+    word-break: break-all;
+    .el-textarea__inner {
+    border: none;
+    resize: none;
+  }
+    &.show-word-limit {
+      padding-bottom: 16px;
+    }
+    &.custom-textarea-disabled {
+      cursor: not-allowed;
+      background-color: #f5f7fa;
+      border-color: #e4e7ed;
+      color: #c0c4cc;
+    }
+    &:focus {
+      border-color: #f98600 !important;
+    }
+    &:empty::before {
+      content: attr(placeholder);
+      font-size: 14px;
+      color: #c0c4cc;
+    }
+    .active-text {
+      color: #909399;
+      // padding: 2px 6px;
+      // background: #f4f4f5;
+      margin-right: 4px;
+      // border-radius: 4px;
+      // font-size: 12px;
+    }
+    // &:focus::before {
+    //   content: "";
+    // }
+  }
+
+  ::v-deep.custom-select-box {
+    position: relative;
+
+    .el-popover {
+      padding: 0;
+      top: 0;
+      box-shadow: 0 4px 8px 0 rgba(89, 88, 88, 0.8);
+    }
+    .custom-select-content {
+      width: 259px;
+      padding: 8px;
+      max-height: 260px;
+      overflow-y: auto;
+    }
+
+    .custom-select-item {
+      // font-size: 14px;
+      // padding: 0 20px;
+      // position: relative;
+      // height: 34px;
+      // line-height: 34px;
+      // box-sizing: border-box;
+      display: flex;
+      padding: 8px 12px;
+      border-bottom: 1px solid #ebebeb;
+      align-items: center;
+      color: #606266;
+      cursor: pointer;
+      &:last-child {
+        border-bottom: none;
+      }
+      .avatar-box {
+        flex-shrink: 0;
+        .custom-select-item-avatar {
+          width: 24px;
+          height: 24px;
+          background-color: #ffb803;
+          border-radius: 50%;
+          text-align: center;
+          line-height: 24px;
+          color: #ffffff;
+        }
+      }
+      .custom-select-item-content {
+        flex: 1;
+        padding-left: 12px;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+      &:hover {
+        background-color: #f5f7fa;
+      }
+      &.hoverItem {
+        background-color: #dbdbdb;
+      }
+    }
+    .custom-select-empty {
+      padding: 10px 0;
+      text-align: center;
+      color: #999;
+      font-size: 14px;
+
+      &.load {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+      }
+    }
+    .custom-scroll {
+      overflow: auto;
+      &::-webkit-scrollbar {
+        width: 8px;
+        height: 8px;
+      }
+      &::-webkit-scrollbar-thumb {
+        border-radius: 8px;
+        background-color: #b4b9bf;
+      }
+    }
+  }
+  </style>
diff --git a/src/views/promptManagement/PromptConfig/add/SelectImg.vue b/src/views/promptManagement/PromptConfig/add/SelectImg.vue
new file mode 100644
index 0000000..3213227
--- /dev/null
+++ b/src/views/promptManagement/PromptConfig/add/SelectImg.vue
@@ -0,0 +1,90 @@
+
+<template>
+  <cs-dialog
+    :dialog="dialogOptions"
+  >
+    <template slot="content">
+      <div class="SelectImg">
+        <img v-for="(item,index) in imgList" :key="index" :class="[selectId === item.id ? 'actived':'']" class="img-item" :src="item.url" @click="selectItem(item.id)">
+
+        </img>
+      </div>
+    </template>
+  </cs-dialog>
+</template>
+
+<script>
+
+export default {
+  name: 'SelectImg',
+  data() {
+    return {
+      dialogOptions: {
+        show: false,
+        width: '520px',
+        title: {
+          title: '选择目录图片'
+        },
+        // hiddenFooter: true,
+        appendToBody: true
+      },
+      selectId: '',
+      imgList: [
+        {
+          url: require('@/assets/file/type1.png'),
+          id: 1
+        }, {
+          url: require('@/assets/file/type2.png'),
+          id: 2
+        }, {
+          url: require('@/assets/file/type3.png'),
+          id: 3
+        }, {
+          url: require('@/assets/file/type4.png'),
+          id: 4
+        }, {
+          url: require('@/assets/file/type5.png'),
+          id: 5
+        }, {
+          url: require('@/assets/file/type6.png'),
+          id: 6
+        }
+      ]
+
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    // 显示弹窗
+    show() {
+      this.dialogOptions.show = true
+    },
+    selectItem(id) {
+      this.selectId = id
+    },
+    handleSelect(val) {
+      this.$emit('selectOk', val)
+      this.dialogOptions.show = false
+    }
+  }
+}
+</script>
+
+    <style scoped lang="scss">
+   .SelectImg {
+    display: flex;
+    flex-wrap: wrap;
+    img {
+        width: 100px;
+        height: 100px;
+        margin: 0 16px 16px 0;
+        cursor: pointer;
+    }
+    .actived {
+        border: 2px solid rgba(55, 99, 255, 1);
+        border-radius: 8px 8px 8px 8px;
+    }
+   }
+    </style>
diff --git a/src/views/promptManagement/PromptConfig/add/index.vue b/src/views/promptManagement/PromptConfig/add/index.vue
index 837012b..40dbece 100644
--- a/src/views/promptManagement/PromptConfig/add/index.vue
+++ b/src/views/promptManagement/PromptConfig/add/index.vue
@@ -1,62 +1,428 @@
 <template>
   <div class="add-prompt">
-    <div class="left">
-      <div class="title">基础配置</div>
-      <el-form ref="form" :model="dataInfo" :rules="rules" label-width="90px">
-        <el-form-item label="案件类型" prop="caseType">
-          <el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
-            <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="指令类型" prop="caseNo">
-          <el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
-            <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="指令类型" prop="caseNo">
-          <el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
-        </el-form-item>
-        <el-form-item label="关键词" prop="caseNo">
-          <el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
-        </el-form-item>
-        <el-form-item label="选择目录" prop="caseType">
-          <el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
-            <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-      </el-form>
-    </div>
-    <div class="right">
+    <div class="tip">提示词配置对于自动识别属性内容和生成知识图谱至关重要,通过上传测试文件检验其效果能有效提升案件指标判别的准确性。</div>
+    <div class="main-content">
+      <div class="left">
+        <div class="title">基础配置</div>
+        <el-form ref="form" :model="dataInfo" :rules="rules" label-width="120px">
+          <el-form-item label="案件类型" prop="caseType">
+            <el-select v-model="dataInfo['caseType']" style="width: 100%;" clearable placeholder="请选择案件类型">
+              <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="提示词类型" prop="type">
+            <el-select v-model="dataInfo['type']" style="width: 100%;" placeholder="请选择提示词类型">
+              <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="提示词名称" prop="name">
+            <el-input v-model="dataInfo['name']" clearable placeholder="请输入提示词名称" />
+          </el-form-item>
+          <el-form-item v-if="dataInfo.type ==='1'" label="所属目录" prop="evidenceCategoryList">
+            <el-cascader v-model="dataInfo.evidenceCategoryList" style="width: 100%;" :props="defaultProps" :options="treeData" />
+          </el-form-item>
+          <!-- <el-form-item v-if="dataInfo.type ==='1'" label="类目图标" prop="caseType">
+            <div class="select-img">
+              <div class="sel-btn" @click="openSelectImg">请选择</div>
+            </div>
+          </el-form-item> -->
+          <el-form-item v-if="dataInfo.type ==='1'" label="提取属性" prop="extractAttributes">
+            <div class="params-table">
+              <div class="top">
+                <span style="width: 450px;">字典标签</span>
+                <span style="width: 150px;">字典数值</span>
+                <span style="width: 80px;">操作</span>
+              </div>
+              <div v-for="(item,index) in dataInfo.extractAttributes" :key="index" class="table-item">
+                <el-input v-model="item.attrName" style="width: 400px;margin-right: 40px;" placeholder="请输入" />
+                <el-select v-model="item.attrValueType" style="width: 120px;margin-right: 40px;" clearable placeholder="请选择">
+                  <el-option v-for="items in extractList" :key="items.value" :label="items.label" :value="items.value" />
+                </el-select>
+                <i class="el-icon-delete" @click="delItem(index)" />
+              </div>
+              <div class="add-table" @click="addItem">
+                <i class="el-icon-circle-plus-outline" style="color: #3763FF;font-size: 16px;" />
+                <span>添加数据</span>
+              </div>
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="right">
         <div class="right-header">
-            <span>提示词配置</span>
-            <div class="btn-list">11</div>
+          <span>提示词配置</span>
+          <div class="btn-list">
+            <div class="ai-btn">
+              <i class="el-icon-refresh" />
+              <span>AI自动生成</span>
+            </div>
+            <div class="btn" @click="handleDebug">调试</div>
+          </div>
+
+        </div>
+        <div class="content">
+          <!-- <el-input
+            v-model="dataInfo['prompt']"
+            type="textarea"
+            :rows="24"
+            placeholder="请输入提示词模板"
+          /> -->
+          <PromptInput
+            v-model="customInputHTML"
+            placeholder=""
+            @inputText="handleChangeInputText"
+            @changeChosen="handleChangeChosen"
+          />
+
         </div>
-        <div class="content">222</div>
+      </div>
     </div>
+    <div class="footer-btns">
+      <div class="btn" @click="submit">发布模板</div>
+      <div class="btn" @click="submit">保存</div>
+      <div class="reset_btn" @click="reset">重置</div>
+
+    </div>
+    <PromptDebug ref="PromptDebugRef" />
+    <SelectImg ref="SelectImgRef" />
   </div>
 </template>
 <script>
-
+import PromptDebug from './PromptDebug.vue'
+import SelectImg from './SelectImg.vue'
+import { getCaseEvidenceTree } from '@/api/caseDetails/evidence'
+import { addOrUpdPrompt } from '@/api/promptManagement'
+import PromptInput from './PromptInput.vue'
 export default {
+  name: 'AddPrompt',
+  components: {
+    PromptDebug,
+    SelectImg,
+    PromptInput
+  },
   data() {
     return {
       dataInfo: {
-        caseType: ''
+        // 输入框的html代码
+        customInputHTML: '',
+        // 输入框的文本,可让后端使用,如不使用,也没啥用
+        customInputText: '',
+        // 输入框返回的@人员数据
+        customInputMentions: [],
+
+        caseType: '',
+        type: '1',
+        name: '',
+        evidenceCategoryList: [],
+        extractAttributes: [],
+        prompt: '请根据属性定义从源文本中提取属性:\n' +
+                    '\n' +
+                    '示例文本:\n' +
+                    '"\n' +
+                    '甲方:张三公司\n' +
+                    '乙方:\n' +
+                    '数量:5000吨水泥\n' +
+                    '合同金额:8346元\n' +
+                    '支付时间:2022年11月30日\n' +
+                    '履行期限:2022年12月1日至2023年12月1日\n' +
+                    '签订日期:2022年11月23日\n' +
+                    '"\n' +
+                    '\n' +
+                    '示例结果:\n' +
+                    '{\n' +
+                    '    "甲方名称": "张三公司",\n' +
+                    '    "乙方名称": "",\n' +
+                    '    "数量": "5000吨水泥",\n' +
+                    '    "合同金额": "8346.00",\n' +
+                    '    "支付时间": "2022-11-30",\n' +
+                    '    "履行期限": "2022年12月1日至2023年12月1日",\n' +
+                    '    "签订日期": "2022-11-23"\n' +
+                    '}\n' +
+                    '\n' +
+                    '源文本:\n' +
+                    '{ocr_txt}\n' +
+                    '\n' +
+                    '属性定义:\n' +
+                    '{attr_define}\n' +
+                    '\n' +
+                    '### 注意事项:\n' +
+                    '1. 将结果以JSON格式返回。不需要进行解释。\n' +
+                    '2. 如果某字段提取不到,则返回""。\n' +
+                    '3. 日期格式为yyyy-MM-dd,数字格式返回保留两位小数。\n' +
+                    '4. 值为文本类型的数据,尽量使用原文中的文字。\n' +
+                    '5. 只可以使用原文中的文字,不可以自行添加内容。\n' +
+                    '\n' +
+                    '回溯你输出的结果,确保你的输出结果符合json格式。'
+      },
+      tableList: [{
+        name: '',
+        type: ''
+      }],
+      rules: {
+        caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }],
+        type: [{ required: true, message: '提示词类型不能为空!', trigger: 'blur' }],
+        name: [{ required: true, message: '提示词名称不能为空!', trigger: 'blur' }],
+        extractAttributes: [{ required: true, message: '提取属性不能为空!', trigger: 'blur' }]
       },
+      defaultProps: {
+        children: 'child',
+        label: 'categoryName',
+        value: 'id',
+        checkStrictly: true
+      },
+      treeData: [],
+      id: '',
+      extractList: [
+        {
+          label: '输入框',
+          value: 'text'
+        },
+        {
+          label: '日期',
+          value: 'date'
+        }
+      ],
       // 案件类型数据
-      caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type'))
+      caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')),
+      typeOptions: JSON.parse(sessionStorage.getItem('prompt_type'))
     }
   },
   mounted() {
-
+    this.getTreeList()
   },
   methods: {
+    // 获取输入框返回的文本
+    handleChangeInputText(val) {
+      this.customInputText = val
+    },
+    // 获取输入框返回的文本
+    handleChangeChosen(val) {
+      this.customInputMentions = val
+    }, handleDebug() {
+      this.$refs.PromptDebugRef.show()
+    },
+    openSelectImg() {
+      this.$refs.SelectImgRef.show()
+    },
+    // 查询目录
+    getTreeList() {
+      getCaseEvidenceTree({ caseType: 1 }).then(res => {
+        if (res.code === 200) {
+          this.treeData = res.data
+        }
+      })
+    },
+    addItem() {
+      this.dataInfo.extractAttributes.push({
+        attrName: '',
+        attrValueType: ''
+      })
+    },
+    delItem(index) {
+      this.dataInfo.extractAttributes.splice(index, 1)
+    },
+    reset() {
 
+    },
+    submit() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          const params = {
+            id: this.id,
+            ...this.dataInfo,
+            evidenceCategoryId: this.dataInfo.evidenceCategoryList[this.dataInfo.evidenceCategoryList.length - 1 ]
+          }
+          addOrUpdPrompt(params).then(res => {
+            const { code, msg } = res
+            code === 200 ? (this.id ? this.$baseMessage.success(msg || '编辑成功!') : this.$baseMessage.success(msg || '新增成功!')) : (this.id ? this.$baseMessage.error(msg || '编辑失败!') : this.$baseMessage.error(msg || '新增失败!'))
+          })
+        }
+      })
+    }
   }
 }
 </script>
 <style lang="scss" scoped>
     .add-prompt {
+      background-color: #fff;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      padding: 0 40px;
+
+      .tip {
+        width: 100%;
+        height: 70px;
+        background: #F6F8F9;
+        border-radius: 8px 8px 8px 8px;
+        line-height: 70px;
+        padding-left: 24px;
+        font-size: 16px;
+        color: #333333;
+        margin-top: 24px;
+        margin-bottom: 16px;
+      }
+      .main-content {
+        display: flex;
+        flex: 1;
+        .left {
+          width: 750px;
+          border-right: 1px solid rgba(51, 51, 51, 0.20);
+          padding-right: 40px;
+          .title {
+            font-weight: bold;
+            font-size: 18px;
+            color: #333333;
+            margin-top: 24px;
+            margin-bottom: 24px;
+          }
+          .select-img {
+            width: 96px;
+            height: 42px;
+            background: #FFFFFF;
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            line-height: 42px;
+            text-align: center;font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+          }
+          .params-table {
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #D9D9D9;
+            .top {
+              background: #F2F6FA;
+              height: 42px;
+              display: flex;
+              line-height: 42px;
+              span {
+                text-align: center;font-size: 16px;
+                color: #888888;
+              }
+            }
+            .add-table {
+              height: 56px;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              font-size: 16px;
+              color: #3763FF;
+              cursor: pointer;
+              span {
+                margin-left: 8px;
+              }
+            }
+            .table-item {
+              display: flex;
+              padding: 16px;
+              align-items: center;
+              border-bottom: 1px solid #FFEAEAEA;
+              i {
+                color: #FF3429;
+                cursor: pointer;
+              }
+            }
+          }
+        }
+        .right {
+          flex: 1;
+          padding: 24px 40px;
+          display: flex;
+          flex-direction: column;
+          .right-header {
+            display: flex;
+            justify-content: space-between;
+            span {
+              font-weight: bold;
+              font-size: 18px;
+              color: #333333;
+            }
+            .btn-list {
+              display: flex;
+              .ai-btn {
+                width: 154px;
+                height: 42px;
+                border-radius: 6px 6px 6px 6px;
+                border: 1px solid #3763FF;
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                margin-right: 24px;
+                cursor: pointer;
+                i {
+                  font-size: 16px;
+                  color: #3763FF;
+                }
+                span {
+                  font-size: 16px;
+                  color: #3763FF;
+                  margin-left: 8px;
+                  font-weight: 400;
+                }
+              }
+              .btn {
+                width: 98px;
+                height: 42px;
+                background: #3763FF;
+                border-radius: 6px 6px 6px 6px;text-align: center;
+                line-height: 42px;
+                font-size: 16px;
+                color: #FFFFFF;
+                cursor: pointer;
+              }
+            }
+          }
+          .content {
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #D9D9D9;
+            margin-top: 14px;
+            flex: 1;
+            // padding: 16px;
+            ::v-deep {
 
+  .el-textarea__inner {
+    border: none;
+    resize: none;
+  }
+}
+          }
+        }
+      }
+      .footer-btns {
+        height: 96px;
+        background: #FFFFFF;
+        box-shadow: 2px -4px 12px 0px rgba(0,0,0,0.04);
+        border-radius: 8px 8px 8px 8px;
+        display: flex;
+        flex-direction: row-reverse;
+        align-items: center;
+          .btn {
+            width: 188px;
+            height: 48px;
+            background: #3763FF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #FFFFFF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+          .reset_btn {
+            width: 188px;
+            height: 48px;
+            background: #FFFFFF;
+            box-shadow: 0px 2px 0px 0px rgba(0,0,0,0.04);
+            border-radius: 6px 6px 6px 6px;
+            border: 1px solid #3763FF;
+            text-align: center;
+            line-height: 48px;
+            font-size: 16px;
+            color: #3763FF;
+            cursor: pointer;
+            margin-left: 24px;
+          }
+      }
     }
 </style>
diff --git a/src/views/promptManagement/PromptConfig/index.vue b/src/views/promptManagement/PromptConfig/index.vue
index 1922638..7e0ec10 100644
--- a/src/views/promptManagement/PromptConfig/index.vue
+++ b/src/views/promptManagement/PromptConfig/index.vue
@@ -1,6 +1,6 @@
 
 <template>
-  <div class="content">
+  <div ref="htmlContent" class="content">
     <cs-search title="提示词检索" :data="searchData" :span="6" direction="row" @onSearch="onSearch" @getData="onSearch" />
     <div class="index-content">
       <div class="header">
@@ -26,44 +26,28 @@
 
 <script>
 import mixin from '@/views/mixin'
-import { queryIndexData, deleteModelIndex } from '@/api/indexRule'
+import { queryPromptList } from '@/api/promptManagement'
 
 export default {
-  name: 'Index',
+  name: 'PromptConfig',
   mixins: [mixin],
   data() {
     return {
       // 筛选数据
       searchData: [
-        { label: '指标名称', model: 'name', type: 'input' },
-        { label: '指标类别', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) },
-        // { label: '证据名称', model: 'doer', type: 'input' },
-        { label: '案件类型', model: 'caseType', type: 'select', option: JSON.parse(sessionStorage.getItem('case_type')) },
-        { label: '原子指标', model: 'atomicIndexName', type: 'input' }
+        { label: '提示词名称', model: 'name', type: 'input' },
+        { label: '提示词类型', model: 'type', type: 'select', option: JSON.parse(sessionStorage.getItem('prompt_type')) }
       ],
       // 表格配置
       gridOptions: {
         ...mixin.data().gridOptions,
-        // 指标名称单元格添加样式
-        cellClassName: ({ column }) => {
-          if (column.field === 'indexName') {
-            return 'text-blue'
-          }
-          return null
-        },
-        // 展开行结构配置
-        expandConfig: {
-          iconClose: 'vxe-icon-square-plus',
-          iconOpen: 'vxe-icon-square-minus'
-        },
         columns: [
-          { title: '序号', type: 'seq', width: '50px' },
-          { title: '指标名称', field: 'name', align: 'left' },
-          { title: '指标类别', field: 'indexTypeName', width: '150px' },
-          { title: '指标分数', field: 'indexScore', width: '150px', sortable: true },
-          { title: '原子指标数量', field: 'atomicIndexNum', width: '150px' },
-          { title: '最新时间', field: 'updateTime', width: '150px' },
-          { title: '操作', slots: { default: 'operate' }, fixed: 'right', width: '150px' }
+          { title: 'ID', field: 'id', width: '300px' },
+          { title: '提示词名称', field: 'name', width: '300px' },
+          { title: '提示词类型', field: 'type', width: '200px' },
+          { title: '匹配值', field: 'matchNum', width: '200px' },
+          { title: '提示词', field: 'prompt' },
+          { title: '操作', slots: { default: 'operate' }, width: '150px' }
         ],
         data: []
       }
@@ -75,21 +59,22 @@ export default {
   methods: {
     // 数据查询
     fetchData() {
-      queryIndexData({ ...this.searchFormData }, this.queryForm.page, this.queryForm.size).then(res => {
-        this.gridOptions.data = res.data.result
+      queryPromptList({ ...this.searchFormData, page: this.queryForm.page, size: this.queryForm.size }).then(res => {
+        this.gridOptions.data = res.data.records
         this.queryForm.total = res.data.total
       })
     },
     // 新增
     handleAdd() {
+      this.$router.push({ path: `/add-prompt` })
     },
     // 删除
     handleDel(row) {
-      this.$baseConfirm('确定要删除吗?', null, async() => {
-        const { code, msg } = await deleteModelIndex(row.id)
-        code === 200 ? this.$baseMessage.success(msg || '删除成功!') : this.$baseMessage.error(msg || '删除失败!')
-        this.fetchData()
-      })
+      // this.$baseConfirm('确定要删除吗?', null, async() => {
+      //   const { code, msg } = await deleteModelIndex(row.id)
+      //   code === 200 ? this.$baseMessage.success(msg || '删除成功!') : this.$baseMessage.error(msg || '删除失败!')
+      //   this.fetchData()
+      // })
     },
     // 筛选
     onSearch(data, callback) {
diff --git a/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue b/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue
index 95e6a85..b743f92 100644
--- a/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue
+++ b/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue
@@ -13,91 +13,105 @@
     @onSubmit="handleSubmit"
   >
     <template slot="content">
-      <el-form ref="form" :model="ruleForm" :rules="rules" label-width="120px">
-        <el-form-item label="案件类型" prop="caseType">
-          <el-select v-model="ruleForm.caseType" :disabled="isView" placeholder="请选择案件类型" style="width: 100%">
-            <el-option
-              v-for="item in caseTypeOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+      <div class="add-atomic">
+        <el-form ref="form" :model="ruleForm" :rules="rules" label-width="120px">
+          <el-form-item label="案件类型" prop="caseType">
+            <el-select v-model="ruleForm.caseType" :disabled="isView" placeholder="请选择案件类型" style="width: 100%">
+              <el-option
+                v-for="item in caseTypeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="原子指标名称" prop="name">
+            <el-input
+              v-model="ruleForm.name"
+              :disabled="isView"
+              placeholder="请输入原子指标名称"
             />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="原子指标名称" prop="name">
-          <el-input
-            v-model="ruleForm.name"
-            :disabled="isView"
-            placeholder="请输入原子指标名称"
-          />
-        </el-form-item>
-        <el-form-item label="指标算法" prop="indexSource">
-          <el-radio-group v-model="ruleForm['indexSource']" :disabled="isView" @change="changeType">
-            <el-radio
-              v-for="item in sourceOptions"
-              :key="item.value"
-              :label="item.value"
-            >
-              {{ item.label }}
-            </el-radio>
+          </el-form-item>
+          <el-form-item label="指标算法" prop="indexSource">
+            <el-radio-group v-model="ruleForm['indexSource']" :disabled="isView" @change="changeType">
+              <el-radio
+                v-for="item in sourceOptions"
+                :key="item.value"
+                :label="item.value"
+              >
+                {{ item.label }}
+              </el-radio>
             <!--            <el-radio label="1">人工指定</el-radio>-->
             <!--            <el-radio label="2">数据库查询</el-radio>-->
             <!--            <el-radio label="3">图谱生成</el-radio>-->
             <!--            <el-radio label="4">大模型</el-radio>-->
-          </el-radio-group>
-        </el-form-item>
-
-        <el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt标签" prop="recordType">
-          <el-select v-model="ruleForm['recordType']" :disabled="isView" placeholder="请选择prompt标签" style="width: 100%">
-            <el-option
-              v-for="item in promptTagOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="查询语句" prop="indexSource">
+            <div class="select-btn" @click="selectSql">请选择</div>
+            <div v-if="ruleForm['indexSource'] === '3'" class="sel-name">{{ `已选:指令名称` }}</div>
+            <div v-if="ruleForm['indexSource'] === '4'" class="sel-name">{{ `已选:指令名称(即证据模板名称)` }}</div>
+            <span v-if="ruleForm['indexSource'] === '3'" class="sel-desc">{{ `头节点类型-关系-尾节点类型` }}</span>
+            <div v-if="ruleForm['indexSource'] === '4'" class="select-model-list">
+              <div v-for="(item,index) in modelList" :key="index" class="model-list-item">
+                <span>{{ item.name }}</span>
+                <i class="el-icon-circle-close" />
+              </div>
+            </div>
+          </el-form-item>
+          <el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt标签" prop="recordType">
+            <el-select v-model="ruleForm['recordType']" :disabled="isView" placeholder="请选择prompt标签" style="width: 100%">
+              <el-option
+                v-for="item in promptTagOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt内容" prop="prompt">
+            <el-input
+              v-model="ruleForm.prompt"
+              :disabled="isView"
+              type="textarea"
+              :rows="5"
+              placeholder="请输入prompt内容"
+            />
+          </el-form-item>
+          <el-form-item v-if="ruleForm['indexSource'] === '2' || ruleForm['indexSource'] === '3'" label="查询语句" prop="queryLang">
+            <el-input
+              v-model="ruleForm['queryLang']"
+              :disabled="isView"
+              type="textarea"
+              :rows="5"
+              placeholder="请输入查询语句"
             />
-          </el-select>
-        </el-form-item>
-        <el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt内容" prop="prompt">
-          <el-input
-            v-model="ruleForm.prompt"
-            :disabled="isView"
-            type="textarea"
-            :rows="5"
-            placeholder="请输入prompt内容"
-          />
-        </el-form-item>
-        <el-form-item v-if="ruleForm['indexSource'] === '2' || ruleForm['indexSource'] === '3'" label="查询语句" prop="queryLang">
-          <el-input
-            v-model="ruleForm['queryLang']"
-            :disabled="isView"
-            type="textarea"
-            :rows="5"
-            placeholder="请输入查询语句"
-          />
-        </el-form-item>
+          </el-form-item>
 
-        <!--        <el-form-item label="判断结果" prop="judgeResult">-->
-        <!--          <el-select v-model="ruleForm['judgeResult']" :disabled="isView" placeholder="请选择判断结果" style="width: 100%">-->
-        <!--            <el-option-->
-        <!--              v-for="item in resultOptions"-->
-        <!--              :key="item.value"-->
-        <!--              :label="item.label"-->
-        <!--              :value="item.value"-->
-        <!--            />-->
-        <!--          </el-select>-->
-        <!--        </el-form-item>-->
-        <el-form-item label="原子指标说明" prop="remark">
-          <el-input
-            v-model="ruleForm.remark"
-            :disabled="isView"
-            type="textarea"
-            :rows="5"
-            placeholder="请输入原子指标说明"
-          />
-        </el-form-item>
-      </el-form>
+          <!--        <el-form-item label="判断结果" prop="judgeResult">-->
+          <!--          <el-select v-model="ruleForm['judgeResult']" :disabled="isView" placeholder="请选择判断结果" style="width: 100%">-->
+          <!--            <el-option-->
+          <!--              v-for="item in resultOptions"-->
+          <!--              :key="item.value"-->
+          <!--              :label="item.label"-->
+          <!--              :value="item.value"-->
+          <!--            />-->
+          <!--          </el-select>-->
+          <!--        </el-form-item>-->
+          <el-form-item label="原子指标说明" prop="remark">
+            <el-input
+              v-model="ruleForm.remark"
+              :disabled="isView"
+              type="textarea"
+              :rows="5"
+              placeholder="请输入原子指标说明"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <SelectSql ref="SelectSqlRef" />
     </template>
-    <SelectSql ref="SelectSqlRef" />
+
   </cs-drawer>
 </template>
 
@@ -116,6 +130,17 @@ export default {
         title: '指标配置',
         width: '40%'
       },
+      modelList: [
+        {
+          name: '属性1'
+        }, {
+          name: '属性2'
+        }, {
+          name: '属性3'
+        }, {
+          name: '属性4'
+        }
+      ],
       // 案件类型数据
       caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')),
       // prompt 标签数据
@@ -169,6 +194,9 @@ export default {
       this.ruleForm = { indexSource: '1' }
       // this.$refs.form.clearValidate()
     },
+    selectSql() {
+      this.$refs.SelectSqlRef.show()
+    },
     // 确定
     handleSubmit() {
       this.$refs.form.validate(async valid => {
@@ -193,5 +221,41 @@ export default {
 </script>
 
 <style scoped lang="scss">
-
+.add-atomic {
+  .select-btn {
+    width: 96px;
+    height: 36px;
+    background: #FFFFFF;
+    border-radius: 6px 6px 6px 6px;
+    border: 1px solid #3763FF;
+    line-height: 36px;
+    text-align: center;font-size: 16px;
+    color: #3763FF;
+    cursor: pointer;
+  }
+  .sel-name {
+    margin-top: 8px;font-size: 16px;
+    color: #3763FF;
+  }
+  .sel-desc {
+    margin-top: 8px;font-size: 16px;
+    color: #333333
+  }
+  .select-model-list {
+    display: flex;
+    .model-list-item {
+      padding: 0 12px;
+      height: 32px;
+      margin:0 8px 8px 0;
+      background: #F0F0F0;
+      border-radius: 6px 6px 6px 6px;font-size: 14px;
+      color: #333333;
+      display: flex;
+      align-items: center;
+      span {
+        margin-right: 16px;
+      }
+    }
+  }
+}
 </style>
diff --git a/src/views/ruleEngine/atomicIndex/components/SelectSql.vue b/src/views/ruleEngine/atomicIndex/components/SelectSql.vue
index 412286c..a89d98a 100644
--- a/src/views/ruleEngine/atomicIndex/components/SelectSql.vue
+++ b/src/views/ruleEngine/atomicIndex/components/SelectSql.vue
@@ -6,6 +6,7 @@
     @onSubmit="handleSubmit"
   >
     <template slot="content">
+
       <el-form v-model="searchForm" label-width="120px">
         <el-row :gutter="10">
           <el-col :span="10">
@@ -13,35 +14,37 @@
               <el-input v-model="searchForm['name']" clearable placeholder="请选择原子指标名称" />
             </el-form-item>
           </el-col>
-          <el-col :span="10">
-            <el-form-item label="指令类型" prop="indexSource">
-              <el-select v-model="searchForm['indexSource']" clearable placeholder="请选择指标算法">
-                <el-option
-                  v-for="item in indexAlgorithmOptions"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
           <el-col :span="4">
             <el-button type="primary" @click="handleSearch">查询</el-button>
           </el-col>
         </el-row>
       </el-form>
+
       <div class="main">
         <vxe-grid
           ref="xTable"
           row-id="id"
           v-bind="gridOptions"
-          style="margin-top: 10px"
-          :checkbox-config="{ labelField: '', highlight: true, trigger: 'row', reserve: true , range: true}"
+          style="margin-top: 10px;width: 850px;"
+          :radio-config-config="{ labelField: '', highlight: true, trigger: 'row', reserve: true , range: true}"
 
-          @checkbox-change="selectChangeEvent"
+          @radioConfig-change="selectChangeEvent"
         />
         <div class="main-right">
-          111
+          <!-- <div class="chart-content">
+            <span class="title">提示词配置内容</span>
+          </div> -->
+          <div class="model-content">
+            <vxe-grid
+              ref="modelTable"
+              row-id="id"
+              v-bind="modelGridOptions"
+              :checkbox-config-config="{ labelField: '', highlight: true, trigger: 'row', reserve: true , range: true}"
+
+              @checkbox-change="selectChangeEvent"
+            />
+            <div class="title">提示词配置内容</div>
+          </div>
         </div>
       </div>
 
@@ -69,6 +72,8 @@ export default {
       dialogOption: {
         show: false,
         appendToBody: true,
+        width: '1400px',
+        height: '800px',
         title: {
           title: '选择原子指标查询语句'
         }
@@ -83,14 +88,23 @@ export default {
       // 表格配置
       gridOptions: {
         ...mixin.data().gridOptions,
-        height: '320px',
+        columns: [
+          { type: 'radio', width: '80px' },
+          { title: '指令名称', field: 'name', align: 'left' },
+          { title: '指令类型', field: 'indexSourceName' },
+          { title: '三元组', field: 'remark' },
+          { title: '属性', field: 'remark' }
+        ],
+        data: [{}]
+      },
+      modelGridOptions: {
+        height: '240px',
         columns: [
           { type: 'checkbox', width: '80px' },
-          { title: '原子指标名称', field: 'name', align: 'left' },
-          { title: '指标来源', field: 'indexSourceName' },
-          { title: '指标说明', field: 'remark' }
+          { title: '属性名称', field: 'remark' },
+          { title: '属性类型', field: 'remark' }
         ],
-        data: []
+        data: [{}]
       },
       // 上个界面传递过来的已选择的原子指标
       selectionRows: []
@@ -98,11 +112,11 @@ export default {
   },
   methods: {
     // 显示弹窗
-    show(data) {
+    show() {
       this.dialogOption.show = true
-      this.selectionRows = data
-      this.searchForm['name'] = ''
-      this.fetchData()
+      // this.selectionRows = data
+      // this.searchForm['name'] = ''
+      // this.fetchData()
     },
     // 获取原子指标列表
     fetchData() {
@@ -180,5 +194,43 @@ export default {
   <style lang="scss">
   .SelectSql .el-dialog {
     background: #fff;
+    .main {
+      display: flex;
+      margin-bottom: 20px;
+      height: 550px;
+      .main-right {
+        flex: 1;
+        margin-left: 24px;
+        .chart-content {
+          background: #FFFFFF;
+          border-radius: 6px 6px 6px 6px;
+          border: 1px solid #D9D9D9;
+          padding: 16px;
+          height: 100%;
+          .title {
+            font-weight: bold;
+            font-size: 18px;
+            color: #333333;
+            margin-bottom: 16px;
+          }
+        }
+        .model-content {
+          background: #FFFFFF;
+          border-radius: 6px 6px 6px 6px;
+          border: 1px solid #D9D9D9;
+          padding: 16px;
+          height: 100%;
+          .title {
+            font-weight: bold;
+            font-size: 18px;
+            color: #333333;
+            margin-bottom: 16px;
+            margin-top: 16px;
+          }
+        }
+      }
+    }
+
   }
   </style>
+
diff --git a/src/views/ruleEngine/indexRule/components/CustomLogic.vue b/src/views/ruleEngine/indexRule/components/CustomLogic.vue
index 73bb002..e35d243 100644
--- a/src/views/ruleEngine/indexRule/components/CustomLogic.vue
+++ b/src/views/ruleEngine/indexRule/components/CustomLogic.vue
@@ -40,41 +40,58 @@
             {{ logic.label }}
           </el-radio-button>
         </el-radio-group>
-        <div v-for="(subItem, subIndex) in item.atomicData" :key="subIndex" class="flex-row row-content">
-          <span class="row-line" />
-          <el-button
-            icon="el-icon-remove-outline"
-            type="text"
-            style="color: red"
-            :disabled="item.atomicData.length === 1"
-            @click="handleRowClick(item, subItem)"
-          />
-          <el-select
-            v-model="subItem.atomicIndex"
-            placeholder="请选择"
-            clearable
-            style="width: 300px"
-          >
-            <el-option
-              v-for="option in atomicIndexData"
-              :key="option.id"
-              :label="option.name"
-              :value="option.id"
-            />
-          </el-select>
-          <el-select
-            v-model="subItem.relationalSymbol"
-            placeholder="请选择"
-            clearable
-            style="width: 150px;margin-left: 20px"
-          >
-            <el-option
-              v-for="option in symbolOptions"
-              :key="option.value"
-              :label="option.label"
-              :value="option.value"
+        <div v-for="(subItem, subIndex) in item.atomicData" :key="subIndex">
+          <div class="flex-row row-content">
+            <span class="row-line" />
+            <el-button
+              icon="el-icon-remove-outline"
+              type="text"
+              style="color: red"
+              :disabled="item.atomicData.length === 1"
+              @click="handleRowClick(item, subItem)"
             />
-          </el-select>
+            <el-select
+              v-model="subItem.atomicIndex"
+              placeholder="请选择"
+              clearable
+              style="width: 300px"
+            >
+              <el-option
+                v-for="option in atomicIndexData"
+                :key="option.id"
+                :label="option.name"
+                :value="option.id"
+              />
+            </el-select>
+            <el-select
+              v-model="subItem.relationalSymbol"
+              placeholder="请选择"
+              clearable
+              style="width: 150px;margin-left: 20px"
+            >
+              <el-option
+                v-for="option in symbolOptions"
+                :key="option.value"
+                :label="option.label"
+                :value="option.value"
+              />
+            </el-select>
+          </div>
+          <div class="row-sku">
+            <div class="row-sku-top">
+              <i class="el-icon-circle-plus-outline" style="color: #3763FF;font-size: 14px;" />
+              <span>添加单个条件</span>
+              <el-radio-group v-model="subItem.groupLogic" class="group-logic">
+                <el-radio-button
+                  v-for="logic in logicSymbolOptions"
+                  :key="logic.value"
+                  :label="logic.value"
+                >
+                  {{ logic.label }}
+                </el-radio-button>
+              </el-radio-group></div>
+              <div v-for="(items,i) in "></div>
+          </div>
         </div>
         <el-button
           icon="el-icon-circle-plus-outline"
@@ -108,7 +125,7 @@
 
 <script>
 import mixin from '@/views/mixin'
-
+// import { CirclePlus } from "@element-plus/icons-vue";
 export default {
   name: 'CustomLogic',
   mixins: [mixin],
@@ -128,7 +145,9 @@ export default {
     return {
       // 原子指标逻辑数据
       logicData: [
-        { groupLogic: '1', rowLogic: '1', atomicData: [{ atomicIndex: '', relationalSymbol: '' }] }
+        { groupLogic: '1', rowLogic: '1', atomicData: [{ atomicIndex: '', relationalSymbol: '', attributeList:[{
+          
+        }] }] }
       ],
       // 逻辑运算符
       logicSymbolOptions: JSON.parse(sessionStorage.getItem('logic_symbol'))
@@ -240,6 +259,7 @@ export default {
   .group {
     border: 1px dashed #999999;
     position: relative;
+    padding-bottom: 40px;
     .group-title {
       position: absolute;
       top: -10px;
@@ -254,7 +274,7 @@ export default {
       background: #ffffff;
     }
     .row-content {
-      margin: 30px 0;
+      margin: 30px 0 16px 0;
       align-items: center;
       .row-line {
         width: 50px;
@@ -277,6 +297,18 @@ export default {
       bottom: -15px;
       left: 310px;
     }
+    .row-sku {
+      padding-left: 50px;
+      .row-sku-top {
+        span {
+          font-size: 14px;
+          color: #3763FF;
+          margin-left: 4px;
+          cursor: pointer;
+          margin-right: 16px;
+        }
+      }
+    }
   }
   .group-logic-content {
     padding: 30px 0;