From 56ca28233a84c5aa3ca93cae266b2d008ea348e1 Mon Sep 17 00:00:00 2001
From: lbq <1065079612@qq.com>
Date: 星期三, 24 十二月 2025 09:54:13 +0800
Subject: [PATCH] Web页面优化

---
 rsf-admin/src/page/basicInfo/warehouse/WarehouseList.jsx                                         |    6 
 rsf-admin/src/page/orders/preparation/MatPreparationPublic.jsx                                   |  483 +++++++++++
 rsf-admin/src/page/system/menu/MenuList.jsx                                                      |   68 +
 rsf-admin/src/page/system/role/AssignPermissions.jsx                                             |    6 
 rsf-admin/src/page/dashboard/NbPie.jsx                                                           |    2 
 rsf-admin/src/page/dashboard/NbList.jsx                                                          |  199 +++-
 rsf-admin/src/layout/SubMenu.jsx                                                                 |  120 ++
 rsf-admin/src/page/dashboard/NbCard.jsx                                                          |  365 +++++++-
 rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx                                          |    7 
 rsf-admin/src/themes/ThemeSwapper.jsx                                                            |    4 
 rsf-admin/src/i18n/zh.js                                                                         |   45 
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx                                              |   10 
 rsf-admin/src/i18n/en.js                                                                         |    2 
 rsf-admin/src/page/ResourceContent.js                                                            |    3 
 rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx                                          |    7 
 rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx                                              |   12 
 rsf-admin/src/layout/MyMenu.jsx                                                                  |  166 +++
 rsf-admin/src/page/basicInfo/companys/CompanysList.jsx                                           |    7 
 rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx                                       |   10 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatPreparationController.java |   96 ++
 rsf-admin/src/layout/Logo.jsx                                                                    |    8 
 rsf-admin/src/page/orders/preparation/MatPreparationList.jsx                                     |  422 ++++++++++
 rsf-admin/src/page/orders/preparation/MatPreparationPanel.jsx                                    |   89 ++
 rsf-admin/src/page/orders/preparation/index.jsx                                                  |   18 
 rsf-admin/src/page/system/role/RoleList.jsx                                                      |   15 
 rsf-admin/src/layout/AppBar.jsx                                                                  |   34 
 rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx                                                 |   48 
 rsf-admin/src/page/orders/preparation/MatPreparationItemList.jsx                                 |  209 ++++
 28 files changed, 2,198 insertions(+), 263 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index b4c4cc8..2e3b8db 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -217,7 +217,7 @@
         locDeadReport: 'Locs Dead Report',
         stockStatistic: 'Stock Statistic',
         statisticCount: 'Statistic Count',
