From c505bec23a227d1168495e2ca469cf63bc7495ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=90=B4=E5=98=89=E7=8E=B2?=
<14091858+softwork-wjl@user.noreply.gitee.com>
Date: Sun, 29 Dec 2024 20:37:13 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=87=BA=E9=94=99=E4=BA=86=EF=BC=8C?=
=?UTF-8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...31\346\200\201\347\275\221\347\253\231.md" | 176 +++++++++++++
...76\346\216\247\345\210\266\345\231\250.md" | 128 +++++++++
...75\344\273\244\346\211\213\345\206\214.md" | 130 ++++++++++
...4\274\240\345\217\202\345\222\214model.md" | 118 +++++++++
.../20241120-\344\275\234\344\270\232.md" | 158 +++++++++++
...40\351\200\222\345\217\202\346\225\260.md" | 166 ++++++++++++
.../20241127-\350\247\206\345\233\276.md" | 194 ++++++++++++++
.../20241128-\351\232\217\346\234\272.md" | 213 +++++++++++++++
...62\346\237\223\347\224\273\351\235\242.md" | Bin 0 -> 5842 bytes
.../20241204-\345\242\236\346\224\271linq.md" | Bin 0 -> 4330 bytes
.../20241205-\345\210\240\351\231\244.md" | 79 ++++++
...45\346\225\260\346\215\256\345\272\223.md" | 70 +++++
.../20241212-linq29.md" | 245 ++++++++++++++++++
...46\347\224\237\344\277\241\346\201\257.md" | 91 +++++++
...05\345\255\246\347\224\237\350\241\250.md" | 47 ++++
...5\347\237\245\350\257\206\347\202\2712.md" | 14 +
.../20241226-\347\254\224\350\256\260.md" | 1 +
.../\345\233\276\347\211\207/CRUD.png" | Bin 0 -> 37737 bytes
.../crue\345\242\236.png" | Bin 0 -> 155779 bytes
.../\345\233\276\347\211\207/image.png" | Bin 0 -> 22285 bytes
.../20240925\346\237\261\347\212\266.html" | 21 ++
.../20240925\346\237\261\347\212\2661.html" | 63 +++++
...\346\234\200\345\260\217\345\200\274.html" | 56 ++++
...\351\207\217\345\243\260\346\230\216.html" | 52 ++++
...\346\217\220\346\254\276\346\234\272.html" | 67 +++++
...\346\210\267\344\277\241\346\201\257.html" | 20 ++
.../20240908js\345\237\272\347\241\200.md" | 25 ++
...27\347\254\246\350\257\255\345\217\245.md" | 222 ++++++++++++++++
...13\345\255\220\346\225\260\347\273\204.md" | 116 +++++++++
...75\346\225\260\346\226\271\346\263\225.md" | 110 ++++++++
...50\345\237\237\345\257\271\350\261\241.md" | 212 +++++++++++++++
...60\346\215\256\347\261\273\345\236\213.md" | 94 +++++++
.../image.png" | Bin 0 -> 396953 bytes
33 files changed, 2888 insertions(+)
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241108-\351\203\250\347\275\262\351\235\231\346\200\201\347\275\221\347\253\231.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241111-\345\210\233\345\273\272\350\247\206\345\233\276\346\216\247\345\210\266\345\231\250.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241114-Linux\345\270\270\350\247\201\345\221\275\344\273\244\346\211\213\345\206\214.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241202-\345\242\236\345\210\240\346\224\271\346\270\262\346\237\223\347\224\273\351\235\242.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241204-\345\242\236\346\224\271linq.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241205-\345\210\240\351\231\244.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241209-\351\223\276\346\216\245\346\225\260\346\215\256\345\272\223.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241212-linq29.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241216-\347\261\273\344\274\274\345\255\246\347\224\237\344\277\241\346\201\257.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241223-\347\237\245\350\257\206\350\241\245\345\205\205\345\255\246\347\224\237\350\241\250.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241225-\350\241\245\345\205\205\347\237\245\350\257\206\347\202\2712.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/20241226-\347\254\224\350\256\260.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/crue\345\242\236.png"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/image.png"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/20240925\346\237\261\347\212\266.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/20240925\346\237\261\347\212\2661.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/20240927\344\275\234\344\270\232\346\234\200\345\244\247\345\200\274\346\234\200\345\260\217\345\200\274.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/2024912\345\217\230\351\207\217\345\243\260\346\230\216.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/\346\217\220\346\254\276\346\234\272.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\344\275\234\344\270\232\344\273\243\347\240\201/\347\224\250\346\210\267\344\277\241\346\201\257.html"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/20240908js\345\237\272\347\241\200.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/20240921\350\277\220\347\256\227\347\254\246\350\257\255\345\217\245.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/20240925for\344\276\213\345\255\220\346\225\260\347\273\204.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/20240927\347\254\224\350\256\260\345\207\275\346\225\260\346\226\271\346\263\225.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/20240929\344\275\234\347\224\250\345\237\237\345\257\271\350\261\241.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/2024912js\345\243\260\346\230\216\345\217\230\351\207\217\345\222\214\345\270\270\351\207\217\350\277\230\346\234\211\346\225\260\346\215\256\347\261\273\345\236\213.md"
create mode 100644 "\345\220\264\345\230\211\347\216\262/\350\257\276\345\240\202\347\254\224\350\256\260/image.png"
diff --git "a/\345\220\264\345\230\211\347\216\262/20241108-\351\203\250\347\275\262\351\235\231\346\200\201\347\275\221\347\253\231.md" "b/\345\220\264\345\230\211\347\216\262/20241108-\351\203\250\347\275\262\351\235\231\346\200\201\347\275\221\347\253\231.md"
new file mode 100644
index 0000000..5319136
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241108-\351\203\250\347\275\262\351\235\231\346\200\201\347\275\221\347\253\231.md"
@@ -0,0 +1,176 @@
+## 第一步如何安装nginx:命令如下
+```
+yum install -y nginx
+```
+
+## 第二步:设置nginx开机启动和nginx现在启动,命令如下:
+```
+systemctl enable nginx
+
+systemctl start nginx
+```
+
+## 第三步、查看nginx情况,命令如下:
+```
+systemctl status nginx
+```
+
+## 第四步、在/var/下创建www文件夹,并在www文件夹下创建以域名为名称的文件夹,由于我的域名是9ihub.com,所以,创建的文件夹名称就为9ihub.com,命令分别如下:
+```
+mkdir /var/www
+
+cd /var/www
+
+mkdir 9ihub.com
+
+cd 9ihub.com
+```
+....具体看:(https://gitee.com/myhfw003/how-to-build-a-static-website#%E7%AC%AC%E4%B8%89%E6%AD%A5%E6%9F%A5%E7%9C%8Bnginx%E6%83%85%E5%86%B5%E5%91%BD%E4%BB%A4%E5%A6%82%E4%B8%8B)
+
+### 1. 连接到远程服务器
+
+#### 检查网络连接
+
+在尝试SSH连接之前,确保你的本地机器可以与远程服务器通信。你可以使用`ping`命令来测试网络连通性:
+
+bash
+
+```bash
+ping 远程主机地址
+```
+
+- **远程主机地址**:可以是IP地址或域名。
+
+如果`ping`命令成功,你将看到回应信息,这表明网络连接是正常的。如果`ping`失败,可能存在网络问题,需要进一步排查。
+
+#### 检查安全组设置
+
+如果你使用的是云服务或虚拟私有服务器(VPS),确保安全组(Security Groups)或防火墙规则允许从你的IP地址到远程服务器的22端口(SSH默认端口)的流量。这通常可以在云服务提供商的管理控制台中设置。
+
+#### 开始连接服务器
+
+在使用SSH连接到远程服务器时,你需要提供用户名和主机地址。以下是SSH连接的基本格式:
+
+```bash
+ssh 用户名@主机地址
+```
+
+- **用户名**:这是你在远程服务器上的账户名称。
+- **主机地址**:这是远程服务器的IP地址或者域名。
+
+例如,如果你的用户名是`root`,服务器的IP地址是`192.168.1.1`,你可以使用以下命令连接:
+
+```bash
+ssh root@192.168.1.1
+```
+
+如果你使用的是域名,比如`example.com`,命令会是这样的:
+
+```bash
+ssh root@example.com
+```
+
+**提示**:为了安全起见,建议使用密钥认证代替密码认证,这样可以避免在登录时输入密码。
+
+### 2. 更新软件源
+
+在Debian或Ubuntu系统上,你可以使用以下命令更新软件源并升级所有软件包:
+
+```bash
+sudo apt update
+sudo apt upgrade -y
+```
+
+- `sudo`:以超级用户权限运行命令。
+- `apt update`:更新本地软件包索引。
+- `apt upgrade -y`:升级所有可升级的软件包,`-y`参数表示自动回答“yes”。
+
+### 3. 安装Nginx
+
+使用以下命令安装Nginx:
+
+```bash
+sudo apt install -y nginx
+```
+
+- `sudo`:以超级用户权限运行命令。
+- `apt install`:安装软件包。
+- `-y`:自动回答“yes”以安装软件。
+
+### 4. 创建网站目录
+
+首先,切换到根目录并列出当前目录内容,然后创建一个新的网站目录:
+
+```bash
+cd /
+ls
+cd /var/www/
+sudo mkdir www.example.com
+```
+
+- `cd /`:切换到根目录。
+- `ls`:列出当前目录的文件和文件夹。
+- `cd /var/www/`:切换到网站文件通常存放的目录。
+- `sudo mkdir www.example.com`:创建一个新的目录,用于存放你的网站文件。
+
+### 5. 上传静态页面
+
+使用SCP命令将本地文件上传到远程服务器。如果路径中包含空格,请确保使用引号将路径括起来:
+
+```bash
+scp "你的本地文件路径" 用户名@主机地址:"/var/www/www.example.com/"
+```
+
+- `scp`:安全复制命令,用于在本地和远程服务器之间传输文件。
+- `"你的本地文件路径"`:替换为你的本地文件或目录的路径。
+- `用户名@主机地址`:替换为你的用户名和主机地址。
+- `"/var/www/www.example.com/"`:远程服务器上的目标路径。
+
+**提示**:如果你有多个文件或目录需要上传,可以考虑使用`rsync`命令,它提供了更多的选项和更好的性能。
+
+### 6. 编写Nginx配置文件
+
+切换到Nginx配置文件目录,并创建一个新的配置文件:
+
+```bash
+cd /etc/nginx/conf.d/
+sudo vim www.example.com.conf
+```
+
+- `cd /etc/nginx/conf.d/`:切换到Nginx配置文件所在的目录。
+- `sudo vim www.example.com`:使用`vim`编辑器创建一个新的配置文件。
+
+在配置文件中,输入以下内容:
+
+```nginx
+server {
+ listen 80;
+ server_name www.example.com;
+
+ location / {
+ root /var/www/www.example.com;
+ index index.html;
+ }
+}
+```
+
+- `listen 80;`:监听80端口,这是HTTP的默认端口。
+- `server_name www.example.com;`:指定服务器块的域名。
+- `location /`:定义请求的location块,用于处理对网站根目录的请求。
+- `root /var/www/www.example.com;`:指定网站文件的根目录。
+- `index index.html;`:指定默认的索引文件。
+
+保存并退出vim编辑器(输入`:wq`)。
+
+**提示**:在进行配置更改后,始终检查配置文件的语法是否正确,可以使用`sudo nginx -t`命令来测试配置文件。
+
+### 7. 重载Nginx配置
+
+使用以下命令重载Nginx配置,使更改生效:
+
+```bash
+sudo nginx -s reload
+```
+
+- `sudo`:以超级用户权限运行命令。
+- `nginx -s reload`:重载Nginx配置文件。
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241111-\345\210\233\345\273\272\350\247\206\345\233\276\346\216\247\345\210\266\345\231\250.md" "b/\345\220\264\345\230\211\347\216\262/20241111-\345\210\233\345\273\272\350\247\206\345\233\276\346\216\247\345\210\266\345\231\250.md"
new file mode 100644
index 0000000..25a6f4a
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241111-\345\210\233\345\273\272\350\247\206\345\233\276\346\216\247\345\210\266\345\231\250.md"
@@ -0,0 +1,128 @@
+# 创建新的控制器、文件夹和视图文件
+
+## 1. 创建新控制器
+
++ 控制器用于处理用户请求并返回视图或数据。每个控制器类通常位于 `Controllers` 文件夹中,继承自 `Controller` 类。
+
++ 控制器的命名规则通常是:**控制器名称 + Controller**,例如:`HomeController`、`ProductController`。
+
++ 下面用`HomeController`举例子
+
+### 示例代码:
+
+```csharp
+using Microsoft.AspNetCore.Mvc; // 记得引用 Microsoft.AspNetCore.Mvc 命名空间
+
+namespace MyFirstMvc.Controllers
+{
+ public class HomeController : Controller // 继承自 Controller 基类
+ {
+ public IActionResult Index()
+ {
+ return View(); // 返回 Index 视图
+ }
+
+ public IActionResult About()
+ {
+ return View(); // 返回 About 视图
+ }
+ }
+}
+```
+
+### 解释:
+
++ **HomeController**:这是新创建的控制器类,继承自 `Controller` 类。记得在文件顶部引用 `Microsoft.AspNetCore.Mvc` 命名空间,否则无法使用 `Controller` 类。
++ **Index** 和 **About** 方法:这两个方法是控制器的动作(Action),分别用于响应 `/Home/Index` 和 `/Home/About` 请求。
++ **return View();**:表示返回视图,默认查找名为 `Index.cshtml` 和 `About.cshtml` 的视图。
+
+## 2. 创建视图文件夹和视图文件
+
++ 视图是用户最终看到的页面。通常情况下,视图文件存放在 `Views` 文件夹中,按照控制器名称组织。
+
+### 步骤:
+
+1. 在 `Views` 文件夹中创建一个新的文件夹,命名为与控制器名称相同的名字(例如:`Home`)。
+2. 在 `Views/Home` 文件夹中,创建与控制器方法同名的视图文件(例如:`Index.cshtml` 和 `About.cshtml`)。
+
+### 示例文件夹和文件结构:
+
++ MyFirstMvc
+ + Controllers
+ + HomeController.cs
+
+ + Views
+ + Home
+ + Index.cshtml
+ + About.cshtml
+
+
+### 视图文件示例:
+
+#### `Views/Home/Index.cshtml` 文件内容:
+
+```html
+@{
+ Layout = "_Layout"; // 使用布局视图
+}
+
+
欢迎来到 HomeController 的 Index 页面
+这是 HomeController 中的 Index 方法返回的视图。
+```
+
+#### `Views/Home/About.cshtml` 文件内容:
+
+```html
+@{
+ Layout = "_Layout"; // 使用布局视图
+}
+
+关于页面
+这是 HomeController 中的 About 方法返回的视图。
+```
+
+### 解释:
+
+- **`@{ Layout = "_Layout"; }`**:这行代码表示当前视图使用 `Views/Shared/_Layout.cshtml` 作为布局视图,布局文件通常用于放置网站的头部、导航和底部等共享部分。
+- **视图内容**:每个视图文件显示与控制器方法对应的内容。在 `Index.cshtml` 中,显示的是 `Index` 页面的内容;在 `About.cshtml` 中,显示的是 `About` 页面的内容。
+
+## 3. 配置控制器和视图之间的连接
+
+### 步骤:
+
+1. 在控制器方法中使用 `return View();` 返回视图。
+2. 如果视图文件夹和文件名与控制器和方法名称一致,MVC 会自动找到相应的视图文件。
+
+例如,在 `HomeController` 中:
+
+```csharp
+public IActionResult Index()
+{
+ return View(); // 自动查找 Views/Home/Index.cshtml
+}
+
+public IActionResult About()
+{
+ return View(); // 自动查找 Views/Home/About.cshtml
+}
+```
+
+### 解释:
+
+- **`return View();`**:在没有显式指定视图名称的情况下,ASP.NET Core MVC 会自动查找与当前控制器方法同名的视图文件。
+ - `Index` 方法会查找 `Views/Home/Index.cshtml`。
+ - `About` 方法会查找 `Views/Home/About.cshtml`。
+
+## 4. 运行项目并测试
+
+在创建好控制器和视图之后,可以运行项目并通过浏览器访问新创建的页面。
+
+- 访问 `/Home/Index` 应该会显示 `Views/Home/Index.cshtml` 的内容。
+- 访问 `/Home/About` 应该会显示 `Views/Home/About.cshtml` 的内容。
+
+## 5. 总结
+
+- **控制器**:处理请求并返回视图。控制器的文件通常放在 `Controllers` 文件夹中。就像是网站的“导游”,它会根据用户的需求指引你到正确的页面。
+- **视图**:展示给用户的页面。视图文件放在 `Views` 文件夹中,并按照控制器名称组织。就像是展示给用户的网页内容,是你在浏览器中看到的部分。
+- **文件命名约定**:控制器文件以 `Controller` 结尾,视图文件与控制器方法同名。就像是给控制器和视图起名字的规范,帮助系统知道哪个控制器和哪些视图是相对应的。
+- **布局视图**:可以使用 `_Layout.cshtml` 来定义网站的公共布局部分(如头部、导航、底部等)。就像是网页的“模板”,确保每个页面都有相同的头部、导航和底部,让网站看起来一致而不重复。
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241114-Linux\345\270\270\350\247\201\345\221\275\344\273\244\346\211\213\345\206\214.md" "b/\345\220\264\345\230\211\347\216\262/20241114-Linux\345\270\270\350\247\201\345\221\275\344\273\244\346\211\213\345\206\214.md"
new file mode 100644
index 0000000..1621bb9
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241114-Linux\345\270\270\350\247\201\345\221\275\344\273\244\346\211\213\345\206\214.md"
@@ -0,0 +1,130 @@
+# Linux常见命令速查手册
+注意:以下命令的实验环境均基于Debian12,但除了Debian独有命令apt外,大部分命令都是通用的
+
+## 一、如何登录服务器
+登录服务器命令:ssh root@XXX.XXX 第一次登录会底部要不要接受:输入yes,然后回车 输入密码,输入密码过程,没有任何显示,是正常的现象,只管理密码,然后回车就可以了
+
+## 二、部署静态网站的核心科技
+网页所放位置在如下路径:/var/www/XXX.XXX/index.html
+
+nginx配置文件所放的位置在如下路径:/etc/nginx/conf.d/XXX.XXX.conf
+
+测试nginx的配置文件有无语法错误,命令如下:nginx -t 如果返回类似ok successful之类的提示,则表明没有语法错误,反之,需要排查语法
+
+强制nginx重新加载配置文件命令:nginx -s reload
+
+
+## 三、命令速查
+1. ls
++ **作用**:列出指定目录下的内容(文件或文件夹),如果没有指定目录,则显示当前目录下内容
++ **语法**:ls 目录
++ **常用选项**:a,列出所有的内容;l,以列表形式展示内容
++ **常用命令的形式**:ls -al
++ **常用命令的作用**:列出当前目录下所有的内容,包括隐藏的文件和文件夹,并且以列表形式展示,如下所示:
+```
+root@soft:~# ls -al
+total 60
+drwx------ 7 root root 4096 Nov 8 09:06 .
+drwxr-xr-x 18 root root 4096 Nov 7 13:16 ..
+-rw------- 1 root root 1377 Nov 8 11:50 .bash_history
+-rw-r--r-- 1 root root 743 Nov 7 16:41 .bashrc
+drwx------ 5 root root 4096 Nov 8 09:19 .config
+drwxr-xr-x 5 root root 4096 Nov 7 16:53 .npm
+drwxr-xr-x 8 root root 4096 Nov 7 16:44 .nvm
+-rw-r--r-- 1 root root 316 Nov 7 11:42 .profile
+drwx------ 2 root root 4096 Nov 7 11:42 .ssh
+-rw------- 1 root root 10402 Nov 7 15:54 .viminfo
+-rw-r--r-- 1 root root 172 Nov 7 16:41 .zshrc
+-rw-r--r-- 1 root root 350 Nov 8 09:06 init_debian.sh
+drwxr-xr-x 6 root root 4096 Nov 7 16:45 sprite-cow
+```
+2. cd
++ **作用**:切换当前目录到指定目录(当前目录也叫工作目录)
++ ****语法:cd 目录(可以是相对路径、绝对路径)
++ **常用选项**:无
++ **常用命令的形式**:cd
++ **常用命令的作用**:直接回到家目录(root用户登录,就是root用户的家目录)
+3. mkdir
++ **作用**:创建文件夹
++ **语法**:mkdir 要创建的目录所在路径/要创建的目录名称
++ **常用选项**:
++ **常用命令的形式**:mkdir XXX
++ **常用命令的作用**:在当前目录中创建名为XXX的文件夹
+4. rm
++ **作用**:删除文件夹或者目录,默认情况下,只能删除空目录
++ **语法**:rm XXX
++ **常用选项**:r 递归删除其下所有的内容;f 强制删除(慎用!!!)
++ **常用命令的形式**:rm XXX
++ **常用命令的作用**:删除当前目录下名为XXX的文件
+5. vim
++ **作用**:编辑文件
++ **语法**:vim XXX
++ **常用选项**:无
++ **常用命令的形式**:
++ **常用命令的作用**:
+ + vim几个模式:命令模式、编辑模式(插入模式)、线性命令模式
+ 几个模式之间的切换:
+ + vim刚进入是命令模式,按字母i进入编辑模式,此时可以输入内容;
+ + 按Esc键回到命令模式,此时可以输入:wq保存退出,或者:q不保存退出,后面加!表示强制,如:wq!表示强制保存退出,:q!表示不保存退出
+ + 线性命令模式是较高级的用法,此处不作介绍
+6. scp
++ **作用**:用于传输内容到指定服务器
++ **语法**:scp 文件 账号@服务器地址(ip或域名都可以):/xxx/xxx
++ **常用选项**:r 递归传输目录下所有的内容;
++ **常用命令的形式**:scp ./xxx.xx root@9ihub.com:/var/www
++ **常用命令的作用**:传输当前目录下的xxx.xx文件到9ihub.com所对应服务器下的/var/www目录中,并且是以root用法登录
+7. cp
++ **作用**:复制文件或文件夹
++ **语法**:cp 源文件 目标目录
++ **常用选项**:r 递归传输目录下所有的内容
++ **常用命令的形式**:
++ **常用命令的作用**:
+8. mv
++ **作用**:移动文件或文件夹
++ **语法**:
++ **常用选项**:
++ **常用命令的形式**:mv abc.xyz abc.xyz.conf
++ **常用命令的作用**:将当前目录下的abc.xyz文件移动为abc.xyz.conf,实际效果为重命名
+
+
+### 执行 .NET SDK 命令。
+
++ sdk-options:
+```
+ | -d|--diagnostics | 启用诊断输出。
+ |-h|--help | 显示命令行帮助。
+ |--info | 显示 .NET 信息。
+ |--list-runtimes |显示安装的运行时。
+ |--list-sdks |显示安装的 SDK。
+ |--version |显示使用中的 .NET SDK 版本。
+```
+### SDK 命令:
+ + add 将包或引用添加到 .NET 项目。
+ + build 生成 .NET 项目。
+ + build-server 与由生成版本启动的服务器进行交互。
+ + clean 清理 .NET 项目的生成输出。
+ + format 将样式首选项应用到项目或解决方案。
+ + help 显示命令行帮助。
+ + list 列出 .NET 项目的项目引用。
+ + msbuild 运行 Microsoft 生成引擎(MSBuild)命令。
+ + new 创建新的 .NET 项目或文件。
+ + nuget 提供其他 NuGet 命令。
+ + pack 创建 NuGet 包。
+ + publish 发布 .NET 项目进行部署。
+ + remove 从 .NET 项目中删除包或引用。
+ + restore 还原 .NET 项目中指定的依赖项。
+ + run 生成并运行 .NET 项目输出。
+ + sdk 管理 .NET SDK 安装。
+ + sln 修改 Visual Studio 解决方案文件。
+ + store 在运行时包存储中存储指定的程序集。
+ + test 使用 .NET 项目中指定的测试运行程序运行单元测试。
+ + tool 安装或管理扩展 .NET 体验的工具。
+ + vstest 运行 Microsoft 测试引擎(VSTest)命令。
+ + workload 管理可选工作负荷。
+
+### 捆绑工具中的其他命令:
+ + dev-certs 创建和管理开发证书。
+ + fsi 启动 F# 交互/执行 F# 脚本。
+ + user-jwts 在开发中管理 JSON Web 令牌。
+ + user-secrets 管理开发用户密码。
+ + watch 启动文件观察程序,它会在文件发生更改时运行命令。
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md" "b/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md"
new file mode 100644
index 0000000..8b41f52
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md"
@@ -0,0 +1,118 @@
+# 笔记
+```
+//引入命名空间(但是在引入之间,如果不是sdk自带的包的话,需要先安装依赖包)
+using Microsoft.AspNetCore.Mvc;
+using System;
+
+// 新版的命名空间形式
+namespace Blog.Controllers;
+
+//控制器(本质其实就是1个类型,通过继承Contro1ler这个类型来获得所有关于控制器的功能)
+public class BlogsController : Controller{
+ // 专业名称叫action,本质上其实就是一个方法(方法三要素:方法名称、参数、返回值)
+ public string Index(){
+ var id = 18;
+ return id.ToString();
+ }
+
+ public string Create(){
+ var rnd = new Random();
+ return rnd.Next().Tostring();//需要将int类型显式转换为字符串
+ }
+}
+```
+## 控制器
+* 控制器:本质其实就是 一个类型,通过继承Controller这个类型来获取所有关于控制器的功能
+ * 模型绑定- 如何给方法传递参数
+ * Restful
+ * get
+ * get /blogs
+ * 获取很多博客文章列表
+ * get /blogs/18
+ * 获取指定id为18的博客文章
+ * post post /blogs
+ * 新增一篇博者文章,内容在body
+ * put put /blogs/1
+ * 修改id为1的博客,内容在在body
+ * delete delete /blogs/2
+ * 删除id为2的博客
+ * products
+ * get /products
+ * 获取商品列表
+ * get /products/33
+ * 获取id为33的商品信息
+ * post /products
+ * 新路1个商品,商品信息在body中
+ * put /products/99
+ * 修改id为99的商品,修改信息在body中
+ * delete /products/18
+ * 删除id为18的商品
+ * books
+ * get /books/13/comments
+ * 获取id为13的那本书的评论列表
+ * post /books/13/comments
+ * 给id为13的那本书,新增一条评论
+ * put /books/13/comments/99
+ * 修改id为13的那本书的评论
+ * xdelete /books/13/comments/39
+ * 删除id13的那本书下,id为39的评论
+
+### 传参
+
+1. 第一步先定义字段
+ + 在Model中创StudentsCreateDto.cs
+ + 内容:
+ ```
+ namespace Blog.Models;
+ //第一步先定义字段
+ Public class StudentsCreateDto{
+ Public string StudentName{get;set;}=null!;
+ Public string Age{get;set;}=null!;
+ Public string Height{get;set;}=null!;
+ }
+ ```
+
+2. 之后在控制器创建BlogsController.cs
+ + 内容:
+ ```
+ Using Microsoft.AspNetCCore.Mvc;
+ Using Blog.Medols;
+ namespace Blog.Controllers;
+
+ Public class BlogsController : Controller{
+ Public IActionResult List(){
+ return RedirectToAction("index");
+ }
+ }
+ ```
+2.1 //使用字段(第二步)
+```
+Public dynamic Index(){//序列化反序列化
+var obj = new StudentsCreateDto{
+ StudentName = "小米",
+ Age = "18",
+ Height = "188"
+};
+return View(obj);
+}
+```
+
+3. 在View 创Blogs文件夹+index
++ 内容:(str是自己命名,注意分号;StudentName是Model里面定义的字段名 )
+```
+@{
+ var str="文字";
+ @ str;
+
+ @str
//文字会变一级标题
+ @Model.StudentName //调用的是Model的名字字段
+
+ //如果是多组用foreach遍历
+ @foreach(var item in @Model){
+ @item.StudentName
+
+ }
+}
+```
+
+
diff --git "a/\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md" "b/\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md"
new file mode 100644
index 0000000..ab23235
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md"
@@ -0,0 +1,158 @@
+# Linux
+1. 尝试使用以下几种方式分别登录服务器,说明它们分别的注意事项,并说明它们之间的区别:
++ ssh客户端;
++ tabby应用;
++ xShell;
++ putty;
+```
+ 平台支持:SSH客户端通常是跨平台的,而Xshell和PuTTY最初是为Windows设计的,尽管PuTTY也有Unix版本。
+ 用户界面:Tabby和Xshell提供了图形用户界面,适合不喜欢命令行的用户;SSH客户端和PuTTY既可以使用命令行也可以使用图形界面。
+ 功能丰富性:Tabby作为一个终端模拟器,功能更加丰富,支持多种协议和配置;而Xshell和PuTTY更专注于SSH连接。
+ 安全性:所有工具都支持SSH加密连接,但密钥管理的便捷性和安全性可能有所不同,特别是图形界面工具可能更易于配置但需要更注意密钥的保护。
+ ```
+2. 命令:apt update,并了解这一步的实际用处和意义
+
+ apt update 是维护Linux系统安全性和最新性的重要步骤,它确保了系统在安装、升级或移除软件包时能够基于最新的信息进行操作
+ ```
+同步软件包列表:
+apt update 命令会从配置的软件源(通常是APT软件仓库)下载最新的软件包列表。这些列表包含了可用软件包的版本信息、依赖关系和其他元数据。
+
+检查更新:
+通过同步最新的软件包列表,系统可以知道哪些软件包有可用的更新。这对于确保系统和软件的安全至关重要,因为软件更新通常包括安全修复。
+
+准备安装、升级和移除操作:
+在执行 apt install、apt upgrade 或 apt remove 等命令之前,通常需要先运行 apt update 来确保系统有最新的软件包信息。这样,当执行这些操作时,系统会基于最新的信息来安装、升级或移除软件包。
+
+提高效率:
+apt update 命令会缓存更新的软件包列表,这样在短期内再次执行 apt update 时,不需要重新下载整个列表,从而提高了操作的效率。
+
+避免安装过时的软件包:
+如果不定期更新软件包列表,可能会安装已经发布更新版本的过时软件包,这可能会导致安全漏洞或兼容性问题。
+
+命令执行过程:
+当执行 apt update 时,APT会:
+
+读取 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d/ 目录下的 .list 文件,这些文件定义了软件源。
+从这些软件源下载最新的软件包列表。
+更新本地的软件包索引文件,这些文件通常位于 /var/lib/apt/lists/ 目录下。
+ ```
+
+
+3. 命令:apt upgrade -y,并了解这一步的实际用处意义
+```
+1. 安装软件包更新
+2. 自动解决依赖关系
+3. 提高系统安全性
+4. 修复已知问题
+5. 自动统一安装
+apt upgrade -y 是一个强大的命令,用于自动化地更新系统中的所有软件包,提高系统的安全性和稳定性。然而,它也需要用户注意备份数据、监控更新过程,并确保网络连接的稳定性
+```
+
+# mvc
+1.
+```
+项目名称通常与项目文件的名称相匹配。例如,如果你的项目名为 T4,那么项目文件通常命名为 T4.csproj
+```
+2. 创建一个控制项目,项目名称Blog
+```
+ dotnet new console -n 'Blog'
+```
+3. 创建一个控制台项目,输出到Blog目录
+```
+mkdir Blog
+cd Blog
+dotnet new console
+```
+4. 创建一个MVC项目,指定项目名称
+```
+dotnet new mvc -n Blog
+```
+5. 创建一个MVC项目,指定输出目录
+```
+dotnet new mvc -n Blog
+cd Blog
+dotnet new mvc
+```
+6. 创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目”
+```
+dotnet new sln -o 'sln'
+dotnet new mvc -n 'Blog'
+
+dotnet new classlib -n Xiangmu1
+dotnet new classlib -n Xiangmu2
+dotnet new classlib -n Xiangmu3
+```
+7. 创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图
+```
+1. 在MVC项目中,打开Controllers文件夹中的HomeController.cs文件。
+2. 添加一个新的Action方法Ok:
+public IActionResult Ok()
+{
+ return View();
+}
+3. 创建视图文件,在Views/Home目录下创建一个名为Ok.cshtml的文件,并添加以下内容:
+Ok
+This is the Ok view.
+```
+8. 创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视`图显示“神级预判”
+```
+1.右键单击Controllers文件夹,选择“添加” > “控制器”。
+2.选择“MVC控制器 - 空”。
+3.输入控制器名称“BlogsController”,然后点击“添加”。
+4.在BlogsController.cs中添加Index方法:
+using Microsoft.AspNetCore.Mvc;
+
+namespace MyMvcProject.Controllers
+{
+ public class BlogsController : Controller
+ {
+ public IActionResult Index()
+ {
+ return View();
+ }
+ }
+}
+5. 创建视图文件,在Views/Blogs目录下创建一个名为Index.cshtml的文件,并添加以下内容:
+神级预判
+```
+
+9. 给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野”
+```
+1.在BlogsController.cs中添加一个新的List方法:
+public IActionResult List()
+{
+ return View();
+}
+2.创建视图文件,在Views/Blogs目录下创建一个名为List.cshtml的文件,并添加以下内容:
+CRUD Interface
+This is a classic CRUD interface.
+```
+10. 给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面
+```
+右键单击Controllers文件夹,选择“添加” > “控制器”。
+选择“MVC控制器 - 空”。
+输入控制器名称“ProductsController”,然后点击“添加”。
+在ProductsController.cs中添加Edit方法:
+using Microsoft.AspNetCore.Mvc;
+
+namespace MyMvcProject.Controllers
+{
+ public class ProductsController : Controller
+ {
+ public IActionResult Edit(int id)
+ {
+ ViewData["Message"] = "Edit this product: " + id;
+ return View();
+ }
+ }
+}
+创建视图文件,在Views/Products目录下创建一个名为Edit.cshtml的文件,并添加以下内容:
+Edit Product
+@ViewData["Message"]
+```
+11. 新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id
+
+12. 在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性
+
+
+
diff --git "a/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md" "b/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md"
new file mode 100644
index 0000000..fdf1bef
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md"
@@ -0,0 +1,166 @@
+# 专项练习-控制器传参
+1. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名
+```
+public class BlogsController : Controller
+{
+ // GET: Blog/Index/5
+ public ActionResult Index(int id)
+ {
+ // 你的逻辑代码
+ return View();
+ }
+}
+```
+2. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名
+```
+public class BlogsController : Controller
+{
+ // GET: Blog/Index_2/someId
+ public ActionResult Index_2(string id)
+ {
+ // 你的逻辑代码
+ return View();
+ }
+}
+```
+3. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名
+```
+public class BlogsController : Controller
+{
+ // GET: Blog/Index_3/JohnDoe
+ public ActionResult Index_3(string name)
+ {
+ // 你的逻辑代码
+ return View();
+ }
+}
+```
+4. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名
+
+ + PS BlogCreateDto类型具有Title、Author、Content自动属性
+ 1. 定义BlogsCreateDto类:
+ ```
+ public class BlogCreateDto
+ {
+ public string Title { get; set; }
+ public string Author { get; set; }
+ public string Content { get; set; }
+ }
+ ```
+ 2. 你可以在 Blog 控制器中定义 Create Action 方法:
+ ```
+ public class BlogController : Controller
+ {
+ [HttpPost] // 通常用于处理POST请求
+ public ActionResult Create(BlogCreateDto blogCreateDto)
+ {
+ if (ModelState.IsValid)
+ {
+ // 你的逻辑代码,例如保存blogCreateDto到数据库
+
+ // 操作成功后,重定向到另一个Action或返回视图
+ return RedirectToAction("Success");
+ }
+
+ // 如果模型无效,返回带有错误信息的视图
+ return View(blogCreateDto);
+ }
+ }
+ ```
+5. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名
+
+ + PS Products类型具有Name、 Price、Stock自动属性
+ 1. 定义Products类
+ ```
+ public class Products
+ {
+ public string Name { get; set; }
+ public decimal Price { get; set; }
+ public int Stock { get; set; }
+ }
+ ```
+
+ 2. 在 Blog 控制器中定义 Create_1 Action 方法:
+ ```
+ public class BlogController : Controller
+ {
+ [HttpPost] // 通常用于处理POST请求
+ public ActionResult Create_1(Products productCreateDto)
+ {
+ if (ModelState.IsValid)
+ {
+ // 你的逻辑代码,例如保存productCreateDto到数据库
+
+ // 操作成功后,重定向到另一个Action或返回视图
+ return RedirectToAction("Success");
+ }
+
+ // 如果模型无效,返回带有错误信息的视图
+ return View(productCreateDto);
+ }
+ }
+ ```
+
+6. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名
+
+ + PS Students类型具有StudentName、Sex、Age自动属性
+ 1. 定义Students类
+ ```
+ public class Students
+ {
+ public string StudentName { get; set; }
+ public string Sex { get; set; } // 通常性别用 "Male" 或 "Female" 表示,但这里根据你的要求使用 string 类型
+ public int Age { get; set; }
+ }
+ ```
+
+ 2. 在 Blog 控制器中定义 Create_2 Action 方法:
+ ```
+ public class BlogController : Controller
+ {
+ [HttpPost] // 通常用于处理POST请求
+ public ActionResult Create_2(Students studentCreateDto)
+ {
+ if (ModelState.IsValid)
+ {
+ // 你的逻辑代码,例如保存studentCreateDto到数据库
+
+ // 操作成功后,重定向到另一个Action或返回视图
+ return RedirectToAction("Success");
+ }
+
+ // 如果模型无效,返回带有错误信息的视图
+ return View(studentCreateDto);
+ }
+ }
+ ```
+# 专项练习-基础能力
+1. mvc生成一个随机整数,范围[0,100],注意是否包含
+ 1. 你需要确保你的项目中已经引入了 System 命名空间,因为 Random 类位于该命名空间下。
+ ```
+ using System;
+
+ public class BlogController : Controller
+ {
+ // GET: Blog/RandomNumber
+ public ActionResult RandomNumber()
+ {
+ // 创建Random类的实例
+ Random random = new Random();
+
+ // 生成一个0到100之间的随机整数,包括0和100
+ int randomNumber = random.Next(0, 101); // Upper bound is exclusive, so we use 101
+
+ // 将随机数传递给视图
+ return View(randomNumber);
+ }
+ }
+ ```
+ 2. 可以创建一个名为 RandomNumber.cshtml 的视图文件
+ ```
+ @model int
+
+ Random Number
+ The generated random number is: @Model
+ ```
+
diff --git "a/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md" "b/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md"
new file mode 100644
index 0000000..e198773
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md"
@@ -0,0 +1,194 @@
+## 一、关于Action的返回值
+
+1. 基础数据类型, 如int、string、List<>等等
+2. IActionResult,返回响应的状态码
+ - 视图
+ - 重定向
+3. ActionResult,是前面2个的结合体,意思为既可以返回基础数据类型,也可以返回响应状态
+4. 内容响应:JsonResult、ContentResult
+5. POCO(比较老的类型对象)
+
+## 二、视图
+
+1. Razor 专业说法 模版引擎
+ - 大部分时候,我们都是通过View函数,传入数据(ViewModel)给视图,这样一来,视图中就可以通过@Model这个属性来取得这些数据
+
+ ```
+ //在index写
+ @{
+ var str = "尝尝鱿鱼"
+ }
+ @str
+
+ @str
+ ```
+
+ - 实际上,我们可以通过声明视图模型的类型,来获得自动提示或者自动感知
+2. 在视图上显示数据的几个玩法
+ - 在视图上定义简单数据,在视图上显示(在视图上定义对象数据,在视图上定义集合数据,显示的问题)
+
+ - 后端传回来的对象数据,在视图上显示
+ - 在后端传回来集合数据,在视图上显示
+
+# 传参
+## 1. 第一步先定义字段
+ + 在Model中创StudentsCreateDto.cs
+ + 内容:
+ ```
+ namespace Blog.Models;
+ //第一步先定义字段
+ Public class StudentsCreateDto{
+ Public string StudentName{get;set;}=null!;
+ Public string Age{get;set;}=null!;
+ Public string Height{get;set;}=null!;
+ }
+ ```
+
+2. 之后在控制器创建BlogsController.cs
+ + 内容:
+ ```
+ Using Microsoft.AspNetCCore.Mvc;
+ Using Blog.Medols;
+ namespace Blog.Controllers;
+
+ Public class BlogsController : Controller{
+ Public IActionResult List(){
+ return RedirectToAction("index");
+ }
+ }
+ ```
+2.1 //使用字段(第二步)
+```
+Public dynamic Index(){//序列化反序列化
+var obj = new StudentsCreateDto{
+ StudentName = "小米",
+ Age = "18",
+ Height = "188"
+};
+return View(obj);
+}
+```
+
+3. 在View 创Blogs文件夹+index
++ 内容:(str是自己命名,注意分号;StudentName是Model里面定义的字段名 )
+```
+@{
+ var str="文字";
+ @ str;
+
+ @str
//文字会变一级标题
+ @Model.StudentName //调用的是Model的名字字段
+
+ //如果是多组用foreach遍历
+ @foreach(var item in @Model){
+ @item.StudentName
+
+ }
+}
+```
+# 作业
+1. 渲染简单数据到页面
++ Model代码:
+ ```
+ namespace Blog.Models;
+
+ //第一步先定义字段
+
+ public class StudentsCreateDto{
+ public string StudentName{get;set;}=null!;
+ public string Age{get;set;}=null!;
+ public string Height{get;set;}=null!;
+
+ }
+ ```
++ 控制器代码
+ ```
+ //控制器
+ using Microsoft.AspNetCore.Mvc;
+ using Blog.Models;
+
+ namespace Blog.Controllers;
+
+ public class BlogsController : Controller {
+ public IActionResult List(){
+ return RedirectToAction("index");
+ }
+ //第二步再使用Model里面的字段
+ public dynamic Index(){//序列化反序列化
+
+ var obj= new StudentsCreateDto{
+ StudentName="小米",
+ Age = "18",
+ Height ="188"
+ };
+ return View(obj);
+
+ }
+ }
+ ```
++ 视图代码:
+ ```
+ @{
+ var str= "试试";
+ }
+ @str
+
+ @str
+
+ ```
+效果:
+
+2. 渲染复杂数据到页面
+ Model,控制器如上;
+ 视图如下:
+ ```
+ @Model.StudentName
+
+ @Model.Age
+ ```
+
+3. 渲染集合数据到页面
++ Model代码如上
++ 控制器代码:
+ ```
+ using Microsoft.AspNetCore.Mvc;
+ using Blog.Models;
+
+ namespace Blog.Controllers;
+
+ public class BlogsController : Controller {
+ public IActionResult List(){
+ return RedirectToAction("index");
+ }
+
+ //第二步再使用Model里面的字段
+ public dynamic Index(){//序列化反序列化
+ var list=new List{
+ new StudentsCreateDto {
+ StudentName="oppo",
+ Age = "18",
+ Height ="178"
+ },
+ new StudentsCreateDto {
+ StudentName="vivo",
+ Age = "19",
+ Height ="178"
+ },
+ new StudentsCreateDto {
+ StudentName="荣耀",
+ Age = "20",
+ Height ="155"
+ },
+ };
+ return View(list);
+ }
+ }
+ ```
++ 效果:
+ 
+3. 视图里调用:
+ ```
+ @foreach(var item in @Model){
+ @item.StudentName
+ }
+ ```
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md" "b/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md"
new file mode 100644
index 0000000..cd0d9da
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md"
@@ -0,0 +1,213 @@
+# 笔记
+
+
+# 作业
+1. 生成一个随机整数,范围[0,100],注意是否包含
+2. 生成一个随机整数,范围(0,100],注意是否包含
++ 控制器
+ ```
+ using Microsoft.AspNetCore.Mvc;
+ using Blog.Models;
+
+ namespace Blog.Controllers;
+
+ public class BlogsController : Controller{
+ public IActionResult Test(){
+ var ranTer = new Random();
+ var ranNum = ranTer.Next(0,101);
+
+ return Content(ranNum.ToString());
+ }
+ }
+ ```
+
+3. 生成10个随机整数,范围[5,80],注意是否包含
+
+4. 定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串
++ 控制器
+ ```
+ public class BlogsController : Controller{
+ public IActionResult Test(){
+
+ var ranTer = new Random();
+ var ranNum = ranTer.Next(0,5);
+
+ var str = "我是新东方";
+ var ranStr =str[ranNum];
+
+ return Content(ranStr.ToString());
+
+ }
+ }
+ ```
+# 随机组合姓名第六题第七题:
++ 控制器
+```c#
+using Microsoft.AspNetCore.Mvc;
+using Blog.Models;
+
+namespace Blog.Controllers;
+
+public class WjlController : Controller
+{
+ //Xing 和 Chinese 是两个私有的只读字符串字段,分别存储了百家姓和中文字符。
+ private readonly string Xing = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷郏车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双";
+ private readonly string Chinese = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制其应上的以要大由来一九开义又应有会着活更现面且斗则要由明看能事制受后定包干能老国将义相要论据到理系及定规学管";
+
+ // Blogs 方法是控制器的入口点,当用户访问根url时会被调用。
+ // 调用 GetRandomNames(100) 方法生成100个随机姓名。
+ // 使用 View 方法将生成的姓名列表传递给视图进行渲染。
+ public IActionResult Blogs()
+ {
+ var names = GetRandomNames(100);
+ return View(names);
+ }
+
+ // GetRandomNames:
+ // 这是一个私有方法,用于生成指定数量的随机姓名。
+ private List GetRandomNames(int count)
+ {
+ // 创建一个 Random 实例用于生成随机数。
+ var random = new Random();
+
+ // 创建一个空的字符串列表 names 用于存储生成的姓名。
+ var names = new List();
+
+ // 使用 for 循环生成指定数量的姓名:
+ for (int i = 0; i < count; i++)
+ {
+ //使用 random.Next(Xing.Length) 从 Xing 字符串中随机选择一个索引,然后使用该索引获取一个姓。
+ int xingIndex = random.Next(Xing.Length);//获取随机整数
+
+ string surname = Xing[xingIndex].ToString();
+
+ //使用 random.Next(1, 3) 生成1到2之间的随机数,决定从 Chinese 中选择多少个字符。
+ int charCount = random.Next(1, 3); // 随机1到2个字符
+
+ // 使用 random.Next(Chinese.Length - charCount + 1) 生成字符的起始索引。
+ int charIndex = random.Next(Chinese.Length - charCount + 1);
+
+ // 使用 Substring 方法从 Chinese 中提取指定数量的字符。
+ string firstName = Chinese.Substring(charIndex, charCount);
+ names.Add(surname + firstName);//将姓和名拼接成完整的姓名,并添加到 names 列表中。
+ }
+
+ return names;//最后返回包含所有生成姓名的列表
+ }
+}
+```
+
++ 视图:
+```
+@model List
+@{
+ ViewData["Title"] = "名字";
+}
+
+名字
+
+
+ @foreach (var name in Model)
+ {
+ - @name
+ }
+
+```
+# Crud列表
++ 效果图
+
+
+
++ 控制器
+```c#
+using Models;
+using Microsoft.AspNetCore.Mvc;
+
+public class CredController : Controller {
+ public ActionResult Index(){
+ var obj = new {
+
+ title="152"
+
+ };
+ return View(obj);
+}
+}
+```
+
++ Model
+```c#
+namespace Models;
+
+public class CredCreateDto{
+ public string Title { get; set; }=null!;
+ public string Author { get; set; }=null!;
+ public string Content { get; set; }=null!;
+}
+```
+
++ 视图
+```c#
+
+
+
+
+
+ ID |
+ 标题 |
+ 内容 |
+ 作者 |
+
+
+
+
+ 1 |
+ 222 |
+ 333 |
+
+ 编辑|
+ 详情|
+ 删除
+ |
+
+
+ 2 |
+ 222 |
+ 333 |
+
+ 编辑 |
+ 详情 |
+ 删除
+ |
+
+
+ 3 |
+ 222 |
+ 333 |
+
+ 编辑|
+ 详情|
+ 删除
+ |
+
+
+ 4 |
+ 222 |
+ 333 |
+
+ 编辑|
+ 详情|
+ 删除
+ |
+
+
+
+
+@Model.title
+```
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241202-\345\242\236\345\210\240\346\224\271\346\270\262\346\237\223\347\224\273\351\235\242.md" "b/\345\220\264\345\230\211\347\216\262/20241202-\345\242\236\345\210\240\346\224\271\346\270\262\346\237\223\347\224\273\351\235\242.md"
new file mode 100644
index 0000000000000000000000000000000000000000..a62d4ffbaf34d2e47e45e73fb4df5395158de287
GIT binary patch
literal 5842
zcmXpqFf!3MG}1RR(={}(G6EuVJu`D-g=EWQg`m{Z;>^5s1z$%$PdC@#5CvDOn5RpY
zKiSpuWJg!bi-yJ*%?p$Bi&A64f}QhIQgzES^NfvjE6hxE4fQO|^bBx{rzDmn#*`MP
z7U_an!Kp=MnaQaN;rT_`sYNj^K-r|k;#7T@y}AYhjKBDg3%Bd4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
e7!85Z5Eu=C(GVC7fzc2c4S~@R7!3j9LI40Ee|<^-
literal 0
HcmV?d00001
diff --git "a/\345\220\264\345\230\211\347\216\262/20241204-\345\242\236\346\224\271linq.md" "b/\345\220\264\345\230\211\347\216\262/20241204-\345\242\236\346\224\271linq.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8d34c8e14d4fdd9a94e93cfab9f3e7abfc365ee2
GIT binary patch
literal 4330
zcmZQ&3Y{y!z`(FKXjUW)cXTXRumC6q0uIa!JT+P%788g7gCGVLAPwO=G6XXuGvqTA
zF{Cp1G9)tO0dYEzT?AFj%48D&GCwVNRwN9!wBR@2k(reQ^LYnnhJq!ctZ=>~Lt3mQI?5aEw({y_#OVCd&FWMd6|
z28LE9删除`获取Id值
+2. Delete.cshtml中的样式
+ ```
+ @model Blog.Models.Blogs;
+ 你真的要删除吗?
+
+
+ 标题 |
+ @Model.Title |
+
+
+ 内容 |
+ @Model.Content |
+
+
+ 作者 |
+ @Model.Author |
+
+
+ 删除 |
+ 回到主页 |
+
+
+ ```
+3. 展示删除页面
+ ```
+ public IActionResult Delete(int id)
+ {
+ //根据id找到对应的blog
+ var blog=Db.Blogs.FirstOrDefault(X=>X.Id==id);
+ return View(blog);
+ }
+ ```
+4. 确认删除页面
+ ```
+ public IActionResult DeleteConfirm(int id)
+ {
+ //根据id找到对应的blog
+ var blog=Db.Blogs.FirstOrDefault(X=>X.Id==id);
+ //如果blog不为空,查找出来就删除
+ if(blog!=null)
+ {
+ Db.Blogs.Remove(blog);
+ //删除完返回列表页
+ return RedirectToAction("Index");
+ }
+ //如果找不到就返回找不到提示
+ return NotFound();
+ }
+ ```
+
+
+## 查询步骤
+1. Index.cshtml的查询样式
+ ```
+
+ ```
+2. 查询页面
+ ```
+ public IActionResult Index(string keyword)
+ {
+ //判读keyword是否为空,不为空则删除空格
+ keyword=string.IsNullOrEmpty(keyword)?"":keyword.Trim();
+ //如果为空返回主页
+ if(string.IsNullOrEmpty(keyword))
+ {
+ return View(Db.Blogs);
+ }
+ //如果不为空,则查询
+ var list=Db.Blogs.Where(x=>x.Title.Contains(keyword)||x.Content.Contains(keyword)||x.Author.Contains(keyword)).ToList();
+ return View(list);
+ }
+ ```
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241209-\351\223\276\346\216\245\346\225\260\346\215\256\345\272\223.md" "b/\345\220\264\345\230\211\347\216\262/20241209-\351\223\276\346\216\245\346\225\260\346\215\256\345\272\223.md"
new file mode 100644
index 0000000..e6132d8
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241209-\351\223\276\346\216\245\346\225\260\346\215\256\345\272\223.md"
@@ -0,0 +1,70 @@
+# 数据模型
+## 数据库的选择和权衡
+
+ + Sqlserver
+ + PostgreSQL
+ + Mysql/MariaDb
+ + Oracle
+ + Db2
+ + Sybase
+
+## ORM工具的选择和使用
+
+ + EntityFrameworkCore
+ + Dapper
+ + SqlSuper
+
+# 数据的持久化
+ - 结绳记事
+ - 甲骨文
+ - 木简
+ - 竹简
+ - 纸
+ - 账本
+ - 文本文件、Excel (磁盘:HDD、SSD)
+ - 数据库
+ - 常见数据库
+ - Sqlserver
+ - PostgreSQL
+ - Mysql/MariaDb -
+ - 常见ORM工具(比喻为应用和数据库之间的通讯员)
+ - Dapper
+ - EntityFrameworkCore
+ - FreeSql
+
+
+# 应用EntityFrameworkCore的步骤
+1. 安装依赖包,命令:dotnet add package Microsoft.EntityFrameworkCore.SqlServer
+2. 定义数据库表模型
+ ```
+ namespace Blog.Models;
+
+ public class Blogs
+ {
+ public int Id { get; set; }
+ public string Title { get; set; } = null!;
+ public string Content { get; set; } = null!;
+ public string Author { get; set; } = null!;
+ }
+ ```
+3. 定义数据库上下文
+ ```
+ using Microsoft.EntityFrameworkCore;
+
+ namespace Blog.Models;
+
+ public class BlogDbContext : DbContext
+ {
+ public DbSet Blogs { get; set; } = null!;
+
+
+ // The following configures EF to create a Sqlite database file in the
+ // special "local" folder for your platform.
+ protected override void OnConfiguring(DbContextOptionsBuilder options)
+ => options.UseSqlServer($"Server=.\\SQLEXPRESS;database=Blog4;uid=sa;pwd=123456;TrustServerCertificate=True;");
+ }
+ ```
+
+4. 生成迁移文件,命令:`dotnet ef migrations add XXX` (PS:可能需要安装如下依赖包:Microsoft.EntityFrameworkCore.Design)
+
+5. 将上一步生成的迁移文件,更新到数据库:`dotnet ef database update`(PS:需要保证连接字符串正确无误,包括用户名、密码等,数据库打开,并且允许远程连接)
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241212-linq29.md" "b/\345\220\264\345\230\211\347\216\262/20241212-linq29.md"
new file mode 100644
index 0000000..7b29fc8
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241212-linq29.md"
@@ -0,0 +1,245 @@
+1. 第1-3题
+ ```
+ public IActionResult Index()
+ {
+ int[] numbers = { 1, 2, 3, 4, 5, 6 };
+ //1.查询特定元素 找出数组中等于5的元素。
+ var one = numbers.Where(n => n == 5).ToList();
+ //查询特定范围的元素 找出数组中在2到8之间的元素
+ var two = numbers.Where(n => n >2 && n<8).ToList();
+ //查询并转换元素 将数组中的每个数字乘以2
+ var three=numbers.Select(n=>n*2).ToList();
+ return View();
+ }
+ ```
+2. 第4题
+ ```
+ public IActionResult Index()
+ {
+ //查询特定属性的对象 找出所有名字以"王"开头的学生。
+ List students = new List
+ {
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ new Student {Id=2, Name = "王中王", Age = 22 },
+ new Student {Id=3, Name = "张语嫣", Age = 23 },
+ new Student {Id=4, Name = "詹宇航", Age = 35 },
+ new Student {Id=5, Name = "郑雨良", Age = 26 },
+ };
+ var four=students.Where(n=>n.Name.Contains("王")).ToList();
+ return View(four);
+ }
+ ```
+3. 第5题
+ ```
+ public IActionResult Index()
+ {
+ List students = new List
+ {
+ //查询并排序 找出所有年龄大于20岁的学生,并按年龄降序排列。
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ new Student {Id=2, Name = "罗婷", Age = 21 },
+ new Student {Id=3, Name = "王中王", Age = 22 },
+ new Student {Id=4, Name = "李子柒", Age = 22 },
+ new Student {Id=5, Name = "张语嫣", Age = 23 },
+ new Student {Id=6, Name = "詹宇航", Age = 35 },
+ new Student {Id=7, Name = "郑雨良", Age = 26 },
+ new Student {Id=8, Name = "欧文", Age = 26 },
+ };
+ var five=students.Where(n=>n.Age>=20).OrderByDescending(s => s.Age).ToList();
+ return View(five);
+ }
+ ```
+4. 第6-15题
+ ```
+ public IActionResult Index()
+ {
+ //查询并去重 找出数组中所有不重复的数字。
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var a=numbers.Distinct().ToList();
+ //查询第一个元素 找出数组中第一个大于3的元素。
+ var b=numbers.FirstOrDefault(x=>x>3);
+ //查询最后一个元素 找出数组中最后一个小于7的元素。
+ var c=numbers.LastOrDefault(x=>x<7);
+ //查询元素是否存在 检查数组中是否存在大于10的元素
+ var d=numbers.Any(x=>x>10);
+ //查询元素的计数 计算数组中大于5的元素数量。
+ var e=numbers.Count(x=>x>5);
+ //查询元素的总和 计算数组中所有元素的总和。
+ var f=numbers.Sum();
+ //查询元素的最大值 找出数组中的最大值。
+ var g=numbers.Max();
+ //查询元素的最小值 找出数组中的最小值。
+ var h=numbers.Min();
+ //查询元素的平均值 计算数组中所有元素的平均值。
+ //double average = numbers.Average();
+ var i=numbers.Sum()/numbers.Length;
+ //查询特定条件的元素 找出数组中能被3整除的元素。
+ var j=numbers.Where(n => n % 3 == 0).ToList();
+ return View();
+ }
+ ```
+5. 第16-17题
+ ```
+ public IActionResult Index()
+ {
+ List students = new List
+ {
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ new Student {Id=2, Name = "罗婷", Age = 21 },
+ new Student {Id=3, Name = "王中王", Age = 22 },
+ new Student {Id=4, Name = "李子柒", Age = 22 },
+ new Student {Id=5, Name = "张语嫣", Age = 23 },
+ new Student {Id=6, Name = "詹宇航", Age = 35 },
+ new Student {Id=7, Name = "郑雨良", Age = 26 },
+ new Student {Id=8, Name = "欧文", Age = 26 },
+ };
+ //查询并选择特定属性 找出所有学生的姓名和年龄
+ var a = students.Select(x => new{x.Name,x.Age}).ToList();
+ //查询并分组 按年龄分组学生,并计算每个年龄组的学生数量。
+ var b=students.GroupBy(s => s.Age) .Select(g => new { Age = g.Key, Count = g.Count() }) .ToList();;
+ return View();
+ }
+ ```
+6. 第18题
+ ```
+ public IActionResult Index()
+ {
+ List students = new List
+ {
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ new Student {Id=2, Name = "罗婷", Age = 21 },
+ new Student {Id=3, Name = "王中王", Age = 22 },
+ new Student {Id=4, Name = "李子柒", Age = 22 },
+ new Student {Id=5, Name = "张语嫣", Age = 23 },
+ new Student {Id=6, Name = "詹宇航", Age = 35 },
+ new Student {Id=7, Name = "郑雨良", Age = 26 },
+ new Student {Id=8, Name = "欧文", Age = 26 },
+ };
+ List courses=new List
+ {
+ new Course{StudentId=1,CourseName="英语"},
+ new Course{StudentId=1,CourseName="数学"},
+ new Course{StudentId=2,CourseName="语文"},
+ new Course{StudentId=3,CourseName="物理"},
+ new Course{StudentId=4,CourseName="化学"},
+ new Course{StudentId=4,CourseName="生物"},
+ new Course{StudentId=4,CourseName="语文"},
+ };
+ //查询并联结 联结学生和课程表,找出每个学生的所有课程。
+ var a = from student in students join course in courses on student.Id equals course.StudentId into studentCourses
+ select new{StudentName = student.Name,Courses = studentCourses.Select(c => c.CourseName).ToList()};
+ return View(a.ToList());
+
+ }
+ ```
+7. 第19-21题
+ ```
+ public IActionResult Index()
+ {
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ //查询并反转 反转数组中的元素顺序。
+ var a = numbers.AsEnumerable().Reverse();
+ // 将结果转换回数组
+ int[] four = a.ToArray();
+ //查询并填充 找出数组中第一个大于2的元素,并用它填充后面的所有位置。
+ int b = numbers.FirstOrDefault(n => n > 2);
+ // 如果找到了,用它填充后面的所有位置
+ if (b != 0) // 这里使用0是因为b是int类型,它的默认值是0
+ {
+ int index = Array.IndexOf(numbers, b);
+ for (int i = index + 1; i < numbers.Length; i++)
+ {
+ numbers[i] = b;
+ }
+ }
+ //查询并排除 从数组中排除所有小于5的元素。
+ var c = numbers.Where(n => n >= 5).ToList();
+ return View();
+
+ }
+ ```
+8. 第22题
+ ```
+ public IActionResult Index()
+ {
+ int?[] nullableNumbers = { 1, null, 3, null, 5 };
+ //查询并填充默认值 如果数组中存在null值,用默认值0替换。
+ var a = nullableNumbers.Select(n => n ?? 0).ToList();
+ return View();
+ }
+ ```
+9. 第23题
+ ```
+ public IActionResult Index()
+ {
+ string[] stringNumbers = { "1", "2", "3", "4" };
+ //查询并转换类型 将字符串数组转换为整数数组。
+ int[] a = stringNumbers.Select(int.Parse).ToArray();
+ return View();
+ }
+ ```
+10. 第24题
+ ```
+ public IActionResult Index()
+ {
+ object[] objects = { "String", 123, "Another String", 456 };
+ var result = objects.OfType().ToList();
+ //查询并使用OfType过滤 从对象数组中过滤出字符串类型的元素。
+ return View();
+ }
+ ```
+11. 第25题
+ ```
+ public IActionResult Index()
+ {
+ int[] numbers1 = { 1, 2, 3 };
+ int[] numbers2 = { 4, 5, 6 };
+ //查询并使用Zip合并 合并两个数组,并创建一个包含元素对的新数组。
+ var a = numbers1.Zip(numbers2, (first, second) => new { first, second }).ToList();
+ return View();
+ }
+ ```
+12. 第26题
+ ```
+ public IActionResult Index(){
+ //查询并使用Range生成 生成一个包含1到10的整数数组
+ int[] a = Enumerable.Range(1, 10).ToArray();
+ return View(a);
+ }
+ ```
+13. 第27题
+ ```
+ public IActionResult Index(){
+ //查询并使用Repeat重复 重复一个元素多次,创建一个新数组。
+ // 要重复的元素
+ int number = 7;
+ // 重复的次数
+ int repeatCount = 10;
+ // 使用LINQ的Repeat方法重复元素
+ var a = Enumerable.Repeat(number, repeatCount).ToArray();
+ // 将结果传递给视图
+ return View();
+ }
+ ```
+14. 第28题
+ ```
+ public IActionResult Index(){
+ //查询并使用Take限制数量 从数组中取出前5个元素。
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ // 使用LINQ的Take方法取出前5个元素
+ var a = numbers.Take(5).ToArray();
+ // 将结果传递给视图
+ return View();
+ }
+ ```
+15. 第29题
+ ```
+ public IActionResult Index(){
+ //查询并使用Skip跳过元素 跳过数组中的前3个元素,然后取出剩余的元素。
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ // 使用LINQ的Skip方法跳过前3个元素
+ var a = numbers.Skip(3).ToArray();
+ // 将结果传递给视图
+ return View();
+ }
+ ```
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241216-\347\261\273\344\274\274\345\255\246\347\224\237\344\277\241\346\201\257.md" "b/\345\220\264\345\230\211\347\216\262/20241216-\347\261\273\344\274\274\345\255\246\347\224\237\344\277\241\346\201\257.md"
new file mode 100644
index 0000000..bcd7336
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241216-\347\261\273\344\274\274\345\255\246\347\224\237\344\277\241\346\201\257.md"
@@ -0,0 +1,91 @@
+# 学生信息表(完整步骤)
+1. Models中创学生表,成绩表,课程表
+如下:
+```c#
+public class Course{
+ //主键Id
+ public int Id{get;set;}
+ //课程名称
+ public string CourseName{get;set;}=null!;
+ // ....
+}
+```
+
+2. Models中类数据库表实现上下文的交互(文件名称叫**ScoreDbContext**)
+```c#
+Using Microsoft.EntityFrameworkCore;
+namespace ScoreDbContext : DbContext{
+ //以下为数据库上下文的公开属性,将会被映射到数据库表
+ public Dbset Students{get;set;}=null!;
+ public Dbset Courses{get;set;}=null!;
+ public Dbset Scores{get;set;}=null!;
+}
+
+protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){
+ base.OnConfiguring(optionsBuilder);
+
+ var conString = $"server=.\\SQLEXPRESS;database=Score4;uid=sa;pwd=123456;TrustServerCertificate=true;"
+
+ optionsBuilder.UseSqlServer(conString)
+}
+
+```
+
+3. 实现交互在ScoreDbContext中的终端实现
+ 1. 生成迁移文件:`dotnet ef migrations add XXX`
+ + 前提是:
+ - 第一得先安装依赖包(Design是数据库):`dotnet addd package Microsoft.EntityFrameworkCore.Design`
+ - 第二是需要一个工具,ef工具,安装命令是:`dotnet tool install --global dotnet-ef`
+ - 第三是要求程序不能有编译错误,若想确认有没有编译错误:`dotnet build`
+ - 第四是程序不能处于运行状态
+ 2. 将迁移文件同步到数据库
+**若第三步成功会出现:Migrations文件夹**
+
+4. 打开数据库后,服务打开后开终端实现:`dotnet ef database update`
+5. 可以打开数据库确认有没有成功
+6. 控制器中创建各个表的控制器:`studentController.cs ScoreController.cs CoureController.cs`
+7. 创视图各个文件夹的Index例如:
++ 例如:课程的控制器:
+```c#
+// namespace ....
+public class CourseController : Controller{
+ //数据库的数据拿过来
+ // _db是暂时的叫这个
+ private readonly ScoreDbContext _db;
+ public CourseController(){
+ _db = new ScoreDbContext();
+ }
+ public IActionResult Index(){
+ var list = _db.Course.ToList();
+ return View(list);
+ }
+}
+```
+8. 视图创Index例如(课程信息表)
+```c#
+@model List;
+
+
+// ....
+@foreach(var item in @Model){
+
+ @item.Id |
+ @item.CourseName |
+
+ 编辑
+ 删除
+ |
+
+}
+
+
+```
+
+9. 插入数据(数据库中)
+```
+insert into Course(CourseName) values('英语'),('语文')....
+```
+
+10. Course控制器为例:写Edit、Delete、Create
+
+11. Course视图中创Edit.cshtml、Delete.cshtml、Create.cshtml
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/20241223-\347\237\245\350\257\206\350\241\245\345\205\205\345\255\246\347\224\237\350\241\250.md" "b/\345\220\264\345\230\211\347\216\262/20241223-\347\237\245\350\257\206\350\241\245\345\205\205\345\255\246\347\224\237\350\241\250.md"
new file mode 100644
index 0000000..7844163
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241223-\347\237\245\350\257\206\350\241\245\345\205\205\345\255\246\347\224\237\350\241\250.md"
@@ -0,0 +1,47 @@
+# 笔记
+
+1. IEnumerable -->可迭代;可遍历;(集合接口)
+**用了就可以用foreach**
+例:`@model IRnumerable`
+
+2. 视图中要引用数据库的内容
+ 2.1 写:
+ ```c#
+ public class StudentsController : Controller
+ {
+ //ScoreDbContext 是类数据库的那个伪库
+ //_db是自己取得名字用来代替数据库名字
+ private readonly ScoreDbContext _db;
+ //构造函数
+ //名字要和控制器名字一模一样
+ public StudentDbContext()
+ {
+ _db = new ScoreDbContext ();
+ }
+ //下一步:Index中要返回视图中
+ //Index中的return View(_db.Courses)--->Courses和ScorewDbContext中Dbset取得名字一样
+
+ }
+ ```
+
+3. `405的错误是`:
++ 参数错误
++ Method对不上
+
+
+4. `404错误是:`**找不到页面**
++ 若无书写上的错误就重跑
+
+5. 505请求处了问题
+
+6. **编辑是Update 不是Add**
+例:新增
+```c#
+[HttpPost]
+public IActionResult Create(Course input){
+ //这里是Add;编辑就是Update
+ _db.Courses.Add(input);
+ _db.SaveChanges();
+ return RedirectToAction("Index")
+}
+```
diff --git "a/\345\220\264\345\230\211\347\216\262/20241225-\350\241\245\345\205\205\347\237\245\350\257\206\347\202\2712.md" "b/\345\220\264\345\230\211\347\216\262/20241225-\350\241\245\345\205\205\347\237\245\350\257\206\347\202\2712.md"
new file mode 100644
index 0000000..73f5bad
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241225-\350\241\245\345\205\205\347\237\245\350\257\206\347\202\2712.md"
@@ -0,0 +1,14 @@
+## 笔记
+
+1. 查询功能 method用的**get**
+
+2. from中写name=abc 这里的abc相当于keyword
++ 之后的Index中要(string abc)拿到参数
++ 返回可以用:`return JsonSerializar.Serialize new{abc}`
+
+3. [ FromQuery] =>查询字符串
+
+4. + 前|| 后 :如前对,后不执行
+ + 前|后 : 都判断一遍
+
+
diff --git "a/\345\220\264\345\230\211\347\216\262/20241226-\347\254\224\350\256\260.md" "b/\345\220\264\345\230\211\347\216\262/20241226-\347\254\224\350\256\260.md"
new file mode 100644
index 0000000..ab76a70
--- /dev/null
+++ "b/\345\220\264\345\230\211\347\216\262/20241226-\347\254\224\350\256\260.md"
@@ -0,0 +1 @@
+# 综上所述的完成完整过程
\ No newline at end of file
diff --git "a/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png" "b/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png"
new file mode 100644
index 0000000000000000000000000000000000000000..3f767c472b455ffb4c36e69bad1e0c0dc60e439c
GIT binary patch
literal 37737
zcmeFYWl){L_a=x1O>ly{2KV3=+%>ps&;)mPcb8xn0>Ry#;C68h&czAt^YWYjOznrM
z+N!PD+TE)CK-H!7^y$-mo<8S!Ba{`TJ|GhyLqS1(kdYQwg@S@E1pb~8VSo}Ir(h~5
zC^9G+aZz=5=;IC)@8p3N;m*a!=|(YitMX!%!X-}`Yp#Jt<5I9j(I0
zj}C*THm~MdI0y`kKNQ(d5wbh^g`*3)8GlU?D0C>eP}~4Aj+{2Hoeal{sUPrgPyscu
zBCHveB~5Pb-*j_YQ3es9p@EiGHfRK3kDp-VYb2nTBt49%Y3oEKbA!w~W?)z-#ArCU
zz&>Y#DmN-KcxR|L0YtC@{<7*TO@+i3|PxLWkc17TAfDZxCMg!cf6Y?B9WOm&)~l|Ew>>#DxCDnu9H_rj)xN?PJoS6tv)s7sK%kQ<|3O2`zMh5ufYTrGe}j
z{5%f_Lm<}8>9jW%C-h+DZ-#5+(x3Uv?DIIYEA#EOO@Vmc@z>tvrG~Ye_53$@6%;w<
z2PSQTV9ZA=#%C4!X}n+x4L#(M8&Z#(gc<7Jhzr
z<%5v^B5k9`6m%vSZTw}JZ?VmYpJ09ukNG>4t_6DkL`+X*)?c2R`UkO0V^$h@
z{o{oklaxKf@U5W0X?seAVw|fZ&dF?ac?Z9GN6$sc80y*3-pdSfBNgF63O_fP5DC#55pEl
zQYxsTRG=^-AlM!69{WC0RBl9i`mS>EFCjV%=;r1IdWJ}h?kAP*%5n}9^D@qJ*DVT;
zF^k56YLy&U19H_f!iz))0YMhFfslcZhGN@
z(vsL?oL6U>0)q*C3MJG
zxX|A_XRX*ieTp#ZO_M8cRKWe~9YsOTW#V1%p2s`qLZj^t=G|}rIjaB%CU6Euv>(x)
zyCt;|OGqr^ws`W()vxQzi!%f=OH$!o)Xcuo5xm-rMoD9zuEGYu3;UW-O
zk6oqpncMM38$MM|8Uc|19tp_C&ZeY1&}n16d}ywiKtIb~
z$$lNMUYYV-6}XG%kp{C+sb=N=94$e4-Nf>SF|r~>j#Nxv>=l6xs%Gbq()8s?l+h7%
zw*d3f_ljb3+*g4%5P6D{d)0wLbB`YK$){z3x
zdi>nPo+-!ni3MVQ0}P>2Aq#$D*t!xGWL37UR3xsPUznZY5xx^q!G*>^-fmX8G}?~z
z2Y!h`??q=qLs{Kc0Z3EVN*Q37DW*gxIt=d}@6GuLaCEh0DDgQ#Ns=4ElKtn1E7&m&
zSf~gz;i+x%*6fW`60$v1h=tMeq!id2>V;JWMqf&<`LFx-|>mw1VX+c{z<&}>g{V_uV{DTDSr#G#8H3A
zal5Vg=bP7(IyP?vuiOZ+p7jz{Efm8tu8F)%aDpJSv2y3sXp51%71dz0f)z(u5NF;;
z6pSA=*Ntn{TWXIOt*kS6e?C$<7C=o
z=x4VVEYSsyb_xgu^8eT&psGrzcM(IFnabtk8P2IhwZ7^3w~S5strCauS>`X2=8S9^
z6Y^J$_Oe9o_;~vql}!k(n(FCa@*%|cgy4q82D!E#R}1qtot2`OQXQidySENicR$&%`BaSjE;u$Gz)tgK%o`QDyhjlFZDI?y|^9
zia0B!u74ScWw@lm5!ot|(>T<<>_w59pA-|?i#Fi1&0SNF{!}C`GinffgbcsSGY`P8
z8K*k-nj_aMM%s&m)N7s_Vd=_C-{I`gG&6Z1nYg;Uf}yiThZk5rhF@a^Y?`%x)MOy8
zcr!FN$coM3Z{%3uv~;Pf$t~cq=;tQ4@@nxvedG8j*_Hk<;xDb6Kt^$c|4s*6&yZJk
zCHml~OAM`^DKy(G_KzgB6rcq-YGcp>|rF$SD{r})_z8X9I;y2}HD=;mH4OeD-i$zRep>0GbP
zN023Scktcf>&+#hfvopo1`dPf>q7{x+ws`L-@XD*sqOFFYYFXh5
zQFs6wLIu2#qZ5H_Y|ai0|DhxQr-b|s=PfMFaly5UVg3g%UZK6ALpLR**TgX8|CGFk
zhUqbG?G!pgKR}j&dIPId!f%)oF+W!Epu2Zg=nZ8m!vzjH8_i#zmB5QZ1CSA&44o77
z1@Zdo1~p(1ntC&E?)!fRt8YL^f}o3?o}T)rThRsUN|o{oVta(qqXIY%4nVxbVx>(B
zuy%O=kq#q70bn;RxgqQ9Qt!-X>d~M6d2m|4t&M>Yy
zP)49&zJzv@v9EQrXa?f}P!|dv5gDf2Su_BH0vcF9Mhq0|S~xR_GAb~9U?3E$zOqrU
z^cyA@r-YLKTo8qj{03`(l0nJiV&jox0{!u(5uv~_2V2m)Kr=Er;GcKzB*Wo={*s))
z$ds+_BE0`MOcPB4y7a^lTPvAtWR$5j#4;xSyv}D2^TMG}ojJIWF_?q^(Y^x8d=7JoPiO;60;GO5j()
zef?`9oetFE_V9n}qInv@tYSUGI+m9E9Fqc0_q%CvB%m*)N8LSxM}AY%rQ@F3>2ugL
zGenzhKaA&p1V#;cCL{m(oJqrJ@ETMJix31$(q9k<^~Jy-xIIN<&1Ig%anF~OH)>h;
zC8Oud}HlW(d>R3XD$1Se;(aPG)LES$ga~aH4Ts|!mSL1xL
zA?bH?u!_~b5bKg}V$VA(UZX-EJ_e%4k-+qO_i?6W>^{8^vm6tj_C3ddll=4ryh~?+)N0C>`7hkfK#7
zD2LaBxejW$4lWEmNDYIS+Hh=GcPq4lNc;xdp76)~M;C&5WML=Q(>kw;S-dwa@r|1<8bG5*<7%0ELS`s!HS<>=tdBNdscRp%
zG-5zVOmd0vvBdp<2?GpfB%X_kY#et&2pzgu*`9jGTDaEMd?ch+XnoJTchDF$^);{m
z7S2~PuZEl)5k|oiiyfpQOrJze=fwR?2lj?Uf`g<_{`S&*eGv}34ZGr*c;q?k_LW$o
z%B)Z-X?iPVT`E^{)Gq`xw`aA95ueEmp2-LP6^(QQF})~`&TVflgTqjevU7Oj=6RUI
zlIE;wl=%v2)COJ|86MK%yQR?h1IyO1xpn?(?%~M(WU;P^@{F`H8JEzHt!n=2`a$>f
zW_D@ymCp<%OV9EF9x`a~>B<;sX^A<@h!FRy@Wme4uWd>KK`M-y+Y5{wQkHR^ANk*s
zGxACUH`f;SU2dU@J=1noU6gLJ#*z(^kuJ&iu-w9U2gZ+MmBJ(nQQ
zElyqd6*g^1K&m|Qmcl<)h{sh9`o;Y|^fKcj8P$E7Wqnc1_GmC{Hg4aI`?w2NNFw{g
z$Y#RK#FnpZO_88L)uY4n=RR{W`Z2zWrhjW&*9xqG!Zt9%sI@9HzXdeL`8M
z&yQX0BxrN!aZv68rNuZn#9tu%(?K%L!jD7X^|0JS-79QQBXdLVM6$A>#7RwPVFmeQ
zt-l22chVvdb-{4|s5;`taik0pk0AEQKz5S{0D2d4@_G
zxz~=zsp;6Rou-qaMnh7&jxF8OxVYPSog;?~Rm%q!0o%{a(NBIUE=12L<%Dh;Io|@u
zuVPGvBe)RBCt57@l|waA9`-m+0_V{vK_!XGDIcmTWeuXOlsh4_^kVC&A19|xiEkd(
zBPZ7uHas`^F>ouNzV1E^xRAu%CM8ZdY-nAtWifl3&fJ?vaL1KY9qa8wYMHBWuZzT+D~?r^T4L#~F&?eq
z93=UP)EOis&6G*ZL8d4M`4Q|Zi8QvM)PF>Mt7EhL(-NZ}LDwTTCmU@87k$5CAzjr<
z?Y}N_o;z?EubZAq2hGYjd>ZDRC2}Bg4Iq~Jtyjnfu8q85W6Y!Vb&T87GnyY~DQMGC
z9p$hPOiHR^sG-Gd{7}20`6acy3eOz93sQ#R)nU0_&?>Wu>r0^Pv}tnNh1xi&tA0CV
z+Bn0Z-_hX%+%Rn~vyK~2%O!s1O-o*{*(?9nvdU?)SUMAzqFEP=u|Ti%KfWJG6vC(|
zeLr8T%8R4;=tys|4f`?JkVLP{~;4Q)$^QEYwP;COB|P|@#j
zt!9O=33H%ItV{mi#D{DMt0G5|p^t`_eB>Rw55ha6<8tzDbD|&0@4AL^gYKv}a?-^j*0MKgTuzfOO>imuT>V*N!BFphb>ro_Q}h~(bW6%zhDui?)rE&u
zl!oP)$V2*!7?-r4f3)4+BsA-`kl5Mvf>P%#MSFNCc0ycQ^2h5p_Q_&UV|%O+UjTn~
zh27AJBympq^^KoDiQY+!7v{Lk)%q(>SOqlK56}fGV#Rm8kluU=2R52_WLGK3zsk$$
zx!FEG#RQGSL|o&qTH1k3H3aK~d9^*$7~X}&vo?RG!Y}2}*S<}OV4Ac)7+P9MZ7JWb
z@MaMsX)E;EC$z)&vs&q_d!7?+v|F0K+qke}>6*VNXSr5?CbF1WB5!UTpkgz
zl=QkoT8_kh{`2VxU$2Amr|F6P^q6=K`Z6-CPzqC7oejrgL&65`au*vR1eH9v$V%X%vR%of-n
z6xw)vmT-T#j=LWMN9pJ&YtkMbh@>4(-K-s0%1sH5DjzCd4dXj#;#%-&GBkR=wxSIP
zhWNH%u06VMjO{`nN~-jw4=LGV*Q1W6fBVVk`A;L3j6u=LI(UYmOmrWW3;d(3HX|*M
z8t?tkNPggz8JE7cWu~&_gD2BzvBA>Ie%HOO#T)ukAvE_BCg@0i%q>B#;tM4;2olRkbYt(l*q
zq5F!>OMjh2)Pl!WQ#~o2O6|HQ6l9QAohT^iZY985?5pZNhvsYBatcDZ{5a>*@)+NA
z=GXN3O;sm^WtH~^b2(}(KHl$jX~Iz5f;SvDAJZY#=lOla^>Lty>fEUJ!MVXAwv1(Z
zWEdhe0{fHAXuaDFU01#iLhQofzUPP|BT|C)SN9TEXG$uYDraY|0Lp8>r9~@*#1&B6
zbg-Bgygnl42n4-2kwkS|lRWGu9lX#gA3L_wQFN>5!PUm7}%)QK0@7KBFAjb~rXIB4K5##*k~5dn8qr&wig}P@U)H
zb#YUv_Ieum)H5Knpc&$G`&3@VMH&3^Zy^uA50#M~;VWX9+8-Fz4s|cIOcV>g+Nu5`m3ib4
zL?OmeBpnrX?A{=}P^Q`*mz%q?Q
zwtD@eY0IY($HzFvjh2hvT3TB{L7y~h&&JM~tL3AKy;Os54!?g4cpHBjEJ)lW;wiF1
zpD>Iz|K3SEA-a)!)bYc3gDFa&>SkX>gC;9+YCPw^fR7AgoLmc_P95U
zogZw6VX#oup^ddz+sj^z{^tF_w$-8P6<7+k2J-!Mu{9FsJ?~;ZW=&>T?O|`0b)-d=_F0Qg$uF!>-@EkFS{857
zD2TK{wZ)(YUsMX7B)4Vij&~23PfOd2$
zCrbIy=3v$G;OU*Z3$)Jzep$uoN)5ueRxF75i(0C?-&Ob~r;l0YFLHI+iOzy8wyH5o
z&FSb=6kRAs&(JzkEoHot$3so$3`KtWK)8~0AK^O8FZ{~NdKK<`VtkoM4r{nlr-S^b
z?Ik6(WlaUOkaYx4ditEvTx(ytUri%3oiGTR6um0vXzAmwdziK`(XDY3OYS}q%a$@UdFOXkYIlA!daCrJ<
z{^T|>nXTznxq1Qt0!f~kS%SA?WrAw+4f}QrX_ZgjlZN^wFKZs-w`HKQ(#ks`hwBn(
zSiV`f?LiIk7$Q1z9$UooNW5zQJ1h`}A!|mwzOl_WU|GFrI>F8tMgpc@mbR9hO4Ze8=l!UG60`?q|OBXR!l!{!l@rnH&uO5l
z55ua?O@x3-A{x0L5fK_9NXJh%PV!t2p(hD(%X#Wa_U
zvu5`>w@JY5b<`!uFZH6DJQhwy7GS?a*nG^oEv#N@hV@$W#%@AQ
zS_>mB+@>zw;pFrA_g0uAR`%p^^Ghy2>5U}Q
zzx9`&J=e~hZYByAbwO;2P8G>&WON-SyxiPR6HPGOAD*Iv9#WM<5hvOJ5539|k!F@W
z9*|kVi(wubRG4kS2m_wR$_V~Yfn}{=Xy;)~Y#`8XqZBhdo7q^=wiA6Fg=NjsR&aUZ
z?Kb_##SpQa>sgbSG0IUK>c6-Exea)v=k`D%T|DLvhPq|{D=OCaJ52K+X&i~@xJOWc
z$JION7=P9FJ5hr!M&6|OnJh^-y=75%2syZFg(I`;zGCDxSNHPu?7bIF@wyqk;Y-ol
z(aGb|*x{>sv(vg`#^AFhV3*Xz`kz-FH$kN+d;E-f8p?GOMul@>;weZ%3z&G>M6Tw(
z={#LM-Yr`OSL2UUb9K`ibyIG>5uIIl9Svw5uNV(^RD6y^#DW2_*&=5j3xcGkYLupG
z)DF7C4r08|0uA%?sN5Yqy1gEQ4jK`F@PpBNP5?_Gjoqto?(or(Nt?rEAK*^v1ZJak
zSHqDGhJ8ox*lE$^YiG6;nI*V}fu_OXrPFMnq;>fFn_+(l|s^zWW*
z!nVw?r{V)K%6$I$+G5!>7@fEWZF&y)91z|b*PUka9xUGo~67WBDU-ViraUKmaxP+x+C&?gXEkd4XC7GVq`Sg&O
zNuy=Mi7gsZ9w$rIBKflfEkbLJ@2Wp&UvZNCzMv+FrzTa;Ac91d0Xg?;r%6Exw>C@P
zehFCc33w^Y
zH9ecwRoAtO55gUjFFCpdmdw?@&&xXCg+qBwZpFOqyO%YW?apt{TU^jN{g5!iW_F_0
zXq#TDM%@eC40S4bXJq}Ik<#<2Xcv*#gs@BTGmCx#HjwQSMw+myj7wsjNpXBFC>lR#Nt^a5pKfrP`T*d9EW|%+^;3j3=wLl@
zfmY*9WsbG@ZO$pUi&!#_82!uc+OouxE8!js!msyheP?RhKy!3uifW^
zGTwtj?eybL!mza5RrEM}PpGvgC{P^$EEG_tKcFbP6SWGVzP@(wuz!1miZp(dsqUL@)^{1WG2uZMeGut1f7{tUT=exwZ;z^4$
z$YEmW*e*B37Sgcf<>gsDn%=>-e_?k(t5kU5RIPm*^Eh><-Aw3pZOa*<<+^cCz0Tme
zCUCWOpT0mdN%=bYhw4uM-)qC=^z&r?{wrA_K@rUR2CKxRB&nqs-Yb|d6}spbOTAmF
z{NH+rR|9!$H5#kp6j`Rm(bf%=43*G?vMWmvSTJw?QoHq!Vx2FpR-1oA$9(alK7ec#
zp7oo8`Yx+)3z6!kf*;wI^f?F>dc6kDH(Y|3E1#)pcpluC^1IH)z9?D#jFUwWt(%IR
zIdQGhZ8{w_{90LpQlTei|DOaC8RA`f0#xvSPc~t|`9s8t$jAwST-RS%Xd^z-zy7#D
zdMp?b$Q6;R#>amEaz*C>P^>v<-@8$OB$5~$v{5ViC+Q)0pw*oSRQd!0&);`IE{yyw
zI~9&iWd;kh@&*!8`>;gkFhFt&T@)&vSsWR&78+Uqp;6s|jGIXKTh@x=9n#Vp
z$%_<7RNX@%w7(^-#DPXA34y`3K<>^T4NgAInz@G*m<|diKL%>iS;!au|0z-YA>RJ5
z27s>6DFAsxq(#NJ0fD;_0A&evL$kc))&9Sr(f@tR@D~OhS-Egs`VkA6fG-Z|#-rmR
zvNKhUz!*@LfHt7u;IW{E~dsF5~y}Qzqc?Tv;R-4dW-{H
zu*zvv)&c9ok%qSYtm^{+zzB*UpxG+u?YM^di
z!&aFT)Q9ySgC;_7m`IyO#=JMii~ma8O*iAw4X7Nn&)59-Y-Dth+RAxOVK%c
zNsLH7i1Njm+a{Clm)P&?XD*(<^<$2QyF9J@yh5QlIKax&^~=nqJqaS~)IRpdJ42*R
z#GS{YB$#J)stNcd?fEK2eJXp+7>UxpC0B(*}MqjAg(WyY}Be`6A}415-+
zhcWp0D+YRkUe=r%-3<<0sKs1mbnXNDU!&N1KEEAl5}0Q*zS|mSle7VgTpTtGtxxu%
z-eZBkRnx+n!LK;n#A0(TQEb6tgjN-2RpgwXoqPg9
zFeHam3_`xN#W_%M?+sFfXwas6$voCai!;->za_0zqJe$b|Dj1bt|byq$^Jw5Gb83-Okl-r-HUe?BcclcAaUNYaeEg
zk71q(C46P+sTC!WP;c5Y!lndlz{Fxamo)5kPca5Nw0kTes&=C0ky;!CPLI*x$l-Bq
zBx{m{pF})!U#&z#1WOd9g_FxQ8U@8R{Sz04v}L2Bg4!pw!e{HFXS383dV663)kHhO
zMYH7$*)K9ivPvoHx3hKW9puU0;~vP{SQ!RE;%f`(UB9KYZ-1*0$js~D-QB$ZQL}0r
z)bHFIZrt0}`Ppc8r{8oJp8^D(f!dsm>;6Vvm=f#81KZIjx^*2^Tuv2mKr<+?7$3_Y
zcB|5Cd6YCNYZVX~qyBN-t=$>NUr`;x%d-WifG}PZ_;*Xp;OzC)=(JpBN7Q0)9wOeg
zztIS=DS)L%U!8G6qA3bacA3|My>jXx53yydOOd?DN***z5g3n0Pfo|&?8dkiX5bWi
zaIT$lN@$xE-jHDho(UKwZp?c7YqH~
zBklp|X6uui9`mJ=Fv!PAcW4Il#g-%#4<$sjJZ-hjJN+5SX!#n9PW(YHCwgJy!Zgs4
z;vDYH5rn?6ZkwxPkE7y0lB>lJ{AfKd{e{G0VLLjsn9jq+Zt`_G_1X+M-Iy?Y=JkXuQWO9syr?8Z?&_uZdU%tnMH*v
zwotF0x&o94(T@?TmEfi}ajxTrRH7amN8VQcUjbjFw_=6Qc7EfI#FC{-hv6BoEg%
zo$|?4&CgA(4UO`2T+U6cwi?uyHhP}_V8A_k!I-@62ykL}0V>_jJrahCxcMHHGT+q#
z7vGE~!=dA0!VO}AJ#?a)#(LY97K4yN;moDqxEui4nytq<
z_NhO;Wvg+C&QL1%y@RpH;oA)+jTnssqO7Z#W{c1s_{Xaj1oufC1(1*u^{oq@OVi5K
z>`6ESnKB|UP9VUQHf|*|dZ+Ss#ag}5rt4FQ4&GKYhyexSh{ch9<5U0t75`@{Vbw2f
z?EN1g#s3$U5U>@%oy!LxgM5SDcwxZJ9UODI^dJCAhYC=Z0x;369Ns?!K+*d8G@rcz
z0|3B-%Nrc)2qyOfdjECJYTbkd>itDZ0kRM7A@%$FH?q&Ey&Bs8qWKiq^e_bNKaMaz
z7Jy=xXe`Xc~BOXY`%$@vOhrEDJKc1BT5p!NzK@e_#u$5wx%-O9+wNH+P!CkBRU@G}eb^uK;>bUFIEJ%E%5tn6omh&0>Ua)Zs6-t=wu8rKt@
z@kCfDKq^*16U0&sl;`i#C*1AeWkf{K0Qia_ZJ#aM?d<7-y9y1x4JhSDJv)q{KO}m=
z0+9L&SPNmm&fqUN`4UaH9^(I9gLE%iv?gY2)PUzn>z!sXr{o6KH8?;DE2{knwb-4U
z`+Ep=N|%+2mMVv{-^$se7-iiI&$^ulZ8(4v=!qC@2dcxZ>>4+VT+1(@%J4k?7&V~!
zW6P*#U0+vClO@A-p{#>Z#V1qnj~V;3Qa+KtK+Z((gqt0siA+7+3G;C}=%<8)@-74G
z|J0^w90butyMHobECkf{^@IsygXtp*O-b)HO~+)vhM(zyTo@#K0=$H#$f=;0=wx74
z+4svWLmrFky`YN7KH>jVXaL(EXPma`hTUxrOU;mO=bE^Z&g9HiYOgb|ckd9C)U_B>
zb#MqjrJwdyfGy;)UQROwrWu7M(_I&?dB%s`WSGluzLuJR9ic$r^0vRIh8Ltx-aD}k+
zmetSS8VQ0*1VeSY(w3=UTR-w;JMg49qH>3U
z>5(#uW+T>rp-DI0+JUl6Q^?{rom)rllBabnnCBrr>CjpCecJQ*CGjx;a{Q_%Y-e&D
zi%Eq3f0z~UDyq$2vOl6*zAyR(3o(|;4`I!jqQyZ{$y6UuKgffKBMpO`_(Br+jrj63
zFa@9kL`8r(bEJi5ZXr!-YKF@Us0%U^vY@`gA6O0_HRJD$`AFro@L19l@PZHDtH8kU
zAw~m1;wRFi;d+CX0U-99x^EDn&&{G+yF(@EY<+EzX3Ik7KDl71IKruAUZ6(agO84f
z4L3*xUJ_<9`DS&b3iLE%_#!Wnw;Ynv_YBbNVS;Ypjv(;GTVIMy-@n*Bx7-@s#7F>d-finOe2Kh?d%oukQFxie0kZw{}QNVhm-s6gd+x`(lS
z6dy1fb*^LU!zheESdB8_7d0EuOl;5~LemqBT7E6WXbDhV*X^-*(kE`%$!27EP2K9q
zB}&l=y-dl4PK?BVf1GV@a)r`!9<*!^!xT%J6#~sa-{7a)S0A$XqaYqovchM?9&4mG
zm-*X1CED^m@&_NiluVu0?+DnkE11!mxuj3n^IqK4fzuN@L)sYVz-;!Jagu52{t6|A
zZ=M7Z>TQw9)1{)cE6$4twZ}fT1&{}7-Y}=sba||W>c>|Nc}tdMPnM+%S$A8<DNHP*R;WYva2S{e#Ar5<4PEcP@p@yYGErcXE#H{SzEWNz&+u?J
zR-TViayJP*h|-mmytx+~`Q_;6ZJFUpHv&2yGu$8^*cf~w-m{6!&l@ta^xfp>{i;gJ
zB){+%MLEsfrb-Jw4;x&5_^`Yl5MgEOd*I_SU@}2apRF^WSEGRUptJfgdM>2$nzR-^
z2c%H4^Z7o9HHWC}1}hp2(UdudhJ%L=s2O&iz;bV6cv)#JuNGT%k6SvFzu9(I6}y+(=aPTPc$^%J%=jifkS{p
z7wdLrFNq$bHR7`>_3!QmfDU2C6OGL~`OoJ%sBBPxTl*i?#s3$o|GS%FVqi#;F}V^>
zNlCF=YsD%11bEE%=mGI2tyr{*wkwTHWZjPSpFe**xY019#r&kvKM
z`3jpaTXleo`^jrn;4h+#j>rWZ6ia?+mFPw%$NMfwGOdIf5=&FEMfTD2&BhmetEr0XE7HI)*g4R
zVcP?q3tG94@KF!}`=^zkmu{!y13YS@P7E$^dgDS?#R5*PyaFaJqIKcb<*dBDL_&f`
z*#}cq4tesLS$XI<9b|>Gb5*6}$_IcRY5%FKueSPd`J!kII1io7P$OpW;2mN9`FZTL
zDH)X!`>5O(X09=@GK4ZcZ#x9yPpK50qVH2Plr)^I(*{$FZQ3AH&-^&iB_=VB9j8yZ
zn5I$A5d0>2rG|^b)*J1oZhcF;Ng8nw?EU)A8cs4E2^wyY1kARF!`u}cI)dg(`{z&m
zS8PFDC(g(kH&i=zKY=aLt5*9ZxZjD_*JKFfHIth9iE^7aUU`y>75siY9&!+2^B=*@&`zQ-Oli++CRm>wr
zDoxqPM|d>)m&fFKh}rQi{L)LXk(P^9!Z74$G~Y>;cE!lD?HXsBucu0&JCTjE{*6U0
zRndDx)gf(voTxJ4Llk$RFv&;zLe(6lN=XR>1m+#y9)aP1&YUB73ac|CWUfo+yc%{;
z=82}Vk*nBFfi2PWKWrB_S^9N1s;@?oZuIzhqW6p9Qm@T7m%kRU7JR8D-ya;$<`R@#
zrs_S_BURQufj`-5Y)NRjXd6^yOI^rFV41N86T>+ZjeGJ868&POFL%ThPp8}mnUSX4
zRdN!>QCUw)Y3|QJ3;hUHXFd41uT@RKSr^K;P_RDM#EueMaJ6K%XSN1?P|wcOLkUDk
zV}Bu%@VVOOrWSLIN{7u{ALG){kjBBMD@IMT=6q|R40g__%qN@vjU_9CmE8-xMn|RH
zgy`+{eOu%>|5QhpA1d#$n>^9q#YTy^V_YPs=e(rKuTU^*v2{CFr09Ll%h?{(_x(mh
z=HR49)!0@-V}?Ut(ko{J^C~zqg4!Ho0X#gKX9|zVd-wOhI!^RPwb7;E`OMs@*vM3R
zK1u(PAi};}^P-M1G~-NNTeJ+ZZ82ocV3!&J0PP4D=&35OTstB>D54#
z@{zNIsy+HGfZ81BN-UkP_jQbbJrFVH{XpT_KtnOLJE(gR6Kh#{;3hOf(NB^hU0x~-
zcfh&DJMpE~%o?LA^H!}?+blMFG+t9m0~N&EOU71yDP5%&KH@6C@q@mms32*s{ON$c
zz0``)-{m{5LyxP8Sng^=k$l<}jm%`uUi}TvWl~ZcT-M
zT0OdS!2S3qjiMor^DzR5%2Akb+#MDrspRiBwRdjBuC{cKJVwuo#pT5@ca|4$e$5FNvEjfj3&GKEqUZ8l4
zAx44m7a99Qn0CDhqL=Lf!VRVcwq57IQTkr+q8MPr3=Tab;Uh*jUKr3bxLK(hijqs=
zEylx2=~=Zjq>d(VcZm-OsxO{xan$5HqMyADImrX%cT2*Dpq?+
zsYAx_eN{|+hGMNhqx)vaZ2Imz!|zh`65K`SU`zI~KUJvYJt1Ufp5nGOgBcUx?^al#
z#`6pab@H-!+E5E5I5WhBDRH9KIyZFd7`sNZS=Z~HM9di)S&@RCnYXQUCf`^@BQ+IE
z(=eIdl-lN}=fCE1rQH%F*ueBzO!lbcy7JYh5?cF2vFiMWHxJh`a12zwRygwiw1~@yz%%
zzcp5iP$lR}?tf!i7dv3FaDg^3D4`$|_(y$%e4!JwJ?9DgG`pr^a1Ij@ucf8Jq3M84
zo0idTP2KNar^Pn$ukcY_^0!sL#6U?=MFdLRd0R`2B348fx}(`SCkQ}FSW$*ra-vdc
z;!+PWk0yaR153_`~l^kF!`L@ot8@=Vx=>!L1=gr&;#3SgO<#`KID0tzf3dNv^1xA8k{dnuzQx`hpcHQgTZ&8Z;`e@+F^7LF@dYHFHV(Yds)SWM~o$
z0ssWm?X>SU)
zyA9@oym+fZ$XG{XnUd1a#lt24t-r+4;BTo5T5d#M@+DxFzR}wEwhNZ&6FvtL?eo#!
zQ}tq!<-^eR7r0|c_+@UABqSxmq?jfIbVDW^O@Yv)Zl=^NiTJ>etj{64#AAVIyrR>{
zrd!5>F1go8Rzn$zc5RS@_Z^yoM%`<|Fs9iM6O(-wxrrf`j|<^<@8nJRZkK*9Js}c*
zD7WAjgo$R%LIqAN
zo;wK@oLCYB9*MCi-OG-dh1~LIi@u5Gs9I7`9NE`w!qZ9t$<*9wq{z}M%+-+J9(k48
zQ5h*$Tc_=4v1#gD%|sge6Wj-kA$Bgj*7QomEJ8H4Nr{(M!H`w1{W5~04;phJzwVsn
zznN&p%GIL-caUiiL*8|aRLv~`9av)g$_YwP+X-RYc_a~U8wkt)qrW!nIi`k@^^@d~0X@gKzw=L7E=LGr7IpL0(hAaU?wNm-SlrUueYlOfW{^4@~Rv1aA+Nw@hYV0ACRj
z@PPOd1qAP=wm$rN`#kbH;QT%lm43+to)fI~z`^=|S(mtCPA1-)2L4PYI~|WxJK=2m
zE-%?<83jX$a3vzQRqK`W+<>G@Z0G^aKLOWw-LtkEQmGWd0;zS(F+sQ4m4Xb%_qYwQ
zc#L*h$x~XJv*%@gRlWwc&!W$x>5BHXp&7^bTm`8F8z0WP{LzwctC}UXC>4nj78dsg
zxRdb{Qp^RIEOWwyo#)(!6)Eq(*|O%8bFvgx^U>}8{lQ-*8-j8>F>l3%$cx`ptQRk!
zv3tHG79%%O!;s6jqZTDsMlh?1II?v*e^}RhKR94%6G-{#Po=x#NpxeVLYeUIae#-M
zWoJxt)WOn*-7{O2x=^#Dm@NJ-2qAyS{eg
zscEd2!hH3on;_X*n>8oWuiFt#%ez+nB@a!&k!y|_fp
zQCAWQ=p+NTs50o~Kcj`;ch*C#cg%a5RjkvoEYU^to
zh2It^v^W%ZZ*eIWtVN0iXrZ{f1rKh;-CaV91$X!2uEE_QXmKxZ{`Y<6Iq!39<~(1{
zr|e9U*_pj(*0t8}y4JP7{C3?(L~V=LO}|!81=s(|cRPGM+#v1^!sfy@Pig+%u~UBj
z=B7C1e;
zQ`kM%SnZ-G=IiYw&d#b%d827(HOYyDyO}!nf|sXy`#Pk{@c9H=y5tY9R<
zb%GALq$L$}W8<@GPH(dxSIDGhLsyiCX3oP`s!|ne)h04eiDwlbxfywuf7rfsP9jR-DcYhbQgak*5cKkx739;~
ziU+;#b+YUR_x+MUGlWLi6|0AS&<|6fsr|_I;D6n_nQ?#`1INL8D4zGS7My+W^i}RD
zSRr0ht0NR=bL!n-Zxv5lTAjmt*zw{LSYu(2pqgT2m4&flom=;2$%#-0qb*v#@&av>Sep8T3x4XuDQR;f_avE
zLgnjY|FU{UWjn}n;RURfBYpUC*Cvd<_Cy+2=wO*f%e56RK+U_qkEZ)D=&E(lBJ9UQ
zQ3qeVDXR^Z5>gy`t!o~kQVCBz$qKHUSIWRTJgp+PET{Ii=u#t%JET`&D>}JX$_x=Z
z{AG9wp}lk;L`D%xG;6u}LVmHrBhc?&b+kPEX927`N(P**Oj0mfs|&$0a(ud3t@jdl
zx#0UaxAm<9_x_Cn)G3LGKs~H4!rl-5$p+B&ivET+{VB?6YoaT(ao2mw>!^?6&VD50
zOeZ0_mv!LMWHM=cq9)+f+$*zW
z#g{glX~alD=Un+6d-{Hn*c7q68x=m}pj1-DA`y~bWFpP*pox?}=v@b7@vV?ka#@p!
zspQa{6b*K=5a-~pUa9j($eT%z;!=%mF
zVs@BxHRXZtdU|n&2ndE&f40txM-HLEl8z0wHVQlhZy&iRs`z2iZuC%zPP|ViF>%s>bv~E++$VIkFE!M3bb1obartRoD}N5NL~&pAQ~9O
zSyPfna1gPvvkz@rvw}$8SquByIJ>QQM^0CT!Eeoyw!UK#VO-x#jt5@OEaH;?s#A_-
z9U7L={IO?aL^;O3w;LVgh6rxqp-MKWFbbhH5a7{pD_ExKz_|EajE<)7bI0J<$xEBSgWNN>vdr*0Ozff?T*H+uE9xK1S=4s0c=fK*aV%49;}L|+KocRrCY;uxZv
zNvC(D{MnaV)FD-&UL@&=Ibkfpt{R`{br#BKNEqDX?AJ@)k(HkUS@RRi%CK5LO)F{Y
z>Q$DOSgO|rhwEIvs+k-c+3rZtLyobm+094+aXp8H9Ut1FF?|ZDS%^J;g_d8Wykm9{
z?nlG2wWFR$|Fi`~Ghkd}|rI0>A8ZGON*
z-wcvY{>?hRv)kx(Z9aq#Eb~)<@~<1^bWtRkpK*6z0Ou-RIV72J&_y`s5}IetREOkg
zi14Ct;D|@2)+sIx;7LWvhtq7^saq-{{PHm+{i83Tp{mn#b*WJZE3N2ED~Ak}i6f$W
zRzFbC@#MbstuuS1e7FNkdyCc|Je|H!{M6{u?en>JMItlq_W2;du@;RO)!$MHgXX;q
zRTxSmht65Eqf-}xl?^h=^J^{Vu*}=i?W0_p7ouxkLUUQJ)Hbs}n(c7v#ze8{yX^eQ
zNkT;JD5kZGaWI8>^tPDx>#Gn_Im`CduBVEz;Sv0lq
z=|ap<({hiN77f+X-4$gK08$DW!C{m9sf3;-)fjb;w54?aDFSPD>()#&pi9h~QfzLPF7WKFFOK6;CRk54TCG4PaxBzWr>QDSWio!-<>j5{z#E
zsFJ&XaG{d#_k5FscVYDuHoK{iyMbFXrFh4)9VLG+ud>6z3GtQ3r19&(U~NZ)5dMp;
zCiT6IDL(G#*(i{L(nMWPDja0#=`h?WVaGyRMZ6IE^O4kLxuKKsTCWLY$+Hp#D0N_=
zoHkaHI50ouUGMa%5>o`vnKXZ!_LKr=^x!pzROIG-Kgjx1Z=TUnJeIW0+4=%Tg4`Bd
z8XU2zvE3lK(wp&zc)>rD+4mb+$|X_4qW)3ay}HIx!q|05rGsppC>l-my6ACeNHh*f
zM%*W~NlZf<(?mjr`t77^_o{j!;1v^G08*jK*l7SLv$+$3!7b7c&@*9w;{!r>aVhPG%gue38inEM?9lkEKHzI
zDSWKydEORDW>Un2(gpzIN}+3fp3&dCU%xj;0WI#u6j)!#QpqKob;SCXrxC@P(^roT
z283avXjg|@yF-)rNR(Go=n%7|f|7^eg>M!aR#@>y4b-=gu&<2#Zz`OgnV^mToOL
zb5xPvh|D~oC+erNoTE@m=0~bTt5|YO<dgJXP@ams~c7~
zYAIYQ2jj_1H0E(oz>6F9Q=3Zo<9F!De!iQH4(u;wUk5C9{dSoiF&)e}i%+agH0=uG
z_~x+G7+vomOEF5Sg-vC#m~=89Ymgy5=7B#SUM|2j2Cm9yHoXo8Rer3{Z<`wnZ#cSf3~`@eLGU5a+MBTH-)nlsWxJ{*K*RMSF=S=+s__`
zhTH{iC6HGljyA_$`40a;eqg@jV?u9xPKD^LST3KvziDghtT_}hKHHeC?M;yy9lJDh
zP_3GjS?q|cq#R@+EoG@4A&erc6*PTzW)8!>@T*%1+&6_vm^6@(yj!}6{>ZdnJ;0M^
z8*!j<@glXn%pFP4jeW#K!3WmM?@=6C3@M@hg@u^33dZPdGLlEoKVIhS8M+%xK8
z^r3N>bI%B12zn%zYxqmywHV{2iQEl#lNMR&x9#?1PTAafxRST44OVb0aJ_fO<@kx;2Y$e|+AIEI_6U7GO
zuVkdFDK2`ia4RT2!DlpxjSjOdT)(-x3h1zeN+&Qy=?DL!74}2)9!-XV-5YlSmEXun$q3C>&pclqRxt4WI_Z7*?$P^M=$(!
zfyS)auULq?8wnOQ;`p-6KL%kAUa$$bSM_|S0ChR;=`boCxOJjTe
z*a&)VNIUG`fQ3+!Hb<;}+*OIc0NGRgMTBw*thYPD!6yuPX=5v2-4EQ(z9II0Ztl6D
zg~M;9xTGPT!s?tP22m2aYUFCN;c2_j9Io~e--1IeleRFu#!m(7@?XoQc?B1dflaljt)sQ?-_pVdoV1oti9F`Uw>T3E^MnN?o$&?c9l`l`q8yV2Ao{
zI-B~zGVr^g^VoXdIZ2y%zU~=)x*9xvi}ElEb{{@-mU(Tv4nD?c6
za?~vb%$=r|nCZWtZQObZUl@^n@83lKdfUn*^YYUleThW4FlKMsaL)W;H6riKHC!zZ
z&u@L|nf#aQTpO`D{TuMvr5L0K5IHMb_V%^(yNIl(uD=H_We%8aSeA*Yy6GkHW=2X|
zgoPZe=nIkrg_&(v+DT2f`xugFnp|%}u8uJAl5fa`;49-(&mV5bDmfDl!Yy_kE%4|B
zM}^bvqypi)HWq-#Y_KKPMdcjVxJl9?eF5QvQ79b85zvsJ{Wr@^-r-0{be4QgnJ-8$
zTrT%IaRZ&a^u~6oT`1TXfaJxtvV>!HZnIA!R)bHKE$S^R!XCYM43qlB36ola*~4Q?
zT2P<~haFJM|42Z|)u~gqCPt#tE`1E%
z7U4@)U?8n*go#?-mS)ht2NA2ToQc;fi}h89U*k)|j{`K~5=Xk39s6{Z&qS2vp10&%i%BJ@c4q?SDMy{`tBlXk=?86;o
z89jD#^S{Rto_{y(#~-#;$c{*I`Ir6B1qzpi=+Sq)gw>2)DaB*vyD>KO*NCVtC)KgZAh>iKa~aqx4DK-?5QqeBErX)Q}MhT+G-@j
zzl4baWeLvr
z(B$rnQp2if@APh~YGdQ-K~l!c44J>pnU)EqFqkfZTWSnfbf^Nq0Hc9QbCG(X*On5mgnT7@m#|fo|Z^Y+jbQeEiXfIvUy$xC+s7Npzm959Lv(zIgk1P2l5XFGFcQ!ph^WSc7
zUTEE96LG;D_#ldZhB5^}<|ONqTk!zdu>S=F@oD@Ef}{baq{&3a525WCuu01(NPZ9f
z_UqObt}t+snLF}MRmIXAq)c+`Rsh1tm`OMIp@3#jL1;^U&59_s{B=_d?+GA>i$(0-
zqrxPQ_6~v-xJ+QTaM~MyVU?b1;l_IU?WLFNZI*J>5zANfp+jOLfa|y7iM*@yFJd^y
z|34V2EMN|agfJX$Ne@kLM9LR;D-+F~)xzB_?f(OY4)G8$Wa_a->WD^?B8e8~F@8Rm
zGv`q5fRweSk!^U6C>i>Dx=do7(I7!;a3uQJ${RV-9DmIb?dv=B+vU(pWcZt<>BtM%
zne~U;JAHOJU!Zj4L@ga<7#!z7pz%xFSBZw3@ESOaQ1>iiO;hS-@GaF6V$$Lo{G~n5
zXz>oQQYE=nS7?mN2ypnS*M|XfPK1v3^v(Ha7O%gAvoCO?XILVb=k_M8|}5pnE~=-#_a|}
znAS{~*fE43hQ{oF^zO9PJK15GXCce(VrFFds(cs9}8dresgoeFab$MhA{(s~et#LN{K>mbWs
z%jy5+3kKat4L;9X=1W#-!^-#(^;BcR{9SUGwlGL19v0;7K(u)Uw(gC>d<8R%KVQlV
zIuiioN)ur?@lhxSL-I`%ddD#`-nTWnA_19(Sb%&J-6I(<{#z};J+n(gzN}#xDu7G5
zV~*0SSZvu;gP+T=d+kdq`-{3F)%MFW=<(*jhtH~d`R`L?GI-ejH9MA)SC@Lv7Wdf|
z-5Wu}C(y%TS|U@(g}D+*?~-bITO{i&qPD_aZJ08i_I&zX>nAiWqgj9ro%}mq_7B0a
z9lH5~h<#>%^sS~IHNnSv|436*&@=BTdOUn^c(d|~$S^vyMYKX3L1OXMw96{$=z2E8
z#15|ziI++WZHT!Qz?o9#gSKpo+Q2vhw{cQW?##^MAj|0GZYw8t5Vmji&p@I|g*oNL
zTI-M+z0s~Oo|~e8v3G8WL~5A~2&;xAgs7~iL&S|SP*)Imv?J1w!AT*`b~-=Ej334K
z8rWYKvEJdPC0|WwT*E@^alK0`9a}1>ZaMqPk9rClZl~L`P<5m)-He#tlsLUZUwGHV
z%U*<5cz3`&E=$j%WoDLGND_&;X(><}2L7Fkhwio4+n9$Vw!&nvMCW=G#*4f5Jtj?2
zgEhD*Mp2aWP+hkB7qGzY$NJa%l4IoVq2KYfe|ab(=)9qeax2<(Ki0*$2ll@d>aSDS
zSf?Cm#0rghaFH1TNcr}iD$wFSoLAm5Mp&t(KOShnum(CLx?&PeK=FF7A5JNo`E;d|
zCKhuE?Syvi8du)`I2j`6UM9qCquy$?I{?4SkB8vx&g<`~TRn~q%95recHesALFGn<
zMzIfmY$6ZTvid^ox8gTxwGGt+%C6{F*H@CM?0T*D5xu}-GSb=wZiQ=tbIZ&dZ2-K9
zNJfAah6w?R04{767>(7BxxGDut+9ch?a?E=6Y8pCzrBUX~7|=bDGsFu^BgG%&SD$fMfKV
z9QLD0C~@4mr(0U|$#u=CpuZBk;q$f4@0K44`dj27x8MXsv~xW(Ydw>18vL%w_R7=s
zziSmr=_nIf2gXqqFFTw=A*tgx_%9o8Ao5@C%G{1O^Em`)pp53Xaj
zov*KLYh2yRZXk%#hy)E3MEQNhh!Xw92U{tWz;SDjfzuSfz$3r!2j^AT^nl__QwjXj
zf&2%a6*BXTRWTR=wO+f$L_|FCkKq@@ZMM%5uao|tg>c|RWq3G(i0H+hEC;&
zi;}bvpqZw$EOIJmFu8R~lw;NH=;~SvNf>lH?-u%C-4!IS$f-7a
zNOiozG~RT+FJe3Dz-+b_x>;<@_Y$BCUr6nZT(S##hQBGaJLF9|KMYibFfD03XtH3$
zFX^%)2uDP&V*+UDj9q;rkI~W@7ys?g2fW~$J8a&CAZi$7nASWwmaQB-lY0K_6Z@;O
zNmrv18X3D{vdav-j{A7_FVoUv={*6@Xd~LV%#aP9$3-cl@?t0_O;SarFP$;=q4=73XaES_fNKclPx^g65i|FsWKmOv_Y^uA0
z^Dxdh1z93Ss804v)CTL(`$(o(x*%*SYXX;DU67X5rW(;%HULZP`MJ)utwOl;M{}b_KksX8?zsWIQ#!saxnmOfnYU=8J0$it6@XVHjv!a70nT9_E2G
zc^X4bRO;>2-<|6ZwZ0nLC~ZBBPh+1wr)n&>Q#blPzSQ}kMF1L+R+^ehHChJxSVO7|=q&6s=uQk4Ww5tZ1b
zRIP`0ms<3vnxw$22y$*Dw(Z6nbr542?87*|=cl9y><+$7sh+I7+||rE_y|BZs|rc}
zTmRI|oub+DvLQF{#^Hec=o`w)@tf^2lY4lNnm8z3=nz-Q{2w<*e{=}ichh+w#XgzM3DFjD_=@U!@{ln^am5ozj#jk-1NJ%n
zc56?=51o);;Pyhd(Aki_sCe+m^wO40eI&2ts#>5dY{M6`oeey;KHLI+{;trC2YGnrAko%ig>c|Ba4@19LY_wulUTK~o7p4uz|Q
zP}MOaqrK#y{si0$(#+w)dlmTm0Eha&dXg2KPz-kRXO`nk-D_CO
zURXtYr1NTLmp6OP7!}hAWU-;ca_xt85u&4ZJ}mkfXuHp(;*PwJ^I8sSts|EsG%BLR+weI!-s^|xD{iHpr=A(koY+IM{DHEB@eK?fDu9_yNy
z>Zn49q8I8_S&;flyVyy)W{^pzVLxT2Z8;HpAW@l^Fpgd|-!~}gqKhqm)R6j?9e@i|
zQculc*%l0MJLhCqiw#|ty{zIMzkjCq%2T?ihpAPF6eY3=(=eYEiiML3spMi`Zo|zpgXVBBhY|TJvdH
zi$xXC!T4@J)M%q$lKnU}BL?k&uVW&81jJRO~_vZ;Bnzj@Dlv;NLL(09)-dVT#*jdXTN
z0q-nYCO^~Q&nD6z!!xKpa8fi8O0xFZ6^B?%15fP%Ntg3@sn_UD^oIvaf3%dS)`<6~
z_T5f+bN`<_Xo
z%Nd#ToYqvR9IH-N2=UmD=u@RBnzMhT)1k7=2Sczt-5>ye)88Ny)Sxu)md#w*zX`qX
z+Gw5A6#%-7LU}5!F81VBuN^(OpD|b!|1d`|a8c|@x0ZK;$r*4HHh~4-w6Dj+omDSy
zAvdq8TLD+uou*%&f;12f9q+nF2f=oF!txrm1!*Oyu}7sbwU_Vc#cll7%A~&IKZCuI
zR!%5VaRDB<%d1n?A99LEbZk%toAI%c72{IgH8)Ux=}NXPx@+@E(#<-f3$_SAA`@Nb}F{3)j}BSFrn5u&$Jz;L{meElAM6cU{8?
zDYmL-F0@-XlL`m`Y(mVPM?bFm2f7tXh$ZZ!r@yu2fwp+@@LJWm--%S@UopSa)uw|!
z2rRy2JP7@^kjzp~+SEbTH&o_gy!J7lY<+as1i)mFa`GIE-7(A^rJ^F7;wf}m`@Y}T
zPFq4Y*A%px*Jw!v%#v2bMWyB_a;ClGcdbA=URckw4uJd6AJ&rvsgJr-oySl7_y7h4
zovieffgUB=!BAtsO3Oy>s@^4Gm;>kj%jh=jOMc=1LRRNP3tRM!y$s1)s$caRA4YQW_$NZU}f2p*4J}#X8
zOqP&wiGsl0s=6%8^?SxyDxFgmQ4;EB)#>m?wG3F+*z}q1xf1PL%3Do3vozcTwcbD_
zB}M0zmy<_8TOmTX&Ks~iwvT9Nj?|oMx-nps^pD3&PeP^{|Ha3N*Dl(hIEM2zi*Q4Ln;dVqQEe{h{
zu9@&%Ra39Cb9_|P$1nAI1%HuY&H_cn!%Y(v>uxV?#>AZ-XV;=Q{faHN>>^bBgN#F<
zwC441VLMr`JHITg2*FMKld+$MwqQQ`3O4JT@(rTrP63TB*B6!U`6H`}dQ+>(kU^0{
z+aELC=w?b`0d77%IJCqETF)*IwnOs8#o;XA9Nh)SHz%Z72Tu_^SRS#3T&DN0s=m;b
zZfxxjTJU=4#=T3mDJ-51eal9fV;>lZ0aJKlxHfjVN?&&}22As}{M>eis;CmyGhSo&
z2bHQ()1Q*@yLqaowlQjDfy83{hr7t%QPZu77~q
zZB)k6CksZ>zdEN_W4OG$avQc@AdgP_ig6zIJfFw+eX7mfi8IJKm9x6sFxqq3D#8A~
za}qakZ{X`tR7iuCMSu?*g+BPB<4j#0`){yMkf(cpCN%RCRbVs7r-wd}>R^(V6gTdh
z&CjJxh7_H=*cVDsV4~?W4Sq5aR=O=VlBg;E4L)Tm4~<3-GZsC6%eBI!@zEf>>0H<$
zj|T!#a(*jDkM<25wXc3j!oVt`h?2S4xS3Rw7s}!
zc>W|_y5iZTIXES`!%#=qx2EG3y8^PC8-KW|o)>xE_{)X5*8k|uP685JMqbn}vwLtY
zupOB{71x_04u$Va5Q^KQFhuiEd~s|N2?zf45ObXV3SoaXA&)@}Olc=3i@WSEwB2^6
z{2Bax2@s926jLw@*q@Wamfon(?h|5~zkwRZc}N?6PzWWDrU=o0H{sPgu#ub_*1o>k
zL*WWlnMvB1wW!0v{V>A81$oieCpe;@Z{1q}m^f^9+2KCWX?%Xc6uO?f8AlS=!sL>h
zrRocsz#A}Y3T@5H&)!;EzBC~FQrlQAznc&$hG~-SZ(4!KB`l+Sm^aHywyh691t1V2={&HpZsZu6^(1SytV2y5Y6PinY66iL`f@Wjjwk
zwF+fZ5FP=Ja)hLF36vm1ha<4(2V`j~jqiL93tJ&WeP9$8th~I2(S~jWKVCm~4Q`C3nzg0d
zj-*Tv$MQyuKkBT&`^%$}s%k2~xER=v*@*5itaw!WmTOj=AkBiNyvvc2
zQ)*+RRaG$>PkrLeT@o@rpIJtc1WITO1{{~Yw_
zWy5?V>OwqWVe`a2Iu}0;%h>yi*)dB1#*7J-z?b!%rQYiAhL4pSAp|%YUzj{+f*D&z
z2f(1=0^hxM{btUIyu-ayH)XzOt`H1|X#KB;vh7U})Y6Sz_u;B9{!OUI;=j`q@{*Mi
z6I%f3nMj03Ny+ocyd?&e;1hZbMNyHM%aV!3MUc(&N%!#{^?Xr3-#tPLjp*
z_)VF>t?jA(w&@*%oEqNQ(56)Z?W$0GcW6ZZ10anc6B5=Y9TQl7n6?E^j?yKJtF(Pp
z6N^rnuAY2#@3VW~MXAD#?UK>u#J=3{WKWTX71A>bB2W{AK9Tb|P*meNOO^>eYqBA}|GgNm9=Y0@-M2mHpb2-yUX7hLvXI=Km
zNJNQmlkpjGr;e;s)EzBl=>9TSC)O|yu|M`+9x=&zd>~2-4m^eD8@++4st&U47?y
z?BZE7Sq9jcGPbfdQlAw~U{dizux3!dxo)kXQ@&ZY2|lxsXaN62H289pNkT*3NorAS
z$UN!kahgHQ_E-cjB*tGGdyd)QRN_YiAiqc!G7LpMAQ|gUMep%jzt(b$_-DdWG{-jR
zO*n0CRU%5d^r;DJ3;hWr540Fzy8W(%TNWVeSFEpEhjb*27pC5(SLgXe?PbC^mh7BG
z#zA^eZKZc`Eh*g4HGh!U7db^gxPi3DQa@#YNKy#3mzd9fgvC{TVB3#~-(abV5Gt(?
z&_rjzj$mTspX2ag
zvVes*1CLmpOZcBJzXph<&utnw3xe}C8gruH(_YuIIjEz`$^P?21Y}mCLM@-$Dto}Y
z9Gqgx~!_|
zh9Cbikl7S6cJ&H$5xfw0yjTc)Ndjf5u`Vzpo~1(;6B=|oCFg?N>_&dkp?qaM1m3~S
zZdE%RLA*NVHqb(s_IV_?v{?|8Gy7JS<5~i^*Q=S!l@j!$I#Hfu=kge6di5>t%R0NO
zQ=+6qUb%oi%Gb7wm_iMp!a%xvLln)7oP~;*YVf%<5C%W
zRe58t%ZzQP?vf1w$^Bh$bP#I(eA+)?6eHsOx+3MG_d$ggrgPq_le3S{%%N!yVi{Z@
z5-2VhXWWbLm6Lt{RZpTLs4k9GfVDKdl1=nr#FVOF?6crEx-*YXpYO?-tx9$wPLaf;S1yGeE_AC2
z!`cUfL5&M3tl(*_rrPfdP5J#PYFF}Nb#d`7RD!8J;C{BN#CDAei3><@wDN`S@MasRt1U*QiWMPDli2H$=v{T^py8keF}vmBM9heT|rX6gnpT6I46}!
z)_x@?ZRstj8Y^|BhVi;Uzfc`WIRyq}g!L6$!2iucgqK2&EAbl?+^G_ut0_wVerQ>F
zd^c?sdLnqJ!`RmY#+xopvA`L6k}==xnLd_Qd^NCAYJ?Sun_9jR;-=3z>FSvMxgR+Q
zmkJ%GnT8t-o>k@zO%VDX@bsCL*zEZ&D3M3oAD-B+yF>yn^@lrRD}H7|lYPjWgFY&m+xqZ*x+UOOWau3n@sNz
zzD0(lOG`e4DO0hC`5-sBG@}N}-fjQ_ti14rt$){Hs_=Lp7>fr%Zzxl?o
z=nhb^ja)+9e|lr`mbagbm_!}uQ)w!6_&eA4Fpmka3PP}?+&_zX7MYoDf<_uxMANrx
z1`rUW)Di~gUZ5#8f1Q`x7VV4vgVSS5X|r<^nWIeu59T02Trqr5^3us6Q4$!=1NmZ8
zDmiv0WMnAu;$^WR20PCIN6+~#heXht%}d1SslQwXS1U1SmMmoZ(^3~|wfVE$?nl=(
z)(9H@9c^P<{+zO;YFg9c+jwUtO0-N`jt^ivk;p){Ipqr{q*1rw4v~q2HN#vb#RrcU
zFYsT;N`C&nd^ulh@2skNAs;jL>ttc#S?)+(PZ?w?*mrQ2WBL}@|DQ<+qiXj%`OhVU
z;AwppgSMOY6JcT+;7yp{(MnpRe*%trOhTaKYFcr9}DMW`oHP
zwGcU)@s9sEVDMt#!(LE6qq}Sw{$NLwCxylMYbISX;0>Loby8Erz_7eH6ENGD1$@eA
zYq~{sp3g%8gRf#zMXAj(Fk%Fqc=L5T13H(TCJ2YC^aNks4J3RlnG6E$Ot|~W^C-MM
zEdTEyL{fG%K0}Wuk9q5RJ2+=V_sXKF_t};?>qi!2SqT
zl`Y-x2jgbu%?&gYc`i2{q}b*0@VBEA+wRj@l7E@0hsv1V)F-8|+J8_*NtjhvVd(^0
z6wXe|aY9=2ikX!*G1DjWBAG~wb1=PM}qrbU-
z{^H73Y`8uIy8tzHKjV+@2472;lx)&L6HX@^&BQ{#PENYA4}+V(3OIX_v0DBYWT+^O
zT`Weiq>ZTSt?xO52DE44D<$M5lm`w*X-=g8y}FKDmvkR|m7*-Du2rfo4JZ1n;fuhc
zlEm*$-oJV|QT?m5)b9ZlkpchaAvLb3u&7fy&S6xC4Ha^Jukdy$pXxwoKo!}Z@i23{
zZfHfc12jWD>8y8HiJbfo*@6e;o<~c!jx+Q7%#O~!x<&@l|Hg;-cwlW!F9}&(i8v|D
zN7HN(%d(CND4+dV{?g^n-fM^Bqdmh5xwJOK1#V*#O7NUrc~KJb>8$s8XAhOeKfC*hjfCIh%Rqvk|lT^jS-kj>H24%%J|3@BTDs~4!cFZupFBq}F`fa-FYOB55
zI~754Q2A9`Bo6am`Ub!1Oq+Gw);V7v-ec=|6~z^8P4Dj6J^KY}v^4yP&*x1@nbsoq
zb=v4$T}A(MaPR)CN7%9_wk)=b!zAMSQ~vc5HoxDs`r*>wl_D~p>z3G*kFSjY_pw1Z
zI-kR~fFW@@wlTD@g4Gyu-tPs&VkG^!&*k<|p)^AOBMg>*REW~C^Gn@ZD2rynaIi|s
z^H9%mAd59PBDe+_RwdJxTbalxiB;nU`ai4C7b&c?EAyyHT_Naj&;z!;Kbk0W>rdPh
z5yu;3^qmqhK8rUdHJ|7>EG_qM`S?Xbb@XdmT&Knij1s)gCpAC*ezIwZSc_<-KmBP#
z8Hz~~EFwxaTGWVhjk4S?zW0@7X+zS4_7RjE?(AF_
zdvhmoW|v7ZbR}4`0B-KtVn?)F>rlB_GwQsqy?z$cHK=&9KPC`T*_HF>7787#4JKjQLj4i6xlWDwlst4NY?@ZN0J2d?5_>`mWwvoi=9)zI_G)$y&ipaD8KMh$G~@Q%V37A5v5-Oc6ll}
zpZ5x3ckQg3osnq}8iHB)?YQj4W{;Dh64$Na+dC6J3zvk^J}_$sCjDMjt4ob(9pupq
zPGX;UMt#Kar(wmd#5)50$#i2VN6h3ZKFH&}TNV!_@^9~*JngNb9vW~^N)sV
z@st~#e1U9ATw0~!byT_*7(MO9;YyXx%|_oCtvkVrOXm;%Al}hr{~)$DO9wVAb^{%X
z2jDCVz>6r@p>0N^K;plVkq_i#P7=+hP&q}rb9mAbrP{WtjXmnw)Ydxyo@iffnju2w
zzm@XKh$#%d{Yz=N_vsGN25H+F*B;P>2{Lxpz(mBsbRjH}1-tE3e
zWobp2ViNt{x%lp~7tZMINcHLWENY|I;ltV$1L%Z`fowUW=qr_MK%NjtxwR_vyUkkY
zbXU+BvBX*xfz4Kd4@1olpG6k~ir1@?=GA%*@<`7?oT*s3jhUE3bnv`3b!Il_zyIgZ`
zCbNm=;Dl+E=;|^eF_bXnG6)lmYveM;cj}+>
z=lSbA&-wkep69pzSnFNuS-Qm5bP3#!eFmHC+_ssR12Uk?BWLb&T^s^-BKA-6zAhCpv6HYGHpG+;IM4F~;BjdkNfcVkX^sV$8Ea$%)Jx(1@(Or}@uxHYGe{e$#
zUfP0d$hQbicLONN$QuI0Yd|SyhG?f9pf$_lR(*bTJ0*Z(F6!uws@wP0bPqDs0eMw?
zt~9o$SQ{Ray$yalH<0+SqEo$24R6eUjdnJYA6R4upZibsr!^F)KZS?gGuK=vlkU>6
zccw^xKA)eJrk@U}S2RqK=J&=VG>|`PxM{+2&d#Fvp)5JMZlIYAR*!L@R`9eLi~3`1
zY)%&;|E}l6!AU#4PEn&@W~A!WCzdYfg&mPl#K5_7mHp`h
z--^*zl&A@GH0GBFIeR?*Hu##{NqopiLF}%R%UoAUsMk)Ie6ahL`G*VbQ=yZNHP`Ln
z+=}%t*|yMvGJ{<;r}YuM=$ki5QQpY{ju$R!)dKdD4_f-Z55lEZCv})r{y`M-LCSf=
z{&a!s@+V#qq4b<*$6;So-w!S*<+4a0I}3-BciFL;Rzk|X%=M96o_5`+&itp@Z^f3w
z%7J?fmWD=i<7!t&qm*P9F991RnG5>--(tPf!|
zkLy)b>RHawiyX?TxDB3hSBH&%tM!2A>Z-RAF5jHt?P-ll%N5g>ffj4g7e`8aGT)+c
zC#Z}nnVi4M6FscUn7uL$ty1pkP@BoPyS!7)K|23cTvB*1)Z0fy^)w>*Oxzu}U6
z=BLPW$=#E6(4>gsm)a&2dB!z>$fJ6Vmm&m)gd)%X_62jDI{VK0te6)QZ;v1k*dKrS
z?McWWFL
zA`LC2TNgZ~9jLz*K81LA5+_5i7g9{kumNz-Vlk00&-BuwqcO-xRebwe_+TgQYZKm&
z)ez6eEDQ+Z-oqe?WFQA}xYxzw50TlQeOL|6c}4E)mBIh|OJt85SQ!F2olrttT&8fGi#qK%cfRR(eaZFsUPn
z1>$24x6k&XJgDL>W@y|?*gy-0LVVA#xDwCA#|(xeHlw#@^&N(z;P_p+Oz`cLth!ho
ztnYCLrlSylh(n0Zl|It7w1D)8_-OB$^}c)geW!EAU!hHrybRbmXVIs|-1E3D{b0Zq
z-Tm(NDfqccU3Ack7_(@+ntxa$`zv%fCvaVf-y;KJkB$Y(BWHgYjkkJY`|59n3{@%P{
zz@6FH$*9xoTDtXLZtpiW;SW9!@;02?@TfiaD6@x%#``-C?
zb@a(gB@*}4D~J~t1rMID?1j*1f}x3H4o2geTpu9m3l1daeH_}MC4pvViwE7HFOHS=
z{0=a^-)+I7I*O*f5+ZvfA+mS9*Z&P@_LG_b>^lIl9|iWvG2kQ|0=}Tjbie|$WOrzV
z2{>+fVdF9k{jT8
zHn+Y>&f02idM$FB9#ao>!CS4t_PBxqLDz>y>D<9mxOr$N!+}c>tlaJM<_nMf~62{U0PdynFz_
zreFTz0|fu$>Ho`a(3loirP{=G>5)8-{I5DTy=Ns;TeKm*qXNyNX9QiS`t>`dq}ZCU&GYjw0>{mm@>
zS2qEWN`-*1{27riXDSCETi1b-%;5i#*pH8o$WBE`E6VBL2JS7xhs*ZI{ga0*pkMU=
zQjY&-%LnBC0(#n$-fOqKxe0Rw`HyM<0I9?S=)6-|TUvS>-GdkZcN+JMu5?ZGcM22Y&qhg;rMLbVkTL*A+s3YEO
zA_`gj0aVD)c=ktV&C;{7xVJIR_@_lJbT`nXCpDsjuj^I%F^m4oU4KMwRjEq^Z5Won3tl0O}3
zgb=6|SOe6p43+sx?XRO4wy{Zy89|GK)>t|;a#Az?NwXhN!qzY}B%$qWb|M9yD5-OL
znlj2NZK$#)78pFnWdi!de+wHsctkq^J?at?r+)mscs!rm(&_QZ*+jwcbBqk4G3j(B
z@5IJGsVO;++Q}KYyxzS(z{yGq#rk51wGhGWtvo0g?S>wU2KjZ4ij*x;RSKXEMpUh`
zEMC$$4uub_sRR}G3^)`h>)^AR*1l+a6p0${#G$R13|P9*xszS
zbNdMEE0%33h&W#xon*HGt^flS?#sq*DVJ>^ZasZAOQ>iWqx~6Sh05tLA@%4HY0gMd
z3OdFUf_l!WOcMzW&dVFyne7g5*;2<*Kfz@Qmv}-*{+=WDUmP>JZGVNveoe4LSB4J^
zl8J~2YoI}r&3m;aA+=#A^G@zRG??E0WcX5nr~_O+ND8
zYMdDw>&rJor;Plju8c!Wn=6upQc)B%5{&Y5bi8E)PX}?Ft!>4DwJtFd)%DZB7P%Og
zO>slCvZtKL*-e-(`6M-bQrx8UjSxg>7L5g?P=FXLFf9z`LL2V5R$5KbTsKlyO@vse
z62&CaqAFhx2#^H%A#PE6#fQ0g$fAA#Bi$(0LW`a=r8Gw-FP|Wd_$AP&L5(o25QJnv
zq3Aj9$BdkNB3p7rEqD1)>7%R*p-{8I4yxtfgTVKAdoIAH>Kz?|y;I-5UNxDUpM!{h
zQSi`q%m0t+a6h!mHP$)rRFmIj~*U<6Pr4cnXtQJ4vmgAKEwyed-xDvGwR9ETU7
z8xvTvTY{~p4qbx++M}kNw&gdXlg}8=O0_Ev1@7aObr^)FyVyw(@bz;nJwkh6kiH1q
zOP{CWrY3|ii4?~rqZfak#mNnRo|+{Y7h37MgwQIL}L~>Fr426rx6dW(W@aH1;a5D%kG4#|M&$37Pza6Lln6XO~|8>}`g9CIB5ZJrxo9%k%Pz#uw
za2C}p>#h3D{^4z2v(obL4=QAEeE|xCEMYA{p#rkgun>th1b+ppeG1#1D9Em#RKE^V
z7Nr7UPNcNrNI<=p~Xv#*Mmf5d@!tI
zB>zz;PVWD85O7$Js$rnuG_)cwm&jDC$&3(9lN3Te4@G27DQT8ate#r8pHwG_MMA9D
zDfqypm<(=!_V@Pc+myEcuwyZN^n%C#8l5+-2(d67TrDhP{5E!`6FD^&2E5|~{5G_9
zq@@a5`I4CUbq{s`!R`?xN-RJ$0Z8myLa=CoG!dmKRfiEP(fPVaX^IYc=D{p$5txw}
zFA5hojmHapr3Eg~>(ISq}1;5td9yyo@yfbs-f!
z7ohYdlp%KYccc)7REYX0{ubSzzyQ%frhGm=;PqP$qep%khYhRjoS!~q2E1Q(c2gdV
zOEKCbVC%yf{}^>i6Et*AVBp!)+L<`T1WoauNlS7#`az!BZ))&!Y>4lCMvu+xUO<$L
z+7;
zp*r8X(1==E?f611A7)%);~y1Y@Gm5m6c>Mh#yH>o!)v})d7h0+cA
zBxBnej54xl)2fcW30Xbq%`Afg;QZ|Z1XONOFPk452$j%37C%-)g%_Q|%kG
z9)53hc#$UMVffnUd`2vufs9tI`__?|RA`}s*HMKeq^OvK@>CMilA+HdpjJqP*(W{W
znHu?7ZA5QMlUr3QQE@8@yH^rYF%c7A2oe`l^jY+Up{!9=tPF@@E|N0J8#f8CSkZ+g
z#OF)0WI~(#Z1F9JHC#*y7u)z;mBY%Q6OC}zBtswngY;Mt;i6!mAUNu~qP_&RRThO(
z??BtvNP*M8XDBsr{cJF5;zFT3h6)~FL_qpaW+mOv63CRj&Al&s>f0SKoz_e%m2Ady
z^fH(`cZUuxUA>v$GF!qt6Q3$C91T6fVzd;J$8$DVH%pl27NoaMz4t0Jjp^m(GMs~5h
zs_0{`*TXtCSwK={ntKKcdsSG-j1DMLmVs5;kmYwoWf;9xtAxMs0bTwi;iK0$5WTV1
z98z=>orZ&!Vq1cXpz?y$*jWE8h}rgH-9N2$Y=~A;yOdPjJXy(H7Rww2^t%WA4!hCY
zi}ptxZlAs5ZnBn(jZVEAhFpJsfr|x9$A>a=*Z!SZus0C1LUBY<#eu?eRws38Sb23?
z62tp>2wbod4ANv?#TBBzi%R^z2mw<;r*3bdzs(n`?JAF*TrI+nhR-W>I-|Rk3-wj@
zXOb_xA9+nil?jtB#118OG3VWGc`6L<=Wu_IRwLuIcE&qW02wLqFVnNWsWm#Rm+fW1
zz@e|8FqoYBw{xf!U+i8~%+$cYhybxcWN1wAKg5X)CZ5W4E-Y$Jdn22`X
zJ1_;ZR
z00nK=M!G{6`|l>`KS6oVhs<}}7!o;k86HRWFGG?01;PYm3ZO@aMcKIQ@N;^yd)qMU
zz%NAl?^o1cZI4OwaoT|akQ5aisA$N;-qE@Iqx}DpRJh;dcZV^eizA@?cW>$cO<1nT
zwdicX069mI*Xn?-Pbda<$p0v^JVJ;hL^j}8hV+S|qL9A)y?}te2s$9=f6ht#_{+-_
z^k*dS3i=evVQpaGm`23`uQ&t@c%dS58hT>&&U7AWV0g!
zGUbK`Akj~IfH_3CUBBoVKaKYX&SitcH%w
zvzO3^iOh%g_k~1Y%84aQ>r~2DWpOQswASrYE@%*Ng%%JZ*d~_X3YjqW_JsD0#$iJ0
z+)<-s_L>sw=gIS~b3U-85Ga>hf6J+IZn^4vYoyPm=|@Eftk3a&>2QoxskhylV)wLV
zi|Iv&W63lriE8!YlZkC#vaAdRjuzZ_mtQ)!-pP@j8R&7f|LhO=@S|RbD6}4Yg_V}z#tPQyOe<;#~<$x{J`L7n*>0|
z`K}P}oy!;55LtjIU-onbqtKX43MuD0l<5^DB9ms%6ICkpnMFb{`H=BVSeROqQKYor
zbk|!%-Zko#&vbtPpEYNTej7Oum@#FDuOuARXw!~PFaY_5`w-r8k#{bOoB(;2)P(vV
z?+*H0mxFKj18+TsJbCR3^4^(#&Ts;B!R^0+WW2$H)#zQr9eRiM`RR9jK{)n6{O~1u
z$)l&Uq<^nn1WkEwQI5i74Ee)GU_m-Gu<}Hq+(zHu7G5x_`=-)3g~aXneYmW3WKeXs=_?6v;qsUh?Wr-Z<*+ZMFEVik6L`Tz}P{fWI}O^J($g
zC-bUa^_^Lk#(Hwvs9lrij}-;ua@wp}L)|VrFj-k!i^Lurgx>Uz-eQW_*U5-@Rj|`vTZl&|Hv|9-GBwvCr|l
z@9fc|)9P}#xDpKY{qX+E(e?d08mX&Twn<7!fubOxKl1EB6WeKq5bFx1@zBJ%${ce2
zVQ13e#N4FcZdGj}(Zn%o!|b#{^!=+)z9j8ZlRdF0=2B7g2Tx|N{H%4@S->cIU^d84
zV{+fZxxOu<40aupR=d;o@HhrGiH3$qzTu#vA@>U7&EV;|`-^KpBoLkp
z_B|GW6VOFgXFkv~$kElYq)#A`Lb;sl{ks3@^f|kQ^X24d54$DWW|h3IpHe(qNAmn$
zLt*$b{Gy$t`9ebSH<|Ng{6by(DeX4l+ZVq+6x*@#!iLy{N{5U?gEsZ?hvlJrWQV8(Ey(B}tJyu)5bL_Z$9mah
zK-n@n^yLD@rwXNk{xz@VrVr+n1&CWL_-4LebD?C$3cNNMf*1MxFzlXqVpI3_St|%3
zj)H=6zS89RURc)k8R!iL1`C6Ah|e_P$+z>JA4DdVUhjN*%HJ~psBPFk`pgS1=l}+p
z5xxSr_v{$wL|_|#S<0MvhdTDHtN*C7gbEa|Ps65r@AtNLx?Gsjw_(m;Gk
zuTO&YLOVEBzBILCap-mC8=Ke-KEXQok!CuL&T54@U#TtCIYiIRD^5ktjL#`AS0k@9
zj=pEXi~QmIwZCUjuRHJ6O%rJQ!Q6NToc-1-`LUDyc^$$EnbmnR+WiOg%B|;kwbmHk
z_ZWmq2mB-Omn^`xE!{H=c+D^3q(e-Y9Kl}0pD(erZy<$>#scS3V^EOwS?B(z)5gTf
zNhtzlfHDJKM_WmbN974K={RQJ0MoKP?pyXa*HA^6=_+>mEU_Ty%wRIXh>9}6WQMuk
zD(w}jnvYkS&Fov&*2-4wb9cNJZE(u0{5i-oPf@M@7Q~|c{bK9ARmB%lVgyDcgPlme
zp>syiqBYi|QA4fAq}Xqr`C78f&_!FBPv~%u$uPdnVgW((cn#r|5RNNBAlt)gH*U*S
zOH9e%##F~y9PQd;jcC8aVUb0aqv3oA8Ls281MylJ@+_YHDA3-RBMat4uzVTG({5gKq-qUQ1wO(faR8cBhwPL}zyw9G3
z;9CrCR3xG)v5VaLc6@#r>K-qo`o3s(wS#|I@IG5$MCD9>)kg9gv7n&JwSE@wrddyj15L#r|6=7dJAh<7JsjJb^Ss0yNv~=
z9M+5pQpT+Gx<>*H)!;v3*HK*?8yi_^hYT@Y4CR9{I4H=2+D~{o-Ree(&EnafMpJ33
zC@v|inT|`JadXqGmu)fTfc;SLU(f*T6)gLeTB4uOzLd)cm1?QV+4yOC{VCM;)Aq6Ui^^q>A!jQ!Ml?_^P7I0vy3Wgo{+YPWz5joIBk~h4BNoGc3T3%YdzL@(C3Z4
z5Z=3~_sfz5QMX-{&p%{sHSq|FCXYUOW}`UyI`rn#<|=XQyw|JbJ&3
zp^Fb&wI%