From 06dd8c4be333463aabcc1c869574776909c51ddb Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Tue, 24 Nov 2020 20:25:39 +0100 Subject: [PATCH] - added log text - started to implement autostart --- build_qt | 4 +- headers/backend/linbobackend.h | 15 + headers/backend/linbologger.h | 47 + headers/backend/linboos.h | 1 - headers/linbogui.h | 2 + headers/linbostartactions.h | 5 + linboGUI.pro | 8 + resources/fonts/Segoe UI Italic.ttf | Bin 0 -> 41332 bytes resources/fonts/SegoeUI.eot | Bin 0 -> 26864 bytes resources/fonts/SegoeUI.svg | 1520 +++++++++++++++++++++++++++ resources/fonts/SegoeUI.ttf | Bin 0 -> 34164 bytes resources/fonts/SegoeUI.woff2 | Bin 0 -> 16048 bytes resources/linbo.qrc | 1 + sources/backend/linbobackend.cpp | 65 +- sources/backend/linbologger.cpp | 34 + sources/legacy/linboGUIImpl.cc | 3 +- sources/linbogui.cpp | 4 +- sources/linbostartactions.cpp | 33 +- sources/linbostartpage.cpp | 3 +- sources/qmodernpushbutton.cpp | 4 +- 20 files changed, 1727 insertions(+), 22 deletions(-) create mode 100644 headers/backend/linbologger.h create mode 100644 resources/fonts/Segoe UI Italic.ttf create mode 100644 resources/fonts/SegoeUI.eot create mode 100644 resources/fonts/SegoeUI.svg create mode 100644 resources/fonts/SegoeUI.ttf create mode 100644 resources/fonts/SegoeUI.woff2 create mode 100644 sources/backend/linbologger.cpp diff --git a/build_qt b/build_qt index 774ad86..5229807 100755 --- a/build_qt +++ b/build_qt @@ -14,13 +14,14 @@ -opensource \ -release \ -static \ + -fontconfig \ + -freetype \ -no-accessibility \ -no-xmlpatterns \ -no-phonon \ -no-phonon-backend \ -no-webkit \ -no-exceptions \ - -no-svg \ -no-script \ -no-scripttools \ -no-nis \ @@ -38,7 +39,6 @@ -no-largefile \ -no-xinerama \ -no-xrender \ - -no-freetype \ -no-opengl \ -no-glib \ -nomake examples \ diff --git a/headers/backend/linbobackend.h b/headers/backend/linbobackend.h index 4184def..65434b2 100644 --- a/headers/backend/linbobackend.h +++ b/headers/backend/linbobackend.h @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include @@ -30,6 +32,7 @@ #include #include +#include "linbologger.h" #include "linboconfig.h" #include "linboos.h" #include "linboimage.h" @@ -42,12 +45,15 @@ class LinboBackend : public QObject Q_OBJECT Q_PROPERTY(LinboBackend::LinboState state READ getState NOTIFY stateChanged) Q_PROPERTY(LinboOs* currentOs READ getCurrentOs WRITE setCurrentOs NOTIFY currentOsChanged) + Q_PROPERTY(double autostartTimeoutProgress READ getAutostartTimeoutProgress NOTIFY autostartTimeoutProgressChanged) + Q_PROPERTY(int autostartTimeoutRemainingSeconds READ getAutostartTimeoutRemainingSeconds NOTIFY autostartTimeoutProgressChanged) public: explicit LinboBackend(QObject *parent = nullptr); enum LinboState { Initializing, + Autostarting, Idle, Starting, Syncing, @@ -59,10 +65,13 @@ public: }; LinboState getState(); + LinboLogger* getLogger(); LinboConfig* getConfig(); QList getOperatingSystems(); LinboOs* getCurrentOs(); void setCurrentOs(LinboOs* os); + double getAutostartTimeoutProgress(); + int getAutostartTimeoutRemainingSeconds(); protected: bool read_pair(ifstream* input, QString& key, QString& value); @@ -73,11 +82,16 @@ protected: private: LinboState state; + LinboLogger* logger; LinboConfig* config; QStringList linboCommandCache; QList operatingSystems; QList diskPartitions; + QElapsedTimer* autostartElapsedTimer; + QTimer* autostartTimer; + QTimer* autostartRemainingTimeRefreshTimer; + LinboOs* currentOs; QString const linboCmdCommand = "linbo_cmd"; @@ -126,6 +140,7 @@ public slots: private slots: void executeAutostart(); + void handleAutostartTimerTimeout(); void readFromStdout(); void readFromStderr(); diff --git a/headers/backend/linbologger.h b/headers/backend/linbologger.h new file mode 100644 index 0000000..2fafbc7 --- /dev/null +++ b/headers/backend/linbologger.h @@ -0,0 +1,47 @@ +#ifndef LINBOLOGGER_H +#define LINBOLOGGER_H + +#include +#include +#include + +class LinboLogger : public QObject +{ + Q_OBJECT + Q_PROPERTY(LinboLog latestLog READ getLatestLog NOTIFY latestLogChanged) +public: + + friend class LinboBackend; + + enum LinboLogType { + UnknownLogType = -1, + StdOut, + StdErr, + LinboGuiInfo, + LinboGuiError + }; + + typedef struct { + QString message; + LinboLogType type; + QDateTime time; + } LinboLog; + + const LinboLog& getLatestLog(); + + QString logTypeToString(LinboLogType logType); + + +private: + explicit LinboLogger(QObject *parent = nullptr); + + void log(QString logText, LinboLogType logType); + + QList logHistory; + +signals: + void latestLogChanged(const LinboLogger::LinboLog& latestLog); + +}; + +#endif // LINBOLOGGER_H diff --git a/headers/backend/linboos.h b/headers/backend/linboos.h index 24afa7e..7261175 100644 --- a/headers/backend/linboos.h +++ b/headers/backend/linboos.h @@ -66,7 +66,6 @@ public: } LinboOsStartAction startActionFromString(const QString& name) const { - qDebug() << "default action name is: " << name; if(name == "start") return StartOs; else if(name == "sync") diff --git a/headers/linbogui.h b/headers/linbogui.h index 1b15ee2..68d8b81 100644 --- a/headers/linbogui.h +++ b/headers/linbogui.h @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include "linboGUIImpl.hh" #include "linbostartpage.h" diff --git a/headers/linbostartactions.h b/headers/linbostartactions.h index b8d83de..e20c025 100644 --- a/headers/linbostartactions.h +++ b/headers/linbostartactions.h @@ -6,8 +6,10 @@ #include #include #include +#include #include "linbobackend.h" +#include "linbologger.h" #include "linboosselectionrow.h" #include "qmodernstackedwidget.h" #include "qmodernpushbutton.h" @@ -35,6 +37,8 @@ private: QWidget* progressBarWidget; QModernProgressBar* progressBar; + QFont logFont; + QLabel* logLabel; bool inited; @@ -42,6 +46,7 @@ private slots: void resizeAndPositionAllItems(); void handleCurrentOsChanged(LinboOs* newOs); void handleLinboStateChanged(LinboBackend::LinboState newState); + void handleLatestLogChanged(const LinboLogger::LinboLog& latestLog); signals: void selectedOsChanged(); diff --git a/linboGUI.pro b/linboGUI.pro index 6454074..1c6b028 100644 --- a/linboGUI.pro +++ b/linboGUI.pro @@ -25,6 +25,7 @@ HEADERS += \ headers/backend/linboconfig.h \ headers/backend/linbodiskpartition.h \ headers/backend/linboimage.h \ + headers/backend/linbologger.h \ headers/backend/linboos.h \ headers/legacy/image_description.hh \ headers/legacy/linboConsoleImpl.hh \ @@ -57,6 +58,7 @@ SOURCES += \ sources/backend/linboconfig.cpp \ sources/backend/linbodiskpartition.cpp \ sources/backend/linboimage.cpp \ + sources/backend/linbologger.cpp \ sources/backend/linboos.cpp \ sources/legacy/image_description.cc \ sources/legacy/linboConsoleImpl.cc \ @@ -105,3 +107,9 @@ FORMS += \ RESOURCES += \ resources/linbo.qrc + +DISTFILES += \ + resources/fonts/Segoe UI Bold Italic.ttf \ + resources/fonts/Segoe UI Bold.ttf \ + resources/fonts/Segoe UI Italic.ttf \ + resources/fonts/Segoe UI.ttf diff --git a/resources/fonts/Segoe UI Italic.ttf b/resources/fonts/Segoe UI Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..07fdf851f7d8940ccc23e29984e5364ed17a584e GIT binary patch literal 41332 zcmb?^33waTweY>ONV2?Xu_Vi~Ey=R>#fxmqyJdNex7d#D*p7EQw&U!3LdZr4*%!z{ z2q8cSA>^g05+FdJq3lpfQ`*N%DUVW0TONIsQhwS;lX(1}J0san2z~E=-=Cn&%$+-T z&OPVcbIv`>fG|Qx0sk<_P+8ehUw60fI6{xMLu+DHc||3%qrV`uD-o_ORgE)et>2_~ zA+-BWgyR0aYF2CDGCnyM?w2Ekb7#&<%glZF$M7sZ4gLED7xpjtS9g67Ar_v&%LZ4i zFv#rv?;@m73EcMgS z=itKrHA|=ur~sUAhyI2|{R`(lG;>QOLTfi66uW=P;^ixLzv6uop&bANMK4)4cgcmi zm^WdraE<gv3E^?Sxd4gocnRbWb?E&5!*yT8miJ1+<{h09t`|0i+suF9mmL#)bF8T?u=X z^-g?*b>xVa(eI&QN+F@BNS0zKCW4}Wk3#tZhWY{l4Pn-2;OB+k9<-I>u!6aSx|l{(BRY)Eh-}Dl?1=@?Y;LAuuJ10ng_~DgsjDVksX`J{Pjz#bzZSTUb6n-_NKRkPs zU5CCTEQ$LOa+CsD|d?_c>f|hU+t^hBCtM^@+pGPoe#3 zfNvN4DELXx4(4d+cpC0qLuMu$y~=Jur&$qtU%VK-&Rm)}%`8U0WcE#5fVr4x4LT0< z8HM+Y=;nzQ>K$xk+E4@hO6c|cv4Q>rYM{E1lxdszh*^m;C?Ne=p$S zlMwDR06&-ECuNqyd>T;;=|dkzPU;F z`Vu_{zxQA+b(9>Q$6uEp~dtcp#`BCKh8Tm&Po7J7ib;eT#MGy zap)Lz1=YgxphLezVQrxW&_Y&OA}pmwILhEJ>9YZGID>kF`Ze|M2HC^}v>4DM(_1D! zop@zp|M-pZ&&U7cx1p5^y{7%aqN!#~BuQABg!{mIX@(VvB@xodsOXqjnOvcaQ>iua z+5}xZ1`@uidPYrcU46sM z#-`?3Ev;>{+dDevbanUi_VuHCw(Zz;;K=dEPMkdT_!Ce5%bBx3_~E(W`KO+F`r>oX zzWBnAE~8~bbLXKok1m;yR*j+UN6~VGMpp9xF1Qn&zO;F85xH2n9u3^J_5Lv6&xcPy z@WSccySMDwxo`iydk-B(2ai4U;LESPwiKaP@8Ej{k;@Q7t?d;Z21D(0D5j}4D4NyT z9?a4OZ5@5XhMleLLCW0!yadGU;Gk(hXEX*;M-Y{n$}a$A%K8HCAa(@}eZ%e`G2$k20A*1`a6Qy+0kJNqQ>^Q9UblJwFI!KqkavoHP>w-86l~n{B#z|^LxNfGN zR2T(20faJ`cb}nRr>UP%lE*O85h?@?Ish^ZCD7BvJ$ z#=JSImq z;F%mXuJbfG#=FilXUQ?abzVe{I@ftIIVQT!OUN!Z-xUrZb8ZVQY3EIO&YO}#(s3L*@P&;Gi&MH$C2%dJ(F(7C`I^<Fcj{DG4pQjX7C8(1sPKy+}jZBBeKNb)czD@ zpbfgGC<~p?5g_ta0-_q;4-l9tVPylgZ(gP#Q?OG|KvY@ZkSR!)^$&rFqssbqaNgGe za^coz`T;bM`libMT%8HtPzm#d1OFBn?=~+1K!_k_KzIN#SYSBN8@E6LBlg3?W*!Lm z7xWsDpi}PxX2}oZ!T=DkmJlvXg@C4l$y-4Q2oZy!(o{uWN~l;EzQ<2Sz;qC`w0jJN zpt}k5l+Xx+PLd)hGQ-sjxHV}e2t@oY=k=LF)B zu3(;XC$Jykv7NBezYjJbs3+(F5X<-}6E?O8nC}ltO#xx*gq=;W(mb&8gb9^{U;-UO zxS!|z|2LMdx*dc4Z@8G?o5-<3Q?AZ9jbDr%Avh~Q0OvZxSgC}oJg1S+jNm0Sn@JQ@ z0SZ*YvIm<4R=Cm=%z{;3{XOk7U^pD73}!>08duNVh%h*5fD=qkX1Xq5zNHaP_?9Nprvh#@lRo5R7U@GyT1X#q(&~B&WML_swZR$Y z&t|)xf}H_rYlkzTt%LN#q^*BpaSlXsRuw;u9Na?(rQNlyC6JIP5u z=~D?O1Edc*86kI$hl`wz@Nki{Q64UGHjjskoQ?5tk+b|CY|#dsLCM@8o!Yo2tj68IO9(buZ#9Gci1&h$6Sh@L&LeTaABEnyaD3;={$`XV zMGn46{Vw&q|9h_t2}NABr9nZ4)gQ^)roZDU~7OZ^{Fu zQQl3SP4-QxoAjF!HmNr$z$%m?_%8yU)xmA#zs+C%HjT>9r{e8Ru$9=}ex4pGKW`yd zmn54IX8hX+!JdXLu+!@BtFKTmNS=@!kZhF9m&_5(5En6ai8RXb9G=)3WcGlDFMo<1 z5}|V5^F=2A|K-mabO!B4yNPFw{epoZIWzJ8u}@8WCZZVa#Ao0kB;LRuz~7x{Cj;I# za?Mmse95<;MyJEiPkZ{p#Ap1o#_4@X3;PAfw~=!ZE1UxaXV4LJguuY$5;#IIkWq5^ zX9O6gy^FvahK+@OA~X%w>HU6tGgRzvr}euV-Hqm>`PA4%4EtL=JQ3jP2)xt^?iyS# z;XW3wp%>qeJxZ@&Ut=y)M=|&%$2rlj>0b7i%oS<}KFH5A6Y+n^Ie%Tw%6S^OknndH zZAX8?+o@t&M%(BvdM|yM=9oCf!?ZI?n4dCVuvzRG_D`ZL(P`1o#W~`0;%_CHk{Zb> z$zI8~5no9&r3aZ_mFMC?{bJ^GOM0v5iOa2Q*recGFQ}!vJi*v=TiTgK|LDi@_s7_VyR{xu( zU2`cuE`C}3D_WPfO?yWBRYF!mPr@q+|E}}v4#MA`CAKA=NlHmtmGnq*WAYJwuKtw% z-}K)akYT&wjNzIw$5?4>GcGg!Iz^GE*9HCQvP<<`U2)7DGYpIU!o{mMq!Y__wu%eJ4}erNl}F0$9y zzp#JnU>q_>qQmCMa{Qa~wDW1_kDWht{>u4#=U2`fE{W?N*L|+zt~0KSu2)5vF5qMuX;6w^4~mQiclZWSV+U#xO;f#yqK;8@HnUvDM8`X^N$I8IVklFJhsw?> zro5TS6kfdj?X%Yu$u_mdo-CIq+cj!ivH~Aq#MfTY*hq^_6S_m#i^2-}L+T>`PBGH> z<0#OmxSIwoc>vYP<>436UTmVh)Y;XN9o&a2B6rds;+MEm{1QI~`0>{k}s83GPC1~R{YA`<( z@IwBNOdg%KdEHqs`g34TVOk^gyVFHG9V!hyNK-6+BF3EZFCH@01CS>M84Q(;LF z_eC65wQOv@*0!!0Gvff(eq-GG*h%I0Y4DgS7;A z2T>ic{P*2GhUz-}Q5oq@hutQZ>qXHTC-%@*I+<1h9b>V{2UosiTBG#PgrX(bD^A85 zHU{n|QyOKKhqBVeG<{8#TUudUojp{a<{EkOPUnc-(bZC|NldJ5X|paX8m)Ddu6knF zG|yadx0~Bq((5;>ZEi~-KP!RDO3Kdm>A5u4T{es0jzwoCz7YA? zb4Uq%n}*8JY_zO4s0B1xQ3PT{5zGi+N+iaj5hRg-+`}{t3@sL;UV<_}iq4<*ot}Ij ziG=M11V2~{oPSVw1m4J_F{Y&%mb%LcX;pY{EkwmHd32jF?*~K?%An6 zS!%w$s5g+JuoOCT=ai<7YoWyI>RO-AxZ~Y_QfYjwz63fCipVy%V2{FvK28 zQ7aljcl%=o>#B-#+_pG2f}wFuE%6chjffU8BAVHNL?T{lJXkA%s2PKLv6u>B-1Xf) zXsSo81hec^_YS|dEPzp0XP~vLwJ<*;U7r*gfl6^{M0A{!1^Hu*p~GSbcsMML2v>`N zopTgEZww7*-pm}II0l;m_k`62zMi6jT2oB3xq0o?1-i^tJ0I>Ed3b@(zv9t;l`}|^K4^!rCS{n^I&Am-qfNdSL?=sT77(3@5YwgjuIo2V9B?u zQi^7!SItjSWt6sn_{32l9uM#`Rp}@3RNPHOILK2O6|Dxb4bpVSvdC>jh?2W#BlkY- zhW;v~^{Yw4-4qePxDM{BkSc+WRynaq%CoJ;M9`anb9}V>&Np}0sT_sYJ&qEGs%HDE zYuTfBa5uO=aqpjKeC(lv{=lJQ$7_E8%RoK83WlAi266W-{~jJLcn^UK*CnWUxZ>zT?@-f4XSttp|2e+u4p2^N>^#wU;`qVR zvctz70$>63v(yLl7`!6}CHl27(NPf+v4~}83P+(T=m1zqz+^faaU{0-%s!Chv{^&7 zzqI(+LyKSL{u3su-l4%FC!_tQ4okRi>%Q@=AH?b0&j;7T_#iJfGG`elibVB-j8QX~ z60smiC=Bs=M0bNM2IWGeFij!4b^2|ZM%_f%*LV11pl>9K5*r-$EA0<&Hd~GwdYbHKN-=H@^mJ%94 z?_L-m1fDIG(8za-ko$&c`00AR9WE50{--HvQujo)m8-;H{R8qd1`d9U^LTOk>}FOjQKO&Iiv3E zt_m9?t$pm&V@J064wtMwzkKnZKY6RJc2>^(Xo?uSl=PpdsM81b;(M?%cgy4rXcf=FwUO6Oq$A zRy^m#9o4a#q}XGMRGr*AYkuzPU3(n$i^`q#c`32+$+0J;DtTn?oaHc8L`{4RxK9Qi zje@wc*Pk8(0c>0&W?==xd=VZNVTJ*t0n7lZE;<^LXk^hc=p02Bu!I=Hv{x(`iaE$f zD*->rZ@*}GvHC>ycyICt_^szI-pBnHcRzddM*U&#hq!6)>-fgC8}-x=x%1p3fa@Z_ zbpgCT5oP%^5@INti3Vg-HE;{`Dp)YULET`A++>L>%x1Gu#v|EC`v?z+7*mP`Fbo_~ zi~+-@6tU9CB#r-}eeA8@-p7rfZGXyZ&OAADL$G)ML%SB;54JbM^)RnLb^kYaCdWT& zbj*2pX!BMn1sehitpu1lf&Nb50Kkb8HUp8EWdxvD0jQAe36M>053Ej`D}@KjgZX7h zi@gG2i9Wt*sj4+o%2zOnm^{a-il+ODy=@hlF-$_uocZ}3_jGzn);+zV>&U{w4A8!F z-kaC3(ae3FRM=BmzoNmG8t5&kURrNwzKl2KXFFDIKTz$g@#%@lH1y;9yNWkl-n98| zA3Wo)uF%EY81eO1+VXo=6;>^8a+QwlBzz8&WnKc@OL_eV^zH^a1ETq*D_6>Bu#=4@ z1;QXK#S)CSUFyM)V##=cf!-en+GqqvQs;2}!Cr37_$*izr4yg?@=J@XAi>i8ZW(My zfSn+9fuMPP!H#SMh@#i=Lh8iSS7 zu0*9jd918$)%!aher4}HvqyLT{oXe|ytwI(j)!|U&+9qe|Jve?@@=yg^{hIHJC6R< z;@sP_%uu5CG1l-X95BV!V4+J|%J?VD}UW;ZU}(>C(J+|1Ldfv()z zl}(O>{O+=rI~vUN%d7tO>1!3`CGqlOab{nJW$dmaE$+IU9z&2ZINcT*#Gm%^0*$kiJ zHQ}^v?}c0SC4G8opR89X^tKyEZ`GjG#8FV_0!$iY^d}R!3yib@nDj1yS%43$JJ^Wa z4l1%u$KQd3Te-ofTAZy}FuybmdI`A-vo`Ripx>K2rRpjrNbl3QLY73QC zfPZ(GJH~Kt90I%nI}|Zz>4gBB7^V3kYmnjP=3L0`qp4N^mG0*E<@I3WBSs85n}xo# zTttkqY@>?*A^Pl%7Wypp***7gZTEo1gJIEZWKM?QU=hG!&c@`g3fE9u#@ExG8xP@J z5gs_gB|~Z;gN5*kg2^&1Uu_u*3u- zy9L-Ln1DNr!N?^_Nd!8HHz{u2-qA<(fw>jgGrTEL_s5v?W)+sS=V}vjnsUnTEl(=m zU)#31&B-x9P<7ZmQrq+jW^M6;!QOOpS?!#{>J|O7Y>xW+2B*2om*VoAPSj_$FTehH zxPRD9LZNpjD#b?F-wvTQDCmzeL`!KVq5;yDDA;c$k$tWd<_B9`28|*S5{txxAYvrF zu-gR@6A?l6f)j)~9#IF$FDcO7`Omu3H1Ilk253ee@!J8b;LVO0`EQ=0>%bE%TfTJO zh{Nu1*zGn)YUEA(;v87>AjPJfMH)~GurUKGjfgd3_Jj6{VZys(*r~y$F4aPuOCTed zWXuwUHnn~B<%o?H>(7pO8?tpY%@p20lrtw_uG{j%L1$%_DT2Wfkr8-Hgx+E?#HD3a zub!QrSk$-ehl__UKe>B2Z{~^rdSce0^#gisV*84F+n(n>`pH;e^%HM@w(cn$d7)$c zWMiOmeRqz=nw4BQ+TvG6(@C2?d7?ilv&*v?IGJCfF;L56iUw<1iHZ7vzaV49;Kur_bo`P3c!O>WUgPe^n4zUn(JXfy{{`R6 zEoP5i8)kM%6QX0Hq9Y=-x&-Msq$Ptt3Sbxp7&New(#eVjeGmJ4xWlkC1IwBcc9pe6 znZb^NSh+^4(PsRv&1b|$-X`}@#7ZKBritmtpEARind@4MyNmTr`(Izq)!;O|tL^Si zPcS~awdlQ}7uzXH{ z(q@PoyLA1&)z7Z?$Lh?gpxN5__|d6hOhkei`+<5x#1WaQ91sxEn4g43w0EX8S#z<)3-kN5C9B9O^%nD!2SWZr-!n;0@WFLwEn zfp7V-$0*7;&TTzQ#$`B8{owdE7#5=)6MtZbd0P~C5iC)b=S8yrAiM6V{Rh(v&>v&! z945KamMU1G(D( z{^QZs^q$?%eY&k?QK(B8 zC^Aa)NQ68}Z0*=LN}rm9jSay26e!uRivmv{ypU*~1GVr%GG(<~Ehh{eflVNytgv5# zNqdX24|}O1{PlZWgGj+LhsXr>F_GFx>cH=*Uyi$}J&}gU@ghJ&PgFuA1v#rc9_VIx z7r)nrbqsi*DAWUh@Tlc&b~^^&labCC*TR6@R}_eg>#&z2I27%NXU)jwH|v!w4Xz~E zXn{F`(FTV14u@!@mFsjolLCnVOkSRvXz+l6CKD6rmEay1CcySR@zW@amWfKW8pPuh z&A+8$Vy#?%#%vdzoB2ryLVQ6fzK5=-cFs0a{KbN&ie*#_+ff& z?uMk~Mh`WGPmvVh)FX(D+=R#^c@iIjF#;ZGD*=lDgTd8FR4Q=M2baeGLQ5nfEF#-> z>My5o+S~X#E0spTMucHR)aPfI^%6}&yjYr)oD_K-*6#HOiTIC*GMG}LAekFv6p^1- zV9jZfH!P#Rx|(O}}&Zk%pnuYs))k=WN|~AJCtdt-St>K{{Rn37T^*I8Uh1 z&W=}}pseJnVZ#rkDoCK4^%QfY`oQlV`1La2N4$LbVPk0iN(7w{QB~7 z?ynDj{L-UXe4K9l8F%m>ChjaQWgf(eb9e*(@KVKEQBE!OTWU3R=XtxCP-xiQV$ zS?jkD^zE8=xX%+zF769_wCIg_2f7`Mulw+VQVA2=*TiMxvpwzO$JwK~{hQ~cHx(Gi zzs+o3NZ`cC4Es+6JXk{Z(Iue6jo^+kfGmUE=ae1~c?e+}U65xrCnmr~2(}eds$9dn zpTN4D?tX%E;>#8Smm2zGZNZh?&^vvr>UuLX`uPQ;?hW^CW@cmtDukH1UiV3&L2;tP6+WJ(!jnW8iHS4Mv$1G zxR_JiDEIYQEaQ3&^zT{f8pl##EdriS!&*HG;~2>}eEgIbh<$JqytgVxys$SEfXI9>E zs^7UFoi^Y2gC-{@UD3Fz!J0mNd=U+sXN=wlMSL1yh(#*Df+8V=kPk&C5BX3aY?_RT zH;735meW_y9S7e$!$!;HVruitAcG!CtV)PB7>zN^AV3adz79DXNie3FNFcxus1)$# zPtz$nom?9d(X@r%Vvr@|RjNgy_e`C!%@?{LsLDu_W#hkncG-m*ieVWxMkbd~?xUT= zN5e+P#)_$!7Z|I)A;r*`bp0y8^kPbbJ|@*_kul}hpH8gP%gkm|43Urk-^6K{a|^&% ziY$JU<2LX?uToT+m1#66K{Oj|_vjcgmv>d1-!`^rL5Dw*)jPe}nKm8$#yhlF1YSzM2Y!w{ z8W9*+edpSNib!es;M(^1I;J!*Np;Y|*&@W+rMxLe+Pmw}I1GdxCNvl=Jc>@AsdYcZ=uzvag{J|Uxaz&JGV3&NyHw4Dzjk-@-sLE>U8s9k)G zJ9z-Ne zYYB^}rOZW;dtzigFB&TMCz96_D+MAx!2b~Q0U*fEPsu=B<~-z95u=J20gRq|TExA3 z5T6R*x2UDm*!W?(^u|ko>lW@Rb$OxzV7KsN>d1>Aj!SUOPp^L3#K@2|_&d*P>85z@ z>T15&2!oOSDz!r-g)#K}7*O+x(H6oH1fVch$iuL~Q&O_OJaC116<2Z3gI;a`S*~HU z$bfvP$uBj4@g4~bOS~8=a7(De+7TQOd?Xm8AsBNyf5NmI&@^3lc0B7aI~;=c1aU@O zH((8goDASJP;0~W@5p3K>G#hIo^Ty5#?ZdAwR7UrumW(O?kz59Ce4<0?RqB35-S`y{!Sh03h zdfptr$zIttGCz~p03|S23Ht@au+oU;vM6BfM!_b4IM4B+NpE6ks(?C>(pHOIWeFK1 zg02Gd7z|C`d#(<9NX0bo-Dem{VsYQL^GiGfJ#8kOb!sG16G<7WXZ7aZ_t0sTyE3z6 zMPH??EM>%3wW_DmqoIzLKls4j1*OsPDQfmKr_Na5@HXe`-+BRJ()!pGUC=#Wfl=sw5l>Wal} z#Wv-Jg@L^#rqa#TJ-fO*DP;p2kIiv5_%mbaY_m7LadgSz^nC|?&XXpqf5`(KEsx!M zXNNZ`P7_J+N_c29;57yOd)3m}U>K2b?RQ+${b z!~nT1f+0j`}yDqoi*^n9qwdE5Zae7{ESy3S>^5D%)BqcOk`6yJ_qSlx0O}l^dMlYW^MDf zH}($PTc|JD+uX6Gw?t)PEHfJ0vn!U&bXsfXZ-1=2`%=S?Qu=*8$Cj2T?WJkH?uMc? zLqyG*cMi?+7#^@>WzD^>=aHh0f~1VT{XHFLk8bYCj*nd{iJE=rjYT;yVTA;|Is`wS8H2SxE(>2TOrqm(NreKjFR4Hy?+?s&)-#Kpv|rQ3yU^wnzn4@4!cP@v(;4CIH%XcNvZa5Ls1iHh@w8U zw$3b9TU%2dw)}xAo26o)Ft@+TehBE42kTu8_;I6(izZ>Y3tALH-I(qrp0LB=6|dvX zGoDXx76o8|ssD*E0LgGO9vC%XAS@JSR0r-_G&AOw`I=e>7Z;Tels z%x*gH?wzyu4EatQ@|(Twdk3=hd9$)Q_6}rGTepAn?EKt$hkEw>?U@lc4wufYFn1n! zVW4O6Hl>>6r3zm1`DxOh;t8c3!#)g;M`+G8XUo( z^7OD+pnbY}xv2*jEKZwEt+a%+JD>d_u%(woGr=`E<%ferDaiDN01TLphQQ!GXGRK^ zJBLqQ6GugePP331%T!&MM@*N~N>@c@)*P_NOc5oD%$(f#ik02qildI!JbZNLydrfh zr)3@yte5#?Z>3#c$i866k_YRM^xvP?BsmL>PJ~1VU%?3Cic7G!H5kUqfg56J| zNxTdU+i78U81Wb!L3IwR!!ASz!j9LQY{^@Vdg|j-b0ffCoHCftkd4C{6o-$ynTK5e63&OKQST=Gp+b}Kpy{pcz z5-12ylaLc{m%*O4<032?6YtqE@x~-2$PZX5p=24ghJx~nQbYdO>{3PF$^8+E*eLo0 zxO62HV+hP>PEYiy>EM#dQ*ojuhFZCl&m_VKb_5F zmt@l=K+u)rpXjUAUbiGFRm6TJTo>Xt3+`Fz(u}T@{-s9o>j41)favI1^btGhJ z5tD?d76ma(0YDHreE_zg=17t#Y2^1CG>!XUfrGQM<5`U@VRH8hi3iw6JXqoVD{;&5 zPC61EXUN5gh*(}NM2p0b=>=l4FfbS}N~F=uYC(m}nBi)lRZ|Em<#BAXwlst!e@ICB zqlq}BGR9By)>dr?Boxo-bK!3QFqqR0z^@7BBoF)V1c*^x(schFtpbe({yThe*NIb| zG#I>$M3tb6!i!#D(D*uKdS<#(;mOEUQCnfm^`L{JU`!jyTrnsqk~1iH@Fpz{omQSa z>A@puPvJOA$cab7LsL#X2AwDX?F90J4`XjW(Rn-ra!f=Ll@#y0FAw~C5(>W4!r~>T zsH+h%F^M{fG$BbR9d`nBl-jG&9=Ajc5Jv#zGrs=9L)~XiRP^a!Lf4i0mg+TI}f=Sy`#clj~#CH5H39)?GTY8s;Tp zRnhp3XU^0vZ?s3S_e!L74VUQ~H@;NcW20Pg@F5<-H%EUAaNOjZ<9XuyeRK5tqwzoK>3I6ejTd)i)Barok5zMTQy+tGjQ5I|VfQK|6@YNUke)+ab;R+@n;4L* zo#wGxNNEnR2l(?L8;7_7_j^q@Kb@1=N)&tf!pYCXdY#lhIebnpqb2Y{B12vW` zMwH8nO9Baj-l9a7En=C%l7w0PnxeSs{#5}ssdGN}hb6l-jIy;x?MdLq6FhN+K6))q zDVUkAc4}~v%BCo(VVALk^RcmaZB-(yX#n&br^h8Ca47IOgV4bHz(8rk-LMx-3EAA| z?u8;m^euU2;$H3@K6cCJQz(TPHf-D}vT=va7KI1Hn}P#$U3yxI(Vz$4HeaO!Y5^pH zNthn?WfKVulLm22c9T$^Gl>r>%3caCtKzt-zEuHj!?316J5XoIVOd{PVVSn9w-As} z2zV&Q-%<(Qh8*sb-a9H2*Wu3jSi58o!9#6adIF|0ZH0N%T5Qa3Ojo%y-0wA3Md=Kh zpZh2HIpz|4+X}K9c^{x1^54O@hWrq4KmhS(gTcbr)-Y%$JYYqTTcNPQ)?CXwD#O8M z4=^nx{0pg}5TPNdAwK33ZLSz8x0aU_8WdK$Q&lm8*+yF`N6IXLyv%r`*X7dcGfi=r z`m$_Ua~jl>siQP;QFB_$mof5R4_E=C8QfAz0^i;ubwU5Tyg5oDPqt2# zvRRYm-1}$0+(z?J9fclp--Rl-YiAkIxWv}EJaL7IVYea^aQGU3RGP^UBW7qZ$otTi z6>Mt~7>5s6A#@ig-vi*<5HtrQ4TtWK@CMu_J0zi?=5`N3`ai6eEx>w04FDA4J|ovB z^4@rmPc*Cq(1Aix7m0F#6J)ZU3o^xlXTT%!SyE@-slvs1M(5HB=SFAk@|pIetZGL} zQ%ASky3txZ5YL?{9Jc8*jf(Di`V&J&#Eox6>5kJnJA37q(K8n8oY{6@!8>=XnU#3>kwagB(?8o_L$NalvP7YecX%>HoR ziCM0a$H|o`{5FdiN8rf;&p*sX$Zf~qHt~63krVp^5PW^t*b4wp|?b?=dV%4QRm>GL`URFFY+JJ65 zFvWP8Ge9>Vs_+MNTG;(kI3-ag1w+*oA%@f|nyyKJuvRq)<0_aLnZXFGbwtl5${x0~ zG@6-}>9A>tWe4KQ%6k^9Vk@7`o8zs`BJD8U@x7LNJ9kx`Xb4TCS!1}bz zJN?`Gb~sHI+m60%73)0dYb&i0|Au?Z#T7WJP+yZ@<=g-kV?E$WV zd5OU|D)C2{9n zxFM0d;6Lf-&Lm;Ti9C~xP4Az(FEWZ2#h5jCNErj!!VOY`FQ-g~Kc=$0F2ueXqYd0IOsF4M=@ zUxHtt7tQi3W`OePZZ0%yAlpBcw~mF%9ufiLt#;mL5%v-5{ED!!4&NqKmC}kbr`?bY z_A^jkFzE#YnlG&sQn3|f8dtz+D)#6sC9~W*N9nw+WeEj^KJ{19#B{6L zq$zKTNXl}?+2u7AtX7i}2NhN3{B*m@Tv=IV$?R$wArio)0$ewncvg7LfYD5QyoKLw@UfzhyG@A2v(w51_`GU;zTK8DOE4)_ zW}S@ND1(eTWvWgl)1~q)tl5$4bE;AkVq3cR-mS?%zOFqdwR1Lzm8)b8U69&+xoK>yvF_Y^uDjp4-P-|*Ij)- zIJkP2d+5Ud;eIC7#>Ld!eR2L>Z||&@#wsHY%XCUSHj z9lgy+;ajLIWJIR=jl>%Ys#;*zR-RoUGz!d7uTUsL=D&#svl`N0AcbMyZ;pM67X)v7 z_3`mf@xma~bG?8YaXa^raD?anjyUE7odM&+=%6tW1x1gr6sA?;0US^qMuOaGr1p|83EPLh=ri!be;xR6lg7{Ga6!(&P->9$CY9rCGpyLr94U#tq}uW zaAY*(E%3~qg0i!aHxsGi5S>E)g>z_8nyiqP3Kfi?l8Gq_-^Ro$Zzc%|(EIFR$kqD@9>q20{8smAEf6${=uDK znzyvzH*!JEpuyo zaqX{U_=b#mb-@A{0{GzX^kyjQKg0VD9XvkuF!F76eAtB;TK>FL52q1LTl{>5H*Iv) z&CLfz4GMd1UjE!V*J`aR-)P8lYPHThgCXCQz#JjXd^e)kYliZSdCvHFXP(hm;7Ukv z@o@yQ>43V^lR)!WlB;wZRsfMsp!#Chm^FV(~$7T~ri8QL$06G12gV zP-H446%NyiOi97TRG}$fcCm{Tn{LGixdmItS8m;k5b)k}^a{F7^lP~oy@5)w3q`;; zn4W|0e0rS#5!`=|?xm~v`){J`TkpeCssmjR!{-ZVd92=Av&tipq%FL;4jUh3AXR|S z15f;%Tgm%Za)`&!2ofg;3XQ;H2utN|vMj-C4=xq94~o&*V{Dzv44!$pj70yGFxt&t z6G53y#-xd~2}N}+)@3KKYntn1Mxhg2Cl83FGN=$#nB@stzrL>p9N~~wF|&I?VPU77 zTgmSFjss=fr!S9FCo9Av(H4nxPHluPF+q~sU+u_o@$-T3KB7r3iIQaW!)BMHn{FU= z!#I=`4a6h{KlFyuTlhKyq(p@%W&)~(t0sVE(y`+UvgVXqoz-0#_|L5O+PmaOZ?jeo z6qF2>rIJ!X4BsC{c!2r{1`F5z&IW1_D-~3)P|SO4NedpB+Uy8rE7ant>Lk9bSD1^L zYrrSqR2z~!QerlOMgSK@Z7>ovf*y1yg_$M5nj}Me1l|eCpS-`1yuVTBH;^7+VQ%=o zE*;Ox6Kf0lucN~6@GFI`g04FQvX#UTy8fwts||XH zyN@hC`X(g@33xEc+lr2kj*GnXAPVpnBj-Dk)l)2+*$?xy%Qc+Q9bryI{N8-$e+&X8`a94}t zL1vwRA6WZhiifKZc8*OU$U^iF=iC#=`eZ#cgwhF=u*FRVLy;)d+ai(D5WsKvQW`e( z=*r9UWr+%JesN;<40oI=ZAMm$uEp1qn^;_t)9+4JrhBtAK1fquF?ftV@x7=Xf7I1e zpCOJ?NVi6*lz&AXHl!%GWs(O7jTahp+Q9)Zk<{61MjwTWpg#+o6yU zzjFf43SR==_&5r2agYq193ORwe0NA~Co;^=7vv2UAFOTI*qOl>@zr>ZQHNqoxy?l- zvvak{Id$&x`^vxTC4eglrRcyDn@W=83*@06>JYMOG~ zHCc&C-YQ2yr{>xtqA0CBNmi2XD=6iHx7M*y6Wd_z*+K8df<%Yh9U_<|#PbBEFfC!{ zN+TfjFYX4p0bUNs$mk|@{!siRlgX5_Nq2`#@OJRug93kt(g?!Q$YP^XEE#`)lp+;N zqf{+aL$z@X_u&=BNw2%>69lw4^jjD78BZwJeZOOLX8?u7PcUJ!vue+OM?3 zUbNT&dr=v9U1GsE#)K593wpxJSpxqcW)WC;;X)@de7p$8fk-h_6!amAB1@+>C0+zz6= zLA3F4i|JaOxbs7`cHr8-X{XF|%|1UYPc2PPI|36jKi-}q0bnW3Vp)s6l@oOhkA&A7Z{ZU z9u#-Gaj1Vx>$7U&KX2QI6BBrZabB6Yal1aWl7~m=GdA(f&G3M1NCRt})G#W*&jS%= zaG!u{7eYF7Nx}m8Rtc;rVAOCmqg)PEBy!$!0>%$xGLpEga$3y|aV0{X3n^`M&Drzn z^#{4)U8j;xZ^PU6eg1f7uz20YwI7b+Ha&M{{*9-w=xhsJx8N5qJiNS=+Hr(hJL`d8 zADVZ1MKPy8!o`kU{0A%#0cRp9FC!rv2ypfq{^&b%xSK9XiRZhoD0w)aQ%% zy7&lejljMLtcf5g;ODrrJ-CJc2RHXXJy6R@;j$UG@R#rp2L=@3<`}E;3A-F3>a6-iQ_xu>)~DYf($~W=qAm--4G^_`1KwgRveZUaBf+vWEhPtp(Z50|eQZA&@R{IoM;=c=Lc zC+>Q);^9W_i1)tEqNPLaCQo%nLcEH8Hc5NqCGU~pvFEF^nscE-V&)6;dR{#LNNMMw z)>UXa-SBkXg^{1*>eWL_X9XT@d@HLo!Bb-KuHSRCsdz~y{;FzS=8a1wfto7s-G?6& zc!jT_;c1*3;)BaPZKki&Tl=iSXTGNo;R9iuSMcfE_u*+Q^cllPg+5^#1Ml*+7d$+L zJUpwg_2zM44H6kO3TsdXo_wo6mDpBL;R2c(lne__0X~$(>uXZOB^N4U!Sv)Sx4dFv zV3M5&ToPX;Gg@`vlLxO>kP6JS*H)YuNeiY_FKxUil)TY_u^0C=bFZ>Te^)%ZtvzG5 z-$H8MHWPi82YK1qkkea=cKfB_?*xUDoRZ0I2+Ri9?a{mjV{*PLtzxMVn*}mqXUFv@+Q=V`+n~{*G3+2IO7V?8Nhk8j(Pj zBm$+zQ{<04FE;O6crX8+?$&VK-ajLZ3$jKYJXXRYVqiSVT-^yYST-H|4AG ziRfnD2$=dPL@_N|4XNp0zD*^S3{^sEdUEdlJ)JxIav)E#eg1};y7}dLW5t5|U%#X8 zfx_IaP5$MxvrZ?Zl~{_F_EgIE|71hn_{VZjR&GMa{w0lGtvn^$?C9#B>y1ivWry?F zl@U4pGhBQcySHstB-$hv6Y8u&VjV)S>v#!c)z57>E-L?8~^dh9>7^&mm(|J~O6 z{)hgVt@nLT{dczBwC5&mJ@^0E*1Og5Pi#RS^-js=n(tbANik;75Gg5B6(i=GYf3Uw zY~L~TPRCZy-_|fyMRH<#jY*jQ>C61Os}8NZv$t(u1>cJftvl#X)}7G*6?A;6oh9o_ zXdgp+_;!*H?cv9Vbtn^|vd0B|L)s5dYhSf}s{J58zR>@b`=;7|$d50ykL`zc&;dj~ zm>{3q4H5%%TNbZ|Dmg+6K8Kl?b>LS4 znK@0?(bss~Hiu~X!6c2Qx35CaO=~AK75cvd-}MgD`UXF~(Eb{l;*D!OErj+l(vC=q z;!^O_=OHN~U-p3ii5C37lSr8YL>I}YDp*j@d}*sd3=$?YfRrE)lCVsu6MRr_Hte-Y z78J|O1cjDr0@W>iQ*Ej+0UNW8c?h#^$;9MK0Fw{GLX##R ztaBmHfz+zGtS&2`zZ%XEwS*HLNDOzHt*45EZ@dX+9#j?mQW@8D;AiVQ_hlZdJtODO z=j`%6-N0>2YWI=kY7x~Y8vih1P9DjyrYo%jxqJWi^hiPOz0D7~dUJPwb8)mV`*ic0 zE=T8q9}QUyxW=mIkR`qIz)J!@48U6Wzs;R{a8y;E$4}qxyx$?>$nzo*2$=Achdczt z5CXWN2`GpxZPFnPNji2qP|>kwkoS)3sH2cYWnBo61jvjIj~Eknd_IX>? zuiqAKd+M$?c~6=!E@R;SZMlKLV}COvqcg_L(f4jUjvw8Ud`GJ5x!-=%ecN&G-$038@*A{pWl#8tT#Qs(fce-y>H=^ zJ0_0Kh}k%?VCJad)AA?f6;2;9VtW4F)>75X`I%-8GQNR~MXUjhRDUBJS-Vbnc{l4f z4_RC4XcuIF8`(@}50rT-KyD*PODD_me>HsJSZ<3sV|MmQN8`dg&dyDzVxXLgYDTJ& zW3w~I4&0sBXKS9`m**^Uj-9hIcgmvalSfaV8?(uI*SuAe@18qt>X@P9MrAr<-pDPQ zcPDSyUz|6^eeal2ca0K7P-KfyV7$ZHcY@4LVqG*K@=jD-Xbpifc-1?ytb~sQm2g{z zD`DuQAw4$^T6!1cje?##0Af#vsxu0lx0CN^#j|R>DpMYUG zE`95J19QL44FGg)sO8xBQ|6$FDod?8nlqO@Xrv&$0fd@g_BkcCZ$F z(xwgCoA+#*hmX|fHtkYr4tbM+{KY8KvDKzyRjQ-ersLEcL)Kp9FJ9ed{K%%0)I=j} z(F~6|sR5dY9`h0GUpu^O-7i`+4%(x?(j?wYIuxW|^ou+y5pGuDFvT2tZ70>+? z@`;o9cv%AwTH>c^TE35*9PhSiiQlAY-Z#uU1!bn^a3#Q1y81htCcQdi(@ysNd}z~L ztNz!fW7I+ice3@hv1)|l8Jmt%0msj5Iv&|A853BkDmI$z_!OhwInkz5RdHN~rV~Zp z`0v{^^2R@>=_KN_;@_}oml_xUfu@s*Pmll7rd{ez7W0K4HpZ&>gmE_QQo|CaXgXc; zPgr5o*5ucp!6Prf%gm*N}h9~m*)TSl<7n&X_@rmg+ zO?;xM={qE!#KksEK8Zz|9{hlP7QAzCEup;+%Q#Jvmrc?cW^mRF~IHF7sCf zYe>6}3u{r3D7KEUR(rV^UkomuAIaJzg&bFFmk}1lL8LC2>M?z-TqBPC0It1)dSqQ2 zAdH-;)+Q;XloH}h@~Gl>yDqDQ-{|F9d`Q|7>PM}11SwVA(&R|aS98XaK#VJArL2g{ zityl02l~dn``90TXfkv{3xk z2CHj>W~q0ZuLMo`&2n!=^#FnXAG9;~;}HS8+lN1R8141;3RXubJ#zmPTlMi1>c0lP zVqgmE*eWAh3H{G6?^9m1)cwvoUvs|YJmvhU^JmW2qj5jr{6Ja0UfRB;`O#7k?!Jzz z-gLcVhsU{2o@lzc#GBJBajc>y2BW6#J!f@jmR9{y(+*70E4`QABN{IQQ}mTSTKfLy zBS&?#UD17MU<#4F9a*I%iY~)|6s}>e`&|oNi(Io^)1pZ*;Jj7dt$cN0iU@~NAHG&% z#}xRt#)ey?r5b3dMK6n$ z%Aq_9@f}uQhq0nPf<>)StPGiI47*Xsva9VbR=LMBe9qx{iAn5w$z}M-6Ucg&GMznd z_b{ZM#rn-0hJ$nEEl=#rx=$@+B(<2zZRzvE4uVKDeA^)Jh$D^s=S3A@-z5#Jb{fqiUU1rm6yd%Mp7*|{6 zn=)n56gymEg^Q=z;dDEk6YsC`=9L9JCGo-SeoZ6>%L863E}_g{8_O91@+GE9U+rGZua0%mpkx&`4deIp;XCF5UXC-aaq&_>sYRhl%0t8o$9BzaawOHwB9!K zXhgV(Xl{ho93}M8iO`l+2Gb#Hdr{LnOFT7Rl~qz*Q>}(=^#)`HB79ohLqds8<0)UH zl;cP^#V&Ijaf#?Vo7yO8v#G1{Aay-jJcNf&C3Xh!NqEvT8n@&55jqmCbsRuPRT@G& zNH6V5I`w`bb$1iBt&$qCLpg@rtu^zYI?jsNo9bWHzdJTL{%DjNEygwH0+z)OyXM8@ z#ROyTj4h459+w`UAHN}?EOA8QuaZ7fXOi=iznlDC@&_pkQkJAVm{Odwp767juGAT+ zTT-jjhNbOGyPmGntI|Um!!lmUIG%ATmGb4ezGyGUP6v))=egv{?pimiX^5=n=G6 zqf`p%(l{Cg?hJ?2xbQhO5#-{L(|Akk3@|IaUCj<(V6V?!b#J&$%?m${_J^y7!q?Qg zaEn?WzQniN+SmtoPQ6I_m%ssV5Y&T1;AO6V1-uFlgHe>!NlBfQ(n%?ulyaC-u2IT| zl+dD*ko)KPaB&STuHgkaDxYvEC;)}P4T`}g&Q)^Ve&`p$OW*)F2kbD@WNbPz(*m(<+w$66Qj!#D7C7rlmy zUd2Vf;-Xf&)LyWUbZM5&>BDA)yXnoc=+6v}vgp$cdEEe48eGY@e!(8F7wiMVR~9_f z!b7>%N;dk>g_oJ+G>a5Vz%uYO@jJmTup8_Fd%?c&_voh#`XK{JCCB-2HH+^F&f#cY z_%nli&fXhTE}YJ9ccxj_ug79Xqz;w;$oR&G>B_etQ6W{s4Q{W6yf* zS&u#WvNt#cnn>RaPJ&b5H25(xy-xmTpwEJH;5-O{pOfD_YE{0aOZXTU-U)|0NnZ$u zJK=CA+S!P&AHmM0*m*Zva+7jAK7S3aFWKIA$@acW+WQ{DM;_*UZ;fkFm85-&n!BGo zUj#3K1K=R22ZzARl=BLB6&waf$m1wz0LQ>_Z~`=fCh}_rC&4Lj8k_-V!8vdqguq** zZ3S4%*Q{J344b2kq#f z9UZhswRkj3r}xM#?X6X7BeF`ZZP2o=#QO)Ue|O=<23{;JQ8zx)jgQ=pk96ZB)IBsR zwI?6DF9ijl5V%1x5MS8OwJ(zPC2#;71ohw$Xd+EBI0;UH)8Gs^3(kS_AOr^5G6qim zM1Nw~o_38o5~62G3uj{COf@q6ni>V910`DQN2w|%O@E(Hq5bZ`PwLcZRrDM0x zsS)w`wi{Urkfi`w7*pd%g@i@eWEF5juO=)eTtm2)UglxKb<~gbgpUwzK&y|258?N_ z)l>Mv)0Dpx>;k*N9Xcn8FwwNKF6Cw8BF zPPc4}i5*UCD!Tj}U4CxsvH@Lwg)YBBm%GuW^ow874u7TfxrDlqPanCIuz;|Tun1XJ z0XN6135$taL%0^*JWN*zy1BpA3xC4nhkhB9SJM5OvK)ME`yNYyIk?tzeT}8U9NOu+KTCj8n5_BLz z2NHB3K?f3aAVCKbbRaQU^cmvLf^*k9{PZGzdJ#Xph@W1>PcOoK z8{D_SeH+}j!F?Otx50fI+_%DgE8MrjeJk9z!m%5@x59BN9Jj)8D;&2nzR|V!#&taI zA|7|q_P9not_$wF@VM9Dz6}#jo79U+caXEMr_lFZ5pwS^jcj=-i72{NZy6yT}a-An6m|qMw@{~I1fUA`4Xdxk&Jd9XWisUJfMY|)E&WJVISkf040?g-tZvW~Fh*QYnn$2Fu)6Xn;U@C2bdrPi=i1}H99?T< zCL(vO*V)oKwC_l4KI3oc^)f)D&M#p+mXA*^B`hGcdh=hBnmG&lD`u1_{gK6q0Vjs$ z;0WoDf(CF590w;rBWNO@W^fXm0;fT=-p`4a*7oqp29z+PF!EnUn=R$9qnBEbHouA8 zBGyjSeOrHPyRf#4v8;=+tc$U%i?OVWv8>GgSF)Bf5&M*3pE9(PL%Whg>(_}^y3tCv zp23NY3W@8rlfkNo!CI7PsT(bIvKp0zrgCge<)Eqg*ena1<)E=FYE>s1>qKLnXsi>B zb)vCOG}ej6x>c+3S@vCm;ef>wNkvWnzO11PQEt|~3 z{_>IL2x?FpC3ab}Swflr%bZZpW(mb7BYt?Rd0!LhZjz6qt5HT(gOl&SrFb5}X33!5QMtf^*gbVInaPNY97u>s8H?esA!sgYQKfB>k=Fms* zlJvt0K zI+VKx8=Zu3hBI`It=@Y>;Fat<@J{n33SE8RvM#z`R`2eHfHfApG^M2dQ z^of`06ED*zUM7cZ<{Vav-|H0FTze1Kj^Rup`ClOa3-r%tDB}WUT%dpE3d&i+C^A1h z6-!UWE2q-x$UJu{{qsip=Z$#iRQl(QSbi$~^G5pTGDd|P;o$;(^!sYZjj!OP5MB!5 zrI7ylm+BeL{VjMF{16=ET7!Ane&%KS(Pj*-e;dp;8X^uIwNVP62>A)Y1W} zDGPuD&ZhuZR|^w2R|hMYy(@sp9mK)Qj7d+g0duv5{&NzOUJL5%0&}nz`2Y8exHHtm z6@Ey<#1;Oih8q;1!5?P0Kmh;gWcT3)dZ7X+`-Yy z8D?qaDga8(+5*&m9d!YyL0zEE?oe|M zOnQJc)E){y0yPJidI5gfD&^p83581n@o_@nN-$Zux;hE~ffn#Bi(gwDE*2d2P*>nD zb0zJ~#U1SIp!TjVn3y0=fH};}6<`XrgxO;Pf63DDa)bgv0CT9tf3Tv7t24|Kpw9{S zASX9JKbRi`;QaOT2R4Me#N5H&*6aRJB@;U+0Qh$Z{*fpq=HLnNVFy9@0qorTU;v1p zpCA4KfdF3oTZW1WJWzk>16T8JePrz|8~}goZSLmyf4T#J?*EA!fa(8NteFA-5)S|> zIk>{ipa3QVP99D(_y_3!b1?o(q?DVj?O$dy{be>lQ}(})nApK=z5ZVgX+wX79l#{! z;9&FL64d{43jbeD0RUxPO>ALiqV|@yP;pz{mCHriK;F%*Gz-;sQ@-$X}aKd-H$04=8DG=3ox9w*-KB zcmXEP&L&=%@ay3|baK!+QZmur?@RY>-6*w+1(8bXN z9sv02e-^la@Z+{7cK0jXKqof`c&3}$-mmch?cMB5e?{BU{(hAgXzpNZYvO#r!UuGO zI-9{0{eFobXkrInbTNTj^Utl2|J>mMw*~IOzn8heKob{Ns58vP=6;O}=xFQaa*w%z zX7E}vxnJM`T6sBILGShA=KZAw%;Ek%Za$!kt%-}({X_gfZ>Y1wJ%#`s?C%xf;RL#R z-0$*$fUZ`~(BJmK@IrUHx0{CxXaRHoZJ!(H0x#gd?c(79xO7w1sENKL;Ri5q7YDFY$nDA5i=r@B=080R$-d58&ejO5FnxQ2HK#fim}i z3n+UJxPfx_fCngl4|stJ_ka(mcn|o2O7{Q)RQ?C>a{^WF0SKsi55PdRd%y)$zX#kv zjeEcY)Vv40K&^Yg2h_d?{6L+100HX$10bA0y?X!xnmU`9*+Ai458iM7b~^+NG=;DJ zJ2N3%f1mxUVcj2w$H>JD1~Y>>o4MUrD})E=_KRLz%p9EW(+9!}kGsil2?^l?-d7BS zA82|n7Xmc<2Y@&^f%jDd;)LhZZ+q~h{|#{gEq_DY!299?aq<9RzwPk?t$#y&!299` zaq!pKhPWo zb%wgYe)BmmJj4E;zwS+ilZ1n_xdoil{zZHsJ`m8-4Q6W#wR8A)wSf4*KwAe(n3;(! zytDl#2yT~!>mMxu#0O6T_<;4xV))GVkAwMsl?#lMQ}mvoKz#5v28Gk)Zw}{!_c3_W zf$R2L=K=BY|LO`ZZhtkG--5{p`A>WJ?;SV~nV7k`{wA3p1hjJl-7CZoPh=Bk6L_^c z{#HQz@TT`y2m2Mme_Oy0j~LV(?x6d62J!R!>R$ijdfs0?wuAGA+pqECw_Ew{o%}}% z^7H?a1@9uxzjqDzsQ7Ey%Eb0J3V?ImUv2UK4*wQ%20cSeV|4unL-HAH?E79ScCo1`yBnVLaPdCEf3V@RT zRt`Si110~h9Q-8%DEU8>19Nf#CI3qkFef)q_D`8SK-oWK@&aZ5r%XPe?EjF-50rGh z&lWJ8HkJPE7BHMUmH)UFPN2$vTnlGW<^OdpoKKbi6vz!!{%=j-k4y(zk>W7 zB`}B=sQmAq28I)@=AY{D12z9t2LjamU+TcgSM$H`hLf=F9|FK&poW!$^F0fK!SF5x zb+&`go~E|<`3Z*8@voBmtwDm}jBN6!I5->sPkrFc^bhxd;ZyGaP!R$&`Bxf(x!{Cw zUx#2W5YX(u(hxqQ!|CW>%5lM`^gop2;s!$hmvUS@KsY`8!NFiIULfpGnS4OlpECJ@ z|2JR!tM0&D5FqToWpZ-@p}(ggHwb9|hg;wSy~7{Za&rM4{@LAvOe<{NQ2D<(C&G5nB>rVmP za8~>~3IFx>`=3th`q$e({M`=o|F8uN{t5(zdP2=G10Hy4A|SYmgb*B?*%s+#-u_hi z_?eNDcBWm(;p33{i(|xh6eW6O5xPBx?YG)Lko@0AakG?=sYhgcR54Y%*pMixTf~}? z6Gi0ps6Xd0X_IL)jARvhFQl9mvuQ+OaW*8ST^@`2p8fTxA1D#H-28+V>K_A$vmqdWof6R|iQleIkCd8WGz*oTr7gJ@@WvR7IG)r~0jroOAY3n&G0< zS^?dv$JkXKUQPJNk9-rKaHC~I*%R^|%Po9_8+dB7R`k2pJr`!9V5sd8MK_^*9lb`F z=o>~4!j_G6QYG43zS3qxWe@YbX*Gk;t)<$1Oui&z8s||Ys+g*gy8>{5yW>MI#q~pZ zDi$U$!a}ANnUI4XVpH^2x0hw(&_N}RA0F&IDUlztolDXg~g%SDIZ7^7QhuQIreZ%0(0i(2uSE8sfo?!PkA9C?4Fin@^f zX=F|$58VraW&eX4x;T>TSxi>Xns~zT@s8{R>^@cNj*`!nT4u!u@9MnAC6Fzk$PaYV zREI-@FIOPC=%njZNGs%X-?(*(+=BNNzbSg5>!%R~#q&njJSK%;r&2C>GEuS}x@Ei+ zEf!MR#7?5;ocGkUsF-~6ra1DdJnxk}J>iAnfI*Rq_|;&-_8sG>G(DTzMDg{hfE_?% zt(xYI8Z9*cjfP|UZm$3qOy3X5FMJE5#Ra2ov>?)?ogDv&JlwR;1@uTjSdCshM>x*s zg*1g+K6~U+<>&TsCgQqBo!=TL1;xxpK|oWe7Ni3+y#>1Xa+6$+w3z>6z@gt1^wxXu=xUtuQvr+T{ME|;zEl^n2Sep zTcC!govr*NsRG}rhpw*`j>adMGX z@?{l0X-~f94fFDOFfV6Uz$il?Euf@*Enurw@!IdhH!U%kR@*1Xn;+|R5%#kR?l@Jj z9z0^LknFdqePL4VYc>3gd-9DIZ)LCP4ChIf0F1rqgL=XUDX1 zJc=#qSJhMA3ZXgExE3iZGdonJPq8=|EEh0BU~I2a7omM5^SZ$U@_nyta>LE8#$Azk zGE@Kh);uNuhf=YW9fy_wczxP_00s44ga8-vOc6W2Z~C)|HBrjVyXt&L>-r~I)0(70 z4{A+cjC4GEo9(-kl3xLNw4wVZe3XEno2Y94E60Zp(XI)u8q^lvr(xeHU*Ri@V^V$^ zXpN6ODQ&b&3ons!n#-c2FcU=wc-1SRyrm?2*EJ<=sre8{sLh4)Ioip|Q(pBultij8 zIiHq{$7osb(a%w6n_gK;3~{>~JgNO-!EhreCqKd&VzFbO4jr=D zED4G|z*gV?!8Y`f@jH?>-2h26zU?B)SBC)Pg>cb@b$5=;fx~U@bFRbj3bBi+v|z>8 zMi>Wo(j|Jrqc3kNN!<8Y{Oo#$`MCYlI@)r4xiSUTJk=YFdc~AWU(ae=bSR`P7nkLg zIdqT)&fHKbcr)t?|FqEK;0_I6#mFK?O;HVa=0Ndyo{M>fza=tukw@=r_!b z`!<=56Ul9;rKNH@O5Xg5?^2paW8yO^j49fRFLaojSqi7%h4r5vXf79CW7b`n#D&h2>Ntn6GKVQLbDQthbT!89Qd8YX6*~ni-S;g^3Hs;>HE~Zur z@YI(_c(A44<$%sR_VO~}sebng!i6D_>FOd($m}ax0K)3j4uNaB2)@a>zhRjzMX&B5$V%-d% z623Om$nBx&$44e)Qyj6Oyl4pSe44C&^<75eSTl5=*=EE8^CJ08jD@{mS)w}bU0Rh@ zC4W&ZdjY{$sdQatlI70DNdPuPKWqG2XMu1M!*;6bNvM#Ube&=EHHHiUH-orLYe zIx@Y;Dsv%sH!;MN zgxSJJ-sjl1qX&WAq;9u@_!5ZZxH|oz<7JjP`g#`gQTCEW$$6j0*}kfa8Jk{?nYRd8 zgfMEtb8DOV==j-`edS(&F0Sco{!CETVSStJB(>8jh#V$+6BA$P}kmEQg>ae=2<*9 z7{r`+@hM@fbf$H9#o-;MB%@K&yxF1{TGSMDb?>90smaaO&Q+9_wN=;3&=|?<;@8{0 z&xxwftGPG%pYbFsMh486kX-Yu2lIILb``jx=G%y~lH}Xeg_Uu3sCh=ScbF}FBQ9kE z=x?8o1SCoqCg%rJ$j(3zWmpfj_~?muzmGi*YShFFUr^`?0a9FYCAgs6wDYvF_a_Z8 z>c4B)loj}yExt3uO{3kG?HT|kSp{=T7eX0S7B`}(h>xTO=SeVLb3k;A1CrFp); zGD+8KJ4j3%@ho&~N-p>lsD^{ib*7!Cey$tym_)c{>#JDT^+s*m!^Z3;uzmjHSizh& z`);-v+&esd!LQi;iKnx=M=?~?pQDq**E6UL=!4y!(~he(F;;3ICuERT-PoTL-GyK=%HzEZl@eaY`Qnqs=GTPxDeAhT|nPe zbT5%^#A@G8=c!bP(HHJ5I~S^u;|P38ZOhoVaA7|9R;b1P(_Wg$>kz6;kGl}@GQxN< zv#`3M%|wAl8q+LFhILohUrVY?!}!y;P=bAF%Qb03+RkLIqWVT~U{YW*+s!5&ewUy& zo9wOT1Tb_A>3r=0vyG9J9m7>El!83F5fPVzy|o43{{tOMhMduKMwDD_9BP?%Lvhk&{@hq)R7=q zna0epWsgTIw7>1H2Cg-}IGclBZFoox4 zBtDBaloJ#!D0_xFpor#H_tkNe?+&3@MBjKbM(UFbWUBe-QFFj#V2P#v27DJo zxnMwdw~=#;S>`0yLzG#>So~pyIrHp{4+bHUn-jK~e4H{XeN7MFh#7&E?0>KZ$0{>6 z=CVyy`6=u+UcGWUX8JUV#4lN=Vg4b`U~1L7F|nbqO(txO(M;n|sNqK!#NYZbr*n?Y z8d_M{jgt7SXIr3t5Ywen*|^|R;Rg>EV`T~8AvV)Q3M{uZ$Nt5F#+Q}=0a-P69s{q{g@A-=2G!_(R%H4R;?YZnJ)G@3>Ioj23yPRs>qj5@Le zy8>+paPCQoRK;jm;9IOO6QTIck5;wJW*{kBgs0~Gi2O-jKVSBCVaB7(T@RWsbBez3gZ|1mz*!GvXd2OucqrOVI|oDFmEZXrOe8?es-Jow@^}#8#LACP-_= zk{>b@J}AF0S(ET)qm*aEHmN2MuM3NiT-N%U-qQ@XTVW(sf#ae|Mv9G9T5p8Yc)7M7 z5^dM}UZ7M2g516T{-LnpNdxYyIUizas)&QwS)ZTyQ3bOd>CC>L{IhW?L)fkr7or-N z*sfupo67v5UY1zVw`j}wZB`7-M2K%V#G7mu1R+28rS;xHw3I8MDHe_Sqamb6%j37( zG?qyDLq3|V`!mlbf)3Ug+5PE5oPJ=U7NU^)!h}WEz02~GqByP;vI2uE_;PDkUW(Ow zj|&-(G9s-yXYQ?RU}K#PKm5T;n(D{-IH#g+aG7q@etVJLQs(_=VZGtwRkkm%nA-w8 z&EU`(-Q^i>JE(7s5bMszA~&<7oUn7`rJiywW1~CNvx)t%WeNsou~oY_8b-cy1OcK! zu7Z&nvyasgh?A2#00xefwH0lZ_)9v9L$paPxb(aj+%`8`x7N7!Zx9JTE;T!U*wEVi zf>_WHKJUIRCADR7kWd%Y+lc3&u$JmvU(}X@{am5#yYEHQ+9bwyU*cZI-D!-;aAwIM z>J+Jwam^Q{!PzINE3AWWmMBGa=btX0;Ftx+{j|b4I&1@IAnq$+gjVPn+McP{eDBv@ z|LQqii)yFsoMvQWKbln@7&V2oZY|S2tk&EHxoGbWzi=pc+4kYb>+dDrfrdoFgkPu{ zJ~Lh5=*NIUqFNBRCazf8CDyJe33tALO>~&H!Vr>wzBXHZ`RVIOjRv&o0ZEZPgXFhz(+#J;FEQ{OI1Q9&bP{17%*?W-(}Fsesod&eOxwh3mlJcg^i)zy zOS6diw2YswOa;Xec$POc!Scav??a(L1p0|za3=P{yS-HcnrbD4+ed288y@!^ncUV0 z$4826&FYSFloU&y5sD>So2QsCb3cyKv3^s#u|RtsZrPD%L+NL{(A4zOUM6*8P2kkU z+)J9k+Rcn_kR9A+6%V#rEMKyS#x_J;#hq)Mv`Q0@5L4u#2p4l&Lzy$w9kAGm)4jls z51|0^_W*BRu`M?lttYjq@vwaibB<#m5bEvr;9v|uC-Xf+)6Le|nmE-_TpXE>-_?8b z?eH>HST|KrC0bCVFhmrkC{1018#i?{Vf~^vD$djo;j@W6_E(!udMG9Ks|S7+CE_6t zUHOsE;#oX+?}*v0z07U*W0bB7Jdt#_W~i7EDW$h_ana+<;)vf%By9KA;djt@3mx2i zkNb&9|JGW8`>K($@;!ntu1a61rXwpqa@ZW#&E9E8PQl^PG}`!6ziwgQjdv#U#lu-a zfv@B+1J^KzzM2qE#Pjta=$wk^2t1?qL4M(KbigpCv9;oz#y)s;8OO)_065Tn!u-I0 zY=CLQ_T4GRUDcJ=kocfL+aWcl_{sO4p-4AReU-L1&k9M;K1wUsby4Ja7&P9kc>)MO zHSKZ(+I7RRJh=QkneF7%Zsi|}BZc`^z$Q_*gJr>h+&jZQ%h`#^Rj%tOj|X*sMl zgIw#vw-T#hQ;g<=R;;TGwb0Q(IfLqO!`+kfP|K%;^xqp6Tk)V7SMl@VP*qM`dFjtT z+UbRR_z*M?e!j>Ls8EL0f2*~$dif1S83;3>)oR)hgp<1We))!<3Itsr$q*@(Wj^an--%_~XtKw~}LHe{M13QrO?@ z?)iRG@Qgtnw?xsKu|T0X{-J|g?lpyKrhrMqq@-Vz=T4f8RoUq-O;mSbI~ahGSNUYh zo!u#h^7WZuer6EMWIypR>0z+C|BspdD9fKj~F?}ctx!`Kvrb=w0;zzOZLJ~&q8iC?C0zYdHm#SgP{mHo>hkQG&&j^zg@)BT^K-N$??>~b71 ze$rz?+k0T0G|xJHx1*HIZ*-Kiy%eXQH~d{0)lsfP?suMAc;;(;4|3LatWflejboM{ zYLG0`YJz8#a|I&x^w+6K)uj_epQ~2BHQ5T-^y$@mIvf76&C)r0h}mqqi_{7%knp~` zeA=d2tO-AeU?HZE3R$xVKQ%%v4*3 z{tU=F(MtXdGU?_*?!(GA3mmM0Ryquy9;p;>xl)A(CKC3uQNqWY%H(O{`1VN?q{6ny z#*D|zWiz9sMgCl|(8e;v8Im^qkeG}IIGZZX(>)XzLr&i)f8^4)hRlwL4{WiYWSrN= z4%BVDWRX9K>v}w=b|Lx0g(V2nPW2t_lCFDYA2s#r%kI1M7O3*j=jX7GFAQp4N3D@F z?l-12>CujD6Y7^ZzMAp>{HAOU5|-PNyd+{0O(3TB@wRZXmb?D5_Y+9Y!YQuo4RX|( zD)ci7O}sIB9#YDeicJLRs#)(>iIzp7c|^Xgyu*uq56aVJ?|20l>dU~=Gn>%P6IPobV!b|^ zx;%Nt8)9mtqkZKV<(&9Hj$UNka;Nd9p)9p!{ZBk~7FstQ|LFMoaLL&@&6nKB0u(R! z2;|D$=%lLOic>RS_a?PJ6??cj47ry=vI!#Eb9{VpR$E)% zDh66w+&B_zd!X!lBSnNcp_Qwnv0j@^S8?&Splt{R3ZA2)ecu;+zubG=qV9E_as*^3 zYl(32ate^Q9@xG;IkfER@I4vXmbXd0Pz7P*LU4FE`+E}Wx-L#wtC)ErzNLH=Z^3y= zuUjosBn*|0s7A5qFG@r^ebGjuF3DmmTdOl{Dp{Urxm3KMOa7A+xP)Y~t}6bvtK9}Y zN-7psl~1dDb3jogu(y2hM3gr^f88Nx=tls=>a972`-{Y8N?FO`9Fg?^&eC0H4V{l@ z&x4VhiBZ{rl* zCMk!`Ja!3F)DBr<0BRq}r`3t7_%>QSIMsX2+5PjN?ueSt`dzi)JThsnV-E8Kmw!zD zvrUQ`TalUP+d|eTll=)x7hT7ed``Tmh;>2}J)cqqD3B03~}b$H*|dG6O39`O!Q`1=V>j?aw8XdD&M0};;Y3+ z_KfCIls4F&Y-A~VxS^bXD786Hod0;yqwrkKK7*dp0{Qkleu||j`C_}ThE07=FvLSr za}{?$&AG*049coBOeGWeO$J=_q++nok^D|pzUC?aOxD@_oIe@*5l|k9@(BhUeR2vkRyTlTg-tV^eVE0d-KLhF3Vm5ps%zne- zD#XfXJMxtt(*>araylr_5%t)yYE8B>Odc&1qW9=V(=NW(3qf-M6=2OpvmwFzG&$s$ zT^ZXT{3RvO($lvMWS6#m)GNtXKNaD1@y?2Jz7!WJUBw)KBL_xj?nQ{K8L<^LQ&YsF zpO;)hQ!-dJn{~7^eZgH}FLXdT+_19Z#A$@3>hiqvfh3ML-AuadNTx-b){8ylG!SwYD0~ZT{8YK9dR*HJxEwkSRHezHk#wgK|DFl%xpHT zS7e#&@!P6e%kivt`&TJ=!XDWc0_Dqib_5Q~?%7l815|A?$^+n$1#P!kUIT;BmCh3X zp)OPN_KX=+{6?fZ|DV}4p68R|pPGHoj{IUs=z?K|C}}&e>otWvR-YpjWcx*6aG5z- zx(3s_enBaBP9_#LrM@I5+k3oV^U~owHQfarPxKXnM{BhD@u}3v^iaFzC$8=RDpWro z+K)Mo&57qAf=$0y-VHWTu|3{B2a`Xo((#dPZLK_TeaUjIB18QG^8;H~NJ6!1gE0Nv zMtrJ?VT!?F_*h)YS(&`Pq$S{1@JDcGJ9tKnz7oUJiZ-XiPoRHL_NIL0l5;l9l^NaR z^UI+JX9Pi;gwK_bZi5Lg{6kcE?k*0FEJME;SHEaO4A@%QjJunbOF3;|a~5#`uYV1T zuF*58*`c!=JJu1knU|bO(r&0SOZ5kMs$psSVo(kXqcsR*KL4^5S#lZAQ%f|rEUPVC zOTeZhL9ce!z}U5(=P+PL6+hf)_QNN_c$X%m7P-=6GbdKC`YKJz%7MUql_Q*UzU6y7 zcz)mwcrhnyh9$0WrIm$=_4Ekl{W?l1TmUH_-(XTGzt$cfl}Inga4GP zsW@r7;)2v`CZ)PBwD{AKDPIkU;v=7j2%7?h2FCi5Fr^26^q#KSo2O#UAvGps-CPU#}~yH8V1pJ5ebeSYn19)8*`l*oe?y`;oFInP1a zy(d;K{MCwNTi((F6U#JRwl0gsuf~WW`{0$|f%m-oskLYhdLn?5pE>v&BCe<%V&1mY zLB|oA8KE+#45+8R$|c&*ZQDk|GU+X$l<(7S>+DSfQA1r8w?6{m?s8mWQ za{QT^0p_wD$CaThHVjPaIK&SRzWb1(w6=$SxOvzaI~6pMo87Dj@+fpm>k(wz7=EtX zRJ)JHTUXCEm9HQl!>w4XqBuf-HN|1ARgAf^rradDG^;;?!4RXWAYw_h^`3s_Y7gx; z1^6AYW(>dji*-+HXWjsDr0tuiO~z96Mx0MvCi(=M0%N>0eTZg}i;pC6*aB2fZLTjy z!hPQ_FiG#vQ6Wj!Mz51eY3_GSAR_X=->9LQUk^cFbMoRGK2Q$$QAo$9QMXo&zIIMh z&C!yhR|_Ga`?mUk7Rb0Ngt;j(dEv`4?7q>^``-OAp;)8{($?h#10 z-ZY`5yPt!RC5QJpMIs|ID2ckZJ$5*zo45VxnZhO=jTE?^mp%50_u|L&F zqL1Z_2c^-BK}$eDTIc5D+^PPmj_nSg#q+T`1E?%8c|f zmisF5v+Hii3^-8vRjDEhi`PN+s?ta3?so`v6GVe6Q|Caf)p5$TsKqDLw3V39c`K#< zbBcM!><{sR$3fQXl1E=rdaP};SA8p4(Om*`eSva`u%s2(_nxH5qrao_?1to(?DVT7yvxrM1Dk5j_j($7VE5<|L zN*f!SaU-aLHB^6x-{(DHEg9m?-h^uI>YaWq&AC*!DpO6gm8F>MYrG$bo{#GyWKbeR zndu)#Jfu6D{y2`>tCoeoBH|M6Uu)z~ff}-|qjo1vDNKJ?m6T+2x0e_4_S+J^ebx{! zgBx3QnQD}#eMZAg8*Sd=)19&H!)@9SVfsKV zoS}t1(efkD&cxr%-oF!Z#=E%)cmE4d>D6%{9^R6^v;^J{Gk%^=%kg!yWFI0J{muRK z8R-oq@?8o@Ef1+qKcv4yG3}wC&vk5=|CsDbe7blopKW=*=HziZ=)-vUu2+MlRgY+r z0<|#cd4H*wc9d%ObTyK=eFh(ArzLHqRnN23s%IFvoq@W=>g7)y$x*9oT{V?!8#`0X zB~h^!EF|;ZB)4x+mhaG44Qt?H=3#wJx$a0|U#0H@Z7k??lrYbKd;dx8o0ID!5)AK1 z4)h}$USYz zCefpMPPL=PDt(>E!wkO0Td_2xqc+qH{c}CF0L?9eCi3r*RT4}Ir>8n&ei3g`+hu0c zE#r7Zm&Wu4zW@=fq!PXtfM>smhCnVPZJWd~J&T#*ET$BL#N=C1ZsIY! ze9rjF*mWqzTsl9TO&T);@B3g}cuk~3hYp??lbK8yYAnMBGYW6Rp=`-fjo;RnjuC8X znk4VkJI*OzOO-d5$LTROjz|8Rd-mV;ADXC***`NUBeMU{=ew`FxBFF(a|CDjR6f#X z_KW$9Yo8*{o;_b-f?mLL7I8_s*i%*|6WGRO7h(~cS`0Hk{WHbDM-XF+o60~eoVagCPiJanD0|J0S-rOteYYZFgWu9

