From 1474ca5cedbe8c50dfb0f2b30ee81500b62dd225 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 19 Sep 2009 08:28:24 +0000 Subject: [PATCH] added fancy GUI design --- linux/Makefile.am | 6 ++ src/audiomixerboard.cpp | 120 +++++++++++++++++++++++-------- src/audiomixerboard.h | 2 + src/client.cpp | 1 + src/client.h | 16 +++-- src/clientsettingsdlg.cpp | 30 ++++++++ src/clientsettingsdlg.h | 4 ++ src/clientsettingsdlgbase.ui | 9 ++- src/llconclientdlg.cpp | 87 ++++++++++++++++++++++ src/llconclientdlg.h | 2 + src/res/faderbackground.png | Bin 0 -> 2700 bytes src/res/faderhandlesmall.png | Bin 0 -> 1263 bytes src/res/ledbuttonnotpressed.xcf | Bin 6763 -> 0 bytes src/res/ledbuttonpressed.xcf | Bin 7074 -> 0 bytes src/res/mixerboardbackground.png | Bin 0 -> 29373 bytes src/resources.qrc | 5 ++ src/settings.cpp | 11 +++ src/util.h | 6 ++ 18 files changed, 262 insertions(+), 37 deletions(-) create mode 100755 src/res/faderbackground.png create mode 100755 src/res/faderhandlesmall.png delete mode 100755 src/res/ledbuttonnotpressed.xcf delete mode 100755 src/res/ledbuttonpressed.xcf create mode 100755 src/res/mixerboardbackground.png diff --git a/linux/Makefile.am b/linux/Makefile.am index ce7dfc68..8501dc49 100755 --- a/linux/Makefile.am +++ b/linux/Makefile.am @@ -97,6 +97,12 @@ llcon_SOURCES = ../src/buffer.cpp \ ../libs/celt/stack_alloc.h \ ../libs/celt/vq.h \ ../src/resources.qrc \ + ../src/res/faderbackground.png \ + ../src/res/faderhandle.png \ + ../src/res/faderhandlesmall.png \ + ../src/res/ledbuttonnotpressed.png \ + ../src/res/ledbuttonpressed.png \ + ../src/res/mixerboardbackground.png \ ../src/res/gig.png \ ../src/res/mainicon.png \ ../src/res/CLEDBlack.png \ diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 23447d78..63247980 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -38,15 +38,6 @@ CChannelFader::CChannelFader ( QWidget* pNW, pcbSolo = new QCheckBox ( "Solo", pNW ); pLabel = new QLabel ( "", pNW ); - -/* -// TEST custom slider made of custom bitmaps -pFader->setStyleSheet ( - "QSlider::groove { image: url(:/png/LEDs/res/CLEDYellowSmall.png) }" - "QSlider::handle { image: url(:/png/fader/res/faderhandle.png) }" ); -*/ - - // setup layout pMainGrid->setSpacing ( 2 ); @@ -57,27 +48,12 @@ pFader->setStyleSheet ( pFader->setTickInterval ( AUD_MIX_FADER_MAX / 9 ); // setup fader tag label (use white background of label) - QPalette newPalette = pLabel->palette(); - newPalette.setColor ( QPalette::Active, QPalette::Window, - newPalette.color ( QPalette::Active, QPalette::Base ) ); - newPalette.setColor ( QPalette::Disabled, QPalette::Window, - newPalette.color ( QPalette::Disabled, QPalette::Base ) ); - newPalette.setColor ( QPalette::Inactive, QPalette::Window, - newPalette.color ( QPalette::Inactive, QPalette::Base ) ); - - pLabel->setPalette ( newPalette ); - pLabel->setAutoFillBackground ( true ); - pLabel->setFrameShape ( QFrame::Box ); - - // do not allow HTML tags, align center and use some margin - pLabel->setTextFormat ( Qt::PlainText ); - pLabel->setAlignment ( Qt::AlignHCenter ); - pLabel->setMargin ( 3 ); - - // set bold text - QFont curFont = pLabel->font(); - curFont.setBold ( true ); - pLabel->setFont ( curFont ); + pLabel->setStyleSheet ( + "QLabel { border: 2px solid black;" + " border-radius: 4px;" + " padding: 1px;" + " background-color: white;" + " font: bold; }" ); // add user controls to grid pMainGrid->addWidget( pFader, 0, Qt::AlignHCenter ); @@ -120,6 +96,54 @@ pFader->setStyleSheet ( this, SIGNAL ( soloStateChanged ( int ) ) ); } +void CChannelFader::SetGUIDesign ( const EGUIDesign eNewDesign ) +{ + switch ( eNewDesign ) + { + case GD_ORIGINAL: + // fader + pFader->setStyleSheet ( + "QSlider { background-image: url(:/png/fader/res/faderbackground.png);" + " width: 45px; }" + "QSlider::groove { image: url(); }" + "QSlider::handle { image: url(:/png/fader/res/faderhandle.png); }" ); + + // mute button + pcbMute->setStyleSheet ( + "QCheckBox::indicator { width: 43px;" + " height: 24px; }" + "QCheckBox::indicator:unchecked {" + " image: url(:/png/fader/res/ledbuttonnotpressed.png); }" + "QCheckBox::indicator:checked {" + " image: url(:/png/fader/res/ledbuttonpressed.png); }" + "QCheckBox { color: rgb(148, 148, 148);" + " font: bold; }" ); + pcbMute->setText ( "MUTE" ); + + // solo button + pcbSolo->setStyleSheet ( + "QCheckBox::indicator { width: 43px;" + " height: 24px; }" + "QCheckBox::indicator:unchecked {" + " image: url(:/png/fader/res/ledbuttonnotpressed.png); }" + "QCheckBox::indicator:checked {" + " image: url(:/png/fader/res/ledbuttonpressed.png); }" + "QCheckBox { color: rgb(148, 148, 148);" + " font: bold; }" ); + pcbSolo->setText ( "SOLO" ); + break; + + default: + // reset style sheet and set original paramters + pFader->setStyleSheet ( "" ); + pcbMute->setStyleSheet ( "" ); + pcbSolo->setStyleSheet ( "" ); + pcbMute->setText ( "Mute" ); + pcbSolo->setText ( "Solo" ); + break; + } +} + void CChannelFader::Reset() { // init gain value -> maximum value as definition according to server @@ -276,6 +300,42 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags f ) : QObject::connect ( vecpChanFader[9], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChangedCh9 ( int ) ) ); } +void CAudioMixerBoard::SetGUIDesign ( const EGUIDesign eNewDesign ) +{ + // apply GUI design to current window + switch ( eNewDesign ) + { + case GD_ORIGINAL: + // group box + setStyleSheet ( + "QGroupBox { border-image: url(:/png/fader/res/mixerboardbackground.png) 34px 30px 40px 40px;" + " border-top: 34px transparent;" + " border-bottom: 40px transparent;" + " border-left: 30px transparent;" + " border-right: 40px transparent;" + " padding: -5px;" + " margin: -5px, -5px, 0px, 0px; }" + "QGroupBox::title { margin-top: 13px;" + " margin-left: 35px;" + " background-color: transparent;" + " color: rgb(148, 148, 148); }" ); + layout()->setMargin ( 3 ); + break; + + default: + // reset style sheet and set original paramters + setStyleSheet ( "" ); + layout()->setMargin ( 9 ); + break; + } + + // also apply GUI design to child GUI controls + for ( int i = 0; i < USED_NUM_CHANNELS; i++ ) + { + vecpChanFader[i]->SetGUIDesign ( eNewDesign ); + } +} + void CAudioMixerBoard::HideAll() { // make old controls invisible diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index 47e2da37..02ddb13e 100755 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -63,6 +63,7 @@ public: void Show() { pLabel->show(); pcbMute->show(); pcbSolo->show(); pFader->show(); } void Hide() { pLabel->hide(); pcbMute->hide(); pcbSolo->hide(); pFader->hide(); } bool IsVisible() { return pLabel->isVisible(); } + void SetGUIDesign ( const EGUIDesign eNewDesign ); void ResetSoloState(); void SetOtherSoloState ( const bool bState ); @@ -100,6 +101,7 @@ public: void HideAll(); void ApplyNewConClientList ( CVector& vecChanInfo ); + void SetGUIDesign ( const EGUIDesign eNewDesign ); protected: QString GenFaderText ( CChannelShortInfo& ChanInfo ); diff --git a/src/client.cpp b/src/client.cpp index 559c6b6a..4e5a75dd 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -35,6 +35,7 @@ CClient::CClient ( const quint16 iPortNumber ) : bReverbOnLeftChan ( false ), vstrIPAddress ( MAX_NUM_SERVER_ADDR_ITEMS, "" ), strName ( "" ), bOpenChatOnNewMessage ( true ), + eGUIDesign ( GD_STANDARD ), bDoAutoSockBufSize ( true ), iSndCrdPrefFrameSizeFactor ( FRAME_SIZE_FACTOR_DEFAULT ), iSndCrdFrameSizeFactor ( FRAME_SIZE_FACTOR_DEFAULT ), diff --git a/src/client.h b/src/client.h index b71e2def..775a6b07 100755 --- a/src/client.h +++ b/src/client.h @@ -81,19 +81,22 @@ public: double GetTimingStdDev() { return CycleTimeVariance.GetStdDev(); } - bool GetOpenChatOnNewMessage() { return bOpenChatOnNewMessage; } + bool GetOpenChatOnNewMessage() const { return bOpenChatOnNewMessage; } void SetOpenChatOnNewMessage ( const bool bNV ) { bOpenChatOnNewMessage = bNV; } - bool GetCELTHighQuality() { return bCeltDoHighQuality; } + EGUIDesign GetGUIDesign() const { return eGUIDesign; } + void SetGUIDesign ( const EGUIDesign bNGD ) { eGUIDesign = bNGD; } + + bool GetCELTHighQuality() const { return bCeltDoHighQuality; } void SetCELTHighQuality ( const bool bNCeltHighQualityFlag ); - int GetAudioInFader() { return iAudioInFader; } + int GetAudioInFader() const { return iAudioInFader; } void SetAudioInFader ( const int iNV ) { iAudioInFader = iNV; } - int GetReverbLevel() { return iReverbLevel; } + int GetReverbLevel() const { return iReverbLevel; } void SetReverbLevel ( const int iNL ) { iReverbLevel = iNL; } - bool IsReverbOnLeftChan() { return bReverbOnLeftChan; } + bool IsReverbOnLeftChan() const { return bReverbOnLeftChan; } void SetReverbOnLeftChan ( const bool bIL ) { bReverbOnLeftChan = bIL; @@ -101,7 +104,7 @@ public: } void SetDoAutoSockBufSize ( const bool bValue ) { bDoAutoSockBufSize = bValue; } - bool GetDoAutoSockBufSize() { return bDoAutoSockBufSize; } + bool GetDoAutoSockBufSize() const { return bDoAutoSockBufSize; } void SetSockBufNumFrames ( const int iNumBlocks ) { // only change parameter if new parameter is different from current one @@ -189,6 +192,7 @@ protected: int iStereoBlockSizeSam; bool bOpenChatOnNewMessage; + EGUIDesign eGUIDesign; CVector vecsAudioSndCrdMono; CVector vecsAudioSndCrdStereo; diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 1b65eed1..79225674 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -83,6 +83,16 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, cbOpenChatOnNewMessage->setCheckState ( Qt::Unchecked ); } + // fancy GUI design check box + if ( pClient->GetGUIDesign() == GD_STANDARD ) + { + cbGUIDesignFancy->setCheckState ( Qt::Unchecked ); + } + else + { + cbGUIDesignFancy->setCheckState ( Qt::Checked ); + } + // "High Quality Audio" check box if ( pClient->GetCELTHighQuality() ) { @@ -117,6 +127,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // timers QObject::connect ( &TimerStatus, SIGNAL ( timeout() ), this, SLOT ( OnTimerStatus() ) ); + QObject::connect ( &TimerPing, SIGNAL ( timeout() ), this, SLOT ( OnTimerPing() ) ); @@ -127,8 +138,13 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // check boxes QObject::connect ( cbOpenChatOnNewMessage, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnOpenChatOnNewMessageStateChanged ( int ) ) ); + + QObject::connect ( cbGUIDesignFancy, SIGNAL ( stateChanged ( int ) ), + this, SLOT ( OnGUIDesignFancyStateChanged ( int ) ) ); + QObject::connect ( cbUseHighQualityAudio, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnUseHighQualityAudioStateChanged ( int ) ) ); + QObject::connect ( cbAutoJitBuf, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnAutoJitBuf ( int ) ) ); @@ -294,6 +310,20 @@ void CClientSettingsDlg::OnOpenChatOnNewMessageStateChanged ( int value ) UpdateDisplay(); } +void CClientSettingsDlg::OnGUIDesignFancyStateChanged ( int value ) +{ + if ( value == Qt::Unchecked ) + { + pClient->SetGUIDesign ( GD_STANDARD ); + } + else + { + pClient->SetGUIDesign ( GD_ORIGINAL ); + } + emit GUIDesignChanged(); + UpdateDisplay(); +} + void CClientSettingsDlg::OnUseHighQualityAudioStateChanged ( int value ) { pClient->SetCELTHighQuality ( value == Qt::Checked ); diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index 95310006..1c309740 100755 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -83,9 +83,13 @@ protected: void OnSliderSndCrdBufferDelay ( int value ); void OnAutoJitBuf ( int value ); void OnOpenChatOnNewMessageStateChanged ( int value ); + void OnGUIDesignFancyStateChanged ( int value ); void OnUseHighQualityAudioStateChanged ( int value ); void OnSndCrdBufferDelayButtonGroupClicked ( QAbstractButton* button ); void OnPingTimeResult ( int iPingTime ); void OnSoundCrdSelection ( int iSndDevIdx ); void OnDriverSetupBut(); + +signals: + void GUIDesignChanged(); }; diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index 58797307..b20d099b 100755 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -301,6 +301,13 @@ + + + + Fancy GUI Design + + + @@ -319,7 +326,7 @@ 201 - 41 + 71 diff --git a/src/llconclientdlg.cpp b/src/llconclientdlg.cpp index 1ee8706c..92d2018b 100755 --- a/src/llconclientdlg.cpp +++ b/src/llconclientdlg.cpp @@ -135,6 +135,9 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP, "
  • The CPU of the client or server is at 100%.
  • " "" ) ); + // init GUI design + SetGUIDesign ( pClient->GetGUIDesign() ); + // init fader tag line edit LineEditFaderTag->setText ( pClient->strName ); @@ -240,26 +243,31 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP, // timers QObject::connect ( &TimerSigMet, SIGNAL ( timeout() ), this, SLOT ( OnTimerSigMet() ) ); + QObject::connect ( &TimerStatus, SIGNAL ( timeout() ), this, SLOT ( OnTimerStatus() ) ); // sliders QObject::connect ( SliderAudInFader, SIGNAL ( valueChanged ( int ) ), this, SLOT ( OnSliderAudInFader ( int ) ) ); + QObject::connect ( SliderAudReverb, SIGNAL ( valueChanged ( int ) ), this, SLOT ( OnSliderAudReverb ( int ) ) ); // radio buttons QObject::connect ( RadioButtonRevSelL, SIGNAL ( clicked() ), this, SLOT ( OnRevSelL() ) ); + QObject::connect ( RadioButtonRevSelR, SIGNAL ( clicked() ), this, SLOT ( OnRevSelR() ) ); // line edits QObject::connect ( LineEditFaderTag, SIGNAL ( textChanged ( const QString& ) ), this, SLOT ( OnFaderTagTextChanged ( const QString& ) ) ); + QObject::connect ( LineEditServerAddr, SIGNAL ( editTextChanged ( const QString ) ), this, SLOT ( OnLineEditServerAddrTextChanged ( const QString ) ) ); + QObject::connect ( LineEditServerAddr, SIGNAL ( activated ( int ) ), this, SLOT ( OnLineEditServerAddrActivated ( int ) ) ); @@ -267,17 +275,25 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP, QObject::connect ( pClient, SIGNAL ( ConClientListMesReceived ( CVector ) ), this, SLOT ( OnConClientListMesReceived ( CVector ) ) ); + QObject::connect ( pClient, SIGNAL ( Disconnected() ), this, SLOT ( OnDisconnected() ) ); + QObject::connect ( pClient, SIGNAL ( Stopped() ), this, SLOT ( OnStopped() ) ); + QObject::connect ( pClient, SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceived ( QString ) ) ); + + QObject::connect ( &ClientSettingsDlg, SIGNAL ( GUIDesignChanged() ), + this, SLOT ( OnGUIDesignChanged() ) ); + QObject::connect ( MainMixerBoard, SIGNAL ( ChangeChanGain ( int, double ) ), this, SLOT ( OnChangeChanGain ( int, double ) ) ); + QObject::connect ( &ChatDlg, SIGNAL ( NewLocalInputText ( QString ) ), this, SLOT ( OnNewLocalInputText ( QString ) ) ); @@ -569,6 +585,77 @@ void CLlconClientDlg::UpdateDisplay() } +void CLlconClientDlg::SetGUIDesign ( const EGUIDesign eNewDesign ) +{ + // apply GUI design to current window + switch ( eNewDesign ) + { + case GD_ORIGINAL: + // group box + groupBoxLocal->setStyleSheet ( + "QGroupBox { border-image: url(:/png/fader/res/mixerboardbackground.png) 34px 30px 40px 40px;" + " border-top: 34px transparent;" + " border-bottom: 40px transparent;" + " border-left: 30px transparent;" + " border-right: 40px transparent;" + " padding: -5px;" + " margin: -5px, -5px, 0px, 0px; }" + "QGroupBox::title { margin-top: 13px;" + " margin-left: 35px;" + " background-color: transparent;" + " color: rgb(148, 148, 148); }" ); + groupBoxLocal->layout()->setMargin ( 3 ); + + // audio fader + SliderAudInFader->setStyleSheet ( + "QSlider { background-image: url(:/png/fader/res/faderbackground.png);" + " width: 45px; }" + "QSlider::groove { image: url(); }" + "QSlider::handle { image: url(:/png/fader/res/faderhandlesmall.png); }" ); + TextLabelAudFader->setStyleSheet ( + "QLabel { color: rgb(148, 148, 148);" + " font: bold; }" ); + TextAudInFader->setStyleSheet ( + "QLabel { color: rgb(148, 148, 148);" + " font: bold; }" ); + + // Reverberation + SliderAudReverb->setStyleSheet ( + "QSlider { background-image: url(:/png/fader/res/faderbackground.png);" + " width: 45px; }" + "QSlider::groove { image: url(); }" + "QSlider::handle { image: url(:/png/fader/res/faderhandlesmall.png); }" ); + + RadioButtonRevSelL->setStyleSheet ( + "QRadioButton { color: rgb(148, 148, 148);" + " font: bold; }" ); + RadioButtonRevSelR->setStyleSheet ( + "QRadioButton { color: rgb(148, 148, 148);" + " font: bold; }" ); + + TextLabelAudReverb->setStyleSheet ( + "QLabel { color: rgb(148, 148, 148);" + " font: bold; }" ); + break; + + default: + // reset style sheet and set original paramters + groupBoxLocal->setStyleSheet ( "" ); + groupBoxLocal->layout()->setMargin ( 9 ); + SliderAudInFader->setStyleSheet ( "" ); + SliderAudReverb->setStyleSheet ( "" ); + RadioButtonRevSelL->setStyleSheet ( "" ); + RadioButtonRevSelR->setStyleSheet ( "" ); + TextLabelAudReverb->setStyleSheet ( "" ); + TextLabelAudFader->setStyleSheet ( "" ); + TextAudInFader->setStyleSheet ( "" ); + break; + } + + // also apply GUI design to child GUI controls + MainMixerBoard->SetGUIDesign ( eNewDesign ); +} + void CLlconClientDlg::customEvent ( QEvent* Event ) { if ( Event->type() == QEvent::User + 11 ) diff --git a/src/llconclientdlg.h b/src/llconclientdlg.h index 2f82334e..c8379f3d 100755 --- a/src/llconclientdlg.h +++ b/src/llconclientdlg.h @@ -71,6 +71,7 @@ public: QWidget* parent = 0, Qt::WindowFlags f = 0 ); protected: + void SetGUIDesign ( const EGUIDesign eNewDesign ); void ShowChatWindow(); void UpdateAudioFaderSlider(); void ConnectDisconnect ( const bool bDoStart ); @@ -113,4 +114,5 @@ public slots: void OnLineEditServerAddrActivated ( int index ); void OnDisconnected(); void OnStopped(); + void OnGUIDesignChanged() { SetGUIDesign ( pClient->GetGUIDesign() ); } }; diff --git a/src/res/faderbackground.png b/src/res/faderbackground.png new file mode 100755 index 0000000000000000000000000000000000000000..5c3c56ce87cd6708b9b27c1bd2592ee0ef4e39a0 GIT binary patch literal 2700 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 literal 0 HcmV?d00001 diff --git a/src/res/ledbuttonnotpressed.xcf b/src/res/ledbuttonnotpressed.xcf deleted file mode 100755 index 9a277935ef70acd50332aaa5ec0976714bfb4a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6763 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 N;I#fw7&s05^}k{D5V!yU diff --git a/src/res/ledbuttonpressed.xcf b/src/res/ledbuttonpressed.xcf deleted file mode 100755 index 711e9a56e358c29f42373580439f7d2aa10abc7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7074 zcmZ`;2V4``y3YiA!7eJ6h_nO(=^-T45J*qxC`DRmN|BYz0;$1)`~W4nqFn~+mPBdtJOLBq%66E-@)S zF*$AL?tK{$`FvMb{#s8ZqAZUL z3y+G6jZgXVz|nIT&wq8{%*lfpNwHC?fB-*lPq|Dc_HY-t3EW&=oOwKF#2In9$aisZ za}~+uZp_dyRbuL{%rjSSzbda%=fC{@*7v6}Q@4eOg$8Z*QA#Bkl<(@scXZ(KoLn58 zU7Z}=oSgV##b(rc4Dx&LU)1CHX=T4|HTI_=s1c_0(^1;&V5x+uU-23+=;`7j-5Jw z?8t$AU+mrc#lAi18M}6-XQU@>mADGrgi_h|*qtZtyq`i5bbM?QotQ#rphJ_xgN=37 zm0ERKu|ct}RIRDdsLM)AO9~4L@(X^u9L@)vG;zn?v-j&J0XQ|O2Zi-h=qz+lKRG@& zGB_|aI6OFjAHetP`+AU`+TQN|$-auCN`Ohzb|3xj^P=E&)CTD zV1Hk4Ph0z^&d%7g~?(FUBYj6G7*4g#xV^?SAaL28S-Y`*z_8h$MTOVK{HiqEgv7!DRe2=~t z5J=a@p6;&hzW%-*7<;lk>t{b-Px=bsLaLFb>Q(1{6ja&!m_svdKfetdYK59zDx z@9XdBY-{ZUZM(XAdpo=P^lewS`uqDSb{_urP1mS?6igf$0|3CV=~Oy3F*?vSZC_7U zM`tI%db&Hiz{c)tk$~f;pZMWLJEr519vvGRgK40_?xrTkMn=Fw%$J}l=9?anJG%xZ zx~|9g`pCrlj(-2714cl`@Ke*X06`JG0h&KCHVSh93rc@K<{u2#+tD>J)^#IJA{9$A zj(l@Nhfa;5V^ewvC+LaI0zGPgR!>1RhlU3G`v(U42QYA7Pj^RW-)LucoKh;4?Am+k zN*#m)kB&@DOifN<^ACY;&`G_1d=x)AIWRZ?@o)JI2F<&A`bK+h$N53xNZfnkA4OPu z{lv7=Q`2u7jEkV9+Ura6 zo<6vnb2BUJ*Q-~q{Oey=E?@rf`yVd<@a=cse|s#!ORP{RmD^*JQZl~2r|yGyMh{cz z?ZErre>}5)XLO+7=D<)@+_vqJfeM*KqVx#}4Dc889l2a5cMqvj84($un6UTTyQLo| zv3CqXKa90iJpK8^p1A0+08cFSLfUq9;c>b4c5H;*YHtTAlw;3xbPG+`odlJHZA?rit2GWrE`}%mx-CTe%1TtSAFHeO+t_%!Q z1&2iKICTEU?7NR&JbU=)VeZxcI{(#~!+Ul_hXn_22@DDj3E8?eCMGsEMim(u9v&JI z8xs`)tY8rm9k} zkccEA37^2s_-%19Q8?%~B5GSqqzYV?ilnyf%s6%Y!0wDMGWYLIPu&5nwr|@WpOBb@ zBuyqJCG9|VAj$PRl9P8NVUKVj!NDP0Bch_?w>* z1DYl#B*e$Vzy=BW_=K4WI9#1vDiMq2a-oO7L*(w_FPyGj5bT1u;@&V1jyAB?>VmEQ_PpGKvp0tdzP;-oI7v9VxtX&P39z6 zhuI)Dh;1hBlnvRMM6`ibAe}*_+K`CWG!EU~4u|uUN#$ae$y%cgW)@bYO$3uQ%NNX; zw`x6Mqqzl4Dm1`@tn(}gWNm1VGmpK=dwg9c5E9C+Y z`ljU+)rlW|`uXRq8(IJT)BVEAhSs*$w)Rd)`$K~RkgB?|grV>JgnYWx(cU%iF)x+N zV9=-%FTOk7+}uHR_Sfq-Zr#bfef{Qht?ok`fIoFXP97SBED5RcQ%A?AR;;dPsJH6a z7H~L4;_b?(T2b92PhHE-&b@y>`%2c65^Y6wbxloOgRZF={*Wd_r*G6Dy2-|d`Z}a; zwDIGo>T}W7wumhv*SYenC`?(x$*bAfIk#`;T+Mn}uF(Lz_I-UrV-uiW1FE3`J2f`e z)zsJPKGj}IvazwX^^^(hiA;y!J*O^T%f55-YR=UgugXeFDr;)%>gwwn8g;rxq*31h zCpFwQx9I8`>T6pxm-et}RH{Pi#vyVQsYlQJGwW&b%bc97TQ7@>N-AJnP;ngc9E^uF zBD%B9O}eHJA3rohRlD~52?u)?T_|+2v)~3D`TComvfnkU@7=m_`(;s?2E$@79aeN; zYhyzl|3N z(@tynPDBpjm1Y@F`~(n!7|XnWR*?Gp({7DvhUo^`t^G5Z_i#A7Hewjsw=cwaB^); zJvO0rjn(DaTCkT;cFOD5O{NKH zwlZEcf8omYgiS<9cPySW-<8j$VadGzfRwRTpY;8lK+FBDW%qgIzErE?=;^JasKmc-%2;YkH z^#NWRl?z?@LWP$%;yvI4s}s4m@8+Q3(C{!M3?Duc5sCRdE^ZsL&0srzThI1wSPxM+ zUoVAJEE0?0v$M(5+eaI@ zN0ZP)BzAXZQ>}?6#w(3BY&5sDB9Vw@Kxj5pCTk|^XRJL?DT~gaF=#XXV#1vv*yg4wQ!}e@v2Rm%q+?9W%+pwpic^o$)Zx}6k8^h&KA&@%><~( zjZHM2HQNAzjRidd+cSkT=Py~d9%$Iql0>qxCR$p+_(YN=(VA>!1-DidHjTr=;lv`a zkho^`lBM(UfX&Av1_sF76~+X@1_Hsvf<&W`NkmH`iDYF3|3oV@GjlU@YYvM}+aQw& zT-heejhHOb+SSPF$~7C-nvgjn|G>zIi14uJgp|FzccrEzr=+C9CP7*3j!Rk-;qu~fjdp)j2UAxE#=dHmwV%NKv-A$j^Y`S|>I1%<_>rNu>sh41p; zynO!b`Z>7`jYg%&#I9VT(JVuvgCo<%l4Rv7Px$Vcy1Eu#b6ra-(mDdm?oaLQK&nWq z{$mT$QvRX2wY%|Uk{yj|Ya>;@VPi>TZ8@F$ zJg*qA`FW5mD=M^jEmBcXR#IH5(W;BpWo0#mU+toU#&VGp%i6};iAA>Ict>q^w|9>` zbMyE7lCq+=d9U*eOEeno3~eUv2q;@o4Y|HdqiHHWbA-d9*@{G5rnMDI!X#SR2WLcy zon$emu01U%Q&pThUT{(v`!pqbL*ksaC0*op$FV(H?! z^NegZAHVTC1}%m4Co~3AwE)6wMk=bnY~bYLQ+!)0jVTeh@vMy&7;oHQY&gSU_7Va! zNn zxnkcI?n2+>GncR3$hvX+?%jKL?mT?-8}b|S2+HIBM~|QW{@}^eN4HN&hzuse{NBS= zAmErUH?(&1_jcp)95@^YsejOxpqOn*Y3aMa_#zYb)AnR!?9Ry8mAY&9t{pqm6NC9y zmQ)6lDdD>dU704U4A+^iTQYy)k|hgfL6S9Gwgyt&CZa76ucNa)ok$`g#3^eVFj7r2 zS-Wb@dNT_$gDG(nLZ0NX*RNbKYwkkB`OD`akR%BfmbPp<&6aF!g~2|MtjT0+OS6px z6O)Y_O-;=$EJ@b33=g411UrS*il{)DSm_twuT;o@nxu00+VyaTuPHW*1?wnh;42~D z4y^2@GkG2YzKavjo-UL~J%orb6L-?b-_OrWsq_v2_6yqVza=DOiw|&|SR$1J|9blX zkA{Q=kf2R6s}Hyk5G z_=Bt+1|>8kcnc2J3b17$;k)o*1Z)&O9~M2{FnCB15`+&P{*$&b9>oKB8mN#+BpeBA z#wq1ev4>D3@=_=jo(ic5(6GU%^xFa-#YhOUbrNHHBmxP?hfM$#V>~_)iY*-QVX#e( zn~3T*F~J$&be5r+XTG^`Akvwzc=5_L#vABf@#$ag-;=1YUAb`X4BP_Te6%jBu&}=1 zkNmt>kFM`?q1bzdMfh&}A@`4$ce8)X_4Hs63=!BzUy34AEfbpI{>J!|T3vTnO?CU= z*l@WT+sPdMFv|cp8>f##SHbQjwq>;#oy>wCRA%C+=v4G<*f!U9qt@uiF`Nn7vTB-M zspvSa-(jTzkgWa~N<~L?*RAFtI5(7rj&A(XVF4Z&g^4RKIRK;LFmcg&>$wO46USzm z8PA00baV`FItLFRkZ?0#gPsM_B+e4+l>t@w89?FF4-IC|#hZXMikr(`I1_ga>kt=4 zSUPK39Kl6e%!mE@LQrHJ=WhaiA~+g|uB$*N(9i^>pyS6jnZO+$M}eO84^5|KTTJd% zna>4hL#t(IgMMP5;oa-vroN%U-mb3tw(j16!NLB)zM=lMs^{URb1-KdLzkfSQ+*%c zd!VVMrMaoT;_b7iPhJ$lYhIN1n9st|Ni*#!~1t{XJ=ix zd^Ua8&eZhGqlYrTNRRUN67lFJbKn<{g=o!0Z;R%~uP>u@Rn1rCj0d z55Ek^JnZeL<{MVbf~HeZ$Iv-w$5`k4#F!(&VcX)OU=Lr3EmEB*2&KoC!ooHxXr%RP zS1(&M&j5Zp(HpZ6R%^ToZpLyi0R>hc9N4RJv}aOntV!k@*WlOm8n0Vtyn5A&#q;LR znLP_aJRdM%YxO+Z>Xpll){$+=By+P(n@k7sw#4rXryQW002`#URoUh0Or76=qO0AJ88rL3b21bS9Li_ zK-nnyF6<4GsiK@T;OY4V550{0YB%7dBAQWyD2EkAkU({BEX_y zJYbN4-6C<5(Q%VMf#xnIxM(m}#bWLClNyAgrf58kj#Bq=vGU_EwP z@TVR(HS@h<3Ow_}!v8+sF3Lcgf)^L2(KPUSagEib@Atp(D!)d7+)JBs*j3;n+51)D zvfNAA!|e^tUy0T14(^C) z=t3oqz=8{g!<~gf{87ZEjp=c4BRI#XK`Fi66ok^3)c{a1hmO|J$&toluNop#{IeUC1C>tZqt>d^syTW!#;D zZBE>lVk=&q*+Z(P_#OFYGNB7W$GH>B4YRKJ%nJ09{(}1Xq0MPdJ z?z`yI=O`pGj(R#@(es56t5?vQ>r{X-xg4<>67{XC$*mY$(%I9k)zezmlLlZ;d2>8N zUd~99zp;gmCM*Nzso-gI`H3p!hAOmwnV#CM7(UiDoFGt$I*vs9yj0 z>qt*|owxk|Xa@=gw>`zLM+4 zaO)n!sQ~;A$|PX>f(cO+zar4ekDYcvGMq?zdeV&C zk4niscMqDzR(9a!LW(g=9@HFM3dOt8vo7s~Q!Q}tMWWzrI0ER<9A&lhA$+v8Exya`8XD$}z#Xze8998F2h?-JcuGILSf%h>zIvQ{%7V7vpSIu6K3zheid>~1ZJnO>`Xy3W<5OGz zzERm}zrK4~$vXe~6dk&Qz1|7QO{MEn40;y?tsc%Hjy+9C2)&Z)JXZ147Q=2m6-J58 zcp#%Haw4Y4LcNCGqJ9^f`Qy%!C$=42?v^pYYejchTj+tQW8s@MuanI_T%&TNV;?Snbr2mvis{V z3zx#f9$za}ozw?M4)rpDxDvQ##O^xBC+;`4C!@ZUtM7QO6jj20UvKYskV!iRtwE9@ zk}*Wkv$ZDr5YDl4MQ^tF`>*Mkn@Fm1`wXLi`y@~Bv|6r@4^HL)<#r0(n|I^`q-Iop zn<+}Wf=pGsc#^Aq8CG@7vYhWcSkVG}C$1jEuG9SXmmlN(9?Bm#vjp6fWi*vPtrUl= z8mtCgA3f~)oxN{ryUSASJx%Q_5y%l9WS7tl_tN99_pVs|JfGPoMBRx$dxK0Q$HgnR z!$8LU#uEJoAz2w^@SlWBAh%~gWpzaPtWi?zjLyWc>K&dMe?5P$RR=W)Nst&CFc1vs}%P z*S)FL@o;F%76}F}e%CNJO{1_MowIaa=*Um;?os1g@feecpd%pqMQ9g_3$4FTe-xQ?e>z!ycGvsI^RW1|*Z!E5d_!e4 z0+5F10tX*uuL^zP&WQ(_%Zf)B6qdXl0`!wzM{;AQGvF)yF*B%w%2DDT%d9*BBfD#^`WD!d&k70_GxuP=b05!_ChG z<$6>KCj8FVqs1OipB^sRA1x9HeyGkkxmHSI3@}mO%2C5{y4p>v2*Z=MOGO77?5v{@ zBZo59jaRC3qyjBfJ>i^_-khT*m2_H7SFuOQ@BXox7L4vQI20$*k?xiCHJ*VOVc>Ju zjDu)EJ;u001RbtGieBfSDR;IGvOBLJ+w6X4Ae&HZ1^>cEKcTd!?)rK2hR-SIF&>l{ zb1PIek3}Zd*QAeJ{XUUZ@XF`@ey^!aN1CI(_m+G9NchZ}p9*RV?XXffasNU?LR6WM zGyON4;IrCQI#O;m#ys)|a%+2PxGN7OS+g-Ix^E1XKQ3G387*H2Br|>H_UDTQ&nWFX zt}*!pXSmjUx|ETjtP5uRxxU}~-Yn_N+P*rq)7qOYN2_lMiY^wSI4v+ze@=OriU67u zOk=4d`;9{)?i1iIdDKvLof^S;-6eLr{)E-h4saSwS33xj9lip+(H=SRd%Su)Z)fOT z_K*(E5Ep#~@ZZH4NBTnSB;eO~b4T*!FUMTAnFXe6-;St{`1FP9B5DMBg!OrW#w*~`OVZTJ{{(jLYc|OrH3TH<@n2s4sm7@ z@zgknuauz;b*U#!nFJM) zxT{%7U3YW`W0)uG$F8T#r^oh3s2`!Tv@=tEXz{K&6U{p`{NxjCMG`PEaG0I=f@HbP zx9?^ia&`smvH&|1^RXZ$i-$QkrH@}RwD{aZu+MS9oyP`a?LHWvfAw(Q9Kt?Wp^n2y z#QSqIq*uAa8;VDG)5-0RpWn((s+?gw96})mKeI0!PqW4d&_5z6At>7Zp*4E-J;Lzb z@ZQrysdbwZ=ZC5nYWpJG76%C!QmVPIE*$n=tuk0M+7&u;$91dDq2nq|jU@X7SIX{K zx42#2JNxh4=N;4i{TbB*1K^RB_-~PmLj?2g&jbQ@UKUwezdpHTXC%-qQN%3^TM{}< zB7~jkX7h58!o!4B=8T($o^^7AcWvj-^rPQJ$KulJ?dNRcBC9k`gg1ik4fEGX(oSGZz$kI8 zmt}=&pksSr)>g^0^rJ+yNkzmrcxw4y)#BHJZ0It~8BX@T(SHlFd~ZF0_Yxamw($@8 zQzAoQP46nKN72Sy$qfQd557Xrbfmvo0f#=CW#uv}`iClmMmbn!9rQW{#5IUS%MWSq5LWm` zchiAB;cZQY#iRNx+K|^x6ZaCtJF!lWHphqI!BZJ@E1}{);gV>nN4wxCSoR-f;c4L6 zx*(Y(1<~vvSBdGbADQ4Q7EmlwWc5p35ZF3eq}V{wua*^&#`uA(Enz3f^NgcuQ1kk9AwRik($|Mn8Z=D?F7n`ait?1TC(Hu zYKV_F@0j($S;k)ZYJv0r*5Me7k(e#u-ojtkIsr8jtdB-W<2+-4!U7C2a(jX-6lI9K zC%lpC{PXrl0>IpfTK7VXYy!(voL?Oy9I2G#lTkkyxM2>VtN zY}qMEAY7}>o6XsM`z`xWYtKjECPY&(LB#dCx5aajOO7Y}RgaQDVngJ65acZYgqWrA`3LyBVtvzN;q1%_n6EnP>BeUKiIt22bVN@BB8(}_ zsfKk9&da(ubAF>r65qm%Q)nyz-?hg=O)C9&M7L9<{cG{|UgM-`^|ft{MRJ0ZVqe)_ z4eTh}@gY>4tDox6-VhvtHG44^4?iTN1*JW-J`c*|Qb(fm3lgp5cBebqrgv}(_~*%goqOW-44yJk z6l~{jt-tm#9Y}^5#p%ZqtCW=XYCa2@l#%(MobS>ZoG8R$?piTF=0U{#ZT+BteubZ= zN^vY5Gm|UD1=878P6$4LX2|D9cW$BBUd$DeF(bKX6QW`-{j&+(c+ z^-4kWp!1~+eM5i)Zb$&~`|VTFZO%30G8C-D{@qfpOTallVR%Ih4Hwz0gIS3uwC2Dx zqzkbiXj`?8@7HPaIq#e(-*ywm*!c@5o&tJA}R57yhsgbgvFRhi)WOJKu-^>tHsVG~M z&6k#vdi-uDDy}G(b8cAr!CQ=>G3EVujN0Df)8kc<=Zho$L+a@deAw}a_Is=>v8ScB z_ZV+zYADAp(5NvcGsdzEOK77bKt|q&uWw@=>6sO&TxHO2*o54CT+bcbB+@n zy#Vu2>*WRZ$Fu}s zW}pDpL9mJaaz8su ze@NnDEapstgz|npm!BCW$9l;z28feiR)x?z6rx~v#%1_hkg7X#+J%ymG>g22$dn=@ zu#(q|zSDc<;We&G0b5HJ&u`cD?CgL*r=I}%62W%%?$@WciBpfWclwS8pGHTN{KV#s z6t2JMPJ3XhDwwre8~!Pd>L+WxM&iXEUFP+DykWSH6nivFHt9a{y`f-B;trMw)Zvg6 zHy?9HfY>)oxlg4%-k(7~-^}P$zE%d`LjIvP0?4#pOGnCW!}%oi|0HEN#^Q&$TxGm5 z0RQ{C^~g%DGdw+9GfwW2ck_?&5i2}rxG;M>`FwjWu-k#gM(0_HbN&3EnFQK`0J9N%tb;@ZWT~&S|L8 zQQe|d%3u5znlN744o`>(se#h>s@9-`3kfVRE{ zpt*iKszFYntzgUbSm%{FFer}$1;hU~_4e&a!RTD+V&aoS+L)_QB zd*p4MLbBbgkJ)fuZKhBiQHUcR^eg|O&$m-xlA(F!%tHD~c3#AghbOkEvZ67Lq??TDzlVxSth(yy$RTxoq5LjgRKzbykKey*Ra=hjLJJrnb zhZUQpL0q0)W8m%L70{?H>tv#D-mX3t*u@vzi|ULVvVd!^UV=k;FNx#?T!)GojTNDP zkx?z~i>6`?br&$=NX3Qw%?L)4khdc{WLSqoI7&lD`COxjPxcH@U>xHszT}Tz3Pvm4 zmLJ>hgL`P3j=0`|TbZ6(xsG`fWxD68o99E-# z*G7Wwd)SvdXm^CZskmRCNNw9)k>rkpOe1==l>Zfi1H>rFV=A__ySRieN&EMapF_q-9h9<04Y(J$F8S zMm|S*Z?N^GELf392`OvH?L(Z&Gf3TwM{{a>hlawN={s9=^Zlu@aLkw&hE0@_Vl7m! z7eAUEse#kmM<_<6$r85f-h$h#XL^gI@HcL#e<}F6Mh=-gU%#7qo@XoXt>Njhb)xfM9F+}TC~ z=L4~rh3oBmMKg&WUE3D<`avNS4!GQ-+ta0Q+_XKVMTe~QJ8tzmtZNRBB$AItAk_W2 zPC&|N-}kDz>j-GUs%9=qtQxl1Tp&i<8p+K9SJTGM@W|IWB_hLW%a`5J&9-k!-L1)X zUss9zsPY-vAX`|++%lN{mhJvYWQ04l(N*{wZ zV}ejC-u3-O8edDNSxlf)KJ&Gb``ZBSMcnwz(+ACWhC7PGOD0i@O0!t9OmNwOen`KK zt`6#0ei%j6?Ja$650Y+{v`8o_-LPR5VAm_I%NY9d!#FA5GNZP{G@~-B%R)hRJ(~4G zDJ6v{@OHsOtQ&V$yucY4i7vj5K*~@7p-kY4Qa_3JEEJttAY(rBj|-_hv;7r{XN2yi zAtzIP*T{?Fb=cS{oxB|}VP$uy$z}8{!#}}%w6{(e`?h>OlOl|OlxVC0%%f|U4qI|> zzuN8I2WuPm(oi)8rIFoAs4&yuZ`JkOb%94LJ%bua0q;$6Tt?As&PRH!YP~$btEy_6 zuy8_BqT>U7aO%HSXShhbiI_A<7No1(5cr&u*Ry2|5d{J6;ViN^R=gy-~esXKs zKwr$hpRBs|{d%)U^U9*OtTJ>Yx(K^B+3Pz2VIXILB%Y(wm4tp&L<#%|FI%=VuzH? zJx@YpOY1oxuysI1K0yc=!c;kyhPT+60~f?ef$hD{#dAoky^baPl>k{ZTG>#9o; z!Hf3<3^fQ06PNTE2z``Tb+yq@A_;MF8!)>B*;r!I`K>4O7E$$&vMM|T z1Hz28;W*Oeh;etu?EoV(Ez;|7bB_R947X>vav+i#qj$J7#vRv514XCqmUPz4zKb(!{Eau?_^aQ z|2hQoC{tC}=b=*6^8Qrf^v0*mfw|nGC9m<~yVChoWx2?9#a06g(&-N}|6Kgrw&*E( znZ(i4z2ICjCuvxk$~go7am&q7Wheah`WuM{8zwj((5_)mTu_$Y$tQ>n?`LFJUAG-Y zpU!q>w}n?@*|PJ$E_{S~mBqo`>9E7MGW8#Y7)K;phjR zYI??&JU@_5Q!{{lQ7Ve-uU&_>DhZudOL_R|gAY${ka1@W8ct0}fmu%?_TUIRpKP$5 z)B7;{W^(xRuSyog((|;3*Bt&@2wp<3Kfy;<5A6uc`8GxvSIOgj8}9ZH2ho9&!Q`Qg zpowm!w=?lS_xBSq<@j8rBhf#9Ve42OUvPhUqJF|P))xE|c4Y4w7EKSw1gfc8DI=Yh zH~3ap<^l4+!gyCM`XOJ*;1VJV4+4i@=BIha*HgXuoF7*xVkyvD8drCUd(a}$VX*vD z4eQ@rUEy|<({@^13%}?|-Xj&V$|ttI8B9V!Djf-|DID;(t9-9i@MUA^+97qki*2}J% z2>JJqak<`EchII44>sPgM-&zEtXusK;K52ZEgkS_>)yVs15^aCbdK7O&G5LdxGwo= z$#su+z#`Dt2oP!VE^`a9hnedFhoATdH!B5MigGdR`-9G04H(EoyMZr4g)9yc1HN!b^sO+@5DQQO%^s`*s9<^4}Xx z9S`ZBFL3<5`~pWar~FI$pAEsL@U1V)+Ytvh=lW1(&z54)d;1EfGk&lesvl3a)fZoft70`F|1V1{(AyYyC4#PPv#Xq2*axBBF*hSy z6Xd)_8L#**A4O6GdGKB%u+lYu(R!+ z*TeLk(!BYa>*hcQy_V}s6v=~Mn4Y|SXi*B~q+Z-YcA021uTu7ZX93Jgl0KiLx(-r&Xdzj)I?Dt72!7k+8bpn}RUfc0_wP|Ts_?n2_w)UG z`%G}WGd7Nr_q?jJB5J zq0kkwJ!KXd(tdZOVmh3zS^U-0dEYyZgufHT!N#fqmb!EW;n9&eV4T&$H>Ke<&Eo1_ z7d_jVEx9ql@865MVlsN9tV+@@GWedHsed4~lhpo)O~>x^Yh+}z>4fnwdo>43S5GQ6 zNLqmry7lG&kVUithAE;pN>mSV$lf)xAx(9dS%;D10X|7sf6f7%IC>4`4?OQOCkARQV68*2s7{wykxjVj}eMkHoXxsrO&VxVOZh{LTaaKno z68T8N2HOp?Mj^)dCj@xe4>B`_ubCSAxW2jBqx>lphd3VTYw+t7ieih=y4-52_W3Wr z5~He7c?uG2o>P%aIcc{5g8fxGe%S zFK&FN@*)S1&kmlS^G8*^^iBM4(}OOblkeU%_i+>8LZ?S_MT8L{<-V>}la|zAtI&36 z;QXK4$nAHOO6`P}^9#=`1B2UhWwvh#keW-u@k7^q8-8hoyO|VV$RZMK(_W#2YDxND zEPl=XU!VW)%Cimof1kOmp;O!hCdZ@)9|Fe|J@(&KgG*)JlRXPvVa1r2x?_&+jNi`i z`jN2E?vT;%&$ooMh?Ckz&Vir6zeOMTFL;O{eC>DblMWj9nmBpCMYd+OPf{}$Qn6!v zaMq#;es$WdK$Kp5W$E@}9@o?Qh=n>y}-#gZ~E1Ml| zc(@JqDM!{AUkVZSqP^=$%mP-U^){R&4ypaeSR}@5x$plhgkA-d{e!H*RG|1gRmU*4 zdq5-}KP5x9j93tkADQOmCFAmZQ8p`HRA~UCvrYTjNSkKscKQ+oequ&;qr#pPUl~(q zeVcSXL{A_+HB5OXI8LI&*U+1!YUFSI%kzJ>dtuk>rnQ@6Ysq_3%{m?#$I#O=XP%GZ z`bN3DUFnV*OakfZNaT+0C#v?5uF!J6#Sky=w+Ui>bD!;tOJF{PbvL?_F95MZ&-EgI z#@#_CV>_V_#84bTu-MXH)Ho71N`Hyfj~&{SFTkx(4cP@BIK#ovyjDFR+ zGk;2PrTXN>dVw7NTYG(&iUC$~IzD$iK6NYj9h8!gW%$I_w}VEKA|)6f@AVI_J}O;g zt~nsq^5Q?WnQKgNhVk9VwVz=Qdjv%AxxzFSEI{_;FXEhkZ8`oKma;Y&b1A*5Yr>J? z??Or7R&t;oPd|Uk$UJgSIT%Qy6SvRm2W8iS6YyEkZ1-8Ruq$KS?oT`az%=W>))pjX zM?@0GEr<`=%!_{;UZj9ACO@SLWEm~dK(Bf8#x>0#MbSNFM{tW#ZCBtMxR2NxIfIGl zr?<*%`NY|ceoZUoa-}OgaYS9`5nIfOY!u^rDKett7JYFCyJt&*IB}RW|MPLKr$K$P z*58$_IbJnd1Z7$PH^SUIx4mZtrm%da29g+WdqVxf8r2elPcWPzwir5STsA1 z>;Q|?ij~Ct9)(4?H(7qVp`ZxK;E*g{%)Hse>r>ph^Zl-6UfnrM;cS*4-%-z#mA?`T z`kAr8?LPySmbo+&_)LWBw5$sUI{zJ;(#2$Pv{4o-m8;T}8d`=(vW&j?=HGv`V>71r zj7_JYh>qwqPI`nN!J1AjOH6(07R%7>=IGcxr`}HSS&5#-ytBPIRR5FaO@V5Gi|pOh zkv9UNZ$RtHwOcRRj<#c^&oS=5EekmdgcJVXr38dn$0hE*T(fup+4IFd#!~KOoCGOO z0{R*{bkI8MY`N=E&_nev0Uwd5Pt+g;fBT8J8NB0?>ND+_6H9V6a6GI}KG*Nq7}k2W zu%e;zPL0H0y7kXHCtfqqK=|szO@9PPM#>r&>r(N9``$mZ>ki_IJu{P5UCg*O z(T-R6wqgYaSGFl|%6|_H9`Cn2l79i$reJ3MC+=Uy394%dO@<=EH2vkv+I3$Ff;R++ ziN&V`WaG4&n7X7p3G+A(g*)E+Q3m2M7=_AP%zvy-lmkcbv1r4RVIA&!A8gzK9Y#ga zc>s|3PgY7(%kYYv{S8Lkd=iRUh2IgDujmg=0=bH$G1_Nnc%EM3C7FPad5j3&@AHnT zPONMZ1J~%uUs`k3H?**+*n}(GY6JEt%IQ|d4||2=cKS*wTk@`QDsT28sr~2Cu&qc? z{AeWvWq9Ri9vs@imcD;SNy_D#{J5;ccw-G*+l!LNZhBTLg_hMXFnzku6>_*XL7&dR97=&7QOmt%#ka!wjEpA7}qtNwHOOS0oQ-JG4%Y!zZh#@++=a037Rjg zt4WUV=~!-4R<^yPIv0Q(+>AW6R2P&s1Fn%xg#D5o6&vYMuRsp!ywlH_oIt()TyMZB zoETkQ+yOUtc@L3{l2cdYG$9p3S4P|Ainpn4Y3>8KJ)J>eqhIm+uMOS5{raC)XQj4% z=BNc1(RZ>H`i&O(!I{4(XtWbjxYVenMdta*keSOuK8d15#I7UX@(?x5q5FX>f?eC4daLamHgkJx3z$FGBjFen9M6K!BG)?0~wK z@Mn3Pb$A5GFQFVS?ePY%)e@DlSl=@;Iu2$Fgv%5+T#AbJh4B^0M;_Qku7<(p069zLZm*Is4}b{l0}06Q+?5-~;q3`6tG5u7(`W z^fUJzcLrza3CMZ>a%NNbVlc#2v+fbexpVsu2ljAxp=H+piMVN#SlIZ5;hC|FEr%as ziD>($L}jDORO>Qr`ih3=7pDe{(a@stKn^Sa4ME)WBgbD#X636hH4=#h)<4m;AoRCE ziyiM>@0ZLHdPUkpQZLtEh3vnJ`yMFs;k8mgmw0cQ<$q<1$>k-cQE|Aewbe$i4h{B+ zc|#JSr{i2lDW-Vk@R9N9)tAL2!40@PF9`0w*L-FxP}ZgN)j3xY4{zKF}J z^8IDjIiL0Uei!{(_EiC)nAPDJ#?$E^-Qje%m@+|^X{HXA42V1<=#*^aVLK#HytjV1 zTc^?6y*F=PxBXMs+E;_? zo}|E)e^H+w65C)HZb|RJ<$}v9`u5-Q3g#HV4{{0ut1if`@iNfnqu!?I|_ z{MzHLbz5Rs-O`A3o(2Ju#{WV;#-IFP=*mpPV-(qM#+v5E3~@8vjf?JWt6Kw%R%KV|Bd$3;1fO2&ntbS&b3)+QBR^2P`&o3N&$ zoB@k7^wC(`vuMfqbO6r_lGb=Gn2aN)nGiq!Ef2qM{L4R^cZCHcG0QD(d?5n% z>lJu&1elUl&F&YafgL^gtBXWJwuplw9vIr$4VpLVMg*l;rlf4uaF`_kRZ$XiCDLLA z%-O?wLzlbFi6S^1Fqz#b=sHJt;544nAC^R-`7ydU+`r`S+kPf>WJUs>G^Olb8hEK( zdSmxd{<1dLc(%GuEcC)XZZx({VYqkp4Ks$;$clr+Fnh~2EU%d%#H%9;Yf5t6e_urTckp@!6FPR=Nw!nWN z;n53T-|GCu>2!R|L~EzL`Rx})tZkgq=!|g5`pmZf?{a?0?xTebQTYv|A$hB48V_Gq0=d z83b^~`=2Jf`tyu-C91(X&afUjRyc`ED{7ragG@@IpJ=>yjoGzG+##G~eYnNpTRFd6 zEQnbDa&;}BZnoB)p0NCo96k`#&L!PRB#+H%&%4>6`1*?0YHU|I2IRAC0mwN#!-2yv zj>(*`_Kyjw-7D`zvI{8N|4s3^ehpd_Fn&`i=JGJ$`h?$#(sE-eNMRS4w$JMV}Sp z(&}ddJZ}|-V9MdY?|=b^j|hkC z^rb1y)QguyjT5KFf~+~0S)?hpxhkBPe~i@a;MVJcokU)NS8(KhSU|_>rACn5S8y5b zS`zJYh5s1XdjF*vaVj$7p%(gvfOhl9yYQ_8$$G|haTLl+r=tBI0cl3&#_IB9Sn=hp zeEJU5)Krhl&W}rBx2St0g&j_Us2Fn-qNgxb?LGbf8(}Cs2pC9L6kx1%e#w2!bX{A_ zQeHzt!<=EZc6xXjyYg@9J-*EXnU=S4c`Jom_iF-V=eh@v!~)*5LCv`VPMA1oENw)_g8TkL$jRqh;>L_fax28CrQ|p zYwl|qs?+Y=WEyo$inH?`5)XU-lcIr|F8#T(n)$)42SEwyt0~t?<^lTl8zbqR=_|Su z;zzUrKkCzKzp~@!%(U-QXc9uvpAyOZ^8k5Bo`8rDiQeOZ-{zX z463-^oW|F+C;3~h|6kuOz0L|JB0Kh8Uvq6x>+p`}g2!}dpA&v;N{7zOxSK=;L2l|w zWV8$MBTsU3fZ1j-yy2+LgcoPjI;&J9y4dKp>p1vtIw_idr{P$l`sRb7o*>GTukzRR zLXwWD?UYfua7Yhqmy9>frL^BBJlhv`puiaj9YX9zXIQ#d9ii;E*h^dVUdAobQr|ppmKAIpGGkj-L63l~`A2`)XL1!M<()@h5Fr$@y@TcK!i&O+DfER`2c5*Ezh>x#z{GxY= z81LOOW|6UKOJ&MGR8^9tU}Cy%+lyUB`{eaB#vb2)Y$J|&RcfTy z+VG%$cZxJqCsvt)iPIP`9`3Fk?GrpKD!m#~+(p_czB8UqNT(G?2wKF32bmt?FtkK^`3N& zNlCi)mZCfoJ4=flP|V{G!IbQq>JL+)Q?YEG=0+xfrV0Pa;zBwqow!MSU!;Hao|@pw zf@@xGrG?DxBKhm*BipoZm!rn(X9<7rqIJw`wN%?lp5@;57M$rTKFXsceGNwm+lZM> zHs(|!fZN}y)}y;)&w`18-ITnP&z~4?+~1t%mHS9Cy+$xff^{WU2V+2 z&WN)5f>2yi`4G-Ojp5s-_5h<|@pC4rIgSze9k3c58ajJeK8)dkK8i(O*g4#7b80zT zK-DU3EBNOsIRn&WA+FaM;e#?f5L%zC--8}yw`(~^UCDOqJ58c$s}*k!9#V-=G<3+Y zp#c1&`iyl7eBIq|aK+vMx603rk1#tCP8V-=o4m4Z$)`wzB7UKFNEM#>&gay>)N?9j zRog$w!o>#Eko}<>y}zu7K33!l6kMTUVjN-oREvfNnM?^mwz}g5=z4X2(@Ka zz=u_T;=Oa3^Z{E?F8+Ux+n`MbHj@GR|)_7B18@$6* zXpW-tl`qg5ReU>OGd^(ogS&KXkGux%1Nm9R+e7Hx*6=)@n*s8qJMp=Wl93<TlKuUW=|8Im=TpxD_``P@&Dt?Z?h z`V@H*HBiKH*sRe8VV=ipo2i7sv@5`6(v!03WDgB!6p^al6Z3%>XFZbQZVBZRt%IH6 zP}pI06610!uq*Ocr%ME31%;ke5`+1mCzoR7~A7`OAOzSe)%F@s*GHU8{KcfqHKY_3|2oxzs>`GL?i&^ikv$6yk-C+1^| zQ;T#oK1B4F0+Q3Rzo3@>z3-|Xd-=(aeTl`tE;9`HN*mWi=6Un3@JWxtNIKE?=G2;) z5~XCH3hkW|zs3XKD*W8Vgi@v`*i}%L4)iH0+uC(1KfClSA%So+FMW^_To_G)ZFt`KER8w;St&XG&8PWa|>G;9GLIQw( zV4DxUxu0^6Or3?LdfQW<_37r-QcZ8_l+NyF%$%=m5D!=DGJNNxm1f;wuCLj9(x>0F z-g*qBYsKtHG*qrVxQ9P@ z-&Uha!`7pIUQZ>5%Wi*Xi1%`Ckq7FrmK0e94bJyZ#$b+3j5;CF8HnFbk!(SUjHTtR zivf+SvMG^k#UQ!FDwWn=BFvlA4|gZEQc1+KFZo?ia)I-CgPEP%O2Hg_kjqfe+(>rg zLSe9sosU2SH#iu?VZ6?OpIB)uwyNt-5EyDatn+P1^5?5C%Fl!sM&Bsc>`;mz1x&2n zja@%%Cg(C!6a?nHBIuXB?RQ~LsGB4mLJTtbDN*wtVZ7`Jl5Pt0?=aS5Kf1-~++~c7 zp@AmGQyMd{ydU5GGriLkQ9O*I%oo8NN@6?WC2%*pk?jIan8BSqK4^JdmSsu)Xo!za zdO4(|K6(Jl$fGy#5DUvX2Z|?3Qo&b4Y;eB=DaoYo%yAB36Ui2*_-&xlW({hGkPi=TRzFCZ%-4;H|`>{^h`7Ze%45G{s z4?JtOw(N$cO;Z0P>?NP|!c0;2O&ikXzID>F#smR_K()PeXv<*1d0P_GEDbkjtn@=J z@6D2);#EUpU;ehgFA*k%eMf_RMVyp6Y(XrDhr1j;S*vhln>M#$Q{lCvdLTVPnL-$W zeSL>xyzpJ(z#27gSZ;N9$jxwXtHgxVk`Q-jb-kSJX=^hE_(~ue_koR6us3T_U3`XB zGlCa#IgLCH8)SZPktVN=i;UbuFi7N1wjIQn<}aS>DyMLrJE}T>yo=RUlI7Cq4oRq7 zY30IGNS`s|y`f#AI>q7wY@%zt6@7nwvw}%6a6ki!z-Y3?IV>m3S)`?5meH>yHZIa< zZ`0~Wq+ifnYExDx23l6uKTD>@#}o|v=&X2aLzmG=ox(PqJM?h~ zofCi$Epui1HP7`-j{gg|cSgwMo%K$GTt!@1IE;%)Ky%93jnpO%!^6i()VY5~hJUnp z{Y?5$c9ZWV5WFAGV3Wz8zAVEbx_Mb)N`A6|2sHT}RH?etRfjg9jN<>!0wkThqJLOP5EPu0)6yMZa2fSIhms>m3KOn{SsZMu z6gU(oW9T9R>W}d?op8#c{+>j9l zJ|zp|tQQvzbZ=Ns6ixzJ1+;SM5>k@-;P1@odplG!_~!NE9rvjt&r>Jt{yH9HFntAt zi&W)9S*?2O@z-d#A(x3Wej_Jjg7jKOWN0Yx|FNisHCt54sY{;^9Lpqwt}-RbEL43( zFz#P2qWlqQNOh3LR`K#l;Q2IvQ^YSMUI>abyItX-dHwK)e5#Kg(I>E04ER*1x&1@d zESp4cx!1@Qn02UG+(y5+B`5LRj7)HD;s69WlN zRXN~bPV^pSLahyE?~ zqj#&Gr3Q8n$_E|Q`Y{V;qk!58Knz^G3|b^H6IjWlf34W zTjYV>)#V7;I~c+5oZxYmOhd&@9&f184lo&EsN%!->g#LpG8*Ts;4QYqCq_Zy{)old zX&m|ORf1n35kfe%+SK~vdInc~PTQgc&rK9oB2$uu(?&wM$%f*nWpDUsnGx3Vm^03- zjJS?udF6jNX`)#hm7AgOrIj=*B2BQ22<~tZmE}Rfn4JB8jlE@5Ro@pjN`nXz0@B?j z-QC?K-Q6WE&7q}1KEB|qz~OF9n#?4`1{{+$Nln-_v;yFuf5h>Yu2-#Id?=+ zyq+Cd*HhOwQ08+Q)$3(lmi|z2G{xf=q+VHR%54)idXSKOhM!p zLS4DwrQo3x)q@Q!Pi0ZR?F9|`eO$QPWVS^bdCKEMbv_4HU0|`En2al=zltnAia#A~ z>R6ri*jNbLX1WD%EQ&8S8NHx$9BXc-(<&?15TBE*)l%aXu2t}x_qor(6V%?pP3P;H zDXJqA&~E>g?0$)sp;cSqrdik1(^qM`my8%PTN~wvZEEaIQhPr*izj?YJMy=U;rdzx z0GT}t05d067fDixcs0KGURprIj~&iewbO|-D~nki$=~h*D@#pz#|#$_rXYWWP!caB z6N|3c6+$(FBFC<0X;Ox!)%mfzoS!z(f}rv~b0HV!9wTm1l00 zwz>dSeuB>h@$=Mp^6a<}8>7|C$>|?JWA~QXno)EBJD7ucT#;}<$fc9r_+3hM!OINp zZuEd;rXz7sFiGW;n6>#|r8kA6QH!v~>}qai(KVh>fHa)2c$z;_Q;l@G#z8y7nZNXO zq%Cv-jZ9dRb7mo*m;mg61jw6Hw$W0`AxS<53#jStg8kEZ)!ciMCI9u6h+ztbRX&vF zpq_TFkz0#a;$&Q$S!;^bzE<6-w=_vaS;c&RE6D*?jwJ=kp;u?=2ZZhDFJb#C;pDCi zUxLs!N{Q5tVmZZ{|7R8CX#pWz=$VtfXG%{!CUj)f|3M;e)FJ+Rk0TSAt11 z{0jeowJ^_nNshNe`CNC&=LXZ+W4t8$#jXBgR(%L3EVCQ{dRp!nXejqWB!u~kq?>J6+{tyP?1ORg@Bq`CXEDCU(of*44u>V48H0Xx zadA9bYcaFNV<2C8nw8}v`>Ip|tu6*>NYAM&Ka?;Fyytbv={RG zr-DZNCv%Q@5^-rZCRqF*RB zp+F?|emrj!5Y69_Ljf%O1mZ$LVnOhY&+o@OLl*OL#Ndc|d{2zE%nTdj z)ZB~UL9jA_5SQZ4Zkd;t%uGETe;FenxHQ3>{0ZadukUB37p{e*41*U}w*lBQv8i0p zY}!T!8KcDcz1VSyL~uH3;v^}yno_`RWCFEy#^mNe#eb>738;~(e^A-D#+&LW4l~*z zd%RhHlBl%IQ<`#1Fst@Mgc1u>@QY^~yEm`LaI-1-v%z|^PaK}+ig-QV>b*KuUGb(` zkbidXK^&qNLfjvo-Nfm=N;f-Tan9@yty0cbDZYq4ulo zb9yHcVZsi&rYr8kM+a=R-#a;RqoH45Mh~Q;j3Sm9r`5S1M0)nl0IT{=svVt6cLf9I ziT!3~=bQkpltAK$FF=Zt(i!G4Osl+Gy}4SfmuF@786I0eQ)ho>tz3 zDfhXod2n}KR3-ZqLa2<( zP>2}EDY#1qM+643U$!Dc4|=uwVLe3uo(=6m zL2P%7f-5TVH{;I*?F@^3the(~E5vWOK-Z(>&@@g;YEmw5dN;CISu2!EPlteF&o+?C zHRIy?@eJ$3_HbfUs0rNc^_$tB!)`XO=-pyhyXj^~TUzl;Q?pF6Th4RFxfc^!`2+BW zf$hSQYPYNF`#DqzjO74~Rqg4gK>4KzV{HDoJ`t&#TIO=Y{+G-t6Kn)C{KZpc2Nj1z zzJ24Y-Wj2%lhXH6G*r$fNOph9^&((A2|?bSaUdg2Cdr2E+%D3L7s;t7)?}#ExM}-0 zj&~Wd0y7h6`E@K@R@{G(OOr?4qtO6!9J#`JS#IO)0c`6F!2=f&%!JL7N&CV5fO2kor%lGGO|{tWoSX6)S$Y;ryK2f zp7p`@Y&;+3oJsA227ZG?s!8T#G(xJ$?1Pg5-^rdU1X!XD$a^l1KJmihyn_pSg;%n* z#b8?l*Hl?xHSCXf>^{hGydU1m-AAy+7|W&{gUA4 z^7gai;vaSDl$M=Us6-hK4*y{}-~&)xtmhLckv!#Fivg#veoB$9E-ga=Gb>uhQ5Bwk z(4#TS1lwirCE3|MK~#z$bVdWgv6^F_n}vcuUCVe|hb&WfK8C9e+_+6|6c$uPFl?47 zQKwjzh{4MLAi7m9su)hJ^(;+^naU^5aQ}90Z}qv=>Yu-Y!Pi;qT}Ib+8yR}ee-G?` z)w`#5Q^W4Qw!dC!{)}XGMCoZY49n>ERVe=TIF5SCQ%=Mt!wAoZPfVOXcB2~;JW+}N zfpfepIw0hY00KCr>ydvt$iJ3@W-l!u{In*M;omflbf9+j8j|!PVS*asU0v$DJ zWs!dTu$f=sU8n4ZtQZrR&c3d%R|%VZn>+>FzPF5!9@obcU?6p8_E#4B-y#eg%G_zc zqCXA4UTgmB13Pe>UDvUC=~~eAJ*W;>y!=m=g7;O zn%lF@?S76Ik=2*!Dwc9e&xL|1ZMwaehQmw}BtRx%V`!so>OsSV7gxR#S3o$o=n$6;?3B zKqet$7ZXQo^xd?uxX6tDP6n7BB+smfaSLDnQpbB0=FR?$Qhcti9v#_l5W8I$$f7X2;nGH{YGwn~gII`a zCjaDY>p3jF=(wjWF6W-y#+NFGXy(loFxL#*6aPi*y}_>0BrYbelb- zTf_YGzz6r}PA&1MQ|8!254cWlyNbDnIPMmf)T^fpUo~i03Nm+7UFR-0lNkMD*FP8) z@E!`en9>6kLv7;hLkLer0Wj%2B10*5mCo_7%|21e50Pe>f6NIe_dOAA2W7=%$p>o0 ztr~3q{&*1`x6#6Er0Jp4YfIjlcfJ`ky=&Munk(U~3;RJVOgQkL0jJ9;-U!TB3Wtx< zI&z+-W=uNK(ErT9%fT>aFLA9=_2Ezg8oMiZrbs*}`sKxRRFmv3Q0F;ky>)OlIQxCW zu9Zuqbc~aA`DfdA3fdIq(QYg%LVf{h6V+LZAzvpBf&e@84W(d}nQF}C8gK#Wtz@!0 z7X;<(9O_a6H(drF9RjA5AM#ok|GfoF{HP}Jh^p1>oobR2{G}D;sL{!c!;+>jS?~)@ zaY_qeQwOKbq#EE2`2i4yqaZouEYNN1wcI=Kvf&U~NV9&XegWzAgQtU3>6+6_SI4j> z!}5#JaU>oEw3?k$T@r;eg1_w51H<-CnS6E18c8d!AxP7Ijffe85@mAJg{V_?Oil6Vh}&}Ka+>rypH`M zn=R%~iB7K-J0vuiYuVNon)S4D?{If4p)X2i6Kc!54^ntNXk8p3ub|v-_RVi4=kte$p~cZRMfHZXKHA@=xm5B z?6l=&QNO;RaC)O(9e~ z!K9*$R`&F%a%XUK#pflg(=c4}FD3IMTjVm|OwB2oy_k`w;+{Pf6eV9j;xN4$4vDIf z&tnf2=*bik&_bph$jGmE@Mv|cJ-|ic4bpjVHsEW!4@83p;6>nMr;#L8A|pf{oX9oBTspq1|U>pQkgWKB({N#PRhCYax zFH1OmTS}Tc1=5TF%wwa35ket%{DoQUl?<`vvN91lS>5-oNMzN%WWR=>EjEUY=U!db z9Z{ET(psO{d?U~>DVrDN-U{K;t9u@$V3-k=|Jpoi^VMe&EJQAI-r5ua2-*a%c3buj zT`_VgL2)O3j*vjZ@}--nxykADE4&stFAXnk4%0+v^V!<$|0W?YZAh*^7JDjO`EH;% zjVF8YM5NJ}E`|T6&x|-P2ayKF&r5aFm9fW%yMP<^txglWtGi6#jA(V&G?~4msX$ui zAvFr`GyEIz6?5HYU{#tMiCsrZkYN;bWMY$*1~pGe!CY!RFiu134&?OO*z*?j`v!-B z5C~0uDP91Z-w}V>wcpE;^)=s^O<1KV?a6IB6=QG^^ zbHP;)Mx&!j0q%mGN>BMBYu3gJHHchqpLusqVv{eRep+@wXOT!uS3O&M%2*3I>iCjG zLoQ0dlLJ>}H|B^YA4QbOV>(#18%kIRC3nj$R)Tz-J)f)_4npdnw<1@JS!jwMGtU!Z zwMnzEb_U;eN%!pVO)wv{-rxr@A9WVJskU&@qQ^g18{Z+01@)jkccEvZ9N|ZFo#s<; zM*aF59~S1W<5^XJ`q|jE<@Amkvfzy7HEC9o5K|vtt;ND^ zbSN@E*4o_lVq|}&*$0=>+0|h=5`OJUZil(3(T;d@F&+$sH=Lhn zWwpD%RY(AVyy|NRcms4%RghjlV&uu*y(iB>g5_BEC$K7o{|kJ4%SWBW36w2%bKZ2G z>~j@%vKqV7e&J!$6S#pG$L*^f{IaoX+9~cas1=2Tk-Lg4D`EK(aEJOVKmkS1=ig@i z+%JDAcYaV1OJn=S67Ju)X`{q;9SjC~i6ba`rx^p>`^6PEq*Uvo>Ro^RT!F?P9$}eQ zmz3t?S%JMH;(Rg1js^d&mVk@YpHU*hpBIB)=Gi4fG$@J*rDNs8>tNuRw~dwr6%(s6jU?g5g?L+!u?GQxj-DMR;SEKOB_S%a=8*$?J z1JqNw30ZIxYn}r!)!@hyL6FrZ+y7YPyt8PZpA0t`jJ#6*d|GNPNZ2NeDAXIH&4U0# zhuH#Til7{jQnPGSU#K5OK`b}ON`Q)|J8{5vJ!y1t_8xy*IPIe-E0r7?;fPft7*l#I z>4b0?hT*lw+c3Ql+)xYlNXdvoP&Asx#FMXlsm~F9%m`B1zmmnbfn-$0tMkZaB0os%&16I&L~sH*cQa9S&}JGYzse40<8KSkwpcnq>+x% zM~U{&{s~w^t9oWXRz}jlB1Z9i*$pIFFut_0dSk@JQ3D1rr5b{QRfI201TFgG>-{mT z^LQ=nZyjNwS0W?a_#M0{W&+bbVPs#isBd6Hmg>@q}qq;tOmIu({-u^oxG8C^1R*zr;J|7=(S zP}N`N6t0{A9ARe6oeulCh^DINuNJe!Ke@rRjU|2Ex+kIurpj6;pJofN3crgtB1hUv zBf(JRA&YSdxU_SNRf$!>l=Aw$mTGUK8oLWMZ$w6iteeR!XgLwX!h0%&;J_n9QE>E7 zfkeZ*E)vs2TAHp5LB#XxSIQYX&jLmfw!92F^k%VZ zJ`4hqjUl8+hCkNbo`WJux#M^a^p^IVNeUm%V2u_ez35zl4r+uI{=Thf0Y5|YT@xKn zluB?pvkFi0f}~{FrgQ@KSKX~Q_6ItL%L2OxveQu!VnSPV9bMfgkvHkn>!Xn%q^}E_ zy!VOX=4%>OTNjgWFv#8-Pixip%n_@{tI=U&idanB1U%f6?7L9?SVu<7fVFOXP}XDb zLC}bs*^TQG-Q3-l4aiG`LAzSY+g5cx7m`6*Q|x_<)g~uk6Pr5<*e_H5qc^{0EfKsV zt3#!~nJv2iWgn2+n%%l94NSAt@jBpMu+Q|%e4DU+B~97o?>qsyo5DEFvn?7b=K^_u z0^woWUh3kX)~;r_gw70;;Q`5aW*{g>X#YE88u@MpnyW1y+3xa{L++Y6Vk~#!|pK&#JgJ2VQ~8s z#%YdRgk{j1e~?TjSKPD2Hd|IHz%C}m$`DHV6N9{GyH}jr+f{mVy5XK)&j+logJickZT#<_Tq-%$8WkL5s0fIXrLB!_ihv#3_OhWNP59GA6PB}aTMPO+9%~4IW$_HvKZnxl3@zU8oV3AWrZ8CMf5rtMNvI3&1%n z#2WQK8O(W0n)C#G0bqTguW1P^LB4F?U1e{}dqVw>rnQyXm25C0wx*Un zR`?Lk?W=P{lK5$Lp4w8hfUhi$-#PDw$%6D~QXqSJ@vWq}SgCm5A#huFoL?&f+S(I) zKPbitg&DPVJD?&oId^i)9UVwh0dazmlmq;lnb)##-terBQ-6@u`9>@O`H+}Hm>E7$ z*H|t&j7HnbmT+Rt6=_yWovsm#E%pILVFHCxhSzv{^c50ZoDF`VcScBJ1E_WCC!S!+ zf;~e3SJJqw4MLNg_EjjX?hRT0XW#-Xee6ile?UQo*9*^m4(5IQF(d}qhzB2#&J|L# z0YVHHYb1a^c*$}Rd19jtZMgGG9zqB`>vspBD3P0?;ux3^{68obM}a8pao7$!2*I`n z`GaH0=4|A@fVcCOU^6(?a{5-s9n#0QD*QM=AqWA5AH(`uX`=J^jkD9YsT4-h_s9>H zNTcXKm=4Icihc59FisKXB`?fw>GF|AkwFNvRU0-7vJgUgQRLf8K$YDvSsHrTz%K0+ zgkm=plo{>(l-A#_mqK{;4G^8Br)4a-2n*-agHLhfVA!cxbD!x?U|_JWUcM3VF6<4R z?u8w@tZ-W(M?ndW??(ckQPYxRZ`zu)(J~BV?C)GJB~Nze%H7*L1O}z5hs0qD_V~px ztZT#Dr%q!$9^eu@Ddx_PR|QEvkARr)LGvFq*ZREoF^~5Mu;N}dQBpf^zeOoHwr@yH+zLuHgRMXa&280 zIUSqNjW!*k)q~e6pb4e5d z*^Dhnr@3L3`{kAm2g9^fpbY5mc#%~tOH;2d1RH}=`Wz0{YuWc%I*~k0&|jtz62HjPNX;IGRqKB@-iNi5|Kow?$hlBESZVQ?UM<-Ut^op|7AZ) z5*$t(gE>7-=c2anXaSEsaS-iAGxYNjU<0aaF2A0GS&o1JsdDSGTUQ~1RH>IB&)7Sl z@=7gW^<0EM<|e5VcK<7rat4X|V^s%5ckv~7LXk1$Xm3QCiWI8PNyTRF9IU$;+Jyvh zwrU^TIH^C@b(7MW{6a31rxm67DHQU~mfe)yhd;1q>eCgcNJozA^E3LVyNvFQ@rC!( zLx3Fx+T6NznBsHYC(>P!`JrIN*#@UhntP{*OjSZkEYk8v9|ouvMlE;9<6AGz$4Rul zf`@C(f5@ldt))h1qGFhxP6@m7Y_lW!_W!FDW947`qzqw(2W_{{kk$KC;R( zN8zC}y&}N;O+OKW1sZ5vP4g?(EY%VJ$}f_{c>#iDL-W5tRZQDa>|cZKUVd-rcg-69 z{6*No53B02GBR`|m-?W2(bEO-M!V&ArlAdC%@zl*uZ1wH-H5JrTUH}N6A!IeYdoZq zOJfL8BT@d(oi7c$$q=g%^;5?c5CYdX0mzLnQ0+iaEOCq2@G%%T|1FULWWd?kxlg2a zf0cXfQ4i_jgi55OlPwDLnpPGwN^i#}&l64%+dhle6Ra`ni)h}K*2 zNiN_xPCjXMa{Pyj>`07EpRZKF)~lrPiSM0w1@WA-hnUAJaAQZe9>c^j%yCO31vJyF znAIW2+|A9$v{(3EBn3u@U*0B#fbMb=e_<+sT|dV{ds3KIZ$*#~#38s*YwlTF;!ab@Jnfr|z3oVa=Ik z&UWgL^3f-7NU0+j+Pe4qn;_6zP2$2g(jSz?Ajyu<)2doPe8F3}95TetNPmA3Uy@o!8RQ1ED^bIN3qvtbEp(cEa7&T2_7jwYseqg+IDHQ;IC-*b|A|p^*M1hteCEXA+ztoLLioaUr;B|z)hh}8Ls|z6rJ}iOTzs?wIaTCp zK5Te7uD6}GJZp_b=NtzkidG!(7_xjBf5;~~Urmh_Ikitvb4M~{=yJ-J=Z7{QD}n0M zG4*in2BY=)39>VLn}_rqn3d732o&CeR?TJL#BmWb%a?RSo;$J#w(HjYC)OLBnQzCi zo%~&nj0@1e{Q*-$r;V#F`R&`-qtn^@>KlE|O#Pm|x5J?&5^cOWRcFbtvibR&G{anK zWq$COPU_0JL*t>Kie03=r?a0yW_@AtuQi!T=PhAFEI}2by@j||PtzS6ej**8fIy$8 zAL!wxl&wTUTeo)ckmQKMsHtXe#%A)!Ve`Z>#^W<7O>D&E=^M+{3@1`wC))lR)s*qs z$&>npTi9BW_APMHfSnzO(hn~q3j%5ZN-a{5j%a0&tok?SZ~953hxg~5b2hN)(fXp& zn?x40tMUuYCHUPAZa(~Ok{wS|0o7brs+@RLE0hkjk@aXPnN^aVbSenpBcGh2(^1j& z77&963a+wKZHvYC?XjKIe%{VgL!}2ZbEm-E9~VlHW=L_&qzeMMMMYzKhGk^mGyP86 ztJu9DlU9EW;%1`i$XTHG3_+e@xW2w|b9DtZT)v*z^GF>h^s?$LtL+vYf?Sc7$jag; z%D{Y>RSX+T=y((|grv>F}hdVJ#|r zNDn)XzZc67G+86$%vXoa6Ej+nw=QT>;HW>@vlVW(r7($y)s4wu!H^XT|GB>eo(UxRvI=lhm<(M>jbR`ruWFWmgsW(L$8fZ*V8?lZ%&r+aS zuxP*Q!`7>hWS7({^Q-?i^|bz$=AW9L9IZawU0OJJE2Yw98QY7BCYcZE@P8Pv!8C9U zzjB-o0$Y`>>$$YwbN(Xyr1gn6et?=t)qC~u&*8*?zg@MUBLyOHoc6n3TI^~B1cU4n zTJuf<>t$?~0dE$DXdZ46mkOx|b8A;`_WtuL*X{5AAF#P(=w%3Ds;MQcKCr5&s(kf1 zD}OQ@FpDZ`OXXUauF&1z|J45R@3RRsswzzxUravy{S>PjCL1X(edEyPnn)@o^Eh@B zx7wIp{QSEu$*HzwNBH;pZRnPD?f>uo8}hD69x6fO5>xCF3_0tQ-C{6Ge+l;Ljq1VI zsDYCNQOSu8u{pnsYlVrft4`mRAmUgB7;E3Uug&CUxaVRSHp69};TUUdHMJz%X=? z&6N||Df=i%V;W~(>{zCt8f|;2rG|}>D<&y&9`X7bmHp$w+T4C4dX;>*ifY&G3cSj$ zcp3Izo>!5LNgsOQYX3g(%bxzd(CvP{v*ft55Yzmi_U4_wLF5O*zaewgsf8=3h8GX| zjtU+Rowx_xkeX>E<9Qk9Hs2jDz${MhxUV)1{1iX!8=jpidPGgr(p-)*4oN$|$P1-> zJt*)cK)VKQV#4?Yd%?`#`!DXd#3sBmQ*ot9f411F#Y&ZmMOw~Y)Yqs{8mQyD^`$By zz1nB>4id~ZgM;3$(gRcY+nVza!#_JgtlVdS4{ z-1wPRpBMYE;V=AEr`CUAZ!!^!Z>C9bpJFIy!wQzw2 zZ=O)Sue1L6a1klRH+RUt3^#h^($u=DMd`wu?O0WEMXZdu>b7ngh6FWxgb z4}Fe)%KTob9+UTow|J6cuBiq@Ty>_6OPg7_K{(#Q-tsXK5r|C7W=y13%f>#or|7uf zt;=i)zM^WBl<6jSkDN6v>B}tbeI$%dC)TU)?ppI(!o|*S13MXM?*_1oKK#DBv?--a z{C0~$CFjOD74$=h$`5hF9G)CIM`x{xMUxTc2$m0q4e<=7hdnsz`4ArF29_9Z5t$8% z?ZW+AKpS}d3%6_nF~9qYwQFdZ795B*ocN}XZ2k7{x7T)H=lWObOpF@bTR2n~E=7>^ zglf^G2;_o5SW_HWgO{gvd@g(C(w*!@|GuBDM(@0uIOrSqV33(*XU1_@V^e#t5Uh5L z<^0BUivXh6k-&kuJCZ~-oC`C?1l0d60v9G( zjM_~MO!B4BYb>Hk3RmY{<4{rQ0{6nIZ^cvBEV5*vEpfuh4f!wYY}Kq9DPV%kK`55*XScktM|8|d z4@uRpdgSb&3zN zTV6^B9Ae?XS1>|Ukp2yS>l~tvnloRYR|%s|Mqd43{7<;8*`~9|JVfx*Ua(YQD*t}M whbxVj+&>?GnLM!pLcz;xN0PQDWB$Uco*iYbY#vksACiQTmsXJiOPGfKKO!KCw*UYD literal 0 HcmV?d00001 diff --git a/src/resources.qrc b/src/resources.qrc index 619856d6..05afdb1c 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -34,7 +34,12 @@ res/VRLEDYellowSmall.png + res/faderbackground.png res/faderhandle.png + res/faderhandlesmall.png + res/ledbuttonnotpressed.png + res/ledbuttonpressed.png + res/mixerboardbackground.png res/gig.png diff --git a/src/settings.cpp b/src/settings.cpp index f235a0a6..cb5151c8 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -141,6 +141,13 @@ void CSettings::ReadIniFile ( const QString& sFileName ) pClient->SetOpenChatOnNewMessage ( bValue ); } + // GUI design + if ( GetNumericIniSet ( IniXMLDocument, "client", "guidesign", + 0, 1 /* GD_ORIGINAL */, iValue ) ) + { + pClient->SetGUIDesign ( static_cast ( iValue ) ); + } + // flag whether using high quality audio or not if ( GetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio", bValue ) ) { @@ -199,6 +206,10 @@ void CSettings::WriteIniFile ( const QString& sFileName ) SetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage", pClient->GetOpenChatOnNewMessage() ); + // GUI design + SetNumericIniSet ( IniXMLDocument, "client", "guidesign", + static_cast ( pClient->GetGUIDesign() ) ); + // flag whether using high quality audio or not SetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio", pClient->GetCELTHighQuality() ); diff --git a/src/util.h b/src/util.h index 82c1bc49..eb234e12 100755 --- a/src/util.h +++ b/src/util.h @@ -443,6 +443,12 @@ enum EGetDataStat GS_CHAN_NOT_CONNECTED }; +enum EGUIDesign +{ + GD_STANDARD = 0, + GD_ORIGINAL = 1 +}; + class CNetworkTransportProps { public: