From d9b45d33280fe67319db114ff677f0a12ba59ef3 Mon Sep 17 00:00:00 2001
From: dudylan <34180156+dudylan@users.noreply.github.com>
Date: Mon, 28 Sep 2026 23:27:48 +0800
Subject: [PATCH 01/11] =?UTF-8?q?fix(windows):=20disable=20font=20ligature?=
=?UTF-8?q?s=20in=20run=20output=20(#=E7=BC=96=E5=8F=B7)=20(#959)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix(windows): disable font ligatures in run output for literal log fidelity
Geist Mono ships programming ligatures, so separator banners like
'=====' rendered as solid double lines and '=>'/'!=' folded into single
glyphs, which no longer matches the bytes the process actually emitted.
Log viewers should stay literal: set font-variant-ligatures:none on the
run output so every character is rendered individually. Copied text was
always correct; only the display changed.
* docs: record run and Maven output ligature verification
---------
Co-authored-by: Lichenkang <2188718831@qq.com>
---
docs/development/platform-parity-matrix.csv | 4 ++--
docs/development/platform-parity-matrix.md | 4 ++--
shared/platform-feature-matrix.json | 12 ++++++++----
.../src/features/run/components/run-output-text.tsx | 4 ++--
4 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/docs/development/platform-parity-matrix.csv b/docs/development/platform-parity-matrix.csv
index b280121c5..143fa6e01 100644
--- a/docs/development/platform-parity-matrix.csv
+++ b/docs/development/platform-parity-matrix.csv
@@ -40,7 +40,7 @@ java-maven-project-settings,Java,Java/Maven,按项目配置 Maven 工具链、se
java-maven-project,Java,Java/Maven,项目根、模块与源码集识别,已实现,待验证,已实现,待验证,Java / Maven,使用单模块、多模块和非标准源码目录 fixture 对比项目模型。,,macos/Sources/Lithe/Services/Java; shared/contracts/application-boundary.md,windows/tauri/src/features/maven; windows/tauri/src/features/workspace
java-maven-profiles-dependencies,Java,Java/Maven,Profile 与依赖树,已实现,待验证,已实现,待验证,Java / Maven,"切换 Maven profile 并刷新依赖树,确认模块归属、顺序、版本冲突/重复/依赖管理标注和错误边界;在依赖节点超过 6,000 个的项目中确认依赖树完整加载。",,macos/Sources/Lithe/Views/Run; macos/Sources/Lithe/Services/Java; macos/Sources/LitheExecutionModule/Services/MavenService.swift; macos/Sources/Lithe/Platform/MacOS/Persistence/MacMavenDependencyOutputStore.swift; rust/lithe-core/src/project/maven_dependency_tree.rs,windows/tauri/src/features/maven; windows/tauri/src-tauri/src/maven.rs; rust/lithe-core/src/project/maven_dependency_tree.rs
java-maven-toolbar-tooltips,Java,Java/Maven,Maven 工具栏图标悬停说明,已实现,待验证,已实现,待验证,Java / Maven,在 macOS 和 Windows 的 Maven 工具窗口逐一悬停运行、执行目标、重新加载、跳过测试、折叠和设置图标,确认提示与动作一致、提示框宽度适配文字;再检查禁用按钮和窄窗口中的提示换行与边缘约束。,,macos/Sources/Lithe/Views/Run/MavenView.swift; macos/Sources/Lithe/Views/Workbench/WorkbenchHoverTooltip.swift; macos/Tests/LitheTests/WorkbenchHoverTooltipTests.swift,windows/tauri/src/features/maven/components/maven-pane.tsx
-java-build-diagnostics,Java,Java/Maven,构建输出与编译诊断,已实现,待验证,已实现,待验证,Java / Maven,使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。,,macos/Sources/Lithe/Views/Run; macos/Sources/Lithe/Services/Diagnostics,windows/tauri/src/features/maven; windows/tauri/src/features/diagnostics
+java-build-diagnostics,Java,Java/Maven,构建输出与编译诊断,已实现,待验证,已实现,待验证,Java / Maven,使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。 Windows Maven 构建输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。,,macos/Sources/Lithe/Views/Run; macos/Sources/Lithe/Services/Diagnostics,windows/tauri/src/features/maven; windows/tauri/src/features/diagnostics; windows/tauri/src/features/maven/components/maven-run-pane.tsx; windows/tauri/src/features/run/components/run-output-text.tsx
spring-index,Java,Spring / MyBatis,Spring 配置、Bean 与 Endpoint 索引,已实现,待验证,已实现,待验证,Java / Spring,使用 Spring fixture 对比配置、Bean、Endpoint 索引、刷新和失效处理。,,macos/Sources/Lithe/Application/Features; macos/Sources/Lithe/Views/Run; shared/fixtures/spring,windows/tauri/src/features/spring; shared/fixtures/spring
spring-navigation,Java,Spring / MyBatis,Spring 符号导航与代码关联,已实现,待验证,已实现,待验证,Java / Spring,从 Bean、配置和 Endpoint 结果跳转到源代码并返回,确认行列号一致。,,macos/Sources/Lithe/Application/Features; macos/Sources/Lithe/Views/Language,windows/tauri/src/features/spring
spring-endpoints-search,Java,Spring / MyBatis,Spring HTTP 接口筛选与源码跳转,已实现,待验证,已实现,待验证,Java / Spring,在两端打开 Spring fixture,按路由、控制器、方法名和 HTTP 方法筛选,再点击接口核对源码行列;Windows 使用命令面板打开 Spring Endpoints,验证同项目刷新和失败保留结果、源码目录重命名或删除、全量重扫、扫描中切换或关闭项目、窄面板方法集合截断及超过 200 个接口的滚动与跳转。,,macos/Sources/Lithe/Views/Run/SpringEndpointsView.swift; macos/Sources/Lithe/Application/Features/SpringFeatureModel.swift,windows/tauri/src/features/spring/components/spring-endpoints-pane.tsx; windows/tauri/src/features/spring/hooks/use-spring-index.ts; windows/tauri/src/features/spring/hooks/use-spring-index.test.tsx; windows/tauri/src/features/keymaps/commands/view-command-actions.ts
@@ -51,7 +51,7 @@ lsp-diagnostics,Java,语言服务,诊断与编译错误定位,已实现,待验
lsp-navigation-edits,Java,语言服务,跳转、引用、语义标记与编辑,已实现,待验证,已实现,待验证,Language Tooling,验证定义、引用、语义标记和 UTF-16 文本编辑的坐标转换。,,macos/Sources/Lithe/Core/Language; shared/contracts/rust-core-api.md,windows/tauri/src/features; shared/fixtures/lsp
run-discovery,运行与调试,运行配置,入口点与运行配置发现,已实现,待验证,已实现,待验证,Run,验证 Spring Boot、Java、Maven、Gradle、npm、Cargo、Go、Python 和 Docker Compose 入口识别;多模块项目把服务工作目录改成模块目录后,服务仍留在列表中并以该目录启动;填写不存在的目录或 ${workspaceFolder} 等变量时,保存被拒绝并提示原因。,,macos/Sources/Lithe/Views/Run; shared/fixtures/run-configuration,windows/tauri/src/features/run; shared/fixtures/run-configuration
run-save-toolchain,运行与调试,运行配置,保存前同步与工具链解析,已实现,待验证,已实现,待验证,Run,修改未保存文件后运行,验证同步、JDK/Maven 选择和版本不匹配诊断。,,macos/Sources/Lithe/Views/Run; macos/Sources/Lithe/Services/Java,windows/tauri/src/features/run; windows/tauri/src/features/maven
-run-java-test,运行与调试,运行配置,Java main 与测试运行,已实现,待验证,已实现,待验证,Run,运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。,,macos/Sources/Lithe/Views/Run; shared/fixtures/debug,windows/tauri/src/features/run; shared/fixtures/debug
+run-java-test,运行与调试,运行配置,Java main 与测试运行,已实现,待验证,已实现,待验证,Run,运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。 Windows Run 运行输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。,,macos/Sources/Lithe/Views/Run; shared/fixtures/debug,windows/tauri/src/features/run; shared/fixtures/debug; windows/tauri/src/features/run/components/run-pane.tsx; windows/tauri/src/features/run/components/run-output-text.tsx
run-java-long-classpath,运行与调试,运行配置,超长 Java 类路径自动缩短,已实现,待验证,已实现,待验证,Run,使用包含大量依赖的 Java 项目运行 main,确认超长类路径自动写入参数文件、进程可启动且参数文件在退出后清理。,,macos/Sources/Lithe/Platform/MacOS/RunConfiguration/MacJavaLaunchArgumentPreparer.swift; macos/Sources/LitheExecutionModule/Services/RunService.swift; rust/lithe-core/src/execution/launch_command.rs,windows/tauri/src-tauri/src/run/launch_arguments.rs; rust/lithe-core/src/execution/launch_command.rs
debug-breakpoints,运行与调试,调试器,启动调试与断点,已实现,待验证,部分实现,待验证,Debug,设置、命中、禁用和重新定位断点,确认调试会话生命周期。,Windows 真实调试产品链路仍在 #466 跟进。,macos/Sources/Lithe/Views/Debug; shared/fixtures/debug,windows/tauri/src/features/debugger; shared/fixtures/debug
debug-state,运行与调试,调试器,变量、异常与断开策略,已实现,待验证,部分实现,待验证,Debug,验证变量分页、异常信息、step filters、暂停/继续和 disconnect policy。,Windows 真实调试产品链路仍在 #466 跟进。,macos/Sources/Lithe/Views/Debug; shared/fixtures/debug,windows/tauri/src/features/debugger; shared/fixtures/debug
diff --git a/docs/development/platform-parity-matrix.md b/docs/development/platform-parity-matrix.md
index 898919c65..2493813f2 100644
--- a/docs/development/platform-parity-matrix.md
+++ b/docs/development/platform-parity-matrix.md
@@ -137,7 +137,7 @@
| Java/Maven | **项目根、模块与源码集识别**
java-maven-project | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Services/Java`、`shared/contracts/application-boundary.md` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/maven`、`windows/tauri/src/features/workspace` | Java / Maven | 使用单模块、多模块和非标准源码目录 fixture 对比项目模型。 | |
| Java/Maven | **Profile 与依赖树**
java-maven-profiles-dependencies | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`macos/Sources/Lithe/Services/Java`、`macos/Sources/LitheExecutionModule/Services/MavenService.swift`、`macos/Sources/Lithe/Platform/MacOS/Persistence/MacMavenDependencyOutputStore.swift`、`rust/lithe-core/src/project/maven_dependency_tree.rs` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/maven`、`windows/tauri/src-tauri/src/maven.rs`、`rust/lithe-core/src/project/maven_dependency_tree.rs` | Java / Maven | 切换 Maven profile 并刷新依赖树,确认模块归属、顺序、版本冲突/重复/依赖管理标注和错误边界;在依赖节点超过 6,000 个的项目中确认依赖树完整加载。 | |
| Java/Maven | **Maven 工具栏图标悬停说明**
java-maven-toolbar-tooltips | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run/MavenView.swift`、`macos/Sources/Lithe/Views/Workbench/WorkbenchHoverTooltip.swift`、`macos/Tests/LitheTests/WorkbenchHoverTooltipTests.swift` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/maven/components/maven-pane.tsx` | Java / Maven | 在 macOS 和 Windows 的 Maven 工具窗口逐一悬停运行、执行目标、重新加载、跳过测试、折叠和设置图标,确认提示与动作一致、提示框宽度适配文字;再检查禁用按钮和窄窗口中的提示换行与边缘约束。 | |
-| Java/Maven | **构建输出与编译诊断**
java-build-diagnostics | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`macos/Sources/Lithe/Services/Diagnostics` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/maven`、`windows/tauri/src/features/diagnostics` | Java / Maven | 使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。 | |
+| Java/Maven | **构建输出与编译诊断**
java-build-diagnostics | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`macos/Sources/Lithe/Services/Diagnostics` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/maven`、`windows/tauri/src/features/diagnostics`、`windows/tauri/src/features/maven/components/maven-run-pane.tsx`、`windows/tauri/src/features/run/components/run-output-text.tsx` | Java / Maven | 使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。 Windows Maven 构建输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。 | |
| Spring / MyBatis | **Spring 配置、Bean 与 Endpoint 索引**
spring-index | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Application/Features`、`macos/Sources/Lithe/Views/Run`、`shared/fixtures/spring` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/spring`、`shared/fixtures/spring` | Java / Spring | 使用 Spring fixture 对比配置、Bean、Endpoint 索引、刷新和失效处理。 | |
| Spring / MyBatis | **Spring 符号导航与代码关联**
spring-navigation | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Application/Features`、`macos/Sources/Lithe/Views/Language` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/spring` | Java / Spring | 从 Bean、配置和 Endpoint 结果跳转到源代码并返回,确认行列号一致。 | |
| Spring / MyBatis | **Spring HTTP 接口筛选与源码跳转**
spring-endpoints-search | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run/SpringEndpointsView.swift`、`macos/Sources/Lithe/Application/Features/SpringFeatureModel.swift` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/spring/components/spring-endpoints-pane.tsx`、`windows/tauri/src/features/spring/hooks/use-spring-index.ts`、`windows/tauri/src/features/spring/hooks/use-spring-index.test.tsx`、`windows/tauri/src/features/keymaps/commands/view-command-actions.ts` | Java / Spring | 在两端打开 Spring fixture,按路由、控制器、方法名和 HTTP 方法筛选,再点击接口核对源码行列;Windows 使用命令面板打开 Spring Endpoints,验证同项目刷新和失败保留结果、源码目录重命名或删除、全量重扫、扫描中切换或关闭项目、窄面板方法集合截断及超过 200 个接口的滚动与跳转。 | |
@@ -156,7 +156,7 @@
| --- | --- | --- | --- | --- | --- | --- |
| 运行配置 | **入口点与运行配置发现**
run-discovery | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`shared/fixtures/run-configuration` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/run`、`shared/fixtures/run-configuration` | Run | 验证 Spring Boot、Java、Maven、Gradle、npm、Cargo、Go、Python 和 Docker Compose 入口识别;多模块项目把服务工作目录改成模块目录后,服务仍留在列表中并以该目录启动;填写不存在的目录或 ${workspaceFolder} 等变量时,保存被拒绝并提示原因。 | |
| 运行配置 | **保存前同步与工具链解析**
run-save-toolchain | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`macos/Sources/Lithe/Services/Java` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/run`、`windows/tauri/src/features/maven` | Run | 修改未保存文件后运行,验证同步、JDK/Maven 选择和版本不匹配诊断。 | |
-| 运行配置 | **Java main 与测试运行**
run-java-test | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`shared/fixtures/debug` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/run`、`shared/fixtures/debug` | Run | 运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。 | |
+| 运行配置 | **Java main 与测试运行**
run-java-test | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Run`、`shared/fixtures/debug` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/run`、`shared/fixtures/debug`、`windows/tauri/src/features/run/components/run-pane.tsx`、`windows/tauri/src/features/run/components/run-output-text.tsx` | Run | 运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。 Windows Run 运行输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。 | |
| 运行配置 | **超长 Java 类路径自动缩短**
run-java-long-classpath | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Platform/MacOS/RunConfiguration/MacJavaLaunchArgumentPreparer.swift`、`macos/Sources/LitheExecutionModule/Services/RunService.swift`、`rust/lithe-core/src/execution/launch_command.rs` | ✅ 已实现
🔍 待验证
`windows/tauri/src-tauri/src/run/launch_arguments.rs`、`rust/lithe-core/src/execution/launch_command.rs` | Run | 使用包含大量依赖的 Java 项目运行 main,确认超长类路径自动写入参数文件、进程可启动且参数文件在退出后清理。 | |
| 调试器 | **启动调试与断点**
debug-breakpoints | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Debug`、`shared/fixtures/debug` | 🟡 部分实现
🔍 待验证
`windows/tauri/src/features/debugger`、`shared/fixtures/debug` | Debug | 设置、命中、禁用和重新定位断点,确认调试会话生命周期。 | Windows 真实调试产品链路仍在 #466 跟进。 |
| 调试器 | **变量、异常与断开策略**
debug-state | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Debug`、`shared/fixtures/debug` | 🟡 部分实现
🔍 待验证
`windows/tauri/src/features/debugger`、`shared/fixtures/debug` | Debug | 验证变量分页、异常信息、step filters、暂停/继续和 disconnect policy。 | Windows 真实调试产品链路仍在 #466 跟进。 |
diff --git a/shared/platform-feature-matrix.json b/shared/platform-feature-matrix.json
index 977cdf8b9..5a28d9bcd 100644
--- a/shared/platform-feature-matrix.json
+++ b/shared/platform-feature-matrix.json
@@ -1086,13 +1086,15 @@
"windows": {
"evidence": [
"windows/tauri/src/features/maven",
- "windows/tauri/src/features/diagnostics"
+ "windows/tauri/src/features/diagnostics",
+ "windows/tauri/src/features/maven/components/maven-run-pane.tsx",
+ "windows/tauri/src/features/run/components/run-output-text.tsx"
],
"implementationStatus": "implemented",
"verificationStatus": "pending"
},
"owner": "Java / Maven",
- "verification": "使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。"
+ "verification": "使用成功、编译失败和进程失败构建 fixture,对比诊断位置、输出和退出状态。 Windows Maven 构建输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。"
},
{
"id": "spring-index",
@@ -1354,13 +1356,15 @@
"windows": {
"evidence": [
"windows/tauri/src/features/run",
- "shared/fixtures/debug"
+ "shared/fixtures/debug",
+ "windows/tauri/src/features/run/components/run-pane.tsx",
+ "windows/tauri/src/features/run/components/run-output-text.tsx"
],
"implementationStatus": "implemented",
"verificationStatus": "pending"
},
"owner": "Run",
- "verification": "运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。"
+ "verification": "运行 main、单测试和测试类,验证参数、输出、失败状态和终端策略。 Windows Run 运行输出使用 Geist Mono 显示 ====、==>、=>、!=、>=,确认禁用连字后逐字符显示且复制文本与原始输出一致;检查有输出与空态、ANSI 颜色、自动换行切换及横向滚动。"
},
{
"id": "run-java-long-classpath",
diff --git a/windows/tauri/src/features/run/components/run-output-text.tsx b/windows/tauri/src/features/run/components/run-output-text.tsx
index 2797871db..ce149604c 100644
--- a/windows/tauri/src/features/run/components/run-output-text.tsx
+++ b/windows/tauri/src/features/run/components/run-output-text.tsx
@@ -58,7 +58,7 @@ export function RunOutputText({
@@ -71,7 +71,7 @@ export function RunOutputText({
) : (
From 38a727bdfdd09af499a161c283bdbba13d427094 Mon Sep 17 00:00:00 2001
From: arkleselect <166632698+arkleselect@users.noreply.github.com>
Date: Mon, 28 Sep 2026 23:29:26 +0800
Subject: [PATCH 02/11] fix(macos): move plugin management into IDEA-style
settings (#813) (#928)
* fix(macos): move plugin management into IDEA-style settings (#813)
* fix(macos): show only PHP in plugin settings (#813)
* fix(macos): align settings background with workbench theme
* style(macos): unify settings input control roles
* fix(macos): align settings window behavior and control borders with IDEA
* feat(macos): resize settings sidebars with bounded split handles
* fix(macos): keep arrow cursor on settings controls
* fix(macos): apply plugin drafts on settings OK and align focus styles
* fix(macos): adjust settings plugin splitter bounds and drag style
* fix(macos): guard plugin settings during apply
* fix(macos): keep settings bound to opener and restore PHP install path
* fix(macos): keep plugin apply bound to its settings session
---------
Co-authored-by: Xiaoyumuxi <3075514079@qq.com>
Co-authored-by: Lichenkang <2188718831@qq.com>
---
docs/development/platform-parity-matrix.csv | 4 +-
docs/development/platform-parity-matrix.md | 4 +-
macos/Resources/Fonts/Inter-LICENSE.txt | 92 +++++
macos/Resources/Fonts/Inter-Regular.otf | Bin 0 -> 258992 bytes
macos/Resources/Fonts/Inter-SemiBold.otf | Bin 0 -> 270760 bytes
macos/Resources/en.lproj/Localizable.strings | 12 +
.../zh-Hans.lproj/Localizable.strings | 16 +-
macos/Sources/Lithe/LitheApp.swift | 81 +++-
.../AppModel/AppModel+PluginManagement.swift | 42 +--
.../AppModel/AppModelSupportTypes.swift | 2 +
.../Workspace/ProjectSessionManager.swift | 18 +
.../MacOS/UI/MacBundledFontRegistry.swift | 11 +-
macos/Sources/Lithe/Theme/LitheTheme.swift | 63 +++-
.../Views/App/GitExecutionSettingsView.swift | 15 +-
.../Views/App/GitFetchSettingsView.swift | 62 +++-
.../Views/App/GitIdentitySettingsView.swift | 14 +-
.../Views/App/PluginManagementView.swift | 348 +++++++-----------
macos/Sources/Lithe/Views/App/RootView.swift | 15 +-
.../Lithe/Views/App/SettingsView.swift | 244 +++++++-----
.../Components/LitheSettingsControls.swift | 83 +++--
.../Views/Components/LitheSplitPaneView.swift | 4 +
.../Views/Workbench/SplitHandleView.swift | 8 +-
.../Lithe/Views/Workbench/WorkbenchView.swift | 11 +-
.../Catalog/BuiltInModuleCatalog.swift | 3 +-
.../LitheTests/AppLocalizationTests.swift | 11 +-
.../LitheTests/LitheCoreLogicTests.swift | 75 ++++
.../PluginManagementPresentationTests.swift | 47 ++-
.../SettingsAppearanceContainerTests.swift | 78 ++++
.../LitheTests/SplitHandleViewTests.swift | 10 +
.../WorkbenchFeatureModelTests.swift | 12 +
shared/platform-feature-matrix.json | 18 +-
31 files changed, 967 insertions(+), 436 deletions(-)
create mode 100644 macos/Resources/Fonts/Inter-LICENSE.txt
create mode 100644 macos/Resources/Fonts/Inter-Regular.otf
create mode 100644 macos/Resources/Fonts/Inter-SemiBold.otf
diff --git a/docs/development/platform-parity-matrix.csv b/docs/development/platform-parity-matrix.csv
index 143fa6e01..6d670ca60 100644
--- a/docs/development/platform-parity-matrix.csv
+++ b/docs/development/platform-parity-matrix.csv
@@ -73,9 +73,9 @@ outline-symbols,编辑器,代码结构,当前文件 Outline 与符号树,部分
references-pane,编辑器,代码结构,引用结果面板与引用跳转,已实现,待验证,已实现,待验证,Language Tooling,从符号发起引用查询,验证结果分组、文件定位、关闭和重新查询。,,macos/Sources/Lithe/Views/Language/JavaReferencesView.swift,windows/tauri/src/features/references
diagnostics-workspace,可观测性,诊断与日志,工作区诊断与问题面板,已实现,待验证,已实现,待验证,Diagnostics,制造多个来源的错误和警告,验证筛选、排序、定位和清除。,,macos/Sources/Lithe/Application/Features/DiagnosticsFeatureModel.swift; macos/Sources/Lithe/Views/Language/JavaProblemsView.swift,windows/tauri/src/features/diagnostics; windows/tauri/src/features/logging; windows/tauri/src/ui/dialog.tsx
diagnostics-export,可观测性,诊断与日志,诊断包导出与脱敏,已实现,待验证,已实现,待验证,Diagnostics,导出诊断包,确认敏感路径、凭据和大文件被正确脱敏或限制;检查预览说明和文件列表在确认弹窗内完整显示、长内容正常换行且不溢出。,,macos/Sources/Lithe/Views/Diagnostics/DiagnosticsExportSheet.swift; macos/Sources/Lithe/Services/Diagnostics,windows/tauri/src/features/diagnostics
-application-settings,设置,应用配置,应用、项目与运行设置,已实现,待验证,已实现,待验证,Settings,修改应用级和项目级设置,验证持久化、迁移、重启恢复和无效值提示;macOS 保持设置窗口打开切换亮色、暗色和跟随系统模式,并改变系统外观,确认标题栏与面板背景同色、窗口按钮可用且可拖动;设置窗口应使用普通窗口层级,切换到其他应用时不置顶遮挡,关闭后重开再检查。,,macos/Sources/Lithe/LitheApp.swift; macos/Sources/Lithe/Views/App/SettingsView.swift; macos/Sources/Lithe/Views/App/ProjectRuntimeSettingsView.swift; macos/Tests/LitheTests/SettingsAppearanceContainerTests.swift,windows/tauri/src/features/settings
+application-settings,设置,应用配置,应用、项目与运行设置,已实现,待验证,已实现,待验证,Settings,修改应用级和项目级设置,验证持久化、迁移、重启恢复和无效值提示;macOS 保持设置窗口打开切换亮色、暗色和跟随系统模式,并改变系统外观,确认标题栏、设置树、插件列表与详情背景和主界面侧边栏使用同一主题色,窗口按钮可用且可拖动;缩小设置窗口确认最小尺寸 900×700,底部操作按钮为 72×28 且边框与输入框一样以 1pt 内描边绘制;拖动设置树与插件列表右侧分隔线,确认设置分类栏不能小于原始宽度、插件列表分隔线可向左缩至 200 pt 或向右加宽,在 900 pt 最小宽度下仍有至少 150 pt 可分配的拖动余量,窗口缩小时设置内容区保留至少 500 pt、插件详情区至少 160 pt,拖动结束后宽度可恢复,悬停及拖动分隔线仅显示左右调整光标而不改变线条颜色;点击设置搜索框后切换分类及点击内容空白区域,确认焦点边框消失;悬停插件条目及设置窗口各子页面的按钮和选择控件时光标保持箭头;从主窗口打开设置后切换到其他应用,确认设置窗口随主窗口置后且不置顶遮挡;在插件页点击 Enable 后点击设置窗口 OK,确认成功时应用并关闭、失败时保留待确认状态且可重试;应用期间确认窗口关闭按钮和常规关闭命令不能关闭窗口,应用结束后恢复关闭能力;A 项目开始应用插件后从 B 项目重新打开共享设置窗口,确认 A 完成后 B 窗口仍打开且未应用草稿保留;待确认时点击 Cancel 或窗口关闭按钮,确认重开后草稿已清除;亮色模式确认分段选择的选中文字清晰可读;检查搜索框、普通及密码输入框、多行编辑框(含获得与失去焦点的边框)、数值步进器、下拉框和分段选择在各设置子页面中的背景、边框、焦点态及操作行为一致,关闭后重开再检查。,,macos/Sources/Lithe/LitheApp.swift; macos/Sources/Lithe/Views/App/RootView.swift; macos/Sources/Lithe/Views/App/SettingsView.swift; macos/Sources/Lithe/Views/App/PluginManagementView.swift; macos/Sources/Lithe/Models/Workspace/ProjectSessionManager.swift; macos/Sources/Lithe/Models/AppModel/AppModel+PluginManagement.swift; macos/Sources/Lithe/Views/Components/LitheSplitPaneView.swift; macos/Sources/Lithe/Views/Workbench/SplitHandleView.swift; macos/Sources/Lithe/Views/App/ProjectRuntimeSettingsView.swift; macos/Sources/Lithe/Views/Components/LitheSettingsControls.swift; macos/Sources/Lithe/Theme/LitheTheme.swift; macos/Tests/LitheTests/SettingsAppearanceContainerTests.swift; macos/Tests/LitheTests/PluginManagementPresentationTests.swift,windows/tauri/src/features/settings
keymap-customization,设置,应用配置,快捷键查看与自定义,已实现,待验证,已实现,待验证,Settings,macOS 从设置 → 快捷键依次选择 macOS、IntelliJ IDEA Classic、Eclipse,核对运行、调试、查找等对应操作在界面和实际监听器中的绑定;IDEA Classic 的 Stop Run 应为 Control-F2,Eclipse 的 Resume 应为 F8、继承父 keymap 的命令应使用上游绑定,Find、Replace、GotoImplementation 等显式清空的命令应无绑定;分别修改两套预设的同一命令,切换与重启后确认自定义绑定互不覆盖,并验证旧版单套覆盖迁移到 macOS;按命令名称、ID 和按键搜索,制造冲突并恢复当前预设或应用全部默认。Windows 保持现有快捷键编辑、导出和导入验证。,Windows 已接入现有快捷键编辑器,修复 #718 的占位入口;Linux 前端回归验证不替代 Windows WebView2、原生文件对话框和快捷键实际执行验收。,macos/Sources/Lithe/Views/App/KeyboardShortcutSettingsView.swift; macos/Sources/Lithe/Models/Keymap,windows/tauri/src/features/keymaps; windows/tauri/src/features/settings/components/macos-settings-panels.tsx; windows/tauri/src/features/settings/components/tabs/keyboard-settings.tsx; windows/tauri/src/features/settings/components/keyboard-settings-routing.test.tsx
-plugin-extension-management,扩展,插件与主题,插件、语言服务与主题管理,已实现,待验证,已实现,待验证,Extensions,启用、禁用和恢复插件/主题,确认启动加载、失败隔离和设置持久化。,,macos/Sources/Lithe/Views/App/PluginManagementView.swift; macos/Sources/Lithe/Platform/MacOS/Plugins,windows/tauri/src/extensions; windows/tauri/src/features/settings
+plugin-extension-management,扩展,插件与主题,插件、语言服务与主题管理,已实现,待验证,已实现,待验证,Extensions,macOS 全新安装时打开插件页,确认显示 PHP Support 未安装占位项,并可选择已签名的 PHP 插件包安装;选择非 PHP 包应被拒绝,安装后可搜索并启用、禁用 PHP,确认状态与重启恢复,且页面不显示无恢复路径的卸载操作;同时打开 Maven 面板确认插件内容不被遮挡。Windows 检查扩展管理入口和持久化。,,macos/Sources/Lithe/Views/App/PluginManagementView.swift; macos/Sources/Lithe/Views/App/SettingsView.swift; macos/Sources/Lithe/Models/AppModel/AppModel+PluginManagement.swift; macos/Tests/LitheTests/PluginManagementPresentationTests.swift; macos/Sources/Lithe/Platform/MacOS/Plugins,windows/tauri/src/extensions; windows/tauri/src/features/settings
onboarding-welcome,启动与窗口,首次启动,欢迎页、项目入口与首次启动引导,已实现,待验证,已实现,待验证,Onboarding,清空首次启动状态,验证打开项目、克隆项目、最近项目和跳过引导;在 macOS 深色与浅色模式检查欢迎页布局、颜色和交互,确认默认及最小内容尺寸均为 800×650、可向屏幕可用区域放大,左下角齿轮菜单采用设置页下拉框配色并可进入设置与检查更新。,,macos/Sources/Lithe/Views/App/WelcomeView.swift; macos/Sources/Lithe/Views/Workspace,windows/tauri/src/features/onboarding; windows/tauri/src/features/bootstrap
command-palette,工作台,命令与布局,命令面板与全局动作,已实现,待验证,已实现,待验证,Workbench,搜索并执行打开面板、运行、Git 和设置命令,确认快捷键和不可用命令状态。,,macos/Sources/Lithe/Models/Keymap/LitheCommandCatalog.swift; macos/Sources/Lithe/Views/Search/SearchEverywhereView.swift,windows/tauri/src/features/command-palette
workbench-panes,工作台,命令与布局,分栏、面板与工具窗布局,已实现,待验证,已实现,待验证,Workbench,打开、关闭、移动和调整面板,验证布局持久化及高频拖动稳定性;在 macOS 启用背景图后检查项目栏、编辑器、底部及右侧工具窗之间是否仍有清晰的分割区间;将 macOS 左侧工具窗缩至 30pt 并确认目录树始终贴左、不随宽度向右移动、内容不溢出、右上和右下圆角仍可见,关闭并重新打开项目后仍保持窄侧栏及其他布局尺寸,重新展开后布局正常;在 Maven 项目产生构建输出时确认左侧模块按钮可滚动、设置按钮始终完整显示;在亮色主题且有未读通知时确认未打开的铃铛图标清晰可见、打开通知面板后白色图标与蓝色背景成对出现;在深色 Lithe 主题下对照外框渐变、面板对比度、背景图片回退、左右工具窗的 40pt 按钮槽、30pt 选中块及 IDEA Community 图标对比度,悬停工具窗按钮时确认箭头光标,检查项目栏标题颜色和弹窗主按钮主题色;检查 macOS 40pt 顶栏 Logo 与系统窗口按钮垂直居中,项目切换器使用 20pt 项目字母头像和 30pt 悬停块,项目与分支切换块悬停保持箭头光标,红绿灯右侧留白与 IDEA 接近,项目头像、欢迎列表及切换菜单按标准化项目路径共享稳定颜色(超过 9 个项目、移除后重开仍一致),顶栏使用 IDEA Islands 主题项目色并按 85% 混色、600pt 水平和 300pt 垂直范围渐变,深色窗口分隔条四角与底栏缺口无浅色亮斑,缩放窗口及从欢迎页进入工作区再返回后仍对齐。,,macos/Sources/Lithe/Views/Workbench; macos/Sources/Lithe/Views/Workspace/ProjectSidebarView.swift; macos/Sources/Lithe/Views/Components/LitheSplitPaneView.swift; macos/Sources/Lithe/Services/Workbench/WorkbenchLayoutStore.swift; macos/Sources/Lithe/Views/App/RootView.swift; macos/Sources/Lithe/LitheApp.swift; macos/Sources/Lithe/Theme/LitheTheme.swift; macos/Resources/IDEAIcons/expui; macos/Resources/IDEAIcons/terminal,windows/tauri/src/features/panes; windows/tauri/src/features/layout
diff --git a/docs/development/platform-parity-matrix.md b/docs/development/platform-parity-matrix.md
index 2493813f2..79a8358d5 100644
--- a/docs/development/platform-parity-matrix.md
+++ b/docs/development/platform-parity-matrix.md
@@ -211,7 +211,7 @@
| 功能组 | 能力点 | macOS | Windows | 负责人 | 验证方式 | 备注 |
| --- | --- | --- | --- | --- | --- | --- |
-| 应用配置 | **应用、项目与运行设置**
application-settings | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/LitheApp.swift`、`macos/Sources/Lithe/Views/App/SettingsView.swift`、`macos/Sources/Lithe/Views/App/ProjectRuntimeSettingsView.swift`、`macos/Tests/LitheTests/SettingsAppearanceContainerTests.swift` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/settings` | Settings | 修改应用级和项目级设置,验证持久化、迁移、重启恢复和无效值提示;macOS 保持设置窗口打开切换亮色、暗色和跟随系统模式,并改变系统外观,确认标题栏与面板背景同色、窗口按钮可用且可拖动;设置窗口应使用普通窗口层级,切换到其他应用时不置顶遮挡,关闭后重开再检查。 | |
+| 应用配置 | **应用、项目与运行设置**
application-settings | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/LitheApp.swift`、`macos/Sources/Lithe/Views/App/RootView.swift`、`macos/Sources/Lithe/Views/App/SettingsView.swift`、`macos/Sources/Lithe/Views/App/PluginManagementView.swift`、`macos/Sources/Lithe/Models/Workspace/ProjectSessionManager.swift`、`macos/Sources/Lithe/Models/AppModel/AppModel+PluginManagement.swift`、`macos/Sources/Lithe/Views/Components/LitheSplitPaneView.swift`、`macos/Sources/Lithe/Views/Workbench/SplitHandleView.swift`、`macos/Sources/Lithe/Views/App/ProjectRuntimeSettingsView.swift`、`macos/Sources/Lithe/Views/Components/LitheSettingsControls.swift`、`macos/Sources/Lithe/Theme/LitheTheme.swift`、`macos/Tests/LitheTests/SettingsAppearanceContainerTests.swift`、`macos/Tests/LitheTests/PluginManagementPresentationTests.swift` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/settings` | Settings | 修改应用级和项目级设置,验证持久化、迁移、重启恢复和无效值提示;macOS 保持设置窗口打开切换亮色、暗色和跟随系统模式,并改变系统外观,确认标题栏、设置树、插件列表与详情背景和主界面侧边栏使用同一主题色,窗口按钮可用且可拖动;缩小设置窗口确认最小尺寸 900×700,底部操作按钮为 72×28 且边框与输入框一样以 1pt 内描边绘制;拖动设置树与插件列表右侧分隔线,确认设置分类栏不能小于原始宽度、插件列表分隔线可向左缩至 200 pt 或向右加宽,在 900 pt 最小宽度下仍有至少 150 pt 可分配的拖动余量,窗口缩小时设置内容区保留至少 500 pt、插件详情区至少 160 pt,拖动结束后宽度可恢复,悬停及拖动分隔线仅显示左右调整光标而不改变线条颜色;点击设置搜索框后切换分类及点击内容空白区域,确认焦点边框消失;悬停插件条目及设置窗口各子页面的按钮和选择控件时光标保持箭头;从主窗口打开设置后切换到其他应用,确认设置窗口随主窗口置后且不置顶遮挡;在插件页点击 Enable 后点击设置窗口 OK,确认成功时应用并关闭、失败时保留待确认状态且可重试;应用期间确认窗口关闭按钮和常规关闭命令不能关闭窗口,应用结束后恢复关闭能力;A 项目开始应用插件后从 B 项目重新打开共享设置窗口,确认 A 完成后 B 窗口仍打开且未应用草稿保留;待确认时点击 Cancel 或窗口关闭按钮,确认重开后草稿已清除;亮色模式确认分段选择的选中文字清晰可读;检查搜索框、普通及密码输入框、多行编辑框(含获得与失去焦点的边框)、数值步进器、下拉框和分段选择在各设置子页面中的背景、边框、焦点态及操作行为一致,关闭后重开再检查。 | |
| 应用配置 | **快捷键查看与自定义**
keymap-customization | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/App/KeyboardShortcutSettingsView.swift`、`macos/Sources/Lithe/Models/Keymap` | ✅ 已实现
🔍 待验证
`windows/tauri/src/features/keymaps`、`windows/tauri/src/features/settings/components/macos-settings-panels.tsx`、`windows/tauri/src/features/settings/components/tabs/keyboard-settings.tsx`、`windows/tauri/src/features/settings/components/keyboard-settings-routing.test.tsx` | Settings | macOS 从设置 → 快捷键依次选择 macOS、IntelliJ IDEA Classic、Eclipse,核对运行、调试、查找等对应操作在界面和实际监听器中的绑定;IDEA Classic 的 Stop Run 应为 Control-F2,Eclipse 的 Resume 应为 F8、继承父 keymap 的命令应使用上游绑定,Find、Replace、GotoImplementation 等显式清空的命令应无绑定;分别修改两套预设的同一命令,切换与重启后确认自定义绑定互不覆盖,并验证旧版单套覆盖迁移到 macOS;按命令名称、ID 和按键搜索,制造冲突并恢复当前预设或应用全部默认。Windows 保持现有快捷键编辑、导出和导入验证。 | Windows 已接入现有快捷键编辑器,修复 #718 的占位入口;Linux 前端回归验证不替代 Windows WebView2、原生文件对话框和快捷键实际执行验收。 |
@@ -221,7 +221,7 @@
| 功能组 | 能力点 | macOS | Windows | 负责人 | 验证方式 | 备注 |
| --- | --- | --- | --- | --- | --- | --- |
-| 插件与主题 | **插件、语言服务与主题管理**
plugin-extension-management | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/App/PluginManagementView.swift`、`macos/Sources/Lithe/Platform/MacOS/Plugins` | ✅ 已实现
🔍 待验证
`windows/tauri/src/extensions`、`windows/tauri/src/features/settings` | Extensions | 启用、禁用和恢复插件/主题,确认启动加载、失败隔离和设置持久化。 | |
+| 插件与主题 | **插件、语言服务与主题管理**
plugin-extension-management | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/App/PluginManagementView.swift`、`macos/Sources/Lithe/Views/App/SettingsView.swift`、`macos/Sources/Lithe/Models/AppModel/AppModel+PluginManagement.swift`、`macos/Tests/LitheTests/PluginManagementPresentationTests.swift`、`macos/Sources/Lithe/Platform/MacOS/Plugins` | ✅ 已实现
🔍 待验证
`windows/tauri/src/extensions`、`windows/tauri/src/features/settings` | Extensions | macOS 全新安装时打开插件页,确认显示 PHP Support 未安装占位项,并可选择已签名的 PHP 插件包安装;选择非 PHP 包应被拒绝,安装后可搜索并启用、禁用 PHP,确认状态与重启恢复,且页面不显示无恢复路径的卸载操作;同时打开 Maven 面板确认插件内容不被遮挡。Windows 检查扩展管理入口和持久化。 | |
diff --git a/macos/Resources/Fonts/Inter-LICENSE.txt b/macos/Resources/Fonts/Inter-LICENSE.txt
new file mode 100644
index 000000000..9b2ca37b3
--- /dev/null
+++ b/macos/Resources/Fonts/Inter-LICENSE.txt
@@ -0,0 +1,92 @@
+Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION AND CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/macos/Resources/Fonts/Inter-Regular.otf b/macos/Resources/Fonts/Inter-Regular.otf
new file mode 100644
index 0000000000000000000000000000000000000000..84e6a61c3c0f11fc8c88c9e7a8f6ed7f7bbc43b3
GIT binary patch
literal 258992
zcmbTxK>tSh3#P@zTD>NRQv%6wPn
zej&On67urfH6MSXM%m1==Y(orRR}ApX1%%%MsCQsDOBsHg-onbvq7WBK4?@aN$9?l
zglJT|ZiBMrOMJPYl@PL=5TZrvE-kxP81P%Z5XKUs?dbMxTed0PV*3u<_dPt&9y5H`
z(l=sx+%NLlcj?_-GZ6$1t
zxk^~YBI0g+G5s!X1wqtrP^SUP8n}Cxw-qr*&B3NWq5B+RC<15+6hgK_Ye>t(bVJ~2
zDI#!-rnoSh7Brcp3L~7AP&{LgzThPQXGsEF;h6cxn1$OrJ~
za-!9LJTCBGk82z%PcM|c8%h@t_lYui#J%ESQ3>1afHIZ-KiBu)<@k3A1ELYO8$emQ
ziZ=hX_Z_g0bWZ^5?}==KQglJ~6rC`yn`no>R1aOC%)h4UV+oqqC-mrQq4iR2_QHQu
zdaC>0Xp3H`gR=PV-)rcC^_LB`18=!TXnAU>2BEF>7X3n7r&i)6IwM=-QC+dNwxRO(
z`PcTS)ZC&Cu!m3MF?F$3S~ej5z2>L?#~MoEzW=W4d$DhXd&vK`-G55cQuIanI)r*b
zEBvK$_QP!|2iIc_QB6D>n(mFg5B#exxF&jGU#Nd}$0Mjlsl7WRskgn1nyHI&KmGsf
zG5_B4HdrV3m|o&>O!q>GyP)sU+&-A@jVWp+>iw-TrziHQEtaBvq~oF+rs$a9dJbS-
z+t6d%V;y`{{9kMRcYV+rsAYSFYO7bMrKtZ6#QJFc)i9rr!mgoGQC(8G+Wto?whNV`
z=YPzh8teZbx4VW)-4?ah4J|=yE{(mS{z>bjKJoAN>5chR-?Zodp8M}Qpwj)b%>P!p
znxXa6@j*STO{i@D^nzYE%DRVo-~TK@hySrHDiyVVJG3)Blh9F3HQqh6<@UI*E&i*H
zd#Hy{ziNr)0;1-Bt)+XY-5P}U{belC7VGI1S`)2d0G4ivR~Wpi0ljYJ@pRGzdiD(6
z)_C0!xNRkM#j8~t%yh9wLu4(vMO{>PwNKa6&2>xNOZU^S>d|_vo~}<=A6a+pvN4Zl
zSI>SjyH0k!?E2ZyXTOx)Hv7ZuY1wPCulZyB$^LAAq5o0;6aG5>=ln1DU-CEgzv3U^
zU+7=v-|FAvKkUEgzv{mehzt}4ng@CW1_WLWj0%hkd>GgeI2Je`xD=E@9dv?TFfo`K
z%ncRjdit8w3XhM+V;uejZ#LTpnB#+!g#W_*3wB@J#Sr@RuBw7P<+PP`Dg}EhjhvtsR9h18=FE_7!-p;&V@@M3Kp1(Bz%lviu
zoAS5if0w^A|7`xn0#V=;R4!;)(6(S&VPauwVdKI!g(C|u7Tzf7luRs{RcdglS4-b5
zllIvsv+vF=Q!I)ji%S;QF0NbLq_{z+;XS%ox6AGeM3M@leOhn>XH^ZsGrp>bSvFk57cjpXLwvi~LpnwfyzMwcOl4)IZX{$iKq>wSS-gsQ-%p&wvQT1LU|D%>)3=R&C56%rP3N8(<4%hOr;OTHJ
z+oAEw{*9fm)u1T3(XBB7b%M#{8}M+y7O|_W!GvhoY9Rp_UW=
zms(cEQN^W-pDM0b+_bnQYPnPK#NtnjmldxsK3n|93Ezp5CmuTS$cg3`Bx*Sju4PoT
z5cZAGU%XGW7lmes+lM%XxcmN}JI;>~;{5CICcFXV&X+x3^y^R|&Qw0p_RIr9oVsw*
zf2PXGF(*f#93{l*r7-57HJsic#Mvo)>r8Jv=Iwv(Iseo7AI`KsGY#`TI9HSAo?Lfk
z(3ye9UpzhdOyc=&XK=usua0|@&pd;_l};Zyef;#9Gx=w-&)8@5sZH4K3YdRt)~OFp
z)jxIrsnVx@JN4_SeVF(CsUD{~pXz{ej6J#aWP_6rpQv?DELP5m$tiZB#&axA3{ZS>{~A6UfuV
zt?xELwsXfCYt|&lF`$tC%)1
z?P5B|bd5n<|6l)N@R{TP`yZ7v26e^%Vrqx8MNH_^4DQ<+v*Vw8oe6e%yQ}@QbfnuwCDN#eT+)wd3q~JJC+ElkHSH%}%#7?4kDS_S^PEd%XRC{Ww0e
zRKvTYhN8I`CEgO##aGgkF)~f&%966G>?>c9L*y9wp8QmPCBKn7)O@r51fhi{njPxie1OLY}d0lIUVf9_8R*wd#>HUUgUJOSKIH|XYF%NTRqa=V2^bA
z+Gp&w_Bf}J)4*wLKa9^~4qlfmylNRyMLZ>1;B~DPUf;Ki@9)
ztY*I}tIOGPj+`q$m;3c0-BU%&zm-&}%BVz@rE05}ReRMzwN(q%BDGk}wF=ZFYIDN#o~EuK+zL|yfaXsn)h-%t%i
z8--5~s*`A^I*XT87tvmI730-g;vF?kOi*u&iE6x=gWV$*mGt?28sgAnut3xuNev+lt9a%=*m1Xhb{eZe5Yw1||
zq>hudb-e7OAC|A`I&!FfM!u%&%CWkgd`rJ9$LaR+ZQVh>uLsKy^egTcdXSu_-;`hI
zx8!_1PA<@I%Y}NpT%_NT-|8>q0liiplo#|Kc~So)FX_GJc~w=^a9>r`+y&+bd|Iik
zYKbPIk^81Zb0m)|$iS2tEls
zt7^)ioT=OD-R7t{CZ3R6&2ce6wUd!*y?$I*m!ow}S*%y9Gwmi46dlvP`;Q)5gS_Z@46dr*C#rmFYU0;`KVN$pby)PD1lx}yG2m(?xxxBHQP
z!2Q^CHG_36GebYAU(nC#r*v)iQ};97#$=jW#%Hqd?xdd{d*8%{jIxP|ELd|
zpvg7&nukpVBb?dhgjLg>U{0#9)Q|25`Y}`9+^?FeR;s1hX;$h1YLqE3r_5v{@@3`09
zTkc<`vb)7BHOt%`&ImK!EH_KcBj!_&1zw>&T1GkTojxMR9wi2gMdF}5sn1wlF%DHrAI1pFAo-_Q
zsE>*RGF4QTMe-4SOt#g>=*GBI_}$y7jpA
zgw?=mXmz%_m?y1QO*_-x8mdcKuUW&aH?0xYNNbe!fnI@603Tc3tueZ^HP-sXD{_yR
zRr+szL*KMMG()|6yb@kXcb-}74ma`c6jR5YV`iD!W|XR@zL8zMQeJ7Vj8|4PkoS1y
ztl{3hUU~06@unDI<-6N0znmh@iSshrO0&|f1ou1nko!Hx%gX87qNcmm5@NU|EiE6E
z4_lVy$`WFY?CyT$e(i2^zp)~$NcUSS%8IcPtt2biO0iO{3@g*hQt8&0)=F!YwN|}q
zt+O^*8_na^W^0?Z-TGcXXzkWj)w9-*daJcZFSqtt2du-^5$l+B+&XHVw$4~*)ll`C
zde@Y*e%9U9Mzu+OYn`-CsVU}Z?|%K2wcnj)y174CC)^Px#a-$B?ymAKxGTJ0-7mf0
z+^ObSca|Au8C}83vo5%kO-*;9uINrT-Q5|chda~sao;u1m^J2WGr-v9b+3Z=fcK!R
zY;E!$vWn#ZU0L6;R=eX(Su5K*XDMsFyV|=bldY|mZG9z^tgpp9>jyF4+F|*u^H#w6
z#T{)j-1%mOyU07?F7{5!AFaJswDqeMYaO)WtV343`pgPizqv!*3ud6Z*1KXk))sf9
z^^N%4+9|%UcDcjcOR~`VPF)oDsti$HWs0iGFGi|iR*w11{oKrU*Li=qYrIQVuJyaD
zXr7RjOm*2qKO}pZPO`V@>^dmAuOCGVf=7*IFa@SU-7H
zyhrTs>>unM_D}Xc`=EW)K4#x`9LIAayuMyPufI1yB&ihfn5r(StH;IT>IqR#)fLaF
z7sT`GMe%}qNxZ0La?VzG93TDW<52;!`zUe5PiI*=nYk
zp(cwtYL@s`eId4~&t<&YDHGH#nW%QlEOks~tK-tAiltwjka_B=%vaZBf%;S4tCcLT
zwY*PT@_ud0hB{L=(pj>x&X&(I4%ZFjo4TPKp&Q9}bSF7Mca{@%
z7dc6Hm6LTh`H_BAeyoSePxNbYnjR)s>i6U-{k~kSKagwmhjOj{NPewn%WZm&+^*-#
z@ALxsz5ZPOpcl#=dXe0vm&)CGnLMo5%gcJ7yrTEZKlB0hseWBA)*DoU8lm3w2Fj`4
zAd##hF^U@_Qk4>E$`a|y78%MBnM#W+c@v}3w}nsM5q^0WBf_^t57kffRQ*LSH9+)M
z14SP-Nc2^MML+e5=&y!|y=s-%r&i17wO_uV1M)>3lrQNV*+l2craDhH)A_QwE|4vB
zp=_y(WGj7-Y^_Vkb^2quUVkDt=xK7Jo-Q}(8FI6pDYxiZ@`&CjkLpeGnBFXp>n+}3
z?-g%|_o_G4d(A3gm9$D(rL8hnS*x6NugJw%M!qNzg`!B@BT9(HVu@HPmWkzJh4@me
zw0c-QtzK4dtB=*!>Sy&Ahs6MX@*`PReuEG;6vw!%C>YY_+#KSRJiS;&t(cSS41At=>3qyf?ub
zXbrLkdy}kJtRdo*I4#bIv)*LyUGF_>iuJBF)%(DD-Fm}%&w5{;mp{v2>1n@e4>8r8Nlr7Tx!ud|ZTGSJ+5PPS?pb?`J=Tn{@3SkKzUC+QclVroz<$vw
zVLxhDvmdk{vMYGA?2UF4yQ%l78R>oI&GzPabG^^KdEOUxUvIv*z+31o@)mnbyrs@$
z`?UR|eZ~I6zG`2vFWUQ^Y{%#LopdL|zGnaJXeY{BZr`%+I>M2TaxBMnjPcvbw(KbD
zw(Z)&`rD4MZrMh)w*Itk+P3X@E36x~wC-T!N_$^=E3Ln*>(*6omF-#A>_|JtTkWlJ
zUDr6RoR-cEd#M~HN7~En74|akl=GbPqSM5A$$7zf-n?(7n@`NUX0rLvd|)P+_smCT
zqM2qUnW<)q`PlR_yUkit(v&b?n0Y4IyllQSsb-fm*IDB%aMn6sI_sRJ_@untS>fDv
zg>%dPMjx@a+Ebh>&R@>o&Q0frv)kG0>~Z#o>~el`esuPQ6gwyFZ=FNV=gvZBr8D1I
z;;dHl)iSk4ZBScv4gIukte>~n+3W2~_GSA|`?~#?eZ#)#*iNJq?Zh~lPL?V5mYFlA
ziD_Y)nwH*7?`?02_l`H!o9Mmoed0}b@46e!Mib%w;{NLX=I%4fB$_xAV;Yz(rny;X
zqKq_S+$$#1#JWGbN8JtXF|)z_!#!y{lVF;eXtUY9>K=D*m>p)lThXoLR(7k{huq8d
zFcBetQ_1>=(0MRX?=Svz>#Roxn1fM=(D}3=Mrz7qI)~X9oy0L8V$)}4j0X_wA`)jH
ziPIEW!0daGh0N}PEP{KmP8wq$kNQNk1WG%oSDS&8Dc+!EC(o~
z9gDmVDquPhiP0iFD+oIkS&`X8k(HQ@aVA0K0GmdNsxW&Z@)2f_M?T7IT3=O$&+!7E
z;~75wh{wWc9>$SEoQz#GHeiy*(x|K;-$OQH@>67ECaFBnG5HOW
zMpr=YM83e}UgV2R{*HW!*;KDhm`&TKz5;etBu1KuJs(MR1or317R-4W*^)`>v#pq-
z_G!%&)oB~1sL!-zisrRrYB-YC1!^?1JyVmA9hjPp?8wv>WGAM+Lw06r53&nWmylhV
zx{mC|w2SP{H1)e4OjAGU$@CM*UQE+|^k%vbGEBdLX=*djpCbD)Jr~)Z=_SYkOn-?S
z$n*~6AZAlPrQ-^0>KD}ZU{^;DVfF{eY0RNxf%+oY_akR8i}rUWv#ua#F`N1zl@F}T
z$j_Kf{f_Ds>`lly%%S?GeE@qglG+>WHOP6)ehc{pvuRoCA7E3TUBE)4$qO+J4zjigj~lQD)V~gG)B@k0Ap)HY=q5V1NAv#!PYR1{3^^KzYeQ{+!po}@*ALj+5)}@
zYX9x9GmIX$i@9TwyO}J7{1JY_vHS#bFO$?~_AyEQc0aSMs|WqJBkv8mt23Wv1wPhWhta9CuO3YfO8{KbfZTTxa%FBs~Un1d{gW
zCZg-l@dJT1|FM0G?aF?!CH$qeJTLZ&c!{>Dg3i0X_?
zWAr>O)0ygm%wY7qE;E_xibVe)VmvaNVO&^99~18&{S0HpLI#+afDAH>9}Aho#6)B+
z!C
zd?1Y4_Ccno%nvd16!PIPYKMwU9Y$6Pqc*9`)Da|}vqGqS9$^a48S+u)zK^WR)FEWG
zFlv*>n4;&Y>S0tLk28EnD)jtC&tajuseuHAV@uWyqk5{vG@3@%4x@dg{Q-3Y`E(d9
zTZd_?hiAf`MAl^*eO=ZIqxC(@bUdb`Uur>;iHi(|eG#pX4G?
z9f794O7%i6!4RhRBB|}cP`grlgQ|+8HU|2fAcrxRmVKS6YREU3OZ70E;p~u*RHqPn
ze?J1#5c>Qu64QWlM?#Kb^nP59X7qlaJ_8V!)-jeT>WkDKfU`|Pj$`y5Q&PQyI~PfH
z4LBDiB-JknTK5Eo^HV}jWP%Bk3`q
zs6MGLf}vyXLuROteiT*#`7u+sk)MQ7ADI^RIC47Ek;oa$rDbO_L;Z197}dk4OjkjE
z#@waI*O?{C1BB8R(XJ$2$+M7_h7KYI_segl}Heby2
zU&tlQrKB>EeXxw_RmkOG*N`ii-iiE@xzzqEnM-X)k3m^X9&!z{6Oe0}O>MM}8ET{T
z%-o0Ez`S$Fjj$Q(c?G$JnE>)DMxP1g*G#oQZeuRBKlKTc1K%=yUslL4m)ifkut$+p
z4$uzr2PR^WJD3tk+Gn8m!g3c=R3E#;o-qVP&uj1K)r)JA4co{nJKEvU&5Y7{>pSB^0%-$$lsYxLSA4l
zZTBKG)TWo1qBg(GaGqGmD@-&+{=snWSjekPP`zDairV5&MxPhub!PS=>DVCU;BTfS
z@&*%Bhc}s`a^7MzCWMjt5amPO32TGA%W%$GP=6vK9*OmaxJb+-A_1wx(00mVG!CKc
zux?27S3+YFiXKn8gJEJ15@ij+@v0&ieU`%+2Zm#p+CJ3&&mg0jPDaKsdM~4>9H3K>
zXxGqZj$ugJ2hjD9RBoWxBKizQ^s`9RQK+6)AZfjz-$l~8fSya}vmDV=k!g%xGgLa$
zw2v8#p1)Nl(?gJ1fPQNBAyMyy#vYVEY#K7a%mHLD>^Wo(2=8a!)RYBgrT3R2bk`Ud@yV+@*#K_`;O-lRgnoQOC=_#oR!0BBC9a^
z+@l_0^twl5ZA7<4R%LoOvKl;w^&dr6XW|Lu<4kTv(rv)^CxoiO!~i61kF4ze|~Rv_Cj_aL%u*at|e)0bf?v=3W=?7*xp$d1gNgzOYX$5-dD
z14vqqQ2lgehW4o&bcZX@BkVG=XV@)dudu(7RFB|(gzUpK_1V76{TSJg8QM;NW(Fe%
zFimwhkeM0CK}=J-&~l)u9bRFY+Gz;WROhcUO?5sLUPF1Py@oMOb@@6onaDSoq3sT5
z#)o{9nJnZ8rm0*bnWp_1#WW@LQShk$Q@et97CDyb&ya61Jr6mK>2Hy5Gj}<1JkviS
zsULu*cAvmZ5IK>VTqLzCn0t|vnRysFg_#P-cbO4L>MP*PM!v_)3FQ0CqT`GD7Pz#{
z51BcMq;@4=0ktKea(=>GdfYUoA45)OraY3`63qR`nPGHH%nECTq;?`Lf$9s)P9&8T
z%u3`OrUxMBhEe^0&P)N4>h}vQe+oIDnL;ET8w-Kqzti;@(0g
zGxslK3Nw|Fsm$GiOoMdP)ly^zbJ0(ACUZt0vzQr=%w}de(#H&*4|EW6u%1Vdxy%`h
z%!7RF?>J-ubI^x%A#+9{i8jBEwHunhIV-p~i@>45CZ
zXk43K`-w;GKahF9AgSCqwmkF+`aDByYCAfvfX=VbxnAP5M-FEWwn5{hM4+G1_ztnD
z|BPf}Fp_SApgO1Zf;fnzz6i1%lKLXh7yyl#hMYl;XI57vwIzrkasm@nXA@x(9EQnE
z&^}FJ^f{Y8?-8*OIW_Dk@;xRFAm3+nK1YAR1oe>*nJhwn#3c2RkHd~3KVh;ha$4AN
z)58u{t_;PG~HI-fxA_^lTOyyP1ROxj^;vITMGF^B9en=r5Rc50Z`n
zuxcRb*Z`{$lJ+00Zb)hmu&7NIGmG|d2`tC_$B--FOH4OFu7p*X?u=Z`%#+A9%%c9X
zmKkc(bwFEl8NR~wo5-)3MeVRHjLPy2e2ZnM9kw&8JMueb
zjX{1NM$bb(Fl#Jw2eYWHb~2ClcNcSyAa^r^{iOG@G)AufhP}+9zOauO+L!%s5XTPH
zIkgA4)Fy|Sp?anDf;${ZeGW`KlKKs}Q;^hGz|=t&Gj|S>`T-c~CzqJ1jl9gvDC8AJ
zpCR=hjNTvVt4z|da}EANIjPQRe?U;1-e7dDPv2x-Ipi&7QJHVUT|D+))H@z#N&G<@
zSt=|aiRUKbqD?F;6yitPjK(U0iEBoVwn3q
zGB%9X5yu3|Z=rq(mEEFsfvAa0WbRgEQW))1G85QeDCW?$pX=Vhz&AWOpRhQ4Z?uD`YO@0o4W7DY)Mv3&N;A3d5)l(047g
zXK0^FBg+Dnh4vq4?8>4xyAS9XzCUa&vI3*eoz??k>yWf>RL2{D_6^MA$ckY&My*O=
z+mMyRsNJiCQM)|C=(X8;G;BArD$|tJ7>#$(b4|#P$m&c}8_~AO9(aO?pDh)P>Vf53qeT6j`6q=T3UQBZlg-Vc5^eMof1{HiqZ$
z*p0~N8GR11UVs?g(UCW>S#tn7b1BGV^{%wrB1tWC!M5Kz3yA3S=kd{fg|&+%J(`nD-kJ&o9KC
zilp*^p*E#D0(Ta&2Q$NvJ;UfZpckX}cUJGPJY=6RDoWhL)wa8HMLk+TYPk(lIn9Y!h-U^BzLJ6;_NK$0V))ZAR~3t?^9XLB12V8aaWv
zbpJ$V$|5I)Wh1Fh$vL1tN)*sOll4ID3NEelJ?33RzR&1;G4whevK9GZ814Hn0x4=7rq}$*wMuvGOF};MzACXJL_9B;sMI)Do{feY*kXZOK
z>>zSwSR8Uy*dZj)PCTOL{giPZ(tjv??;Ai)4ZKP&x0VSj<<*HLVm~GVaV^9dkOgilZ8lX
zV?xW)x`4(KEP6bMdy%^tos+Ss-a(W{?qPI(#`=kgsz_=NpmQ>z*NlBwp7v!wQ&gS<
zVL3=@4=_~EhnP$Ic$gXLcSo2@b$^u6)uKYLH^)#{)K&s9{sHu!
z+M>D!dJk?vY&(Ju^zO4_Djr0n`gITHp-jb
znmG=#4YbAQXb<@zvr&iH)0n*ziG3#aDdYw~J$l%uY}7;cT}<~C!iVllL=sXmm4Z}E
zJciUvVgG#=6Etlz^*9n`B7&w}rqK6%h6&Vx4`n5EzRDND1oqn($>{u&FNz7&g%9;k
z)QiX%CTN*hrch75I3{SBc&3^l6PTc75}9g>r2PcZ8JW!Je2$Oy8AKOkDx-5dzBDGf
zBGVb2YY)0pQe5hn1#vuKS&ZYPQOiV!r8J*wok=CcZ_MX6g%M878(N
z%Q8CW;48-@)&0GU#=d>!nWT2OkI^`|?|vq!O)4<88~Ff}RDTaL8lUz(#OOP%zK0o&
zQ~N41N%dNZsbXYhCaI3AFdD=5J;Ef_-=j=jMOI~!>arSB*O1ijK~lX^UkCLklKMAD
z+Sex-jW_#hFiHDelhL@duNIS32Tw8@hxXNGlIr6rMq|>xrjE01^wHx%_D9lVfW|C+bR2?w14+jo
zXj(TNZy<*w=@9wiIRe?7Y1)1ZCf`A}WV#cw6_XQ?t(m4{whg22
z+4n-+;V=q`m?)#^$5`0rC$d^$E}ikW(0)fAzh~H0}3P
zM&p`3YCoWHN8kI5z9;0Pb^=BFO>F~;>Vw(?JZdZIPe9-C^idxI{2$Z8NBsswGIBao
zk;oZLq#$Q96@#3`L@JWX3Q8eAV^)6G?3eA{$9{1oAd=38Oa`K5AExcaYSUApFSXOx{JVU?PD0lF3`h
zl}z+Nu41Ymay1h@k!u)zpTf76iC)NcjJ{jpThByq_0l2wBWzE941A=Lvl$nQV~^Gt3){>=0=fUvN8V^WB|}6H16m}8~Dp&K8{;|Id~BB
zajf|tf=4kQZR@WJPoSTaLDqsg=qE2D>%nta{w*Z>C6Qh?gQ^l_k0r%6GxSwvnErg)y@$fF@
z)4ooHPcVNilJ;{p=HofoPwQHU{k@1>1j{hL5^@E6iRr4ym9QF*Es0#iL|G)Q3j{5{
z4$ybJQAqR^|5iK}b?W~bwqd#>@*DUT%Trx#2RzS+RY*L?5P`?|@f<_EaY#JR5Rdj_
zC-WvCcfpTXC)Lv)=1oHGgZ-FKb#nj?W1XjvN0~?Ui9Ss{)QkT(^WH-i!$~}L3X&cJ
z-UmqPL+Cp+ChDg?aSqe8{CU8!Dk*WC5{b6){|=~2??dDjxQgYeKmQ5WF^&55|HWh%
z7hd46+h4BaoGujbkTJh1pmx@CY+~k&iO-6O!r|T(o(B$^_S
zBI`0U5?K$>w%%vR=a^0VLT!LL^X4O)GiNfgJF}?|;5m=j)CYRQ08FFL2L{4mOkY9b
zcnhF?Z1mdzwHes^kwXE`2Tm+pY`Hu5bPhiUYuz<6d~L%zf8zmXG|qmdJt6NRMq
z25&i%$_n-^-h(|3{YGsi-H03TvoE^-<(e&lp!E94Aj)ABQ!P1~BqEF5zIs#CCO
zJyefi3*>A@V}5}-%#J|LWi-wg_?+1WNyh-F*2pgyjUxuA4S>c70}Egw){hMY7BO!H
zaxtSZ#lR9~OXN~mhR5DPQoVpp^+u2R5_JWEm5jzI1FIN~T?SS&>nd^$^XUGy%=VD$
z7>#`f)-yX2xq;a+$ir|1+oJUyg=6UdR9Dnjz@znDVjk8PMBN2Zb_ewkL|KV56N!B$
zPAjCtoR&zGgE(lDU?MXwB2$=yHVmdR8}$+NF*yo}_9k*9G62}PjXDbEFdKCj%w^sw
zWC7DOT>?sCyPqPE(nE3?RnwfWzZJ3#iY|G4t$ac(pfP9%5
z9Dl*~%)E!}z|2R;j?7F%c4B54vNJQ2kX@LWitNhF6l6DMK1SkshL~PRJjW2T8`+Z?
z^qC;t2L^2r?9B|dNgrl#3IEDeqe0q#aHyQL&*0GdseZwseop(0`g4{dX;7`n1g**nwaSUqYX*h#vi9E-g-;lpB
z=XZS7O)+~5(q{HINF0NNzUz|{%j~a^@yy5yzLSj3_xsDvloXf}&
z%=rU3hB;S}JD775xsy3JgviTfW+4(~%){~E<{?)AmUBHM>X5itHh&t-z;+KK(aywf
zhFrp&-AJ@EarPpy9^&jlqTdi_KN4+CLi5q)`PA+-AN`CtX#0HhE#jcf^EWaFeIb7n
zbM_(8HY7CvD@;RZKH4B3oMPlQ=A1-sXZE+q@0fE4iG3x`LF8Fxzks~RT(k|UKg2nM
zq}vXb{~1}CIj4~=nS*r{v}MjYBM3Wozi!i_k$2+(wJRIh|fM@9`~Y!*ji
z#=FQUD2Zv*ZE-26jrS4(6v{~^|Ow+b#pXs=uI#~~A
zFkKRPmO0e=t*w#PLr&dK~%-F?dWdl>-dwr5J5V4DC1i3o%qr=rhDn9Z*@pn~A*1
zytk3Jn1}r@zRf&5zZIje5N|3H?N2<^6S{YZ_dZfG?-L~Y0P&_HHFNQp6BctfB2h=g
z&@}obF%d`?JRBpxAn7)^`;e$dVrbn_%p@XFr^Lh|W0;|gWu^g=?gO(08P7~}B#sec
z&;}=HU0`V4NzBkbB{MSynZn#F$W&&iTxrbEHq)7lK7S&Exkr&`Z{lu1W-<2|(#H(V
z_cQkoWPrKo=O=>9pk7YoFhga}Wu_T2j~S|ud}cNy3z&<3bE1&B$B{+MML#%k4>LQE
zC74-{EC~;y%%zbJK^06tf+X0c3n!XGD@<2Jwr2JrWESguPP8zv_huXCAVCh;SAOY!LA8PC2nLH1S`5Bz?nHN*VKH*WPV=magCSJl}=*AFzt4)-?-Z0AYO%oNK^^Y0zPe!@fckf;=zLSQ<
zvO3~Vl(6x4>ake*dn#^iHcl`#PM{lS;=R9=kirqsB1vS59C42*Cms}!h$qC;q5;n1
zw-oe?SbfDS;tiZFpCH~7)5L7CKrF{N+7_{0?8bNOkBhV7cX3tRlnTEv5GPZmPv+zL
z{P)R;>x9$
z!cPqrJehoO3q`>lTJNcyR@0p7FR>>g=?C>=8VLZ
z%BMIVIkTL3xO(U+XQQ*t*@3H#9&t`Nzc`n11=72&<3_tlZl;^#-s6^YA9NpapTO^V
zG;m*ZTe|JtZf;-q755Eyj61=7&zu(cRQ}regIegJd5kUUUhHc%Ap>v
z9GZ&j#^;+-<~~!=RKr!|>*BiVO-&oq$@IjPu7{ctxXL?SOLZo$>b}^lG#hXQ>>tce
zxDNhFT%rAvxo+-wwio3kdKq5OEAqyO`y-^QEJsMRbs!mkH
zsF$KzMRkbk9@Q^uNYwDCu~8GF-jA9dH79Ce)QYHeQCp+Fi~2F@U{rC`xu^?K*P?Dk
z>*$E+_~^7~e{?}~>FE2TD@8vR{bY2#=;xxFMYoOa9NjB=VDxLzBctDro)Z00^sMN4
z(MzINMQ@DW7QG{SZ}gGqQ}{iV%h7*D-;Hr%qGOU`GGlUL?ujWE^I*&)F;B!i9n&D@
z#h8{c?PI#d^o@BX=8c#!F%x3miC#wp0NXBhsKVG9Tz(}_QTkjv7g5-
zj$IkMA@=LoA7X!sJsf*7_UG73vDaho#MyCCafxvmalyEvxUz8%#8ruVJnpHu`f)GB
zwTOE;u4`PMxWRF+$BmAACvIxoCvl&}&5v6awiO-JDi!T{pKK|kOs_`}BpNVf2-z2_ue8>16@%`gpjej%#t@ugt)8c2xFNj|r
zzczkL{Py_W@dx6M$DfV=J^pI^%>0;8KNw<@&nQtnN8DCN!m)I+AOtgYUk8msRL7AOC6c|cIuSWk5Xr)&P!dAx+-;J
z>bBG!se4n8q@GIsCG~RZU#WM~oV4h)q_oVmoV0t=Dx_6TtDaUn?b)>F)0(HXOY4%>
zJ8e+fu(VNWv@g<@rmarfl=e;9&a{1LN7GKH{hD?q?eBDv?xx42C#Pqn
z=cboPzc>A%^heWcq}NGrnEq0FtMm@(-P8M}4@n=MJ~n+~`upkA)90iwOka_{E`4kI
zcj-T-A51S!KbL+X{aX6144n~?5ucHk;m;_@D4lVCMx~6$GM>z+m+@Rivy8SGoilo6
z49s{fV`RqL8B;Po%9xcgFJno@s*H^p+cI`!?9DimaVq1NjLR8+W!%klGNUt-GBY!C
zGVjSOm-%4kBbiTRKAqVh^To`Tne8*XW%kW{CG(BUF_{xG-^-kqIXiPf=JL$7nOicq
zXYS5Cka;}wZ07HoS2J&BsVpxmE-N+5mzAGYD(k+iidogNYGu{UYMj+Ht4&s?te#l|
zvW8}j$QqY5IqSo$nOUD_EzVk*wIS>4tRJ#|$~v5NGVAB8OIg>m?qu89QQ3*v8QH
zqU^HS4`f%#emwgr{D#>J*)6hP&hDDsCwp-A>)E5T-^reu{Ymy`+4HlP;kV;9XMdZ$
zD|>(TvFtP1zh(cCeZwbx#uw{L@n!q+d?kJ5eGmJp`fB=~@ip=_@wN7K^!4!d_r2_&igL<{`B4UTmDFYfoxh8}w||g-n17Uiy#HPQ$No?KU-*~$SNk{lzwz%3{gT>g|F8Hp
zwZ8)*;09s>$$_juZlFZq-oQhFM*}qibpj0oF9li!It020`UQprh6lz5CI;RQOb^Tn
zEDWp&tP5-nd>8mJa4=9DI2X7OxE8n-)WL{gd@wEO4;BPV2k#G73O*KmGFUJ8T(DWN
zZLo8&S8!nPHT=@u+rcTpkAky;^MXr)tAZPY+k!iSdxJ-Ur-Hu(F9-h$-o-E8Mdu{t
zWai}L+>=u-=fRvua-PU}I;TO-i#aWG+UIo3>6`OP&Ko&nawg=wmoqJAcFuyF;O&Ab1s@g6DwtQWq+nIS#)54HI|}v|94RgpShnwbesjHsCulet6*kbBN8naTY&bBF~63l&E%XHiZ7j4+9w&_W9>DD=e^TToQgeJ1-P{eF9`gZjSh
z`@P@u{GaFl%tQ9LkOMY0gv1D_}izPoVd9`Fu$?r@4RC2uJWXXFa
zAD6hL7nELDdP(V!(pc&6(uz{6w7#^h^s3Uar4vfORywV;t8{khy`|qQU0S-V^x@L)
zmu@J1ru6yJpO)?{eXaD3(m#|QEj>~CkJ1lHozj2e|Kz)r|GOa9L)>M`%
z8(lW8?5kxrmQ634Rd#pT*UJ`{eXH!dWsj7tFMG1=$7Me$+g`S->^EhHds}@x~P_?{jRn-rwepI!o>V>MGRsEuBch$bCKUTe2^>)>%
zst>CMvf>I?My^@sG8`WpQ){V9Em
z{*wNR{wsa2en9`T{ulin{fz#J-fv_YLE}>6a-+}~VN@E`MuX9Ae9^epm}uN!+-%%t
z^ceGu|1cgfmK&>#9~eI}HW@D%KQn$|>^Alpe>C1S-ZoAd9~x;h!wi@?X2=YiL(NiC
zHxp*FX`5G@t*Yg*6Y@O>yY)9^;he(b=K;uKCe2f`r_)m>PU4_by>AhU0dB!J+k_m
z>MvJMuAW+bYxNz~bE_9r-(USu^~&ls)sIy_RlTM9rRrCze^tG=`at!ctN&8{PW74U
zPpbQCGHZf0m)2ZfQ&=;irn08GrlF?2=8HAg)=aFqq2}hA+iH4h=GFX1%>y;dYgX0#
zpyo$4n`&OD`B}{`YIfJ`tNCNin>BCOoT~Y-CLPa+2jV&LaC~UIG_J=J@#eT4zdAlX
zJ}G`vd`7%GJ}3T-_3TYJ5-p_whf)kH=5O--~}7cM}&R
zE=*jK7?Ox3h9@c#R-!)9mbfZ0HZdXbwZybUS7LVJ-o!T(OB2fy4=28#*pPT8@qFS}
ziM@#fi9aX)l6WU^Chvf3+Zi)*WDYib*7leMF2zf}8`+9|cS)ZSiuSMB`T
zMYRvsey4VI?Yi10YM-s$TKjVCFKb_~-CujC_O05#)}F3CTiaKM{|>0`;<~)LNL^7~
zS)EZ=Th~%IvhJF?FV{`3n_72k-5qsv>lW1AU-wYm%DOdmkJUX@x25i-x>xFcRkye9
zK;56~{!;f&-I=;i>iX+5>x1=|)?Z#WE!{`vZ!*6*x;t^SSrKhz(sKT-dW`VZ=z`hPa~8!l?dZ768CvZ16w
zYlt^AHKZCwH;ileYQv2U(;H?r+}-f?hQ$rvYWQx$BMs{to^1GW!%rHvH|%QoO~daR
z4mTWY_*=uf4Ieeg#`7BoH4bk4LSwXXSYvsk*;v=u+St)Jrt!MQ>l-^8XExs1cu(WP
z#wCs4Zv0;3+Q!ElpKg4vaa-e##$Px7w((%&k;eaQ{Cng3jiPa&$=8(KbXik=(-lp{
zO;t@bO^r>-rcq5_YWhmkl%`vnZg0A)X@1k9rU#q8)3my2UDFdy&o*ssdb#PBO|LiY
zZ#vZUR?}abPB)!x>T5o)Iji~N=Dg-eb5V0yv(a4J+|oR<`I_c0H&1S!+I(yC9nEu_
z7c}4B{801C<~7ZaH9yt7rTL}iSDJs-ytny4^Pijl()>>IndVQL`&%+wf-RS}T;5XH
zGNPrjrMjh|rM=~gE!Vb8Y`LN3=9b%9dRpeS{71_JEz4V0wfvyvM=hILUTFDQ%P(4X
zx9n^AW6PT@Z?~Lk`LHG3n$a3)&1ns_hFgcWmbU7xiPq*;yY=eU@vW0uZ)%;<+TA**
z^&74Cwf45IXnnNxhpii1H@Cjn`t#OTTlcj7zV%P7$6HUfzSsJ3tJ`)#+l6hHv<+#C
zwGD5pXtUbt+uGW$Y8%@&q3vsJ)7rY)X1Cqj_RY4XZOhsoZu@@QhPG$go^ShU+s?Mv
z+TLjUL)+1|6K(%!`=HHf`)9kq{i62V_JZ~++e_ND_IP_!d#ZhO`?&V6w%^!3y?s{u
z-R)m*U)=t!_V2bo(!Rd^$@U+&|D=6;`>yuiwEwRCaQm_LzqP;H{!zP3o}V0)9Gv_@
zGMXHgEKi!rx@2pzBRM8{UGn;5XL4rp&g4DGg~=t!ZzsQ(T$_A6`E>HR58jshU({Dw!IU`cmpEsVS*jQn#n>O3hC#
zN}%znz=V!vd+Z2xuS7e*G1EUCQxuCA`T
zZl9rPmQF>x#f8a*#)Ws!;99jRbh{NrDy7jyU85)Ub2aKkZ%@*b$rKeSdc@!-4Sv!v
zYH&|a(M3Jgsvbe1`b436LBWr-Cb*`C#l?0mRM&c{joYPjrz1THEZ0Xu5HbxS{t`(<92PToo1NayiGL+0cm|!(ko~#c7od_
zxLtx9BzU|8kC))_5sQ(sHEvc9uzds6kjwTx;jiz2-U(t223YYM|@9IYbG~
z@F-!>KBTAtMki)SQ3KRyS5i7JlXp5rTMW+fF7o8tna|pp1{s`Wb4cYJf5vH7x1vQ&Rjr?)@@$2rBg2!i;Si5HYRBx%^Q!{8*5M#G<4J3Ti(qS
zlc$!sfCkcZdQ#I3VpH8<%BOhpHggZ%gG{P>C{%M4>K+O;B^0Uw3N;W4MO_qXeJB(?
zQ84dXOnKS>3`HJM+6L3wpiPC+RKwcDU?^zTmbV?XG1yqCF-7BPI!zbLSG|BrYFHE=CFl{|Yi{z!QJ-LMdeZPj
zjkzbqvZB{|pR0*>_B(Wa&>)@NiwFpj#1VX3)E_8nG@YMP}QU^7Vt>7MOiMXg&T
zf4a?+AXA{HNIjwOE_w^25p*V<#roPJ4#7Z*$QXwdlEtda@|ZU6aWXe&5!EcBwdSeA
zB&kY`_!FE#LZT(9Gc8F9P-BCsd-UWL>D4Sw-ojEm&lD}%Aj<_AqqQ3>jRwoD!P01W
zyGeawwMX~@ae3Y%~r)Iy3K^ts)=nhZmv^12sn#HH8G~a=*b{m0Maofs+pmynG)4%
z(S}Ykje$|4bQWNcP!4FMMxE$@pMU>Y9>=jt0tz^TRl!D3D9W!
zA!@8`)7E1m(g~LfTy1Fa1Y@L
z)c8qO5N0dwk?G;ORu(53NVluKni>c-wT<9;ny#Hvb3u(LXs6VZ@RoRH9-GE_x^dcR
zJx;x(YMCH}(!qShbq2#Gy^ZHWhTUjqW24ouaHUu^(+Kd7XfCNXX5luH#uU*7n3lPY
zv4%z(1r5|i6g&x!^;>BTDOxo2pf?Z;LXw!)AWMmMJUUMTu}kiZR%`I0b#AVcaA9GJ
zE`S9*7uzEbZ~wW0xH)TRi*b*|irVs2x~HsC^rUXnhFiq?u+xg`P^gP26!W1_v&J^4
z38GN5Mxl5Kh3W-`ngj|pGZc#FQ7A&9Px#5X6i>N_x3!O15vXh-U*C$`3
z=I~xX
z55$5;$Ps)^of%95gB^zyHNebRfY@_OvCEcX=OD$wfE2m^kSdm(HeOh}q6>_^S_%r@
z4$qe%&cc2x9z;PDw9YB&hmU~C#jC(sLY%)4&$y!f6*HU^Ff^=XlA!}Lhc8Z-&b;DL1ZZVlcA
z!!vDc#dJ~#7>|icqoYrz16@RoiONn{iro~8qbOPpZw*N%Hj$}GQj0#-Jv3(tV{~n>
zWz;;Rky7{2j!cctP+dRQfUTz28OLc1W^TjdPVz6YUo6ptmS8fNx}@I0Y-$n^NgBcO
zz>mlHq(QJ_tQQ!d8ss1Xxbv>CfkZAu&C_D=qkA!q8Wub9Hqn6hi0w#<2m)-+gyhZ)
z51M#zfMLAOn$_UWj2a?{!H*d1Zs??rFanE+rx)1KOVO|xh-u9(Vaii##Ih-db0}DC
z67)ii)h4MG)L3m2T~K4SNmdgzCJ!+fYP2gB`?H!i-8ie28sc4p01l?a%s>hVSeq!Q
zF$U6XZV;!7y2lzGl{{d?#L~S`l@~r?zYWejaTe)dbj|$9Ksx1lah{{jQ_?u}ppgK<
zt0lysvk}x-QEI%!8et1fXI|2oCv+Bio&6K&4#fM4A2LX7Y6i2gK`e|K6U1W%
z&zYk>A@zy`D40XYnFA*?&B$tE0KP{C5;a~X`|>HmhPbFEfr8tSJqN~Pvf4DdNh%KJ
zj!>P=KBUdNViOO--JpSN_62PwtIY_^;yp6rBo7t?V#`xV4C5^ZMj8WKi$bD6(5$S8
z!LUq{4vRTi^Z13`KEvC7&s@^>gU^_{o=o!y2174{k(5CI6;HDA@W8nz+6*n>cF-P?
zRly{fZ5RfoXarnTR6;LAEQ3&8O7naWLc*x2UQn&x@R3I
z-j4ty+ZYZaYhEat;}#krN_a{vTC7%d7G9mXMfa427Z%_+g6;(n*a_3w`!X0k7#ZLxv0NQuH>qIqiMha%Fa
zgaTTSDZ#RDki!Hon2i}p7-~v}F+q=)c-9_l;f#>RX(^MV<0d;==DE-tsQ{DpiOGP}
zq(l@zKPh{YeIuLs%=FSW454gdQ-r70lu!^)*c=_Onb~a)64=c1HZd(yYN~4#L{{4i
z)p{-`XS{57&}_n7c#`(P_N0T{JUAc(*-UnkOpm>JeHQC4i)m(^i}5MV1LuUOYk7E#
zp|V904mcp5l~#nrlO$CZ8&-=gmBr8!r!(jgFMQ9uWHBhTc>gR)vA~6=9kbZkusG&z
zdFYdaZ5CTUi(_sUV>OG@QWl#;ivw{MTSm)UCU2F+IUtL7%%WTlBA~Q?7N;XER%Dh&
zG}D;*G@G~Iqo+rC&QaRroFYA_8lWJ~vS}dHNCIq45fU{L1e?)|&4CV^1=i+xhs|^8f?XE&ePfKpxGRjv)Sy~oJF(QMY5R-OfTK)O~T_(3cMrzLSkrhy2oZ`
zz$Qk)J*F8ae{6OQYz_|D91F2oifs;w*d(w(Y>LlNaC2f>)R^R)ptITgvN=y@lRt?B
zk9q`DVkssc4*op(VkWyVrk4uh*sjfB%jUq5%?i*aAPt9=N9QoS&CuEA5Sq=AUYntp
z%>iGVBfU0zdnWrlW*f5`Wfy^~m{=Thv)P$5y*L*w43Cf)nw+dRIc;jPQ8YO^ZZiI}
zIaF&iHna(`BT&Um%kf*A0hP_MI-B5*Zgb$z=0J|kFwjmh&vO{iX2@o;n{INv(d0CP
z$qtRlF>jkgt~SFDn$1p9%
z)0XEBGiI>Z&{`aowK#Haaje2(O=MBH1YWe-R7AU!93kOMwnO7&uf~hkyl@anKm2q>
zT@(rhAsnQpi<&Z+D3na&qLOgbRM)6^Px2#P7>US(N7Q(DMDYY_ioH?eb~I1ayo*Xi
zQB(F7g_RPKsLh0w2tE9DT$+B8bi=i-VB3
zNUDp2kf^B@!8K5}7=@Yy3bk4kY7!{auqpPVP^g8WP{X276GWj%fI^LjLQw*R8VH4=
zCkh^jR03)|p6AJU?v3X;5n#nZ5z?lRE;PrcGCi5S&rz4zjl-h`M>|oFPG({uYD^o)
zhcwU&-(z^7k>x@IW*ahDsPTC0(`hs_Bs{&jBr2z#3#b{jpM9@x``q{BXW!$WyB`1C
zbxZr~83sI>m&;)());>>OCcda;>0m%oQq&qBrA$&I&&5oQ`DHH$V9>vGe;75#!)G?
zRahVM8A+T`P0Riu)ytB
z5Q6(8rUS{CGgub`v!9zRJPO5*kRE1Z0uzXEvlNitLX8>8gEH*Ln#AIm0_zd4V=o+i
zPK0^o6w<)SHd=@mB=xx23(@i!0tCoO189r}G`2~e-ohbgnkNm5>3+Hm_?|kq8a2r0
zzE_|7j%PmGDvbHrb>maMR-=D*JsJP(yZyQEZTh+E$U%KhhT@;j0c_37CL;sND}h77
zWM)u_Ks7DK_;er8O6?bl+PieXOVXofGC*ZNu8p`
zhJ{Qli0nN=#A3^UM_5e}q{btvISTa%3bhZ2xhsO8rk+H>N`aAllHehdn_e%xe}uQt
zj>n_018TH?8aXrQMa@i463uYW8%Xtni%JwxsAb|w+G))becGecIkZ5g3#Y1x=QQ%t
zP-9||mxdY>i@Y?{m{=46Lyd_=fC)7w7VSGm@Ooil5m>|{OacNTc!VcNt`usjYZPkH
zD438Qm($+jqSu@$=w%WKf#9B6CQe_f?MJ~RCkFyGH5U}D_Q-)ijkpfyqxl{WOGqB~
zc>lb_2!(!eQ4NcNmr0>!>0Bwr{1ofG1xsYlI`kd&y23lY2F>?VD!aX#7S_2&v+OdxkOQU*HrFC(HEdm%^T}g
zZO~LL4IwGDFUW?gRiIE8QSjV2tYdNv#pEMxCan;w_8O?oLIXu~6ht7C)BPr=Q%w%m
zm>e-O8O50#4l+4{V{!z?GBREFuI#;S$piJGDd3Kn3RHEPTN6d1#PstKZ?NBD3itP|19V9ms5G!bs6
znZ*$hMKp&syiRg~OaqOhv+jx`jijESS#mZAPjLSPLeQ1kJrrIu?;b4#KNF&RBvoif
ziUq&@;s!ifQmU|K+>RX+?PTEVB6v5Zf@
zV=bS4*K0q6Dwz3a*OQ;W{wY8(;tZ4Vizv08YSMHlh*Z_2)KH@(SFaNwdNUA&F|E6QIaSD#e9@9^ptX
z5^Y3e4(OsrT*h%-)M$bnbw!PuTdZy^vQ0Rb{k1^t;J`c+qXEETg7&utGe-`hiMe!&!;9)rn$0Cnk
zFp%x_4i~WGY^@1o5O&
z0Vvd>QIJ9A*tM8jnYy8}#MzC>)9!k4Jz2H6D+`p{VhA
zgtk%R@%R7(g9TjV@dy{7rWg)|8V{$kRM$vxP|e~q0L-EI*#a3)olm@)-T_Z9cu4FA
zPhW989BMUPoHSQ^jby8$Ad<3lQD?}HbRykjvu=@DLEwc(H#qj_{V2p>r^(_>qsiGX
zi$gV*caoH2to
ziN)TpMUE_fp+&oCF)*?iCRu!{oV5=C6;Y6tI*=bVz)!DL*CsJ7F48~-$CV9_g&AJq
zhuU}&5hC7qW+Ibg)h34$O~&Q?>nJSDQ(j83A-u>d@{|{^!Q>E!$*#Le+zPy_D2Rc)
z2HXn;en2JF848va4@q(SjTJujh$+GT10SNsTv*hIg3zF}n+BirG?>}(19F4}cynB+y!En>lPPEbJ+gk!tfM$z1c|))UB6E)?m6||!hP4GT
z2reo*0+cK2;FJMvif4knytc`)dxH;*S?A7O@RInqcsi>I!}CuG<3M`7RTF0*M^6KB
z&Rge@0OJaTXjsm@6d{M{4K}el#|gX>69%W43>IR8naAQjE%vSq&chm<@6cHd8mu%7
z4zC%U?lK60fV+vK49*;w%ryq*LQGCf8(un=Wy>VeA)=_XAwoHdW~fmw7CU?vnM&js
zn0Yu@YA7IV|vb`D?b-gzSiSl$s;!;9I|$+8q5DFY9w5x}i#UARd6<(+gf2;$(>
zGObzX483tKv#2-r=%Fnf^td#V9cn2=_x0klFk=(-ge#7bbJQK;KJgtnZ?{~FerufR14!D
zePLL_eBMuiOg5|r#|L!p&<>|w3_cBEc%0}Rk>DRUnH2B-5uAcGTk
zChK6GHG;*#FrCv!x~EjhI)Fb}$B`2QbD{_W-c{-h_jvm`fogi^{k&7_ET{&vqTvNH
z_#C(49SLOK)k&+NPnxyC89SZ$6CA0y6+A(D(>#|)ATdNHTdm#Toi=#22=>xNHqQnJ
z9^h@!MOGRHTR2dXE;0!9j&vG)K-cgj&eO$SFq18u!Kcp+?|?cVPBy#)o~Pk6Zb)
zsNtQ3Vx(wzz3?eh!&`#~aQI-A!Dn|2PEQ+rKEUAYufgY64DY-q=fzA;D43jiGdaU+
za)#IBw6DowYt#GX3kRxALK;9JLu7r#{f;%d?u?rlcB6hnh(hr;w975t$cvUWDzxat4!W1lefy`tunpCVZ1A*
zcdCeY#bOdzoL#c`1f|7C87=QOPRuqIvyH_gSUiHoomtcwe%GZYh|`LSuTdy@K%wY~
zLg_3NN*SY2LWx4r6NTC_6pHmxDB(h(6d($vHBcyeqEIRig%WfWJRYGlJ;_I0l6=G^
z$%l-S6qUj~9*@txB#DB!$m0j1
zVpALdqczxM<4~hD*vu0)^Mvh%?0IzCi`?_*Hf<_E2DjsFv>B-K`CI(Jiu636k3&s8
z3BW^KXY)STOh}svX%ivw2yvuM1EEHQv}v^%kL)e~o*JHo8o}V7n4)0K?zuOldvH?y3Q%3
zID^C_?MiD6F;Q!rYqb?P9EPZ{zN%~Bc-0OKR4+hj^rT5gIe^m0c$;3d
zfc3S-ikd@g@X+ZIi!H203f-gtXwAy;P1F1)d@=gu2D
zr`>kroiht(-CTI*?AvBnw$JK@iw9q^@Uw3!OhQ&dsRDYp>Vhb=SYn*pqScyuf)Eo>z3pP#_&onaQ
zna!EEWZspz3@?g)I`dDNAN#U=`M#_0%IEL+o~Ktmzvs{LSNWU$6Y&z~d;E+1-^L4^
zpY(6`Zx37+_)1_w;Qqj#z{gp+Sw&f+yw@w=oHZ+J4!vA?Ro3^j-Wk*}=;}c?51Kvb
z>w_L1^n*dq4f@TX-w!%A=;WaH27P?t1s7&t7`iZg;guIw;FZYBFMRRBfnZH=X7IYED>Nh&4ON8dLnA}ihwcn5
z34JTHD)ht9)1mEnIqjcAe+_*S`e)w7d6(y1kynD((b{+w?M-#f8`Tb
zo*o(>df(9R4Bb5RjiSLtWq2LtBSn81He%SAVLij{8MbZM(cza5PYqu@eEsm_!%vSm
zZ$#CInImS8cy`23MjR?0j2B6Mqxgm5L&Zl+2A3pDrj^VpnO*Wk$?lTVc)??NX-DZ8
zywY(wUfuY9*%f7D%NCSvD%)H3UU|6ui{(@CI>qP9->SH<;^K;U#Z7o6;tLhO$IB1%
z@XA92uRFZ6a#iJy$`e(=Dig0O{ASgIRZmv!t@@jGo^~;EdSBM&Xy4Mlr~O!aLHnb2
zLVH*HNcZW(5X79OFV=hY$Ms$M3FADxHZWq88du>ZfnCPk#!BOPW0!H%aLin@+)SA_
znD?09HJ>q`H-ByJHUDb9XQs^oD-W;qgL`Ow)w;u4ikJ4iX#LhYVWqA9>Ogf)_0Z~?
z>Z_`+ufC)DzUoJ+pRL|e{k!TntKYA=peDCwcnyBoR&!m=^qPBXzE!if=GmH8@KU|w
zH6P$*dV}MI@yd8pd^BF5cWeBf_|o{Q_!IFh@g4Cu;%~;^iGPyFOkA2MOjITs5*>+a
z6JJeCN!*54<1I<7Osq>ho%l)O7m42{4keBy{*m~&HlsFJn}-+TmDZZI4WW~V4xBjA
ze4whTx!p7mwV#aTgih`|bnN8FeO2-1kyY_S&BtQS!MuODmg9`=KNt!J_xnYU$i}B9
zhDt#6NK|A`H2jg~m#E-_J0EEQiN|oSCptsS4_!a=nV-hO*|~wAKJ&~^qxjbksYr^MfTK~9nn=1W&zg!NC7
zZPG7H@$;xNMQ(Jb1mw>#DHB&G$%{m%aK(c!h)Lo)aV&~iB|uCuD-v`T50A*+u#+Kr
z{lQRYL}VQEH6OcWS|pI(;EoN+a%ZehZky#7``r$o$o1!h)D!K;rcR5<%mALZo(bWy
z*za_Re2`c64)x0+w^TL9@xRW-eIjw6c06E4|}kaL$JS#qaE1&!2u@>mKrPf3V%c_mUBDQ(q!idf7R^f
zan0b=kzlJMyTp*Q`IvOVFDz%ePpl5))e^L3goO
zn4S_0_hn$fkm&RWTOxf^#CIc9`oTg8wXWanU9eW&r{*VPplAFX>Y7VO(QEA;nB-^%{2vfFvpFV8NJ
zy%0#}UA)#?o)#P2B+nodGuVom@6HqR{o?I#=33w5s+65RTyUm?v_9GEm&e1h%Qp{G
z31_bK$>n}|G%Tm93&+EmtJM=hFI2M&Xe%T-_D9zRQSRhkFG*}>8
zq+*{bv7p#5M$7%d>PTOC_~VJ89nY*-u`VVG0}Ey?nNu)z){{qKVkhMP)qw0c)hxo%
zVEX9Hka!0i*eN!=5ZfDZr+`I|J4tl4G9Q4#K)4F
z?26`yk0ThgNN$w7#ibE6Ysm{|ZUy6ItnsJc?mI0)k$!jJBVX{Uh?C(o_~crDf2Z3J
z5@Y>hyQ;4S-)2MxI)kE8RQBhjvwgu(SZ2tcun+(9(>#&%&6_o8&X|Jw*_&SrO6#PA
ziZG+WlVV8zS=k$u+r(C9qq9+<1V?m-vsQ-W^|lPj%C0D;s>@rB%lkgZ8a)y5oohwc
zFwqzjGxv-0#MNR`zFUmF2)P^OHo4W!V%7oksM)0uIhNQ2#nvrqZxzGFi0qhXf8)2JPTZ5~jR61pDjnw1;Qnjez4
zPmuXC*%=k(^)i1~U-GqF5NkmK+>%kV#xpI9v
z8JaX^(zxi*F(+kafy^zF`2R!k-we<4z5LpaUC^S>l!o-Wlu^r^7)=HYpLY{froWYzG+V?T}dN5B4vHpewD0
zFHVLJs^%!EnqFv@V$r=WCa1u7%o#CiXaQI;1GczZbcsxqSjmy9p=)AdieGfkfntGT
zEx^W(mECeTxD=(>7E_99ykFdf?o2USj1-s1L9#tMuthBHn;#Hg6@$fabl4z@3^^w{
zuo@qNbL0zFj^mu5p0@B-Q=|CIb%ft)Oh%Vc6yY>v{|{@@({HzL7zA_9~i
z(zh~=e~RkvhW>XT;=v;ms?J7Y&tP*m!q(kQMt=j0S#Mu)-{FB`(W}&4??BPO;l3iJ
z2?D}8B~C|zeOW*PN1aT$(9HzWm@MW8*^ExDYWK{jb>bwMQR?hHvK<@z>%fFc`vj#U
zT*cFhp~U)NY@V1e=LVxIq~?QxD}qL83Hsy)znj^g6?82Cnf-20FqGcrbYOZ}VsJDl
z7OfGDVupCE08cK5ZFR#-U?#RW*#)FAs=f_al-&X)8>>T^ne1FYup
zk#gb^IsS67a9&8P1c^JuVtg88hg=QC(f~8D7@r1g%W5c?FGZFJD2aDzCUc*kdMCA~t_#EULdBzzW
zndRH}@_&VWnIepS#ALrHax&F)#YVR!6yG)K?Acv=j-42{Z|Kl*Bh6_4mSv&%4!(Fy
zU7Rp79{qnr$ZpsHC;_~B)h9P9d}N6{z(c(1UFM0w;A2bX$-%H!*|yMe57VeE7J$HJIw4dXwHf}ZK$
z9q#J}T!TP|k3oDpL}Hg1{dnxmDzW~_7hcYiT>&{B6B#QvfmioL`aArhcVKTQ{XSS&
z{6$~i-v6sjFDPD*wG98+s`g4?C-W`xT+zHj#BDMjA6+lUagCVCvJSP^3zdRIsK&+Cj;Lkg@W~~Z{@jn-rim?xg+q1;p
z2jrt@<`jUOk3vE3#k2Buaj6_DCVnMrK|tPhlWdjU56M+o@-GjF=j0+sFA&|C@>%p(
zB)T7piFpr*aWL9z3dAZgPS(nK55;8n187wwpDO5^0*6EzFmu!KXy*f1Ls;BfAnt|=
z0l>tg(;tuqG+}oE)XQ3^&@lcD8F5B-JRVyS5Jl@woe+cbvE~NQRjJt|+KpWjg|$3+
zY9Ay$``AdcYQ!ixBx=gy6Mj*Cc2rqaSvwHskP-V%qJO^}4~8lfD2M*^_*!uNhe_=@Om2&|R=eNhi+)+MZy(VHu#MK4jDJ*KFeDmShz?l(#cfWW?
zP80_LpEio4PM6aqH^6-y8+B$6Xd$_1o@|seYiRi6@ChPaXpl%FG8A>cEZp@Wwl!l@l`a7@jJc6@?40%~rNY<|@Z!A|UBn
z5Mx(FjgygH?>OnDKDo*7uIz`<4^9_BhZV_O)Rhvz9Nqq~!(>6b~dcNzXGqMW|%h?9sy
zaOi4CMWGmrfQ-mcVVf`}qbza}bZJlYP&mCXB8-i~OFvVE%rVCQ}Wvo
zA8`AtVmz371JKU~nS_yQQFuml#$?ADUwq8S=HNLe&FPVF)?6!C;12%Of7}T_GDEy9
zX30AF7;r(KvK!fmo=jKK6AMd=$c4f5VfUkulZhQ~a0=n$Yw&k^oy4J-_(CLj?8t-z
zGGoLz1qk7X?<{bK$n|o!JJ+2LA8xmk8*~Z-P7ff{tL|cVDfWD~yBs4?AgB&BzFW)^
zm&>8@zG%=XLSUxb%?SHDFs<$&fau7x5NIGPEN`VBGb(U@=z{+JVMIMB<`DeM9|fbn
z55+$hYPAzOELRq84nmU^4V7AZbPmw}HovnWeHbBAXG8yCU(h$(@9ynG6wH|`;pbuE
zJFDdA`Ux0qa`?l;P(s0gt6}E*gRl%j8;ZT2d=gVmh{Q=S@RXne4O^$mrPzeS1@Od+
zLQY0Fz0J*#-NCav_8mDfVc$@hF=3>ME<4>_-IUK*UMLL*VVHz7qUxzD`_QfC$9#5nzaV@x_=JA#RuDXC>T6-zhMB
z;|@6%!3z1-yYdI3PL7IUnRnqoPuneV6+741Efdzak&O
zpQw9*xFIz9!`sB=0vC2eDQ*<||NiIMQ}#rIeMMa%XIKPkVTgDn;>N{H`Ew!1L}$nb
zpD16jXLeP7Rn;wW@BIcEk`kcqYB2QBNX{($fuvsnIekc+5UXXS
zxK=*=BJ{tQ`Wq1vO=4cYcv0RX9(FI5pU9ud+vOh@AOPtXQ&u9Joh@c4s5BfDoC>|$
z2!bz(!LWC$DC!>33gmRRyiHyUZ(t3~#8|-Uug;ID(A*y%6Xj}zD=ekSh!opbr+&=>z2qD=31PlqT58bb^;^WBpo^R1Y8
zb3efSPaRX7iMVY5Sv$qq>!LEZWP;2nJQp~Pu1c?0K_-#yghO)q3UMER$&mtRr=_q=
zo4~CB1jAZaDM}6BCeHs@wC2M!cZ#d!VR;Y+Dk*yxMO94TvhRw^-xeJOV&wZ8=#*=g
z$+0oSxu=V@eqe*_B3U8ZWmOxfbhR9OP{bB0A8Hf!C<%d`3$HT)7y?*&KxFQUt$?r&
zMSOCi%&vM(WX+B${Mh-pXn~8nya47ElS5FwMJoS)ZETrDWUx?VmdT=32tlm^?8=hm
z1rUPFv%qO#*zF8a&TjfU&R(C`<$p#@_Q_xRk2x!S;@4dJm0#VHll_(MUZ1=6^EJ84
zKNF%Re(8_92*~`JYrmo=q2yFMXRY6zCnkqfkNB>hgNXtO;m|DwDuTZWOQGesEZR4=3?8!uFYDgFjO2+Uth`?FaQumT9k?X!6LOvnf_YnZ*Oj&qV&Mg3V
zwy>A3_@OY#c^+@CXx|nq9T;EYu9*l@phN@xx+i
z!Q%tT{|=?^iy%x9c8-cUi1KBGvmnM><;1dE#>Mu@PTxysMB+6uzQDOhG`bhK6%WP2
zeH&zp-`y>KDII6NvsQfQ6gvB(A}iqRmwTP@t{Y8X0^kyIGwwj7W0UJEkPa-=TJd)5
zB{=3?d1-L!UhHU6EQGok1$JrN5EHGN#l@$^n0)boycy=;t!RH1^10!@!y&k5O9P_j
z-BM%<^Gj-FP0U@IPK2Bmr#K+46@dl>-6JxPkk^8P8`8NUH~S^{!rPqr1qh7qbuyjZ
zF|jb8fx6+@kslh
zB~3%H4O?%3G1wUq2vROiuXOP5!3ZG0f0G$mR&Es*a@+;?u821V&*odM+rM`r%F5ada~l_B60J@m?FO2mlcqoYt1LwvIO6wLYvajIZZ`gllghpp%l
z2f?ewi0JMN{uMcqOoZ!(0WGiVj`dyXm+QLaFgZ(ZE^xn^wnO5Pr^PVX%%=+kz94|`
z$kX7M769t-iI7|Mn0QZac19IAUl&J2pR?GxTmC`(!=1D)wl0vK4%Z!SWFI`NmfvxQ0#uo|%iT+t77K-X9~u4Uw?(px=o(Q6Q7b
z0p+*h-mm~7H${&ggBF=mWz@MCDG11+>
z9(l$sAn9UxKP=7}cq>S0X2AEjUe?PW{$~u~_in%C7Wp3Ziw8>(6>5{43fxQOWAe}L
zP43NNnS9F$Er~g|;ef=0OMLSB8{`+<%jC}sAb6HohFIu3uw09wZGR=scXQ-*$XbTr
z-b2AnTp)HMVSnb7$b2cb!rkv*)|VTS(_xpDg(<^Mbc&0>nISRV*}uX+^re$SMN0t`
z2|P)07(ty5#17`lma3scZ-^~Ihy=Q((_JZk9Z^luZhOQhK5{NP3+*#!Qv_h*0)Vk^
z%2m<+ME_i0PTv1=|G&7Gkh5`c2H#v5>pOGC5B2vB20Z8n|Z}T(hpgA3!#BA@|jx@xvWr;%L4(qX)|2kG2*TK^lI6QXF$(i$;X}e
zw5a<4r1^n>6MqhLd)&DhPpE*0b@s@qmt#nzh$(3#H|NXoXA!{Y0d~odi5n2dne99B
zIMVi+1tR+Zph9e3pnVkbAaMET&X!tSPR>WXqIjqnjabqYl@|{OifaMs7Q)vCO-IYa
zz!VFi1P;PkIv7q*hRc{{vMT5|QPdP!F0+s%}=|qJ?C~M9{bxv<=H4
zBNcnWaGt;vlSpBVtHODMPQMsEhr(#UAG<-YmGZcojoh^*dcom+=-zb@cv~&z`k)@i
zgULlAA7-Zm_+u?TW3g#-sh`28j=_xypKX@eL)%q`X>in?j-vyZ%~s%(E-0nFaQ(Vq
ztG8lNU5I+_#iF{zRt5FMi;=u!B&{LEiA{00A*cQ?2MyBNmypG|9vWmm0%#ELUT3@t
z6R4!vT5S7aP-v~&5knNc!5{8ho0;yxZLtMYEreE>58@1wTd+^Pd99K3PG@Ck=(sA}
zDx7fgETzJ_fD8e)Ur}~sj9;#P)`k|nH-Aq+^d7_Uh}{ahLadXkqR2RiR~G>PE&Le{
zG`NMaQ33fOywKl>PddPpy?J*;(z$)!X%Yoi4u{f;?j0C{yr|m{
z&fJZ-=BHtxQTSSfgI5nl26}NI;3UX|xIRv&Oi`hWiQ)8mpStiWMI@K|-Ij2AzHg4-
z?Fjo9QwX-hyU;=x5c3tcM8NSi^B+Bq$jcC9Q%{Q}2wd*QDHvZuoW{wV#o^2i$QIFw
zq4dfC($}&(1W({!mI>Da_H*=EuusvBn4^U=m-~9FaZaaL%hmcJ{TvF_MKq2$Ses+8H^xKn^K`Z66X7
z*)x56UVe>EsSW+~lp4~NVn)Q>guM8Tk?^4Lh!^%}i%MDf<4E|EP5!is9wPmstdK89
z+}TCT#L6)~QFY6~)+_SCONG!^-H0e$^p>c-5n+R)
zc`ym;NKYm{oiS8!Xa>TXDLbR#K185V!3THx7UFOnuH!Kkrkad!(R2iAir@?txu^Z`
zr*lowu`If0^Qslk#BLD@-;z0Vmdq*`IqsR0F=xM+96)$~F1BQ0|2qGz%E6c;uP6XV
z6~jwe7;_dvX)FvtlINnU_hI6*ey~YgfT8}c0a+ZDSy>1XyAy^Mgq{LI4_MA(3aFjk
zao`97LnDycjYplgm;AfTuG1^SP6B}~7S>Sp&BPEVnzFhd^_YsBg3wk&|VMorw)FEeWQWH=U`fLK2FWOFSp|i
zoFBdH^gS*?%E_|DCp9Nq<)F`~9Q3gX`&4*wlo`!QXTo|8N#~{q%a4!+dneXk4BY`m
zD7r%k8GaNA0(1=8j?m@D)150K;R{#e>nExI0!@?>``=Gf<^a?5-G_j*f8vXXd~d`z
z-+Tr$Fh1h_5Tu2z&&EKy2Nho!JC9RguutEN1V4@pjK|rD&Zp@pThPf+$>ZhFsnf;W
z*a7JK9=Sd2o1%JHFN<*`6w0><$YBZ`O;*>Uw;h?baxo&k_MdzJVTZ+_y*zjf;azN)x&fp$b||7C2lK_NrvP`t+zqr$mIn)9$@U|{oFM^+
zaps^Ct8(QOXG($7iCvrmktu@NayB_nJDc36VbwI3zB^CDfZ@CQw5mgAYU;kKBmTM?
z{J&A1iP@MQF3$5iuk{c2iTC~erRndbi_x)*}Qqt
zf+wSUa1?CaEmKz^X`MZEl+2zATnW92K);6l-*ZH0`(Bv0=<(=20o!m(`{OdJ0D5dX
zG}>BZE#YEJ7QMmHgNT5N)eqp%(iX9)00GLu2+@BOn-u`2SGm6R@`Yi5JmbHq!V4=R
zI75{VBc$W>_Jby``unreThbZnxjy---`(D?K|s@*IzffAsOh~pF(QR6VBc18Fyw9sXTm(}#fi_%XZ_CdupH+Tv$
zM*(M3*mqnV{c;P#vKvS9U{-TJ1qZkeXpweqklEGp8&}*VTVA?+3?d{89^W_bNCA!u
zOoiZ9h@M}+wD8_d(IbcsK09gj4{Hh#12J**T|DAS~74ze8O5CGptpV#5NFIRvCxBQu_rb3c%~UzXv^q2IfanB!y~5|FFU
zS&|PU0pRc=p*fdCz+%PFuG6EUI8zQDcM>Y$eW)aaX2frlgXiRn=aCu<4p(x;J|Qisz1uO=8eb6gn|PI%l&kwKtzI`pjtK))P-zFc%ia{^9G
z-i&DU8}N0bI9sQ(R3azBG{&y(d;<7>y!cK51cLKfG2DiX!VeK)fD)Y0Q3tq-4~SeG
z6hnOcEb@;sw+f=4z_H5TM9wV>{(A2%ejL0BbmB~AhWKeD2*C8Whhf+*zm+hQFULKY
z->hO8Q`~ZAG!iA##d1&}1GL&C-#G^JyI93ICr*IsvgF=;7^GaXTBE_*V*wOk{l*GF
z)9gV1Sh3b85kBaU*1q{8?{zz5xyrcCcW~ftY+zu%+MUILbf#Q<=FSn_{W#g@%RzRp
zO8hbc28`q2?dI@&Ryv81-bOd|6%RT<7>LU_wna)hvX)%AR&@-
zlaLT|f*?pG2%@5*f`lMS(V~g34e?Pit#6GL)MU_ov7Fp`!XRzxPNrHIzS84UdT
zk)KQ^>Djg8a{Ud3IdcmrMw^zsGjK_7e=?Sh)H>>nKo4%11@yjf<~jIZ@npk{&xI|5
zn`mb)Pa^I4La$0&uD{K+QvWv7if6adOiT8xP4f+9y^Z^Wr?U|?gNsd|30yG$BPD$a_aOC0nsTe$U`ypuh7W{g-$-FMO>^42;&4<=4dXTt
zNyUkWk(!9Q
zWQg0UVQO7fr}hbS(4JqZWtD9l{<*eHguy(xm@wK@@;;w$_cc@8S5kO%8|Rt
zU7yLhZVQdSau?^CAWoN+QoRyrwQCA0ySLhcbL8
z;s2DQQQz_IZ;!7CX<2`zX=u}qVPt$PN)Q>0KsDUt7(?a6eg`E*?gkF+05_H6L2q(C
zFMq<*7>@w8QIFrmX-*XPWT?$3_Rlt)p{IxaqUgeHYP{Bk>*en3LXW{cX3ZKFKx4k;
zTXrqp$TO0=y?7Aip*9<+2K7)QI1ong?BokMa)Mm_;><@&$h)+{fyTKgXZtePG5gDfuLY=HltJUUkK~ex
zRJe&ubHoQa@;$hvq^P;HTZnX!xh2DvLYX{>1Kj{g2(LUd$mFb3Zpldwz2r7c(UZ8v
zrnRHpk7N~QsvcrLSZ}AHOq8>fYTD4;T?L7v1*hfpa+Q4|^}m_~U$4NoeLYuKNX
zKDU{*JTA`aLHp##F4>SATQ6ZFnL?GuT-PrLNNvdsBTqK8(ZQBa6szJy@t#~X^~yb(
zj@&bN7*A|Ew6)Ct?miyL(KKt|u3_iS?K*h$_~?T@Jp8G9&yy1rZ_55RJXBA9?FzMo
zmj@+@F(bV><h$ERenH~Td49FRduN9g{t*YwGFEFK-FYaorJ0jP<17$?nc!Es9KDwXHc~iRWG9I
zHB`NWs!yP=0ew5@J3=1~eJu2opq~o;d(ba{{sZXOL%$t{dN72-&+(ZSHbu(jN4({3*+Z79*406CSRCBVVVomW|+3YbP%R5VJd~`8cg?LdI7g8aH|eC
z32s4fYYewmaBB;vFC79!2?g#TAm@{Dh80J$je-HCbnE!x>9v+?HF$f-S!6O46YvJ)T
zJnq5c1v~-IYVh=fXCrvFhG%DZ_Jil^@O&GdGvJv8&!zCphvyD>9)jl?cwT|$AE;IX
z)qGLSifZ*xtr@CyLA7{P8;EMJq1rf9%RsekR9lK_g{Za<)sCRrDO9_FYS&QhE~-61
zwWqM?U@^er14}S0tzqc~%K%tL!!i?=4`5jb%Qjd(houCT^RQfkzYomHS
zRBwvvZBYFsRPToBeNa6a)iY3iE~+m<^);xz0oAvo`lqP=Evnx~^%wA}0k5X;Y6q_*
zc)bCy$?%#1uT}8c2d^S{eF?9x;dKsPx8e0GydJ{qDQJLOLysEOP@@iN)JKg@s4*Hf
zR-ncj)L4fag{ZL)H4dZ3Dby%Kjhm?P2sHyyvps5dL(QJ3*$*{`pyn9V%tXyB)XYK6
zT-02On)#@?1vU4e<{{KPiJIS`=2g_ZgPKoJ%Zge(QR@}dNPo2F
z5Ou>)w>|0(Lfw(5I~jGSqOJnJH{tgd{IcM;5PmD+w;q1m;CBFiN8$Gv{&nG>1pgHH
z4~PFK_)mm?I{dTXzX<*-;J+UJ+u*++{zu^d2P8o9g5(G3B}mDTMnD<|X*#62kd{K)
z0BHxLgOH9vx&Y}mthHcm4r_Z@XTbVCtP5dX0qa^=3t-&^>*uhZfb|@#S77}K);q91
zMt}hURs;kgpaB8~Az&l|#vxz|0x}UW9|3s?ScibE2-t@}BLY1T=!d`%1V$jRD+2o=
za0~(`Aut1h3lO*lfnOo;Gy*Rm@EQW|BJe2!?FiB%CTN*19jJF0^-iJQ1=PERdXG@ghWdKc
zua5d7QU5K}&p`cb)c*+e3sHX`g4-jw6M}mpI1$0g2p);xw-7uT!BY{OiQxGN&PVVk
z2tJD7(+IwR;A;rJi{PgS(ILbGAwCERL`Y+Vv_?o*gv28x5g{WHG9DpQ5%L~F79ivk
zgnWvSqX;>Lkn;$+f{^P7`2!7n(I5#8hNHn)G)O~(chTS;8a6@0d^B8-hTGBbQ#33_
z!!v03JsMs?!y9OL3!yrM`XjUlLPsIA2%*OjT7uAv2)%~TI|zM@PzM^dK%>rRvf
zqVXU!9*V}J(fAiM{tbG<|@kzoV&wW-(~i3(b^>LL-W>Xo{Z*iqj@Hpm!gFyS_Gj*1X@I*
zMQ60=g%_m%Vv^awn-=oEKw77>BPtd}S
zFg?P|2=hT$0Kys}EF57S5Y`=GeGxVQVS^Di5@By3>}`ZiM_4YxmLM!2VY?A_5Mjp<
z_7%cTBkUK1-9>m!gj*5b5aD46?||@b2%m=V83(efl(UPG%|Xf*(>Qqk&7w0Z}vW}($Qv|58!o6u@ES{*>E
z&(S&nt;5l}3tGpc^#HUUj@GZE^;>8?7p<3}^<_i=5qd;e5K#va^$^h%5p59B2@yRI
zk${L~L<~X1Xhe)f#6(1-Az}t1vJtTq5o-~#2@yLHQG|%Yh&Y9a?+|en5f2dIL>mLz
z_@GSy+H^ykK4_DSHmPXy2HH$Un;B@6jW$crW*ypWMVq~7^99;`g*GK<^F7-9h&DIT
z<{{cBXsbh854810+W@o;McXE5+Z=6MqHRaCorks`q3y?L`<&PsXjd2Q>Z4slw2MW%
z*U@ek+WmxfHxX$@q!p1Z5jhHxA0YBeM1G6NGDPy$Lqy7mEJu4I+E+*WAhd6a_Tgxs
zg!W_6ehS)WqWuE2{{ZdRq5WpG---4I(f$4cb`i0Oxz
zB*eUinC*z!kC-EfIfa<-5OWPNcMqDu(6grQ3Z
zbm@jJ3FtByT}GhGTj=sGy39nEdFYadF6+=`8@k*;m;31Q99_!MwJo}KMAwPvx)NQ#
zLaYw4o`|i3*!qZVj@WjH?Tpx^i2VSuYYNj|=GW5OHpZ^FiDU#J!KW
z#fV#jI2ApCp0&|496hI?=XCTugPz}_=WV`i_rTSUfF~`)zQZX
zeI)d$k3N%-Pz4D_B$$y<3kg;vG(tivBt#*hI}-XJVHgr7AYmF3<{@Dv5(<&<84^w-
z;YTDqMPGOHt%bf4`Zh=3Nc8QAzOSP1F!a5TzK`+h47~b2Ud_d;-{aLQc(ok;Mx)<8
z^gE1xr_t{s`dvrAU(xRw`Z9zYmr!h#GObiLgFbTmLc&MBtAgm
zGbB3E--!NR=m6vK2#iVaNjvt%;#M
zF?1A$reo-04Bd{Q2Ql;nhMvOEs~GCQu;v)n3BwXFYz&5dj#M*JLy+1MshyG91F3zH
zx(cZ~kopZ$f5vc646ljdkr+M{!?$7ha}2lPwZ?dDB3|2$*B)X-5JsHDh-VmC9V2UD
zq%TGme7F**yQA7YF*-Z0~h5Aa4A-rR<yfX;ze2ys+ro4|S3os=Q
zQ$EC$!QhYHk9U3W?oqsZ5$|5dyEdd(
zL%I*rtw;|=dN|VCAiV?9yCOXv=>w2H8tD^|J{9TjA$>m5KS26Aq;Es|KBON)`bngh
zA^ir@?;-tnq}woEkLean_r~;wnBE)HhhX|ROrL`3nV3Ew(^q5qR!rZI>7Qfz2~7V6
z)4#{`pD_J4ra!{;=a_Coh6x!y$nZl(G%~s)qZcyXLB$9s0A{#hMor9+FryV_bi|CVm=TW|iI_12Ge%>^B+N+1j4aI9h#5OE
z;|6BPn5n}|cg(DbnW3234l@T}=3LAy#LV58S%jH(%<79-g_w06vmPOH6f!@=dv)+$
z3f?QkdwcPIJ-j~|@4t`tcj5g@c;AWH-ymxp=J;byJm!qXoCBEiBj!%S+%1^93v-Jw
z_Za4WgSi)wZANxYWJe&o6S8|E`&DF*MD|!@=OBA2vezJcBeHiO`%`2WBin`?KjZ`>
zr#W)kA}1O-ameY5oI%LBfSjwC7m0bDG4Ex}dlmCiFmDv*O~kx+G4DOhn~!;GFmEH~
zZO6R*n0FZSzQ(+Bm~X=T>X_dQ^V?#64CeR5{6UyM9P?*j{#?vojQOiDe*@-k!~A`i
ze;*4xvA_ol0c|U2UK`|fKwb>;UPIn^=)>
zir!d}h!rVVF%l~>uwpJ&EXIn}SaBRH9$=*}R(8e8URc==D~Dj^Xspb{%K2FNHCENY
zs@Je;99F%DRV%P+16F;4RR^)^XRLaNRSH(?vDyo(C9H0Q)e%@7h1G9k^;E2$fz`9I
zdLCAcnAT~F}
z=62ZpGB)?e=E2xJ8k^t6<~i8B6q`T9=B?O#0Gp3t^S9XiBQ`s+#f&Y!*wPSNT4PIR
zZ0Un7uVc$3Y?*~E3$bMlwrs(c1K4s5Th3w26>RwxTmC?y9)&ef7>L5=C~S|y6coOJ
z!YL@6jl#t!T#LdjDBO?2VicamR(EWzjji>uwFS0z#MU@$?T@XWV(W2iJ%_DVvGpFd
zzQ8sewpp;P3$_i$wlUcD4z|6IZHuujAKSKK+b7r_i0w_VJq+7BVtX{U56AY6*kQnq
zCfHGc9b2*E2kf|p9XGM#F+S;yPg3y7A?$34oiW&%ik)Mz^EP(1!miJ;>nwI%#;%9h
zrC_%ocF)0XJN6`C&)3+SiM_Y5_gCy|jeY6ZcNF`ZV*g_7UyB1?IM4(Ky5PWTI4}VR
z(s1Bo98mCSPkcH6pH9c8k8p4t4lcvNZ&8$lqSsI~4n06FQd2$iYKEu9mVgVcoB+sqqqpg=TZCvitnKK8IJkjSbZD|!?8#l
z>x^TWIF^fJ%W=$(W99g=HolyKFR$TvBOK4h@g+E(hvVyTqA5;fp1lQr=H=Iiqkrr
zPQdAOoZf`fpWyUCoIZ-vr*Qf_PXCD0<@m-8--P3v2z--;Z*uU>a(wd{&ggNb8qNgb
z%m$QrqQnO!fhdVUNk^1)M#)%|EJBHjv++1P2xn7qb_~u=#MzlRI~Qjc;cOnh^}x4v
z@vRl#HpjQg_;v)oeFxu8!?*9_+h1|+HJm$w(r}dCMd>4y{((|E&JV`<*Kz(moX^4e
zBAh>r^C$3K1itHt?-KCcOk8lsg+{p03>UiK!Zcj?7#DWpVhAq2hKuKL3Ap5rOWwE?
zfJ=>VsU?+Eh;s+ys
z@WcTtK&nS?7FaOEJbl;Fx0
zTzQ16I$W)Vt8e4#CS2W#Ytgutglofa?G0R;h-*9XQ&s%*E`ItI*Bjw_32scnjX&}8
zBK&*}zXao#Zuq4aeo4SDiTGs}emRC;9^+xh1^#*QD!mT;DwF9?~<5nqd{fygzxSfjITXFjr+%e&f8}5YS
z&OqFmk2~9OXD{wN#T^BA{>0r@xVr{-KgZo;xO*CRFXQeV-1ERa3+@fay*aq|5$+Y>
z-gErg6TeQwuP5>A@3`L>_v3MY7VfXY{WG}#0KZkkZ$0r_Z~Rt>2R?Z43LYH6gIjoL
z!NWdyxEK$Yd0DW2ZO@4)YM@Ox+cJ`TUH!0*NQ{T`l~@hle4M&j9eJhS0>Up!xc
z7ka!Hh8L^whXH?#!XH0Feiia|$Yqf4Kqin*FqB?U-hgrt%2U|-z?KHv3fQZ_o&@_5
zs9sRJLOlTWIUGIVmw&<{1htG95u0x3qmvs0^hkH6a)xoaQRn_S{bvl2Yu8B_9
zTBnQB>ALB3ujq6Gb-GbH-8(wnOr0)Ur(2@at=8#2*6FtEbo+I>BRbtFo$e={?vAcX
zgsw^#U6m=iD*JR*PU@-#>8iHYRqds#I$BqCimvJsUDYpiRnO_F-qTgJ>GT71dZ*41
zuQPVi8SmD;F3+?MOy3UqE;b?#m|_g8f8Pj%*AI&&YLd7sXF
zP3JL4=Q&5`xlLEiqN_GRSM4iZHC1P+t+TY$Szgy!3Urq3I?HD|OR>&!RcEp5syEkF
zAFHeWwyye2UG*$o_1|^XnfRy9tCh}clFn<6&TEm*>!z+oCtZz6x*9WeHL`Uz?(1qM
z>uRph)x52%HAYt}T~}+muGU;#ttIx)&tCvWa-x2p^}qbFSmgEs#DRaDJixwD
zIBWl3_;^jii%;VRr+wNOdHT4AxRrZ^^K#F-f_p>zZD^<3AABZHUK7kKa#NLiW*$
zsX>zQMzFYU<9d)|zhsIF)ym1flG}|IR%ec*#P#Hg1iG)31i5OS#D_*|BtiBJH{xA&
z@)ClQ`@$OK<0;<-HE
zO`Rs0+>%_iq)5gm16^c}WGou%YKM5^zEJd}Bgwdbpw*Gn&n&0)b>*%|8q?3L
zHmXR9l#HcWuDjuq@#->HSr*-((1Bm}-e{yTc!ELQKS6XJ%Si5eAK_Ed%`rDZe*bSkMB%F=
zjQ43XtR8V*H4vCbK4QCS5Vm3!(8!L@B*SHcV}i4nK$EOMNWQ5qG{{Evk`J9f{#fjK
zu{e7~ORZ6^?^W5de~nvpq-2k*XLh7X=0aDWRirpi{iM}Waao=(nRmN7uOfwJ8w9Cw
z^h8li+p
z_M8S*d7;v%wmgS6h52!2I$5as0$WSNTIKJ1R*UkXEwZ+4nmo+>w+;I(#m7o>dSA`2
z+g2n`6g7*-Sme_QEYht4MMBPd&q{=ZU>d~s4HUjw>RZ34^QM`Vzp!QIb6}p9L#(2l
zGsbp{3k4~M-d4hOLQog&-W=@WF0IP%asHnsN=0Q(Wu&@FIGaC|w-_e;azEoSZTb9T
zyRTSJ1dm;k;gRgo<(BHULv2}?CX$2Y4`~dXtiDcQRCoEBFNa>Zy4#3gZb
zlH1c+cD33m@F#hO4_znx>dVvR3xA=Fd{&hG{z0POoR*EE(R@#N&r4>DZM?A2y+LrH
z%XHzWF!BkZDV)vI_@AyUhiEBeqiJNC%aui|f_Sj*xqLI$HeGTH;p>u`?HuPKlvKyK
zO0;ZO_POQ09ko1iigP`?Y0oaRWUBF!Su#Y>n`^O|uHFB*QoJP7{!nXTBeRA7>Gm+P
zfmsksH|Jvq`JH
znc~nMWqV5=8L3s9lES*Yv}d#ClonRUw^OZZ@hH)TiiGD=t@1rBfj#r0w6XSJz4V8^
ziB?oN{sn7IzQ?p6ao09d9vLo@tfMD>wTPO%XV
zZ4~KHqk53vN=6-sjhphbv3y7wKrG-ix-%$CM|$P(!X;#`I~bp3A=NSI&H1I^&l&G27m=
z?`i{t%Uc7T*7|Mn1V<0TKUB(PUUyBilVzl9S)~{pCMCzt{VHGWxkWR;npV
zq)`p3uSRvGf5T|=KfKQ6XYzJ>ne3K*0_E{EXzMAwkA+Qro^k%Nc}wRnbCZ*}O1+|b
zzN7|om1?K9P$xfBSN`t~>wJdRIESaUQn8s1UrC=?>7XiaH@n3r)geCuc<
zaVem7id2XHjnyr`Wd7BvM9H)sI)j$IMwp7y}6VFlP{O@4D
zwTH`zlH0|`R?!aP2AHK_vmmES?oyDJs4jB`b#zhOJF`Mvq?hFOAXp=nBo^Wp^H9ze
zOdNk|A2E(p6AdxuHJ1(l#seO0=GWFT+H>TD{{_&zBA0T{#xe6h2SISv#l2~jPaA$J
zt!CQ}Z2@sza3x&j^O~8_9$u@wZy!eoF}c91^q1W9l99Ooku+J&b;OpJxqfL?OZay>
zgZ=}|*pNwA07rOjwV=FAE-<-Xv*P|Kc`rfT3)I}vW|Ku}FE1k3*TX6-LqkLwKTltg
zww