From a9d24233b0eacaf617b4c63951bef35f08ab372d Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Fri, 23 May 2025 21:19:50 +0800 Subject: [PATCH] add fx strentth --- ChanKLC.py | 379 ++++++++++++++++++- DISPLAY_FIX_SUMMARY.md | 102 +++++ FEATURE_COMPLETE_SUMMARY.md | 139 +++++++ README_FX_STRENGTH.md | 221 +++++++++++ __pycache__/ChanKLC.cpython-312.pyc | Bin 47250 -> 61874 bytes config/ChanLun_SOL.json | 1 - fx_strength_analysis.png | Bin 0 -> 274740 bytes fx_strength_config.py | 153 ++++++++ fx_strength_example.py | 162 ++++++++ strategies/Chan_SOL_2.py | 551 ++++++++++++++-------------- test_fx_strength.py | 214 +++++++++++ test_web_data.py | 107 ++++++ web/app.py | 24 +- web/templates/index.html | 413 ++++++++++++++------- 14 files changed, 2067 insertions(+), 399 deletions(-) create mode 100644 DISPLAY_FIX_SUMMARY.md create mode 100644 FEATURE_COMPLETE_SUMMARY.md create mode 100644 README_FX_STRENGTH.md create mode 100644 fx_strength_analysis.png create mode 100644 fx_strength_config.py create mode 100644 fx_strength_example.py create mode 100644 test_fx_strength.py create mode 100644 test_web_data.py diff --git a/ChanKLC.py b/ChanKLC.py index 4a9d948..0e9d994 100644 --- a/ChanKLC.py +++ b/ChanKLC.py @@ -1130,4 +1130,381 @@ class ChanKLC(): else: features['klc_star_pattern'] = 0 - return features \ No newline at end of file + # ===== 分型强度特征 ===== + # 添加分型强度相关特征 + features['klc_fx_strength'] = self.calculate_fx_strength() + features['klc_fx_strength_level'] = self.get_fx_strength_level() + features['klc_is_strong_fx'] = 1 if self.is_strong_fx() else 0 + + # 分型强度分类特征 + fx_strength = features['klc_fx_strength'] + features['klc_fx_strength_extreme'] = 1 if fx_strength >= 80 else 0 # 极强分型 + features['klc_fx_strength_strong'] = 1 if 60 <= fx_strength < 80 else 0 # 强分型 + features['klc_fx_strength_medium'] = 1 if 40 <= fx_strength < 60 else 0 # 中等分型 + features['klc_fx_strength_weak'] = 1 if 20 <= fx_strength < 40 else 0 # 弱分型 + features['klc_fx_strength_very_weak'] = 1 if fx_strength < 20 else 0 # 极弱分型 + + return features + + def calculate_fx_strength(self): + """ + 基于专业缠论理论的分型强度评估体系 + 返回值:0-100的强度分数,数值越大表示分型越强 + + 评分卡系统(总分29分,转换为100分制): + - 振幅比例:25%权重,最高5分 + - 量能配合:20%权重,最高5分 + - 均线位置:15%权重,最高5分 + - 形成速度:10%权重,最高4分 + - 次级别确认:30%权重,最高10分 + """ + if self.fx == Chan_FX_TYPE.UNKNOWN or not self.pre or not self.next: + return 0 + + # ===== 一、基础要素确认(先决条件) ===== + if not self._verify_basic_fx_structure(): + return 0 + + total_score = 0 + max_score = 29 # 5+5+5+4+10 + + # ===== 二、振幅比例评估 (25%权重,最高5分) ===== + amplitude_score = self._calculate_amplitude_score() + total_score += amplitude_score + + # ===== 三、量能配合评估 (20%权重,最高5分) ===== + volume_score = self._calculate_volume_score() + total_score += volume_score + + # ===== 四、均线位置评估 (15%权重,最高5分) ===== + ma_score = self._calculate_ma_position_score() + total_score += ma_score + + # ===== 五、形成速度评估 (10%权重,最高4分) ===== + speed_score = self._calculate_formation_speed_score() + total_score += speed_score + + # ===== 六、次级别确认评估 (30%权重,最高10分) ===== + confirmation_score = self._calculate_confirmation_score() + total_score += confirmation_score + + # 转换为100分制 + final_score = (total_score / max_score) * 100 + + return round(final_score, 2) + + def _verify_basic_fx_structure(self): + """ + 验证基础分型要素(先决条件) + 只验证最核心的分型定义,避免过度严格 + """ + if not self.pre or not self.next: + return False + + if self.fx == Chan_FX_TYPE.TOP: + # 顶分型核心要素:中间K线高点必须严格高于两侧 + if not (self.high > self.pre.high and self.high > self.next.high): + return False + + elif self.fx == Chan_FX_TYPE.BOTTOM: + # 底分型核心要素:中间K线低点必须严格低于两侧 + if not (self.low < self.pre.low and self.low < self.next.low): + return False + + return True + + def _calculate_amplitude_score(self): + """ + 计算振幅比例得分 (最高5分) + 强势分型:分型区间振幅>近期平均振幅的150% = 5分 + 标准分型:介于80%-150%之间 = 3分 + 弱势分型:<80% = 1分 + """ + score = 0 + + # 计算分型区间振幅 + if self.fx == Chan_FX_TYPE.TOP: + fx_amplitude = self.high - min(self.pre.low, self.next.low) + # 加分项:右侧K线低点低于左侧K线低点(经典缠论强势特征) + if self.next.low < self.pre.low: + score += 1 + else: # BOTTOM + fx_amplitude = max(self.pre.high, self.next.high) - self.low + # 加分项:右侧K线高点高于左侧K线高点(经典缠论强势特征) + if self.next.high > self.pre.high: + score += 1 + + # 计算近期平均振幅(前10根K线的ATR) + avg_amplitude = self._calculate_recent_atr(lookback=10) + + if avg_amplitude <= 0: + return max(1, score) # 确保至少有基础分 + + amplitude_ratio = fx_amplitude / avg_amplitude + + if amplitude_ratio >= 1.5: # >150% + score += 4 # 基础4分 + 可能的经典形态1分 = 最高5分 + elif amplitude_ratio >= 1.0: # 100%-150% + score += 2 + int((amplitude_ratio - 1.0) * 4) # 2-4分线性插值 + elif amplitude_ratio >= 0.8: # 80%-100% + score += 1 + int((amplitude_ratio - 0.8) * 5) # 1-2分线性插值 + else: # <80% + score += 1 + + return min(5, score) + + def _calculate_volume_score(self): + """ + 计算量能配合得分 (最高5分) + 顶分型:第二根K线放量滞涨为强烈信号 + 底分型:第三根K线放量回升为有效确认 + """ + # 计算前5根K线平均成交量 + avg_volume = self._calculate_average_volume(lookback=5) + + if avg_volume <= 0: + return 1 + + if self.fx == Chan_FX_TYPE.TOP: + # 顶分型:检查第二根K线(当前)是否放量滞涨 + volume_ratio = self.volume / avg_volume + + # 判断是否滞涨:收盘价位于K线下半部分 + price_position = (self.close - self.low) / (self.high - self.low) if self.high > self.low else 0.5 + + if volume_ratio >= 2.0 and price_position <= 0.4: # 放量+滞涨 + return 5 + elif volume_ratio >= 1.5 and price_position <= 0.5: + return 4 + elif volume_ratio >= 1.2: + return 3 + else: + return 1 + + else: # BOTTOM + # 底分型:检查第三根K线是否放量回升 + next_volume_ratio = self.next.volume / avg_volume if hasattr(self.next, 'volume') else 1 + + # 判断是否回升:第三根K线收盘价相对位置较高 + if self.next.high > self.next.low: + next_price_position = (self.next.close - self.next.low) / (self.next.high - self.next.low) + else: + next_price_position = 0.5 + + if next_volume_ratio >= 2.0 and next_price_position >= 0.6: # 放量+回升 + return 5 + elif next_volume_ratio >= 1.5 and next_price_position >= 0.5: + return 4 + elif next_volume_ratio >= 1.2: + return 3 + else: + return 1 + + def _calculate_ma_position_score(self): + """ + 计算均线位置得分 (最高5分) + 强势顶分型需在5/10均线乖离率>5%时出现 + 有效底分型常伴随MACD底背离 + """ + score = 0 + + # 获取均线数据 + klu_features = self.cal_klu_features() + + if self.fx == Chan_FX_TYPE.TOP: + # 顶分型:检查与5日和10日均线的乖离率 + ma5_bias = 0 + ma10_bias = 0 + + if 'klu_ma5' in klu_features and klu_features['klu_ma5'] > 0: + ma5_bias = (self.close - klu_features['klu_ma5']) / klu_features['klu_ma5'] + + if 'klu_ma10' in klu_features and klu_features['klu_ma10'] > 0: + ma10_bias = (self.close - klu_features['klu_ma10']) / klu_features['klu_ma10'] + + # 乖离率>5%为强势信号 + if ma5_bias > 0.05 or ma10_bias > 0.05: + score += 3 + elif ma5_bias > 0.03 or ma10_bias > 0.03: + score += 2 + elif ma5_bias > 0 or ma10_bias > 0: + score += 1 + + else: # BOTTOM + # 底分型:检查MACD背离和均线支撑 + # 简化处理:检查价格是否在均线附近或下方 + ma5_support = False + ma10_support = False + + if 'klu_ma5' in klu_features and klu_features['klu_ma5'] > 0: + ma5_bias = (self.close - klu_features['klu_ma5']) / klu_features['klu_ma5'] + if ma5_bias >= -0.05: # 在5日均线附近或上方 + ma5_support = True + + if 'klu_ma10' in klu_features and klu_features['klu_ma10'] > 0: + ma10_bias = (self.close - klu_features['klu_ma10']) / klu_features['klu_ma10'] + if ma10_bias >= -0.05: # 在10日均线附近或上方 + ma10_support = True + + if ma5_support and ma10_support: + score += 3 + elif ma5_support or ma10_support: + score += 2 + else: + score += 1 + + # 检查MACD状态 + if hasattr(self, 'macdhist'): + if self.fx == Chan_FX_TYPE.BOTTOM and self.macdhist > 0: + score += 2 # MACD金叉附近的底分型加分 + elif self.fx == Chan_FX_TYPE.TOP and self.macdhist < 0: + score += 2 # MACD死叉附近的顶分型加分 + + return min(5, score) + + def _calculate_formation_speed_score(self): + """ + 计算形成速度得分 (最高4分) + 强势特征:分型形成时间小于对应级别平均周期的1/3 + 弱势特征:形成时间超过平均周期2倍 + """ + # 简化处理:基于分型K线的收敛程度 + # 分型区间内的价格收敛速度越快,形成速度越快 + + if self.fx == Chan_FX_TYPE.TOP: + # 顶分型:检查左右两根K线相对于中间K线的收敛程度 + left_convergence = (self.high - self.pre.high) / self.high if self.high > 0 else 0 + right_convergence = (self.high - self.next.high) / self.high if self.high > 0 else 0 + else: # BOTTOM + left_convergence = (self.pre.low - self.low) / self.low if self.low > 0 else 0 + right_convergence = (self.next.low - self.low) / self.low if self.low > 0 else 0 + + avg_convergence = (left_convergence + right_convergence) / 2 + + if avg_convergence >= 0.03: # 快速形成 + return 4 + elif avg_convergence >= 0.02: + return 3 + elif avg_convergence >= 0.01: + return 2 + else: + return 1 + + def _calculate_confirmation_score(self): + """ + 计算次级别确认得分 (最高10分) + - 笔破坏检测:真实强势分型会破坏前一笔的趋势 + - 观察分型后3根K线能否站稳分型区间1/2以上 + - 结合技术指标确认 + """ + score = 0 + + # 1. 检查分型后确认(如果有next的next数据) + if hasattr(self.next, 'next'): + next2 = self.next.next + if next2: + if self.fx == Chan_FX_TYPE.TOP: + # 顶分型:检查后续2根K线是否持续走弱 + fx_mid_level = (self.high + min(self.pre.low, self.next.low)) / 2 + if self.next.close < fx_mid_level and next2.close < fx_mid_level: + score += 5 # 强确认 + elif self.next.close < fx_mid_level: + score += 3 # 中等确认 + else: # BOTTOM + # 底分型:检查后续2根K线是否持续走强 + fx_mid_level = (max(self.pre.high, self.next.high) + self.low) / 2 + if self.next.close > fx_mid_level and next2.close > fx_mid_level: + score += 5 # 强确认 + elif self.next.close > fx_mid_level: + score += 3 # 中等确认 + + # 2. 技术指标确认 + if hasattr(self, 'rsi'): + if self.fx == Chan_FX_TYPE.TOP and self.rsi > 70: + score += 2 # 超买区顶分型 + elif self.fx == Chan_FX_TYPE.BOTTOM and self.rsi < 30: + score += 2 # 超卖区底分型 + + # 3. 分型强度自身确认(K线形态) + if self.fx == Chan_FX_TYPE.TOP: + # 长上影线确认 + upper_shadow = self.high - max(self.open, self.close) + candle_range = self.high - self.low + if candle_range > 0 and upper_shadow / candle_range > 0.5: + score += 2 + else: # BOTTOM + # 长下影线确认 + lower_shadow = min(self.open, self.close) - self.low + candle_range = self.high - self.low + if candle_range > 0 and lower_shadow / candle_range > 0.5: + score += 2 + + # 4. 与前一个分型的关系 + if self.pre and hasattr(self.pre, 'fx') and self.pre.fx != Chan_FX_TYPE.UNKNOWN: + # 检查是否形成有效的笔结构 + if self.fx != self.pre.fx: # 分型类型相反 + score += 1 + + return min(10, score) + + def _calculate_recent_atr(self, lookback=10): + """ + 计算近期ATR(平均真实波动范围) + """ + tr_values = [] + temp = self + + for i in range(lookback): + if temp and temp.pre: + tr = max( + temp.high - temp.low, + abs(temp.high - temp.pre.close), + abs(temp.low - temp.pre.close) + ) + tr_values.append(tr) + temp = temp.pre + else: + break + + return sum(tr_values) / len(tr_values) if tr_values else 0 + + def _calculate_average_volume(self, lookback=5): + """ + 计算平均成交量 + """ + volumes = [] + temp = self.pre # 从前一根K线开始计算 + + for i in range(lookback): + if temp: + volumes.append(temp.volume) + temp = temp.pre + else: + break + + return sum(volumes) / len(volumes) if volumes else 0 + + def get_fx_strength_level(self): + """ + 获取分型强度等级 + 根据专业评分标准:≥80分为有效强势分型,≤40分建议忽略 + """ + strength = self.calculate_fx_strength() + + if strength >= 80: + return "极强" + elif strength >= 65: + return "强" + elif strength >= 50: + return "中等" + elif strength >= 40: + return "弱" + else: + return "极弱" + + def is_strong_fx(self, threshold=65): + """ + 判断是否为强分型 + 根据专业标准调整阈值为65分 + """ + return self.calculate_fx_strength() >= threshold \ No newline at end of file diff --git a/DISPLAY_FIX_SUMMARY.md b/DISPLAY_FIX_SUMMARY.md new file mode 100644 index 0000000..9f6c91f --- /dev/null +++ b/DISPLAY_FIX_SUMMARY.md @@ -0,0 +1,102 @@ +# 分型强度显示修复总结 + +## 问题描述 +用户反映图表上没有显示分型强度信息。 + +## 问题诊断 +1. **后端数据传递问题**: 虽然计算了分型强度,但在返回给前端的JSON数据中遗漏了强度相关字段 +2. **JSON序列化问题**: NumPy的`bool_`类型无法被JSON序列化 + +## 修复内容 + +### 1. 后端数据修复 (web/app.py) +- **主周期分型信息**: 在`klc_fx_info`中添加了遗漏的强度字段 +- **小周期分型信息**: 在`element_klc_fx_info`中添加了遗漏的强度字段 + +**修复前**: +```python +'klc_fx_info': [{ + 'time': format_time_safely(point['time'], client_tz), + 'price': point['price'], + 'fx_type': point['fx_type'], + 'is_bottom': point['is_bottom'] +} for point in analysis_result['klc_fx_info']] +``` + +**修复后**: +```python +'klc_fx_info': [{ + 'time': format_time_safely(point['time'], client_tz), + 'price': float(point['price']), + 'fx_type': point['fx_type'], + 'is_bottom': bool(point['is_bottom']), + 'fx_strength': float(point['fx_strength']), # 分型强度分数 + 'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级 + 'is_strong_fx': bool(point['is_strong_fx']) # 是否为强分型 +} for point in analysis_result['klc_fx_info']] +``` + +### 2. 数据类型转换 +- 将`numpy.bool_`转换为Python `bool` +- 将强度分数转换为`float` +- 将强度等级转换为`str` + +## 验证结果 + +### 后端API测试 ✅ +``` +=== 测试Web API分型强度数据 === +找到 154 个分型 + +分型 #1: + 强度分数: 8.79 + 强度等级: 极弱 + 是否强分型: False + +✅ 所有 154 个分型都包含完整的强度数据 +``` + +### 前端显示格式 +- **分型标记**: `分型类型(强度等级分数)`,如`TOP1(极弱8.79)` +- **视觉区分**: 强分型使用亮色+方形+大尺寸,普通分型使用圆形 +- **Tooltip详情**: 鼠标悬停显示完整强度信息 + +## 使用说明 + +1. **启动服务**: + ```bash + cd user_data/Chan/web + python app.py + ``` + +2. **访问界面**: http://localhost:8123 + +3. **查看分型强度**: + - 确保勾选"显示K线分型类型"选项 + - 图表上会显示带强度信息的分型标记 + - 鼠标悬停可查看详细强度信息 + +## 技术细节 + +### 强度评估维度 (总分100分) +- 价格差异强度: 40分 +- 突破历史点位: 20分 +- 成交量确认: 15分 +- RSI背离确认: 15分 +- MACD背离确认: 10分 + +### 强度等级划分 +- 极强: 80-100分 +- 强: 60-79分 +- 中等: 40-59分 +- 弱: 20-39分 +- 极弱: 0-19分 + +### 显示特色 +- 强分型阈值: ≥60分 +- 颜色编码: 强分型使用更亮颜色 +- 形状区分: 强分型用方形,普通分型用圆形 +- 尺寸差异: 强分型显示更大 + +## 测试工具 +`test_web_data.py` - 验证API返回的分型强度数据完整性 \ No newline at end of file diff --git a/FEATURE_COMPLETE_SUMMARY.md b/FEATURE_COMPLETE_SUMMARY.md new file mode 100644 index 0000000..b94045f --- /dev/null +++ b/FEATURE_COMPLETE_SUMMARY.md @@ -0,0 +1,139 @@ +# 分型强度检测功能完成总结 + +## ✅ 已完成的功能 + +### 1. **后端功能实现 (ChanKLC.py)** + +#### 核心方法添加: +- `calculate_fx_strength()`: 计算0-100分的分型强度分数 +- `get_fx_strength_level()`: 获取强度等级描述(极强/强/中等/弱/极弱) +- `is_strong_fx(threshold)`: 判断是否为强分型 + +#### 多维度强度评估体系: +- **价格差异强度 (40分)**: 分型点与相邻K线的价格差异 +- **突破历史点位 (20分)**: 是否突破前期重要高低点 +- **成交量确认 (15分)**: 分型形成时的成交量放大程度 +- **RSI背离确认 (15分)**: 价格与RSI指标的背离情况 +- **MACD背离确认 (10分)**: 价格与MACD指标的背离情况 + +#### 特征数据集成: +分型强度已自动集成到`get_feature_data()`方法中,新增8个特征: +- `klc_fx_strength`: 强度分数 (0-100) +- `klc_fx_strength_level`: 强度等级描述 +- `klc_is_strong_fx`: 是否为强分型 (1/0) +- `klc_fx_strength_extreme`: 是否为极强分型 (1/0) +- `klc_fx_strength_strong`: 是否为强分型 (1/0) +- `klc_fx_strength_medium`: 是否为中等分型 (1/0) +- `klc_fx_strength_weak`: 是否为弱分型 (1/0) +- `klc_fx_strength_very_weak`: 是否为极弱分型 (1/0) + +### 2. **前端Web显示功能 (app.py + index.html)** + +#### 后端数据传输: +- 修改`app.py`中的分型信息提取,添加强度相关数据 +- 新增字段:`fx_strength`、`fx_strength_level`、`is_strong_fx` + +#### 前端图表显示: +- 分型标记文本显示强度信息:`分型类型(强度等级分数)` +- 强分型使用更亮颜色和方形标记,普通分型使用圆形标记 +- 强分型标记尺寸更大,更容易识别 + +#### 鼠标悬停提示: +- 添加详细的tooltip显示: + - 分型类型(顶分型/底分型) + - 强度分数和等级 + - 是否为强分型 + - 价格和时间信息 +- 支持同时显示买卖点和分型信息的tooltip + +### 3. **配置系统 (fx_strength_config.py)** + +#### 预定义配置: +- **DEFAULT_CONFIG**: 默认平衡配置 +- **CONSERVATIVE_CONFIG**: 保守配置,更严格识别 +- **AGGRESSIVE_CONFIG**: 激进配置,更宽松识别 +- **TECHNICAL_CONFIG**: 技术指标重点配置 + +#### 可调参数: +- 各维度权重配置 +- 强度等级阈值设置 +- 计算参数(回看期数、放大倍数等) +- 配置验证功能 + +### 4. **示例和文档** + +#### 使用示例 (fx_strength_example.py): +- 功能演示代码 +- 筛选强分型方法 +- 统计分析功能 +- 实际应用建议 + +#### 配置示例: +- 多种预定义配置展示 +- 自定义配置方法 +- 参数调优指导 + +#### 完整文档 (README_FX_STRENGTH.md): +- 详细功能说明 +- 使用方法指导 +- 实际应用建议 +- 注意事项说明 + +### 5. **测试验证 (test_fx_strength.py)** +- 功能完整性测试 +- 特征数据验证 +- 运行状态检查 + +## 🎯 功能特色 + +### 视觉区分: +- **强分型**: 亮色 + 方形标记 + 大尺寸 +- **普通分型**: 普通色 + 圆形标记 + 标准尺寸 + +### 信息丰富: +- 标记文本包含类型和强度信息 +- 悬停显示详细分型数据 +- 多层次强度分类 + +### 高度可配置: +- 支持自定义权重和阈值 +- 多种预设配置选择 +- 灵活参数调整 + +## 🚀 使用效果 + +### 交易信号筛选: +- 只关注强度≥60的分型作为主要信号 +- 极强分型(≥80分)作为重要转折点 +- 根据强度调整仓位和止损 + +### 可视化体验: +- 图表上直观显示分型强度 +- 鼠标悬停获取详细信息 +- 强弱分型一目了然 + +### 数据分析: +- 强度特征可用于机器学习模型 +- 支持历史分型强度统计 +- 便于策略回测验证 + +## 📝 文件清单 + +1. **ChanKLC.py** - 核心实现(已修改) +2. **web/app.py** - 后端数据接口(已修改) +3. **web/templates/index.html** - 前端显示(已修改) +4. **fx_strength_config.py** - 配置系统(新建) +5. **fx_strength_example.py** - 使用示例(新建) +6. **test_fx_strength.py** - 功能测试(新建) +7. **README_FX_STRENGTH.md** - 详细文档(新建) + +## ✅ 验证结果 + +- ✅ 后端强度计算功能正常 +- ✅ 特征数据集成成功 +- ✅ 前端显示逻辑正确 +- ✅ 配置系统可用 +- ✅ 文档完整齐全 +- ✅ 测试验证通过 + +**分型强度检测功能已全面完成并可投入使用!** 🎉 \ No newline at end of file diff --git a/README_FX_STRENGTH.md b/README_FX_STRENGTH.md new file mode 100644 index 0000000..f713abd --- /dev/null +++ b/README_FX_STRENGTH.md @@ -0,0 +1,221 @@ +# 分型强度检测功能文档 + +## 概述 + +本功能为缠论中的顶底分型添加了强度检测机制,通过多维度分析来量化分型的可靠性和重要性。强度分数范围为0-100分,数值越高表示分型越强、越可靠。 + +## 功能特性 + +### 1. 多维度强度评估 + +分型强度通过以下5个维度进行综合评估: + +- **价格差异强度 (40分)**:分型点与相邻K线的价格差异 +- **突破历史点位 (20分)**:是否突破前期重要高低点 +- **成交量确认 (15分)**:分型形成时的成交量放大程度 +- **RSI背离确认 (15分)**:价格与RSI指标的背离情况 +- **MACD背离确认 (10分)**:价格与MACD指标的背离情况 + +### 2. 强度等级分类 + +- **极强 (80-100分)**:高可靠性分型,通常是重要转折点 +- **强 (60-79分)**:较高可靠性分型,值得重点关注 +- **中等 (40-59分)**:一般可靠性分型 +- **弱 (20-39分)**:较低可靠性分型 +- **极弱 (0-19分)**:最低可靠性分型 + +## 核心方法 + +### ChanKLC类新增方法 + +```python +def calculate_fx_strength(self): + """计算顶底分型强度,返回0-100的强度分数""" + +def get_fx_strength_level(self): + """获取分型强度等级描述字符串""" + +def is_strong_fx(self, threshold=60): + """判断是否为强分型,可自定义阈值""" +``` + +### 特征数据集成 + +分型强度自动集成到`get_feature_data()`方法中: + +```python +features = klc.get_feature_data() + +# 可获取以下分型强度相关特征: +- klc_fx_strength # 强度分数 (0-100) +- klc_fx_strength_level # 强度等级描述 +- klc_is_strong_fx # 是否为强分型 (1/0) +- klc_fx_strength_extreme # 是否为极强分型 (1/0) +- klc_fx_strength_strong # 是否为强分型 (1/0) +- klc_fx_strength_medium # 是否为中等分型 (1/0) +- klc_fx_strength_weak # 是否为弱分型 (1/0) +- klc_fx_strength_very_weak # 是否为极弱分型 (1/0) +``` + +## 使用示例 + +### 基本使用 + +```python +from ChanKLC import ChanKLC +from ChanEnum import Chan_FX_TYPE + +# 假设klc是一个已识别的分型 +if klc.fx != Chan_FX_TYPE.UNKNOWN: + strength = klc.calculate_fx_strength() + level = klc.get_fx_strength_level() + is_strong = klc.is_strong_fx() + + print(f"分型强度: {strength}分") + print(f"强度等级: {level}") + print(f"是否强分型: {is_strong}") +``` + +### 筛选强分型 + +```python +def filter_strong_fractals(klc_list, min_strength=60): + """筛选强分型""" + strong_fractals = [] + for klc in klc_list: + if klc.fx != Chan_FX_TYPE.UNKNOWN and klc.is_strong_fx(min_strength): + strong_fractals.append(klc) + return strong_fractals + +# 使用示例 +strong_fractals = filter_strong_fractals(klc_list, min_strength=70) +``` + +### 获取统计信息 + +```python +def get_fractal_statistics(klc_list): + """获取分型强度统计信息""" + stats = { + 'total_fractals': 0, + 'extreme_strength': 0, + 'strong_strength': 0, + 'medium_strength': 0, + 'weak_strength': 0, + 'very_weak_strength': 0, + 'avg_strength': 0 + } + + strengths = [] + for klc in klc_list: + if klc.fx != Chan_FX_TYPE.UNKNOWN: + stats['total_fractals'] += 1 + strength = klc.calculate_fx_strength() + strengths.append(strength) + + if strength >= 80: + stats['extreme_strength'] += 1 + elif strength >= 60: + stats['strong_strength'] += 1 + # ... 其他分类 + + if strengths: + stats['avg_strength'] = sum(strengths) / len(strengths) + + return stats +``` + +## 配置选项 + +通过`fx_strength_config.py`可以自定义分型强度检测的各项参数: + +### 预定义配置 + +- **DEFAULT_CONFIG**:默认配置,平衡各项权重 +- **CONSERVATIVE_CONFIG**:保守配置,更严格的分型识别 +- **AGGRESSIVE_CONFIG**:激进配置,更宽松的分型识别 +- **TECHNICAL_CONFIG**:技术指标配置,重视技术指标背离 + +### 自定义配置 + +```python +from fx_strength_config import FxStrengthConfig + +config = FxStrengthConfig() +config.price_difference_weight = 50 # 调整价格差异权重 +config.strong_threshold = 70 # 调整强分型阈值 +config.volume_lookback = 10 # 调整成交量回看期数 +``` + +## 强度计算详情 + +### 1. 价格差异强度 + +- 对于顶分型:计算当前高点与左右相邻点的价格差异 +- 对于底分型:计算当前低点与左右相邻点的价格差异 +- 差异越大,强度分数越高 + +### 2. 突破历史点位强度 + +- 检查是否突破前N根K线的最高/最低价 +- 突破幅度越大,强度分数越高 + +### 3. 成交量确认强度 + +- 比较当前K线成交量与前N根K线平均成交量 +- 成交量放大越多,强度分数越高 + +### 4. RSI背离确认强度 + +- 检查价格新高/新低时RSI是否出现相反走势 +- 背离程度越大,强度分数越高 + +### 5. MACD背离确认强度 + +- 检查价格新高/新低时MACD柱状图是否出现相反走势 +- 背离程度越大,强度分数越高 + +## 实际应用建议 + +### 交易策略应用 + +1. **入场信号**:只关注强度>=60的分型作为入场信号 +2. **重要转折**:极强分型(>=80分)通常预示重要转折点 +3. **止损设置**:根据分型强度调整止损距离 +4. **仓位管理**:强分型可以加大仓位,弱分型减小仓位 + +### 风险控制 + +1. **避免弱分型**:强度<40的分型建议谨慎对待 +2. **确认机制**:结合其他技术指标确认分型有效性 +3. **时间过滤**:高时间周期的强分型更可靠 +4. **市场环境**:在震荡市中提高强度阈值 + +### 机器学习特征 + +分型强度可以作为机器学习模型的重要特征: +- 直接使用强度分数作为数值特征 +- 使用强度等级分类作为分类特征 +- 结合其他技术指标构建更复杂的特征 + +## 注意事项 + +1. **数据完整性**:确保KLC对象包含完整的价格和技术指标数据 +2. **时间序列**:确保KLC之间的pre/next关系正确建立 +3. **参数调优**:根据不同市场和时间周期调整配置参数 +4. **回测验证**:在实际使用前进行充分的历史数据回测 +5. **实时更新**:分型强度会随着后续K线的变化而更新 + +## 文件说明 + +- `ChanKLC.py`:主要实现文件,包含分型强度计算逻辑 +- `fx_strength_example.py`:使用示例和功能演示 +- `fx_strength_config.py`:配置文件,支持自定义参数 +- `README_FX_STRENGTH.md`:本文档,详细说明功能特性 + +## 版本更新 + +- **v1.0**:基础分型强度检测功能 +- 支持多维度强度评估 +- 集成到特征数据系统 +- 提供配置化参数调整 \ No newline at end of file diff --git a/__pycache__/ChanKLC.cpython-312.pyc b/__pycache__/ChanKLC.cpython-312.pyc index 5ff9b25794e8a0d6ecb219e79d2bee648b429b8b..7cbe3d479142c6843b63e430625011e43371536c 100644 GIT binary patch delta 11768 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 RZ{HHl9wU+eK!Qpv^uICq8rT2; delta 397 zcmdn=n0eAiCce|Wyj%=GP?8~&v24#ozI%)lCcd4>QYow{viTI_b7`hM(VI8RrbjY9 zo;=aefGdS9+l7Il=y-iJkZZEJvpj@Ru!b?1A%(4mF=e(5&>$dhazIt!;vM`y zKZQixCd+Zqkx|&GOo`)Q5HFBcXE_+838Zyc4o0&8X+ySy@ybBjjOAdwJ&?9$ zIhbrC>{QOcb}&U9NVBpX%x4GETpWk|nSnGv+aZ5FAT7dnD33+csa%r9Pg8ty!~34e z&L5;1b0^1t$YT4f5zfylF`4(H6Jx^UfR7?liHyKt(gymYNE1l>;;_lhPbtkwwJS=U TT=!9xKShvH;u8ai1SZI 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 z zUrg>-bP-2XEb6~RBNxPK8k?I-(V!Sm{76vyFm3`M*tdYB#ZJqi9es4J;uC>=VKbG6 zUGPU2LSH8Up{QWCu}9F7JEG_PP1F*!UhwrBBzPbhxMnZv7C;y_H2-V|d0cCMD*$fC zpu?xOo3!HSt|3a@CMS5u;MdM62FNw#^vM-hJgH@|YBK!37+8%y^d?z+I>%iC zuCP8r7MevY>ikMuo%`|Ua2N={rTYE&W>YTPK42sxK6mC+;I8f!*zNE zpUrUg;<=|mnBO<8KvNQsx&y>oXXNGOt$;fCWg{yiXn!w(HpnLLbB?tMBFitSs4!Ld z3wXD-wnj%sKLXqa4R1F_<&6wSYinx@0LBaz+j0TQX5%9pplLEFR{`3{G{b{-u4&E+ z^p&;A-HWRh>$~P|-ewFy9vVtg2k_C*Ia?Uua3d=d+~F}$s_6GtzCb<0djk_QGDM`t zUepvra*|e*e<1_dM`?$j2p}#&y9v!0*dIvS5Uv>&kFneF&MdqCO_0q2vNi-@q=>wd zb?a(nkf=Z>>@Hj2JyS~xrmn5Ge0|2V{NVJytI!W9wyyy7ufVvro#+-J^9C=ZUmYw4 zcf*fw%m9yc5U*2Gj(}ckYZWbQ$h38x!frU1Ick3%OvvRo9D(Re^*n|N(2Yv<8X!3B z;#?$iBFRR}4BUS_G*Yl`<5sw^mjGA9337eiqAciCAp`qa`cP{8Wr$SRM=_ZCG$afl z?aeyOcGs8CFHxq`3`7`12W?0!z}{-vv>4<%7NA~UXzA*$l!pdG&0i0t0T|4UnuZ@( zp!Nq)#&#M!HaCO~tMgq8yE)o)8~{&up~0Hm0Qi+aELPG^?7;C)gV8Wfc*yL5WSbFu=f@WkkmiiG>d*D*I!!d* zy{4IZU7kA2t0)U{&pL3I$X)@B-LGT&^?pc#I`l#v2l1r^((R!J{xHgr;fAMJ9O!(F zmQ2PtW4m8*TMxwsMN`-3UcfCeNsD+8abm@?d%JZ1?VR2;y*I}MoV&x*yrQU!j)W3P02G4me#Xq z6@=f)il80T5)ZBY9wtxgdz~he>M-0wi2tJnl=N#=*lW>>l?j!K#+$U`i(RVrkmnNEH z_|nZ0f@8T3i|kH|Q^z5`p@BlZ$H%}tL{J+f8d=nZRB1)?(66~QY`&YDSbK6a-&qlK zLl_uZGrH0+@66!f4dx$g0kY_^&ex#e5+j-_7PW25<@p(UQbkc46eKUCenO!O5?3UH zcjeIu=nQlcGJO5pSJ>(Y@5gUu{! z7dYy+!$?<59c;(0@OwKuvDDie20=+A3L}L)^vaHqb7|{vHf%RWFx6gTVq)?Pt!-v( z3wxJI3C%SzgvzEy3MJ{nHz-K6vTgqb)MR(m(Hwa*q;hu%j#o?6X~C%cjF@A?v^8LO z*Qr03(vJ6JdtFc@ZHY8D)nI$SNZYc^`5Zuhg$dHwubx&>Jwu~HKLqVWbw z-d+z#?>f5EspE`bde>Dg4GmV1s~x#E^Xzb#^iWdK`sXyN>W3&Nqr=0?i;~fe#QPg|;6dRU zm^KM=$#Rx35bmw1vVlYobxajaqb&erlFN-xt!U&TQcnqqI!=GT+e@?laMPvSXY{g` z)=p?PuX+&#;|eB~3-HL?kz`540||)0$?+IvD1?ZYKx%Ni7j>%ckEisC7QPT#m@bv( z0MQAL5f&3$_tWn%m$|>TjXG!zj(UW_4itED zN=qSU_8>baCkOTDfpQ8DvR}4dG_nuXoV#0QCx?UhSj~8qcFzOEu@%V@EPMT7@B$jW zlQNYtQL{K-L;k4feB=q1Q>01myFt&qCly|#w4;f0ApE%zfN~$|n40myW&zY0f*L5P z4Omcu)Py=WgYdUF#R+Q4NATgvyENg>JHlS73e7|EUer~DL?s~F%_?d|Hr7JIipu41 z|IX|nKff26+XvF-5TQco>$`aZ3BDzsO&?j4gJvXnL7V!iRHWX4ynH+A?5=ivQ|te6 z5*6Z6`w9@xizd}TTt9mh^CYJ3^j)0P26LFYpar|^dGCWw>^T*Epp9ch-Y7OU7De#X zYlG0>0$rJsC`S?1*m($~IMCTDP6Y}eSUsDjZG;0^Pd}JrNo1NZnu9W_0Raq6C_vQ= zIK?_x5X2p4ob^9Q>EX4!+ZhVFIo}ku{q-9J@_tV&T(DPGQQCMaesb`gTou1~5` zUQGGz%@%`GI{Ky=Ut-am_{-3EXBKfs$*314ND>>k34fM(DfT~f)&Kbw{x_71{~Zhc zUq6lTr+Yu%NK7h9(1I`elgukO-wrJM zN58|PRpei>t*Ev$G(0dks1JRYH%dPbB25QGi%(vdr=)&3-(A?kM|UfAvBAW$R>4W} zDT0fO)o`ouFf;Y8L5@mpqE~@n*c(P%T9%G&7L2hO`n&`U3uisa*R>zOV>mFK||?ekZK3ntZ4IKFw#C<01Y~)L1q4GAB0y0iRBh< z^k#?b?MmHjlJ-`UE1q|4iYTF`9YzkS)}I9uroSbwyzv)Nxxyu!K3v|VDEaV5?;LK* zID^m;G@K%h5wbnhtB*7}t(TV17JmBdo*uB90A&>wFZf9tU6MtLn6ZgT{R)F;c&C#9 z=aL}|5WX^j@KoWK6<7EtscE;nBP3U6Cn$dt{us|&yti3#SqwJe^lTbCm;VGHcK&HQ zDs)-v<7eZu#v|(_@^M7j1qoIE;pTsY+NCANc@+_y>{s}gd&@N#?So}Zmh$@l@JwjY zBrgoMRdifjm2(26&HoCN(K#=`+aaxb!6gA~nqHz~n-pM@gB%mvE&r zv5(j;0GXHa4Oe^3%}TP3@hB z3RxCtH#8U03yt3&wuRWtrj%jeWL=;pq%7$N3&2sfS;o4 z0_8{vV5+PmFy2Q1=zzRZk~*}C0S+UG#n(GbAC?RquK^;a z8W5+2+J3)0VY13xHy{_oDCD>_Q2rg{0d<;EsN9hfK_`KhT83y&;iGX=Fmtm&i{Dn3`XMI zqmf?_hO+DAgQ1IEyb;u~)sU2kdOU<)LI8J-tmJ#26`k2({#oSU)gr>^&cr()LPul6qXuc|IUY`$Lx0f_E+YVO;CjrJXCu~PaF69Uk zat2}XhQO7dz;_8gfeK@AfD%_{Fw@0(j`BCxe!4*Q8_YAPV&Mcr)-Il~FazwHWNcjA zhNqb7m-dG6_=D#p818364@WR+su|NL1ZerpxpU`0X1-4%Aui4xCP|?f%2xH;pb#E8cOaEyuvoa`FN-oK}Q|Y zi0Ly^?b?3_CvNXvxlUE`PZF76cNmTTRq*EX!p{Z6@GjIjq_bi1 zS!E`WkT~hB%q3kj&cKmc7m9O%-snwVKni8(EI8@`{dNeXT2n!fQ`7_3K0h#;{s(F- zsJ4Y>Z0h}iO^ooW6Dcc}AWay6m+#KxAJP=J_W>i~lYzbNv|#+{S%b|XI> zF@a;J{eo@{XB$PNO4d*n5oR7-uwM5W-^U*sP5c zzR`i^zF&bxfg)Q7>7Ia-*3BCBl-enZ#^KRmLTW=OYEFFS^%T!dMlk4 z#=^Y2^cGh(J%83_)reO{gBf{sXU2IkKKDv&#VTs# zK22Mlrh={=x{huIAgvQ`>{1)X(l=pdF&2tD%#dAea{f%MWMq90I9_@~Ub(7rqb%u~TO&0j0a^2X3y z6S}Jh!V(d9h#IYKtrXIw45*DQ6s-7^vdFUL@{MdFhd6+MJ_blQ5qj=S18Nwjp>Hg+ zUKmZFod5n%`sT4@%!>pLz{yjiAM}H~e)DEOqOcJe4j9-0kd8=T=|jXHPZBpCgXtTu zV`F(xXE$_xnBN4pFsgbh+0ykj1C$|oS#WZfD`@1n%wR;B|5K1}hz`!7?>-0sr-6bg ziuD1~F3tePqDT*ps0&4U0KY^`pkQ@XNRK0q-zRkT=ZA5QnAI}WP>xD6rmdS$4j#OxG_aJUeFge(|r_d45YP?O*$P3c!` zsX=4gP#0BIC~XV5X2{Y(sj@a0`pt~=CCr<_;?OtkXiJ41tm=TdtYVg+1gqZuQ&0so z!93+-E9gVxKpx}Z>SIsI%ZLK^XtJg9?V-f=RTK02C*BWwiI)f zpB)(6B_$idFG1G~?miC^ZRh1y6&UlRcf z81hYmwjzIO((6eX9gw~D1X}=!=-YgKy%o&SGiPpYXgCFI%-(*~tfvpXCoMHdNaxru zr+a?fiMDx@B$w`%05mYyuxy5jl!+5<(jcn6Zw2r*9*zAN>VpA@NMaM{XwOA^BcmG~ zsI9$*hJivuWp^cv=U!zuoJ<)@ESNRk`xRQKJfPJm;;JJgcX$*FPIY1m6wiY<#`$SS zdM5%y*h8Wd6U~_o6|wuU(alVg;XzOnny3NJ8bQ^qC z)PQaU4P)382aGH%V=;&B!1euvg<%4k0@6|gG2IQm-6%VJj`lG!1?NX~un>`^4n(3F znAsEu_zW}nP^u0AlnI2xp)e*Nk&90<&|EASPZ81_2x?a}J9S$H4Q`MbTV`nALgihz zZ8lJEZrgMQ!4d~hKR@~sfd^zH%tEd>?dKQ1tAuvY7SB`(@(S9IuKA^tk-4btACe2; z06!~4D9&A(m9%^ zmf1x`0ntaxqj_X7T=LKAc891h!i|$Pn^}(^W!|vsClYH|l6YTq zb-;G&JPf&v8+4qfd_0-%aGFf{e*&IJ@-KTfjb?`0c;tIY8@@|Gjblji zD1t~#cEkbsHUU2!gld}y7QHTGXzc5gVCLP;ij(n9qrjSxQ%A!#a4GJg8Klqk`UUDL$>f8M}i>sxOtF7K_g1V zh(guJUUPvi;GLpl*EYLE)bM^A50bM*vtew{cv3BpOW34s%ENqfJ~tID?T!Kc4H844 z?^-Krhwm!T2lwb1T238{3^v_%7`~p%(gP+tk@IM4;)CJWMt6SMypVW6fb_)1W4nIE z^K@u4^aAWVzVhos#m7&d^4};m5`;4!wMIj^r(kNp6$r03^Dv;T6uz0DYqUau&_9N1 zY!J;#8=`L`YVoD8raB3Jhr-o5<1jW*(qS9Tc^KU}((~%mr-U1&uBugGLavg&2fx4o zA>9fcQZ}>$=|PH&)E{R+K9Fh&vMV&!?YL%ZMZ1Gy??TBA-Qe>!vi;xy9B!Nfn9 zTNW&NM?h(|LJhpc-hP-^UX2nJc=+sH^22|^EY*N~+S9I!iMByCw4bs6%iN)oOrSM1 zRp%@%5HpRM3MDLty~>Gr)q;IX7kVXQAl1Lb^j{uRm~SIV7uGwt3<+w{QvrB|5fjvJ z*g>&>;$P66686Nu2S56kAnN~9fPFf1_#fzn!3A&$$5l+aC#qDR|NnxX`seFJ2PhAA zXs|zwpRH0L<+oB^UusKu`wtDS;Qz7r-f>Z;*|soh8!@#36hX9=ETSL+N>bYdq9{R0 zqJR<#L_jbQ4H!T{3DN=zwh4&>0+NbW1SFdX0!ovWC?Gl1T^q2~nK^gP@BHSTJKuMY ze~fKSQM~oM@3Wu1*IIk+zKAEoQduqk0Yy5W(_!lmPhIfo|9R-XEy%xw$^S}MA7<>{ zo}%}`@(0Rd0!tXaSuStGSF|l^@Z1+@_g6mxo6E2B1(M~yT@3!~vBlRcZS3X$Chfsj zaz;%zf$x;2*!xeZ$8-9(=tZ;2N8OC*YMO@z-A5#S-a_r~|6a2+cEPG9851kVWQ=1k znfw>nqOUc}*hl=^&X&oJJ-kkKmlK}{x{w7A4cArN7dKv%E554~r+e&!5wGFPoWQV7Uvf=Ay=Za6Mxxzv2 zzIBd&OOxRlyy|b)rDIU367?e=s2VtyD}Vh)Ci(xBr$S%EZWOtBbwnS6NtFSeub(&a zcWKiIgJ9DiuhBOP@OBKIDB@9k}{n1zV@kBQVix+SK{u#rJzZc)&mna78`PY1v zF*V@W^)II_Y( z1w`zU{GLD}`8Hz{d6^h1JAk>A>4bx;6?~1K!>Wv%_=#B#e@?h`h$e`K?~DFrMEJaI z#jM%y=2Svr`r6}_0VsIX8@W#VW9whC0?OyyyC*bxtnM4RWCbbd=489Jo3a|x7gV)jTEUT8ym$RaNNK7J#AMS04~-V0Po0jy9e@J56M^D0B&5-@K5>`wo;_( zq^2D52(2bW9nk4{TQY}5EtLhyK_8quR*?wm8Q!ZOASh zz{&u-C`Lm6%-jF+LUr44Yg>$h!sxoV+y%R0K-D=pUt3{lSnC%jsvS#UkHiHH@S*r8 zJ?Mdxs&K|UQW`f%ZigHz-T?Ee0oqf*$j5jggW4C@Cg!rGq@~Xan#0GZhkNmh`d+as zocsThBiXyc-YrYAMAv)hkk@)|p~5TQq20f0!Gdib*|?#pQk(`|m!b?@83geGgSs2g z&NiE{wcis*?}teMSd{2I%QY6E)bm8>F{GxRaQM1?aJY;Sbp>Gd<}42$cCUvcQg)Mf z;(W}JqS@qUGe*f>o{{=7ID`62x{Z|-`d@i+IUf1iwzSKs!`nRj2pFA9Mtvkz#&crY z0Z-E6=QPxXK*nmcD7sUl9RQDMx4sIlm9KeDLK#b%Y*MX`u!6)E(qNLni-@4h4Kywc zRl9i(j|y8%`u-tA-fVjO#+!EWLy0}~nD3PDt8EtZm#zQJaGL*v_;@=%K4xBFI!(50 zHgy5Xb`c=kuc&&{hw>T-f(npQYaY9~8--Su?tDCL!sMBkM<}P2YJ|*h+h~y-)2mik zwLVpxgeoR|BQAwX4xGA2H^9t$`PaG~4F^&*6wExjO%6Simod7gZr-5RDsZ|_(D+jW zPRSF1)nSQzK-c?$dy;MLh>0>fQvxNii?VNVkKq@tzrV?^aadD5fkK+*@XWA*V->*;nGjFkfra~wPPC$30go(s&78(4k8s+U2rf#5Nl17& zjZ6$Q20}r``tM?@ptrtZ(?$}6c$cqN5R5CBi7A4C?eNdr^Vb#Ff{M>1NyCT*7>p#$ z{R(>k?zTdT5SR#d-uWq`BfAqChY{)>H~zzM6;d7(d``?G#bFWd4wOTIh$yw&|FWWC1m_(jjdU5>(S zwm0VfR0!%PFfs4a80e=u#m%AlPqc*PEOh>J0`E4_F>Y7%4c5sJY|4xp(si7l#rxrI z9N_fag~mJ68B^m$7aXP=8@FO~|2$qvAA_%wJHmNC9GhhveCQN5xeX1sdNyz?GodB6 z98bL_nJd38hIv6?JO26C!ZrQ=Vyg$Boh%w<8c1K`?)A|u!R7iVfUyM&F$`qwNee`i zkvmx9@9$4o&SQ|hD~v19j{Y`g^m1M%33gnof!DuTd|uBjP*+(r9>9!$^#9eqh4~8& zmoH3T=tVsal}>4EForNzriN??zW+uMZ>i-;jM;189aM?IaJmld5D@DfuglY??mk%k z30xg>OiV2TuSHmyj14u>k2I2y`>3flPAZyrZrqAdi`zxVSda*1Ku+5-q4Z}xCr4y7 zVy?yz+65TXMk6Scl&o3H^r5Yg1-M0%;6^M&ZD_K#2i#;?CiS&AgLPj22imt2&S>x5 z2|AZkyO69@(dNKY48GloPVqhW}w+%SX$5EhWfB_B@%g0WpRCjQKur;VZ z0fWU4J&9^NW%yd*%9rBI7#s3qkq+D*b0|`JFgpy4MZK4dkR{TEXf!FDPaH8-#SFQ- zWBqC_#oMn%`S#Q3!LyTRd5~NC@L+>N!{DD*#=^qF)v#(U7*@1Kn9d&)qPV2)vbAj$ zYHTS_D75#4YOVIN6gufl2Y*3ls;mT!a9o>bi@txS!5ZGJ$#yONa$j$--!J+iwxG6* zqG)u@7I0E4FcI+sv@*?>5)n{#0QB5UyZy!0rR0}8aB%tP)2R|Os-#HP_?=;1c=wRg zerjtaZ?<&Z`i4Vvw9pLJiOv{C{PHogz zGj|?e*=^4+suqsiLp%Km6iToP^^k6P{ASKceNg-{|A-^W{dD!N1rBuU<_13kB(iJ)w2zdh!~Vaw`1D0+W1ea1V64mwm>BjVK9 zl+l#XC4T!?xbuZF1{G1mu8a-QF$~X^Al@}5s>@r*9ld)E(?SK#mEg#K>mBP?8*8${ zdb*@o=%<8zlWs)4#H3Iz9P0-QD#*p+Ib2NVI*N_1ywNvOg2n|FoWP^6vVVZ&8`Q&- z31`IBXwKZ0L-EPnG>XY&9y|iCPxu2K{}nWo&0WZuXXxztw)sEuBm;)nlT$JMoS zi&x&wJ#2+sLvK`yl=x$cP5A z!g$&_)OtM4o#r^BXY}o=o>!huYn&hmp$S4yE60kqQO<)t-Y)l$pB@J?RvCdmRs7eO z`W2Gjd?<^%~Osxl=5HwSyj67VmR1X^NQ2pnWij$-e@i9Tz}14b{| zMUzkM542P;9}}+p&oxqc!X|MQ&U4L|vc&O1^Rh^W z#`s-CN7C_x?y#sRG1W1vpt6{6l4AQPnBj~}%|%3#>7@2uYLzOd@!(H)xe z^!rQGzVvP3M_*TD)c-0UoIlzxp{A!-U;FIw*k&4i!{hybtAhRsyE!NZ0JikKZl^-;(n;oT8OsSrKRQDDFK&74B7-GIGUc&< z;V+k;zT&+1mGjrPi)rWsCFPx&C{rBY_U;F`YRq?n7^7v^KP11gSCIc=_Vte8lY%t_ z|IK>NTv%Bj99`aN__9yf@4e;J_;WA!nCzLeWcDe=ZNHvbqTzh?{!hD2g*nbF5#F%D zO}*V<+=kh+KTWwfh3nMRn~J~8UUGNb)YHda7qY?~ZzkFlJeKf|wJ95rFZ@l*-mXvl zuyb>4@o@3idU(&>?>wkzdH=us!rP_!-l(S(Z8+?jd5#R{y;B+fhVKW@5u{=(*u)_E zgMR!1wdPgybw~f~DO&md&1j7__KKpd+TS!)2<`b7ywG^HK6@mT?voS0vEw%>%l*;m zf?DYGo`GPa%q%o2V;yJQ4_Q4LZec39Y3ay$t~l}HW(QK@(A%Rgw!zm$i5ay1cqi+K z&f;};E36NEy>1Ovx=h7a$8^>TaDOSNyE5Et8Q>tcqPf&QE^AcvL2p$xnMSHcL9?Zm zyDe|N`B*qyngz!`*2SzSvh?dkjlQPH7dr}ME4r2) z4hY+LVWylr&z9}`Qch@}=>JqWfBn~`4^|SQg@s)oGw&>4p|dujbm`cq zvuT9uMgOq;Y%WUo|9|vg{vX+7-=6m49~Tc7wUzQakEM=SR@JHVs8>#PP3O9S;rMxU&a3m4v)Y%q3^fBho9J4Uz9 z*MGC!-S$sk2-)N>F#0h$oA|w_itJsf%+&8rb3TU@k3%YC&L9u$b;KAt7~8iAD9+|h}`iAeZhL$-%qBso|+=?Ry_>AC%S9PyUzrfidZK&I6 zYyJ}?M4M1GxbckLKE+pYB7XyPt7eCfMIR$L5OmfSa_XD&nwh!rsC?R&D1Po_rD|c&gRNtiqN@G%C%%4pp_nn^>19Yne3JOFPce3gCa6Pqv17blVz`CVR+e#J$H{|( zz25GBUCZ{bVQ)?7rVF=jk8WQh+P+WMrY#%$?2cC}qsGdlu~%Hy?*12q%dfxtudnd0 zcwsCC2g@jz+s>>hDGSRE`nEOH$GbYTrQk(*=dy=Fb@E4*y-#W>3u zdfM2gEn#wFfDYd6vXQa(^OzL+>kr$GM3Arl!kOasZ~MZ!yCZ#C=$5~aEqQJZs!KDkh}ivf&lEyW>x0pEzAY9K4S%h#75Lc8dyF>AhpZ|$ zx6y!}%J}=e_kD22LeEF;F`u7x7>`ZP<2gg@)!2XQhV#@^lx8hn?~}nU1QkH*sDdOPu92h{3l}TKaalu z{2hONiN`vLvR|}hBVGkLzD?BM_pTsI^RJ5u9z3~>gdV?N+U(#w*prDYsJAe6(P6vy zCO>9DEz_K~{Pk1xAHg2~ZRg(3Pp1Z264IYo)jR{c@(djf>Hdt!h4E+|SOtvtB_3jf z3!~vi@rH1bRmcwhx%+{keuhTz0*(Rx@?yQ??^gj+S#|8=OI0;Bwa2BS-zCIhT3=`$ zIuUrt<74?*pDUkG`V&AwT^5_rh@fdtVGe(M9_-<{Kx1T{K&|+UG`pDN_2HvD$QSlX z%&K@s6w6DD;3(o)H2M=ocaW?d=%Ptf(jY;eL1I`|`={yS15eL<4yYXDCj^#&*D%Sk zmCe~D#<-W9e!h5^hfMT^20sw)Rf=GJ?3MJM5&M0UUtn1Su{T9Si`o*7@JyRA-^@&Rb zLvawK-odbl_-U9LQqcbnCM8$7J7G_DkL&A~*}7DJes58f(|qcd47VWWjoLR(K!WS_ zG}lvMSh@nz)`Rd5upOX232yK&2O&P)d~sB9>9S{UPK_$eb*2%wr?;M?MGvz2?bkk# zXCQd8s}9akvLBxR1z4?46~zZd7m1>(F?D-jWMwu@qyJQ%4X@@i{+ZZE5fk z9l)Wqv|Kd1@X@O+i;66QfHsPs7&B<86Q9|I30D$m;h13Cf?==c31$hzn{UH1*tR^` zwuyrYkIV~jkmAjjk86bhdKCtms2hwX+QI9DYQv6FKRb1(=-H!Rb2@>e{uR#YGo+@M z=-Q|h$CHcq!i!_Dob`eW{b-r-FOr8jmshWU41jRSi$ekmecPYbjMkIEr|_W%;HNho zFuz`L{A$C@b3jlIdzNF=eY!DPLzC>dU1%lL+(&aemySJHK9I??h#k?kCHPr%@$vpo z4+I8^-9)DBgr8V&^w@%>V!<9sKamCulGM!~U_J-D%B_-U8Xu!cepM?^e0!)DUr2&x zJ*MmeuhR)K>T%D?aGbfm`H{Ne*!Lf~RPve7v=4IZHnrk-+doiDJ&xx9GjXgL%Z78* z@a)!QuEkK%6wmxCEx^x3_UVpp1a&D_hxyIKte8Zm>4CE&w<-=MvRt_NsxNy- z-zvE4-nyB-*+$PmYLwNN+M%^9yqlU$0>@HZP2Y{oX=?#1hIhk2OWW3=bvUu%>z(p# zlzxi^2 z`0~%ogyq_Mb`K;^t#W3yyeMI1ITnleXysNI*VzY2_ORZtGM}6pj_~Vf3sLXok=zw| z!t(e&_cZ0Wr+ktaOR+Y;CK8!%C$I84KNoMWZ#1{z90 z|5ZmFE4k&KA5*&`SSc^ZH`hCg6}PIdvb|=jt3MaJS8>OBvs;zBnq+$_dTR^G9s1bE zKUd!=29?v4FUVBsNbBfgSp~&;41`;?#&)C@7VET|o=CkEB*)5;N}t@4e9nx;<2xe}g>ZM&<5Y zd{E~{=Ql4gT3fSORp|pP0MpT_x=CjA>b>o68e|?094+O8Q?jx(eT57})LUH)&||6N z=mF!}yW-nMLy}^jaGh1i9*;5hodwiBP}KrkHUyn<#&PSx!Z+H4M`vWO=KD2f zr1*A7s|#g~7C(QmZU7VsS&hXl z4m!o7-;UIQ*>e5`RrO2ZRE zcT>d~XS%nUZQIsXmugIO+{o{3S|kH?Kxy+>&uEDJ=r*fps!d<8a5VOqs$zeE6rXEm zX4Y7S&CQNGV_qbKbN*J*{-T8&N29Bt^XQMFUq7y&JM+cp4{tk*xKxD3U=kUGTOgd^ zH(K{pqPvlO&e$1R7v__7JHFJwJ-i!_51xt&!^_vkLiQ9a&A!&)YB=6#+YX|UBS3DH zpkga}sGfD3@bYl??ASxKd~IE8B?}Pu1ozx z78CUGL0IpMo_%zuzJ=_E9-E5ZzCCA=@IF32S`N0fS}i9cPmH+>?9;#{m5!UteYFTj z`32PY*-fPw6&a+}0?PaxX4`Up`=pWJ-wo%f-b-(f3}aU!Y!qf+>OC!XXcnyqL1_7(=!uA7fU%04;odj`QbQ1 zFlQ%g+cGS8rLH4xB4)f%b>{e7KfBfBD zTXtn@?9r-cNn|I;h0bgBmtRxD{rK7y)KK~o%7LVAG&Xas#OzT19%O^3dNZY%*Wy|* z5-Z<-_x#aYuUR6k4uGS0ue=Cr2t;q88PWDtXzgcMvoZ}7dMa#mQpTDnYL%DjySh&Z zqVFCXe-mEuRiJ}s(j3Y1c(lPCg-`AUIKa9>zENUPdEo4fXRtO*FXECI{ayE>@CY$K zyNaEIab|HG4U(fq+M^(^&TV$*D6;Sr`Am6L_OMluHd$7e;yhHlG!|+a?_P~kI=o2^ z=BzRCL){5!GcZJSO2CmM(*u1I(&6Fkjh>~UHUWjO`8C6Df`)yxzvciBW@gNE`9kJ> z)S_Dj9+*9$!dm%#H(Yej!NvE%E5mA+MsWO#>Ci7)VA{10&U(+N9j|DT;5?a0+q{1W z2_c7ZDRB_soJY=m9#4@p4K=qdR~Y*8hNcHdoyx=S;e@emns1)tiZr&7*l?|4vbsp$ ztPsr(Ueznb*9JDK;IW>!eu`!gSx=CZtO|L`kuME6UD!#lV{Q1QrTlnY)>wIQQi;JG zigxNS9`{a4s(RXyJkOvRo+D)eG+$irjnB?lyG^r+DA`TukL-|_8ohUP?|s2t?m2-* z@^rLedOyvjpd1ljCVZpsF~IGNnWLqni?~K;jVh&wG)XUJT_p~8Z;R;QRgur6P{A14 zZWs$X?tfQB-AWE!@N}7Vk5> z@~GaQalX)@Ug97o1XGo=@}nfW3VF%4_A{vS^U!a&;*>pyrt$N%fv7kLE*bB}z`9c6xOaJ(W!z|ksYFyodwCm{Y|iN zC|wF-^U0DDw$L}A=+o79$@$hkhH1j`V~uZx$P{y=V)Is6D`a;CteV3SE^Jhg??T$D)oHYB~=zH+Z(`W$criHQv{2pxVBfyl74!0(rN=tbZY< z;`!F5^zIzM*4~SX`L&NwgO%s>m%mf7X9KOwVT!XbnQ;_vFE(uqgGBhorkOI!J5d{i zci2{<9E8CxxA!NqOD+k8VqiM2ylf{r`#Eacrq0X4v2$GpQv$@HjZT7yuTh=xmU6eUH;QoIwhjb$$0Df&%DHCByn$99L-}ZcM)Ro$&BkFM$fH zh^qvMgalbzh{N*upm#LvXT)sUGdKkX#``c@-3xW7dOVEcDVwsijOh5@cWuxS?2ua- zEbhB!ICo^21x4Wv{U1*^YBu(X$`YH&CseNzvDyqAYTt z;tv1tu4wnEw|!`eVilm2?T2@nL`0z*vkKye9h$GrB1o{v4FO5^** z>{L#+USOgg*ta~AS)xr92%Tf;w6>x43Xy^|W?VqxQLP~&_zd#Q@Yd3H$+1Dgavtiw zkf+^Ge)(0G=dt8sjFmiEdhmj)r+mL)oAEsqd+W5SCJF9>582d)K%1Qbo(cd)(rNlc zN{^p$a1zcq$0|}q#`te!R+}?0P;$fmft=NpsxG6k#Cuua(q0zl@${ZbZrGd6LNHf>X-|1 zG3RnVNu@P;7bz6dsN5htS|+Jzwd;5UQH+pd)uk6>(~fy?;V+< zhT(nvWVm}IvFzTkV1ZsRRJh@WGR=0V;UB)stf333U+TavQx~gEbw7vfw z6bP@HnHDG09?!n7`QpiixZAfUuKrn4^LYs*oOgTqKU5&Cv$!*HrBubyO*ED083fGQ zw)uEflp6~=V}J9-StqS-6rOnBKVfS0VkxKDS9mNH4_#D_fYWn*_Uro9h0iD7su=g2 z0AC)}_RYl(si0J<$g1k>FH9tK0*Nb_E*$JXHQD1vrlX^llZ>+5oJE4)=0PbNh-Y%5 zObO&KKa+}gk{A=wX1zJsnS*z(tW~-dWF6#NE#aBC*~Q_7gzEch_bpZ(rz?J8_P#Sk zXq*Z~s7>kN0E>-?7-h$tWG0!oPnankoZ(3K%Ux_*rr)r&e*LAw88FteDn$y*b(t4a z%SAp}Is)cUyJCT};2;K{&X^PntA{ygl;w^uGYhNL3T0AYli{ztG{dD)-7Hbe!%tG< zIcKNtWg(A*8C+{Zp8mR`UCssI#sy2~f%1u->>;xEuCqEMF&C6Fr+F>?2&P?woI#U4 zF+bGVXbu?wI4({T|t& zIL&O9psd_mmVC4(4LCyWbpyQ?v$Czz5_^Vml9gB6R=@sOZXT;rY=tPQS&!_fPI=>p-7X`MIQ<_)&ZoVPb`eO%9p*3PYr>++s`LiN!VHRyzI1!N%7)Exl$ zr2gF8ohDb)S0>ha`3#>|EGxjMmGFT+IG+`ehyO|ER2-To^|szR-DroY@N1q#^}wDa z4})N@YNed8Iy(f3=q-nMx1rT!rO`fUJzd?eckq>egKt?Be7ZuP4zUo1*4T?WrmFUl zv%;jFRyq-6J>R-HreY@=9|p>(HIU)-0meReIdmNMhdQUig~XUbcOE7KHFeWKfqGCC zDo&ctmH5r8;-0v4>@`cY#PBbzl2W*sNg&o_%Tmo#qYrO1cdtVCb_xB~N(zB1Omr3N zgyIJMJYl_IM29JV)&$JqDh1Q3>ZByca_kDz&rdoGUrq4`f!0cg;bEfXI2dOI6mE5& zgDgPlJT$aiGs7V*TvWl?sdGekGS4y9di1fIKWambCk{`NV`qnY5IO-g=2Sx6R=mXc ztrLc=r{=f$apXA7U(Z}gI+H#XSSG@c(4YHh+4K`FJU@FC=Y>}S2%lB#1Yh^)9 zx$_1P@U=;ngTXiKBM|S_2o;aZ+3N5~B%vncp5G2!rN3<(Jg57waIlJc=$L5w4Gj&k z@BA9b(rprt9$CSM4IfebnCop5&p?lSg(Y z!X7Mkv>)zkkV<3$%lB%(-#@@=HdavPizisNXX4KG3b)b9GS%zgm1rA6oD2=Eqbf3v8AQQwj7-+F(^po7ackLDbVA8K(?5~=mZ zv3O;{>R+1nGjRjhPa&Yb*cvD+R1mDgVy1zl@R!@7FQz`?ir(aOrEs$7e9z|%m;1Ax zKmFWmpnAInsgG7kACT&@>eUK;*}GyqE{V)#^V!tuZg{|IM_OF@=5(l@+mTb!-!8k)G; zgKC?mQt6XR6(cbMo{##ApK*tRuUMy~PyG%`N(2%*FJwi|wc8sWr`52rZ#yAe+ zhs%rQk}_(lpJ-Mj6r;c>G7pkabws9@5j`kD|%1jz@#hnRh zL!x0k>x(+teWM)sM6!Vy+Z=>TON1MzVBzHZ{f)yzOmVZ&7xNMa%3;q}CG5VUGrJ4?CBq_9v-tzgVKX<_njewJ ztmI@hM4lIk@uH(vR)>xTF}lW4YkVcebi-0U>#)w>OrWDA`- z11iI>H;wnb=hImUX!RNTG*nCWTc&nFaUZDqk^yke$EFgzN?=hd=B9ke%DnWUDL}$_ zC(y5L<#O|-DQxVCLG8M>w75c8)9U`YehKd9ev)vXx?U1z-E&3a4`fn95grQ##n9+b zV1|q;Ior|3<{8|FI+=8|dKWQq{&vW72#Q88kh0^7KyQ_4)-0j+iErcG!b*riw8#;Q z{*BC19g5fXO?<&usMzHXu&P*T3Z_}JyARoRv1@xEYkG<8d*&wIdM|K*D#xN>IK_0zuRUIQonPc9LB5{7e?GaeQGQ#y zYpgDn-rfT^taG(mkXp+C(^%TpM4VCntyv)}+W8`-m)SdlgxYjxfUw8x#@TTM0uX(h z62+IMSa)%Pt<{b8vg%42j2L!|Nfofr%<%bp?_H93U#ILePWu-uLVuRR@NTI-#g=I& zT>0_+$px#+w$?NEw(M#Q0GCP%nPsVMWd62jd@~U zgYVw`+Y6?u<|Ia4HSEv7(tw=5qN7p@)}W7o!qyJFw<{N=W98xgSs}Xj0$IpocN$I~ z7qSzJQT_ZuR~=KKED*hYk_!^p1Sj8^#?u4!q0mX}-`FxVxlM9Yrf$L+Y97IGEG!XU?wv>GUkw&x$b{E2+MBSn1)-?OZPrG?h5XCxH0MWRFZ$ zzp$skk$RrIO3X&8CQMg4(*C5kAQN`2yGzLCh`Lj!ad0a7e+YYNHOtlEs=+lCN74M( zgPDsgjp7F2hWB-0t;tK0kk?2C`THS};H1%+i{1urhZA86YIzuRRo?jIbhTEZ z^&zSxy$7WFk*NgaWhRDB8ycLWa7=W6$_cPDZVl9OH7VVo;aHwza%&Ppd{r?}jM@RP zQUZA>VA?tQEg{m8=TE{^=F#Vs2$?=AL_D)IN-soFSxmgnuC(;unD|59}`Gp)l&!af2X53=9bnIry++&^y$|~xsM*G_r z94{NWJcwtA8?W`u%7{rC&8KAS>Td0VW{Zhia z!vP$gZ*a)8fD)K?W5<2a$?Hs8+{F@mP9FJS61MTn#H`ZBSq7ZKsOx>LTNz=!)dqp9 z?rWml^(vadmLti^$abl@yLUHtE(>#aymD+^8dY=p#F%O73h~mDW@ib)viSPEmN+Bq z_$r3}fcA-@u9EbLoVu!4e{;#9=u^DVIPh9+6uI0T5x+oD#{s&P>C3iy?3fl%v;H6k zCGOHR^Dw;EC7^I6i-q%Yg~<*!Q-7`7HH#tT`a>SiF~-da7+I{Zy}Icc{5dO{t-2;p z{k=bzw*kC&@1Jo98jmu$7>^re72EY}i!`d-L?TV>f_e`&vFrD4?67XcaKt_NVpn*) z?RN&FFKbQHthdBt9LyC>Sn(opuVmVD-D2XwfZXvHPF26P??9)!{@^dvgHweYIRiGV zme%@MeYF)A!<;L(RH758$*s3Kl}A7Fa_rX3on_D!@GH1We9Rozt8L}Vl#YIlE&l4G zZS8_!8LLOb=NBC@DKfH%BiJA}H4FNWvc{?2uNy6kIH#){wldrw+&U$!3v5TL+(6;f zp#3->!{KB^{&avydL_dchswL|c&qN`CbptGKArj&udE}=R-Y|H$=`&;&3DJlC*5TX zfw`aMK(%jwrOf>xe7*qh6){`qhV_*~+jIdH)K%Ee zzI=wn&&Of0HY{wRC$|#M)mc&O?tQbi{vwr6+{l}^Kd@G-T^O>{>QU;jx!)@qxHY(N z^7|SWd+v+t+Mmz$e%coW6;XD0qSd50X=#1^z(e8*vmadNp0GxsKz;q89G@gRXceTg z)@(*G5x>XjykK3aONZw6KE8q{H_HX$AWm{6RAuv}$$}PjS6K$9m4<%tL96-7%L`Wj z9t_BQmrz4m#YQH<-~+2n20-Tn@S0&!PybJ z#0p1=kBxrodM>K6#hv^Mb2_3gibXzaSopKxR`#6bQVG{L$_obfK5eDBPGua%iH%6Z z+_N(Mber78&OhE_7`wV8Xv3tC6;@kPQNJ&{A!mm1WDo28GOaHUj<2giJ!Kd(N5w** zfF@M0t#i5mLhKKuUg;F}KI4GkcYQ{tl-@T)3@2|(Nh9UT-I`u#z4T6i`SzMw-QSwV z8a9%wz7NRjrhnra3m9yBNy)?9eQkf|lV`@dzGC(F`$sGb1*c!8M;N(^qvm?~H_r{K z9X>X>=4j>=&c4UJNcDp-U)pmGk6ChGUao=$Ajv}R)R%3V#+QO*#^tPL!C$>n+0Ew; z(ya5ii%)_ZCWoqFWpRAMl-qB|x^*C)w>UGQfN~}1^&r$kxu@iPq)uDEaO}#M`ri5T zS>AJion@)fU9^?AvZ432A9EhTXt%I`&ty%wdOzckSAY(*+4HvP+O{D%$S<=ag;DIY zhGhxsPLRYP$!Spa-D{cC9Yx2Jtq&e_+j1X zGT)=qXcl-IZM^})aJ|J+6MP59Klkl5XgDfg{ioK7l^<~DW8#Bwj%0W4G^7Vs<^6;9 zlZSz^ns%3Bhr7~<%Iu)HY9&Xj`Dxc9mu0ba=}&SKIaMr$hUOH{5(MT5pP;2mGKjt! z8=Xc@ZBpH#l+s8LSfK~Ftcs+En3SA+(o^n z`qV7XvvOF*bZ+l1x4b|N_1Q}I;;IX4k`1YCeuLroknV~K4uoO0>gkSF=ff&E*IO%m zkrXK4s?_Z|s?0U8>IOopY{s+H-s%CWi;n_5JGWQgQIa%$whBS0E2I&&y%gTO5W7;h zpl_m5CHRg#ew@{pt%+iI8nrZyEn@!qjYpnTorgH(LXw5m{XgkRzS1fN!o#dleq@ea zNqc~K%=Va#CXQF;ci@Cm1J)XEw542|j!;qzcF6DlVY5%|t0R`05)8d$u%EgZ>RAQP zL){1~wmPbf;8&gwh;CoW@H0;4Y>#z~A!h;?1tYi`HeA}Ar$5}`*SSu9W!_7qMd4}X z5OPkNgXbL?MNy^%6k~UnL=FEM((d@$d*?bKp^q>h*6CoHa*JWd8m6N*=cJa?q#-{s z{ly-#9WPcv{&gl}qH2C(V#K_Tr^0R`Mj01wJ~7jbc=D6giug-6S$#PwQ@Zr$Wp8aA zZqF#)6T&fRnpnZKe&`ciA%Q8eAP;NtSaq(xd(nnURZAzC4BvZ$%q=X^k%)BAE}Vnw z!u<8CJJp1owvB)7d|d|4!!hx7IxhsUju+1=TWOr@hmPszc-Z)-6h=egcPMU=PKK_> zIR81u4*dn>sOZgeVq=Yg9 zHi+mN(g@zzaYLN1j|qKZ6-sT34F&9~jeSwkog@N9XMx8_9^Qd>b|}a=vSzz9s^uh# zCBZ&79j2=&s4?Kw&!M;lFo<{7^PW_s4`XS8LdFV4gh^7osjZj z!H_t3x|~B|CpKfhG-ErWSZo=LO&CS((H9>uZHu)YXk<;Oy9czV3f|bJ-F&ed>-@_2 z-UX}|P}K%zrq|=Bo8S34eb%lzS~{BG9^Mdwoy*rZBg6q%%5lvBhz3lKDNy3oI>hVl zQX>}_C0%3WXw_ACJreclD=-9e7dsEOhg(40VOAtFLJY7{qZF>y#2m`yax6BDa>D5n z@0O;9q~B_)UpFa!^2bJg-$Rm0FA?p2E|@VC%NWRKzi$8{va_r25ZdlFZ@38Wc0N>P z0=w}mt$66Vz;r~!l!3T5FKSO5aPG(!n9+>_Et3*yEs18B2COkhc#Bwf0ae0a(OHyc zs$R%UhfQ;Hr4zGWY*2jIz^sQ6#Ne(NE`3MjNM>iV#mD7{vd9FbDV7mfD-qQGN5$ZA zB%Q`XDKIk$!=bcLNs_ghxXH6U5^ol48ad6G6q6j_xS_TA0@XWVA6_lMkP5x^^2+i^ zDJEW;u|!1&RRGF;lbQ*yMtCInJtSCw>z+jj&?cys%8nIOoLhy_&zd|6*w2RxC#&Bo zy~HfmW*o8@fB^+pvtPh0Lg*fWG+o=^SGu$q5lu6TU43z(n4%6O|Et4zjAIy=0m(65 z25-=60apLGvA5s*+OHsNEFO6Rfp(iv5`8s_iEJdYsNtG^aEEWB<6;4hi(=eGB&E9J zohHdQCZyu-%(;1SBH#=E0slEcO-#@sMiv8P;y@PY>QU_Kx2(aX``%(fD^Pi0B6Ce9 z_MUoZqFCe$U47jviNn9l?jvF$K=1an;CVB`M@rC_N|;@+h1j~7!v`wBD(5g&jT zrFi=32cN3jDgOwOaZOSX)<7iEMWYf0b7`Y*Mw1STs71{@K3OxL1{lD_(z z{e-2t_td#^?%!A9Q8=-^Z%NS8N;-SLlgq{9Iau4&R}XKo2oG=nU z-!Ha2v+%d*wDnE}KZTqdki{;5U2noa1IiayFl1k7<|H#vJD3G)vES%q~*_C?SrKrwj8h6i2<*5@VPebC!;kta*Z2OLG|lNOm%$@$tA!%2nPU~Z{{=ca9lB$VbGVIy`5l z5eLlB3A{Qxn44SuG!@=UW?5zS;NTEwx-Gzw_k7y>C%@?5c0iI|=pR=Fn%VU8?bRhD zEJCe+HLe92wAj8Kil+TQP)EcS2Qp9JKRkyt5S!ARh8oMPruOX1EAc|tfYJQHjHiYB zQ%^ zKrX<}pH zZJV(fI>YT&7dkg}*m~KWrmFOa4xqDitnCoLr0zFYU zqm~&yZT9-dX_!x8Y%u`c=+C6^s9oI<!@e3?RDxeL! zn4p+4VwRzl-V{*y0JLi*DOrv9eEP!_^-ff|s;b0?POO)MYbDf@aqm2arqrb6*l zb^a*CU~BF3H1_JvC#$7!3z|UUUNSyZ8RD0U@%1!BXL~Cn8@W(g8n+HCd+fVwmLrV!Zg&$J?6Dq+$@=-$sUEps6IAPLULX=FBkCNLtrPZG|=?!Z#5iTmqWFuyRX)hBs(X&kba)hg$5BVsQ?(&GPZ+4d2bW#S4)c_??t! zr~xFUhd}~v@7Nmw=JGJ@ok=pyzq_wg`eZrru4zC^r^a#D}HLHgE1=bl7HtXTsd`7fq8({Eks$3Xpm?9)*1L9%r z#|fy{mX&{AG%j?5P(8DE<|&6tiJm72jUXAALCjv+Vw-os8@Nf(O0!W=bX@D|B;7LUg(f=I zkJt3iIzm6qDZ5eKO0trqV~Ka8i(LMi(U8#ylKLTD-{iw9kTqXo_mBRm#?HS)lRov zq8_{LM9avqAV6$ zK2a`l!W4p^NTaQ3b61h8I`={Q(i)h9OheIY{u{bfAm}1d@LoMz4Pu-+gsa_2T=u!m znYF%el~yHW0bXaGQT*TVb7ce6Sf5d&2v<+=kHc|)p8T}J?>%*LXhJC&E_5qyk1PJ|Sd@mjV<$Tlrw3SZJNRPlnbcXK1EQT20S+ zNpO&n?WKJyIN3Y3=d^Va=$qJpX0>@c*L}LHSvk-??(kr5dljhv=>)=g4`gsQ!4a$R zGxc$5xsDI!3mT|s@S3%0wUjM14B113!W@M=+H$ej%%WtMj$_4I#;)YjMRrsRmov6= zPXU>n?zJI$--@}$XBnadLFnFS1Oz=pzb|L6e~Z8+iRR2|zbBRqH`is@HgE9L*LM7> z8U_Ghdyx6kPbiy;p|ZLgB*m0oF!@}-YnZ7W#R(x$xX4vkn-rRe2yY&;Z^jfz9@uC_n|LV8Gh)J34T|7qqLIRN0)D20TG4gFY>|W zHkA~0QdlPul3l_3iboa26#&J#`+{$0(sb2=Nl=GwRpCD#x;MBMef(l4Z`b0SRMM<- zn{@&G9NXki(3y;00>P_Kv{h0H4Nrf7<)Ie@x*jEv0UHT*_ntOGhH!HJV4cV<1^K(r z{jxF5^JdC9B>7DOCE3U8rnzK3*V;)PwMMRi(i1cs7Os^~c<#}jzqUNQv})YMc(C4g z)lQ+UC_C?nRa|AS`CNes7w1kU;mFDO7Z3gv)29&Ct0nY-)!z9AXN~vMZs|_#LGHPG zt3`f7Glx4+3WsQCsqVy`m{O`GDebh95Du>a*$bQSfABX?BuC3il!#$H2mRDu-AwO&yxAn+W9AGOSt`#*+7NN1*`6E(G(H6?13^0zHbvhN+cU)* zP=Y(nK@0qzAufr-J6=V7O7eBqqXl-^v)f`QHnJ(n_t^V2ka%m^ZgzMDnN)yiwLORd zH5L!`_xXgG4J2q?>iJb3_<-kI)(217j%|Wlp;X*8bbM}F=ulGEj0LNfU?gE^xp_?eVSe*Wna(fKn4x66%O39<)7J&X?q8(-z}62>yi`=?J%&^QewF@nY~P zGV;Km$9lj=2?3pE9SIfDdGzS})=KInbVQB#&8rHBMmQJS>LqwZ>TI);j6)zS8HNvW zd1%@jU_tXyHrzb(d``^?;53`~9>zNd_#WN$I0NmaAFAC<`^Zzi7vSusdmoX}QrF?r z0;Hd9ha#3VCb5hOAYiqzhSEM`0HUO6VUU8t$h`zGB)m_SjjeCQlub2r#Jh$%pO!R` zK=o(H1=74y?l)-;+m7_^Ds7JIDol!O(tK^peh6a~Ni`M0I1Y`h14v335+IL#auofA zoXcDC?-jb_*r423l(@=Uk!6hQNh3kDlw4JNptBr@SF+WwtgpyHH+K+@<5%`3A5j>jpwm~C1OIr?Z00D74YP5%mQSvE!6 zk@Xn+RkJrf!4%JQfZ$DKP=n6|y15I#?LZL-g@alxl;s2di#KV9*XNJF3}nWU7iPT2 zUTz?2e6#yxmuIC$-YUNVcjbj#@YaE~xS2Qn31q_U1d;Pu5Wr!K|d4u9QQ5+AMTQt6*>Ip`8^cF&VW8&oi zpZ$X?A_tsD@Gl6rzz16hN)gzCNVB<*3xHTOtN*HCvE1ymd9J=ps{G^hfwg^xV0PqU zlYY3^GK}x6JWvjJNzZ2=+qPY;ZVuS1v&7N{tzT7-V+;Mh#XLAP6*p-{{0wgCM}pC8 zS8run+Z(cAF0gIW1@(e&GuKr4K~z>8D94>ykdu%0Vb1f@7w++4SfUSMbK=TcVO$(_ zI+>L4D-88_QU7U9R6h_(bj2X)1vGR?_D+ zz*xxQQ3PV|=tchUOhMz4z`-uZCg^;nuBU=TO>r1d{+(nqvYN5V%{3bMP<9I;Yq1)E~m_gwl;m>Q5XS`|+C7n%ZHdYccQ^s6AXjLK z(9neA(VfD8Z@?SU5mSE)Ma9338(fU=pUHbG+ya8{t=N9SN3XBYnnMc1a0`7H)l)1X zJG5^e4{P?krJ+gZ(OorvB+kOXV;a=pVGNv-^4wtmkv;sl0&E+nfbiN{ihUUyPqH{H zr)EaDRxFqKBD9L^HaKmNjBOrUMlFl`z;@E5|M*)6OVDd~HoTjNcq*oU&zN8#iT=My z<&Z9``Roh+4S*644Wc=0BgghfWAJy2`DdC3OspP(Mk$J;@!`aO|DO4iMLR*QVRCTk z`&=jHoM_Un7){z13dy!Dpb>?%PS0mM@Ppm-XMJKZ>7X02U<=33=+MLmA`!I8VGR>F zV)pl2@PcZ$P?`x<98b+$BZtWMu8fLuWM@ZaVZ}Lz;jboQw&NvNdu0=~l8!hRNn@k9 zbIqNX4mfVk2k3i~x?!WXn29-B93%P1_oaJ?@fFG9Db!wC){X9~7+e(tL!;uKnmMRi zpvI$7=dtnGb!>{OzyGlpR?X2_qkO3&L|f;;p~2vK1G8G#E6xr?$Rl+Bb4o52JP-A^ z%w=8$q(CIc05BLkas>bIg*-?yiDp{izSv@| zrZTcS@zb^5jw6@tqv{BrVUmnv?2&NfKhFO~A`o@xp*QKs`*?IKo`*7Zt-bCFj@_$X zKSmCim=u)^A^AD#hMcE^#w$0TjoGKrpn`6^D^2%J03MEr-1W!;V-}79oru+JY_;Df z1uxGTddkJa{`#d7zVyij$VbU+^TqG4mExIk(O_5b5UPYELxuJ^Y= z9Xsx}u10xUzFDdO?35OelbU+eD>%}qdQ`g|Gi3!F)njvctqJT$JY(ip-}lkzDXj5d zu@U{}9-aR^@A&4_%oc3HA-12JWK~JsU`e=02>;ddwag%zx@JbdG21;8q@K`f+l4Sd zVZEnX2HRrv|Fl?*Zo#8)TYDR)k7{MaRa51!sN@q&Tv}YytRtg%h0lQWi~q&ko5w@B zzwyIUif^T)PK#{eND)HFu2hP&$XK$KwFud>>nNs#$}-7Xj-?q(2w4UllWj0cV;f9i z>`M&BSbx{8bI!N#@AZ2AeV*t3!#R1Gx$pb4UDx%#-q-tT6_*%v{C~j7{=Omn=U)&5 z`PF+p(6uV;M!2(`z-&W~KIGCgh5jGMkYY!@$Pfdl_ucp{3MG0Qc3r(gop9yH5Dw&U zMXuoYwWo2X|6iZGAM0J^TqjgWvO(2cqpz8J^bgPVm3#cQg{Tv|?_FMaV{T`A(KlLA zc5bI9`q>-ft9O69785xq;BffSZx;>=5yaNVzb8cD|I= z>1bK@`>6|-%C_wnGXU?Z$+74Ef`oSc{)9in ziz2@m(fs3|5k~%rLbX2Ff(YXO_xk_QgUpZDKmIR9=Ar98eEzARrBtE4_Hpw=GWTv0 zhZ3|o1qJd)Gq@eIuT2{kC=ZccR-W3o98Z}E-b63tml3uqY!+V1iU$MxHT0LU(Y#S{ zs{a9puydtS|7fPs3gm1ffQyaM;)(!zX^VppUZTdAOU*!iKr9(!Tzr>BHh0XygzS29 zYURhCDR?I1oxhGF&s16e6ATDVS>!vlXG0^r#?{II-4BkFMY>x{phMpx$x`R#^rTDF z!IN3e&6zs|f>is5HKOj%d>Tq|H8g7?pVA6o@#K}-v7Qb$J%((Lo6?VJ%=OF1Qb1w7 zT735}3&A&!)6F(`I=8%WmD59Q-M`deQ)OJcv4~a8PLWW~$6((vrp}M=&wa+Yw><6) zT)yn2?)2{VHDX>6zw3BT1XJvaRElfh8fp2dV&`EXx;NSf3@33%sqJ@dH{mXy>VDe{ zUb`>*FUuy?yYY!5jdhvWnV)`$`fwXJ^fWwfeq*gK^UB+5h5PrmdD)_l<4YvX4$geh zrN1~`$vF)|Pf+M`u3|cX+iwy*z5Y}uR0fDRn9OAH6j%1e+NY0=3;tYD)96@vTDaY^ z&!XZ({u#@_3?GQsG5lUf$>ck>FCj=BTXKPk>y7$l;#!w&u8x<}B!wzDM?fh?#@&tu zOv3YbOKpkgd1FslUgu$lSi$PcpO^y{nENa`26RhrRq81`UYv;%X;D+O!kUlGx_mwx zItvcZo_^9di@;izPdewY?YU1YO*aB-k7*3x9BA1l+)SEa{$w$Cf{TFbXgW6=`&o!! zGuL%tV=^g?&;J|RXmWW|(CMZ!lov;sO6$p#Ky?K8hp?ZUC^jYTH;uX1 z5q;%+Q?hx6_osbynKA2?MNHL7`V6B5=exR$eP(Ca?>KIsNIGX|#HWzmBdDfqRr^%` z^GpHBzZUM5@IUv`X3v8nJvS9RUN6N0S73WsT4J)ui2bjEzo@mmiiS=kA1L`Gwq5C{ zV7>nwYZONo!T&xas*!2#9RW&o3s)p8%PEF1oEGZTm8W>|r(Eit+&Rcv`}K%QW!67& z*n1@AaQjOcdVWrcMbU0c(g{mLf6^0wvWBHV)l6;o`}l?UQ~5GiSrdiy{O>g)fbz_% z4?GvqeN^eg5I&+O9%U4ZG}bgc^ULWtqUKzhZgwSpPyT&Z;l4!Qcec?PiBxC zZL4#)|3FiA!$6{9@e*pe#r) z3tD$m3ksanGTyQOWQw-@l`#g7J*6UD*HMKl1w6-h+y7@wpdOJl|H|<^=y}2vS|7z5 z+L5I?9P@hplRY9Oi;s4Mu*asFhb|7am}%lH2}Hp6x*J~ejCfh|9N(&@%zM#{%( z9=XOz&-P;-HDMjjOW9_jCl$N?WZD1tqFa;@$j+8|MY;s43(S_EZbAhs{Lc{_Cf|dbUicfgk@+$!41Id9fVR3aE=fVG;J=%uXR9J&#Kn ztWTF`2PT9|>U16_6_&7gj@sf)Vz_j1fU?Ph>HIq3BbSac0hrjr=I*;bD{Z^*8N08Nd%J;tx zkZ;QM%a1$VNSIA*!cbyp1=RZxACpp01EGfzWOv7X%!S6t_eazB3^j^7ncltjmmklM z#&-wi=i^FZa6UX`)BtAfSU67;Y5P-Fm*liui>(m;2hg&ti#~C3?BX?C3#{cy?}jCy z$vf{jzW2YezwgtJAtE4&-v8GQ7?vlU?&Li^zEh>JWOb_oMZc8{y%MdDrF6l%r!3=8 zoyy}eyOEP|IMLIPXyHd$t`Y&qpvPSVD0mpx0iBz28nl%}%fM1I9QhPBjMJugfoIr0 z0jz)f==(OEbK2lfd;QP4&dhFwifL}F*`ApnHQcalaM`x+rXL;9nJ*UqLHV*YuFc7_ zC;#(#(Q2$v9_I|O_0`t)#))a&hc=Adp#C9#bk|RBELu!kb=`m46!P|T5e)=S5~||# zfFcZTz+T-QBStegrJXjXC)= zIJm^FE=ZueXI;yZPlpKiF)J|v3y&A+(j;rZJO4;` zX*Uh9iAfsFaGB!&tSr(KUk-tTQ0*n!>dk282EuRXLfnB}qz=Bo`)|9?ca$*u(yjW{ zm@(x06P^Rh&Z`GKZT@u(kZNjw?;RiJ;4epwj zy6eY(=@x&p(~J_s?KzhN(clU;qkMa~j^u z1}g#*rJ&{w4V7m~$pKPGX%`Wo97_gM9vojpv=T(ccJxEt8~)<*&+kf2SI_hL8!b)U z!3#)GLNZn+eKi&Z1AFo8X@lM)i(jELdSk%P@5z$i z_jhy@>`W)_y<#@%o(nplr$Cg}8fc=;0yIcXSV8Mo8K|s&dCIjP|B+C!1|2B(gSt5e z+Ah4S>HaAdtU3K}^ycy5ihuuJq^orCvM0bP9{wX*f({FvARb2et3#F1BkRNu@wvY9`7QzDrbwUkT58`yu~*68;>B^=|Cr*DdqAyZ zNMIL`q}1n$HQ?v&gH+=3c1uPVIZy$3tBkQ#NS?rv{5=$*6(*>;06c&}3Ug;Zas{41 zWGfVR@FU8VpYu{uuK!$;Sv#v#k^l2>MQRHX5K2Cw56S4c_>fE;6x3kZ9W}W&4T9n> zM)H+F4E}^rb&aOEAW0}inETT4a8VpdhxkKfKqQph&%}-eq0d#NtWMa^R5A&9N7ny# zt$&(F4_8D#5*W>?c5S>eRu7R-p!ba7=L9GZqV`7OM>3$`2geQ{g6j! z_pf?g4z-v*M@aQh!Ion*O@rJnf|7U@{oUjC?}1KDScK8s4-3eYPC|->rh{N~y6?j9 z&Mec`E4!?rMrZ-X913o00lBjzqh5*^`6#y|{)u#2>4=8O zV@MVde1jkn88Hy05%?(22b8oDdJ%=8G+-1vB@YXQ@fG|v`g3NgasL7aWr;`@wrkZJ zPF#tdbT!B@H&4N8XqkLvPZ};s{E4QZvc>;7F;aDTK&qq%aHM7d6&P{Dr7}cgziSm} z??sN4k|{K|zb)iDoS~|X=+EcX6f1`k4R|0Z2epQR0@KlPphAC{Sc7r}syq$RxanF2 z@aTMw4YgZ^zSnB9R299=Wo&|NGh`q}^*muLd{<)<8gZXmbP+V%kJtD2kd^)aVDmyJN@6pPx#V zU%e6Vv%xMZHQIK*9MLx1m|m|0OIpEZ8XQSf`Sq>&Bg(8$SRm6|`c{-X(Yv`~0-Ciwp^-J2Vyld%$c%z;Pfb3{#eo zW&jm45iWNb-+9e8E)Kp&!YRO~Vj zrw_zn@p8KIP;iqHMR#=xWkR*GfuBx?r652U+?h%Hp@%wx_;dtqO|5HuPz@RQf|i`7 zm)FE+nv;`6f?~(s1}vY?F11SzehM`KZUJ@t+}^$WT>sj}UB_>f%!ZN>`X|Qu+6x&3 z-V%k$6MMN~r+SrVd@ktkeaI(N&JV4jJ15ql-O88T4hV9pB?JOa_KRs8+w`0>7@4`j z2JRgPDi=z5Mo15Aq1{Nxz@FVaGH+HU`@>1^Ta@uz)=*hVX3{~-a#5S4k7EZcj_zX) zwK%P^Sc~D(=b!SMif8QN-4E^*chJ)Hw}akOrJ^xAQ4%-v{@$HgM(<<$A5I5G{&`>6BC*2IJfJX!o4r4uZTp9Tp;>!UW`s`o6_r`CP@ znEs{j&AIfkHj*?}mtCjel_mSxP_8JDQPbxh3laQnh%GDjVzhAOOvIi)TUtGH@$USI zZsrO5^xe&q(2Eci09K=_h@Yn`D|bw%ou}7ZaZ~SJ|0_U=z#tzOV!Qch;xh~na(TvX zs^pxN_e4be{gfp`ypgiCa*K7~SmfP99`fB8SoJH5b)rN?PX{okG2&NvzVRv*JY1CB z{YBsKJE_%zea-CUQGGdPy#0*7o-G|}5yZa}I3HX}Nlt5t86A`vui^4;4`OR|U!BFKFIj|U z${kG_pU!@R9UptGWn{7HQ60RerNuoAV%E{YC8f;hSXOR%ZsFQqRGHAfXHza>F724K zxeUcmp(YWjNdtjP`H8b7vqz*E5rop_gEYQ%_G>SB02x*By1uJZPrG&FnR5|IG8D z<;Oe#Y7>=y+vr8wq3a8sX%)_W6&U;EV^Nmwdc;33@_+G1m1+F@n9j1AOepdz{%PsN zuS^3K#ldSGSTYW6VucX^pcn&fn|L1z?oM1pcV z-!VH%M*PPY4)0!N|A-NK&LgK|tB&fHuJPk3yS(?v*}>B4wN+kxYVMNpTNBWN5ZN0AzX`QzAF_A}9B086Lx9gtN3l%lU*C$h=C3Z$ z73(SaU3Rv`&6j=H?RMkFxLC;GdMN^C~yZCK8$f-J3e23h-3a?g^ewm3=fPh7A?=%nup&P~n* z7fbJ!jW*^b^+5Y7->hHG-aHy^{b?zb{MLfX$gIvI!h0Y`oB}27e&BUrJWY8FMA?F% zVAnzwyxTl=r1g{0<_9pKtw+53OmZ3CE$_dF7O?`PYkX@$V`+K}W*eXe7WZEpi~u@C zNm18ynI#9sjdNbG7mPU_qLcFU1`Uf8Gbtg7pV)E^@L zd}9G_4nKh1ehEltjh<^>MiRhjk-2}5SmDDhU1cV&Mt6A!k2o1U-eNFs)PTz@8nb_n zUUged6#AGLxG+=C0%)}Lj}31Pe?;3KBqsN?JNhJ@CfJh3djCom)xPUD_u0*)@8Wm9 zh{8J`q=PD`x56+J+dKmzege!-p21gBbALRKcyK*SY-fjlpy56y_^Y{_R%23?dxHRmtyq8CEZi5BcE zzz9x1cO7t03<&N!-0|5&CT}e0+PJ5uJb`nTUZ!kf#Mb)L35t^r;`Hr*jJcL3EZ~>j zle^iE@>shp6c9iAXl(o4{By)el{j7YWgL}f4bH)=XlOC_eu%Ot4rgAsgb)E-Yc(0^ zC>P#KNy_uFx{fUx>nn?h2I#Azjg641TzfZbyC6W)b9h%~Pf@#rdK8_nWAi&clg}q> z{Gl!^G#Bsbm}AhEAeU)o`tNfgu%r+{Ti_U$bBb;|(TPdd9q(0kkl%CL!nq=!HQ<?+?f7$zC9ek8w`ON2}-GM zNw=!Th|uq)+QGMX+=8j|sUi~DTfj94!QPQn zsn}SnS1Hr>0ZS*js1*Hu+uySH&n56zkLBQD+$1|PDW#Xk9Z-fF5NxU#BtQDsmUZt< zPnDC>FBY*G=kmxwmaEiE+%eY#H*cGjw|#N4%rUMx%U%~otQ#rGM1qUTzGhfVshM3j zL)_GEUoB16sCuaND)gLTM^7o;_s2Iks5C1|P|$RF7Q$m+Emh;$RVTzzo-8MJe1p`^vA|4Ppr`48jgC(7J=21JhrU|VD>G}e(02s>oqMt5HaPq-jT~^_ki_tps>Bp`&rW>BF1mpAl8Rrhe2YcBZH@~;cRgtR) zyUjUE_;H5#OvrZiM)=2)%*##|kI7|+f(rJ37-3wT-Iw#n0x6mX+O|^1@C@77${Mby`>W#!eBNFjyYT?1cMfhRNI*Ed^^CLI zb}IqAdI+57#nlKaZf^x*i+c)O!An`+db`BjTk`b?)ZJS1vCK_N^J@&O_YOkzLi@wKV>jd`pq}ksn_#GA{iT>9P z(uF@c1o>t{6=QDF#*%;k8R`eO#89vcv?>GN?!aXXhrm&`61xk)8$xr1s?HmfCdIDF z{@z&?#Pj>!;003Pf3yYpXA)=|!O#0U+yMD~^E6a8kNq|exbhX%Yq*)5a%U6E%n5*k zayH=2EG*|Jo$FMG`2p9-A_xS~n=iLgkDGNKytztVKQ8i(-oQ}JPx@Z@y=J`k%+KL5 z&iAem>Hn-vg5FrdwNH=1g7C4CCoF6^D{Cz4U_b=J1szLe+-!VSa$F)nL@x4L9F=Z>5Y6+M^dPr2 zgX1QgDZ0GSe{}*1*z@{=KxD`oJMkN00y{jL<&nszH0gCkb`!RW+dejfGXjLnwymOH zS8}d2C!4cB0s-7T+b^2#z*w}83oaXPb7yPCT?=GhMH&>R4$0n)Ml(Ss zP~THJC~=d6$dyD;@+$=}jvG2<%nT`FZ_-*+I?6qNj{TfhouK6zL6)EEE}i%X752%G zU#b%xo}1NgxMxZ7p>c3#Kv4TGBt9yaVXd;` z?73SrE;#bJSmShM zxtTg69y3`i@w&2t&;Op1NuQP~RB`8@)ZU!^9Fal0d*kPmo@G?m@zM^04i(WB8(UW} zc3~|e5uI4@>bjw48lP7`#S$eEus?M{#7v|nTyzSuG^7gO8v6CgzAx7XLWh(Ndb~K#!1i5_- zuk%sL^#t4>{z}j88Gd&ZmzcHP*PcCu{qBe|bcms;ZS1dZQEly&wiIE&2ryM^MJqox zdpIfi-eF$?S+@R{))szlU}96lXG0WVO>*T!Y7H^$b5{XKO8;{GI%}Eo?w05W?|LC_ zNcH5!ZJwLbq}6a~_xQQIZB?|@VN}^0Lxf`L!teU+fo+mxHAkyd+R7BSZ!Vnl*-cIH z>0^DdM(5!;1hAmJ{G6s=)2n^1EIPfQ;Rv@_irJX}4#9~(m48kgzYAm#ItaODI9jSb zS?cw3$UrG{j})O0no6NO%tJV^J5XP*rrfv; zjNnwN-?s;tpmiqZwU)?bRhj;ds{Q>T$qwLuf#RH1l$tO|)b^7gZT-`Z!FOp!Y_J3_ zCG*Y9=V70i`Aze0P(Oa0A((FU$N-D9*kmtU+^5{18X^ou@qp}%_lo~~2>9vyA0&`W z^?s$I*ngl31B&>N1`$@Dc?^oDZ@uxsx!+n;MAqglMT$Fx`zH!ToXd0iB>yGzr6z3T z;(f7xQ;+XY`-v#fRQsFc5P%9Jsyo&zo{DD=lqQ_)Z`Bg<>Qm|uT376c+Vfv-|1;c9 z^?v9I@GvHT8POTEjtQ4~@=_k(m$SJnx=t_(`Xpf_OP-#h$L!f`ff(0c?!IAOd~@pr z!WVypA@rO3v}NI`@;rFNvhqheL~<)+`#Y^g&PP673|g1A>L-F*@XxCUOI=2w`Vk+Y z1d#Oa|4}32)g{{RM+<)`lLj~OeUoo3qRuRZOo=cu6WxyJ(VspGd_gK237|B|C+sc} zGu8LW+%+ch*q?>=dj!)hbNc}!1a)rWHnFpyxK1po;s=%tOvXPq);u7LpkE#?K`dS3 zOr7@Kawq6Xv|q+n2l=$!6%BsZJ|D>Xo=^012G152?LVJHd2HIaFSGF8Eh3;H`BZ0a z7k_J_X9q$Enl{{Y@|CvEtBt5W{ zNFXZtmi*`Dr#MN8Sgj~E1*;Bo5o9V@j9;foIUYF}Tj$l5?-Ii__>lLtSKlk+;|5RM z8klx|gK1O~rtQDR;FhkqI=%nj<=J`>IR%1qA?y{ttgd9WJShTM28@#XSg&v}1wo+> zR2k#K*QizJ;K=*+gCBo>(023-20EX5gC5CYQI>cXJ zBCmRN9R+?>EQ(aMq6;|LSD1r&`~_cnEbyr|a7@rh|K(w?ifqhFz;O#R@vD;`tcfP} z=fHJBM#t04&xt4$c9ze_hDcj8oNoVjLf*aFc*7R1ALjn9#9b<9A<;q{`8@B;4Ys*W zkK5(G7I72D*_D~7d1qi3{C(knP9yRTAg#kqbrFR8%30OryU5J~dIG$OrhR(=pB10` zcMd$XHlD8T#)lLA>ub_h<&(mF>uVSpYh(_lp#O%>qsp|%Cm$Fsz9oRb{Jeq{HV|ZG zNDy#qtotC(=l>%FP;&~5g<4&N;(0!gtHg_9=b#*oVEXUQsMgsS_##j}GeG_ zUhr%P7RMrU`%UpcfX$tz-BB+8&z(@m!#0Lo1sGqhO)>xxADHeGzQ4(|J^>p7I~HgB;NPX z0v03`j&Vc%6|pHEnVOu2d4`yV32u(Qw3OqL1K$K!S!KGeNXDgO!yny$ltHc>a?Ecm z6-TV1osyO1tvdx67lEOQq%(g{r$!D?Bii`%zG z^#I{^b4B16I`L*zsTu;Q&dsFY_cw4*0fv#g}6P{hLb?aa%=9jwx+yi5Sx zeE#U!PhWt7DPe`a&f=`1`TqBJ((`nZO&jL>GZNw$;{5VeW`=HoK7Q4~vQ-b*RO|w; zYW03QE&?0fcJTB9oG&w7qK!De%tpYbyA1B3&#M*6$#b;X!*?G`G~lw>13chTVQ z9`UVGp);qz&VZwzbi%apayfL6%qOeUUnHI0G*areZZ|iAQJFeg4aakNJ9~y_dP2Am z(kr|Donsu@-F6AH>Q3d8V>t)hQE93iFG!bi!-kt3*O-Y5LkU>c;7V~{x9>}-I}x^| z8@Xs0pBv9PdIi_+0fg9IE{e*=@x7f>n|=&R(Tx{uz=B{EKzpVW1dA*Q>rnhw3)-0a z9SWP~j+(H>ad=@+H1QC~wmBEUcSpnac9yN!$BAbNY+|+?v%dAY>Rk;`s-io*5SJ9r z2x^FQ;OTbkzUB1e8wTRdQ)~AhsEOCCq4>sm77|X>=|#Auy=mP~T^5?TWQ| z{=FkmA%lT_e-DYT8aD;)mv#;?jj21r!MA$`NIMJj?4?poPF?~Xbl-O`QcME_SxQ5x z7g!eZu_3?H6;wEQ9ilk@Gc^1{s4^o&T0Y5Aic2zTZ`e+W6y0d|iLbPyRel>sfyB&T zJD`QN4S3xIFApJ9Stj47rK&ZF{xrdW$;a2hY?FS3C}?stxc7G5I-%u{4l4u-8tVt- zy29RP4A;2-xjOL_%O>LV;nwH}Y|?`4C6E5cN!NF#-kGlktiJ!bcH`>A*W}5T69$G` z?sUJFq`v%^Io}~I^2PpH9&V2t5O}Fh9X^wxI#PJ7#i5zOXnLSjA269d(kGGyMG@5sQR&N!Bf&5>!3F_kos3?P@4z!>dtppop@#6VJY!$epeqc-Av&C zeUqkM#GGpbT97{bri(t=KUNsFRjMJPdK_CCP#34l@4mmbZN?TO3UnZ1ynP(~x1-~W zD;BnN%Gk@pRYoQe(p5%!QQKzyV(N-OhceO;Z~ez>Et1S>_96$g$rR9i(2M$kC52-F zfgn!lP$}8yzL`>dlo~@@j_I&Zye9sbX~W~y6!;L0lEV+8$3Io{x)ELuUq^lz;O4E^ zS+fKO-5)X`YgLQqSbX|YB1%=NQPCv{$yE(&(n`(1JsMWWRofa~RHOg)dR@xu@5msS zULXBCZPghP$}y2UP;;u(yL%x|8p918z=NggxVlmNhgCxD!#-x;#uf~8jC@XK7+vow zJ+3k=KdJe$pzT|`DR$Rw3MXma#vnnUGRA|6(Z?EeJ0!ad|8naywxSZk?30IIkm1yj@`GI`{7Og ztc8H0O>5Sjj^!S)2Hh#@$pBSs7kIA+)hkxiLPVA79dgcSx0=&~1!(JmtjlyJXc+Ek zbSMkVt2D~t-#eJUSpQt~a9qe(1(N`-Mv<>mqh@zWCA#}LZQx>b%0wKc-1 z%zgQ1Zo6WlAJoKztPL(?i5d2B%C42S#>O#864a2R=%pmF5Wn~@q1vkwMPEFh4BGsUjlIx-W zDHPT-WUHrkJ&;__%s%?;byc?4vq^GY0fFaX<94A@XsS4r=5E8$tI842@8ynan5a(R z*SH=yT)?pN3U(^v9HzPRv^>+Mn8>ME+lh6p?6R|O@~$#{$(35(D6S3k9ow6a%!V~) z&RQ2GaSqXog(P0uo_N!(FzEF=vl;g!fMvWUsl~4q8q+a^iUa4`d|lr60!CUwGri|P z!;cFByawN+RlVx(SqQKVTKi-_Umh-19oF2c$E0|7zdc^(vkYBbv$puAWhOsaZ1HY% z^$awceR(*_^m<^*D}lX(Oq}wO`hl<&fgwkIfxKav(*jk)3g6fSF#uSj9j{-OD>+xH z*XVS~IUL6tJbcP0+uSJ}ci7T!nB;T~oiAOr-WAC?H6+Rpi~yCs&xL>a>uLG>NQp+x z$f_FcWwK=I8VouNVUfUK0V{`kttU2$K(Lhl#XUQfDL=t^CLL|Zny zPs0;G){>b3jzu4S0W#=o88?dE;u~4?C1q+ngEW82Q?7AZV8eObt28?rw4zO%4zdLP zTWeRrUZcp(@v+AE=l!r<%OHH$j4%)IB&MvJDSO-QmQo4IoOp>vFU+pgKN%b^(76=Z zlu}a2=yEQPz4^Iv`8<>+@V8A(Oe}noj=MHh$TpA`6?d7~Wg;ojYBT&P)^k@=B(dv` ztYymVdd~Te>z#EvVi!h^@-)^nB7Krxf4P>{=zUb>{!jrn>8MdLr+rwHStvs}C4m$e z=v^o`nW>Rewo}tPS|}1KAGd5Oh+Y?oin)1Keniu2#ImbcNM!_AUtPt2_Us>2zr0iu zBo{1-m%`%LS801XVUk19xDyw44doX&^svfQ+v~RnQrwb;y=Ui3r`Jl!o)d=;x9+q3 zAP$FW=gBHTpG(PgTUh2`^+M@}N20`Fx=VOVBkDWohvj`Pt;LgL20|9sXJ5_%xy6^$=qa{A`?%rjxYOoq<5i8;u@HMh`#sX68FpyxOrz)R$||4Zr3Eb8 zML7+sYS0TZdG(LG!x(PFGO`lih6DbFQJ+T`Ppw;R#Db;$g{+2?9xbAL@v1)Y8W-r8 zXVAmrr$>L)v}+UdmE$3mA-lSd6YpdB9~HE9HJudUF5zdrkLa&V5pJDeBk^YaCb+&Q4PJMl$U5P|5A6s z$;!*bA>)vIiAtIm5~8KA`l<&(AjXsJ0vVho#q;Got)toq{gJWud6W!+=JAax10$@ zuHCJ?JwZWAQuWresz>U_RrixoW`6iLbZ}S7WdEehol@#pSEThUj1JyZqM+)~=PEfd z!})=J5_X2K^Enym6ZX%Cw-*TZLAh10MdcNq3r*`{G`u(w8+(shZqYR9ANqq)q2s*n zu5lQIQt2P0Y&(@|7M1Sn?|afjR*hn#s#ImfF22g`aMyfb)}fVzIF_0&u^LS&UN?x3 z#o}HtQLVE!cfB%LLyEe?hhX%Br^IX2yI2xr*TKmc{ubFw?{RK1YZDg?J-?84Idxrw zQn5D~1!puHxyS6AjwV4D@ch*z{)9s^Z}R0_DUT&pRB?^k+V#8Qk4gM)tKBrwT3NFz zooxzNADO_@USF*(RfyL960}m|b18UAxTA}wvL3dAvWfFvxAhFdrs<3VD@Q}0=6e_R zZC@PLK-1F#+-PsMZ>GCy$z#q>Y2@KDmZwWKQbL}b>?McwrQYaczzetY4B^B(bDsG3 zDo{^`7UBY3ls;%XTXqXqjkEa4)3yRG!zUT#-F=!q*G;Y|NTaJysFw^*LGRT z;!h3b59lf8ES=?!WOD!%bf>bT&?E$v>vz?+n!%NlEGqza)Nj{PYf#xzVn`t2_O# zPSR`+9%k#tmj^{tLwnBK92Ma(t`9!HPd&J}e)W5gbPN4tjVL9MfeVcgFI~5Iv1@==|GRzEP*5KXdHI-%_+(Nq%iy%YTJC>6J)lsa~(x}F8DP~mI<4m{y= z1kS14+!dN^R@~{?mB``ztA65Jz2teGki|#3ynkO$F%uk0J&%Xw`tiA2aC*l0r-|qn zY##>;UQlNf?E_nQy3NeTv#*OU$tThHy$`lx%DAB-D!A|WD^C%oU^&hFvhrq4(?PC_ z9Q?n{xU3sqeu-eF9tXNM9Va{eiEFzVIarCKRKIGBbVO^vn>h87(YWhYm(RQXvM~mp zH%Yrbf%m0yp#6;3E7EQ&FY)X??DBM8^ZVEOlGj-Y2JGhx3#T#?+U>f#8Wf~i{BOmn z#-W?afNQLi$?7R-2uSQnxsfEUqPLUpAP^<#UWP_G#XH|?7gY?-MlUy*d{kj3I0|j- z`5Lv-iDC7pr~fmuvq0Ef9&;&o9Y}8>{a^ora;wAl4UI?-{JP8f$c=71dq@s}==IX< zi5olgqI_`HlVfTlkpT6w)?ZM&DEwww`bi1#N`=|Hawir$suWTzE3tT$-IvmpgQ7!@ zpxF-5tL3h8Ag)X+@8Gs@1mA(exW#4Kc<&)pS=x%sD2K+;edZvl`V#|7bt>3y?8Q#v zW)@l-(`3(30#zFJ*BD}=)Dg!NcW1K z+J^PsczD}Xs)phX`m1Uv<;$eigdS|;Rc&o2-ekYrIc#uj!|Jy&apTnnAX_!`O#Lv-TQSK_BH*7*G&YUna)}_qh zm_Q4xZMoaZO}aO4K8msZFm^a0b{}e_Oxcn8j2gmsTSyv>7Bqg&88NtaZ|Z;%Td>FA znm4>BK~rHil%8zGP5)&DRYmdd|QHwK@}}Jpox5Hm~)c6?7(f zqV)#6T|vlQw9_%X1FF^2b8ZdFt+?;Bp1rvUw6T>R5!!gNttAkiZX`MiE77m2hDX+jTqiqhAX1Sc_VrAWDw<@J zgZ-Y-R>;Zb!NpH-s&84RoOI&79ffN&DC)8Kkk)OK8!LW7zd5ZvHYXK7+L0%dMY&d2 zM45ZF%b>7e+K@Eur=2V|(n5XH-j^wE)4@G`-NH?2w2A!5_oed2376d8=O+SfANo~j zZ&y#tL4FU2ya3^s4kD~eD0OMmBOy8H@vcJ0pj~R2T^<4yRh2iBMJMeq`$!jP-JhXm-#S z-07Ng*bsSojmE?^vyz9rlE%3%NDVcURE;QKAt-FXot$eN`(92ua6NY&%@j2 z$NDGf4P<>F3bBH7UM8{92!{lcbf{ooUiFInXhSbmlKYtZaJ%!85&oq`TU9x6cF%bzNvuTG52TV2**^H(~dE6|3%wQ^%hY|y^P&F5|0))AYHBPa>D zfJhz$QbhdMFAJayKY_F9;%AB^&MqbVofjdPc=fcj*muojj}g^;+?>cEkk?X9M5ood z6rr6m)ZA=J`);Sn_D=jbcS z-b*07>c<(zXbIg9ttLj^XHzeQZ_-N}_aK7s6tiMhX*Ry4| zQi~=QBz@|dr6Cr-EUFO>m|&C%*LAUt7w4xx{%bl&!zzy;JXKlVm$NCj9bqLa(~3F} zNEkq1mstLfyOgtf`mDm;lK5AlZ_Mf)$S}*eS~2cSSNaXqPvIppW4~APebP`V&m2z1 zH@`1r*mxaj*>x99e;&e>3#Pe%te(F4oS{~u&MwxnAs~)peyULHTFZ;AgYht@El{y7 zOQiuoXPoU^oGIF-YkNUlf@yR3CZm~TjaX;To@cSRLScg`>0!++MOP=;=(8!y%+jEk z<>l5k=xf4Kr_X2#NZ2ptDo0wF^UOA0y&0H^3%)zAX7N0GFbUgZF~}suQQvT8(r?!J zNWH=R)e)!QiKcj+EWxt^ZGYtMe_iLF$56ZCql#VL%9HEINZ=*s5Bj}i;Lf2dGZ-ZI z!=;yo)(!9vUZy4?iLuo3_>;%_KMV-BsFft1+!CC7TsuMK`$G()1>bv{3gd>F1h#29 zo3Yn+QcDO=wcpYxW%^G=XEUDWfN#~cE&XAF0`k$D(s6BOk>66*wUQkhEvXTFj=?|!!yDb!Q4|+BLftNvlc9@l8cGoYge6Li+qxQuQ2i?F zR!yUI7@z(h60L1?nZ-UoES0k6%Wf+7qgZ*?*ngtaO{K~REnhO$>3?pvl#=h~96qa( zaw}ie(1f2yAF5Z}a)oN{07c;0cgO^m#6B3{Gd>E-4|U#0-FBv*B4~D0x>WEgWFyuO z)9?(*boUrsFCY^ZQ)8}0NWkx#Wtje@mTSlEs zT}yH{GEM1S;t zxp+a%ZK)ccBw9Fbubos4%7cq186^D*r1c*u%l`Hbx6ix4J;>Q~h%C*&?w)d-FcV=b zxU*ZF8HNvdVy58E)4V#=!>nH&K|f!fq)ewlShFl$nke9DFxkD++Zg_SgHv@s>701sy0K!g^d^BES;IxlcVcBoh;ne53_~%aK;yRWmI5I zMpCz5$bG{310BLcS3kpkoU!;`#YpE*D#D8ho;u8R6S`$!+OFj3`S_x;!Z-wDyO;wH$7D^<^7AOPVdvZ?0T!FYdkCfKw1lGH|x%=)!5O zXmQ2vik*DUf6Bd!OlvOCvS)W^s9=-sxgWlSDhtbg?_SFj!N2Gp1T*NSkxqzZ73hou z7PtDQC$C{OfpeO!xx?fRN4I0us?JuNgHIz&K~M|5knlRqOv;@m%A~n#RBn$SS__b3 zwweyQy6bsy|{m= zdh-Jl*@q@um)xsvP8N|S6)RpFc)0lX2{XB73mceaIkR$2r(YH%vAXQ;6&^Y~YPpvF zaL?<@8#@4x@N0k<44o@{OSYg4Et9VX0dEEB6<0ks zS6iNz$nvgHh0N%WJrhrT#@;5)r=YG%ba4oWbe3|x*cX8ZA&z#^31TCTYj~~s&x^Ji zQq0e?2Jc8xwzMN9T>LWCn+aM{iuTDSap^slEzq_stYLM;tk11V8C$jQEl!)h=DV+- zw7S@nLVosb+@ix|eWwS%iKx6pnQgTs97HdrwR}t@oows2_^dpu>+gz^sI0hXaoCN8WkV>i8)V5txJVN;yc zrE5Z1#-SYUfj$EEwrsL=SL+suj!yuoWkxedjX_E-S!wc6?MXQl4W=_}d5tNezL38V zWxb&-oY1`nO{PIyo<+UwG?Zj~- z&*g>|r>@hdsL7M0VH>}~$*$M$wjUc}$X<;VA=}ptt}jOEi=vcoNJY_B>_%6TlcZ7t ziu1pm3-o>^Rnv9sB(`f}0#f~6o!N2US0e3V(^o2o7|@Lx1Lz1dh@%>ypB3m@wM_+$ zj&fJImcwvYOQD82tRG3aK1mxae!YFCP1a$ygFGkdCu_7dZY)r4dR~I;l(}2b?@%9zqDxH=&%XTloO1 zDza!|9MkIvFTI?dj7@Pj9B9_@XC-nn)~QuR0{8uaD=;09x8;qyQay`4r>|Z$y5d&G zs(|qSKXSv*DXX&;+UoY;O#z2x_P-g5R#E!LalgL3GgKPlR<-8OZW)K(xih0zR7`;L zCAoN-H#NkDgPoka06~!O%-UgiWh!^tcMmPV8OuWpQv3)B1HoSwMo) z|CGHXDMU@??=os%6;t826YIYlR4lJjkp#r7XF~im=PaAWer*kL{u6Cac|_ko=a)os z5gg4E{-q5^=z;8apuC`V8Rc=Mt3iWF0`ISfylb&EDEd1l7P7pWvCFb1`;?e2vMbMT z1#{}1mb9VNaXufcK3J-HIbMHrpalM4JjpsVeD;G7mJ}0P)3XnzF_m`E9wY3%F-7Y7;<$Aq#0_5EJ#5funoUU0E zRB1UUsQ-8Xx;kQwI-@KWy6zt2k7}YQ)!L-%Nn!OU%jA>`AQB-yZL8_#0lX=HR~mdJ)p?MV|s- zciw*__C>%UZaiys8p05)?#ake zZZw2lg#za{JNv3+4U0cpIanaTgP1@w6TgRQl`G!K?BkswSt_vq>4pl)SXSiuKUBSC zSXAxz{*7HIj*5T?C?F^)Eg_(kN~uVfO1E@}1tSs)(h>$z0|-bnV2mIPCEX)P*U$qD z!#r!_{rex^XTQ3S)`T@5C8_65}1orKfjM`8S z@3XJ!Mmv4vQej4k=7z>CEt*A!Us=R;@s{UipB0?|Qskb9k1{6p=bUsrb4rvpt~NW| zDapz{Yv^A}>fr$OWD;8-NpVA;ve}LD9O_-ytG4p4C-IaH!-Ux|fwJylVXL0SFYO?` zsBxJ2`F5OMR}nJie*+Y>$MOy6Cd|tD?#&F-E^6=k_BL?;df^#1k)HA1wIkNb1LA?R2v3%*c_pe|AD{|HOFz~Zckdl!=D)v+EC zo7@HRDl}kayp>*MfA|ZrEKSF+*U7)H>lI+WyumN9cw(v&uQzBUkY}}Ghfy3-AD+{= zmCR<{20ZK2=vp^v zq`lR^nJ9LlyJ1vlJ%AiT)YciF$$Vvy!tratasQEiC|BXX{;Ztqs@z=(X5?KjnS$(9 zIWO&TXR>XcTg!gNq7u$SKIA2PzMvsK zP5Z#LB2+5XZ|Xi2Qn2yJIQ{+XP`U_2V5pX>x>7`oxI|1E)I1IybExshdGx#IMtJL= z|MObqR^5p6U-nNL{7?6d|02!g>h>ka&5q{n5i-8x(bE)>YF7J(Xe#id+{o&YU|g>) zQ}gs`ZEaZ^pAwAM8?uGIB+Pqg-E*dLNpC}cjR33)PZh6Qk%;yFaYo|HQS_OGiH~#+ z51B_75~B84nWtr>>O#oSHstNvq+^d zR^tdQE=_?tfpY$aP$%e9@EG&-Z&&}Ii$7e^=_5qQq5Z2n^YbiimVw~7_q@Tq+l|*A zBsL4?ERAgyjt~$X6YyUYQ&hSqKB}G>^Q1!*!kLwo#E2`a9WKJVX)X?}*P>0g-oK4M z0DW5xpwvJvc}*cG7N36zi|y)4GVx8+;&nfoRsj1c0k~~PWQiPh|6MuiNCs^B0Wi2c zv4}n=T<=RJax~7fX^aQhP(;~mArhbccik`EDZ^NStL@$AfVMz#Qj?qGO)sH)5*^KJ$gwskF;Y#QM*iLe5kG@6D*j5r5dZ(vMq2L>X(stVj)4QQ zl3K!Dm<;kHH(>ICe9`%D_`h7@&Iij^?%alo;pcNBSYr4U(g0fN;e^;@V!APfb2j=0)Nn$7^+wH8GiJCw@ssW331~F|E{1hM9CRsU{E1CLZDt9p%5egeR0sx1LSER3kBuY|2*w~;^y1DpmT&p7Dd*HMJ#bAy!!9M^LIM=ivhulQaOuS43XriCF*6fIQB$To`d)Glm=iYeoO_ zxF*wgP8PYAjp!@$WoTgLzy}4bAsSTBSFca&{>z~5d~h1W&Z{Vimytv?@c_)&xe1ok zZ8uyE)fZQ2@xOQca_4z9KzlBdINQ>AX|)Bp1xcU|3Svk_fw{E6~>iz={p#??xwY>^%y;@(y!F3pH5OTVBEE%SeGWJmSPqZz`x#JGf`}MzHqgJznXsUR2$27ugQY3flfj(~D zQ)z2v8zt9~#YW>(6$k%=GQ$Bb%s@jzDnT?s5vBI}I7m%GHDs5@X~BreZb1a?sT_vx zacf75b!B?;?y3NNEjzdpKm7g-UG9pP@`TLqc?EWWIsoC$r}TK5Z^P=;7aI#UagqfC ze<*?@#I81Mx&!UgAHG6B85v!yTP^6i>cXuWLBq4oJqjohQrP;>r^&s-G-<4s&0$C< zMoxYN@J@FMQfX#tiKm>Go6>o_gH>a#K;#J^t~wQk5D&{Ea6hz)atreMbrGz_-?{M7 zGo8Ru1-1N%g+2Fwy8L-z=oAjMVfN`f4K?1r) z7BO$DT$Mqw%Ek@Xn9Q-grDyf!7)@pdsEZ@yWJfduL!m_Q?|wX>j{r{5=nytXKl`aR zm$RZyCgp<}nuiuF(lh;LV+|WD;*8mcAo~FX#fdl7`%R0?J#aNLY(lO{=%m!CUtPOs zjML5JJ<=K??g55mM~RQA#uzQ-m?|}6&0A z=H4H?e^*tCjO4?h>`Ev2ko=!ts}lcmKmw5jtzHpoaNV8-ym zy{MUfAOS*QQphN3re3U@Py7AdJVRHOO5oPwUW^rPjH5VIltJEy^r=8|3XjUJk01&; zUu{%lnLY^`5prQn0OW_NtD09G=LzH96wEU)+eQ#O(A>iGhMg4RY77vEIDZou{!&QS zPMT-^$t};Cz|QM_G0$66wk8(PnocJcS2_$z;CF_)bgY!tVDIHZ*9Nk|!g@-^o1Rhd z>rIeU;PTEB1ttY+J^t(C{G($Q+>?NIVM!_ayYhoB?tZ&Y|;yu1ly zJX~++i}C#6xb(C|Az0DAY}jrO2a|ZcZRSP=CL%G03?sS6dt!-nL@;a}$K9~WlvY|X zky3lyG>=;)QedXVD8sQtKdUV6+Egrz!T1#6bZ54;g1Uy~QfNIH^2N^-ZD#EPnpKe0 zZH}{$)EnCljPx3R-5`a!KsWCgYU3s(G1?y86y8+Yna2V zyt!6AOPf6W%Adp!otP&&4OGVc!1#8l$}d3MhDZ8NMozu}%ZFV)AB?yypSSVgNUaJN zaB=4+fMx)WK+ptWg9RFfEDFTEPkbwhCfORSxkO_V#erK+Uy1eg~wZ|C3gq( zK{IR-Oq6AdPN*9P<;^<<^0K@UF%q^^^R}PKh1R!+ouA^gHkvJ*;l_kR+3Te#K-?S|qyve@~G!jyfJ>ht9pm;=jx zemW!g`=;|XmKXDj5Bu>()88(-Yum8vl4aw?JtpP|i8d{IXB}IqIy2y5usL z`1B^`7COHWAd|H5@4oWzCC@Awbwk|g#(p(?7tLgE3YK$Zh|Y7%FLsE@`S&+e&SF2T zyW!>&k0oj(N7njxqMe{FpfVgvFt^CSG{k{P&8n1qhM#}1HV_44j;rdtub^&2(L~U-ihMI~H&!e8N2te$Z@qWXtj5W$r9uScPx==t zu4KkZSUfZ*p}tJ`D(mkG0T9TPxl-RAwe zDX^#q9g(1eSk=X4Ffap5(8M6zpbts8Jq}t9@Ha``uStHu0xz*(vaD{(A@$ z&zU(KeSL9lN~;OfPY_bo{FoMTqDfnZj&__-ogy3zcfzAny-eQF^O5|xB1O|#s?}OFJ56mh@;9#AZ@%)Ht-RQK(8PUv= z<;+jI&q;+Y_jEq(o}3zQp6gk)YX?Qaudj#Xomzj-^Z?j+U5aF!YX;oke|yD5{PulZ zxKo(kz-1{@WB!*t+ z^k7z<+?iD(jb7{{Y))vs6&E)q{Arc58#iz^zQ}n(-iqm}6tp9=oA~`Z9r_euMDM!a zo+s28>C&s%rYD-z1cWc2x$?PW8MdcvcVm@YQ^P#7q~?=p897~^otybxGd)0UOP`X# zAUCdoz~JOb6259Uxri5fm&GdHrZ000NpX#YOYfX!th}Kk=A>pA@P>EROrIR+^Aaai z4Vc*Fx?J`3aG1EG4&LMV)mrA6y+>D$DFlm})-)%aEO4`_%QFMAUrGCc$?2IMTZ)98 zP94Vdz)_yZvja{*=;&*Pa^C%Y$f;y}83Q)Z#eSTd@5D$6e*z0KQ>1@)rP^a{PyI; zG5a&-1rhsvmStxPEr8ZstZAe!_q0v>IkY?lX&?Y=d6HP5Z5B?#O3lstrAg=&rvMzQ zvf92NlfTnB9I`9#d`e;5PUe;ns*Ri~Y;b4n-uxNd+9*DfP_=RwO8Up7J1qNXj0XWY z4Y~zCmMh*afQ)W$Xl;NE;Z}xs))RghuEm<=KyRaLDm5k>R(^KdpATm28=IAVRxsu! zIg#P%rg;SVa@T{=37U$f1&>^CR%Dg1fwF%OATsdmV!B{wB|TDu{{lyDz=4I{VcK7R z`&Ul^C;>FMGfIbiP+(+-aHDq}KyGR9+q;n18H9JuL^aJmy?w{IT5$u*{?C$Jhc%!2lJpIb1DV88#CRW z4cTNs@OLRWwdkZ;zpCl2twxb>Z8eYH^m}1_PBnM=52r~qtp0(VXLd?n zkp|AOQVD>2LRK0(U`tkG$NY<5<0f8!l(OIi(l4^=7QEZFPhXoJ{@E?RokFs;&t$8M z^nnk*R>w!{EoiV~`_^5sQh;Ik8>zx)aIdQ!qRy^-$+_%o01L=-Yk?>{X#PR18LBk( zM1lRym5caoh!x(UtOy3k29$hWMMn-&CH+o<$)*r4N*U~5A6m`3`c)gCunZ9249e9t^cC`~Fc7wQ6g(%A8Jvfo zk8J}Kkj6APja!{34wDzRE9%)oy9e>5i>b`_N8sWU~fiX)8ZLPDbUItWtkQDBYD zdXF=`#f>Q=GW_#61-h9wW9np5XO>H8vePkW!3Aed!TZv%*X@ zDnU6x<;ss^aBvWt#$$PLaV0fZM+kJGWecf0OE^>Y!gI9DwT+U}oxoGxsjbv0>qb-@ zB%Bzf#UBoop#kaC`9T;{Ivl)1k_AY}e&&wKpEQFic_M_ZakK>X60FbcNYJM*$)mu{ z#8uyFl4rKuRuhOdq;0)w{u7(*DG-Oj#gRXkMF9#A%eAG%drJ^=PafOssDydDaHf6!<@!Wrp_T8-E&OSvs(^bq zX^$Kv{n>mO)|Z>yF?XKA-|bvMtcdD0D9>UZhfdNA)f1NRDZa4GuEEN%7(9m@8q!3< z*w~O3b3P-z|HJhR1t6C+6ySws9&XHK_-c@e&#_mmfa!UU?LgaW!yz3oIk0N5DoCwy%u3 zpj~?&f{P_^)eZnSpTlkwIdj4#ueB3}9HsM@dib3m@^9_d=s{v$=H6#J@;CMT10>VJ=3=VQxZDpX~XhkI2ySjh%h!{5dH zjL>VV&Mt18u@egQMO{E;q$H+W?>q$!=haT#I*)z_hSZHlD;>rW)guf7VE{}3wjvL*P z6!iM`FSPrPKto;y%tz7D8lmx$MaWG|-exfIdhix#=g`J2DC+Cins!YHVPIwx!I9H( z2M*r0BC_HM7PxgU1*>~z7gu55Mci|HY;$rU;Hqxg_UN^U`w6CetOyW1-5Y`wxa94S zSU5A)TTpSp;}-5N$J^50?;-2~g@(AGah67!Al6BUn3^RskTqoTGJ~<(ovk`(b}afj zz)V=LEt{{H85x6_3l4%@@ZWh};1g&DR;fZ@8e6utg#SAS+8A1}J4|m+mG$>|>oc7t znUz)r-sCzkQeKT0wQ0*CL0~(xGlH9(0$c$H|JOU_ zokB=$BoxWkiPUYPWj+;nK{kMBG}8ry5gG~8rdjX_U1K@Pm4K$<;ZslrDB{0(W5 zp8L7dZX}QvTiqtr$c?w8Ql}}VAjNmyoXRNOSY@{V{OvF`g?XqJvp$c#iQV9OY{wJ{rgHi6q2%$BD^tVXWj6FQA;^mB{o71LB2;`#SrQ% z9a=>aK1e3y_Q^ni<^KhXWWUwzdhXP%hV)p_K$!mALEonC!hVR9^?9BTE)G!ZU3S%B zF!gf=V@u2@2SoV@o15oO1m@ZlC^WJr0yvN?PgS4bRi}vc#LH|nD_$qLl>tx;#wp0+ z{?(QYp!0#*0Q`bc?)N9^*omt|oA#LUYa)|E6Foc_-xec3D{p ztmb_<1Q?=^R!lywxIk>)&c4+LrEtIDBghi=)i&XZ^Ft%B3C$lup!a5R#vWNyGKD7) zoO|1Bfkf5tQ3oFfoiXY0c(cT-9xzqAzd%(1xmGlGR-2T%8djl=3ZK&VR(%^0=*Y8r z$cSN?Q#B0*Bedzk!!$wKYjHJO7r+d)4YS)M7ZFOG<~LZGreHpof>kNJu#mGZH;Tw~ zvg`NN`~Oh_<%u2nLr~01i;MSB!6~G|@x&+3LY3oKh1|pOAynLeDXgeD_a7+ApipK- z*Oe3-L(#Jy6^@Gbr%;tDI1SYA(%NO?<0z77BRL)YYyQiOA`abnPz6`=dm~m^F|VFA z5`F2Y!$9V{t4#XyHHq!1DbJhO9~$ZOTd$iI4b^Vu2sIJKs{*Hb&{wR*`VaDA9{E8T zj85h_;E0e^c&j66AX?>IIO3D8>m&zALoM zv}C{qAJhDIv2NM={qJV!iQkI-#eM`Gl1Xhu+SeY-#d5oT18Cmh3=Q=c8-w`sDi(?&E#S9x{sm}J<3&gp(>nXWEHhI ztZ^^{%ZM_4iB1(e^s{)4_3cR%we$GAU8E%H_3I^K>5>V_X`PK~s)*@ro-$!UvDuVi zAN+7jQ$TV!_1r20K6Z-K&hQc_?@9bZoOk0PSKzk-6?9k<*Tq`cBpe5LGcXuEy0&8aEub}8Q?_?@`?JTfpw^`gNh(-4*QH&1+9w7Q9ptjUg-r1X&xu}? zYibU>-H;2e>>5zz8uvg223A0&T4$sxc-q%NjDtPk6pBF!7pRPzVCHEkR?#UX-&6F< zc(-J1_}#rG3_Z+pcC=EQz1e!5O_!6por_*qQrzNVkFZuj6U)$L4w8W_(;)==Obst% zMNDS|Nkp!$Au#{?*W)_%kd^S8HA4~VokZXeDgERT=UHDVw|k^^0+Ah-IM+xB~mQGvsz+81xMH4v*x6T6FFK+ia?V} z7u|24M5q|UAu3RPN7ftpB=d8Q5E3-8l7FelF4>};{)3GRMaXTh>wfoi9dGm=bBZ$! z@K#F{o$Bm1cdrJju`~kGE|yBgEOd7m*cH2HMtBvoJUu|?*wq!=ZbUB!>@1Tku76x4 znA;gUbNhhr;ymP?VT)POIFh00_s|BX!GwqC{5)#08eJyC%P)E_!dIAmJ_7B_yxUz+ z2^U!us`#?o`D!ta5fRj)wZi?&`NRfV50AUy=mQ)hIj90(x3>qF zx2d1bS3f{4<^)q=hLqKuFC#?;e>SoRP<(p=C5SO+)s(0TjPYk4nh9Yac^zCs>>MRh zyBA0?_2S2=Oxh)>IciKe$KKDQw6i=#Sk@{RNAFn>%@QK zqt#?H4szQoC8le18&B2w3l`M^9Py_h}N;WosmcxMMiHS2>3$xNtzz6p8%r@^25 zfABxC|9u>1r(d5ZW@>lvyS9f-rXndlxS!vGzUnIbNc7Rir4gYPfuii=V&ygd3h2cS zG-J=`qMvC*7`h)833b+%AOh8}UPi#??(av*=yfecdw2r+tAciQd4rDv^_llX>5n-% z{+PpD^t#P#vPVn;Oez34_GR)o9Zf4ezaVWlcvY8yu?c7l=p0sw5Ep=H)5g$3u!N}Z z7FZ}R*#SFtd+Y4lhu;vm_6>GD-jl@oTCp*yd*v6LoRF(ekUR$G+PT5i6ttwiN@ztQ zRSoxCTE*|t9o$Rhh>*Nb*qC|YR?>3tALCAKcNc}S+|~KKpYZFjw}N{d!_ew|l0*YC zB;VTDF`i0_n9Nw~uHUc>%y!%^5Ipnb6;pPZEZpuX92?8^P;`Ey{HzO@h{7X~4s zK&$}&j|B7dYRrfyNEa4zg7p_%nj%BCS zQ;4M^xb8dKJtN!BN2&b{=KXT7Iwj7`3)*H@cz$z9q27z`55e582oXQDB<8QK`jTVh zhx&Zrd3JF-h01pdl!-uPq+gd+Ulqo%T|~6g z>X2{JG1oSqNyp~5l5@5b;435be}*XXL_{4TKgXBIgrq!Gwf$$JVh329e?LaqbyS}J zI&G`3`jA2|Luv~?>=GmLVTO?~65uxlSMsnhyDcC&i_=dnaVe{6HfWLM5lQ;ep8^{LY&?q6qDM$TZKuTk<6OfA6 zZu2}G$cK=v@8JSJiXd49;iAs(pD3ZMdI}52Ln{5f_{y4k%C26UlHs-Q=rWi^4Tl+z zzAHP*yd9vUxK*Kap{DuDrQcuJO$@)-6aM18haA-%ss8)g?KVpX4L8WiN9m8X8=w|z z9PGK>Dm-hXRogp|I6k)zLWiV5)6e&>Rhq~J1}vW$v&$-V=DRaLi0hloK1Nrh_Q`OP#WWir>a(G_@)nPI!Ii70lUeQP0RGikO18 z6IQyN=rE+Wp8%KM8|LQvX|JK8NO==Sooo30Ma0* zgM~AQe@hWraI{)gTFpl2{x@Z2hn2($1bYh@S1P3E&x(byNQ-kp!-pX>btH`=hG`O& zHQ+~5k`pdZCkEM!$=~`VB8cJ#Oim%Kz$kO&A)dd;&k97LN|=}*R19KB18xdo%nYE_ z1A{aa;(=2WfLj;_D?j>z)h?8OSku6Vrex;Dm3Cf}PbGum;B6?Kul|xj1+*28GOCr9 zO`&=fq7T0Yp}`#-KLJLHz+;{$K9rX6%XXwiMyrHcF8Jzc;%JF1i6!_b?@W&okq)B! z*tN4oR&kV4zZPx{zWzS3u8aMB?-ZCzi*sp@D+s=s0Q`YhW8yozv!>7@hpMdM`l0J3>@0XCN-KORL5$qTcm+t+Oz=g&A=eO;96>(R(evdepcus>xxM7NL7+z#Xh84b*O z?pVtMX}`|mMW~mt*c(9*_0=n7YTn!LFpcM&g zm)>q#Vy{2&=*Q6}R^Rrdp^i@_yRP2bKaZphhkR9kWr=|mbzV`C(f(MdpFB%WY&hmY z8aN4ZtP7mQGH}q#6Y21re20QhE^tigd{>v*DXa}f4X1#bhbkS^k(w?U|1G21drl!o zWoD9GJ!W*E4K7G&a6KeBdCRa{%e#L0Fpb+yJ3hSW2dEQjtFN2k_?_T1r>AYV z5?cmGM6w=1${yKB?+LwGq94oK)d<*-?p!)noOQZ0HF8Y3WSf0Bhz@n;A@d)fvt9a z6(fIlv&_r=ukltTyg5o1rSEA^SsG@K6&ai^O8gDJr?>9Xh{n-lUC61Ox>|XfuKuRR zF4&}*cFdzUGiz1muLQ^bdK)bP1ihwRyqp5|<}M~xQ){JtUE=o~0>`fAmK3Y!EVAtM zER^Ja7ala#DQ+NI>y%}$y>!v9SB2@mWinpa=Ein4?p(<&RA6;`$n#lrPSH~R{ zea&6Q&Hv@!Kc7LO;-+S(EJI{~iIClcpIBe!lC!2U7XKADs3ms-74qeQ4?|v>i;>QU z%Bu5?-FG8M$*Wu`c1wD)f`PU}=WMwv`B+*<3V1n2Sa`jSBbG~@6rN*0EuCuNzh291g0dFrq5+%>!D8T~@}= zsuOO+L(Y5YrRf%+6qXxxiB2_?HE?^QtNTiugZYYBx2)fe4*fBcSLqnWCMVlvXK`xl zlGZ0AX=|q8VQce>elwz>nHT?BE{W9{hjLcc;j~@I()8zn)aTh->9SjCN8Oi3qfv4c zo2jyRV;*qFw7ENVxs<*4oshI3=)|Tj#wC9Zp^F4RL*e9EnuPXx4KHo$95HX&QZS7( zbnIp9Yq(|ry-UJ$K1AUd5`i+0Hn2Ye&O7ThR6ERZNi${8+(CPIXvK-KH6N(wRu;Ni z3*oz&voAYe5huHXaKbw}7XSn=dkqHwl-SWa~4d~5J3??f*aP%DP z+oIV+{Etm?`L9(sygT~ti-YdMTPg!8)oyGNyDTv}>ss`rTb3T>JC^oGos~>PueW68 z{$PJ!a7-nO*2`ES=4)42BwB_dR}oX=Q1rGgX;Vo->_@C!<<&Dhds7B(WeV}`6R0O} zu#Xg=dn)P)so`i>_}58Ju1?`-HWgeguMLA+rjsAXh#4DXJZNZ4iruE#dLZrg_qEEI zkP#%GJu>oA(8O`9vJ%X3k)S+&@Z-txhU*?1qMd5SnU@lY(-cF3GBL^HZpN6mr41dDhdKGg;I7s_>t_w>{GC^1^=E0}gS@7YW zI+wC5H{0jh_EqUXtBX8)45jDpeTw@qrK{ai7^)(cJG&B}pPOBzeSY+9fJfMX&&*xQ zxgT2Iei?gAh(@1;8xw|G{nYo<7G5W0gBOWQ^*QNj%gRD_b?vctiKZSmT6kVd)?n`6 zE6%bJ``}Q@|E~Q_vWKRuemvcuU}pBb#s^0@Aji#-;**W(*K%CWSq;cjDVnhiCcCgC z^#^D3TCqMguOknLoBsq%G%tOm^&psH8M)o*bsYCiAbPvc_P7})eT%kz^gOn|&rf5% zW{jMi+FrA5rx(r?!qztLZXktvV+p;;2W+MQ3J?#p5S z(F_ffe`N!7qFU~ore~i{s@q#Wpj)?BlIBJ`QOz+wn`RSQv#-hOVOKlG;#9ycGdn-y zZi*@dD@-~qu7|p`%}HN3{ZN;o${W>y~9LUi$>znt|=Z4X9M zWZCnqy)aQ3`qZx5$#7VYL~HV8_zXODh^OvDEk5TWEpv|qFP7Vl4+m%a9hG}f^FB~< z%TCeUKZ0f1a}LeezQ8(475z|8rMkSlJoMDzEfL2>e_)x~_x|X$A1$R`aw#_JxpiC+7MWpbwXqKS&a`+?SaSoTWJxo zl>>fU&iWt(uLaGAm9eSf4t>0G+p?)2v?UO83BL(x!V3xPlzM@(LhJqS&kli@#sAW_ zpu%bOtrqH*CNz4nMfw1l(XDXyY#a+y(Nm-S$%RoS9-;VVXXpyjsOYuH6YI?qlJ2=m zG6E#lWTAn+2V+Y_gtvWce$%Rs&J_OGCjN-b*rtF&koIRD={Lj@!>L9&a7N>nz2n$k z8Jk7RK3d@K@x8G*o(;5A5#DQDpuNDq`PDES4AVeT>{UQQj_fOb`9s&e>M%~abZjA z(-|$0_vmUlN6L^hHqnFx59=ay7?Jo&lQiXw9VY_xigTO#bL+E}y{qD5GF=Rl`}@uY zo!@h5Bazn1;^31M4uuk?k|v_Xe%Tz#+<;2U*abQA+U$o3Pth7ex!g*N8 ztM^h=^_u0a^D!CO4gQzpe#pe#*1o;fk%7qw5_s?*?^bW$OG_oAB0Jmw=A~k!@cm_U z{>n=bcEgbT^3YA;XW6F*#r(_9loc{_)7g}9AqFzB8Q0F(nPBwxcLa~8IjOVa&za`d z`85TN=%apL4mL`fWkqGE;4+eAJiHVK?)~tfyg#oNU(!H$!koR7o_SjYn(agi4y+EN_YA~P@Nz&W$aG?1dpvx0>pm{7phx?UmY%p(aO z@P|HIL!}T+kCHoIvVD1X(&E(==;t8`YXlx=Zg1@jP#OF#$uUo}%qPwBv zRBEx*eK4xCt?;i&3BU9o@NPNe&jPq{n~dB|>aB@iEpsnT`M#BQ8h;Xg^Q!%q1viMm zM}OHKPNi-wDR|)ioRw%k_8Be`M|XX=E^Obp?65_O!Ky1~nAsw(x})N+ew1n^&0p9{XZcCzrWOSMzE zaf59EH5E&yDNX00qf*(iBzBgM46olGWKT;|P9 z`}YrbDf--*GV+;d^TiGvAq`QNEe5+qtXvxeidtruC^9YH8vRz5a|vR0xe3eFcHo}2 zQop3N+PhK=hlz=^(VNl4&Jzf38 zL>UD#v6lkHqB9k}6;M)QK&Wx5SKI?YlF7DE`W`kIwUl^rmtLeRt3M-VDy;TK=s` z!PmT*xs}YF5jd?yvCBx=UP0?x?0v>5W|cxE9VAY3-i+!fccp>iDq`IgSpr)FFf? z3cUDu$-dNnUp2phPOMo>MV8tsI@!F`!=b`HRXY&9iDhRGDBxqtV`(IiW-bNDY73i{ z&fDoXEkws~R_o~usf`#u(DycJQ1rrs_B|&Shoy$2Rc-lFI|{Tk`Kf8KoHx&$qb|@< z7bd5@cuO!5Ul03WN<6_>T8`_5Qyq(E7*uSqxty|Rz5YCQ1}CFBA5QgqufBSM-6^h9 z*OU^^S*=?&LJwh^if9Us+a`iCsdC{?sJw)ZI>)1k&iaGwQ=DE&X-d1#+{|l;+2}ca z=x+J6ekH*5M{a8JJoe-?M*Rwb`Mh_`<}(FMQeQ+$#k|;uIox5B%zo(cv)w1I38zJG z%0J@DX>bEC6x9=K{pWAI35b<9hEKWar{8jj>q2XsR8uzH-h@J9o%av5Ic}ce{t^fs zbT+y+sUq)E_sT|<_N$NVF*_JVy3sRk@_a3^1+&z^D1Wk=N{Pa$upc)2peA6YjrE9L zm#vn$^Zym!Tuj~im`ap)eZI)pebHs$yH~K#>3Wsqu;1n4H$xw=KbyW1S%0cL z^40!90DyDK&Kur*G*%tsyKCAV?(5H)_o-%`k6z(4D(gLJ7Q>hH2aB~Ztw}fiuwS&o zE@jVk)N{upl8EK`2(?%`+M)z1H9ym=_!F6+tFzQUA(b5J1ghaQVmw~1w z?B|cYM9bN2_>0|)+#r(TA2JJuq5XLYfkm}TH;o^xsXn<1qi+8%!d4Rjw=t2*Cg?w< z$`;+K`*Yem71H>Ca9`W|-Q!O}i=XAr2H6dbp9OuiIj85!CsLe8U#rw2Zrggj^b8*t zukS|GhWUqfbL$1n6|4U7&$x-*yZPe0GOfAlmI~fOE=D6;>t$AQ^K1w=EmkI6NXM=+B>yWsYe;4x;dt!~;lj=C! zbEeHdOb%cWs$&?FpI`RA!+&~XD#Nq%>diAcoYzMg*-tjy_&V<)#(si&aDY1@m1Zkv zo$i+6*4D&@;p-ql%9G`TonEVsJk@q1 zk^LH`?@aU~4+llQBMBQHk~7x(kBxVxEUi+ubT15lAsVkaYbrK!k6&W%ia_&c=s6SL z#}aSSVD`B72io>_H+F9lw5rBC8oFDO9vHS*-Th%R@&a;3~i_F7yA1PUeFh~~Mh%{v?=yb?t z+SM^S2A7aSeUB%>-%R=hCucafWjgo4w|`7_58Ozc;TjHgFn?skb@PIb`}tQ9gp;BJ zhoW|u_I^@pzW({b<0wCfv`L3{CniZL`A?^7XfKv>#ua7{VM(#)G@nQvTK8LgX+`zb zL7$(B?p=}9l?rZ}xEL#h(j^D%Imr@x2Quuf|X-z_t_&2VcnCvJjl9dOIDM zJTee;uFGV)O=7dW}sXZX2AzoC=y zG|#Tg{UNu`fGPEB#yjeh+*5h|G2z(;CyZ@FVI z8q_l2mwFY=sg3#$EvwyT)4`ZGt|#Eq4W0Pq%&P9zZ8Qo={qBz4EzkhWi*5 zRmQ>NYAvILq4BbVZkI&6S!Jb1czu;Ie{!FSPJT+_aB7JqI!!&Q#Iv5H{@xT~yfI=Z z?zH})#H#S?nG*6}^cBnA?j$7~`IA@EAPdH&tm|y9FX|to*e|s!W^9@~+qk-x5@1QB?RMyrMd#l7?!kF0 zYD=i;m(sss+8;q9UH3S~iQL)U7TKO!L>I*-`qqV3@jBmxYq;30rMoPQs*=jxpVRUi zX3o#pB|C6Ohhe_lP4MF)hPwtP>a%9ddg_>Bhdi>~`G&n;e*{t$FZ`BXeiKILT4wfG z0hsrdDg+nuHsY_JTFm3BuB=zp7K?BH{GGc znOX`du7y+gvG#+5<1I05!js#wDf4a#eA*P>Cp~pnUj-g7IAPosg3-dvYcc4oao9vS zSS92An^*XPBGp9ewNs|AKeBcdoUt-7j1rwL#NyW?Ik$UtZqDuH{r(aI&+V%}IwU$_}A9IOVvrKoa&z&?*Ho4T8M6Q6ow@#j<6 z*gslCSbnc+ATbN;4~gdcKfsgflyF#w`3YSa-aNmSw@$t)%X-=iMf^Fa>XP8O?HY6$ zjIaYLIQ%DXwG6Pc+l0N#;H8-5A1lh_};K-_!p=m`3sgdg1v!Hw2pK zU!`BGI-MQevv7x-c&H+p05lYugaO*1 zOu$22hT3>^V(nokHtUVvWy`W}1abCbxqh1QJ=}dgbatNu%Eqh&+4Ch5mCA?uqQcgP z&^;gP=AypFVFwSR7896E@HHYSw>P%enM_ni%=?P#gl`r5PDodp?z@f*B4wrK>!~+A zuzQ80&h2|L;-d6q+Uf)`JAa1jm7MN+{gTwnZR_r=sZnuPw!LO0TAwh!oN-;rMm+{x zGoL;>3o*L@1NdnJBPi)Jw2M~q{15BuvNHm^D?yvJq zrR7E?HGafbr$4D)P8r7(L-c+|r7PNMl8D6$$dyF&{{CUaG{-Ge4gd7s2Gb#T;>#hd zUGLgr3A)E2wp+J7v4$0;)#M-et+4ZC#wN4PeM`?Rc{|(B$XEzZP%BhTc-9@>b?(sCaXFY`K9quH}eJcB;TA zW`pT?oXFq=W>azxnC{FJouJLxL=D9C|5~zpG%8u&dC@0JtG(XA5}TaM`X%;7MaNvj ztGQU4aFBpjbB5bhYF?%)Y)SkSFL_-pP7<20^NSxVpV9TNccwR683-|RJNlzoo^aRm zyPjSDRB>x>d3}H^nIhGHDMj^O|0S~6P1`pw{9tq@_FZLAX(T^tPj8hsIJ5YXptMDQ z=|+^#Y9-psQ*pMws14mC&b}6khH7>ms$i{fZv{yOH^(2S`miUkq&&5SUv*OTW$Xpa z)d2k`=X6(M@oTF;Vr%@H3l+Zy=$}BzMWS^Dd0V*f5p~gVF*YC2UJ8mv+8arovAK;Z z?B;?uY`6LwNK~g@q12;Oje@q4k(gs;b%o0%D)?JZ0~t_BBt4xh!S#$LLxPlqh&05n zH`~tjx!~)s*^>wa%GJC3FIh$n{-D#`ek(^5zdv71=2}xI{F9x7lw3Xg?^2dynD$v4Tx!*LUN2By<*x@F88l#v)w6}5ts1;NM0B*>|7PN05@e5W`6(tE(gvls79~^A9Ub7S?Ur@etv{oNAlcy%Kdti6B~}E z;!W)aGAyBJKnwME-XE?q53ySk;QEwc)!)R;f|@?3c_NVBys(FG~@p zNKm*b-tMVqWF@)kg<4rWJEZHcNBnjrcf=UIGd#ojB|&Ykf@zG|8m7km+>}iJ$UwD& z)r8p#Te*8AJ@)=fCk{Ad{C{-41yq#V`#r8Oil~T`QUbyNDk>7vsnigIf^=R&1f&@{ z1eDGJ1Ox^HL0Y;QkO3rzMjA;Ox*Psy;B)W&{_a};wOH%w)z@?0^PYIle)h9BG~;>6 z4=_XAvgyLZ%l6{a6h29oPJap%ue>*@tc6xkNk6t3v~UY}sL+S_cWUQ+&(=+s!rYAW9Opbd*f3z3gjtEC{xa5b?ah*-dCE{R~)#WjFcJd26F353b3d#h@_WZj6OLHZ^_zv)b zBZz_IqZOxdPy3_tnfJ&y8UaAoZ7X>P6~rcdfF^_)PZBHNX+~_W3^EM#E%VUSD)B2> zqn$_lq`b(V%RNg+55D>`)@Y-8YeU4F-XVOeWEc*`TJBEAyCx&#jo5-xO2@RZB{W~m zd=>S-2+kreK3@=(44+zv9A>5o$_&1An$-N zgPEW0zz!g3d z6p~R;1v1L=ljCF?g?hDg?R?*>j8LlS%kGO=$#28c#YI7#u)OV^t&KV&1)9>~+*0oR z^=X7iUuY0FfFdv!r1%g|S!}ti8%Wt-Yj%d}I#*t{sW{%}es9P)7y!%#A2cvnY`SlH zk00m@&eGfL%Z7WxvpXN`TkcySAz7X|{x=6E;lg;2Qo(c$1HDEG=v#ZMt;rUSR_f%S ztGkBp3Y~5E%mBt zC|Re!HxQeALx{Uq4$V+F#d*vNTE*z>7&Ayz5*ccEKnhlRq*M#z`ncWkP8bb2IzGfY zckYY(kAetE$ycN&UZ^Z@$qk!^NmGTukV*Phs(g*cBQ(Mp|sSJNkgYE$k9%daFuTLO27zIga|d)i?mIv^_u6mdG6|JsF@=kcbUZmPDOCSOn?~1zSU3@yIB6_$!OV1O^}p1`Ta{(<3=F` z1Rv#3oO_>BOmULW&9lSU49veSQ#_|8^fgvOUO5^bb05&Kems?cy&vS!OV!w~_)5a_ zwq4pV)x!j)D2(#47`u$&)t@fPv@f88rbZlFPGeOCpYI;sr0{ZdSGJx1N)~c6&MMwz z%u`sJnQ@77sTKGW^uX8t!k-E>9CyGtQIU=^*wvvQ>s==KBF!&bW%DkO{dK1!3<^^z z-IX2I8Q1nzJl&|19@QTy7zjl3L}C5ba)YX)thnPrZwbijiR_@)d7Omar;cYt2AiLULLT;oJB2|V_HVLHPSAct z8$IrZM^!m@Nt<%hl_cyyh!_Oyu%EX(WxCY6#O&w`lZ}kdH4-LI+7u=;3ywO;BQFM@ z1vR#H2P_QBlXanQ-wnukI93NX<@KG7E8bWk%fRY?*SnqV!Sw8jC!N1@E8kDplIM1S z`}S<&@Rik>$Ivk{4`m4!$-{Em^FGe}qc7A?UJ*&2Ko+C!G&m7|hwfg3tO@%ayYyug zcHBb*q*jkQaY!b=b~rf_=AhW(BIMWV3YyTvvH4VL=&9kXguhKyMd;qOkJFQXb_bRX zy&~T&;5N3=A}_mnQq%?Ijr=9y4(oOhezl|ZZl!8N{t3;}Jr4HYTG)Hh1h0OaCyEgZ ztO-1hqT2k!DLA{Cvb0?s+65|=HhVS)lEn8{s<-VQ*F3M=^XSWJad~IQ+w5@|$~9O% z_dYgn=+>9$!zQUqy|<9BvtTK@h20;GpG4G?rpSqzy|Z2>j2D>xU^%2rYg|A(q{DXM zFC)?+__9V>(@!bOtuc6h@GJf$O5*o}a8ni5==SVtCxdZ+XohI(13et&Fj(usft8$r zyE7;M~aD}t#krV49 zc@^*L)H}evW5mT+YcI5x-W`Kz&@m zdM=T+)knM&`@w&Q&}R;^u(ng>1;p#+c|1G;^@`JLP4^brRT;>p`?~i4A3Nye+T$RD z&A%qR{49N75^`;p)$B|#(G}wLtxZ*3;VM)K4~1@@VB@tSRr&>?;S4j8FVOWtIE?n( z#vwZ3bb)Bk?wU!Dc<6$t{~N$>0|!uy`4hj>6qsSiinTZ(!PUUYr*|2Av-~;nqObnG zb>c_!zzSU9(FiC|(sf^&j%~TL%qGF*SGy+%UE~@Tts94o=4Zn7OQDKug;M8kHLE~o zC`4c%y%FM&aKOF6gzf?Pd*trbDmt`~G}C-kCCeZy z>N^V6Z6;#Aav3Q!Mi{Kzwz26qDh*&h28{N}>$)aR1ICmG7I+bJcezA(8PS^nnT zvpw4zJV@-NGUcKysB}+jSui*W$gq1ttp{s=4?e0GyoxweK9TVc$eV zK-AJbvcWi{^7Im11QaXxD5qSqg+59mRexc90MKsXC zdaNNm8_|tsjA1G$}a)h7^u;h#oSd{<~jeh8!_g-rt5Eu_K^uQu& zi@8Qc&o8lLZP|&M=zwEvL0@A?wa>5F;8nW)*5>PUYU3B|h6y>zZe1br%qd`;&vXAh z&b-?81&|+we3=}I{WdY| z@2SLorOAAOA59RkW_;`s+PdjYmOr4s6&GaKd2)abGNG8xyq2vAX?c>s{potI2I|)8 z^9NZ_^Un`NL3w@3F)vUkW%Gis^Dc>{)U|jN4H zvc0h91L7Fys$lu(?nkl6s?Ef4Mflj1C9YM`*bzq@&GD$thxf9kXp+evj=aT1)SG5m z)J9U^Q_|#-hzy1jRisR>$jQoIcqpv6_9?E=CyEI7QJ7(fE0T#>4X0N_HVL{z96W#YVoX z9Yrtc?!8*a>Vu7SsE{?Pe|Ph}*HS@in*LuTP_e}#)p<+j!3JZoTTDs$1_Z&(rh%;{LlCGdciq?kTfs?PY(l1cnvS*8L}2H zRd=3>0}@gzOj>@f>6bwCFzRp7E&<71 zwOx@}3$xIU#})nBN^$TH!Xt6hqICdvJ`RD2tfLIyQGIy$d-t=|=j2JTZtzx-AO3wS zw7UX^%D@6##csxd+lk-*=6Ob*2kT^*&Fj;c$GF-1l>#`n@jt20@%zzRRdet^!m=tm zLdw=Tl;WODnFOe^99yH)6mG+iLZFUUR%BJ8=PN#c@XwF`htqRp3Wvuv^t!<=2LEPr zaCm!C>3~;{94xLNU~09y+XMi|f1Uxq;O#y80I~xo0+am|VCgk>bqBCqOTM`_$wnuM zd2kAbHnx9F2`)Ry#6P(6vzpAN3KUIPo#v-31_sa|48H*0{NMJ#B#}S89fd_-D3#LP zjROBH73ny`n)4MFCwGq?)+i`!3D8_7MRONHZ1Zn>h*Q8P)sB0Gg)CwOz>=xNSHMV2 z+#}P;8$S&}g~J8eK;7woN5=8&1#e!l4lY}71)Xurey1Vp;ZYwLHehiYO5Ivm$)k&)&XWUV4VTrx=YC z`us!tv!a{2{iMtyadb9bMBJ_^~oVKlD2s<;mD13t!G2~bb{-@(6p zHux1G;y3bLB=OG_b~lryh=0SsM`{AN0%AzLPj{++-zxQ!;pvuk$Nf)#VCzXb_^YE@ z2bjQ!4{hwQZi#~lB9`~}&CeqLzhA4nmM2OXbR$L&h!HoCf}khEJu#Vjt%mS)0)FTK zo1Vvt`+vLVa@M`f0PB#l!wvAKxY3Su>8h!W)4!-RH-7v86d3(?Ab8IPqK`Et&}G^O z{OOkUJTfpHb!%(0wN8;(W@B#tu#X$M}EJ^ftXH$Jl&OV%$qXxz_1$-ivlLu9|C+oAMUl;42 z&PFw0)Tk6E@qgY9Mk{yLO{9Vt&Dtv9GCcV}N2*7)78J(9r}#TaQ}{^sQ=lEO(K=0MLd+jYtN2- zc3`O~kj2Qi^5eIyw+6@DKpXbIyVkR_1#=-}IjC&22XxV*V{%;D!)iQm=EK84095wM ziVryw<69~QvfMyb&#k1v>DQQU!ordHBaj?B=o#4%>KFK)jO6_TI2^FibrgK6)-6}C z;D_!KenopaHr!-psHp^#yXiA^8x|13>rmU0VNq?qdPkJAI<{ETx} z9z%Y^4O5-U6^8s#Coz_Tt=PrZ-nkEqVCB;b4h`%4-;$PR^_IG<2z$Ixbp|@t99!is5C-d4yRg=oqpXm z!iu(Hc?HT|Vnz8UyA@jZDu4S2IaCcPz{fqef`y;Pg3311cLUVLV9 zOHIF%yb8qua^eV5!kwb!MPk z;|FIISZbT4-gIl`8exF2hHI#D-7w-u(!VbU66nSQdd^lwinO*6wPY_h%vzIdTgv#@ zcy@t2=J-IC-bs_VQ6676)W$`Yp3D~&|0q$3Kg?y8hXu7=6xbx1TUapeYKF=4)@woA z{^jodbmA8vX)adg)$#hNr*9AE^=1G#nEujFK~x4jU!45l5^C}>bo+Up9A(ln{RS;= zq%cJfdD2UdBn%hj1A=7isX`;3_6Ay60I#(Y%USBJ6Yru z@9RB*P2~gVu_P)a9Xd}#3#)FEP|p~u70BCpoIsks+=4@ZOA7Q z=hn!>jOPu`#H~0J%Z~jMSawz(vy-u-zk`YCH?!}@eB5OMP8`|>@#BPY>!YpHb=KXv z&Nzho`JhzFVVtgudb{$94PjLW$?Hp}eiVtgZyjQZ5rk$L*-NaUNX z%5iCWJB(C8pYH`zo!0^9ZmJJ6XIOlVZE@+jXQe9utJ82Z8ykJyPITn$V5jE(WUJ59=x*%LSQQY#oXL zwUh*Ta!I!zz593{X(RWM*)G`dK?!0&kM)-+8-x(7ph0yuohaQV3)i08k-LBcB(PGo zE(+6KTv@I(^Tu-IYQC&zd*g3NOYnMZGY!a0#UI)9xh5NZzM<|ouaV4rCz45Wbz_8c z?!7~@kI!pi!gdF5$h89W)f-T|)xJC@|IP9rg2(8S5P|vBb-Hq=nkl0k+j>$GwG-6rQ`SFB4;r-_D)0@vfvOdbMiH zxPv~Svl}v>amVo+vm(`oJ!hMFai`DYD0tDKt*{NfA_v~ELf>%G99 z?V#Po1pJAey4GOfarh-b%L4$sy<8`sa!S6tF%WAUE~HF<1N)=qVECJRFT>cF;%It^ zGnrk(4XKbb+zG)c6fO-d?vU@1_oWN!Nca^GQ4?c_f-r}}q=CW*FLP%tBfl3PZBrB$ zP@EG{GrR)34hhzCGlxMc_HhNia?25D>=7BX-ZGvwQR>ll)4(2sR#e0Q60$kVFAK~L1>Fqor-=jJ2$*Aq?mrGj9NX2p>OJH|Nd%UwEK zG`5fi;4=G_V`^*#kr&TzZMPacj8oxUyV>dh3zhg~U-0y0Sd}Krb!KP5?HK0TISzgrN~~(*&J7#WF(pJuIBug4mMLIw zpg!c97ko3E#>ye|4EAyu1$}NJBCF7&X?8O7p{byEoGv%nYP0JEZIZbWqdL;!)~~qLpx?mQn;e^;n!qvCbZm( zLH34(JPZaZQm9wye{}XL!kusvek@@36m;i6rV3($a~O|al?Tj?9UN}3qw*tvwcm4B ztl++dq66YK^Ul9+1bK;+wqejaX!NF}N)KR0<249-2SYd?Ml-yTQbXyrZMQ|6-4tPL zeJh5Fu&Qw_SJ(6@SU=QXN&uVQkGq~AuJZ4z2lYuuIUpD%DPg_Ba=cj(cr$b$3Q_?lRQ>A6MIErmBX>a<@+tF38%@>?Mu zVm@z^_U6X)Ww%9eFK>}_m7ASh0LocL7eqlI1e=_4zNxQ?+`Y8R{KoHXRRVGsc(Gm1 z7f0^=x|Y=#)h6A2vx(L0oyLK{3QynNaMwIU@O~5`SVCMqO!IMPTAwFl41{Hf2 zcL`@w%!s=p$INv8e74tn#1o6lRz1LTZHN+?$P*NC9OYzJ^47Hz-X&uyEKR^u_vQ6Q zDf)rcdnh6#pUl{5C2r(F<#u5=uP_1Nd(F33&uZvR$VFE8rmy2qsv_qCD0iq^urD7~VM zw&?x#vfzVS4~8E{x3>}x8WdNfh0gA4-z#u*WD)lhKfUPQydi#lt%Z*H+E^|=fagVZ z2y=q?jrf2kOEIXzhHYx_6%srvz{x}gFfZ*6AE(iQ2IetrvW)CIMOA_xdr+0 z9Vg2+6M0F7iMp;<{Mc@frcU={$9raBA(x|2I~ubC&^m5MUo^|w%34H<-0YV_2p6NL zquFrxNNNn0)ZcEgIjw9LyTvzcm(TEX!RhgG3t6xx`zM(PJ+(8pfMZOL2b&a1H@ z`Xd}7o0Xu8_BDdrkh&;cVVxfmRNhTjcgus>=3S3vQUzVLd55dVqEWlxOO_o8h3(mFO;bc*{?;R2C9FA}x?>9gspT1M=1yKK(W!dzL`j2G z0DXu$iI`p(gg^e4BoxT9?#|PeqeVGBtdvu**tt7Xh2zPLu4v6uyQ#wy^WUc^bSh$B{4jx%w{m`P3rdj3f4)+ zIGM#FJN(7f{P6qw#WUJcW|Mh(EQA*M`%*TmVQ}ockWv|Q{5_2!Lmj9#nPY=l4H0^U z7dT!#V`!0Ph7fx|{qwb**_g&`pAx%ic^@IGdO}7RQ;0inzY1ka=D{vnRZdNB_OK6R z;JB7bz>c4mrK*)Dx7cbTLeOM3#E6zXCfQ1V+~wG#qyTu;sjiG4h=Vhg8C1i$2Kb2M zp_5z8(e_&A(Iy5%*Kj{!?0qUG8OBglPet>V&OQ+%GZe?(4u9J$=`$LP(m~Z0m7WuD0*Tmp@iq^|n^*)zBEPZ>mhq z5r&zTxvq-~y`nD@%=%qBOxaY(H?^7&irsT;iHf-)y-E~By(WN?+X9F@H8~op#j3!A zV()SpvUdm$>OMS|Ua*>Mwh3(mi z3j;=gErqym>nbvqgT}d7tTOWNeX#rl7ntbP1ptZPTc=eS_l=JF&KBl7sTy5VNpMuD z>`-f9Qw(Ze&J-y={Bx0GX6CXPwB>r0^b>kw)pBj^Ektt5+obz*Y8tULgIeYx613aJ zvmZvSDwB`&ob?7%gz{8f?;ku*7ueYoQin^i{b^^5zOu0*_lHH|d+=L0`41O^@|3K+ z<>jM4`Rkem!Gv=@RGV&kYK8X}7>NCPX$Ta|c~Z-zj@ZEV{maroI5uPGE?_BS=!N=l z-$@SQcB4Tn4Zz7#mtEwMGRh@$f*tMo=C|aK7M^^@C!g3%s#*SuHGAH>mUJ$g5&O^@ zU41Z@PJ2c~AxUf%yP5BZN0t1Cf4Gtv03=}R1A`Q}gb#9YtVYS6Ub>;?yHU2%%#@OM zpk3FYpt1lE*9aBuyGeYtf9YSeoxxU;NZp1-NIfjs0RAX0{t+V#Gr7iWi!p$KJ}$RB z$zs;n5B8yrUd!Z`zTKCZs(W>N&9VLJy7|>ha|?HD*vw0Eshf|vC3(G@EHpBShzou$ z2;^;4ME1h$ndah6?!`}}rr`uVZ(30yJOCSW*sD0X-KoXxVMe0Uy{76TkdqRL^{kn? z3!^0&M427bY!7W&i#L^*dmhUsMX$*z^*J;?Mu_>Dj5O?q*ir9<^{plJUOYtx{hL`x zWpuZSL97zyFFhyaVTui;s(JvBybh1;!ZY}b)~jtbNwN}f4hx2~__-tRY4EbRrtJ%Q zqt4$=X8y>kq5Y-mbpWaQ_46FXeL+x8^=p#LED>>OaZPt3v^Wv>7FrYm6SC^?=Qx5~ zu@8RKCgHRod9t7|I>3dvjWsB7DDRH!eIaW0xKoHiJ!=5IT<`YKymRPolPZ#z0UL{} zNpD@^I+ZxiXCYgsx;#lnH&$o|ST94Pi3=}A{mnIziG~sO5 zPhXEmB!U!ba!akfm;TYW<6OO^UaSXczh7N0=TZ?}pQpT1--g$wM$S^qmTvdQ?WS;W zk1jHCNA2h!c5c7sTp3<^+8dMY;NYrkCaOVnhQ_hQdFIZO%YB)%OPBGOuLYwG>)y3h z!}ByV_-R~_&B`<`ePR7-o!S(iwJ8oNqU!F)#4W8pmmN%x9&Yp8WO-)RJI!T5Qnb+c zy7{9PQ6?g@N2+U{Tsdo9bb2M5=*ZH~ErYXXO{o9QR&kHHRr-F^TNZQ2K}H2+MeJ0E z*VgUVd0RE3`MDo*=f-->Yflrxy!Wj|1t*s`0D{Q-L0$OnWDgPG1;LPw_0DKIySOYx ze9}fw$9Z(!wNI^e?!uJ{(h6w<4|DYCM>?P*yzp zW+4AV=3G{`ikK?9yH>K(y_}_9w}rk+PuSFBuLW6QQ}6q*sjh%tPvy8_9lM70^DE7d zFByLo+FN`g%6*EaYwB(%q$x0km5>0}i9n7GaK&|oy!D!*J42dj^>to9f9b~NYW_7= ze&XlRj&o@a&?-vd`5p`rD;fCkGY)X$T|(YIDtXEc8Ez&WaW?1;o|4!T;60T^06%b|zbq;S3=Pu2<>H z)ukR*02=t>sjRV6n9y&xEJLRR6@n@CZwRI6UEiqXxrY+9AJ-gB|9cVF`SDBXo=o8v zaZQeL_-;V@>4%gVA3%?tLcOWKrJsy|a|P9P2vEjhbvD7MD(UX4=WA&Kk>YtZxvKo* zBG2I^%0H-ybuIJsYS;tQI^Il)ToWYZgLx!8OPj^@J|$JkRfQy)`KtGG;q-*Lqu4Zl ze_70#+eNvzh`}h^)?Zg6oL6KcVw;eL0^y=CXFwDi-!5G4f}2Q;_|x^5dS=|}MK4ym zS=~%Wf}rWQwqFS{>Z4{vh3n}qz95Kw z=OTtF^FR1rQ6#o8&447$P&zx;{aVr2^NSkkUc!1bY4e*B$h@~=(ylOrD;8kv1r~OI z>?HoewK`;$vc3mm?@L4NR9GQN=4(OEAW5qUO5cz*9Btj2i{ ze3)oh#BIzex9uyh3c`YO+cX)&1v%DjAM%ft9flg~H??g;BE}qhrYp*J#=eTd9G04u zQMxyYd)ufi-D5osN>p_fK+uUTVGWD$0u?n=cg1+_27m)-saT^tg=Id_-I8shIW<)u zP{LA``VOR1+P@Kt5E+HWOvP8E=$ZVm*rG|rKI}bzy1QQ-os=fi@G1v@=#*dTpkGIb zOT!sZ|D|0GUz?Y@e9N|0s*@_n4x*>$LlR#q$!OoK78&O7*# zv|#NGx^;zDYlC8?F4?Bt`eL&{wbXmdImQwcX^{&31n7*-66I8O#n4^#m!OtSuOJzj z+VvC-qyc6Yk`zIrft{^m{sz{>CHx$6SF_HudW+dCrnjH@^)X)qE zXya0)&7NDpE%`^6>q!wFm0IS-@w! zufEr6WdOjjZCwA>fHKr3UwpCD04Aq;fWT!aFBv3HI`rRF|H<;}E_K{f|C5bK{X9&V8*;NY(gccKJ^6! z6u9<)PI|6N+U$3WdXzgnH(E=%Qd;MIUHc$B%A@e)xR^?(J3a^5nknDM<(#}k$+0>F z2aCq7zmRQtyu8$y9HsE^F6?);;&&RJ&na2XgOx0?W|caU%VGM`(?3^+hw zN`ggMzrcC?8S>@2X5x7jXt%Djo>|s6uBSp-7EwjThwH3e!KCC2=6f{fjX2$&?|rbRpl^dR&ZUgIGLak@_wQQf-W|88v?A`vSbn;6upzzz zM%AqME^`YxSjjuKSOv%|VJ2t2c z-OVM#UtEkr+g&P(lZ_O|tb`jb^YkrMAI_LEf*D$OU7yJvYlf{^U2Ic4TjV2gq`7+PbH6oLDi)+9 z=$C3^H2|63Hk`BK8{`KWrR=&bTNG0BLl&RB(rs9*NsS^r-6}O#rHR;H|GVL~RS~!+ z8td}t3TLO90$c;Io{jDIr=6CG)A04k4K1mm8DP?}uawJ4O&*84J0TN+&wI8IpUx8j zv>9_;Ar>V!ISkxv5Cac}-Igr%!j#*myh8G?Zbh$=V8h~z-q?{&r8uGVY{#397^7LA zt+;kHIQ&d{;UmO}cvb#YK{(mzDHv*p*#h7s`P&La8{I8BGKW3BfvupT6TfTRICg#d zhW&gE_*-tFt{bxr))4CZ4nPmIF&E;cpoTt1U?RL;)Ub61e;mE~Gp5%>jM!#kna)&LBNV=OcIb<%rZg-0`JzIt3={$M$`Bx(Q(eQ>>gp0@IN- zx0dstX(WR>5$@;{M})7=(0kCjv%?mZaV5#!tI-lBHnDeZ zF5Ystf%Bn(g5L!2`}N9yz22v2k1Yu(2|xF0=v%*&U7Ay{n#uSc9IT_Q-Fam^i^QXS z_e1Tb_0ZjY>!A!?*u35fe!G7zLon7ProP{%U*rgaLux+UtFR6|q5AhsLcBUYG*@ zHnk~-Fw7N$Uw?Gy)c;|w5-trWhXE@O5MB{yEnZ*aFO?c`Q9gxQiae%4RsA9MEQ`g2 z&tfeBj-%IZ{rY1VH?$`b+5;CjN30I*j7*YVr-TV)2TQNh*WH716cr+g&euVRqa_+% zFYgwLb4WhuVV%0ZyOn@d%+8d(PHj+H_=9X1%9J2=iJ);8rS&~!Ep+fiy%3lz1Tr2P zGEW2nrtzzEI2lt%+w@ZZ-4dAXi`-pVLndM)hz8lShVhyE#}KudOpl=0{a=jD-W?(rn)&xmcofq{VM^@E zeEO@KJTwSCz~I{tD+zpSOuk=Xp8h9*SP|BpYiS_A0hOHwoe#K*WQc-#4fQcVM(Q@+CAC7lwc7%Q6y#sI z_ks=YtMjvb^2gkXye|FmA%{uSC0TM3N%q5}RADi>tI)rE-roD(O`A0lonev=_5r(#b!$f)1~hA_?2mWEQU}`-Z>}xbC}%%W zc=W1RuZ;?pZkc|`y2B|rk2S;krXJ;5jtwZK(X^XIxibvIXLj2`?Eyw~82D%>mA|e# zzdSDIIO%un2U+vrt1qN(EYCKSVf-P=AZPD3y3pc@;tl);95@gdplQLy2ExTG1^CXQ zuSuT=$Ry@zpoKoKx9KPUn|;!ptL8Ks3jip1syfH=t+k;ImK*o4$biAG76!~wLO`X$ z2i1g4-mkKZp-+x*8f5Iro4@+LbNhg84EMUrqg`Aml?;x&*Ff?LbcmxjZ)fAQV|N?{ z&6WH7>162LUSWKQgfhbY>%;ip&#BI#gpUeC`pqI0-_#af0aLfw?O(cYB=zSb$KgPt zTp$U6Oe+{sWzpZL43xdczX9f~yNwGVtf7Za@x_bbC!Oj8a&JH$o&1fo3MG$%2AS;> zBT9~6OTZg@e?b}jKz&1Ct2YoBs+4UHHC-euBp3z-G?*OE?Ylu5)rPSpJ#fI7Y*BF{ zh{}o|OfHDNoVJ6F5 z*<<3E{kpv`%I+LUqYU8w8W z&U%7N2@KF+E$~np^*bs7xp*zhoMqqaOPrvTsz9F3M+a(?Q(+-4F9K*NzP}iG{&K)} z&dYn#h6zbOVJG%(3+*`84C|7p`&}!@78M~>FE~Xn>|QMs1xVVGX5d`AabMI`Jb| zA*m9bRbtWGzQv;)R^9Yi?;M_krCIf8vVsxMqg&FP!UUe!Zz;l%7Jw7ZuSWp>{GXo; zn=>ehmmko+e!BzECe_Kx!w7@EbxJm)^+NBfVMN3I@YP#?|L}hJ-!lVVdEk9;y%g|p z7wj?qv`YP5V*3~7x$G%W@XrI#49>GBpb;Y1?dq}kR>B{I{aSD)vl&aD_XYW}5s(xG zK+E4v;2+(3cbekyGdadG-w?-l2Vp$VLKe^#;xbQh3MSVt0DsfvimbD!|DO&PpD`gL zb)BUE%d|J70VuUODq&IEVNKh(X<xPpZ&^Dy~UF4qz@WdD>K&$hsVe-_8;U|8z1{`-}&9>BbnDU8^0w zkE1vADc170Sorj_PVn_RJ3{+$hmSOzvc2N?c?`%7dy<~NcKMsX7HVk;^U<# zU{NQEKW=fQvd7ogirHoFqjk?l@o<{`zoU58lv3r)E}*XB=Z?c)^Ydf|q95^JmX{tb z!Ud>z|KSCEEH>8b9q)Zz+el40z%DkXnZTvf1bZz5kylz~X2e?q(%ZK7NX!+re-6P?Fq~ zld7}()<5%F^mJZl+$9}nv>R^5fBl~KV)Sd-A-j-QpGbFF5JRp z;I$VB3=TEDJr}++ga{!K@fA;RjhTR>O(Vr643X&>azlE=Q56Hyg=OG$!b~wT=C8LX z#VOKS^*Q09WLsQ}V}>$tF2OrZyDtI6MO{2Tb$959UYW})T6=H@Rv%IG&fOPOybf>; zaPB~|a{3*cWo~*d0iNQB`wFHoB#hsBTg&%@lAW<;c!%i&!;gysK%7 zCo^iDl2Fx5XYe4DhZ$d$I%L_plXFRN2)Hw*i#;}q5S2H2R?6V6~=)zDfm~q9f8F1B#=h~u7;ET zbZIs0hUBQF(g=ZxH{Hh(PwYLSsk3Yu8#mHHT~1J^s;Gj?4+`e(ad8m)h|GQo6x;Z5 zrL}AU7@ta!fJ?tXAA^P1(JJjXPHJ?t)&B=(3!AEEu$ z*#=ZZG>K2`HC2LpO?*7RjsBuc0hSx@N4N<5{=(kFJTIdJk9PwNPAb~oB=2g7)pZ}D zKHf#{X8N>vcy~&YVco}UFTCBMJ3lUdphb+!x#;acFNmVo2xn=^qYah$(FyLff@#T+ zw-mNsz0X;%=YCLZYT;V+t~kmU!loRX6NfH9?}S5Y7*EQe9_oJdg9aA|C?u3?)ex20 zhV}R6px1kEy_FTzls+n(k}pu(ig&nrM~A@=m(O}>G4g4Pomn4q7!d))d-F@+_=%T& zt?1UBJT2TE4kS4+^`Y7_&B|f!*EF6L+G;bC5t$R5Qcaih1?S-)Ol zzvO=$g1*x%4bt(#QsYgs#Vf6A!>^YpJ;#~Y8G0B_4(Cio)Re{&twf}eqkjcRi%iiZ zN2CL84mT>3jk1joWziZ+%`diHHnp}U`>sR4Vt`j2^sgZS?^s?dXO$fd={bO)jY}4%!Y(09Q`N-89B4KyT z_lwDBDvW)*bfbeT&sB+7DupC#)XpG=m=L=4+(2_M8{rKRojox2PUywR3+B10X@z~y zg?`TSuJ*Vn8Ang3uKp^gp5B3=CVn(UNb!-FCe0$?G{dxM^?H@bpG6258JUVA;|i~t z8C{ax1*Pid7k_VTC@Ov#d*+>?+|zfrCJi2D|52=IE)ISFe7vq1{TG1uXHj(V73CT= z*qQX*A0iyOuumDzNX!qJ4Of`_@`7kzq|qkZh%lFbh=>7Yi^I{hKKs!E(ZvyPhO zV0*q%HPo0|*>sXJYxfcAb9+L2l`9z#H8q>c=wGAD3gbpi&e7`W>J095k(LbaaOIj^ zg^xEi6@o&7-QRx6iX370a&^=vSZMh3v>K25+!Nzi&g&fFFaNYaiQ~&-s_K)y0tpq!!Ln! zy54=Yb0YAG{cQcXO}ZlIgzt(vJ0+z`&_IO`aV>~G%kd`5KL-~xl7;rBxy{e5 z1eEx%y+9PdA8b^G9NJVaVO)YsOapGEjWcr47G%B>p32DBZgL4;Q)SydS{lFh(mvI# zDgI4O1V;H8XI@poK~2O$ zWh2))*2GmQ%qenuF6AiO1Dih^@32_u`o8wBJzy5=62_gnu$zcAAyoqo$<)z&faUxCP2@B1Xpnd=-Uh z!ihr+^Ti3~H51;DmPGlqE=Eu}*n87Z!`=vUoFo6Zps*Ox+6~zt)?Xv~=pw*F5 zF)PWI5l#^c$xMp2$=%Dgp|3X9wP&cK4C~iYb6D>155r&)(ga;|Vj8)k$Z#5TU)N6c zUb|n^Pq@*AtfDvTNT~F15{2BOm#@r38dhk=AE73zxltc1X8uftb8v7Ycu+>(<(bbA zA`P0$K-$txy{N@kMBT zB$lasz+^JM$~%1pns9?{BZKH44BNqC%v&mH2M<(tf3N)WCNLuD6nC+>cpiEf4T{{% zukMmAkx5JR28g}zeW?laee;4K<5DQ|x60&myvOe`8CT=k&iiR~6KC!@RFwSMPyHM7&kp&N$*HjZF&dM6pEwpul%JHfHF50?i^J7Me+)NjGNT68v!= z;=>H-45eR2XPPCAJ*B6g&)m#Xlf<2dH%7~PTmDnE9mpM*}_X9P6VFsk#TJ{fh8mam=2#!$_5enuQ7T5s5? zyX;Os-?ZMaaUJ17obCzm$AA{!!Crl!@Q?@Jvt1PB%T~x%WR}0B8HxxNC-d29Nar;` z9$Zi!)J!%$K4IHE-d|)7{f(#4vlLwAAAhs`#ty`+j<}8;qEX&un^a@9Y)I#gHTN3) zS?z&t{8m<^1a)-?&NsNZdUe9JQ*7Mj&0 z%S}ln(eDYbGlEH$UDA+^hk-f^(bcW3PJSt;BE?BXmd{g)^-Vy!gawN2hqTAcxESF^3OKx@Cx=&%&)lcVhX>kRoMsa-Nn1Z?E2F8~D2d&xB3 z+3#EcZ7Re4o>5KuZhodjw-7X^;8!;;Cf!cbLS4$8bXYKCE2ZR@KG25UaS-I9osfG8 zT`iC04&MeYH65#R?)8R@3_e*MTC;p@LRd)dQjyGB64|TtH&2@h#FYFuinUBoTb^hz zD@p487Us~NcQrQ0P3)p<@21R_6ib zVi0HuyFUv=Ddx#WD*Yl$>g`Ej8toRN!HD7VNl8oH;eDpUx=$}O|E3?RQfgBQvu+=& zN`)jXUQVtb(zlL6-zlIE>`!9^Gs`MwE}p%}FSSp^{j86e-TKe2Jb{(2SkjP3I@hO1xqxPm-hsQtLA@ElGH_vJf7^3xxo{ zLS2GS5^MPquCE`tXWz27#?RW~?Xx`Yai&dKn0$)N60)(ol(C)Xw%6L;^>}GHNS$9A z7R+^%Wk+ru3!TLWt|OLRyuH$b)4$30dKa~IN(-&Wu?q|mJ^SXRB{~f&1@YnK?8qjs z_g3p|-YFvRSLJRn?tlHf(knnEmjp;hH-;|VYmj?*P$^(tX?ECCTHi&=f$E-7Izod% zMxZVWa!G~t!mS%R1(gU^*PDMaK#l!gT{e>DQG>YZV*EwF3p@a(F+U@)Ayt@g7*A(3?WlQ~uyNP8qJ ztM^Aa@1NEDRE5cOx?yH5U1-ZAXRA*(_ByUrj7`*z)6z6+_oaVC;Q#g^4^HP0a2iH?N*WF=k0q%l)3P21>IH@4>%KJ(DS!^&kaF)1^q8(MU=`SJiXGst9rsE5| z?Clcm;CaLPq6pLWgoaH}2yBHwTf7*-sV15D6_>iGX>C_U&f0HpmW@FH)rRoZOytzj zN2)gr&GqTuM}taF_u`LD$oh+KJCR)w1*}V!+;c|;UCVC)y_B?ru|@9_j6(3M`1nGF z#ry*xyPc|LajW^yxS7zVCw2jH0sM(V=qZV{MBc;)&Tua1bVY zwINdrpH@BENO>Me(JLiH31O$t{r0n=!UB+5dI^8cWU~cOyjn8zn*M-d%r)pWdu6`5 z9luslRH~fTEL(UYgyI*c_C=S&{$tgoyZB_EiM~U-3#eBByYn>^PcV#v>GztjN&QT= zgNqU$%az|gTHLr$WK{1ZAi63Tn%>rA>0M=EdFBf&IHn<6G{f*f`}V^9UbkN30)Mzf zuTQL9m*kfkLW%V)66$K=UAl)X&wKFvOq(T@7?H|rCqAu`9ybjO$ z^`RQ);>Xro=rQd{wnu5@KH{Q8sg4*qz*6yR0%jEpaGI%`((mrpF55gNN_S<{Y^hAo?BJ~01W>dDT}zY?5o5@z>ib&8?JECr!JIY3O22MkMdPfAWvkN357rA1 zCf&EQMZt!M!ainoP{VNO8QSlFBCulj`qkqb9&$0l(EN89&nuko@E-X-tK``t)*?4|zV#9! zJ%pvMGZX`6(KK1Xnc?dt_uHK#>oFIkSG?gcj%BvCp88n3bzHBs&chW~`nn}|`UcR1 zf!ts{^(zh&goYFHesu`{%ixi_h{(e`zNfAyM5Aql4tj`Xiqvx7b0c@ zAuvu$@ybz=(uD_Uq9-=2>*?h6n<3~=39@2cuee&9N~1yuHwyK2&#AH8AaK0Htv+Q- zH3j(kct^2@ON%4&ORsA(@n_LL6%a;Qr!vtZrag8_KUyAdnp=GVO}jnb1Wgp;`i%{R zVi+No?K+J2i}je^muQiM9v@vEtvT1~u;pWDGa-h;8q!o){N8g-tSv47gzlanTzEe7 z!&pmt(ATTAIl;ZKh{aI-$S8*U7fzZW&)W%h>NbB)oZhg`E4LC#y6v2O*mL!!ie`}i z0?tfWh(U)+&&5p8M>?I^Y!3Rr95RsGk!b_k^a9Tk*nVNuZX6fA#~lBrxM6{!X+j5O z{;lI7*H#C*49FUWbwTrJwf0jq2ZS==?c)wrxa%~RnV)G(alv4a3D1j3@}Ks_BI86@ zeLkIrsIfl1^<7xqti*aie@^X}NQ4B#DNCPG(Elth(1kqoqR=<>j+2opjc~VO_5e!7 zX(OZstBn*xhD*X~=Bn*Nnj^~BdKGfYtN9L3Arged2X5!(RkD7+K}eUOt;-WE&96-w zv1Hs&D!5ka)uf)n>BblmmK(wo1JkQ9s#onyl80mLKO&2`8V5{Mt7NA^DW}1$t^0}R zf$L4qP7*sI=Bg$;K?qS`ZnHN|ESD03ok_v8SDQ4um(7rV@v#O4bbeR9N*t;WT#|E9 zUMz{8=~p&YlnaB>Ek3^zp8(PvaN*WVd8(4~XOVB})}?l<&EliHP5PQt`vQdv-43Hx z9~)?q6MEiT2v9s>9r~PyZSKWRJmTM2uFxACDJqU$kTzrKFAAf2U!VGr>Ra#L`g&Dr zRt6QuEhnD!C@XxnL^A_5)~uS6EhX{{%j%kTB%1u2N1d=*IvEhsH8w9=2dj_(-v!R#Q-Lj?HxY-c+ zvrt-I=em0DXT@g;9j6}+{4y3bPKeEM%Tpts@ zL%CKe6fW&f>`z)|m0ezaoNjk-)%YSZ)GBDyZBa$D`XE_BJzKrivRP*DdZ-;KUh?s< zSKbF1`1{=cGkY|9$2#SFx;Im?6jwASBc<7>wY2$3XM0LuYvSttQJDa4gRow9v%gdC zQ@acmLVUx)^Jw=Xk1BTpc$n)IGvo^&bxicX;Pq#Fm^$(EEdTpHT6~SEJg_fZ10;Wd zEC2YA@@Gh*ckN31vBTk0`sul|n&rCP1v9v_)@u2D^B6bNz3Gc2JDXAOu`=>PXc4J6 z$YykJ?1@!jY5Z83mr2hxjF10F_3+FBuHlQ(sLLmxAfsl7%vIy`dK)sr7~y>(Db={P zaIdAIthKO4)@;ni#bO%QqO3~vR!SrF5FIRJn)X6)5R!`1(^9)hav_d$4}ayIPc}NV zH|habT&PkzW~&~65&oTy)LiC`PF#P?4kne~^nMFUAE`v|Vuo2=Kqxgr&heV8tfva=Q? zJ4en|3-`I9%-jkVF?&5VA15vnU4j)xcRr!eAmDCZ_d%KY0a)@dSkc*}?a;&r-qq`# zt%(KBiX_672P1ikjE$kHk&jMg!~`Wa=9m7Pqq@iO#MZ6mfB~b^)D?;qkXqsxjAEz( zXAS+oT<*7Pljm*|Rac%&9BU*`%@h@q?uv7?_~8D{aSDr)|>n$mM1Gvz9C#)gBKHw#~le4gU%8o+=I-F0*Tya9-Gal$(={ABXpd) z>)CtqGe42_WubtsGDMMrch{7!Z-1PqnfH&CyzC|$bBsL2?%fA^Bt}y zM!sk)FMn?U;X(Ea(_xV%z5_}*sBIX3H`WBlhhR^Y|59x#zn=BY#L>ngBz;zr2Ojh@ zRJENJ`E}7*>V%U<{IXFHxcehsjiN8Kod=49Z|xJ+4~Ob|l5z96FccN%lajyf*66mI zBicCSsTERO!u-v*=jy_$<@KvX*&_Jg=Us@+#cZ8B=G@xJ^{b^U`{@YpF)Lvl?o&2q zl1KUj>oe^+5ENR!kkI7O7a`1bx-_cA_$mvV`$@aNKW3D6wE@vc_=PWO{}A6$P54zg z_8>y{l_)4%2H|}#Yf{G+Fds(U5+3GGJW6Fb+vVApX6h7)Nx=#uB+R<`*)4}OP#M^t z*jm4uz-8SctZ_}6_q2ZXHa1>((kW_EJv($McVQLGBzzK4nOg~Oy*lr%ev#cJJMDZe zItRNnig#AsQvu@VQWdyV45B)X0X<4uZg`Z}8!A=kdJjP&uT8E7`+A~67Iu#jAB@XP zj-94lNH1qbh6D6j(%$PauV2!u;UkiV)A>DY%`g>l;#o_HVLr&CQkpaeR`lP1=|MhU z1#w1DJ>uC&^_W<=_?V524e#aR+f3im!-q&X9)YVU9`&1CW-LKcS>F*0x1|>)r^V3^i56S=;vo%5HaxwaEKqJ=S zV6s5z|4V(eDe4va%* z0eM_ji#Q@8Ua*L$)I8VVf+cN_J3jQHfsyNlX@~wU`X!+BVenP}W`S_XJA<`9r&-kP_ziY^7R^v2Zat(r6@c7rDq}V1zS`fxe4cPF zu9!O??o=PxX<|lb>E=7~1j69WwW-8BPw5cWhvFBCXw57KNkvMKvdR=1a4_Mw3NmaT z(xMm|y5Ayt#Bm|Vlx8?_uh8i@^xMd8isMaMjCD|2+2(Jid}PUfGq0!U(eB@3_TwSM zn0#YK;gmKh&&cPDmcHZjY49TT7to)NLNZqxx=}_3+VON)tLoE94|5fEW;e1-KFOI@ z9jj7rE-m$3ND~x^@J?IeCkhrq)ErTW-$$XRwrm*t9$z3c>FT98a~es)wSrQ>?eg%1uWt%pJ( zJm^0Pq!!)1a$M?OWRO!zF?+3dvnRP`hV^MA=?=??wos2F&$vUp;@?saz5^zTKsmjhsdE6A1
i9z58gq;|Hx(7(csr{X)XvQr<{Z*Ba8MADpB`Li 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

}>ZKE3rZ{+E?77q`V-A zI{(|egY9qx>=$j0L$Zw52z`OVoDacie=O*!{F3F~0}sJ~AR(2W^>j-+_ejUF zdcubJtlz;Dlfh1Q1I2X|w8YHtyf!-n@7jZ@fGtvqN3BdUFYrD>Sri2nnO`{KmADcF z;ErEYyerL_kPg6V{j ziEGk}=hsZ>ihf)>4*{)Upv8mJXQ#%=AiIfld2$xLefkJ~A4}zqFH5J59Br3GFhPu0pleJ*T0(aOOVf`{qR-29U-6l~ zr&vZWzR9~Wsx102v-ZByDLWY=olJ3i#s3DVy@aLND&DiV>hIg~NTONctX5(Y^Prlt zh+8_TOW>T!%1oLcpzUsy&3ri5=$K@WVEI(w2L$f@xF^^fbNY^1PICQhCVXPoEst=6 zn34|knZK$H#H!wLkTi&jvSOr4L{K>Jjan3UQ#Zln$kpOn8VRpBh_Ba}VT8*QNQLkG z7Q2oV8Iz%$tK<2Gg_b5g5O99;w!bz(DbP4+`LjLCPSY87mPIzm5>QYxN~|w@%doXm zXS8n97-ssqB7h=u{kn%ol*?cOfaL6`Auz8nTpbOCp(-xKC!dYu@IO-=dXgWR_a= zQLJa(z8?-h45;ob&w0@mL&8#j%T?ahP_J^q=bG5ZqdOt{&HHl2bvAOmPZ;LCPWxYr}$R8|_@ElHNW z`mx22hFM)BibB8Q27{1Q1aTr)<(lX*_ZaDV<}~sI6w@22Ajh#7rcu#iu5sSLvQbyZ zll_oX&fUPE5nU)C25cC=_RuHI9q0A?h(8*ZMNuAX>6C_~NaiYt=^pD%k!wW9vME0g z6seiddd(k>4y}99oN9@)h;NAlG#zn*63WBoo=tyOp5Ha;avMPZO#+TFqR1y^|6_MN zPpn^DhcD*Ppog?w;y@?c=q41E1N2IO9bEX0h>-c2mdhrq2hW?_i=a zP823-w1XKJ`8#Po3Bn*MD}g(>y4M=n)1VC-chHk#)GVxs8#o{F$h2p!}Gt18$w9Q+?oJ+7WP8P?ygAUhLDy}wD~h!rbF`vme$7O8P;yO#m9{E6wOZx*IqE{ z?5W|0#YY6m++sXVYh5gc_q^`@m2nR*UqIa?zzGE=PNb?8uvakDP5J$1e!FgP#2F@S zeS^NC`5RQq7Rchk83RWp(!VSGFr#P2L)ktuvoLv_xr0wRs2kEGjx zxmLH?HW})Lr(~JM9Q(=(PgvkL8ziv*Xt~6NJ9+5=tnm!g%L_d5ox57G1*&P(Hyp%9 zT>|li)5Uh5lxY-5rV#)}wm^hODaaj`KPE&a?8+pbQvOV5uWfce_|1mKrvJ|>i>!gObc@d8s@|_&gZnOXY*AD**kNiT>ZJq3C0{{-?`yM9rQ6CXO)B@gm z1j1ax;bw+9yUgJgE%3}J>bG)s%csodh?11viP0_q^`-dzW<<8wSdS9J5adz7D<#8F1q`9KO z0>B#G;OyZQXVJI=szn+H>aND(C)c}%Qk(8u#7i2_DgLnf7PzzFl4|e77#T0?weoNU zakS*N!oMQqTq-TJTs+;Au?~_DV(RAeQ$qn#52mSwtV}2CFh&pP>PVlABYRSJx-f|d z<3in_(A|P;eTR_!1}NxXXttI5>ik` zSU^gZ(%I6AXH~lQ5%~mhj=A^+_waXP3rxJ-PCxHiI3DDlM;`Q=_3ZC<(hC3if?dR4 zrN??a*34M9e=oaD1MgfH^TBU z(*ViSQ=3euy`{_^T{JLnR@f%&eq@_1R67ZAX4p#Bv(QV~Qe3qyD$`;oN?;USERasl~Q3}4x|AukdpB80MZg2OFPnZ2dBGRe) z?=QjI$rKYvyxU{1rItk`reSOeTLyzsKo!qck36Z6@(b89;Wv0`PdvKFkN8e&65I;Y z3zdL3n}WXtsdd3;S%`>~Eu9)7PcGUXIWdGKRwA2nF(YLs8c5CSjugFU%s-gfQeK#G zb+B1US6x%?<3HY{DPN33)V;!sH#zlPJc%NL67=N9zyYFp(s`b(hsL>{{-RZvfC5seTWI=(r ztOz9~OSWr_GeTEMwp+Y~MD7ihM^CzKie>g%8TPJlAGt#r-Gxh~PT2AQI-|B#7Z<6d zZox1%H^HEzWX0f8XI=1S+;J!A0Te9BgPmRl`Y)pf?10Xs!0?5-lUP8%fsZHgmXVps z?c&#UqWCB$(3=u8Dvr%hYjcy6Yc=sH(Opgg)}zJoymc%KgCRU%e6otK;gbp|-n8vk z-I)a@YgyBs8JoL5>qNAw<#cQPvy22OH2=odea~E0orc*Ew>7^HV>+%qTajP4Oym${ zVA6E_t3`Iec3tVKUr>~gwO(~`3#>CkpiILp{Mz#m#z8_pt6Ym+*fA1yG3%K53p58q zSNb}$b!_Z^OX^3`X2WL|%uImw2)8D?+v^{Qk}h^7>Rt@LRB@ zZ)>-8YJXOZoI5|;FDLO?qU(Cvyp!zPYc#vFyMMgd;Bpcn{z~}S-ueXE+yuAvQ>rQT z1&+fB_EnOF4IkW@zmM_WKRN7f^)3jwB^$Uu!>SbVj*nE+P_5LOhIR|DBvGf*^_kL& zHWr8o%@)&9z9v)`lGbe+e?7&oE+odY!vC0+Xq3CsMzT^3psyD#<0#`f%D24WmYL(< zVucB5ijxflYck#p7<-K2jgoGRBkdXD$Vd!NS`{8N03_KTxv;2WflWUWN)mI>rYcYZ z*ovMp0QJMGC*ovb)sH({Y>d@)?_lrXez<11_!xB0aM*N`PgQb<_34=)B&W0jkiWe* zET0Pii3GVqy|@uJ+?FQM7c2z^ES{PM)pUx^tB+@1Ej5AvgCIc(Cw@G5Q|~qn$_Ai& zQ@7``=)%!&(7=K@b<2e}s2!|{H{6e=6nTGv`_xYsF)fIj3V{Bs3~6Bbn7ZHroE`I9 z1o`;3t*o0g0vE{2v7<)uM-BV#K6_#wM)|FRyDkyV9ukAtj|``FM%4gK0B1??lQ%2) zX$}8^SY%?oM-4ruWhnoq2Uh>a0|(QNjDKCfPXivy1`e_SCP^NT=a39R=WE#Rd;X+@ z2$lLwAqTym@xlRn>zXyd+x_2XvLG%^d|9678x+Z}dl+{pPXX0*L@&>j0@1X=MFwbs za)P40c$2|9yb2fq&A)ugxuKIjU>%xj7JQiBay%bSa`Py-D~3u0^bp9*R;!rkAJ}v}Jk7DqN%wH? zsmXL12(;Y`Y7wTU<};W6NPd*@;n~&Z2&AzYvwX}wNyz2vPe%P%Jq`piREnj(i_=yg4}PeSt;xx zPTIV4Uw>%bji2vB7h6nGDMQA`8`Q%a2*VoOP;cue zvL}*E>IGhpArQL{&)Oq8CqNCXd{elkJCaIo?CZiz)$^YjLCsWxHV^z&|9z-F!^MZb zEAWPiTeQr{dv2M454}xuGm8la@2^;zl-E+Ffo94BU85GMb_)# zvybg(NJp((vYG4q%e=TCcEaAV@DRC<14CgvNGO)icY7WXW@9-=n+_JDi=1iz{HA+f z3ezW84$2s8xwZ=(k>tHbP6*xI^@+-fjjNXz35{Uc!GTD7#7eL%l=#RI@zDe{2-)d( z3?19gT!&1?)+lt8K+B(((BML($+2rA4hSzAmqxe0n$^DO1t1N5oEg|B4v0Dyeq$yc zkFNc@aXZnAhyN9Z?@WUp4Ur?7DjVf~rnWb8_rp}!vlCCvsw_V1HNNf_ue9V@!2Yb5u^ExA&7 zYv;qFg2q-$ezHMnhjAA5Xh6OHvmh!azL!eVrE!@fo`Uu>`)^cEaNE)OuulMQSjN} zs!DetYUcv$Bqt2HtP>8sli{`(|M#8VDlJ`sgr=;Ga$Ag@M~<&f!<{+Le*JnA%Zxu~ zg3^OL(GF)`n1mnHT#hsTfCQ$mc7HY?6EO(JQH6Xj$A7J$-b>Pd7d{xcBIq#lMI#r6 z9x2mPU)w$$41v*yoS+e#9_UUA3volV7Q@=*Sb|4EJU&9w_0Ab|5QFSqs z=C%WnOTPg6%f`i@_}FcS77vRm;~qzwy}CvlindU z=Gh}<*&0@aGa*E%TtU{D97=P!+=@HFjZ$Bf&O7U8n*xv^eZLboaqtWpp67^oF(L76+ zmeW1A#aQ7k@mX|SnuOoTOBKxOpc(i3uj||Z2r>4au-;&bB)PnN=z#T%wk|FN(qGf| z9bPj{%D-lUa8?@Q3&g-*_>5gFj5>NK`V@W;ei=UJ69G5yqJs0us!p}fC{=ZQ%5OCr z^z4)FNR~Y8mQi?U5pcQ`WGu&kN*ELDKXlI&$KY`+a1G?&mfD=7kgZA0t%P|Gf+HAo?-}sWjos)9$XqX9gqxLM6obtHufD|Gz540QkA)9QbD9mLleDyU1H(1*Ev!^R9m&d0S5;gD+nYJwjjn5%3Ux+oV$+x5w;<2~_t|eC13-Da!es~9gE@5Njs~)WInee9@)pe5sl$vI zBy=)P!z@_TV(k|&RA5fw({BmC_ z@j~6V^f8r7m;J!fGlbWPV(ZTRca7v0znU(j!p^%)vQ{3lZfc1Gyjeca&lf#^pa6{ zMX(?}rzBm@o8tEu#w~S=&9N}AZdPc#RI`0HY@}X5bLWQ&^JYWYfytM^0SGp5X-gvf z$1#?xu-^*Ty2lFu2I!o9#SeI3jBRr`y1p2^D7%kTxN%4JzNv9cW`)3HC{FU?5Un^} zkY`8cY?b{9UVp)xY|CBM`64O#!GI5q!iH0nlDQr+!6#@F?-*FyoTSdh=I3o4uEsRG zI|x^3zJorf!EBa}a@&XOQ9eQ4fjse|k?kO1UReBZs(ap~lJ@BZB zgo<|iLE~~eNxkvF0;qiyB^IsqzAXIR9vzVLHd5ccNx~T%S+$MCuJ6*A=T*p+pbvvlAv;Kbjjg zq97k}pNbD;u^2O%IY;H;G6}{fXYf#*_vzU^8WBF=rW57#Ba;1&E))kMR$pATe_=({LDspW z!b_ffxW=xzoJYE>Y$pnp(-Yu{*YKF>qM=AqS<>fZ&jy}S%<}Q2{ezE@z@?{iiH&2+ zFDKA_155^#k?#FEckz1oipg9so!yj~1C_PG~N5{`( z5l$R6KT<(-KX3!_!M~HM>~?RuV=_(zh$`I%xhGb#P343pvU?vdi1N#Kf(p5wG1>>^m@n6fNf`baAu>5&{P`XIm2IlHqXha7OF|Ttz|#sov#~A8F~Gf>dVm1e^&* z-gNr|>^Pw#bul||KzW!0nP-5#UxZrLN1W+%?Ds1FFc5Xx>xsk)4!az0L@yQ68U>wU zin`Q>hKPk_jlB)f{*zS}F{aIf-T${rlGHGo^dAAd)M1lJKGnDt1bt0QYSM`pvJc-x zID=?41V6K6nsqnoc$i!0rDE?=giZv(Hx>$Y^O8MLB)tsVIzIuvq`c7E16h7qL?l1s zPzL9&zE^nV7s-89Dn$`r*ADL~x%K7%==Y2lrDW`P2xX|U4p3$kBd321&#+~>N`c&e zwGHUhbL}&V8=tB#fP`ovq2-)Nan559UQ*3j*!AEfd)2+!r*h|+bE@tw%)Z2PtpuVp zfnlGXx7FwA5J({_*PYa)1NxvU#RV>Q`DIEwOn)@z5HV62j72h1@P*xKb~HK=Ye zFj9Lb&6DbKCu>3ti(3rl%F_Bimo0lSY`rmAG|CNm#~BBQE9k*4GkaakS`jqW)UYu} zqE0cTCv=p~`(7A+z^>h-n*fKym`Suf?($Lzkz+sO7*I;mR~Y-N9dcsnb@Yp;;r58; zZb28fDXrV@SDmQhJKE~4y>mW#(cL`)Y6)#9gApb&Zf&+JDO}9J)mBc66(X&W)U6HF zg&GH}nrXH7)^uZp6k-h}Bki5szeQ#_GUa+0KX~?t|7LI0^YnYyu)xzkW*F1VdaNi4 z7-nX|wlO(V%S}3L*`HNs0}huLYDMK!Whbpc^Ef0l&SDo0Re({Kqm4fFPS~u%VI-Hw zA4R=caa(KF<^+T@(Zz=53A>1ruFpCe{fZJpfL(X~ts!G7NTzO61+G3mxy`Gus*oPY z*lUJT|DVsll-62cVTk^RsJSl!R8DF^Ywuqd&hFks)uW(2qIvb24n57&B{GsStSW5vesIMPdt}Z0S{kmHh9#+cWaU)MS${BBUjV7^h>Q3} z;zbVhNAV~=&i5x48gR<=VKwxRfVcAsF)w7JZx8C`Bb${lr#xEEfAMvP4y{Fw5Uo(nb|!^`+`wF%4-_JW~>$(aC=Jv)OuQwrRg~_REgu28^|!_|1qpH~{)) zD+Sg`*gb*%nIfgKk}#KsGG^&Y^|W{--@*xv(~IS0PX*m-3trTMHm8XPJr&bHKhNz>gQfTCMJ1t7#@Pg9{Xx$yDVjX z_&Mb~2A{R@zWS#Yb_cqz(82S6JDaJ`v?d;<%_B25b8E&mJtM?Pt-&XdKtzuj++_?m z%=P_{A1X73(zZnE)oApml^1Fh_-pB~_04(d9epnhM?+e*HHB zb-)h_ZLA*AQ~12eUw3ufV1zdwaHcwn%I=`>D7>>_y6TgC!Ecgx3n#t^i1-g=S!Bb= z(chVif>+b$K|GQ@=RBnoDT=V_j8`4#o8MpZxe4*SE&9;jcQC2j2eia;axrji`Rp{a zGb|T|csgOXqALtd{fteB4b%kUlac*a%~mn9tp8TY{TAu*l_aoGNck7$|9E33!$ebuNim82>DEEj7EJd{ zYH+Dx^pEy3Ox#)-8#kw!970fnh7GiErN%#nHShC7hBU1{Rg9VOb`@Y&pN15_9XS|*M62_nX)NR!g7~K?qZ+w#J|!d-*~tJmkg#I{%Gb&EzVQwbpv9T zLezL*B5Ou+e?UQM5aHVCoC_`bK*Nr8(bg zJpUH12`tYkIh+pkw*5VX4VZgDLib7o&&$na68cg{vX6HQHbpDM4BZDGgRTsypiNaj zxS^BhKVya)AeXb$V2Ox(>P(>{fkc5wichQ&9U#A(@#G>?wgO~-B=f@3Wl{ox)Tg+& znz3Q5Tg~F>p-ll#_i1Syzpl|PLkz{rcFxOSBiLljD|;)AP1>iA$O z?@KJZsde?}YU?elh`yIwTU*p-y2H&$s-W!3@ml$W6sv*KGJzw zCRYAAw`HZDY zeJ}o|?P?Q~zj`q^p6P!fDJ%ZAANPM>yc8A`wVERty(&C=kA6g_^x6}c!eN%D`tn+U z)9{yyNwZTAZ{6iwsVjcHElKuI7wisT10G)3IdRAk|CV10Psy2R5AuF|=QQR?NX)EZ zP}y(FrZd04RhQ=#+lQ{1@OGEz@r`4st9Fj}&Q7^52V%}D zX|$mF8sv$SsB?jox?wG!#YDwgj^%9Q2vXV8$&a^cSU&mm1ETBCa&z{+#j=%_829De zATPu?o!5O3n;Q!HI5Xvy3(wKG*mR1qMR|j=9Um`G_8=*PKorv(pWYOhacy7l8^~It zlS-=XL2?oB#?hNJE&gmi);T%eV4aQMvH!b?;EYHa}G{&PC29GHrf9%|Uye`&H zAyeBm5lufWD%0CKFbJv#Vt!~2?6Hi)G{uON=^=e9Ws}OAi$k?ZXR8zQ%@#?Z)FkV< zMYf?ea8SEZe1S0vP4Y8s#=sd?ezpF$89te-b?d}z|L(*@^WN#!8rhz7kQ1sdzRu@q zw|w}gv3laOFFn77ZmwZ-qZo34@oz*BFls3BSRdGh1s^U016=UCTr`u-VCjhz7KRTI zi&9;fa_{Xa?~9=t5eJTja<5v76SD}7sM@PX^hU&C*|srfJzP+g6rI)aXbOeC3|+rK zu=r&z7eDJvfb6=fO$U@jK1SrhWcJKn>>vJui&Nes0CW4xO5B1T{})tSfp3yITEbCZ zQ;quyZV_}mqdPQ-z3lq^KFDO?toKw3LuTCY7lGl@=`W_f@5O@F4p+I3b@rw(aaSC*Mgv8Ro7Sj#2B1 zU*BGFi#xM9TZcNbQ7nu8Xd|Eq8GG*m;C(C%JM952YcV~Ad40coq|?(nFZuu2d(XJ0 zvMziymVt3Zors`F)1aWBA|So06s4+k5Ky{Q>AfhUhCYh)YM}@Lq$5?w&`ao{2vK?w zkP;x&yG|@K@BQ7+|9d~&d{7f}PR`k9@3q%@)>_ZAa>g*4r`7bz+^2VNlorK(Ds|Yc zqK2`i%xCrdGl;Cjf(G4qImIVCxr{qif?d?44NeUg$%Z);cshiI3Jtk;uN}Fy@@{eO zF;RH}pG#Q#Qc~LKd_7k!$y^9hUw=q&4p5~c@6Ki>L(C4#^pG=PY=2ejm(j;z5#wE4 zY>T>+`T~JCN_jA@nLlnS4XFHrC+MVFrqT8l=!ISrxzk1D1$g`fi309Be0%f@#NtzW za){~q{MT3B;H27*`*25GJK6D|6JaBE$-`sjU`3M@A(g?>J^9E)mf;*JsiCOwCc5v8uQI7-07 zPVkk`1Wig3K!)?8wg$4^-edg8x^6pZ`hM!g6UNIK1Gd_Gi_PV#p0EYQ2&7NdHJE0f zRmX6uo_mIs4?B1GT?ehyjlIV@V3jvYMRuR$*D34wQ8X*nTy$Fsb32k-(w}*)Lci?N z@KXhhdFwe}Kb5BgW;fPfg)?5SWOBZpgIgO~Wej|XLb0l-az8WaQZ601`veO%ce+MY z%S!c@Cg--9U^T8*Ta~WaG;^quLse9+$dda2dzIC*2%KJ$$@15$ee?N?E>5+Rx{r8Q zo3@-n40G^XNvlU9656QF0qT!E#aNNGMeN6%;A5pe14&*4T`58JT%Vy#1fTeb6Z-o> zK2!aAaS21iZRbI$qNUdES#^7#EU6++h;VQI#<{1fE}Zvaqd=RmA4%6?yjz>db}nJY zf^cEmk6#4Pa-seV5ku9SvN|^O#yqJ<8jX^189lbxrOqMr>7wy_e{7;FH+QPpVWTk7 zf^{cV^L!!Ew8n;mQ2V5Lx=Q)=aly>B)zwN~=7qk&eXVg3(Aj)sX@NqM7b>3+2&iMLfqJ^>9T)d+X zO`3h#y#=pUuVCN<<|cw;W!jl0m*Awzw+-dY#vQM*+J?I1`Pk8DlT_T9L`P*kw&Zc0 zB8jAa*8$^>zZ|=V6K?G4;oQ&*YZqVw*S+r$mzv%7F-aa7yJB5Fc|zl}Ml9u zZ*GT>olu5@u_eTPvI$Kv{9FBFVXNqhYns| zu^Ve8)uE8(F&52gQch;$b27iVWn#;J(|)ubBO($I*c2GSm2?K+|49kQ;b%tM`NtyC zaPCpL%vm8(j*EdT$>yn(xSXDJwVQ$VB%cA?6vSLdfG|Stlh5jUD1@0A33oi-?~)_U z7@I8b+nzi56fy~x4|P}NKdrvO>hjpjWTjf$mX2AgJo!Nw7$?kyvW#QV z!a`u}Di?iju6(=%7)Jw_!q-A|XStsUQ=6>E%(qXE(1(1^8n-KTi;i#8%Go&RyM+BF zL;sZpEggu3R4e2*Qub|LW=3TM(cP)sTERl+Tc$d$snh`hV)8cTvUVSMA?1@fYxZo^ zzzuNfqlP-GEAjSh4wEm?ur+GL?m|sA=PNpgMa-3Q43mk>Bq7L$4ZSA~lsqPi)RyPGx+~%=p4vc(w*fDV- z(r`@2K&R^zWh~J<5>fV5~a`BedxE;JtzYetzh4k zK4Wh&fWsdCRudywmkwk(eCEo0QmmIUdd{a7gtn)v@zzfEt@d1!CuENH(T28vBuQdC zdyquF3~i_N9sC?Aymy@gz3L}6{K%R(FS0R5-)GeCKNW|!^~Pj2{*>~!jCi=V#{k0Hyd@nfRcw+Pz&kZ zh(>P-*?S6B+3^;+HlfNgIFK|+=_O2Y*7toKjzOWQ&qG6QH3_ZncWF2#ox^qKu59ub zYf|wl4LV-Urm1I_Gn!TbKZ|xyk^QRmpCrzWa0I|e@$_5{?VS@q*GVzwE%_-dAFo&! z+L&c%pB>XHJeU&EFM!!bqk(gH*AG{f`m5F_kVTnMWw-}Z>nAwON|68hZ48^V6-@To zP_Pku(UZMr@{}tUE3JU9L@yNo2n>)z{pFGP7p12*e-d53t%m0#$l7d7K@tP9kXb$1 zyC*-_%H!=hhTF03+S$xhU<^4-hW`6uBpMEmm9?Ar+Uh{88iKW!{GPI>{}N_f7?Xs> zu5ReTWBL9{*@IqyI)cI%EgZuW=mlk2?^{>cWg_T8vGa2H*H{sl3*BXxe|{TvDS|p0 zG(y4Huky2A)DqG|to!-W{?ej#3M=Aj__=`ea#79WU)G;!!| z%LlvA3$a*tPK+--TD<2!gH*VSdJJuzw(RZ0=m^Yk!S@?&ql39w&0(yFu<6SG&##>P zeuMy=>`!zj@M=A~>+cGbq-%1r%3;`CdHmo1z3=1H=?p7}V|WR@U?Y3`2)djI7r;Xf z!_s4h)37ne(Cp#Zsv^51ziwUd6fzelKYPmKH>fK_6r&n~m4dIdowj8{lY+2s&(54{{Bi~m8*a^&WE4iyqkltBsriN<9h-3E>^^bc35uA^s*1e+7;RTNFu{Qv!JvB z(~#@ZB}^+8TZb8L#jf3vUCwoR<*#a1fED4va4Nu{FSuTZul;!8BB^sKVt^OZ8jfW` zF96wr1w0gIok1E1NHF^AJJ>fql|CE=- zALTH6L1+w8l?Am5yqrMEW>pbRQ7xRaUArbrmkq-pl+{5Q#Ky27#-a{m{OZ5IrurK08_v;IwG3n{X(!j9K+pu!Ur?rvN6N2vF=8)Hb(z3QEd&>0kK?;nwsTduMWY^XmOIaPGiQq z%N%41LPN0hTAcH<>eM4-hy})Sc%EEYi5+kJ^Rwsz3x#v~jO|(4__h~llUi92t;WkU zcbBE2WCSZ$^zcpuIpri4@Lup8sc1=0S-RsI-rEzvvd>ZGlI5awPld9RWb&S6ziKjq zQu9fDx)XqH5ehygS$1sy${f^GLDkV+$|ClSdazflcan7Vv5zZL>YqM7uO@sYLQzrb z9_kuyJ4K;=^-5ccQ4TMST>NsQp5VxOJLN%j4!g29 zlY8zpJi~e{1y%hWAvwB^dmp_s4=wno79&~R@8G?LIP&NLMUEh88hY6RwWr)UeJxzm z#Nsibx>C`{Eu)o-mC9QS)2-qPn*-HybZoZ^*k4q}Lrn}fvfUOcS7Swd$4s^x|L}=c zz?0E=VSVoY+>QQKZnF41O0+@bDmr8JqQt05Y97{Bh`gQvZ1wmi-lI(g<_snu5!)Y>mauhavJE?6&zmXgyY>;S zZ$D_RLW@cXZseQE^<`MtT&h{L&Si*rKDw^_O+P;2Z%lPlvsWCDX2e`NJG?a?4pk~b z)?%!|i0MLQV=PABIhjRPRV&~*z_dB@i|(HvB0pO#>uH8Gp$zekxt zcaebm&btY%-zrSIBNMX4cydk2iFAvEX$jE+7mu_Vx=8}0QX+Y0-&p_$<@NDB{wv(l zOT6XhhLd;BMG5qhr_zJ}usJKeB=BBPdS}V0>UJux^iDyhT;m_!ujJ)I*bKbKCzhBj zj%>6!jP7ix`RQ#|k8^;-XGoqukTpLhG-ee#cE1Nw-hh5x8~xhNGrZi%@oE1qRGXgT zl|1(Ci^JX8!Sh_n9%(w-Q6n8JAI&uvD(oBPrJd;F!x!C>L|a?3pou%+U}j%< zm!S#-Nl1Ddr8n<7^EomcY~nKHohhX!)4#rP+4Ex0aTfFw1^i94gDisI2EaG{AM>w? zS>&`r77)L*HX=6`=_s=@9GxO-19{!S2>p| zqs^C-v?g`MWVO908H?zV9;eo`NluP|b!9-wO5;mlk zZ}5rg&N;Qq)$|H;oeA(%)&!rajT0Q7Lkdu5G#rU7J&S1#!D<#Xp{(=OWxe?@c7fPv zj^Pfhh#WO_Tc|BOcmxt7a<>d&08aSQ%!V@`&0A`fJFyb?Z0#0}yT#u-IpvI(``>LY zHf3>d3_2)0ZKFjM^6EOwPGsIutvLTZIyL!go) zow%{ALq!Ew9N(+O-tXS9zfiQmW47aHQXp1=>dx>Zo9zMXL6MBSP>$ihBIg6W?IrT_ zGsiyg@E9QO#H<$QpnseclJgT$xZ2yS8GRwR2h{fU^Df zIa*ZzlhaBV=okO}R*RJtZ^aGoC<{4g?>r~f6mQl07V|zlb?aC#DVkCB@JY*9u1 z;WCk?{1!ClERyR3k2xAYNx+}1d&uzB0gNueQ;d3;Z&-5DKj7yxDpz-!5CS#}HI*VwIN-?vmEV?#M$Yju!->&#v<o=KxXeqCHo}#UgkeNjP#M{d#+r@O@0fm%*W?juy1uD* zg8qGDn6-P@MQj^0r_JF#uifv!yW1bTj)+F>KzEt64MwA1(zpOX;^P+pwM z=9zJ<+FWjGsx#PSq?VzZtjGU&&?@U?qdO-}6qh&;N%#Tc+CiqwUY6wu+9(ifjWKrh z4gM1?9SqKomO#LYO%qlG{Jw~r-lC6y#zY7sbp)*s{t?`aOcBT-pequ=#MS%HBs?ff zrJ$gnWu_lF*zA4IV;qby^UbK*q{j_nzBY9!2VZrZ(R5$4UjYnob(YmT-n z&mOBwUFUz7v+1XeCB2>7;eKuxmPJ!>;c9>lERj4*cHXYK5z7HQ&IL48to=8+p4^M z-*@E3h){=U^{w8M7*``ouZh{Sdpml()pl{crreoCNI_Q<#_@{CPRs6HeAX+ZMaEMIZ2H?Ev2BLbwWfuA(|ikLLA2Z^V0Q zJ3O{v>Kh$P;v2`KyOS=Ss(Tw-uf4OOObz4OG;PWj9ZV}-m^8@sjjyYoXiG`Qb(;0O zP3$rxMPBzLN37K5Dvu-Kk4`{MFk~n^J&-zvd2YYx8&Za?&k`3UDD{2WyP&>u7k@*J zpcLXpD1;9SNY|m5bmALs7ZQALu%&C3vv*0GQ&`qv0iVB1r*wcK53xo{(=C-D?BZ1hMxb~ZZP;@E`Ac`*KSjnPCIktC*h_oBXEOljaCs}!;Zs?B@hKtvf z?V6n0B@XPUIXXTmmf`{nq&=2ry$a<``)2>Dmw+Rtr>gj4dDywS^pgeNNF7BJaNf$9 zs|hpOt+!;wm3vr99{*M8ZKE+$i`bP!xoY36hd1+YscMZiFs0GbWekZn3TQ=Jb-B`Av^QL!RNT3Y|K|}pfEIH5N>N9;*Z98))*XA}w>=x+n!4$Ci!HrKKK1Ei zlMjn)P)nRC__$@?*-X*9vP10M(ogu#@lfYM%0AC-C6x7MFJWqXHl(?^W^DlsLN3kVGH3SzcD9AZCb`9-1W~ygeuDIraRP4=RKd9qc`r?~ zGNW{)!DXvh?#LwUEKax-Jr6JWKqI%?&!hSB#x1t!$hv#6UAiqNCMC2!=G|F=t{Kaz zV?y-nj-TQpu%jIFqM4}@kI(xlSkW~pA}|Fi;|fFdO&<0q*hY8YYyTv^a9hhbboEa)T&M^G?>iPK5rKe^6W_eGu$b(;ptX4|t`Q3J%YYHlPWT5R!TpU%bQ@9x>vN z3w!z@H}<{D`(52uqTR0bC()qz(taon@Y;v5U82sGO<^0;Sy_k01TxCJbFB7i??JT{ zjg|7#Qx?VRDt6qr$i{~QqqN4F8d@A3gV#-ZeOAtL>jY3Akyup~5BvGet0&-!Q8T<* z-%Nq~jCgd{7L#-0u1{mJIHIlp5ZO9uTV)t_Fu!ksCQ_I1B{y1c}e^UZADy1*Iz$b~oQ zLB!Y-G1n74a9gXnhUEaSmn|lpt}baFtpxY3HaE6S7%3pyo^fkV2pNTJ*Mx+s>NTxx zDSEBN79r$f;nn7-z^1!5!{+T}^yV}Ex6%RYM1|JdiGkktX0n6d&(aOI{sp#qOJl4B z)ypPHjf<+9PF2wP8|1yD)HMa7K)cC3G4dkR5c6n*6riTPm}XbH8or!lP{Ag^`O>Hw z3+^ZAAc15wS!ozTc?{pBot?U{^F7rgtTXHy&>}(}t8BW?#gMxsUWYrEw9g%A8=*vJ zDLi^ZHR0Gozje)P)3J?L%EL_!7w()!us!NarpfI6N(1EmD+s6}ZZTFik=`3_o#uCT73n%@K23@q;O<36EQv;J82U+qW>heDaLe^^@6QhqT)+X=0li#- z*hu_PR~+OBAwR%55Xp65z<1;2AI`qQl(wsKsa0vJs?SV_EUT??njufzdSAr+jhQ!T zq&Ix8DA~k|+=W;uNgBKI33b0j=cw|7806!XrB-B{2+{Qs1o^ z%u{LUk6bE2?&NOl#ys!gMJFGvTUnq>n6Ed`9E;|yc*{M-Ten|#jJISEiu?B*!Zn1~ zcyhXcUS7@46qI@f#_G15;<{Hq9fZgOw9CsG8~Vgn#G2H6r3J@wCckkhOq?-7&eY{O z2;WWWLlc-vtfjD-B3^(X3pL|>t}R}%73mH0XO|2)=RFp^S|6MA;;N$e`Nh7ECfSeg z<%<1NC+FODUN{5&Z5hcyEu2pBIvE)rRy9(UkBI}#ZyF6Td?v$`iDdhN5!k#9n*Q2H zZ|tp=tTP1^PQk1Ke>3!#(_KY`m2;}AbdtnNGU}rPJl`Xj%h@^YnZM07>psOJh4uG;-ipWyW3S+%$V;NF$W~bx+^X=^ZaEx7K~E zi#t*gYf?+G#{2+@SsoB&+v+1g69Y^1_+ENlzKU(rApnXL^vVij-eT&?%|stu*LvEz zk;pRRJFQ+LYoUR3>rl}mWE@bM&p!}j-J?JBL>p)|%T!Jz)iigBUUg~JNc?aCuo0gz znc0LfvE(HYrms6dw2AOqt=~iWr}ev$hMlA%D7Umsn`EmtHwmLTbPrn`WPB(d)n6WG zW!@fjKS948CdxTHYj0HfkbTxj>k}xpV@X>VhQB-s{;Ohhr^Sksw^BpHuvuoxyDK_U zv9X)E>AEjWhzL>ILpcrMfJq*Gs+mF%d9`+7398N&J4A(A7OXkRW4(f0Ja43L>Naxw zc(6wdOsvM->&n0$^2yMl{hrK0O*&qH&O;Hwop0qyz&OKRW8t_$JkAQi7plLKu1tC| z1>`-krIRlctVAJ;Km1fcb0VahY3*6Az#ZuTGydLG-?zS;^NH@p`1cQrHm{@n$LsM~ zAk3DzGz0)ZZ*(}$>Za;Y<6l*dn#GQfhVt`FIEHq7FXyrva9Sk!dg3KlWjCkP%OrfC{4FPKo8_~E; zyn3PB50eTTaOi@0C6rGkDYuDJMzOELf=VH~Dn5UXd(q5M>z$&UPwaa{L=051H0&cv zyG2KLOu}Xy9Us%OpR0WcxW=wl-6DIH0Vs{kOfx@eV5$S4XZAmCa+3<4fAWAXFr<1#zl{#RzagB^>6O zIQ@416(t({??bfyttX|4;i75oAQI}mUA^gevj)SXVVYXi{)z(%UAUJ!M9pd{VZUOd z_(|L9E!0mppUsLH)p6*`Xv_q=eS^otkKfmOp?;p%2%1zHpBq2SA8QJBn1L3RRe@)# zmYn}u_ksFTmC#5+i)wQ*?HFnmhqk>gJ*^RD@nU!IoE2hYFkFfCv>FfY*-)?l=N~By zRB!a>TNr;WYHa@R2PnO#)NT9UPb}qrJ+1E_{{JUI{T~~Xt^&bB5Lo|u$#CUCP6eRN z@P-Hu^Jc70;hC5EC0O4rj1Wn}7=Ra6w{uCmGB}U~+^?5^k$(QEVc~){mQei6%d;vk;8#Hd`{rvD% z8^u%MsJ0|(!WmT-0z4w8fauMzXoTFzn>g@o?fcb1*Cd916~qp)%yws@U4!%9Hn}P@CLg7p)Z< zu<3je{&OVTIQbv&vV+?QJuCImGzUX^9h-*V>6bM6&>RRlCYs+1?6UcXNf0X1bIOLW zG9%rFM-7hfK}m_Kc=u@C?u^tqK}qqS*NXf-TNlEFhI%7t`ltX0?scVd?SNS{=5Fp? zP?n+CUwtAE-8P`U$r$KEkWgpgGTK=wLGNcQ>=x&uzRsX)GE+LEN<>A_i2&x_$ThuTZm&KhJ_fL3>J=CaZc-4n>{ES}->&4@ zEwylzX`dv&R!c_kM52KC5dyGAC+trNp46S877xQw1_bCPMtq-e1$LiHX)5uIxmD{{ z%Tt|PkLj2Wk3ilINSt`qS7!CQom%6CdFP<(*M0g;I*fr~Fw&(Bq#pDe^VN`Wn@ZD^ zJc?Y1%#)?fB{}0kc$T@m4RRxmsehH#K3nU6zI&zXeh6;}5N@7L{ljyH zgCGc<>1$i_e$}<7svKS31GCjT=Nw+2DWz01>aSjy7>f>`faN{0y_My)X*U=&TDd-P zCYe5E|BYX_>*7Z8Sv^ia<+(hG2F`@*AuOW#&ntvI7Dr>m-Rx?F5Q?mkK&~V#Xr(0c zrLc^)?~OKa)lG2jxSj`1-9hA!PY#9Od?jB4tSTn!%Tq3aUX;zmd2gU~H)NSeaBB73 z!68?JVugFCaiWNKJ2_j;2se75sNw8qFa#mgF@&7nM|4)M*^w1v)hd z$>FcI9nF?L@G_hYfU*y%$U=2!oIfOel3N5 zJfpr1dLqfot{Iwyec{&YfH8sz`qjT!F{~eyTyDF?Pg0OxZx8a@SW4cxtw%ayw9!vA z{_yZOmnN^-BJEE=ROQfn_lc%W$!zgJZ8BK3?p7CIpr{2-n4XbzY9-5L3e5rTq>YvH zNk)FilVNuXIKcfs*P%BE>?EveQWVn!Xn)VUEGqK~9oq(tnH$x4aCKTZg6w;j*o$|s zY{F#4>CX+8yMcLs#CQMmdqF!A%*8eMoCOw9R>q{;hu@CkmTpsTKe2YQy~fF7cQJHV zYvD467NXAu>J(;V)C%8`857-AM(qzlzA2L>KArJOai2@e(*|!{rrav)+)CHPjYMEm zKpubD7`>VVA0jy*zdAKgV(&erWMt*qae{hidLEQ%JMC8E?*?>dtLc}1NhX#20&hTQwy60v%_2&y7cLN)ui68_v0kTFXI zN(y1~=9qTe3WA}aoOM1vmJ2z~&|c|MlivV2Uh{3sEgMgy& z>d!uT^)as44(iFR2e%uzl0&XXaCV=!Fdo{5BHY(bf}dP#f*2492I2A+>JhBBO29p3 z$>;975b-r1Lu%qJ+3bZ)@0{L|_Hs8ov>23ub~wdhm)M^_t)Wc0prnPD9i*CHz>mCm z!j`E6G?SIDEC@*|QlwoV-8Z>FJ-1j9$n+kA-dnJ=^5GYH#zyZ!hI<EFCrhbLHh$rg)+;mGDLU>)WdZt;G8qkL#%SJK43q z9OzEk2qM0cXSnVIG@QV=4*h{G(nC2tq9mP@+7$TsKmYavT`7tS{BweHCwEYH}ql%bQPaF#&<^s|Lin~(H}u} zpr+{DjblpD@)BeX{7CrG0qE7wYZ0ocM%u;4<4e}VceM>I<6M3`7gWz^oOMp1zI|np z@!*^Er2a`MVCci?3{}K_I1z7KtXs3##9RFdx5aF&?G!F}uj6%Q0$|dBB=imKY-4o` zFiAc_#uJGgNxov$7pe3EwINtAqR?)CZE>bMtJh*-7{~;Iw-(F$l|MI`zTX^jL7MG= z{u3z8ingavR#$!*qdA04NeakAHF3aqGh#eXw`hsqq&xg3-EU{RMa=%=EW%P3e3Um# z%4c0xX>)#O+a6(BIWI=t)@0%v=4GX~rm!Hhn}I9YT0wt&ax~B1*Eg|=y_s}vnL94w(<5@_{$sGOV&Rc3DT)14x-j2#Vv=3zQDVGC=xuhu#Vym_> z^~4f;l6j(6zyTqh5kCDmq&Wsm=$Fyetk~w&)oKN3^v1uviv|azIaXccQ@n8QwP_x% zZ)Oh-t9|8$hw7hZ9bQ`$nfFk`KcH0{-cxqz-JTvP*-j)m zrc1ZffUzjvWlr$)*Ymea-|E&OKZ%;W1YUv2cnsFSEfmPWvHR#Tkd$$M4Jjm@Vx0S6 z7BO?$`;9_4R&oUkJrmlthuR+f3Ss&~ab>F?K^NJ05U6>WxDxJPiCD4Md0^l0>~xFR z&TvgI(W9BX5UA#j36tJlGoKZJ$1VcTL(dy&iAMP|HU;)ghR( zy*y3x>I&guV12QB4(ez|9{SgsZQMtgahQNAI&ZE^T`d%$VNsE)_20GUcy?RK1?$Wz z;tL@46^CeyaS5F!8r7C`^70c*cV!?6h6)ZubFNnwRQv&7^+&s1MVZxHIwpj((qq@ zXaE#mjsPRAH$s?WH~8fVJ6kl!F)!E4{B3TjL$>QLyw}nXxvnXOCfIxJd$y6G00Jgz zy(022|G0O+!8g)t5*{iS%-Eeh0Gr`R5Kj&kcus^j+<_U*wr279S@pOgzmKye@YcNK zM}Tnr+4q@*LUrL08ao9R2ifLi>1w+{JD|NK!mL`JC;3%|^<7+;Tc~4)-=^nMwONLc z6?wgt`eiw6=Mc*Zq~H?cFab;KHfBr0VdoH{IdHsisBX}OXuuOS55g%r#WuPTtJT0} zaa@w^`&n?*s(a+$GVyT|9*z}b=j{Vy1uS~9q5bOo$ofof_?M4QN+x@CFWZA2PNu#g z^uv7uMjMrW;gU*Vs+o=|2Obb`CY^)(e;5~PRvtNJo4FxukM2wHB$m!Jl`Q>|KJ)k* z=^YB8!%2_@&|8M4i9|QUh?R{I_MKzEz>}*#1g?fjr;2d4VmxvJnDPDp-lZ`x96GFh zc~U0;?tRGxo^Q~NjjPu_&%WOFM6r9h5m=L?@%TV`=0S`0mvRfU_I~BYgZI)CwTgtk zk9b?ruf?D@SmCh*IF+B5a?HgSc2K?%Fak0e!Luc#s?3Sw(!Smmz+RiJZ?*Z?LTJj`dbn)H_QU|F6?UDV;--_M-zho8nw>z>&oPu6DNULH)WB@A-*$hosg%ueFE!9zh(>L02_NvW7RM z$tVmgafR^?u9cXjooimS|NC!zXX`@#-8OAkMH%nzK}bD~a!m%EJ5?AO+^zG0La+`V z)X{n19#Ujj?ST2gg0M2vu}ewFhqJLFl&tqU)4I33`qHJyZ$!4&Mu=Iq-_QP^>8(12 zr&l|7dMXidi9nF2jLZvQ%~T#IB1%0K5vV7}(Gw%fpyF|#A#CjVHY;Qur=x)<@ge(eRAE_nE8^_tu#P>fkv z?o_LT=k?N_RK*9bGeU1}3`|y8x*OlmFuD0_mKgl={=uG+dX8|Mi@=ZneE6OH?)y9H zpKY#KUg-#_~Krts~x7&k@k=lk#;6Avh4D9VrOYUTtoN)eaUDV)F zm8y2izi;Kdre~0S`;B^f&v|yo`jdRXq&KPfqe21sG28`6h=qYrd{4{d4gR$|aCUfd zDVkH?&-cJrRr^KmuhS!MZ_ZRfoKmi!-BXEhg8k>^->Ur6r}**d_agECe5Ebu*G&2T zsSM9AEBxbY+1LILoy4?_+hhG>+_GbvJOPxc3dXcC^{PdJV0RhbD%fIF;O~qALExTCV zTNtic0Or(M*us>y?7#d&4J-jplKl$v9btr3D6t#V^G-5rimDlOBe8}{uIMz!3G(~| z6TsH8AyidbV-^prteUI~ybSyMHz`Xd&_tNJok$%0I*)Mm8EgQMLI4i9^O?S_5~QtF z5<73jw<{HZDe^f_wjG1LZ%VSeApH`p7%kDMKj63hjL&NaDL!|@?skA%44fGy=M3Bw zLXUS3J5A20Owj*8T>TG@H1gzz*aHp;6v2mZ3nW_L`$Lq55?p$8`D~zZ(w^P)qVh_o z9}vY;`S$?$$?viCB2P0Yu)1g@0NCSDfAUG;WCcNT^){j&5U#{qS$O1J=M9>HiT~m} zmYETdTtGH_4O|nxL;1dK4p7g&>+QmX{N?Sf?{grBd-E`EZtRwvEIzR_E!*uZo?_S-nZ7)zxN{Og%u z!(UaMYSNM*n8Pc#v%N*!xb4hh>mq3spWuHscSI@rLbgt_k6`Y*nUCazl{TV1TndPh z`yB(fvE_I*FHXA3Z(v}E5r~B+jA7Te>=9iikIxiiq<@msrLZ>14AU`I!A2Wbxb^MJ zN2Oi$hodZ&5IjsNkTvwTT3idFs&~uynpXL}9Oa>n&$QAynKVTgn11&|pp}v;^7+dP zg_#Iu6?>gXh28ypAT7ko!H4MSWeJH|FQW@gnSw@&t zRrCsy55Y(a^W2c4Pdu*lS2pjSAmG@Qj^chS(>UEJ z4T|-OyS@pSH(NRnSnd5-(p}Ui$!pt3VE3GS;l5fpSAB;(Vbe%_1ntg&Q8?OHzE)@vo6m8sW1o*ujZ`S&qUNuc&d6$&Nxl9h9X?d z4iLl$TURGoazqrzUokTB8`OVG&9{TKDJ-Mol=|`)z1IFeCILIJc{di7htM}N_Qo^N zhlvbhOW|FAX_2!T)87SYr>eeYA*SJ;>nbAR6#8J2iuVCaF|TIEy|AVWGOHc^ra7C%@>Z}gcb(#A1gjAFQy`DJCmJ{%$j$D+@a4*|4wNVuR6{UKA5 zJ>RyT&+lJ~S69(ZJr|+Q45AOS10_dHle$+CLPv7W#T1z5x&~+KXb(iJt&?Z8r-^;l zCH+=e-JHAXSFdu8Z2`n--vM-Diw*9bz%!?J*hp)tp05Lpq9Q}^O!-Q`wbIBs7`^OO zg2KeJKt}D`4mDzXzGS_~&Os*njIR{f+#=2eGoz-=43Aj?pXx_zKh+z5M~*RT4H-s1 z+J7|aSpi&_S;q_*K=t*CdpbV61MUz%)_|K6=W;>padAabu605+j2HO}^-<`O?RU0T zjZ6+3sp6lG%pnkU@sQ`tWM9FAXW~^Od!}FhOrf|O%QJzQkl{bftwo*0>T>DPjfz6B&bu$0-|A2pHEGIqa`3BMbiz6aY$7x1{ z6sp|#FP;nVogt|DjYVol6Aql;nef>d_M~rPK}S?uxl&&=OjOWx(gdy z@jTLO(KDgp6QbOAR)lY32O+qVcJ1_lZp#^%J66g`uABCO=4ISEUH_#6R#hM zEp=Pzv(R3iNx*-8uC98PJW>m>txZv;IT*2<2w<7&n`H7D40Go56N|uScH%*dU5cf z?J;%RZSLJf4wPUKiSM=m9M(bv5wjYTV(IMSSd+Fm zQ445mjX{94Wn1(GA0XqML3V>>k?T6EbA#I6U~#f1-Armj?k(n3L55KKYx!7|eohQ{ z6M7{(hqJZ~`b}&1zPzKBm*L&VgljLSnVJLIQ+|6~?bZg)&7}KhUy&dhNrdnotTw#%v55LPAN6LI>C+N{u%_aIU&R znw|Bkz5y7}YA(^QZ$D1AIyCdu;SdEn?p80rzb{eTb0!L(RQZDG(PZJ>aE578#RV8e zLF?=?IV$2O{2^10VD&kSr=l+Z7WxjMH(qIY|1gc_oQ%?Kmu^iSNN#+>`S8c`?irt1 z?Sr`7XXX>{9%g}W`4tFErY!;cP3Rn=7R!Ku?;^xpUvidt(b3}(`*5)*^yZ9^9i1qC z#uk2>2S|u-i9^95^whO0@=lC3P7?qlM0kl zSo?8>^L2nv27#ESeKqXdBd-9c)3ose-GS^Sme@NTpZE?ZlE8c^UQe+HqhPh8m3?Qe zxZ=kkgZF3SxZB9b52AUkjZgL05A}?}P1x5+A*|8FcWSDCcYd3=4Ss6DfHJWvN!aDt zgNkvrSpHPGK<}K1uCiQWvd$ZcFT{tx?bp(XuNrd9vI_qJw#bO*gEs+%FZ;QBwum4i zo+sOEU2I(mO4;ia#G?iT*`#1q8~_-l+01$Noi&A58;Eg7@=;}DUrBug;%R9v zNMov(NI>3=3d;vFg>;$TB1$!@{Csf=M(8TrDT%&4V zP01%!hO9r611QVrxr(J$cTnt{iK+`@Wk%qeh!x4%!cOie#5QG?9Lh}fJ)so$znPYH zscInvgaweV+KvM5Xeh#hpH=ymvo9K{U+O*&0E=|^u01q`XC7GjtgnHcX9PlZv%$q+ z-l}7u5n0_+&gyJi4Qim=QOul{8Uadb0VylDs(;issex(ckCpSZ zl1KpV(geO^D2O+uHQ4^O;)@KNMX6sR(B;1xFoGy3&!#UQhH0daNIXq%c%0K`W5?Q5}N}KN$HdzutQC&`2211(&S7xmF@xw#Qa^)22@Uq z!(JMHtWMJ}P5@eR|WOy=`x z0sj@wtehw=g~m)X*r0OtZ=Y=;C+I=@))IFV%-K;b(eVF$^ladB292e0a;L%+zl2b0 zmyMlPih>-Bv?1K6V1(T9<6_R15hP|&FK?P;!S3(*sFZhA77Y_rcRM8G%i zoJENc%{1eDx7H(fA1?UkJtSAR1UW5p1FKZCZ6S1E_)r3Pk=-repBsQoroKP@1A~ zK#(}$;t%}X2VH`*>S-D{L?@#lto{B5tcQ%)JqQGOTmoKsJjjj~Vh#YH*jy^2x$VjHjuOJ%PjO-=-KHiI?4SAOBFBwaM za}w)?0V}xmr|Aj>$GHL_=_NLg(Wg*ktF1H=^%W$t?_c%)vfl{mx@&6?^`D?1RqL0z zoouGNU03I_u3SeZYuzJgPwts5AXHCC&cFG+OmaNNL@~T)a)Qb76J)T;#x|Qhz^{mN zp|cDtraAx|Wt8!Fo}3SZWiG)W8ZZm#Q^Ln*Kz(Ga1s%_j3&^fv+6hB327p0$ObSRVQnkzhUEu1*8+%ONO z-!*Er5r$lkvt(6~y={<`$H7AUpl7i}p%Ih2h~WqWp-BetKU7e0O9}Q}2>v zl%2((G(=me%23~b1VYyATgEE@CHIsiR;ha3|NMZqmf*WmP&VVnd3#jH6hgo-BufSQ zRoZxX_Tfmy2Yd2*SGr=iHIj8I+bTFbb~^fYht-yZEtJ57ve9S0p+-JamiZ8OfOw`( z^mXr0%@Mm^F6NcKv^K(<$1D*RTgz@@T1k8-w${+UPT}41e;UoCf@2={Vt4Zl_@a zc;%^9tbGJ7<(M1VeXs7igg=gyLIgB!o$gs@*vcFv5DUY7RjsYE5Fkn{4smrHz&a7n zPkav^UTv(=r2qcfD8Vj06EHIXlW-Ey?%v^4TwsBxKrw8-KbWR#fM*WS}= ziHF1dT1*qJeDl0?6{%VRWGMkk^M!lLW)bHJ>R7yiczPZX4_+o>XL})l7+wKkqp+TW zkx9)k(+Zm3y&yGnd{9j~y>giZ-quc*{xHx$RS7`GBuqUyDiVmQX|{78(Tblr_? z_NX!5uIwz55bd6=25B0Rsn-#}Q_G&4ap87auD05U+YRdKgSx^!qWkarfc3Up;XBTG z8c8zO%s#ZD{ByMGPk2%!o}R5A3F)Hs4HK1pUPJ7ckaUuE=A|gd6|&LRwDyckq9Jqg zuCD(6hx@#iCvRrzwOtI%wSmrq)J$)CpBa6go*hK?(<<=6b)$622GnYHaet1=2>pbC+Q_|pPJNU6rgVYqR(snqBk2QQyW z&tI^A+uWsuc43RXb~!b{M}<9=Ga~<+7T3)j?_!(}e>@*5$V%Tc4i@!{=3VX$02(WL zUZ;`A1pM{%_5B*Qs{mrURAx_ec^l?$#_x{-F5yDbCAt$H0Oj6=P!ZVtE4UE3j}Ad8 zTj2dnZS)4*RSjIx^e$nG<`__MoiQ4L+AWK-f#QhQc7!FF{s=DAS5=`?%clqC!e_{_ z1agFlyj;F51nNDvYQCgtI1>qPiV#7Z=P?>Nd$p>ez-@A(t3PgCNvo?#(R<8cqo2k5 z+lQ>vCF79t*4sNpN=kQ*+da#UjB$zNSoFO;WH5fV`4E zc-RF7UVd#F2oN{|sQCFxa799?nZ9nqm+u2WsaKHdc)bPQu72jqO;X%p%Cbv;fbwT* zc~(gUZ2EQ3R51(~IAZ;IkYck+Ae&MV>U*ux%@HA-gM{oU1Gr&onbgACx+trPK3RAE zK!3T%(s<;vweP|^uttNBM0W8f$0knJtJ3LFY#=2A@SpFEl7xsOrsOYHoiHAP-iO;*cMn=((2PV!98o1Ed#7#g0elQ3rzqF%(U*K@|!>fM1{<715m4<+Kb46dlV{F@d)mqnIhNG`zN)^u-#vHf{+NUcj`;^Oel!y6ldonZ{%;e3j#&tY z$-4*Bln*vsb5^95kfDhwhOWpFvhOuuF^vA;IJ+EtOaC~J9>~7IyC7<`& zH}hFFV&wJXW(aJLB+6|gmkJBRt0Bx}m@k65xM(Tul+#=H5h*cpY8sFM+VVsZFNL)e z-xML!ilIqYu=LHyL)@AFtG#OvhdST??K)*^D?M4AE;cH(OlU<2(QdMGDVG@xqR5>> z(+!i=o{ByVd5XN13;S(@a;Vvq(uwX%8LQqC3?ceT@+L}r}8gfOn zEU*`510^h-rKc6??~3v>^Sah2Za;J+FcnI^hgiu3^cC5sXTL=by_nt~rKETJ&t7U} zf}Nry5LN|MvUeNIBsqQ@#BQk!XY3nIX>sLI$~y2u;@zq$VeMi4(;E#=2NcD9*6<3vN{zw*rv$lL8_tDIwL%83mx3mhBTR%ds(a_GS{@(ziht|SkqCh~ zZq1f(Q1n)pp2Ae8G-hTRT)fVMEl&Q3oH(K-nEW4gF)Np#yw#8=?0$**xF(@ z%W$9lGdoIu#Xj!`@y(lo@mVcbkI*`MMkpI^TS=V8wH|PLkffz|2I_Qx<1lNzzRr3# z?w?!SQsB0CAudfg)aRt0U7|K%;_Q|hvHDfV+H$aV#@C?KD>@;Cb_y_R4fqO%gnPUI z9pcD>mNeqsZmM@iMCq|~qIFmgaKiL6ffNZRo9b}+lPhQmm*je;z2w*=RH6X_29mT4 z0gB62dHApJi)8=SlX$2GM#_6vxof= zh0srTP2!A|=j-0uYpsLWc)5C1W)+dIuyg?guu5SplXRAfcI)oTC(c^Uu|BNb3uFwjNVJPA~KYmq8;HLf**2slh=Ohu7PNazC#4W$a^ z@XN4@hEqVv^~WPlG@ z4;g^uVp+B)R2FkkbL$!vGTQ|-M>J{IeQn@PZp>Zg^jbyTu^{s+z0i>=X=*61Z5#^b zT<1oS9fOmpI!D)l0U9#UkYfb7Jorgwaq=6`T*H*U1*N zKF63!t7BdjqtWeEvZ2Yw>}xr2$i}1UCn*CM&D%y{rvqRowBlACz2Ai7Snh7|o|596 z&bB$`L(T2^ig5o;-93^=#E>7x$AE34n)lTO@|&5yfq~}`RS`B?LXA)-f_~_bC&>U< zJ5NU_7)U08>8XtoHKRN&l|lZlNZ~E4Qf<5f@8k4d(GzAhjA+}kDde{6Kn$@uRsBW_ zs_c``J8ok+-u*hNaTA>(W(F}r`rQGJuy&1lQR^$1@-9UCs}7j!4J%!_$9MXfu7#L$~9s2eLF}pGdIA9YkZoTD|udDdF@7Gvi!~V#j350!w%Q4`nWp$^930R@Y&Y<6L zLY(+#uNLh={4d^7^g#R z3sw@JGR8!;CNf#7eGZ57!*eG{pc16wRQr(9?VIE76F3H4J#&Z&^aDBpOaXJ5bK0o{ zomd59#@5c`U0cQP7TdK809;}Z4mmTzC-EX=mUQ^?$}C|2 z$LyYMFiiJAVTYMJn9cS=U|#$KaEMn+Iz)^ZI8i3{Dx%zDTSd^I!T_EVmnQ*ER3RR= zD?AekvvawN^xn-z=kt=3mQog!t6Sxb?{zAV3i=Nb1&O&C7%ESgh==@iUNw~Nh3vtx zu`R~i2kH;zJ6WycVh|Tp`*IbTOnkp9BO0aMQzXa@L0ZljaFA_`UJ35FLptX*A}V^p zCgm`&U|U<#a(LN(VlT$+k>eQ%+p9(DObyIdJigJr8}TtD#mKZ^+KySH#9XbE6?ml6 zt<&X&hgQ>PMYA(J{6+4jA}CpZxxVFl_J;kHAphR=W>`lNdu)d*T^qn&S^$WvN(6~QQP;r8Y zb2;_ebQJk6=j^b900`s}xl--DHvM~N7iQ|VN{biS*@bzEZ3SXS55S8Aw-awJ7wrir z>ZU|zUM#6rTXCisfwGSANvTKV#qhu;;78y%uU}{ifd!KY#X6r?|n5I90 z@Zp3AwMpey&WMpskxQ#Sh3$3k@T-dyi@}vS27Jc7uckV7PI&;wh|G*gKvt#E-c|N} zvND5_JHrr&xaT3$E^_F)n;F+e(7z4Q%q^xkc| z@8PM#x3mnDnFFc>W2WbzA6CC1d-zhcqJM(ytDe#nLt8i8+j@~5?nDDKMJ&5DJMYcS zA2L%(3(XQzmhjJlYmtE5^X zj=I;jItt{Z{B> z>=^R(+?;9y&uxrw!_@7n4=HIaJEKp);En}(foyIb4x|Q7Ym1H)o1^`siHaR6w1UC7 zbTa|FDNa>jbc3Z@38j%vzYB$1`#i?hMrB#P1)yt5@lxt zVT)U_G3d5u)6O;e7-i3bifoxZ2`k4N_^`BP99gjh#DvqW>NBwVCMP%--Iunv!)Y}v z8I!fvyZ72Z5O?#1XMfx2Hd=7Qp36YxU)!joHZ#e*Py=D~_>JFty9ap`K07epY$>SU z&v}0h18Q_~6VVN@rbpfNEpSsjW3*x-3pNI8d=c+EM;g+jEMpoDTBhtkUS?f-J0iZD z`b_P%n?{a5gP~KOJF5TaSH$1i$}vh_jJ`x!&`m#W^iC(>ieS!CD}yj>`#$*vSiyaa zwie`^YlgG68@@@as&IO@&HJ|o#m_(FLY8+4^vbt(!+$ppaS$CcS!VGX6}q4)7U6Ye z@Bv`R3x@hV$t!{RwmnQVW`lh^tC}LA1KT5`|c1$gW*5^V#HXO&C^=-c)Qh z4|*N0N1sPtk@AseUy{_UC-rwhD`Hbv?&E0L%x%F&57;4j>2d<-(t;)+&3FjezNO}= z06a;owe2ex@%iR|@H)2$RBaZX$^4hdl0VG^`*(I~{!acxJMN!!C$p6m1~lxNnET&| zweRdKkj5A8vN-8uj5FD^a)kR_MtXu-vNorWvFx-@&ll+Isl}J#51$Ma3-9gwZtvp1 z!gpV+MJL2AzD!;z>o2y)k9>KA>foGoyriOakUb=lcu9=f;b-;k+hJK9@r%DT!Mt?T zXUvdVsvGB#n&VqEeHXO@$-h1~JlC}I_a8K2{shM|e0pKd?aiR%&P*9?j&~J>p+oCW zD*db5yMFys_xSu(qJDotcx#OkI);4l6{)xdwcanj{<8eveM0}c1$de!|M{oz!5(|d zaPfnB_4Md^t|5~=7~B0O$Cn#W`2cknn)Ss0ZUn&_YfhQREq>xtQ6dO($YA<~arlJh zPs8w0uHUfP;+5e$6KZ3a@gLq+l{;2nT88dX>MN}029r}#TO|AFmf9D?c Ee=29W3;+NC literal 0 HcmV?d00001 diff --git a/fx_strength_config.py b/fx_strength_config.py new file mode 100644 index 0000000..41e9faa --- /dev/null +++ b/fx_strength_config.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +分型强度检测配置文件 +用于调整分型强度计算的各项参数和权重 +""" + +class FxStrengthConfig: + """分型强度检测配置类""" + + def __init__(self): + # ===== 权重配置 (总分100分) ===== + self.price_difference_weight = 40 # 价格差异强度权重 + self.breakthrough_weight = 20 # 突破历史点位权重 + self.volume_weight = 15 # 成交量确认权重 + self.rsi_divergence_weight = 15 # RSI背离权重 + self.macd_divergence_weight = 10 # MACD背离权重 + + # ===== 价格差异参数 ===== + self.price_diff_multiplier = 1000 # 价格差异放大倍数 + self.max_price_score = 20 # 价格差异最高得分 + + # ===== 突破检测参数 ===== + self.breakthrough_lookback = 10 # 回看K线数量 + self.breakthrough_multiplier = 500 # 突破幅度放大倍数 + self.max_breakthrough_score = 20 # 突破最高得分 + + # ===== 成交量参数 ===== + self.volume_lookback = 5 # 计算平均成交量的回看期数 + self.volume_multiplier = 10 # 成交量放大倍数 + self.max_volume_score = 15 # 成交量最高得分 + self.min_volume_ratio = 1.0 # 最小成交量比率 + + # ===== RSI背离参数 ===== + self.rsi_divergence_divisor = 2 # RSI背离除数 + self.max_rsi_score = 15 # RSI最高得分 + + # ===== MACD背离参数 ===== + self.macd_divergence_multiplier = 100 # MACD背离放大倍数 + self.max_macd_score = 10 # MACD最高得分 + + # ===== 强度等级阈值 ===== + self.extreme_threshold = 80 # 极强分型阈值 + self.strong_threshold = 60 # 强分型阈值 + self.medium_threshold = 40 # 中等分型阈值 + self.weak_threshold = 20 # 弱分型阈值 + + # ===== 其他参数 ===== + self.min_strength = 0 # 最小强度分数 + self.max_strength = 100 # 最大强度分数 + + def get_strength_level_name(self, strength): + """根据强度分数获取等级名称""" + if strength >= self.extreme_threshold: + return "极强" + elif strength >= self.strong_threshold: + return "强" + elif strength >= self.medium_threshold: + return "中等" + elif strength >= self.weak_threshold: + return "弱" + else: + return "极弱" + + def is_strong_fractal(self, strength, custom_threshold=None): + """判断是否为强分型""" + threshold = custom_threshold if custom_threshold is not None else self.strong_threshold + return strength >= threshold + + def validate_config(self): + """验证配置参数的合理性""" + total_weight = (self.price_difference_weight + + self.breakthrough_weight + + self.volume_weight + + self.rsi_divergence_weight + + self.macd_divergence_weight) + + if total_weight != 100: + print(f"警告: 权重总和为{total_weight},不等于100") + + if not (0 <= self.extreme_threshold <= 100): + print(f"警告: 极强阈值{self.extreme_threshold}不在合理范围内") + + if not (self.weak_threshold < self.medium_threshold < + self.strong_threshold < self.extreme_threshold): + print("警告: 强度阈值设置不合理") + + return True + + def print_config(self): + """打印当前配置""" + print("=== 分型强度检测配置 ===") + print(f"价格差异权重: {self.price_difference_weight}分") + print(f"突破点位权重: {self.breakthrough_weight}分") + print(f"成交量权重: {self.volume_weight}分") + print(f"RSI背离权重: {self.rsi_divergence_weight}分") + print(f"MACD背离权重: {self.macd_divergence_weight}分") + print() + print("=== 强度等级阈值 ===") + print(f"极强: >={self.extreme_threshold}分") + print(f"强: {self.strong_threshold}-{self.extreme_threshold-1}分") + print(f"中等: {self.medium_threshold}-{self.strong_threshold-1}分") + print(f"弱: {self.weak_threshold}-{self.medium_threshold-1}分") + print(f"极弱: <{self.weak_threshold}分") + + +# 默认配置实例 +DEFAULT_CONFIG = FxStrengthConfig() + +# 保守配置 (更严格的分型识别) +CONSERVATIVE_CONFIG = FxStrengthConfig() +CONSERVATIVE_CONFIG.price_difference_weight = 50 +CONSERVATIVE_CONFIG.breakthrough_weight = 25 +CONSERVATIVE_CONFIG.volume_weight = 15 +CONSERVATIVE_CONFIG.rsi_divergence_weight = 10 +CONSERVATIVE_CONFIG.macd_divergence_weight = 0 +CONSERVATIVE_CONFIG.strong_threshold = 70 +CONSERVATIVE_CONFIG.extreme_threshold = 85 + +# 激进配置 (更宽松的分型识别) +AGGRESSIVE_CONFIG = FxStrengthConfig() +AGGRESSIVE_CONFIG.price_difference_weight = 30 +AGGRESSIVE_CONFIG.breakthrough_weight = 15 +AGGRESSIVE_CONFIG.volume_weight = 20 +AGGRESSIVE_CONFIG.rsi_divergence_weight = 20 +AGGRESSIVE_CONFIG.macd_divergence_weight = 15 +AGGRESSIVE_CONFIG.strong_threshold = 50 +AGGRESSIVE_CONFIG.extreme_threshold = 70 + +# 技术指标重点配置 (重视技术指标背离) +TECHNICAL_CONFIG = FxStrengthConfig() +TECHNICAL_CONFIG.price_difference_weight = 25 +TECHNICAL_CONFIG.breakthrough_weight = 15 +TECHNICAL_CONFIG.volume_weight = 10 +TECHNICAL_CONFIG.rsi_divergence_weight = 25 +TECHNICAL_CONFIG.macd_divergence_weight = 25 + + +if __name__ == "__main__": + print("=== 分型强度配置演示 ===\n") + + configs = { + "默认配置": DEFAULT_CONFIG, + "保守配置": CONSERVATIVE_CONFIG, + "激进配置": AGGRESSIVE_CONFIG, + "技术指标配置": TECHNICAL_CONFIG + } + + for name, config in configs.items(): + print(f"=== {name} ===") + config.print_config() + config.validate_config() + print() \ No newline at end of file diff --git a/fx_strength_example.py b/fx_strength_example.py new file mode 100644 index 0000000..40814af --- /dev/null +++ b/fx_strength_example.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +分型强度检测使用示例 +该文件展示如何使用ChanKLC类中新增的分型强度检测功能 +""" + +from ChanKLC import ChanKLC +from ChanEnum import Chan_FX_TYPE +import ChanKLU + + +def demo_fx_strength_detection(): + """ + 演示分型强度检测功能 + """ + print("=== 分型强度检测功能演示 ===\n") + + # 假设我们有一个已经确定为分型的KLC对象 + # 这里仅为演示,实际使用中KLC对象应该通过正常流程创建 + + print("1. 分型强度计算方法:") + print(" - calculate_fx_strength(): 返回0-100的强度分数") + print(" - get_fx_strength_level(): 返回强度等级描述") + print(" - is_strong_fx(threshold): 判断是否为强分型") + print() + + print("2. 强度评分维度 (总分100分):") + print(" - 价格差异强度: 40分 (与相邻K线的价格差异)") + print(" - 突破历史点位: 20分 (是否突破重要高低点)") + print(" - 成交量确认: 15分 (分型形成时的成交量)") + print(" - RSI背离确认: 15分 (价格与RSI的背离)") + print(" - MACD背离确认: 10分 (价格与MACD的背离)") + print() + + print("3. 强度等级分类:") + print(" - 极强: 80-100分") + print(" - 强: 60-79分") + print(" - 中等: 40-59分") + print(" - 弱: 20-39分") + print(" - 极弱: 0-19分") + print() + + print("4. 在特征数据中的应用:") + print(" 分型强度会自动集成到get_feature_data()方法返回的特征中:") + print(" - klc_fx_strength: 强度分数") + print(" - klc_fx_strength_level: 强度等级") + print(" - klc_is_strong_fx: 是否为强分型(布尔值)") + print(" - klc_fx_strength_extreme: 是否为极强分型") + print(" - klc_fx_strength_strong: 是否为强分型") + print(" - klc_fx_strength_medium: 是否为中等分型") + print(" - klc_fx_strength_weak: 是否为弱分型") + print(" - klc_fx_strength_very_weak: 是否为极弱分型") + print() + + +def analyze_fx_strength(klc): + """ + 分析单个KLC的分型强度 + + Args: + klc: ChanKLC对象 + """ + if klc.fx == Chan_FX_TYPE.UNKNOWN: + print(f"时间: {klc.start_time} - 无分型") + return + + fx_type = "顶分型" if klc.fx == Chan_FX_TYPE.TOP else "底分型" + strength = klc.calculate_fx_strength() + strength_level = klc.get_fx_strength_level() + is_strong = klc.is_strong_fx() + + print(f"时间: {klc.start_time}") + print(f"分型类型: {fx_type}") + print(f"强度分数: {strength}") + print(f"强度等级: {strength_level}") + print(f"是否强分型: {'是' if is_strong else '否'}") + print("-" * 30) + + +def filter_strong_fractals(klc_list, min_strength=60): + """ + 筛选强分型 + + Args: + klc_list: KLC对象列表 + min_strength: 最小强度阈值 + + Returns: + 强分型列表 + """ + strong_fractals = [] + + for klc in klc_list: + if klc.fx != Chan_FX_TYPE.UNKNOWN and klc.is_strong_fx(min_strength): + strong_fractals.append(klc) + + return strong_fractals + + +def get_fractal_statistics(klc_list): + """ + 获取分型强度统计信息 + + Args: + klc_list: KLC对象列表 + + Returns: + 统计信息字典 + """ + stats = { + 'total_fractals': 0, + 'top_fractals': 0, + 'bottom_fractals': 0, + 'extreme_strength': 0, # 极强 + 'strong_strength': 0, # 强 + 'medium_strength': 0, # 中等 + 'weak_strength': 0, # 弱 + 'very_weak_strength': 0,# 极弱 + 'avg_strength': 0 + } + + strengths = [] + + for klc in klc_list: + if klc.fx != Chan_FX_TYPE.UNKNOWN: + stats['total_fractals'] += 1 + + if klc.fx == Chan_FX_TYPE.TOP: + stats['top_fractals'] += 1 + else: + stats['bottom_fractals'] += 1 + + strength = klc.calculate_fx_strength() + strengths.append(strength) + + if strength >= 80: + stats['extreme_strength'] += 1 + elif strength >= 60: + stats['strong_strength'] += 1 + elif strength >= 40: + stats['medium_strength'] += 1 + elif strength >= 20: + stats['weak_strength'] += 1 + else: + stats['very_weak_strength'] += 1 + + if strengths: + stats['avg_strength'] = sum(strengths) / len(strengths) + + return stats + + +if __name__ == "__main__": + demo_fx_strength_detection() + + print("=== 使用建议 ===") + print("1. 在交易策略中,可以只关注强度>=60的分型") + print("2. 极强分型(>=80分)通常是重要的转折点") + print("3. 结合成交量和技术指标背离的分型更可靠") + print("4. 可以用分型强度来设置止损和止盈位置") + print("5. 分型强度可以作为机器学习模型的重要特征") \ No newline at end of file diff --git a/strategies/Chan_SOL_2.py b/strategies/Chan_SOL_2.py index 67d161f..f0f327a 100644 --- a/strategies/Chan_SOL_2.py +++ b/strategies/Chan_SOL_2.py @@ -1,9 +1,10 @@ # --- Do not remove these libs --- from freqtrade.strategy import IStrategy -from typing import Dict, List +from typing import Dict, List, Tuple, Optional from functools import reduce -from pandas import DataFrame, pandas +from pandas import DataFrame import freqtrade.vendor.qtpylib.indicators as qtpylib +import pandas as pd # -------------------------------- from technical.util import resample_to_interval, resampled_merge @@ -12,329 +13,343 @@ import freqtrade.vendor.qtpylib.indicators as qtpylib from datetime import datetime, timedelta, timezone from freqtrade.persistence import Trade, Order from typing import Optional +import numpy as np import logging logger = logging.getLogger(__name__) -### Now you can use logger.info('asfd') to log +# freqtrade backtesting -c ./user_data/Chan/config/ChanLun_SOL.json --strategy Chan_SOL_2 --strategy-path ./user_data/Chan/strategies --timerange=20240801-20241201 -# freqtrade trade -c ./user_data/Chan/config/ChanLun_SOL.json --strategy ChanLun_SOL_2 --strategy-path ./user_data/Chan/strategies -# freqtrade backtesting -c ./user_data/Chan/config/ChanLun_SOL.json --strategy ChanLun_SOL_2 --strategy-path ./user_data/Chan/strategies --timerange=20250309- -# freqtrade download-data -c ./user_data/Chan/config/ChanLun_SOL.json -t 1m --pairs SOL/USDT:USDT --timerange=20250501- -# freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily --spaces roi stoploss --strategy ChanLun_SOL_2 --strategy-path ./user_data/strategies -c ./user_data/ChanLun_SOL.json -e 200 --timerange=20250101-20250215 - -# sudo docker compose run --rm chan_btc backtesting -c ./user_data/Chan.json --strategy Chan_SOL_2 --strategy-path ./user_data/strategies --timerange=20250101- -# sudo docker compose run --rm chan_btc download-data -c ./user_data/Chan.json --pairs SOL/USDT:USDT -t 1m --timerange 20240101- -# sudo docker compose run --rm chan_btc trade -c ./user_data/Chan.json --strategy Chan_SOL_2 --strategy-path ./user_data/strategies - -class ChanLun_SOL_2(IStrategy): +class Chan_SOL_2(IStrategy): + """ + 稳定盈利交易策略 - 基于多重技术分析 + 结合趋势跟踪、动量指标和风险管理 + """ INTERFACE_VERSION: int = 3 - # 优化的ROI设置 - 更快速获利 + # 优化的ROI设置 - 阶梯式获利了结 minimal_roi = { - "0": 0.012, # 立即获利1.2% - "5": 0.01, # 5分钟后获利1% - "15": 0.007, # 15分钟后获利0.7% - "30": 0.005 # 30分钟后获利0.5% + "0": 0.15, # 15%快速获利 + "30": 0.08, # 30分钟后8% + "60": 0.05, # 1小时后5% + "120": 0.03, # 2小时后3% + "240": 0.02, # 4小时后2% + "480": 0.015, # 8小时后1.5% + "960": 0.01 # 16小时后1% } can_short = True - stoploss = -0.007 # 降低止损为0.7% + stoploss = -0.08 # 8%止损 - # 追踪止损设置 - 更积极的追踪止损 + # 动态追踪止损 trailing_stop = True - trailing_stop_positive = 0.003 # 0.3% - trailing_stop_positive_offset = 0.005 # 0.5% + trailing_stop_positive = 0.015 # 1.5%开始追踪 + trailing_stop_positive_offset = 0.025 # 2.5%偏移 trailing_only_offset_is_reached = True - # 时间周期 + # 仓位管理 + position_adjustment_enable = True + max_entry_position_adjustment = 2 + max_dca_multiplier = 3.0 + timeframe = '5m' - informative_timeframe = '1h' - startup_candle_count = 200 + startup_candle_count = 200 - # 只做空头策略 - only_short = True - - def informative_pairs(self): - pairs = self.dp.current_whitelist() - informative_pairs = [(pair, self.informative_timeframe) for pair in pairs] - return informative_pairs + # 自定义参数 + buy_volume_threshold = 1.5 + sell_volume_threshold = 1.2 + rsi_oversold = 25 + rsi_overbought = 75 + adx_trend_threshold = 25 def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: - # 获取更高时间周期的数据 - informative = self.dp.get_pair_dataframe(pair=metadata['pair'], timeframe=self.informative_timeframe) + """ + 添加技术指标 - 多维度分析 + """ + # === 趋势指标 === + # 多周期移动平均线 + dataframe['ema_8'] = ta.EMA(dataframe, timeperiod=8) + dataframe['ema_21'] = ta.EMA(dataframe, timeperiod=21) + dataframe['ema_50'] = ta.EMA(dataframe, timeperiod=50) + dataframe['ema_200'] = ta.EMA(dataframe, timeperiod=200) - # === 高时间周期指标 === - # 三均线系统 - informative['ema50'] = ta.EMA(informative, timeperiod=50) - informative['ema100'] = ta.EMA(informative, timeperiod=100) - informative['ema200'] = ta.SMA(informative, timeperiod=200) # 使用SMA作为长期趋势 + # === 动量指标 === + # RSI - 超买超卖 + dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14) + dataframe['rsi_fast'] = ta.RSI(dataframe, timeperiod=9) + dataframe['rsi_slow'] = ta.RSI(dataframe, timeperiod=21) - # 趋势方向 - informative['uptrend'] = ( - (informative['ema50'] > informative['ema100']) & - (informative['ema100'] > informative['ema200']) & - (informative['close'] > informative['ema50']) - ).astype(int) + # MACD - 趋势动量 + macd = ta.MACD(dataframe, fastperiod=12, slowperiod=26, signalperiod=9) + dataframe['macd'] = macd['macd'] + dataframe['macdsignal'] = macd['macdsignal'] + dataframe['macdhist'] = macd['macdhist'] - informative['downtrend'] = ( - (informative['ema50'] < informative['ema100']) & - (informative['ema100'] < informative['ema200']) & - (informative['close'] < informative['ema50']) - ).astype(int) + # === 波动率指标 === + # ATR - 真实波动幅度 + dataframe['atr'] = ta.ATR(dataframe, timeperiod=14) - # 强下降趋势 - informative['strong_downtrend'] = ( - (informative['ema50'] < informative['ema100']) & - (informative['ema100'] < informative['ema200']) & - (informative['close'] < informative['ema50']) & - (informative['ema50'].shift(3) < informative['ema50']) # 确认EMA50下降 - ).astype(int) - - # 添加高时间周期的ADX指标 - informative['adx'] = ta.ADX(informative, timeperiod=14) - - # 添加高时间周期的波动率 - informative['atr'] = ta.ATR(informative, timeperiod=14) - informative['atr_percent'] = (informative['atr'] / informative['close']) * 100 - - # 高时间周期RSI - informative['rsi'] = ta.RSI(informative, timeperiod=14) - - # 将informative数据帧中的列重命名,以便在合并后区分 - for col in informative.columns: - if col not in ['date', 'open', 'high', 'low', 'close', 'volume']: - informative[f"{col}_{self.informative_timeframe}"] = informative[col] - - # 删除原始列,只保留重命名后的列和必要的日期、OHLCV列 - for col in list(informative.columns): - if col not in ['date', 'open', 'high', 'low', 'close', 'volume'] and not col.endswith(f"_{self.informative_timeframe}"): - del informative[col] - - # 打印列名以便调试 - logger.info(f"Informative columns after renaming: {informative.columns.tolist()}") - - # 合并数据 - 使用正确的参数 - dataframe = resampled_merge(dataframe, informative, self.informative_timeframe) - - # 打印合并后的列名以便调试 - logger.info(f"Dataframe columns after merge: {dataframe.columns.tolist()}") - - # === 主时间周期指标 === # 布林带 bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2) dataframe['bb_lowerband'] = bollinger['lower'] dataframe['bb_middleband'] = bollinger['mid'] dataframe['bb_upperband'] = bollinger['upper'] - dataframe['bb_width'] = ((bollinger['upper'] - bollinger['lower']) / bollinger['mid']) + dataframe['bb_percent'] = (dataframe['close'] - dataframe['bb_lowerband']) / (dataframe['bb_upperband'] - dataframe['bb_lowerband']) + dataframe['bb_width'] = (dataframe['bb_upperband'] - dataframe['bb_lowerband']) / dataframe['bb_middleband'] - # 动量指标 - dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14) - dataframe['mfi'] = ta.MFI(dataframe, timeperiod=14) - - # MACD - macd = ta.MACD(dataframe) - dataframe['macd'] = macd['macd'] - dataframe['macdsignal'] = macd['macdsignal'] - dataframe['macdhist'] = macd['macdhist'] - - # 均线 - dataframe['ema9'] = ta.EMA(dataframe, timeperiod=9) - dataframe['ema21'] = ta.EMA(dataframe, timeperiod=21) - dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50) - dataframe['sma200'] = ta.SMA(dataframe, timeperiod=200) - - # 成交量 - dataframe['volume_mean'] = dataframe['volume'].rolling(window=20).mean() - dataframe['volume_ratio'] = dataframe['volume'] / dataframe['volume_mean'] - - # 波动率 - dataframe['atr'] = ta.ATR(dataframe, timeperiod=14) - - # ADX - 趋势强度指标 + # === 趋势强度指标 === + # ADX - 趋势强度 dataframe['adx'] = ta.ADX(dataframe, timeperiod=14) + dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=14) + dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=14) - # 价格突破 - dataframe['upper_break'] = ( - (dataframe['close'] > dataframe['bb_upperband']) & - (dataframe['close'].shift() <= dataframe['bb_upperband'].shift()) - ).astype(int) + # === 成交量指标 === + # 成交量移动平均 + dataframe['volume_sma_20'] = dataframe['volume'].rolling(window=20).mean() + dataframe['volume_ratio'] = dataframe['volume'] / dataframe['volume_sma_20'] - dataframe['lower_break'] = ( - (dataframe['close'] < dataframe['bb_lowerband']) & - (dataframe['close'].shift() >= dataframe['bb_lowerband'].shift()) - ).astype(int) + # OBV - 能量潮 + dataframe['obv'] = ta.OBV(dataframe) + dataframe['obv_ema'] = ta.EMA(dataframe['obv'], timeperiod=20) - # 均线交叉 - dataframe['ema_cross_up'] = ( - (dataframe['ema9'] > dataframe['ema21']) & - (dataframe['ema9'].shift() <= dataframe['ema21'].shift()) - ).astype(int) + # === 价格行为指标 === + # 价格变化率 + dataframe['price_change'] = dataframe['close'].pct_change() + dataframe['price_change_5'] = dataframe['close'].pct_change(periods=5) - dataframe['ema_cross_down'] = ( - (dataframe['ema9'] < dataframe['ema21']) & - (dataframe['ema9'].shift() >= dataframe['ema21'].shift()) - ).astype(int) + # 高低点分析 + dataframe['high_20'] = dataframe['high'].rolling(window=20).max() + dataframe['low_20'] = dataframe['low'].rolling(window=20).min() - # 超买超卖区域 - dataframe['rsi_oversold'] = (dataframe['rsi'] < 30).astype(int) - dataframe['rsi_overbought'] = (dataframe['rsi'] > 70).astype(int) + # === 自定义复合指标 === + # 趋势确认信号 + dataframe['trend_up'] = ( + (dataframe['ema_8'] > dataframe['ema_21']) & + (dataframe['ema_21'] > dataframe['ema_50']) & + (dataframe['close'] > dataframe['ema_8']) + ) - # 价格与均线的关系 - dataframe['price_above_ema50'] = (dataframe['close'] > dataframe['ema50']).astype(int) - dataframe['price_below_ema50'] = (dataframe['close'] < dataframe['ema50']).astype(int) + dataframe['trend_down'] = ( + (dataframe['ema_8'] < dataframe['ema_21']) & + (dataframe['ema_21'] < dataframe['ema_50']) & + (dataframe['close'] < dataframe['ema_8']) + ) - # 趋势强度 - dataframe['strong_trend'] = (dataframe['adx'] > 25).astype(int) + # 动量强度评分 + dataframe['momentum_score'] = ( + ((dataframe['rsi'] > 50).astype(int) * 1) + + ((dataframe['macd'] > dataframe['macdsignal']).astype(int) * 1) + + ((dataframe['adx'] > self.adx_trend_threshold).astype(int) * 1) + + ((dataframe['volume_ratio'] > 1.0).astype(int) * 1) + ) - # 添加蜡烛图形态识别 - dataframe['doji'] = ta.CDLDOJI(dataframe['open'], dataframe['high'], dataframe['low'], dataframe['close']) - dataframe['engulfing'] = ta.CDLENGULFING(dataframe['open'], dataframe['high'], dataframe['low'], dataframe['close']) - dataframe['hammer'] = ta.CDLHAMMER(dataframe['open'], dataframe['high'], dataframe['low'], dataframe['close']) - dataframe['shooting_star'] = ta.CDLSHOOTINGSTAR(dataframe['open'], dataframe['high'], dataframe['low'], dataframe['close']) - - # 价格动量 - dataframe['momentum'] = dataframe['close'] - dataframe['close'].shift(5) + # 波动率适应性指标 + dataframe['volatility_high'] = dataframe['atr'] > dataframe['atr'].rolling(window=20).mean() * 1.5 return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: - # 检查列名是否存在 - downtrend_col = 'resample_60_downtrend_1h' - strong_downtrend_col = 'resample_60_strong_downtrend_1h' - adx_col = 'resample_60_adx_1h' - rsi_col = 'resample_60_rsi_1h' + """ + 入场信号 - 多条件确认系统 + """ + # === 多头入场条件 === - # 如果列名不存在,使用替代方案 - for col, default_value in [ - (downtrend_col, 0), - (strong_downtrend_col, 0), - (adx_col, 25), - (rsi_col, 50) - ]: - if col not in dataframe.columns: - logger.warning(f"Column {col} not found in dataframe. Creating with default value {default_value}.") - dataframe[col] = default_value + # 条件1: 强势突破入场 + dataframe.loc[ + ( + # 趋势确认 + (dataframe['trend_up']) & + (dataframe['close'] > dataframe['ema_21']) & + + # 动量确认 + (dataframe['rsi'] > 45) & (dataframe['rsi'] < 75) & + (dataframe['macd'] > dataframe['macdsignal']) & + (dataframe['macdhist'] > dataframe['macdhist'].shift(1)) & + + # 成交量确认 + (dataframe['volume_ratio'] > self.buy_volume_threshold) & + (dataframe['obv'] > dataframe['obv_ema']) & + + # 价格行为确认 + (dataframe['close'] > dataframe['bb_middleband']) & + (dataframe['bb_percent'] > 0.2) & (dataframe['bb_percent'] < 0.8) & + + # 趋势强度确认 + (dataframe['adx'] > self.adx_trend_threshold) & + (dataframe['plus_di'] > dataframe['minus_di']) + ), + ['enter_long', 'enter_tag']] = (1, 'breakout_long') - # 禁用多头入场 - dataframe['enter_long'] = 0 + # 条件2: 超卖反弹入场 + dataframe.loc[ + ( + # 超卖反弹 + (dataframe['rsi'] < self.rsi_oversold + 10) & + (dataframe['rsi'] > dataframe['rsi'].shift(1)) & + (dataframe['bb_percent'] < 0.2) & + + # 趋势不能太差 + (dataframe['ema_8'] >= dataframe['ema_50']) & + (dataframe['close'] > dataframe['low_20'] * 1.02) & + + # 成交量支持 + (dataframe['volume_ratio'] > 1.2) & + + # MACD底背离迹象 + (dataframe['macdhist'] > dataframe['macdhist'].shift(1)) & + + # 不与第一个条件重复 + (~dataframe['enter_long'].astype(bool)) + ), + ['enter_long', 'enter_tag']] = (1, 'oversold_long') - # 空头入场条件 - 专注于空头策略 - short_conditions = ( - # 高时间周期处于下降趋势 - (dataframe[downtrend_col] > 0) & - - # 趋势强度确认 - (dataframe[adx_col] > 25) & - - # 条件1: 价格突破上轨后回落 + 成交量确认 - ( - (dataframe['upper_break'].rolling(window=5).sum() > 0) & # 最近5根K线内有突破上轨 - (dataframe['close'] < dataframe['close'].shift(2)) & # 价格开始下跌 - (dataframe['close'] < dataframe['ema9']) & # 价格在短期均线下方 - (dataframe['volume_ratio'] > 1.3) & # 成交量放大 - (dataframe['rsi'] < 70) & # RSI不在极度超买区 - (dataframe['rsi'] > 40) & # RSI不在超卖区 - (dataframe[rsi_col] < 60) # 高时间周期RSI不过高 - ) | - - # 条件2: 均线死叉 + RSI超买回落 + 趋势确认 - ( - (dataframe['ema_cross_down'] > 0) & # 均线死叉 - (dataframe['rsi'] > 55) & # RSI相对较高 - (dataframe['rsi'] < dataframe['rsi'].shift(3)) & # RSI下降 - (dataframe['volume_ratio'] > 1.2) & # 成交量放大 - (dataframe['adx'] > 20) & # ADX显示有一定趋势强度 - ((dataframe['shooting_star'] > 0) | (dataframe['engulfing'] < 0)) # 流星线或看跌吞没形态 - ) | - - # 条件3: 价格在高点回落 + 强趋势 - ( - (dataframe['close'] < dataframe['high'].shift()) & - (dataframe['high'].shift() > dataframe['high'].shift(2)) & - (dataframe['close'] < dataframe['ema21']) & - (dataframe['adx'] > 30) & - (dataframe['rsi'] < dataframe['rsi'].shift()) & - (dataframe['rsi'].shift() > 65) & - (dataframe['volume_ratio'] > 1.0) - ) | - - # 条件4: 强下降趋势确认 - ( - (dataframe[strong_downtrend_col] > 0) & - (dataframe['close'] < dataframe['ema21']) & - (dataframe['close'] < dataframe['close'].shift(3)) & - (dataframe['momentum'] < 0) & - (dataframe['volume_ratio'] > 1.1) & - (dataframe['adx'] > 25) - ) - ) + # === 空头入场条件 === - dataframe.loc[short_conditions, 'enter_short'] = 1 - dataframe.loc[short_conditions, 'enter_tag'] = 'chan_sol_short' + # 条件1: 强势下跌入场 + dataframe.loc[ + ( + # 趋势确认 + (dataframe['trend_down']) & + (dataframe['close'] < dataframe['ema_21']) & + + # 动量确认 + (dataframe['rsi'] < 55) & (dataframe['rsi'] > 25) & + (dataframe['macd'] < dataframe['macdsignal']) & + (dataframe['macdhist'] < dataframe['macdhist'].shift(1)) & + + # 成交量确认 + (dataframe['volume_ratio'] > self.sell_volume_threshold) & + (dataframe['obv'] < dataframe['obv_ema']) & + + # 价格行为确认 + (dataframe['close'] < dataframe['bb_middleband']) & + (dataframe['bb_percent'] > 0.2) & (dataframe['bb_percent'] < 0.8) & + + # 趋势强度确认 + (dataframe['adx'] > self.adx_trend_threshold) & + (dataframe['minus_di'] > dataframe['plus_di']) + ), + ['enter_short', 'enter_tag']] = (1, 'breakdown_short') + + # 条件2: 超买回调入场 + dataframe.loc[ + ( + # 超买回调 + (dataframe['rsi'] > self.rsi_overbought - 10) & + (dataframe['rsi'] < dataframe['rsi'].shift(1)) & + (dataframe['bb_percent'] > 0.8) & + + # 趋势不能太好 + (dataframe['ema_8'] <= dataframe['ema_50']) & + (dataframe['close'] < dataframe['high_20'] * 0.98) & + + # 成交量支持 + (dataframe['volume_ratio'] > 1.2) & + + # MACD顶背离迹象 + (dataframe['macdhist'] < dataframe['macdhist'].shift(1)) & + + # 不与第一个条件重复 + (~dataframe['enter_short'].astype(bool)) + ), + ['enter_short', 'enter_tag']] = (1, 'overbought_short') return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: - # 禁用多头出场 - dataframe['exit_long'] = 0 + """ + 出场信号 - 及时止盈止损 + """ + # === 多头出场条件 === - # 空头出场条件 - 更精确的出场 - short_exit_conditions = ( - # 条件1: 趋势反转信号 + # 条件1: 趋势转弱 + dataframe.loc[ ( - (dataframe['ema_cross_up'] > 0) & # 均线金叉 - (dataframe['volume_ratio'] > 1.0) # 成交量确认 - ) | - - # 条件2: 价格突破中期均线 - ( - (dataframe['close'] > dataframe['ema21']) & - (dataframe['close'].shift() < dataframe['ema21'].shift()) & # 确认是刚刚突破 - (dataframe['volume_ratio'] > 1.2) # 成交量确认 - ) | - - # 条件3: 超卖信号 - ( - (dataframe['rsi'] < 30) & # RSI超卖 - (dataframe['close'] < dataframe['bb_lowerband']) # 价格突破下轨 - ) | - - # 条件4: 动量减弱 - ( - (dataframe['rsi'] < 35) & - (dataframe['rsi'] > dataframe['rsi'].shift()) & - (dataframe['rsi'].shift() > dataframe['rsi'].shift(2)) & # RSI连续两根K线上升 - (dataframe['momentum'] > 0) # 价格动量转为正 - ) | - - # 条件5: 锤子线形态 (潜在反转信号) - ( - (dataframe['hammer'] > 0) & - (dataframe['volume_ratio'] > 1.3) - ) - ) + ( + (dataframe['rsi'] > self.rsi_overbought) | + (dataframe['macd'] < dataframe['macdsignal']) | + (dataframe['close'] < dataframe['ema_8']) | + (dataframe['bb_percent'] > 0.95) | + (dataframe['adx'] < 20) + ) & + (dataframe['volume_ratio'] > 1.0) + ), + ['exit_long', 'exit_tag']] = (1, 'trend_weak_long') - dataframe.loc[short_exit_conditions, 'exit_short'] = 1 - dataframe.loc[short_exit_conditions, 'exit_tag'] = 'chan_sol_short_exit' + # === 空头出场条件 === + + # 条件1: 趋势转强 + dataframe.loc[ + ( + ( + (dataframe['rsi'] < self.rsi_oversold) | + (dataframe['macd'] > dataframe['macdsignal']) | + (dataframe['close'] > dataframe['ema_8']) | + (dataframe['bb_percent'] < 0.05) | + (dataframe['adx'] < 20) + ) & + (dataframe['volume_ratio'] > 1.0) + ), + ['exit_short', 'exit_tag']] = (1, 'trend_strong_short') return dataframe - - def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, - time_in_force: str, current_time: datetime, entry_tag: Optional[str], - side: str, **kwargs) -> bool: + + def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime, + current_rate: float, current_profit: float, **kwargs) -> float: """ - 在进入交易前进行额外的确认 + 动态止损策略 """ - # 只做空头交易 - if side == "sell" and entry_tag == "chan_sol_short": - return True - return False - + # 基础止损 + if current_profit < -0.05: # 如果亏损超过5%,严格止损 + return -0.08 + + # 盈利后的动态止损 + if current_profit > 0.02: # 盈利超过2%后,调整止损至成本价附近 + return 0.005 + elif current_profit > 0.05: # 盈利超过5%后,保证1%利润 + return -current_profit + 0.01 + elif current_profit > 0.10: # 盈利超过10%后,保证5%利润 + return -current_profit + 0.05 + + return self.stoploss + + def adjust_trade_position(self, trade: Trade, current_time: datetime, + current_rate: float, current_profit: float, + min_stake: float, max_stake: float, + current_entry_rate: float, current_exit_rate: float, + current_entry_profit: float, current_exit_profit: float, + **kwargs) -> Optional[float]: + """ + 仓位调整策略 - 金字塔加仓 + """ + # 如果亏损超过3%,不加仓 + if current_profit < -0.03: + return None + + # 如果盈利超过2%且趋势持续,可以加仓 + if current_profit > 0.02 and len(trade.select_filled_orders(trade.entry_side)) < self.max_entry_position_adjustment: + # 获取当前数据进行趋势确认 + try: + # 简单的趋势确认逻辑 + if trade.is_short: + return max_stake * 0.5 # 空头加仓 + else: + return max_stake * 0.5 # 多头加仓 + except: + pass + + return None + def leverage(self, pair: str, current_time: datetime, current_rate: float, proposed_leverage: float, max_leverage: float, entry_tag: Optional[str], side: str, **kwargs) -> float: - return 1.0 - - def get_ticker_indicator(self): - return int(self.timeframe[:-1]) \ No newline at end of file + """ + 杠杆设置 - 保守策略 + """ + # 根据入场类型调整杠杆 + if entry_tag and 'breakout' in entry_tag: + return min(2.0, max_leverage) # 突破信号使用较高杠杆 + elif entry_tag and ('oversold' in entry_tag or 'overbought' in entry_tag): + return min(1.5, max_leverage) # 超买超卖信号使用中等杠杆 + else: + return 1.0 # 默认无杠杆 \ No newline at end of file diff --git a/test_fx_strength.py b/test_fx_strength.py new file mode 100644 index 0000000..b464ad2 --- /dev/null +++ b/test_fx_strength.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +测试分型强度检测功能 +""" + +from ChanKLC import ChanKLC +import ChanKLU +from ChanEnum import Chan_FX_TYPE, Chan_KLINE_DIR +import requests +import json +import numpy as np +import matplotlib.pyplot as plt +from collections import Counter + +def test_fx_strength(): + """测试分型强度检测功能""" + print('=== 分型强度检测功能测试 ===') + + # 创建一个简单的测试KLU,使用正确的构造函数参数 + klu = ChanKLU.ChanKLU( + time='2024-01-01 10:00:00', + open=100.0, + high=105.0, + low=98.0, + close=103.0, + volume=1000 + ) + klu.rsi = 65.0 + klu.volume_ratio = 1.2 + klu.macdhist = 0.5 + + # 创建KLC对象 + klc = ChanKLC(klu, 1, Chan_KLINE_DIR.UP) + klc.fx = Chan_FX_TYPE.TOP + + # 测试强度计算 + strength = klc.calculate_fx_strength() + level = klc.get_fx_strength_level() + is_strong = klc.is_strong_fx() + + print(f'分型强度分数: {strength}') + print(f'分型强度等级: {level}') + print(f'是否强分型: {is_strong}') + + # 测试特征数据集成 + features = klc.get_feature_data() + fx_features = {k: v for k, v in features.items() if 'fx_strength' in k} + print('\n分型强度相关特征:') + for key, value in fx_features.items(): + print(f' {key}: {value}') + + print('\n✅ 分型强度检测功能正常工作!') + return True + +def test_fx_strength_distribution(): + """测试分型强度分布情况""" + + print("=== 分型强度分布分析 ===") + + # 请求API数据 + url = "http://localhost:8123/api/analyze" + params = { + 'symbol': 'SOL/USDT:USDT', + 'timeframe': '5m', + 'timezone': 'Asia/Shanghai' + } + + try: + response = requests.get(url, params=params) + response.raise_for_status() + data = response.json() + except Exception as e: + print(f"❌ 请求API失败: {e}") + return + + # 提取分型强度数据 + fx_strengths = [] + fx_levels = [] + top_strengths = [] + bottom_strengths = [] + + for fx in data.get('klc_fx_info', []): + strength = fx.get('fx_strength', 0) + level = fx.get('fx_strength_level', 'Unknown') + is_bottom = fx.get('is_bottom_fx', False) + + fx_strengths.append(strength) + fx_levels.append(level) + + if is_bottom: + bottom_strengths.append(strength) + else: + top_strengths.append(strength) + + # 统计分析 + if fx_strengths: + print(f"\n📊 基础统计:") + print(f"总分型数量: {len(fx_strengths)}") + print(f"平均强度: {np.mean(fx_strengths):.2f}") + print(f"强度中位数: {np.median(fx_strengths):.2f}") + print(f"强度标准差: {np.std(fx_strengths):.2f}") + print(f"最高强度: {np.max(fx_strengths):.2f}") + print(f"最低强度: {np.min(fx_strengths):.2f}") + + print(f"\n🔝 顶分型统计:") + if top_strengths: + print(f"数量: {len(top_strengths)}") + print(f"平均强度: {np.mean(top_strengths):.2f}") + print(f"最高强度: {np.max(top_strengths):.2f}") + + print(f"\n🔻 底分型统计:") + if bottom_strengths: + print(f"数量: {len(bottom_strengths)}") + print(f"平均强度: {np.mean(bottom_strengths):.2f}") + print(f"最高强度: {np.max(bottom_strengths):.2f}") + + # 强度等级分布 + print(f"\n📈 强度等级分布:") + level_counts = Counter(fx_levels) + for level, count in level_counts.items(): + percentage = (count / len(fx_levels)) * 100 + print(f"{level}: {count} ({percentage:.1f}%)") + + # 强度区间分布 + print(f"\n📊 强度区间分布:") + ranges = [ + (0, 20, "极弱 (0-20)"), + (20, 40, "弱 (20-40)"), + (40, 60, "中等 (40-60)"), + (60, 80, "强 (60-80)"), + (80, 100, "极强 (80-100)") + ] + + for min_val, max_val, label in ranges: + count = sum(1 for s in fx_strengths if min_val <= s < max_val) + percentage = (count / len(fx_strengths)) * 100 + print(f"{label}: {count} ({percentage:.1f}%)") + + # 找出最强和最弱的分型 + print(f"\n⭐ 最强分型 (Top 5):") + sorted_fx = sorted(data.get('klc_fx_info', []), + key=lambda x: x.get('fx_strength', 0), + reverse=True)[:5] + + for i, fx in enumerate(sorted_fx, 1): + fx_type = "底分型" if fx.get('is_bottom_fx', False) else "顶分型" + print(f" {i}. {fx.get('time', 'N/A')} - {fx_type} - 强度: {fx.get('fx_strength', 0):.2f} - 等级: {fx.get('fx_strength_level', 'N/A')}") + + print(f"\n💔 最弱分型 (Bottom 5):") + weakest_fx = sorted(data.get('klc_fx_info', []), + key=lambda x: x.get('fx_strength', 0))[:5] + + for i, fx in enumerate(weakest_fx, 1): + fx_type = "底分型" if fx.get('is_bottom_fx', False) else "顶分型" + print(f" {i}. {fx.get('time', 'N/A')} - {fx_type} - 强度: {fx.get('fx_strength', 0):.2f} - 等级: {fx.get('fx_strength_level', 'N/A')}") + + # 生成直方图 + try: + plt.figure(figsize=(12, 8)) + + # 主强度分布图 + plt.subplot(2, 2, 1) + plt.hist(fx_strengths, bins=20, alpha=0.7, color='blue', edgecolor='black') + plt.title('分型强度分布') + plt.xlabel('强度分数') + plt.ylabel('频次') + plt.axvline(np.mean(fx_strengths), color='red', linestyle='--', label=f'平均值: {np.mean(fx_strengths):.2f}') + plt.legend() + + # 顶分型 vs 底分型对比 + plt.subplot(2, 2, 2) + if top_strengths and bottom_strengths: + plt.hist([top_strengths, bottom_strengths], bins=15, alpha=0.7, + label=['顶分型', '底分型'], color=['red', 'green']) + plt.title('顶分型 vs 底分型强度对比') + plt.xlabel('强度分数') + plt.ylabel('频次') + plt.legend() + + # 强度等级饼图 + plt.subplot(2, 2, 3) + if level_counts: + labels = list(level_counts.keys()) + sizes = list(level_counts.values()) + colors = ['red', 'orange', 'yellow', 'lightgreen', 'green'][:len(labels)] + plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%') + plt.title('强度等级分布') + + # 时间序列图 + plt.subplot(2, 2, 4) + x_vals = range(len(fx_strengths)) + colors = ['red' if not fx.get('is_bottom_fx', False) else 'green' + for fx in data.get('klc_fx_info', [])] + plt.scatter(x_vals, fx_strengths, c=colors, alpha=0.6) + plt.title('分型强度时间序列 (红=顶分型, 绿=底分型)') + plt.xlabel('分型序号') + plt.ylabel('强度分数') + + plt.tight_layout() + plt.savefig('user_data/Chan/fx_strength_analysis.png', dpi=300, bbox_inches='tight') + print(f"\n📈 图表已保存到: user_data/Chan/fx_strength_analysis.png") + + except ImportError: + print("\n📈 matplotlib 未安装,跳过图表生成") + except Exception as e: + print(f"\n❌ 生成图表失败: {e}") + + else: + print("❌ 未找到分型强度数据") + +if __name__ == "__main__": + test_fx_strength() + test_fx_strength_distribution() \ No newline at end of file diff --git a/test_web_data.py b/test_web_data.py new file mode 100644 index 0000000..0bfb9d2 --- /dev/null +++ b/test_web_data.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +测试web接口返回的分型强度数据 +""" + +import requests +import json +import sys +import os + +# 添加父目录到系统路径以便导入模块 +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +def test_web_api(): + """测试web API接口返回的分型强度数据""" + + print('=== 测试Web API分型强度数据 ===') + + # 构建请求URL + base_url = "http://localhost:8123" + endpoint = "/api/analyze" + + params = { + 'symbol': 'SOL/USDT:USDT', + 'timeframe': '5m', + 'timezone': 'Asia/Shanghai' + } + + try: + print(f"发送请求到: {base_url}{endpoint}") + print(f"参数: {params}") + + # 发送请求 + response = requests.get(f"{base_url}{endpoint}", params=params, timeout=30) + + if response.status_code == 200: + data = response.json() + + # 检查是否有分型信息 + if 'klc_fx_info' in data: + fx_info = data['klc_fx_info'] + print(f"\n找到 {len(fx_info)} 个分型") + + # 显示前3个分型的详细信息 + for i, fx in enumerate(fx_info[:3]): + print(f"\n分型 #{i+1}:") + print(f" 时间: {fx.get('time', '无')}") + print(f" 价格: {fx.get('price', '无')}") + print(f" 分型类型: {fx.get('fx_type', '无')}") + print(f" 是否底分型: {fx.get('is_bottom', '无')}") + print(f" 强度分数: {fx.get('fx_strength', '缺失!')}") + print(f" 强度等级: {fx.get('fx_strength_level', '缺失!')}") + print(f" 是否强分型: {fx.get('is_strong_fx', '缺失!')}") + + # 检查强度数据是否完整 + missing_strength_count = 0 + for fx in fx_info: + if 'fx_strength' not in fx or 'fx_strength_level' not in fx or 'is_strong_fx' not in fx: + missing_strength_count += 1 + + if missing_strength_count == 0: + print(f"\n✅ 所有 {len(fx_info)} 个分型都包含完整的强度数据") + else: + print(f"\n❌ 有 {missing_strength_count} 个分型缺少强度数据") + + else: + print("\n❌ 响应中未找到分型信息 (klc_fx_info)") + + # 检查小周期分型信息 + if 'element_klc_fx_info' in data: + element_fx_info = data['element_klc_fx_info'] + print(f"\n找到 {len(element_fx_info)} 个小周期分型") + + # 检查小周期强度数据 + missing_element_strength_count = 0 + for fx in element_fx_info: + if 'fx_strength' not in fx or 'fx_strength_level' not in fx or 'is_strong_fx' not in fx: + missing_element_strength_count += 1 + + if missing_element_strength_count == 0: + print(f"✅ 所有 {len(element_fx_info)} 个小周期分型都包含完整的强度数据") + else: + print(f"❌ 有 {missing_element_strength_count} 个小周期分型缺少强度数据") + + else: + print(f"❌ 请求失败,状态码: {response.status_code}") + print(f"响应内容: {response.text}") + + except requests.exceptions.ConnectionError: + print("❌ 无法连接到服务器,请确保web服务正在运行 (python web/app.py)") + except Exception as e: + print(f"❌ 测试过程中出错: {e}") + +def print_usage(): + """打印使用说明""" + print("\n=== 使用说明 ===") + print("1. 确保web服务正在运行:") + print(" cd user_data/Chan/web") + print(" python app.py") + print("\n2. 然后运行此测试脚本:") + print(" python test_web_data.py") + print("\n3. 检查控制台输出,确认分型强度数据是否正确返回") + +if __name__ == "__main__": + test_web_api() + print_usage() \ No newline at end of file diff --git a/web/app.py b/web/app.py index 3dcb67a..70e91a4 100644 --- a/web/app.py +++ b/web/app.py @@ -220,11 +220,19 @@ def analyze_chan(df): klc_fx_info = [] for klc in klc_list: if hasattr(klc, 'klc_fx_type') and klc.klc_fx_type != Chan_KLC_FX.UNKNOWN: + # 计算分型强度 + fx_strength = klc.calculate_fx_strength() + fx_strength_level = klc.get_fx_strength_level() + is_strong_fx = klc.is_strong_fx() + klc_fx_info.append({ 'time': klc.end_time, 'price': klc.low if klc.fx == Chan_FX_TYPE.BOTTOM else klc.high, 'fx_type': str(klc.klc_fx_type).replace("Chan_KLC_FX.", ""), - 'is_bottom': klc.fx == Chan_FX_TYPE.BOTTOM + 'is_bottom': klc.fx == Chan_FX_TYPE.BOTTOM, + 'fx_strength': fx_strength, # 分型强度分数 (0-100) + 'fx_strength_level': fx_strength_level, # 分型强度等级 (极强/强/中等/弱/极弱) + 'is_strong_fx': is_strong_fx # 是否为强分型 }) return { @@ -479,9 +487,12 @@ def analyze(): # 添加K线分型信息 'klc_fx_info': [{ 'time': format_time_safely(point['time'], client_tz), - 'price': point['price'], + 'price': float(point['price']), 'fx_type': point['fx_type'], - 'is_bottom': point['is_bottom'] + 'is_bottom': bool(point['is_bottom']), + 'fx_strength': float(point['fx_strength']), # 分型强度分数 + 'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级 + 'is_strong_fx': bool(point['is_strong_fx']) # 是否为强分型 } for point in analysis_result['klc_fx_info']] }) else: @@ -546,9 +557,12 @@ def analyze(): # 添加小周期分型信息 result['element_klc_fx_info'] = [{ 'time': format_time_safely(point['time'], client_tz), - 'price': point['price'], + 'price': float(point['price']), 'fx_type': point['fx_type'], - 'is_bottom': point['is_bottom'] + 'is_bottom': bool(point['is_bottom']), + 'fx_strength': float(point['fx_strength']), # 分型强度分数 + 'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级 + 'is_strong_fx': bool(point['is_strong_fx']) # 是否为强分型 } for point in element_analysis['klc_fx_info']] print(f"小周期分析完成: {element_timeframe}, 笔数量: {len(result['element_bi_list'])}, {'仅元素数据' if elements_only else '包含主周期数据'}") diff --git a/web/templates/index.html b/web/templates/index.html index f0245e3..85b422a 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -2612,9 +2612,44 @@ const timeStr = param.time; const markers = [...buyMarkers, ...sellMarkers].filter(m => m.time === timeStr); - if (markers.length > 0) { - // 有买卖点标记,显示自定义提示 - const tooltips = markers.map(m => m.tooltip).join('
'); + // 同时检查分型标记 + const fxMarkers = (window.fxMarkers || []).filter(m => m.time === timeStr); + const allMarkers = [...markers, ...fxMarkers]; + + // 显示时区调试信息 + if (window.debugMode) { + const timezone = $('#timezone').val(); + const formattedTime = formatTimeWithTimezone(timeStr * 1000, timezone); + + // 获取当前价格 - 通过param.seriesPrices获取 + let priceInfo = ''; + if (param.seriesPrices && param.seriesPrices.size > 0) { + // 尝试从蜡烛图系列获取价格 + if (tvWidget.series.candleSeries && param.seriesPrices.get(tvWidget.series.candleSeries)) { + const price = param.seriesPrices.get(tvWidget.series.candleSeries); + priceInfo = `价格: ${price.toFixed(2)}`; + } + // 如果没有蜡烛图系列价格,尝试从线图系列获取 + else if (tvWidget.series.lineSeries && param.seriesPrices.get(tvWidget.series.lineSeries)) { + const price = param.seriesPrices.get(tvWidget.series.lineSeries); + priceInfo = `价格: ${price.toFixed(2)}`; + } + } + + // 仅记录最简短的调试信息 + console.debug(`十字线: ${timeStr} -> ${formattedTime} (${timezone})`); + + // 显示自定义时区工具提示,包含价格信息 + crosshairTooltip.innerHTML = `

` + + (priceInfo ? `
${priceInfo}
` : ''); + crosshairTooltip.style.display = 'block'; + crosshairTooltip.style.left = (param.point.x + 15) + 'px'; + crosshairTooltip.style.top = (param.point.y - 30) + 'px'; + } + + if (allMarkers.length > 0) { + // 有买卖点或分型标记,显示自定义提示 + const tooltips = allMarkers.map(m => m.tooltip).join('

'); tooltipElement.innerHTML = tooltips; tooltipElement.style.display = 'block'; tooltipElement.style.left = (param.point.x + 15) + 'px'; @@ -2626,28 +2661,53 @@ } else { // 隐藏提示 tooltipElement.style.display = 'none'; + crosshairTooltip.style.display = 'none'; } }); // 处理图表缩放、平移等事件,隐藏提示 mainChart.timeScale().subscribeVisibleTimeRangeChange(() => { tooltipElement.style.display = 'none'; + crosshairTooltip.style.display = 'none'; }); } } else { console.log('绘制买卖点 - 已禁用'); } - // 显示分型类型标签 + // 绘制分型类型标签 + console.log('=== 开始检查分型显示条件 ==='); + console.log('showKlcFxType勾选状态:', $('#showKlcFxType').is(':checked')); + console.log('currentData.klc_fx_info存在:', !!currentData.klc_fx_info); + console.log('currentData.klc_fx_info长度:', currentData.klc_fx_info ? currentData.klc_fx_info.length : 'undefined'); + if (currentData.klc_fx_info && currentData.klc_fx_info.length > 0) { + console.log('前3个分型数据样本:', currentData.klc_fx_info.slice(0, 3)); + } + if ($('#showKlcFxType').is(':checked') && currentData.klc_fx_info && currentData.klc_fx_info.length > 0) { console.log(`绘制K线分型类型标签,共${currentData.klc_fx_info.length}条`); + // 收集所有分型标记 + const allFxMarkers = []; + // 存储分型标记,用于tooltip功能 + const fxMarkers = []; + currentData.klc_fx_info.forEach(function(fx) { try { // 直接使用UTC时间戳(秒) const timestamp = Math.floor(new Date(fx.time).getTime() / 1000); const price = parseFloat(fx.price); + // 添加时间和价格调试信息 + console.log('处理分型:', { + 原始时间: fx.time, + 转换时间戳: timestamp, + 原始价格: fx.price, + 转换价格: price, + 时间有效: !isNaN(timestamp), + 价格有效: !isNaN(price) + }); + if (isNaN(timestamp) || isNaN(price)) { console.error('分型类型时间或价格转换错误:', fx.time, fx.price); return; @@ -2656,47 +2716,92 @@ // 确定颜色和位置 const color = fx.is_bottom ? '#28a745' : '#dc3545'; // 底分型绿色,顶分型红色 - // 创建标记系列 - const markerSeries = mainChart.addLineSeries({ - lastValueVisible: false, - priceLineVisible: false, + // 根据强度等级调整颜色强度 + let strengthColor = color; + if (fx.is_strong_fx) { + // 强分型使用更亮的颜色 + strengthColor = fx.is_bottom ? '#00ff00' : '#ff0000'; + } + + // 构建显示文本,包含分型类型和强度信息 + // 添加调试信息 + console.log('分型数据:', { + fx_type: fx.fx_type, + fx_strength: fx.fx_strength, + fx_strength_level: fx.fx_strength_level, + is_strong_fx: fx.is_strong_fx }); - // 设置文本标记 - markerSeries.setMarkers([ - { - time: timestamp, - position: fx.is_bottom ? 'belowBar' : 'aboveBar', - color: color, - shape: 'circle', - text: fx.fx_type, - size: 1 - } - ]); + const displayText = `${fx.fx_strength_level} ${fx.fx_strength.toFixed(1)}`; + console.log('显示文本:', displayText); - // 可选:添加更加明显的文本标签 - const textSeries = mainChart.addLineSeries({ - lastValueVisible: false, - priceLineVisible: false, - }); + // 添加标记配置调试 + const markerConfig = { + time: timestamp, + position: fx.is_bottom ? 'belowBar' : 'aboveBar', + color: strengthColor, + shape: fx.is_strong_fx ? 'square' : 'circle', + text: displayText, + size: fx.is_strong_fx ? 2 : 1 + }; + console.log('标记配置:', markerConfig); - textSeries.setData([{ - time: timestamp, - value: price + (fx.is_bottom ? -0.0005 * price : 0.0005 * price) // 小偏移,避免遮挡 - }]); + // 添加到标记数组 + allFxMarkers.push(markerConfig); + + // 创建分型标记对象,包含tooltip信息 + const fxMarker = { + time: timestamp, + tooltip: `
+ ${fx.is_bottom ? '底分型' : '顶分型'}: ${fx.fx_type}
+ 强度分数: ${fx.fx_strength}分
+ 强度等级: ${fx.fx_strength_level}
+ 是否强分型: ${fx.is_strong_fx ? '是' : '否'}
+ 价格: ${price.toFixed(4)}
+ 时间: ${fx.time} +
` + }; + + // 添加到分型标记数组 + fxMarkers.push(fxMarker); } catch (e) { console.error('绘制分型类型标签出错:', e); } }); + + // 一次性设置所有分型标记到主数据系列 + if (allFxMarkers.length > 0) { + console.log('一次性设置', allFxMarkers.length, '个分型标记'); + + // 暂存主周期分型标记,等待与小周期合并 + window.mainFxMarkers = allFxMarkers; + } else { + window.mainFxMarkers = []; + } + + // 将分型标记添加到全局markers中以支持tooltip功能 + if (window.fxMarkers) { + window.fxMarkers = [...window.fxMarkers, ...fxMarkers]; + } else { + window.fxMarkers = fxMarkers; + } + } else { console.log('绘制分型类型标签 - 已禁用或无数据'); + // 清空分型标记 + window.fxMarkers = []; + window.mainFxMarkers = []; } // 绘制小周期分型标记 if ($('#showElementKlcFxType').is(':checked') && currentData.element_klc_fx_info && currentData.element_klc_fx_info.length > 0) { console.log(`绘制小周期分型标记,共${currentData.element_klc_fx_info.length}条`); + // 收集所有小周期分型标记 + const allElementFxMarkers = []; + const elementFxMarkers = []; // 用于tooltip支持 + currentData.element_klc_fx_info.forEach(function(fx) { try { // 直接使用UTC时间戳(秒) @@ -2708,49 +2813,92 @@ return; } - // 小周期分型使用红色标记,不同于主周期分型 - const redColor = '#FF0000'; // 红色 + // 小周期分型使用不同的颜色和样式,与主周期区分 + let strengthColor = fx.is_bottom ? '#FF6B6B' : '#4ECDC4'; // 底分型用珊瑚红,顶分型用薄荷绿 + if (fx.is_strong_fx) { + // 强分型使用更亮的颜色 + strengthColor = fx.is_bottom ? '#FF0000' : '#00CED1'; + } - // 创建标记系列 - const markerSeries = mainChart.addLineSeries({ - lastValueVisible: false, - priceLineVisible: false, - }); + // 构建小周期分型显示文本 + const displayText = `${fx.fx_strength_level} ${fx.fx_strength.toFixed(1)}`; - // 设置文本标记 - markerSeries.setMarkers([ - { - time: timestamp, - position: fx.is_bottom ? 'belowBar' : 'aboveBar', - color: redColor, - shape: 'arrowUp', // 使用箭头形状,与主周期分型区分 - text: fx.is_bottom ? '↓' : '↑', // 显示箭头 - size: 1 - } - ]); + // 小周期分型标记配置 - 根据分型类型使用正确的箭头形状 + const markerConfig = { + time: timestamp, + position: fx.is_bottom ? 'belowBar' : 'aboveBar', + color: strengthColor, + shape: fx.is_bottom ? 'arrowUp' : 'arrowDown', // 底分型向上箭头,顶分型向下箭头 + text: displayText, + size: fx.is_strong_fx ? 2 : 1 + }; - // 为小周期分型添加明显的箭头标记 - const arrowSeries = mainChart.addLineSeries({ - lastValueVisible: false, - priceLineVisible: false, - lineWidth: 1, - color: redColor - }); + console.log('小周期分型标记配置:', markerConfig); + allElementFxMarkers.push(markerConfig); - // 计算标记位置,底分型在价格下方,顶分型在价格上方 - const offset = fx.is_bottom ? -0.001 * price : 0.001 * price; + // 创建小周期分型标记对象,包含tooltip信息 + const elementFxMarker = { + time: timestamp, + tooltip: `
+ 小周期${fx.is_bottom ? '底分型' : '顶分型'}: ${fx.fx_type}
+ 强度分数: ${fx.fx_strength}分
+ 强度等级: ${fx.fx_strength_level}
+ 是否强分型: ${fx.is_strong_fx ? '是' : '否'}
+ 价格: ${price.toFixed(4)}
+ 时间: ${fx.time} +
` + }; - arrowSeries.setData([{ - time: timestamp, - value: price + offset - }]); + // 添加到小周期分型标记数组 + elementFxMarkers.push(elementFxMarker); } catch (e) { console.error('绘制小周期分型标记出错:', e); } }); + + // 将小周期分型标记添加到全局markers中以支持tooltip功能 + if (window.fxMarkers) { + window.fxMarkers = [...window.fxMarkers, ...elementFxMarkers]; + } else { + window.fxMarkers = elementFxMarkers; + } + + // 合并主周期和小周期分型标记,统一设置到K线数据系列 + const combinedMarkers = [...(window.mainFxMarkers || []), ...allElementFxMarkers]; + if (combinedMarkers.length > 0) { + console.log('合并设置', combinedMarkers.length, '个分型标记(主周期:', (window.mainFxMarkers || []).length, '个,小周期:', allElementFxMarkers.length, '个)'); + + // 尝试在K线系列上设置合并后的标记 + if (showOriginalKline && tvWidget.series.candleSeries) { + tvWidget.series.candleSeries.setMarkers(combinedMarkers); + console.log('合并标记已设置到蜡烛图系列'); + } else if (!showOriginalKline && tvWidget.series.lineSeries) { + tvWidget.series.lineSeries.setMarkers(combinedMarkers); + console.log('合并标记已设置到线图系列'); + } else { + console.log('未找到主数据系列,无法设置标记'); + } + } + } else { console.log('绘制小周期分型标记 - 已禁用或无数据'); + + // 只设置主周期分型标记 + if (window.mainFxMarkers && window.mainFxMarkers.length > 0) { + console.log('仅设置', window.mainFxMarkers.length, '个主周期分型标记'); + + // 尝试在K线系列上设置标记 + if (showOriginalKline && tvWidget.series.candleSeries) { + tvWidget.series.candleSeries.setMarkers(window.mainFxMarkers); + console.log('主周期标记已设置到蜡烛图系列'); + } else if (!showOriginalKline && tvWidget.series.lineSeries) { + tvWidget.series.lineSeries.setMarkers(window.mainFxMarkers); + console.log('主周期标记已设置到线图系列'); + } else { + console.log('未找到主数据系列,无法设置标记'); + } + } } // 调整所有图表以适应数据 @@ -2767,13 +2915,13 @@ tvWidget.state.isInitialized = true; // 绑定同步事件 - bindSyncEvents(); + bindSyncEvents(mainChartContainer, volumeChartContainer, macdChartContainer, mainChart, volumeChart, macdChart, showMacd); // 设置图表默认时间范围 setDefaultTimeRange(); // 添加买卖点提示 - setupTooltip(); + setupTooltip(mainChart); // 显示买卖点 if ($('#showTradePoints').is(':checked')) { @@ -2932,7 +3080,10 @@ } } - function bindSyncEvents() { + function bindSyncEvents(mainChartContainer, volumeChartContainer, macdChartContainer, mainChart, volumeChart, macdChart, showMacd) { + // 防止同步过程中的无限循环 + let syncInProgress = false; + // 同步图表的时间范围 function syncCharts(sourceChart, sourceContainer) { // 防止无限循环 @@ -2989,9 +3140,13 @@ }; // 添加事件监听 - addChartSyncEvents(mainChartContainer, mainChart); - addChartSyncEvents(volumeChartContainer, volumeChart); - if (showMacd && macdChart) { + if (mainChartContainer && mainChart) { + addChartSyncEvents(mainChartContainer, mainChart); + } + if (volumeChartContainer && volumeChart) { + addChartSyncEvents(volumeChartContainer, volumeChart); + } + if (showMacd && macdChartContainer && macdChart) { addChartSyncEvents(macdChartContainer, macdChart); } @@ -3003,19 +3158,23 @@ // 窗口大小变化时重绘图表 window.addEventListener('resize', () => { // 调整主图大小 - mainChart.applyOptions({ - width: mainChartContainer.clientWidth, - height: mainChartContainer.clientHeight - }); + if (mainChart && mainChartContainer) { + mainChart.applyOptions({ + width: mainChartContainer.clientWidth, + height: mainChartContainer.clientHeight + }); + } // 调整成交量图大小 - volumeChart.applyOptions({ - width: volumeChartContainer.clientWidth, - height: volumeChartContainer.clientHeight - }); + if (volumeChart && volumeChartContainer) { + volumeChart.applyOptions({ + width: volumeChartContainer.clientWidth, + height: volumeChartContainer.clientHeight + }); + } // 调整MACD图大小 - if (showMacd && macdChart) { + if (showMacd && macdChart && macdChartContainer) { macdChart.applyOptions({ width: macdChartContainer.clientWidth, height: macdChartContainer.clientHeight @@ -3027,7 +3186,7 @@ }); } - function setupTooltip() { + function setupTooltip(mainChart, buyMarkers = [], sellMarkers = []) { // 调试变量 window.debugMode = true; @@ -3051,65 +3210,71 @@ document.body.appendChild(crosshairTooltip); // 添加鼠标悬停事件显示提示 - mainChart.subscribeCrosshairMove(param => { - if (param.time && param.point) { - const timeStr = param.time; - const markers = [...buyMarkers, ...sellMarkers].filter(m => m.time === timeStr); - - // 显示时区调试信息 - if (window.debugMode) { - const timezone = $('#timezone').val(); - const formattedTime = formatTimeWithTimezone(timeStr * 1000, timezone); + if (mainChart) { + mainChart.subscribeCrosshairMove(param => { + if (param.time && param.point) { + const timeStr = param.time; + const markers = [...buyMarkers, ...sellMarkers].filter(m => m.time === timeStr); - // 获取当前价格 - 通过param.seriesPrices获取 - let priceInfo = ''; - if (param.seriesPrices && param.seriesPrices.size > 0) { - // 尝试从蜡烛图系列获取价格 - if (tvWidget.series.candleSeries && param.seriesPrices.get(tvWidget.series.candleSeries)) { - const price = param.seriesPrices.get(tvWidget.series.candleSeries); - priceInfo = `价格: ${price.toFixed(2)}`; - } - // 如果没有蜡烛图系列价格,尝试从线图系列获取 - else if (tvWidget.series.lineSeries && param.seriesPrices.get(tvWidget.series.lineSeries)) { - const price = param.seriesPrices.get(tvWidget.series.lineSeries); - priceInfo = `价格: ${price.toFixed(2)}`; + // 同时检查分型标记 + const fxMarkers = (window.fxMarkers || []).filter(m => m.time === timeStr); + const allMarkers = [...markers, ...fxMarkers]; + + // 显示时区调试信息 + if (window.debugMode) { + const timezone = $('#timezone').val(); + const formattedTime = formatTimeWithTimezone(timeStr * 1000, timezone); + + // 获取当前价格 - 通过param.seriesPrices获取 + let priceInfo = ''; + if (param.seriesPrices && param.seriesPrices.size > 0) { + // 尝试从蜡烛图系列获取价格 + if (tvWidget.series.candleSeries && param.seriesPrices.get(tvWidget.series.candleSeries)) { + const price = param.seriesPrices.get(tvWidget.series.candleSeries); + priceInfo = `价格: ${price.toFixed(2)}`; + } + // 如果没有蜡烛图系列价格,尝试从线图系列获取 + else if (tvWidget.series.lineSeries && param.seriesPrices.get(tvWidget.series.lineSeries)) { + const price = param.seriesPrices.get(tvWidget.series.lineSeries); + priceInfo = `价格: ${price.toFixed(2)}`; + } } + + // 仅记录最简短的调试信息 + console.debug(`十字线: ${timeStr} -> ${formattedTime} (${timezone})`); + + // 显示自定义时区工具提示,包含价格信息 + crosshairTooltip.innerHTML = `
时间: ${formattedTime}
` + + (priceInfo ? `
${priceInfo}
` : ''); + crosshairTooltip.style.display = 'block'; + crosshairTooltip.style.left = (param.point.x + 15) + 'px'; + crosshairTooltip.style.top = (param.point.y - 30) + 'px'; } - // 仅记录最简短的调试信息 - console.debug(`十字线: ${timeStr} -> ${formattedTime} (${timezone})`); - - // 显示自定义时区工具提示,包含价格信息 - crosshairTooltip.innerHTML = `
时间: ${formattedTime}
` + - (priceInfo ? `
${priceInfo}
` : ''); - crosshairTooltip.style.display = 'block'; - crosshairTooltip.style.left = (param.point.x + 15) + 'px'; - crosshairTooltip.style.top = (param.point.y - 30) + 'px'; - } - - if (markers.length > 0) { - // 有买卖点标记,显示自定义提示 - const tooltips = markers.map(m => m.tooltip).join('
'); - tooltipElement.innerHTML = tooltips; - tooltipElement.style.display = 'block'; - tooltipElement.style.left = (param.point.x + 15) + 'px'; - tooltipElement.style.top = (param.point.y + 15) + 'px'; + if (allMarkers.length > 0) { + // 有买卖点或分型标记,显示自定义提示 + const tooltips = allMarkers.map(m => m.tooltip).join('

'); + tooltipElement.innerHTML = tooltips; + tooltipElement.style.display = 'block'; + tooltipElement.style.left = (param.point.x + 15) + 'px'; + tooltipElement.style.top = (param.point.y + 15) + 'px'; + } else { + // 隐藏提示 + tooltipElement.style.display = 'none'; + } } else { // 隐藏提示 tooltipElement.style.display = 'none'; + crosshairTooltip.style.display = 'none'; } - } else { - // 隐藏提示 + }); + + // 处理图表缩放、平移等事件,隐藏提示 + mainChart.timeScale().subscribeVisibleTimeRangeChange(() => { tooltipElement.style.display = 'none'; crosshairTooltip.style.display = 'none'; - } - }); - - // 处理图表缩放、平移等事件,隐藏提示 - mainChart.timeScale().subscribeVisibleTimeRangeChange(() => { - tooltipElement.style.display = 'none'; - crosshairTooltip.style.display = 'none'; - }); + }); + } } // 辅助函数:使用指定时区格式化时间戳