-
+        preparation:"澶囨枡鍗�",
     },
     table: {
         field: {
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index ee0284b..c56d5f1 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -172,7 +172,7 @@
         companys: '寰�鏉ヤ紒涓�',
         serialRuleItem: '缂栫爜瑙勫垯瀛愯〃',
         serialRule: '缂栫爜瑙勫垯',
-        asnOrder: '鏀惰揣閫氱煡鍗�',
+        asnOrder: '鍏ュ簱閫氱煡鍗�',
         asnOrderItem: '鏀惰揣鏄庣粏',
         asnOrderLog: '鏀惰揣鍘嗗彶鍗�',
         asnOrderItemLog: '鏀惰揣鍘嗗彶鏄庣粏',
@@ -228,6 +228,10 @@
         inStatisticItem: '鏃ュ叆搴撴槑缁嗘煡璇�',
         outStatisticItem: '鏃ュ嚭搴撴槑缁嗘煡璇�',
         statisticCount: '鏃ュ嚭鍏ュ簱姹囨�荤粺璁�',
+        preparation: '澶囨枡鍗�',
+        check: '鐩樼偣绠$悊',
+        abnormal: '寮傚父绠$悊',
+        platform: '骞冲彴绠$悊'
     },
     table: {
         field: {
@@ -394,7 +398,7 @@
                 nromNum: "鏍囧寘鏁伴噺",
                 unit: "鍗曚綅",
                 purUnit: "閲囪喘鍗曚綅",
-                stockUnit: "搴撳瓨鍗曚綅",
+                stockUnit: "浣跨敤缁勭粐", //"搴撳瓨鍗曚綅",
                 stockLevel: "ABC鍒嗙被",
                 isLabelMange: "鏍囩绠$悊",
                 safeQty: "瀹夊叏鍊�",
@@ -406,14 +410,14 @@
                 flagCheck: "鍏嶆",
             },
             matnrGroup: {
-                name: "鍚嶇О",
-                code: "缂栫爜",
+                name: "鐗╂枡鍒嗙粍鍚嶇О",
+                code: "鐗╂枡鍒嗙粍缂栫爜",
                 parentId: "涓婄骇鏍囪瘑",
                 parCode: "涓婄骇缂栫爜",
             },
             warehouse: {
                 name: "浠撳簱鍚嶇О",
-                code: "缂栫爜",
+                code: "浠撳簱缂栫爜",
                 factory: "宸ュ巶",
                 address: "鍦板潃",
                 longitude: "缁忓害",
@@ -460,7 +464,7 @@
             loc: {
                 warehouseId: "鎵�灞炰粨搴�",
                 areaId: "鎵�灞炲簱鍖�",
-                code: "缂栫爜",
+                code: "搴撲綅缂栫爜",
                 type: "绫诲瀷",
                 name: "鍚嶇О",
                 flagLogic: "铏氭嫙搴撲綅",
@@ -601,10 +605,10 @@
                 color: "棰滆壊",
             },
             companys: {
-                code: "浼佷笟缂栫爜",
+                code: "缂栫爜",
                 name: "鍚嶇О",
                 nameEn: "鑻辨枃鍒悕",
-                breifCode: "鍔╄鐮�",
+                breifCode: "鏄电О",  //鍔╄鐮�
                 type: "绫诲瀷",
                 contact: "鑱旂郴浜�",
                 tel: "鑱旂郴鐢佃瘽",
@@ -647,8 +651,8 @@
                 poId: "PO鏍囪瘑",
                 type: "鍗曟嵁绫诲瀷",
                 wkType: "涓氬姟绫诲瀷",
-                anfme: "璁″垝鏁伴噺",
-                qty: "瀹屾垚鏁伴噺",
+                anfme: "搴旀敹鏁伴噺",
+                qty: "瀹炴敹鏁伴噺",
                 logisNo: "鐗╂祦鍗曞彿",
                 arrTime: "棰勮鍒拌揪鏃堕棿",
                 rleStatus: "閲婃斁鐘舵��",
@@ -793,13 +797,13 @@
                 spec: "瑙勬牸",
                 model: "鍨嬪彿",
                 matnrCode: "鐗╂枡缂栫爜",
-                anfme: "璁″垝鏁伴噺",
+                anfme: "搴旀敹鏁伴噺",
                 stockUnit: "鍗曚綅",
                 isptResult: "璐ㄦ缁撴灉",
                 purQty: "閲囪喘閲�",
                 purUnit: "閲囪喘鍗曚綅",
                 unit: '鍗曚綅',
-                qty: "瀹屾垚鏁�",
+                qty: "瀹炴敹鏁伴噺",
                 safeQty: '鍚堟牸鏁�',
                 disQty: '涓嶅悎鏍兼暟',
                 splrBatch: "鎵规",
@@ -1055,6 +1059,23 @@
                 stockLocs: "搴撳瓨浣嶇疆",
                 stockQty: "搴撳瓨鏁伴噺",
             },
+            preparation: {
+                orderCode: "澶囨枡鍗曞彿",
+                orderStatus: "澶囨枡鐘舵��",
+                orderTime: "鏃堕棿",
+                anfme: "澶囨枡鏁伴噺",
+            },
+            preparationItem: {
+                matnrId: "鐗╂枡ID",
+                matnrCode: "鐗╂枡缂栫爜",
+                maktx: "鐗╂枡鍚嶇О",
+                unit: "鍗曚綅",
+                spec: "瑙勬牸",
+                model: "鍨嬪彿",
+                anfme: "澶囨枡鏁伴噺",
+                workQty: "瀹屾垚鏁伴噺",
+                status: "澶囨枡鐘舵��",
+            },
             task: {
                 taskCode: "浠诲姟鍙�",
                 taskStatus: "鐘舵��",
diff --git a/rsf-admin/src/layout/AppBar.jsx b/rsf-admin/src/layout/AppBar.jsx
index a9d3a88..892e82a 100644
--- a/rsf-admin/src/layout/AppBar.jsx
+++ b/rsf-admin/src/layout/AppBar.jsx
@@ -1,8 +1,7 @@
 import * as React from 'react';
-import { AppBar, TitlePortal } from 'react-admin';
+import { AppBar } from 'react-admin';
 import { Box, useMediaQuery } from '@mui/material';
 
-// https://www.base64-image.de/
 import Logo from './Logo';
 import { AppBarToolbar } from './AppBarToolbar';
 
@@ -10,16 +9,39 @@
     const isLargeEnough = useMediaQuery(theme =>
         theme.breakpoints.up('sm')
     );
+    
     return (
         <AppBar
             color="secondary"
             toolbar={<AppBarToolbar />}
+            sx={{
+                // 闅愯棌鏈�宸︿晶鐨勮彍鍗曟寜閽�
+                '& .RaAppBar-menuButton': {
+                    display: 'none !important',
+                },
+                // 璋冩暣宸ュ叿鏍忓竷灞�
+                '& .RaAppBar-toolbar': {
+                    paddingLeft: '4px !important', // 鏈�灏忓乏杈硅窛
+                    justifyContent: 'flex-start',
+                    gap: 2, // 鍏冪礌涔嬮棿鐨勯棿璺�
+                }
+            }}
         >
-            <TitlePortal />
-            {isLargeEnough && <Logo />}
-            {isLargeEnough && <Box component="span" sx={{ flex: 1 }} />}
+            {/* Logo 瀹屽叏闈犲乏 */}
+            {isLargeEnough && (
+                <Box sx={{ 
+                    display: 'flex', 
+                    alignItems: 'center',
+                    minWidth: 'auto', // 涓嶉檺鍒跺搴�
+                }}>
+                    <Logo />
+                </Box>
+            )}
+            
+            {/* 寮规�х┖闂村皢宸ュ叿鏍忔寜閽帹鍒板彸渚� */}
+            <Box component="span" sx={{ flex: 1 }} />
         </AppBar>
     );
 };
 
-export default CustomAppBar;
+export default CustomAppBar;
\ No newline at end of file
diff --git a/rsf-admin/src/layout/Logo.jsx b/rsf-admin/src/layout/Logo.jsx
index f3efa10..8933472 100644
--- a/rsf-admin/src/layout/Logo.jsx
+++ b/rsf-admin/src/layout/Logo.jsx
@@ -12,12 +12,12 @@
             <svg
                 xmlns="http://www.w3.org/2000/svg"
                 xmlSpace="preserve"
-                width={200}
+                width={145}
                 height={30}
                 {...param}
             >
                 <image
-                    width={200}
+                    width={145}
                     height={30}
                     href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB7sAAAHvCAYAAAAlw7u8AAAgAElEQVR4nOzdB/RdV3Hv8Z9c5YZ7t3HHvXfLKi64ATEOmEULwSQvkFAfCYQSEiAESIIJLQ8CIUAIHQIBNxFsq7n33jvuvUu2Zb21YQtkW9L/zv7fu8/MPt/PWl7JWu9F/zn7tnP2zJ6ZsPMeewlDt6KkKyRtJelRlhd4jmclrS7pNkk7SXqE5QEAAAAAAAAAAIDVcqzYSByQE93Jao1dGzAsf0yiGwAAAAAAAAAAAKWWYeVG4tAGrwkYpldJOp0VBQAAAAAAAAAAQCmS3aMxrcWLAobkbyT9N4sJAAAAAAAAAACA8SDZPXzrSdqjtYsChuRrkv6BxQQAAAAAAAAAAMB4kewevimSJrZ2UcAQ/FLSn7GQAAAAAAAAAAAAGAaS3cPHvG7gha6U9HLWBQAAAAAAAAAAAMNCsnv4DmntgoBxukfSSyU9zUICAAAAAAAAAABgWEh2D9d+krZu6YKAcZqfC0DuYCEBAAAAAAAAAAAwTCS7h4tT3cBzpdbll7MmAAAAAAAAAAAAGDaS3cNFshv4vbdJOoX1AAAAAAAAAAAAwCiQ7B6eDSVNauVigHH6Z0n/xiICAAAAAAAAAABgVEh2D880SSu0cjHAOJwg6f0sIAAAAAAAAAAAAEaJZPfwHNrKhQDjcImkP2ABAQAAAAAAAAAAMGoku4fnoFYuBCh0r6TDJS1gAQEAAAAAAAAAADBqJLuHI83q3qKFCwEKzZM0VdLdLCAAAAAAAAAAAABqINk9HLQwR9+9TNJVfV8EAAAAAAAAAAAA1EOyezhIdqPP3iLpVN4BAAAAAAAAAAAAqIlk9/htKumA6BcBFPqYpG+weAAAAAAAAAAAAKiNZPf4TWMd0VPflPRRXnwAAAAAAAAAAAB0gSTt+L00+gUABWZLOo6FAwAAAAAAAAAAQFdIdo9PWr+pkS8AKHCHpGNYOAAAAAAAAAAAAHSJZPf4TJL04sgXABg9LekwSfezcAAAAAAAAAAAAOgSye7xOTxy8ECBQyRdwcIBAAAAAAAAAACgayS7x+eQyMEDRm/Ms7oBAAAAAAAAAACAzpHsLreFpP2iBg8YfVjSd1g0AAAAAAAAAAAAeEGyu9y0qIEDRl+T9EkWDQAAAAAAAAAAAJ6Q7C730qiBAwbTJf0ZCwYAAAAAAAAAAABvSHaXWV7S1IiBAwZXSHoFCwYAAAAAAAAAAACPSHaXmSRpo4iBAwN6VNJRkp5mwQAAAAAAAAAAAOARye4yh0YMGjB4maRbWTAAAAAAAAAAAAB4RbK7zKSIQQMDeo2k2SwWAAAAAAAAAAAAPCPZbbeBpP2jBQ0M6H2SfsRiAQAAAAAAAAAAwDuS3XZTJa0YLWhgAF+S9BkWCgAAAAAAAAAAABGQ7LZjXjda9AtJ7+SVBQAAAAAAAAAAQBQku+0OihYwMIaLJR3NIgEAAAAAAAAAACASkt02+0raKlLAwBjukXSEpAUsFAAAAAAAAAAAACIh2W1zTKRggQGkRPfdLBQAAAAAAAAAAACiWY5XzOQiSf+YT8NOCBS3Z2kd50m6VdInJe3Q9wWp6Mj8ngYAAAAAAAAAAADCIdlt84P8H4ZvGonuqt4t6ZQeXS8AAAAAAAAAAAAaQxtzeDBZ0um8EtX8i6Qv9ORaAQAAAAAAAAAA0CiS3ejaFpJO5FWo5ieS3tuTawUAAAAAAAAAAEDDSHajSytJmi5pNV6FKs6T9OoeXCcAAAAAAAAAAAB6gGQ3unSSpG14Baq4XdIRPbhOAAAAAAAAAAAA9ATJbnTlW5KmsfpVPCPpcEkP9OBaAQAAAAAAAAAA0BMku9GFT0p6EytfzZGSrujJtQIAAAAAAAAAAKAnSHajtndJ+iCrXs0bJP2qJ9cKAAAAAAAAAACAHiHZjZqOlvR5Vryav5P03Z5cKwAAAAAAAAAAAHqGZDdq2VXSz1jtar4v6eM9uVYAAAAAAAAAAAD0EMlu1LAaie6qzpT0uh5dLwAAAAAAAAAAAHqIZDdqOFnS5qx0FTdLOrIH1wkAAAAAAAAAAICeI9mNUUszoyexylXMlXS4pEd6cK0AAAAAAAAAAADoOZLdGKVP0U67qpdJurZH1wsAAAAAAAAAAIAeI9mNUXm3pA+wutW8XtJpPblWAAAAAAAAAAAAgGQ3RuLVkj7H0lbzV5K+15NrBQAAAAAAAAAAAH6DZDeGbV9JP2JVq/mSpON7cq0AAAAAAAAAAADA75DsxjBtIulkVrSaUyS9syfXCgAAAAAAAAAAADwHyW4MyzI50b0mK1rF9ZJe1YPrBAAAAAAAAAAAABaLZDeG5QeSdmI1q3hU0mGSnujBtQIAAAAAAAAAAACLtRzLgiH4jKRXs5DVvEzSTT25VgAAAAAAAAAAUN8GknbII2zXl7Razisu4LWAE6tKeoBkN8br3ZL+klWs5vWSZvfkWluxoqQV+r4IWKpnJc2T9AzLtFjp87NSXifAg/mS5vKeDCE962yUH843lfRiSevmh/NleTiHpAn59/dJSY9IulfS7ZLuknSfpLvz5x1j+2NJR0u6k7UaSPouukzS3weIFaMxoeLv0CRJ/1fSPfz2jSmtz2aSvijpl85jLbG1pN1zx0CMLb0f1pA0J98fdC3dv67C5xhOTMjPxHPZz2pGek13k7RL/r3YPv/v2/R9YRDCWSS7MR4p8fo5VrCad0n6Xk+uNZKVJe2a2/i/JG+kp031tSS9KP+/r5BvGIDFSQ8FT0l6PG86PJg3im/N8/nTRuglPd5sP17SO9iQgSPP5M9jek8+sMjn9VpJl0q6kFEjnUgP43tJ2jn/HqeN6i0krdPDtcDwPLxI8vssST+VdAHru1gfyp89DK6le5t9JP1j/l2c7yAezxbk36x0j/vdSnH+iaRXxVyuzny20ev6NO+FIts5ieNVeYzkE3zXwon5+fDG43kvKxVV3SbpOkmX5/vme3mxXEt72AdLOkLS4ZLW6/uCIKwfk+xGqQMlfYfVq+azubIYPuyW28mnG4G98+ltYJTSibNzJE2X9N85qdYXR+TrXI13GJzZcAnhpIf98yT9StJP8kM+hi8lsY+SdKSkqUt5PYDxWD3/t0PeBPpw3sQ7OSe+T84Fa323J4nuIj8OGPOSpLFm03yG5tbjFQM7KNjadO0aSac3eF0r53sm2JyZ3xMeHLHIawlEcUX+Tv0fSafSmcCFlNB+k6TXSdqj74uBZvxqws577MXLCast8ilDEg91pE2QY/twoU6tmSvbdsmnt/fnlBgcSCe+T8tVsjMdPXwPWyomObetS0IP3SDpG5L+PbdERrnUPeWYfF80iXWEA3Nz56V/lnRVj1+Qv86nBTG4+3MHipoJz1G6gM1Sk9QVZvNKxTKTcgtmDO7Lkv6iwfVK+xqnOIgjmo9K+piTmG/K3x1AVA9J+mE+0EVReH0H5m5MR/btwtG89H2y8zK8zjBaKZ8sJNFdx7kkujuzr6Rf5FZ8aRPzg5JeQaIbTqTWh38m6d8kXZ0LkCY3+OIc4iAGYLy2kvSJ3Ab5R/nzC5tj8z3RLXmEDolueDFR0nGSrpR0Yk5e9tFLeUeazWwo0b0diW6zGRW7Qhxa6e+05H8bvS6+q8v8ykkcB5DoRgPWyHtZl+XuhfxG1TE17xvOJtGNRqWuESLZDau0ibMNq1bFPblVNupK8+bOzv+9nLVHEKnzwKycBGoJGzJozavz/LIfMwtrIK/I89B/mDs9AJ6ltvo3S3pPz16lDfIpEdj8sqH1ojjRrubrTyLB5tFcjNIiPqt2qdDyDCex8PqhNfvk4qLL84EjDN+OuWh8Rt43BFr1m3trkt2w+Dqznqr6A0n39eh6u7ZHrnA7h5ssBPZuSSc08gJuwOlNNOxVuaX5B3mRF2vPXO3/c0mbOowPWJp/kfSdHq1QmtO8ooM4ojmtoWuhONFmQcV50JtxP202O3d3a832knZr8LpGzdPsdr5r0aod84GjVOC8Kq/yUKTOvN/KhQQUjaN19+cDYCS7MbD3SnoLy1XNsTnpitFbO1f/XMCpFDQidYQ4T9LywS+HzXP0wSfzTO9tebV/I33mvyvpfEk7OYgHKPX6XKzRB4fxLjE7P3f5aMGLcmtMDO7MfFq0hnRYYQKvjUmrLcwPdhBDRF66cGya25gDLTs2z/RmnOf4vDGv45siXwRgkDryPCaS3RjQayUdz2JV857c3hSj9+bcLp4KWbRmr9xuLfLm1uEOYgBq2DLP3v+Tnq/2q/JJqtc5iAUYhtSG/9uNr+QEEihFWmphPi3P38Tgar7+3E/btZrs5r1gN8/Rye70W7usgziAUVs2n/D+IitttnEuqEvPHysEix0Yj+kL/29JdmMsqRL4e6xSNZ+W9PmeXGuXls/z57/B9yAalloV/TTo5S3DTDL00L9L+nBPX/h/z4V+KzuIBRimdLLiYw2v6IG5TTJspje0Xkc4iCGaWq//ShSjmF0l6YpgMQ9iDTowFEknxe5yEgvFCuibd+R9WwzmOEm/lrQ/64Ue+l2hIkkeLM02/LBU9T1md1aRZsHcLumoHlwrcHTQ5Nkk5vSipz6RR8f0yc851Y7G/W0uIG4RLVXt7pR0VrSgl4Jkqs0NFceVpfvp9Sr9rVbMafS69swjB2DzKyfrtULuogH0Tdq3/Rmv+lKlLks/kfQfjmMERil1M7hp4b9PshtLslquOF6JFarijDzbD6OV2pVfLmld1hk98omA8zQPdRAD0JU0OuaVPVn903OrZ6B1X2j0+kh02p0r6eloQS9BSqBt6zIyv06rGBnFKHattjCnY1aZGU7iSIUrGzqIA+jC0YxWXaI9JN0t6Q+dxgfU8JzCNJLdWJKTJG3B6lRxs6Qje3CdXXt1Y/PxAIvUInhioBVjQwZ991896G4wm1Mq6JGdJL2/sctNJ0YnO4gjmpaSaRQn2tV8/bmftnnCUXJz2Hgv2KV2wBc6ieWlDmIAupQ6n72GV+A53i7pAg5zAc+9tybZjcX5Tp6/htF7Ms/eeZS1Hqn3SfpRw9cHjGXTfDMcwWa5eh3os1Ukfb3R60/PH2dzr4ke+r+NzaWfRhewIjVP9o4ayW6bJysmUzfhftosFeHdGyzmQWwtaR//YbqTPqvznQRFsQIgfVXSBqzDb3xF0pccxAF07ZbcLfl3SHbj+T5JO+2qUjuWa3t0vV34rKR/6t9lAy9wbJAlaXWuKWCVTnG8rbFVW17SeZL2dRALUNsGjc2n56SZ3UWSrooW9BKsz8l+s1kVk6npfnrZSn+rFV7mMw8bz1ZlvHThoFgB+K3VJX2etdB/S3qrgzgAD9JYvAWLxkGyG4v6U0kfZEWqeVfDM6G8+FI+RQNA2jtIW2Q2z4Hf+wdJazW0Hv+bZ4sBfdVSspt53XYtJdNSAm1FB3FEUvP1Pyz+clXXarKbZyu7Z/MGugcUKwC/l1qZv7zH65ES3cc4iAPw4gXjakl2Y6F0A/w1VqOav5f0xZ5ca1e+EKhtM1BD+s0/wPlKT6RNG/AcKdH9sUaW5NuSpjqIA+jSro38zqX2yFs6iCOaUxq6liMdxBDN9ErxrsD9tNllki4OFvMgVqUwqchMSbc5iYXvWuC5PtnT9TiNRDfwHE8urlCRZDeSHSSdyEpU801Jf9uTa+1K6lDwzn5eOrBU3hNNB+a2mAB+7x2SXhJ8PT4k6Y0O4gA8aGHjmpOCdndKmhMt6CVYltOGZpfmhGoNqb38hnGWxoVTG72uKZLWdhBHNF46MK5KoSjwAjs31ilpEKdy3wW8wMzFjQci2Y01c4Xx8r1fiTpSK6Tj+nChHXpljyv9gLF4v0Fm8xxYvHcFXpdDczt2AL+1XwPrcKiDGKJJz4FPNXItk4KMxvGkZjKV+2m7VsfL8V1dxktL+8mNjTMChuXdPVrJk+nQASzWYn+rSXYjfWlu0vtVqOM6SS/rw4V2KJ0I/UZvrx4Y23aStnW8TrRcBBbvzZLWC7g2G0n6kYM4AE92yQXHUW2ek52waSmZRjLVrubrT4LT5gFJsyIFbMCzld31ks5zEgvftcDi7dyTz8cPJB3hIA7AI5LdeIG0+bgvy1LFo5IOy/MEMDpfkrQG6wss1bpOl2cLSXs6iAPwaJWgM7r+i99l4AVWy5t0UdFG0W5BPtndChJoNvdLml3pb72E+2mz1AbzsWAxD2LHXFwFm9McrRfftcCSHdv42vyrpNc4iAPw6ApJlywuLpLd/fUZSa/u+yJUdJSkm3tztd04hvc0MBCvp0P3dxAD4NlRwV6dD5MUA5YocgLiMAcxRHOGpFsauZYtuWczq5lMJTlm12oLc94LZX7pJA6KFYClO1zShEbX6O8k/YWDOACvljhuhGR3P71D0l/2fREqer2kOb252m6sKOmzfbxwoMBGTheNNm3A0qWTWssFWaN0avUTDuIAvNoi6CuT7rmnOYgjGi/zX4eBIia7mslU7qftas5Tr4l29nZP5OIUD5jRCyzdiyXt1+AaHSfpow7iADxb4r01ye7+OVrSF/u+CBV9RNL3enO13Tk+zw8EMDaPye4JbJ4CY9pY0q5BlukzDmIAPIs6s3uypA0cxBFNSydHOdlvVyuZmkYkTK30t1pxvqRrG7yuNXgvFEmz2+9zEguFK8DYJjW2RntL+g8HcQCe3b+0wjSS3f2S5nP/rO+LUNHXONVUxSskvb0H1wkMi8dkd9o838xBHIB3EYpCjiMZAoxpQdAlOsJBDNHcIOnMRq5lVVojm50t6bpKfyvdI6xV6W+1Ynqj15VOBb/IQRzRnOwk3pUaPbEKDFtLBybSuMGTHMQBeHfq0sYDkezuj3VJdFeVHpr+rEfX25VlJf1LPy8dKOZxE4w2e8BgvH9WUovjjzmIA/BuXtBXiN9ru9OiBbwUqThxbbfR+VSz0IFCM7tW53VzKriMl+/rA/IeLoClOzB3smjB9yWtw+sNjGnG0v4/kOzuj1NoOVfNFfm0MUYvbahvxToDJis4XC42z4HBTHa++fU+SZs6iAPw7qmAr9AOgUYpeNJSMo0ZsnanV/xbnLq3uV3SGZECNuCzaneppMudxMKzMTCYFzUysuHjjPUDBrbUQlKS3f2QTnTv0fdFqOTB3N7v6V5cbbe2lfThPi8AUGius4XbQtL+DuIAIlhZ0pZO40yV6H/lIA4ggvkBXyUSaXZPjnX6IJgDGrqWGh7KM4Br2F3Sdk2v5vClQoRnWrsoSXtKeomDOKKpNVt/ECS7gcFtG3ytUjH7RxzEAUSQDphesrQ4SXa37/OSju77IlSUEt2/7s3Vduvjfb54YBwecLZ4VLACNl5byKZE9+oO4gAieDzgq0RbXLuU6Lw3WtBLsBnFiWYzJT1S6W+RHLNrtYU5hUllvLwftpG0l4M4gCiit/7+VwcxAFGMWZhGsrtt75X0rr4vQkWvlnRub662W1MkvabPCwCMw53OFo/NOcDG49z9F+f7TgCDuT/YOq3RSJvI2n7V0LWk4sQJDuKIpGbyjGIUm2crt5ivifeCXfpNnu0kFlrQAzaRk90flLSzgziAKH45Vpwku9v1KknH930RKvpLST/pzdV27z19XwBgHB52tHgrcrIbMFvT4ZK9XdLyDuIAorgt2Cs1Jc9FhE1Lye7DHMQQTa22yOvlNqgY3BkBv4cHsb6kA/2H6U7qwvGYk6AoVgBsPBaCDyL9dn/If5iAGw8MMh6IZHeb0oPOj/u+CBX9s6TP9uZqu7ePpGP6vgjAODzqaPHS5vkGDuIAIlnNWaybUYQGmF0bbMmOdBBDNJdLuriRa5nIaUOz8yVdXelvHZJfIwzulEbX6mDeC0W8vB9WlTTNQRxAJFGLMT+YP/MABnPaIPvZJLvbk+a7TO/7IlSUigre35ur9YHW/MD4eGqdSuU6YLeyszX7gKQVHMQBRJF+h28M9moxcsSupVPdU/KJUQyuZgvzw3ldzFqd1817oYyX7+s0LmRtB3EAkUQs8NmGYnHAbKB853Ksa1PSF/zJklbq+0JUcjFzo6vbSdIbenbNozBf0jNB5u4tz3zAobvLUSxsng/fhZIukHRrbse3TMefoWfz53jdPNd533wSGOU8JZZT27g3OoijFb+QNEfSPGfPac/k/7lXvveluGF8bpD0RKB495a0tYM4omkpmUZxol2t138CI4HMrpd0XrCYBzGBU8FFznZUgMZ37fDdLOnMfO/1gINn4wU5hjUkbSxpd0m7dhhPCyLmtj7oIIbIzsijZOc7HKX2lKRVJL2MsSJDd9og/yDJ7rakD/pWfV+ESu6RdES+UUE972Ctx+VxSe+V9IN8g+19s/qJPMfmbfm1pyXbcHiZT7ddfrjD+D0k6ROSvp1/n7x7raTvUshSzFNnppfSfm0oTpD0J0E+v/8nt/uc6iCWqK4KFjeFaXYDzZQLhPeAzR25cKmGSbmYEIOrNUu9tgMoKC3i6f3AuIjh+Yqkz1ccJzEeO+eDaxsHiNWjaF2L95B0nIM4Inpa0h8EGUXyaUn7SfqlwzF0EZ01aGEaye52fFnSUX1fhIpSovvu3lytD+nH4di+L8I4pFOe++fNl0jSPI73SfqQpJ/nzx7KpZMMNzlZPx7mh+Mbkv48nwSN4vuSLso3rGsGX/8uzHcUy+sdxBDZE/lk/E8DXcPcfHIsJfImO4gnokuCxcxJM7uZubtKC7aXtFsj11LLjLwhWwOfT7tWW5hTlFLGy/th5/wfxied1H+TpOsCreNluWjpVLozFHk2WLxvdxBDRPPzSelzA8V+dh4FdK7DE+jRDDxuhJndbfjrfPIRdRydN+lR17TcLhV2acNty4CJ7kWlDaMjJX3HT0ghzXQUNJtz43eMpLcES3QvdA3vgWIPOIlj91xZjTLfyC3OIiW6F3VU8PuKLl0QKNb1c7EkbFpKph3iIIZoflkxXhKcNmmz/JxIARvQzt7u9twO1wMKwcfv4/meJVKie6Fn82f4Gh/hhPJgoGB3zvs3sJmX9x4iJboXujh3NsT4DPxsRbI7vtfm1gio4135dCnq4+GtzHm5UMDTScDx+FM218fFy/fXarnCEWXSA90ukn4WfP0uyDOKYeNlFAGFluX+tYGNjnRq9bMO4ojmoWBFs/swRqbI7IAxLwmFaTZpzNnplf7WJpL2rfS3WpES3b9u8LrWlrSXgziiSeMGnnESM9+145P2if4u8gVkX3URRSxeno0H8QH/Ibr0ttwBIar/ljS97y/iONxqKUwj2R1bah34vb4vQkX/LOmLvblaf17Z9wUoML/BqsHUPvXvHcQRUToNepqTuKfQqaHYDZK2CX6zv6hv+wklDA9jVNIG+5sdxBHRjyS9o5Fr+XHA1oFdOz+PaImCzXe7ayVdHi3oJViD+fxmc/KmXA3pBOOycZbGhVZbmE/J3WJg46UwaU0KwcflMElfDxz/otK4r6f8hBPCXUHi3I8RYEW+JembAeN+vo/4CieU0yx7DiS749o+z/NAHemL9f2sdWdeJmmLnl77ePx5Q5tti/oKowSKnONofiSz18ulURr3Rw1+MU7Lc4sxOA+t2tLvywoO4ogmdTJ4TUPXc0ueTYvBzQm2Voc5iCGami2sRy111lq9oeup4ZSKf4v7abtWT1bxXijjpfjh4Nz5DHZva6yI5Y7GusPU4GXE11je6js8tz7eyHWcF2yUlScnW2Ih2R3TGvkhmuH2daSN+OP6cKGOHdP3BShwS54H2qqbGr62UbnYUSzMJCvzOUlXRAx8KZ5qaMxCLR6KAw53EEM0lzQ64/wsBzFEcmagWPeQtK2DOKJpKdlNsYPdryr+LcZ82dzU8G8Wz1Z2F+ROHB7QRaVM2t/4t4iBj2Ge6+j88XKgY2lWz4cWYJMKCG9saM2YyW/3pLW4nmR3TKfk9pEYvZslvYJ17lQq6jiyx9df6vuO5k+NwkrtXdLIXekkjl0l7eAgjoj+o8FrWokTwmZPdvz3Uxv9PTuOIaJWq/mfdhBDFI/kqv4oDu37C1bgYUmzwkW9ZCTQbK6XdG6lv3UAnc/MvIxzGra9JW3d1iVVUbMwZSx815ZppXX5863sKxz35gaI8VV5XAFsWhslG+G96k16rrrHEhPJ7njSjO59+74IlaRE4ctpr9q5VLG+Uc/XwOqZRitcF/USP6GE4eVE8CEOYojozIbmdC9qQ0kr+gnHvScczPs9KsA6efPTPEqiRWzcDC4luh+KEiwnzYrMygnvFuzF/bZZzWQqxSh2rc7r5r1Qxsv7Ya9cSAqbNL/1fxpdM/Y/bTyM+BrLH/sOz6XUFe2kxq5pVwcxRGP+rSbZHUsaZv/avi9CRa9osF1sRC/r+wIU+Hnjbb6nSdrKQRyR3Olofjub52VqzoCsiRPCNnc7mEvGaBG7Vj+/yq2uMZjTA63T+pImO4gjmpZamJNAs6v5+nM/bTPX2gYzED6rdul+eo6TWCgEL5PmWt8WMfAxbEWhmdldzuNLBS1THMQRTWsFajuw91XE3IWFZHccb2poKH8Eb2t8YzISTpDZtVq1vhDzA+3OddJqdm02z4t5arU3TGzQ2dzQ8d9P83undhxDRK1usG8m6UAHcUQR6f7sILpuFGmpTTLJVJvUeWVmpb/14tzGHIObkxOcrdmQ3+Eipzuai8x3bZlW97ymOYghkicDHPShULxMa59xvuvtrswn/E1IdseQfuy+1fdFqOhTPWgBHcVk5k8VaXUe2UIkx+y8JEpTkmwVB3FEc6Oksxq8rhV4oDe7uOO//8qO/35EF0q6ttFrS5/fCQ7iiKDmLN9hYEPG7uK8KdOCDSRNauRaakkt7O+r9LcOYi/PrOXE2AoO4ojGy/thfb5ri7X6meb+y+bKir+9pXhN7e7J3RtawvvArmgfmxtk/7ZvcEaBZ6mo4EN9XwRHOMFrd17Dm+rKLZ32dhBHNF4eBvlMlzk1YtADmJxPpGBwF3a8Vsd2/PcjarUrQ3K4gy2M9owAACAASURBVBiiiLQpO4G2qkVa2ng/mJP9ZtMr/i2+e+1aTYzxbFXGy+GA9F070UEc0VwXrIBwUCvlYiYM7iLna7WxpN0dxBHNafnUfivWpjtekaJ7a5Ldvq2TP+Ar9X0hKklty9/ciyuNg8onu5ZmBS4O7wm7VABxjZNYmFVU5uSIQQ/gCPcR+tPlZ3kP5kwVqZkAqWli3qTFYCK1sp+cW9TDpqURWEc6iCGaWsnUiRSjmF0RICFSYhneC0XSacGbncRC4UqZVve8UjJsPQdxROK9o04aM7GcgziiaW2sbHpmXtVBHJHcW/r8TLLbt+m5hRhGLz0AvYJ1dmUrSfv2fREKMK8bz+flVOH2+T/YPFpxBmRtbNDZPJRPMnSFERJ2aT7omdGCHtCBuf0mxvZ0nhcbBYWFdndJOiNa0EuwHCNGzC7J+wk1TCYZYtZqh6TU/npTB3FE42W/ZALftcVaTXZz/2VX67e3FK+p3bOSTo8W9Bh4H9ilRPcTJf+HJLv9+mk+QYPReyBXVD7DWrvCjb/d7Q1ttC3O6rR+KeLlgZ4TgGVm5d+p1mxPSy+zG3PxQ1dIdtulQpW50YIeEO+HwaVE9x1RgqUQqUjalJsXMO7FSQm0TfyF5VrNZCobpnbM9sWivBQ/TKKLSpGH8/Nxi7i3tkl7+Jc7j5E9MLu0p31rtKDHwPvArvjejWS3T5+X9Mq+L0JFx+QkIXzh4c1uRuNFG1NywhuDu8PRaTJO5Zdprap1oQN8hBHKpR0Guw6vWZGW53WzITe4SCeQtpS0v4M4omkpmcYzmF3N15/vXpuHGk6MUZhkd5OjjjskP8rMyp/r1uwoaZcGr2uUrnReTJrup7dwEEc0rRWo7Zs718KmuDCNZLc/75T0rr4vQkXHNfzwE9mKnOAt0vq8bpKldjNy+9SuvSi3XYRdq90a+I63O6fDv72XpFU6/PtRtfr53Yb57SaRNm0OchBDRC0VppFAs3mgYmHpdnTFMUt7PY8Ei3kQm1OEWMTTdzWvX5lW97z47bU733l8FKeVaa1YnPeB3Tm5q2ERkt2+pCrqL/R9ESr6mKRv9uZqY5nEvHqzZ3Nis2U8ANhNdxJHSnSv6SCOaNLpg7MbvK5lGVVR5NwO/zbfv3bX5BMHLeL9MLj0PrggSrAUFhZJpwRvDhj34qSTJ/v5C8u1tNn+WKUA+e61azUxRmFSGS/FZ2uR7C7W6gx+uqrYneU8PpKcdjcFeF2tuHezG9eBAZLdfqTZlSf0fREqSknuj/bmauPhpsDuzAbnmixq9/w9icF5KoDg4a3MaRGDHkAqaNrUfZS+/FrSJR1GxEOaXasjCMR9mkmk0wkTKUQq0lK7xUkOYoim5mecYhS7Vu+lebaym+fo2TiNZ1vNQRzRXCTpqgava3W64BW50HFsm3JPVaS13+w16IZWZFz7KCS7fdgg33St0PeFqOSE3L4cfvEgb3dKtICNDg8VrQ+zHBVA8Jkuc3LEoAdwhPsI/UmtnOZ3FNVOtE0t0urv8vLMdDY5KVCs6aTgeg7iiMZLF51h4LSoXa3Xf01eH7PzG02MrUQRYpG053qXk1iOdBBDRK2OoNw3J7wxuLslXeF4vQ7N3exg09r+10F5pCMGdx/J7viWza2V2FioI1UCvqIPFxrYFlQ+FWn5BJlIlhbx0raPU/llHmv4c81pFLsu23mxoWr3qKTZ0YIeUEp0bxQi0u7dL2lmoHj5bra7saF2ixNIpppdLunSSn9rGidBzVrqurCoyewfFvH0fjjYQQwRtfpszLOW3QW5W4NX7F/aPdbgaE7eB3bpPfD4eP4Bkt3d+7mknfu+CJXczWmyEJgTZ3d3sHmQVmlT/cBYIbvgpXUqD29lUuX6AxEDH8M2kvZyHaFPXc7rJgFmN6fRz69oYW4y7of1ynht7Vpqt5jabW7mII5Ias6O5bfYLtIYCQu+q8t4mfW8t6StHcQRzSPBCggt+EzbneM4ttS1d6qDOKKZlQuFW0Jhk924D22R7O7W/5N0VJ8XoKIFOdF9T2+uOC5u9OxmOq9qHK9puW0qBnedpPOcrBef6TJeTuYPGzf8dg/kzjRdWJMZckVa3WAXBUwmkb7Hd6YAu0hLJ0e5X7Or+frz3WtzZy48axHvBbsrJV3sJBa+a8ukPa+HIgY+hm0l7eE6Qp/Odhxbej03dBBHNK11Y0kda1/iII5oxl1ITLK7O38t6c/7evEdONrRzS2WjvZ5dq22aFuIed12Xk4arUuirJiX0wfDRisnuzm5rVcXJjNnqkhLpz0XtbmkA/yE416k73EKkezmNtZukZPDNg9UnB/Lhqld+mw+FS3oAZAYK+Ppvoxkd5lWC8EpXrFLp3/PcBzfNAcxRNRa5wbuq+1SEcsN4/1HSHZ347WSPt3HC+/I+yX9opdXHs9+eWY3bFqe170MN4tFvDwMpvZNKzuII5pL8xzI1qxCS68iXRY0UZxgd1XDBZYUJA7urGE8rFfEZ91udkNdwyhksUuJ7kcr/S2SY3YkxrAoL++HDRnPVqzVQnASYnYznY8J4jW1u7nDTnajwvvAbijd8Uh215eqML/Xt4vu0Fcl/XNvrz4eHt7szgm2mWqV5ge+OFbInXvMUVUkN3hlWm2BPEXS2g7iiKbL0yic9rRruQCN7/TBRfoeX4suLEVa6qxEIYtdzdef7167Vn+LeS/YPVyxC8NYpuV5vrC5KBeTtmY1CsGLeC5m2iDvYcKmtd9s3gdlhnJvTbK7rvUkndinC+7YSZLe2usViIeqdbuW54KKk0ZFZuXWTh6QKCvT6mkUNujsLs5zBruwm6TtA62VF62OFlmRhJhJpO/xqXnDFTYt3YNzv21X65ThhhSjmKXxL7cEi3kQq+XCUdjMzAlvD3gWKtPqvXW6/1rTQRzReB4XdVB+ZoLN9MbWi/eB3a35/m3cSHbXs0KeG7RBXy64Y+dKelmvVyCeTXl4K3JKwJgtKICw8/IwuL+krR3EEc3djc0AXRTz9+26fPDj9bJ7uOHP71SeYwZ2w7Ae1is5MlCsXlzeULvFlemuZZY6a11T6W8dwklQs1aLRg/KnThgc7KT9VqGvY1ire55cf9ll2b6Xuc4Pl5TuycaHFNwlIMYokn72M8OI2aS3fWcwOmYam7nByakaXwnmaWK9TOCxWyxYR79AJsznawXG6dlUguneREDH8OuknZwHaFPXW7YsiFnl2b4PhQt6AHxfhhctA0b5ofaeT5VZJVODa8bK+TO1TzVz6l7u7OiBTwguquU8fJ9PSkf8IDNHcEKCC3ogmfnuavOsnxPF0mdKe8LGPeSLJvzG7AZ2qEtEkt1/Dvtaqp5Op9EeqAn19sSPiN26fTYgmhBGzDTyu6G3NnCAz7TZVo9jUKizO6uDgua1icBVqTl0SIUMA0u0vf4DhRkF2lp4537NbuaXZT2r/i3WnBPw8XgvBfsrpB0rZNYeBYqc3re521NOtSxXYPXNWqeW9qngpZNHMQRTWtjCg7kfWA2d5hz20l2j97fSPqT1i/SkVfkG1rEsgyVT0VanV20ECcZ7LxUrqebuwMcxBHR0G7ynGGDx25Gh6f8U8vqiR397cha/fxuS6eVgT0erJU9p4rsnmos2c3vs83tFZOpuzESyCx9/z4ZLOZBbClpX/9hujPbUUB815ZptRCcIlK7XzsvZqJ4sExrxeK8D+xm52LFoSDZPVp/JOnvW75AZ97a8WxLlDuAlk5mTze8qZ5MoAVQES8Pg6l4ZTkHcUSTHt5ubvC61pE0xUEc0XRZ0MRDml0qtrw0WtADIiE6uJmS7o8SLIWFRdJv9Z0B416cHfKYEQwuPX89U2m9SI7Ztdphhd/hMl4OB2xOIXiR+Q3vefGsZTcjvye8ooDB7vIGn595H9gN9beaZPfopBMx/9nqxTn0SUlf7fsiBMaPgd0ZeX5Rq1ILoM0avr5ReCJvsnvAw1uZVrs1pHuilR3EEU2XnRooNrJruQCNhOjgIp1AWoNCpCIt/VbzDGZX8/XnftqupXn6i6Lwwe5xR8/GdDEsk/a8bosY+BjWkzTZdYQ+eb7H3pJRE0VODRjz0qT3wX5+w3OLZHcAW0k6qe+LUNFPJX24N1fbJh7e7FqeCyreE0VmSbrXQRyMJSjX6ueaRJndmR2e8t8338vC5oRG12tVEqImkb7H0+u6uoM4omnpt5pkqk3NU4YkQ+zOkXRDtKAHMJFnqyKzHHVa4VmoTKstzKcxLspsvvMxQRSKl2ntsAdFpHZXSrp4mP8gLUaHb+XcSpsTTHWcLekP+3ChDUstnQ7s+yIUaL1l/+EOYojGy3sibcy92EEc0dzgfAbVeFC8Ytfl5g4bcnaP5uKElBheK1rwS3GrpGMau6ZRujC3s4/iiCZfhdG6RtJ5jVzLWiTQzGZXPGWY2lavVOlvtaLV5+NUmLS+gzii8fJ+mEgb+mKtJru5/7Kr+ftbgtfU7j7nBQwl2Me2G3rBA8nu4TuR0zDV3MyGbBO48be7VtL50YI22JrWL0W8VEXyvVymtRZOCx2Q2znBhmR3LMvnimROafRbtE1ZCpHsWjrVnU4hreYgjkhqJs/YMLVrNTHGfVkZL8/GkylWKNJScdmiJrAHWsRzMdMqFA8WOT2Pm2jFqpzwL3LKsP9Bkt3D9S2+4Kp5Mj8APtqT620ZG212rSbFFuLm3+4SR6fJaN1TptUNOt4PdjdJOqujv/3iXKAAG5LcULDv8b0lbeMgjmha+q2mhbldrWKHCWyYmt2SR8C0iHtpu0tya1QP2O8q0+qe1yRJmzmIIxrP74dU0LKOgziiaa2F+RS6oZndl7s2DBUzu4fn45Le1MrFBPDyfLoVsa1AgUiR1m4Kno/qdTsvJ422yvN+YfN4gy2cFmIz3e60Dv/2NJ4PgCJ3B0u0sPlu90ieAdsKikttrqvYWYtkiF06IbYgWtAD2EHSbu6j9MdTFw5+b8u0WgjO+8HuOuen/NnvKNNaQQvvA7sZozjdz2bWcLxF0kdauJAgjut4IxjDk06Pbch6mjzW2Ebb86UWQFN9hRSClwd6TqGUSZ/p+yMGPoZN84YtbLosaOIhDShzjqR5gdaOz7pd+q1+KFrQS8DJfruam7IkQ+xaTYxRlFLGy7PxtpL2cBBHNK0Vly2K+y877/v/dN+wO1vSjdGCHgPvA7uR7HuR7B6/9CDy9egXEchHJX2z74vQEB7k7WY3mhRbiBZAdvc6ehic7CCGiFrdoDuIe02zuR2e8l+WbitAsUhddzakEKlIS7/VPIPZ1fyM8/rYPEWHJCxiJG1RC1GsUCbtbTwYMfAxbM64qCKe77F3lLSrgzii8dR9Yxh2zv/BZiSFpGxAjs92kk6IfAHBfEPSx/q+CI2h8smu9RbmPNDbzZT0hJNY2Dwv0+pMMkYS2M3J7ZC7kD6/mwRaK8CTSJs2B+VRQrBpqbMY99s2j+X77Ro2537a7AxJdwaLeRAvyjNAYTNzFG1RC/FdW6blQnDYPF7x97cEBS1lWtvXJrdhl7qi3TCKf5hkd7nVJU2XtGLUCwjm1NwuHu3YQtJ+vJ5mrSbFFuIkg52XG8V98sxu2FyW/2vNcpwSLtJlwowNOaDMhZKuDrR2FCLZXSLpimhBL8FGkg50GZlfNTtrkQyxa7UYPCW613AQRzRe3g+rUqxQrNU9L5617Gbnbg1e8Zra3ZaL1FrC+8BuZPteJLvLLJPbJL04YvABXSvpZX1fhAbxY2CXNtoujRa0QWr/s0uYaP3wUvl8uIMYImp1HtlekjZ2EEc0XW7uUJEMlDk50Lotx2e9yPSAMS9Jev2X9xmaWzU/40cGWxsPTmn0ungvlPHybJzGe63tII5oLpB0ZYPXtRIHO4p4/n5fmwK1IinJOT9g3EuyHu+DIiO7tybZXeZHknaLGHhAj0o6QtK8vi9Eg7jRs2v9VDcFEHapIvJmJ7Hw+pU5PWLQA6Cll92teYOnCxtI2jPQWgGeRGq3eSDjCoq0dHKU4kS7WoWJK9MVx+wqSRcFi3lQ3EvbnSXpJiexMI6gTMudGtZ1EEc0nscETc0dHGDTUgGp8rPVSg7iiOTXks4eVbwku+0+JekPowUd2FGOblYxPCvlGwPYtD6vmwIIOy83/5vyQF/E+wyq8aD4wS51DVrQ0d+eygxfoMhtedZ+FHw3292d22i2gBEjdjfk7lo1TCYZYtbSLP1F7S5pOz/hhOEpMUaxQhnPyc3xYK/L7lLnI2S4p7abm/c8WnJAY9dTw9mjPN1PstvmbZI+ECng4N4QbPMIg5uUW31gcPc3tNG2OOsy06qIlwKIadxTFJnlfAZVqY0ofijS5eeZh3WgTEq0PBto7dhstTu9oS5jezBixKxmMpXfYrtInTUs+K4u4yVRuoWk/R3EEc3Dks5v9NooNLPz3tmSsUB2c3IRaUt4H9iNdN+LjenBpXk5X44SbAM+JOm7fV+EhvHwZjcznwJt1UG0fjG7Jbcx9+CwOMvmSqvdGqYxD9TsmY5b2jNnCigTKdGytaR9HMQRTUu/1Wy229V8/XlGtnmkYov52ngv2N3m6NmY++oys3PCuzWb5mIz2Hj5PC/OXpK28ReWe63tf+3AmOMiIy1kIdk9mJ0l/SJCoI34t9wuHu1io8WutVYvz8dJBjsvs56X5TNdrNU5/BQ/2KWH+ds7+tv7Sdqyo78NRDYvWAtdWqqW8XK/NQzcb9s8WXHcTNow3bXS32pFSnQ/1OB1rZtb2sNmxijbohrxXVum1U4NdMGzm+c82c1p3jKtjSng2crunDwiaGT4sh3b2pJOyZv5GL1Tcrt4tGvDPIMKNp5v9IaBmwQ7Lw+DqV31Jg7iiOayPIeqNRMofijSZZUzD+tAmdSK765Aa8fmu92Zkm6KFvQSrC/pQJeR+ZVOGd5TKTp+i+1a7pBExzM7L8/GK/IsVIxCcCzk/R6b7ht2V0u6MFrQY+CzbTfyggeS3Uu3TL6B3shzkA25SNLL+74IPZBu/Ffo+yIYtXhTsKgDOFVoNtfRaTJu8Mq0ukGXTqJs5iCOaLrcoOMzDJQ5JdC6rUpb1SIt/Van13+igzgimV4x1sPjL1d1rZ0QW4j7MrunHXXhSM9CGziII5q0H3xlg9e1PAc7itT8/bVaXdLejuPzqrXf7DUlTXUQRzQj/2yT7F66kzmBWs2vczWzl7ZDGB0e5O1afZBfiPeEXWqpeLeTWNiQKRMpSWLB59nuWknndfS3N6NVJlDM80bc803NHctgE+k1HsuRvsNzqVaxwzqcBDW7sNHEmDgxWGRWh+OAno9noTIt/d4uagoH6Ip4bmk/NSe8YVNrLEwtqYj0RbwHTG7OXZNGimT3kn2NDfyqXinpwR5db1/R3rZMq7OLFuKB3s7LSaOtqWotck+Nm7yO0IbTrsuWfdPybzMAm8vyf1HwXGuX2pefFS3oJViGk/1mNT/jaeN8lUp/qxWtFoOnjmebO4gjGk9dOHgWKtPqnhcjZOxSIdMljuPjNbWbl1vTt4RnK7sq3UlJdi/eX0r6U4+BNepYSRf0fRF64gDa25o9nCuVW7VFfl/AxssGDy25ypyeW9G3ZitJ+zZ4XaPW5QYdD+tAmWiJFjbf7byMixmGSZI2jX8ZVdUsROO32K7VcUB8V5fxMut5O7qDFrmjwUTYQhzssPN+/8UemJ33GewleB/YVbl3I9n9QkdL+oy3oBr2V5J+3PdF6BEe3uxm5YR3qzhlYuep0pWHtzKtbtBxw2/3WIctvZaj2wpQLNIJpF0k7eggjmha+q0mmWpX8/XnGdnm7oYTY3xW7a6TdL6TWHgWKjMjz11vzUsk7dngdY2a53vs3STt4CCOaFrb/9pL0jYO4ohkbj70M3Iku59rD0k/8xRQ474o6fi+L0LP8CBv12pSbKEpPsII5Qwnwa5EoqxYS6fFFsUGnV0qaHqgo7+dTvpt3NHfBiK7N1jXHe6/7ebmzfdW8B6wub/iZ3zvPBYIg5vTaIekDSXt5yCOaLyc6hbPQsVandfNb6+d986WvKZlWhs9wqEfu9m5WHHkSHb/3vqSTvESTA/8XNK7+r4IPbNJ3liHTatJsYV4T9h1dQr0+SZLWtdJLJGcmeeAtmZlih+KdPngx4YcUCYlQZ8ItHYHOoghmjNrbchUwMggu1m580oNbJzbeSn8HbZ9JC3f1iVV4SWJshqF/EWebay4bFE8a9l572zJa2p3TYOja3kf2FU7yEey+7cm5EoyNu3ruCi3i0e/pCTIsrzmJqlV9RWB4rXal5MMZk/Xav0yAKoZy7RW1boQxQ9lujyNwgY7UCbSCaSJFBYWOTNgzEtCW127mi1U+XzatVoMzrOV3XxJ5ziJJT0LreUgjmhSp4ZbG7yuVSVNdRBHNJ5bmK+TP+ewae03e0MKiYtU2wcl2f1bacNiVw+B9MAtbK721uF9X4ACkeZBljgsXsidS5WudziJhdevTKtt2viOt7s0/9eFrWmVCRRZEKxoaWruYAablsYIHeEghmhqvf5rsHFudmkuCG8RJ8XsUmHSr53EwndtmVafjadR/FDE8z32IbmbHWxObmy90vtgBQdxRHJFPvhaBclu6VvcVFbzZF7rB3tyvfi95SQdxHqYtZ7sJjlm5+VhcCeKxIrc2NhpsUVxGsWuy2QKhYdAmdm5eDcK7rXsbs0nzVqwCiNGzM6WdEOlv5Vem9Ur/a1WtNohaU9J2zqIIxpP+yXcW5dpdc+L+y+71Or6asfxcdjD7kFHYxiHhc+2XdV9r74nuz8m6U0O4uiLl0m6ru+L0FOpPdvGfV8Eo7sb2mhbnM2YH1jEywYPLTHLdNmyepR2zv/BpstkN4WeQJlom7JsvtudnmeItmBKbruJwdW81+a32K6lrguLomi0jJdn490k7eAgjmiulXR+o9fG/Zed92ImDnDZpc6Uj0QLeik4yFem6vNzn5Pdb5H0tw7i6Iu/cDRnFvXx8GaXqt/mRgvaIN0gTAgTrQ9X1Wz9MgY258q0WrnOw7zdffmEaBdWZoYcUCxSoiV1YdnFQRzRtJRM4xnMrubrz/2TTZf3TqPGZ9XuxtyJwQM+y2VaLQRPxQ/bO4gjGs/3X+mgzhYO4oimtf2vAznIZ3Z/Lnqopq/J7nTK9OsO4uiL4yV9ue+L0HOcArVrtWp9IVoA2Z3mJA7mC5Z5osEWTgtR/GA3I78nujCZk35AkeslnRto6dh8t3u6sQJtEmg2afbvGZX+1h60rTZL99GPB4t5EOvnDXTYePqu5ru2TKuF4Lwf7Lx3tuSeukxrBS3se9nNqH3v1sdk9yaSfuEgjr74saS/6vsi9NzmtKsu4iWxOQor0vqliJeHwSnMFyySqhnvDRj3WNbK7wnYdFnQxAYMUCbahg0bMnYp0XlHtKCXYEdO9pul5Nn8Sn+L32K7VovB0+z2iQ7iiMbLs/E6FIIXebT2ab+K+H63S7+/8xzHxz21XZrBfk20oMdA0YNd9d/qviW7l5c0XdKaDmLpg3MkHdv3RcBvHt5gc3Zuy9WqVLm+Ae8Jk4cdnQrmRr9Mqxt0qR32qg7iiKbLgiYe0oAykU4gUYhUpqXfar7r7Wp+xrmftmu1GJz3gt1cR8/G6bd2FQdxRJMS3Q80eF3rUvxQxPP916a5QzBsvM9gt9pK0r6xQnah+r1b35LdJ0jawUEcfXCrpCP7vgj4DR7e7Fq7KXg+3hN2M3PC2wPGEpRp9XPNSAK7c3M75C6k+XG7B1orwIunHc0GHUQqRFrNf5jutJTs5vfZ5pmKbZE3IBlilu6drgsW86DoeGY3O7c99oDv2jLTIwY9gPR5Xtl9lP54HiFzUI/HAI9Ha4c9KCK1O6eLfa8+fVi/y01INY/mDZYHe3K9WLKJ/CAUOSVgzBZHxAnVjZOdBLIHRWNFLpF0acC4B8G9lV2Xmzu8XkCZOcHaW1N0bJdaLZ4XLeglWIcEmlkqLL290t86NI91wuBaTYyljmdbOogjGk/7JRTyl2l1Xjd7XXapeOUmx/FxT233a0fdN4aF94FdJ7/VfUl2f0rS6xzE0RfpC+Dmvi8CfiO1elmfpTC5RdKZgeK1SvMDd40Vsgte5oQyf79Mq6e692ODrkiXVc5syAFlom3K0oXFLtpM9qWZxskys5q/zfwW27V6L81s3zJe3g/78ixUpMVZvgtRaGbn+ft9RUZzFjk9d8xpxWqMhyrSyb7Xcl380creKukDPbhOL14v6Yy+LwJ+h4c3uxmSFkQL2oCT/nbnOWrbx41+mVbndfN5trutw/ukNWmbapZOGXwwPzOtECx2DEcqDl9J0s8Cree+ea4cbFo6ZUYy1a7WZvsyJEPMbsvdNVrEvbTdFY46ZrHfVabV4pV02GdzB3FE4/n9cGAePQKb1jo3pET3Wg7iiOTmrva9Wk92pxPGX3EQR1+kzcDv9X0R8Bw8vNm12s5pITbf7LycNFo5j6iAzf1s0GERqcr52Y4WJCW6X8SLYZJerx8EihcQm+9F0hiuWQHjXhJO9ttcm08a1pA2zjcNsi5ezOjw3mmUNsvJMdh46sLB722ZVve8eD/Y3eS8syX7l3bz8+92S3gf2HU2h7/lNuY7SfqFgzj64tuSPt33RcBzbC1pb5bE5OkGbwoWtSatX4p4eRicnGdAwuZcSY83uGbp87yngzii6XJ2FSfJ7GZHCxhgQ6ZISnQ/GDDuxdknP4dhcDWTZ3w+7VpNjKWOWRMcxBGNl45ZaVzf/g7iiObOhgvBSXbbdZYQGxCvqd2cPLO7JRzysOvs3q3VZPcqOdG9rINY+iB9kb2p74uAF2BT3S61+LgjWtAGUzlVaHaHo4dBNufKtDQDdFEH8nku0mXlOjP37VouQEObNuakYJGWkmlszNrVvNdmw9TmmQDJkFI8W9k95KgLxz55ni9s0uf5qQbXjE4NZTyPe3sJxf1FWhvht20+/nTLSgAAIABJREFUUAubs7tar1aT3b9gTkY1qeXIUT25Vtiw0WLX6lzfhXigt5uRT/x7wOZcmVZnkh3mIIZoLpJ0dUcxb5k35TC4s/OsKSCSg3owqmwUTmvoWrhfs1lQcabglpwENUuvze3BYh7E8vlkN2xSovsRJ2vGd22ZLrtcjRKdGuzmOS8sZiRMmdb2vyhisTu3y32UFpPd3+ZEaTWP5ITmoz25XgxuJR7eirSe7KYAwm66kzh2lLSbgziiuUzSJY1eG59nuy5PDrIhZ9f6bzLadDivq1n6nb48WMxLsiZjpMzSqe5bKv0tfovtvDwLDduBuRMHbDy9HyjkL9PqiCD2P+1SMdNdjuPjntruOknnRAt6DLwP7DrtmNVasvszkt7oII6+SDd3N/Z9EbBYaS7zeiyNyTWSzgsUr9W+uQ0QBve0o6pIEptlWp0xmNp5becgjmi63KA7IuaSdYpkN6JZgWRakZaSaWmzfTUHcURySsVY+S22a/Vems3zMl7uzXaXtIODOKK5QNJVjV7bZAcxROO58GF1ChiKtPb8vAon/It0+mzVUrL7nZL+0kEcffHq3JYAWBy6K9jVap/XFZKldp5muFO5XqbVZBmfZ7s7O/yeXyUXoWFwt3U8Xx0okU4KbsjKmbXUbpH7Nbtar/+qkqZW+lutuDYnx1rEvbTdefnUoAcUlpVpdbxXOtixlYM4ovE8QiY9O6/hII5oWitQS0Us6ziII5Jbus5vtJLs/gNJX3AQR1+kooKf9H0RsFTMIrObFS1gIzbf7LzcKK5JoqzIvQ23aePzbHe6pKc6+ts8pNmleYLzowWN3uO72e7uxn6rScDYXF+xgD/9Fq9d6W+14tRGr+sluUsSbDy9HyhWKEMhOBa6zfmBHw5w2T3S4L42z1Z2ad9rQZcBtJDsTu1j/sdBHH2Rigo+2/dFwFJtRLLbLP0QzAgWs8Um+bQRbLxUPk+hJWaR9Jl+ImDcY9mAz3ORLjd32ICxa/XkCdrGZ90uFbbMjRb0EuzJyCCzmqfK2DC1azUxRkvUMl7eD+vSsrrInRSCYxEznBcWH+AghmhS8cKDjV0TRaR2nR/aip7sXr/yjKW+S0UF7+77ImBMaa7J8iyTyZm51UerUlXksg1f3yhc72iGOw9vZVrdoEvf8Ss6iCOSBbnCtSs8pNm1XICGNm0jaS9eW7OW2i1S7GBX816N32Kbx3IxSot4trJLidI5TmJJ4whWdhBHNDM67HI1ShtLmtTgdY2a5/uvLXNreti0NppzR0m7Oogjknkd73v9RuRk94Sc6F7PQSx9cLWkY/u+CBgID292rZ8gO8xBDNF4atPG6YMyrbZe5PNs12VB0/aSduvob0fVegEa2kQirUznGzJDxDOYzRMVC5t2krRLpb/VitQK9YEGr2sVZrcX8ZQo5bu2TGuzfBdKBzuW8xFKGPOdFxbTwrxMa/tfPFvZpe4dd3UdRORk9w/ZvKvmUUlHSnq6J9eL8ZnG+pm1nOxejvdEES+ngnfLyTLYnC3pxkbXjIc/uy6/4ylWsWu1UAVtoxDJ7qyGfqsZMWKXkqn3VfpbbJjatdohidntZTwlSrm3tltQeWxETdx/2aUTwL92HB8FLXY35j2wlvA+sHNx7xY12f05Sa92EEcfLMiJqpv7vhAYSHp425ylMrnRUUuuUZicZ3ZjcE/nk4UeHM7rVqTVEStT+I4v0uX74cgO/3ZUrZ48QbtWpxCpyPSAMS/JoYwYMav528xvsV2rv8VHOIghmvmOChH3k7S1gziiSSMJbm3wupanmKnIyY5jW4XXtEhrv9nr8GxVxMWzVcRk93uZG13V0ZIu7NH1YnyYFWfXaoXrQswvsjszzyXzgGrGMq2eRuH9YNdllfNauUABg7u1wXljaF+611qD19mspd9qTpbZ1eq6si6/xWZXSboyWMyD4r1gl+7LbnMSC/tdZVotXkkHOzZyEEc0njtbTsmJTti09hmfmgsfMLjLJV3iYb2iJbtfJel4B3H0xTsl/aLviwATKuDsWk2KLcR7ws7Le4KWmGVucnQyf9j4PNt1WdCUNmBW6/DvRzQzdzUCItmXV8sstc88J1jMS7IsI4PMLpV0RaW/le6lV6r0t1rRatezLSTt7iCOaDyNl6Hwt0yrY/sofrC7TtL5juPjNbV7LD9Dt4QiUjs3v9WRkt37SPqxgzj64jOSvtT3RYDJZpIOYMlM5jZ4U7CojTjZXcTLw+A0WmIWabVbw5aS9ncQRzRdFq/wkGbXegEa2sR3s905uTVuC9K99qaNXEstNe+1KRy1a/W3mJaoZbwUEW/C3kaRlNw8L2DcgyAxaud9r4TX1G6WpAeiBT2Gg11H55Ob0/1Rkt0bNzz/0qMfSXpf3xcBZikxNoFlM0lV63cHitfqoDzHCIO7wdFJI270y7Tapo0NOrsnJc3o8O/zmtk823gBGto0UdJuvLZmLSXTOGloVzPZzal7mycb/i3m2cruXkfJ7mm5kwZsPJ3MH6ZtJO3dzuVU43mvZEdJuziII5rW9r/S53prB3FEcn8uenAhQrJ7+TzgfE0HsfRBSrK8pu+LgCI8vNm1foKMU4V2nipdSZTZdZ3cHCU20+1SQdM9Hf3tlPzavqO/HdVZeWY3EMl2eSYwbFrqwsIzmM19FTfkUuezPSr9rVbM7vDeaZRW5NmqSHquesJJLDwLlWm1EJyTn3aPOy9m4jUt01pBC9/1djNzO3sXIiS7f5GrazB6aXbZEawzCjArrkyrVa7Kvy880Nt5KYDYP7ethk2rG3QT+Y4v0uXnmeSHXSvze9Ev2/F6m52X26q2IN2r7dfItdQyM2+410Ci267VYvDU/noDB3FE4+X9sAzPQkVanOW7EAkxu1n5BKhX7F/aXSrp8mhBj4HPtp2roibvye6vSTrcQRx98QeSHur7IqDIpDzDCIO7RtIFDa/XgcwPNHvC0angQxzEEFGrleuTJa3vII5oupy/z4ac3c3RAgYk7c4imHX53Txs3K/Z1Uye8fm0a+nzuSg2z8t46cKR9rte7CCOaGY2OMs3WYVnrSKei5lWzAc+YNPab/bG+fseNq4O8nlOdn9E0p86iKMv0onui/q+CChGUYpdq0mxhY70EUYop+e5ZB7Q5aPM9IhBD4D3g93lHd5XTZC0c0d/O7J5fV8AhMSpXrtTogW8FPw+29V8Btup4t9qwWWSLm702tgvsUuzum9wEgvftWVOjhj0ANIJ4LXdR+mP5z3Qvem+UaSle2rlItLlHcQRSRoFd72neL0mu18n6eMO4uiLtza8QY86OFVg1/q8blro2nm5+U/zBQ9wEEc0LbZwWojPs12X1a1bcfqkyDoBY0a/pffsXn1fBKPbJM0JFfGSrSppqtfgnEobcjdVDI2RQDYtzdJf1Hac8i/i6cQg+11lWh3bd5iDGKJJeyVXOI55XwcxRHN3HuPXEj7bdu5yGx6T3aldwHcdxNEXn5T01b4vAsZlS24MzOZKOjtYzBZbsvlaxMtNwrR8MhQ2rT7M7yhpFwdxRNPl55kZvmW2jRg0ei3df6/c90UwSidQng0V8ZJN5mSZWc3k2cqM+TJrtfPZwQ5iiMjLs/FW7HcVuVDS1QHjHgSfaTvv7a73dBBDNGfmve1WLM/c9iIku8ewecNtTjz6jqQP930RMG605LK7yVG76lHglIndOZKuchIL1YxlWt2g4ySD3YOSZnX492mbWmbziEGj1yhssfPSEncYDox/CdXV3JBbl2IEkzuY141F3CrpDCcLQvKjTKudDHfNxeCw8f79zvOz3c3RAh7DPpI2ch2hP7c4+q3+HU/J7om5lfZqDmLpg9Rq4o19XwQMxdEso1nrp2bf4yCGaE5yEu9yFCsUua/BFk4LsUFnlxLdj3b496lMLzNF0ksiBo7eYlyB3ZPRAl6CVSS9xWVkft1WeUOOU9026RToU5ECHlAaD/XyEJH6MkPSAicR8SxUptVkN4Xgdvd3XAg+lvV5BixybcCYl4bCJrvTHf1W/46nZPeJfLlUkyraj+zJtWK01uZUQZF0EmebgHEP4ou0PC7iJdm9h6SNHcQRTdqQebzB61ozJwBh0+Up/wm5Khll/oZ1QyDr8mKZLRss3iV5t6QNfIbm1umVW9hvGmx9urZco9f1gYavbZS8dMyaSCF4kbskzQkY9yAofrCb6XyvJO3PruggjmhWb+haUhHp2x3EEY3L7pZekt3fYOZFNdfntistbsp70pd5t3vkHwXYHdXgmr1V0jscxBHNlZLOdxIzD/NlWq1cT4nuFzmII5rTOox3X057jssfURCKQFblxTJrofNFet3f6SCOaGpvyNHC3GZSg2u2t6S3OYgjmqdzcYoHB+ZTn7BJr9+8BtdsHUmTHcQRjfdxbzs4iCGiltbtrykiNZvn6Lf6OTxUGH5K0psdxNEXd+Rk1M75JhLDl74gz5P0tz1Y270cxBDVMZI+39D1HCDpKw7iiOinjmJmBn+ZmRGDHgBt2uwukHR1h3//0A7/diu+nGfxURgK7ybyCpm9QdInc6FhVP/EhpxZ2pA7tfLfZDyfzWq53fe3IgW9FKlr5cluo/NtVt639IBn4zKtvvcP5rBPEe/zurd3EENEU/Ih2ppdc0YhFaZ9pIlXpK6ZuYuHO10nu9+R2/qgnim0JK3i1h5co2iVOi5T8wP9CYGvYaE/yh06UOYnTtZtQyqVi1wm6ZqAcQ+CMRV2Xbfs27vjv9+CNF/z+5Je0feFgHuttOSu7d25G1HU2P/cQRzRnNHBhhzFKHavbCTZvZOkcyWt5CCWiDydAp3mIIZonum4y9UoUfxgd1YeperZVoHW05PN8/30lwNfw+7O58l7VruIdGBdtjE/NM92BVr04x68qsuxqT5u/xQ8/hUknSjpP9lwLXaOpIucxDItv6aw8V6pXGq7fPMPmxkdr9c2Hf/9VqRitG/3fRHg3vK8REX+UNKaAeP+F0mfcxBHRGd0EDPPRnavbKDQMo0qu5hE97h4ebZ6cR7bB5szJd3e6Jod5CCGaNwmxBaxkZtI4nl/4D3EdGjrQooTi3Vxbz2QrpLdW0v6n47+NjBqd0ua3YNVThXLGzuII7LULucHAeNPNzMflPRoo7PHa/JUGPNSBzFE1Oq87oMdxBDNox1XBq/O7/JQvTEXJG3R0DWhLSS7y6yTT51Fmnn+VUnvcRBHVF2cMuTzWSbto7w9YuD5MM+JFDqMyzU5+eDB1I4PiEXlNgEyTvvzTFAkwl5JxAJILzYPuqf99nxoC2VuzYVNLnXxw50eKqdLWpk3FBqVTnXN7cGLu7WDGFrwGkk351MmE5xfz1p5zuHc/D85BTw+aX7gdx3FQ6Wy3X0Ntz06zEEM0aT3wgMdxpwS3S+KuXRupXEtN0r6Yd70jJQcw28t13DSiU34crvlttYfdVwktFz+3jlP0v9xEE9Ut3eUfOE5qdyXJF0SJLGUOt0dL+mhPKYR4+Op/TXPQmVabWG+v4MYorlT0tnOY57IHPZxe2Ue7bdJgFi3yfeEX3IQS2Tpe36B1/i7mNl9kqQtO/i7QC2tnvJ7vnV9hRPaZnlu8yOSbskX4mUDc0H+bzVJm1KpPlT/IekOJ7EckKsyYTNT0uMNrln6vE9xEEc0Xf/+c9pgdI7N/83LlcxzSTSGsHK+hzl4kfurlszv+ws8Tmlz8+8k/a2km3J3ji72R57v2VygsSkbsEORCtGf7uDvkuwen10kXSnpZEm/zp8LD7+7z+bn4TVz8ou9zeHyMq97WeZ1F7mr4S6XdD2zO1fSU85jXJ7f66FInV+vzvsht+fZ/R5+sxcmZFfLha6M6RsOL7/Vi1X7Ye6/JE2u/DeB2lqtZHy+FX2F04R0Im/nvi9Cj3zZ0aUe4iCGiFzf5I3DFNp5Fel6JhnzukdvRdY5nMsaTXQrF0li/CaQsGpaV/dqFESNXzpxd0z0i8DAuh4HtKhJQU4pejMjF4a2Zk0KwYt4mb+/NAs8n1ANZpV8yhttS9/xp3u+wpo34J+S9IaKfw/owhn5ZEAfeDj5AET1w7wB7wXzust0ndwcFdr22V0q6fKOY2BeN/BCP294Te5xEAPg2fwON+T6MNYMGKauxwEtimfjMtMjBj2AqflkKGwi7JWkxN2TDuIAopiTu3i4VSvZ/V5JH+Btix44pUcvMnNBgXKeZsRsTteVIqm46YaAcQ+CZLedh82dVucSA+NxcsOr15cCW6BUSp7d1tHq3cerBph4+r0+3EEM0TwT5CRviSPjhdy58yVdFSDONObkYQdxAFG4f7aukex+laTjK/wdwINWb+4WZ1N/IQEhnORsltVBDmKIqNXv+z0kbecgjmg8vB/ouAI81825MKlVV/N6A0v1vx0uz828NICJl3GAW0va20Ec0czJ8/VbxLxuu0gd8O51EAMQhft90FEnu9MNwo9H/DcAL9IJv7N79Gqs6yAGIKLPOIuZNm1lutxAHSXmt9vd46SAhZPdwHO1OmpioUt9hAG41eWG3BW8LYCBXezoFCiJzTKtPhvvkwsgYBPp/dDinHlgFNK97SXeV3aUye61Gp+RBjyfl0rUWlbpx2UCQ3VSh7MDF2cFSdN4ic1aPi1I8YPdDCezvjjZDTzXLxtfj7ThcJ2DOACP0mfjvA7julLSnbwzgIF4OinGs1CZVrueHeoghmjuyif9o2BmNzCYEIXko0x2nyhpgxH++4A3rW+oPd8CX+EAIXzaWZCTJG3oII5oPBUsDNN6zG8v4mVzh2Q38HtP5kKU1kWYhwh0oetC9DQH9IKOYwCi8HIvvZKkqQ7iiOZ6Sec2em0UP9jNCHZa+kEHMQARhMh7jSrZ/UNJ+43o3wY8ekLSzJ69Mo86iAGIxNusbvHwVqzV4qZ0yn+igzii8dLZZUUHMQBezMojBlr3MO84YLE8tFCNdLIN6Mq9jp6RJzOur0irY2M2yocDYBOtpX2rs+aBYXogP1+7N4pk9z9JOpa3E3pmVr5J75O+XS8wXp9wuILMZ7ab1/DJ7sMcxBDNOZJucBIzM7uB3+tLx6XrHcQAePO4k84OJLuBsc3Jh0c8oGV1mVbndU/j+apItL2Sax3EAHg3M8qhx2Enu98j6X1D/jeBCPrWwjy53UEMQBRfkHSWs1i3kbSPgziiSTd5dzd6bQc7iCEaT5s7bMYAv9fqxuvzebu3ADxI92r3O4jjCrqhAWPyVBRC1zO7RxsuBD/CQQzRnCHppmAxX+ggBsC76VFeoWEmu18r6V+G+O8BkfQx2R3tBgboyqWS3u1w9alcL3NKxKAHcKCkLdxH6Y+nm35mdgO/dbGky3qyFmnO6S0O4gA88XKv9hCb6MCYvBSn7SRpNwdxRHN6bm/bmuUpBC8SJiG2iLRfd6WbaACfwhSSDyvZfYCk7w3p3wKiuSRXbffNdbxTgYH8kdNlomV1mVZnklH8YHdLrl734slAaweMUl9OdScLJP3MQRyAJ57u1ULMNwQ6cpmj4jQSm2VaPfiTZnVv7CCOaH4VNO7/dhAD4FXqJHZjlFdnGMnuzSWdPIR/B4gq6o/5eKUE/yOxLwEYuT/NlaLerCppCi+/2WVOX89hoG2f3YycaPLi3kBrB4xS3zou/cRBDIAXlzg7oTXTQQyAV6c5iotnoTKeXsNh4v1gd1Pg8To/chAD4FWovNd4k90Tc4uoFw0pHiCiPp0eWVRqy3a+n3AAd74k6etOX5aU6F7LQRzRtHqqe/PcpQc23hJqNzuIAejaXZJm9+xVSNd7uYM4AA+8bcidmkcrAHghL3tpa0ia7CCOaC6SdFWj10bXM7vIs9sv7fFBNmAsofJe4012pyrybYcUCxDRvT1vTdZq4gcYr3Ti852OV5GHtzKtFjcd5CCGaJ7On3NPru37iwLkjbZ5PVyInzuIAfDA473aPzmIAfDmAUd7aakQfHUHcUTT6rPxVpL2cRBHNNHfD//hIAbAm1udje4b03iS3Z+TdFSlOAGv5vR8RuYpDmIAvJmX25d7dgjvGrP7Gy5uok2bXbrhv8NZTKlt3FMO4gC61LcW5gv9p48wgE7d67Szw/cY/Qe8QHquetTJsvAsVKbVk7DsldjNc1gIbpV+q6+JFTIwcqmQ/NlIy1ya7P6/kt495FiAiOb0/FW7kJNkwAu8TtINjpdlR0m7OIgjmjRz8bEGr2tFTnYX8Vi5fqekExzEAXRlQcOzI8dyDSdSgN/cqz3hdBnenrvCAPgtT/fSBzuIIZq7Gx4bQ/GD3Zw8Sii6zzVwDcAwhSskL0l2v1HSZ0cQCxBRX0+PLKrPbdyB5ztO0k+dr8phDmKIqNUTOVMlbeAgjmi8djb5noMYgK6cl1ut9dWHHZ2SA7rg+V7tJkkfdBAH4IWXvbQ9JO3gII5o0qnuuQ1e12oUPxRpZa/kK5IudxAH4MGTETt4WJPd0yR9e0SxANFcyo/gb3zfQQyAB2+S9M0ArwTzusucGjHoAVC5bnd17mziUSq2uSXQWgLD1NdT3QulEzXv9REK0Anv3wHHS7rMQRxA186VdL2TV4Fn4zLTIwY9gDS/fS33UfrTUkv7LzqIAfAgHW68J9orYUl2by3pxBHGAkTT6nwaq5QA+kWskIGhOypIMdhKkvZ2EEc0Z+UTOS1ig8fO82b6fFoZo8fouCT9u6RvOYgDqO0MSTcHWPW/dRAD0DVPe2kU/trNz3NcW8T7we5KSZdEC3opvirpbLfRAfV4HN03pkGT3avkqq2VO4wV8Cbkh35E3pXbWwB9c3+egR2lbdMBktZ1EEc0ZzZ6XdtL2s1BHNF4//3/f7QyRg/dkecFQnpzw3M0gSWJUoj+s/wf0Gde7qXXl3SggziiSfdbv2702g5xEEM0LXZW+uNG2/QDFiG7Ww6a7D5J0pYjjgWI5F5mVT/HzXljDeiTKyRtlStZo6BSuUyrrXEnOYghmscC/P7fJ+lLDuIAakrf00+z4r9zhKQbnMQC1BCp69qfS3rQQRxAF+7InRg8SM9CE3kXmLV68GcXSTs5iCOaFjsrXcveGXou7XNfHHEJBkl2/1eeWQHg92ZKeoL1eI4fSvqwo3iAUfplfhB6ONgqU6ls90DDxU1THcQQzQX5PeHdP+TNRKAvaGH+XE/khDfPK+iD24O1HE3z9V/lIA6gCzMcFacd4CCGiFod6cheid3DDe+VpA4GL3cQB9AFL0VpZmMlu/9G0hscxg10jQ21xfukpOM9BgYMUZq1d3jABd1G0l4O4ohmZj7N25plJU3r+4tbIMop/8cl/YWDOIAanmm4A8d4XM+pFPTEOfl7IJI07/Y43qDoIU97aSQ37W7J37kt4p7JblbAAyAWJ0r6ozjhAkMzI+pSLi3Z/TpJf18xFiCSkHMLKvkrST/txZWib67Lra2i/jYe7CCGiKY3el1pPt0mDuKIJlLbvv+R9D4HcQCjNjuf7MQLncmpFPRA1Ja635T0AQdxALU8mws9PNhB0m688mZnBYt3UGsyv71IHw6CpY7H73QQB1DLU45+q82WlOxO1UzfdRw30KXUyuRGXoGl+kNJ33ccH2CxQNI7JL1E0mWBV+5IBzFE1OoDHO8Hu+sDbvB8hhPe6IGTeZGX6sRcrNfyyRv0W+R7tX+U9McO4gBqSKdAb3Wy0pziLXNSxKAHsJ+k1dxH6U/Y059GX8rFEI+Gihookz7Xd0Zdu8Ulu7eXdEIHsQBRtDqfZtheR/UbGvBVSatK+tfgl5Ie3KY4iCOa/8/enUDZdlZ1Av+/zDNJICGDhMwESJBBBplHkVEbFJQGRBAQW0XUbmkEscFuxQFnFBAEFAEZBQGZQYLMY4KQmYQAmYCMZE56HfweKYqqenWr7j1nn3t/v7XeSt57d9jnO1W3zjv723t3ic0z5vTY7l8ghrEZa5vkv0lyH7N7mWNjrers0wmtm8e8zlVkcX1sDjaiv6pVmc7rNSdsVenntWT35K4dc7XfNmhpP7mTk5w4tqA3oZthfJMkrx/tEcD6jPrf1suT3Tdq7Tp3GigeGAPJ7vXrdr8dmuRzYwkYmm4n22FJnjonCaJ7ttZcTGZeP++7LgV3KBDH2Iz5or/7TLtpkr8rEAtM03+6zly3S5Pcq13bXD+SmGFb5mW82JeSHJ7kf/v+ZI5V+X7dx0bwDem6XJ49wrjXw0bwyY11I/hmdO2dH9VGBOmYxLwa9X3Q5cnuf0tys4FigTH4StvNxfqdmeR2Sf5bkpOsG8W9o7Wwuk/7fp8Xdq5vzLy2MDe/fXLdppcPjS3oZbpE15OT7Nc2o11bKjrYGJtQJ/eSdqP/1WMLHFYwb50d/qAVobyqQCwwTacl+XiRFb2nltUbMq+ddLrOGj9cII6xWeTOSt2IoL2TPMe/qZkzo99IvjTZ/bp2gx9Y3SLuXJuWtyQ5pv3D4vj5OCTmwOmtRflPtIvVhxT6R/g0SW5O7qw53txk88PkPpzk/LEFvYoL2piR7mb6/0pybskoYX3mdVPSrHXVKI9tlaRvne9DZY6dPaf/rrykzfG+eZI3FYgHpqHSvTT/FtqYed1gqIX55C6dg43g0/B7SfZK8sdJrhv/4cD4OyZtTXb/eWvDAKzNDbXN6xIG90hyiyQvaDMEoS/ntI0Xz2hfg0ck+eV2o3de2xB1u5SPKxDH2HxgTttI7tU6FzCZeby5c1mSP0pyQGvF9oYk3ywQF6zXt9xo27Qz2oa/Q5I8uyUjfA4wFh+c84qqbuPlI9tYsN9fsNmozB/zusetUmX+tD1wvg6nFx92vfg9XQe4/9k2kv98ktcm+bKKb0Zq9HmvLcfd/kd+u+1EAdZ2RfuHpgqo6du7JeTunuRObZ7sAS0ps3zcAqylu9C8sFVgntMqPs5sc/A+n+SUBVy97sL7DwvEMTaPSfKaOTyun2gbPpjM7RZkLvCWJEe1X13y68Ak+ye5cftZvXuSXZPs6OfA+PybAAAgAElEQVQzAzssySuSPM2JmIluk9yd2/X5MW3U2QHtRh7Td327KbqDtZ3I45P8w4jinYZuBMFt2+bxO7af1we0lsx+LlPV5a1TQYUuSXea46TtLHUjUJ46h8e1Xxtft1uBWMbk15P86aIvwjbs1+5xH9c+//Zr19Hdv6V3SbJ9+7c307el3Rves10nsT7fbnmvi8e8Xl2y+0HtH1fn+8cVrGqnVvX5BUvUm52T7Jtkj3YxsFO7GICttrSfX1e3zSiXth/KF81pRe5GdTOoDmpr42J627Zr6/T5Vvk6b7oE0ZHt+8TXw7Z118ZXJvms3dnAgutuzN2kbUbd1b2DqdnSKoC6m8ZPmJNj6sPV7Ybc1+f/ULdpl5YE9+9mKtq5bUavci/t4Pbv4wttEFm3XdvPqXNGEu8k9m0biC71b+N12dI2PZ/Qvoegst9N8lxnaN3emOSnRhLrqrpkd9HQAAAAAObev7dqXdbn/easAgCwio+3bh6sz1OSvHTsa2UXGwAAAMAwbinRPbHRzxQEAGAmjpXontj7RxbviiS7AQAAAIZxf+s+sfeOLF4AAPrx49Z5Ih9LctqI4l2VZDcAAADAMB5o3SdycpJPjyheAAD68yBrPZG52UQq2Q0AAADQvxsnuZd1n8hctFkEAGDqbpbk3pZ1Iu8ZUaxrkuwGAAAA6F93M24P6z4R87oBAFjJj8l5TuSrSY4fUbxrcuIBAAAA+qeF+WQuTfKhMQUMAEBvHmypJ/KBJNeNKN41SXYDAAAA9GuLZPfEuhbm3xpZzAAAzN6NW2U36/eOeVoryW4AAACAft0jySHWfCJamAMAsJL7Gw80kStaZffckOwGAAAA6Jeq7sm9f2wBAwDQi4dY5ol8OMl5I4p3myS7AQAAAPr1AOs9kc8m+dKI4gUAoB87tcpu1u8987ZWkt0AAAAA/Tk6yR2t90TeN6JYAQDoz32SHGi9JyLZDQAAAMCGqTyZ3NzdkAMAYCoeZBkn8p9JPjeieNdFshsAAACgP+Z1T+a8NlcQAACWMx5oMu8fU7DrJdkNAAAA0I99W6tF1u8DSS63XgAALNONBrqVRZnIv40o1nWT7AYAAADox/2S7GmtJzKXN+QAANi0n7GEE7k4yfEVApk2yW4AAACAfmhhPrn/GFvAAADM3B5JHmeZJ3JqkosqBDJtkt0AAAAA/bifdZ7IF5KcPKJ4AQDox+OT7GetJ/LJCkHMgmQ3AAAAwOzdIcmh1nki7xtRrAAA9KPLbf66tZ7Yu0YW77pJdgMAAADM3r2t8cTeM7J4AQCYvRclOcI6T+ScJO8cUbwTkewGAAAAmL1HW+OJfDPJv48oXgAAZu+XkjzVOk/sdUmuGFnM6ybZDQAAADBbD09yR2s8kQ8luWxE8QIAMFs/muSvrfGGvHKEMa+bZDcAAADA7OyQ5A+t78TeO7J4AQCYnVsbcbNh/5LksyONfV0kuwEAAABm57VJbmF9J/a+kcULAMBs3CvJ55Psbn035I9GGPNEJLsBAAAAZuMlSR5pbSfWtTA/eWQxAwAwfT+T5INJtre2G9JVdX9khHFPRLIbAAAAYPpel+TJ1nVDXjfCmAEAmK5nJnmNNd2UPx5x7Osm2Q0AAAAwPT+W5GNJHmVNN+TbbmoCACy8bhTQ7y/6ImxSt4H0+FEfwTpJdgMAAABs3v2TnJLkXUnubD037EVJLhxp7AAAbM4Tk3wryaOt46Zcn+R3Rhz/RHYYUawAAAAwj7a0X9R3fTtXOyXZK8nBSY5q7crv7/xt2gVJ/mjkxwAAwPrsmuQuSe6R5E5J7ppkH2s3Fc9NcvIcHMe6SHYDAADAsLpZdP8vydech/KubwHulmRvHfOm7sVJLpqzYwIA+nefJM9Ics6S6zeGt/VcdJtGb57ktu26mun6dJLnL9KaSnYDAADAsB7e3v1g54EFdlWSv/UFAABMwS8keZiFZEE9cdEO2w5kAAAAGM6hrXUfLLpXJjl70RcBANi0HZPc2zKyoH4ryRcW7dAluwEAAGA497T28F0vsgwAwBTcLclBFpIFdEKSP1zEA5fsBgAAgOHc19pD3pDkc5YBAJiCB1hEFtRzF/XAJbsBAABgOFqYQ/ICawAATMn9LCQL6E1J3ryoJ16yGwAAAIZxyyS3sPYsuJck+dSiLwIAMBVHJLmzpWTBXJLkVxb5pEt2AwAAwDDubd1ZcN9K8uxFXwQAYGruYylZQE9O8vVFPvGS3QAAADAMLRZZdD+f5PxFXwQAYGoeaClZMC9M8rpFP+mS3QAAANC/3ZPcy7qzwJ6V5K2+AACAKdlN5yQWzHuT/IaTLtkNAAAAQ7hrkptYeRbUK5L8vpMPAEzRHVxfs0C6tuU/7YT/F8luAAAA6N99rTkL6nOtfTkAwDSZ182iuC7Jg5Nc6Iz/F8luAAAA6J8WiyyqJzjzAMAM3N+isiC6f0t+3sm+gWQ3AAAA9OvQJHex5iygX3ZjDgCYgZsluZuFZQF0HcI+7ER/vx0qBQMAAAAL4J5OMgvol5L8jRMPAMzAvRV3MueuTHKPJJ90on+QZDcAAAD0637WmwXz1CQvcdIBgBl5gIVljp2X5M5JvuIkr0yyGwAAAPrTVZzcx3qzQJ6U5OVOOAAwIzuZ180cOzHJXZNc4iSvTlsHAAAA6M+PtpmCsAh+UaIbAJixuyc50CIzh/4jye0kurdNshsAAAD6o6qbRfGcJC92tgGAGVPVzTz6uyR3S3KNs7ttkt0AAADQn/taaxbAXyf5PScaAOiBZDfz5jeTPNlZXT8zuwEAAKAfN21tzGGePS/Jc51hAKAHRya5o4VmjjwhySud0MlIdgMAAEA/7pFkF2vNHHtsklc7wQBAT4wIYl5c2roUfNwZnZxkNwAAAPRDC3Pm1TfbzbnPOcMAQI8eYLGZA+9J8t+SXOZkboyZ3QAAANCPe1tn5tDbkvyQRDcA0LNdXV8zB56S5MckujdHZTcAAADM3u2S3NI6M0fOT/LoJB9wUgGAAXQtzPez8IzUCUkekuSrTuDmqewGAACA2VN1wjz5iyT7S3QDAAO6v8VnpJ6R5DYS3dOjshsAAABmz7xu5sHHkzwuySnOJgAwsPs5AYzMh1tnpG84cdOlshsAAABma68kd7fGjNjXkzw0yV0kugGAAm7dKmNhDLrk9iOT3FOiezYkuwEAAGC27pZkb2vMCF2Q5KlJDk7ydicQAChC1yTG4B1ttvxBSd7kjM2ONuYAAAAwW27GMSaXJ3ljklckeZ8zBwAU9AAnhaLOTfKiJH+T5HwnqR+S3QAAADBb97G+FHddkncl+fskb0lytRMGABR1o9YOGqq4Ismbk7w0yQeclf5JdgMAAMDs3D7JHawvRXQ34s5K8pUkZ7T/finJh5Jc6CQBACPw8JbwhqFcmeSTSY5P8pEk70/yHWdjOJLdAAAAMDtdS+jntBZ2W6wzPem+1q5PclWSS5J8M8l5Sc5svwcAGKu9k5ya5GTX18zY1q+vy5J8o20S/Vz7JbldyJbjbv8ji74GAAAAAAAA1Lal/brOeQK2UtkNAAAAAABAdde3XwDfs52lAAAAAAAAAGBsJLsBAAAAAAAAGB3JbgAAAAAAAABGR7IbAAAAAAAAgNGR7AYAAAAAAABgdCS7AQAAAAAAABgdyW4AAAAAAAAARkeyGwAAAAAAAIDRkewGAAAAAAAAYHQkuwEAAAAAAAAYHcluAAAAAAAAAEZHshsAAAAAAACA0ZHsBgAAAAAAAGB0JLsBAAAAAAAAGB3JbgAAAAAAAABGR7IbAAAAAAAAgNGR7AYAAAAAAABgdCS7AQAAAAAAABgdyW4AAAAAAAAARkeyGwAAAAAAAIDRkewGAAAAAAAAYHQkuwEAAAAAAAAYHcluAAAAAAAAAEZHshsAAAAAAACA0ZHsBgAAAAAAAGB0JLsBAAAAAAAAGB3JbgAAAAAAAABGR7IbAAAAAAAAgNGR7AYAAAAAAABgdCS7AQAAAAAAABgdyW4AAAAAAAAARkeyGwAAAAAAAIDRkewGAAAAAAAAYHQkuwEAAAAAAAAYHcluAAAAAAAAAEZHshsAAAAAAACA0ZHsBgAAAAAAAGB0JLsBAAAAAAAAGB3JbgAAAAAAAABGR7IbAAAAAAAAgNGR7AYAAAAAAABgdCS7AQAAAAAAABgdyW4AAAAAAAAARkeyGwAAAAAAAIDRkewGAAAAAAAAYHQkuwEAAAAAAAAYHcluAAAAAAAAAEZHshsAAAAAAACA0ZHsBgAAAAAAAGB0JLsBAAAAAAAAGB3JbgAAAAAAAABGR7IbAAAAAAAAgNGR7AYAAAAAAABgdCS7AQAAAAAAABgdyW4AAAAAAAAARkeyGwAAAAAAAIDR2cEpAwAAAEauu7+xVzuE6wscShfDzkkuTnJ5gXgAAADmkmQ3AAAAMHYPTvIvSa5Kck2BY9mtxXHLJKcWiIfZ6+6xPSHJPgNscNg7yclJ/tl5BoCZuU2Sn07y7SKbK5fbPslOSf4+yTdqhQazJdkNAAAAjN1xLf6d2q8Kzk9ypq+shXFIkpcOeLD/LNkNc+WurWPJlYUPao8kn09yVoFYoA+PSvLbxVf62iSvLBAH9EqyGwAAABi7WxeM/z+TXF0gDvpxzMDr/JmB3x+Ynv2TvC/JLiNY05+Q7GaBVLzeXO6LSb5WKySYve2sMQAAADByQycaV/Kf9UJihm418OL6eoP5cfRIEt1piTVYFIeP4Di/XCAG6J1kNwAAADBm3YzkowrGL/m4WIZOdru5DfPjliM5km5Ux2kF4oA+7NlGllRnAwoLSbIbAAAAGLOj2tzQaiS7F8uQyamzk5y+iIsOc2oMrZI7JxWIAfpyRJK9R7Darj9ZSGZ2AwAAAGNWsYX5VUlOLhAH/di9tR0eSve1du2U33uHVsHWFcpc5+uonO68XJ/kKzM49wxvLJXdXyoQA/RlLN+XOr2wkCS7AQAAgDGrWAF3apJzCsRBP45Msu+Aaz2LKq7jknxmBq/L9HwiyZ2t51y6xUgOSrtkFskYOi6c365BYeFoYw4AAACM2XEFY1fttliGvgF+wgxecyxtlBeZ6r351G2euflIjkyym0Vy7AiOtfu5cEWBOKB3kt0AAADAmFWsgDMvcbHcauCjncXmiqGPiW2bxSYHhjeWqu7LjetgwVQcm7Pcp2uFA/3RxhwAAAAYq6767fCCsat2WyxDVkFfOaOEk8ru+nzOzKexfO+dkuSCAnGweQcleWqSq5NcYz1/wGVJbpzksGJxreSIJI9v53SR7JXkzCQvXrDjZgnJbgAAAGCsqlbAaS+8WIb8Ouxmc547g9cdS3XpIjtp0RdgTo2lq4Kfc/Pjrkl+Z9EXYU48rP1aRO+X7F5s2pgDAAAAY3XLgnF/qyUgWQwHtEqqocwi4XnQwMfEtnUVbKdbp7l09EgOyriO+VHxWgom9SkrttgkuwEAAICxqtju9eTW8pLF0CWmdhrwSGeRcDpaN8jyzEqeT9u38Rxj8LlFP1lzxNgK5oENOAvOhSsAAAAwVhWrkb5UIAb6M3TL4Vnc3B1LG+VFNm839Xdu3QS2JLmuQDxDOC/J7UY0a/faNif34AKxDGmX1tHlzBEfwzEFYoDNcv294CS7AQAAgDHatehc4S8WiIH+HDvwWs8i6anKr755+5y5a5u3yjh0ie43yy18z/NHPPP6JkmOKhAHbMYlOp7gBxIAAAAwRt3N2f0Kxn1igRjoz5CJ4QuSnDKD15Xsrm/ekt2+5sZl+0VfgGXG/HO/2zS4W4E4YDO6RPeFVnCxmdkNAAAAjFHVtpsnFYiBfuzQ5lsPpbu5+50pv/eORTsmcIPL57CCTbKbMRvzWIGK42BgUlqYI9kNAAAAjFLFucJnJPlKgTjox+EDz9f9wgSP3bLOxx2S5IANxkM/Tm1V/fNEwo2xOr99T45VxWspmNSYN5wwJdqYAwAAAGNU8Qatqu7x6SqZX5rkZkkumiD6S5McOvDR3i3Jy5Lss43H7Z/kM0l+dR2vefMpxcbszFsFm24CjFnXZeGKEccv2c08mLfRHmyAZDcAAAAwRhXbmKssGZ8uYf1zI439uPZrPdY7y1KFbX3z9jlzhG4CjNjYvx9tNGEe2GyKNuYAAADA6OyX5MiCQU/SVpoaqs5+n7bPrPP1zE6ub96S3YvyPch8GnOS7bACHUpgs76e5DSriMpuAAAAGIfdWrvX6xb8fF2S5DZJdi0Qy3Jfa7/fs05Ig+iKK65PcvEIYl2UFq7rTZBqaVvfl+fseHzNMWanjzh2Vd3Mg26UwDXOJJLdAAAAMA7HJ7ndSBKIs9Ql+3cuGtfrddH7rr2S/EmS3ywQy7astw342K1nnuXuSY4d8XFe1b4PdykQy6yc127sz5NF+R5kPo35+3HMn/ew1YlWgkh2AwAAwCgc3KqZ0xKJ1NMlufd2Xr7njCJxbMsizKi+IMmp63jcliRPalX51/YQ12Ztad93ZyU5M8lPJ/nDOU92d6MSriwQxzRpY85YnbvOz9aqjK1gHqxnMx8LQLIbAAAA6js6yfbOEyNywghC7TYnHFUgjlnrKg8vX8d7XJrkX0Z6jI9O8twkNyoQyyxclOT5Sf5szo5r3wX5HmQ+nTzyzSeLsNmL+fcl55hIdgMAAMAomGnKmFw1ktauRy7IfPV5vRHcbQB6VpLnJNmxQDyz8K12fC+av0P7rqNb+3wYozF/tu5uowlz4OokJzmRRLIbAAAARkGymzE5Lck5I4h3Uara5rHF5zNapfO8Jkq/muR3kryiQCyzpIU5Yzbmz9ZDWmcFGLOxXG/SA8luAAAAqE+ymzEZS5XNoiS756my+2lJ/t8cz8c/MclvJ3lrgVj64GcbYzbmz9bDCsSw1SlJ3t46rWypERIjcECS9zlRbCXZDQAAALXt0Fq9wliMpdrt8AIx9GEeWnw+NskftZvb8+hDrSX7f8zp8a3m1jXDgm26fuSfrZU2mry2dbIA2LDtLB0AAACUdkSSg5wiRuQ/RxLqkQVimLUz2q+xenySs5P8w5wmut+U5IeT3HsBE92dWxSIATbi9CRnjXjlKiW753HUBtAzld0AAABQmzavjM0YblzvsyCJtjG22e2Kc36tVfrdqEA803Zxkj9tvy6ar0ObyKFtMxeM0djHQ1TqqjCWDXIVbG3zfv1iLwP8IMluAAAAqE2ymzH5VpJTRxDvUUn2KBDHrI0pibB9kv/ZZlbP47npvi9+L8krC8RSwXGLvgCM2pirkfdoPwMruKDgNcMvJHlEkq8XiGWra5Psl2SXJE9Icl6NsKAOyW4AAACozUxTxuTkJJeNIN5bFoihD2NIdu+c5DeTPHNOk9zHJ3l2m8vNDbpkzSuSnGtNGJGusvYmSd484pN2VOtuUkF3zXB5kVg6eyX5gyQ3LhDLSv5OohtWJtkNAAAAtR3j/DAiY2ntuihVpZXPx95JnpXk6Ul2KhDPNF3bKri7pMkp83NYU/Xx9gvoV6XNXtU2ZP1i4UT3S5M8pUAcUJJkNwAAANS1T6FWk7AeY2mbvdFNJNe0mdLbTTmeWbisVc1V80NJfjfJk0awhpM6O8kLk7xkJB0OgMVTaTxOpWuGXZP8aoE4VvJJiW5Ym2Q3AAAA1LUoc4WZH2NJdj+9zYe+ZoLnnJ7kMUleNcO4tqVLpP7GOjbBdPf8rmgz1Ks4OskLkvxkoZim5YNJ/m+S987H4QBzrNJ4nErXDM9LcnCBOJbr5po/vFZIUI9kNwAAANSlhTlj8+WRxHvaBp839OaTj7T/jqk19t2TPD/JvQvEMk1d5fbLkvx52wgBMAa3KBTjSQVi6NwjyW8WiGMlXaL7nHphQS2S3QAAAFDXoswVZj58ZQGSfrcb+P3HMhN95yRPbBX0lRIr0/Ce1qb8X5JcPf7DARbIgUmOLHK4p7frhqHtleTVBeJYSZeE/2i9sKAeyW4AAACoq1KrSdiWsVR1b8aQ35PfSHLqgO+/Hgck+a0kv5hkl+KxTuL8JH/bfn19PGEDfJ9u89GORZZk+TXD3i0R320iur6H9+/e59tJ/j7JzXp4v0m9NMnx7bpjh57WpKrdknwtyVcXeA3YBsluAAAAqKtKReSVSa5NsmWg9+/ee7t2s6uay9sNyCHWZku7WbtjkcTiWOZ1b9Su65iVPUsnF64k7irefzvJIwvEMk3vTvKXSf51fg4JWGC3KnToy68Zfi7Jnw0USzXddeVPtw4p2y/6YjS/kuSvSkRCSZLdAAAAUNPBSQ4tEtldk3wmyY0Hev9vJnlhkmcM9P6r6eYm3yHJVQPNcr4myUVJ3pvkfgO8/3LznuzuKs72G/D9K67vY1ol920KxDItp7WKuq7a77z5OCSA76rUMeiLy36vm9ENtrRKd24w79eYbJJkNwAAANR081bNPLSzkny2xfDNAWM5ZPil+AFdC85L2h9eOWAcVTZFjGWe9EYdM/D7V7nR223E+dXWqnyvAvFMw3fazNYXJ/n0+A9noRyU5KYDfwYvtVOSy9pmqEXRXasc3bqMXFvgmK9vG9DObuMfuMEtC63F8jbmlWKjlmsWZFQOmyDZDQAAADUdXSSqk4rMCTy2QAzLLa9KGsJhSY4oEMflrc32PBu6/evQye57JXlmkh8fOI5pek+SlyV5U+EW8aztz1q730renOQRC3TeDi+62enBkt3fZ4dC43EuW3bNsHOh617q6TqufN15YS2S3QAAAFBTlXaOFW5gH1QkobtchWR3lRvXpya5oEAcszRksvvagTYTdKMLnpTkl5PcbID3n4WucvsVSV4zcLcKpmOo8RprOXXBzm3FMQbdiI//KBBHJYe366kKuu+Rby2JoxsTsv9Cnx3WcpLVYVskuwEAAKCmoatIt6qQ0D266D2MChsBbIroz5AtVk9vLXn70M0K/bEkv5Tk4QMe8zR1n2OvTfKqNpqB+VFxru28d7lY7va1wvmuD7SENzcYehTHUsuvGSrFRj0V/i1CcZLdAAAAUFOV2YUVbjBVbGF+YZGERpW1ObFADLPUVZwdNeD799HCvEs2PC3JzyfZs4f3m7VPtwT365J8dQ6Oh5XdqOC6nF4ghj7dsWBM7yoQQzXHFYrnhGW/rxQb9Sz/eoEfINkNAAAA9RzaZjEPrcoc5irVy0udkuSSAnHYFNGPrrvALgO+/6yS3V1V7H9P8pSirYgn9dEkr0/yBgnuhbBz0Y0Zi9Q9oDsHP1wgjuXeVyucEqp0DMoKP9MqxUY9X3ZO2BbJbgAAAKin0hzm8wvEUfEmaIW23bsPXG281LzPUxx6U8E0NxNsn+RhSX4hyUOm+LpDuLa1K35TkjcmOW/kx8NkdkuyR7E16+bAf71AHH3pNsnctFhMn2gb0vh+VTbHZYXkpTbmrObbvp9ZD8luAAAAqKdKcrdCJcVOraq2mj7aSm9Ll+jet0Ac57WNEfNs6O4C09hccZckT0jys0n2msLrDeHK1p783S25Pe/t81lbl+jetdgadYnu7xSIoy8VW5i/u0AM1exdaHPcOUlOW/L7/ZIcOWA81NYlui91jtgWyW4AAACop0qyu0JC94gkBxSIY7kKbburVEKd3JKQ82zIiriLNrGZoGsv/NiW4D54ynEN4ZttE063JvdK8jMtUdLd47x+Do5vEt1GoO2SPDPJ2eMJe6q6yu4txWJapKruzp0LxLCced0/6KhCXRC6a4arl/z+qIKbVqijQiclRkCyGwAAAOqR7L5BlZbuy1Vo211llnmFr5NZG/LrsKtqungDz7t3a/E9Tw5K8sQ5O6bNuCLJM8Yb/qbtVjCmRWulXy3Z3VUMH18gjmoqtTA/bdnvzetmLYtwjckUbGcRAQAAoJRdC7WarNDGvEpCd6mzV7hZOwSbIvpxeJKbD/j+G61qOnbKcVBP97Vx/gKfl50LxLDcIp2PYwpuSFPVvbJKCWXJbiZRoZMSIyDZDQAAALUc1dryDu2CVlE6tIrJ7q6q+7oCcVSp1Jr3ZPfQ7eI3eqNXsnv+LXp714qtj88tEENf7lowprcWiKGiSj8Plv9Mq3idRx0VNt4yApLdAAAAUEuVBGZ3c+nyAnFUrPipUGVyYJIjC8TROaNADLM0dJLgxA0+TwJh/p2w4Me/U4EYlvtGrXBm6l7F4jkryXsKxFFRpTbmSzfpbCmwoYy6vrYA15hMiWQ3AAAA1FIlQVWhYnDfQgndpSoku49OsmOBOM5pCYZ5NvT35Ebmw+/cvkaYb4s+y7RiG/NFmtl9twIxLPWOIl1XqjmkjeOo4OvL2pgf3uKDlXzF9zTrJdkNAAAAtVSpZK6S0N29QBzLVdgIUOXrpGt1f1WBOGZpyKqzr25wPny3SWT/GcRDLYve3nWHAjEsd0GtcGbmdkmOKBbTWwrEUFGlueonJ7lmye+Pm/LrXyM5OldOXvQFYP0qXhAAAADAIqvSzrFCQrdS282trtxgpe20VekAMO+VpXu0OfpD6b7Wrt/Ae2sLO/+6CsnTF3wNti8Qw3LfqhXOzNyzWDxamK+u0jiY5dcM3SiGxya5eBOvuaUVdX40ya8leeYmY5ymv07y8iQHtThZv72SfNp6sV6S3QAAAFDH/oUqpSokdCvO6z61SJvaKhsBKnQAmKUu0b3PgO+/0U0nFb93mK7lFZKLqFqy+ztJLiwQRx/uWyyet6roXVXlZPdpG+xespL9WuK8ipcl+eUWy2cKxQVzSRtzAAAAqKNr271LgWjOKjKHuWLCrsImgO0LtSWd98ruoSukN7qZQLJ7/i36vO4UrJTsEt2XFIhj1vZMcvdiMb2pQAxVVeqSM6vPrWPafOcfmtHrT+oNSX6hSCywEFR2AwAAQB1VElRnbrB18rRVmjO5VYUE0+FJDi4Qx/ULME9x6Hbxq3297dCqzrsb/D+a5JtJXrDk7yuOAGC65r2rwhhdtCDV9l2ie98CcWzVzbG7XgcAACAASURBVK7/QI1Qytm50LXUtTO6ZjgkyfFJdpvBa2/EO5P8dJFYYGFIdgMAAEAdxxaJpEJC99BCLd2XOqFADFU2RXQt3b9aII5ZOm7A9+5mmH6h/X83u/J+Se6T5EdaMnvvJY9945L/v0nrEsF8O9H5Lde2ejNzh8fkQcVifX2BGKo6uo3IqeCUJF+bchyHtrnOVTZf/F2SJxeIAxaOZDcAAADUUSWJWSHZXbGqO5uYoTxNVb5Ovlwghlkb8uuw67DwY0mekOTHtzGO8FNL/r9LbuzaQ3wM56oF6KqwHtcWi2cRWph3HlAghqXeXieUcoYexbHUtK8Zug43Hy+U6H53S3QfmORm7XN6KF3nnd3bz4kLhl0W6IdkNwAAANSwXaFqzArJ7oozhy9o1cxDG7q19lbz3kb5oIG7C3Tn+bXbSHJvtfRcVOyIwHSdluQca1ou2X1pgRhm7UeKJVA/3RKerKzStdQ0ry0PSPKJQlXr70vywCR/m+SpBeLZ6u6S3SwKyW4AAACo4fBWCTK0KnOYKya7u3W5vEAcVeYxV9gUMUtHD3zvbD1J7q1OWvL/kt3z76RFX4Dm6hJR3GARkt0PLBDDUq+rE0pJVTbHZYob5PZv3UwOmtLrbdZ7l3Q7+NEiMaVdr/pZwcKY5KIZAAAAmJ0qbbtPT3JWgTgqJrsrtDC/UZKjCsSRIusxSxW/BlfytVbpu1WVzRDMzrx3VVivK4vFU2Ez1KxVmtfdzWz/5wJxVDZvbcy7a6CPtRbmFbxtSaJ732KbzbQwZ6FIdgMAAEANVapvKlSB7FqopftSFdamS3TvWSCOi5OcUiCOWapUEbeWk5e1c75NvRCZsnnvqrBeQ87EXcl3isUzbd3Pn7sViuctSc4sEEdVN0lyZJHYLpzCNcNerXX5YVOKabNek+ThS17jkDYnu4ppz0iH0rQxBwAAgBrMYb7Bke0mbTWnF4inStVud9P6ogJxTMPerS3qAW2UwKHt1yNGEv/SxOfeLalwatuQsJZuZME1LTm+6wBxf6l9De20xmO2JLmkVfH1XTHXVeme2GLYWjB02ZKvkSHNe1eF9apWSV2t0nzaHlwsnn8sEENlRw/02b6SU9pn+UZ1VdOfbCN/KnhRkv+xLI5qI0RsimKhSHYDAABADVWSmBWS3ZXabi5VoZK5yqaI6hVDXTLyN5fM9O0Sqrsk2a1Vxu/ZEsP7to0Vuwwc72Ys/Z69pFVeXrfO17vJQGMLugrYe07QYvWFSZ4x45iW+/ckP77Cn/9Zkqf3HMtS316ArgrrVS3ZfUWBGGbpYYVi6UY3vLlAHJVVGsWxmQ063Ua0j7fK6Qqem+R5K8RRrRuMcRcsFMluAAAAGN5ehdp2V6gEOa5ADMud39pFD+3YIutxQoEY1nL3Faqu5tWJS47r2gmP8dYDVf59fsJZoj86w1hW84VV/nzoz6dunMKlA8dQxWXF4rmmQAyz0m0gul+heP6+QAzVVbleyCauGY5pie69phzPRj02yatXeW6l9Y7KbhaNZDcAAAAMr5uDeaMCcVxSpGKwUjXSVicXqdq7RYEYMoKKobHM296sqza5CeO2A8X9yQkee9Mkt5thLKv5/Ap/vkOBzhNamN/gsvY9sFYr/D7Nc7K7UqL7ujUSjtygSsegbDDx2n3ufzTJzjOIZyO6Nv7vXON5lboSndu6H8DCkOwGAACA4VWaw3xhgTgqtjGvUCFzs0IzIU8qEMNaFiXZfWq7qb1RQyW7PzbBY+8wULJjpcru7vvvoAFiWUq13g0ubQnvKsnuSTsrjMkjCsX6z0m+UiCO6g4tFN+k1wxdd5YPzyiWSXXXxfdY1kVluW4kyJFF4k3bBHdVgTigN9tZagAAABhclUrmChWD3Q3DwwvEsVyFBFNX1b2lQBxnJzm9QBxrqVIBP2ub3XQwVLL7ExM89q4zjGM1X1vle77C15Vk9w0uax1Jqri+UCzT1G20emCheF5eIIbq9is04/qsCauMH1go0d21Xz9sG4nutFFEQ4wEWY2fEywcyW4AAAAYXpUq1Ao3xw4pdsNwqwobAap0ADi5eAXjQUU3TMzCZr5nDxzos+cLEyY+hkh2f3aVr/EKn9VfLhBDJRct+gL04CeTbF8klk8neU+BOKrrkq+7FIlxkk1ZD03ybzOMZRJvTHKbdXY8qjZ+p/qoGZg6yW4AAAAYnjnMN6jUBnKpCgkmmyLW5xYLNLpvM9+z3TzUHacYy3odP8Fj901yxwFi/Pgqfz50QuOsEXRV6FuF0RtbVei8MQs/VSiWvysQwxhUSr6ud7Pg45K8bcaxrNdzJ/y6r5bsVtnNwjGzGwAAAIZ1kDnM36firOUzkpxZII4qN1Or30StUgHfh810HLjzQDF/cILH3iXJHjOMZTWrzRQf+mur+qz8IXyrUCzzWFh2XJJ7Foijc16SfygQxxhUSr6uZ1PWM5K8sIdY1uPhG0i6V7ruuL514IGFItkNAAAAwzqmyL/Pv57k1AJxHFsghuUqtDDfuVAHgOrJ7opfQ7PwzSSnbOJ17zZAzN+ZMNl9nxnGsppvrzJTfO/WGnhIWtP+oPMKxTJEp4RZ+9lCsbykzWln2yptHNzW59afJvm1nmJZS3cNfL/WQWNSlZLd3XF8tUAc0CvJbgAAABhWleqbrmLwmgJxHFMghuUqJJgOTbJ/gTg6XykQw1oqdgeYphNawvgfN5H42SfJnQaI/d+TnD/B44dIdndV3Rev8OddonvPAeJZ6sSB37+iSsnuebzX/ugCMXSuSvLiAnGMwZZC11KXb6MjxRuSPLLHeFbzv5L80Qaf23VnuvnsQ1y3zxaKBXoj2Q0AAADDMof5BjctOrO7QrK7Sqv7rxavGNqpQPXtNHXtSD+c5O1JPpnkC62ie7PuPFDi9t0TPLb7LLjDDGNZzYdW+fMKlXsVukxUc06heHYpEMM0PSzJ4UVieWWSswvEMQbd9cLNisTZVRlfsMrfvapIovubbTPFs5Ic1v5/vS4quEmz+9n5vCQ3LhDLSnZrG8qepVMD0yTZDQAAAMOqUtldIaF7dEtWVvPlAvH8SIEY0tpmX1cgjtV0N/kPqBnaunUdFv61Vby9o7XVnrZ7D3Rs75/gsUNUdXc+sMqfD/1Zfbk5rCuqlOyu+PNrM/57oVheVCCGsagy8iTbuH66R49xrKVLCv9ZkVim4fbtV2XdteTTR73KlCPZDQAAAMOpVIVaobK7SuJ/qcs2ORd5Wu5ZIIa0yuLKKt3k34hP9tRefIhkd5f0+PwEj3/ADGNZzWmrzOtOgS4ca1VILrJvFDr23QrEMC0/lOQRRWJ5W5LPFYhjLCpdS612bXlYG8/CYvL9zNRtZ0kBAABgMFWqUK8uUjFYcdZyl+j+1sAx3CbJ/QaOYatP1QhjVWOf171aC+1pOry1Me/b2yd4v90Hqux+3xp/N/RGigodJiqqlOzetUAM0/KzSXYsEsvfFYhhTCr9HFyta9DYN6axORU22DJnJLsBAABgOFVu9p1eJGFQYSbuchVm5D6rQAxbfbxGGKuq2B1gEn3cAL5vD++xkrdM8Niu8vwm/YX2Pe9c5c9vVmBuvuTAys4psCFpqz1qhDEVjy0SR9dp4a0F4hiTSjOkV9ukM/af1WyOn2dMnWQ3AAAADKfKzb4KFYNbilb6DH1D7ueSPHrgGLb6XGulXFnFDROT6GNzxRAtzLvqvuMnePxDZhjLar6Z5L2r/N1R7TNqSKtVSC667yT5WpE1mJdk9wNbR5EK/rxIHGOxR6HxOBescc0g2b3YdCph6iS7AQAAYDjHFVn7EwvEcGSrnqzmhAHj6drIvqLQeryrQAxrufHIW6NemuSkGb/HzgNVdr92gsduN1Cy+1/bOVjJkQPEs1yFLhNVnVkkrj0LxDANTy4Sx6eT/FOBOMakS3TvUyTeLqF5+Sp/N/aRI2zceUVGJzFnJLsBAABgOEcVWfsKFYOV2m4uNevk42r+suBN/rcViGEt3ffTbnXD26ZuPvy3Z/we909y4IzfYyX/PMFjuxgP6S+073nzGn839Gf1ee3rg5WdXmRd9ioQw2Z1ydJHFonljwvEMDaVupus1hln90LV5/SvS3RfYd2Zth2sKAAAAAxil4ESOiv5XIEYKlb5nNFzq8Wusv3nkzwjyd49vu96dBXuHykW03Kbvcl/TSsMGao4pI/K3Z/o4T2We+eEVVxDxHjuNjoXDN1yt1u/KweOobIqye4bJdk+ybUFYtmony8Sx2cn7AjBf6l0LbVasrvrlLFvz7FQh3ndzIRkNwAAAAzj8CT7FVj7bt7pHVs8Q8wbvT7JN5I8YID33pau/eaPtda007yHcn1LiHTVTfsnOSLJXYrPsBxDK9lJ1+/almD+TDu+w5L8zYxiW49Z3wDuWpg/dMbvsZJ/mOCx3ffZw/oL7XvevY1Ks6Hb40sOrG21ucB927v9vLiwSDyT6jbh/VyRWP6oQAxjVOk6YrXPrSpdjRiGn2fMhGQ3AAAADKNK2+6u7fMrC8RR0a1GMKe6D1eM5GvkDqv8+SVJvtoq9U9trem7JPfnl7UN/6We4lzNrMcJPGSAFubdur9+gsc/aKDZ/WtVkB7SNqQMSXJgbVUqu3dv85LHmux+3EBjDpbrZnW/pkAcYzT0xpylVuvocfgw4VBEH11sWECS3QAAADCMylW8sNTLWvV9dR9pN1FPajOOv95+fa1V6W/LbQc+vlnPh3/UjF9/Ja9q7eHX66cHiLFLyLxjjb+vkDyS7F5bt5Hl/CLdUvZp8YzRE4vE/AcFYhijAwtszNmq24By5ip/VykhT/9mfa3DgpLsBgAAgGFIdjMWfzuSOJ+zyecP+T15TpLTZvj6Bww0C/vlEzx274FamL96G3+/2Vnw0zDJzPNFdEXr2lAh2V0hho24axunMbRu09IbRrVydRydZMci0ayV0Kzwmcow1toEAZuyneUDAACAQUh2MwZ/nuTEBThTu7ZEwVC6xMBVM3zvn23zePv0ygnbSz+oJbz7dO06WvQf23NMy50mObAuVarf9y8Qw0b8cpE4nl8ghrG6daG4v7LKn++usnuhfXnRF4DZkewGAACA/t04yVHWneLOSvLMBTlJRw1ckTnred1PmPHrr+QvJnz84/sJ6/v8wzoSyUMnkMw3XZ8TisRxUIEYJnXrtiFmaG9J8q7RrFo9Q2/MWersVf6821S27zAhUcAibJ5kIJLdAAAA0L/uZt9u1p3ifqm1B14Exwx8jLNMdj8wyW1m+PoreXOSz0zw+K7TxY/3F973vGQbfz90xX/M6163WW8YWa8xtjH/pQIxdH6vQAxjVqlj0GqbiIb+WcuwqnxOM4ckuwEAAKB/5hVS3R8mefsCnaWhq3dnmdD8hRm+9mr+bMLHD1HV/Z4kH93GY45McpOe4lnNqQO//1h0SZSrC8Q6tjbmByd5UoE4Xpbk0wXiGKsdC2zMWWq1ERa3HSYcitDGnJnZwdICAABA78zrprIuyf1bC3aGhvyevCbJyTN67a6K7qdm9Nqr6b5+/n2Cx+88ULL7L9fxmApViJPMPV9k32iz74du5Ty2ZPfT2vfg0F5QIIYxOyLJgUXivzLJaav83S5JvrPG34/BFW0T1GGFYj2vVdPvUiCWldyoxTirax2Q7AYAAIABDF1FCqv5RJKHLuDqDJnU7JKZX5/Raz91Rq+7lkmTVo8dIEnz8SRvW8fjht6YdL3kwEQ+XyDZPaaZ3Tdqye6hdfP9TykQx5jdolDsZ7bE5nJbkvxGkqcPG95UdBsC/6BQPL+T5MUF4oDBaGMOAAAA/at0UxK26hKAd13A1divtaseyqzaeu43QAvzNyX58ITPecqMYlnLn6zzcUMnu7vqx68OHMOYVGiD3bUF361AHOvRzered+AYLkzy/IFjmAeVNlGutkHn+tbJZB5U69D0pQIxwKAkuwEAAKBfNy/W+hA6/5LkLkmuXcDVOHrg1p+zmtfdVWzuMaPXXs0LJ3z8jye5U3/hfVe3qeP163zsLWccy7acNPD7j02FZPe+LeFd3a5JfqVAjM9LckGBOMauwsiFrRZh9nqlzQVX+VkBkt0AAADQt6GTJ7DcM5P85AKvytA3rU+YwWvuk+TXZvC6a3lVko9M+Jy+Y0xLrq1HVxl/1ADxLXXiwO8/Np9N8u0CMd+8QAzb8qsFZjx/JsmfDhzDvBiyO8lyk/4cGJu92ya5KroRAOfO+ZrDNkl2AwAAQL/M66aKk9rX46QzlufN0N+Ts2g/+ust4d2XK5M8Z8L3uleSB/YYY+ftSd6xzsfeYuCK/84XB37/sbmkJVCHdnjxddu9fUYM7bcKxDAPdk5yRJHj6DabfKxAHLPUJbr3LBSPFuYsvEh2AwAAQO+qzflj8Vyc5Emt7emsWmiPyZDfk99uVVnTdNMBKqa7aumzJnzOM2YUy1p+d4LHVvislsSY3EcLxFCpynYlXfvy/QeO4R+TvHfgGObFkQXO51bHt00n86xahybXcSy8SHYDAABA77QxZyhdMvIXWwvOlzsL37Vl4HakXaL70im/5i/3PKu7qz7+fxM+565JfmJG8azmb5N8aoLHD53svmQGGyEWwX8UOMah29+vZY+BNposdUWSZw0cwzw5ttCx/FuBGGat2qZVyW4WXmcHqwAAAAC92a3YnD/m32VJ3toSff/ufP+Art3wIQO+/5en/HoHDdCe+Dc38Jy+2xd3ybXfm/A5Qyc0ukT3RQPHMEafaJ97uw8Ye5WW0iv5tQJVwN3Ig68OHMM8uUOhY3lngRhmrdo4Ih1AWHiR7AYAAIBedTfIbmzJmaELk3yutfJ9b0twX2PBV3XMwO8/7ZnMz22bavrysg1U8t03ycN7jDGtzfrXJnzO0BuTJDA25pst4X2fAWPoNtHsm+RbA8awkn0LzOruZqr/8cAxzJs7FTmedyc5o0Acs3aLQrF0n3enFogDBifZDQAAAP3pKs1OSvKNJNct8Lp3x35ta2W8Z4F4lupu1J7QcxvolVyfZOeWuNyxjaLr1u3qVqV6SUuknNuSeKe1r62TJbcnMnT17jTbj945yVOm+Hrbcs4GE2fP7jHGtM0fvz/hc7pk5c1nFM96TXsjxCL50MDJ7t3bHOVPFFvzpyfZZ+AYfmPg9583N0lyxyLH9LoCMczazYp1buiuIb5TIA4YnGQ3AAAA9OdDBSpJq9izzZCu5gVJXrzoJ2eBDN2OdJptzF8wxddaj6cluXjC5zx6gCTkr27gORU+p81h3bgKIxuOKZbs3jvJ/xg4hr9J8sGBY5g3d+u5m8dqzm0jU3ZvHQSun8O1PjvJjybZUiCWrc5u/z24WFyT2LFtAr5iPCFTkWQ3AAAA9Gceb/5t1K3bzfdqThzdSrIZQya7z5xi+9GuYvNeU3qt9fjzJG/ZwPOe12OMnecn+fAGnnfsDGKZlGT3xn0qybcHrmK+zYDvvZJnDzxGpfu8e8aA7z+vHlTkuJ6V5KZLrqHmtXtRtYTyI1vHn+0KxLIR27XxO4dKdrNZkt0AAADAEIauqF3JFa0NOIthz9ZqeCjT+lo7ZANtujfj80l+bQPP/42e52B3Cc/f2eBzh/586kYTnD5wDGN2Sdvk0Pds+KUq/Yw7okCi+beSXDlwDPPogUWO6eVJfn7J78eafB2bnebgGL6S5KICcTByPnQAAACAIQw9K3klXZXt+fXCYkaOGri7wLQqd7sq612n9Frr8bgNPOfgAaq6n7SJ5w7dxrybv3/twDGM3bsHjv/WhapAnz1wHuBfFmSec98e0Cpih/by9v73XYhVZ9p0VGIqJLsBAACAIVRMdp9SIAb6c8uB13oaye4nJvnJKbzOenUV3Sds4Hl/1PNc2V9J8oUNPnePthFiSF8a+P3nwXsHPoabJblFgXW8U5InDPj+l29wbj7b1udn/1q2dhY5zjljA4zsYCokuwEAAIAhVEgCLKdt8GIZe7L75kn+akqxrMdrWxX5pB6R5Gd7jPN1m1yXowae9dz54sDvPw+66viPD3wcFZJ/vzvw+/96krMGjmEebZ/koQWO6+WtK86NBh4LwnhJdjMVkt0AAABA37q2m4cVXPWTCsRAfw4fcK2vnMLM7pf12L68azP6mA08r6uS/ssZxLOarjvD4zf5GkNvgoib/1PzzoHf/3YDv/9PJHnQgO//jiR/O+D7z7NHJTlk4OO7Osnz2/93n5u7DxwP42SjKVMh2Q0AAAD0rWJVd7QOXjhDVqF1lXDnbeL5v5PkflOMZy2XtaTZ9Rt4bpfoPqinODs/leSqTb7G0CMWrp7CRgj+y9sHXofbD/z+fc/JX6prX/60Ad9/3j2lwPH9XpKvtP+vsEmI8blY5wemRbIbAAAA6NutC674FSq7F8peA89l3szGivsk+T9TjGVbHrLByqvH9Twr+DGbmNO91LHTC2lDuo0Q3xg4hnnxqSSfG/BYbptkl4He+xlJbjPQe3d+SRJrZrqNTvceOIYTl22mqHhdR31dN5aLnCemQbIbAAAA6FvFm6JdJeX5BeKgH0cn2XvAtd7oTOb9k/zzlGNZS9cq90MbeF7XveHv+wszz03ymim91tAVijpMTNebB3zvmyb54QHe98Al7aWH8A9JXjHg+8+73ypwfL+87PdDbxJinIzsYGokuwEAAIC+VWxj/uUCMdCfYwZe643OqHxjkptMOZbVPD3J6zf43H9Ksv3sQ/yuv59iu+ZuM8HNp/RaG+Xm/3S9ZeD3v+MA7/m8Aecnn92qupmNByd5wMBr+9crbIKqOp6G2ja68Q9+gGQ3AAAA0KftCiSTViLBtFiG7i5w6gae89Ikd59BLCvpkmV/scHnvqTHWcX/luSJU3y97rNp5ym+3kao7J6urrX9Rwd8/7v0/H53S/ILPb/nUt17Xzrg+8+75w58fCeuUNV9WJJDB4qHcXPtzdRIdgMAAAB96pJJP1Rwxd1wWyxDJruvaHMqJ/HMHhNYf7qJhMrTkjx5yvGs5hNJHjTl17zDlF9vI75SIIZ584YBj+dOPb/fH/T8fkv9YZJ3Dfj+8+4XB/h6Wu4xK/yZqm42SlclpkayGwAAAOhT1ZuibrgtliG/Dk+ZcD78f0/y+zOMZ6lXJvn1DT63q2B90WzC+gFddeE9Z/C6D53Ba07imiRnDBzDPOra/1830HEdleRWPb3X43vs/rDcp4rMkp5X+/f4c2A1j01ywgp/19fXN/Pla5sY6QI/QLIbAAAA6FPFm6IXbLCtNON0YJLDB4z8pAke+2NJ/nGGsSz16iRP2OBzu24N75hNWD/g5CR3TXLllF/3R5I8ZMqvOaluI8Q3Bo5hHp2Z5HUDHteP9vAeOyb5Pz28z0quSvIzA733ovjzJHsPeKy/135GrESym43ofpZfa+WYlh2sJAAAANCjijdFuxtulxeIg3780MD3xNab7L5zjy2BX57kSRt87m5J3pdknynHtJIvtza+l8zgtV84g9ec1OcKxLCSfZPsMtLExJYk5yR5T5KfHSiG+yV5WZL9ZlB8dn2S81rV71Bzk7tE6GlJDmjxjNFObdb4twvG/viBNxO8Kslz1vj7W/YYC/PD+CCmSrIbAAAA6NOQs5JXc2LBmJidOw68tl9cx2O6yuWP9BBL5/8mefYGn9slQD+W5Ogpx7SST7R1mUXC9Z+S3GMGrzupDxaIYbktbe2PaBW8Y/Wd9rWz/QDxPzrJI9pazsqOA52Xrj38U5I8syWMh2oXvxnbtTzJk9rGn0qOa+MlhvL6JD+3xnvvnuSYqieW0lZqiQ8bJtkNAAAA9GX3npJik1pP8pH58biBj2Rb1bu3TfKhnmJ5epK/2OBzd2gJ+eOmHNNKPpzkXjOoGr1da81bpTLx/QViWO6wluhOS2aO1ZCxd8nUnUe8dmvZrnXLmAenFDuGHVuyeShvTfKobbz3sa3zA0xKZTdTJdkNAAAA9OWoojdFv1QgBvrxv5PcZcC1PmUbX293SPLRnu7Z/VSSN27wuTu2iu7bTzmmlbyxxbqSbp32WKOatKukvbr92ql9/hzaWqH/bFvvKrqq7lMLxbOVqk0WweUFrwVekeQWA733O5P8xDoed26SX0lyUQ8xDeHMVtn+xEIxvaxt0hrrJpPu+uGawmM7GCnJbgAAAKAvVZMm652hzLj9aZJfG/gItlWx/ec9tCO+rFVJf3oTr/HsnhLd3Tn79TX+/idb5eN3VmlvvjTZvWuSPWcY62a9tmhctyoQA8xat9HkgkKr3M1Bf8xA7/22JA9f52O/kuSvZhzP0B5cLJ5u7MYHCsQBpUh2AwAAAH2pOK/7tCRnFYiDyRzYkpfXLHlWl9i8IsmVLWG8b+smcL9WmbVPgTV++xp/t2sPVXxnJLl7kq9v8nX6+F5+WpK/3cZjbtP+u1sP8czSeUn+sWhskt0sgi8XOsZuU9ZvD/Tef5fkyQO9d1V9bOxar2tt0ISVSXYDAAAAfamYNHHTcHx2bFXJB64Q+VWtinfngve9vpbkHWv8/ZFJbjLD9//XJA+b0mvNsktDt2HhAUmOX8dj5yUR+1et4r6iKvPMYZa+WGR1f7F1tBjCs5L8/rCHX9LRhYI6vV1LAMtIdgMAAAB9GWr25Fr+09kfnSNWSXSnzWXeqegB/VNLxq9mlgnkaSYx9m+J+Vn4fKvE/+Y6X7viZ8qkzh0wubUtuxdL9MCsVLgW6LpZvGig935Y2xDF9zs8yc0LrUmlDgRQimQ3AAAA0IebzjBBthlVqrlYv6qz39dy3Tpacs+iNfi3kzw0yX9M8TWPbpXz0zZp+9z9W5v6sfvdJJcWPYYj2zgAmHcVkohPH+A9v5TkgUm+OsB7j0G16w0bNGEV21kYAAAAoAfHzChBtlmS3eNz7Ahj/pPWfnQt0z6u17RE5TQT3ZlBnF21+4M3MCe26mfKJF63jk0QQ+pjNjsMrZuZf/LA/pYK8AAABZlJREFUMRw8wIbAF7RREBLdq6t2vXFCgRigJJXdAAAAQB8qzta9JMkpBeJgMmNLwH0jyfPW8bhpVZBdm+RnkrxhSq+33DTX/31J/lv7XpzU2Od1d5WkjysQx1rM62YRnJTkyoGPs+uYsX1P73VJ+9x9X0/vN2bVrje+VCAGKEllNwAAANCHiompLtF9YYE4mMzY2pj/yjraVE9rDvZHkhwww0R3ppgA7Sq577/BRHdGnuy+IMkDklxdIJa1HF43NJiaCgnEvj7PXt06fkh0r0+l640LbdCE1ansBgAAAPpQMTFVYUYnk9l3ZHOa/yzJG9fxuM3Owb6uJY9fvonXWI+ucOYWm3yNDyR5VEv4bsZYk93nJrlzkrMLxLItfbdVhiFUmIM86wrir7WOH8fP+H3myR7FrjdO3cTmMJh7KrsBAACAWdu+JfOqqXCDm8l0N553H8mavS3JM9b52M0kbv8lyT49JLrTKn1/aIPPvaolW+47hUT3lqKfKdvymRb3mbXD/K5qiR6YlQrXArPcvPOs9rkt0T2Zo9rP1iq0MIc1SHYDAAAAs7aZBNksfdGZH52xzBDuqpcfPsHjN5Lo6Cr17p3kJ5NcvIHnb8RGE8z/kGTvJK+bUhxHJLnZlF6rLy9Mcocez9VmHVks0QOzctLAK7vjjDbvvKZ9D//+DF57EVS73nDNCmvQxhwAAACYtaozloe+wc3kxtC6+s1JHjHhcyY9rt9M8icTPmcaJp3h/Nkkj09y4pTj2Gwr9T6dkeSnWlX3mIxlYwlsxlnt15C6zTsHTvH9P5zkaZKjm1btekM3IliDym4AAABg1mY9i3IjvtHmHzIuxxaP9qkbSHRvmWBDyN+0ueVDJLozQZK5m4f/wCS3n0GiOyP4OuickOSRbYPA2BLdneMKxACzdkaBFZ7WxpK3t8/ce0p0T0W1nzOnFYgBylLZDQAAAMxaxcRUl4y7ukAcTKZql4BuPvcTNziLej0tubv2309Pcu4G45uWbW1c+XqSX0nyphnHUTXZfUWSNyb5iySfKBDPZtxuvKHDulWYg7zZDYH/lOQ5SU6fUjz8l0rdLb6V5MwCcUBZkt0AAADArFVsh1vhBjeTOTTJYcXW7J1JnpnkC5t4jbUS+G9N8owiSYzt15gr2yX5n5XkpT3FUqm9bFcZ+t624eFdSa4qENM0/FWSNyS5bPyHAivau7X8HtpGPs+uaN+jf5Dkm07v1B20gbEds3Sqz2JYm2Q3AAAAMEs3SnJkwRXW4nN8qsxpPiXJa5K8uFUyb9ZKiY43t7nclSr1ugr0g5f92dmtovAVPcax7wBfC99Jcl4732e0ef9de/ZPF5j3Oytvn8/DgnIm2RDYbdR7YZJX6k4zU0cXy519uUAMUJpkNwAAADBLRyXZq+AK/2eBGJjMHQZYr0uTnNwqtz/WKninPTfzNkv+/9VJfqdoO9qlrXY/3+J86wBxdJXTD01yTZLrN/la3fO3S7JTkh3b/1/XkkhXtkq6i1vl+sVTih9gq33bddJavtM2WHWV3J+zcr2o1D0kNmjCtkl2AwAAALNUsYX5NS2Bybic0KqpvzHFqLdrv65tbWG75Pa322zss1sV75UzXqWuWvq1Sf5Hm8tZ1W3bzNBHtormoXTn6IOF1wlgvbpE9+6rPLbbXPWSJG9Rxd27ITbXrUWyG7ZBshsAAAD4/+3dIQ4CMRBG4SdX4wk3INyEE62C02A5AsEgOQBZBBKBQ5Imo7CwdLq8L6ltJv+aTdqZjmmVMN7Ll8ZP67f2saakA9aNdA2X0bmbuCwiSfrc8m2HQ1x+2sVECdVR/hFPwK1y/l1MGzlXrkNKz8NuSZIkSZI0plnsfU2S8gI4JqhDIrrJn40k8UhQgyRNyRwYgG10cN/9uimUZzr6fw9BagbwAhnHhmnbWpEcAAAAAElFTkSuQmCC"
                 />
@@ -30,12 +30,12 @@
             <svg
                 xmlns="http://www.w3.org/2000/svg"
                 xmlSpace="preserve"
-                width={200}
+                width={145}
                 height={30}
                 {...param}
             >
                 <image
-                    width={200}
+                    width={145}
                     height={30}
                     href="data:image/png;base64,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"
                 />
diff --git a/rsf-admin/src/layout/MyMenu.jsx b/rsf-admin/src/layout/MyMenu.jsx
index f671891..9e6b379 100644
--- a/rsf-admin/src/layout/MyMenu.jsx
+++ b/rsf-admin/src/layout/MyMenu.jsx
@@ -59,45 +59,106 @@
     if (IconComponent) {
       return <IconComponent />;
     } else {
-      return <KeyboardArrowDownIcon />
+      return <KeyboardArrowDownIcon />;
     }
   };
 
-  const generateMenu = (permissions) => {
-    return permissions.map((node) => {
-      if (node.children) {
-        return (
-          <SubMenu
-            key={node.id}
-            handleToggle={() => handleToggle(node.route)}
-            isOpen={state[node.route]}
-            name={node.name}
-            dense={dense}
-            icon={getIcon(node.icon)}
-          >
-            {generateMenu(node.children)}
-          </SubMenu>
-        );
-      } else {
-        if (node.component) {
-          return (
-            <MenuItemLink
-              key={node.id}
-              to={node.component} // correspond to Resource.name
-              state={{ _scrollToTop: true }}
-              // primaryText={translate(`resources.orders.name`, {
-              //     smart_count: 2,
-              // })}
-              primaryText={node.name}
-              leftIcon={getIcon(node.icon)}
-              dense={dense}
-              // sx={{ '& .RaMenuItemLink-icon': { visibility: 'hidden' } }}
-            />
-          );
-        }
+  // 妫�鏌ヨ彍鍗曟槸鍚﹁閫変腑
+  const isSelected = (component) => {
+    if (!component) return false;
+    const currentPath = location.pathname.replace("/", "");
+    return currentPath === component;
+  };
+
+  // 妫�鏌ョ埗绾ц彍鍗曟槸鍚︽湁瀛愯彍鍗曡閫変腑
+  const hasSelectedChild = (node) => {
+    if (!node.children) return false;
+    return node.children.some(child => {
+      if (child.children) {
+        return hasSelectedChild(child);
       }
+      return isSelected(child.component);
     });
   };
+
+  // 鍦� MyMenu 缁勪欢鐨� generateMenu 鍑芥暟涓紝纭繚 MenuItemLink 涔熷乏瀵归綈
+  const generateMenu = (permissions) => {
+    return permissions.map((node) => {
+        if (node.children) {
+            const selected = isSelected(node.component) || hasSelectedChild(node);
+            return (
+                <SubMenu
+                    key={node.id}
+                    handleToggle={() => handleToggle(node.route)}
+                    isOpen={state[node.route]}
+                    name={node.name}
+                    dense={dense}
+                    icon={getIcon(node.icon)}
+                    isSelected={selected}
+                >
+                    {generateMenu(node.children)}
+                </SubMenu>
+            );
+        } else {
+            if (node.component) {
+                const selected = isSelected(node.component);
+                // 鍦� generateMenu 鍑芥暟涓殑 MenuItemLink 閮ㄥ垎
+                return (
+                    <MenuItemLink
+                        key={node.id}
+                        to={node.component}
+                        state={{ _scrollToTop: true }}
+                        primaryText={translate(node.name)}
+                        leftIcon={getIcon(node.icon)}
+                        dense={dense}
+                        sx={{
+                            backgroundColor: selected ? 'rgba(25, 118, 210, 0.08) !important' : 'transparent',
+                            color: selected ? '#1976d2 !important' : 'text.secondary',
+                            '&:hover': {
+                                backgroundColor: selected ? 'rgba(25, 118, 210, 0.12) !important' : 'rgba(0, 0, 0, 0.04)',
+                            },
+                            borderLeft: 'none',
+                            borderRadius: '4px',
+                            margin: '2px 8px',
+                            width: 'calc(100% - 16px)',
+                            transition: 'all 0.2s ease-in-out',
+                            
+                            // 缂╁皬鏁翠綋闂磋窛
+                            padding: '6px 8px', // 鍑忓皯鍐呰竟璺�
+                            minHeight: '36px', // 绋嶅井鍑忓皬楂樺害
+                            
+                            '& .RaMenuItemLink-icon': {
+                                color: selected ? '#1976d2 !important' : 'text.secondary',
+                                minWidth: '32px !important', // 缂╁皬鍥炬爣鍖哄煙瀹藉害
+                                marginRight: '4px', // 缂╁皬鍥炬爣鍜屾枃瀛楅棿璺�
+                                display: 'flex',
+                                alignItems: 'center',
+                                justifyContent: 'center', // 鍥炬爣灞呬腑鏄剧ず
+                            },
+                            
+                            fontWeight: selected ? 600 : 400,
+                            
+                            // 纭繚鏂囧瓧鍐呭宸﹀榻�
+                            '& .MuiListItemText-root': {
+                                margin: 0,
+                                '& .MuiTypography-root': {
+                                    textAlign: 'left',
+                                    justifyContent: 'flex-start',
+                                    fontSize: '0.875rem', // 绋嶅井鍑忓皬瀛椾綋澶у皬
+                                    lineHeight: '1.3',
+                                }
+                            },
+                        }}
+                    />
+                );
+            }
+        }
+    });
+  };
+
+  // 妫�鏌ュ浐瀹氳彍鍗曟槸鍚﹂�変腑
+  const isDashboardSelected = location.pathname === '/dashboard';
+  const isSettingsSelected = location.pathname === '/settings';
 
   return isPending ? (
     <div>Waiting for permissions...</div>
@@ -112,19 +173,54 @@
             easing: theme.transitions.easing.sharp,
             duration: theme.transitions.duration.leavingScreen,
           }),
+        // 鑿滃崟瀹瑰櫒鏍峰紡
+        '& .MuiMenuItem-root': {
+          boxSizing: 'border-box',
+        }
       }}
     >
       <Menu.Item
         to="/dashboard"
         primaryText="menu.dashboard"
         leftIcon={<DashboardIcon />}
+        sx={{
+          backgroundColor: isDashboardSelected ? 'rgba(25, 118, 210, 0.08) !important' : 'transparent',
+          color: isDashboardSelected ? '#1976d2 !important' : 'text.secondary',
+          '&:hover': {
+            backgroundColor: isDashboardSelected ? 'rgba(25, 118, 210, 0.12) !important' : 'rgba(0, 0, 0, 0.04)',
+          },
+          borderLeft: isDashboardSelected ? '3px solid #1976d2' : '3px solid transparent',
+          borderRadius: '0 4px 4px 0',
+          margin: '1px 0',
+          width: '100%',
+          transition: 'all 0.2s ease-in-out',
+          '& .MuiListItemIcon-root': {
+            color: isDashboardSelected ? '#1976d2 !important' : 'text.secondary',
+            minWidth: 40,
+          }
+        }}
       />
       {permissions && generateMenu(permissions)}
-      {/* <Menu.ResourceItems /> */}
       <Menu.Item
         to="/settings"
         primaryText="menu.settings"
         leftIcon={<PersonIcon />}
+        sx={{
+          backgroundColor: isSettingsSelected ? 'rgba(25, 118, 210, 0.08) !important' : 'transparent',
+          color: isSettingsSelected ? '#1976d2 !important' : 'text.secondary',
+          '&:hover': {
+            backgroundColor: isSettingsSelected ? 'rgba(25, 118, 210, 0.12) !important' : 'rgba(0, 0, 0, 0.04)',
+          },
+          borderLeft: isSettingsSelected ? '3px solid #1976d2' : '3px solid transparent',
+          borderRadius: '0 4px 4px 0',
+          margin: '1px 0',
+          width: '100%',
+          transition: 'all 0.2s ease-in-out',
+          '& .MuiListItemIcon-root': {
+            color: isSettingsSelected ? '#1976d2 !important' : 'text.secondary',
+            minWidth: 40,
+          }
+        }}
       />
     </Box>
   );
@@ -173,4 +269,4 @@
   }
 
   return [];
-};
+};
\ No newline at end of file
diff --git a/rsf-admin/src/layout/SubMenu.jsx b/rsf-admin/src/layout/SubMenu.jsx
index a0e937e..7296516 100644
--- a/rsf-admin/src/layout/SubMenu.jsx
+++ b/rsf-admin/src/layout/SubMenu.jsx
@@ -9,33 +9,104 @@
     Collapse,
     Tooltip,
 } from '@mui/material';