#u`KZ6CT9f9v_+7 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 If$oR!Ke1%UBme*a literal 0 HcmV?d00001 diff --git a/resources/fonts/SegoeUI.svg b/resources/fonts/SegoeUI.svg new file mode 100644 index 0000000..07bc4bf --- /dev/null +++ b/resources/fonts/SegoeUI.svg @@ -0,0 +1,1520 @@ + + + + +Created by FontForge 20170924 at Wed Jun 28 12:30:21 2006 + By www-data +(c) 2006 Microsoft Corporation. All Rights Reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/fonts/SegoeUI.ttf b/resources/fonts/SegoeUI.ttf new file mode 100644 index 0000000000000000000000000000000000000000..074dde6659b25a9f8061c6a1a1074674431f0522 GIT binary patch literal 34164 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 literal 0 HcmV?d00001 diff --git a/resources/fonts/SegoeUI.woff2 b/resources/fonts/SegoeUI.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bd7253b774afee30811d4bd4e535a93ed1679721 GIT binary patch literal 16048 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 literal 0 HcmV?d00001 diff --git a/resources/linbo.qrc b/resources/linbo.qrc index be7e1a6..2a7d248 100644 --- a/resources/linbo.qrc +++ b/resources/linbo.qrc @@ -26,5 +26,6 @@ svgIcons/shutdownAction.svg svgIcons/rebootAction.svg svgIcons/settingsAction.svg + fonts/SegoeUI.ttf diff --git a/sources/backend/linbobackend.cpp b/sources/backend/linbobackend.cpp index 3b0a253..60c0707 100644 --- a/sources/backend/linbobackend.cpp +++ b/sources/backend/linbobackend.cpp @@ -25,11 +25,18 @@ using namespace std; LinboBackend::LinboBackend(QObject *parent) : QObject(parent) { this->setState(Initializing); + this->logger = new LinboLogger(this); this->config = new LinboConfig(this); + this->autostartTimer = new QTimer(this); + this->autostartTimer->setSingleShot(true); + this->autostartRemainingTimeRefreshTimer = new QTimer(this); + this->autostartRemainingTimeRefreshTimer->setSingleShot(true); + this->autostartRemainingTimeRefreshTimer->setInterval(10); + this->autostartElapsedTimer = new QElapsedTimer(); this->currentOs = nullptr; // read start.conf - qDebug() << "Starting to parse start.conf"; + this->logger->log("Starting to parse start.conf", LinboLogger::LinboGuiInfo); ifstream input; input.open( "start.conf", ios_base::in ); @@ -83,12 +90,8 @@ LinboBackend::LinboBackend(QObject *parent) : QObject(parent) } input.close(); - // default select first OS - if(this->operatingSystems.length() > 0 && this->currentOs == nullptr) - this->currentOs = this->operatingSystems[0]; - - qDebug() << "Finished parsing start.conf"; - qDebug() << "Loading global configuration"; + this->logger->log("Finished to parsing start.conf", LinboLogger::LinboGuiInfo); + this->logger->log("Loading global configuration", LinboLogger::LinboGuiInfo); // load global config QStringList command; @@ -130,8 +133,18 @@ LinboBackend::LinboBackend(QObject *parent) : QObject(parent) hd.remove( *removePartition ); this->config->setHddSize(this->executeCommand(true, "size", hd)); - qDebug() << "Finished loading global configuration"; - this->setState(Idle); + + this->logger->log("Finished loading global configuration", LinboLogger::LinboGuiInfo); + + // default select first OS if no other OS has been selected yet + if(this->operatingSystems.length() > 0 && this->currentOs == nullptr) + this->currentOs = this->operatingSystems[0]; + + // triger autostart + if(this->currentOs->getAutostart()) + this->executeAutostart(); + else + this->setState(Idle); } // -------------------- @@ -139,6 +152,11 @@ LinboBackend::LinboBackend(QObject *parent) : QObject(parent) // -------------------- void LinboBackend::executeAutostart() { + this->autostartTimer->setInterval(this->currentOs->getAutostartTimeout() * 1000); + this->autostartElapsedTimer->restart(); +} + +void handleAutostartTimerTimeout() { } @@ -159,6 +177,7 @@ bool LinboBackend::startCurrentOs() { this->setState(Starting); return true; + this->executeCommand( false, "start", @@ -284,6 +303,10 @@ bool LinboBackend::updateLinbo() { return true; } +LinboLogger* LinboBackend::getLogger() { + return this->logger; +} + LinboConfig* LinboBackend::getConfig() { return this->config; } @@ -304,13 +327,22 @@ void LinboBackend::setCurrentOs(LinboOs* os) { emit this->currentOsChanged(os); } + +double LinboBackend::getAutostartTimeoutProgress() { + return this->autostartElapsedTimer->elapsed() / this->autostartTimer->interval(); +} + +int LinboBackend::getAutostartTimeoutRemainingSeconds() { + return (this->autostartTimer->interval() - this->autostartElapsedTimer->elapsed()) / 1000; +} + // ----------- // - Helpers - // ----------- QString LinboBackend::executeCommand(bool waitForFinished, QString command, QStringList commandArgs) { - qDebug() << "Executing " << (waitForFinished ? "synchronos":"asynchronos") << ": " << command << " " << commandArgs.join(" "); + this->logger->log("Executing " + QString(waitForFinished ? "synchronos":"asynchronos") + ": " + command + " " + commandArgs.join(" "), LinboLogger::LinboGuiInfo); if(waitForFinished) { // clear old output @@ -332,11 +364,19 @@ QString LinboBackend::executeCommand(bool waitForFinished, QString command, QStr void LinboBackend::readFromStdout() { - qDebug() << "OUT: " << this->asynchronosProcess->readAllStandardOutput(); + QString stdOut = this->asynchronosProcess->readAllStandardOutput(); + QStringList lines = stdOut.split("\n"); + for(QString line : lines) { + this->logger->log(line, LinboLogger::StdOut); + } } void LinboBackend::readFromStderr() { - qDebug() << "ERR: " << this->asynchronosProcess->readAllStandardError(); + QString stdOut = this->asynchronosProcess->readAllStandardError(); + QStringList lines = stdOut.split("\n"); + for(QString line : lines) { + this->logger->log(line, LinboLogger::StdErr); + } } LinboBackend::LinboState LinboBackend::getState() { @@ -377,7 +417,6 @@ LinboOs* LinboBackend::read_os(ifstream* input) { LinboOs* os = new LinboOs(this); QString key, value; while(!input->eof() && read_pair(input, key, value)) { - qDebug() << key << "=" << value; if(key.compare("name") == 0) os->setName(value); else if(key.compare("description") == 0) os->setDescription(value); else if(key.compare("version") == 0) os->setVersion(value); diff --git a/sources/backend/linbologger.cpp b/sources/backend/linbologger.cpp new file mode 100644 index 0000000..4d62eee --- /dev/null +++ b/sources/backend/linbologger.cpp @@ -0,0 +1,34 @@ +#include "../../headers/backend/linbologger.h" + +LinboLogger::LinboLogger(QObject *parent) : QObject(parent) +{ + +} + +QString LinboLogger::logTypeToString(LinboLogType logType) { + switch (logType) { + case StdErr: + return "StrErr"; + case StdOut: + return "StdOut"; + case LinboGuiInfo: + return "Info"; + case LinboGuiError: + return "Error"; + default: + return "UNKNOW"; + } +} + +void LinboLogger::log(QString logText, LinboLogType logType) { + if(logText.isEmpty() || logText == "") + return; + qDebug() << qPrintable("[" + this->logTypeToString(logType) + "]") << logText; + LinboLog latestLog {logText, logType, QDateTime::currentDateTime()}; + this->logHistory.append(latestLog); + emit this->latestLogChanged(latestLog); +} + +const LinboLogger::LinboLog& LinboLogger::getLatestLog() { + return this->logHistory.last(); +} diff --git a/sources/legacy/linboGUIImpl.cc b/sources/legacy/linboGUIImpl.cc index 31ce4a1..cc5ac8f 100644 --- a/sources/legacy/linboGUIImpl.cc +++ b/sources/legacy/linboGUIImpl.cc @@ -1504,7 +1504,7 @@ void linboGUIImpl::resetButtons() { } void linboGUIImpl::executeAutostart() { - return; // autostart is handles by new GUI + return; // autostart is handled by new backend // if there is "autopartition" set, execute the hidden button if( autopartition ) autopartition->lclicked(); @@ -1543,6 +1543,7 @@ void linboGUIImpl::executeAutostart() { } void linboGUIImpl::autostartTimeoutSlot() { + return; // autostart is handled by new backend if( !myCounter->timeoutCheck->isChecked() ) { // do nothing but dont stop timer } diff --git a/sources/linbogui.cpp b/sources/linbogui.cpp index 373c122..3aa75a5 100644 --- a/sources/linbogui.cpp +++ b/sources/linbogui.cpp @@ -29,7 +29,9 @@ LinboGui::LinboGui() this->setFixedHeight(QApplication::desktop()->screenGeometry().height()); this->setFixedWidth(QApplication::desktop()->screenGeometry().width()); - qDebug() << this->geometry(); + QFontDatabase db; + qDebug() << QFontDatabase::addApplicationFont(":/fonts/SegoeUI.ttf"); + qDebug() << db.families(); // white bakground // linuxmuster background color: #394f5e diff --git a/sources/linbostartactions.cpp b/sources/linbostartactions.cpp index 382e573..ab74d4b 100644 --- a/sources/linbostartactions.cpp +++ b/sources/linbostartactions.cpp @@ -5,6 +5,7 @@ LinboStartActions::LinboStartActions(LinboBackend* backend, QWidget *parent) : Q this->backend = backend; connect(this->backend, SIGNAL(currentOsChanged(LinboOs*)), this, SLOT(handleCurrentOsChanged(LinboOs*))); connect(this->backend, SIGNAL(stateChanged(LinboBackend::LinboState)), this, SLOT(handleLinboStateChanged(LinboBackend::LinboState))); + connect(this->backend->getLogger(), SIGNAL(latestLogChanged(const LinboLogger::LinboLog&)), this, SLOT(handleLatestLogChanged(const LinboLogger::LinboLog&))); this->stackView = new QModernStackedWidget(this); @@ -28,6 +29,13 @@ LinboStartActions::LinboStartActions(LinboBackend* backend, QWidget *parent) : Q this->progressBarWidget = new QWidget(); this->progressBar = new QModernProgressBar(this->progressBarWidget); this->progressBar->setIndeterminate(true); + + this->logLabel = new QLabel("", this->progressBarWidget); + this->logLabel->setAlignment(Qt::AlignCenter); + + this->logFont = QFont("Segoe UI"); + this->logLabel->setFont(this->logFont); + this->stackView->addWidget(this->progressBarWidget); connect(this->stackView, SIGNAL(currentChanged(int)), this, SLOT(resizeAndPositionAllItems())); @@ -142,7 +150,13 @@ void LinboStartActions::resizeAndPositionAllItems() { this->progressBarWidget->setFixedSize(this->size()); int progressBarHeight = this->height() * 0.1; int progressBarWidth = this->width() * 0.5; - progressBar->setGeometry((this->width() - progressBarWidth) / 2, (this->height() - progressBarHeight) / 2, progressBarWidth, progressBarHeight); + int logLabelHeight = progressBarHeight * 2; + int logLabelWidth = this->width() * 0.8; + progressBar->setGeometry((this->width() - progressBarWidth) / 2, (this->height() - logLabelHeight - progressBarHeight) / 2, progressBarWidth, progressBarHeight); + + this->logFont.setPixelSize(logLabelHeight * 0.8); + this->logLabel->setFont(this->logFont); + this->logLabel->setGeometry((this->width() - logLabelWidth) / 2, this->height() - logLabelHeight, logLabelWidth, logLabelHeight); this->inited = true; } @@ -173,3 +187,20 @@ void LinboStartActions::handleLinboStateChanged(LinboBackend::LinboState newStat break; } } + + +void LinboStartActions::handleLatestLogChanged(const LinboLogger::LinboLog& latestLog) { + QString logColor = "black"; + switch (latestLog.type) { + case LinboLogger::StdErr: + logColor = this->backend->getConfig()->getConsoleFontcolorStderr(); + break; + case LinboLogger::StdOut: + // TODO?? logColor = this->backend->getConfig()->getConsoleFontcolorStdout(); + break; + default: + break; + } + this->logLabel->setStyleSheet("QLabel { color : " + logColor + "; }"); + this->logLabel->setText(latestLog.message); +} diff --git a/sources/linbostartpage.cpp b/sources/linbostartpage.cpp index 3f29a7e..9e693fd 100644 --- a/sources/linbostartpage.cpp +++ b/sources/linbostartpage.cpp @@ -55,6 +55,7 @@ LinboStartPage::LinboStartPage(LinboBackend* backend, QWidget *parent) : QWidget mainLayout->addItem(new QSpacerItem(0,0, QSizePolicy::Minimum, QSizePolicy::Expanding)); QLabel* versionLabel = new QLabel(backend->getConfig()->getVersion() + " - mod by Dorian Zedler"); + versionLabel->setFont(QFont("Segoe UI")); mainLayout->addWidget(versionLabel); @@ -63,7 +64,7 @@ LinboStartPage::LinboStartPage(LinboBackend* backend, QWidget *parent) : QWidget int height = this->height() * 0.2; int width = height / 3; int margins = width * 0.1; - int buttonWidth = width * 0.8; + int buttonWidth = width * 0.6; powerActionsLayoutWidget->setGeometry(QRect(this->width() - (width + margins), this->height() - (height + margins), width * 1.1, height)); QModernPushButton* settingsActionButton = new QModernPushButton(":/svgIcons/settingsAction.svg"); diff --git a/sources/qmodernpushbutton.cpp b/sources/qmodernpushbutton.cpp index 29d1b57..032ebfd 100644 --- a/sources/qmodernpushbutton.cpp +++ b/sources/qmodernpushbutton.cpp @@ -100,7 +100,7 @@ void QModernPushButton::keyReleaseEvent(QKeyEvent *e) { void QModernPushButton::enterEvent(QEvent *e) { - if(this->overlays.length() >= 2) + if(this->overlays.length() >= 2 && this->isEnabled()) this->overlays[1]->setVisible(true); return QAbstractButton::enterEvent(e); } @@ -112,7 +112,7 @@ void QModernPushButton::leaveEvent(QEvent *e) { } void QModernPushButton::mousePressEvent(QMouseEvent *e) { - if(this->overlays.length() >= 3) + if(this->overlays.length() >= 3 && this->isEnabled()) this->overlays[2]->setVisible(true); return QAbstractButton::mousePressEvent(e); }