From 290b4daa3fee4964f0d53bb4592ff2f9d53289b2 Mon Sep 17 00:00:00 2001 From: Caisking Date: Tue, 3 Jun 2025 18:55:03 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E8=A1=80=E5=8E=8BSlice?= =?utf8?q?=EF=BC=9BUI=E5=BE=85=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wearable/fd230/nativeapp/CMakeLists.txt | 8 + .../nativelauncher/include/AppViewIDs.h | 1 + .../nativelauncher/include/NativeLauncher.h | 1 + .../nativelauncher/src/NativeLauncher.cpp | 17 + .../include/BPDetectionPresenter.h | 59 ++++ .../bloodpressure/include/BPDetectionView.h | 65 ++++ .../bloodpressure/include/BPMainPresenter.h | 44 +++ .../bloodpressure/include/BPMainView.h | 53 +++ .../nativeui/bloodpressure/include/BPModel.h | 81 +++++ .../src/BPDetectionPresenter.cpp | 122 +++++++ .../bloodpressure/src/BPDetectionView.cpp | 201 ++++++++++++ .../bloodpressure/src/BPMainPresenter.cpp | 157 +++++++++ .../nativeui/bloodpressure/src/BPMainView.cpp | 247 ++++++++++++++ .../nativeui/bloodpressure/src/BPModel.cpp | 304 ++++++++++++++++++ tools/image_converter_tool/test/w9/BP/bg.png | Bin 0 -> 73559 bytes 15 files changed, 1360 insertions(+) create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionPresenter.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionPresenter.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPModel.cpp create mode 100644 tools/image_converter_tool/test/w9/BP/bg.png diff --git a/code/sdk/application/wearable/fd230/nativeapp/CMakeLists.txt b/code/sdk/application/wearable/fd230/nativeapp/CMakeLists.txt index 5d37a8208..3b4273e56 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230/nativeapp/CMakeLists.txt @@ -26,6 +26,7 @@ set(PRIVATE_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/include ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/clock/include ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/include + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/include ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/include ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/include ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/include @@ -228,6 +229,13 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodDetectionView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodDetectionPresenter.cpp + #BloodPressure + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/src/BPMainView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/src/BPMainPresenter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/src/BPModel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/src/BPDetectionView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodpressure/src/BPDetectionPresenter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothPresenter.cpp diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h index 586dc5a3f..4d12f5bcc 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h @@ -91,6 +91,7 @@ typedef enum : uint16_t VIEW_SET_DIAL, // 切换表盘 VIEW_SET_HEART, // 设置心率周期检测 VIEW_CODED_LOCK, // 密码锁 + VIEW_BLOOD_PRESSURE, // 血压监测 /* ----------------------------------- 训练 ----------------------------------- */ VIEW_TRAINING, // 训练 VIEW_TRAININGNOMAL, // 正常训练开始界面(除骑行,健走,跑步外) diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/NativeLauncher.h b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/NativeLauncher.h index c6eb0cc90..92e808e97 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/NativeLauncher.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/NativeLauncher.h @@ -74,6 +74,7 @@ namespace OHOS /* --------------------------------界面------------------------------------ */ void InitRotateSlice(void); void InitBloodSlice(void); + void InitBloodPressureSlice(void); void InitCheckAbnormalSlice(void); void InitCheckInvalidSlice(void); void InitHeartResultSlice(void); diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/src/NativeLauncher.cpp index 1c8729d78..9459599f7 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/src/NativeLauncher.cpp @@ -108,6 +108,9 @@ #include "bloodoxygen/include/BloodDetectionPresenter.h" #include "bloodoxygen/include/BloodResultView.h" #include "bloodoxygen/include/BloodResultPresenter.h" +/*血压检测*/ +#include "bloodpressure/include/BPMainView.h" +#include "bloodpressure/include/BPMainPresenter.h" /*心率监测*/ #include "heartrate/include/HeartDetectionView.h" #include "heartrate/include/HeartDetectionPresenter.h" @@ -445,6 +448,8 @@ namespace OHOS /*血氧检测*/ {VIEW_BLOOD_CHECK, &NativeLauncher::InitBloodCheckSlice}, {VIEW_BLOOD_RESULT, &NativeLauncher::InitBloodResultSlice}, + /*血压检测*/ + {VIEW_BLOOD_PRESSURE, &NativeLauncher::InitBloodPressureSlice}, /*心率检测*/ {VIEW_HEART_CHECK, &NativeLauncher::InitHeartCheckSlice}, {VIEW_HEART_RESULT, &NativeLauncher::InitHeartResultSlice}, @@ -1322,6 +1327,18 @@ namespace OHOS } NativeAbility::GetInstance().AddSliceProxy(VIEW_BLOOD_RESULT, bloodResultView); } + // 血压监测界面 + void NativeLauncher::InitBloodPressureSlice(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodPressureSlice"); + SliceProxy *bloodPressureView = new AbilitySliceProxy; + if (bloodPressureView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bloodPressureView is nullptr"); + return; + } + NativeAbility::GetInstance().AddSliceProxy(VIEW_BLOOD_PRESSURE, bloodPressureView); + } // 心率监测界面 void NativeLauncher::InitHeartCheckSlice(void) { diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionPresenter.h new file mode 100644 index 000000000..79281efc6 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionPresenter.h @@ -0,0 +1,59 @@ +/*** + * @Date: 2024-07-29 15:33:59 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-29 16:28:08 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionPresenter.h + */ + +#ifndef BP_DETECTION_PRESENTER_H +#define BP_DETECTION_PRESENTER_H + +#include "Presenter.h" +#include "components/ui_list.h" +#include "components/ui_view.h" +#include "KeyInputListener.h" +#include "ModelListenerSample.h" +#include "bloodpressure/include/BPDetectionView.h" +#include "power_display_service.h" + +#define BP_KEEP_TIME 60000 // 60s + +namespace OHOS +{ + + class BPDetectionView; + class BPDetectionPresenter : public Presenter, + public ModelListenerSample, + public UIView::OnClickListener, + public UIView::OnDragListener, + public RootView::OnKeyActListener, + public ListScrollListener + { + public: + BPDetectionPresenter(); + ~BPDetectionPresenter() override; + static BPDetectionPresenter *GetInstance(void); + + void OnStart() override; + void OnResume() override; + void OnStop() override; + void OnTickEvent() override; + void Notify() override {} + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 + + void NavigateBack(void); + + private: + void ResetTickTimer(void); + uint64_t startTime{0}; + bool BPCountEvent{false}; + bool BPCheckState{false}; + + const power_display_svr_api_t *display_api = power_display_svr_get_api(); + uint32_t display_time; + }; +} + +#endif // BP_DETECTION_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionView.h new file mode 100644 index 000000000..5003f28fd --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionView.h @@ -0,0 +1,65 @@ +/*** + * @Date: 2024-07-29 15:38:56 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-29 15:42:12 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPDetectionView.cpp + */ +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: bloodDetection view + * Author: + * Create: 2021-08-01 + */ + +#ifndef BP_Detection_VIEW_H +#define BP_Detection_VIEW_H + +#include "View.h" +#include "BaseView.h" +#include "wearable_log.h" +#include "UiConfig.h" +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_label_button.h" +#include "components/ui_image_animator.h" +#include "components/ui_circle_progress.h" +#include "components/ui_view_group.h" + + +#include "bloodpressure/include/BPDetectionPresenter.h" + +#include "components/ui_scroll_view.h" +#include "components/ui_label_button_ext.h" + +#include "power_display_service.h" + +#define STOPCHECK "stop_check" +namespace OHOS +{ + class BPDetectionView : public View + { + public: + BPDetectionView(); + virtual ~BPDetectionView(); + void OnStop() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStart() override; + static BPDetectionView *GetInstance(void); + + bool BPDetectionViewInit(); + UIImageAnimatorView *GetImageAnimator(void); + void UpShowBPText(void); + + private: + UIImageAnimatorView *imageAnimator{nullptr}; + UILabelExt *titleLabel{nullptr}; + UILabel *Spo2Text{nullptr}; + UILabelButtonExt *testButton{nullptr}; + + uint32_t spo2_; + }; +} + +#endif // 血氧主界面 \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h new file mode 100644 index 000000000..90e5a44d7 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h @@ -0,0 +1,44 @@ + + +#ifndef BP_RESULT_PRESENTER_H +#define BP_RESULT_PRESENTER_H + +#include "Presenter.h" +#include "ModelListenerSample.h" +#include "components/ui_circle_progress.h" +#include "ohos_types.h" +#include "KeyInputListener.h" +#include "common/key_code.h" +#include "bloodpressure/include/BPMainView.h" + +namespace OHOS +{ + static constexpr const char *CLICK_BP = "clickblood"; // 血氧检测 + + class BPMainView; + class BPMainPresenter : public Presenter, + public UIView::OnClickListener, + public RootView::OnKeyActListener, + public UIView::OnDragListener + { + public: + BPMainPresenter(); + virtual ~BPMainPresenter(); + static BPMainPresenter *GetInstance(void); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnDragEnd(UIView &view, const DragEvent &event) override; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 + + uint32_t GetCurrentTime(); + int GetTDOA(uint32_t new_time, uint32_t old_time); + }; +} + +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainView.h new file mode 100644 index 000000000..e6b366723 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPMainView.h @@ -0,0 +1,53 @@ + + +#ifndef BP_MAIN_VIEW_H +#define BP_MAIN_VIEW_H + +#include "View.h" +#include "BaseView.h" +#include "wearable_log.h" +#include "UiConfig.h" +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_label_button.h" +#include "components/ui_image_animator.h" +#include "components/ui_circle_progress.h" +#include "components/ui_view_group.h" +#include "bloodpressure/include/BPMainPresenter.h" + +#include "components/ui_scroll_view.h" +#include "components/ui_label_button_ext.h" +namespace OHOS +{ + class BPMainPresenter; + class BPMainView : public View + { + public: + BPMainView(); + virtual ~BPMainView(); + static BPMainView *GetInstance(void); + + void OnStop() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStart() override; + + bool BPMainViewInit(); + void UpSPO2Text(void); + + void DeInit(); + bool AddButton(); + bool InitLable(); + bool Initbackground(); + + private: + UIImageView *background = nullptr; + UILabelExt *titleLabel = nullptr; + UILabelExt *timeLabel = nullptr; + UILabel *bloodLabel = nullptr; + UILabelButtonExt *checkButton{nullptr}; + }; +} + +#endif // 血氧主界面 \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h new file mode 100644 index 000000000..5f0f91033 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h @@ -0,0 +1,81 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-05 14:58:21 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h + */ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-31 10:38:26 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/include/BPModel.h + */ + +#ifndef BP_MODEL_H +#define BP_MODEL_H + +#include +#include + +namespace OHOS +{ + // 血氧检测状态 + enum class BPState + { + End = 0, + Start, + }; + enum class BPMain + { + NOT_TESTED = 0, // 未检测 + SUCCESS, // 检测成功 + NOT_WORN, // 未佩戴检测 + TIMEOUT, // 检测超时 + HIGH_RESULT, // 检测结果过高 + LOW_RESULT, // 检测结果过低 + INVALID_DATA // 无效数据 + }; + class BPModel + { + public: + BPModel(); + ~BPModel(); + static BPModel *GetInstance(); + + void UpSPO2data(uint8_t spo2); + uint16_t GetSPO2data(); + uint16_t GetShowSPO2data(); + + uint32_t GetCheckTime(); + void SetCheckTime(uint32_t time); + void SetWearStatus(int32_t wear); + void SetMain(BPMain result); + BPMain GetMain(); + + void BP_Stop(void); + void BP_Start(void); + void BP_Save(void); + void BP_Main(void); + + void BP_Control(BPState state); + void ClearDisplayData(); + void CleanAllData(); + + private: + uint16_t displayspo2; + uint16_t currentspo2; + uint32_t timestamp_ms; + int32_t wear_; + + bool sensorstate{false}; + bool startspo2{false}; + + uint16_t unwear_counter_; // 无效佩戴计数器 + uint16_t valid_counter_; // 有效数计数器 + uint16_t disvalid_counter_; // 无效数计数器 + BPMain bloodresult_ = BPMain::NOT_TESTED; // 检测结果 + bool initstatus; + }; +} + +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionPresenter.cpp new file mode 100644 index 000000000..1dcca0026 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionPresenter.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: BPDetectionPresenter.cpp + * Author: + * Create: 2021-11-23 + */ + +#include "bloodpressure/include/BPDetectionView.h" +#include "bloodpressure/include/BPDetectionPresenter.h" + +#include "AppViewIDs.h" +#include "NativeAbility.h" +#include "common/key_code.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "displaybrightness/include/DisplayBrightnessModel.h" +#include "bloodpressure/include/BPModel.h" +#include "MainModel.h" + +namespace OHOS +{ + + // 当前Presenter属性实例化的内存指针 + static BPDetectionPresenter *g_pBPDetectionPresenter = nullptr; + + BPDetectionPresenter::BPDetectionPresenter() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionPresenter::BPDetectionPresenter"); + g_pBPDetectionPresenter = this; + + // display_api->set_screen_set_keepon_timeout(-1); // 设置常亮 + ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); + ResetTickTimer(); + } + + BPDetectionPresenter::~BPDetectionPresenter() + { + // display_api->set_screen_set_keepon_timeout(0); // 恢复 + ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); + g_pBPDetectionPresenter = nullptr; + } + BPDetectionPresenter *BPDetectionPresenter::GetInstance() + { + return g_pBPDetectionPresenter; + } + void BPDetectionPresenter::NavigateBack() + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + void BPDetectionPresenter::OnStart() + { + Presenter::OnStart(); + if (!BPCheckState) + { + BPModel::GetInstance()->BP_Start(); + BPCheckState = true; + } + } + void BPDetectionPresenter::OnResume(void) + { + } + + void BPDetectionPresenter::OnStop(void) + { + if (BPCheckState) + { + BPModel::GetInstance()->BP_Stop(); + BPCheckState = false; + } + } + + bool BPDetectionPresenter::OnDrag(UIView &view, const DragEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionPresenter::OnDrag"); + UNUSED(view); + if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && (event.GetDeltaX() > X_DRAG_OFFSET) && + (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) + { + NavigateBack(); + } + return true; + } + + bool BPDetectionPresenter::OnClick(UIView &view, const ClickEvent &event) + { + if (strcmp(view.GetViewId(), STOPCHECK) == 0) + { + NavigateBack(); + } + return true; + } + + void BPDetectionPresenter::OnTickEvent() + { + // 更新显示血氧数据 + // BPDetectionView::GetInstance()->UpShowBPText(); 屏蔽动态显示实时数据 + uint64_t current_time = osKernelGetTick2ms(); + if ((startTime != 0) && (current_time - startTime >= BP_KEEP_TIME)) + { + // 超时处理 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 超时处理 BP_KEEP_TIME: %lld", current_time - startTime); + BPModel::GetInstance()->SetMain(BPMain::TIMEOUT); + BPModel::GetInstance()->BP_Stop(); + } + } + void BPDetectionPresenter::ResetTickTimer(void) + { + startTime = osKernelGetTick2ms(); + } + // 增加按键事件 + bool BPDetectionPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0) + { + NavigateBack(); + } + return true; + } +} diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionView.cpp new file mode 100644 index 000000000..8696302ff --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionView.cpp @@ -0,0 +1,201 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-29 15:35:06 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPDetectionView.cpp + */ +#include "UiConfig.h" +#include "wearable_log.h" +#include "BPDetectionView.h" +#include "BPModel.h" +#include "ui_image_animator.h" +#include "BPDetectionView.h" +#include "ui_resource_string.h" +#include "power_display_service.h" +#include "uicomponents/UIComponents.h" +namespace OHOS +{ + // 动态刷新设置 + static constexpr uint16_t IMAGE_SIZE = 180; + static constexpr uint16_t IMAGE_POSITION_Y = 143; + static constexpr uint16_t IMAGE_POSITION_X = 143; + static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 30; + static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 40; + + static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = { + {PNG_CHECK_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_CHECK_TIME_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + }; + + static BPDetectionView *g_pBPCheckView = nullptr; + BPDetectionView::BPDetectionView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPBandoffView::BPBandoffView"); + g_pBPCheckView = this; + } + BPDetectionView::~BPDetectionView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionView::~BPDetectionView"); + if(container_) + container_->RemoveAll(); + if(titleLabel) + { + delete titleLabel; + titleLabel = nullptr; + } + if(testButton) + { + delete testButton; + testButton = nullptr; + } + if(imageAnimator) + { + imageAnimator->Stop(); + delete imageAnimator; + imageAnimator = nullptr; + } + if(Spo2Text) + { + delete Spo2Text; + Spo2Text = nullptr; + } + g_pBPCheckView = nullptr; + } + BPDetectionView *BPDetectionView::GetInstance(void) + { + return g_pBPCheckView; + } + UIImageAnimatorView *BPDetectionView::GetImageAnimator() + { + return imageAnimator; + } + + /*更新显示数据*/ + void BPDetectionView::UpShowBPText() + { + uint16_t spo2_ = BPModel::GetInstance()->GetShowSPO2data(); + std::string bloodpressureStr = std::to_string(spo2_); + if (Spo2Text != nullptr) + Spo2Text->SetText(bloodpressureStr.c_str()); + } + /*初始化检测界面*/ + bool BPDetectionView::BPDetectionViewInit() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPDetectionViewInit is begin"); + /*初始化title*/ + InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_CHECKON, DEFAULT_VECTOR_FONT_FILENAME, 30); + container_->Add(titleLabel); + + /* -------------------------------------------------------------------------- */ + imageAnimator = new UIImageAnimatorView(); + if (imageAnimator == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPBandoffView::new UIImageAnimatorView fail"); + return false; + } + imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood, DETECTION_IMAGE_ANIMATORVIEW_SIZE, DETECTION_IMAGE_ANIMATORVIEW_SPEED); + imageAnimator->SetRepeat(true); + container_->Add(imageAnimator); + + /* -------------------------------------------------------------------------- */ + /*初始化血氧值label*/ + // InitUILabel(Spo2Text, 83, 83, 300, 300, "bloodtext", "--", GILROY_BOLD_FONT, 140); + // container_->Add(Spo2Text); + + /* -------------------------------------------------------------------------- */ + InitButtonExt(testButton, 93, 330, 280, 90, STOPCHECK, STR_CHECKSTOP, 30); + container_->Add(testButton); + + /* -------------------------------------------------------------------------- */ + UIView::OnClickListener *clickLeftListener = (UIView::OnClickListener *)OHOS::BPDetectionPresenter::GetInstance(); + if (clickLeftListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPDetectionView::new clickLeftListener fail"); + return false; + } + testButton->SetOnClickListener(clickLeftListener); + /* -------------------------------------------------------------------------- */ + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPDetectionViewInit is ok"); + return true; + } + void BPDetectionView::OnStart() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPDetectionView::OnStart"); + View::OnStart(); + + SetContainerView(new UIViewGroup()); + container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); + + if (!BPDetectionViewInit()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPDetectionView::InitBPView fail"); + } + + SetContainerView(container_); + + container_->SetDraggable(true); + container_->SetTouchable(true); + container_->SetOnDragListener(presenter_); + + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BPDetectionPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); + } + void BPDetectionView::OnSetUpView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionView::OnSetUpView"); + View::OnSetUpView(); + if (imageAnimator != nullptr) + { + imageAnimator->Start(); + } + Draw(); + } + void BPDetectionView::OnTearDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionView::OnTearDownView"); + View::OnTearDownView(); + return; + } + + void BPDetectionView::OnStop() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectionView::OnStop"); + View::OnStop(); + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } + return; + } +} diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp new file mode 100644 index 000000000..2a11fca56 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: bloodOxygen view + * Author: + * Create: 2021-08-01 + */ + +#include "bloodpressure/include/BPMainPresenter.h" +#include "common/task_manager.h" +#include "BPModel.h" + +#include "bloodpressure/include/BPDetectionView.h" +#include "bloodpressure/include/BPMainView.h" + +#include "components/ui_label.h" +#include "components/ui_label_ext.h" + +#include "ChangeSliceListener.h" +#include "broadcast_service.h" +#include +#include "iostream" +#include +#include +#include +#include +#include "wearable_log.h" +#include "cmsis_os.h" +#include "securec.h" +#include "broadcast_service.h" +#include "graphic_service.h" +#include +#include +#include + +#include "ppg_service.h" +#include "displaybrightness/include/DisplayBrightnessModel.h" +#include "power_display_service.h" +#include "custom_utils.h" +#include "cywee_service.h" +#include "battery_hal.h" + +#include "heart_blood/health_service/health_service.h" +#include "gfx_utils/mem_check.h" + +#define BPKEYABLE 1 +namespace OHOS +{ + static constexpr uint16_t PROGRESS_VALUE_MIN = 0; + static constexpr uint16_t PROGRESS_VALUE_MAX = 10; + + static BPMainPresenter *g_pBPMainPresenter; + /* -------------------------------------------------------------------------- */ + // 获取当前的时间戳 + uint32_t BPMainPresenter::GetCurrentTime() + { + uint32_t time; + if (uapi_get_timestampe_ss(&time) != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp"); + return 0; + } + return time; + } + + // 获取时间差,现在传进来的是两个时间戳 + int BPMainPresenter::GetTDOA(uint32_t new_time, uint32_t old_time) + { + if (new_time == old_time || old_time > new_time) + { + return 0; + } + int time_diff_seconds = new_time - old_time; + // 转换为分钟的差值 + int time_diff_minutes = time_diff_seconds / 60; + return time_diff_minutes; + } + /* -------------------------------------------------------------------------- */ + BPMainPresenter::BPMainPresenter() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainPresenter::new BPMainPresenter"); + g_pBPMainPresenter = this; +#ifdef MEM_CHECK + MemCheck::GetInstance()->EnableLeakCheck(true); +#endif + } + BPMainPresenter::~BPMainPresenter() + { + g_pBPMainPresenter = nullptr; +#ifdef MEM_CHECK + MemCheck::GetInstance()->EnableLeakCheck(false); +#endif + } + BPMainPresenter *BPMainPresenter::GetInstance() + { + return g_pBPMainPresenter; + } + void BPMainPresenter::OnStart() + { + Presenter::OnStart(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPMainPresenter::On Start "); + } + void BPMainPresenter::OnPause(void) {} + + void BPMainPresenter::OnResume(void) {} + + void BPMainPresenter::OnStop(void) {} + + bool BPMainPresenter::OnDrag(UIView &view, const DragEvent &event) + { + return true; + } + bool BPMainPresenter::OnDragEnd(UIView &view, const DragEvent &event) + { + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) + { + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + return true; + } + return false; + } + bool BPMainPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && + keyState == 1 && uapi_get_screen_state() == 0) + { + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + return true; + } + + bool BPMainPresenter::OnClick(UIView &view, const ClickEvent &event) + { + if (strcmp(view.GetViewId(), CLICK_BP) == 0) + { + // 如果正在充电进入提醒界面 + if (get_charge_stat()) + { + HealthState highHealthState; + highHealthState.checkType = CHARGE; + HealthService::GetInstance()->SetHealthCurrent(highHealthState); + NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID, TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + else + { + // NativeAbility::GetInstance().EnterSlice(VIEW_BP_CHECK, TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPPresenter::OnClick"); + return true; + } + +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainView.cpp new file mode 100644 index 000000000..dcebfe55b --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainView.cpp @@ -0,0 +1,247 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-07-31 14:36:25 + * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPMainView.cpp + */ + +#include "common/image_cache_manager.h" +#include "ui_resource_image.h" +#include +#include "components/ui_button.h" +#include "MainViewSample.h" +#include "components/ui_view_group.h" +#include "DialModelSPO2.h" +#include "DialModelHeartRate.h" +#include "BPModel.h" + +#include "UiConfig.h" +#include "uicomponents/UIComponents.h" +#include "MainPresenterSample.h" + +#include "bloodpressure/include/BPMainPresenter.h" +#include "bloodpressure/include/BPMainView.h" +namespace OHOS +{ + static BPMainView *g_pBPMainView{nullptr}; + static const char *BPBACKPATH = "/user/res/BP/beijing.bin"; + + BPMainView::BPMainView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::BPMainView"); + g_pBPMainView = this; + } + + BPMainView::~BPMainView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::~BPMainView"); + DeInit(); + g_pBPMainView = nullptr; + } + + BPMainView *BPMainView::GetInstance() + { + return g_pBPMainView; + } + + /* -------------------------------------------------------------------------- */ + void BPMainView::UpSPO2Text() + { + if (bloodLabel == nullptr || timeLabel == nullptr) + return; + + // 更新血氧数据 + uint16_t spo2 = BPModel::GetInstance()->GetSPO2data(); + if (spo2 != 0) // 判断是否为默认数据 + { + // 更新数据 + std::string bloodpressureStr = std::to_string(spo2) + "%"; + bloodLabel->SetText(bloodpressureStr.c_str()); + + // 获取时间差 + uint32_t time = BPMainPresenter::GetInstance()->GetCurrentTime(); + uint32_t check_time = BPModel::GetInstance()->GetCheckTime(); + int time_diff = BPMainPresenter::GetInstance()->GetTDOA(time, check_time); + + if (time_diff == 0) + { + timeLabel->SetTextId(STR_CHECKNEW); + } + else if (time_diff <= 60) + { + UpdateLabel(timeLabel, time_diff, STR_CHECKTIME); + } + else + { + timeLabel->SetTextId(STR_CHECKLONG); + } + } + else + { + bloodLabel->SetText("--"); + timeLabel->SetTextId(STR_CHECKNO); + } + } + + /* -------------------------------------------------------------------------- */ + /*** + * @description: + * @return 添加按键是否成功 + */ + bool BPMainView::AddButton() + { + InitButtonExt(checkButton, 118, 336, 230, 80, CLICK_BP, STR_CHECK, 30); + checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffFF5A36); // 设置按键颜色 + // 设置按键监听 + UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::BPMainPresenter::GetInstance(); + checkButton->SetOnClickListener(clickListener); + + container_->Add(checkButton); + return true; + } + /*** + * @description: + * @return 初始化标签是否成功 + */ + bool BPMainView::InitLable() + { + /*初始化title*/ + // InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_BP, DEFAULT_VECTOR_FONT_FILENAME, 30); + /*初始化血氧值label*/ + InitUILabel(bloodLabel, 83, 32, 300, 300, "bloodtext", "--", DEFAULT_VECTOR_FONT_FILENAME, 140); + /*初始化检测时间*/ + InitLabelExt(timeLabel, 53, 270, 360, 35, "time", STR_CHECKNO, DEFAULT_VECTOR_FONT_FILENAME, 30); + // 设置来回滚动属性 + timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); + timeLabel->SetRollSpeed(23); + + UpSPO2Text(); + + // container_->Add(titleLabel); + container_->Add(bloodLabel); + container_->Add(timeLabel); + + return true; + } + /*** + * @description: + * @return 初始化背景是否成功 + */ + bool BPMainView::Initbackground() + { + + background = new UIImageView(); + background->SetPosition(0, 0, 466, 466); + background->SetSrc(BPBACKPATH); + + container_->Add(background); + return true; + } + /*** + * @description: + * @return 是否初始化成功 + */ + bool BPMainView::BPMainViewInit() + { + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bool BPMainView::InitView()"); + if (!Initbackground()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!"); + }; + if (!InitLable()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!"); + }; + if (!AddButton()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!"); + }; + return true; + } + /*** + * @description: + * @return 删除组件 + */ + void BPMainView::DeInit() + { + if(container_) + { + container_->RemoveAll(); + } + if (background != nullptr) + { + delete background; + background = nullptr; + } + if (bloodLabel != nullptr) + { + delete bloodLabel; + bloodLabel = nullptr; + } + if (timeLabel != nullptr) + { + delete timeLabel; + timeLabel = nullptr; + } + if (titleLabel != nullptr) + { + delete titleLabel; + titleLabel = nullptr; + } + if(checkButton!=nullptr) + { + delete checkButton; + checkButton = nullptr; + } + } + + void BPMainView::OnStart() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::OnStart"); + View::OnStart(); + + SetContainerView(new UIViewGroup()); + container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); + + if (!BPMainViewInit()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::InitBPView fail"); + } + + SetContainerView(container_); + + container_->SetDraggable(true); + container_->SetTouchable(true); + container_->SetOnDragListener(presenter_); + + // 增加按键监听 + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BPMainPresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); + } + void BPMainView::OnSetUpView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::OnSetUpView"); + View::OnSetUpView(); + Draw(); + } + void BPMainView::OnTearDownView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::OnTearDownView"); + View::OnTearDownView(); + return; + } + + void BPMainView::OnStop() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPMainView::OnStop"); + View::OnStop(); + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } + return; + } +} diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPModel.cpp new file mode 100644 index 000000000..dc03b98cb --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/BPModel.cpp @@ -0,0 +1,304 @@ +#include "bloodpressure/include/BPModel.h" +#include "bloodpressure/include/BPMainPresenter.h" + +#include "DialModelSPO2.h" +#include "wearable_log.h" +#include "heart_blood/health_service/health_service.h" +#include "custom_utils.h" + +extern "C" errcode_t uapi_get_timestamp_ms(uint32_t *tm); + +#include "custom_utils.h" +#include "ppg_service.h" +#include "ConfigModel.h" +#include "AppViewIDs.h" +#include "NativeAbility.h" +#include "battery_hal.h" +// #include "heart_blood/BloodCardView.h" +#include "MainViewSample.h" + +#include + +#define MAX_UNWARE_COUNT 10 +#define MAX_VALID_SPO2_COUNT 30 +#define MAX_DISVALID_SPO2_COUNT 100 +namespace OHOS +{ + /** + * @brief Constructor for the BPModel class. + */ + BPModel::BPModel() + { + // BPData *data = HealthService::GetInstance()->ReadBPData(); + // if (data) + // { + // currentspo2 = data->SPO2; + // timestamp_ms = data->timestamp; + // // 更新表盘血氧数据 + // DialModelSPO2::GetInstance()->UpdateSPO2(currentspo2); + // delete data; + // } + // else + // { + currentspo2 = 0; + timestamp_ms = 0; + // } + } + BPModel::~BPModel() {} + BPModel *BPModel::GetInstance(void) + { + static BPModel instance; + return &instance; + } + /* ---------------------------------- 状态检测 ---------------------------------- */ + + void BPModel::ClearDisplayData() + { + // currentspo2 = 0; + // timestamp_ms = 0; + // 不需要清空 + } + + // 血氧监控 + void BPModel::BP_Control(BPState state) + { + // if (state == BPState::End && startspo2 == true) + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End"); + // uint16_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST; + // send_ppg_cmd_msg(md); + // startspo2 = false; + + // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE_END); + // } + // else if (state == BPState::Start && startspo2 == false) + // { + // /*充电状态下不进行检测*/ + // bool isCharging = get_charge_stat(); // 获取充电状态 + // if (isCharging) + // { + // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "充电不能检测"); + // return; + // } + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start"); + // uint16_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST; + // send_ppg_cmd_msg(md); + // startspo2 = true; + + // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE); + // } + } + + uint16_t BPModel::GetSPO2data() + { + return currentspo2; + } + + uint16_t BPModel::GetShowSPO2data() + { + return displayspo2; + } + + uint32_t BPModel::GetCheckTime() + { + return timestamp_ms; + } + + void BPModel::SetCheckTime(uint32_t time) + { + timestamp_ms = time; + } + void BPModel::SetMain(BPMain result) + { + bloodresult_ = result; + } + BPMain BPModel::GetMain() + { + return bloodresult_; + } + + // 开始检测 + void BPModel::BP_Start() + { + // displayspo2 = 0; + // SetMain(BPMain::NOT_TESTED); // 成功检测 + // // 进行初始化操作 + // if (!sensorstate) + // { + // BP_Control(BPState::Start); + // sensorstate = true; + // } + } + + // 结束检测 + void BPModel::BP_Stop() + { + // valid_counter_ = 0; + // disvalid_counter_ = 0; + // unwear_counter_ = 0; + + // if (sensorstate) + // { + // BP_Control(BPState::End); + // sensorstate = false; + // BP_Main(); // 处理结果 + // } + } + + // 保存检测数据 + void BPModel::BP_Save() + { +// uint32_t timestamp = BPMainPresenter::GetInstance()->GetCurrentTime(); +// SetCheckTime(timestamp); +// #if MSG_SAVE_TEST +// BPData data; +// data.SPO2 = currentspo2; +// data.timestamp = timestamp_ms; +// HealthService::GetInstance()->UpdateHealthData(data); +// #else +// HealthService::GetInstance()->send_blood_save(); +// #endif + } + + // 显示检测结果// 显示检测结果 + void BPModel::BP_Main() + { + // uint16_t MiniBP = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OXYGEN_THRESHOLD_VALUE); + + // // 检查当前血氧值并设置结果 需要检测成功 + // if(bloodresult_ == BPMain::SUCCESS){ + // if (currentspo2 < MiniBP && currentspo2 != 0) + // { + // // 测量结果小于最小血氧值 + // bloodresult_ = BPMain::LOW_RESULT; + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况, currentspo2 = %d, MiniBP = %d", currentspo2, MiniBP); + // } + // } + + // // 根据结果进行处理 + // switch (bloodresult_) + // { + // case BPMain::SUCCESS: + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功"); + // BP_Save(); + // NativeAbility::GetInstance().Back(); // 成功 + // break; + // } + // case BPMain::NOT_WORN: // 未佩戴状态 + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴状态"); + // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); + // break; + // } + // case BPMain::TIMEOUT: // 超时情况 + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 超时情况"); + // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); + // break; + // } + // case BPMain::LOW_RESULT: // 低结果情况 + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况"); + // HealthState healthState; + // healthState.checkType = BP_CHECK; + // healthState.resultStatus = LOW; + // healthState.checkMain = MiniBP; + // HealthService::GetInstance()->SetHealthCurrent(healthState); + // //保存异常数据 + // BP_Save(); + // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); + // break; + // } + // case BPMain::INVALID_DATA: // 无效数据情况 + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数据情况"); + // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); + // break; + // } + // default: + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未知状态"); + // break; + // } + // } + } + // 更新佩戴状态 + void BPModel::SetWearStatus(int32_t wear) + { + // // 设置佩戴状态 + // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel Weartest::%d", wear); + // //开启检测才对佩戴进行监听 + // if (sensorstate) + // { + // // 计数更新 + // if (wear_ != 1 && wear != 1) + // { + // unwear_counter_++; // 佩戴错误计时器计数 + // } + // else + // { + // unwear_counter_ = 0; // 佩戴正常情况下清零计数器 + // } + // wear_ = wear; + // // 检查是否达到了最大未佩戴计数限制 + // if (unwear_counter_ >= MAX_UNWARE_COUNT) + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴计数最大 unwear_counter: %d", unwear_counter_); + // SetMain(BPMain::NOT_WORN); + // BP_Stop(); + // } + // } + } + + // 更新SPO2数据 + void BPModel::UpSPO2data(uint8_t spo2) + { + // displayspo2 = spo2; + + // // 处理有效与无效计数 + // if (displayspo2 != 0) + // { + // currentspo2 = displayspo2; // 更新 currentspo2 + // valid_counter_++; // 增加有效计数器 + // disvalid_counter_ = 0; // 清空无效计数器 + // } + // else + // { + // disvalid_counter_++; // 增加无效计数器 + // valid_counter_ = 0; // 清零有效计数器 + // } + + // // 检查无效计数器是否达标 + // if (disvalid_counter_ >= MAX_DISVALID_SPO2_COUNT) + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数达标 disvalid_counter: %d", disvalid_counter_); + // SetMain(BPMain::INVALID_DATA); // 无效数达标 + // BP_Stop(); + // } + + // // 检查有效计数器是否达标 + // if (valid_counter_ >= MAX_VALID_SPO2_COUNT) + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功 valid_counter: %d currentspo2: %d", valid_counter_, currentspo2); + // SetMain(BPMain::SUCCESS); // 成功检测 + // BP_Stop(); + // } + } + + // 更新血氧数据 + void BPModel::CleanAllData(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Nextday!"); + // if (MainViewSample::GetInstance() != nullptr && BPCardView::GetInstance() != nullptr) + // { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新主界面血氧卡片"); + // BPCardView::GetInstance()->UpSPO2Text(); + // } + if (BPMainView::GetInstance() != nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新测量血氧卡片"); + BPMainView::GetInstance()->UpSPO2Text(); + } + } +} diff --git a/tools/image_converter_tool/test/w9/BP/bg.png b/tools/image_converter_tool/test/w9/BP/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b5eeb5f51603f3ff8a04edb6f9a09e5fe7ef9cd5 GIT binary patch literal 73559 zcmaI6WmH^2vo4Gi++C9(!QI{6-GU4Q3^2I6ORx~!-CZ)cTX1)W;K42UN6tC#`RqoZ#LVr@fRu7zQ%j&a(A3=1aTq8F1qB-f($sa)RZ`>!*n^o(|IsjefF0hs zp`ZjsJRD2`Hb56jGoU5NPUzElTh}K_kh#z&9WEtSB?k$h6-d_038>+vtO@Y40q~iB z5)q~p^x%IN00z34QhI=G?VR~Ngg*V3T>kgxf6XkPDF2JZ#YX7Ue=DV{q)I7a?*yde zVP<0ju(GmJ^6)X6o0^#d%*+@m*;(1ySXen(*f^P3S@}8m_>#|L61Ry*np!3x0J; z>Hq2M{Y~hTm5Yl5KMRYyyF0Tx2eZACB?}uLA0G=VI}1BI(>n!|v!|VlsRxst^XLCa zkOVpdoInmPAbUH?e-cg2>|I@iKE12@-!_09l$8Egu$}Y&cPH z+5=p{Ksy&XNuf{g|1g__%=y_kfV>>0=B7-n7G`WrY^IzXOnj!Md`xECd;oJEK64Is z9`^sp`M>e=aY^v-aPvxWNON+su}QOviA!>c@p1Eti?Q)>N=u0ShgZ(d*~Qcj0Q^ti zp!dH2hgb6d$;&U{1T=NAcha=CxBX8Ts9M>(*gIRy~Boc_0b3ln#4vo%x7e5!Dp7AxEUg%8-dAqs0Sz7K3Y#LMF zSYA^y=nczXiQ~Vr4+(oUR1vH`;)=92R3Wam;y2mZp7cVFcQ(Px3-MsGrG?nGHEvrQ z7OlEaa7N2Hm+ey+IAckB6oO{EIs%EYH86fAw>7RkRe<=8K;oiua%$^x?73Jn0NyZ?7wj|w<)2N(nd>E_h=%#6M=*4F0$?P(y zQrjmHyC?U{YavKSUpIu?`{`X(ghIXHZw$KHb#WhUSChbfOAvq~$p}Quw!&I0E`ybXaND12Fr0cG(xkZJaJ_igtMeq#3&9VSxOFG$ML z9SrOOMuWx3e_1XM4B&7eS`G(4)qzQg1kblR?iB zaZ(hQHwuhMAi~j?yPy>mI`ezS4QsX2#CJ#T?%~5~wn^@z)PJbedYlpO9Idbf?|FF^*@rRfQF83-)^fYcV_$>PD_Y1#{bz50&Nk6|$!L**ny z9a!-EVOEuB!9vNfK^=ieN=Uyx4hh$#UC9Lc56chAHq4|Bz>C5f9XLVA;L$*RaH3<~ ztPFU}Juu9u2z7z3z23_Qak;Ub$?u)8OQ$EvvniXwsv=}(<%-#o{Dq2Dcq#r6{+kHX zk~-^(fA!2{wF6bNYa;#gKNk$Zd1+HNLX{zj%HZ{InB*AIUj-0Vyh8y9fL4T6ttxn9 zv59?;wiSLtGj#_pquIw*y9$4;mq!7T{l$YL(A3sB2u?ufrI_KQzxn{C`uUc_A_Gqe z=~=_x?4PSG;uGt44B5#*yY&MW8m(0xjjK8tC)(=os?CWlpNz?)FnZ%Qx#y*?jR-HY zioUShBv+b8H+n*q#mOcgXhSw}QtlKeh+BWgX7@ndSl#_BIO9$G*ovRlvU1lpciv~w z@B>d`xgYXowu*+Ty7}K$X(N33NORH%U52J?80X9kP7&nn6jtdPfZ~kc*SvJ_?G#Oi zHrF1}g$Yl~X*g{|Reek4l6j9x@JfIlx5bhE3ZtF?2b8MSFUU;gH;nHV(h7Q!dfCh{ z#|?TK=G2U7v7CcGMy3~4iZZ(GZf@B#QF%l%951Aev8h^T4iNZKa@Jaw#05 zzJfMC{`s%D5~8+ji6x3*4n`tW%oHUIAM2|6VF}$L8>*>Y!fdl?$zjI-UywWhv@(K7%oYV<%{)Vkk=C!lVn?mUHI=Qhoi{-Io77u5DU zZ`$?YIcW-0R`_4S^^~s_^-Y65{`}`Uh*4i1p^)g>7ITu@rn7E*CLD2oVUMLqG^MVl z<7*s zYMQc#pl&LmR2r(kcK!$iXfpyiR;w*nx%2{_llAmrB|akE;ec$efITr?lUgia+jg#N zY&Oj(y~Ggm-!&^pF+oKDTv9~mRht;l5RDLm8sOA3LcvjAq$Kh)@=(jh>VMQNR2FK# z_Cqw-gA0>2(lcV`@c$Yi3|rLfy3mou`897QuRL=_2a?bKAV41X;yOr!r-j|XHwp?p zt0Ce*n`!cmf<6w{OW-`8S(8MagTZb58DOazlxU$9wUFJ>0(n(J$XDRN1d|6GAGf6^ zC9mVZ$`GB7q2n}jAz{X)CPx#*ve<_BKFRe#F>FY^Ub zqR&b=gkaE+&$>an(UHeZpD)ki!sg)XnA65jvu-r#WW?3V#$PijU=e^x>v!MmM552Y zXilYMqH&5U>!Jpa(`i)6x8y*p6FB7u`;^^=88dm-{kK7=+rvt__aqY%xl&)t$Krgx(*ohgf3iK;=FsnWgkhzPd!cr?K98rD7Zsjn!g+i1=h{p*Z(sl9rY*m zi8uiV=8LmBCiQ?nO>SZwS5`2YrNG90=X-{&%%x66d8L4z8+b=s^c(@Jf!0y|b3Azl zWNvdXbuEZjaS}fBFTf}6UPyU^cC+c|K6?7GZaz8<@@*yte9z9BH7cxP{^usDQtn+* zJiDH$_n~;{+EBl@#EGzY_w6t;Ll5aC0YYg*eetgV%^^VpJe(}A%c#?G{Hl&>VHFBX zI81Vfr?$#yfi%V-{hL*j7W&)24E5C@ z1!D)STnqhu@-sVj6cjIPkonHMIo8~?zq!(k7ZJ$j&og`z zK0?0#2hqfU2V?CS)Ap*Ec?)O~eI+6cw2ufJJZboYvS2-ZeH0UVFzZ#OrNHycOU=2- zACR1lSyIfn33%wI3->6j^`NqWIg;5Of*t#lSa8Nzaiv^3&v$IJ?-!c}uwGwgwb}~E ziPdye-e|jLQAHcnrzd2!RFj~&U{~?gg5Vzs5lUrPS$#QdVn-64BHZY<(sZEo!_G^N zh<%!c(TZwiOSX8LaL|y2*Xalg&|xjXs1Kxwjz{R+2y7kDH-U38=GwGyIh_ER z$biP@RqOPe9TQB%hzF=jYg5urmrFxO)9z>kDox)6Bof~J?B{Ksxb$6R_Ou#)$9>eF z$-wbI@S$IdRN%94Lg|#HzcUsW#N3_AKzS}Y1`@#@0A^uhHA?4_+J!2!+t2;*tC4f+ z#%wu7=)$6U{KwDDs>#{5<;6QCQzy>AY$Qe_8hs-p;U}dbE&_*nUwcq@dXj~45Z{p< zLh)i<6}?UD&9|u7#-Eiku5$fZBefjaXE!w}oexL`9TaPGX%?B+#Jfc4C^)^6UE^wh zG6F3t=qww+l5E5?I(p8UVex~&%JE1?8nXqVSYMa!*0?UuJax))Kn4@|QzP5TK0@_) zOdaIrb$(=2%+@g4){`Qn3>X}$V*s-%A3Jb=9(mt;pTnVsdLq-BsZ3k zuAqc3UOSL1+P|6=cw|;uz@_K>7nY6_helrTo|ayUV%oS?#IhAe0ibB5tIs&w(fXK3 z13yKD5?#zHHX0RMxwOf&@KsNMy8;_COolLZ!qVi?b%AvMhfOR1@+0Y1RRWip6 zr(4layc8}XJz#?ChpIC{9~a)bMP`Ibl1YV9ow>=f*+{3YcUT}Ou99voP%}1R6<3-G zq=Y;ZDZ-&APzVz9W)VmpD*9n@RB3dwoiDlv#0gNtgs-B>_LX%?7U&7;U*6g~b#sFj<$GrNN?9=$FHKU(SW>KHsa){rg-Ug!Jn2>~lOscj{;hTU zeDbEc)HIounw>EWExhG$rQA)2vU*+i5b9JMV-pj8UK`}hcy2CCFe*d=2J_|lWJNSn zfa+Asv!I^3Uu4?y$Dn%X!>f(F?N4gueWki}j^dS1qu)^#GZ4RP!*K$;H|*wdUY4~9j5&L^A1`XmP)1ys_d<9|=q zz_9MHd&9{&d>bB2w_M5*=ug9>9~ZRET_#OSJUbsW(cgpXO5RCMY=pya->coBCgRsA zhjRvE{^|5zz>UEuj5)L5IQ&if#ER+r|1MQbYDNS0apQtDnRLpe-B}9|9#4P zQcBpthgBruDs_sYDCo(2P~0b;Zumhr%=MoNT4dNT8QeCt5)Df@F$Iudo&#PZ2Dhla6|5@e^V{5p$5Cu0Y}lO z_P#cArVPlpF!?cTBJ^KB$i;`wAjC5@aYdcs-@}^?o#3PHO%QGy-I0A=$&@R% zGcA4xJ^ns9x1*kWX0S?uz}CODtu!5OXhAu@S7MOL_pF}wIUMLc8~idc0U6Jfw6Z1F z?CoDFWcwuuO!D_3m3V$=`ekA~Ibfb9ZptbnQgWK1xAurTK(YqX8^rv!j!l<^!kSZ~c$n0mCQ9QMtrU*Bd3#+iur9{aCm~0IsEAJTV z+!;JLA;HeZ5v6WqLxXTKRCcqME)T;oEGQpe8v7wifkj0|amwk5nnD`P-Lvz?__Y3K z9YgShdWBi^6*Na8-o%s9*HSxN?VcBfVOj!A_o6m-6)TOmC71lmw`h46`zh1S==E3sO6zmSpGo@7$ig4|6HYO+jWfn9l7SI*1w$8kI_=d_zq zwgq*zU!Rf;cpHE7)nbo{_+BV>s=IIZ;HC#qfD{-m`Sn=uU-OHG_LPtd8|7m7tKpyt zgrCaqK5}oPUeq+#*BQ>5d5yEldI8q`^}{S2sR@`ka)lgInXU3ceJ&6tRS9ik@K2Jl zo;X(4(<$|g3Tk$Br)!*(a{sq3;|+zt*jNrWZZ61jdP77ZQf-oK(Sq*f_YCRH+=;40 z1oLaCG-%-GzzXjn5?C~|jq>C#l(G^s`msPJIVX{Wji*J1>qPQDeS))@H#>^YNhZMJ z;jF}M3T=D+Q$utIrHYPSVSt7aCABf`cN#W6^P=g|kG5^C(M!`-MJsjZ+)SFvA$>B)=J39@;(&IFxWFqjO z!P`bYP-(pgtv=xa`$BQzw}OI{7@-uAcp0Ye!Fe!XQ#c0rT9B|Ybzo(kxO6dH>q6u? z8(qk)XTz`0RcI!`e2)jHifs^FRxs9}bWN3k%2$8OK7X}b0q(oPc|&S8$6l}2$Lz<) zFacP@k*KKVFcUpT!>9ZhDb+K%q86Ys(yS$5%OQ5 zW-&@Fxyf~651?Wk9A5e&rB)5*g>#ee{}#EPbthz#*1zuq?fk@4|@)0b6#^v}nT zd|zL@;zCo<+k|?MJE@escnh;crlU!c<`I(-+6I;Mi|-8wS{6m-NV%~tz?a{beP|1_ zry(#HVp%QE7dL0lc|&rs6~W>L>mmMSaBmQ|5f@E&%Ur9^^4{XAarx^Zp=4q>CxjG` ztiY0-h{i)vyzNH8e4o@m{+V|Xk8lUhyk^dj`krLvgLBwgEX1uS9a#aZi+{qlpxK#+!6bs}@H+x(=M()xN>nT(P}hV3`Gn0W4Dt!np<)tsx} z$_6Kg_oD-UM~dz%Lx5i{J;Y+lhH23a_=qYQG^%Xh=)2+^^lEBgr@!5Oxem76h9?uS z2QU*~Js9Kyp0?Ra+NIkrE%s!*deawI{Te&>$?q&noZ!ApA@0KHzg3g<@S2xrZMUnARKEL$|`swqJ*?G7UTs0hgro7C7ClxC-r3q91O z8(&A4(M}X4k7h=*>| znf1_7o?K-{I_zgAPW?ClMV6M1iV9PS`R8Hthuv@f zv$|te(5M-4A9gNHD@ANkPz~poMC4~qQp2P>$rQ5(`mZCC$OkPSaf4s$qthx05mc!~ zlV><`eKTHgDtj1^t7D)GH(tE2LRoH>G&Q;g4>B7o>5bAX^>Mt`v_RjF^GM<5Qs%rhZ{B@Ow!lr6s^Rr;$Ns8Oqpo8N@g#)K#%dy3S=hUF zZUsdh4q<{Q{WhDgR&@Gi3Lj;gJDsgP-6%#ic3+C;5Ur4B;juokB;GAEB|O|1W^1*% zAQ0qeY#x$2BIYpT5$%(#&OJ-d)_pj`$l!)&WiR)ersRlKLK6hho)ZHS_oWhOEnk|*3B2z!`}CDlY3b~h%N)|5Y)Zg>ex@56v_Cz zUE6X(o{oyu1}yBMp2+54{B1rizui}CEHkNIObBSMbl}qJn6NsoI+b}AJ7N%he=Q_< zA%k6m^UimuiYKQFiQk=YDp5|H&$ZA|I@4jIOL*Ny09OL4*x%W1>uA-|m!w;YC6x+* zobEM(^+B#TCDo0Ld6GhB(i#E(g)P-oD_I~WgsQ&s%z21h_TYkG%dceSxDZbd=kkVl z0&`*YA~nzh+~$Wg1E#o$C~rRzEnR+|^o0C7DE#S&udZB44NpVtezZFxm?3ZP=n9ZS zQH3&#FcH!#uR?RpCapdNSA`co3GcRGVvV;@&0V#w$H3J;J~`Y=e~)t!PH1iVx=a98 zLM?TcLyXrfcWxPJQWAa>I$SetL*7Ynt}9Zr!PSUt64`LUq5QO77@3&RzDbo}o&NHz z|Ew(^zBK0}PGnE1V=$#(R|Qvj++MoD;1=Y$A zJobz9s|0)en$91^&6IS$S`LgKlr(&R6zM8h#jmzVAoAYMX_%%MxzYK& zJzr05FBsT|`ahq)U@L@Yh2C^m8H`*_ta zQ})GOsyE^UHn2YjB)^#FftVXcjmVz+H3b?(6UZ7z7f_kc#RsPeck-_YF_lv2-q!R=3k{!uzRe z1t#O^To=yTZJVJF&IdG>=V#F#Ynyjo^L_2NI&4zD5+k9)4MsU1{DjVY+$fUoc_iU>oNSKD1gjb@@GH9W zDXmsq0(xc@BZl;PBq#!6Z@=rJ??@%4fI1*5Gam#qz=UFF4+Kp5a1vptfx+nf9~S&y zTunCt(R{DJheW~vv3v*<1|9tTcaJAEEVT>a6n=zmt6-keni?77#g>C?lu3~{K|`Nq zV5qN(;0veiN+Xi8$jeRd>n#aS@e^sQa>nE)lu(-xQcjI=4tq;NTcfj1X<=PF-uBzy z8Z@1{IALW*j=a6rd;3^M)ut&Y(~Lc+>0*=HGiQ~3_cIFlslASLv+)(zUL;+Px|0*5 zdz+Koyi%=6@vL296I-ESY{P4Z%Qc_hIZo=_4n7G)v`P&LJZ5Pk{=)57BMev(VSDpB z#-XQ>Rc5b!YY03gA(VYLcboe;x|WvK$gMOhzJSA)=-=r$KdL`(!zz9-uCA`EzK=KT ze|JE%)twjfIyySYDLw(5ZiI`CE0v3vaZ2xJa(K+PY<9?uE-+3mO3v_;jYIJnfpHr^ z#xobmk=lo70+QTT7zVb+guAbTfoohScx*R18NU`wjP+Jm3f@X2xCh8ZtA22&_x4M0 zDInZFeib`oi)UE~NIcewEp}F7S=*I**+LWvczd3F)4V(Hd^)?>@IIH?JXyNyX7NX& z@Vz6tIhrkj%1yXhL_}@H}95r!Vr23%>&wC&yoSR+XiP zJdFY|+LtYM_gf8qKslR-et-kN$unUZ-DY#ECC6?LLQ_yUFqCi=VAQS@A>Q3NwRA2@ zDxIQm?;M|55tZwTa5KS8dwtP;QhC_y_&Una$%DMm{7u<0D3V;lm9_~^h45%k`0;nb zMN`uTHaZ`0o_@)7(P%r{`)ry;gmY)^?sTvc$w#r`_6J{y{#4*TfMdc4?FA8Im!^YM;GQ#;*HtAi+f#-yPy*e6YK$wP z_!O2wnOAFz?XTuD{~@rny0k%W%>Awo&!Ets%*ccQltl9?p{dQ>#s%#YOLA3>)V=Zm<)Hz@|MOisP;|i?G%%6$J!WW8_Ge|xL;GTDhS?Z z3h2XU#@YDYynY{mqs*6JRKX7u&`B)I=K!DP}G z1M^te;cVOCx7uhZ{BZMnN$;>_W*_q$xAkNvECRuX=l$0r)k&>W{@%2MYz%=oa@w1g zy`h{BPh<|YQ%&gU-d`9E9NSgz|3)Tk-!x1B7nf=Ht2et(x7+6l#Bxp%q!(@5lxTUc zGp|klgsg{N>yUOKqw||*PhkX|4^BUK7sF;`CXzNyxX9IO>U(K`U1p)KL>yo zJ7IlJ+OJLThc!ZOtcJ+Cu=gpvQXR(m5Gi0Plm+FMcuafk95y^R!<4i5Wvc4d-CnkP zQCR2?kHpPw7OTlJeeaf8!EvD8e9M6=yxOe@_+Bmy{tHpw+e8h@Au=AjG2Lc|TllG; z&MAj4Hvq=tA5qLf+Y;f@&C8u&gTD*Q2i@7T#VEo41Jg2n`S2(qm+sxKPkkWTEJIAk zFc!N%zv3OXo4U}1U<)$L05|Jy2F)I~)=R*p+7BtKdrl4$MwXW!&gNL+oho> zq4Oh^zVC6SB7nBybkC7q*Q~I_)wFkfwB8|L==1u(>eL@`xCW`rZqO5YI{lfVI$1vu zwVhfJTdy2_N;vu)S5Y0b8!HgoQF6U?{`PFiIIJt26E1jVP@AJUQf6Ff$=UvJKTF?X zE{7xQ`y%-hIM*_HyRNUoQd`x$tG_n_yg8hPXM=k)poFBdnu_P~^{xk|0!9+)LX&it z;`!arP&G=FL$igvlaEWQ!y<8LdvnEt`wxh@-*3Ja1$RsUf@cuba>$%A5G;+ zxEKz_lA%07fWb{JIcT@2~GAJ~JGGy#LrSaEe-vR!UYbKZYZE)?1#XDW_SR#hkZzb)F=SE znT_Zs{6f0VE1ylTy_l7z#Vg29Ry=G>IM|O^P-QBo7yITQ*Us;cPD33qp$Ckp-$f51%DpqEfvn)m^Yv@@0Ayul zMclw0cuJX)JL$)CWcJhSv=KUKCMs89s1t~ryX;US_Dj;Ao8? z7MSN)<OA74oI6VvsQWsk`TtX;+_CIqqUy<25ZB|O(+<EDNBRXG`_?BwQ6NvXb@&gd!C$j^*9zZI@+O83-<+$9d|CSB|tlw#6Qhx zsPq)2d`0GZXusS;2a1yYP5bJ(mvk}1P!pk!2q}GhFRCIkXjcZfo_CH8??Nq98=;82 zUdC;|8b9aH;7I*tJ`Y@ZEEw$^TS}5zASc3kqq5GLxc&4B5fHf~A;ad5p=0gqe`5>EPppD4wrTzSybV%-B z@mGz$7wk?`((B*!n4#3WG|4C?&}X}O=9OIhksL_jowdcGNU1-Ya6LWe+=244JCQof zpWW85s#}lgo43PAww|L{7J^FwFa9ql#-=Zix2*OXf~Id{X&fjs0h_OPO~bS?f5&dV z95#+evww49vj^rGXwn{cAdS3q`F1^yD*fa!S-b=0fgVD%fA|(V8b>~TWLI@ns4gT6 z@Y-myx+x8!o1}R-ny|g(#>JC*%{qxY? zXoe;mPZttzR#Hb*Td>R5F|5w#kr#iiZ&f#fgmqo1dlI_#FWoykqkrBKra*4TwFqe` zN++s%n$&h4NgjjhbY3Sy7^r{jN4XmUanNAYsv1S%G*+MKWr@|Mn3PV0A9CxS#0H!- zfq`&0SQm;CWs< zXC-QU|03Ab2%niqG=lBMJx`GQKu2oRQstq0TI@?LCmpouS7sCGa}vc;Xt(Ku9Oavm zlD>2COxueE()c7YO*Z8XAF~}ll!fuO41}|H-ARvwZvDwq#1{ah+rAjb6|{*2rHJh@El74FguWn z&s-F5P}T6msuZf}1Jhq^0vsa4-}xDY&M!l)uESEnpd128L9c@>`?|@f43f{cchqFp zRR@n<4?T-w)`949qKTM8zS%fFGd9gIUrG1V+&=WkOW0%<iE5Rl>T*LdVafXSstO#`iF zkjk?tJ*9VJc7PN9=sLM?jYUdpBR`-6HbIy9fIdlRiB$o%KY%A@GnV*P2>1y>*rC?? zsOy`UkwIGdK_2`?PZ>7bTkBOw?6s5q=JSTS?wh)lG#!~W`v+{?G4=@js#3b2JaR4L zyRHf0_8oF()9bh*Vx$^1-p5eJzOKN~2bgUlkahewmmxI%hv8`o`%+K5Z-JCQ^bZ~b zEQ!ZhBE^1GkS{DW3)cY|c$1stdz-oIvew|NB(0<*cY9ONkoF({1GTC;vE2qM{#^q{U_T* z-e{D5aHuYetYe(V5$jmFHiDGa<`*}{IkV<3`mS}j2(jy?_#N%5^0)zF-Wb*-*i&s! zhZfkMrj;}qZKqVQmD9+M0*er6)5qxhc`?U6FDuNAu9v2_CekeIC4GjH$QQ#Ky6wLu z)!DjcEB@wv{s?eZ)xa?i=fivslQ5%H@*dH;-pIW8i^|P6c4eB^2`V%c{WYJ@qjYzq zQFBR52U|QrCeAH-$)zbC6YgU7!32Lk14_tri=zZ72)res|bFw5f4S>9cmk^&N$LZ8 zH!oDCHf1;`)Lf-;z`$cf9FOMbg?NmUch% zEE4+?XQ$O*J-cN?hG(=1uFwG!sW0Wu6wq?NM~7V_|1e1Rrv>4E7LtqkB$QY@^l3Wf zOHnq1hhCWS?g@b}V&iElXE!@~fnvCv7ymDV>L%9{ygzS5=tit{XnOi*EQ3-4fP#kW z#IwAhcwxIz8;Z~P`@1K-xQLP(mNjfcYNP}N>cxQ5o&K8x*gp?SSYZ*;CAv-;+eSLy zA2})Q;2e(0BVec*^QeAw@hAvn1gR7DB&BZ9J0>IW-lBZs@YWEaqPG~~!5p5#shp~U z6~opWg2p3{aQ)b_6X0yPZ>_JXs_<2KMHVvF>TRA1OSVb@l>revV=ba?eK>X!On&x# z-^E55O0~-WPS*WM__AE8e3Ob0!B0eygv2X1=6BR8JM>tym2u{%^PDeVLUNNO;L@sk z)9IN?>6L;=`X>Uv8%RL3SXBFGc4SC>s_6@PJY6#VNVi~Jox*2louGc&FGtFIcLO^j zWvBVloN7hX?HJfw`@dQtyFMx%0{+;RZk_`P2-hy~au;|&N;^fz?pXqtggGsp?;*n3 zAs>p73hQDvpDKNxp$4VhqgHb=r};xM{inMbVLgiJ>TewnWceYZbVcfcimAYqpIJ1T5wkRk-S!$@EAO+0DBDMi2lyj6uS-sEFXpg0e`5m}wl3DSwKm1vO;uD$e z(ET@`^9FX2rn9BEMqv_l^DhJIL|={#3L#QoE|CtUZ&2cRTh)yLpCu^ zmTX&0*np+kx|hJ{Bw=lu=mr?jOd=@s#TZ;>a5^HntDPK@Hozq}RXZh@BeFdGjr6cTsPsz30buAZuXb5u2zd!0rP#Iu`eG$skI+L9C>kTf; z7Q#luS%9lAZ0DC&jM*P_AQL|Y@i!5Mr{?zH%P-1^W-k%gYO7NI#SZwzf`(lwo^UK= zyQ54|d_e3vd}E-`ze;7>RDJg8?hT+isBVPrg08TML!L9RbSQ}vV4Vh#pDy~LyN8X@ z{gdn*CAYJZ^>-O$)Wuy zNgc?E_LR{38k2Ft95G9~b4a)wWX0%PTtb*a1*KxV<$@DME29+@(b%rb!17e^x4rb1 zCN~#v64Zld+JalU{vyROOn;yk9p7t7^NR)7p;$o(|1aE8qWA~l;m`pZ^%C?b-(C(c zm~SZP2od#usn`!M0O68|GY!P{Of3$rsYRIbIzoUV{&#bzA*|s?LagQ3%XJC@)P%1R zz#v^-cY)3e`C4GNeM8E^r|8$7pu1Wu`)5h5R% z>H7g##bo(#Lu8dKCyx}5wpS&YAJ$9)84NRaxUeM@R5il4ptbNDuxlgZi6`U;7bXeA zW`8|)X-driT&M|{dc%i^ zNxh=enG`Nk*2ucs8gYo9*MU>H;-AjZTwM=Cu+8bSxIx%1XKO^A5Bnq@xAQut00&0( zq3?b#CUd1~wXP@He{XC2(TwXCfRy{bv`*C`k5TotFQlW)-Y zZp-Q@syD9;R^j3vTCjE|zNpp8eMz6!J2M*^!rG>B^mc@w7-VI=%7U$A1C^1}KVL=Z zvv+++mHIiAH)(W?ZxW<#@Pa0WaHXCKw_4=e(5QNxY^+s+lsMkuVZ>KMfp@G5hwgEv zJW^-%BJ|PBD&Mq}QhHyU$v>15#mCEKNG>Zi<&)TNs$RW9HO6iv?k_u!K&OLB!*;@0 z;YTap-Dr-jd;hmKrw$`Tj4+0pcI>MMpN~yei`7PXfcK+&-1Cuf`Er@nz_8NT+u*&7O&_tqQu-C&5Vu^ zTgs5SwTl@^Km;7=Ng{Nqxk&-Brt0WU#v+o2{tWqkh#YCSfWdDnGd^K+8A*NF)MtO! zYEH@eV|dOlSZ2274*QFeU*_B#dQ9Z&c?U%~uSm4aH>efNnf~e{CjDBDWL)p&uaf(H zj6(V+Q%|F$w;niZvI=erRS|wD?55m1akcRGKM>dq^nbn1aTvhU=^lK16qm2oP~j`8 z72$n*BWy-Eh^AnJnGiS^Y(6fp*gA+4ggISuB>3v_(a`_p)}bFuru#9S*hf^o>HZY& z@=K(G5-bDSRT8rkoSdaEXaYwP>2RJd^yR%=tQ$XBVkctt|+y-x%mDTUc)Dlbl9iOwRaZc z4agUup80KeOj7@q=eQh*@Nf}r8Z@WxcH%*wI0qhalnP15#Lw(OEifu-D!W z3%*-!@-&>nAV7M49*k!kEO3_%s|vaHI1L|Q1b23Xc`3j3X&*HuLZ&^uX@pOI=#vp{VewDnyWWM2q@!5Y^E76J7P%EPqR7 zoU-x*VWcod$pyI>0JYd)N@}6rbLca0p0e~EF5Bsa zlE;4s615E#z<_jOR;90jaxY>Y@tTo^njIm!c!@JcgvQcMn)ACriW8`7dNvi42vF@ z0|cg5zlYHo`1*v63uq~%i~HKqNR**vc?Nx$KSm%w9ejOSwKF)m9-X29d=^3~AY+oR+T;l#PJ*(-|c!|eqN!BjEB1oa81-kg$ zz1D$ZD9Z_*k?+pjR6K+4z=8LC#wJ9#wy(Oa$Gy6X%p@awno4!PjK}97Ou(cqub|ma zVyk`h6}I@yJ7Ov>IopATk?++7+OYUkgkqxekT?(R5seHj#sA!m^3*$V!qVT^>$Hm1 zq{LC&JJWM}zIN#KI@A{>IR{2TJDcv$s_!|U!&%WHa&kjQcy!2UHDGeKj;BQQaOAiJ z4IwraQ%IpU%dtnR_8?H^!}-ZYfl3fSSy(3(Kr@z#w%NJk-SfzpzU7U!LDcEIi;)Yy zKb4={C`PF`z$fH(`!*#q(Y__0%H?0@kb@G-ho#Kx>{{j< z@z_*ThZvLzV>H?-ezjD}6h?j2MV|wD==si0-~`G>5Zg8gMhg zUN-?0n?4+WAhXKTLUw(S3_=b8vpd`E4V@e>`ph=#Bop<{zgv74FAOy%(RGd0sjVl~ z4m@oZZ{k8|2k7Racg8&Ha0%`ke8(iG%WfPMmfL}d$hVp9JCU`Ii5hUKNFmKR1X3;Q zZSLWZk6yTi8;@JC&F{zQ$hqF{g|WWB+kM*sN3+}c??nLbvz8JunUPqOYOF*Ik!Mxt zn)kvhqSxIYByiUFZ=vz$QDArcBn9ke_p|+~%d4sQL5qAb&+YRZ7E6jOpWD1W%+cf6 znu-br+vnTh^E~oENpM#9%8EXl1^tu2+K{ox5`l~EYkJS^vA9Bu8B#3L-St7(?L})s zZT40ZcJ5RudG=2PSKQHLoL{e!HO^qfZ==Fjt0O>=$Wv z+}E!6awD%Qdk_@P*@be8uPFHu^t7N&7IdOyPa`}bgZtSsYRNk(LZ0CK)yA(SPibzO z!o1{lVzLqCTNL};P;$c6>&ScS__sa3H4k@1T|954$NQn$@WlQ}dUTL$BK?yvdGLfU zwG!a~{VC`G>9}v@3$ex@@gjG%R*M@!H2|igVpyx1UF8J}uMau1y{9IIh+N3+Mc~1M zd(VC7;fupn;-P2Zt9GeOIsp0B;VH!H+hkcI3096wwTzXq0ymXskk5P4GTj?Va-fHO zZQArBK|m+{@P2F>ylUS?b~VFm)aBQqKAFs9fb7~>Q68j!v=M#j;remnhosEab;2p! z$pYD^aMwY8nEP}Zf_58t#-!lB{pRZ}lFipQfwqG{Vajrx0~+X!W~^^M{moA6?XHw; z$BK0av=f!+Cuaty3=wGrMs?$yL3)s%iRO>x~ka$hH)HZ29HXy+ZvoB z`Hyb3@Xb1B1boI5f)Zp@RmBc|xSX$<+vk$Bm3!Y~N?lbI(=R(i^IH%Do4lAH~_P}XsyHVHF#+i`2RZqpH&t>du_KPLtTEaFzqE9Y`tH72!9*uyk6A(6)W_7(YIatzJ`c8 z^)qDj-X$fu_kud_jif~jC$TSg*5N&j8};l0jlVXWy^ac!ORi__obDJ3$YPctMiih> zht*LNR>>mJ&}fBQyX@LI{4S?)C|{hO`c=45Tj65GNsSXs+<(_rDUck@hbf7nBx;{2 z*^N6FNC=jVkhxUur2=g zxT0q3vF$8Kg$TA9_|$1q`Orn~gSp{#QWeyruF7qXCi*t|NE&LZ-!eW@%9_C~8Xm{}0AMIls9Qc_072Ddj9!HH#fU zK$_E+<|K&(vGh9t+0cnI+OqT+qFB0yK(4lquq>pS=inMewx}h_{ZN50mfo3ul}2Qi zsTf`rYap5kRnc__;0;W;2uOy3#3xdB1~H`}jFxZ#*i(Mt6UXY$@dck||y@wtj z>@OH8vHhRd*21TsehQ;Uk5-PGIB_Dp@x~kO;Fr`wITaxQcRyRVo>B=Qbq3fGXFW5D z^|L8SFO(z`3(>hK7(i6VM0G5bXPkwS z=gY1zA)uPuOL!NCxlq1G(_$)QP*K)xo_%Beo$5Fm!I>%G-(@KX(MbTfzo@4D-K06V zU`vt2$m#)N5M#;<1IK#-K4=ONmk<Kax18wiLQJ5T(}^(%IEgM?CwC>xp$Blf z_=0i22ktD>r%#75g9i)05AM+eX3w5oh;S6{f8c=!V9}yQuw(Du(Q$KU&V=E^hr>e; zJ>yKsR|N*Z`*w&xWkOHo(;eFW`9AG5PtCGmgACX2K<<)k2{PBM1A#} zuFRPTx*3YRnpaL^zhHBsZ{Q-Bi~CAOK12-{Ciaw=O25=>ty4u%x=1S!(FT6jhpwo1j z>>d32xlTq2#Ajffkx#pJ?Vx}E{?NXCd*!f)UwjdEd+af|?Y7(Cx#ymPk3aqxdN2^( zd+)vB4}bUr{Ph0&qhlX@_F0%RWeWW0M?WgK!F1@*0ruT@U%2U}o8YbY-$y!;CW?_Q z5QED#bk~ZjOWw5U1or=_NjPrdKaH`Gvu^Z+HLrKR`^ERxu|GTeEG*&}0J(^1U9L+U zM7fwg)O3tZgzGBmwJ#{ri)=)+&VBKd3&aVRXFeugctDeJlWKHiHrBz8v*jTTk2M)l z$yr#aM*pWQWej#(l&bHLD&O(;ptj^81UEoZViFPY98Lg?81_gJgb4m!cyFY%JP?nO z77E1h8#*Z%0^>`5sp4YH$a=sO_E6iFh0uc348NAa(7U?20C>+o|2%w%MIT~i-w6|7 z>eQ(Punnw$UwiE}c<6-}(CaN=Om(;2b}Lx%KJmm8@ar&)pzdBw#zrode>P(!m&wF# zxbzi_89NYu_lK`dufvL_5|BCrXt;md;~zV2)0X<1T|mQEoa^Hjqr0vt7=x=A%LJl6 z%#vrSK2iZ$|9u4zl9=9A|&UJ!f7 zA0zSivYnaxU$oJdSwxyh)&8b$w4T3Q?t zT-+?{y{T<3lhdSmh;y|q;S#9bmRQ@Cgxdt5rXUBVbA7?oW#A+U>R|e`y4dXN4FG0YW4|ITB7Xj;%i>D-NrP->gFfbwXMt3g|2Ld#F&)huq4;a8M1UHEfAGmGfXZoCK0a5 z#YJ~4_8kD6f-k7`5vPO!*y>#Nt8}SXdmU3S1^IX+$c2)K1MwxzDQyKx=pMPwD0_|6 zuk^9ZMXTH#l5hl19HP1iY26V)pBV-~(|#1VpbFIBy+H+kTB61ia#DX77jhI6auCrP zSu!y$B^3a{6-Min3t|HhIWvqpOK8AW6~72$#>w{+aJLuJMBw_nk2ARKH=S79=4zvz zkQ`IRrR9U_Qu6sluy8@!q>R+fe3SeBod@5V!}?H4TVi39V6M%~@ zG>*ltuc49Y_@sT1xRF+Lw^o{h2~1704=Nq6%bO|eCmh4n_HBUY``-moX>vSU~>7}^%_Z7uDrj#{%DA)+4eCuiYl0O)o*&`Da`a?FRl?(te|HB z(KK|TuA*EW!*tPY`m$MV|4G@<$lG)~=3*A>6TG{Mu6-i5NI_tfyt)s&t{7wi30|Pn zM}~_~q7rD37th=^a2=?fqfmu;B1ce!C56T=vV}1p`AHIKQ(F*s*NjV2#4nivi-u1n z(RmaDS0E$=H8i7~)h?CUGw9fF;5{PlyTq?|AFB&9x?GUb+1Qo z1t59@C7E6Q={Miwbj;O9$BO-)&+iMnj_3`4d-G#oR$A>imkRs-ux|a~HV}3N zN1uQTNkP=tGFJvbU!Tx4K-dRpeHf!1AYBHi+YeMH5|u!wA$k$NpGM$=TePYoUqD>U zlvuBTxRvNEj49S)6c^7D$w-J`x5l~5aMz#~;SojLYy@x?3~o516-tHYr;%WnAPX3R zN=oH`3xX>VBBKfRQ40|QwBzrOYJ+_!?~~%^WA7|Sa1l2F zSwvdeawLKmPFzccC=p_icM6zbmTmLq<*cnd7%3K zCCA-GIv75lrIC>=GrC5Eir`G%~^rVw8n8=M)(+If1=sA~OLM zC4EA?-%_G##g&HV8PwuZg2D_HW5$+b-GIm7b>TIfkr0(!R}j%KFIvZfCJ66>VuYXI zvNWD0%EmmXXqj*>HM&(dBFY7#eKwsa+bxoj%gV>L@WQUSl9w4#*{>zAzo0x0Zx|B@u7;Ss>=%yLk2cX zry5CA4RaWkq|ORB0SEj@^dzEL)ld6LW0-xff7QnBeM9GaQat_r4UsMz~4izm=%XljG$bK7(xx&1}MQtsE<(y zrTS5>L>}=lSkT?Oi`W*s4hFI&({CM6>a2oY0n_KZZfg7Nv%szMY7f~tsRm2X1-aC0 ztv|w@RmL+gA|8FtbZu81p^YWR0a0JyQxl8z6`$K#uD(%>3mS>a5bBr}hFG${5H*m4 zvRD}M^M87%E%I4C#M;IaxxL#U`DucO-x-mSOR|?g549~R5Ey$JhzA- zz#C5y8Oc;OFM(*dsFCC6ip-LT&n~?*EPw)^l_dgpDKm@_P{R;|LKLGS6bk|MdF3?D zLea6qvr}xJM#SVDV>dP<74xHNMGCg?e>N7W14$F0x&&`<0m`&8z1Y}-Ib`6GMId!9 zUVfyb&V6opp299J;OL`g^EECqihONs)>$N-F3XJTd+ORIzJ^7v@5d;0Gv%73vX3J5 zsj1l4bs}I<2PvmIBb=|HoKb~f2t`E(se}|ntZ%3wrZpI)V9i4@KSL_`t{N8x>ZLd~ zOSCUeVaSMyaVfGB7KI35wZb)sB6%oWj}jzR8;K0BDW`j;pvJl-0^8*m1tG}gLOdpX>L#uZP)+j&0B#Z;Q#2%ps`uY{XZZ6QZ@|Y0=ne1K5k`y{0r`AB z8f&>+4yvoG;e}UTfiI-vXY8~Sj2%0+kR|4sXP$w7u3v8!=h{FT6R-OEn)-sQO+QxX zuXI-!&~G^W--rJI#~hN?UQpYo+m{%lzMrUb2~{pk6kLuhhKWJnOSss(f~cHER>7rf zml!ObA6*pnDy}hth?f>~ni|rep-#iZO}uLvVbmrTrVi0g zJp26kgAbI&K#;8afCCPIfBfSg1@H_?n>K9e3YT1R2|WG!>t+zO#qNz02GF)2W8p3-+4$?OUw@bnE3J0KHc}Mp&h-{X zIHpDOH3&jM)`5wd7^Ac5!;y)`5%an%7UJkgF)^o)G{kGZpss6k?L3Y8Y05;RG%w&t zQ(}$9^*_~Cr}~)^5n)8Y13|B=1zBFyiZu~w2$Vo&q@{jsTJjV%FNk#Fbt*W6@UAl< zu!#xe<@$66Flx+OQN*hk@9HwnlmgK!?l2L9#=sO4-Gb=mg4j|}X`x^q2*jKy0A-T| zPm3hffkp7Af^2|>E0E%$$M3&C9DexWuwlanc!ROgnjjY`a?gGH_JyDPiUNW7h6Fd8W zl3BbvUjkC2zBK1bOr~7);@~`mu`UsB+$Uyx&QK+i4QR5xBoNtZ-B_duMEvh)OjpF! z0<|7DL_d;4gxXw!uw&(RGesBj+2nTA24^wF3O2af=rKw>upvK@h0JvLCX)6V6;75b*c{Kb= zVws?o?v$>}yPzTCoMXB~V!fqBAw|I_igLt_Q9dRvaIQloOJ~_HISh)-^&vj0k@8Y3 zv37NFb$te(P-m{e04s{b1kjG{9zA+A{P2fAgo`e^sK6dWw#i>FNJ8Dcdw2LZ1IAkR z{hMH8`-0C+>@&|DyLj!LC9(rv=vR#H8*#UOHA!y{KPy5_|G)KUPl6eL-_RHj#p6 z!C~_yH364bp?+w5(TIfaHr;l9xcV_ zj$Z!c+Vde-Y&5%L>8o`c;;D)YVilGI= z%>_tvxl)|r@H;ZF>e+Vc_1DAy{O)&9S62reJ9cc)e@ge+IXJey9zOWs0~o~s^|;xy zVbP2kFt|+{;kcgcvw#2o@SETKMw!rFe)(k>H*TCe2>SeH6QSGE!=<4w{rvO!KB8SG z#I4zypA%OPhaHC*lGt2l2zEZ&#(JijR3vL-x7crKiE+L3!rEi0vyRwx1%tnLH6Xl; zX*i{#5f5q&3rM;)!~jSUB@;DVpsF-f*%hUrabwX(ZNlz_2QFS;N2nw@qMCL=7tT}( zvtSjaqc4C8qEYc&U4Bx$b85pQ68vw)T9=ekwncH7WIs}+ZMj@#LhM}0##ZN)KJ3d3ugY9d}3oq5)W96GXsV10$p5%a<40J2-CJZMTJ! zPd*v0zWQo-G|+vr{axC&E&TS$C!Z+S2tat!q)E_@?XNMjJG1`OM;{vJn7DaL>*@|+ zf8C(bq!@t|EsJjYL-#zTlhO=$6Iv1?uQnkJ^{C7rM^dS8&WFKm*v zy_^0{^!WshZd7N$r(0}cV5=Gr5pD1WG%F0IrlCB5aZa9?@emi}K>@;0--m<^RDnlw z+pt&!Q>ouk>ItI!qf#9Plq^h%6p~NxD~f|l_}*v~Xx9Q7RE%__3&a3iQ2dgP6ulu4 zlzA&&0#d>@UiWCT0wj{_55dC$a>o(54T*!xqKlto=v2*(0Ssumwr^ixnt=}W_IvMz z^=x+)+fF;|u!0fMn~N5~|JKwLt`S)2Zrr$0(QVe&))syba*x%>?cn-}0WPLLb=B9| zl978!+~^b-H>L;t>CaziCO7IL+KuETzk1`d{fq7F511){tW7U!s#g}FPup)UjN4;h z;n-ngrohaDj}!o=WA7nw@WNx+Uv0P{*bxpoas`l1eT4J(Ib;cJJ7knl�-hVW-{p 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