-import ExpandMore from '@mui/icons-material/ExpandMore';
 import { useTranslate, useSidebarState } from 'react-admin';
 import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
 import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
+
 const SubMenu = (props) => {
-    const { handleToggle, isOpen, name, icon, children, dense } = props;
+    const { handleToggle, isOpen, name, icon, children, dense, isSelected = false } = props;
     const translate = useTranslate();
     const [sidebarIsOpen] = useSidebarState();
 
     const header = (
-       <MenuItem dense={dense} onClick={handleToggle} sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
-            <Box sx={{ display: 'flex', alignItems: 'center', flex: 1 }}>
-                <ListItemIcon sx={{ minWidth: 40, color: 'text.secondary', display: 'flex', alignItems: 'center' }}>
+        <MenuItem 
+            dense={dense} 
+            onClick={handleToggle} 
+            sx={{ 
+                display: 'flex', 
+                alignItems: 'center', 
+                justifyContent: 'space-between',
+                backgroundColor: isSelected ? 'rgba(25, 118, 210, 0.08) !important' : 'transparent',
+                color: isSelected ? '#1976d2 !important' : 'text.secondary',
+                '&:hover': {
+                    backgroundColor: isSelected ? 'rgba(25, 118, 210, 0.12) !important' : 'rgba(0, 0, 0, 0.04)',
+                },
+                borderLeft: 'none',
+                borderRadius: '4px',
+                margin: '2px 6px',
+                width: 'calc(100% - 16px)',
+                transition: 'all 0.2s ease-in-out',
+                boxSizing: 'border-box',
+                minHeight: '40px',
+                padding: '8px 12px',
+                
+                // 纭繚鍐呭鍖哄煙瀹屽叏宸﹀榻�
+                '& .MuiMenuItem-root': {
+                    justifyContent: 'flex-start',
+                }
+            }}
+        >
+            <Box sx={{ 
+                display: 'flex', 
+                alignItems: 'center', 
+                flex: 1,
+                justifyContent: 'flex-start',
+                minWidth: 0,
+                // 纭繚鍥炬爣鍜屾枃瀛楃揣瀵嗗榻�
+                gap: '8px',
+            }}>
+                <ListItemIcon sx={{ 
+                    minWidth: '32px !important', // 绋嶅井鍑忓皬鍥炬爣鍖哄煙瀹藉害
+                    color: isSelected ? '#1976d2 !important' : 'text.secondary',
+                    display: 'flex', 
+                    alignItems: 'center',
+                    justifyContent: 'flex-start',
+                    margin: 0, // 绉婚櫎margin
+                    flexShrink: 0,
+                }}>
                     {icon}
                 </ListItemIcon>
-                <Typography variant="inherit" color="textSecondary" sx={{ ml: 1, display: 'flex', alignItems: 'center' }}>
-                    {translate(name)}
-                </Typography>
+                {sidebarIsOpen && (
+                    <Typography 
+                        variant="inherit" 
+                        sx={{ 
+                            color: isSelected ? '#1976d2 !important' : 'text.secondary',
+                            fontWeight: isSelected ? 600 : 400,
+                            flex: 1,
+                            minWidth: 0,
+                            overflow: 'hidden',
+                            textOverflow: 'ellipsis',
+                            whiteSpace: 'nowrap',
+                            textAlign: 'left',
+                            lineHeight: '1.5',
+                        }}
+                    >
+                        {translate(name)}
+                    </Typography>
+                )}
             </Box>
-            <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 24 }}>
-                {isOpen ? <KeyboardArrowDownIcon fontSize="small" sx={{color: 'text.secondary'}} /> : <KeyboardArrowRightIcon fontSize="small" sx={{color: 'text.secondary'}} />}
-            </Box>
+            
+            {/* 绠ご鍥炬爣 */}
+            {sidebarIsOpen && (
+                <Box sx={{ 
+                    display: 'flex', 
+                    alignItems: 'center', 
+                    minWidth: '20px',
+                    justifyContent: 'flex-end',
+                    flexShrink: 0,
+                    marginLeft: '8px',
+                }}>
+                    {isOpen ? 
+                        <KeyboardArrowDownIcon fontSize="small" sx={{color: isSelected ? '#1976d2 !important' : 'text.secondary'}} /> : 
+                        <KeyboardArrowRightIcon fontSize="small" sx={{color: isSelected ? '#1976d2 !important' : 'text.secondary'}} />
+                    }
+                </Box>
+            )}
         </MenuItem>
     );
 
     return (
-        <div>
+        <Box sx={{ width: '100%' }}>
             {sidebarIsOpen || isOpen ? (
                 header
             ) : (
@@ -48,27 +119,18 @@
                     dense={dense}
                     component="div"
                     disablePadding
-                    // sx={{
-                    //     '& .MuiMenuItem-root': {
-                    //         transition:
-                    //             'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',
-                    //         paddingLeft: theme =>
-                    //             sidebarIsOpen
-                    //                 ? theme.spacing(4)
-                    //                 : theme.spacing(2),
-                    //     },
-                    //     // 鏄剧ず浜岀骇鑿滃崟鐨刬con
-                    //     '& .RaMenuItemLink-icon': {
-                    //         visibility: 'visible !important',
-                    //         minWidth: '24px'
-                    //     }
-                    // }}
+                    sx={{
+                        paddingLeft: 2,
+                        '& .MuiMenuItem-root': {
+                            paddingLeft: 3,
+                        },
+                    }}
                 >
                     {children}
                 </List>
             </Collapse>
-        </div>
+        </Box>
     );
 };
 
-export default SubMenu;
+export default SubMenu;
\ No newline at end of file
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index 5b835c3..f9764f6 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -63,6 +63,7 @@
 import outStatisticItem from './statistics/outStockItem';
 import inStatisticItem from './statistics/inStockItem';
 import statisticCount from './statistics/stockStatisticNum';
+import preparation from "./orders/preparation";
 
 const ResourceContent = (node) => {
   switch (node.component) {
@@ -184,6 +185,8 @@
       return inStatisticItem;
     case "statisticCount":
       return statisticCount;
+    case "preparation":
+      return preparation;
     default:
       return {
         list: ListGuesser,
diff --git a/rsf-admin/src/page/basicInfo/companys/CompanysList.jsx b/rsf-admin/src/page/basicInfo/companys/CompanysList.jsx
index 069abe4..46178ae 100644
--- a/rsf-admin/src/page/basicInfo/companys/CompanysList.jsx
+++ b/rsf-admin/src/page/basicInfo/companys/CompanysList.jsx
@@ -134,15 +134,14 @@
                     preferenceKey='companys'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false}
-                    omit={['id', 'createTime', 'createBy', 'memo','createBy$','updateBy$','statusBool','province','city','address']}
+                    omit={['id', 'nameEn', 'contact', 'tel', 'email', 'pcode', 'createTime', 'createBy', 'memo','createBy$','updateBy$', 'updateTime','statusBool','province','city','address']}
                 >
                     <NumberField source="id" />
                     <TextField source="code" label="table.field.companys.code" />
-                    <TextField source="name" label="table.field.companys.name" />
-                    
+                    <TextField source="name" label="table.field.companys.name" />                    
                     <TextField source="nameEn" label="table.field.companys.nameEn" />
                     <TextField source="breifCode" label="table.field.companys.breifCode" />
-                    <DictField source="type" label="table.field.companys.type" dictTypeCode={'sys_companys_type'} />
+                    {/* <DictField source="type" label="table.field.companys.type" dictTypeCode={'sys_companys_type'} /> */}
                     <TextField source="contact" label="table.field.companys.contact" />
                     <TextField source="tel" label="table.field.companys.tel" />
                     <TextField source="email" label="table.field.companys.email" />
diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
index 78c34a1..ef49214 100644
--- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
@@ -171,38 +171,38 @@
                     <NumberField key="id" source="id" />,
                     <TextField key="code" source="code" label="table.field.matnr.code" />,
                     <TooltipField key="name" source="name" label="table.field.matnr.name" cellClassName="name" />,                    
-                    <TextField key="shipperId$" source="shipperId$" label="table.field.matnr.shipperId" />,
+                    // <TextField key="shipperId$" source="shipperId$" label="table.field.matnr.shipperId" />,
                     <ReferenceField key="groupId" source="groupId" label="table.field.matnr.groupId" reference="matnrGroup" link={false} sortable={false}>
                         <TextField source="name" />
                     </ReferenceField>,
-                    <TextField key="platCode" source="platCode" label="table.field.matnr.platCode" />,
+                    // <TextField key="platCode" source="platCode" label="table.field.matnr.platCode" />,
                     <TextField key="spec" source="spec" label="table.field.matnr.spec" />,
                     <TextField key="model" source="model" label="table.field.matnr.model" />,
-                    <NumberField key="weight" source="weight" label="table.field.matnr.weight" />,
-                    <TextField key="describle" source="describle" label="table.field.matnr.describle" />,
-                    <NumberField key="nromNum" source="nromNum" label="table.field.matnr.nromNum" />,
+                    // <NumberField key="weight" source="weight" label="table.field.matnr.weight" />,
+                    // <TextField key="describle" source="describle" label="table.field.matnr.describle" />,
+                    // <NumberField key="nromNum" source="nromNum" label="table.field.matnr.nromNum" />,
                     <TextField key="unit" source="unit" label="table.field.matnr.unit" />,
-                    <TextField key="purchaseUnit" source="purchaseUnit" label="table.field.matnr.purUnit" />,
+                    // <TextField key="purchaseUnit" source="purchaseUnit" label="table.field.matnr.purUnit" />,
                     <TextField key="stockUnit" source="stockUnit" label="table.field.matnr.stockUnit" />,
-                    <TextField key="stockLeval$" source="stockLeval$" label="table.field.matnr.stockLevel" sortable={false} />,
-                    <TextField key="flagLabelMange$" source="flagLabelMange$" label="table.field.matnr.isLabelMange" sortable={false} />,
-                    <NumberField key="safeQty" source="safeQty" label="table.field.matnr.safeQty" />,
-                    <NumberField key="minQty" source="minQty" label="table.field.matnr.minQty" />,
-                    <NumberField key="maxQty" source="maxQty" label="table.field.matnr.maxQty" />,
-                    <NumberField key="stagn" source="stagn" label="table.field.matnr.stagn" />,
-                    <NumberField key="valid" source="valid" label="table.field.matnr.valid" />,
-                    <NumberField key="validWarn" source="validWarn" label="table.field.matnr.validWarn" />,
-                    <BooleanField key="flagCheck" source="flagCheck" label="table.field.matnr.flagCheck" sortable={false} />,
-                    <ReferenceField key="updateBy" source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>,
-                    <DateField key="updateTime" source="updateTime" label="common.field.updateTime" showTime />,
-                    <ReferenceField key="createBy" source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>,
-                    <DateField key="createTime" source="createTime" label="common.field.createTime" showTime />,
+                    // <TextField key="stockLeval$" source="stockLeval$" label="table.field.matnr.stockLevel" sortable={false} />,
+                    // <TextField key="flagLabelMange$" source="flagLabelMange$" label="table.field.matnr.isLabelMange" sortable={false} />,
+                    // <NumberField key="safeQty" source="safeQty" label="table.field.matnr.safeQty" />,
+                    // <NumberField key="minQty" source="minQty" label="table.field.matnr.minQty" />,
+                    // <NumberField key="maxQty" source="maxQty" label="table.field.matnr.maxQty" />,
+                    // <NumberField key="stagn" source="stagn" label="table.field.matnr.stagn" />,
+                    // <NumberField key="valid" source="valid" label="table.field.matnr.valid" />,
+                    // <NumberField key="validWarn" source="validWarn" label="table.field.matnr.validWarn" />,
+                    // <BooleanField key="flagCheck" source="flagCheck" label="table.field.matnr.flagCheck" sortable={false} />,
+                    // <ReferenceField key="updateBy" source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+                    //     <TextField source="nickname" />
+                    // </ReferenceField>,
+                    // <DateField key="updateTime" source="updateTime" label="common.field.updateTime" showTime />,
+                    // <ReferenceField key="createBy" source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
+                    //     <TextField source="nickname" />
+                    // </ReferenceField>,
+                    // <DateField key="createTime" source="createTime" label="common.field.createTime" showTime />,
                     <BooleanField key="statusBool" source="statusBool" label="common.field.status" sortable={false} />,
-                    <TextField key="memo" source="memo" label="common.field.memo" sortable={false} />,
+                    // <TextField key="memo" source="memo" label="common.field.memo" sortable={false} />,
                 ]
                 const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
                 const opt = <WrapperField key="opt" cellClassName="fixed" className="fixed" label="common.field.opt">
diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
index 74b125e..93a152c 100644
--- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
+++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
@@ -50,11 +50,11 @@
         label: 'table.field.matnrGroup.name',
         Width: 100,
     },
-    {
-        id: 'parentId',
-        label: 'table.field.matnrGroup.parentId',
-        minWidth: 100,
-    }
+    // {
+    //     id: 'parCode',
+    //     label: 'table.field.matnrGroup.parCode',
+    //     minWidth: 100,
+    // }
 ];
 
 const getIconComponent = (iconStr) => {
diff --git a/rsf-admin/src/page/basicInfo/warehouse/WarehouseList.jsx b/rsf-admin/src/page/basicInfo/warehouse/WarehouseList.jsx
index f16724d..2a73389 100644
--- a/rsf-admin/src/page/basicInfo/warehouse/WarehouseList.jsx
+++ b/rsf-admin/src/page/basicInfo/warehouse/WarehouseList.jsx
@@ -129,13 +129,13 @@
                     preferenceKey='warehouse'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false} 
-                    omit={['id', 'createTime', 'createBy', 'memo', 'longitude', 'latgitude', 'length', 'width', 'height']}
+                    omit={['id', 'factory', 'createTime', 'createBy', 'memo', 'longitude', 'latgitude', 'length', 'width', 'height']}
                 >
                     <NumberField source="id" />
-                    <TextField source="factory" label="table.field.warehouse.factory" />
-                    <TextField source="name" label="table.field.warehouse.name" />
                     <TextField source="code" label="table.field.warehouse.code" />
+                    <TextField source="name" label="table.field.warehouse.name" />
                     <TextField source="address" label="table.field.warehouse.address" />
+                    <TextField source="factory" label="table.field.warehouse.factory" />
                     <TextField source="longitude" label="table.field.warehouse.longitude" />
                     <TextField source="latgitude" label="table.field.warehouse.latgitude" />
                     <NumberField source="length" label="table.field.warehouse.length" />
diff --git a/rsf-admin/src/page/dashboard/NbCard.jsx b/rsf-admin/src/page/dashboard/NbCard.jsx
index 80c8772..b1f1ac4 100644
--- a/rsf-admin/src/page/dashboard/NbCard.jsx
+++ b/rsf-admin/src/page/dashboard/NbCard.jsx
@@ -25,74 +25,329 @@
 const NbCard = (props) => {
     const { tasks, total, ...rset } = props;
     const translate = useTranslate();
+    
+    // 鐘舵�佺鐞嗗睆骞曢珮搴�
+    const [screenHeight, setScreenHeight] = React.useState(window.innerHeight);
+    const [containerHeight, setContainerHeight] = React.useState('100vh');
 
-    const display = 'display';
+    // 鐩戝惉绐楀彛澶у皬鍙樺寲
+    React.useEffect(() => {
+        const handleResize = () => {
+            setScreenHeight(window.innerHeight);
+        };
+
+        window.addEventListener('resize', handleResize);
+        
+        // 璁$畻瀹瑰櫒楂樺害锛堝噺鍘诲彲鑳界殑澶撮儴瀵艰埅鏍忛珮搴︼級
+        const calculateContainerHeight = () => {
+            const headerHeight = 64; // 鍋囪澶撮儴瀵艰埅鏍忛珮搴︿负64px
+            const padding = 16; // 涓婁笅杈硅窛
+            return `calc(${screenHeight}px - ${headerHeight + padding * 2}px)`;
+        };
+        
+        setContainerHeight(calculateContainerHeight());
+
+        return () => {
+            window.removeEventListener('resize', handleResize);
+        };
+    }, [screenHeight]);
 
     return (
-        <>
+        <Box sx={{
+            height: containerHeight, // 鍔ㄦ�佽绠楃殑楂樺害
+            maxHeight: 690, //containerHeight,
+            display: 'flex',
+            flexDirection: 'column',
+            minHeight: '400px', // 鏈�灏忛珮搴︿繚璇�
+            // overflowY: 'auto'
+        }}>
             <CardWithIcon
                 icon={CommentIcon}
                 title={translate('page.dashboard.pending_reviews')}
                 subtitle={total}
                 {...rset}
+                sx={{
+                    flex: 1,
+                    display: 'flex',
+                    flexDirection: 'column',
+                    height: '100%',
+                    minHeight: 0,
+                }}
             >
-                <List sx={{ display }}>
-                    {tasks?.map((record) => (
-                        <ListItem key={record.id} disablePadding>
-                            <ListItemButton
-                                alignItems="flex-start"
-                                component={Link}
-                                to={`/task/${record.id}`}
-                            >
-                                <Grid container item md={12}>
-                                    <Box sx={{ display: 'flex' }}>
-                                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                                            <Typography color="textSecondary">{translate("table.field.task.taskCode")}锛�</Typography>
-                                            <Typography color="textSecondary">{record?.taskCode}</Typography>
-                                        </Box>
-                                    </Box>
-                                    <Box sx={{ display: 'flex' }}>
-                                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                                            <Typography color="textSecondary">{translate("table.field.task.taskType")}锛�</Typography>
-                                            <Typography color="textSecondary" maxWidth="200" overflow="hidden">{record?.taskType$}</Typography>
-                                        </Box>
-                                    </Box>
-                                    <Box sx={{ display: 'flex' }}>
-                                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                                            <Typography color="textSecondary">{translate("table.field.task.taskStatus")}锛�</Typography>
-                                            <Typography color="textSecondary">{record?.taskStatus$}</Typography>
-                                        </Box>
-                                    </Box>
-                                    <Box sx={{ display: 'flex' }}>
-                                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                                            <Typography color="textSecondary">{translate("table.field.task.startTime")}锛�</Typography>
-                                            <Typography color="textSecondary">{record?.createTime}</Typography>
-                                        </Box>
-                                    </Box>
-                                </Grid>
-                            </ListItemButton>
-                            <Spacer />
-                        </ListItem>
-                    ))}
-                </List>
-                <Box flexGrow={1}>&nbsp;</Box>
-                {/* <Button
-                    sx={{ borderRadius: 0 }}
-                    component={Link}
-                    to="/task"
-                    size="small"
-                    color="primary"
-                >
-                    <Box p={1} sx={{ color: 'primary.main' }}>
-                        {translate('pos.dashboard.all_reviews')}
+                {/* 鍐呭瀹瑰櫒 - 鑷�傚簲楂樺害 */}
+                <Box sx={{ 
+                    flex: 1,
+                    display: 'flex',
+                    flexDirection: 'column',
+                    minHeight: 0,
+                    height: '100%',
+                }}>
+                    {/* 鍒楄〃鍖哄煙 - 鑷姩婊氬姩 */}
+                    <Box sx={{
+                        flex: 1,
+                        overflow: 'auto',
+                        minHeight: 0,
+                        '&::-webkit-scrollbar': {
+                            width: '6px',
+                        },
+                        '&::-webkit-scrollbar-track': {
+                            background: 'transparent',
+                        },
+                        '&::-webkit-scrollbar-thumb': {
+                            background: '#ccc',
+                            borderRadius: '3px',
+                            '&:hover': {
+                                background: '#aaa',
+                            }
+                        }
+                    }}>
+                        <List sx={{ py: 0, minHeight: 'min-content' }}>
+                            {tasks?.length > 0 ? (
+                                tasks.map((record) => (
+                                    <ListItem 
+                                        key={record.id} 
+                                        disablePadding
+                                        sx={{
+                                            borderBottom: '1px solid',
+                                            borderColor: 'divider',
+                                            '&:last-child': {
+                                                borderBottom: 'none',
+                                            }
+                                        }}
+                                    >
+                                        <ListItemButton
+                                            component={Link}
+                                            to={`/task/${record.id}`}
+                                            sx={{
+                                                py: 1.5,
+                                                px: 2,
+                                                '&:hover': {
+                                                    backgroundColor: 'action.hover',
+                                                }
+                                            }}
+                                        >
+                                            <Grid container spacing={1}>
+                                                {/* 绗竴琛岋細浠诲姟缂栫爜鍜岀被鍨� */}
+                                                <Grid item xs={12} sx={{ display: 'flex', alignItems: 'center' }}>
+                                                    <Box sx={{ 
+                                                        display: 'flex', 
+                                                        alignItems: 'center', 
+                                                        minWidth: 0, 
+                                                        flex: 1,
+                                                        mr: 2
+                                                    }}>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                fontWeight: 600,
+                                                                color: 'primary.main',
+                                                                minWidth: '80px',
+                                                                flexShrink: 0,
+                                                            }}
+                                                        >
+                                                            {translate("table.field.task.taskCode")}锛�
+                                                        </Typography>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                color: 'text.primary',
+                                                                fontWeight: 500,
+                                                                overflow: 'hidden',
+                                                                textOverflow: 'ellipsis',
+                                                                whiteSpace: 'nowrap',
+                                                            }}
+                                                        >
+                                                            {record?.taskCode}
+                                                        </Typography>
+                                                    </Box>
+                                                    
+                                                    <Box sx={{ 
+                                                        display: 'flex', 
+                                                        alignItems: 'center', 
+                                                        minWidth: 0, 
+                                                        flex: 1
+                                                    }}>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                fontWeight: 600,
+                                                                color: 'primary.main',
+                                                                minWidth: '80px',
+                                                                flexShrink: 0,
+                                                            }}
+                                                        >
+                                                            {translate("table.field.task.taskType")}锛�
+                                                        </Typography>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                color: 'text.primary',
+                                                                overflow: 'hidden',
+                                                                textOverflow: 'ellipsis',
+                                                                whiteSpace: 'nowrap',
+                                                            }}
+                                                            title={record?.taskType$}
+                                                        >
+                                                            {record?.taskType$}
+                                                        </Typography>
+                                                    </Box>
+                                                </Grid>
+
+                                                {/* 绗簩琛岋細鐘舵�佸拰鏃堕棿 */}
+                                                <Grid item xs={12} sx={{ display: 'flex', alignItems: 'center' }}>
+                                                    <Box sx={{ 
+                                                        display: 'flex', 
+                                                        alignItems: 'center', 
+                                                        minWidth: 0, 
+                                                        flex: 1,
+                                                        mr: 2
+                                                    }}>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                fontWeight: 600,
+                                                                color: 'primary.main',
+                                                                minWidth: '80px',
+                                                                flexShrink: 0,
+                                                            }}
+                                                        >
+                                                            {translate("table.field.task.taskStatus")}锛�
+                                                        </Typography>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                color: getStatusColor(record?.taskStatus$),
+                                                                fontWeight: 600,
+                                                                px: 1,
+                                                                py: 0.5,
+                                                                borderRadius: 1,
+                                                                backgroundColor: getStatusBackground(record?.taskStatus$),
+                                                                fontSize: '0.75rem',
+                                                            }}
+                                                        >
+                                                            {record?.taskStatus$}
+                                                        </Typography>
+                                                    </Box>
+                                                    
+                                                    <Box sx={{ 
+                                                        display: 'flex', 
+                                                        alignItems: 'center', 
+                                                        minWidth: 0, 
+                                                        flex: 1
+                                                    }}>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                fontWeight: 600,
+                                                                color: 'primary.main',
+                                                                minWidth: '80px',
+                                                                flexShrink: 0,
+                                                            }}
+                                                        >
+                                                            {translate("table.field.task.startTime")}锛�
+                                                        </Typography>
+                                                        <Typography 
+                                                            variant="body2" 
+                                                            sx={{ 
+                                                                color: 'text.secondary',
+                                                                fontFamily: 'monospace',
+                                                                fontSize: '0.875rem',
+                                                            }}
+                                                        >
+                                                            {formatDateTime(record?.createTime)}
+                                                        </Typography>
+                                                    </Box>
+                                                </Grid>
+                                            </Grid>
+                                        </ListItemButton>
+                                    </ListItem>
+                                ))
+                            ) : (
+                                // 绌虹姸鎬佹彁绀� - 灞呬腑鏄剧ず
+                                <Box sx={{ 
+                                    display: 'flex', 
+                                    alignItems: 'center', 
+                                    justifyContent: 'center', 
+                                    height: '100%',
+                                    minHeight: 120,
+                                    color: 'text.secondary'
+                                }}>
+                                    <Typography variant="body2">
+                                        {translate('common.noData')}
+                                    </Typography>
+                                </Box>
+                            )}
+                        </List>
                     </Box>
-                </Button> */}
+
+                    {/* 搴曢儴鎸夐挳鍖哄煙 - 鍥哄畾鍦ㄥ簳閮� */}
+                    {tasks?.length > 0 && (
+                        <Box sx={{ 
+                            borderTop: '1px solid', 
+                            borderColor: 'divider',
+                            flexShrink: 0,
+                            mt: 'auto',
+                        }}>
+                            <Button
+                                component={Link}
+                                to="/task"
+                                size="small"
+                                color="primary"
+                                fullWidth
+                                sx={{
+                                    borderRadius: 0,
+                                    py: 1,
+                                    fontSize: '0.875rem',
+                                    fontWeight: 500,
+                                }}
+                            >
+                                {translate('pos.dashboard.all_reviews')}
+                            </Button>
+                        </Box>
+                    )}
+                </Box>
             </CardWithIcon>
-        </>
+        </Box>
     );
 };
 
-const Spacer = () => <span style={{ width: '1em', }} />;
+// 鐘舵�侀鑹叉槧灏�
+const getStatusColor = (status) => {
+    const statusMap = {
+        'pending': 'warning.main',
+        'completed': 'success.main',
+        'processing': 'info.main',
+        'cancelled': 'error.main',
+        'failed': 'error.main',
+    };
+    return statusMap[status?.toLowerCase()] || 'text.secondary';
+};
 
+// 鐘舵�佽儗鏅壊
+const getStatusBackground = (status) => {
+    const backgroundMap = {
+        'pending': 'warning.light',
+        'completed': 'success.light',
+        'processing': 'info.light',
+        'cancelled': 'error.light',
+        'failed': 'error.light',
+    };
+    return backgroundMap[status?.toLowerCase()] || 'grey.100';
+};
 
-export default NbCard;
+// 鏍煎紡鍖栨棩鏈熸椂闂�
+const formatDateTime = (dateTime) => {
+    if (!dateTime) return '-';
+    try {
+        return new Date(dateTime).toLocaleDateString('zh-CN', {
+            month: '2-digit',
+            day: '2-digit',
+            hour: '2-digit',
+            minute: '2-digit'
+        });
+    } catch {
+        return dateTime;
+    }
+};
+
+export default NbCard;
\ No newline at end of file
diff --git a/rsf-admin/src/page/dashboard/NbList.jsx b/rsf-admin/src/page/dashboard/NbList.jsx
index 3794797..a2b879b 100644
--- a/rsf-admin/src/page/dashboard/NbList.jsx
+++ b/rsf-admin/src/page/dashboard/NbList.jsx
@@ -21,12 +21,27 @@
     return (
         <Card sx={{
             flex: 1,
+            boxShadow: 2,
+            maxWidth: 598,
+            marginTop: 1
         }}>
-            <CardHeader title={translate('page.dashboard.list.stock')} />
-            <Box sx={{ maxHeight: 500, overflowY: 'auto',}}>
-                <List dense={true}>
+            <CardHeader 
+                title={translate('page.dashboard.list.stock')}
+                sx={{ 
+                    pb: 1,
+                    '& .MuiCardHeader-title': {
+                        fontSize: '1.1rem',
+                        fontWeight: 600,
+                    }
+                }} 
+            />
+            <Box sx={{ maxHeight: 500, overflowY: 'auto' }}>
+                <List dense={true} sx={{ py: 0 }}>
                     {deadStock.map(record => (
-                        <PendingOrder key={`record?.id + ${Math.random().toString(36).substr(2, 9)} `} order={record} />
+                        <PendingOrder 
+                            key={`${record?.id}_${Math.random().toString(36).substr(2, 9)}`} 
+                            order={record} 
+                        />
                     ))}
                 </List>
             </Box>
@@ -37,71 +52,131 @@
 export const PendingOrder = (props) => {
     const { order } = props;
     const translate = useTranslate();
-    // const { referenceRecord: customer, isPending } = useReference({
-    //     reference: 'customers',
-    //     id: order.id,
-    // });
 
     return (
-        <ListItem disablePadding>
-            {/* component={Link} to={`/locItem/${order.id}`} */}
-            <ListItemButton >
-                {/* <ListItemAvatar>
-                    {isPending ? (
-                        <Avatar />
-                    ) : (
-                        <Avatar
-                            src={`${customer?.avatar}?size=32x32`}
-                            sx={{ bgcolor: 'background.paper' }}
-                            alt={`${customer?.first_name} ${customer?.last_name}`}
-                        />
-                    )}
-                </ListItemAvatar> */}
-                {/* <ListItemText
-                    primary={new Date(order.createTime).toLocaleString('en-GB')}
-                    secondary={translate('page.dashboard.list.stock', {
-                        name: order.maktx
-                    })}
-                >
-       
-                </ListItemText> */}
-                <Grid container item md={12}>
-                    <Box sx={{ display: 'flex' }}>
-                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                            <Typography color="textSecondary">{translate("table.field.asnOrderItem.matnrCode")}锛�</Typography>
-                            <Typography color="textSecondary">{order?.matnrCode}</Typography>
+        <ListItem 
+            disablePadding
+            sx={{
+                borderBottom: '1px solid',
+                borderColor: 'divider',
+                '&:last-child': {
+                    borderBottom: 'none',
+                }
+            }}
+        >
+            <ListItemButton 
+                sx={{
+                    py: 1.5,
+                    '&:hover': {
+                        backgroundColor: 'action.hover',
+                    }
+                }}
+            >
+                <Grid container spacing={1}>
+                    {/* 绗竴琛岋細鐗╂枡缂栫爜鍜屽悕绉� */}
+                    <Grid item xs={12} sx={{ display: 'flex', alignItems: 'center' }}>
+                        <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 0, flex: 1 }}>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    fontWeight: 600,
+                                    color: 'primary.main',
+                                    minWidth: '120px',
+                                    flexShrink: 0,
+                                }}
+                            >
+                                {translate("table.field.asnOrderItem.matnrCode")}锛�
+                            </Typography>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    color: 'text.primary',
+                                    overflow: 'hidden',
+                                    textOverflow: 'ellipsis',
+                                    whiteSpace: 'nowrap',
+                                }}
+                            >
+                                {order?.matnrCode}
+                            </Typography>
                         </Box>
-                    </Box>
-                    <Box sx={{ display: 'flex' }}>
-                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                            <Typography color="textSecondary">{translate("table.field.asnOrderItem.maktx")}锛�</Typography>
-                            <Typography color="textSecondary" maxWidth="200" overflow="hidden">{order?.maktx}</Typography>
+                        
+                        <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 0, flex: 1 }}>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    fontWeight: 600,
+                                    color: 'primary.main',
+                                    minWidth: '80px',
+                                    flexShrink: 0,
+                                }}
+                            >
+                                {translate("table.field.asnOrderItem.maktx")}锛�
+                            </Typography>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    color: 'text.primary',
+                                    overflow: 'hidden',
+                                    textOverflow: 'ellipsis',
+                                    whiteSpace: 'nowrap',
+                                }}
+                                title={order?.maktx} // 娣诲姞title鎻愮ず瀹屾暣鍐呭
+                            >
+                                {order?.maktx}
+                            </Typography>
                         </Box>
-                    </Box>
-                    <Box sx={{ display: 'flex' }}>
-                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                            <Typography color="textSecondary">{translate("table.field.asnOrderItem.anfme")}锛�</Typography>
-                            <Typography color="textSecondary">{order?.anfme}</Typography>
+                    </Grid>
+
+                    {/* 绗簩琛岋細鏁伴噺鍜屾棩鏈� */}
+                    <Grid item xs={12} sx={{ display: 'flex', alignItems: 'center' }}>
+                        <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 0, flex: 1 }}>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    fontWeight: 600,
+                                    color: 'primary.main',
+                                    minWidth: '120px',
+                                    flexShrink: 0,
+                                }}
+                            >
+                                {translate("table.field.asnOrderItem.anfme")}锛�
+                            </Typography>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    color: 'text.primary',
+                                    fontWeight: 500,
+                                }}
+                            >
+                                {order?.anfme}
+                            </Typography>
                         </Box>
-                    </Box>
-                    <Box sx={{ display: 'flex' }}>
-                        <Box sx={{ display: 'flex', padding: '1em' }}>
-                            <Typography color="textSecondary">{translate("table.field.locItem.deadTime")}锛�</Typography>
-                            <Typography color="textSecondary">{order?.deadTime}</Typography>
+                        
+                        <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 0, flex: 1 }}>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    fontWeight: 600,
+                                    color: 'primary.main',
+                                    minWidth: '120px',
+                                    flexShrink: 0,
+                                }}
+                            >
+                                {translate("table.field.locItem.deadTime")}锛�
+                            </Typography>
+                            <Typography 
+                                variant="body2" 
+                                sx={{ 
+                                    color: order?.deadTime ? 'error.main' : 'text.secondary',
+                                    fontWeight: order?.deadTime ? 600 : 400,
+                                    fontFamily: 'monospace',
+                                }}
+                            >
+                                {order?.deadTime || '-'}
+                            </Typography>
                         </Box>
-                    </Box>
+                    </Grid>
                 </Grid>
-                {/* <ListItemSecondaryAction>
-                    <Box
-                        component="span"
-                        sx={{
-                            marginRight: '1em',
-                            color: 'text.primary',
-                        }}
-                    >
-                        {order.deadTime}
-                    </Box>
-                </ListItemSecondaryAction> */}
             </ListItemButton>
         </ListItem>
     );
diff --git a/rsf-admin/src/page/dashboard/NbPie.jsx b/rsf-admin/src/page/dashboard/NbPie.jsx
index c614e70..e973ad9 100644
--- a/rsf-admin/src/page/dashboard/NbPie.jsx
+++ b/rsf-admin/src/page/dashboard/NbPie.jsx
@@ -13,7 +13,9 @@
         <>
             <Card sx={{
                 width: '100%',
+                maxWidth: 598,
                 maxHeight: 570,
+                marginTop: 1,
                 flexDirection: 'column',
                 flex: '1',
                 '& a': {
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
index 070c3a7..0edff6f 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
@@ -201,6 +201,11 @@
         <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" />,
         <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />,
         <TextField source="packName" label="table.field.asnOrderItem.packName" />,
+
+        // 閾跺骇鏂板
+        <TextField source="trackCode" label="浠撳簱" />,
+        <TextField source="trackCode" label="琛屽唴鍙�" />,
+        <TextField source="packName" label="璁″垝璺熻釜鍙�" />,
       ]
       const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
       const lastArr = [
@@ -238,7 +243,7 @@
           preferenceKey='asnOrderItem'
           bulkActionButtons={false}
           rowClick={(id, resource, record) => false}
-          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'poDetlCode', 'matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode']}
+          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode']}
         >
           {columns.map((column) => column)}
         </StyledDatagrid>}
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
index 11ed2a0..3f38817 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
@@ -158,16 +158,24 @@
             </>}
           rowClick={false}
           expandSingle={true}
-          omit={['id', 'createTime', 'createBy', 'memo', 'logisNo', 'poId', 'rleStatus$', 'createBy$']}
+          omit={['id', 'code', 'poId', 'arrTime', 'createTime', 'createBy', 'memo', 'logisNo', 'updateBy$', 'updateTime', 'rleStatus$', 'createBy$']}
         >
           <NumberField source="id" />
-          <TextField source="code" label="table.field.asnOrder.code" />
+          {/* <TextField source="code" label="table.field.asnOrder.code" /> */}
           <TextField source="poCode" label="table.field.asnOrder.poCode" />
           <NumberField source="poId" label="table.field.asnOrder.poId" />
           <TextField source="type$" label="table.field.asnOrder.type" />
           <TextField cellClassName="wkType" source="wkType$" label="table.field.asnOrder.wkType" />
           <NumberField source="anfme" label="table.field.asnOrder.anfme" />
           <NumberField source="qty" label="table.field.asnOrder.qty" />
+
+          {/* 閾跺骇鏂板 */}
+          <TextField source="purchaseOrgName" label="閲囪喘缁勭粐" />
+          <TextField source="purchaseUserName" label="閲囪喘鍛�" />
+          <TextField source="purchaseDate" label="閲囪喘鏃ユ湡" />
+          <TextField source="supplierId" label="渚涘簲鍟嗙紪鐮�" />
+          <TextField source="supplierName" label="渚涘簲鍟�" />          
+
           <DateField source="arrTime" label="table.field.asnOrder.arrTime" showTime />
           <TextField source="rleStatus$" label="table.field.asnOrder.rleStatus" sortable={false} />
           <TextField source="logisNo" label="table.field.asnOrder.logisNo" />
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
index c78604b..6188628 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
@@ -193,6 +193,11 @@
         <TextField source="qrcode" label="table.field.outStockItem.qrcode" />,
         <TextField source="trackCode" label="table.field.outStockItem.barcode" />,
         <TextField source="packName" label="table.field.outStockItem.packName" />,
+
+        // 閾跺骇鏂板
+        <TextField source="trackCode" label="浠撳簱" />,
+        <TextField source="trackCode" label="琛屽唴鍙�" />,
+        <TextField source="packName" label="璁″垝璺熻釜鍙�" />,
       ]
       const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
       const lastArr = [
@@ -230,7 +235,7 @@
           preferenceKey='asnOrderItem'
           bulkActionButtons={false}
           rowClick={(id, resource, record) => false}
-          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'poDetlCode', 'platOrderCode','matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode']}
+          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'poDetlCode', 'platOrderCode','matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode', 'workQty']}
         >
           {columns.map((column) => column)}
         </StyledDatagrid>}
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index 0e759e7..ef38068 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -173,7 +173,7 @@
           bulkActionButtons={<PublicTaskButton setWaveRule={setWaveRule} setSelectIds={setSelectIds} />}
           rowClick={false}
           expandSingle={true}
-          omit={['id', 'createTime', 'createBy$', 'memo', 'rleStatus$']}
+          omit={['id', 'code', 'createTime', 'createBy$', 'memo', 'rleStatus$', 'logisNo', 'updateBy$', 'workQty', 'updateTime']}
         >
           <NumberField source="id" />
           <TextField source="code" label="table.field.outStock.code" />
@@ -191,6 +191,14 @@
           <DateField source="createTime" label="common.field.createTime" showTime />
           <BillStatusField cellClassName="status" source="exceStatus" label="table.field.outStock.exceStatus" />
           <TextField source="memo" label="common.field.memo" sortable={false} />
+
+          {/* 閾跺骇鏂板 */}
+          <TextField source="saleOrgName" label="閿�鍞粍缁�" />
+          <TextField source="saleUserName" label="閿�鍞憳" />
+          <TextField source="saleDate" label="鍑哄簱鏃ユ湡" />
+          <TextField source="customerId" label="瀹㈡埛缂栫爜" />
+          <TextField source="customerName" label="瀹㈡埛" />     
+
           <WrapperField cellClassName="opt" label="common.field.opt" >
             <MyButton setCreateDialog={setManualDialog} setmodalType={setmodalType} />
             <EditButton label="toolbar.detail" icon={(<DetailsIcon />)}></EditButton>
diff --git a/rsf-admin/src/page/orders/preparation/MatPreparationItemList.jsx b/rsf-admin/src/page/orders/preparation/MatPreparationItemList.jsx
new file mode 100644
index 0000000..86a8c30
--- /dev/null
+++ b/rsf-admin/src/page/orders/preparation/MatPreparationItemList.jsx
@@ -0,0 +1,209 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useFetcher, useNavigate } from 'react-router-dom';
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    SelectColumnsButton,
+    FilterButton,
+    useTranslate,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    useRefresh,
+    DateInput,
+    useNotify,
+    SelectInput,
+    useListContext,
+    NumberInput,
+    useGetRecordId,
+} from 'react-admin';
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material';
+import MyCreateButton from "../components/MyCreateButton";
+import PageDrawer from "../components/PageDrawer";
+import { styled } from '@mui/material/styles';
+// import TaskItemCreate from "./TaskItemCreate";
+import request from '@/utils/request';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto',
+        maring: '1em'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 220
+    },
+}));
+
+const filters = [
+    <SearchInput source="condition" alwaysOn />,
+    // <DateInput label='common.time.after' source="timeStart" />,
+    // <DateInput label='common.time.before' source="timeEnd" />,
+    <NumberInput source="taskId" label="table.field.taskItem.taskId" />,
+    <NumberInput source="orderId" label="table.field.taskItem.orderId" />,
+    <NumberInput source="orderType" label="table.field.taskItem.orderType" />,
+    <NumberInput source="orderItemId" label="table.field.taskItem.orderItemId" />,
+    <NumberInput source="matnrId" label="table.field.taskItem.matnrId" />,
+    <TextInput source="maktx" label="table.field.taskItem.maktx" />,
+    <TextInput source="matnrCode" label="table.field.taskItem.matnrCode" />,
+    <TextInput source="unit" label="table.field.taskItem.unit" />,
+    <NumberInput source="anfme" label="table.field.taskItem.anfme" />,
+    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
+    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
+    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
+    <TextInput source="batch" label="table.field.taskItem.batch" />,
+    <TextInput source="spec" label="table.field.taskItem.spec" />,
+    <TextInput source="model" label="table.field.taskItem.model" />,
+    <TextInput label="common.field.memo" source="memo" />,
+    <SelectInput
+        label="common.field.status"
+        source="status"
+        choices={[
+            { id: '1', name: 'common.enums.statusTrue' },
+            { id: '0', name: 'common.enums.statusFalse' },
+        ]}
+        resettable
+    />,
+]
+
+const MatPreparationItemList = () => {
+    const translate = useTranslate();
+    const [createDialog, setCreateDialog] = useState(false);
+    const [drawerVal, setDrawerVal] = useState(false);
+    const recordId = useGetRecordId();
+
+    return (
+        <Box display="flex">
+            <List
+                resource="preparationItem"
+                sx={{
+                    flexGrow: 1,
+                    transition: (theme) =>
+                        theme.transitions.create(['all'], {
+                            duration: theme.transitions.duration.enteringScreen,
+                        }),
+                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                }}
+                title={"menu.preparationItem"}
+                empty={false}
+                pagination={false}
+                filters={filters}
+                filter={{ taskId: recordId }}
+                sort={{ field: "create_time", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <FilterButton />
+                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
+                        <SelectColumnsButton preferenceKey='preparationItem' />
+                        {/* <MyExportButton /> */}
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <DynamicFields />
+            </List>
+            <TaskItemCreate
+                open={createDialog}
+                setOpen={setCreateDialog} />
+            <PageDrawer
+                title='PreparationItem Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default MatPreparationItemList;
+
+
+const DynamicFields = (props) => {
+    const translate = useTranslate();
+    const notify = useNotify();
+    const [columns, setColumns] = useState([]);
+    const { isLoading } = useListContext();
+    const refresh = useRefresh();
+    useEffect(() => {
+        getDynamicFields();
+    }, []);
+
+    const getDynamicFields = async () => {
+        const { data: { code, data, msg }, } = await request.get("/fields/enable/list");
+        if (code == 200) {
+            const arr = [
+                <NumberField source="id" />,
+                // <NumberField source="taskId" label="table.field.taskItem.taskId" />,
+                // <NumberField source="orderId" label="table.field.taskItem.orderId" />,
+                // <NumberField source="orderType$" label="table.field.taskItem.orderType" />,
+                // <NumberField source="wkType$" label="table.field.taskItem.wkType" />,
+                <NumberField source="orderItemId" label="table.field.taskItem.orderItemId" />,
+                <NumberField source="matnrId" label="table.field.taskItem.matnrId" />,
+                <TextField source="maktx" label="table.field.taskItem.maktx" />,
+                <TextField source="matnrCode" label="table.field.taskItem.matnrCode" />,
+                <TextField source="unit" label="table.field.taskItem.unit" />,
+                <NumberField source="anfme" label="table.field.taskItem.anfme" />,
+                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
+                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
+                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
+                <TextField source="batch" label="table.field.taskItem.batch" />,
+                <TextField source="isptResult$" label="table.field.taskItem.isptResult" />,
+                <TextField source="spec" label="table.field.taskItem.spec" />,
+                <TextField source="model" label="table.field.taskItem.model" />,
+            ]
+            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
+            const lastArr = [
+                <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+                    <TextField source="nickname" />
+                </ReferenceField>,
+                <DateField source="updateTime" label="common.field.updateTime" showTime />,
+                <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
+                    <TextField source="nickname" />
+                </ReferenceField>,
+                <DateField source="createTime" label="common.field.createTime" showTime />,
+                <BooleanField source="statusBool" label="common.field.status" sortable={false} />,
+                <TextField source="memo" label="common.field.memo" sortable={false} />,
+            ]
+            setColumns([...arr, ...fields, ...lastArr]);
+        } else {
+            notify(msg);
+        }
+    }
+
+    return (
+        <Box sx={{ position: 'relative', minHeight: "60vh", }}>
+            {isLoading && (
+                <LinearProgress
+                    sx={{
+                        height: "2px",
+                        position: 'absolute',
+                        top: 0,
+                        left: 0,
+                        right: 0,
+                    }}
+                />
+            )}
+            {columns.length > 0 &&
+                <StyledDatagrid
+                    preferenceKey='preparationItem'
+                    bulkActionButtons={false}
+                    rowClick={false}
+                    // expand={() => <TaskItemPanel />}
+                    expandSingle={true}
+                    omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId', 'platWorkCode', 'projectCode','statusBool']}
+                >
+                    {columns.map((column) => column)}
+                </StyledDatagrid>}
+        </Box>
+    )
+}
diff --git a/rsf-admin/src/page/orders/preparation/MatPreparationList.jsx b/rsf-admin/src/page/orders/preparation/MatPreparationList.jsx
new file mode 100644
index 0000000..206a82d
--- /dev/null
+++ b/rsf-admin/src/page/orders/preparation/MatPreparationList.jsx
@@ -0,0 +1,422 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import request from '@/utils/request';
+
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    SelectColumnsButton,
+    FilterButton,
+    BulkDeleteButton,
+    WrapperField,
+    useRecordContext,
+    useTranslate,
+    useNotify,
+    useRefresh,
+    TextField,
+    NumberField,
+    DateField,
+    AutocompleteInput,
+    BooleanField,
+    TextInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    Button,
+    EditButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import SwapVertIcon from '@mui/icons-material/SwapVert';
+import AlignVerticalTopIcon from '@mui/icons-material/AlignVerticalTop';
+import TaskAltIcon from '@mui/icons-material/TaskAlt';
+import CancelIcon from '@mui/icons-material/Cancel';
+import PageDrawer from "../../components/PageDrawer";
+import MatPreparationPanel from "./MatPreparationPanel";
+import MyField from "../../components/MyField";
+import ConfirmButton from "../../components/ConfirmButton";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, AUTO_RUN_CHECK_ORDERS } from '@/config/setting';
+import PlayArrowOutlinedIcon from '@mui/icons-material/PlayArrowOutlined';
+import PauseIcon from '@mui/icons-material/Pause';
+import PauseCircleOutlineIcon from '@mui/icons-material/PauseCircleOutline';
+import * as Common from '@/utils/common';
+import ColorizeOutlinedIcon from '@mui/icons-material/ColorizeOutlined';
+import GradingOutlinedIcon from '@mui/icons-material/GradingOutlined';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 248
+    },
+    '& .MuiTableCell-root': {
+    whiteSpace: 'nowrap',
+    overflow: 'visible',
+    textOverflow: 'unset'
+    }
+
+}));
+
+
+const MatPreparationList = (props) => {
+    const translate = useTranslate();
+    const refresh = useRefresh();
+    const [drawerVal, setDrawerVal] = useState(false);
+    const [autoExce, setAutoExce] = useState(false);
+    const dict = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_warehouse_type')) || [];
+
+    useEffect(() => {
+        // getConfig()
+    }, [])
+
+    // const getConfig = async () => {
+    //     const { data: { code, data, msg } } = await request.get('/config/flag/' + AUTO_RUN_CHECK_ORDERS);
+    //     if (code === 200) {
+    //         setAutoExce(JSON.parse(data?.val))
+    //     }
+    // }
+
+    // useEffect(() => {
+    //     const interval = setInterval(() => {
+    //         refresh();
+    //     }, 5000); // 姣�5绉掑埛鏂颁竴娆�
+
+    //     return () => clearInterval(interval); // 娓呴櫎瀹氭椂鍣�
+    // }, [refresh])
+
+    const filters = [
+        <SearchInput source="condition" alwaysOn />,
+        // <DateInput label='common.time.after' source="timeStart" />,
+        // <DateInput label='common.time.before' source="timeEnd" />,
+        <TextInput source="orderCode" label="table.field.preparation.orderCode" />,
+        <NumberInput source="orderStatus" label="table.field.preparation.orderStatus" />,
+        <DateInput source="orderTime" label="table.field.preparation.orderTime" />,
+        <NumberInput source="anfme" label="table.field.preparation.anfme" />,
+
+        // <AutocompleteInput choices={dict} optionText='label' optionValue="value" source="warehType" label="table.field.task.warehType" />,
+        // <TextInput source="orgLoc" label="table.field.task.orgLoc" />,
+        // <TextInput source="orgSite" label="table.field.task.orgSite" />,
+        // <TextInput source="targLoc" label="table.field.task.targLoc" />,
+        // <TextInput source="targSite" label="table.field.task.targSite" />,
+        // <TextInput source="barcode" label="table.field.task.barcode" />,
+        // <TextInput source="robotCode" label="table.field.task.robotCode" />,
+        // <NumberInput source="exceStatus" label="table.field.task.exceStatus" />,
+        // <TextInput source="expDesc" label="table.field.task.expDesc" />,
+        // <NumberInput source="sort" label="table.field.task.sort" />,
+        // <TextInput source="expCode" label="table.field.task.expCode" />,
+        // <DateInput source="startTime" label="table.field.task.startTime" />,
+        // <DateInput source="endTime" label="table.field.task.endTime" />,
+        // <TextInput label="common.field.memo" source="memo" />,
+        // <SelectInput
+        //     label="common.field.status"
+        //     source="status"
+        //     choices={[
+        //         { id: '1', name: 'common.enums.statusTrue' },
+        //         { id: '0', name: 'common.enums.statusFalse' },
+        //     ]}
+        //     resettable
+        // />,
+    ]
+
+    return (
+        <Box display="flex">
+            <List
+                queryOptions={{ refetchInterval: 5000 }}
+                sx={{
+                    flexGrow: 1,
+                    transition: (theme) =>
+                        theme.transitions.create(['all'], {
+                            duration: theme.transitions.duration.enteringScreen,
+                        }),
+                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                }}
+                title={"menu.preparation"}
+                empty={false}
+                filters={filters}
+                sort={{ field: "sort", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <BulkAutoStartButton autoExce={autoExce} setAutoExce={setAutoExce}/>
+                        <BulkAutoPauseButton autoExce={autoExce} setAutoExce={setAutoExce} />
+                        <FilterButton />
+                        <SelectColumnsButton preferenceKey='preparation' />
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <StyledDatagrid
+                    preferenceKey='preparation'
+                    bulkActionButtons={false}
+                    rowClick={false}
+                    expand={<MatPreparationPanel />}
+                    expandSingle={true}
+                    omit={['id', 'sort', 'taskCode', 'createTime', 'createBy$', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status','warehType$']}
+                >
+                    <NumberField source="id" />
+                    <TextField source="taskCode" label="澶囨枡鍙�" />
+                    <NumberField source="status" label="table.field.task.exceStatus" />
+                    <DateField source="startTime" label="table.field.task.startTime" />
+                    <NumberField source="sort" label="鏁伴噺" />
+                    {/* table.field.task.sort */}
+                    
+                    {/* <TextField source="taskCode" label="table.field.task.taskCode" />
+                    <NumberField source="taskStatus$" label="table.field.task.taskStatus" />
+                    <NumberField source="taskType$" label="table.field.task.taskType" />
+                    <NumberField source="warehType$" label="table.field.task.warehType" />
+                    <TextField source="orgLoc" label="table.field.task.orgLoc" />
+                    <TextField source="orgSite" label="table.field.task.orgSite" />
+                    <TextField source="targLoc" label="table.field.task.targLoc" />
+                    <TextField source="targSite" label="table.field.task.targSite" />
+                    <TextField source="barcode" label="table.field.task.barcode" />
+                    <TextField source="robotCode" label="table.field.task.robotCode" />
+                    <NumberField source="exceStatus" label="table.field.task.exceStatus" />
+                    <TextField source="expDesc" label="table.field.task.expDesc" />
+                    <NumberField source="sort" label="table.field.task.sort" />
+                    <TextField source="expCode" label="table.field.task.expCode" />
+                    <TextField source="updateBy$" label="common.field.updateBy" />
+                    <TextField source="createBy$" label="common.field.createBy" />
+                    <DateField source="updateTime" label="common.field.updateTime" showTime />
+                    <DateField source="createTime" label="common.field.createTime" showTime />
+                    <TextField source="memo" label="common.field.memo" sortable={false} /> */}
+                    <WrapperField cellClassName="opt" label="common.field.opt" onClick={(e) => e.stopPropagation()} >
+                        <EditButton label="toolbar.detail" />
+                        <DoneButton sx={{ padding: '1px', fontSize: '.75rem' }} ></DoneButton>
+                        <CancelButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+                        <CheckButton />
+                        <PickButton />
+                        <SetTopButton />
+                    </WrapperField>
+                </StyledDatagrid>
+            </List>
+            <PageDrawer
+                title='Preparation Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default MatPreparationList;
+
+/**
+ * 鐩樼偣
+ * @returns te
+ */
+const CheckButton = () => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+
+    const checkClick = async () => {
+        const { data: { code, data, msg } } = await request.post(`/task/check/` + record.id);
+        if (code === 200) {
+            notify(msg);
+            refresh();
+        } else {
+            notify(msg);
+        }
+    }
+
+    return (record?.taskStatus == 199 && record?.taskType == 107 ? <ConfirmButton label={"toolbar.check"} startIcon={<GradingOutlinedIcon />} onConfirm={checkClick} /> : <></>)
+}
+
+/**鑷姩涓嬪彂浠诲姟**/
+const BulkAutoStartButton = ({ autoExce, setAutoExce }) => {
+    const notify = useNotify();
+    const startClick = async () => {
+        setAutoExce(true)
+        const { data: { code, data, msg } } = await request.post('/config/byFlag', { val: true, flag: 'AUTO_RUN_CHECK_ORDERS' });
+        if (code === 200) {
+            notify(msg);
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        !autoExce ? <Button label="toolbar.autoStartLocs" onClick={startClick} startIcon={<PlayArrowOutlinedIcon />} /> : <></>
+    )
+}
+
+const BulkAutoPauseButton = ({ autoExce, setAutoExce }) => {
+    const notify = useNotify();
+    const pauseClick = async () => {
+        const { data: { code, data, msg } } = await request.post('/config/byFlag', { val: false, flag: 'AUTO_RUN_CHECK_ORDERS' });
+        if (code === 200) {
+            notify(msg);
+            setAutoExce(false)
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        autoExce ? <Button label="toolbar.pause" onClick={pauseClick} startIcon={<PauseIcon />} /> : <></>
+    )
+}
+
+
+/**
+ * 鎷f枡鍑哄簱
+ * @returns 
+ */
+const PickButton = () => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+
+    const pickClick = async () => {
+        const { data: { code, data, msg } } = await request.post(`/task/pick/` + record.id);
+        if (code === 200) {
+            notify(msg);
+            refresh();
+        } else {
+            notify(msg);
+        }
+    }
+
+    return (
+        record?.taskStatus == 199 && record?.taskType == 103 ? <ConfirmButton label={"toolbar.pick"} startIcon={<ColorizeOutlinedIcon />} onConfirm={pickClick} /> : <></>
+    )
+}
+
+
+/**
+ * 瀹屾垚鎿嶄綔
+ * @returns 
+ */
+const DoneButton = (props) => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+    const clickComplete = () => {
+        completeTask(record)
+    };
+    //瀹屾垚浠诲姟
+    const completeTask = async (row) => {
+        const { data: { code, data, msg } } = await request.post(`task/complete/` + row.id);
+        if (code === 200) {
+            notify(msg);
+            refresh();
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        ((record?.taskStatus < 98) || (record?.taskType >= 101 && record?.taskStatus < 198)) || (record?.taskType == 11 && record?.taskStatus == 101) ? (<ConfirmButton label={"toolbar.complete"} color="secondary" startIcon={<TaskAltIcon />} onConfirm={clickComplete} />) : (<></>)
+    )
+}
+
+/**
+ * 鍙栨秷鎸夐挳
+ * @returns 
+ */
+const CancelButton = () => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+    const clickCancel = () => {
+        cancleTask(record)
+    };
+    //鍙栨秷浠诲姟
+    const cancleTask = async (row) => {
+        const { data: { code, data, msg } } = await request.post(`/task/remove/` + row.id);
+        if (code === 200) {
+            notify(msg);
+            refresh();
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        (record.taskStatus == 1 || record.taskStatus == 101) && (record.taskType == 1 || record.taskType == 101 || record.taskType == 10 || record.taskType == 107 || record.taskType == 103 || record.taskType == 11) ?
+            <ConfirmButton
+                onConfirm={clickCancel}
+                startIcon={<CancelIcon />}
+                label={"toolbar.cancel"}>
+            </ConfirmButton>
+            :
+            <></>
+    )
+}
+/**
+ *  缃《鎿嶄綔
+ * @returns 
+ */
+const SetTopButton = () => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+    const clickTop = (event) => {
+        event.stopPropagation();
+        topTask(record)
+    };
+    //缃《浠诲姟
+    const topTask = async (row) => {
+        const { data: { code, data, msg } } = await request.post(`/task/top/` + row.id);
+        if (code === 200) {
+            notify(msg);
+            refresh();
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        (record.taskStatus == 1 || record.taskStatus == 101) && (record.taskType == 1 || record.taskType == 101 || record.taskType == 10 || record.taskType == 103 || record.taskType == 11) ?
+            <Button
+                onClick={clickTop}
+                label="toolbar.top">
+                <AlignVerticalTopIcon />
+            </Button>
+            :
+            <></>
+    )
+}
+
+/**
+ * 鎵归噺鍙栨秷
+ * @returns 
+ */
+const BulkCancelButton = () => {
+    const record = useRecordContext();
+    const clickCancel = () => {
+        cancleTask([record])
+    };
+    //鍙栨秷浠诲姟
+    const cancleTask = async (row) => { }
+    return (
+        <Button
+            onClick={clickCancel}
+            label="toolbar.cancel">
+            <CancelIcon />
+        </Button>
+    )
+}
+
+/**
+ * 鎵归噺鎺掑簭
+ * @returns 
+ */
+const BulkResortButton = () => {
+    const record = useRecordContext();
+    const bulkResort = () => {
+        resortTask([record])
+    };
+    //鎵归噺鎺掑簭
+    const resortTask = async (row) => { }
+    return (
+        <Button
+            onClick={bulkResort}
+            label="toolbar.resort">
+            <SwapVertIcon />
+        </Button>
+    )
+}
diff --git a/rsf-admin/src/page/orders/preparation/MatPreparationPanel.jsx b/rsf-admin/src/page/orders/preparation/MatPreparationPanel.jsx
new file mode 100644
index 0000000..7939c3b
--- /dev/null
+++ b/rsf-admin/src/page/orders/preparation/MatPreparationPanel.jsx
@@ -0,0 +1,89 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import { Box } from '@mui/material';
+import {
+    List,
+    DatagridConfigurable,
+    useRecordContext,
+    useTranslate,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+} from 'react-admin';
+import { styled } from '@mui/material/styles';
+import PageDrawer from "../../components/PageDrawer";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 200
+    },
+}));
+
+const MatPreparationPanel = () => {
+    const record = useRecordContext();
+    const translate = useTranslate();
+    const [createDialog, setCreateDialog] = useState(false);
+    const [drawerVal, setDrawerVal] = useState(false);
+    return (
+        <>
+            <Box display="flex">
+                <List resource="preparationItem"
+                    sx={{
+                        flexGrow: 1,
+                        transition: (theme) =>
+                            theme.transitions.create(['all'], {
+                                duration: theme.transitions.duration.enteringScreen,
+                            }),
+                        marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                    }}
+                    filter={{ taskId: record.id }}
+                    // title={"menu.taskItem"}
+                    pagination={false}
+                    empty={false}
+                    actions={false}
+                >
+                    <StyledDatagrid
+                        preferenceKey='preparationItem'
+                        bulkActionButtons={false}
+                        rowClick={false}
+                        expandSingle
+                        omit={['id', 'taskId', 'createTime', 'createBy$', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']}
+                    >
+                        <NumberField source="id" />
+                        {/* <NumberField source="taskId" label="table.field.taskItem.taskId" /> */}
+                        <NumberField source="orderId" label="table.field.preparationItem.orderId" />
+                        <NumberField source="orderType$" label="table.field.preparationItem.orderType" />
+                        {/* <TextField source="sourceCode" label="table.field.taskItem.sourceCode" /> */}
+                        <NumberField source="orderItemId" label="table.field.preparationItem.orderItemId" />
+                        <NumberField source="matnrId" label="table.field.preparationItem.matnrId" />
+                        <TextField source="maktx" label="table.field.preparationItem.maktx" />
+                        <TextField source="matnrCode" label="table.field.preparationItem.matnrCode" />
+                        <TextField source="unit" label="table.field.preparationItem.unit" />
+                        <NumberField source="anfme" label="table.field.preparationItem.anfme" />
+                        <TextField source="batch" label="table.field.preparationItem.batch" />
+                        <TextField source="spec" label="table.field.preparationItem.spec" />
+                        <TextField source="model" label="table.field.preparationItem.model" />
+                        {/* <TextField source="updateBy$" label="common.field.updateBy"/>
+                        <TextField source="createBy$" label="common.field.createBy"/>
+                        <DateField source="updateTime" label="common.field.updateTime" showTime />
+                        <DateField source="createTime" label="common.field.createTime" showTime />
+                        <TextField source="memo" label="common.field.memo" sortable={false} /> */}
+                    </StyledDatagrid>
+                </List>
+            </Box>
+        </>
+    );
+};
+
+export default MatPreparationPanel;
diff --git a/rsf-admin/src/page/orders/preparation/MatPreparationPublic.jsx b/rsf-admin/src/page/orders/preparation/MatPreparationPublic.jsx
new file mode 100644
index 0000000..a1cfb21
--- /dev/null
+++ b/rsf-admin/src/page/orders/preparation/MatPreparationPublic.jsx
@@ -0,0 +1,483 @@
+import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText } from "@mui/material";
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    Button,
+    SelectColumnsButton,
+    EditButton,
+    FilterButton,
+    CreateButton,
+    ExportButton,
+    BulkDeleteButton,
+    WrapperField,
+    useRecordContext,
+    useTranslate,
+    useNotify,
+    useListContext,
+    FunctionField,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    DateTimeInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    DeleteButton,
+    SimpleForm,
+    required,
+    Form,
+    useRefresh,
+    useRedirect,
+    useRecordSelection,
+} from 'react-admin';
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_TYPE } from '@/config/setting';
+import { styled } from '@mui/material/styles';
+import { DataGrid, useGridApiContext, GridActionsCellItem, useGridApiRef } from '@mui/x-data-grid';
+import request from '@/utils/request';
+import ConfirmationNumberOutlinedIcon from '@mui/icons-material/ConfirmationNumberOutlined';
+import CloseSharpIcon from '@mui/icons-material/CloseSharp';
+import ConfirmButton from '../../components/ConfirmButton';
+import { Delete, Edit, Add } from '@mui/icons-material';
+// import OutStockSiteDialog from "./OutStockSiteDialog";
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-maktx': {
+        width: 200
+    },
+
+    mt: '60px'
+    // '& .RaBulkActionsToolbar-toolbar': {
+    //     display: 'none'
+    // }
+
+}));
+
+const MatPerparationPublic = (props) => {
+    const { record, open, setOpen, setManualDialog } = props;
+    const notify = useNotify();
+    const gridRef = useGridApiRef();
+    const [rows, setRows] = useState([]);
+    const [fetchRows, setFetchRows] = useState([]);
+    const translate = useTranslate();
+    const [rowSelectedIds, setRowSelectedIds] = useState([]);
+    const [selectedMatnr, setSelectedMatnr] = useState([]);
+    const [selectedIds, setSelectedIds] = useState([]);
+    const [formData, setFormData] = useState({ orderId: record?.id, waveId: DEFAULT_TYPE });
+    const [dialog, setDialog] = useState(false);
+    const [selectedValue, setSelectedValue] = useState({});
+
+    useEffect(() => {
+        if (selectedMatnr.length < 1) {
+            setRows(fetchRows)
+        } else {
+            const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode));
+            setRows(mas)
+        }
+    }, [selectedMatnr])
+
+
+    const ComfirmButton = () => {
+        const { selectedIds, data } = useListContext();
+        const handleRowClick = () => {
+            console.log(selectedIds);
+            
+            const ids = data.filter(item => selectedIds.includes(item.id)).map(item => item.id);
+            setRowSelectedIds(ids);
+            const mas = data.filter(item => selectedIds.includes(item.id)).map(item => item.matnrCode);
+            //璁剧疆搴撲綅淇℃伅绛涢�夋潯浠�
+            setSelectedMatnr(mas);
+        }
+
+        return (
+            <Button label="toolbar.confirm" size="medium" onClick={handleRowClick} />
+        )
+    };
+
+    const handleClickOpen = () => {
+        setDialog(true);
+    };
+
+    const handleClose = (value) => {
+        setDialog(false);
+        setSelectedValue(value);
+        if (selectedIds.length == 0) {
+            const newRows = rows.map(item => {
+                return {
+                    ...item,
+                    siteNo: value?.site
+                }
+            })
+            setRows(newRows);
+        } else {
+            const newRows = rows.map(item => {
+                return selectedIds.includes(item?.id) ? {
+                    ...item,
+                    siteNo: value?.site
+                } : item
+            })
+            setRows(newRows);
+        }
+    };
+
+    useEffect(() => {
+        getWaveRule()
+    }, [open])
+
+    const getWaveRule = async () => {
+        if (formData.waveId == null && formData.waveId == undefined) {
+            return
+        }
+        const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData });
+        if (code === 200) {
+            // setRows(data)
+            setFetchRows(data)
+        } else {
+            notify(msg);
+        }
+    }
+
+    const handleChange = (value, name) => {
+        setFormData((prevData) => ({
+            ...prevData,
+            [name]: value
+        }));
+    };
+
+
+    return (
+        <>
+            <Box>
+                <Grid sx={{ display: "flex" }} container rowSpacing={2} columnSpacing={2}>
+                    <Grid item xl={5.7} gap={2} >
+                        <Card>
+                            <Form>
+                                <ReferenceInput
+                                    source="type"
+                                    reference="waveRule"
+                                >
+                                    <AutocompleteInput
+                                        label="table.field.waveRule.type"
+                                        onChange={(e) => handleChange(e, 'waveId')}
+                                        defaultValue={15}
+                                        value={formData.type}
+                                        validate={required()}
+                                    />
+                                </ReferenceInput>
+                            </Form>
+                            <List
+                                resource="outStockItem"
+                                storeKey='outStockItem'
+                                sx={{
+                                    flexGrow: 1,
+                                    transition: (theme) =>
+                                        theme.transitions.create(['all'], {
+                                            duration: theme.transitions.duration.enteringScreen,
+                                        }),
+                                }}
+                                title={"menu.outStockItem"}
+                                empty={false}
+                                filter={{ orderId: record?.id, deleted: 0 }}
+                                sort={{ field: "create_time", order: "desc" }}
+                                actions={false}
+                                pagination={false}
+                                perPage={DEFAULT_ITEM_PAGE_SIZE}
+                            >
+                                <LinearProgress
+                                    sx={{ height: "2px", position: 'absolute', top: 0, left: 0, right: 0, }}
+                                />
+                                <StyledDatagrid
+                                    storeKey={"matPerparationPublic"}
+                                    preferenceKey='outStockItem'
+                                    bulkActionButtons={<>
+                                        <ComfirmButton />
+                                    </>}
+                                    omit={['id', 'splrName', 'qty', 'poCode',]}
+                                >
+                                    <NumberField source="id" />
+                                    <TextField source="asnCode" label="table.field.outStockItem.orderCode" />
+                                    <TextField source="poCode" label="table.field.outStockItem.poCode" />
+                                    <TextField source="matnrCode" label="table.field.outStockItem.matnrCode" />
+                                    <TextField source="maktx" label="table.field.outStockItem.maktx" />
+                                    <NumberField source="anfme" label="table.field.outStockItem.anfme" />
+                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" />
+                                    <NumberField source="qty" label="table.field.outStockItem.qty" />
+                                    <TextField source="stockUnit" label="table.field.outStockItem.stockUnit" />
+                                    <TextField source="splrName" label="table.field.outStockItem.splrName" />
+                                </StyledDatagrid>
+                            </List>
+                        </Card>
+                    </Grid>
+                    <Grid item xl={6.3} gap={2}>
+                        <Card sx={{ minHeight: 1050, height: 'calc(100% - 10px)', width: '100%' }}>
+                            <Box>
+                                <PreviewTable
+                                    rows={rows}
+                                    gridRef={gridRef}
+                                    setRows={setRows}
+                                    record={record}
+                                    formData={formData}
+                                    selectedIds={selectedIds}
+                                    setDialog={setDialog}
+                                    setSelectedIds={setSelectedIds}
+                                />
+                            </Box>
+                            <Box sx={{ textAlign: 'center' }}>
+                                <CloseButton setOpen={setOpen} />
+                                <SubmitButton selectedIds={selectedIds} setSelectedIds={setSelectedIds} gridRef={gridRef} record={record} />
+                            </Box>
+                        </Card>
+                    </Grid>
+                </Grid>
+                <Grid>
+                    <OutStockSiteDialog
+                        selectedValue={selectedValue}
+                        open={dialog}
+                        onClose={handleClose}
+                    />
+                </Grid>
+            </Box>
+        </>
+    );
+}
+
+const PreviewTable = ({ rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog, formData }) => {
+    gridRef.current = useGridApiRef();
+    const translate = useTranslate();
+
+    useEffect(() => {
+        if (selectedIds.length > 0) {
+            console.log(selectedIds);
+        }
+    }, [selectedIds])
+
+    const baseColumns = [
+        // { field: 'id', headerName: 'ID', width: 40 },
+        { field: 'locCode', headerName: '搴撲綅', width: 110 },
+        { field: 'barcode', headerName: '瀹瑰櫒', width: 120 },
+        { field: 'matnrCode', headerName: '鐗╂枡缂栫爜', width: 120 },
+        { field: 'batch', headerName: '鎵规', width: 90 },
+        { field: 'unit', headerName: '鍗曚綅', width: 60 },
+        { field: 'outQty', headerName: '鍑哄簱鏁伴噺', width: 110, },
+        {
+            field: 'anfme', headerName: '搴撳瓨鏁伴噺', width: 110,
+            renderCell: (params) => (
+                <OutStockAnfme value={params.value} />
+            )
+        },
+        {
+            field: 'siteNo',
+            headerName: '鍑哄簱鍙�',
+            width: 90,
+            type: 'singleSelect',
+            editable: true,
+            renderCell: (params) => (
+                <OutStockSiteNo value={params.value} />
+            ),
+            renderEditCell: (params) => (
+                <OutStockSite {...params} />
+            ),
+        },
+    ]
+
+    const optAction = {
+        field: 'actions',
+        type: 'actions',
+        headerName: translate('common.field.opt'),
+        with: 120,
+        getActions: (params) => [
+            <GridActionsCellItem
+                icon={<Delete />}
+                label="Delete"
+                onClick={() => handleDelete(params.row, rows, setRows)}
+            />,
+        ]
+    }
+
+    const columns = (formData.waveId == 15 || formData.waveId == 16) ? [...baseColumns] : [...baseColumns, optAction];
+
+    /**
+     * 鍒犻櫎浜嬩欢
+     * @param {*} params 
+     */
+    const handleDelete = (params, rows, setRows) => {
+        const outRows = rows.filter(row => {
+            return row.id !== params.id
+        })
+        setRows(outRows)
+    }
+
+    const OutStockAnfme = React.memo(function OutStockAnfme(props) {
+        const { value } = props;
+        return (
+            value > 0 ?
+                <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
+                    <span>{value}</span>
+                </Box>
+                :
+                <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
+                    <span style={{ color: 'red' }}>{translate('common.edit.title.insuffInventory')}</span>
+                </Box>
+        );
+    });
+
+    const OutStockSiteNo = React.memo(function OutStockSiteNo(props) {
+        const { value } = props;
+        if (!value) {
+            return null;
+        }
+        return (
+            <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
+                <span>{value}</span>
+            </Box>
+        );
+    });
+
+    const CustomToolBar = () => {
+        const selectSiteNo = () => {
+            setDialog(true)
+        }
+        return (
+            <Box sx={{
+                p: 1,
+                display: 'flex',
+                justifyContent: 'flex-end',
+                borderTop: '1px solid rgba(224, 224, 224, 1)'
+            }}>
+                <Button
+                    onClick={selectSiteNo}
+                    variant="outlined"
+                    label="toolbar.modiftySite"
+                    size="medium"
+                    sx={{ mr: 1 }} />
+            </Box>
+        );
+    }
+
+    const OutStockSite = (params) => {
+        const { id, field, siteNo, row: { staNos } } = params;
+        const apiRef = useGridApiContext();
+        const handleChange = async (event) => {
+            await apiRef.current.setEditCellValue(
+                { id, field, value: event.target.value },
+                event,
+            );
+            apiRef.current.stopCellEditMode({ id, field });
+        };
+
+        const handleClose = (event, reason) => {
+            if (reason === 'backdropClick') {
+                apiRef.current.stopCellEditMode({ id, field });
+            }
+        };
+
+        return (
+            <Select
+                value={siteNo}
+                onChange={handleChange}
+                MenuProps={{
+                    onClose: handleClose,
+                }}
+                sx={{
+                    height: '100%',
+                    '& .MuiSelect-select': {
+                        display: 'flex',
+                        alignItems: 'center',
+                        pl: 1,
+                    },
+                }}
+                autoFocus
+                fullWidth
+                open
+            >
+                {staNos.map((option) => {
+                    return (
+                        <MenuItem
+                            key={option}
+                            value={option.staNo}
+                        >
+                            <ListItemText sx={{ overflow: 'hidden' }} primary={option.staNo} />
+                        </MenuItem>
+                    );
+                })}
+            </Select >
+        )
+    }
+
+    return (
+        <DataGrid
+            storeKey={"locItemPreview"}
+            rows={rows}
+            columns={columns}
+            slots={{ toolbar: CustomToolBar }}
+            apiRef={gridRef}
+            checkboxSelection
+            disableRowSelectionOnClick
+            hideFooterPagination={true}  // 闅愯棌鍒嗛〉鎺т欢
+            hideFooter={false}
+            onRowSelectionModelChange={(ids) => {
+                setSelectedIds(ids)
+            }}
+        />
+    )
+}
+
+
+//鎻愪氦鎸夐挳
+const SubmitButton = ({ selectedIds, setSelectedIds, gridRef, record }) => {
+    const notify = useNotify();
+    const refresh = useRefresh();
+    const redirect = useRedirect();
+    const submit = async () => {
+        const items = gridRef.current?.getSortedRows();
+        const { data: { code, data, msg } } = await request.post('/outStock/generate/tasks', { items, outId: record?.id });
+        if (code == 200) {
+            refresh();
+            redirect("/task")
+        } else {
+            notify(msg);
+        }
+    }
+    return (
+        <ConfirmButton
+            label="toolbar.allComfirm"
+            variant="contained"
+            size="medium"
+            onConfirm={submit}
+        />
+    )
+}
+
+//鍏抽棴鎸夐挳
+const CloseButton = ({ setOpen }) => {
+    const close = () => {
+        setOpen(false)
+    }
+    return (
+        <Button
+            label="toolbar.close"
+            variant="outlined"
+            size="medium"
+            onClick={close}
+            startIcon={<CloseSharpIcon />}
+            sx={{ margin: '3.5em' }} />
+    )
+}
+
+export default MatPerparationPublic;
+
+
diff --git a/rsf-admin/src/page/orders/preparation/index.jsx b/rsf-admin/src/page/orders/preparation/index.jsx
new file mode 100644
index 0000000..6214961
--- /dev/null
+++ b/rsf-admin/src/page/orders/preparation/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    ListGuesser,
+    EditGuesser,
+    ShowGuesser,
+} from "react-admin";
+
+import MatPreparationList from "./MatPreparationList";
+// import TaskEdit from "./TaskEdit";
+
+export default {
+    list: MatPreparationList,
+    // edit: TaskEdit,
+    show: ShowGuesser,
+    recordRepresentation: (record) => {
+        return `${record.id}`
+    }
+};
diff --git a/rsf-admin/src/page/system/menu/MenuList.jsx b/rsf-admin/src/page/system/menu/MenuList.jsx
index ab0e3c7..5c50e52 100644
--- a/rsf-admin/src/page/system/menu/MenuList.jsx
+++ b/rsf-admin/src/page/system/menu/MenuList.jsx
@@ -127,6 +127,8 @@
     textOverflow: 'ellipsis',
     whiteSpace: 'nowrap',
     maxWidth: 600,
+    // 纭繚鎵�鏈夊崟鍏冩牸鏈夊熀鏈殑鍐呰竟璺�
+    padding: '8px 16px',
 }));
 
 const TreeTableRow = (props) => {
@@ -139,15 +141,41 @@
 
     const isOpen = openNodes[row.id] || false;
 
+    // 鏇存槑鏄剧殑閫忔槑搴︽笎鍙�
+    const getOpacity = (currentDepth) => {
+        // 绗竴绾э細100%锛岀浜岀骇锛�75%锛岀涓夌骇锛�50%锛岀鍥涚骇锛�40%
+        const opacities = [1, 0.9, 0.8, 0.7];
+        return opacities[currentDepth] || 0.4;
+    };
+
+    const opacity = getOpacity(depth);
+
     return (
         <React.Fragment>
-            <StyledTableRow hover tabIndex={-1} key={row.id}>
-                <StyledTableCell sx={{ padding: 0 }}>
-                    {row.children && (
+            <StyledTableRow 
+                hover 
+                tabIndex={-1} 
+                key={row.id}
+                sx={{
+                    opacity: depth > 0 ? opacity : 1,
+                    // 娣诲姞鑳屾櫙鑹叉笎鍙樺寮烘晥鏋�
+                    backgroundColor: depth > 0 ? `rgba(0, 0, 0, ${0.02 * (3 - depth)})` : 'inherit',
+                }}
+            >
+                <StyledTableCell sx={{ 
+                    padding: 0, 
+                    width: 60,
+                    // 杩涗竴姝ュ噺灏忕缉杩涜窛绂诲埌12px
+                    paddingLeft: depth * 4
+                }}>
+                    {row.children && row.children.length > 0 && (
                         <IconButton
                             aria-label="expand row"
                             size="small"
                             onClick={() => toggleNode(row.id)}
+                            sx={{
+                                opacity: depth > 0 ? opacity : 1,
+                            }}
                         >
                             {isOpen ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}
                         </IconButton>
@@ -164,10 +192,20 @@
                                 key={column.id}
                                 align={column.align || 'left'}
                                 style={{
-                                    paddingLeft: idx === 0 && (depth * 16 + 16),
-                                    opacity: column.id === 'icon' && .6
+                                    // 鍚嶇О鍒椾篃浣跨敤12px缂╄繘
+                                    paddingLeft: idx === 0 ? (depth * 24 + 16) : 16,
+                                    // opacity: column.id === 'icon' && .6
                                 }}
-                                onClick={() => toggleNode(row.id)}
+                                onClick={() => column.id === 'name' && toggleNode(row.id)}
+                                sx={{
+                                    opacity: column.id === 'icon' ? 0.6 : (depth > 0 ? opacity : 1),
+                                    color: depth > 0 ? `rgba(0, 0, 0, ${opacity})` : 'inherit',
+                                    fontWeight: 400,
+                                    // 浣跨敤瀛椾綋澶у皬鎴栭鑹叉潵鍖哄垎灞傜骇
+                                    fontSize: depth === 0 ? '0.95rem' : '0.9rem',
+                                    // 鎴栬�呬娇鐢ㄤ笉鍚岀殑棰滆壊
+                                    color: depth === 0 ? 'text.primary' : `rgba(0, 0, 0, ${opacity})`,
+                                }}
                             >
                                 {column.format ? column.format(value) : value}
                             </StyledTableCell>
@@ -176,18 +214,30 @@
                 })}
                 <StyledTableCell>
                     <Tooltip title="Edit">
-                        <IconButton onClick={() => onEdit(row)}>
+                        <IconButton 
+                            onClick={() => onEdit(row)}
+                            sx={{
+                                opacity: depth > 0 ? opacity : 1,
+                            }}
+                            size="small"
+                        >
                             <Edit />
                         </IconButton>
                     </Tooltip>
                     <Tooltip title="Delete">
-                        <IconButton onClick={() => onDelete(row)}>
+                        <IconButton 
+                            onClick={() => onDelete(row)}
+                            sx={{
+                                opacity: depth > 0 ? opacity : 1,
+                            }}
+                            size="small"
+                        >
                             <Delete />
                         </IconButton>
                     </Tooltip>
                 </StyledTableCell>
             </StyledTableRow>
-            {row.children && isOpen && (
+            {row.children && row.children.length > 0 && isOpen && (
                 row.children.map((child) => (
                     <TreeTableRow
                         key={child.id}
diff --git a/rsf-admin/src/page/system/role/AssignPermissions.jsx b/rsf-admin/src/page/system/role/AssignPermissions.jsx
index 7be80ae..d65fddf 100644
--- a/rsf-admin/src/page/system/role/AssignPermissions.jsx
+++ b/rsf-admin/src/page/system/role/AssignPermissions.jsx
@@ -12,15 +12,17 @@
 const DEFAULT_EXPAND_ALL = true;
 
 const AssignPermissions = (props) => {
-    const { role, originMenuIds, setDrawerVal, closeCallback } = props;
+    const { role, originMenuIds, setDrawerVal, closeCallback, authType } = props;
     const translate = useTranslate();
     const notify = useNotify();
+
+    console.log("authType"+authType)
 
     const [loading, setLoading] = useState(false);
     const [treeData, setTreeData] = useState([]);
     const [selectedItems, setSelectedItems] = useState([]);
     const [expandedItems, setExpandedItems] = useState([]);
-    const [parmas, setParmas] = useState({ condition: '' });
+    const [parmas, setParmas] = useState({ condition: '', authType: authType });
     const toggledItemRef = useRef({});
     const apiRef = useTreeViewApiRef();
 
diff --git a/rsf-admin/src/page/system/role/RoleList.jsx b/rsf-admin/src/page/system/role/RoleList.jsx
index a5432bd..1973c7d 100644
--- a/rsf-admin/src/page/system/role/RoleList.jsx
+++ b/rsf-admin/src/page/system/role/RoleList.jsx
@@ -55,7 +55,7 @@
     '& .column-name': {
     },
     '& .opt': {
-        width: 260
+        width: 450
     },
 }));
 
@@ -63,7 +63,6 @@
     <SearchInput source="condition" alwaysOn />,
     <TextInput source="name" label="table.field.role.name" />,
     <TextInput source="code" label="table.field.role.code" />,
-
     <TextInput label="common.field.memo" source="memo" />,
     <SelectInput
         label="common.field.status"
@@ -83,6 +82,8 @@
     const [drawerVal, setDrawerVal] = useState(false);
 
     const [menuIds, setMenuIds] = useState([]);
+
+    const [authType,setAuthType] = useState(0)
 
     const assign = (record) => {
         request('/role/scope/list', {
@@ -146,7 +147,9 @@
                     <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                     <WrapperField cellClassName="opt" label="common.field.opt">
-                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} />
+                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={0} setAuthType={setAuthType} label="缃戦〉鏉冮檺&nbsp;&nbsp;&nbsp;" />
+                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={1} setAuthType={setAuthType} label="PDA鏉冮檺&nbsp;&nbsp;&nbsp;" />
+                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={2} setAuthType={setAuthType} label="浠撳簱鏉冮檺&nbsp;" />
                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                     </WrapperField>
@@ -171,6 +174,7 @@
                     closeCallback={() => {
                         setMenuIds([]);
                     }}
+                    authType = {authType}
                 />
             </PageDrawer>
         </Box>
@@ -179,14 +183,15 @@
 
 const ScopeButton = (props) => {
     const record = useRecordContext();
-    const { assign, ...rest } = props;
+    const { assign, auType, setAuthType, label, ...rest } = props;    
     return (
         <Button
             variant="text"
             color="primary"
             startIcon={<AssignmentIndIcon />}
-            label="common.action.scope"
+            label={label}
             onClick={(event) => {
+                setAuthType(auType);
                 event.stopPropagation();
                 assign(record);
             }}
diff --git a/rsf-admin/src/themes/ThemeSwapper.jsx b/rsf-admin/src/themes/ThemeSwapper.jsx
index c726222..1d0707b 100644
--- a/rsf-admin/src/themes/ThemeSwapper.jsx
+++ b/rsf-admin/src/themes/ThemeSwapper.jsx
@@ -41,7 +41,7 @@
                 </IconButton>
             </Tooltip>
             {currentTheme?.dark ? <ToggleThemeButton /> : null}
-            <Menu open={open} onClose={handleClose} anchorEl={anchorEl}>
+            {/* <Menu open={open} onClose={handleClose} anchorEl={anchorEl}>
                 {themes.map((theme, index) => (
                     <MenuItem
                         onClick={event => handleChange(event, index)}
@@ -52,7 +52,7 @@
                         {ucFirst(theme.name)}
                     </MenuItem>
                 ))}
-            </Menu>
+            </Menu> */}
         </>
     );
 };
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatPreparationController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatPreparationController.java
new file mode 100644
index 0000000..09194cd
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatPreparationController.java
@@ -0,0 +1,96 @@
+package com.vincent.rsf.server.manager.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import com.vincent.rsf.server.manager.entity.WkOrder;
+import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.service.OutStockService;
+import com.vincent.rsf.server.manager.service.TaskService;
+import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+@RestController
+@Api(tags = "澶囨枡鍗�")
+public class MatPreparationController extends BaseController {
+
+    Logger logger = LoggerFactory.getLogger(OutStockController.class);
+
+    @Resource
+    private TaskService taskService;
+
+    @PostMapping("/preparation/page")
+    public R page(@RequestBody Map<String, Object> map) {
+
+//        JSONObject jsonObject = new JSONObject(map);
+//        jsonObject.put("orderCode", "BL25090927787678");
+//        jsonObject.put("orderStatus", 1);
+//        jsonObject.put("orderTime", new Date());
+//        jsonObject.put("anfme", 100);
+//        List<JSONObject> list = new ArrayList<>();
+//        list.add(jsonObject);
+//
+//        return R.ok().add(list);
+
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<Task, BaseParam> pageParam = new PageParam<>(baseParam, Task.class);
+        QueryWrapper<Task> queryWrapper = pageParam.buildWrapper(true);
+        return R.ok().add(taskService.page(pageParam, queryWrapper));
+    }
+
+//    @PreAuthorize("hasAuthority('manager:outStock:list')")
+    @PostMapping("/preparation/list")
+    public R list(@RequestBody Map<String, Object> map) {
+
+        return R.ok().add(taskService.list());
+    }
+
+
+//    @PreAuthorize("hasAuthority('manager:taskItem:list')")
+    @PostMapping("/preparationItem/page")
+    public R itemPage(@RequestBody Map<String, Object> map) {
+//        BaseParam baseParam = buildParam(map, BaseParam.class);
+//        PageParam<TaskItem, BaseParam> pageParam = new PageParam<>(baseParam, TaskItem.class);
+//        /**鎷兼帴鎵╁睍瀛楁*/
+//        PageParam<TaskItem, BaseParam> page = taskItemService.page(pageParam, pageParam.buildWrapper(true));
+//        List<TaskItem> records = page.getRecords();
+//        for (TaskItem record : records) {
+//            if (!Objects.isNull(record.getFieldsIndex())) {
+//                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+//                record.setExtendFields(fields);
+//            }
+//        }
+//        page.setRecords(records);
+
+
+        JSONObject jsonObject = new JSONObject(map);
+        jsonObject.put("matnrCode", "BL25090927787678");
+        jsonObject.put("maktx", "鎷夋潌");
+        jsonObject.put("unit", "涓�");
+        jsonObject.put("spec", "閾濆悎閲� 閾惰壊");
+        jsonObject.put("model", "澶�");
+        jsonObject.put("anfme", 100);
+        jsonObject.put("workQty", 60);
+        jsonObject.put("status", 11);
+        List<JSONObject> list = new ArrayList<>();
+        list.add(jsonObject);
+        return R.ok().add(list);
+    }
+
+}

--
Gitblit v1.9.1