From 654405a054b7c26f99a9145a9640a33b905dde80 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Mon, 2 Aug 2021 13:53:23 +0530 Subject: [PATCH 01/33] edit links textfield added --- lib/global/globals.dart | 10 ++ lib/ui/widgets/popup/editProfilePanel.dart | 113 ++++++++++++++++++++- 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/lib/global/globals.dart b/lib/global/globals.dart index 914ea89e..66f56d8d 100644 --- a/lib/global/globals.dart +++ b/lib/global/globals.dart @@ -76,3 +76,13 @@ bool isPremiumWall(List premiumCollections, List wallCollections) { }); return result; } + +extension CapExtension on String { + String get inCaps => + isNotEmpty ? '${this[0].toUpperCase()}${substring(1)}' : ''; + String get allInCaps => toUpperCase(); + String get capitalizeFirstofEach => replaceAll(RegExp(' +'), ' ') + .split(" ") + .map((str) => str.inCaps) + .join(" "); +} diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index 277f940f..e79a7760 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -26,6 +26,7 @@ class EditProfilePanel extends StatefulWidget { } class _EditProfilePanelState extends State { + final TextEditingController linkController = TextEditingController(); final TextEditingController bioController = TextEditingController(); final TextEditingController usernameController = TextEditingController(); final FirebaseFirestore firestore = FirebaseFirestore.instance; @@ -33,6 +34,7 @@ class _EditProfilePanelState extends State { bool pfpEdit = false; bool usernameEdit = false; bool bioEdit = false; + bool linkEdit = false; bool enabled = false; bool? available; bool isCheckingUsername = false; @@ -42,8 +44,37 @@ class _EditProfilePanelState extends State { late String pfpPath; late String pfpUrl; final picker2 = ImagePicker(); + List> linkIcons = [ + { + 'name': 'Edit links...', + 'link': 'Select your link first', + 'icon': JamIcons.link, + }, + { + 'name': 'github', + 'link': 'https://github.com/username', + 'icon': JamIcons.github, + }, + { + 'name': 'twitter', + 'link': 'https://twitter.com/username', + 'icon': JamIcons.twitter, + }, + { + 'name': 'instagram', + 'link': 'https://instagram.com/username', + 'icon': JamIcons.instagram, + }, + { + 'name': 'email', + 'link': 'your@email.com', + 'icon': JamIcons.message, + }, + ]; + Map? _link; @override void initState() { + _link = linkIcons[0]; super.initState(); } @@ -112,7 +143,7 @@ class _EditProfilePanelState extends State { padding: MediaQuery.of(context).viewInsets, child: SingleChildScrollView( child: Container( - height: MediaQuery.of(context).size.height * 0.7, + height: MediaQuery.of(context).size.height * 0.8, decoration: BoxDecoration( color: Theme.of(context).primaryColor, borderRadius: const BorderRadius.only( @@ -389,6 +420,86 @@ class _EditProfilePanelState extends State { ), ), ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox( + height: 80, + width: 48, + child: Center( + child: DropdownButton>( + items: linkIcons.map((Map link) { + return DropdownMenuItem( + value: link, + child: Icon(link!["icon"] as IconData), + ); + }).toList(), + underline: Container(), + onChanged: (value) { + setState(() => _link = value); + }, + value: _link, + ), + ), + ), + SizedBox( + height: 80, + width: width - 72, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) + .textTheme + .headline5! + .copyWith(color: Colors.white), + controller: linkController, + decoration: InputDecoration( + enabled: _link?["name"] != "Edit links...", + contentPadding: + const EdgeInsets.only(left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: _link?["name"].toString().inCaps ?? "", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith(fontSize: 14, color: Colors.white), + hintText: _link?["link"].toString() ?? "", + hintStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith(fontSize: 14, color: Colors.white), + ), + onChanged: (value) { + if (value == "") { + setState(() { + linkEdit = false; + }); + } else { + setState(() { + linkEdit = true; + }); + } + }, + ), + ), + ), + ], + ), Padding( padding: const EdgeInsets.all(8.0), child: GestureDetector( From d23414fab2aa3f014b63ef04cd3f0848a25d088e Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Thu, 5 Aug 2021 21:20:57 +0530 Subject: [PATCH 02/33] minor nav log fix --- lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index dcc19421..bf11d52b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -51,7 +51,7 @@ int? purity; LocalNotification localNotification = LocalNotification(); void main() { debugPrint = (String? message, {int? wrapWidth}) { - if (message!.contains("[Home,")) { + if (message!.contains("[Home")) { logger.i(message); } else { logger.d(message); From b268569fe794a7a89695ce798b64b82c00d5475c Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Thu, 5 Aug 2021 21:21:13 +0530 Subject: [PATCH 03/33] add pixelperfect --- assets/images/ref.jpg | Bin 0 -> 624043 bytes pubspec.lock | 7 +++++++ pubspec.yaml | 2 ++ 3 files changed, 9 insertions(+) create mode 100644 assets/images/ref.jpg diff --git a/assets/images/ref.jpg b/assets/images/ref.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2462210e129c09ea94dd5cfc136da84ec5673e07 GIT binary patch literal 624043 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

Se$G*%d;E{_Hsk4X>IB0IZ4mE6( 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 WIz% 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

Byct3GaZvnG{o5|()|&-g0zOy*;>g z7ICpaFjt$=gaLwiztROrn$K!s-CgTJnLN)5oK@mHuchMV!d>1_qeP<@uXZDEeTR=- z?HB&2K&_gD#NokdTB_il^$Wo(pYZeXZmk2JuB?R|p9+>O2fpTR@al9^O-WhyDsrIF z^ls;Pak}kBdaxeNutX%yw99fVt%VIYe2wHw?!o9TKe`JFY1=s97^BZisYaDSfEJ)J zS7Y;e9kIVuQAbrs>y-r(QJ$}Sp^DGKT+`qbA2*D<{tiL0Y+NB zqIVwu0CdnRBVX09J-YgWGBZrwFoT2K2NODEAOY1 zIDL>xOo)gM%ZjD=K5r&R^_)|#jek>zA5~w1V?RgX2#A%>*$>O8?pt=e7p%hgLs%wX zh~#c@Nb6^fXz7lF9sQ9KtBrJm*#nP18i86+ys*k(r7B4=DFhO z(6-T8BN-#0CMXuBL5H3M@?LTpV^WVo&5UJ+L4E1T{!1LR>`1wNDGAQeJZN8etWQvY zW;tER<1(B-`lCAh4@~J(ywDQpKLdSg>itWXct)fbYgrYOGO9KxjC5$Jz#O@YvQHgJ zHV53vSXI%>GQo1Xbkuw?u37XvFY3b zDtW{yv!%PzJ@07b6=J09^lr0Fn!SNZ+Ajj3#1;1XWRveZ%Y?2d7;ntGDR zgaysYx=3h>ipyoZk0)oo{f1&-ZHysEJA+QIcBZPYb8>EUI=FEhieyUm^`9!JzxX2Wpq^@*+;ZH^;z>WNa1 zN!%}}BVv>0RbOt><%fC0!`BiY^0-%YDadfH8{4@z%8=oEcN!wv9B|#DViT6?cT^b= z7rk6*2rzg3<`4_SdumM^3Fw{10SWQ>j43# z{{Tw!`ocsTfz_n=e}_eC*6Bd-{C@dlv)W$@hpysT`m)dONe}it5njmNn4p)D=g%Rh zGrkpff2jq02Vl91`TNs-0MTz`I%}DpW5@iiuUi3a>8w&ZI-~}`qrdgq{QHmPV%~q- zu6+GqlIfYhR^m$H_X(og{{XJGl4;c>>RV8tz#E84plAbG{n^x1wTmZT9NGBItJ|w( ztSB^JC;RTjC#BUQn5-U{-!)%8OD-zf3>{Sr416`id_pM*;}EO08YP)87oG_KgJojk z%F|V*9-aeY8qZ?R&QZGk>zn^at$a=k+jqU5@$WgszrUG5x*o3`B3MTep9~suy|Jw@ z)Sc=1k1*91w$p!s*`F_(Alw1Tc}nG$Y9UVQ_p;&akIUE_VbAvlw)+RoWSZlelEfrd z61(kh=`K`R*T#Y|=Qo{%cRFqDTo+CK4apC3m+|$FR@vid@dN6;pUpMQExpDE_2{q*Y5RN%Zy0?FI5_dNv z@;?^fOeuO1+_Mj-t4q3*lgMV)%fR?u4$LA9{Ubtn@!`vzKun$Rzg)h20it{3r^1}y zB#06)?W)87q~S9yBtX!>qku$G?ogNvuz7L#YBmUzwe#O={*MLS(~ohi_8cIZZt%2D z=IIw;;j;!KNx~H6a(ceHw?dtN9s1TL(?$Lx{$*UGZ`}b`a{USV%%4PiW^#voK>q-E zPk+BiyE?G+Y>{?f^8fy#KSZ?+(@VX7rp1Iw)c7DQJ3U)4Zr{v*Y*p|odidVsJqQ+~afj0OJy2I84;-44tpXK4l~-cnLouekR$yJ3@e5 zz)hb%+F$x0Ku(@|p5S%k>q&n*zBtzvRuS5s2zBSjoRoQ&i#?#s5}QO+Fo;Q1+}*!rDsT%La9fGQ-0sYPkF*;W;rjQs_Mh7? zg`VmN*8fL$tZ#SlSR%7`4+NlyO?<6fJv}J6oqcfG^`8;bQPoNu7OU|MB^5 z`ZpB)5~vFIj3O8fnXd=UpG+`jiQmdFvx7-gKupJVm9`-fNE=%ZA`PzhEMor>@bdp7 z4$eIWOuTt*8U>R`BCMT1HHB5h-*~|dO&y97KN$__ZE%k|#q$tc9Gn>3wCC3XK~FLQ zE)BsVGZ6?kf6rC5)Xhv0(n-8c?{Wp7t9Ach*52oaaEv1dmOh;}$P;IaBF&qJim0W^ z3|QdZ^XzLtic9llFB|4lzfAd53N9B)vP^Zi_1));>i$=U;+Z-Kv-eZHh;4V_f|#g^ zg)f751d1n&=Dfw@2X`dwh%oDY@KFi7Wj>Cx+!JLFoNE2ilkd9y4x9`W5lG$w8OmSG z6qv9!?@j-|d^BbyxcPAu@w-^z4Z+16w;I?=;N#(U%mq{BNBD+Z!8oyk0Lc#FWh?-Go@zKR&S==zTPj*w*X0RWM8c8f?K$IpK$)< zRZ(6D+S!=%Q2q$C-xcKFH=hC|AR`eGM(Gl!k4TjMMzP5nN22Ipg^~#K1Gww$fAIZk zA;d=Ri?+cKE+tz||DZoSEY6GcX~xWS(V|mnf{t4YOF6FIMDpo}Nvm)q6_u|Ru88Ts=O}7aoo?EH(nN2{l_?4(6ROBs z^7R&|n;#2GZsCo;lPGqLL*ai_0;3Tp=d$5ZIId_LxOZ9bl#iCgzObXuN-c9GtTy|b zGnw_FxJFrMv;g!Z!r&I$*<{XBMM@QA#n_eM-=+Li+(0Fzz=jY0Qt(c4o0dEU-6dW* zSd}@ABUd3hThuo8fOqbh*U2DljXO4CiTgFxKDXgCHe+b(xOH(SOV&G=p}c}CvtCZ% zvn~?q`ju3cmUBJj#Df@wqbM^Oh^la~fGCNw`3*W>@B$Dqc?=hLWyj?IutSVPj%oia zn-eBm^;jyoe>uRe2s}&_%Y&H z<0dX8vF$C@7xauAY!}DgwBLE1>|Qib*twn$=#AufLfx;B2pOz8CJUBlQ;$cy5U|{i zFU&Lh47rje2EJ*o3o5Iu>5ZoqY%_1^@;J(XDvvow`5Y5pk<4p=r5c$T$?@U?W7}ix ztqNnEwe7iwHgnQbZD&&91=+I}I>d0GMhLp?o{nvWvgXCHXtnr$v_Z#FLk z8T6Z$#+h-j25g&F&uMwJHPuF_XOfEQDzEx&h%GE$$YD~+SeB`bn-9ah=;afV%9JG@ zWXkCQoe{*f_tFiH?LjH*vXlipQmS;mNJ$^)(Is~`q&Nz%wR7#WER|OX51E>?QDjdw zPGuP{;-sStO-Lzgz3)^^shvq^FUqMt{YB&}ai)GOCd_(Y@g0^hi|!oAn2=FI+Dl$W znH>bs0KuV9W4JBU1q5rn8TcYaN$_3JZN=JsIWu5ZC$jLq@l=02%uWOHQSkZzvGVPm_KoA4=Pg_^Kef?=ao_ph;2&nsu7 z97!R9hGE6$6Zv0rEv4QEsAp7>IAJN(UEi@8Co#paBBYuUBq~thKtjyY6UH|73P39A zLdfTo7J9fUu3?(ksKogjt#XZumD(2$cT7|I7I+>Vq)1EESS_{0^bm%;x{X5F50$Pb zqmu3ZDbdSE;H0UaMKRfjXn7MQCP12Z)KJ`gA^#AV(LKRHu1^{?(ULJ7J7}8rN^lni zJLfoMl*5uTxNun6d{#g%N(J4to5TFp<3rto6kOP|KxNf;JIT^3$?eBwDkl5vc9u<_ zhY;~idtS%;U#ki1G5R#Wcx_X2*UWtj>RXptaKPU01{-&hgCQCk z`DAfn2_WUw*%gHui_sY88+G}$nz}{XDJ<^26}yuW3}Au>-fnNMCwWv z=Ot=FFJ|tKLXR6^W)fxN+im2ok$09&Yik-$gyMT#r={T~_zFsuXIy%C@Sh~O^9S)2 z+R2kY^*fJ7&2PG@x8FWxYN49V@lR+WapHe~u~kgwI}3dSgH_1}RQpv)3-Z%{zKd|1 zMwVj<)#!GH`?z%h2dW5<+=WA_i0}|HUPPGe*(B|`h=!@u-gl*ptj#U7yqErT(1-#s zTeoH*3w1(T#`lMFm(^p=L$k8FPqx2s(`s6rJ^P9IM^(S1WJ?;Df&>S;DWXTI`nNuR*t#aLdJC&=nP+C)G1c5oKsv>YIZ!s~^gBHZ#3!=hs z-+}PcxgU8({iGYskv32H8yT$K9z}};EAwT zv38E6WHEIzd|rW58sB8#Br&92emM>k{RTp;yI*QqHhZxYpGVdFtX=8@w*ihk10|!& zSeWCi6vs%5^vUkFe15+Afu_3scY&$xTlu68N}K95WW~GWo~Rzd*8Xf|3q-B%<)$YCoSCRkhE;W?5i1^NJ4<~Qp6q6g4%VzP zw2ujm+9MJTo>P%^;8slsgjEe z!>D6bVZy@D(I46-VPP?GVX|)xw0g+P1(?T6W2^CuuU%)`@l-)K-+V8-s;o`*_{HxI z`A1#Six8ETJ`Kx0Ii)Fe^+9jXAt~ic2E|vYZZtQ(5K>sQfH?>jO zVx;}hjxViXzu1J?Te|KPe8bVa`W1QGSmMbqsC`SfV%72EXEKR; zH(xk1)w|tX;?Sf(>&$1>`^L%2aIRx#46H z0grfS*0bJgh$p|NS(9JmO3f%!lj)y)(8r4kE)lliNiw8L2&q(VuTW1+iz&L@*RHkJjab5nB-*w- zWHog?qE?rCe&e-cdIPui9oL|@_~L_kD7B$Kd&jf2QmU!pTLvIcVq#N{e9|>1Vp@Kd z=4sl;!YRMvo9;)$iIfUzEeX|zLQ$;YJTK1PTHLjWm>H_Tz0j5?j?l@K#~o( zR2$1VEe?rEel~Y^n@O6Q;e|O@Mra&~xF>VeYeTKx%m-omHeT& z_N}Bpek-Vaj-3!Xzmu~0zM$%NnULK}|CpBXm!E$66;51pfE{V*>*^bx@FeDYE4WuY zr<{t3G3yWuR9mEVXBTc(ZeKY*@9=9b$k84nh z<{!O%&?XUn*8_?r_)3g(vQALRLs$=(gQlka*ViA%z;w1Aj(>TbwIS(E<%R@zt$q3I_>vms`vRwobToqc zCSv?<4sqRJIwCf<#w2|XF`cJA?#aw0yq_X1=}b#PJffB9bX%vdgeiIKHMF+N1Zufu z7V7o!3bOWPQn?l>WwexJ&bx5&7YU|zJy4Idv?12ajI|=8rr?z!6Q-P!8FKH%^C+_h z+cAERw04`N?!TFCt=_eUXj=o(-`8gwZ1d`$Sb-29et$V>{iL(7R)&dB8t3jel<{p$ zZ)2(QS&mzF-e(rQ!Q#zKXyV~ZmcvjuV%Yf+u4hfpE%W;3G-#Zvuex@4@>BGr=NJ0O zF%}jLRlv}GRV*nXB<}_Jm-@v;B~6EtXRZoN^iM6%MjrRVH8`}#J4Ykl7C=w_IejrydWoljQ_u zxoo6$i{0{bU_AaRkQqw0`t#PpLZ|Y(ht?_jQFJVy^}kWgSjfmno#w~B~dD{Ym;*3+tj7K_SdS%uimBOYR)X~^x3!T zzwp=o8QS>#sp#am2I|GHCbI)tjXRvT2DztqTb4r|N25s4I!j&S_YC2R60a(dB+vL` z?^!2Fc63$fa7vnNlaT|5TFlAn0pE#8d@^<-Nebj1EPl;M{h97ya@#X1Xd?bCbJ6FF zpT?vFv0A&vkH+N4T0Z6v@DUrmPTAFB;l#%+Ny-xu)DL$}ljj+7jyXW_psTX)1$x-X zNCn7Ui}Z=l0u>9Ds9*1VL%z}ApnZ)cEPjKZ=>;Sw0 zRUxX{)^GKBXvK@PI>Z{Np~nxI?WLT=2BsWIbAxAHALwj-oO(q>G_A)pgdce{_^H;O zWf?QI$zV_JwRwiRfiZhtp@%g7q4)i`Ft*`!H#a4vgZcMa>rH_@LQ^-0`NMyp_`{#@ zlz7%>lQ^!1xE~36kK;^C9j)zl&pm`6KT$KxHn84M@6O#)dCgj|YVv_TiBzcQmw|Li zDr2_WVW;Ao0R&MEJ{|Ma_`}B{Al8`DI?!)!?1lCviTzSv`8wa#PeP$uR@RT(nKi~d zi)jpBuL$&A)RZhtK8-k4Hl_Kls(|%;nbGuO6U?9AtuP^+_)sdsYc0z)Vcdi` zS@amm1ZRL3{Q4C0)L87r0~HCb@>@w{Kkd}2G(0A+3^8yU+vUd#)+)uXT_wI)h{}(! zNZ^a;N{pGqa1Kz!&uxOXZ3Z2vU~IX23O$a85+O;2E>&M<1U6HFeShgV;;V;>_QVK} z%s!u)*jd$t!Em2U%ia`yetBR?_YsSdzUp75!kil#E*zC z!0m!J)!VpI<4Yoo1fL2-$SM07{V)x`Jujv3t@BwaNA6Me&Cj~8z?q{&=j#2YJCiqp zl|Gf8oKkKvf;kx&8|2iY4M-qQvu(aX!kTUP~pC6{Lq7jE;dq`MwWBS zM>q0nDqW+z)GS>tmp&|H814=g&IfTWvq!BHdPJo?RYbRm=q|h!R1|2F>EMCnQUc$q z-w6DC(92tL<98g6hZMdC9+)x!leZy`uw3BY(?itJaN|?l*ST zSbJy16u#1Sb2b*TJh*$a@owekFJXm>3JAG(5#d9C-^`@qWDv+{x*d z`p4-5OjUgxddGpWZOw?h_@ehboddUtx6YRrSuLF;C2Q}CH8<&~Zb4WHZyUvYUhb8h zR3G`+8<-g}Hs7Cmxi?5}xSu>NK-o3T`7VQ=?(=qGal+`U5i-pV9I5KdEBs?w9@O@bc>#mEafKkYA1*zj`Ts*q_`S zZG2WSX`;nBj*2yBR_W6$!S`#9;Adb(dOC=Xq}56fOCw40r@SgnuH_5l*4Gp67;fK^ z=X$Dg&si*nnp8w*K3L`Ilnhy7Go98w7yeW^?(pK%(bO_BI*L}mH8}mxEBp@CbK6d>3GTb=o+{*zH@=9cEy zXRi+HYh9k*e*ZnXZ~R6}2)~g@^s~f49Sa4c`_d#h(GRc=LoH>lYj<8pgas+|6`C0j z>qkG)cg^Q7iL`aid`d|)ht)75Pp@dQ!Gg((O5vce{DgNL?$W#@QWkX6@_bh^nu4@Q zK>Sz0i{VLimQ=YeDAO=~aFy#LZ%0W-$&ii(UxP%kZV*T;k@BG2*6H@gdQ+z(d*&mY z+MTZ~w_Bizn_`dcVK_tW@vIYvEdw^|bX}f8c>3KMv|1x=y3ZG<#NU$U^h52v7u(Xl zUqxgS728e*fG#%8^45W$rwm}sd+SAF2<4HDX97`=L1HeJ9*91$Lkq-j#Jcw=sH;-BjvE`SY1Nz z=B;f*JOU+#4l8veAJnNVv%Pb>RH}-h%cP-0!b_q(S}x;N80teIb5wY@|Ng?%S0mmq zukmf)_Xl*d{70I@Kn7MPe~@3a{5fq<9|_8AUxutZa!l4CL`yxj1&)^#8~@BwGCTAvZXZIx)ivx zQ{hKY$1{}Yt5Lm|Jn8F7%3MV!*9qD#uLmajz!H4ZdA@8+`So|T=G7QFmK*z`XK8Hd zdB`1yn+IG0f{*dMaGoGnv4?oX=&$Qktoiyhw6`{S?F(~jwQ_Sanh?`?AIfWGFEspR z28UjlZRp2kK2VUUR+ngQ<#6I^~EFU(spa_q-Xd*%3M;(Ru;0i~fU5 z-(%j@2ZIluGBI^L@@8I;CoQx>sH!6U{eShX!9S)&;vPR_eT$|(jB?qRehhy#DQTX+ZhwjqXh>(XXQiDFMAJ%7}sCgez;-YE+k~> zTAZ)cS|g`jCibK3gKywLOd?u?pjaKv5iD?}izH;Qd>v8WrNcT>I+53?IW+upRq;_p zRm|_&)VtrDFGoKnxtdrSCpgC6787CPvkd>x#Kp%1u8J0;ku7yM=2;R8i;U18&zra6 zdgnL0ZBZW`W5w9mU99ct%Po4RkLw3!N>DY!hrbo$A9@{l&J$(7Zwfpz|g z422+#5uJK~X=J2e8XcJHDLF*IpJC*iWZ>KCcb$wejg^*Q%0;9dMvkhEW7Rv*M13%+ z`R9+ZsqLc%r)0|DqJI0ksf)QMH`2chx0Ee`?cbLoQ4+a<4Qh!GIIXy+Sk8XdGYy&x z>afpC`+0XwJ0G9cCs6h);c0YWNXh`7PZ-T}6N@syXafGL#(_oT18DWA?1&58jN3%{I1iV`fsp^D^{x4-*107nOuTY{56^Xp|pQKf~{b6m3!?= zq;ae^HyiKOY@w#WTT5=9{V9%YT140$wc^_GlRdhUFt4dj3fIhK)5UWz-Fn7ZH=(6H4`w^)7gL!*js=5d_zr=6l^~4xhQ}=&`Q7yBGYM zWn1oS>rIoLx2oIDTsyI-JaXm8eR3R9*?ZOsa}y(O6~Uh%Es8}qS%!VOJ=YFBuvEWW zCuCb>0iK2--<$JF+*$oV3Fur2x5!?*(1RgHTNFxE(MtQ0p`=!23c6%3S{ye6id*4> zy50xbTbKWVVkF3j@f-Z-7jgiV(Qij>=~M}EJr}$w?Kih^?%n^7d|IK*l~xK z;d^4&M&PF_n}=V9f@DW#7Ob;dCM+2r;U|URORNm^={t39EX#x zoHu(c04K`Jg0m%VvS)_kKhP&uFWZaomDA|ZCRT5=_Q6n}u9hJot*Y1%Qy(us>l0ko zKY9pUD>bYNvh;_kfj{QnyWq@H(_LgAVqZC_o)8LTk7{$z%cUzHzBw+z}r#l9>CD4J0Uj!En)e?4!Dr*LrV^LcH$~A9>pPcP+e?OtzM=$#c zngy6zLNks6bmRC`j54j0R+i;*Okn61p8JCu9b0iaIcnJjx)xuYw^*hQ!hUCx1t6Ot z{i~<0LVtNLL_PsD2he5w!D604EQA$$F%uUjnE&Y2&J^PTj2naRo4rW{YY8ZxAF7yZ zUic4`acCP5w099upLrIt4XxbhMbvsN0j6}G0d!?2mX6u#$KSAn{c%3r33jDrmX0q*tkeX=uowEQt(=hm5a7*Yxtk`)Z(r8dSDjI11Ev^fI| zkK%@%YGuiJ*~8)JY>Zq4VBLpqS~NV3n+?ORU{~?khs`Ss>;O;i!BoQbAq?Qd8KRWX zZ8P%z^+$iND}0M(8gUnIXGj4C_^6Q!^PzIpbsuQl>gnlQ%3=TZeJc1Lx>!&4 zU)ECHzc;6f$aho9l!$VG4hR>h8?HnDf&M;aan6W^1OL>=AroTJ(Vl)DxB-8}!=BtL z2*}i-t&2W?m_Dtq|Jp&}J@9?dI-F-YxCj_EE4e%8S zTqK+{>%-{yA;kB9+y8;cP|bt1w79(eB`v@~!1kSQchcGd2G>y%aBWd)k8I|~XYnfx2u*-^p&HD^Uvg;?*qDoQK9$ zlhWR{2Dp7_v4u{iS4G8NR-i-`;O!Nsf7*gcLMG=rHv62opP&39xpDv)NX{f18K$3) z^v7w#PrE6O>?=4cosyPZ4x!u&=5>VqAZ2i|0$|4{8)?ZN9-y02yo_l<@0>z5hi11S zyCfG#D+n(6hhcH*LR?LSJH8z;x%spX?Sf^TJ83m3ulKN$^$q%C_J?U<=y57I5)Um) z2FeG%&>GivlR`+{kyWmsLT0CH7?ND^Y7^i+NH-9#QdIUHAvt_u zc9~Go>~2Dhi@75Q-}!s%y>X-AWc$}s#({L1D!B&t;|BkS9poT{QUwYMEJ_0Qr6@@% z$QohMeSPxd(>h8~w`d=?#^M0_>qOZ8l1sU>Xuudw0FSNk=nh~HRA)3;sDwmCbRim> z{LxPKo9fMK6UY&$NId+kT7=W!oSF!l@_XOb(+lYCr(yhSc4kF@A!Z4ttB|V9)PrMJ zX712=y;~ZKdpl`x)jtrtg2Pl!Fpd9<$AL!zXmQrCVK`U^wo+yS>OT1{}NpcG&M#FrU+hC(%r1IleJ#`z>0i6 zP1qsdz;8f3b<1V`S6(~>U>E=zp{jAe&W2U|Qva@Z46;I#n_Gi8sOazx_sT-RWs2Mi zEF?Qft9=`qObiOpmD{{R4c`|4XtMITY-s&Gz!$h*W}mMqK({l#F#0oTQ0V?#HkxDDURqm7jK*G*jfK%)mir*JJmEhm* z+sgMlM^5Y_-2Wk|diXTA;stw=IMp^R6G9~<`smt_szu;7{{k@YT>-medx@N{1bRTl zh%kZj{8#1Ga?iTQ_aG@XT(Whd)0YrTS{OQF0-ol@{ z|7oW)#k#f9$7)CZN{80|-QL_uNXKHzZ8m9uzPR({1ftX&$8W##yh-8Jojs4a#%QbF zuCy?LNSM5y$lx$|_e>(i-REE%s_ThA^tSc!%Wb+dmvFE% z-|X~^h;d}nGvbw(i!k3*-u{6*kj<3+WCL&^+~*4?_Y5n6cor+*v76oQ)7!l{aE~Lj z80fs7*;p1=oV&o?Ix={T@p0pEV{8-%U$&my9L;fMj`c z_IiS=H1L}S{7-=dB4baw??7wv23k{Ym#LIGNi&q{4~5;dN^+%PbR^4pRDs)kM|KS5 z*`J%Lwz__N-UKYXugI_H(`={uoGT&+w*RdH@Y6qQ;h<~ar-6l+;UMv*|1!r~-Rjp3fyp1l64-Zvg3V z%E454E-H4*t~j(u;N!|SkU7_wXNj04KL=g~_ns7hqJ#Ez9*@~EaAnHNHISimgk1#! zr+ngSm-fydj_UplTR1PskIawcV+qZZsl`6v_o|W>TJ;LD%*MUH+W3%r(c=yDeD%%`w{vRlZv1hcyCAN;u zy$Ak08=mM5Xz5j%SsLS+f3BG>G~k>*U!T`#KmU-F=#|*0d<|E^2ttdk!TbT0L9uR< zECsKq`}!2S$aj(W|3In!JImB9mA;YR%nc1Y?V~-l&x27TX&!L8_Tug@VB6TZ|#Bat^ibB}LR_6{^ zbR0AnET`Jl5;u3d)hIw->-Z5*B7Jb04jyow9-Ep$aje4pC2EUP<8t)zxLuDkzdhO( z7{Q<9Ornkof#f{#Z_N=}3S@oW11(pWl-+Ne{oHV?PI_&2Xn?_%Gpt577X}uq`Xk!H zeFo>9%_9Bb?(DWpP#`pJ#akZK=0eyb0MZe|sxHw4Zr$iiYww@=KNEr_CpV7cJ(00H9H(yC@HG=VZ>aAAU{Hz{aWc=| zYWBMn;pmC`zU@JKHKbU9Kk%v=AcX~=k5d?cE}eT4Bh(gPIRI7rA^8Kh4qG+_)@~p& zE!rx2!8^vq!IODje7RPec_D=gtmmpz-xncp%BsUgtPCQS>yQg6ZrvENp%G<7IQ-D%4nQ=Ihcq7fERqMX&!3;r{o|pF6ITIlZ{k}r ze0-)Z>$`8StA1X%{hXw;gPKej+s6^3>-|HS$cMFfjeClS3g6U+@Hq+hd&;I(Jbz^S zocxLs^>;r0G=rl9XG^eygkh*=6>h<*%eF`wHd7t6;$>}+IVA+77 z1jr#dxD-9|b)_50^rWEap>)HK?alfodn%8DO^K#Jk~g9yr8uk<6*z~O?U%Dg)rULz z#z5rUxLjYg-yX`?x*mm)P>275%nx{h7ztL=K^&WM3M zoa;}iQK3@36Z>}4LFql^j5L!oBZzg6aqgQk(Y*i(>R=8OlYD@P1=>wpl)xW%KQ2cB zbRySudH~IV_i*EiJ5aV;w%#Z+0?-Ty)=XBfK=7cR6>wPj=A&y$S3%FS<`T_9e$?Nr z&7lw;3%}2jCl7){s^A{%-wEtqi}GRS*-zOJGwhfwqD6!fu*a zW@9k2$$bG^EVtgP=GF_hru4vM9GugSDJvD%6sOcoBY?PF3LA zV(rMuUA^3RNLA1&T5f}m4A4Csn+5Qyc@ZCF;Gs3LO~@>8E*iP5KPayAt<9>*mf(B5 zq6K|4jAs_x#bR)?BB*x!xvoWS0IwUdazF&=qz@6m>tmx?*}B9YwP*YMKG9*yG6)1L zonew1_ea_m!jKuQ<=Xc~?d9jXb^JbW%OT_>$DS{RSgx;NcNs8D8^Ii~?~osd3*3=I ztlns`^BK?9Y{~S3o-;Mi0M9PhPf@F#7sTj+S<2V&qsF}bi+Z?E6KeCxK4d&gu#2vJ z*sn#8|KtovORYtXy}lpYQmIx`A|uo*vOj^Qa{((tbSn|lnF9QS%80D(ZtU9LX@l*9 zFSNcsfKmIW-Z86&vwKd3sOIyuQL%a0XvQkEcZ#(t^nHWFX;{*3LUtJiu1^h`Ee$Tc zVE?hbY{Ra`p0a*W z0)`F{+g>-hy_~ue?+_gw3)9u|Ae0)6w4Vf&pG_{UF0=nkMlnKa*YvTXGY^ zesN~LsfzmyStgu`+wO~9M6?oG2IlPuVY^@gRJVT^ytnk(=)-zDiyjDzOWG`gqrr&S> z!vQA9BK(6bP)i|*Rwa>*0Fm*`X6l)~3!=n=k1q4`UI91Vw&kc02YaSmtYl2w`qEPwSosodlx4VH`#-?*qB7R%k%dC5fE;CHNmmdT-Uo_W~K8*J}pL zsGiMcKB;%@7Q-0L|C`gTzM~q~fYgFYwG+*K+ix$PUN$yvuj(DQ>K5Gf8eYeqpnzGT zE3r(h+`9V;BKs3YtCHp4M_@D;GkO*SB543ktN1y zthrQn=P#aTr?Jgc{+MnGAiLZKB2Q0N=gwPyTx|IwX%I7d{%N>bmP6jtD#2rKB|u4d zyq{gn+!R1)aJ^uUTktt=QwG67Ec@pVkN&}9KImAK2<~DF@vjiN0cdmMj|B2Z;}Y3! zJF5)-xCOvf9hU#0kC+xlbO*X=|9@q(vfA2@&QZ0KpzY?v#BRsog{(~&_lKl|{bkdS z7T`PPsMi6WfG@us_gPEcnZ(3?Kys@pf_+J3B)#d$jQVNQ^mb**{ogKNMh@powWd>C z)IYE=?%$OiHvf5R7MiB@$pPtek>_2i{@jfVKYnP2E)L37WS)2v$8G@US-L5J7*p7E z;ooPoiwph(ZKJUGp>0*EjQ{{+?r{a8^~_Cy{=A7Rs|sC{BwE>3ZEATIhVVz6R&P< z85%O`zCKK{d~9>Xu*$yu3AlMCTPr1o#QwlE+`DoR>+uKMU6T7`4J23*=KA46jFq>0 z_D3};oa>!42eA#$-$|dgB z-cXZUedYZ-ILx4T8;OW{pcBdqcrs_^{6Ycbgp?k2;cW}I%^6-eZR(V#qd-x6oB*TM(7z-PYfEnIFEGJ_Vrxg~kQ->p$zSw9(ms1| zbc>wdFXQ;B(CmjxnEJH+=oNFhWawY84D%0|Q~g&+LpJiz)9D@WeZneoJ06A9*9M^? zp#?hTNvm`1!Jk9dNabp>BrvNk7v@iM&;IVvhk(5;ph?5>S{^sGG63Bo;Qv;&;eTy=LJyHLLoulvnhih?3q=W`|1FO5sT+XxwpyVu0&l;MSm{eQc zA-K-^l;3+CdMLi?ql0MO*y;3}sh?R;K;p6%Y;Z8`j8P#T{~D=cz(g4h{f~r0&Q86-sKREk>^!c?Hq_Kob?;8KEvA&jWDrvc`FVKHyS1Olou9`- zD~(+H4YpI z{-)liRCmm#lqT6Ne#ho*K`VhoisC=%OoW=h;B)yq*j6S)%e(q3`MU$w`b!|hU~Tb! zP{YAGAOv0!{s%3lk+J!BpIln9Coz#e@C~hF^NwYIj#w$1wuUr@U6BPSjwVK9|37G= z{M)5z{dFF&J8(E9dry%JbfmP;`i9$7`nue7EDVTGj!6N>HoM*#vs&NB|4=y6KCc~S zpI#AZzkIyj6Z;RMZO2Rl4}E>UdiX3N%cZ+GW79k=q+7A!f0AjM%zt1}PY1Ze=2=5c zoO8?e2lV9T7PJZ3S|j5L{u3pV&;toKcM59D^6>#SxE6PQWcKMvnK%12p#7HqSB+PK zeD>E@wtG5b1}{qJ>5{f!3-U0Ks;cIK1Q%Bym!(6+hV z={!RG|8g??{_69Q&q}#&&mw`y^xx~|CDFEOk*H7XK)G#fht;7gYq>RP@R?`sta8)Q zZ)P#b5S=j7i>Pd|Xxw;q$oSOmDnaCL1_g3~iLNuLgl}zW7mtvnhSFi)izdS%Iha#_ z83OVQg261aV^-2_!WtvkpJiP-ws^3;N>)}XIlCNK%HsGdh^@-!VpE$rwAOgiB?+sj zTfh#k&PToT|C{tJmY^jw4=o?;Unu5IT-LQapDA7%nq2+!T2`ASHB@vBA=hy3O+UOM z13LM(wXlmV8-An)3n-t?mu=%5le@GeoFeKwir0|-;Qiy%SPxLRFEQG0nS|CmOrCJ) z3;qQg2)U((TjgV1su05nQFiSgA1_=8)e+14g!*+sejyO8H&n!EyDb#9R`90{ABn-( zMmdDESwuu&ARjdifdI|H4=oOHfydw=U!;YX2fJMua7+eiaG|En>1hTg^^g@%3scrYfHrNqxFVd=Gm?5r#w&m`ELkrgyo%zn3w z?k!CxP2$6Ow+B~COQ>ELjtzns7!Zr3fnu3i(ut&zoU}O&R>^t8*=pc8cmF9M1tm2M zld1A#eVE(|x>rcUe~E12cZWLdNT2P6ZLqCC^dKJ`Mph?RCZa;S*)=t?Y%&&``qB!U zEM4xpz?$_er!oTEbG@HQzG8T;vru-gU(5K85&BgU^d=yN2NruuI|^ZvVjpu5;$>RP-`4B%(W~JrE13)rV@549*wc4lDL- z9?=TB$=S`)$#jhBgIRWXY5tdkZR4^7F@JMwFpZe1SQ%T$KP0cR^dah)57Cuc291i(Tj zdDdyH0klt8dve^=oCWf46?v!r*u=@Sd;Hanc>3iP2~}0-Z2d#L5sQzn`U6Jm zST$FXNiia4U9u&W8?CF!5ers6b!4<{>@kDVPBayFU^>MnE{HqKYYkBcr`VcTeZM=` z7PK8}9}5h6^c9t4ZSHkA{M81hm}30dMnT&{25Gf1p?> zPs4v8{xo?+unb*VL$WfQj7A6FL6H!*i~d|HSjKrg3G5h(wc0BBHa)&ZSAX!hQSzZ( z=`F+6nyg=m)%Wjmnxa-cS3BAeQ8Cf#|A9Kc_xSkEvHxrl_DbLW((kNV*88sar@KRq zYi3wt0L8;}k{|`ZG)>7zKpA@{9~3a&bZ@WO2ThhFsqK_7QAI7;4INynkVq(U>E{#L zW1aET4dkyt-W1MI;o;|Ly>*RZIZ&3v&NC#Ok@LK)D1&SSb)r&I$FR zMA9b__w=cPk%}nx#_=&E%Fd?MPFQViTHTnw#^Ip}j~i=}OAXeRTIEeweoeKsexOcA zRP5ZtdqpF=^B-u2*o|-M#rV_+bUP-=*?U}wts%AwCW%&`fDX?CxnMItH;}LB{B058-zDNKchRgnE#@Dx0Yydo_=@+Q>C}tKb|RHX6Bf=L$_*MM zS(Sfm$!svRhYV3P(k;fpyl-4plPQ#qjC;sXac?kb#493fq%S_4h2Mn5S0jFcu=~X< z<^yT&bGPIVFYl;fa(<>I7%`|D)_l`R#=c!G5>}{zBz>^?5NtyQsD!jXMW)&y2PX@n z{KOL3BuZ|EgtWO}L#aqx;xIQv8V%ZB?ycQ!6`X$QQWttHW^Md7eO;nF`)-&zAtaMR z%3NlsSg>n5Jj`7ayReQcIiC{etE?#rv%u`x3NYe^btXIezPk2lqz5Lwa~u`tb95h^ zlcCWIAo@-MM8HhcsT1+N^h<>890#?*S@JG*g*~Xcy?}5gbTAfB@g#cR@c2vbU-*rVLu!Xa&#w!t!RXYlBq?K6f^Ah5~L zg0J(?T8{^NkR8CDlNvV+8=x)L-=k_qw8A`#t`Gq<@8b@1Kon-FM;y^S-Lw!!)qFn2 zWP^(pm2t>i2$b`-Zy4nWKcL2AXU4#o$^mZd3N(dVw&)10b$b5*284-;bZ2!Ev48A=>bPqz-Nzq4NV5zW{OdF#RE)!HiYN&ZX7o? zpiwEZWN8iV_?6wW0L%dh?N!aU>wd0qa#pNk#Hb(#a(c(NsePl%Zui{*e&EunyP(m`tcukv4pp!)?6dxi z9TIjq=5&s!;l!Ak{GNujvM2aJbOUB>+L-Hd-B%SaMK6ZxiG5}-JNzzndzWzQ=k=F) zTn#&W05oMWj1h)sqp-)tht5{vgUZ(UO1qiCl^j&L`6;>mZhK|Q`2PO+_*mi9m_;5C zG+wTy>U?3>CII1%vV;Y2xI;U!#dsWtt|=_bHwd>()vBf|mqkD3Oa)(Pj9tOux6NzY zC0&Ce>rR{#8ti5&E#wzVG;(8siyyWS$=N{i6jcH$n@?fGC|iqiIFuNH8tunUVF?%LfDAqrPq@uW0{mcd%;%s>ny^xE zc)$3S#Dgs*6DpXloS$7OQGP5N-2D^`pdfK@N-9nquubYeh2Y+j|JtfltL&TDa@%=( zuZh;6C9Ue$665#p9W}bSYy+om&!tP)eu9E-#27c{}_{$c7z+Z|5BcpeQxD=udLzN`qKo*W(9+J zKevx`y4IKL@hoSCG-2u&s@G~gnbk#nRm(*$KWrs;>2-46(-(`j^1OFH86FXBrnOqfx^Qh zeGg>AyB=Y;?dw})YI|GM1b5leKCh%yG>WyZz#6K4tm5-IIF#utl&%>k=0+%YXpHUj zs|V@ivfTVGoeQLTFLPsRqHr40R?noMH4cB43V zcOKAlhPvN8YUvA$^j+<`67j?QedXf~htKwfYfn#EryK=-WoAF8;ilK`zfp4*T^`vZ z<=x=@`_Y>RxeA_F%lD(-=kZWDX6;FRo;akG#}mn&MGELXFx;cj5Do_KT*FPt&V4;R z+TQ%AUClt-sBM$?^*0l>^vGN4`(9^(ZQtHit5Mh~^rD37y5T4c= z=#Sh9DX@uzGRu)xmUwS3WZ7AtnRr*7FH4w3nZE&(h4V30tggjpp}C?5SU+`u=eIK# zwrMbAStXOp0%z?FBYNWYlN{x>aSA!U+|4i+XU7<8lG>h6Yc4dopL~)?TN8 zoRLFFseJ@%`{|taRfNAQ+!962~dNu3h6bUWf=%YxAawd^i8IDp(q7=FP8tQ)6% zJm?G-3f#i|vZbN@nUBxKy-X9%R=x+kCT*1Icx(~yCi@BNosDR!*-1}fdtEYLU!mHZ zuZ>38F|AV%W=<)}9K@y?-xPJA9CRhPsgw|33~q7guL%t3aZq!fxA!c7l9}2d$??CI!G1Tm4qM^rV|?3UhP_(!h2)yc?IL@_sqZu7FCJPLAG zuF=28g3*ZUecoQbzsXx_QLgt5HI>2<@$$;#g6}E52iwTYy>2r~*!JGPes0Y46}@O1 zAFly7(R5wV-Js<)qI-e09&v={smM1gmt0H#z1b9gi*xvmUTuykd@aNxGpdubYTYTxNu(pSGW5I7wRx&_gC z%$6tGl`l2T+U#Z(bK&b>9b#WeYy(Yp$o&}s5Xvm2Asz;(sq zN?EO6?i1KtU?Eb~1I6ui(WIVg-~8!bU6Wq6NGWrFQQuIy*@!6ra_KGgbs@u3y6@yN zk?Mfktn8G5G=n*CE~YUN)7_EXGw2f9T`d$Ho*!a8GU~$eoPJcT$>tr;v$D;hHpfVf zWP0&x$>p0n9a;t~?GI=>&Oc~J=D?SE9mVZGJ`46SoL0S8?SEC4lIvH8VQIbf=G|%< zj2_BG@vY&A8Mh}DNPku4a5L$w_MG<-JDsn-ebwemj@z5o)Gh5EUW~mqMr7|M24d9j z+FI{$T!#kOo#lP)ivN`2%^7(D#1;?Q{a{(`vu+o<@$|lJ;lL=DKC;E2_q0sNqpHJ`IEm`1-Qy#zR zZSv{1pQQX#6BRM}@%aT2druar(}W+51`BvZ_`bg5y^DE;lAk>6f&$bZ*KxTTnFa-A z4TX*)g#`P_0vsvvgYHHtC6+^xkjjSgZ|Iqp?4Tp2SH@>D)-S%iWQu$Tk1%~S)yGnP z)4!pxzT1_tDE-}6PiiJr4Nm_k+w(gcgZtG2eDAQ2<{^=jo{Zg%w}}-Daqw)@gwQ+N zk+z9aPo%LN+2N?es#8Kr0b~OTZ~~L6RK5QnRc{&A#==Ey2Zxptv^c@N#fk+9?(Vcj zin~)hSSjwbIKkbaxD_7@<14Q=m@eLLA#u#V-x9|<*c zzA<0OQx?5{4S$31o3g)v6<^V6n=4REd%-5WsXpi#Lh)tOH+`~T=gCu9Jyc=gE18*i zR|PP+B4=_em`Qm84bJX;MjeGlP^|w2d?V&YLf}0V$vVIHgZton(tL>i0xE$yw_FlG zbk-cZ!1t}<>V2Q1NQxY7X+L{8XA&WFUAlXor)5YBnfm@`_4d9p^))iMgEYr8Wco6} zS9iDLktd+c_7$@nHS+HGG`Qv4x29Do+;VgBES(SMK1~?QV_jZ2%-#cX*|xN~XMD;q z4lz^A2m#$xJyh-a{{>isO1Qr+@6HIcL2^qNd49eVY&qNQ+i~5FYO@vl(Sii+Zr5_W zGT457wKcu>r6C zmwrUQegbm9)ddz)XD~3rvy}`^LZ0Y#OpH&TC<3KEqk)Z!&t5H7bPGY@TLuXHY@wkx zyuE%FR%(x)&$#;lxB)z^623&CWCGzj=w17j(@(fDcVQP|)STB=)olv*SYNZwHY+;s z>ZARuM9i*7=Kma&=)Y6}MEYLw%G~_F!#c&~lQ~dSupjP@DV%MTTiVTUT(}#nI9~d+ zTyM|9qBNSGj4z_TKCnZFg=5AfNYcr3-95)gj(vUe?D!Ss$@9$#*;9u7y9-F;UqH(c{PJ;w+$Q@f_a$6Px!<>R z`Stncq%`I>Mdy2XM(u5{9;t{Vi_g#Qj0#79YJj<%kpEO0r?a6GwsFX+DeDAY+F=xY zU`?Gk*2eif2d{Zj0vijoJ@dijF8y)+t`T_ufXu!kh_sDG|NrC`MOFz<@L?aBGSIUo zYBQZT^d9c9lP*X*Q}MxslwrYz7OJQD<^Oakfe@JUoDftMSSfymGkWshYF?X_pA2nw z((mDNPo261Y&|(rev;89O>w8f=;s0e!7tuK(dXbPxGBEo6bApD3!YD??n>M5%e?fc zxnb(8AR|M=GQRYAS=E;QzmMBpfB6lCEsesRr2hn4s%0GeJ*y_8m4C@Z+ZU>_I`1J7SXNBM{SghZfhg8y6NYY$;@WL~@WQDoRl6R`CL>%#`_u5Wh>{?ib! z;RCYylBrD<-hN*VnebBCbA7MiYQ^GGQZMHRKg$AxD!Joew_agLX8C`7SL6SHphy2N zbazX;Du>8|4BAuw>l8wCcSX_EHYWB&<}S9O=BA#p~$UZuQzbWBU{h4j5_HnTnfi+i>kWD`J}r!S?Lfh=8HPy zMczu!q3MldnObrr4&Gu4j200-;F=5K{Wa|28sQYpMOZjza%gPxVm|@H(n~>Ub`gu^ z!>{tTXz`i%8fHIQgTCA^aoM`)GX4ya5$|W9-roQHd&0N{->_dEshY*3~na5d} zJi$(&@k6=D_jR|#K&W)%CSpEy5W^YcuNTa7zrTQe;ZD~fUE+bv680u`r)yc;?OJAZ z=EygjfaFrK=1?#6Qd*OQ%fZ|1MdF`r?r==~fG%HTa zvP#!YRUZ7DyH7n~txVWIqUw=zr|{-nWueuhZQf?XOFbifF)Mx%H2IvbsW2%sS#k%v zA_8P7v>cqfh;FR=ghV@Y0&SZ4HcToM=J;b5H>KoWXsmZr`guO8=Z=;TC#&Wbd=3mX@S>5d*Z*hORq#Cdf# zurI=bqY>nyBo_V!%`ZFhJ0F&+hSmZ30fbOXiv*l*Lib>3V-HfBt(>#b3gxX#q-@}q zWkS#HZvGnd^$kxZPgG}E?lk|=@=Hm%nJ##3+OJPVHL9Q(!1EFS2NYZ??&yF3v zH%;b8w2DOwjTUo)cBs~&5Y)5NyMoXt^yWEZwRwG(z3O5cgE-_ zi>F8GWV!^^sJe}iC{Os`s-EP3q?|U5GjyU3qhRiIj~fdSPbEU5M2hq!{m1bj19cZSD^?BSqiFD zsK8=n$R4NRC8XGCwRCa}8f)*<}N&KkdaI(`S(m5piyNkU)!LM1X&GJwfm9pgUpO1kWKuI6*1{4B;w!Z0g)Wxwx!wThY{ z<0A*$iwLDG$gl6vipQG0OrUcaKeuIO_Ih5~CJhy*gfp>f)6yE~{tDDJ9~u%YUA~eDKp!lTZ{#`#IT66Q~r3(y6z66n6NUeXxrFj~~mGTuQOp zo`$G#T(>xCp@}VQPGNpSF|AghyB(uFBF4{40Tsx4C8B}Ap`^dw4gh3oVrIU2mRrgU z3$14_HH}C$uGcvZ?nOcCVFaLlqG+I;&$`~`-n^&h-t%G7u4@Ymj#ERJPTx8zU6!o| z=6->(SLOHSx`P0F>`wE8HF)Qtf{t&)Fp#@H?X#c=i}_@$SC1ZCkxCU-hg~R>323G> zZ>1ffEL8DQZxc+$DCKJgnpU!AkJ5doofuK~eZNje_z{AThR78iDb^`ex}1AH@Wn0U z=7rV{i4X6tvV`k~q`l`+F!Bf|9=7n?vr!xlgP@rLAa^s~N;fgno9(mGK~zxC1Iht? zxL0`e;%*Yi;9bP9fNTjygl|0uv<$A2606th)ddQ?1+;4*vyq-q_T$i4< z#YPBfP87Ji-%+E8l0)bN3@?T60Hi|6iMC*!aEk6 z#*6ti)zVFUWQg6kY_)Wktva-vQehZ;i)ckC2mQf+0o-_Na5%fF^k2YWQ~|qy zTmFoeyQ|l^QFR!f0l?|3IV5lzPA2KxRYc$z*vkZ<-69E2Kn6q6uXx+H_kVT_*vb95 zyVtS>8v4am%IaJH)OHxnKBX_rDCRJETge%%YDw~-Z~7y}(PWb(5W&bS-{h{i&=HrI z1$KI^A`XuU35yGYFYkXF#I+rdlr-7E{N%TOnvW^d-5eVK zl6}V#p`4vxOz?vM@01;lx6YMJW9+MRJcq^foR&D#NM!YOS1@fT92Sew_iXcjI`%*)fpn(ah>tn3k#>^vZ#!48w+vza%EjCu<$Ho7*k*C^HQrZdRg%Qb4sB3~zt zjt>YZxyy)wPjOWNVg}KLq?-*df>U3A#<|*gP|M=6i!yXE$@@|vFQZM`c9h;tHbT=@oUnBe;kk2%k4XMQgP#yAVHHWvn`A~K(3B>|j2Z7=kd~xb_}pnqI)}{Kn;>uy z=*UNjh!OH`i8D{W8;GCnge~VPqtQexqR@kbK=GZ?tW5Ct7AuU(?OmMv$uu`^;fqmG z*(RO?3-=eT2$(7pzo<-rTEwqEUs6*Q5{fAU#-5qN43Q0Aeb6>%arSz39d2xulU-d? zqFT#a(!wD!P?hYAL>qw_UO~wWmue8)g}I^ za(w-g>%1A6vxHrT!Gb^k;LLahle22&+yQ#&+iQQ6N_02GL95cZ%}JmS$8V`n z2(^sV33ZnJYXEZxaQpr|=G^r`1yT z+s}wu;LYbNQh#~lV}ddi9n15dp*516UKpJBwJMyV)F6k+;J#kMi>gc>;eHb-EH_Sh z=f0izpu&^DrMh=$ze)snO4lVd{k&5>`W=`Q{&Z=5Z35aLMwWLB@iv9 z812L#sYqN7cZiq09tnFWUqYn!tXu6Y;fk$OBk*Aj{Owuh`I0Of76YGibn8yBM!u+r zr}=&yebfKsYJ%~paCtz}O2!CMvCJ1(m;IpYTQbU11Z%@@CU`r*pS;>RfNLEQ(N=Z%N+xXEit& zjl02&$shAVZcrKM@~Bw#>y^jP9yk3$E_)&RfFfU{cK7Bf8X9A5gacz0wM2pw~z_?#m3n`jgye#Dc z<+Q(e!;X9+s%J$~-LO&ukj-8&-CyzKti zBq&E@qNS#bA$fLo1S({K_=RsqPcWy%`#E{o_eL}1Qdy;^zF5@2h?I`vp#Gq#c90H< z(TyExv%b8^poLyjlg5t}Uc8ua;DY7Ug!U>_^F3df3Sy{d2!OC(#2X%H8am%`=I_uG zuzh3m(?$d-#@d2qohns3MF7~%NV`w~@m>PyeE4n7YGdjs|$`ADvtrq|?fbEPW z9-DA~qqrMKYm;_@!%Re&Q;@aBITDIV5sOp(y*thx=H0TxU zcZf^NIBJMiB0QWYa}OL-=4o5MDa^(fHt5)&yoE-DP@A4SN{{W_x31E=Fr2@zjm1hl zTRUJ@H=@!aplet9(We=LqrD(~M}v%}(t zd&J5dG<*yp4+;GIo=~CiMr!nsXi=b{D`;}qi7$wvRYI`MU=U>INC}9BbrY|suwPvu z+&+4m+En{5-#CoHmWP<@bkQjJERRO9+Lk>$?i1RHf`>tN60wl@`Ez(E*Y~}Ttnk@2 z9Imo;`v_%ArS3O~0i)F~Al!RiKY8e~&XGY!)9$_SiRn%+H(^*L56?q|LD+X~hWoo0 z_ud9l(l~7P>x5&QkKUKDIKaehxJ@&j20hlNbsXM%_3W$EsLi?y;ft;bW^DgTnTdKel!gKV?PYE1Ij4vOY;jz=-i7nkPf($i0yz67xO2FJy z@OW%kyT$w>8fO=&j<}Km(Ci@1?gIxR0`^Ct zj^qHa)1-O@>;2a<0tHU?>6PsipdzX3euMu1GezYYqD~N z?>9h^r@w%B_$Hgeg#xo}?c%-(ssz*b&Fftz;RufHf&o)cA8JN?Q*Ye$Dg@2;dzHt> zgvl4uUuE@Gz*D*o!pd&l6sM!YW8qZM1{ZLEFx$k@laKIddt4(0kwB|J(1Y-5!5k!! zY7A9KMBv*4#O?Bh&AY*Fm3Ihi4AUEth6r=)YpL9Qq9H0yaOht>Y%YKbksNSkXYQ86 z3f!7tZ~}(lb2~#X|G4Lwmq3OAZ~Zo4f0iY7O+>oFp%oz13Q-=r-r`>mta#9djT}F; z!onH4zK#mk{B{NrRXet7G9BKDPq)5617`!p#`NK$4s|b@n|%XizTaR=DX!AUhAV(GSxt#pr=+?G8BCx%nF=RIgB!PM~D zboSxa#tCHk+j`kiyU}*JtJbF180C|{Ih|GG(lPEK>-nD`8NUND$-}_#Mt)sFX$}=p z-s)<*IGex%+NZ^J>60iPbydST52KQ1E-1<3VHZPoeLwHVy+UIL7tLuKs*X$9R!OBZ z5@M}OnlHzNb#>Re3IoIO>UCPdQnY+AwcppbznS{^{|vU0BKPA+=^GTbgaZ)j)JKjF z<4&kZ1vRJL3`FkEKfEerG{DRY_G1a^FgKOIrWsLa_>titioYaV7=lCn+1LCp!1z|6 zS=JQWAQ~LGsA!ma$&t4DiRfg%$qaLkAGKmqZoC;S`aP~=IEE~Z-fZQ~At}~9fe-$4 zRZxc;?or%hT%=D)%FJznWs~D4ZBu_AQ@oxACQccvk5)PB#odp>L-^}lM~AP)(LAQj z2>yVVi??-i16xB$)(XU(`aKoiNFlzjQ1=TdnK7gp4+|)tHPR95=#=DAD6EMJ4ULqn z^>#)Li7DbS8)D98dz3Wy{()gJdUJb5rw6n&c7RH+|s$t;p(#8PTJ|7t@FznBk9?@)OSE>7#D zCz+rlg631~_hqMh4;nx^a1JLc_Gjr5-)SjGXJJx6PtpNMTcEy}w|NUdWbfbtg9vcy zt#jxMlAqrdfFeWByCt|H3CqJsb7-nl9L*p?M0^fJ2phOIx5RY5dZI{&BMyYXK17l| zog#(@0BUj(!N3ZGzR9coxX1jRQx`^{lK&Bq&9b#suysX$)l6Y?1^eVa7-nDypHCj0 zP|S+a(Qg%}B!t=6ETVh)B&k}g5bbBZ!1qv~!K^pDXkjF-t6N0I&VL65WQb;9UsF)O zHE=#DDX{F7f4F-LWaENA2u8;%ftx1Mvp= zde3sPfIa>>X1rPS0%LEwiO5&ua;U*! zwyiK!L_(k!=K>gkRM5P=e=;W2iKy>CE}j|Ut>+y$^fV`#&&&O?t@MjhHar@c=dk$j z;zw6)ZTX4Qh8D^|m@+nzCQpPq0e!Y${M+;MTXa%ly(TAdS-4G!*0n};RMt^GR#2?H zVditpRNb<=EoGwsJ}ax7g%=)A*bjnjtG6N7`ZIRyxf)wClLVn2Ivb_-(gJaOOn=yp z&@*q5SE;@UKD7o2ujVj9?>2WLw{F^gOn>&D;eJ;p`jgG0`%PJJZlJUXId1&7c)PEY z+>Ld=>96mpQXxN2G^;#3AsT4MS(YJGNhG_ zQxt_NAhBwZfWzV`EW3N%fnS>NY4Lke4s8Y^i@SUNvGikF8Lao_Msc~br&OR_Mmqb& zX`mE_=tLU+u`j_lb34P;7FQ=n2G~aLY zO&QZvstuwn)3t$k_`0Q9N#>9{~Ife)G-+uwi z9KTkua&v1|>5CV9qQ98v)2Q=WI@gN-tZf_96$o`vsYG1VQy(D>M0UAQArw}h*SVQF zw!kci^RO!X^u3OWLLue@&Z9)sz#9t^i47gp2#&2E4{u1g3eJ(AzUZp&`% zXG%Vy|2u9CEP;6S;h7=Qs+Q$h#FL9REyi7+nJGkj5%?(Y`H{)6-J_27iVFL#FHV5U zJh^5r3oJU9P&B_FanpPc&gYW*L*8K6 zw>}2VxkT@SkqPvsGu0P&z5IckbsdeiYoi?@!Ifm+4+hE`Z)UgI?_VHh&e!g~3tfA_ z8XQvL9L|A#fT@q(_{G_SUid zsQn#8kORK?2cs|WKTqX?7vAkt7x-Nsy?9(+4m|ui3JG7%oHel6Dle+* zDBl!_9(npw9x;1#d8uZfjd!*GeBym2_87d+HXmP5()BU}67fmy8<*aCsK);lyze6D z-0wK%DCpY1KA``{*2WWxADueZ7<_nBBrx7}L;n{r^2k*J53EDZ0w0&sBYtP?AZ=gn zYG>lz7^wJqrO*|Vds@TQ_;F=c>s>wa_cJxho#}2K(IXG{KE;Y$6hVjMzL%apLR`UF z(MQrR=q3lOuc#(lgoKq~=E^1DR((h{C|7v6A}*`R3v%>uCDhfPvbWFEm;%L*BH1lp zJGp$aqSx@h`)fhz4xG5`r2&Jhim79B@$wKSy6& zKeZeD)KaA68*LFD1?i%t958;3!;5Ia%bX>T za*!83iB7@^os$>Pbg06?72NIo7qID6=K#b>L%1%Fio5v$_h&ng3Y+IBPgn5!PDH}< z@y|PsXJ{+-xiB*YDI0(g03Q98O})BtgAX~|`;*KEAD7;s0c%ml)s|&@^<^iMW_P?e zc1i9p*FD+2g5gp=2pPsUnX&pGB-$>8xO%!^ zq%c1lVFzg27w#as|JRD{*(;vu3Q&g6ZqJQf6EEsM#ENR{s2?U1(@?zRoxb!cNdY#8 zzdNj-M}-gn>p-FS7gw2Sf(gQYfm{Nf#nV~<&oR#k34Z{N86J-W!@QWAgEX|p;Af=$ z&E3LzYvXWmx!-0;!$DlP8hkkUiXs+%|xI7?pVsf|3FX?sK5~L zQ+wn2mi>Q#tL`l}W%ItHC-J+NmOvJ1r8ocfs46(yJMzPWOr?+b{0feD;j>$Z@Ss9^ z0|0JX@}B=6SyVCsA)U{dqKBdGuJ50+;6wv=ujSSEFoT+Mr?K?$!3@S&}Hpd}ixrBYp@H7;2B=77*DxLc$8r>=Uv zUeF5Q^cSZPXeIdR#WxVj=gwB=C9Szfm*Wm^_h3%$#ovzf=eBwYM7&7|CDW7nCpCd~daWJ+XF`$jNt!4SUhpU>?8nFLV>3X<(4urJ}$8=2ryk8ta4o{8PJ;WOm`-5FuUWV(^ z*yNdsZ&oSvPj+0~FWdySMZ58B=cQJsG}NME0Xpm zh{hZBL~O1}3{a{Qp-^h{oumQRWey*X60EAkI2}8!ty33u83za!2YMG)n9sGpz<0 zeefrQi7ky>)IzS%;|a(>+IszU5;$DJ^i)et zj9!>~TZ$h>9d7eeM4!q%&SN+xUh9xmQ4dsDq`tJX=VpOO}Rw-%x%ka9A+q0+Ml_v^^L*$;6 zT&7IoZE>23Z&r@HnBuDojQ5T4X1aA^gO-|-n)sTVjdm9mAYu3HQ-T+qs5Dp%*i9BEtV@Y)(jy@zL1FuuJ8)(v3-hm<$4O}`TogW)8mWxwdJEdDau+LlWXv#^y$e5l+!%j9>n1nYsY?v72+ zU~ir7#SzgUxkd*4QI(ZUtJ=GXSk`ZzCriy%*SzJQ8?@}k{HM^06zJ}e3Y0TNoRtk% zGgtp911{*(EsH{SPoQ~#5no$o|?9A^>jfGGB{a{Ij5&2LG188iH zVC49A(9x)lhMTNSk#;zXT)-yIvcJKohTHU&*hBy5HwAi_P$s$f0=aXk4As#MTFv5Y zLCw`YCuZfX7uV$M%{#kapFn_u4=Qz(&hx$Gq)@x{=dvSy)(gF&6*AW;@jgydqLET> zX9-=7Xq$m})ItRRw>C7%Ss;p@Mg?PcTU{=Td1SoHJqg)Wywn!@tH7erW%iJSJp6uT z>RgQ%T7TSIl@qiWk9_()0Qu2(aE2D z0DkxK8Cphi>`eNztcw@Af5!?wiB5zm!3d{MZ?`j@(R5fmW@Yu(7n)rmWq3aH*&MbV zOD*X--9|hga14`NFpEpW1Bh=rySn z_JA$}g|E;=0N5%89Ft(<vd)&gR|Y7kj)UUGFFeL9w;dp?7VC$Kex8lGd_`2^_EWX^xd@As3 zvUijl{Ybske@Mz5n`4+7Qzq6UKdX;Z@?$Cg99&pyVKMKIhHB@skzN^$|0?-4zPewb zRZic#*GA)mz1oVE;ih@&XR(3`L>FO6*5yN2b#!)pMRuW2I&+R%k?9& z$m+~SbIM`F#)n$OPB`@(MBC{NS;PvsrV>0g8qK&{t&OHp;8K-L1rgAE%udF(ve*jA z?v-Vb;n%@z`t3T5sKUS*{9VoOiU3nBMw9AQQfU9WHnN6747RsX;kwul`>Rz7~e8D6lSQ1-FHkGv)Oq^*y+&M%Az>z+#csl`v)B z>7yI*htm99%OUZBm3}j09F+lLf(V3F%6xiCR}PI6B7sap1O#kGSKx2l7mUc`3+(Bx zbV0|Mae-c!Bbpid<~bnj6Rxt4+Y~p7y zMK(0QhAZSz4I0CWzXJeRZF)#IbnvMTQZq)Y7+GfV$uo;iY@WN0r+6yqt~b&}yUtxMkunAQ(xHKm z1#P=?PXb3S8b9Y3Wq*+h(I&o2El;Rb9b>Jkiu+iAhGmOCQO%RwfQZ_JTglLcHC1kW zmS18&<5~Zu#Bk!)YP-1AaN-ega^&(stzNu;daIP1ew3C}-nv;7Ki=u6!m5TNVzmKz zDm^Mm0W*2qXK0~jIK80fnZI-9k*c?C(=2gjT2Cz!&47Hw*5~_ZwSP+T%AX9HU1zOv z#mZRRDLgM?6%{;=sS0v)wggwV#PR`Eq<+ZcV{m%2Q?hzJ{O&U1$l_Xc zE-l8LXFb_Of@uwccJwNY#4{(E%p36BPdBn#>ysqDd_!pU*++P;SI%ZXTK|D{=cuHo zCjt1RcF^;I=xUdgrq+3LNR z@!S1bVsk_^f{0Om3we9mn^KC}l2{2Ey2f-Zb?aPY8_GW4~hw7tR@o3G(7t;->eBRC=!fOyCs5X9GGoY z<=f~avQ{ZEM7}*?=8~w39z+RFs})&Ub-5E=kA_`VpGZWNzwH~IQMI_eN#3N7FH-Nh z8^UD@?N1OivPvB{CQU0$2TyMxXr3fVUGC>z91V^(4RJ8!t( zEKe8J)FQ}wz zusF5*RlC7I|5XbGu^qe}*nvAfQDb1*mNlVd?(IzhMM+PL81om6$8HqTzGjKFvu6oG z!q=fFctrX1A9?l9BTH1x%MKbvj_2ymNyxNh_L+;npT#hr$N*9#IadQH_0PYdWfGx{ zaj!Cnkp(!OV)zx&e>uFvzz`_T83z+KRCN zg;TD(mcJdB4cwExm7~{VuAjbt>2)ywIpqC zjtt1qy{E*xR`}MX%ZrPQ#0x&A(QEPyutv~02?dqynb-hg&}qd83t?xyJu2)($m`p) z{cFObc?Sr~4-ePXgvt3e{UQ)x)btVdbyh3)fnYk=izEy0QN0>`PnmQv$JQQ8K-#zGW+D-h_+Z*hfMY zM#q=nx?E!Ba%~L2F>`UAyN|8zb}Z<`sr|*?}aJ3ER8=6gMo@>b$oeyI83Q+8ygN62PsF>;4-*-M(YP*gJ6pn zUR`705Rn6_-P60KCj)wES`qA9S711tdCEJKaKX2$KE$v%*}#Z9kkv62$?opZ3%;KC z3fFWEdM@FVqZ4UbRgeW*bEX$K`VWY06LU`i>_@r@7e$*h0wl1p0zlfZTIt<~c6zm` zxId2hXz%!;dD<+!NrzeMeZ>1w8R__9k^ltk!()*BFbFQxXN{w6J}(_oAq@*Y!)4;F z{^1DJ77Ss6bNZFqUXm2jCBWW3 zg3rsogg+${0t~*u(@+_{!dmidm=wXmseGGVNrF$?qH(I3zmZ*q9M6~9aM+(iT%Lts zpq-m1_x^y};EEX6dttV|*+n>vjPrFa@--Z4fAipSsuCV5*q2n2@|G54WdKJQ{?^Hb zbo+d{_i5xzN*4;cf4F{VdAiITaJhX7Jcq))Inr;69CxHeW8B@m?(TmXY#Dy0C+aRI z<0JE-@P=~a3nm+$?_YtYp4thgx2K?AFoOggg<3oIAcToqaDM#)EzV7Xa7F!vxk|q1 zP4NEZqq7(D5`SzL_$3++`iraYae+Nt-T`~b>K&9@%)iTQ<8ewm7NO(Yu5HMFAR1LS-E-$EcmH}D)agXz}B4U;q6BWiNDy@$%lgyqT!jXm4(?T zEJ})Ck}aoMSb<-kZk66P@$l(b{MeP}Suc!)nCv|F;t9_?W31*fcsk|#*M+a$VM@nK zTpOC1YAnveWv7u{2A+VdS;q9-w(_jO5A3fbBz~8WPRFLSF^40C)qWhvPZ&J0@2gMz z^-hUVWuzyPkO%#O&}L>@f6*e`6PCX};>h^w!&L&lT}4#qv#SJIeOahqd8VP<#i)U} z=Skst@6Q(fO^Ur8;paAd(4Jk??ZH`cG>Vgip*GlNdKr9a?+4UYKr8cb_F_*m$VLD43RF-K`!(t}M zclKTH#hfR-HSYF%iv?0Me%F?4HaS#H8EfUuES3hS6NYaG{&rZYSN5m*mJl1KOSjaZ zrxlA`N>_^Os0yzQ)_&>7>S^P+Q8}2|o7U|)I#KvYO`2ENNX&~B_LbQ6Cl!H*+U#)} z@t;~fn~4FWiFG1AVp7Bq-uQZ%p%z=R1cRb^rg`<8W|q67E*Z^uKb$ct4(0e=27hSK1m<^SN72zv`I;oA{`CE+L5SSs7ZM%o696KF z=g6;tsgQSUtxOf&GQX)-7}4*c8KRfwVm(xYbchL_3E~wh51zpKisp?mGV;U~2t%^; zMf6sG4BxHSM&T7Ul9#6o!k!RBZ*r&{$D_j7TPc4}KfvDHA?KJ8zS^1{%9k%ULZ_yr zV~dH_F9KX+W%%~Iz}_l_mZ}rU8N2;{MNKY&Ha0Z2AUxU%erlYmmQaz-Bpj>g1`(kt zvtN=?=T{ivF$;<0QKYXQU|b!J=YvAvWaFAKx`1CNOp}>c!0-mDV<3#>)kL>S`e@MI z)3-P0e!)uVp7+-SJ{H(iL86E*Sbh*c2Ov8<4LW%a^`?$RK)ijp2dcmc+wjn4#dPdI zElO9D6Qc2Ke>T7_6M%?%lUQNE{-o!*TUpBKXLn%)FkqvkdhSFzI-pouGYhAh5J!Ij zuH7R9E=~!v1D@_A8HGYP%`X{4poGuS{l2dYx*dTITd_>oq7-+2w3Mh6r@`<7fXB!6 zBe+(sELe83c-N1;rsm(AwL^E;Ekknzw79;!7o|QE%etp~SZG8XE063-bP-kmFbn-Sc0c(A;jtMQN zSMw${Dp-{XvL?e4-*HxI)Tz5LW3y1C<3}nYB2y<_tpMv@fX}^eJz<+T*j?t_k4vA!Q)DM)}xkvX4s^ zOg%!LNy}M;wcnbgm-7p1^QSl3Q|oIa z`}*+l$ov4;X0>b7R7w0GR%gw!w*OK~KeI^q#lk23|o;_W2v;E{KGcv0>XY%VGFW1^028-QBG!4st(i_;o z-QR&l->_Fn^R1({v`Mt$_UJAo%1~3x(P1qkPN52RM+S}Wu{NVeR<_9R3;b!c&PgIb ze-b84fE)6YJHVmIg57&g{BxmeD}9^ug$Mf z$9~}x4%xn0nbjF=_UX+47t19LEXOg4%R6CF^i^)hb>Gy<VT0*czRdSNxE0 zIY8^wLlvdP7x8O^bySI6^hr%Hj$M>8NGX~KQpr2AJ-hpCZ(!fdM}cD*sUPf*sE*t zHTc@_WC!62PMzG-IGR{9`10niuMjvg#Z@ugJ_s+K*p?yJaj4HLz48%))z_@rA>NBgX=Mqb($PuV$LuSgc{CqeBXYCa*3> z+eJWg(Qq)cksa|=OFCCMglqNs`p-$KbpfrJl(BLz@smM>*Hnnb8JkjQFl;PcoC4`s z`TWT@o}sIfBI}Ok+9zGO;;X~8I~=D?cr=3ALe5*$Z~Y()KccgT{I5;E<0vUKoT3Zv z>%Cn2{~gQaq5aJBR#@3QaqJT6%bF3<|C<_MP$)dSzDF}z;Nl5oJN1NSJO#h|GU`?p z;fWUC?LgwX!{?-Z)vT!+yWKYw*sJtfIp@1i@@6Qe4*H|o116l2s+)xFx+i*ZFZdF@ zJa9I#M$s8xF|_iO?)j|yigg&${Q`rZ6K~~aeK_4IK0d8Rq+y|35CXvzN~&kM_wzpAINv$r{g*K^nOSpX ztvRpzy04$=@66!AjGm&eP$w_mQUk@@yxdL!`X_L?dduIFd6)zs|9e63EwZoHXRq9n z{YfApyvT_ZhlBp7LLaq}h-7G50O5pOiEDVYl@&PPCd{1eQr-jP$2vbrsDH*4Z66Q}R7- zUp%V`()-;#?e&8|8b#yGNZE@n2JL=%#^io#Ef5VM?7KC1df|Bz>}IstSol26PMM$jw0Q*qmM~dt#HDjJ7A4OB5pkE>E(6^nKy{0@ilJw~R0Sqx+QRyoH|( z-TD>ZR1+`W*gI*rH*~C>$3JoI2LVssFNP2&faw^ytagFC|00z)gzU=oXtw_p%pr9O zFeA0H^cEEThZ7G-y2|FYMgRp)#~(C-CwZFnpf*MK+2zJP>-J6}tUEj6-r1Ns04eyl zU@gDzD9cg8jH*&iQN2g^ZH=;$HYqOvjsO+<^*T&GX)|{oQxCMNKk1CtQ1^7SDwe*h zU1i@Ml)5{%wWZp&ZFdXh+~{+!YX-XZ2}?;p(qtEWT`oTt?n$Q!fW3L_UhPWHvk(T5 zDmWqGH7jg6c__#tx~8ZZkE2J<}5e59O2Nm{fj{WonPZiNYI4ZG3oQuYmEm;a;8RoBxCrpv?Z^#_{)9UW(ROl@9I7wT1GPbLaT} zZYGgHnl21MW!U`->S!$hX-wIE*YEqR(v2{#D0BUN2~KE*+x#4x?Aae^o0YH9XD7oA zjl=ir^EEpUS+2*=U2qU6%8hxLARNv>fD;&l%z{)#uQ(@^7=;r<;OUx*X_- zCc8i2oPbH|<^!Pu_l3z#Mug=9PV;P7~aKzctaD;{LXkwQ9iV~6$o z>`-1Q`XXH3P*YSr91d(z2=Z*PTnaB^K2h@Fxq`|w@)SIKJv>9?Mb*vP|?|AAJDDm(IM7CZ)vCqU!$ zy6WasR528Cd-`*NLrr*>O*D^Q+wsO`a0;_+6r*qhY*Unq!rd|X z&e73W(iiJkv%D?2Y^MztCEoMaRSp&LzaepalX(z~KA8R-!lM$`#zcX?$6dIB{@eP^ zcjbD&yFCQWG@U?|ksOfm6aO~iiTMSPB*Dr34;2lSX^^T=j*X~Cpq!^2;g%v;H{5)v zHBuh$!la9(71jE%@ftAliv)+TY+c9AxtuTkPH5>J3g-M#rgOMmjk!&*?d+Aqt=$u5 z!VUI-GcC(85wY1xI0f50-o;N~lsiqsd$=4i=M=!50rPQ~*{@GPHuTXz_fXZUONFi9 zt2W(#F?DWBLQVM5Pz%fa?n}02BjQHWE`x~lW`3?q@ynX^w2rSilk2mK7awa1sLH{a zu3k05aTSfZ*jUJY{6PFX1fM?NRfq<20()X+fkLuR%cBo)+X9r4nD>2oKcw6jDn2tc}n!SetY7Q;a8Kd_t&d*9yA zxttTaC47uw%kK1R-@3YKF?7LV-@QLR-M;J8ot7p5>#@!h7e-n;X{b!;cgLaOA)y3{ zL2}kgjHSgLr~1|O0(TdTn>%}1@sp-um(0mlS1N6M0i@7HIJdsj!BE?o68M>yC8;*8 z-~{fyEx$kqt3@UmZcU(N4Dhm*TA_{0Bj;3IIyMe_TBz!%c;8u`c)_JvQ=RffMf#BS z3q%Js3Q@&bAhm?J^rFd7cZ}t6msWeKanx}jDFS%jAc+nWUze!>tQ>QcC$X5w4+>L< z2eSEcl9}%z=+>H*Oo!X{6=_NLlw0C_G4bK50ft&z0@J&pH`VO~UN_B0iJpdP$;tHXv1%?5Cx|&b7Y}n!`!}@oYf7a}qSXsGkE;2zYi)K&wy5*n zEbvpT=x)1EzSm7fC=StTyY6?ac+MW3+~Isj06S$drP_xxk8V~GVyazyn`4!q0BZ`OX#T;5%d2#q zFmh>>9J|L77*%x$@o>)uQu8m+xbj-6@q1iIm$s+(3rn*3!DS_Q70#0M;bk?I?glKJ zg6b5ap1D9WD`;dSz0Bza$jJPwku;TI*m`^}0V4%T(DIwACRYwS&{`bXzU_A-I;+J= z2@59gQ9{&_*haZi{^AwJ=Z}_K_D}BY`A7b71c*;q9_1KwFC8_FxA>Y#GyODjE&hv4#1?y3Fn z&X5By43)XwUD!5GJ`kwc8|7UY;*@&$^Zppd&+kDQs@%pk&(sQiJ!&@JZKQOkq zu{LIGyU+9Vy@@*CYffe7wII@^hx9& z`{BD&0!-7-ci+CQsjA*xn1;D}QS;gf!yB#JkaRRZ7Oj6CZD%ucdu;I093-nQq09~b zgSG9cF}iq)w*G-S0Ww72VTf-QKjvq%hDh#b#hjE9-8-tH3SYswZ3GzrP28Kq~PiE(h-P0XmCva|^Q4 z@g`FP?x$^Uqes?4NXM=&Fn)|>BgB3fSfaL0roVI#l=R+ z%^HUDIt+6D-r>An5+7wEbA?-BB%9JRnl-1P`&DNlA;?r35Kw#n$ozgnx_AMc5_#PQ@3FTL26HL=OE zo8TWS7FQgaYBTYU)HKiZJa<$;M5gugZr(|QUQ|z-o%(|(aYaO^75QCzg89@aKr8a_ z?P$?gpMv2zu;=%9beueps zj!i$Gnxqv6@pz%!<%E$n@EZdBan~{#cY^^B*^6o2I3kAW5RdC#dXth-6~Z)uu`Hr2 zV&_HXUMf6*RLkqO>a^MDaT8hy(sOj_aAaa`I_8EKG~BjrW)4q1bU$Yj{cswj&t?>W z#{uZv#|oIMwdYzFtvK*#LYgkPSbo-P=}l^*Z_3g2HBew&r)h=IVh2cBEu8zx#$;=&r^=B%i}OE0%GmN zf;{VhyXUGA6@Zbb&^knwU!q(3tY7Z_y8yMmnHJ=TA{UWwqSHd(PMK*RT{SkjVx{+h- zB2{?8dC49Ua^Ee)bua!FdZ1t6b@5h3_{E~I(qno%zx>#FW5w#04%dc5t6WkbTGhVm zb2qN@*SFY__;QzPpXug_g#NdkFB{ehkJP`}bc$7f>Z-ln?a4Ch9ruZ>W7)RyMjmJ@Jq3%XUjG3eB?t`~My-xHjLviM~&!<9xvS2(u3fXU z{m}b;*(Zwy`%~MlA2u~`4bo2zEQwa9IaRc7OW0tuA=z(s-_(mcNtaw!;=L4Ic^d4G zjP^H+s|Yc7+j@Qbbq(vDUQInc;Oq6iYV56_EA`k`=e5_*n5_+b_9_hd=g*`o(J3D# zN7No{fcp+km8+mf6zS=>mg*O!w26NpmLc5aYqj*b6WO{Z{ z6-RrUgoZHobaSD0z4#IrOC8Gv`VkTgo#TO&zc2PSc-MOq+Y_9Lg-UGsrNfSp|(=**(iy1r33yiw%|545m?cCqkl@@-u1Z` zGsiy05#a(zZmg~hOG~%;B7kz0(LVsGsO5;j4EBP!E9srm2j_`Gw$TNWixr{9CuUgX zp2p1CsdDb0d5)Hb)u=Nl`=a6{_yxmM71;P{kqU-l7WvenV8&!#?jivi7V^?)Eer;JRXOV&2?%!0^Gurg zU!>zFyaq7X5pz5h(21SX3%lJ0RK!Z4xuP!DqkRHaD#Rd@Bl0^yj`5E00Mf8Tp}p?! z3i6}0K+@W+)AX`x9b2>Eq$}C^v!0to)ITM}Y|ntb5ALd5RFkHPz*MGTC=Tn7Cht#@V*rYE&1@2 z_j?#Bn#Nkd;{4$SIw@D0s&eFe739ux7gFKipO0!T`dz(;yC!pcc^DO>>zG6rV3c!+ z>=(}3`SJ71BywzAq%;m2Kueuy8=3`(n_OWm)=7K$ja!QlPdT!J%;_|G2Hlp!k|1Ec z4H;Jl{se95SLYu*h#AhgOiX*Zceai3Bbby*RuVJ0OJnZcs^d_K1s=^1$o5?GE%zK( zolt=k36zM;cD=5_30QXf04zBUdrJMXGuYM!%D0o&mr@Gr_P7Vvk`X;LYTxsSkD4$G z%>@FWk)`%aa5;&4j36i^eNw$(smUn837=~2nGQGqirCzijtUWop?Pz__L@8)6+YhY zVMRlnpDs4L>)@Zag(t})aYZjfXXOoubR42+hL>x6Xm}2Rcb4E`efk-i-H_0DpuHba zIw+c0_Y#Cw6{z8Y^F|Owrq9vgH~>+KlZSqb^4T}aGPZ+ULe)v@c%Sw-L6syMEbi2r zpc=H&d5L0#CcDA|C^oUm5c))`cOi64;?mwO09*#uemir^$Qf-Wbk{3Zz?0pQv@*uP1iW$77ddA78-XAW4ejZ+86hLL7T zT1V+*Pk6(~mt12Dp!RA<04|nu25daug`D{w5zWjs)&t-b97zr4$uhSp);3-_Kn&@9 zJ&wj^(R+R#d>&?Zz|__0*iy4&lMr?4&@vDlpD*v%Id5GJOS7X}*Q`lRfKx&B7BDPutwD3scu(1Q%RiH%--A_CQZIB@r0+Ir1OYBK$ zADd3HFJRPj7}E=pT?f?@^`&U5$pimrdWCE$oc-N&1JGNm0Q#z&(wDnpxOeGv z75|>G8*I;5j=O5B;mU%9dnFJXzQXEEJ0mzT` zI3|eZ<->AW&dty8ZU|k#(fRb2dS{;V8#=i;8q@F#1n@T5=}ho%&RcG-;5S2k!k-$A z!Jr-b&4y6DciaXH>BBHmJN)9k4!J6GPFgdyw6rAKY=Eof0LIYCt{FntsKr*!V$kKl z=yDjUyr=U@Odphj5|^D+(O6KEFST6yeJxL#jVC8Z!SMY#Uk#8bQl=-O+bVyJp04VP z=%CBz9UWZ=>bmHkMP+mi#2w&Rj#{@hAGDR6j&XtyQ;2`qWR9yy03#|q+!Fm|+Ca~7 zB$d0U{?`#|6fGw(pFytNxh8Py@bOWIhYnUM^9yrzTBAP+N19V?Hz+WKcJ>klc7}JT zN$!^kKnR7zijIgk&C_syfV@_-!sW3>Y9tK=KBx9gsOu7q6mW9_dIzas@%>);Kyj)FlDG)vwihs&;EF7s9Ch+~X4<6znJr z`PwyOo`R52{tW-G2Fnh5i;jz;6UtA7y{P}|xrR4-IXpq?Ak=%YparKC{SHRK$SIy7 znLTv-R=B_82&v4sT@!jwK-0l>#Q7X{Vh`=3F0)D!d~;hrfUxGQNilwd!*^&eb0KC) z&=lkL`_2ETx2BVKn|bA=fSlN9<%d2WaQAM2PX*}w?G zc4?o6IEdBs>137!cm^$+mYf{>Bu4nX3YTrfd{S49hu#faF!_vM510ld?<^AGv}9G0 zk{>%^F%McqBQ}#rqzZ%9FcHi=dO{NZxWtgz3@iN(A3joZa1^Sos<()O*INo6Z6Q&Y zDDXJbXaIO4!;YkiVbRpQ@PA?CzccC=m1nsk&dy$A0b+@g zZO}Fg%NE_<{~t(X&_7DGt@K456kc~P4xV0Kh1w(j-mXmOaO&Rni`73!b6Bhet`^`MRwMi0dvHF7@elb z-!BZ(9z&ad;gETSZ=t=oQ~Sm|S1;a>9{ap<@LcJRzveS8$Oz(DQkZq)wBJF_vHf)+ znkM3pr!MBM9&c>?iYrdv;A_lgoqWx_@%>Y|&(1V<8G7@@Gv}{{T8_RQ@%WoxY5P%d z|5{_yhXZ~O=oRk{>9cIlc#N^iH7~eQEk##pHKd8JwAs3tah+Ys(m&#iT(H+xn3_a9 zd*3(y?qP0dYP^2Jwmg^SH_p)6Fx7|E^{)EETtw7nZLcd>ehzm#qMb5XaS7bE@6p*V9D zg=`^fAHhzs62g?tk&b z$?0>*Wf0uLycGtkiuj6NUV4wLzh1q*d&)>J793DSuR_4uNhZj%KJ4oD30=4HED3l3 zI#Md&Tq%uSZeM7~D1Way!KL>LWf46m8n{3&0U#kerWmsslb}UZ%CoDzIv7B`*W@qy znn*yz%=f@M5CPS6-6*^z$Bi_qQ!)*`?%SwE!OWg3_3Xq;4TuoRG;Qw|je2{kEn%>` zg(twj=Za!Ed%f2!ehr?A&n~cMx;izSg>BCKGNEk)`mP zFMVu}I4g~5KfwdKaWYq&JC$T@?`$*HFF6o_9nP>`G25mekb2=Xp|tM9kDTgvX0v|= zFF$3{TlLq0{d>FuQ$B9c-9E*JxOp8oao9g1+LLMDf5B^c^O zwx3FtrR@8$`VRJaozEnOo~7>CKeNg0Re!}P`qg~~jc3Ap2CHnj!hNTji!OHbnFjLs z9r^E1eRg_xWt%UJl^>{yTuHZ!2c3xI2??ZtJdwIn>4vd$n#(c=45dOsWxoKzYI_Mb zA%=P9SF4Y5+}%T+{?@)o-J`y$^`;N+nd@WI*8D1c2NxChT|$pBi7sP=MQnvP0s;t3^a(d}mwjqD_p!rcYPO7Xe%#h&^gy+~`X>Ft*F z@n;pu5;kgQP)FFFJL#Vcfr_CwBnwEJR^`yQKlu^KfC3Un4Jn3{=w<3sw~|yoy0jm9 z){t}4$8n%7`X*?(L#hB$$%UmlJU{a=(Fh>BIW(2O-}7c&;g|9A$GIb#iqJ$SM4}#i zJ(#Pldl;gq3ZY|{s1)W$}mx~x&*nJ2|A8@qP|bPF-$QDNj;ko}d$NJkaFlybpDIGub|Q)P^g?u_nyH13jUM2@{bIO_N$9 zdjAO)uw4D)aO;Oy)&BYNbL^2+-i^dZ4|*zY`?{nixqRRHCWA4Zctpo%#r3K6QB%t| zo2I4k^I?zl_3!)EXg~Z3UQnG^R4Yv0AV(>ucKc`SGM|hSSdG3dVDpVAcj#`d@k6O(N z216VY0*9?Jo_9g{+R8k(+A$HenWYMo#S%+MHsR_Bf1D&g&$iHDYa34 zLW~j@`w92%75(PfOCJ6Rjt_(w-VVh(1%-`$lB=4oHXx=aV`0^~=R3dys`JW#xii`I z5Q%5$Vno8zc=RfSwG(e1%;rADgoudd6H-J`)#UfpA1!Ny>N!i8E;}iBqp>bYSVSL( zn74Jiw2!bQK}VHrL9`GHLAFbp_AQOzsToq`NQ?h5T}3|Rv!*CknXu$|uzK{F=);nXLT+Qv zgHT>iOjzr?5-cf$fS8(2#Up% z<$^E4hm+{Di?LBskmHkee>eT3azV0ZsQ!^-Z8sKVOZ1-v{~;bD8gUW#WqWRBE5bM( zL)z>?IvHfzkMZx}Nzs@Z!Z_?pM!^7N#*H?ifWK{B{}D=hEtJ$L8zt0zTj~U14mS5C zz$w+ko`JnO0EOL(9_MU}Xf*7zoIP=F08>C`!HDG*Gp!L7>IsujJh_6*$Vhw*LL@`X ziDD@QM$5ZAh&Ry%!o(1?rJ9T7TM$Rdo}B>HgvGsqEx6ngWV|#|_}t~Akk{8R5acfSBzWSfvu(|@4wO^uc_rzfb8aPdNIgLyhKYz&!HPhZYIzH(oJF9|EH3C=05XEM zzJMbN4p0B73e@8OArvSbcjg^=orX*Utl^oSAwYXbM$PM0UP5zHyD}u3oY|#o)qbi{ zm;fBNTH|76@H2fEjZ=v&a7QqG9=&hs@{&t?Ho6L<6X%mx8ocN{t-=xD=8*J3LD0J5 zJ2-RvxTHRBE@obW5nk~v2B)v*D(sYb=Vn?rW@D0+_%8y&dtjgUXnsAP1%{HWD`tDJ zTSme!uBhSW+^6oM1=Qd@E*$XE;B^BzmqlV|1Adcp@klvkd=afs*kSVUo7_tc;B(Qn z<#Z{yg0&{m*9sK7xtu0IOCel7?D6AMZpd#K8{V#qT`1>TdHwaFEm3;YKB_%b_SGc~cYX8|bKjZMPbxD36cCXCv$ zSk}FUS8;w9oKN%~L|2UpFUg`71OfW=CFL97*l*6|(Dl_xZL`0Lr{vhlz@Sw_8uMY^^w!6Y~gJ;*gT0S%Cy_FA*UX3zW&ZEci}3zva`Tn z7gK|&j~LYeF;&Ye$t1wLFYoX80#Ywv3@!lZb}TNSdP6n!jxnNisLU`-yOB%upq%IG zJGFqIlvK_do`qNiusP+v#ML1-v)4>(OzT>$TY&15^Qu{7s#xcTMMh4}&!q*kB4rhR z^TZlf4pBNLN2XidbNMaUc%NrW4QI~$k5J{JGsdCk&+`CXmg3x+Bva+co6=9clAMWB z97UhbxCb)xAL9)R{|RTu;1@G*Pq`DnA;5op~{+d!>W9_nHok(l%|GEj?VeYzWi zcVqOu#%4=vGd=z}lD^HsLnO#@+l#rJD8z63+gm2$kUWq%D`KZf`W(l^x9xz}S301i z{r+sr5gNE)NqL`lCf*fXj0*XW2*#!5{v(2A-9U{(=kVVc2O*yvhXsOL>q#Ixuty;R z9*KhgBe8{VyRSJl9mgU9p19`tm^3-=`8x0-kTFw4LXYubrL$eHf?U*W+7FAQa7d2S zVF=i;64Q#)P|LE*1L{?$-EPvVv8f(letv!{)Gv_ z1>%|7&ZG~+Pc2`jKcguT)w$HqLDB&u)QP4%e;f6zIbrSh#HJjb={QM)<91h$LGd{d zG+|z*#7vvsbjuenV4t+A=0~=kX!aySJ3?jQZz7_)_Jr?UKvxy#r06Hr)60QG1o8yU zp+pPQp#o?-$}mW6Zd{0Y=7%Z;HUOv62Y1a60z0WCaQYGx94FB9s zL+KAVX@FwMI4r~dh=G0|_7~`)v(a{t5N3`aWHSs}&vNO-=(u<#>CeB8s^_f85ixYa zW~k3Ep`FI^Y#PP#Ft6$m;<2k9^e_B*oWBcaYQ;VWEv1E+ zC%eM)a_uk;{Aw*1aHRkW(|nrIihy9?bX!vT*bM#}$8=cw zywI8-iw5rhBp?u2xQhU@6fWXCGaVvneV`FU04YNlC8GJfc*oCs_ z-mQUv5E~HX>kz|Oo>%1HVI@_5uHWnGP^ZYng}^B=`jV*Ev&PXuk!y!D$Hm;qCcnYR z!^%{rZjXdQtA1Gy5(_EqOR}~4O@t34klVKcFTJg%0EUL2|&{rZ|)?G%mF1H za>an7T~OE>Jw26fCpREJ*@aKrZV5OQfs*fxToKV@96hcnsUaYN$35rahvNWhg6fHM zSEQ6&jF^a3$AHQAu-h)xN6PD(1{uGF#^uYRQ~+%lQ&+=zd;o4nG9gfx8a%(;e`fv0 zj)+8%xLt84YtRm?c=pI6ubsMO&lcm{pf0uL&*PpcqB~&K5>fZR7CN>j5Qf}`uqJUO zj@!DRJ(4;K;43$s4m7;&rmh7ihOEEe^z`MEd)l0w*y;#`c0j@!T_-FP)8G(f3T}0f zEAfa+tet7W;1Tj$zpNn$#q)gKu8T<|k+*+7X%RX`org0?vh=E7pr=n~m;VA)Evh44 zF3kJ_4c(&6na@z(k{Ep0_&U5JJ`?ieXfVb2BmQBa64e5^5k2~E>X*&GwVqBj%H)e$ zX9VA|i8zg|MJ(z^+-aCbz2ES~(&c#QRO0z$mG<(=<5`J%dMiv|=_tLdqDfG=R=vy5 zl(W;z6qyTFQbm(|zbEGv<=nA4<=g83=zz+UkhC15S`b%pV!w1nkxm)q{#3*5y90X$ z2FhMShA-{Ad*tbsf$bf!n1nyWx!*VBnW!APkom~}Yx53XX*L7fM%fA>%k~BE8J5bm z84qPQnBhCWcrVvA-T$5c?b|mauu005)j_)~HcLM4Fzws4zl~M!t>&c(dGeN_fi%Eb z{yzIrK-&?=C__C#M0Dm2$@H}C4R&Cpy0EmYB&9ewp^u}<<&fSnP>;(|)Zo>E^+)b+ z>$hjr#q@Q1zl?ph<8S4P=K88SuRRa*4{Y1*F$sI+dD$mCJgY@xJ%n9*D=2e|bU<== z&-ZVAzHJ#96fY}wC@m}&dUr3feD_1k!QFkErkpg7dz}Dc))K0Zt=7LRzP&8=L3otk zkUI34-UZNdm-&JbXgtXA*e_6!b;};0Dfb-)UZ!ec>Wk=~oqhFy z>Dvp2N202*O9vdx*Fz1*jc|hIWEz_cO!e{2f7r{PhjzrU2j9 zbcp#HS1iSx)pjYvM0fwj;Hg;P)TlWH9j>>(y`2vyHY2Z7=*td({{8im4z zcyP0>W8=(c)4%Xb8*#3p@m#ffRr5Dj# z4+BPVhbF84UGhhL%@+EnK%Ly0yYKPQ~wrPg)OR zPx`RQs*ZT{=sA5vqPOCBGYmM}9<|&&d3~V1_Vv~z(&@Ocl&d>7>7PX z>t67Re0RO?L1a>kKjTQfd$SkyX86XiW15@KVw#8czI~SS>WfkP%BQQ^N{Udot{X&c z&AOxOi!2%9z8qOkNIOwzQ*kj637$cr6?8Sgod#A#Qr{`u_h!;GKH5}1Z0&D#UA*;D>KhrirC{Bgqn*wLz# zH$2^#N2e}l-oH~5Ui&EM;*)C!ua-<&+G-Pyq}^Aa-F)47-||B{4r!iWC@6?FYP`Mc z?y=O*`a@SDhb?k%-3|Yb`-uPPS@+clK1=h`6@<_48^D zl{&lq!pR>y(N8trStkG3w$*JQ{R&$ilzLU~fcwgzH15 zjpLd#9}I4cop?2yI(G%EeQrKCZgd!R<=WQ^cd7%2?H)ZWFD`4WIC*g!>!5w#jt9#s z)~IjKH7hSHeC8hXAYs?Hy=TliQpK6}r2)1HIJOLP5tTYPz_X8%&bO24m~14oyA zeK@{t*9_{auGti5(aC}Evi>tnOU#`G%!AK&njGk{NN*grbZrLxp_;Gt0@!?kJuhRM zM3KVBDYGM3Cz0k)YU@`mmvKmcJV;)>OQjNPSM6bnKIs`D2(^peaIAY z+%(M?S^%_RP6QH2k-%vuaOSi5zAZx?vLNp#yv&{hN%yhZ{jPB`hX(yNcpKP$ zwKC6`zjDplxm{0c;!Rf0YaHuWuwfQ}VGzBejhRy4WRzd20=c~W3us9$T?yCc6S9Ez zX4hvEcXIch(X~F{<77V_PpVQ~GL*7RK+q;gKmxlDo9mSFJ-`M7!riuxaZ=4UIjaI| z1VO|jG!n^}c~S7~2x9kpcy=xU&PCkIxkKXyG3Iyx3v`#nXjBJUa*-)+@opN zo=&Qqst@zFo>PqmWpYDyuT~%Z>p0u#g%{6d@4#@Yo&El<(Tou*b=)*M9lMzf%iRY z&K3eoIv(^cyp&>v@=kDo&=&jfH-q7|OxH(%t9By@rhtEyPI z)QpH6qv`(wO&w@PeAz!Vf&?^zA)vW=FPr8mdl0r>x_^kmUWDJ0*4W5gMk>CP=+evV`cp-@{QEES*5lsB-H zmuY#VMZxtktXbf)+Ri0sA-)k(Y3E=lYbcOe z9i&OfW^wqTjAT;pCN^*>szu7n)I9t@(@v_!w@+SCWG`%$Drj;NFzH1!INw40`lT^l zVA<%W{&O+BKO<_VVHMDSI~I$OayrrB7l`lHjNpR9fwEZ#zSBlTQ%+!9l}F z^akn%WiO8$x-(|%it4O})QV6MhGz^+EOFG$VH=Z0Idk@!rQ-t`A@4y;mpI$NG>E? ziKK9l5ftI~#ktHaDkxoA13X{{bc9_eU0OEK6 z5cQ;})%znPR4i#KrwWvF^sO_qj5O}e~%Jy z9%FUwR12z#q*&%LCRSPw*Bm*r^OeoWwYb2WO^@fCncT_Bvvy#fw3{b_FgOeztS!Cd zBOr4x)l)(|fEM|S4~rI$)J?(k`{YNJ_pKq4=&mAcFW#0o`%UMV+{eFB=}*|F?8w%Z z9H7egd&~jL!Ye=K;^nu({+Q)Gb?|MwxVoY5(?<-4MSK}Ngb8Vz=VaYz;Ymjj*+RmX zrG}2)DIC{0Cu#PZ!*S*PkHF%00;|KYqw??DHp5*?VhR+7*XM-XEc>QSE!K9}{o-)L zlqj3CFx{{Nw*wAnU1q0x5s}wBdw}PX{}()I^xz;*F=PelPYptp55?kJkrGO7JG5(l zc(6|Y@0V`}+D=#!vpraJQ9bTU_4&JN5Szypc0e%zP>wNpqxc7<#@|A-~HbwvLqHEoEM5UkLs^G*88i!ewr|dxM|GsDk6eGEu`RFnwV=VLH z<*-2-@`d_=^~~~&o}s;tjs?NnD)7X71(G<!C`g8k^=np`ofr|3Kwt{17S&?^!8#@*1L<`8Av{svbkM~ zImg(y&YPc9{WO1G_d*NsNV@7iKp{ombIIl>R6h&}u3%|l`Z`}q7HyOcr5T@JwAD^_ z`nSUb#`6q8joG_Ye%4PEWcEX5`S^g5<6cEY)m5s;)!+juAwLKVU<)7*P&Nd_a&pa6 z$>XpNMD5cDTPtN*)CHc06}a=*0G<>9sTgk!o1LH3BRGE_x~$CjNR$M%&iy34yEnG| z(l1c=2pQ7F0E81y?*of|F(w4v*Vh-1?S0oZ>$ncRYS7n5R_LhOKBO;8n1O}R7eEX9Sp9~EACv~r>Z=p z)Kg}9zC<=IUW(a}c2{=07Z4<9eY$&E7o%WQmw|(C z+Y^AhFNzAw9=+GWRWK@w(UFpChJ8^Zx`^kyGnIbfJ3q=$_)SL|U=M1E3iCABu|E8b zx%d~XxUu(j&UDlc8_`uT8hG?`QhI76IT1OGKkJ}n^z6L!1Wsn@c|;^*&x;QYxb zVlZm=^0<3-tV-Z7l&_O#74`irtz}1E3+^7DCeaCK&G# za=c3!4QL|Q3S@Ok&O#uL^}+ZTsQ+n3ehcCTcVYgt7hyE@k5J5SZ`k2FVN0YrE}lEC~lDDr4ui^%Tl_cL@Wg+~tcepF8cLHV>`-^cm;}7+IKng{L&K@d{d%NMSld5>}AF zm8y@%b-~Cmj?}v!#zyU{y}k>j^?*#0=Q5eoN8xk8{)<`F*?wh7V0dL zs~yDsR_AF79{qJrMhfFeeSUw|j{1@FC{Y)_D91paz672pUt0nf*+I%`Z>8BB{ z4M;beho;q!(XN8CFO&cqCiurkEms&aS=nEJumq@w_}&*(;EQP~6pWpCKAuY9dIPWg zM`>8eDMXnMASBn02$Gn&Bt^GpHGQ%DDq{MBpLG6x7U4KIecTb`#(Y|(RE|8tFCthR z@jr8Dz(5CseUl?)BLb1s=f^J)8)hVQFuXbtl+>FFm=ERy4m%gQZZ9w2rU&{x;F#L1> zyGmaXtzpo(w-^9AL{n;c)87AoqZOf9d`S5$^&h8hb!q1RHlAQ{Fi7eP8|N=BVzEc? zi_S_8Vr2Jg0Mhym$x~XOE8Zi$7Ky#K?G5lzsdDIB`{DwoM3Eo1DE0j@!bZX<6>Ps* zRU)OgtmPMIhlDudPkaS*?(mi2B4BE37j1Ep>nMe9313MQ5cdr1)GjUm-=-r%j`(JC zJ(ViV-=!PJsKx)~`*jU{tNee@#`gbS*uX``|HIx}1;rVC--3+=cXxM!ySrQC4#7RR zySqEVt!dmHf?IG4Zow@O2u`Md|2ubP>OS44f7R5?)2Zr*ufB7>-DjV@*E(z2e{=yq z;C4Q48mjerAi*WJbymshZwNWw?zKT;H8|0i)GO(n?Dvb5=yBb^|1zDq$G>kikof)w zAQ!7pNro&xOdDSK=u*)Q+T$Y&`iHt&*IeeDgIbXlxM!f{`GZGD?&N=fH10aPyPJ0n zA17}CADO&j&${C`SI@ft0PY{6!HW6hkdUal`ds|Brp*1(eBB>Z^tD{^CFuc z^c;CZzGTs2{RHIiMF;`;?8ZwU6y9sDP21ycL0_|;#FMV;cUSn_*b+((bU_;b>r(EbhZ1?zboxQ&Rtkh`9o zJTW%={R4Q`p1i&V=|eWtqStkkdea1LipKg2SYP`^PojfQNWrAR zZ}?ylv6g2@rr6j8`469=#4=NmW6LWLyK6kGc9F9z)ZV;kBwx5eV#BG@fcD zHU?SlkAUT0LXb2Fv&{29)1Z5b*ZJL+*bC|H66DD(f{~2oUmq z-FdVu_PVfMbmT7(?R>);f4OGl3W={9Icvz8zt!i(-i+dj_=;Z7bv>_- zj@zphS=$Ga_uP&*R2jEVd^Pig!2M!NsnYzO=j3eJx-NqdER(b@XuNW@5` zY=W~;F41;OOyU0lqzd^U6$vbFu<7-1W}5yvc@dq6U#H#hVNbRUr0w9%7lJ)BU2Ql+{4{sC003k z-2}~fUvIUMzWiQrx<~TBAh-2}C<1=D`w$)AGcBVAY93!)|9K7QE0DT<^Q}7ddUeMT zdm(l$5AyR`xOiXZYU~>@8l!J9bS;MbviP={!C4rX(lu~Asv7VIs=i<+h+p0G(eVkv zWpTjHefjcA&2{bf&x`4u4h(rnJx>Ai^a1f_d=7HF2kJJcK92tq5!t`_3%Lcvmdt(3 zwhi@%CVZKviZGaz&kl09`K9xs0T zvMh)`dVNQ}G{?QnwhjM>zkkMNjPkEGV7yW3&ATd$);CZ&q+6&TfgGbCzs|9$iJSF zo5)rcKYNlF?T~l9c;3yhOI=3`R6>G18GoR>ui?Xxt5x(gK5y`HmBi@z1I{V=Zavfe z>GMV`R}U&)S%HO!DPNXa&43{*{+!T+{fqbi~uP~Kfhc-`4s%VUW7<15E((u+IRNXM zbrqrR_fce8G?%bwDSC$e?F*!iXoxeGI($O!2%awFB<@9U8Wg};oh9#woM*ToU7aTM zZSB2?0%o?VIm>*p*Xo6a|*59C-P&4{a;`Z;DK28f7sNhD#>o2`i0w$g`+^Nl(U%i(W7jQH`G$y zjIrGwH=SY^Jwp(Ax0WC92N7s0tKXxjT+yYs#r?}Y@u=U_fY71uJG*Sz2=y^p3UHZR zUS~DCXFJd#p$Py05cAafWB+OVcy_t6BE}4E5Yk%V12U={lkS8rW62eJ@R<|@jDtda zKN(_?lvHtN;D)s^nfpkZ(jE$WV&RCCc7{AhpDl@`xs64X%%V9ogAm6bINW%EiuNCtQy!h%`u-9diiXod={f9R z1o+W;yu`f=?MA3Ai;qH)odPgW$O2&+a;#bu?&wl9!y`5op8`>w_t@}6C4)*%E+hb_ zpU~5%sSbVNYRNF_c4TMy{eF)y>lSj`wwp2G2tpsTJOe5y$9qLI_)`2uS*SY0ceN-W zmtZQd!Eg*na%i_=TIVk8&E#xU0p?;+WI-loJuFS>0H8X<{f#F~jvzt?{DeWYTJrkR zXYhCz&%47=ASH!vopDU+C*@sfm{t^zbQcM|sBCHfa%DKK6abiI>9T7Qs-6z7`vn1|1=SP(k|cONz;_DZ zUzjh~_fQyj{Sid5kcG<_5@=g|18bJ75@oz#`viCB88 z(o&e>0&A~areVuB3bJP{w+)EE`;%#P+$5+}4jS5oLy(XigK8~^NXSqeNW6Tb4f0pC zg3B~%V+uTs@IY%u6{B|`nR@$IY|piQqteVAcPlfxv5OGQ*PWXgk2Qs;Q3cpl@$ z9;vdy?v|N1yvi|uoFTC(n~WE%1)8EbJB+EErNU8_AN2!ss%-I#`SP08o!>o2mFN6I z#wS`8?cYeWDVA=P6s#-*NdI9mRq68CZ`w1BV*=BJ0o-&NG_|m)!n$B%!J6|=BL3BF z?si1=3spaPr`)hu@oZlfglu$>c=<(05{Syj{3ba^>WTRyJ*?-j6zIutO6FC}%dIr^ z;&zz?%VP62bTsD6VT}U`C*|BZ>Q|$?wF{N#Ikk_pTx8GlS}0k5#;}Ag3f8ST&(D4% zg>KWfi4fI%LIgc5o3c5)l40em6l#PkI*%b;+rM!=+n253lFkn{mD29gQhvs{nyYNa zU9s#|5{4<2ivz>LU=zCKF&Y@h&Q8R(PI8wpg|9&bvuSoz=y-fiC}~g#3!N@6vt0=$ z&Op3{2pqufU3f*QP{rRTO59t}F?9@jR0|7{3=)JXA}out7Cx1(fE!r{noTny}WXfPMCx+@eb`4TLDaJYNsPb`!0B>*( z)K68*){3K*b4$CJHCijPtG$ig9M63$e-oM%laP$7M`~3+5-1B|a!f9Z1N!!%lf|(@ zVlXX7Rt4~_RH%3uV=Qt)Ja*f)D%oNn3e8l3umI$xVgmnxy1TO_4!O-;6{jX45`k$G zuXSwjxaO!yI%85Axbjf%5-Dg>#T)^UQzgHmE|36(y7rEv-p0nUUlj73R);C^(37Cb z6jwp4yr5CXdK~#)Qs9qsZUrmD4#31fD^};#C$}>>;;Cxc{pNYn0ZUT(CpI9OQlCFB zNiYfD3H(_#zgQY@00tL$orPl2Yooa`;8#bm$KREYaYQIv5J>;OcF=A}bUR;rCM>o| zaVz5~;WMepmN{S|q%~kB_6zmP&&XuRm}CfDfRis#*2EZr0fa;w?R+l09%$loRf%Qy zzye$spBvR=h)3NZ`qw9ce4{mz)yXROB+gA)=DpBVc7@3hbv4Ciq7A%YOf|`%HpFVKKQ4u(CG~9khJ2XXQyC8JH$pNHz$QUf;1YK+e?&LI7|Er? z(DZ_S9#$?MJt88QKo~tC7=1X$s496S#R86Q`!=fOSD8~o_!0uO%>EDXr>NLF;h z!7eFLC581PUVoEES7WJ8@Ff%l%K&xU5>e=>LcFdw%Qd}2qOdWl8|@{t8%$0y0L3u# zee-wI1d$#LU`A4Wj;WN<8%DYqE@x6Cx7c27l;TH#qIqm2`yVVo2;#t}Qn|@Sc?o?u z;#5gc2p^m=CJs5B1(foB_c5oWhsq8dg2#e-B|~;`2I?|G1NF_`fn_z}5@IeKrudi& zAFHMt8ZJOSQl{I6Dv~R*mtBQ|5>CoDqkjpozQ*t>&m7>JY+(>xDcG@7wGyzRGpVc# zl#Kub)6T{wfn2LseS5JNSbFLbs?TWP!sc4mSL)Nkl+ z((lsTnMe{KJ~^xnAzNV?4qmmxofAN%5$A15^Tp){mJf(Je2X7W9#@M~~gl(11 zoC7IwzA_&5&{He%@4C0#PuZVNo6z>k4&WmiALu>K!b0uRdslz8<;;@)eB9a2!=1nP zL=z$#34IO8DVEG^k((%{kOZ0WNnt2!ejCGN_g%N=9D2iXqoODayT{JKzIXyK!fW6F z3dPm`dO)rm98;&-i3u`za*Qaa#DqmKS@Z1^_snCHoyk2Mz%1{~mR$i*sAkoWzZxz% z+Q)918!E0?cWKpeR?A|IIuzxkMn&KIwb14lOJ&)f7F#)e-Nqg<*T7%Bmad}Arp)NU z@@mJ#{XoAo5w81^k*qBLJe|IrAjR}!C#p1vs~~7$${Fg}sNOOm7X?=R{q~07EDGgG zcS=B%?P@IR49=iIrYO8oLNA|XG;OM2Y4xg*+e?nMd@tP=Bvw020f!hyW&Pb8hUZ%s zXIas6w@%6yfLCXU8((9dz{E|B{1 zPdvC~bx=k?0Jg@f2p!-+MmF9{u=XRR`vRvYf^ ztfM|-VN_bos}8GZ)0-FCkDnwq%g2tJz}z0gZnEOx6sdf{-WY9IrdxgOAEgr*p? zo@vs@A7n~Ux@$tB@~KdRmKG_(A@1m)4sFWb4fnFbaKJptKw=oq{6Z$ydP;oG*dt!K z5SAF~c9##D`49=-y~6%FT}9@N?m**Pl#DAbiYTLMPO0l3#-0!gPx#-`utGbM&;UyP z*4dN7Rc|KR#Q3BakKE2`>x7Y}*s#;_pB8lQ$cx78-upgL$qM8O+W4~cFJ_f)kBb6$ zPt+ZTh(d8>5}@aM4w80?=#H&sDri!ONL!F8o3n38XF^dznwJBTkSs2!KyChCeEa6$2izPa)w{gvXUkgGE(CMZkr|F1_iOa z@z`Ss$}wP4CDYJ=dZY6c;jL=`^(rPak2qJXOz}UkTRDo*RJ7;NUv1G<%jOZl-2VVH zeENI&*r_nbqZ?zEcZD@%)GHMIiRpX{|72j}5U2ec|>VV-L><3Kt1a6VlKY%85(^g|DWvP@S zg6h~PbInR1B?{2-KI{{fIW0qU4*rC2%a2sA_1w@dY`1y2zDxNUrl9@rLZdRCu@DOk zXh2XT6y_hSdrY)tkkCv=ET zN#Tg?hE-SPu`|*jq<`2RM{uULa#XU)@qK=WAy?~{Fb8y(^5HK)wOmPf#mE%A^>)7e zS_D%NrQFbsfN~XQg) z5yi!elQcrQi>+tXDB$1Y!G{Ez(}dI1bugy1ygJ9wq}pEn%|d5UV=n}&rPPOUaKGqE zk6b$G(^^1qM$gVTS~&7KK(zj+NJ&qR^$g#+ob^&(-M#deSyM`2>o6pa>vW4(b-O zKk+^QfKA>_!|}@NBf7yWJL&A$e)&pc>;7qB$H~he8Xh3a-~cY|v`3)kF2?X+F7#U7 zAUWYoT*=nu&g$H7dgvg?la1!#o)^uQDtQx?IKV@`&HeGZ{64pKr~C(ka!@P>Kaw{+ zR=*ZC{K`Fv{*Zv+c@V5(z-Q?n0P!#NN9*Rmx8B#I_{V%Zv5Cx}n*_4Uy*a{fbA4)C z@4+;4!eV!*a{mCXujGD3T`wOBg+9T*h>|}J|BBvLePCb8z1wvJ3y40OzaMX?-O-x% z9K!eTbB)<>-Dp0FnND)ep}&O#Ay{hA_)gVz&_J3^A^G#CG6;SDJ-HXsG>&-1{0A^_ z+MQMF*BkI{Pk)Qmy@v3TW>Nlk=3sF{6ud7w61}ha{KMq|GxzP zpIHLYlgohcbfX)Fr$vI42WqX#h>vVNNO7jjQIzs2xBNbzQ4)-!m}G3#+fZ8=^>3SPR8*UF$0)R0O| zJ}HA}#!#w`4H9Sb9#CtaGnZqk@$_t$BWLkz$k`a^E}g0EhTbI?;;yj_DYd|B?B2id z4#bf@N~}=cGKq7jYzW^Et5ieug0Yk4)Kb@6Fs(kY3utycTHOo^a3U92)Y!BKGg~;w zHn^YVttO<&qH!hLJ08o9YJZk#)=gREyphp$M0ed=RnbS$x`B-C=7$rcc*M7bdy0`M=b0o#;OK_*)FGiVaY6HVzbi9Fs zBCSG(3xk+7tZtU^5#h`#R64?c?EJH$xd-KNsWm$56I9v$HS7LJbIO=LcK(Rk5}rh9 z1%{aPtQwpYNx*9)1A5sr0zzmvy1&S~Xl@6zE>Z1DK^MXD8MfDpJ*z?eBsjfxMF9hm z_F#_`lCmomVtl9=Xsl0+0@Q)L2e^V_k-E#v&JHzk=dLD1N#v6{$J@D0IN0EoJWEAc zk~?!(-Gzw`*Vy!PGY&0ipD1WXz1N)}ipeP+ z&jI0ct4dB%A}*@}J#BE)#p-opA$V*)hBVBbH@V`!rx&n7qJ2tsFfrJQRI{<_$Q5ln z7koK4oQHlVNz`~y8;coLB4UMor(#tzq(4{aaI-+nW|P2zQUt|71u8gI5b8HcAyRjt(aim6%Q2`|nW++rYArmFPNTg&!6kmEI~({bF3 z>DCcfOru`mQzRJ0lNVN3SOD+V$)hjJ15Cn~+ipcH@3PJ!-ZC6WKO7AL7sN41ua=);I;AV)>5J|ZxAkZxZlaM+RVjI<3O>26f;-#qKCDB?rkE`jL&Ung7tAQ+O zDXe}iH>~o0QcoMS_JXVqjzrTAK?ozER3Fz8&HThl%_lqMZ^>k%b4 z4jlW0n7xRDsV!4Z^9^wg_JfL`jUVt;DtGqO{&BR%ClCDAt>EWkO~od^{;{!J|-ic;I>46U#xU- zP6s-Q-vfuVxc>p=cKh^+O%>BaM!w$qPbS0gZU&n5d*in7sG}szRJ=(BU0KULd|dNc zcjEcP`8c{y>L?bORLtu6d7XwuTxqRB&M&q=%@xJ+aM`-i((M!Er`T2rXzv6hCby@^ z8$hfgsh|fs)JB~FgC-w#Y+uO^40;Z6)%f;PH0v>6NI-3YOn02FeQ6pJQz-iHW?T-O zP*~NR7+ed4mM{Ee57uHDX>+Jud74F+ZVGf!8lYd#My_8mjLgmf$80Iq#1 zZoFIYu=@7BE=q@}aynAna;HpTwSkQShC^5thu*?6E6^F^P|!I5)MbEpyufxcNs_N} z$0e$_z``Z~G(4xZUPT}y9WP^mM<~_p7eA&%fD`EKNTV=S1%s*i6ojcxGW}jNkyd4QmWafC*p zoQWDowl^Y0{vt=JHzaAlAO@4hRr9%pAu^&fZ6SG`W}3p`#?iqkmP}MA^t@u1x)mH0 z()&`f{U+@8fO>kNUs~UJX;yQxi*U)-Z}g`z389e{prR@X)}y&WI_FTUhSk2g*An+1 zy?%W0RYE7koX*yYQij4qo%$9-x;S?8RH}u;j&$0ibpXx$ffxWlr-WknIOl8#8U2MU z$5zmVtNNx`BQ4CK!cK*pQJVT=lFM5#15Kk~C=RC*np8#^$e*g5boJYusdPL44r7e$ zkTxczTMsFym> zOrr3n^)~a;jA1C!^g$gd)gQq@TqH8PQmR1Q;bwuQuYa^lIQug$BsJ{!1OUsr1M;>(hjx0jk zc>5?mniZ<%Xv$K$icun0JW_rH4igGDl_OGIx)1LU)>H9U6zMSFkAT0CmtkG2+#6x& z89=+&FGr*_mKsW<7Dma&T-hZWlo25>CL$7l&UWPcrPikY(tK{dNCktCqM~hE%F8Ag znwjdPx1>Hf&wjdrZoX59 zXjzFsvY?X6tN|U{SB79zgC<4K zbGSU*n4x_%i=7;alazIY0`6N<1oJ0-GY$%v=iuVf%EEfE?68^&_HmxBi=}I8*LXEQ zfrB`!dyIpGD_}VY9>QmSE)Wv1O8fQ&^t4-t2@!>v>@w|(i8PS#alMH2do4?QYfLBG?cGGZv;aIz6tMWh?O(p4|)1$3AI8%YKUtBhwo>Sbk-wzXtY zAUTMI5_XPg+2NrnvYPLxH8Owtpqw)-UGAywahDNN^lgxD9v}Se9Uc6qU}zhy#4Nu8 zp(%}Y(=*o1V%ns35z!mJNh-^+-c%BNf1WkU;(4P%tH0UFP0{#JFk^L{Z4uG#l%B`P zT8kF;r|lMSUR|}lT^MacNA0)k5c#^09|4uQ#@G6TE-Je@;*Ywa^#=5G`K@NxD>@VGw@P#mJjC(|%?gh@^iGk@?PMFRVm(gCeGO)t6=)U%Oh(1!t#H({O2+(pAgSQWP-xQ_HvPRDHUhuEFF3guGLd zA||(?I^$3zT53w%o;WQtDnR7$gF-}dlm%gz0JpK@z9f=wYtRC?^?Id+e52g1 zGdPK#(-`&Esr}XP`jX-5?T!&B>LTrge;(-CeRI^wxuOQG@t{2bK_eH1jt=c8%pz9G z$z@WqPIR==Gr%~`9ZYRR+5+H+j+^zwg_WS{F_Uk>P~h|sYH?s-YYrtfJZIir_lcEw zrp%c?U9)D@zOuL|pAUxLHXmxN0O0haDblT51j1EL@W*AQwIwW6ofDOH=r_1P-!*a9 zG4^glwvXjIu-*wm>~FEF`zF2o)dU) zVzx4QOeYOhy3r{NQ156exfA&lhA4_vjLOGYlPE_Kmt3igXuXc%7T`Q3q*$yZn>l;N zlX6gD7MPKux-w6mi6XNiO^Tb1V;U!c|8u}shrHtg30T~fQ5MZnlHU{SU-EdBa1tng zqzMp_jW-R;@yt-pP)i~(CRlLS{XZfn*VRb3uc_qPe&`SBu()0(QR}2O?2lBeEFjf* zw>my!DkYIJEm`vg0|2oZ{>uTKX3oBI=U;#Jc-O?QEUVfX+SXk(k$7I#GW_GsR*JHp z%_4)|Wx+lgxKYhXVyD?4wmooK_2bV>Ot8$~ll?~8QHam!lu?=k zLzrXa4IwkEsNj%~G+Aw(;FUBVs`s&{2ZYni#LD3GZ1W10vl&iv%0VycGTjE?cH| zC~wG!HqFw-yGO)BC8_AlLW`Hi+gWrdCjfC08nk4_J~QgzVW9O|ZYfH!Cu#?4ipqL& z)`F7^Dz&FfrIHjNqK$Vd960IHu$UME37^Dbg^O%AO$-!x&>1hP+Cc4Y8-*!Ju<^ZW4ns_s2~>iFa>Na~ zItrM`Th{0i^O6;8ftD_hAXAH0s4OPLt!umPPSyPx%X#6VMNmO&MOl8o#Y35qV6syH zB{$i7GuTMR$v@ooJngHRjiUY}c~%Mj1$<$`{q2uY0Zw*XRshOg?QrkWqTSP8HCj=C z)c4MA4`fuehB7-vnay|0#2_z`!z0QHJwknYRV{D2_$JBTX35VqMc{2o@ROepJ!cJK zuT)B0?q3O0stcq1{KOzunF0urov86Ah{8%j!NwmtY&5z8Lq|EnSwqNA8xKf3%9&q+ zxGfkdI_9n^g|eY=vCk|Q-|Z}&WQwa1?g}|64SfHgf{=2$%Z{5M8n#P+V2G7TkzM`4 z?X%#vR>R+v?YJC&9+b-}&#DN9*6~?>Pm|^qGGd(0a52B!Ju2+t%$le7bjl0^^{%v; zW+LOy2zeLla2Q8BX}}7gSwDy;42mxdiL$zRu3W!3#;qUZvV5O>HC*$AAu`Udd|WUR zI8U*-#IW8fCXF@Q(jEGk6aLg9tU6X4o6lp26h#7?sM-P1=jy`5v*9F46x3D)Y!h%_s%b(`*6Lzwo z6u^agKH|^&z~NvOz7cG z3C*>>f(KO`wmF~1g~bvtnD#gqSAL=nFQ?_Wzi8rPq}Ef6qq4qW$|nnhsFHvu2n>t0 z1j9neh-uR?*?nlQ35v}am#`ga>;AUH1kI?N5WUxUmc`e3;RthlV>unQY^z*vv_OfY zxdx|E=`K2LmP;?$N)^z=6^8%{ge_gEbtRph{3qq}VU|-|rPi+6N%h$!!YfErAsm9* zeAsCUD=6rK6`J9aJ&ZQd6?(>4O-T?-y^*Y+-A#xn{e*=HC%t@NBj$xDG8KV(obnp z@;x>z7E%EP&WSq_SOIz?f$B&OS|fysLFZeB{FQf2$YW^|bmO)W z>FeC|+Hlxe)E-OfK#vC-cnW^Bu)IhNj}9Lr=G1=0iw_R*Hbsr>#_h($xa*7^;&iC+endn+f;~8L(I_bBNv>DK1(p*hG;M10%{KWXvqpySQ1#Q~7|W$( zzj7a_3_YB4ddi4Mb(NPYm#SZ7#+tf*FQWLCgdVhpbluUpX?84(g11CaF-0Xj36w7# z@zSH`(3XSRJ!Aadih3tr=OaTOnQRUYqcz=*2W zrEVcm-B7rKl4vIL@{M0vuM`Auf8jD?rnu!G2BPLK;cC{V=0B!ExloX0xIL!7!4N1* zXjJHVw%wR?<<~3Z#z)z z{$9-^`?-gIWHuvC6>f>wd|Nl3M3ScgNaLGO8c8V~rit*V48$3U(>1sytkVx*E6DYU zt#RD>sXx-Ke{fYu8s;D*#7AQv2O?fvrIIhrC8@O1GOD;iiaI3_Y+pZeZqLWNMH%Hv}>=HZ8(yWpTunKcy6=JK#*f7E{ncxm{6UKtTw}P#3xBS9|S^PSc8P zq&0N+_F}lLcy%k8Pi_d%EV{waJB!|;80fC_XiRq*t4O%)R6)rYKg5eg4vBl#ZSqy( z?f>Q$s#uBe(9LdG?VUQbM~_7sE3=Ym+JwzWxW(~thZBSIDFke(bNl$luf3GGdcnR{ zg;&Ppn6x~g?{@nsE*z7t)#d(q66hELRg#VAkSh!_OaEEvX|IM$#gqEo)%(wNid7en zTJPy<^(OYSrjB{{{%g3e%1R0#&+R6o9WFkkM!(Qi`;K!Eg9S}7)D&g<+D)jC>_31V z(b@}mb)f&p=AEXmQ=!mbB3Dx@JBQx-{@#{lBgI%Jizt=2292bw@7$S0Pjpo~ioK+M25RtK@ir zPS?xAzZeF8FH)4kdsEoU(M-Mk?=-^`8Pq!7aIFdZC*3U^bb0*N@vXTc!PSy=tZ36D zR4jv>YU4}LfbY0o_1pm`%C{bNg1qsjo{&WjlHqC|Q9DV1K8cWY? z?_SL@dzf|cHBRN(^<8r7T{_h5H@wdJgDgJ?B4x9IRO6wI5lgD82~(gZzM5-9MY$qV zZ?l)+ILE!2%s=g#K;#mnzbSI;%5;0LlJs#SYNA5XP#gJNs@Xx}$|b{btxEH{Ip+jIEP0)NtBF+IYryCe%KC=*qW>J@i6d z_ImbeOksiG3RE*-#V#-K=Oo#yC7@M;^n}Hy89)5Y-m92Pr^dpX@fjdb<++yb;b|OXcv1t+=*=hD!a+wm z#lQL|YqcyMG~?jF5&{I9BQ&iYWhM`=zZ}N6nPpIZqjaYw3{DCnw84DSK1IxNQzk>B z?B4R?O&i%Ruc_+YyyEGR(G|(_F>f7r{U-g=t=msk^o#?WB406EvQLo4EbCjE=OCtcX^c>B*YUfCI=@`oDV^V;DF#t33zX&HQ5TB^Yz z+b($-+9gJ9W$9?BSt$oE$(!bErVYR8z%gWZR?mB#=|n43Ti^Mfix{6;|e&5uzh{sDi(arNRLxI zVHuSO_4(gR{?gO^eHW6m_rhHChrX|!;yLDAtovfICXDK3vOs-?^;KD?PJ%y10ZtQF znT)BrGE@*$4ftx%@$+>~$oi`L6yziy*7EXe9&v}2`Df|I1p!=bTW7wJAxBSr3H7m+ z3bFv+(K4y4K6hYZPBXf6Rqim6L>e8e_g2P>51xaNI1B^Hkz-luaWs@SW_D}PJ@hpnac+?d$4C*e-po~Kc0)WR#R-RGtgr zXSx?PP}B7nhYa+ArfxUZ!2d^`z-|#!R zIPgR6h+M9)lCB&(2WeGM13w#KoV2GQ9;P<#;ghX-j*R~byAKv`S61ux3l+&3TO9 zFqzroi*kwjV^^J5SXg)@BmCgnZSP}V9j9O&Tj!oon^@1raosi|9J17Xi5*tEOPDsx z;U(`LpShxg{~lbkvFdr*4d)K$z21^&r~Vi31Ui>K1@ju)*EToaDC(yDTXI7K>?x94 zN4mBKA^Y{OIZHKx&N{7>ft?3`C7u2#XK&3%6;r|03qlk76p{F)k49GT)t`g7hE2cT>k{fCcqiUqJS{*N4!Zr|y@Z7XD*=J;G1@H<_DkE1FYS9|WWLDE8NeMH>N{QmCrXT{b=-~gT zcXigU9cFWRo>;Sn9-5*W$*S{R*;jzhd$1I#*0J?;2ff6-f3zEq*v}-{Aant#2nLI;(BU>(Mv~_1$o{wv=?dWX@QEh>d;wRZH+IlC zM7#S{CQ@WA6ef$#Fxy3AaHcFdPBIcx3QqajOmzBULfkPXkcBjk3s-mimDGA-rH*q9B{ogbv@-PblJWA@ik{FPvs7@5ac7)_0%Bwv1U z?jg6R=n(B{bkeTx+WewsftTOc^&>7Vt}=^gY*f?DiHosckXP3_rbOz*-l*ipvyA&?uCSD_NcCh?-iixJbv=rnzr{tKWC7SOM43Em^gBH0 zcigaA&CP`U8|0cO;oC!?;Cq(fRNU=CLoC_lHGVQCwYK7sWJWdf{5Zwq^e>pK*nIBy zCHj~4+vw*kBS;jl=7zEIy0WG8c6WA`yS^Hzm{vew)E^heCsw!ywVZCA^4r^aOWenz z(3pIpFsbI-mtkKklvk!WAWk^ar;&6UjxC>wT|L(w;6wu5?Z9?tr*^}}`lbR|afKx_ zs8x|sx;ImA2>S$PghW`i?S6mH-}6iRjA<(>Ifq%=IDcs_juC3IP>wE6?2V<2o%l&* zlk$hu%@O8pMw^k_CK|LK43g`v;zz6G$7eF#zo$&BN@0Z1Y4e_~m({S(ZqbQjhkLas zvFwRs*~+1zNvlK?YirEOHqB^WXP$v8>boe8>4G}U6MWGHkm=?R^0Tl~-4Kdz(_7I< zS1?@S?C~e0`(R;h8;E&YiN$`tby#<9jLQ1MuP&;CC?sQ=%r^V#K1D(RX$?}PtE<)pqG+~5zpzU@@juMutixBReU16d;J^wMn7uUYlN z*hwnn&ilgdptvC;xj;m#!3A#AT}V(^RjDtt&~LS^BO_Ep$fLbnpdIjiY7ZL zF$s$;KjQyYxBcH0GSf-1H%etuS40>xJm>@=!YQ=5kfN9&6)41rjY$g>$c)#Q!Fj`e zOjz&+Wt4ixQ3m7_hGu4}PGXxmKkzxOV@agDzSx|G?p z#Zu6fpGFBTk%OORqg3&q_@a4GH%fkL6h-Cav@fGZu(7C!P45|T*d6#J2ChN z!wTLpglI+OGMtg>*-lF}p>dd=ive~_(nYo8PvjA(jM5S_1~z%R*+;++m;hW)z7P}) zrJ~Jv;r`he{z${ly=q}YA9bUTtY9NHEVBjjS`x0~v;LaCa=~!05ej6W$To|Eb@q(S zSGly4^=SRsOG?2`^LRb{nvD7_UuoC?oGDTFqBN_lYFkDSfWRU_VKFZD4Z$ z?zehMUR>cOnK$GbAsG7NHkguzUvTs|zl?COzuv)aX4auRux&nObb=d)}zRiHo`qh%DDRLO>!#-hy<7d$Q($*`3W&A=8P za*f7tUBbO8IN3Z0?Tam{Ulf)|;7KyRHVN0~g$3etlc~`4zaM`7^+6~ww}p0o z0f)K{?p`jr>6rE`u9sV74{mXizTJt5)kMy1wk@}Iu)(>#_|JMi;79L4VrWZkw_>!C;ctNMTg8YQ-bON+-m-+Hu@* zH}monvDlO*B|pS%FmS6P_&CWq*;V1D3%`lNmHYJjH{}m5vy+OMzUe#o;B%H&-gjGy z+Yw_*%LmY62!0F}Js0hXsqpF9!|YRCI_DEX@!108i^Vxzh}fL_hf%R)xFtdU8MYQ% zbIfYer+aY3NJJ4()bJ`_=xSHyf6*-unKw*~M^Z51r*fvL%=HmA#(JVrioa?9K-MQt zgyM&Lp0k!)RY3weG)MZD4yu65S{Y@90~Sz*2O3}3rI9G}Zo$Lj*n=Y-X{dXaGURmy zOHETi>I|}EajT8R>#yQ716?6$_7|rnvXc5rPMb093f=MQv=U`0MpYy}o4u?tK7@9| zD5BiOPQFZMgcfw8>JrJCI=5Z}Vahp>AQuDN;xXL)g;Lz6V5$Kp4l>PMc%cd(58~1^p`W!=35z%8BVz32wIWalQuzX7(&tsa)7B1}Fp@ zHAUGGD!L_}+M89&?!K)}K=O7m6|$B?)|NyN7s%EKU7Z;_q;#{>Ek1Q39s5QXIO>t+ ztJ%GtYojySY6dN9W7=^Q%AdG zQF`z}#_iKijIY*G97xeiRwmH;Fe4$(ke2DUb_!J0x~U*mx?}n?S(5aCb*o<2Zj=xH z2R`!i=V#J06V^kk%9w_D97iRWvQpLATAIdWqn`qTQ7}kB(HAj!WDHz}$UQ^32{ZN)__U(lYU9KRHF+G5H@&%y=9 zWKJ*DHD63~uI&;oa@O3$|MWZ`BA7!tsv2ixhr`oq#g-R4Q7jEq@TRhP#i9!lQY{fo zS4G1zDf2n6n+J?-OCpgeAhM&NpaNwfO5t}tfentN_>XpS;-7K&PuHZ4Y_;ua{RXgM zITpZ8GA$UUvIj&5@Ab!1URBk>Bc>G)sTzpQgo4VC_iRRXQSMuIFm}T| zA4%+it(T?12}`b>5o)6Ps2`Q7m%C(C(Um;yXm&!_Xa_El zfxFm*$GKZtlvBThogNzwPtq>ebloD(Pt(HwSsv?3UHL(8SitO>=V#J;{O_<=Pxvwy zw57jLUi<$}^Y8m=XVnptnv|?v+)+FkvP~5SHUMIZzrwyzTe3v~h(v0WWX$)m&{u$+ zZaPXctqu<|PG1`h(Aj8znA&ifi*61LRTS}6pi^vT=n%62(lZ71-^isGdx(ka40OYn zxvPW~`w9}k>)FHp{iS*jf7s5-J^6`}tppkqNu0jxR@#_}0^O-9x1?3(fov%NaD27? zfivf%Dx&I@_^OT!@Sh{G)$QrA%9k+!qc~UnX3|XrhJ3;@2V3qi;N7&(;o0l$8ORxX ztFv6z(n>tWb;IRz3gy*PGMOU#+|C*R?#v*=38Km6)aCt5z&5>EbMR#ifN$sLM?wI8*!qp zm8@o$sdz2pQ-MPd$j?YrTbn zb-m+x_7~sli;OhrA^Y$q+Rg8iOp%JZ{hAj(;u^{;;*|~R6h9PY3@|awsD%9sDcYZy z(b@MX=#v@?6@|8M+PoqG=ChB7Jw;@f5``hv!U>-1@5875dBN|54Bi^mya{d6JmQ#7 zRQJm619E#3o?t`}?xjPw3ElCN40K#0Vqs+^aUZJT7M$PGpPlWaM+-I637zxuE(1-Z zkAJSmVNO%V9CHKi#!El^;_rUn&39wyHNu}Se)3z~*he|;@`$K+}Yo3LoU@$I5&Uip(aW@rakQC!T; zY`jumUPweJiZsQKm~O@&DIM(8C!J>`cJ8bAR939hl-2PEcZ}{WDiY&(TadgSCvxNL95B3NXMS#l>g~%W`Z|bSjT3%kR z+H)E|yPEMUy4KuWN46t@4nuoBgSjhw3)ym*J9BmI-qwk~9uB@9MTLJk`YY|1*9(2F z9F;Sy@?*#s>7YW{3h*9L|TkQM4RyzmK(X?P>Oxjqqh42aiZ4kN)@6owiqD&TaZDsuPpx zgq}WgxB>oF>65f?aGcHQu`x`M00s(z$mUI$ZC#t1iOGJ`vRjIYfrbW6EfR)K+&v+b z%BLvflEcIEjvP;D#@SEumT)S5HSy!?#yfAaL!FOSMJ{LZ1)XU&@qpNm*j9rRKxB`t zNVMOa%#)6&-&_<4_mpg?Rmz2Xr!Nq13pz)V#FBh{&Ws9)8|GrKVu8GvtTz__(sDMhWE| zejc>lyX!m_}}kTW(ytnf$zRl=dOVh2(lzbp`yZ3VYn1HH8WeB+v!9`VOpNO=@Y6E^C35 z%j+_lo4q*gytm%O53qbnY1ydb13i9QdUMpqfY2{NVX}M@zH`Y=2 zQ}aB*d_ImZ(XEVaH`m*OzsOTjelb5#Srd}rBYhoicY^Ip5^1(V^Zv|J_}Am&w#Amt zvsG4uqx|?fq!QtsUT*xYjZ_&!8dCw?#4v+|OiB<L{*m~-&0$lXZ>7~e+d zYhSUXFZ})MCS9|hA&4e@VXX2mbO%lHo_AUAp)Mx`k2TiohgIRrp)S3qkt?ZgCKvu< zXmQt{nDMrW@d;Ha!vNeFmNy+9NJKFm*vLBn)2Kk$hEM-K{X(4@-G*&ms`THSM*x5^ zR>@^?o_edpv`sY17aYXcoOvXMG0YWtR&0q$tX($D_9<=vb6_9RvZ149WM-nHr2=0$ znqOF4oDmY5q!7>KZ;<2K95ZHiHk_j|Mn^Zs`ibfn$fcr!895nY(&Y7D-u> zYELa{y3ZZ&;1k~6G1Q%Esv@4+RIpm|Pq3Hw1%XMU^%&){IYr@??XEp zaps7&XkC~0l6N-~&_JGYSsCs5uKVD(Cr?+aw8UAZ|LcZpf8%>xo}FA9Yj8m5bk|V? zl6{W!8~$-G=lCBK4`f~z=w43TZA<;=w}kDD^PsLDZ&zi#c_Bu+ki+ymvtE^9^_LyF zb`_4JNk+CT7djN9RU>X0vG{h@?N#2aID-(pn>)u-N1Hr16Ezcv^8K(78L6>rq>`}1 zSStC1Hp0oiC(+THji0oO@l|%Gj>%a!iwRS^0zT4iimK{cLG356B_%VHPJH(X8~!1? zoLa_JAIpac0m(u{;c}rSoE@y`^EUB|~Wf6pJznXIv# zZ3(d*Vp~@pewm)g@#oa|@O-^MtMT+Qx415~$jPxd{S$^vwm?xKWShTtSOVGKbnmu` z_zj=9t&9bq3~}xBPRv;0HK&|_PFu3I(rqA*-Q<#okFGcGg#ZW?#Ch%YMlz_@goJ!> z19feto|%^ERLRur;qU2?jb_epc)>>S(3nt+kM4728oX$)*bWmUPG&SM0C|72aP$ap z^*!!yKI&c6GIpi$Yo0s5wRK4Wcy7}AG=$RIkO)9L^ufIb1sa1yL@HEZt*D{JycU7 z@Ag3B4rCRRSXfX{yOVKfo8y{bV;V7FtThof>%NDt`n_nmm|- z;!gR2p;28e?qS8E z;KDh%0Hv|}(%6Rr>rN_CX?01?FHA)$BGWKwfuZ&t>v_naUxNy~Q|7#aU3Nw5c#@RO zIX~!{J}m2k71v?fy98>d&iV8Ai^59uvx+Oi!i}}{O&grGy|3-MO-`&RVq76hSi5U2 zODS1Y#UDex@RM7qKlquDX8&O64&B>xlWTp|685?OH~H4^g`kBke7b!BPpHc9xDqcF zcg>{(^kK;;bIdS1Lri=NTHZNmoD@}GPwDrzr1ZylXTX|&xsIe{(o@Z+(DVZhk@)<~ zRZ@vGQ#U_nuygauF>65^n77_oR0!9uNeYBC$l6yW;Sph1x^ZDsxiyiAORh*!NY)C~L z_RJ_r*y@L!$It6Ot<5}3uo@)Bcyma-l+vPTrn$!eP7%6 zdH9*u@=v^-Tryt*@B1EH@pbY)j}^+jt0d|x&BevscxW&GKDFB~n>P==7soqGb9YG; zUQp9(HAkKH40v6DlA*h@YT;>ojgHL>G5u0aNwpC0a+^As$@&etOMC~rg_A6ka=XZ6 ziJtm+8x!n^0&brs@n{H@yPWYkLpFO?xjGM;^U?nZipY>Kp$lK0LbYvNBVc>LW%Cf! zt2IGb}q?i zpV>-Enx0p*PCljtsc|sdgrpY~sHcr!ph?c+`Rr8wK<8q(bl0;`!)Wnc;>R7g3l&i_ zqH&~NH3Q!_bOt?`&|Gsuy$f$YY^Bj={P>iFl-nnZyj#ELDZi_>*j7JFbR&sM)2FK` z&+n{f3L~X0yVUcqW`psfuJqcSL_fm?tKkL@pAer#>Zm_E7&CKJSlVAs-MoHGd68(e z_dIf0IMiSMNq=@X6?&e9D|#(vfIx+~wYMN&(j~CkZe;X?jvjZ~45QoB$Vk=%R{`^c z;c{cww5YS3;up-1@AwvwEjD}#v_#DxoY0vfg-2;nyRwLu`9QT3F`j)?ENNB1z2K9y zClmj{e-pf)H=NabYfl#(?;ud86C}?N!OMzpz_xfJU*Fd0O0K%k`O5yIx$E0zVf01o z5;i?u$g7Ew1&69Bwr1tZ&x$(VOF1nx0Ouwb+3GA?|319Pz~ZXi6bXya=+xXC7#H!; z(CFk=85pGcQSlKoj#}?JC`#L-MlZ~+ID2>lLV~ehy)d-J7xJwAqs=0W60=HGu^Thu zZq?+=#_oDJ4rg-&rqtvVf!ObiSknK3dl@xa>1lYI_4Q4vD;>B!^)_AMwKbjECTEV{ zY?on?6dG9cBMPdll`f6Fxgu1#|Jr=6t{x_rU%wL4>DMyQ(1Un?f@h?O;{su@kK3n| zPBzZ06Q;+LMx-TycK-N0{VdK#C4VH>_e-IrinFedYcIrXrA!%QZcfv;HihK^??ehr zT}37<@&SZKp1Y>&KFIwoWtd8|JH=?U|C}yGotD&3J-G#BZbhQ$NsWHKK6e|Wy7TY9 zrA@DtYXO~1glWWHXv?>pRC(mFlZwoY!5cCE7>fci%1S>a49k+d5}T8!*-;1C3MLii z60nY3hR}kRu}c0a?H(p0w(Q2xh*&&>Zh8@uB@qfL@dO+hl6jQU&R)tUX5R{5k8|Z3 z`QFqr4@Szp)#=uEWt3^uP;1G6zyGcw3`HcT!;S{IQT+(K{zhR5OF%-k0*7o7~*ttWT}TBtA8@+VZeYW^0mdT@?BSby?=rcwSdBm%&n?!k+~#W->bxPq4iQ zoqq8Aoz~p%Wu&h+>YihH6opNKJ++Iu{y5xuDpXW@44V_R{ zC|+YRWt(%PoYf%hvO_dE@Q9hTY>XRbS&}%NWO?MrK}>sHNtwC~s|>I!I};MW&{lR> zO+ouS-}`Feb%OuN`CSp^#MY=5iGmJ7|H@*0XQj$TlOS{>qsRm&ZnoILHt1CkpIr?A_aX2rZ1H_ z(Y_e{7cU)Oe~fHPaK3wS!}D3S=7-ZHS2IkI2zQOuNS|3Z1~#ptD5Cw_m!k`ztMh9q zMPc3pCLkf~YSzU)L~J@bnrS9Lt-j%v!8rx~y`fv%1zRx)PxgCbo|f!$VV0%`iV2Pr zdNB@{C<8?A6PTZP?B%sjTg|+Qz}MQbxmV8WOTt46bGPFyo;z|P@49IWyk0YIPKfJj z4xSJ<)-frh{yLzLfFkvho^hEbaO71LbQ!fib<hLfVcZ%4({!v3 zx4{dP%MmkPEP*kfUa`~mbyu?d33SPItyTEQOvRhW0^9q>SOn%%W=M^ah6DXF-bLnT zsSbZw^BosS?`R4r=r>$2_B*80r?9fCET7KYYC@!vuW@&zc_^v+OT+p$dvOW#?#`cb znxPlX2@R|FK1>=Qn?*Cl?*IzZGPN;<&WKoV!mwl@wn4-?r`!fBGZ{3b@+vhcoNJf5@>G2|`K( z!75x>t%!>fEg8#dzXEZN8Y%tY}l4h=EOJS(hL0!-%>wvOZ*plAY;zfyk8oT}mSFka7;%?^o?#5q~ zci&nuTA|y-@T_&B{Gi4*FJte+@4p#N@3o&JL?kI(RL>AOnincVjY{&*s zE}5?#kzhN==QgpqG8+g;k;F5xQj1VHHKd8lMwccjjOk`bs};-ZvgmqxNgSOM)yC#? z{G)GG93+!QZiwW%5{TAV*{djY%L(gh8*#Ypl)m%?kSJqRV(z#g-Cs$FVB8IgaIxi1 ztpdwr$usD@lLbpzY-v~+mYxc!^wF-0tzuZ#i(XS#-ePQ&wv|ztwzeb6BFnxX!$=$5 zjFeZ>>g3f%L|y(AkL5H0O3NrNx0>Cagv@~2KFRGejcE!9$sZWS(zGqJqFb#ZiRr6( z0wuPxx+UhVQ%i@OHC%4C<)zlew+D2wwrE{ZR)>nNrFz-q@&N|)nRA2b5&R5PC@;bA z%?G4I>ol?W-Bv}M4IPv19#r-y-jN(0-2KQ_LljZQLnq zXHK%H3_n^XRrd56?@Ym%P7&W(D@{3>MI#(zT@jsLzqYjc_5ZPa#gDgUVz|Px#blwu zgB0*~foZL2(l^fOu2uW;%k@fHRdB5&&e>y$u+_%SMN2c`t|2Dx`dAt zU8)K-0F^x4Fl8}w4(zJ$tYT=0#gipw=$tHlR>8A|MuSU|H@nwlzLZd_ipXHbnge(4vKB-XM*^88o%Gz!S!s$ zj*>bwYH*c%RD~6nH8L2xwEQMFF}m7Pu(cSn@&K6JC$Y3pFE^ansp z67?RoJ)63BXy^|W2={&S`V*wuLm<@nK~-64impRpoQqW8mr;tN;c9AH)9U)E@Zu)7 zfzg_V(|Q1@Qz6V^z4msh5Lhiat?tBB(msgiWR}vUAZgxN_t}9HhA-46&anmZ&8--< z3i&EkmowLk`&ZaL?zl8n4!eI!UE6We>X<61ps1U%^)k?3qD;&uP!rZ(RNJO}KC(>{ zoi|0WyI}V9GEkcw*YJZbbXjU-tMMN*H#Chqny=ZDkk+u!+fTyPwXnBt%`;?i39cuO z8*LG4e0Ry?F=0XbUz?oGXd5L{6_5Fmo^2&H74>DIO{w}*8hSLgv5J>GeoTb5fy&$| ziKtgSb=G~}%J|k)m?|b_Cl~A6GaMJp4#6NV^u&!M*S2NjJbhgxQFCXW%627*ek`Ug z5Mboc{+PHTPY+U+iM?R_p)4~xMogNb2e<1;OcDPa{B`xEejoVp^FxW}+ka(tRfaQF zN%%Ads|#{G!qZE*stz2xsdd9jdVHY;p`zKg>0(2ml6TVEyrLKxLj@s?zouBcw!R^c zQa@5*P8U;7Hg$cxz_&!P`Rf@{fF<~9-D0A5W?N;xCH^gee|LFE=SB}G%oo`Z&qjX4W;v* za%VN}7XBHC3T=zw(~CbiI5V`>B3qLCS08Y1L7SL6qKmp}BB zTRS5nAJ-x@8p%}ya*bEScOfQ9Iskc)Z_71!dI3vaJN3F_Rj9qI*_o!>!*suM(_T*J zF7Kxkh0W4gC@Fxa^Vn@|SNNSX9<2)j$kikE9P%Az`vVR_m z#q6`igwnp36#w{qJY4&$R^%2XfdcMqf}#$xWZc8}H0eE}#aILSgU-Zi#wLt=lV8Kt zvXNb9QuObvmES-^5EF028}JDE*sjuittP>gXUE}Cd-t)bglIyGpi^@_<-&tK*uM;Q zPgg*hikd6dgta%L&2WvhH1S$b4`M+(BOqV|Tw9x-*OQ}Na7Dd#F5}~O zKS))X$d119SPLZCFpS21a$5*!T|Jv+*vjJz56kj&N1~spy4={XxHO?d@Xp0MpSj%nCZ=neb-iP{Zz7Rguj~I=ZO_B|QviW@0>@;bd=TN#UeOD2|4_6M~o$B4yI{B~){al{vk_&1a_#%lSVI*us8nv(~s z-;q}uZ~M?}iri+Va*M|&_NH^)}EB-zanSLxerV(z643G?J+eG$+)X}H1tUCkzW z#Owj5_j)AJ^_fwhKKMG4#57 z`T;-kt=wh-b)cUE4f+G(z zV!3L|n#XPQM@NI)z76m3bxpW8x?J$l)~2CiSksDQJ9(sP=VrEEUs`Hj=T>mL zC2j=K+Cob%cH6UIvgJev(JmncXa6Og@9n=O;<)AM05rh|g9tN&d z{~r2YIX6&XJS;;x&adm2I(FwP?Egqj0gsP+A&%4;Pp_e-q zz?%lw?}jHcrnhbClC#9MIH$*_y*jBU6aX&EYe&{$NWq6;qL{5b<}?pQ^z6CLBPsgB!`Jh*NT% zn)|(lX2+W}2BHB22O3Q+uQR&Gmn9b9eVY?iG8W7&A+2^_I>HGOdAsKyPkSIn%gM`R zSiAyrZ_RJ+6RVnHKNdFMhXQ*p}8lRv2+CqmvJr>Kkrh7DP{5w zMNcqkOl_ytCBL8y##4MWG90%r&OGE-|j0gFk{%P+qKlOl@h0 z*YXI*(|~?)(U5Rm@GZzQPFR6=VR|_doSZ z^@)HE95Mhjzwu;*}(E9;24va_E1#oGxIon~cJReIH7t%L%JDAJ|7Yr$eo5 z=&qkCq`Yu2BW`78t0hy=Hj;Z)am0wAdtKjEQh!Cxh?XLDx5Ln?B5oL1#5ah30^>L! zk>L?)?5F>y3mOcn&4@^COmflciIb?AH7u?0fs>5}Rrt6AjRZDmrGS_1Vmpm zHn+A6c;)^^fdjm$C@fH!j29sle0}WnqN#HeUNsnTby@;;iFkA_m?*q6`lrE5e0m}p zTwK4bP<2$(94F$?64?iJQIs}Pg1Zcd+qeXhFSEz51#O%i-fg-P#x6LvNZElGO=^TY zogqB7>NezBhO1ala;rP^%e`_$DK%-$KdfmtdGg-6wn82rEzHbJSGVvXe&TD@))>Ijq6VF7lzXk5adi(}Qz!!9$eK@{bA~Zz6 zb;7YyCdY}k9_cKGX>9$W zr6PF8jd{HUMtsV4bhLCnuFTn1_vD`z>%#(!^cJouNxJGq$C4lWmISEScoM{78-h|D z4|rlZHmVQ2rS~(uyNI(d-5U!_YFNHlwPiU({3#r5ROI{{J}DdzBcazNex<-iJYn;u zc%*!nZ9;@GpS=NzpZK$%w%Vl+YJTsa#BbNpHZGyRrc*rYqdY`2?@RD*?60nj#kK(x-IZ^WHlv8sGENwQd(04%IvopYtZY^v)wGi*uLyx#5>XnZ8*~407rGg9D}0pH>FO>^ z$`f(5Wf(_Dc03MV>dD33{{#8-zeUoFX!o-mAfx8XxhDyy2n)}j6dWz#kT2?D_RSoC z-GI=GD5Etqams~)CKa-|mW@2B^=oetw|UXz1j4h?-h|;!(fz>EZpYDTp@Pt?H%2;G z$l4K=!v0uUDfKCnG7*yO(c-kUVSyyU3KgYl>ds>?xN{lZ=U$Dhc*?dgn$dl zJtj+q4R+iXuPpy!JwI~k1MMQK==46Umuj}ETM-kbLf5?|Po3qB-FlgNYrr}=Fb>kV zNT&ZTfo7a9P|V@8&{f{81Z;wf{0J)66(TqEVc5PGy@V1Wz~A${rMURyK3x9N)QwrX zys-LqC*rr;R%cqO&Pekrrq4G@WtD)M=;B-GjxRGM?FpS?4AtAE2oUJ*{2H0O`iY~N zF3=4gy5YNq+j-+Rk3H5|v$cPwRl09e04NDXM=Zj|I7x;~QqGwvszX(YhjtabYmDpH z$Jc#fUDC`x`D_ih|1hmG*limp`+uC(?i`gIv2opu*vQXoHi`+$0W6&pXBPM0-a8;3i$@Nqq$VLeuu?r~hEuy=6Gn8m30DNPK@;z*)& zv$)o+uOGkx``eE$EZU|sIQBxHkx1_Hw#qYKkMUK=2%#~p>FygfC?fXyX0phe0k#lQ z)I^hIo+@b{yVd4TBi3NuB5n|S#sSBct!!^d0k{mCWDv6LA1;4STbF&?8h-EeM;U|W z8^_5j77YadnPRs_D7%h;2xNWiUKgMVnKHZW32p&dG>n+o;6duEz0zG-ffq7xal{13 znf7OO(S>OpbL`Y!bn?q+1YsZeNfh2Xr~xz;bQmjmmk+X9Q$#;p*BgLA@{Rdq7yQm1Ge)E}8`3rW;)%LJG;lh!H>GuZ8QG zcj%Iwxt#b!*?O7>9&1+Z6Y*e=|0J7h1YWSq>1WrmF>2rSrtZn<*k9+k8r0I)?-Zrr ziRkZRWL;J-xGUFb&n|P5tHhMYc&CT`+GG5lj~G@GOt!`3aE9weNVHldTtCeA!g+de zgeY;RDl?3g1w0^oz-zXMR8?ARJ=_9iZ!8=4*tRC5)cXtUDr!@FNzsej2@xsaGD~S0 z*zSso{MV9%gwJeoacmi-t@3K)Sj?~$Ak`83i)A_E)Suz0?&oZy5*&ngm$PKRw12$j zTl%gTpAlB8n$sIJ$pXb&_>nZm!Zmo`8{K{FB`{w@NwPIZeS6okREM67ERG&x^CaFwrQCKnC3202c@XqS4%5fXR z;3M|&2R*3bQqvDcPNeUlS8k708$RjfZ;==riq<^!K?6;zZ{h6gF+pagjqi1QLs(Wt zWB`e>9Ko|wzk=eB7>CZoXI}iU5i`0)#+S-^J~Mr3P%s-7L3LWq$xhLJ?=~7}ZZm}+ z7>>DesmIidt+xIdo}A0BviWT>ABQVqp5&-o9-mf7Vn(iIJXN@jloN=Y1`2+>DnnrNN|6V!5{~%)^cWAetHUl-l&ot4X(fomS z`z2YNS(+D-M>@_cH0MkZqIjeHq%XJkeang-F!g1bSA%9&UD;HWIS9eQk$&w$=R3<^ z^ei~77&y7VGzF&pY#jcDE%$}r8Xe&E0ZKAk%WzM@83w8hHi*|t(2Hues#qc@Cnlyo z@~R^1aENf8P}ieHfeDn*kB8NeY&MYg*TPcRc&?@#``_?wQ3-B!=0$bA%>t^%zXZ#F z5;-UrsbCu-1_sF`wpn9$A@FiSLt4V5&uv)Fqb%b};L15H9^Yry zK!;CU+&HSwL|v>3>3jD#r~3SL6!hDX(-}ywfDQnzTe=lWOS*ZGLA)ela?x*DTSzd?VGgXjb=EQ5ZC;*BZ0wOAb~MK1s?!U5to*(lI^7 z#wI(^h4l@Q#Dte@laP+Ou$t-oXxP4U`VR_vi+$Yo&syJaQJCeH)TKFXub48|LVSc|F>xNKPZUu_tv#_|3c&beQ*Bp01Ns* zpYeabkN+Rd4+EO8$w2dV#ut-tR|7|+i1ghJhpTxxec?b`^O7O;1nuIH0q4 zNf^ESA;bjaw-TeC@H(^ir|mJd64a6#<{u| zsuujqZD!L?gd(UUCnoLt&yjN&>0luuu5hXTHDiapsRCEy?HC!2lHmdKvdbSO?9?iNXUZFW`>+}F&&$G3ifu!^Y~YNAPb^D>$^~w) z5PjSCt!&wKwxNF-;%&ju16pO=1>#15I`c8nG}GlcxhP@gMrX5@I>`0s)XkY@X3HNY z)QT_RCd9O}PxSoXGz)NiQ!wgCm#&>hlG{15uXa;I^5zlm09XFNb{iFMenAi~adyLj z=a!r&rJ|~=q}m}C8CXx;dK(x`^b6o^>AlyouAcB(_|(xhNXEsj4pzBE+y*q!u!VpP zByJj}bTs{bx-NDdZMl9NLxzkFkePlYsfL*pzR~UnX6P6>y<_Q~LKc#l-t(~nv7r${N;Uh z>6L=XF?qFKJ26WX)v?uOG+=Wwlh%K)}SYtzTAHgyme1*Wm#ffLSJ+2YFtMY5blRp?v4N%cGS9A-| zI3MZ`?UOCXlT1xE8yr;)wP8e6Sk~T=P45XHLwWbVKt=vPm;84EaDLU_V@nryU~|zN zuR)Y+A0`z3w|grC!N9nP31&3xf$$Ms6aG224k zxy^K#Af9~A;b}ggj&Cn z%X09qoUSc#*~?h+nW}<{IBva@^>cUPC-zT1aN^tg2y~CPX6EFKuLjlP^zf!cPc6WE z*IMPo7{TsujaNi)R)@zth#BWTQ{bP#N<~p()D_gRQ0PM?U$F#&WY<(v-+>T~R#oam zJ=eoV-)xF(qBV=@_8T)?=H}EEF(d|(UuhGat+0$M8IY+L8XITt1dFhx;uw+s77$_a zmZM9l986Tgq!wQnvkQ6$@tL2Y_uEPI|0*crBXQMoi0q#|ETLWO`EMiqU*>TCe>vl9 zN3QS^GtEtY2P%5DR-E8WxX~q;RdPQy*+7(mk69m1w;aTkP=N_BU&SNB#ByOK4_>-u{>R>NNPt?1H95#$(4nZZrooPjCP3X@E3A zoVR;nZfsukR>N70-Q2FpUWd61Kh7y1z*tci^Io}37i7MrfrayhaKo88E3tlQs5TJ76y#vgPHdQMTG{jMs<>YV?XMg-?`Zg|CAn8yHcX?=IKifc_zWx;@xUSZVjH}XuQyeZwA$N1Ph z7h@?qdt6UaXa4>%TLrMA9EuX6ZN-5rTU68Vrd^%t=6wvBPfHNz$U>L%sU#r?c%2e#cR`n^k zDnE*|4_^<3*koJa(`rDoy_48X7>$ML4^To@|Eo8zTIpo_)$%Vf2Ba;Pgq44;JY(k< zOY6-&7VMDRcYcXf_E%`~v#Z!dPDA57RcjGg@0wy4YtNSh%Us}X0Y-;Qc6Jq7qG1w) zS|xC&AyXFoFC9Qs!sJ$Tf7zxzdWN&X2AEyZk6&bZ-?^(!{O~~P^ENKr<4jHm3#;Dm zxn#`7TDbb{cyU)v+sRO+l?}jZdo(whk2zYq>Zjk2zIA7CIP;{)7fkQXbNRnqtZZp5PT384Izn<9n%vX~FyS%Dq14El^(0%?9(=wH< zB7QYLw2V(N(;5ZMj7t8hELLx%$<(qxr3;fu6gZ^}*FfuOSt&NbMbOC-#e^1nQyy@t zGJQb(_F|+4-~Uze9v%|=nzm>nC61X!I^Lc4S*8UZ?MR(#o?IH1!%ocEEE7ZYWO%V; z7!7#4gkMB@*_8cXMw-2#dZB_1cBujJP6nEJzB#kIMsh&2_^OBfnU0qo5G7<#;OJjb z+~-_{$&G$ggP{wQJnX8%7bfPW+t+(${jLc5dQa!+^=ptTNLh``p^X-rD((u-i+1LS z!#p6}+_NS|7w7V&XX{h9N}tHcjt&*892r|#o>FW0W!&_KyoT^pH;dj7c~@D%g!*@ z2k&9F;AMEAUw+fC%%>W43ksMPrys!c|G<+&&{SNe|FKG)v;M8n^fBWW_-Cg9c8l+e z!rS0vt)(w-#ql*~^*g81)wvRezg-R;X2LY>tS*xrzPR1~R7P#d9BMMPY$W9DONbJ- zaYWM@r}c;8>hdj6Je3`i>9GK3dWM(H{G)f88sgY$<0T>vy@>?AUG zh2-@ACJ73c6D_baxrPzuhYU0UigRNXW!FA;$R!f z5eS`aNt^!Jr&B=5Zv7%5IoShyEpEQdw}5X&{%MX00DyL^nbon zHS^8P&CJC)yLMOCzSvz|)w|bP@4KGo`N?5WRw^)TDoJL@bs3s7YrJr_nH3T?g6v}9 zatEi8B!!iavySh#apF`VLe5L6u7ug|RvCf#g5>0Vs)EW=00~3_X>isqJ^G^ZqDL~S zzNb~6Lk8hV2Wr*=Ps~|Hv$z~aJ2I|gt`Ol7I1EYqcNfpky~~X5U#DAkkoBWFgQ1N| zK0lA>mV$>W49#~nzNcw2TH5 zFbFI?#6_3PkfcH)E6d~dD)E#;%xN}?WF+EuH3yNXl8IHNj&66`_e2GwQcG1r%cyM= zhB*)trOcVh)72dPEKEx;NCr$7sUkbrV%aQ9^eBtb_kU#II9XpO#_Fef{w#f`4v+x8 zD}76_fx`4C&)iW_1h!*^j^WZK$wjDXX{r8@o>$^R_%AOA`df1%@sc;V2>t9t<2BL0 zz6q33sY4}Qrc)aMi-}5O+*e<{*XD34TQ$4?G1h z*QqShe_VFNaR+q1Q{P!qM-SvY6ZvVMz@*H!H6&NCddmCbJ5@LXDt!ULAisBEkaYAg z{9mlNq5;i@g7E#9iv$@)+YV3cj*$#2YHouK1)?>+6f9~qky;kspeXHUEXdt5$oK!` zRTq3o)vg$4KWjGUlN=A*6gj!&xB5Gu74}_=;7)nGWZt-4TAaZAgV-0-kDsU!&yPt7 z8(R-9g5%enz9@bd^N4t%prkadtXEA1pV`aVy|_{HA)`};h=&rD+j!Xw4-Pd-_sBJw zjdoxfKq%yk5>Y86@(aJd`77FTt~InB*rNf3u9^pk@HFA`e9nXJb9i(vDpI!C`3dMQ zcVzw=7D>gq3!aswRS)!rLqWH(_MvHO0U?8`k1V-YsrXtt{X1h>!VYu|PIFy2M|Ldq z{wuIFTw2`u$yGuHTDRfD1tyR40ED3`sY)Ftt;o43nyO|2IoKakyzDX`5}*fBHQZ_J)}ZXE1_gH1#6>@6mV*IZ^jHB z&E-X<)<_YT=K4hZ6r2dh)rKcFBs7HZ{T$+LXyM?OBKd)+|6_}m2VsT>5##sTeww@y z_g>DQ|QsEHbfAyJk0TsF58ryeKiIgd$H5^zy@aB$i>wZUJ-IRp$%e z#jDq3=dmCu2Hy=l5qS}eK|zuH?t#~wOgNSU60%IpS6fQf=~PuNCEnoSg*;)*9UR){ z^;5%1x8ox#z?4&ZFfRhv%XWy#Iy{w?(N35tJY> zfmGqIH*n65ND%x)96=o6$~rgVuWXIg+GlW@VP3)AcuC&R`|8V6D_cg zLV3Mc5kvY|GO#)d_i?Pj7auLd#;S=Cv~XYj=U_Y!{qCr_FGoQul+{>d6Ntq2gk+6> zBKNd2g7!Yg!1T4pHj-x7@Ul4(LatFU(yq9{{2zFuan(O;Zn@*gdi!r7R`IYFF}7PXDQ^ngl6Zv<^LaxHO`WVL%|phIoPZACIB?1=y*~T~Y`^Vw z^zv%~-!N5lo&9N=QPMs0N?qV}NSW1C7JqZA;OHDi4b_ zj?gU!zQdAa`PfL7+)ru3BEM8#q7Qhm z*5B@%-~y2ve({C-PU4L~nainvG{(MXDe9=GddM-pZDruo+SzZY&B}LCGIYM{#DuMK z^t86Uy>OQP#8S3grfMG3#=S)DtgT06#)wnTjF*%I=;MA zMW|#7=oK$1&#E=H#H}$}81i~-m?c_WkXB1Upv(zyr`!9ia3(M%vHpLn+s10{B@D%0 z_G;&hnwrQ|hfm|A0G}mi1_=mg2(-ID2O5RH2M1ArlM?;u!b|#bW5Wtb-!K_}3Ib!1 zzByJgjsLycrtrK#C)Pw7fg70E)wjKc@5^|jeXeZuLqgxC%RuzhY+lQ0n+ z$+v)l(nE4-xI#la2dwAo$C`Vptet+*aMCe8As6jv8H7i# zx;Q#{66puvr5(rk1`y*G_v;=MAEt*pfo%&$pfdmtPE^X(avo-k8jgTP9jbGo;$Tft zG4&L8yg-=?dfxG*No_482=4|V?rn$JdjbiI6lQg=qB*21*`H1)Y*l}knaDpJynjBe zkG_?j>xw^HJm21J9?Jgh#cw$vLz(oU8`$(qZ}}d%G$BL6!tAU8G&~~L9^zFO*6`&H zxufy38M~@GAvf*UO%T(kY5!)8#<|tix^V;TsHCs2!*!M`#b4)I(?_Xg`6jJ-Zf|tA z^fN1M8re!)X+F~EHc^LQ;_HJxEwirhL}r4SPP|RMDbKom&w)EJF|@@ks!!%-KpRqs z88e!`Zq-`snx8w-F;CDQ(%R6viIyWKI{gbszn7v7ATFn-Vb$AlzKD}#XueZ>#Vs9e zUUKPMqaM9Ot*WOhnq7BTGo>$J*o{>rC$>;SXp@wCUF7{qIX;5@!+k2T@SRv9!TMIo>WyeSrl8oL(NL+G{k+4wHNEUE{s0UMrO0J zDoAHkg9KpU+aF^j3q+ltsVks&{BX~e-=DeoZBokXAA<9o;KS|BupO+`o2Ol+sWwU3 zlHoji*Q!m;8-yNV3m~^oj;QJ9yF>-ME{?5xC`utd8=gcp24?*w4+?k7uY`fAtGP}W}A3e%~pRmk7uD^O(2%L{~DNNMvs6`y&WiT zhq_CKGTmWnO?!-s7jJx0`pNhx5{)pyC~70i#w+!DRmf=DR_+|F!j$w(X_X4EtuY}T ze4E6|l6Aoaq)Gj0k$NphR@9XJg(c%;0hoD%G?V5?!mvJ{wNbbJ=FCL7@n?W(sdl}Q zz30lP+ zLIX>eJ$rt-I(^qR(B2MceV}qKV9*B7V-`WqoHNvR9Ffe89nlL3v(vnfz4S5(X5t*6 zwv;T@1qA4Y;2dgZ8J-kZj_ojwbCV~Ujj$^MJB#z z)eQ_UD~kq9INQ>L_vk}6P*&EpeYP|&0*s&(X^qf3(=t43`OdyoOYB)MnbcQu@Gk8R>$Xg&Bmww^I$hmCyJK*2M&vpCi10D0DLrJ@Jsp3)c zl#YSx=HVlzsL$^Mp*%d9bg=QUGLUu-0HJsA{1Yyj*bcI<;w2^Wev9(StvXnP)US)3~t>lO$R1|PJW+L+RV zEw5DBPRQLEGc~CQOT|37$Mbu21X)C!>*OD`xWNRFqWuJ*R3^03-l`ScysnK1r!Ws! zF_+u_#l<>aj7v8)wXp;hE=y3enZX&VA5KbO*gfnbCTA)BBX)0#46O1hT#@ey*L8#~ z=%P{Dn+&2zZf=vQzoS;Ms(!AUz`+-b{Xlz#OBJ-EmLjau#P+E<6zb*YuUe#_*mc)Z z?Uo!njW0oGNv2;|1=icOpPa+RwdZ%L7+vKZXaSce41;vBbn-}Iu+-;YS9`b7FSZWo zhMX^|Aa292`@&hh0TjFrPDBPJUH;x=Rw?bLVMc75F89i3g0ff;T^?$1dB^cw3-es* z*ZL4S9`mo&vivF?>wdU_-}0uNbb8pXu6M^afwp;qs>uQ{eyksLbE}>2kj7MFEb?&X zm%PgX(lHPt<(`<5EL~K$oQ6d93FR_Iggup3`|!~I+F7=Clb|S~4W0I7@~etI0>vDE zU6wy#Axrx69MqN$8_eOiB}JHFZXm`g{T;v|OURcOyg2ioz2)$HG_TL_Ebb0kf~cj5 zr8#|HZ^qzc^&9JWTNY^b`xuX)qpn)@4T+@$7x0k$fKsT)s^r^Paq(!em-6SJQZEZH zR}Ih41$f%@Y^K!$p@n8^tV|<7=@D*gllm2Wy>`$xe{-%SzGX=35T-Tx4_dSYHr7s-}PE+QT(p5{c$I_{;l_Jc2)cK~snb@()%;HnR6ZUbh) zX=`}W1dAL#R~U`8_J?qL9Kf1ME)5SY*^AmS>+`YsU$yM5m#3rYi*B`kHfCY`PM(=_ zmVKy4Xa8Ix3}3yUe~qa!&qiiH_DR6fMajrGy%+sn*1 zoF`d6Gcu!IJ7MJXUI#CAPB?VnXMo{~-?C*+wV~iQMdF3soe}v})IDLbs1`i+gr{9}>8dUFQCv?%Y#)#w~*#A-GitG?=~Sbyxa5M{Hr zJR4A^ol5o&g?16`?Ke%(@NT7c*%hqfj}#=0d*gBKQT^P`bnd7JTT-p2>iO;CmG5Ar zz@Q*O2?Tt~{lQOmQk7;I;?f9bmgJ>h7{43;_B@?OZRozI`1a=?LKDi%@a~7#&Yl|_ z6OZrD0u)N{U>kk>e+cHU(21Ux;rth|^EdwxT>lRKL#Vy%`uSml>K_6YO7gc0!Z7&E z{STqKJ{p<$G1UvcgMwNIUw;X_=sYP`TJKloSLoP$`whN#zKLJ_)^t*eYe#j@`VV11 zR^efzoGAa z+xFo)r2*4gB1>o)FJnZ*YrQtr&%~^rxH; zEA|?mJCbzheCv5Y>1=drHf95JObQuacSs@uK#^QRc3c3e(iQEc^L}HBqgp=1wlmnF z6xZTo!j?zWYHEe;6M8D-&g0-mk4}Yld5u@Vx610!n%NG{V4qlEFumpKQZbnhnt(Ru zLSm4N49$#OPKVFVr7m?`L<0Mt6{kG=`d8YiI10 za8b}Bs}I%AQ7$1%Rx_21MR6EfD^aV;FY147nylSwph_HXgJXaXe-8p)4{oBwx zWjdz@AH8~a*10E7KNm;rYk^x)TT%N@GWv9XnbFY4Zp!D*21`e9O&-mOOHd~Nq-*e6 z{QXxz3&z&tSuJf{#k;ZdrL#_hHcJ|q$tWy3ejFk_1d+tSk1K=CHLDS)h$}NLf(zpc z@_+Je_qu-=EG2U}`;)&HyVz;N!oW~{?T>lZlx6V+VwJN5NvW9~r|#%~D|gcgdhoV8 zJ5=hZZ)ssi2$BpLOEgcvXccrnb|>@R#&lAt?~R(p5&knGy{`5m&VQvMRCKJ*Yeu2xvZ><}9vKy7z;fN33_BVf<91k1u55 zt|98EJ)QK&K^-A4*;gMKk{%!V(PX@3(LTYX8t&2cMV8aEM2z3pWjwvRz`#G1@Xpz~ zyp?T;!d2r@>!QE^Uyf=N$(Cej-;tSR`xP-(v6& z{Ocz2?bk9AKOBNa*JA7Lbw1iy4SOvvqtLF9uCKms8Jc8ZA%YFi_OF1}?p>SXjYVUL z;&w}!+SH2d5>*A!o z<#zq*@YzyH2NfRUG^#??HrrRbm4`KSzTuK1SmTAh*Vj~gp^roqkXy<3o}+fd4|v5l zEE1X_lWg-?c`X0+4g@%J4_T?K9UQIVOR^iszh}%Xxn{$6yT1Ba4v5Pjo4sC>HLpI$ z$8H8-qm)`@pojk*WT-580w`rGdg0vpTq`u%$NMKMy3uz&Asqn}Kad6Xas6?w96bt>8e1DCJ;uWkv zm##x4GZD~L-FZDyGroRd5=VF=JH5^{gZQ^=xCPfJ{+&~`=OMSiuwybFA(xn^s{SZz zMQ24*e0HAg+lPmr@5GQrtF!9DgkEv@FaA(;qx=z@p3rMdf1lIpGizxeWYeK+AOMfS zuppx>)B;+hFa}3ff^fmt&igSFC>TE(qppXJ(^vBB@T;THSBT#c%%Ww zAA~IQv-z2|@ z8UI{?BF246P(QuGU=5@cw<@)y3rCOV9-u;YHzU3{Q`Vdy9kHPj48KOQY3_Im*Brb8M)~wm|L)q?tnNu z1NvE$1M_ThSVvMwvJY-Api*#)XW|{g(Uz$1_pgFmVWp`Vwx*lrMAH)rxA0w+|AlcqUOBAi{DjJs$$-hahPKbu zOgSqBVUZe>FP9J~u$b&sv8i)##uw&t)L%;OHRqcwT5MvuNh{AVk~OH%-R#%dw$PWR zVX~qteUL+DvxaCT+9G(-(0>BdO@#(oA4OtR8wQN!W553Cl2{?Dg$_phJ2PA$M^~_K z)1-Rv5?1*#AW?K6G{|}NqSnCiqsTglk>Oo^?!nO7a0b_8q@8sK%h95tDuU5W|8KP0H3wJxq=S+ik+`#bG{hO6!xPb%E+ezE6^LvR7>{BomT;zWETnu$@~3Xjy}FV&OS)>@z{l-Im-L5n&^H_Y z_gmkfr@jlF%AJgiY*=dc`fh(tTX(^|pf&gKx_DP><)r*qO6$(i*Y6Sk zVz^A5OL+^R5yTnf_h=cFu8t-=ta7t4y<(8O<{jmVJ})phHcn0`#E^ESGsb3I3=ONU zB&DS?(9vHxu2d3zXS%8)CbFZCZpD*Jx0DA=NCJ_V{Wq?T)@$ z>G>SJm{Tm%eIk=>rrrfUB{#JMxR^HF&OtfP#@w3YC9Q~kC0mua<)-C@t_+!hH7I6Q z3H8o#3xQ*)1dI1Yzfer!X~`Kb7@0bEJ=BmQZpXP@vd|M@XN^a{=qtMP}^i@J0<;f21^FIWY z_gHNR@je*y4C}OK$G@h{l+#w8v}GPQx{4#YnA&{V+VZ8P#kAjq?E5TL8Cy(p@zm<1 zCn+IiEEEPfnl?=na(;-fc4MP7;F{@d5o_|iw^jL6dKX5*#VMp=B7@a7%X>^awfMl~ zKuiAF*D1$*r##w#?Zk9Es_ZD?jm?UiPL-3EkKcoF8}&y1fA2-Q-{kFCKW_8)-dL{w zLs;uN2#gVPXL@GJ)p=gvcfNa}$@_pIba`YjkH>%wAQxs}Yt{;u^Ud@`ZNzPmO{{H5CEN2N>M-Z45fXE~W!A-S=!afS_%mHM#bz1gYhcHM97{2NcMSF+#cdH2n&^(`;lNm^}|tI-?F zrdA+^3MwTU&076h*3FB1#sbC^=%B7iANnCy7bSU0Y2_$FqPE~Q1K4)+gT^qXYA>6U zwwJK*S37;y>bH+is=};IO0^G&7_2{(NlxeV_>Fl_iv&DIz3iY)%tA`zrqYBe*6|(1 zuY`yn57QU6RxrP(bOv>UMYPX66I>@RY_5e0-FnnW+U*r{Qex4q8kX^rC(@#{^d}s$ z9}L(BSJlsRL?S9vk*hbq6)7}_ly&6`qwy`uUX=es2oD;5*uUk!Lp0s~aA;I_sU2(b z6>`=gomHPM>g!l*%&ftPfIiD-mop%E#6%mk6=F#=#$mS?&i^Z86oGU^R!k*OZT=*n zkv!JT-2?S*s_fo4E_^+!CInR42|l>hHqA1 zDL1~vQ@ayI6-jOrDn2ptI_f~@8;VHn9BpnS#v73Igap#CT0Zy@8HL2>;Gfr@@Mxv`xU45{MF3R z>h+{UmPhC;>%cq?^=24&X`O@)Eg<>I`?@3jorCgJ!$diZu3;P!DOG;NJR}lu9x923 zG%=~nNyDf)5!ktNHwmvpb>MX>id(a$MZUjg9?b6ezW8^RFqdZ3R+T0wj+K z1VdL>C4!nj?@H%(LFGpVS4NdAJ&9qp!~8nBtA?qbgf81met3xqQ+q~?MM-I(?##aL zf>BXlGxfyd4EATa!sP1_Pp>&>Xb#G zhodJk!Ov)J%5B2pMFZB`X&>zi!U~<_7JuWV@6eTlJ%X$JiD~7vwJ}9dk4}M49W5=n zfY-iq@Rpu=c7f+{K15}M^&2|3|38G@0OFVBO2LO3yUSa}V}BKw4mL}zT(g>OzMKo3cv zW{{44Zzz6VbM69ruGozzH%V({5hl;=;bkM#eiIN-PM)Suzx*{gJnahurspwhb{)y> zESZo+C$AnqfSi86z6gV%ad<=R9|Fdk_?z()=QHGiF{2;GgA^=YLL&kP_dLGjs_iC> zv4+j1${?9=Zr#%;`2z*%${H&^rRSP-v$G1XDGDhqP^h-E*eo5aPh(RhH!Rz(_+Il{ z{}1!$>&NV;H}$`xiF#d6w(($se`kgfT$)fwa%l61Ec8b%Y10M1M&+)##g7$OF$5kf zlSqDQUi;SLw;@fcTLELXqLNAh>9`)*W@-8AprHo6nP;sg$d=&r3u0bW_q@dUfn(x+ z3PY0n<;*Yr1jp=bCT`tQEqqB*Qg*9_- z8j!E-P@SA%`75o%7mI%w{naqj?$s}tH`IujTed5tfbbOg6O3UjhQcC;+bu&0ym5lQ zz3Q+MV`IYQ_nqp>^4`m-7WT9U%7n;7t1}Wg9=nHnwqKnNp&^Wks7-56Y2UVs zOP(**yx}N#mBYBc3Ts->1Q5~-rO~Kc+Y9mM5jpyJkP>#7`HdW zXyEA^T-=F0QE|uaPI@2tB=tvoCL{UQs=ZwyE^}?HyaLBU$+wZ5Gs^W7ZRK}LhL1{( z#kxHmcp1tTCq;>%vPh@D;#&v+YPo-ggE?hO)^^q-ldpa&zHW_`|ov!!c8jS-`Y6UsF;-r@QFPcox zg7a6gakTEFO8T{&A5g?GyXfR(gwi@qV{S8%s9W;0!qud}Q|j{e1!wXH{FnB3o;Dky zyey|i$#pbJ#dka4YOO6M|0PG7-K5MULGkWmj99@*(DiQ#o)KAXtwhCcI9RMaenav4 z@N#hqG);Os7nrKJ6VAlgZh@3&|zt>8d4Ts(J|^aw{v`q_1i24YC8R~jS^$686?EQ<F zq=>oI{6JBV5%l`qsQ#r0Q^x?)G*xUziPseLT2a&A$!p|XC-@1$8JNNEo;4}Qka zDA`L0wW;Q@;0>q_(^t+1r2%jDNoCqi=^jR0KP0GkY3#j*?|BF#DhSRSfC~NH(Si8V zH#0NP^Tqn*$Zd79SS2w8TLH69yr?XUUvA3Z<%&K+E#kJj*%1o&%{n$u`oy5k!kB^sVgtk>+> zL{FwU+$r99depgpwc64qSyqtM{P8uDI6?Qfu;31B7WL8QTyHk1dBc5fWVfcCGY6qO zF_-!xhwz{iLHJLg4(OWWX!8xWsVD^R`v8jp4H+WQkS9x;;*AwOb=53h^39xL;Wib` z=D4E5Xge^)!_d&(le{+}@TzZKqKeN^P3u47coa3*T1|?e1Q&H*Oa5JoktaToKtrgC zwPGwwo;FkZgt6#54z+EmI6m0{4io6DIVu9`L9tP-QN_{4{(;Znu>A5zKe^TuE_ikw z+X^INANv}?5%;3y-GGDJP@09+b1ymum z)4Znto0*;0v>XW`!b7uxP{FfZFl>IU zd_2-4UI=9YL~@|6fr2tkNqZqhb^|nhDScjcom7?{St&3Sq|aZ5_^T{%p5l5SEif4- z%-zc>8S&ffH>GahXj)9I&TEnnOSS}s`vA$MtGB;;m=iy5cN??Zg`AuCbttVZuUDFA zXwaiN-TWpcQ=+|d86dLYkVeCmBBgOon(2k4Dexjs>pR{l7>b4?wPXqD+gxKr>vA2_ zxgZAGLOx~rq9W@-l4O0A;oU^$#iIZ1?KPIVD);f66u+;^T_x`Psec~dy%X|0V&*kS z6b|fF2@jIT=LccYH{!e4Vvu5GA#PzO6qC7@2ik6AZM&Cq7 z!%2Fom2$rC^vDVE?`p;9{*yhFgm!Ugz;(3il=y^dVIO0HZ&AhPpJ~ih$1jOioHY4% zvM@o04L=cVA>QOq1T<{LW@u*_v7pqye3f!$+k;g$MT0vX2U_aZIMHF(dsaEn-;5iq z__hNzj5!{DZp^Z&?VE|wTVh#y)LxNb~;+ASvB z0{kV3mD0c{du0@fA`0ORAqB-JzREK`^)=V=UeTldR&kLq<1usWZH|6*yqa+uwk zleMl@zI{Z1cPcSaP5;Fa&d$BPVNRR^$`EqKgV7n8y~CxVYUYXhSu&Rl7Y<}nDtHQx zYxUi%)zx%`zCOgV=sCxhNmg+C)Bl><%j2ola#T}2-;fg$T<>v-=3+kYi-8`hNufoo z??E6|v?k-@z5Xn0%(n|EIXTHCaO9U~5F9_XRgvVj&;*XkDP52!RLr=?j7=CKSWNL7hG=A&`eDlJi? zQzj@|Cf100HOrFOQC&LxZ3KTqnAW|wTUk<0awA9E<>Yy@*M1zixj;xl_r~GjxPj_0 zQ0nUki>s^MQ?yL&BWA`QJaN+6a?w74OyUp6=gJmtH-3xbavSRvdl9=OX-be;J5mjw zv-5Br*70}iwEepEgs0M7a`I65-KH!t9X{&8|XMFUA=+3#hPmOZJVDy68PzG-XO9`%a5ocyCbbp{@jbR|n+o)fUF z=U6Nz=gY5f4RDV4Zr*8Fx4qKaL!;Bv+~9*=nGRAVyZL^mhU)h_hlF1}XzvI@*Sh9q zl)9!K z(IxqC*FOB7y{x!NYh8p#VSbd6>5j4Ka*O2frWhR1oYO0IFLUr2!qv_d9c2f)ZY#X) zKn!%MA*!iQjDn@kuPNVDr$Ecltq&rUfB0#hQI*Q$*~)Xv5K0@S2187uRppEY0JO28 z4PIEVHYEqP3jcP8@s~uID&0C#&7f!}^$fj%@$OwOu(tGoZe_8{28s9x3J$so7te`#lY!li7sNkc`n{bDz7pBmxQ z<$ia*#i=zwM__aH&ajoso>nStaPq^66I<%3!vT^#9^l%V$1X8@z2sI z90`# zmOX6kz}#-7OTSHzHyG5aPq!nfl%zrqnf=RyqLl3ME3#6uwwz?`DonB42oc6VHO1D) zpgEIMxehxi`0k@Ow|jnRY0Eh*RAyvpR?+gwP@7uYrDDR{erS+aZza-Ce(`O}+p&f) z9j%c(SNK9REohcP_L|?pab@IoE7`R=H{ICoRhI2TMaGA*BZO5si3OGR*tpV{47*zC)}yO7^QIp9|6ZEiJ7B44NBE4{9{TZ<4!ui2ov{wi8CI>mjDu*6RknTURJ)Ng^0 zdS0$}mFbq)=KE&jO~mh6Q)!ge1ZBJD1o0eMcg`(?L^oxiZS)c>(eKEFc)N`#q{lky z$d-54ir5J>L&^^1|Nk`{t=X3@I~bOqZ+G5pefVQs2=i;VKc6bPF<04yRF3f^6>8@5!)*Mst1`k?BX?HU()4uN+-_6+?z%7LiDr)B&!8M~czC_p~s7wm^vwfn!QUe%? zC3tPmhrd&Am`0uEwWo{N50rU=PiwdMEf6datN0Pc=+1G--lBA}&Ns+L8yVR-)NV*v+IdR46y%UnJR(ZA9d za`(p_orWA<*9^$*duPFs!S2U)X4K3lXgLVyN0r`&NBPCxD+fJjp;F9LsiB^MnFO8P z!sbh6>?x$ufUy#hg?Q6y&k7lLoNKoD{T<%GL9Og^S`Ku(Qj{xP%`%`Ft~yyToba+% z$%Di!W#%NjfcdtN1R2SafgBC%e1zUpo*bKGJ&w-WavhgDTGvNgWuH7s5fjEtDJu5a z2yv`O^2*Ou?;Oy~x&X+n*cp><)a%OCb`^IjR%a1a&T(eY&Nf0mDbMCtcg4ybj_T6J zXfcFnLL;^|g}uKSeCTp={BFC_;@Ra!M`e+$1yifZ5l~y*Ehxs=2I`oOZCh$dlAy(S zXqc02#!XUEWIif8cX(y2hF08}xi--f5*<{jZyKkuhMO1d0}ztvR_kEjsy|nJD^WW<`_rM#n%vH`S$2P7~=m6 zzUhDS)kqSzSFtB~>Ec+d8o#GCt%OFa+*ascW>$5u1^;&P$k3Z-u7^MzPwI&O_$&XP zxN2$2+4-bOtH~Sz7B}>&%y*ia<)sMJ%*;$FKj3N=Q~Vsb;|=$8PZ0b6_2w3<^W%wZ zzFMPl^{9z#3xMH1B`Sfk8Jy~Yj?4+7$3Zyxg4Hd}MJ5iS)<6gjl79D}1EnA+=mCDB zVrO9CejVaoLM86QD#T=^{QQNA?55y*?+XKJSB`~Ln$v0yzSrV_);pnKvVuw!ocmxc zCPk|2Adiu+)c@P7z5j3SvaIqy{#K(cKW1&}RnA)0L_*YDToNln;_^BTx}0)%GkFYJ zC8!zqPnSUjlc791ez*OYs(NM?o96PrJHwA!qxXuBYeCltq?9K*N~aZrRj|jHZ4bF^ z)F;p8%IbYGF$BDvA4$V577KDl8r{a7whVz~gbVgRYXRq2mVhdA$Bn|zEy=Sg#*|6> zbp>T{dQUWOtEH0XzuI)-7r%|H&74*+>yuy+^d*?K=`z|yT29xgvTt1)x&>J(WmlDM zueA(nex2*;Tixt&c{rKcXdxC{HMM7a?#ZW}#HSq6R+f|?faMP+Ejgk7_>yERbEE$Y zLwEj09tD$KfcDa|#tC9^Og^>wiS9t4SQyf@J?)iAyhDP9dF|;AeKV`$dMHLd&tJrI zcCoukh2S6VbpCi*_7$7sZPtk2n3H0!haX0w?dGKizk4}?#i@SjZ|qDbG|lC!`E~v+ zybZi+DJ5Mp!&}ULTbGO0Fc3(5&!_KZFsMeKc7vqhD=?YW!7}_YES9I<2y=DVCzBnz zM3%YMU_b%e9xQaYE3oB3GDu_WNCXL*b;^zA zxt~x661gstw%<22y*;0$KrU><`hsQORTx9=^Xu1c-|Bv0Z4!Uy!FOUV-@WDsEF!0N z5*J!L0Mto|zutqsFK5Z04^x*#gd`k4;XTXnm~1UQA-+rej}j1wM4pRS#u@KzyiXOc zN3!)~Zj%&Kj{Pfv3fH%+$ZscE8X}W5>}8*x_)Yo43j$0#1ghMv>m2zk#R<}yW=nG< zhM}(X<&kYZ_0QBb!g{AA+Nu`Ytk(#d5vJRX^SdU$i+q!x7vTARnsb>c4)0UfAZefT zWb5;UOX6nkn?mLf#;&H=&G{q9R(I_i2B?1Qxz2>3-c)m1S0LY}I4p?7q?l>APSDY8 zj!3aXV-wRY7GW$MF?#*tma6iPXyuE*WXAGD0Di)|L4@f~#AqPBH;3P-|G?4g{#7a^ z9uj|67Ag0$b#n!4wV5xhqbY3?z|l_ql|?la(%LU?#mymkjM*jKP95^~@$xi)A+aCt z`jHq>Go;}*Noi?mKLiAnjL7%|1mDPmFP*0U5Eg0TdZ%vRyyRt#ewS@rety5hW{{Sq zuL-zMH0S}2E3tgAcEU1eQbi3-l=-0va?ztwi#D4a9T}=!(p&TGxOJ==@gP_Htgf;9 zDNpr~2N~h8i{Aq|Xtwyx;?D#`iR&DnSWrCafN4xKB>f9-_9|_X%9Kb1B>4w6*T8c( z-xk7TSIn*YC>q7@AKLNzze;HIIyizd&^P9X$_v`V5TxJGz`we*NRWF!;gm$15aDU4 znphYXknT-e#ldGHwvFFEUl3&5kS~3)(-RIrM0d4rna_q($r!GDk_A$3PTcoXyT%HDI@b z2+(^|ffX6okpq4i4hT3z6V@14ZU`dnuC$o>t->&08$VB~9LUnWl$;no*}vlR zHNN`5@tv!=q1j2r3rVu*KA)mp*$g4VyFjI z{u^D;#EL2EpA*@Zz}ew|#^&j?>oiMRCiR7LZzYF%I_$a~TdmB<(gsx0wkgp+kTZkP zbP%9I12`YK>{7EJKz61pQ^eG&pc@+;`!$|zYid{j$2|@fMx5acX-;shG8Ung?1%P- zdSQ3cDfd z+E-iudH2lzQS15>`66o)XV|y*oMHPer(`JdgBJ9kwfI}qn2#3A&HBtX5#))j<{7R$ z+YQAV++8!70|UBsuz+Ry)csa`oXx+Z?wAlr&z=66@?2%Xo=2~JW-dVu%&3T(g}5fS zA86(2o|E{uKp&C|poI1Jqcb};)i*K`-KJ-Hmzy@Ua82zOQs}|SiH%uJ^Oj<6(kZmz z^(7e8=&|+9@dL-AoudLhyT=&cMHwiCBfGzVh8ldm_pwYQlv>(9#=ko8BKo^er}*A& zi_T3EV)|;)G^8YW@-GmKG~C)AbAXLk!?2)?qCm9uWeh^vhFn=&02vDv`95@Mhb?B3 zO@Z{U7MAB{f2`xTr~WjrdK)CKHj(G$#k(@ z*I4SsmLaJYnoA`2Si%QYb8{1nVlxolBHWs4jI+E6R)vKTiiv3W+bAj(Cao!`lglEX zu``6X+;r19Eh7zH_5U@yD*0=jaGR9eLs)XI`?*Yy?^lRFRNUs3vjqs;L9mgx;PbcOK7x?vB zUT0rJ0z4rIa@5fcmtCLfK@FMi)XkQlElzgp4^#CtQZTYqDBRm`Y{ts+b3Wo>?;mR5m5Ez^h)3L~9eBC*+uHCD7rbgJSgQX7R>c{~^!Tq8f)T9A6DDOuC)vX$S zyGq!5q<{^XuEl4vAgK*CI@BCu$jsiRfj^xSg;80tbo1W%zWN|i(a?DXEE$2&`B#EX zZ+GS6`K-Rp4|xw;lf3m-aoR5g-cNhI-nVKznm{2D~MqmR8VC}HkgfOJfP>+kg5`crmg#n5s$I< z(w-OgW?k&`QWT$H4rM{ZR4C7F^Xzk*zzjo1vzt4$8#~=(W3j(O%B+5l*=*MNC%ld! z=83$dslKdUpDTWYWtGMOa_z!V&5DI-@wI&!EmC`Vms=N;)R5TQMGM-jL6jfW%$8fF zG?HCPY3(gmG-)^q2*E&=5-%K-)p_0o0Jqq5M;ZNV2c`9#nRdrzQY=Qw^Tk)n*@z5o zLPzKXNw@QosajFTh4O(&S6G;r{4n-eJLh=C^0s)8UKm2mFYjXwZD|H5p-HD%7xA^L zDmEsKHh}WJMnbsd->uwVqP0KJbbw8RKEM7~ej_pY0n{;DenWy)?aJR*(Z0B3x~^v{ z`p@6A+!{;Y5m=}0zIIq&75*|Z{kLE8p(6?8!Z9^zhDdOih*ds_=msR_DDLLh8Cgsx zJu5vfj`O{}dP1kvRa>>HUKID}b_xpXwG?+AI5vauXP815 zIgW4*wLPJ{3BCm~6+IR2x8+w7pl9CQ|4;_3ymk-xCT3h_TO(VxwuZloS=)_|c{Ig; zT%T>O(Y;wt&{zNlZ!QTXnv88&(JvS?vjQltbPCRO1cON^ekQ+Lw+Y?Nh+ugFkoF&L^E0eC~hP{ID#QIS8ulBVZ;N5vpN%8St~ z&x$>&a;F#8cxkdk>-CP-os22Oh`7z=W2{Wp>aqf9Zhp1HNKFpGnS%qJn^(XE1?MW0 zOl8?CepyWXkM_TCDhDV4|IQIFUN$LzTp)r#0qNZ2?O&zl4NZZdTb9~bmpEsW;PhR~ z%)U75wQy`nT}zKxOLpF#x*7yHx(7=%SQ1j+na#ZqvSK~Dx{PfNMv*Gh1S}rzl2#&6 z6%Idsg+0(=V9?LuMZi^k--@}qBTyqrD-3MntQaf7|8FK${y!X-*))mZAH3|{9oYX5 z<&4usf(%Yi`J}87aD9n!Bku3Ff0#0K@*wL<_wn)U>^~Ic_{;Fao^ah^>@4*&Y)T)G z$sWVgkK|Y*Qg6?=|3k5m@CVDM5zAlW03@}4@fo?DIQ*zIteM{+;~eod z3z3!aGAR|Sw&e1E8e*jYk#G+PArIxp^xxrg7naQE3WO#J@J7aNmbbYxjWjq=;@}3Z zwDlAnm$$cEbyO*24NjpSTBQ)t3;GC<)?n@Zg5A|yWysuGRg64gcRJHQiMZU#W!}>X zLV_oQ@UA5lnL(&fEVR!;U01JTP#f-EWsJQ|@k+wYHlqi!;CsAhS3kZ8w@bS5@PyC1 zCBWO$_-7;err1~7)+7?6*p!fddW;Y&kZLOz?+P8O3ODMy;yvD zQXkmjR#?zVu%@FL6)-irOd&x`gVaU|m$AA7{>Y5DIxKxp{r386o;W*iM|k;`MAwaL z3_OX}>$H>A_NcWkv9{r9Z=)q4>!_OCjzrhlx|D`o4$TC?j!!3`M`~mU?JpVYPBhQX zb>0RBFm|SlZP-q(XWw2X!&r}HGPK?FTrD!yONU= zshSXCmZmgRYln$#F2BMf#Xi|ZkjQ~IXKuD<@#o`6Q@$kgd&Q+R1z(`P7zQtU@N!+P zP^k`ba}Qnx1_%uo-WmR!nHSd;c4%o+5KLB8822;lN{ahrtfTJtL$^Roy;h%9m zdNQov{IqiEKYP9WPo`=4Q9*t$UYf6{o&4VB!bznsDNSW}VF#KKsz@V6aXCw}7Xydf zr5fUNd-z84$Y%swPekKcC!xMtN;p-8n3@xhu}zGLUBsh+q!Uy#V$SrcfH0k z6!-7<#Zc_PohmHt?FHw@%J!=bHPv$yyTS4E{G6yNBf5Z?N%Zr_yQYPg2!TE0!om#i zO_@RVUu9sB^^2U)D?!a8xAd-~e&X-j6XmHJ)QlS;9dYA7MT@Db%l_!lS;xnA0?MGK z3Q@<fx61~GcCcfwb zWE%9cu8uVbouqHC^~{5-S=I&~xJ3d|La>sxh|Bp}G;Mvl-9*9L5U41*f8ofbPj%_s zj@){UY;=zvV~LYXvO;PA!TW;H6F!ovD(kp{mY@*?T);&%EzsS02kEKYkM6_wmFOTT zN=Bb^E{xIgTyLVuu2RVbi;yk*-yjXd~6!g)I#?6gRX}4Gn<=JFaBMpIK(3!HRzG z*?+mn4pIky{~D&9HP7%m_-ideb@A1IC~cJcbVJA1-65OhOOT(*Z5{InMUq(iyd|A3 zUkL)_;;J_;ah7PJCtEWcHVCeb$$PK|XibW>WBA8p)=$&Ow8L;TfSeKxaBVix>7~8c zRyVo-qvuh~`l^hZY&A*n&Sp+DZj@%;(`{LVcpkSxFFD)8K>rc7S@1Ysb>V&dbZj=O zwFYcWlo`)2aD8E6Rl*ctip3B=cQ9-v&XavTy?_Zk@qfPJb#QazwP$92FM}yDOyED5 z|13`;@0TGN)1vg#k4GKl}uM z^S=XG)q_Cg4-MpJnMeG;MJUH;X$pzW8srqTH)qQ=c_i^*oyzv7l_ESQ!<`9^HQWfM zG_0Q-XF7RaGc}DCJK0(Hw$8MP@y_{t+mV}zydL^*w2i^1b2x}iQ?~z5R?p=~8ruD- z4KRP{v84sjzw?^@jNs9`^+c}E$bE4rhe14m63KXkGjkzgAy|hEFep+MSDESK2_68` z{x+o?kGM`Cgb--d@h4`5Z+ymLWmm=Kq_FJ}PzNmzzR3-uc05o6^POpNV8beF($SZlSFhQ{gyu%OziEYD!Apc`vA!Qi%pxuXV#? zWfip>l-}u6kj%rI-0KYNeR&V5O>1M{`+V47q1!r_9BYDQhqkIS96(hsCh2~|>8hwE z>TyYK>{k}J*wzB4kpQD-!Ei=hLAXcWM@FbMc5zhe6k&W`PWA~f8xu6`$Hzb%Np$6b zwO42GA@eJPry1n_d+W4=PiZZBi7*KkvsxUH-;w&?40qC3#S-t!dstIGOD95@M+MXj zu8&E}FINlTibU63ErF~ro42lS5=)N7TNDsO{EO5)p60-%X)`CqA3WW>5ENJ~+6>u; zsgPqodxb8s=8YMybrEysh-zag+4xwKJKp&6?IT43=?T)4>;l&NbAt3%*YAVu@dE_2 zPt;jUTz-f@Y0P7aiu!JD_^gsWiKr|)x|>A6U2*tK3Mr{^Qj>-oZ0MQzFhCu^$grjv zd=FQsL%~K@ir?_0iv6{WesVRG{(X{Rc8!GNws8vfv3m5fO-^#n z0wy7k=4SbIm>PHaNSdYnFrfxwvadtF?$TP=MRqF3fK(2p{MC%1Mf zIT-yadneu7M|)BWO<*K?5>?u#WmmUUSxWOB&c_e|y|d)UgOWnzlZhr#RV~@Ra(qm4 zp$xiX*}ny7{tb|OWpLq7X-;ms-MbLMI>==E^%4sB2De*YqdYEYbniJZVt>0 z6iNHiuFNTALi74kAu(;iqj_|-Zg^ed7r|564~l>HFr>e}Ya_Ajz9qx#dR@9+l7&<8 z1#Q9Ui7<$mWA8ivSVT}y_}o>!c#i8*8j{X^V|t|asUR`JpQC)tMbW~xzN|UIf#cV- zj#KFI(I=WS84FV8H*6D%g%H2RNM$w8Z~?{&zuW|m9FFS6QweeAKa6qq&; z*{{gSjfqg(WxnZ^eA^;<7jxf(%X^W{M%Y!ZAu;+-ic8krC$_Z3TYyKIR@GZzSmg*`}FY|>ae2AscJGB9=x)BO(xtu58A zAi$JPIEN~6_kvE4K27{sAmfK!?3pyKuOnk){fBf6%#gL>K+`{ar8BV2_v|#UujagF z83#Tb_lz;eDto~dcQ$Bj<;T{!p^IXpAI<3X@XlN@l%DhvCHsp{Q!_N}lI|BTXtJq^7 z4PAb3BR34)T3z)v-Xr&;(J5jMgVu?fNr~p?f2xpkhT{04mMLk-=RoY;Dr+2xr z+;0i##GMc|kZ4V?oE5IpA1@O99kzJ1)1gqLaz2s}N^xQ`zt%>shf%X2(}~BT-0Ay= z%^&#`^ZX`m-Pgqhw-N*}g@>e8JFUI^H(UA*^%&&O{niUptz#N>HWKx~BsLx#^%0no zBtcDAZ#Kot_m2PPs_&$tI8j@kO2&o4mNlJ?&98ELE1(`Ke-TpO=9CSl&P8lCT>i{OI&l_IKb zG41gg`8k-5FF}PSHT5NVBVUF*$%P)INxkCC$^?cz@a)NnMU;Pg1txgK*?Y?6dSEk< zyrM>B0Z_2cY=wK9`OJ}-siT*ts~4#@%5jv@(woA4oVMr6YP-KS;_TdBODgw4 z%yycM*pb;8~GkDK54uW-7`KO}4B_`QyeEVbFQ$ zp5g|Ka|^~|$bfIQe6Z=F%S|4zNnvU1tnri+ZO=VUwpv>XgwyPuw7QqUEZBbJ|eDUBw43XmSB zs%bz`vrU@vBPjKd68|w~xp>CVutxk%0Lwgv>wQ^y6m>xDIHXANY6n_byP*t5ol`4O z`!))CZf1+tRT+Cjm!cf;P&Ddfo$!J8nq87<<)-&s zy6n94u1d1{N)~4*uRl`*zeu`R30X~w-X!vdM}l^h*{PVJphI6C({Fz_PY`Z?W7@fP za%KIsFZaS_`Jd}^{->gy|8?WGM|?&-WkeU$sC zd18R6vNy6n59)Oh6hxA-RaE=+K)vIgOMn$mz3$&8HNZxWrXv zMMWL*FwC2D6QDWS^tDaE%~pdmR^P+ctkYGb!QJgW+y_RZeJT-^7bw9`rpmG@cOcxL z_*SiA@%)siC{<1moWRGq)z;T}*cZ`hKlZcnIe^w_9=~24r#tM;yJqRevC**sY!j+- zzrj)8&{w<^1zanZT;N09m22ak7h!reeZ=lnxwXf&Tx9pGm6o5US6#hle3x-2A=^r| zLAl0aQ689{#!O-H&Pk)^EQf8o@2VzbicR@<>}flHX17xplI8HthuprbecP*}Ez&$X z<3n#sMZtKpxgqdGS9?YA8D|Gp*j_vkpOKr8nj_nQ!o${qsY#VO!&|m|%a}P{=DCW( zE4{Y@Z>5TzKKC+`rd47(-Bv-lj-s0)&_cknq@nylG3j|ruz)Qq~x=$mbz&ZGiQPJx16_v+Z*%Wln*T~ z2P>^scq}5CaiQL)i*JFeK00d*lsv57# zE-wM~h;C8c@m)tpQmegAXP(!1! z)vLL;4jo_Br{vY1u_`?fNWh2#+V7O{)r5l*2*`qAVB+$tKtM>XnV{dYZoye`TXiyU z1LV|Yr{G1wNUop*0AjsB7qAMOj>O!-OMyaZx&A9Tdx5l4GL3gvZ_IbB9X+N#ob2uK zHP>7)i;Wtnh*+e^zKoZh`5q=mC2yFK;tIk&`dF45X1*dGdpTi%7N~9AdQD3Dj0u+) zorv3)i7M`bCPl8OnwW5|Xs)anuNSLC1S$#^v2{x8P}rQ**Pe^@Kb|GE)`2zqnL4%E zqmcE-+_VsbLYK-BFh@=79dW}Ipq|?PLDfwBRI!DrEQ0g_DzD+7*>oFu^XKYBG2%es zi}9UTPR(Uc{%~q7&sNDW6e9S}ZX%CP2-X|`+D#3XheBvQ~gfl9B{|00C3^S}b{f<^-GfrTrF#3nr zS(NW9LDs#$Grv5gr7jW{>K3|jnPOe|ZxYOM>dF1EW5KZBoy`|9jd4NRKSB%_PJhMx z0BAGH(C!hv5_HM9CN|D+akZ`MxLiBTZ!foh#4Wi_*`SFKztzv}nI2xVnYK;*nibYQ z1UI80=|gN7IO|kTiwL?8Y&zS#v`gllOC4kT+bPM1i7YK5Ut)hXb!`TEnqQ=JTIys? zdE(mSi!ebx^!{2_7cR8SlT3GOs;r3hxlDsvQnSoZH)IHzOC0ZP-u{S9C8WcTwfm9i zI_o}br`q9BJa*~OT*hiEp!A*WhK}pzfa;%AU6accKtCJm!NtHC8pC)mm@Sn*dBqjK z-h4(bo%>(HtETLekfZq;T%*HSH9s|qSIRoRC zB9d@pWP*ju21Qmf0>|w7%H@g$sov5f+s1vucAqfVDO)M%i&yB7%AV3B7q3iwkJAJ(l2N@UtryLI<0N0KYvY_Jv*V1NXuzY?ddzz_c|MPHsAJ# zVPeayu6TVzC=ZE%!5kRl@1jh{R3MztNdL?PzoltbtHMK-b810e=uHl-2YVB9ti)>U zYQFQ`d)L7H`vOO=P37xe8aj~QKGDIHSE+AL`Io~Jaf`J#DLq zpT&;&UO1@$to6ow*>QLGt?>U)=yeXbn;hBO2K!l)r#ZU5!!0OU23TpDlDQW%hRI(Y zC|;vT^f4*C;bB@FqxSj(+G~3_F}SIna=A>g0y5(%m_5rqGkSl*?szvc zW3&YFHria_{c&70qY(`tCz=mka$Yi)D2`?8NKI&*7*{i>oMG0k(-2RKmj{StMF$oA za9P#pJ3#l(;hWQ#l_DMaH|sKOrUQ$Xiu!Ktu^m&IV&BrT##nMbb@)12tML_=KpeL= z|Go+8<7&x|L)K%>(-9c~Jw3)Wow_^UJIN)`EwaAX_pgTS2st9#l>?TY@WPwlz(+0R zhRjvkBey~W*J?Ib0h3SUd}+RG6#mp06c}X~Ni{kS6p#Dw7vy8j@oXo^s@OMYFZ|oq zCG4H0?OdKgbZCI$G@xJl?~i;dZjl&*f=f@Aa-pWGdM=k$9r4fr#UV`I_kdy{VT2yJ zRKbfS$3W!rxZANiqI~V*x{mXwVAuX)iI3G+Lr^-GGmShLRJT^jK;#O|()TldkU)2w zCtBeQucMb4tYt)268u4n#qXFJ_A$6KWSu#@>-(`yt4<*CqdvhYp1G@Cu1Jvko}VZY zyPWLFV*yc(w{2WQRmv#=WZ2fHx%KCGP0}yc$;j3Gzxh z$;*j#)2!YN9*V0Yy~8xeo zGxSUFEz!eD6F#o<=7~AulRf%eLHV+smu4vt^Z%iE{{6P$^_3okYk6!46kX;;UTh>B z73r7h{$Edk_-*T6%L+SY;Qq=f&R42VuR|%9X?@@<)b?vw;#cV zEplo4^!&1yVt*n3kY-()_!+BY1{0s^#!LMw&RU7u9mh%y4Jr+s!9Wk*JuPlDfpQ%D-^t$Z3 zcgr=%+5`Y!kOwVIJbKWDIC!!S&n&6EFCW2LEIBD(V-y!n*71B$d;Q0m#`{lftL@v* zGVpEo_3lCwIk7UYFJ-K)(=JW)&Mgk9WmUT{wD#E4tjz0FBg-!WLZOw*GRuotS!NG6 zqxd%ylLNrx&{fh6oKd|6cQ*Tdh6R$Y0UNwzR$dA)Yu2|_<~R?4FjP%hn7eiIH15mf zP}$}`LwYagMfgTDCJ; z=2V+0<{ryw;C3T@`QIBuGasiPeA?3l(RCX3E=t##=!iFs?HY^foirPk+s4IlId=ld z8c`(*Nz`I4P2WxURT8kCtO*NefBSF)@P3g8$^=(bls3%G0%(mD*QN)*d!`Es@uuIt z^&-mLr57+U5n@e9K&8H9&-SzU2$(t2CD)_qw$|44tc?DRzKp&P4~b7C?rN%0l!s#~ z2XZ<3ZH_Ie&`T&6$AD=WB`#xE)~62e5q%5NOb#Xs^g4PR;P5+W0=~>0FxL|7==pFT zMkGMN(4gNQBbV0P4$c^%XIxwFo3;J%NBVe`%wO}vhh@8%iwBdGmm=a50tURtdb&W; z;#yM6Fr-#%s=ilB#VL&YBPsM5LZ5m$`J$$;oc3WWJxCiJQcaPE4kOuYxP6a zSaY8{;R2v0r0DW^SmUx~f3wfY5G9>U9I2d_O2qzO(A%BG&k5D8jCc{{d-#n`$;9*D zEqPideyOI*#&2P>(1~zqD|h%HhHYY4pK47*qI=?fn&io2=eoGv65!xJi1+pvj*RJx`tPh)RnQEIX|oshXpOMRWq#Y-Hu1In4v=g#ew zJs}DTk{*IxRPEyyJ9UH(ZnQ^h(=_W(k#_do!+mWVzhD$SJp**5@H*q-mwOfg=WLwnKw>&wU}GuqbSTJd=)*wY4lzbLcdoTELvA?V1&7|appsCUmGK&xmVu57`I!rsfX=k~Cn0Xj-ne;> zw|SMDF5wy0`yvpgPp%^qN|MUs5*AEDs?HRN#^Un3m!1>c%bk_ zEVHDT@Gh$CKiU)&!x;K86rWSMRG%a{|3m4z-5jY$ z6;tA!+Bh0+rc}Oq0nkqCL&N(-(I(`f;Y|5!iH1zPCRNS0*X*`hu^9%E^>m_^Gt%^q zP{byh1+)1bt!i_hfO#Xu26>-=vEN$l*BUs7FB3U=EAcYI&{&%#!O8s}0W(ltzTR3} zfwVMjDn7xjuz9PS%ekbcb6H~KR3zq1V+_%AOD?QY?nHJY@VR%}G%r^`pf2z*&}g)C z24yW>NQ`H8jiO{-9AS`q#EnjuPPG~3abA+@Kw$Oo35O6Of0C*}g%{ZE0s+i=YhKE#cqSTv}aYPJ1|3xL3VX016OmfVyu{@kk)V@O?8HL zY&A7EB`>zv6m`1Zjr%WOKyqDSyQX(}eY2Up{c!|tSer>GOuY+|L81Gw>5@Q=CN#dP zfN#p14F@aPu7}*e6`z1VtLqv9$XeQQKdQ@nsH#lHGnSJ(g#j0R2nmxTl(UcflvxCp z1S0*0Y3LN+-DE`{oS=(s$h`zosUa&0I+=Cv5cnt{8cDRqR- z=%r}@-WH{LGOQSkq$BMxj@By4g&$Kajv6gXy$L~xRz(M1F!KaG+qG(7$lwJn{rpGW z9vDoj_7sPx^>G+7se)koXS@@!6)UT!2%G9_vHF&QRk^7%Ua*4Ww^x< zQnq2=0c9@hG>|hut;lEQ@dk3%!m`g54VQJKZTm!9yI%sN7Wo$D70=-lCTZ$GvZf(p zb5;4rO3uU2$uG0xJ>h?Ra$(n{5k8~Gy>${(ZdANe6?g4Fx^>(=n_$)PnyvoVcfp1p2EE=A>5iLzQ#oZ7|p z=GNz!C&>Lc)Dt0Xa*es}8n+ZIF$a9&T+C|A-7xXA=Jwwpy_jol;i@f3wylw*3p4GF zndGOq<`QTr@lcf4F;i5bShW*@sHV?250hvOknhjCBReE5_gK6v=cy}t1uxIDvm?jI zS=7mDoWW_|GUUhC0i0FipK>Wu?(msM)`nb$j`@!>b6%u$cp_ z4`Q&*d!lbA_>wm{)DF^oK5uW^z@y0rd8_bs)Q^2}a6|Lj_SBGME6?Ou>+aTXRy5;l zdu(6WDyo@|UxmX{K6p)cM-tnJJLR*fk+`Z0`5cVyt_7%CwkYJyLXd~tLJE$B%a)f{ zc>2_;qdZ0SRXy^Dj#I~$bX+kw9dW_)Hd-%i879y6+SCqX`%1ouDx_Dd!7M9}s00uO ztE4r-MT2W=_%dZ@S2lv0+Bo;@9Eh)&`0d>(RxXZsM~ea&@tw)NC7tqBB*F#Cau<6? z;wqwCr9p-K=;1fYS7VR-_$;XD1kyhC_FeDjV5W$xH=At$?n?er#{*r*E?mWHpT0@k z$Bw?pBsHkQEFc9us=yOVwL+v}@F0GKeHM#vTvU;Jn-v4e?eNE)K=PqsSBVc*e#cI`0%W%RSc*SIDszue$ai?=HG2U9)w4mH>clBozbnGNI+z4aSWE}Avh$lXNEi*&8ksSzAy!Hp$CWgmUdM=X zwmND9iM8d^)Xun)r?M+KbcyAc7{kidWvNhxL3poq$-ZH5et!QR4Na(HJ-Wh&{sccJ z#kxk6*4oS9@t;A@yq>|*6;V}Dd1Xaic|AEX4#W__yK548`m?JAy#D9brpbZIp0QC7FSAOW02ieFSyv(b(r#zwOl(P$>+v$7|$9(V}Jv^|JO zNN_MnU&U&Re7D!tP;h6D=~3DcM=U5D^!9c5N(_WAuJ~kq^rxHg>9}hct+=kp)~coQigPLxPh8jQ|lo@&4 z6mUUgn>daJlLFaT{;p&xA5+C^}>=cL!WcZcU0#C_pVP8rp0lw%H7#aEz3;=k;$ zCK8Y{%Ti#=HK7xUC~w-VeS#z~ei25UAvKA+Ru@s-$6L(Xv*_PJT08y*3hWUnB`N4F zd10i;kv3AN*;F@;P@A*MA}6?g#qY^DyR7@`JB%x?q*4MGa~5<&JzVfzdn{kT5ioF6 zYDM*X>8!=Z3vPCtlGh8@EMIUhktuHB;YH}$9Jkb!F(JdABNEmysIIO$*uBYgOUbsw zoQt(>)5H+X%V%wiR~5j_jG}kv%$M*26@d7D20>|Em-eY_^Wg`I>>WBAmNqub1#Ilf&-KT=0z8M5s7nr`haqE);q>N}2 z`Z&SO`ApshFPyNvQNdpuVU_6A*x2C;T~3HI6fb@KfEZdSo56@1_i|#t)`aZrs*XPO z)u^hA5A8!pAL9^V9{ zYBKB|t+`6p7+48zeY>8)ak*I*busmrg@F$430o&y5Aq>d1(AbSp@PeLv=Xsp0bW5( zSTB9j{y3sODYcTeUwuE~`{|qP5f^Eag*{Z%ix9(u8b|E6Z=6Wj;K=`hD zQ;pBUneKRtEH^iI!|`c`AZuG(*qK~}1FI`3J=|;UgzmiIHi>ft;?@ZwMWdWnXyuI zX?F{&$DCCQWDT4Xr7RpPR&jP*nl(`szKR$H`np`Yga8TQQ`)i568%{^e=_P8E}v>? zCnF$Rerv006SZsrPJ_2TmHH=H2qjG?axx9+GGv@?!rAt49o!SvF9}n9IaTsS_TGGL zIFBs#5mb{V)dhw9B~>00r~E;|;Q&&v6@a!HvZ%qC{`K32e0l>UIz27u%<5GabzbiQ z4_Uh-#>~harD|X3lK)JR)~;C2_{6TUA*BsbSi>tw?0vq-k#sU^?)2_eO-Pb8QQy%UtX=+x+ zkrs3L+!^tu<)|Qun&Opnvh`KtIzk{iSV;i{7vrI(_DvSU82hF>3=WZFnkPirBNZ zoeCh@-Tq$264_DWbl=TS(RK#pnv91}auQSXJoURY^(I2zy5|h{37S2I_E(6bn(-jQ zj+QT)CG%66#-eKsEiyqFjYfwtpZ%(eDM_X$;acih`e zpqc>d)%>wThZoxCsx~x7`)zsj61iLF+!WqPQ=n=Vi=aPglTguJ`lCyANp%fLU%tdA zho52k?qGFoStt%J7el%amWiik{e`XOZ@FI{C6hLv58qlYAo(j*^-gV8_H zk=w-3K*hyYv4z?^8rzX-Cj%a;D=BVRK)2#05<*C^A}uZpGW_W-U`O)SWv?hjzr4n5 zz3?Q&CUw0wrekryoL6de#4CRpFO5X#%_X z{6OWPv{#eSQjN?39}X1Hqn=xZIX&Iqo{438O`Pw^pQy5%=LxO6FZGWirie_`!|`R{ z&eUTlb(YGL^e^&g&dN4|Mx_V4An1#LU*zjO0kU&R%eYoY zX4hf1uspE7{d_&J(^JreNU2pX)hVXjoHxESa2Hi`pd-N%UbP27NHSt9P0TyBEl$2i zZ7E4!0aejG1joi*k)+h8ztZ)Ey|Z=wj&_MN5^3DqxZZKq2&a0{pbhV(mTcMnCfGb` zSaAB8EYPT3E$(43!w##Hm6lR!+~cJ_o$RU}@AHh3++bJrz%}~`OUf(QO8HZjOwLIw zks6fqar8NKh{Yd=^+!(3cM-^vM7tu|MxV-u^7i?8Erh5qhY72~eq#2zl_e&`Md{|* z;>Oeag?u`f@C(<5z{cpeDT~5u@c>TCv?cN)Vto}|v9QMBngxh}E?F#bcY(_d+xH|7 zB+XS{gUN@S?}@himuf3#+Z}bsgo?A=>>D!8^!> zA0Cay= z1nr>X)8FntH=_M%zY6|C3ANdK>DzxJ>$mltz0q08MMnD4^SOKtFKzHYTEusk71gP> zUQ;fq{wno)D@W}+A72d5v#6}7%(2grtWVXs!dC~1`Hx5BrBWbiNyXnv8`EPh1SSfP z3O3kpzjK*Uy~L_DE@%y(bTU8I&~h*-lLMuBgu3fRRkHIOhVumBG0SntDQnJ1B!tH) zEBIqxC2^(_2zYUwbb!A-_Y0l=nQLE~WRZWU90gAwCTEIbTIV#&8SMdtN~)GBIrfIC zSuxn{dLzMw3m*P4&kXD(qScgkXAk{oj!H zUK-p(c2cF+fLbzNPIqJy1l_Bk6%eVcdumZ>DyOPYHLa8;Tq_&|m_yOy{f&%%^5DND z-|$5GXy3pfx4K{d1Rc=tcstnCwS{g)ZI7R)ag0*Tz`dbL!99vkbs8#c?kT$Tw#_e_ zy&2~m*YI_c8nM2Pn5szNSoDsk%$Re3L;W;-M>pL!- zYEepV{r5G;o61h7!k0lmTJepoXz)q-gWDgGm(TNF>E9UdKq_t<;e&n9#Xo=i*uUx0 z#MTivb$!QDIQj#Q^iLy}aY+(kO?a;;c~U0pj|pru94tK$8ab%r;!ON8L4CoEt4cyqXu5H5MPX~i~>%R zPu9e=9dx0m=rBE}f}3r>ywdl0Z^hgD#e;fh<9J1Au~s!#HQD1hA8O~}s5l}banHNf zB;#wVuLluTJCYC6Bjlrv&i&*+QK#xaAf|-O(S75R7i+pY?d)o~oDDOF4E~BkaP+7U zTBRqcSL6%}$?voXegn)wrF(Y~{5J3G`eKjEK40-7H+(cL8X9kC6V9BaAZcvD^fUrT zX(|R64LAmO3u%={M@3)mdP6vXiN1LK#nnui-J~4~imO9wNBC=_62&32ht9bp{8GUW zdNwKHPV3e8@z2*``+YTzHkuG>*AO-ohcjDjSJi8rtugd>zJ(Onpy?5R0+OHI?l+DG z$Fmm7j?@+QcA^{)`WH1P_yW40TZspW>a1-tKIoC=GYhem#1?`!s6T*I3fRE9|5qP) zy}y+Uvq4}-x|8l8ebvlI(Sy|l=;i~%H(1Cm>v!cKqe-@mg-C|0$n0g)bQsyt1;~xe z5YAjmjBvcdl?mk8ea6*2;wR0UcQM^IPdocg)eIX)w6*+LoZoTNG&6LO=2h85UUK5g0rByUkKW+)dgtzyak)_x ziOG^r#Wh{xgm@0yS}!Ggu}fI-U~=lAAsmpM^^SUkAFTR5dVt1w>v}HZ4prJ5cQ03H zYD+=t!P{CKK&BCj7Jr=7&>>-CdugKWkH+gHmFCC!xwrNRrCPo(`%4CVU0$`9wW2gXCMJfGKQL2gZVyYNJ7~=F8C*(n_8#)j zx6-uJx#pM&eDstcHP4mGZ}(pDK0O3TX4N5cxJi6O9_2vxIcTO_hjB~H!%^^Pe*doO zru$}-NG}>-f16yIK^NQA+VWa;+#4d{9Aj#eWr}9W)kO>ajTu-PZOx_Ha40Hj$|zSJ zjkLf%*O=(nW)OIRcf7T9>i=euR2jZHs-xJj=M}q7tw??(Xgm#e$cX;_mM5uEAQ|9YPX>+nsfdT^Chx3D)IP+(C8#^#F*!ixMF+fNV}|!MjaPAgcP<3 z_L&|?JapAmqZ5lne)&uJPW&HQv7GHcG>4RIxjK=Bv1K4nMz1h;vuRq}9U@w4QK$2L zuVBEk&+<$}Tx?7}&t|`}fgLC5weW!>141G`!}StykUf(Y3KuW2b8gD;U8C|TOd_$_fvZPZlOp&-a`D|{#{A|y{*+2eG?H%I1>2PO#1;<7GU>MfS zz_ecZHtHRFpw-dezFjjFCfN>Xn=6|7p0I_znxaKyv)RO``un-lgS~dS?-ZObeDFr( z9ISD0uj8uuin;XCJvo1Uw?S}4p~$dTA-d3Ud>v(f_0{X;N)kG7lq@y(ljtAY-R)x! zD1h8_fmT>Q6gUcs8jJY!Nb7%RK~z{20pE3~rM8JL zI!L>9_$T#!F&nCdb!iK6(ZV1RcS4AwhzW{~J2;RqPegB-?l`cuemEi9bzqEXK=6@} z%iB&c0FKHbtLXK|9;1043wr+Iwf~*F^S~|3)y-yRY_q2PlD&+^-cs^#0Ow=(w+a_i ze{gH3yISp1nxZZxOs>y7>FpP4#nX8skL?gQ6PI8rX)Ulv$dQ(%L4Iz19^=9mEBV)n zqN#EP+zcV=A&r0qV1(g3p~XlMk@CnZeKbs?SygFjLQPNsK-nPT zEl3iRaydO?VzQy~0TvSxmMmE}cNyH%F>^Gn$>no1Xpq~f?VrLz3vnlwY=+?wihqRm zpO~11tQn|Bq^;%5hb(*fZ;&Zn?pNHTO4BU%6rwt|Oe-R!^mXgT zbJm=xNW1g9lRXnJqxXt@_E`0p0rPFrPCd__qHf{0rVXfCgqt82uxIUp_Ml$D?(LvOgEj4-6|*7Q$CJvdDMpCoT(>_UNmYiPSgDlC?tI2 z0MvuB{@0_ZdAiG}!{tX5U2~JD{U2Hn?J)FDCHKdGh(h-+S%xplbzv=y=W?=#8MT+i zFDHG0xE>)sqWlbsz)Wj%Mnl)5kz_)lex|KoO(-CmC-H4bviU!>)usR~Y97VbuW6g| zrkuVw?`f}EE=m!ioQ9rVt312c>GBG?jq7kF0en5~@GqqfN5-*$caspowg(C7+5G(y z=Y`hlfqbB((Tq}~pW(N7i*Iq%1J9owGS)i2#zj(Pn=;w}5~Dqzt*?YXbwS}QJ}>Vu zFo$J4LqPG@IUP9$6&*o%u0Dvv)17t*Y`YaP&^->4HGhL)l*e>< zRa6`r<<@!To>-H3TJ!>>&$ZG%V)LItJ^MHJ!J{puvQ!<8JypG&7DWVAX~}@igD@qA z5s84ph17D<-vbXblZXiw_@I|%a8x?2g5XbdBj-xm!R2_iwNk^n?2YpQI|{kq<^>Oe z5Myj3x<`|5Pq35hFY^l=+jYDqjm+BiT>j*b@9Cf-@o$uOr_URzSAsoHKkEil$PW^c z=xdT)=7G3<1TzZ*_dvr2ukIiizoum%I%#Zi*k>Um?I_=?W3>YPkAlx#jkr~W<+`80 zs@jn&2r{5E6aq1mHFbV`@3QMqd4vyT!(em)LxoZ1L-cZXx+_cq?P#B3e;sR{L??dG zmZ|iKvt8FN_x>@C7vAyeU<`LuYVEHJj}d_=&czupA$a~uTUCC#g%p-{o_`ZT$DRO~ zM_8x%wA*66fZZ8{L<{-IxVwT#Zx|m6LUelD97E{1IDxqP&57NgW5Ccg#{>H=4*Ykh zxx0-6MPOQ;F`4;@ek!IloeP0pnomFkbTwLhzR>^t?P1Bd=whBRgpo8=YAXE1cN^sNV4Xp{o&AH7VS*Pa5B zw*ZVyUM%*y28TL_r*Me1lz^kSDqDuag?L2f-fqoWjV7Oj{=%D745OUI;_1O4W~S@4 z$iy!-cqPN3dq!SXlAyXR@xbfVFSY$SnnpSbg<>Xh_3bs{@zj(2iGb+~((j~|`#DS? z&C{D^JR4ucNo_oAi;=_gr z&Eq`A9PU@kkKRwN>SL!#!ahf|skt9raP)foZbfq5Z`Kp4QjB3`2a1toXE!fYP&eq# zadf)4X`06;@3PpJFBC+i8HD%6!a(^>t~6R^6JkD1(!pm%9cn}GbB_(_Z#l+AwCqQw zl=-BC>KBaF^j4D{PvxUPNGAu1$}+R*0hMsI_Jt_Rbt}Jwmknp!%P#sGe=3jHv09f~ ziK)6;^iHT_Ti*A`VCiNOD2f2uUH((meZaDeLOY=dku2C!^WF?-1ogP=I7jfCKDaft zaG5T~Z#nt{@#x#QyJy*{0Dd>Jg+R!d4Le81Ywg|Th8{P4mv&KX^yyC1X+`0;R`-M! zTvUwRPf1jSn-@&nM(_s)&upVz9XiQYQ$Nj%!aUF`B5Gw^dn&9dm%t;~oE zQc)4kAZy26*W=sqRWNb$U!iIJ3E6O_G~@IltIx{Gq0-A}Z&-sZ>Iab!@6X!@zGnla z@~MbRRF0;z_?FSGk5th|e$x5I>hcfm$28#K&!c(v-wUI+^Wj@p;Z0`USC4ZA;l9Oc zHY9pTv5wh$mh0@Kua@}B+@1GZsg=TAUY<*=8hP~AhlKS#28~&~#?amEVP=O&JEdyQ z+Osi2&+_<_V&F!Ng)Q=VyZxlPv=CPu7Bu@SEN`zh3f zwxD(OF@y7YrfVp;@NM5FTevS7EC*ovalk!eTZvWU!yY(VMegf`A+-`@qng3?CxN17 zi&JjW2QAwsM19`ytAk=I_mm%b{W#Kj0>fJkX5TYLcYZ^p*6_afpjv(Ie^^GiEd^aQ zm)TjfrTd01vI=sI7purUYVN92$Oy!z-jB$8ZDMY`0)TUy;0i|c`7F73esz4F+PEkb zr@;WssCehDOEUA_{5DEgR5hK*5RDL66js`5@x~QT^_eJ}*0eQSf;Y7Pr_Q?Evi(T> zTR1T;_6>zY{7@Ez^{khTmc)TLZbvz`5ZrgX{G1K30K%A|-@5uKK$nv(u1Ro`Fe|?g z%{v~(l#puonE_LO1XFy;_;uAvNw}w?qGTFzQD%+1OU`<2AK5x(I)nMl| zdmdz46A=4SyN=zoxIf+S^VDXM@2k6;XanE%QjxX(sn-hn`z%0Z5#6JfiE2iK8x<-o z!}^T~-Rmlf{s4*H-dp*nLdMg-{N~Hh-?Pd-A_WZ=$O(B4Zz?xCdCT>D807b!YDaUI ziAS7uTW14xN~I~gWpWY<(5y&zLCag2OkkhT9{f1R9X224&-zU=z!Vyqnj7C`aP}el zmzFui&eqA6*u%MPrm+&?pZO9qmM+j~gMvLe(GJRWB&=XST^XM<-w{GDGz12l;vdJj zL2!gcZqrJ#ayIoj%>BOyX+XG%cneikCt>>H#%bP~h_9GC{i+=-y%W2*IT zDv~YqZ`VjenAX9)>u{RP=gQv?-p0ZX1+fwdz2?()fm2+a^L8Pd22}CqL)xg6$NRU` zT#2u?+Bu+I*9;Cx+e-;5}llbv zChi-6OD68ZBAC5i#+ej3@#44rs5jqdnUPn<&)@NW-vPq^{6yiIpBl}4AimO)70(IJ zW$VdyKGg^M2Tikfu4am>@Phn~E)J)tAZ;@%Xd_Y1KDZ#&)S%b!$eLlN;T@1nO!5qrzA5`P)UVwgC)tGP*Qm3L?&nr_lh{*V zzpG{#g86NsP-{kSeNr`bp0JKsL}g#`2zQZ5?XAUqOJ6^y=@rvYrV!49V0Y6jZG=81>%Xa4a&k_t(d!c3!nzM~7|uWiBcPmXbK zUP7XAZ^xx%w~rgJCh@%-VCm$0{o+li{%u!&1R0(#tilh@=Az=UP~&uBa|>2fTGz~N0uASV;9&CygFx8M=7SR^8wn$=}iWEr6)wV z4LCK5EF`0(4GW8$#6dB5h_un(pG7^9)_ZKZ-8gA8H3UI69$oiRzDm9xeXOKmT{X22 zo&u}gf6im@ny;KgOa&@8s!Z})!3IjV&74MV?FnPz=@zTmNm(iGdGTn6m&nNsnygmy zd^p5X&KRrVxjyJg=nl1T5!KXb6{Y;~hH?jAid%cRjgv;xv>(ivLl5KmwK z8H4*({PkygdMoGFKkNfPp8W5XPAt{6^7v*gKGhV2~uTtsVfuQG*ijqBaBRmC|>r1wd(<2)HSDB!}? z=@h#j(|6z7@azhy@Adh|SLQ63W$n|(nUcn&QH<|7JQoa9EJ%^9ctBWc6bLhJSUFii9DbnPWtW~q#J@Ef#m;e{@VF|kkO&<%WM<+QpRv&?f6rjXKjJj?UJ zp?d?cJnJrt;!QJcslF$DEoK?jsem;yBDGMIjAlH zN3Bds`nRJ3yMJl9e0a+^kN$c=_-DpTWtxQA2^@QKRZ;~tY%%9IRPq<`eOecm5FDyj z56_YJt04ndz^tra_(T{T_hBmCEXOnv)(mgHU34{CX^eqr0$-&lfIto7AFrS zUMY5G$j16DU&h9|w=MM<5h% z`g4mims%NMn>IHgQ8UBdA+h_iiP5~sD_ZXhtwvuQ{X@GALKVi2q_dPWs4Xheqpx~syKWbj(D}c*;M!5fc#i2j zY7Z)~aH5;(@|2LDp-59Yw5|yRb?DF@QgLQGOuJ0r3E9!2D*jG=X1=c?sR}2`E-c+F z{C2_QKLE-MQ{>qL4$#wY3s%YxMYg0h1vs=2f1N)#bf`wKfRj?`5!5$WBnFX_^n`4m zUlNBEXD+y0dGJmT33)@KJDXf+(l`28r;4UKGEKW)s>Xg6XxWE}4YGjGI%P)pM3^Au z^FV=d-E&F{_}uB0MtL)-$7!4xx1uRCOSQI1VyC*g*_|nRTG{%=IaKE(EGeh1v7uMr zNMkn}JF-&0mAzR=Zw~7G_4K1=}ZUy@)Ki=m7!N7#d&0I1;s*IoSRu+%hdZ+oH&f+!*5+ zakU8vXRspi8ru=gE13(cND6p+>ct_;s#`oD@u5b`^yEH!?v&Bp$n`Atn7DG{EUwPw z;DRZ?D1{5T2{AE{NGgLG&)=&JL=3fEB`SCl=wZM(N6oF|G>8ra(XNSoXZ|jy%^Y8W zJU^rgHUHeR5(^Zq>D8K*9Hk$h@0v7G(OIMVJjY)x{2W0mf1}{J5;}NDE3B<*xZl(8jzu)_=#zni|uQ5`hqpdMT!>95dtXNxu9F#d8avvnPiQI>!Z%V4GE)t8m2K6KD_?F#X++=`^e~GMcM>C7YNi_)TJe_09H4z%ujDh^{ z3N!BvvOpX-<(p7Yyh+o&tDEDxdy~ONdUZR@r4A~`$>J|@KXcaL&ZIkYTFYK--&u`S zCmTEGZQrW*&9}Z2`I4I}xqeUBA^j1ZcnPJkT#>3uPE;fD5E4##?Iv% zFjg+U$yIfbJvl$Yh*+aNK}ZEWgX-5IsQ#g~U?_!)TTngKdQ!*eY2Ac<8Mz}i0(iEK zb{6oepJ%4$+4r_{7X7-vogMfKQ(;PKSAKrzy6Ne3i$!p#3;bGNwLY^_oFSWb8dPV4 zeVxz+{LF5Hj?Ia7*pWZ*Cm~$io%}xekTQ#D@zSHuePmZt5H~3}4ozN(R`AobUql$$ zLGVAsjg`~w##V4f%xXLh%PILeFu1zB zqC*RuZ_R4pul&VNRX0M39S!`J1#Rz}kM-DC z%mFm*@W((~lF}}0eC0}d#k@qr{e*ho5;*9kbqnFz$p%3iYSD_8Zs1X^ZOtHDs)4}W z%fmtv7YTDD_Oa4yL(Ad1mX!~8M!1TKN(MVN5#LlSW=qzIgQJ4&;|5y9L+KP~mDfvT zq|#rlU^Ew2=V4NC*uhhp0tAxm0E5t{NyIGeg>vLza~0uyQMNDv?tVIc8|2vVAzqqZ zJVK>=$cXqqzIdOc8JbbU%OzZXUf8nE#@6rM`nHhQkRPu}lLk6%oXR$>Tr;%mrBYpA zzzkMjpKHlytG*|B!oW4biN_V_lT=r9>9|v`rgKJQhL!c415G;vNI;n{qY%~5pn^Gm z=k@3}K*;SputO=r<8ja~|NG&h_rP zik8w!oRIyv#D;vfM1rYfIo(G(7xaSix9LU(?l`Bnvw9}jEDa*C`t08Ib(6Y=iZEgQ zM>op{am>ST=ld8HA~X7Bs2KVD7eC0e=P(y)b~@Da+;LsPzdQgG2jbhb9k8 ztvF|p4hMFS2M;3tn|rBL<-Glk!kTeOc2$L;aedVJ?GHl?w;H=-Zr0|4 z&ApAUQ^$RmbxhJWFVCE);c!fDXk>T`Oa#Y?o)S@?kRr#At=No-{VGkloKIz|oJR7; zip5K+tj!R~jrhlqc8J;82~UnkGOXVpoD42DRcYXK>|PTfr*pqZ>GW%tW75e^hfJ+} z-S;ypQ29_^*KO7;w61?Aqz{y}YiOvg$;y~S2XZp_rO(*%Y`wKl4EfS(IyxYOZT@ys zv@7A4g+dj7?7DG9uKJ9yCUI*qvOCx*hTltxJ7*lg| z(eHFk28wu1CbD1Rmo}@_C*;PZyXrb~xuAXK=6r9eju)&t8k`OrBr}Q=b=nsV%)7<2 zMzw}Q2wR59y|@K0+@MNTpQ+q^1AUb}VgsQ}KnBY!O)}DbvjubAhy$y^m$?h-Qko2Y zVP7l2Gw`VYKS9|p@{I54|+x>r1Pts8ui7PN+aNyRB*`$jOc z@6XE(-@o}~gzT8$sGKcPr&+8jB8sszBk3R;qUgcA_J!`6iTkd5TUR9d`&JpjW2e^( zM^(02(rg=a56{+)N3r(XG_yy4Smx{-=FeIuvMk=WCHAdA1&btzne)Z9bH^+0mG7ev zEgB~k6A4F>vZ03UAozhk$4_#_N`1^ri=#opZ7R*mXA47*r%ob1g|?4o>nujm4ZXJcV&lC@s@t@cA5+fw?Fs(y^s#)X z_@!7>^=_Ww&AMn;5UhHLTK<3AE_F5xF0n?gY#{bdpboINY<)BahWD1$dYL92O&S;Hh zA)7;v&(X+)ctbO|=6}HMbLI8qlK|9wHrWhF8|2c|dp_u8x)_S$@232zDg~}lF=*UG zzvn@Re+}I32a50FqQQo^kKGOWVxrktiC5-adN>(oxR;8_GAxn`XIJ33nn0toStEL3 zp^8yS2vF2eKy^Fw&gSt?phJzV^}@a?mWc>Q4_6+<)|k04Fxkez-cG$BZI{#I4ubpw zWi?^1=i!DvwsacRi<6h==qQ+Y_fejyo}QNB6|^>$`w16#!>l1>Eka_^^kEg;e zEU|~oUL9Y$$ZQc55Od9Q9H)NK=IZ=UQ9r#*lY51`XLU7PfAr~eC@}3VJCN~xtB8V$ zWZqei)!#_6PK3f42FMS-Bu}f7jv~>HR|wXclB-yJVkT)`omuiDju#zEG{DK0LoVc} zn@at`365=wo(VCW8|Q?iK?QQgcj<|qp^o=~Li-O40B`q3-@MlgP_NB~I@g|>jRs-a zB(o4x7Wn+=g0jS?*00?r12YW^6P->{{k>V=OWuooNG0$m#;&bv-bk?e(ob~e(nMv9 zsOjC|ZtMpvg(fH&!p#j&nsvbJ_LU9`L&>huvO;u#WI}xrvBMpM#r)`@9@k5cXxAr- z4qY=&8ktwo2Rbhs-WmQ@!f5LNCuf(76><4c1FG5pmyRccNm0<{Z$qYt#sb0U=W?)V zXY+V|R;Tbv$l<73yR4d)lsC(7iZ9cm%Z4@li96y36)Xquvp&q{D?fZ^?LP|bYVuKw zldO;|Hhq8E;^E^Ww!d(g74^#n&`@=78QeZElm=~i;nG8hpXednwV^8_wCq(`ZcV8w z<~iR_=0(GVnI3()FsJG3{B$u$X_nNF%Jg8z;I_FGANu05nF*I8%%b!fnbvn9yb`}0)YLF& z#&MaMo%=mL+ek$YCE|=5)9-Q0(e9>Hi?ms+O=c_2XC-ZPXh@IBZXq4k@!%%W2pcNK z_O~b2gGjNnCJIz%*C&n-OJd8^3Fzw%`?pEns8PYFD;K_|{7ywu{|(6Xy0BcCCA-l1 zOR+;1j=-sT9_{wDQnFThRt6=91Ls8Vd0iY5?%DpKy}e2pzKmY|y9XB)?EZ(Q7l@9M z8>H`{IwD1c6CL+ESnvMERsBPI^zrvJhvjBB-`?hkU{bKQuBMuQ+sVLhzfLxEU?$b^>W^3`hv^7=C8GMH&NY47sO`SaF`{Y>NF<9{ zR~?vMT+N%^aur>T5g{92PNpOjd?>t2BWns`>B?c_y_-u$RfWrIQ#N^3=_CKpGCVZW zDNJSPuazN+NdAEp#azpI9~<#Me}v9jm%54fnewJ7u_mCiQxw*YePo!A*&Z~lA1;Nb zQV9d0tV!d3Z~dZlGmp=E79F(^?9R{l6Bz1V&6KX(=q-hf&<;f27?!PpvLO#}H^Mi^ zLa}seRDuf*%vZ38C=9K$bz!(;G9y&kmu!Y_QbC~|Q_?;Akg zXHw2Lb|&r%a># zGLp|rs`@#uMw&2fu@OaT@X3^e7Q{c1{{8zM@A>_c{czzP9#T5gvC*XSY74cq)LOac z+!oS5*IXqsbXfKE{Y5n+D8sk!AOG$aF!DoSM1O~yQQcX|e`w6Z{gMzKxi-1f%#VDa z;%hDUi@xftnHQuD3bf1840TlF-@0JI_lPFO>ZC8W$(iCM&RjWQL;~MqtSa=wSnEj zvI`*em%IPeFm`NujQ$REe3u6hX(NVy0n;4AG5N@__5T>`sXGX z@+6e)feuX=sTsh%ctWZ{%-S6ZrE{r#qk-5??qU3R!ellXEBVo6y2#BW?UCO%6t^c+ zvrYSkqd_G?oT9ww125UWNLr97{J_w|U65?jU*5XkyMzu-iN;he_Yu`sH{E)!ad7Q6 zF!v~m6cq>7ja4ykr*8Y6U050BM-0Qp5dVX37@5Ak%QG)*WM~LUm zKQxKruD|old6~#>7t!BAa3modwd5)JEUSZe@90M2-0NU>Gp)C53X*Oz4eQl5T(yb$ zoTC&JZ0MB-$23f;e-eo+O_2_nfrSMkqpm#KZe!hgHJ4Ps zB{ii;?`KF6%yg$DS+3j-Y{B22)>AF?H51U)#qxt*+lReMlm4ZIbgg8<)4f&^Pfg2kv%cdyWiUFlu3~_=aaD{RLR&i)Mm-JPESYXnLax1Xu)AxWKU%r$O5vI1mcs8@7|U;|iRys%bt?8L6i*txl8y|7DDska$dMum=K*M(*&P zr`!5e(l_tJ*Z1)L7HieP{9gCxDA(TkA(XBOD=R23K+|lp)IneGYjTXe<1)cpLO$W7 zc-t93zKf7+g#4!7rKWVWMyGV)cgN6@XEHzDF z%JS2#nz{@bx@kI`NNu-~LILG6-Bz=PG?Gas9|QCxomA2?>IQS0Clwai5TwoJXBpWc zcUkC0O%NN~qmrIHYXvD#d6%9p3f*9j0=@g&1@%~Q!aqteUu&ueY>+|v;}>@SVn?Kn zen|1?uS+Uou%F>hyzaLPkU_)o`!lxh*bGIa4yK4x8s-1-+XD>*RqQ?t6k48!F_S_( z+<}%|WiSU8w>rfaZzK#GM7x`>+_47eAwL_oOou9_g&4~;jZo5=3k$EaQIvp8fGggx=TGlvd6i+!4+2C$mTH;^5_aR)J(dh1>T6 zltY4%)bX(;hVqO#xqatqGz_1B6-0m+h_Ax5XkES$lEk$tQlb)rK zTXor94Yp7Y=`V`fegE!}W04N`v(vfD_j=<>Evr4#Jy|;0RTLTTz$7zh|w62NAOsl;P zK^WcclBQ@BAkt2dCqXk)WGLkqKXT&J^MYYfZTq3r&+pqi^7yMXC8i>KT}+iZ^ilM~ z#%|dx_}m3dwJ)8nC|36GsVhj21e#OZ=#7A&{nJ?m6|b;QTb&-`p36w>m8EOqt^kH* z|B2`H**Kk(`n0+rHv# z)RYt0UTIq5g6Y*ZbrTU-C0rZi^%1fuJ5n6RN%i?WHEiG z)196M`m3l&p@>WUqGM_GOkObRLz7OY_flwZ3smx(CdC=;(qF!dFd%HPLbU3p$-9^w zp=GsZ#*t&&|Eh}+@{$$jKS5!J8=x=>X_g*9TYqzu#0ko1a^Mu4 zOiGJ(gw7LR2wot!V0wAKUuGA6tv2aJH1F~%R=SuDZN>ztK&jvX7s@8C3btL!kZ$6N zrUh$`MyJYqocfgkGw13ylCf{;>B>zEmENR`{bqT>DM-Ng5Rfwqg6Jm3Q$oOn7)!^O z(LFUSxb;&|z?P)n-pCiEKz!loF=JlbQ$@-h#)ZpYUxV;Y1WxWJWXNBNe`vt)Vk;+9 z_}`Y}sALVbG6GQ(R#=o-n6qb~;&B4ky}qV#>111*T=wF=d+c%*Um-Pa+|Le1nE1Pj zYJ@x0Lk}3o$5xd%<)yqR_qlHHj0s$F5}SbM$?%Q@$nyHrKQs$1S45<-SOP;A6`!D{ zL#NPJ)WeZgW--~tFRQai3x_lO8kVO8|hT9A(o1&WDwIIqzRK#I_}oM2M#d{13bx( ze|k{%ZRy7j)ERW}{I8Tlh8<@8_Vx~ZCsp^_5a$kjzkOL8kt89(w7m@_qsijM!>_2a zEau=){VphUBPDc2W&+*pG$F0_Yi~xUH;^l|X@JlAulbMnYZ{2YUTJjY{)A-5K5l4n z$F}F`?U$Aze}U(*76=8cCop!t=inps6(qg09})h9zjxyCN8Bv&e}v&I!KoR(B&bkc znqZBeT+bhMr95#R`BAdBaz}=u%D)1dlKZb2kni|{BXIKp@`nZ(Z&>Ob*{5{yc*zx} zj``>83MT*yHv9|TD9{66EXrpQ8<%MFe@`B$kMlzB|NAHGiN{yk$no}MxS9*w z_~%>5c(Usr%ctvu8oF4nJ-y;gJIuTwm|CY^QK)w#tI7&>+cx+z6CubnQS_$ONxyEK zc)u=_Ty-mnTN> zdjZRVv`@DCoT1J)yWIYgkB`c~#jpmE*VpvQjioRo5HSzERr{K2>XDQ(yt>ek>$&d z{ZOaN05xLd(4Ko%n2lOGQ^bu?TFV`y$BUOjW;X$VZ75$TRflJpr$l32Rr|}>> z;`x!{?u@Hisp9kTs@xIo*e9S^_+;`j?gFmDiHDYM>DYax%M*-BPk&Zzlk8I`vPdyK zm1oOv&th7&iRqK8e;$_R>~hyfEgvOB8E0q-~TkxZ2p_ddvXNo={Mo1 zZyoP^BjrX<1v9tSK|=|&Mv49iYUFvMUG*R1jRdTI`iEBkCDrK1j|86Qnz#Ev@h9qE z4Nx<8RMihK3Wjp{P=y&Zw0l%7Lxdl6NehVBf<)gM84#Cn^78Ao$oG?wIazZHAOtC2 zQg)hsIjbv17Oy(>8#6cM0IBc5>r!_nD0y75<@=A{gz1L0DE@TLHN^M`Xc?Z+a@Hgp zT4;XW(GGqcXsoaeoz2!X8*tnMrBL!@WH%RZl;fHKWZ&0+i9WBi<%mD2f6ta)ms`(L zrs_jp&4y`pZn=KB(yiYzcx&n7B2NcC;@l3+As-OFD=>C&R!|?LjJu6 zpF%GQ*kVliJ=wd!5soH`!G}n0Et{pX2cC_%awOzb6&Y{tINHNkck!rr`7HT{JI36N zFH>^;H*ch6<;~QB#t4eg8G%`5_(!6Oj^V|N7j$%zGICQga+`G0_|g24MjJFWMP(@I z0V}27*3zLX_-IRf{X5BbD%GXKGowN}$AqtMSFYAtNpTEWC4%;`IgIy`_$vmfmgLQj z;!&QNbIAAO`i`aS_^pafH4;xtk>J;^!oFQ;vH3B9iIL_780>HK-S55}pNPAHZ7~%5 zGPKKIv*Ef^SgR@AL-gE;nws^)Uc#KTTlgD|={(%hhnpW&Xx_rVCWm9trMtcadgHSO zRT$21tB*5be+4Gy)CokjLWH*#6!>Fp3#0jQ<^GHHiOn46mw#1_idIv#jYa$PKNlvR z`AMUhj0aa^Swnd|(!MV?YGPd?B~pb6eIma-xt{No%~PoV1}nH)K=D$AOBjDmmT_NL z6sXAw|vrU5(r;5>#{a%|BvshQ@F zmjGhZ(d!!9mGZF(!6(I?7%QEPeG?`$Cjl>-ow(Q6t1NX7S^D(Gssq}QddsF_fVVQ~ zY!(&N=Nmd~-}Hh^z?*U+>a`t->HR9uJf$9bw7BjhFK1l`v5o1>(l_1KI7{lmxpA2z z3<9*!V=FGv4)n77D~2BQd-QLrxSWDLeRmuUZ!qdKn+*Cl?$$~0lI#?*%F)nR@zG9g zt#%({y4|U4q$J9`Lhqd^mDd!X8t96SYQ9u@R3$SSw$((+AnHMk0>+HgIC{3ds+SMl zaVzpmfvJ;5Vons^6#BQIb0MMajRDu=hxm`v+_d&TI4w>H>3P*lg4g?fmBpG>F|>>o zyF)9o-$?Kih#$N96MJqR3;I>LYMfm)aa{+5`FeM0^L%jh3sm!G8Ra$T7%jRb)A33o zlYVs_*%(x;C>cV1f`TXUkoWs7+W-Tws)LLuriZLKN_3Pbbv^^DtL=TJzOQ_y59P8y zj59xZed1mj_r^Jhe&)I@1KYM}q%=3u7jWGv;@j8HScE@|mZ5v{mHWT(3WZB(6RBBK zge}~sO%v{6NOsBWbg|(Q^yd84VMRxLa%DA(gE=rQs95cV_~d*1<`U(y8a_atibHy;kN{GUXNLZ`N}98Rf#=}+l5bEtEGlmV zw&Y5Cijy7p8e9&;qJLEDg_eZ=r+F2M27O<1A3fW(cBap%IW}nGy!K*E4dTlAn@*JD&;!U&O&|XIO3+NnAr9*5{F%8VoFc&A`i)q_J=w*s(%FuZ z@@B=~#~>PWlxxmc&GZU9t!^B6M< zEbC%MG&x`)(J{)B^AgeMoy8Wd!3cJj!^-MDqg7qCLD&v(g(%aNXCZwHW=6O)tZld%a^?qg9cy^&Is+{f&< zeJr2qb3P)@k=0*U|37?vcQ9OU*tR5y9=#LMd-N_rELLx;ljwc*MT8_;SiP*WR%fwm zmDPLnPOy557SV%{h$O$y?|t8|z2D6D%$)PgoSE~?dHy)}xz2rG_jP@E6me5`cB?<} z>!_htmORNnLk})twz>!R*mOzNkS`JDnhjTe74}5%o*fX3oO@05S zcXpCiUR$sUWYS_@0icl!B5Modb30QysT=#K@4xw`mbP6jD(kqJ_4{2GgOXB#VxzA; z<;@9!HYZ@lch7WD7a$Gwe-tcS%On9m3o42E{ykVRhDRy)gae7GiexzR+k^^O47(Ow z>W5Zd8XDrXmOc0n_+UBfSso$IX{}rBKkBC#_aenQ5OTgJeW&@N4cYo;p#E%8I)y1# zIg2kw&Wn~Wm;h#=yA#N8Na2HcasY9(dRXbM6X#cSvZN5s^^+l>Hek8{fQk7_OOVk6izU}eRDpZ3m+NbpLE)5u z9Zy!B9LCSg`d0U>ILpc+W%~)FmBh7doS^)U$?~K_N8?LFv7N1M+nOIA8{SV*;)# z9cm|56(*u#oVVbLqvm8r&tK&QTlR$*Ba05b68&Y9qH-tO!38S?ZRJQXi<-0pbQJ3b zAaZC{Cw}56QPsAFX5%^%rJFa%l6fI?=yAvwm^yUM?Wc9%6#B+14HL$=ZME1aUnF#&XDjRK0cacVL580dsIgzCsSj4w&n80HtjW4rF)(kESZJK#%~uPCp8yEQ>AUqOMK9J`Dg z*V&Q}Uveh}ZCC6;nrB|x$>4O3^Db73GiRz3uOeGWN#N(@aevb`3cR(I;?Zt;EVJvu z<JFj(;(J6@)VOScl_v?A)ar9B1qP_W5`Q(@nnE8VGzzJGv&CX5M%LlQ_Am--a zvnivR`3%2EJB4wGyAa5|mS7tTOT-BtMn%QwsRX=|!uY~fwsb8Vr9PiIsaWWcaa=n` zw*=$I)KyK&k$m`&SZj!^_@kWGo1)JY{`Z|{JPN!njx<%ME2`QaxAM=M zYWqv0`|Wtgty2gHUI@CiGUy`)0sK|-3Q#oj3<@Q%Zn!T#@`8TRFW1;?;ginlr}=p! zgLcbRV^bYH(VhCN>${Bix*QYO*H=Qy&Opz=bZQJq~Pgom7)B~lv!$f5|5fV_xrFnpS) zSte_aQsYt$BR3UUKxEqBtd7t+ce>npz;0*&VrQZ?{dM&+3#X%FQev_U-hy}%nWL4Q zG{%kGjrAQKLGa3L;qT>n*q3=h1_4>;2yAZ~v&P4Y@VwN7IJY#sc&Qjy;k{pClhpip zyeq;O%73xs`)GAH(ec#|lYk{XuhkCD%ZBQ{?9wdAtw&zd80TWQGsz^nt)Sk$MasUPZ`gz&aRadOmBqhCUSF9Cp@Gc2>uopC-yS!~)q^WHq9KN*_ed z(2>(pw}-eL*yrDD!UaQ0VK+NnT#W3;m*dHys1%ho>i|iX8+fTkk9><9b@uQ`E4Yw02-@#R60`Y1qNOG)oWE)vtf{-ck z6<~d-jepk`dvPuhE=Td3H1VC5E&IXKd%I_NW;Y&;8TpR%b&jUm2V_$AKn%TEO$w)f@!1(R)4d^}TpcW9D3BRxn+?19Q1lEnLW z5aQvv;W6V$-2>77NIulGl$(t^`BRbw53ILo$HgC$+Dm6-6Xa?PnN#osvPe+l^nJ^n z=OAPLG5j&2v3p(eoT65?i7unA@QCSVxMc@p9=>vQN(MG2I_m}djbfTu+hBbQnY-Ud zCLwxF*04Vauaw5HvJAf@@bBcI?PMi5u)GE5ECIOItnCB6JHA5r4sLSKJul% zj4Z*SJLL7!fa`;583NyF1G~b4Gu?=RM8k2zB-|C6cCUfF%-nA#a zIfrhSnhTY^eYWM_a;&I+vi%R9C)N(!oXaOE;~CQjF`jg*pHO-pcWMUdl{z?X?93>C zPCkC{5X>g}whv^&GR@OzPa}wI*~n|r7i$9?iVQYM+qewHl6>h)UbrP$)wB<*z5jGI znr^h*!A_*Bgpp-zjDsq`z1x9k^tl%0sgf^9z)mbad$KxAPf@jTlB&CYfpvJ7?OAkh zyyKH2st(@1vLJt{I2eBEVFCPP4w}b%kf}_E@pda?M(CmgXHECzt6doZR$FZXBV#*% z@`UU*S8E7Of`%18tYHmTjj!nc!Sfz?4mb)v50lp)2^u5(#I*KY%L)|Yx9vk)-BpJ09^+Y4D8%0O!`Pgid1UVx8t|W!eT|vBB z$j2WiJw-WFy^3;OcJ&;YRIydW4=<)Swa2Z6P<8!+b{l zEy-*AC8stuB?+R~4ouKx=$riBN0)%74Szz@A@k|!M)YP}af4*0v_wP)>eOO0;KrMO8 zqnn3kW{TMW1H#0XSls0otyd!SGwl4&WT4W02YH*9D1*} zedmGAPXkWY3(IRB73Z7Vtz1d}TCDM^6*{vMOAW<8gcOR9^KUb){;X`7Dwz+2=(B6o z`J*0M<^@#fCI?gouznH0+rqy51n*t;o9fR0mWqb4kCRs{?%#1WCD+HR55IKs(gXO# zF2PG~0~c8Cx4Kr;+6C<){j>evD`k3)xYP7oqJ2tTN+$ktYN!buln$9+; z%7??h#)bEsZR9|pHBnT8X!{rwD9h3$ejWtU=T(4K1~4A-2i&oNqlfMa2UDH)3}NQ_ zIqhCI3E5;D4ZaCTALi=PU_Dz|L$s{_avv{erJSlUm8qH5o)Hg;N$Q}uidxml`fXR} z14#ylO>49__z0i%RbSuK$$E<4vZOd=-$8Ic4FjKlEfz=KHhmBo*cIV` zrw&r5+^-&dKaeJXVn^JAAgLqjw$*dn%75ow}{=(!* zwOYpki@cBT17*1r%Uy?!yZ;*Te&t>#)--~SaIC$H6g5%TRc%(Xr!!b%L4z*{e+V?R z#E!Omhet`|IdOacSS5pH1wj%`zFCNI9mrD9db6;n98#Spy`d+g{BvizV2sCWLiYdB z)%p+3E!(#&a*AU$Htn{`50Ds!kY@e&2w3Cip$^Rif4moh^CzW=egl;on&$mTs0Hn#R;RCkTBx+%_A$Ha(NS~0b6c;uK|pV?PhjuZgUljhd1 zL>Dl-F`>Uy!cqs;zHOvyN|!1T>Q|^>UNFH`kNNgyH3^?Wf@vJR-c~awoNN;>lYCZ+ zDTecaEGx?H_26kgiq7A{J68zZLtMOU$j(&)I#r*3oozVJ9GK@+twZZ`fg9C+4s&`> z{T(z5=3nU+otNXDB$a={u3%DS=vDOnDA=|>%+d>)j_q)*!F{hwoHjg^FC>>cGXA-8 zJ(p~W7_LDCf*My}I9BIoeqZ!pa?Q{xp`&UB8faNv%n2+;hmDQ+C63gje9j>6{rFe! zQrbJ~;@%JT<2$PP%8g)&gorobjg@=iL72cXS=I-Mw&N7dLK6tdVjMDlfN%sQneEiLV*&M9Eq;gNECsMMiR zl=}gfuj6KyvJEDZ&_Sm4-HqKsHYMZQ-V`~0b&%uJxp(=69g2;2pRIt>qdafX%zTpS zBxJ8_fSv9L)Sxg+R3zHVOOj!FqYd&+-<32cX<5uI5>>N11$#Akg7nV!beOZ&bU0M> zPfM^0irJV`trsEr=EO;#S2?L1nPDb=kOnTzB2jXvzl%FAHDvGO56G>bZgUivSe^!6 zw=3dsCYm0t21a_CR-ZTS+(%5}cU)L)bEY(G7MccY$wY-C&eGQS%Q2NLnno-~?ha57 z=qm$vS`$x}b>t~4ksN+1DG*P-tzv0NqFz_mMXf{Xr%Zq2g9wYj>g177bZXRm7J0HY zsUTKn4}m6jL7FE}iYH8)Yo&vAyc8RhAC56`i3@VftN03*rnC@;kk+Jxb$zZz*`DSr zZZJ*g|Ija;tJUvPNcs0@5$0<$H?gi1ol|2{4S=^7K*0-qOy$jRdy6?5JLeSadHWj$ zGjXiXU$P#*+j>q65?+Ifm6t_TmLju|%EQT%Fb5O;lOIwVfByE_GVarZZ|plJr}f1X zYmMg^|I4y|A}-)z&5wPRHm-H$=qya?UeRYynyhxIa3>FiGhB6P>}DZkDrITusS^; zC8MmqW!6t8KVpX#<*G<|4#n2JZ z4{xW3amc*NJ#n;FxI_5ITgs5l$~J-U)}#291zfmQyjhn;My8*lSyn5k>{Lv|26Zi7 z=Cr~^^@t<0bi_5GWDLkX>p^Wa7G2~hBz(FMmY-Z{WLt?WMvJK$b0DOYdX0PUROm&0 z`V$>Rm0iAa8ZiTvk(7SzDE`}6bsNnJ- zb7o?qI!xM@pFtD}@Ft9#|K}2X`L39!tJ$wiuFNnfoedebUlGsh4XQr2e9yHU9R-Z7 zm&y!?X8<^Z69wBt4qT2MSGYU&Ppu`qw)(;tbgp@PgFmEx)4Mee)Avx2^)XPZ%kwJ< zgz=iYu6iWyk_bxMx$jDaH;XyD=WmRb8}7JYMu20H@Rk8a|rW&J}!NTn5GtA~q~obNqR zlu$2$Ez+%O`kk(eMa=i}O(2A4j`-Xvmsd5tGbKcs+rjl(4Z-9KPi8IYv;fqGv3hEm zgOvCA-?)GjZEj^t!o-8Gn`TpQJv9Afd)!bPJ7)cS`rg`B;saN+cRYS25;xN15b-PfgW^)CW|>!?`#Pj<&0V!TRKmJ4`Zncp-oLeCBMV{_aC<-EU;oddGTd zZcgaLkZtc*KzN2Ntq|sAgk}U`1e_oLwh4DC#eecZx6T)83YSVFq@0ee@AxJevMLQu zRp9^qH2?Kb|7&7;%~oKe?>MFJ)OOu7*4p2AjzuOBYZgXT z`igP-wjqIqV|>i$?Ph|hNqL4cm0@bSu_8Qs&K9LRQ}O@iQZFgY2DgRREB%949AJFF z*WwiP8lgKouqy1hWWr)i9O4_|`MXX{(SLg!&y7|Em-*@Yt`STwIv)4kkbaPJ*P`%$ zt|xJR`#hw2Jnv2aEURT&d;6kS^Y`Ojg&!J*KucRydiH$Bru$!eYlVn1-y_)Zt79a` zr0}6%r|=F*RG`s!ipg!F4qtiKEcTxL*~w76yA5vcZXGli=2%(w8DU{mJto4AKz%xR z4%3%5ch;g)RNu9O(GX?U(Bd6stw!tqzZ(<3yC{*jOtm~tvl2GiVg8sGGLVe$w3)q5 zs?*VRR&HAEZ#rsWduztcRAOs^7AVQU+TvcjZgEu2Ncm9`LLX!ZzNZ(i&r{O6mb(TF zj68#8oP5F^JC(A_r=&XV+sx1UP9E`0Ew7pr=Yj8KShgQjrk9BYaYl=4PDpHq$}VRt zr&N6B{j>~!+x)=t%sWpXBlJ`cCr%6f{wDw0CV7QJi`U1>t1Vb0%ZMP`m!zEe+n`WD zL8{{}ql}Vmjql-<)qYZOFMZ&=GbJPCs(VOR~C@xF&2j z1Id}2%)UF+e#YrHtHYE5(4Lpj6a-~c^9Gcu(vhk`z&-i6Tdr4!vDNsQ?AbiJ>E!Sv~H--{H|Q{oVT=|fI4#!b3uV=(7|c*FrEKy!?E(@h&=4zH(*EUVSoOzgJ4arh$F3`|F5TZeO;b2 zpOta}QQ0&k>LD3K8dO9hJ%EDxj|##s#lsAO891|fOJ@nfhV}W)Na&JWi?2c>D>GKM zA1b;CZp>HbVzZcluf%QTYN&!x=gG8s^oeCov%&UR?crnXaK5^LMANZNtz~x0vvJ!W zE~1-N8vg86Pu+xHFz`MN9HXVK^w@uiB7#XjAJOrE_uJN zla_uTTeMS6kW^c)u6Ar0cv#uiQi;2BRkmcvURl0(3$Pf~>{VNZ4|W5-V?CvBY44f` z-Mm?zcw*>X%#U}&teY2yn*NHpxfBJhH>MmT#^U+C7i#ILtV>{N3+sY*2j_8xkM4=s zm;i0xRwHE@jMvv4md8C2GnA<0@R82?oCOVAumj}NU=Wj?4C4I7#|FbmE z&)~qFzbBQmN>W)ro!#bTTS;o8KWh;QeS=yNlxfDcR_1WO)jh2gq-o_nW5BF`J8R^F zAtV@Oi^61vcJyF?SJhT;ol6D8QKDjm3}mhj9$=T%=ZTmJQqw|N2I)_d0CO+$V?UZS zOje@OsL@HvKEiHV`zrL#sz9TPkJDj8nxLDvdEb0Z&}YiYwdxQz7sG9;6j)|F<*4=L zNrO2iuGmy!{GA|t@qBfvrepr~PShLwIinrhh527K<7-q+0jy+hUnirKSur5duYuy! z4xfL-o(vjUn((%!nUe~qqlGNJi&|z@Yr|e*6?I-0XS-OcEzT{>n9P~saBJw#<)xl_ zB0&IQ933U}K=5;p((pDWRtsfcwdpk0j%tT?1V#RFZ861Oc-SnvqnzOdjBW=`1x0NQ za{#FzaV_^;17YXlKlQMbSgl}Nw|wN9+FTPfqICb|qglgFqutH;bu?`Z9*#xIBx2h* zU4Y7!ASKy6gA;#nDlgQ3E8v~N((e5iozh^m~|H>+yCWY2a*WHrc zs<<_S$hIX-ymG&dTH)!7y z%{7+Zl&QSE5_z7l+?|zj7H#)cprqu3`)@{Xz@Y~-?qST&2!lpXss#@ zQnD0@Rd`Ppk}T6`0@5?OcsV*R`3$Kev%Ks*gBuG*7Gw{5Uj?SzweqJ(3LNI**A6)a z+LmJX)2ltP*~u+6hW_urG%T(~EwQ@i^VYOj(k`_xUEa!L|A(Szk zbr=0gF6xATOhv#{!)a3P@TJ6B#M)WU-O@)Oq|*XI-I&9BKsz?E>P-#dQq!a?+Uko8 zWoiSYABwUS{(Lf$>&i>t_L$E@{cON>HG4D!`Kd!~_&bBc8=aaqHZ)%2y8p zNdUD(74;%Y+RPvgBTH_tWT;lKxfcorvL?eON-;BPqr4aDHL2q7yI4Fu2`=5XViFOv zmM1XUz&{AxK$rw++VQ%i#j?$^Et&3pAnVeVFuACo?19Je=9VlyT@o??oqss@BV(!c z1~{o%a+SF-WE=^UiR*G(nehP6g6cYr&{?PN^D3d2+2k^u zETUb57oN?3Bv6&^fiDFNl> z_8DD&LhAH#>@}*L*Tj9|Hm@73>?-|}6_~$c+jc;A_^T%^vnj}BB&$w+$SWy`i}t2$ z?FEP0jBcIQBFC{%16Efy?h3u@q_2riGoVE#$ThJ<9R zS^6HQlSf~4pE8Otj9fQ+e1W1(kj=cS2^jrMwqCts4PRko*5cu4vsjxCDW6SXu{EOT zuf77X;b&G;-l^}~#nrceA*5$NwCCEQ|I9RqSm$|rg`DH)9IE#}$*Cm6U97~zX*S-4WOU*=RfDM7h+z-vIFdG!tGRW>3^22Jo=C({J*xdY} zwLap5ZaW$# zH5zMeT~Kj{ajr*4CjiaJ$`P_Dbue|Ix%q4#t7urD1>Y0iaTcZEosF42-i^uw5oLUu z7SE_AY7cWEQn|R01-JaQrr3U-En$lhMl%7_1>kcTc1VC|CdzzPKUX{;4?I*=Mf!-W z!>Y-tKjyIs=`i0yv+q%k{=%~e9V@V06;Q*SrHbnHpGKbGVc&b(!AIw=0#KJd);j%( zuDy;X!cQyG-7;TWZqX3%A7y9Uy!6&fWk>m1W?j_$_n1lOWRAQWl*%ASZKNwq^qQV0 zM}s36i!qWBFh(rKs`gJ#=YjAtvEx_3-?FfAjg==PXhv+ zsiy5&R#Bb%1Cv8%<*ge62iIA#z|XDbmOL?yK~1(XEIg6ebmmH@nsqUgC=Kq=%CuN2 zNzPBwryD_2+TSFxM|`alZd}8&E8C@H!|U~2<}12! z-mcdA9y6oJg4!0UD1o>Fqzg8yS`H5}-|7&CJR;o@rf?NxNDlT2D)# zbk92Rs;PjVt5GDifgfs1Ms@@|;YB9ilC_xD zMTuA}+~TX^^ZtIJTuW6RHeo{E7gAoHC6cB?Kg({`OVyJHeMrNUD?)+#OV;D|-r9w% zKRYVdko~VtkI*1zO5$>Ahn`+|ekeozhr$9u?^kl!pD{Ablhy$!`Wsyix zRMvD=#I;mW>)0>P&U?%#h-ytiX4s;5wZhzxr9NKG@6xJIOk1bJh(2wLhqL2~!Is++ zFxDZ@%#Qx%uvgUPyuA4Kcx_3srgm7lJ9$}jX5I`v_H}sHCl)l|_~l!=gsAOsla*mQ zF>pXWP7znG%(M;xcaIG;>LRr1Z?GMtw=bG5LA;(;fAiX2%{<93m93QF#;=q2P@$s= zWubC2E_6;me@DX4MMrkEJi&8X^5my#O;$gvj3S$Nii3OeMtaTKSW;1~(~sBaB%a>6 zu@$sUV6$hE;>mp|{ooSL)KLF0ila(G=h0{D%tg&n|27kw=45X~0m<+Sk8*KCRUKt6 z$GCorgHzh{=AI#^r<+j0oM>w#`2uhc0lCmj4l{sS$1a!2(h3?bYG*{h0WgWW)@95* zO%tjN69Mavv|J&`#wF9n`FK?u%Jg=IM;lVI@0cewBTC)dfXyr$spGfM*t&V?p^im_ zenu;pZL)3`NM76IEhjz9!h&D@J$)D`y}O%5V72&)+Lj?ef5!KjB>#d$dfHElFSXpE zk4DyW@3-(BVbFOdCMH}#k_(=5yHyaZMz3;erbo>_q{Lhh1Z*XJYg;j$EUmkumhuk-p0oo&cFV5O%uo&a1t@aTNPm(3`dx32w2}``ez7C> z(^q~$(hK1^;dvc@wcyz=t`Vg!o1SGI79qFvtqXkwD)ZKAKp{gD{S%>ved2_@LL*s?^j&2 z;#c6vut;H@t;R_{FFkhCO~u5?O8dj zmBMS6X9XeqBFBYP;$82WesU|!+`xvyV=8~z_v-by?jlF-bf-6s{X|T0%}ub3bTxWzCZ9aF@O?EYQ#1B|j)pQZM$x3}kMY%vHK0RP(YY-EC5n6x&5H_YdBd z%{AbyWay(4ikOTZ0tl$W81e}6e%(D?-~JeQIt+73Ps}oE_(Be0WngPM?m&vBi_^Q^ z@Q3NX&+P;Uu1Wb5%YjQgxpT*7*$~S&kcAypUu0!CD!cc0a0OPOy-Lub>VsotjX_nU z`+nMxnf?J!B$F)dODI`?WfZU2~?(Eh${(0 z7N}Z3&TZe2)_KmKnT?_Y9UmO8M8aN}f;Vv5nRY*o90tcFii{tR9$J-Wbdu+*wJ*=Q z!7D@&j^7kr(;rov&JfTTF$g>2w6^J$r%&;`De#WJdU#Jch@JsEH5Bs~6cq?i)ec~B zT{^GCyr3Nh-zzOoeDO_9b}McybyB*w5bZev{bf3?*h^A|d%tY%Xy4(b3v6Yqez!U; zSQeL+o~-L!Kz*Nt#o3Hmk`6~B=s@Po+?t-R|BPd}#4(7Pp`1Vx66RjbVz7NHuW8@r zb<)f-*^S+_3_#2qOYCT>ngau!`|fNt;|o?6^w>a3fic*+_cZprT&|Ke&7S2slfjj3 zv$kmNmU)wTlNrq=oI-jDk_5_UJooWusb^I_%V*f!Udm`#*}WaQH(Z~)_x4@J!vOQU z2~oB4%TJ{1uR(~TmP$ho28BIU9DH)lD0p@@BJNy{k^UWp)4bbB&|>n37iZ>Y1bbab@% z#_6{3b>?Z8k%gy$R49Q1%8U5=p#=4ZYO(BP$`pt9zg*9OkDt7p#k{hqdol)16uvwl z;gEQmT+{Ir1)e^RA&0`zuKd@@N5KuBHo+hU?T#`^W8-xz*OHdi;^qazYZIA-did*= z52hW>2rU1~$hbirOZhM4z7&H;f*v_RH~^c>%+Ft*9{SaWs|sD6jxDH&kTr#*4eC+G zbRq1g!w|>l?k^vRf5;Lx=LXfRxU%15j??k+n;&i`bX05}Ia^RM$;l>^M2>Vh70;^q zlOF=L2IMT;rp&3*si@PlOHCX5-^}t1Qi-$p>+Vq9CAba^$*8W7B-R5LcZgY`81(oTZwzeWXUWWR1zw*51 z#hR{UQ1P~`YN7msidujd4|1i{1Z3BKD4|!?vjzBnfa@g`mUs*DFEp5!JekO1>J|ou zy1wv&0Buj=2NYzpTY@m;#IOfuhxr*DwM`h?%F1ioq&mz6|Df3+9e;%hjd2RS*h6)A zlkRqg*)EM-#Glbrd*(^$O)Yt^NrG&HFEw?B9*gbY|4uE|$Y9u|Kg$&q$+T&GdgSbZ zFRuFjB#mk|J&l-g+aw=C9?l*1&R8&qI6Aoh*z?5k*xRX0CT$+^rUvrnB*Bl1BhE9j z+UwgbwH}B@FDBehTPq%8a;AG(>A`{(Cmq+gOK>4An}e?=%VKF(n@7O_mQ*F@@S7V#n_?!&$z# z9>k`!oL=`&rcSS4if?e-#oP{MPWQ{b2`SkIXtGgZY(`--Nm>rlt61Vj`$+O<;bUzx&U#CCBpfhm~uwHkLo9hdwA-6{8OT zx0@oZ-YjW!w2JSHI&dy0_2O7RhQzj;v@f?k832 zua?Du8S9Xhj=A4YA8(z#evOTm&BL3x=-pdG8bB{cOQp zf90gK8eH0X@XazG#B?17Y!$HPhF%Gb(B%_n1na%EB&x3vVK3fJuPJ9AlkM}Ek)mom z38=4q4gF!dyfU;XtFc7u-Yla4Yi_-~s685GyO4{oILy?8GN;t2f>FU7IfyFSd{6b znw`NHKj1R2xF1s{P$=gj7P3A+l$3tRO>H&XCDSF`$h%aHOPm4fAgk+2ghgPuowD7M zCwuv6PrMcJr|bY3wAJ70{0T!QU9{RYdrz1)Rx~p@=Qlf}cDfW6Rp#?vCjuLC-=kb>1Q0hApS?ht2!m3G^*2yX%KcC{KM&MMXTz8xpw`$ zHbvzdBR{=m{`#rM)!T($^)gQAzTw`1p5{$yT!XLH2RSolOjY$`?fbo&~ znSl+F9!)A853Z!&U~QE{0aw;GvSq1gy2S7J84ritD)U2HDnco~ zZC@*o&?fk@uj@}8MA%)rTAZA~+P<=yY?~Eq#a70ztYxkgqI$)!dft=YzOcuk0!+ttiT&hgcp^q@KUWer6CJ>ri5pa=!&qWfG8c;X+sOaa*_cU_+*Cp{h`_t27l$z%&nY34WFfHgcOU_BP@b3W+LYoH z|M)@|AvHB!2O_Z7IK^k}7Zr6^O-PSiznY$Jg9E0&AMBOxvV@G}YfP;|N1)Y(4VDlI zVI24-;RD$k2R646_a~+ODab9!dz1qA*Hyz8+t$uW?1;0{?s$>A9Con@@=pLPTk#0_ zj*J39mcj`O`iVH0&=bd%(P8RoF0(9sJ^_Etr9Lo8tA&JK^jUh7CB7E))weAZ~EoITA^47a3y%(UEKG0tt8x1o1SEuEeim^JdBzOnAC)hqOAO46;;$m{ z_Ld)_Y~V71H;hYj3+9X+?{7cG~Pdjt{Ek$d|0q#md| z6~CYPuE)4itKt0~{I&dJrX`XgF!{m?x=yIU;PtnCc(dnVMTFmDx1)rD_|8w5pm4eo zExlq9j*hmK=n1u17(N#l%y%#<&YT#{Eg(!rbmj6#J2C3rGwNGXPRozi+vnXB^5WXh zSnMwpc%W*W_Ie0N;(GN8l9#>2o|7oGgp-qNuJUG!&Jq{?9?WKNiisK*wLG$8Ij6BW z3$HEzYMlWtCnomU7@A+b->YHv8m3#=@=<*dFj4!`pL|29VYI{OA3SI#J{w&A0gw!~ zJl{*d+S9}peC`>y_HEe;m90^J+$Lxs(Aa)9Q|F}(^7qeXHd85=xYT;kXK5gp*AkKR ztm8oePaP@Wop@{v(aGfQLf`I7_vbu2A|^gC)5)&9ra{E_GBf*!4kyi}N#jp4PbJE68O!8ePLmg{x&w*;csd86&+t*MM?M?NfM zyQ-w=6p5TEPTVp|O7sRV26dIcidfHnJCl)~mDeGhnQ&2N?qfOlqR|(Xw7rx@E!g6A z%(e5D>pT6&e+%kI_T!`LM)aZ9kc?(iJ)}mcJ5B zGAW96ozzj04u+Kfna=mgqRRqvHBq76}()|pu&OF_n(pNw8=Rkg|JiQku! z4dS74RMv=8@P@uX;)B_~$J}SdgO;1$QiN;`*#b0IY%z%Q=&h?#=YDDkdiW5eI@P~Q z#+iw)Ze!3Cr!g$m7)4X95s)^IqFs|>xlGGLzfS3O;Rk+&upj*FU1AnG6IKat6zRkj27Ipw6(CSn08!^@I%!{_d5H07@W{#7b zeAoyURe@v&urKK#q>XU_K8u<`zQrLM;-K!9_p)MueyE<_zF6oNiT$ zPoHuW@t<5)klH+7yYkUV&OOoJ>6DHD&VurBzup>oF>F=t~!o8j$FN_e-lv#8CSQsQ5CJ{D4KV!L<}6tuO^hfR%Fz!E{{15 zr2AyoBhCnTV!LuQGA$SwZt-b~jdR44eS9@r8;e9@Ys z2Q|SyJk7KStyYx-6xrUU=Sb^;+2^+;YCPj#7o99KhWV?iqBOxd3jay3#QG*Q`!EaN z(JR^hAA04k5f9OS&?{9EWM|l-ZPIJ~b>4V@0ba_ULnkytvA!~FP2(LquzsW8kJ>_F zi@O)UcH0rmZ%q1f>TnMgnSYz&;$H5GDo9U+OPLURPA(|N=fiDA9F=QB$X6Q2UHsKZ znAP->SX?}owQT@{Zqd5Iy;LlsLl`e@+KT(A>wXK*`q>zVXE|F@Uv_q!A-BkGmE(k9 zmJU((S(=(rf~N1Qn1g!8k|JbM&98hRv&N_ln1H%6$NYtLjYjg5o_o^5wIFfbVnYe5 z&1=Z|F?_$EQ>xW;cWq!&!{0|+mMaUDPgBb#Sy#ldUy@BtM3Q!yDq(DhO&SPG-f?1U zG9-{rybmyv8}BvtV*do)$GcI6WbN42m^&^7?oK8)Ro2LrX$3!3B>OpH8Z#5y zm*7K-pOIYU3#tdlVpv`63*}EDnZbF#O`E=@z&h^4Nf?H5(&iZmwjGWgKF&Bd^y%^<{N{vB;w&`%02;%7iBc*Pa5CVs53ofwsLy&60a<9I zVTM$CDlE2}xYy6H8!SFHp4R>Oxi5;26}=@e^=#_W@1?hS>!mK}NUf;I_9|HF?3IL5 z_!#4z?N}XcniPgPhmB~jC5}6vpY?=s$p2W;|4sg=sbz_0pg`>T^U_jY_%yAQ&3r*) z{Xj`Qi&c4A+O7AX>vO_bH?Ai6?Rxzl(e49RA-{2zd2Z@4QwM zVsgrEe%*b6N@k5*SA3ayYqQ2R>o>tR?y0Q@wVQNEM<07Pd4OjoXq|Iq5*ZNj$^M`1 z7Ob17Rk3gDqNn)rt^S@;jA=c4@~z}S+V8aupT-J~=F8xxAwT*p6u1=iKQ#rylRP3;^SAz;{5)_s$E&BWeMF&T%&BEtrOM4MTEqYU6=9fGI zogrmk`41C#mTg(B3f*H*y)Ml6&0M(An&vy#WtnTUr=M8|hhEIH0ky^?9ZD<6#OFr; z8iKnWz%G!vUmBVoI2iKSsannKa_7rDbCK?=-Yr@6Rv4yh@*4lSSji?U>;&(# z*#*7&gQ`+=_*U8BfdW(M?s2wQnL9spit+GnPTSS=3K!+eAZaCXA33pq5z19oW%fx< zGSnul`3wB1ZXQvn3MlV@Nzs`=6~tp0#6XJ@3><#w{=affWU@? z6D4Qw^uOvwZ=ZB%22-~esso0k9A7$Y1Uq|mIGj3uRT#r=IUA{&jdIR64D0k{T6Sd3 zAAYyi44?s9D}uOL1^|=egU-wQ&YBJ<#;<-w9Z!XqeJOgz!7iC5u{eHXJC@X)y3!x>>N^T^GB*Xui5hA-4~ zazEZ68L=AF^6g+WP1TaIjX5Gx+S!FDr%Xt39Wlz85idKXheA?0?Ki%~c7#KGmpq=H zQeWjal|bO^c@;O0FgT-iif?NtYCxj>Xgb>@|A}gaxQSxg;EQ_WbM4B%7>9Z(d%=!J z?%>I#s)*6%E+nmT=jpV7`3B+KEm|LK2%afu2TshMi_>6E<1E?bV3s#t%$S*y4Kq&d z+^5>_9}7|?P4Z<;O?e7!*h3ydiv6;^TK!xTwlHsGhqBXQ@@qG*C><4IzYolA)oS&%W7t<`-^wCLp<&R=SHWL!2mX1XMNqN<9oZUy(kgj(3^i)EJ$ zf(h>E0mCwfCs!w`%-WkouZ|ztWA4~NsddZg3Uzw)XdTiEAf9MUemmzfSCc%fW4di} z0d|h~VAlbLv1WWlZY23M&+cJ!{19%d+ zAVdBRObUbD&E$EFmvwrJ9HQXZ(UF4t7b}N%l6JiOzjQleF`LbAZAaw2()7_;-`qyL zv=jV=9a%mm;8K#0QM^lM9}^hzGsE+UAgL$hgEoyPt_redU)QC@n`=8%1=AU%b_fvF zo^m5RoaS{4Cc3jmQ7#C{9j$n4EUKIDT}c8j&sfXa0bRV*wAT$6U0|nsNUXzf%?&=h z%QD`h3McWPRch5Kv zdHWxakx=mRi;wgm^|{w0VyuUJ=+Dv;=m^&@h_|izQSaC}WUjjZFL76U`r0P=eB{34 zy9!*fQ#Ax_inH}^vWs=;j2<}ty}HX~zqOqs!b?R|#27;5%fL_Z=mfRslPeym z_#IcE1bw!ft`w(*40KQ(}KGWDNk61kR363i;g)C84BYKB%a3Zz$V%9s1c+V|yu zp4Sp>Ei6TP8mAYXu4}T+q&-&7z#5goj8%UJTHlw?fh&H6zZoY|5gup$K0#wCkF?M! zH$Dkt-!fbLu0^b9yKwR<4uv}s!z5o=MGPwaAsPvZ`%?9n`i%Q=n<|$0!=0PR(~!ZZ zCWK$tKPV$QM~-jyaDzRN)t{%UDJ+`i*3#F@F)_R3_ZOnmV^kVUTTVTylEAWY{K=IW5Ei<&0pg=fau{r})?bRgyh%j%sOOY(IB)ZKnH zX3!BhzyAmCj$Us};b<3+_+c*OI#Njyx7@2$^(Nc?j709e397J3wh>!9d@|@4<*HPW zfRoy{=A1Nf`Z0u02M?lHShmkr8B3kW%5YbSuYNuC%&1HxYhal&RV3i}{CF_()1OiV z$DR*$8=uCPVTzaDXlFGacVosxf?>loo*;^TV`@xm)33A5F;I$FI_A@d{6I3AH#aVm zPFtSIJV%%>K}ow)zdQUhQdxpi!>EDB`3+th`=^hRZ${VP@`!|aLh8|Ae0$EB^D8r%{K)&xoy6@}KtBpvn$*m{JB=H@j^?ym81D4qf;4F@B#kJdC@S0ZAbR%qy8 z4$Fb;?cLD$T!-xMdO}8ap^8JFfRoZAK5|py>93VSRb4ml>OD1PC3O5`H5TC@m}zeA ztri;F)sP1jW|CwoKAtKMo#x9=s!O=-CwkwHId;UVw`tCIyD4{TT_1r7DXc83IMF4Q z7wH#uBor$WXPa?4nJ$1mmMvuH?-axhf1QG^P~XVqr7@_OOFO?8YDp7PLa+ z1Ig_o+fCP-w5&dnmp~y`wc;QBvovml1pD#a!qU|2m{En#^kqDMCJ0)hx8dyfC(iZT zH*too2dgQRJjkp;Pn*99g%u)YS5NtiT++fp1KsE%`bi1FB+);8dDsox`aqR-dZ|Gb z=B9*7VKf|>fjcqY2aEdKw~|`ptY*y7dQ0txGwCBeYHSv}yhJC1)#aBc>BFUvveHk} zF%mp9WyCLUeF;!I#%Rv}3@+a4Cv5)kN$<$h%da>CM+uk~`hnza+M`chPC{*(L>lOr z$!JSdFG9qPY-5C?iG+KM}({gzYQzmnyHwXVHq(_7!uID|8Qe>@`e3y)X&%Z8z%^ z&EWe&Xm=y_V2*5+>z;)a8ohY8N6T)}m*aY^FyFX3gRgg8e}5G3lM{=aG1tqQH`9@; z)jgQ^f2ho2X@ibd&oRFudUOH1UWMQ@wN>2v1ZDO1Yk~FKX-04@Uzsak9luX%U1V({ zD^A^9Emb=4z@>G!$)Ao;1QLH_Ip7eZ6*2--LMyqVHuo+SBzwAh|8O1?E8KH`?PZJ? zJQ-0QU>zIr4$!-q|B~U+qVqm=-$$m1*P$@2mZjW2qdvCobHev>mXM5zOA9ILMh3!D zAv=p+24^Uv8+F6|^U^MSC2S?ZS8Hz?#An6&CZCCA zL{_-b!E@I?CT|wV+jwo92VnR#t{YRH3h?#4Kl-!v*^+;kKYJ~%ZkMf|$kOemx1xGS z<_GNXbtULPX>Oa6&up)ncA1ht;TL!1BCs2-+L~3*>l!7Rn1whygkfEeJG?xOc|PBF zUEWzQx=_m)geV8al*06rruxfnQXO_C>HXa-OcWa2{6E{s1IIZ|UX1CPiK)&eMiub0 z2s`!Ci=d9&rsud|^jh1O;IP4Y0(~Qc7YO0)WfL8Nb2@W5hSQ6Zg3zzO>r3Yw{N})c zsrdrX=ODla_Fe_o1pj%Rf^PvyAiAOq`|@M}I)SzX{OXHfHyt%ICZ?VGYpA;>24 zzqYeD8Ohv0V-9DQTK_qXtU6B({YFgz%wlIKxQZ1P43li+Uy{3^Z4yr*82+J$#=GTS zo7WDV)~K+eAZ@P}TXF%C6azy-)@XgupV(9 zKfkSOTpbMeGo5(|Y8bX^v7MDx8(SLZ@xoePhBO`m{N$O681m$qd50O)zt(K-Y=Pxo zKnL9I&5^by@rVGIE(Ce)@n{*ReZ(S`?M;G;vL)xJUbW`UqeKReh_-So#52nS1a!Cv z-bm+bO*|###>BJ9$Po1#?m8Q83b@QXnmmE$xoG<$Hcx>6P(p#vDA8wXb%5K-n-JYS z2g7S4{s%t zXhIiijrL{9heF*yq?DsR!JER0v=xH7?MMd!B*skqL%Cn(n4jFK$9s(V)f!nnj5D6v zIg_>2=tj}B5;s$7YyVNGIX)|1K!t<3CBWUT|3rB-M%z8I zrrC`3BGVc%MRs0XqL92Q|D%IhK-ll4LQ6~b*l-_9c<8itzg3pAQptOb?|OvPZ<%7U%VD80C~?_m>2{C7*5q!V44aiLrF+@ zK7ywr@mKtbUbp@lxH18smtYiqid)ct+e@>e7>ZGrr1_5ILmf~oVlol^!!{? zp?4{DLv-=wEzmexQdF(qq;Up{Ed7^7bJ2m2tgMJ(D|eq8%8!C%UJG^&8ySw%7?=-4 zB@}j{n|EwMs&eJ%QMnyn3hVl>rRPzP4TD4NQ1dFo;{a-A84>MLD=ChxomJBFeY=cfbM;Qc(pcN^V*(sZEota8s;D-GWjskK_Cw`@3grvH(G-;l z&y!_v1MXw$M%Q19>&Yi%4=evM-VtJTB@@hnTF^kTP<{Vk(%%Bx&q7G)Yt6nb(3YJd z6e(@SN_nm`#oE&oHf*6Dv|iE34|YVyrw2nL(*tx{h7qb3+X9x#yE~!H%{q)t)g4<| z1Tn4-q6_1}Gw`Elyv4-#6uh}XSLv@JU?<<&AbRUYD@?PxY7Lhi%ZuepzIN!#Q z96R0$I(xgM5LbbXR(&OxW``eH_<(u3i_Y?2?LL`*{I@TW z&r5o) z)rBsEucL3v=QZ*5Fx`@lmc<}{1%-ag8lV4VknVZkgq+qB%Bk*mI`|w7q7|@&`LM-9 zh^>Vs*DVn5y$Wo%o{sm!*#>O(TQA!Dp%-vofbBZ%qi38PX8I~OV$@InQWNa$liB-q}prwmyE~_~-2~*Rvs0czdx+7ou*i(%) zoAD!i306nC9U(vFQ>)*)D#hmu3on^kD{|mT(YXo;Yc&-*3=^2&U0p%D+3n+DgFr%s5pTdhuzF*QKF%oA1PIuKa=A>(d)oa!#(_AD>eo z9p2~69lebXDdh@Pl2z~bAVX5>U#qo?bH*2s!sE_0w{`h>@H^cD+bwaGMmQuNL{wWM zJD+0~3?bVkulM^_kSyo9)`@@cyBGJ*U=7SnZ_t}0whe~yjA{q)=|L>o==EpvqlxRg zy2{d{X^<%7vr0;DG<$OCIf=T_MAf^P;@nrwEIY7#+yrJerAWkHRJWLLme}LgD=R{m`YFp+>5v33hn+%-*?QpS+TQWT^l;nmV^=O1K93TrxDK(U&C6 z04(l=$<66Sld6(QnG{D$;;R(~Zd9cx4%)~I-88hkN4JZy?j5G%<4LUwV;1)geFV2n zP5pjq4(o_km9Rk@U*yURkt=(w(ZcXXzE`_@+_;8W!fr;cD-wOf7r%imXbLH-*ZSY!q#@kWXe=NQfkVS4|zZMb?3RM`^=N@FTAMmv#lb9wIG0<-Z=`# zcMKN~_$g-wX&=u*0i{w&uc$G%ZELEa;_tsmhy8dZ@;2u;^q2_)S zN+p;1VgJ02WtJV=TyyDKkoveFglXxs8M%rIr5GFi#0#hlf`QRnDk=7Vssd@NkTqJw zuKeALnAHnw*4gtOHL+Xj(BEz`9BvN2yq`5IskTd`|%Eu-8o&X+V-_rSd)TF467PZq6$fLDu&V79% zV`hMgtjx}QM8P65wb~;$LV&@0`Z|1&NB6b`^*O%i<^{C{a*3FPh8RmHz5f7 zfZX$scf*6>Z-RzHO56NwQ?^JJEEJNiO|hv7kZwZ*O0^MxjlijY1h$9)E_tfLR;^M}3fqj80`tsi?%l&u5V%4L8bZeAH`v-Pxx z#J@7Ze4U?9)o%ON607$4uG(mei4dm;H!(K61kR?a(lkqO%rPYo@rFZ?Nx}m?F7H?B zUhoe!*G|e*S?jxi5bSzmfT6mp!g$0n1g>h#gJj-hu4IK%gUo*d?FoiXGvy}f@3;MqB59P{b?JxV}KNOI- zma?F8tj{;9+mH2v*Io~6`r9n0`>{Ju*fUlBVm4~ZRK{116%N-AY?20|QD{=JN`N58 z=_?g<68T(sVsfqxlbeQcIj-jc#R$a;ipYN;aHyWyYX>y6zfe%bzN3(i=y7T^`mol6 z1UF0V_0yj#_~nH@w1gM3?)(W#i&O}G*6hi58O``o1mF&8i+$(g(KbcbGlNqS#!g!F zp7c3vHrs3q+dY6)>d5p!U6n^veLWj=YyF`+m3#^9Kg@hpYmGT~GqX=qx7o5cOhtm1 zF)PJTq?pRf2T&^v_>G&CKvv&n3la*}$`ap@A&sZvQh!DduQT zUJ{duRhs_uWbCFVzsr)P0%v-|#^Ox}AiX&1a|1MEzI0zPuR8WyL0xHbM!jeB^bSc1 zUb_g-Ms}5dHoQh11b0kB;Jcid>Vq`G)1dGnT@v>^{n~HX7KbXr**a(CIJ%_>d2~vw z@8u@78T=yK#Yw4~lg3oVv+lQS!DgUVPSod|nT&@|2`|F6<%K4q5sf%dY+6_C+X-vWcnWW>_A-j@{AemNHJaAlMJVNbt ztNdfN%+UcUc=L8rVkrSGv7KgtL!u+g(jXFe?gBtxGpi(o1BlRWmpU|WdJU~1<<-xC zh?uYevy!A}U%ZvW6}3C+mp?!_SyJm8&98^CQp@+ zfe2_63YpBzAB7w@fjX=Iq12NokSW-B4`?4>%}wbs6j{X%?j3BkBX^qTHS41N)T!S} zvzKvXGoHX}$+t_oq-~iq(5o*2>Y~##ZQGiByoq&V9_^rf4Dg|8MbImu@gL*y%-9lj z9j%o4Ej4X8J}9Ri=cNo_ttDs7OxHjy{{lne0bs*SNl*hh;{ng7X`bYXC&EZvQUK*& zYTb8_>(Qdd(UXm%k4Aox&kf22*2mF5h*XM}tqvQu+xDSJtEh3+iu>%B0< z%f0Q55-(nTT~cj^J#q@tC+p&;#N zu~pf`@q4rL5waGt5s<@>h+uKqTT^;yM&i+Xm&}*I&YkWYSHM$C40nLApUQ)0hefBC zlW)Yf%-yyhq|R<_p)0KZ3YnoGX8#YR8)6ThYqa3Z8Rm<;($)8F8Qu-K0UoTTKh~EK z{COganTWS4&JnZgP@A$Fm_?Y!pnElP=ST`QqKj?0WfWC`;o zaB)9s`iBfR!uTk4?r$#}q4)%MrDIC`}wp7F0K3EY0&fbI3@=ql(=gpmjd2M)(|G zP0-a)Kv3OCt?~PU0KK1DCcC>LVrV_G2=G%UO*o;?@Yxr74 z1OE&R*1X1)gTY)Q=3^4`P2GJ$c3tZJvLewkXd_ljed=SS>X^p0;WyAAEdn2YK)(c5 zzkwWj5Z=B3>es^T`jkGYyC2v1k4Tsh$W4Jv3H=2K3c2~U#y9$F2zS(s3G0rIZP|Hw zF?0=(8P+;p(C$lji=^gO4jF!`pMsN%qFj7qc79D@nqe^GqoI<`DCitx=Boo6}Dz?mpPAGVQ*()W_I zOiJ!1mM^SnMqkjC;`vqwI}a2SiF@byAJFm7bv*WKL6E+T)U@#JzA(U7`58@2(JE|mCt_44aI^l6mKFPryFFVo+Bh?D8& zsRDVUkH6p<$ExT6lZy%7k;pDsqPMG%`% zS;K&Eg9I`7-#_zM+89+67d6;V5lj~4x!<}ifD7>JB`a`=;}Y4zXOA{ScD9WFlx3pF zCq9;=ej1~S=2J~gH!KKqAp-WnNTNXctJNGYm?mC2(Ipe9*hsmty|h$yjy!H?NK8KT zqxBI`LMkwUv0XspWAMsH#l2J}BQ6+29dV z3Y8sHAz!|H%ln~;iRRVY=kr3vqZ$g_rtf^SsK;bZN4LqhwG#MH(CU1R;1zCNwim%)vFKc7 zEIbwv$-HXJpEFBy_K2UEe?2%ltT-yy_Eq|@-T!XnMC+?JN@*TESM7?)`EF?!8O zdK1mh>mLNhlhbSq3J)$p_ICL9+i#o+=eE#tu__ap4A>$+%&P1Sx}GyC6nbDInWAF< zgV_V9Rari<<6tI8gtJEb))yU;j!d##w_1^H%)nT#t*1fmg)YrMf!shqxqgd#iZvf%+u}^k4rp~9qA~uNX8;873MNOJwYFgmZ^+?E8bdVZ=O(54b16RsIBVYR7k~re7y2_Om-5r^oe#KdaZg^RLd25i4J9>K|47tY zu9|#i{&C|m+xDCS*uY*{RyL_B za~t_hobvDN`1+F1G-_W~R{^nQ`<>N4un^i?o+RW8anCd~Tgsm_oJ87`VcyrC*Zqx? zW3K7EH7{9EWa@$Bwe>c8BNsClml2I;h2th9`1s6}6+?rp>kIMi8LJdsOY?8fhbp?( zaBX!-C1fX%oo{Dt3^FGgu}8WvV@vmb5v4B~N`}W+%=B5}tZ0ej7K(_3DX`RCFcOJA1v*d=8=w@lPK{>zOrIOCFDeC>wGDO}7 z-8l(RsBN%Vi9IbUtj3L}I-b+wn-~dd`Evw#qB;qAvT4tJ+JKL;GpIMcY_Ktn=R466 z-)et|ey&6;+7PCdXukbMuUR;EEca3oja@}YQN56_kcPWTE{JoDw~Sc-G@r-m0?^x3 zDo9^!jRSOe5_6 zOK$?w$%FosjXnXK5-d4e1$%3sZonVMb#;?FVt*%*?XFcRi$n%6lOOm6>ok2yna=7N zVBHUiWDBB-UUt|goOc4qRV@5ZO@UF^vwLv8@1pA;3d*m~59EBrCRk;Sr&oUUx~qI% z|4=lKSwj0lk=IMIFd2 zm>IJby0_i5(d2j{vHbLh+~F+Cj}=h=`&g~)Q2Jo56cU2xCnX5o^c7Dr8-Rt^m?Ud0w;M;@0>OmM&np0OZ+4*pU`-$EHUyi63O4Trf ze3s?9WaCj*7@(_)Vud?(Vk<-K=(3tNEzFflOdg|Hm8Oz~fJ)DLYv+9ZX(e#=uN(aF zl)uq9>d2L{;`f~7(jHr7?db=GscXs|)N!!OejVpZ!#R~yi)M4=W`pW0=E6Egc5;*X zhx#<+)704ToviTYH^*e>zu_%Xf{~?NfS93Xrj2tqnkndz^q1zC0REGa$M-FXIy^>* z8LP#sc$T*iKspr?XT<*EAwkRE>imr!qE(<@S#Ko6NAms$Iy!G-L9493a$r*kD;Z z8K)I(*{A<3oIb^>R!Id5{zDNz@ADs@<34K=9Ef+uCS$j+(Pn}!Snbyj!?FNTc1l|n zp!1o-`~wyc`(fH<-MWFdd#rnsHHW^lit*7Sw4|kaW3ILu9AGMJz@s(&HMV?=W}rqD zwJ9REXJlL(6z(B_3$~?j%`MorQ`?8&eKCca@-%J!vGrYhva@|gnQI>PhZ?L|Gh9?& zsAp%^uM(!9`zUms9M<2PLD75?h~6V;f6g;vs^js{=?n=L<8Oc2J|_?UCA}jw^J&~H z_4y%B_xVuM^X1=%=Fi9V>30&1P6qRBIRj^jv-4Yr zMBw6HJZIz4I!)aP=UH~(_|EFoCOH7(Va$e-T&Az;d*lh8y}+#;^}(mbW+ zyVi`aW0`iqQT#=(+ZpM%#~r2Hb|u81@?Pkyog`XMKsbUTQmD(d`!D~>)ZaG-Z7De zm0INYgr+jb?VvhLw$0x2tWtPzmb%5miMeZAg70s*bLXh&MN#P=aFJsM@jnz3;Ko?~ z*u}0^oko5h<5;XKDEto>$wT@+lOvjD!3Qj;WcWL|;+i(phM(uX22P)0j{5Qf2CaSi zjOac~HPdM&^vGF%yQ>KO);8Yjnd?}h&a-GP-QD_v3BKk&v3h{`GRO-nOqHzJs;92mT zJf9VZKJ-%Gj@Ng!fTqThbVW3m&I1};8dSpDTT7p=1T6h`x0R105M;@2FVX`l=hHif zSuXA>)%DF%EDAiHD7HEr#J0Q^lI*gIt8Z|2z7Gu@>I^>qLunRlZr;y0lwR^jJ&yK1 zP~8?^I3OF(nZvO#Dq>Yr@P0M`7*`E>E78qnaBLNd%uZe9$UA6c<*&FFJvKJhEKOP( z3NXxM|51nW+m~A$d)D1o6B8`B`@ESmGv9ht)sG1ejJ|4)EN{+}2GqtnuAU(qBxn-9 z1Cps`IYx;7q>$=w%aX8nb>Je7Tl*UZs#b`uBY8ICvv44=*Q(?{DJn^%`hzXF>42`mU2sI5{ywTzZFF$B&$gqSqMEYS8C zx&e9uE1KpooM1|^l&tIX{M!tdMA+7$vNSxhf%e2+IRK-=ysQdxD)(t~sdUlgymKF` zvz`)|BxAHl{%X%1?7Gal;nfeA?k455L0#e--)PO13&M9U)n(-`u^#hTxYpmUmk;gB zDd3$GRa;EAKmS;&%8qiM9BvFBIg~7_bX=cvl+Kox=N0N_PnWO`uR(ok(Vg*%#@(Mt zG|O(U!C(s#PJiOwInz@fgAdDg0YB$idFv&;2e0|JuVknofZAruztSW&VJ0`fj@qjy zzW|&kAxl)Uam(K-REC;j6&_J8Ec}0-zu)Cln!^{-eCkGAMaYUn_uQI^4>V?bLpHME zEW%sbElDG~+5Lv9+Mc`cO@42DmcAda^$lG?)B6{SkpWozAKSSnw$*jMys$X)JKrD?OH4}-zNsrvkI`d&i?Qo#Q0lQ8r~Y65~W{1Fre91 z!RMqghql72?;aypVLm5!R~GqDSUvxz%~Mm>e~vC2nwOU6mN-LJHrI`Mi<7Ph*{+~9 zbU#K-&00|7+pS=8m8<9#(mpJ$BbF>=ig|c1@=l<*el=3|i;GG_|N7xM(r1Q@-MrvH zO1c1?z*hy=q{LGAqHgZMVGd&XAtSy}`k?o(q(m>at*$e<)G6D|Ti?T(?30P*iHP%|944Fvn=jcn?Gi)En?<^3Wa8>-Lkv zigf6He&Za?4sbrrnz+6^(Q;sfTTfI*riJBYjmsL&%A<|+RjSS8lzz2w)1apsDSP#f z)0{yKnxIX)^lnllCBC2=z zT25YOgf71-TSiGn4lwjwi&n$VY|z(G2Gm(PUW9+Mm2kJX(d(7_BoZTRh4G-}ScFaE znP#8oPGsB5289=*GWk$|kU0Q)ES#vGqq))S&bWApQjSa5Q=T8paKb6$PE4iYxgNMv}rc z)IMJ5tom7r8pCOXA9W3F8qs!hT2<@i!uhr=^f^H12Y3q9NI%4AEBvz;W$l4GndqNA zM21;=XXFywra?#Ea^q3&E$2ZMIbup)yTRURilrG+uSEe@R*gykQ051h3SnAXvsvxv z3U(|7B31j+c@3)PmmYnH>x0Y^-MnKP%de|4NcCeK&}rp{UW0jED)gjz2r)s=GrIu|HQ2XR<lVpr6>hVMJd)TEkKYKhl_bH3`gshB?R8E}sdBK# zXD4=c7T76j*avIGBe+^B)3;)3=a{~NycS}hR>Spar$~IR! zfA)Rm8`!ND(2VNLZ{%8epEFj4lvo^JTjY_yLk?U+a?J}0?I9|1gG}X}-;e8Xm$AK# ziFM##eOO!Zx((!yJki{M(>@Z)OBOp<+0&Jvq7vo=LY)YrwT0h?O8va9BQ$GZqxJVf zd$0LO#YyaNnW+$C*dZE`?FD`lyOsk(#TPX?m%;H#X&syuHfk_JAj*QVj9BI5Df?Re zAx{!!DiUa+54VmOd3H%K+BeECW;C)nD{rK8bbA~dS040innwGz>zC+(^8vPG0v~{O zd0MHoq&k61d@S=rx{XweVe*x}V#!{CC$IZqU({^LaZY+psF*WAmHCT2R&gJAWi8z6 z-Gh!-C2Sp(S6fMqQ1TfECE8jx?|(yM4$T;VPg4I$161(|_e{c1In47f)n zZ!8_B(`sHp7n}XY&q%QOSfF8;v0;rsIM3x|monAcdj6yLZNLQ7@Zz`~+>8^rj1Tr5 zy63zvU`1rj;H-S>?niy>2y-|K;n7obHzJufy&+d zrIw~=T6d14^QO1ff=%T;*O$KUu?7_NpT>9RBL_=tK);fvDO-GlR=9xS7cO6&N1zQK z)0s+hGs<*PXCuvA%t_GZ3FY8JiE6^Rko+_yMzqP9Hi6;Avl=lGS-3(&3P&qr?T!D? z%(B)un?)`5uDUEv(u#d1**Ob5Q?1fKu=FoubBjt=X_1Vus>T@Muc{YK%&z^Ixu4GJ zkn-&nqKUgDY_~t?yA7sm9@>tc(&!|pw)$oG<<9sbdI3i-gjI+0xQABBmvo*r{s`o!B)zcsORM9Z4>*4USSdLVM{@oXjNiMM>CNAO$agU|zf|2_ez#^(GE26{h`@|c*(GsjHU zQ|=*0=00gtOG+aRRWd;kmwHazT2HWpq7M01q{@erO!$riPvr424^ z8NTr9wB`Gj*xKIx12?d)XpYrUen!&;aVqAtUcA*cZDmM^uQ^1VTOOXYG{o&1 z@s}H_8Z$3u-|NRY{$?lb_kOXVjhHG4u3YV6QPttfRQ<8s9392#TF(T>2P}Y;u=hy1 z+0wfxjg(47F%wJdRhoTYyUq82X6%?IpC#GFoPqMEKw@GC%Nr8`EkkYB9_0+;IlEbf z9@%*vW;MI5ah&6ENS@+C!n>UV_N^mAA2*?tq6sqA!TI=#K7V!n8&*F6XtVe@6){1l z7D2`>Jg^ZB&6v}|*pRncP{riL3U)&STq2z7Oer9?LjLRZt{{#0)rc*sqfO#|$dXk4UcVBLVJIYWJJKh`u*zxXD*mH>W91F?{eSuI)HxD zDz?7kqBeP5Hg&j!R-hP;xHel&Sc@Q|Q;3d{lXu&hl70)b%BmX)O1CRc-JF>_1o|=` z;G0#5`P1F#M$l??#M+hu?Uco1dnM(A5G%T2ob3l>B$mz=d(`4*o!m+(VbZpfu96|_}AbI#& zg-k%K^~b5Xtz+OU$v>3W?5YlBoZ2IQKP6O%c1iugaU17Tk@(&S7^pb#-x!-!mehz1 zukzqe+HHQcS22He=>hwPvhQrlXER#V<)WS-@;O>JC+s#W>2N}L?{1ghUcW{h;}@;? zn+Z{Ju2!G3CaMZ*uk>?_P17fgI-R0)g89#7&7ApMS8A-fx1G5aY{TxJjTlII^@$-^&vAW$=vH6xA5B|)>i5Q2jv;0+i zK^Hp4QxYxRzE+K%=iBEU5tT^NoL093go$zWgeKlPu@F}PvnlK788T7Tb8Poy`-yt- z_)X&4i8en_IS={CEl;sDkBy&3oNy_TY7`XJS&Tcp}74t)2L zDX##cF=Fcfy0)PDu4=eLb?|L-pEt(n^((5|N*E7Z-O%^#!bJ|2Ik*HBqTER|u1WVi zKkGYuXMV<-tQ|UVMO7?4;C!YBt}>W0FVy)^&HKzgR6}Sb8;gMJwdhtQC%*vuTY+14 z4WbRs<7+a*T(0rTx?)ys9ORX0gz}P^xgP*-6p-JJ%qymJBe^T;@>Swdz&A>Yb8Y06@qJW+C*XK^C)|<^u z%VDPqh2GJyL7JP;RL#bHz@{PuL^H&>yuO^v{8;tZojvd#Zy5Zc>5-p#v z!sOQxc3B_Rn-RE)cJb@$Q=xe8@%%65S|4SW;R=GL!;hwu;@XlbRx8EZq$`Il?r+r` z$il2r0~>!;2?!mA5H+D1@UzeQCMsO-Gfd=E&h>N_yJq}pb(Dfe`y)Deb4x4^X5wya z#`=of2lbO;GixThheRUMgVQ726aJKWM#y00-t(*RUAj_n`H#Em^SDBk$;;Er;?~ni zKev$|Yi7<82s`-rY3E*_suX%vU=)+QP<&A#oNPw!abDEv`H4J!8*7kav~) zf2G8DQ-}YdyfP-KzZLXg!V0hrpo}!~4{-(!v3CI>&ij)2%a@mA<%FIm2!23=Gy zCNl^5`AnE)*IUJrY7VJ3b4e6V+A1x|Rc zquYN^iH>xmrpNE_mai{4W@1LPHEfBc*MDNxuUjxT-DSNz zbH>@Q$lb};FMMJ#pivDf6^~Ag_FZ`uMP08?qO?Mj5PDEtZYF3Es&W$gplQj6Hj$CN zrg=A%c0U#^u8UwUyROJsLLSwl=NFQ;r2pXuaZn0HI@Qx#WJj0734VjwN=gE@ z0!+lP0_o103^$B!zqtOwJJPo2h=`AEplc6Ape@HU`$-MPZL?j4L34L9Si*a1?@<;&fYTd*JLXr8NBzX-R};2g;^qX-e1S* zy>mxsrgd55#Y_N#!`P^E*E5oSsq?aR?z1*lWofV$ug(s}m(}s0aXL0+ml$jXnV_mw zVm&iCzIo8&{Dw>%IsnWGSSDVW{{Y|s@J6U6fUG}PM?2iSw?zREf`;IDAGCNRT#IV9 zo`f~O;`a@E~P;NKN zl)Zo#6RpK%dtAh&EpvV<%R1>1LkiI6+0Tx_6}5>aj~8`!g`v1xccVA52~HG{6Hz#X z*u_Vtct2IUar7KBYXqBW##NVE;QqEi4D^p7^L7}PrNx24FVn1?lKU9!7W#3lHGQ~6 zL~oS5gytuq83GAp${-$jryT8&%#-#_^OA28wV)N42Ya=y7{jj=hzSnPu)R6zKAe%? z1qeB^)JS!)DaW&A{!ee)f19n3NZ}dGHoFLbs4RDEKJB&~78-Kk6dI+rT62C)a!02z zx&S4ZT7OcF_ti+CVea(7g3m%<$TOmSj8bi~GfNjnj`~Tvxe~eYYN}H7tILZv%;9B| z##reMzyFrU?lfhcot<6ID4~wV$0cffHc7w`@tflN-j;3ZdY0QO&9u7Xz2jGeU)C_M zKPY*ANvrHGImqr1`kpmiX^#FW=3GGx=PTwfX>1fKT$eNM-d5c4CvE3ibwz*2XLcs@ zD>V1j%7ReM14R#Ow=;tR*>djSQs_NB9*r7R5lR1t2tT?n1BW&(qZOeG$C}8@X}u=M zC0OA!2dMh3JU&~=C7FQJlKJm50C%;bjEz`9Ci$<2P2%^ z7Po|7YPXOwC%(3agqWo%1Y;eF(75egVM?d=3oyT#CP@}+>d0>&$Q!cpOKSsbHu8>2 z7>iXkQmVZHFW9juIaJ7M8}u}hD=qWHoj_N-l?Qg(_ljN^FiTx?ZMgiGZwMb3o9G1Y zDT_NiaoYGCk|k$vnbkNrQp@c&EN^WO+-{vXZQ|ISC)#&0~_ znH-g;s&KuxI678zNi@~?p2nebGe4H5Z!tYSvXg5UBMB2&OBE8gBtNn8!)3T7WaHVF z(=IsFc}$AgXAQ1oPxOQ=xulwNFP4Iu%YHGXy~kY13!q)_n~rE_=$X+{_+IUtxJs%; z>x%XTAp80qwo`dW&gW~GUpe*ojmm@WMz#%PZYEh7++nuv9!tiNkX(&?c5Jd|<~o-L zhaMK1ut4@o)k@>bGRqm96SuhDqkMtfwiY3}$COdD-%DNCepQ$?-lZ%bsi-xfN2gU3r5huZy@V) zV1Ep#g-r{P_g)wCql-^zgn5{fl@s4_i$V3qK5iI-`HDh;Bhy!KcKrrA@6(MPnu3pR zS=+MImCKr2p+}oZttK7WGZ|Eq(gr|Y0Gg$a)G%8jdvwLKn-!3i{BCMy3@Y?P8ab2? z5N5(ap~)2-JF}VS9QxK@de#Td#ich*9?nX3bN-Jo3xoZ1vl=iP)Z7f z11)TF_ok{VS#&nTb4x_@!!&{<@|HJ`T(>@ByD5>-8J~IwCyHvq+O0-J;xgSE|9&dz zuc6zkJEw2V$9!kPqi!BUNw*iCV=X{S{eCMF|NZFI(dp3xQmhbMK3CAl zJ`gNlH+wCX;?SA2Sk1%SW@P8`vU~{P))(+Gib~zSIrF6xB4UC@3h9NKwT`|XeQ!J$$t0pP!Aflw5rKbmI-T zkOv;S{N>6U`Xv2U>zkoXkZpHlPmQtEyzI3%a3zA!={cLyC*-*J$+OYn33wvidWpCs zoE~iSkQrCbU~MZ}THef10#_#IgUkxvsH)Pj9Zfsosk|rZo>9=`BM%y2_Spbb6hDio z%-5Wjf<*InI|tQu&Qo-TR<<_PZB7=m+mUG~O#tlYN(^{1qQd5^J6qQV7&?dza9rI_2!0)(8y0u0J z3;`(M3*H6x61>qA%Kq^FPiv6~V~c=b5rHN6dQ(4bB8%mDqHy)=a#o@Vs)5n%5 z`uGGQGw)s#h*Pjhs9rDU^JIL@mB5w4>H(`x^1jQvA@WJFjB zhuHsM?=6GcivPY%ihFUl;$9qr6(}xgkpRJ32p%**uo_z2oj{Ab2ZvH91PJaVSn=Ye zMJx2-KXc#D%IY7~4BMoN)var_f#3R{2FN^{N}YJsRUiBkHlIvEMBgTxYdu_`;R$Q;m8b%dTl$ ziuQoDk*~Fg`}pxMdRL`%tQ)WP>s|-DfrAXFK=}L=f&BRH;>!fQj9u+NN^dWoQP(Jk zeT2P_$`>)VY7G<-X*f0iMcLFbU%s%UB-`Xry2s18DDq=+eXayf=NTJ0D=}4q$xLjP zI}Cf!tPN$Gwd~ZqN_%sQXLmgIP?Vc52=7U&=|ZCo?38J#93~;3|1{=;&&5bX>o?la zvl`JeZ{+qm<&IlnCmK{r>(`{tplO-=Kk@_9IKCGHAkQmuusRuO%3Yg_;|akvo@aQV z!@os5FIPySKQEq+gcH?2wsqK;6NH0usU__@Ugq|NJ(XV|+7^F|fq0da-4aXS><^vg?pEQcPy(rxv> z*A7~^peRXTzjG&dSA5^Ac~Epk;toQU0C*gjC~fM)D*i6X=4)%R5%&a->XQYY4DLds z67FteMxpylid0m>?n9j0^nvpj)AXK@WtKd-;E|@Nrg16AV_-(AuzrV(DQm0kpIxoN z&vIHWPpJ?yrTx|V0EWT`h95n=S4g_$D)4TIFrFwo`n6gs7j@4!PyYU>XC*U5D_2gP zti*gi8m%INS-8(O{Rl_QjivuCNKGf2m~QN7kpQamm2g8aB`-hE6y=9=H@AUr!Mc|Vb` zG}RbrH|4k|vH+!XIH=Uphx<|0W1gttAEW>^#POe#5eDYZw5U1HT{CW;>xz zxv{YZ67K*t?p7_>l24pwLBxS zunuGXG3h{ap62Qz^==nFMcgKa-r$s800uhYc{#Y2JmKk7J&l;o>nAhCU|Q>BM-C1Y zx>z5j^^TbfPnAB;x%ciia-Z@sc!UAJ9d9&6=-cT<4e2!W2%$Ce|U(hGXt@oG3iHl#F zImwtzFlfbp0NR|5G+HDS1{AjRo!W*OFND;W$%igykD@^6MD4EevvL7`&Z<@Q8Z)x# z$Va3^J}28z)J`0ujE^@uJw{vJlXx)nt?sN{uJV$JKfj9j{xtsgn=k19H#j|b z$Q+)-Tnaq^2n75PzhI!1gV*WHZ8Cs#dD!`c)rBJCt$Un3YYM`Zm)~{;YNxmNE?h9P z>lBp%SZQCSAsQ!-D2D5JIOLsR z9`z~Q0%~qr>OEww%I4fVTIHiYbc={bIVfK$s^s0=%*OR=8KE=kd4#8|WG-~uH69~m zg+HhJg8XCZT$uAul$I?zgm1f5_vyx0q}ywI6ff7x;||KbecQn zjpx1%^tJSt0C3N_$0r&<$!7YS={n-O+fES6&i-YiQQ)HkoLxRzCwC6;c^UqSLLOF; z!)>s$Msm_NOF4_V(w?W>%e}DCn8CnOc#%~)Xdy$YrRr&mKv_;aOON4}_Ql@bVc4{C zU^S1|a{4%5IqAYhkLMc>enOH)rQCx2yeuC~#w!SZLMpi*yN-B4ryD27!cGLL&is4u zW7Nc#K_g7i_WEtjtA|*Y+ZDo}_jE!X!)B%6m@L}wuqHohO50&QEhBY(9sNewny&)a zaiy|W$%U=7H%ukV5TNs9vVa}9*|ue09Q+{gtxLU`94|&ixRq_=tN)+*6%l2t%&`bS zr5jVFi_rx0Ba3{;(s#q1N}3BE@olpLuI_AM_7h&(1F#P+?W^6t8k$P0Sp^)MXc@#O zq)k0$yVioVx5=!HB54IX7O5MX>b^e8)6tf8AFYLIf8$Tpt({^n2u)u7^nQ+B?5z0~=W4>f`kRWDZl|SJ>xh3tJFAhEuzGLU9GZ7_f@|~R?z)Pzsj6BD zC#TF0DJ1yK-fw^KrDs0G=Q_tmcWGMw?_I}3*Yt<7k^=%I95Z4)B>Bj_hFM?}Yn zQ~}X-8CY7~nygP6wB1&^w2HWh{P_eCSvN(nBzjE(2s~zws_2M9=?F0os;=*VQZD_) z$RB`Mv)tRs{ZkF0?_sHF8vU+$)hPY+8}6PSEP=5Gwf!^Zyh+`wNB5LDE$=R*+|71{ zoWfmHTpzgo1Sqq?VjEvuU|BjH>n74zGmRcElxx!gre5S$GDEq2E5j$9r(@kUMC-Dz z!oHh2UIqMMKVy??ZBF)YldLos*Ec#^*hg4A<8;@<*5*?i@Un*(%&|tuKA16LBgV-o zq(NWG`^Sx(|F=u}e`}lnTaW%PmU<8;9w-KC#2KY%7K?DTXKgOM2#t>gGwHT+_<;JFGBHnmu;aDCyTNK%cMWJB&z zMu>?t^s4Op%gpbVFS1i)E)hWlX2X{}egM01e*8#^uTh==dzd{Zab3TuC~k}(-do%1 zZUdlOUl%`SCEnF^SB|o3p*uT?v8F({@38CxW_9+$t{^*$GcL$6(Tcur)k7tCT&%D(eisKGdFAX(-l^N!$ng-Iqu za&g6e5r^(vC4H5NTy{wC?TY`3)g`=Vz(N0Ww}8Om>g~zY(#o^+neTqkle)6bc338} z|IAyflwPeluXe1gC2OCqao|JK)Wifk8kJcMotTB~l6x)Cl5tn5Euw8}!|gsfn=IJY zC)v6|dCU5!PENCnGlcF+)SAWA)%F?PL^q434CysEM^M0cCqYn8+1C_yMXJ%yCoi1d z?#-#{Uk_Fi4-%R9q~xR1`X%|*?3~<5KslU3u)|UsCDnDo1Fy{-?8j-~^?nhE6`uT_oQhM5q4q;b?6scy}X+vlT5fhYg)C9n#n>Nf>`?^~8AMeY|>aDJ>+TyqeId8@HNu(IBF?+IrY| z`Sb_N)&@%HFRdxVzC9w<(R76V)QYtl$r{!v>rP>_&l7CO5#C`J!Kgc)zLgY(Uc@B z_VHw5)x^X->$%a=AAI`)3;C!u6B>3QW?$l=M z!N#6n_q~(7bkCsz@#JX!{!!%58Si^4P?P6)(ccNjK@SUPR3R|6_HGcwS6x+kQJUq(rR}NF(9A3zu~I1Ln?XAXJZ7gf}C4yJ>M?iIGu&nkCSe3a!b~Zz&u%r6goo z+%d-YmF@FOEng~r=NH$r?5Y27u5Xdom!wbswC;7xO3qT#JS=v~>50!s2-;KCm(yxK zF6G&1u{>Fqd^Isj<1@2uK~fo!HA!pa$Y6LNtie_;_@coj*@g2_sJ6UksFk~7ZMVA= zt>{yCFM(9APq;Lb& zy^j~J5PC45a%kXKWL3^j^#G*p>rH1^5Q=6N-^4L=c(LHOq|%&~Y=?Dx1}j?&CiPE7)072@d6PU0?vvh=yNU z$(EUyJrF(xd1&i08Sa=^#*05c>6Vty`cU_J%IP0Y2BX+a*QK8lExQVOg~FtpzTulq zY!v((BtX0=SKIPOv+h%|M=$I6EHZsXXk~Ho{{~Vw(l=&Rus*DKbGvzWyZx4*|0Wyh zh92}1tjVyIQk96u8N_Bb^?9L7Ue=6t@tFSrg~Gfo`y#Rd))^D*^zz>tUtx~qn(uSj zv-#Pv%I|vJ*(*3z^jAWPza7-Hf8tH>+vVlqC0G@kZ5LHdI+=IGI=VU5V3JuJApc#WUXMbc*1we4vsSp~lCOSvcBwqcgs>*C@? z_o1WnmUCjYh@s`9fJBec=&nkg2`xn&Wyk8)ydJa28kz2sQU1%V#6?(I6s%40d%Oq7 zO5dgmoc^tZaPr-7uYBGI=Vg`lw*w)^!gnu0oPU!;yk*}nDEfJL8$^2b%_***AnRwx zK1PrZQMQV?bswc@c-`8DnZ9l$? z>>xqUpcxK^7NK=QEm-J$$jqm-q6CTZfC0_2Mn{JWckVi z@k`a7Mg@bmc-yYk)Zo&;JCh5T#%|_$09U#Kw|C?Z$-G5iGFvkcdt-F=7!BbMnDJTP z;S)Yrd1sp*>iyzH1y{xi=LvPB`GX;;KEVOdRr!*>mcDsd;1uS5nEv#s0V8%wraFd7 z&RUVn`krC{R0DBXrnf%stiz_j7{&d*2k&mahWhNCvFt#tiVtUPU4;ZslC|oOT~Qh{j#GN z!;$8^f&AlLzETi9y*%P0|3bQ1KfkeW9dYC zWJQ0%iBjJd*kQZ$uQJbcwq^S&Yojk^JTDrIKo-yD;&aT6cTHaoe>96*$c&3~+lxv4 z*$Lt}tm%-?c6E-xEO`RjgGta>x#6Ysvl@8U;Q9$Rv2b`)(zJWS(8%?BA*xSpWaP`3 zl;U}dq&UVvt1E!xyd@JBjHxNR)f=<5MRPp=@w9+#c*aI=TeT^tX~a{(wy%-FZnKFg zw|nnGzrR-Qg@qvi$V^nF_lSXVC$({6_K~qypgA24fNtno*1GRG6lmgo0&aSos`%z| zR8?v6&{m|)nGKn!-}}l>YG_OL%8xSJJ>%8jEgJ1iLSHDO?Ew40N*unIn-cB5H+M_D zERQWIs_;-3Kq)0{g}*$<)-{9x#*C2Y=~X(wg!n+89c&*`EFNiCmH%wcp-giN!d?{T zP#NO+*=quz`u1SmezkRSS=sAg>$DrvT>a;bTf>xV;~A5S=rOd{6I`f&K)NNY74eN> zdOab^e7vN}nmwS1IPZrmzq@)_x4x3P!n_!dETg#miMSLwt>Yx($F00$xi%hckfv+l zr_LIcXI>P4B-BR8AB0w=&&)rLenC!LV}8H3%GzxDE?{!y@&iwIR2!=>)k5EHa%KKG z)Fld=aif)wSt+UGoI9pUER=3Q#<%9FM7Y36s7oDXJ!{}XZBa=^>YXxaF=()iHGFF9ML3-MUg{Wqq*b5RK>*NiHXY&{%q8XwS)H;>_srHevD zK;-3x9@3Z{Z96ZW)>0XtlY>Cv{>d$UckN`YEw{CUZy`u=Y6DKcC~ETsNtLqRkF@kx zSt8F!Za&@xzK~AQq}O8Z4uHC1cWfkSuU~T*AA5adsqED<%hKjpkQfJ=@n#*>i_c)L z|1LD1D!p*G+I!4O`430=Zo;eenWECDUT!R3lm#Wj^EKi$p?9e*_oVE2!9BsY&gde|7i)1cMc+;*)hrAsI@L3A@lFH=GbSe29S{y<*x{{Yw$e z;dfTq&zGkew5|DLscxrYcB8a*lWKIEWg^|HJ&bd#K+`1~pob61HvH!PD7;~P+Z9^! z4+oO-LxMO=l(YK~D^AD$K%*URtW+i!4>H1Nq zUZ*UxOIF}_dCe08RQw{{d zCsn#_s{f8_?LlAaz@vQ*zn+8=W-Pyg6m~x;M+>?%dh9OHLgRU|B#&ZOTFvKdJ6c^7 z{dLt-fxX0(uhf%0guVtM|KZ#?B7Wb!syBEG7m0RmKLzzI0mhT}C0gJ5vxrkevKyb> zc)b$+hx6vz`}Ap(R64x>9}dOCg11wTn%*`Kqg$2*{>ZB`yzL8ZzkalwtJi&BZI6CG z*|(pv+=qc|GQ9e9gqIe$XN{N0W)P7TNK{`cGiZMC38gJ4I@4##>zNheDI}toiYp{K z8JEZ(e2m8^%${#?^*(t#Y^^;RT+X0G-VWNE`%u@5^-(R%aa~(>d`UUV6Wb-5AQ*=6Zi}e|KUIawkeYyku!vQdK-yMf;NIt~y z{gEytx?iese7IZL_KEwcq}_31()V|oAGMtjD)GM7Yu)MFuO76o7GboO=dZTLlrB9k z!R$*$ai<1p*qDM)NGAHQL;iy?y5-uyCZ%}=F!_da$-=zlqe8&bMYC!KWE53$g-oMm zz=YT4BL{EtW!;rICX3@~Gs}LEq^OyStF<=&0)UzJQw94y4D=Uc`~A#(CWEQrel0mF zF6#-?`6!ebxVPkA@YtJBH?D$Pt)%Jw1&s7P_v>A}PY&6YQSjd-ULuyYY*CRXBD2Tr z$Av;aep(AczC_NI|F4GtzDJm z{Mc+*u?;EAz#CBDZ{Uggt^pj++?-ybZ{LImUtc^%GIG|b#kMb97a+lOU9J3YH zYi|Q-pV?So`LuIM9T0kYESxDP&}Iwl?{#j$nXoYRVmAm`POTo)(pQ9rZ2TWSk{a5O z@X1=hxlg{D?OF6bL9!Z#M`1{Lo&C?75p##)q5*~>u66!yr`JZ__U5+)d*t#8Q8IG-z2W9~ko%~l~R56EVFoDsh`nu?Wn z_sVnrf;7Ot$aF3Nf#V?y@KzR{`6|h>!A|v-j=*F+u9}5pu3}+1ufS+r7SK z_A>W(Szpd7YUS6sO(52d`+|y}EAj~R>{_x79des=z1)1n$x{xC$p|P#QQHwc4n7)F zg|A?3g4H`kt=WSj05_7>l1ysGLI+CnhocLXmwQc_IZ=z6m2JVI2;Y6D6!&?4Cr2}{ zydqERy|cuB!6Kw^bV<%F#OX);6K2;+>_^*zghBj2(#UnxXd~>IlsE>h`NV%$QG~W9 z?w~q6j^FL+J)uPA+Pn9?cT;T6?pv3)E=$6J_;d!YaHV|bgYdi=!L>L(9?4du(RN$f zLF#iwwAP@I^}EM0j@z5tagf+=5pUL1J!m$%JQ_-nhy;fFCp!@d#)^$dw_jJKGuT43 zx@d-1e94^nLKa95ME5<*+-{(^cQ6*KQz1p;xy_RTjZUzqzq$&6N1nc!uw7I6bYTmz zv^r&AhXQIiP$xOoHYaYvf5V53TY7>P3RI6YGkDR@4pLoPeQMFiF%w@d7LveD)*Vm? zC4*Atl8=uddq9TeS2Zd@cGH|a+;_2&q`3CD?{Wqn%vHwR?gJ&_-Yn$nymS*wyq`a+ z?^$@u*wZ0qXoXeLWGd&tq-KXmmRCAYWVY)G9#io>dgG)(d$b8O?w_vX!4B}K|7=Zm zntuDBt+fY9IkrVaUe5|MNq?*<{xf5#r3PG5;tXLQ1f<71^u~V4=`6+e+OGI%TQUu_ zXHxkmaC>}Nz|`GI#CuE*{QcV%s;qG4wR3l|!D3+pe`SlXd+eJRqHovWyrX?j{)L<5 zt!0K9&OtU9#w-KH02T?J?pZDTu9sYgsY&@LodMOsXnkDWTPzVPzttXa=M21ZkO z@GkQRP$bCeW38l}HLocT{KC8;tXVY1jaE4C2+(L~PxrS*F6r~EHA`mOC8!*j-qgAl zC$$7@eOkc%BnlDhVkf_f7n&>qRKqX$qcL&dRQ$?K)UnLn^P(9fgt@~Td{_l*EOvH^&I;K3v8e& zM(g=8CEFBjAj!}NRH*pX?xyRtRYMb{Na52HjYMj?{O1Lob}EvF~BX%YbsmROmzOs=kWu-(@$E#>MDm*sjt zGGM?9u`sD&fh~?aHS%&(PG;s~^9LCvq*_EkV`rc9HRG(E<#gvwioC zw8qo^I}M!wWC3k@HMXfk&^hES170y zfiPDpRscip5rUJdOR5%r^+gXVPrfwxPq80*S$Ed?E+t=@9-Wvkz)34ht*e4IQ!_If z6%uK~Yx71%6GH$uEcy(%LR;@mB?A+<8`wN{CeOF{SL?mSm5)hY`!z#xyA1ar4_dO) zB$L&m(i)bF9H|2zLhALYWx_Qm-O`t@Nx3mg?{pF{olm7^*?Uv3+xNOp@5U%6*oV3p zBotCs7$|6BohnMxIDQ7lvx4R2h?;+>RniA6GB55({rxGWuOey0+j@?ob|fk&C}%4@ zADh-$AXVUN+IcI6?uR$CmwW_#*2ObgTu{3L!OOXy(q8d&WummSFvIN;>eR_x z6miRBfizaK+uxfMK>PVufi-C4ki&4<8tk2=M90^;**UOL_Ij_yWh@d|PUT7&ZG<%C)G-!~2fF zBrG+UlkGAB+d8ukkv22l*81e4CmJ%M#^T`ImSNcCu#}fASAf&vt8Zx0R}bBd+MAK8 zqZKEARs8aoR>UKuA}_T!Y+)2-k9JbIV{!)1iECUu)@8thuWHRA0)0&-f$M`~QlTuD zbD);4v-VqxT5ajo-s7>a4~6Ag2#s=By{uc!{6Wp0gl^Of!_5f^PM_0=a8vM4cow1~ zxneRCl<5B9;1M@7VnjwM^*q^?uxHrN3D$))jEw*jyL5^7cPkrkVCoSkD_M7|el?taVwd*$G`_WXf%hdXm5RDUMH}M&ZYVGJvWa(?Sj9402 zp>Shd%~|3X=N<8rm6gM9C{n4-F1XXSI~L-8Qp#+eW9fYb7BL)CAcW2O!4mEBb@dgr zC3_MEYj(h?bZff3HWfZ))8Fxs7I3()U7KD1Ed6V+TP`*a_0-JL>crB(V+W#moH1yK zJ+n`(T>Cb;GC{qnFs*K7&XF0DNi z5qfMJ(|n$9T4tCzs}}iZ68%RM4e# z>J{&ffwes-CkRQ(SmF*8d=6JTPI~GP&g)&-DgFwF$E{OFFQB0`P0U_yymyUvUJbmF zrJ>-x=d<6X>WdeB!idj_Z!6o~x%q`3<|EWKW)SxDi!f+9+|C>JX>(NN`+Adp-YP?N zd|jli6PZjD99Nv1rrpT@s)fj*5$g=B3Hd|%Y$*Q-KWuIE=4)Ea$7Z9HsXp$&CrbC; zNQZf(1*?2&`#wb=Lw7QkrO9(nJqdX@x-@qPxN$(0OPU;Xg!wGY);aHN9=3h^hB23` zjAuhW&88LXwE&He|HGm0_6nvb@=wrVl-I79Ud3+92E`PaFW7u6<$=peMrh;b zIGxc{JZ(hwtaH$+*1}+f{?A&tGhse8!|7zV&=D>Aw}7!{DR?mCoL|IA`FE*pnI)#T zW~Htd^ou63wcr`}5c7V5&d9mEWyw9!@i>7NBuk0gLyr8Jcbw;fKM$3p@_^eN_?uxzrHom!l@dg5vD7dUc^a28vZRfw>!3LAr>y2 z$tdZrqogkX;2j`17<>x`U@!oZs{4Rm^G|81DK=g7nEogLw3C29L<}*&f2sd&&GJ9r zF3a>eKv#=*y*JyFNOeO0T!D_Ogkg^GFkfWG%uA{sx%;2M>JC*~Wuj-Y7Li1$4~5Oz zXZ68ZHM|R9T*cf4=-~zCu~7}}R>$3qQZeCQrVl&*M?wSlgh=Xp;Qs%=`TyV{km_)q zRPgfBS)Q+RXVJ_o_@bu!<41vUQoR~iRTs6}7=C!-*7lG__2_Udu8T$6C0Q%1ELM&wsjRw8oPblsQzRlRtOlX}8I}788oEjh!FlW>fSx?EA|{wb zRhYgbl=7<_$ezMjD^ZbY+uT|YA+0;IXocWc^j8gXKa-w;MYwQ(M zJ>bA^Z%EvnwKn2K^g|>ub+CE0M${vN@6{s%hofsW_>jQp%~^>U*H;#)%t)_qbUHH} zK+R#vpyC6riMgmjQ_^em0NJhIlWUmzZS zJ?N^j5O_@}((AA@D`tmc`rg)7aRGR$=+Vgt?Ld7dawAV^#mX6NeI=RqMurv0a(Q*L zyla&`<2}_MHF)DEAE?Jh0u56h)*(kYx;D)v^sa}VFLn>FO^031h4;!|CJ|jnaD%)Xah7f5?^+{KE@>&k|ZOG{P2JocDvHWujh_f!JatYA~U)#Ng z&=UbG*wpp(0LBrP+O>J5O_Q3~Flw$;8B;D7ItPtE9TJjJJ1M|-NFSCvxz}XOyvJXB zX1DgEafn$`p3zqDg(*ARadG4%1HWIwh~8tRUB4ZOTYZOV*bj+!iPK|QLfkAK3Ve%|)si=<&&6vu zp-Jr3#F*_kZLNx?chXW&ch^hy(Bon6F`6aUxF@Il#wffO&TO5B+Wl&%iVXHQgNS~=K z=jNpWR=u>9DMXEMZ|0Ydbm@s|h{r_+XD-Mm6_LhD3eT(9cu545`f4|vy-ONmN&KK(Mo<;eq=Eg_4dn%(-HhPjmxr#<` zl^3Jc>Pk?8@xrxXhBMil;fya?hwY`iT7zGT^tsF-N=Jia>3_3iosWnHA7TF{M?fx)!z1n&V{JDBD5hQ>p>u z@8l_pDJo7Ozy~UXAaRuA`&PRm(^A-;7h$$V{XExP$t+t1g+)~2yEvnh7GT!@= zf}t}gxJtKdDG2hJjN(m^MfeBgEWZtA|ItTohdog*k{9KoI<&JMd0bbv4#JxQW#;OE zr1V;g3QYIa`S~sQm(OJi09q0f+kAn?`n9e-X~wOUY&4cxj#IMSS75C>f;ux_5RnlN zcOGt{m8owP9I(0f4H32RfEdXH~!&thLd5A0Y;eTvM~X&q|A^t0#31Yw}h z78xQ~-f(}qX*&TTD^~U2cat4onb{=llzQ+!mECbF=WL0OPj*)~9y?$rB0)M%blL9} zpW4)>5vM4R7oneDZ89<~W0-RZC8>@%(CE=_uK_tJ+3K@WUe0c_7#YW*bh8E6$x7Kg zx7dojo>rFGj*%489&VCRjY?*|zwmjR?J)A9kJI9VM*#G)AlJ*NAQ3x|=l(Gvj+k~~ zW}w)e&cZ7akcZLed^nW&brq>dl5?>7% z4D4mkNK}6#UEy8lwyGYbQitJ%;qjv|ohkfad@3TJ284_r&&XKrI=3GQ%QVxKqwLpP zae$bZg3n|w^E?{`C1sHlE5ZQ#hfyM|hY&9eCn5pC?xU?cGQD|!j+Qn3XKBcswLUTC z?KA|7|3tNaX%g~g?{5nYR5nk?ZfDktb|H-*J+7)SWfz~T{zyN<$uz%Jgp(x=k4@W8 zl$N)j&Ec?$on1PhZm>2D6`P5Cdhc+F_xEw#pPk6RXP>H7`CD2G^Gc0ms>THK3kwzZUkG`a%nv%|k(S9H-?QQnM@&%G= zNTe#?GjC_aks`@Oi~Qk-7C1W((={Q(w|yinBBiM!q3eyG##8goiZS;~IJXooE?HV= z7dH(heS~FYP*BcEs-qhxBR$g)FSE|Dgln7;xY;#aEU#Tp=DBWcN*S3YTJg}r*nH6# zu%%-HGBfEs!IwR)$UJ9!2UGKPR^v^fByBE7n9Z5aM`w}7a3f?8S+Nk0u+juvH8=^I zPYy~-cs&Q@B5?Xv_ER@jd7;Mw?n#>61U>2449xZ<3awFJDOy3dEn5|o1k3P3bk%uiwW456=yW)hv8dFX{=t5(qQ5KG zOKlP6zInp(Xl!WZ%YZb5BW`k)?WhwZx2t$>Qmcj_2JBBBThoi>g`Zm;Wy+e?X4eFS zw=p@qAwV^6s5qJVPJG(yZM!`vFUnjgY0XUv#Yw47b>ZOzyf*vtd2Vn4i-$~ZC75_q2eMLw%^}BsZO7}mOsf!2iMLj zUh}6-7uKeTB0z>0?*$(b1X`J~3M1C4EN|vhn6{*IU*_@?Zx=ROVS+opc)y;+xOj{g zpgx^HKh!7gW^&At1Fx`^C1tcU$9S>d+My_Hq@lib0iV+J%V!oXa@J^HnTJ!WnEuuS zGvC{=8WptJvATiLM=bj=%QO_cUNCNq%%R$Rt2#W)ToTx1Oq(1D0%}mbHzQdiAlINO zS0K)adVoV&TVsK>Z5pHXX2+D3@RS{Y2&PeFWCm9Vp>peuJOQd)LwW<}C-bG?Z-%_Hxn3_% zm$vjEer%J2)pN&O>)3di9~6=O=-X106KdnyV13=aEYy5I#OY|)033P>Y=4y`Y~xK1 zb^8Mu-q6FG#s@!nM|)Kvy`{3cPelMt99=x4siW{@s<~AgBo%?r&1K} zr`zv)Z%bI0OsF!QV=ho#n}F5_6mD$&rtnoOJ-U)swyPZ8trth`d{bQma` z&E7jcig`rJGiBiwmC@`_Pd>Cl0hw^lew#oCV4NcL{A=e&ytDy-Hc|)^TGlaVya)c# zmq+J3*~UkIs8Xca2i85M&i8tGY{as>LQlj=hO+mSizii9(1Bov)EsTMx9A-c91jUZ0b<5iQK2R+RxHIkx30mcagiDL*o;&r!PP=<;kK>}~D zB4%Sh1wU=cVR>PB4u-V&KCsY|F*eilNDLx-+ULvikd?=`5Q)rh7<}SG6=2mGZ6^k{ zSmT&HUa*_~)T}*kV(kg<0Gq;lRyl6IiGA0-o8k75I zGP7-dLN09irWVz;%2^XD4) zKb&Lj$+3qoHs8{4%cfF%ta-SE6_60bJyZv|eQAcUxZfyVbRtFYk3+d5Zg+cg0l+R8&=Q(Xz`v z{kE5Zhe39DRaeQyZK|=Voc61Hde>Q()>YV5xXaFeO94G{h)NwJ=R&Bu<{PuQunrT6 zfNdOyeJU}o4BcWZ`{Y;MUKNw*MUQDIz3^w76(2Vqvx+dCOGw69kQcUry9&M(NHc{y zPQpkGrS@K39>4N_1(Tc^Wkn1(orr~U%v$ZK)IXT;vmy4=#ivroiCSo#2(`LW0Q~1g zT|b*8^7k?c;ly0wB=~Iiyp)^<)Bju^a_3G~7rXYsCwGqOO}gSfU(*}K|2a_CvYH#%HfvK7JKbEB6zUKff%uH!XPwhI&fcDdC-{y##)UaCF3R)f;odzy z>aqJ3BP;y2Iw8Dvu&{rM(Gsl*Qqn5slf%X|x;#V!GV8o*Ri<$79WlqbrfE4~NRXfa z`%8wY^-nfm*FMS{9}eRi1Da=L7k>2DG-UiuH1jcUQ#4BApP(!*^5~Wp^N%jO+;2!l zccRO6P{3xrpquoCl3q$F&A46%>SvanDKPW81(Eb|m0IsK{{CrtYr39*2$;#uEiiJm zMU*`6Pyv|(^4sk5*P;U;YESgskk;bd&Bi|y3P=*tcixMoWl!DNA00Z-k=Flgk*+~H zQ;)NZ=$MO287B~@a775#(8rOQ4>K$j6L5=CC1-hLgy@y$)3o19V5V%0?&UBUi!1zl zt5@$+Sj2O=wx&AayC~!3I@J;g4bYq*Vfz|qPb0(#4`*zQEK@~uW`;vNU}x%rE~?&t)FO|8$Km!ih!cYBss)zTRTaBExe}Z zgr4T!E}BdRPvoCY-448WBlO8?CtG+zvm3q_#uJw=kYH@<4~^iaZsP~`<+2l zJ)G;Rr2XOp-K-zF9ctCQokfMhWHm%&%;b*L40q%i1R=DV7?B&FGLF{#gRvyWs9a5$;et9^DL>9YD0wbJ6) zu%2b03q$a#ucV|9S+i6ea9uDcC=#*%2>kPwbMXBBa7S$gcCWwogQ_`(9)~g=@CH%B zVN3(#gu&t{gXZlb6k&-7nD2*|N`nuCDbV_J=c>UaGfIXfiMJ+oapI!gEfe@t`-K_w zgmo+=(P_6U(`C`O-=gd|Isq6FD49k4gx-PPTi=&$;_!@3AKm0}0I1Bq3*!_cuKNfN zlniE`Ok`x`!Z<(MK9wVUoZD$Qs^EHFW-=L(HCF0_SK3U*@1JS-nefqwLk^A_Y$xb! zRF&d@q7JW7<}P~Y==Taki}86XdPPKz?t^@0EF7&x`vr-s5WFd6?Ba+&@hiM8X6G}n zW`D+5EZn&rI8VATlpq@Ame~^GX&|k5+|1`KgtHh-HeM41<|XAe;~XkIPPj+t(Uflz z5F3AcKAg61+8vyf-3qm_B&Ku~6%!csvXN3(7@ZT8!k?hwf0*)p0yhe`Cr_Z_5XP_AsaLouB4`ycg%$5z zf;>JtoKa(V#J!R8CrmM_W-~R@I)G?2RU%(*IJl2o*x3KOllQo+etf#W*2ttXdHPqW zmp3xYvy}B6=_;cR>jz@njQh3_0ySYM?~vAj6G+z6rGutEK6NV<4g`TCVI;v4z8s4! z>@lcXhH(6tPhjTz-6mXH5gneE=B(E+yp}sY!7RuDN&UDGZ9gOEny$vTB-(+bH4yy? zdlF4q6GQvN^6m3~fEBvL@3T*Ee+wYf61D`?Xk`FPYkNsqPKODuQKgCPgTP~+x-+UL zpT)u%SCe-_JJ*KN|Mx+4q4@W*-CFkgy}+>xgN654-oM`S+n10}|Hg!-TDS1AI4=5G z?|PEo7)|uAG`>8Jxaa9N1ScfaFn6`vKueV}9R!;zONkNAS!T5I*pBkL3Q`^(v_08i z9NxHJkK@bBpWj=D8bkvA?rDB+n&l}1M^_cOqqJ~i3y091D_l@;;oOkORzVD_^G2T0 zqV+PE6<~nkACjiR++$$nHJ7%LGMru>xN8X9n3(&({2g_C1h(U(bSm8ZUP?-**LZi)1HkJ%nbO&&H(WOADP2TEzsPjRLK~A;Vo|8Ko~+S#F_5a? z8KCT-Bi@>v9Ltx3F^r5Pc%~(BZ&@9AFB$#dI3AImkT+(I@~^6YBHfPYC@Utv_CyI9 zY@Az4iDWHDob3A~&R7$p?^gW5i6D)*UHMlmtq!3JaD)prIQ_@p&fwsvY*bY5|1FV8 zSEo6jmj>FNAL6^c*PMOZXUN!3Pg4!jR2+Q>MW|1&{qMdCo63N~(6b{;P$S&XQ1enS zk65w-m*1gWE1v?Z3=iqEB>My%8{1GDqp48XiiV!DK=>XJrFZ|ywn#q__(8)*J|Z%t zp{}~sNw_Vk-RCX3v za!6PZSvo`B%+7$>0s`NcvW03#fO8Jng}`DF1Td=-!r-O z-bo)?rT|~{JrOZOJMm6`h{#AfKfM4RCP4M;1&?YkO1LV%ZguGPAhcQ;oibtLY&ksu z*tUI78e~K^)pzrodwYiEk21JJt30!h!SIEUmJcl=J42u@ja814q!Xtb3GqiY15$yg zbfoSUr#qiGrca9=L(AzzTdf&SqMwEXim zc<+wL56kI6HX0|UWLbneeid>PCns#TmcyRah_@^tdDzYu{mp_f@E51nIfX1YCEz@5 zBASTM?ib_jpVvMQjCkk+lvQ!GngF8q#@tLBFF@HkC*bJSM~i0H90&@u2H_YvR8^#{&T5v-LkI$!MO^?u@=EsmRFE z#O6`<93d;P>l4ThDKq5mcUY=!>DC_fGG7k4ns1|*^_PA79<(0cc0xZ>s0}w>Ybtbf zf{tgRq&)E*j}z!=YxgE^whR;s`BAw{%xpZvzC|(NKaF^ltU5J3%u1vss_$AZ%_seP zB3VjqoIy&rM8@m&Ck6?$2zhdE9zc^g^wq_T%+yCdn}iVo0YMch4>5bxGx=1|Or7)q zS%U{KAhtw2>R^)Ph{|#9Wg;MFfMv=8!Q3p$SvB)s6=FzbD$6F3)6va5{>_cef+fP8APM2~OZ}yW9}Rm+p=ab!ali4TUCa_JyQ|c7oz8*$R`6@3{g`Jt+=HLL2 zmL5)YXwrRRdZ3B=A^1EdVg8Z{3U#pu(K$uY-?(4>m=|=5@7nh8!X!RX+9NDE6+aGx zt3wDZ0Cw81J}zmi`vHV&>pj|z3`o1izHa4)$r}jcl)WtD2TX=ta)w{<-KTOBcqsN& zt3YS9Y1#^!aq6uOleKXBo)9|6YL95O(v(h2##n_aYfCK7>ITN*Sa9;dM_X}<-9I;b zjyHLipXGoi@+w0nwx;Z~=R)@03BaC8Pz~^cbMJ3VZj^^?q5}<`n)jGM7t)7HTcOc7 zmYvm7lP{DyH3T(%dNY$AwY3)tiT1`MuwJK^Ri_Lu##-*L@rOb=ALWUwj$)-;0`iZK z$O9I`mlig&Y&MPdEKcF+xhKef& z^!7fiE}l7bwr;MeD4;Ap6a~71c|%Gb)3xJu6iqHSR94N8R;3PfzWFm~G*=iB=KBi~ zWf+GsOF(Qyi6dC|`|*PCdPIU3HqrJD8CI$V|J!Lg*lJ`M7L=3ST5@FNb-ONYS0{V7 zCTbBT0oUcnRAy3!d($_6X5!&yk1C|f(2ydxm3qg!&VYRP?11m1p;RTtY2;^KHwu*) zVb3HYa=3gU3;=)>uEf?&RJgNaOxccHV9kMwpH+G13Ar|xT~yoQNwj3i!HK6p{3D@S zYK0m}RrB=Z=#SAcQIUCDv%Y%m>4{~%fQ7Ah8k7LS_OaVLrNB?f%YU6h-Yu`P1L;rg zSXGBdUt#KJ;@ZaY?T>&@>YcKaon$3RG(&gsx=H!%0|P3DS(kNcK!Qc5n`zUAbiNF& zc7G!m>^T`Z<=+sW(8*{A3R6)2hXL!zY&1CAJF%OkDZ$T9#j$=4IpE%fO-H+s6X6XN zpf^9B0Ex-59PqjVe^CCH8XoQm~`wIc7Q&r5oPe1sk)bL67rt11G_X|6&^ zTSo?SY&b>yR({hvsG05TD3P$HqP0T zAc@S+iEC;)%CMZH(CT`xX8s%N#qj_zakN(g&En`U*}oN6Ht9o6l|~@v2)~|JT%WVhWREo#2g1tPdgL;Y?@F}9wBR(6Pq<#B`nP)i z4K+N`Tr2$Z){|^Y=*p&Av$zP8eGjhbC0%WjNAQoJk;oBFky|2;h@8dG2pIR$1I-B}UYoHF#QoT1Kcx3cleC71cm@&voL>OzD zv~;6FQ_Zfs@MSe?w(!AKv_chE6EJ5%JE#7P_XgU(ta`2QGy|tpk^cZ@a+R3MwFDdz zSIF?A@Z7k-T>03X>|Q+{22I`$4*c`w!?dhz+;0v4M1KWeCSCo#Wglx&c(n^Od(Y+w z6uw|>bS+xkt{LBA=;}kDnG@2|`?!l2hDiKCm-sR7ikR>@e2l6rjDXx%BXcYdk3H1N zwoRt$UaI9anGZR7I?dh(ei%!=Vj{5yJvb5uveR7&!q(1o#KeeU-%Ll3PDy(tyNvn| zo~S6FBpLjqJvKKH?3~TMf2T1ub`V*39&S_KrhWpqSMd3cpO5Q3j+A)RiBiVXT8 zR@TXpp{*;mi~9OyiOubh1|^;x=JdE9bM`Eg4YNBo6gF7ZQC_A{{0LIu97epM=`g2C>gQJ{+rQ^(`u%KhY@T_B@_TnM+ zXPo#O0beGtUPmWG4H1;gncmBQPEQM#W0gokffmxCE|y={ujbDcLcseQ>{NdgIW` zlzz*Imb~40YCXFO%g7@X9i2yl5SJ*0te%0Cls?V=tSY-|JHytFf`o)}hR>KQ$#MbT zxY>FIKbPMr)t(ySz@Qx|^G4*40%EBCNc|6E_lM@gN89QRgn5J`0L~c|_QzooOR;4* zP99-<9Y9D}n&=+l|1N?2Dnvw-X+)H9slXqe(KV3*z5?yN-1$|TxmOI%qcId@Y?-vH zM2EhOLR|ylnNh;S7^xZx8m!xGPYE18b}wzt$qKzHq%T`8G_#nqXYK&_E9+o5Avo)o zW-_D8fLpRR-3m_Q-zi?1W$w`o4j!44WtfTb#aw*i7iTt(x3_quFYP)C z-}@{5`#|}G>AblYA<4_@ccCVV^zv5ju=V&xn5OC5277J99!wFcNVU_c+{=*j-ldt& zLHwVVCs5UV{SiqOCpOnL_}&)l{2!q5fy?51w|@TYPwSF|jDHAaPEJl~y1VfWAkwu- zqgDfCuJJuMKaiA_O3b!BCNaW?obTc{Wp~MoFTzb@APfh0c1v$)$}A@0e$VhNHefZyu8 zKcYH2I%K0|$FXk|Y%Ly!<@G9Bs`s4j6~&EwS0|yXfkvnFUkd3wRz*MPDU>5~SI62`(5&Kw95Am_5xMmNGV!;{fTtlz&i zHR5xNvr)wN@%*I}e`_S{;85Z9Ez1V}q&JH#g9thlk|1Lc-7C>G&CxQ2yhTJ{%6vm} z_n`lSEoBrN4rg$OG?2{f4`l}Y+!StG$zm^UcRJQXLd<0acWZB$wNz}&uRGY+K#kCj$&ZPsve~izkr`0aN~fIeQnQ>j`rp@CjJ@@m_R3ov8p0`xvyE? zhVQ1diaR@jI&S1JBR?r~xn zx#k;Y>HZmOJNpLvda<^_N4X08`Gxcg^99tQ?mFRhE_TARATxUsp&6~>zLaTaeA+62 zj`e2f+WByd@*0=4G|ZIbko324#l0cCIk-*ux?r<4If0AUc(P`>P+mQywJ?++KEN%f zT}?a*xuHxu!OUui`+AEM6i-psD+CK1J7_NoKdc0Hu7}wCLMwHUb5a(E7M{7%n{Bc- zan~MNt#jB%Z){@drlCexYOK^7*LY4dP~qZ^i#*$$-D6e?C{!N zf>&4OD2xYlph5nxcUKv{jqA)s%gVT;{{ix_q%y{3U;Npy#9jQ)@RcQ~DoF*u&r9`r zKg^l96zY zqZOIqEhd}6<uNBy8f2oeCkJLx`_)^NzWqOx6yNyd zcQWRs;66s!)%pZ%tDH+DQiyIZphx^Tl%eWqt*l2!FqdQy4z$Ms?f+&PB5mr8WHa$K z!@Wa_F5Y{!M0*X|Io*4lg25sE`-YsWWuT;lxmx3L{`~dEvOE;>VT$RJtSo5VIu^vm4)w1_6>f=us!#=plmZr5@N_uV(hBt7+lyc?d}w%KqA zp*uNC%S=AlXP>xARv1b?S5zF7ALwZty`LQBm8ag~3l%B&~uXv?#4(ZkT2 zYkqd*C>Y5=Js!gRX_1A)M-g+cdg#3H;3!KFl@QaEc;3)+&^6Bha5)BV1?8(UP9BeE z&=Pq@LPjE*=+8_U)@)7iu|?Dp%0LFLL?33_ zo|(=ZXd{VfV_TP&Wpu}ptT?n(Fg&{tHz7F;y8#6Vkkzwp;|=K+?A>Z8OT=?#=CIWq>r)jf?$HY^d`W8!_Vp~h`2jz}1 z%7)FNfx8MV?iBSdPB=pd!~vM1%BZxopRQmzv07Br+?h*7R)7G2EUJ3xHRXBGKn9s` zt6q<$KjpqhDc#DU!Y)t(5?1XyLlcINMTy`D~I6vNo{+<(SggR*r!?K>lWvg5CS5zmEG zyflH<4KX6LlEFhmYaIe(7`;l~dgq3d^PJN~_L@wKyF9yUO7S!l=6|y&%J;dRIHi>$ zU+w@LmOK?ex`#M3(>~v|Qjug=?2c=;b7*{mOMwJQZ+byV<^K%biQUDaLt0UH`&+j@ z_Kk!yGrt^0H0GS)lcw*uA9Ny+-?4G5f4Tcj`196Nml7jD8V_EHVktum5tTa4OPUWC zzAOiwC~kA@507)@zXxy57s-ez^nIe=k3unje*XUOR-^myH^Bd$Q=;~cKiN?)|95)V z#Z#a}e`oP6)1X_)W-}M~zFdjKA0(Fi-kodYS;DjQv+nPs4UszBrl#xsx_Emlk`@C( z?m7T}opVrE9Y|^(IT(N-g$zGrZU_3m5x^Z`P-?U&YR(84$(lm)=YbQ z_DMqO=taPWmj`!)Rh*Nc0$*k)Vg4GQkhT3D>N0$XbKEZFoPNJxS0dgfz?0l~@11qz z0B8;6S(IMWR1_hIQ73fwn3^t7x-^$u-65rJ|HZ$xQTsKKL#IZ255msvSjc0p#ByA# zBDXm#;8udFs38&?uQdpGB;c^^ShH6k=tS|(J>*2{^ebwhsi6|8w0KFptuOe=@7FO1 zt@*%$Dr$W|IKlxF(M&RC<~W(%L34mhb~UU~Fwji&rcskPWm?#u4GJ}&-J<_EiWzLY z*Lj2Lzb-&n&QpL&EPC)A8V6*!8|ym@zQTZ)7F7MHL1>wl25by#ECja3*unh=2v`cW zY#>DA^4qy^RY5806uSLNl(2hwns!!mvLPPZx_xyO%DTF+!^x!q4&oPAQ^V|^B4}%x z*Xk}2&Q-qXs@c`j;Zw7IXlAn7#c2&AEP;sLEUal7bSrGu;S>I{DsoyJ!PL_mc~bY* zlZv_T1`klM(#8sA$&N`V+}sK~Ee)KTlY?^}7)^~W+?RCEu+$t`@l;lJE%b`kh3E6K zR^$+dO+=R+1X$%|%voF+4A;d;ru-CioV3gonmujs8Z^gx`_SVHofnO_Ma)zoSAK73 z2BbKw$;aghHfF5@u^9_B1liK@xbcZ#yXZ$MgZ%3Ft(g%#G-RDCBa$E2Jcm?Of!~O2 z1c((w#c%co{+@I8cRdz_BH_aYvq?h#eN04+k-0I)-uIix?5dsRhsZ1{y;o*=#@g$H5;vX zW@v)p-qiZB?W9n<7##PYUM^R&=HRX9XBMaknNi2(=`xR_>yvBP?FM?WiR!!8#vcFd z&@d%vu@13wF%{OtXr3fr<6r+!*S52GveMkuV$au?VD36rGu@0W*xgFePeP)<=4`#u z3ef^1^I+&CyKG#Jo{7;Sd8A@(l|drZyp{cNHr3%ND#^>>;NYIxTPZ`~5$0hgCfTK@ z_h_<+DC^YJG)KbTyPk=VsMCb?Bbsq?}1s>V7fnAlT?(l zEdvO>f}}n&c-8OV6ON{5WC7v;fvroaq-OT5Eqeg+&CUB~59ivcLKjGmmPhRi@67!pu+SCi0Ar<>5m;TVPwy6AkN+&*TEN6F8T%UT zOTec>Vz*%z+Rrfy3GC+-a|)pD9D!2!e~HOLL-#(u(k2BW%4}xnK5DL95g^Jc z;AfcQT9&px+H@w z9xDsE{AkFFDcIMRXeeKrc&uown$}B8w+)Ii+s|BV?}u7l+%rRuqe#6XL)OWV7WHOi zCM6`-@^wr#Zyy+uy-vtjFyA&h^dX47gVzU@_&yS)zLB?B_pO1(75tf4anC2XUVRn4 zAtcG}XHW%4x-}%1mtZanzey5+;nTyTTMlqQ|K^ctJmc9` z$L((^q1&thd@;!tF;~2vecx|UyEiYAA1c&gL3On)&IC)gXZBUJ8zA<{is|jb)Lr>A zRtNT<-H8r0j9$pi#uxu4o;W*WLkut$V;m}CrsLb$AtM@YtqbNXjx2@#or^MV-U}Jt zn3)j&s!h%D^8?&iu#S#vJB`u?sUKZ@v;7YF9vJ_vq-u;SFZd9HcRx+m7UniR+rH#%4BcQ-?2@|$aR zUaygT)R6Beg&Fa(nydU|%OHk;@5i9G`r{-vsuWlD!T+qF);&GGD?>K~22VO)7yiag zP-=Q4PBhS*lAdh`c)AQ$LYeEceBXOq|1M6SFE5zzCp)uKF0(c#Bx_yZvhYI*`DPf+ zy8)xN6$KT@ugmxH zoIaw&|UouS35%i zSX*`9(?&8l!?d(o6wUm*GCDTY>K7U3JI%)p>}1^4GB$1|IAk_d3--(nTU>I{HVw<@ zmKpgj-y+g|Q*qg>s+hZ4k)U*;poE0Zod1ah8K5f5tpwBi_x@%u^x@oR5o z-xh22^Ow0coSix%v!YTMSwfzLbGmFdDDWBTn7Oz`=FvL;x-G|-m^~oY+T1PVC_^S- zjKId;+Pb&{x~lImn1?~xb+ZthYpVbX1_VwiB#Bt1n z(wObD7%6_}roqJQ*9VXIC4;jBgGzQ$0)O+mI#7@#V*Z!(*3D|Y?Djn0l~V1B6+3ig z0*7;*BA_!FB~}&{QuQ>6#PyH=09vzC8mC$^Z~Dtdb`){)k(>@4MDjjAkgYhI(Ki=G z3yA79D%zP@-|K%1%!Ou2#Ylbpsg{twN4*9CY@A01k6R_M&)b#TI|Y_3yf#?u_*<8? z`tdAWTgTW2i(9X&=qu_S5G+_rNf3P86F^>9+w2rIHuU{VOGE}sn!C1$Gn&s62W@(@ z)lSC_|tD8e5oDD+K7&@ZEV5!mq#tEWYS@P&R$&ArnBiBzu_;M z*S>mHQ>V+LJ>wc$zC0UQd|T;lx`uZ6Ij{po9VF&Fs;@ZBA39oSTg~FExu#}d=*o}p zzAEy}>S!Y7tv$REp2FW8O;?t1#GjrJH}ZxYDV!+m4kfQWj97|!Hvn0meb`_05tM=; zCsaU+YQTiXk8$!3Pq}>lDrnPbM(d2zRB@m6Jjc59hQC}=Ows>#MuM>yzexz?cR~Z} zcVQKElExOgy7n;17~^ha_!PXBb|=Jzc05IWclR)ZhEcSeInqy$tQGJTCyWBXEK0qLS8o8(}iF0{3 zl33y;ZBtB2nq+jN6DY70a7Pi=;3km7Ofwbzv#@p=P36#0Rp{0;>j;livI>Svl()wp zq|O0!9Hj0x&HEZ97DOhVJ`m1dZHs3e6B`*}vL4m+^N=vcYMSU?7@E~;pP)haBA&Qa z$S6KQr=J3(Iff*RA@7r!Is-o!2}Zi=qnz5v^>Y%ub(vy3MegsE^oeLdCr+y^Ah}Ri z7yp{WM@Nm1_z8y+Er%l?w78np6FyiFavS=|fT}hHhM>Kv$^tc7Np3A5QRSZm+Nh~T zHTd`!QmQ)%nRu|Z9>$j>dm_4H1}Y(UiU!Ul<1bYsGB3F@Yfrjy-6@+2=^~-dWwjWL zwQ&H{*Q8U*h9mTl4`dri9s8}7_TR{BpB17T8w}ZWM0T_`!{F@&b!_w*9Fkc%y29}s zH^@|nac8%n)UlX&rk50a!53)_ZF345XZ`aWvW;0^_IvdwdsS|r>7n5_?Kz<^53FmB zEiNuNsWZ8a9YYWZ#S2NWF)jI0rMXeeftntTeq>%UpRubdH#*ieBBMOf^v>5efL22} zZv>JQG>4V6^&MyEPcdSl403-F$wGcyq@$b)G*AhuxV1eOGDCiAr1h|Y`^67&UMubL z1>e5T`G~k$iEy;{jK~of)otH%t4Su@o_db-FoNG+*L<3HX8Ff3^?rDy*_Og&W`Wn; zqT0P{tNqgI^DOq-=5rnSYAg5PrVJ#;tn{RaSh@7TPf%iHrf2 z{tOBH4K*7fnb^-5TJDtBrZF{{;lyoc&LS2Qcm*4&%hOC-o=g)wrV13yD9$2I9rn)) z^1^aP*>_90$yy^fRU9dWazi>HL{7|E1b>Umn(*?s2HDHV!y6xD-17P}c5dTEvT{mS zBPd^V{83kDaJh>l#`hg5rAVI8E;vkt?Z01(tMc(U=Yu!5*a&=3bWAP|S|=2gC1{nj+c56q7`1d^LCHab0j7R6lG1oZ(Buy zLT74I_qV?x^|dHUFUka;yyf0#>+zx7!&_ufh5p$N&riBoQcs1epv-Czq%ej2TaKVe{;v8N(1Sjo`Y*Z4X%K{iL~be$yZ z3Wbpjd=iPZ-NWk|)2Nua7H}je?v)E?ThMk-)c&GJ&NA~eqa;I5!I^MUuI|HUiP0k5 z(!)Qj;xMT3SjkJo+#sHMBdUc0d^FkEQ*!%VKne1_XdfbqfZDaTb`eGA7Bdm;)Oh9krpvW2l$%*-!n$~CW= zWT@rzNYeKw%8qb%TDPtIO}nsgCxEXfDaTz>!^NGW z_n-AzN2QS4knBm;qr|&~@oC|P7Bs)QyO3bxoP7!T%Q}kHhoLDrOp}$h$?AUf61MZ( z8B6s7OU?=9#`np7>o5M6k5lwI`+Qiz>aY>cwo)UaaWX>rQkQng03`jNxtJ6c0aq@Wv5^72CaDJ9a4Loytjt9vUVK4qVkt5@+8a{= ziY0XU9V@C%CIq0ZI!NX|=3+@Vt5q0_V@Xl6aC%+(ocf8*47-YT)zz_6stj5@#n^YD zi#72&(kV}v75|v<>*tXV46&`E^0>xBHT^1Agplnn)tWe@7jNi`aHEg5xJJoDnn%Md^0XkF z`FS~hiiaI`a8G{wh8}^npossNEYl{?4gBb>yMPXh;whRSt3J8PUY#JX^9s&>8Px#q z61_?q>=)W8unV&q2G=_#_>GE`#$|joG$^hSB}+FcwA5dYO)$!b$L1bkq&RV6Np zh%t0@Rzo6`BKCKfb^ltN-(xcDu`k8jcDvcut@Yb1|8Ig@b(d~R((9w2Li~>tM1yZQ z)sJ|Jrz{Kz+dOq-Gn2rWY4|TV2ggjoOl|^wBw67BSLuT2`T1=N^P1Ya8|^kPekH|a z-Zry7>(>PCS*uDPE|{zL>?=XcRY#Qx5AA*@xD#45hF1w~ZG6ewHI6J$C{3q1nKapj zowGQ(T9<*;9rFg=7l;uBtZPY^$Dl1Sk!gwq?~@hrTuS}@|4(8R$A^Ti%#AIxbbX_s`0rJiEUs1(gwr5;jv+Gk~DW*c3-wD8H6^gNRr-qo%dni=|f z6zZ^0^t<3a<2_V5L`p=q%|cx;_~G*+c^O4!VledG_fSe6JkO|A<0oggilaxkjO}8* z!$@YGhGY_RvA}~i-X^SsN1>g|TTy#;n3=Z})Js>=hFn#jrFEZ~a(2xOTVzXsvGW+N z=o1Qj$l1u(^Z{1oQ4%sP6*gJ_k$a2s#4`uNR;l8*eoaASjMrcO130k}bBehCW?!PO z8&U$M{J>NT=Ln}JMLhGt!`Ao7R3dp-JO>sfZS+gJoUg5$ z_RXeUvAx&yf@!K*uI}d-rj^pkt%!PfwW0~0e8<0~5yRnH#i?d|D@ucowkX`WU(#AQ zreucJ4fm8tanS}y!;b1a6ky1|2n@lvg3>)?`Z(F3~mRLusd)nVQzUbm9rm_kp= z8hKTB%=nR1m)544kDo=?CmcXc@ohtqQh-oYAyRAjW-mXt08_&|E=53;pzu)0VWKRy zym}1}teZ3GZysX7CRlu^{uj!`ZrDSk$ehJR4Bh&9dNo>PEKh)>Z7X)dtQ;J4)V3Q- zGa>~wN*j~z5J-@UMw~0Tk35iMGt;Nh3^r?~C8){m%N%m*G%hbKI!F!Tg|jg_O0R8= zoj%O*cgnp9ExDx4$?Kw({X>tc)tqNnVP>^$WxT%Ky9%#vmaOC%15E2i_5%O_NP9^N zw?bWun2T3%A)x?(Jzzp;`Q4RTKK>I6j5{~!{PwwSTF%gt0i4nOiPi&4x~x^K28AcC zYU9x<7b%Y?aAxoeiu9D;ikvno32$}@Le@9fZsQpl<2R5|zPDfHZt=Q(?6By$u^EJL ziFDSeZ^=@`oPG05umRSQB3-lUqHo=^Hy*(vrS;|qVY)Y>aCodunjA0O{F$Hv5Nl3pmQt1B&HSe063Z_#XvfBkz| zj_Wj&CNROWzf_4{5$1*WUf@h?%^i9ss>Z=jcFX;&RuJb{x6P_?P=(gixO_^-=H`lT zC)2>|o2z8+qd_brs$kEyGNI+>NqtP9sf!A=V=|QB9iYMK7Q+y}_7i)Umlv;L-(`~& zBRx5Mj8p%16_Fva;v6Nlp7j^&#bU?drNZqu2QIDIw#du}TW2D+^yO~o$an+l(}SwD zwvz6$R$5xwQB0Lg4mI;6otQgW;uh53%vDp+k_8bqQtWR7aoz1DvhFQ|=ga2M& z8Y!8DwEZ>Q;M=BQw@f!34X>XTz2B9r9V(FzGOd3H|Hpg%&E1~Ks4${Wsim2ra|^vn z1(5YZBRd8#N|b&aUAeAFef!=L=ku^0`3bx;(mLNYaGG!Ncp{-&@_N%&*f_MJ><)l` zy|Du3W|TqM$w_=)#zVi9%1suq-shTeyJz1d4Oxl&*%Fgf?~ZqDiw?%YC>(IxZ%FHD zSnc!wU0o`U+B}H^)XqxK)6)~yQ3Edd#w3a8+o&wRbQo*6nJI5o`aFqtYt<~oMOOx7SWg8jgt=mj)DozM5SKzOE&}U_cw#g=!}w_4H$kztC(`N49%D@ zc`FtLH)zAQN{Rcu{;?Q6BC-l{sQ&_{`M#PnEyyhbG~J2fZE?lMA07ZeK5QXBc90i& zOZ;ILQo0jPhZnB5`^29E4OsRlFA}8ZD}jfe1jo&)pkH(7WsYvOm*u=Ni$;_)rn26lDoc zvU@54$c5}=LXxFPNQhZYvQ;|PAI5N^?8(VdFv6xmp{R%T`qmn)opl?hs3)9Kk_{f9 z42@hN5M8%9ffU2vUR##bYV&1sHT*M>EQNZ$w5w7b&^!^ByK7+W>v~*Ya(x-p%6SfyZ?pO#j)8nTSfsbh1}N4t;RpugTpQo1Wj2PLF5krECp4EUoQ zO7~;n&h=b1pH62aIf~VSW~K6q#Dc_4Ipwtp-U|F>ug2G7*-&DmP1j}euBK+Dw|BR- zPt%->W5VZ}0ENZG#BwIAU^F+xjAU(9PYvJi{F;*DPerRfscw)BBcM)9O$|2 z9Yj|aGXt06Th8iWOe|mj5#*EK_ahZK4n%3@kjM=l!PE1oQS*3HK4&kQG8$ZbuCLn4 zMCNkcM`r(1Hle!T+{}Km(HowemmBj0)#CBa)dl%>G-+SM<%UU)3fi@(eI6-T-8Lh# z+wpI=Fm`+cFGd9P{=@$v<=ADdyCnG9-h#=l?a3JOiQ|*4bgwEX!xkg=v_?Q0AufuU zS}1DN%LlVFwEx8s=Gq4naV{$9F{ytcJp+MMi5%ks4$`oSQf5P=^^`sUtGtkgzjN50 z{2YQhfL)ADoV|089b@YB@cF&)(-(D?z^&YR{8!`EAQO6pFB|0R;YFB>2pt{9atl90 z2N0Z2T-luYjXLA_ZO0}s*M!ZR){b&i2Q)q@UxCQZx}qI?kMqVR<&=2LP~w5aoo4@Q z8rbii1Qufnqg@ffy1#39+J0SYf0p~8zmhrMQRU^-L%MHXCdJC}u<{Ppi&OtHLq|eh z7FTgqz_A@;8kezPf2^CzjjcO8Silpz*6Im+E-7@RtB5s@4XC-PD-YONH={cV9Ho8! z^*Ok=!`IJ{LNCL)gk_Vh-C%}}HZ!7?0o+z0H7dV8G^CN%DKX@kDCH1iv)e1KO=-DoOVVx{t4JGm+h| z2ljT)%6T(BoWf%9T#L(ymETEsZ*m)mcrP0$M-f)2w5`&b#&1Ae3lj#pJ@?MIKHK`1q7w);Xr7 zzJ5?unJG*{9n07{`iw&Sw5nuR7kVn~4%xIIV2oCwvy6n2Lbw^7*2^pNEG3v#3h|rz z5?$V4*Uvo&j{n%5Dbd`&#pm4}fLo7{`?@!F+*_=swgvl21}utYZnirti?=}Df2~Ss z85x#*92yphlV@Nxkbo)%PJ>j}8YtS9191V&xf2g``Z8lg@ zy}S!wS)N|c=gMTtB|EYQ8Bqe+cX0UQV+jwKAnWV%yfZe3ocIB1|A)P|3TpF@{y%Y- z;uhSs1PJc##ez$52_BqMC@#TW+u|;P1gFK_U0d9tv;|rye3##U_F`xEW@l%1W-m53 znan&_&pea!e9n2F*NY?ffFt%`r*QA;*OzMH!qw#N4WngKCky@)w7YYsdiaNI9|_|& z&El!QrXq=X;LHTftTcZt_#i5yw|TX=|5~@!TBuGt6JnOXbJnX`eGxQmV$uzfP+m#U zK=&`|Dh#7%W+K?k-viDbm2+$>tR0ooaaz@ztc!(72_fNsX1S4P1u22n+@jX2Sj*z- zN8eObAfI9zopQ9GRq!q)CBos&+59Gq1to)h5pw;A6|waIH@EnhzR+cNq`WC%+n_dk z2F}*1Pzog888)sirtIlD^ixqvf`>6M5 zhX+V6ijNl8U0oV+iG}0%Dd~Yuz)weZQ-7wZC#Dsn{fvf$$I0_Ez7Auj&kz$OCvRN( zsKDx~Hr7vEE(qE!JeI_g2xlsfL}R(y8*`~j_gI& z-GN3+R`ez&CWZ>ovRK%L!+Wk8Ix=*6c3!$Df+i-pu);?7=xzZP*;!lun02k;6qOA& z(QmlH`y(APGM+&V(GS<|>$4_Ex1obKrzwzuug`4vpVVmVNx75ZL5jMwp9*YS6?TirBrn4 zC8nbi76pEGK&&0H@0YJ8L$l$2!$cFd=|VOE!Lh!%Ocrgnr;&hISYf9gY@35 zdP@^0{GK(*Kb1DHjbuwo%vdV?n7_s+uTSJBi-<{WJI;Jl;}afK12-C$r(P})MDG~>(dE+xIcwh-8o737L|$<0@XIj+sM`H%($RLW}QJU z3zGVx=yEtuNi=!-K@Mqtbt=0>T}}g5zakx=b^-R@_gSJEgq{5*{x=KxO$}GzkN%bI zj?qhnx{dk|iIU-X>jk9^FlN(w0g^apkeQva`z8gPlKXBvLtiJ%Cp)L1I<{biFR%_I zI%m#YlY@-qu61*PcpwasqDEb@ec78ARdw$A1+^Nb1-NX@W~;&$n$Wj`<~mlZO8;D|G@EMn_Xm6 zNu{&zYYU|IgoJN8ak9HZ!rj8>d#l3w3grCeWg)kjj+t}IqAXO4Znq(}D{#qZmJI<0 zfqyA5CNEF?yho%Xl9SV0qKrbN$Xq;s|5{!G8{2RnRW)^LuSH+Ezf?xmwbJDDegg8T z^bs8Dxs_b;&KYRYzTdm=&GMTPg_CqT#-1$GW-ULJ{AWz+{r_?p3L4I3bkmMJ2-wkD zOE?36rWy6MuP5!h z{{ur-Bs?MoU_#E(rw>irM6Dmt~g%dqh^(m+!J){TQqXv`0z9DP?k!31|o)f*a| zSy~UcoQ5}r+Wlp5wa6Jp=xp(M#r5IVa7#V~UXi+FB=Yc=ZQy-f0HqUgwWKPvil9_8 zF^4h>-;)69;4F5o_y>RTa6nxW8ckct7p9FmkC%==;4b> zST`K)@V;oUr~Cv0X82qGSm=MYzVw^7;O2W|RO9nibBbTJ=J;^=4jifhO{C%VVa0W* zM=XjKEaH#Ihk*_O~2FA)j0{T%6w6E zG53d|`n;1ZimCs(nG~SK)?@X)+vdPJqv+$uqBK`Bd~AF&`1y;A`0$XiejDa)386gi zO-l>uBBW_kaTYMvA)oQR@R@z4^1`USt(JKP7O-#Z}T+Q;9&!^tb zd|$-%JV6s6)}FG=W=dAqF($T#{_Oa&Q4VGo_Y@*=_c(IT^I7lf@aO$bB7XS=X$4ZB=K)xAIi7f-KuBf<^NC~(`j(m+2IJRyo!LLmDihbX3JS{ z7aH@}FM;k|%V!_oxr*vbnagyEAb%Nh(GJ}FEgt3Ck)<#bLq8W~<4hFL6Y8KDQLo&1 zw1Qu|cdy;)CN6@|J^6A(tvqk*U&8wsZG@z>4+&GUeCvnVv9A_cx4Sva>5>g!0w!E; zCjurD1%J-0RPSV#jL5I5{Mn8CmD>!4sa!WDIe-I-mn*PVjG}F9g1>SuyQ^%VDkh$3 zETiA!jv39X1mCCi+ZHR=n~2?-xS9hqH3H{m0VUiUC!MOI9ypzbAa5r&_4U$k(qy}- zE`%%2nbLwsu}RCX1Co|6AE{KmB+9vkZs}lMi8Am$rzyZ|8R}@*=aTL~z$;S3tXYA= zq0`bC<{*}~fA5HVtB16a==g<6s0!#|lHasLNeiT-L!m=B2zMt1>#Z7ex5bSx*|XHf zsvku<4U;9&{u!JqjLE+RrCXlx9wD~OuoK6ny$1~m!2*A?o0k@~#T+im1>Ok(Z^mgt zzxqIujF+B@+TOn`NaSo38W^=+7(g!0c?23omZ;y2Qm9A1i23X+{lg~Y(0 z+|wJHW6UOa%iEO2l3tzKflWT%DYFKsK4Rma zCcd6W1Btn=lhvg73NFv-0AZ&7Vpe=0erbZTkx>jt>=LK>t3~ke#3abrmtoqXc&Cs^ zm$cs|(@_{(nD*-HjWHZ(Fkjbc%Q8Hn%9Fg^=H2R_DM$|@&_|uAJb$0k+W&-D5?Kle z*bLZtVPfg4|7EL)l>+fy)?}FHv)9#@XtuwkOrf3q3wG3-?J=^aSXRsE-Z`I$8wyeR715xhjZeM>bb~SP@SA zu%0Z|&oFECi?ascoBHOGu%+2G^9}MFGdW_lW`oXB!PvwO5w17qnZu22L2k;_`hS08 zTA}~mY1Gv+B}Erh9;JqIypuZRPl-`ROk0L~HtN*SKQA_KsruqIYEdZ9*fsG{39LaswI2Zkrb{ z!=B_UU32x&WY=} zwv#^S$T)KdZ$o?d`7mCksAe|<--0BKD#@V3l+&oTRu7+xY(6zH5q+3YPwt`kjL*&G<9OcTe_9;uO z36+M1jyF`=iPpa7NRaS!FL|?hW`K6LxMYh+alT#k*B)|WC6v?Bom;$7V#(U9_`J^Q z{WmI$o|u6_**h#frbG4wGM4ed@@xZ24PQA0c>JH!cmNS3>hP|0e!E$~f0p~t?RYOm zZD0f>9?xla|LUnH(?(-tT)y#XPJM;3aYA9MOD8wiT7(glY~IUBxxs#-rJ@akX%@`y z1FJVjw|MVTLVHUKcD*)&t9j}!_i9TE)FJ%oU6PU$JST(Yu>qo*v14qBE|n>PaP!+rIoZ4x6BXWcl%uq-(WHfHcaLG`PFhh(|+0=~9SM{XesK>E?lk7*5 ziBDi_T;@Z@aZjhzXVJTdkI1(2mAC#Xhvh3JbN=UQA(XcW(W~`bT{IHdCM|S5p6AwP zK;BG!DrET~Wt~H97udTqjY$LhKAVwR!yfuvmR<*oU4fQ1nZ3bQH`-uY6nRoN?cBzE1 zqHY*(dpc+SXYsNpyNx~)J-N8C2)L&coXU9{#~7?KoJcCU(yzDaTW?FV!MgEv`Fz1^ zPG>8Ls)^Mh`Atmg;H>e&M=!E-GtJ)zAul5#mw(Kc57Hme{;HU%fv-J++dUp~RMX!l zu1hv5;1)o%qA2DIsnNP1EI%?{j;ib8e^)%o-38R^^6sbfxR=#ed|;bl8)IJeWpx?T zm>dg+$gT0a$c!#T1{k@nJz?%jFMnL%;s*0x%y(m94gL|Q25_7)wQ%>fu#zU|(2yxL zG(KrCTr})Vqa806c~M@Lx-t=G=#7!J)8al$KaB;Ze zi^pr)mF|8Z@Ozd-eD#w#&XH7}Wz#HO+GgeRJv}7uuS-nwlt0_neVssfUmh2hi`Vr( zPj%Z9Y5NZ5n5U-GDOprg5^9W=$c`gB8t?vmr7-W661})WJ+rQVmtd{f(X6~wcVoy` zs40=3WmOjxgBTup(HNFyAlf&Q(^{82l&m-6thV*7C%794`aKp(N5%`4*nQIQ62z?N z0SL3=-_ady19U)x38;JQlXv2Txg9wRkF(LJrk{wuWznF)#M`Z*Da0b2Y#sRyMdke= zBa7!&(>Dv&aCa0He4>FOs)Ixqc-`pg+ckt2g+={Hbu)zu_3C%i(P5U(v4SRowdL?Y$hyXU42-h?!<;_%I5gqSqMP8UrYdEh+SBMvu1?uA?^q1*FHQf8K>eOJP~$e`^zS>T{oR)i z)f>^jWK-`wx0xs!dbY+u4!_Li%mlc(d`G?{1u|n4FnlLh zpqHJemduxt(yy6Zq~lk%2ARj~xY0^*jb!?7;`%&l;CIOrzGINtv_8|29WD4SB2zun$*z4ZhM*+M2 zzSwN-z^(~t`NDLJiX=cvk*iEsEFzICbd-h<2?_V$(npEQ=sX?wD}VUawFWxR&N>c`78 z+&jY(1{Gg*QO{BqxE&Vvw79`NF?FbRP*t_~`UK%L=18N-O(oZ|$LpS^58Er7EYXCf z%^oH_x?KUw^_Cx4_n6JpCGs;JPBMHN_+JrK8s)VvCr4O11S8Mjl~3<_z*oX(I&8vZDPL&tkw0*{+mcX@U}aF6Fy* zofp{9`|)$9)XY=EqTu#ev_k{un1|4@gT)o z(ja#^`FEWcNGTCfNxajVGXYPEY%#p^q#FE>S_HTLXrl0x5|b{M)0)#gqQU^PZ^HX9 zxC(!X)5@?j*ienn$V24Ef}w$^_sT4rw@S~kk>*JJHxc-k0HGt*wT=60XGR3s zOS$?mAUiHuOzZ?XM^std+-XwT8P|$Q9%l3_<{4VvJSDJrrp+z9ad2C34kZ+vf^pIT z{halMbo!aWNu}&jFneBP;=RD!wnNu6hTl&O4fk@O^0CYZd9d zuiW@}FS5qC;F0>QGqrT5{KhR=rt&ZEm`++9wdgHPNI4+8cPKQ0Y94≫PO6n@QPt z(7gy<(7#-E>1Qp`*z?h-RSMzZ;E;bI`%MoJKbEh_)hwSsD~_ixDxa+V<)NbqViWmL zgl17}DG@b^$9tUK1U17ip_LbSQQr}XxY9a6XJzrha=oHU|DkkNetph#5C7>Y`+L*y z`KS>6L8s+El<`i4^Ywa%!V6EY5c^iLH+;e&`2a#odRV-{QMplA?Sw_mKo9#m7=;Xs> zuL$%6ad2)?34XM?$r^aQ7yrc@ZJCm_O2%zDTgPHsMI;1TH#JMF{|}{})E|>$Dsw&= zz@ni#Rk0tlk18nPKsrCcBQIG&Zz3dpgHtrOnm~JW4SM18e^;N2n%!t0WKJ*dj7fns zn?p-bqN*`mf>WMdVfG^Y<1oid)fXlWH9u2_x6g(fSA7Wr8S0(iQdFJ8&*))QR0kxVagj#%xqI|g;^i0^p2%oTNR zVMW}W`JI6?_Nk{{Bpi%<=yiBukbX{dTyF!zY=c z$FDn%6PRses8OeS%H?lzv*fb8q5~=Uz7ly%j{?xVnIXiS5l1(8!|s|l{^jk0lYhh2 zapQ%WUHKE`qKsaF0dTA*#lWDO>x}*HS{M1e(!^?(sxTH!ngnV# z23EyhY*y9}OaDjp6~|MkG5^t%S_S=SnTB`!O6_PmuXlhGX0wh^g75-@qA)5Ggl*R$ zMumemkjKHxhIO6O=6jyn@aIdf2dzg#1*8D9_OQ6O22jetHL;hoNi7s|O4ijhjgK;v zr5qNQH5|cs$#L1)GW%}%xW1Q8`@Y~So~BMc6NKI<*t0{|-!mqF-tmg4FA&p%dPJDw z%w8yFPDk?X@}EK)^V4b>x_wcc7;3FxQL>6@(-XHea4t z>LiR8Wb+kGXpm%s5Eob#mh0IH5%SQezhtk0=aGS%N{CLK(nwG>*# z998{$YMX9tMP`~Aj%Mn&MBpa@Py;x)Q4)q)9)qd`Y*7a*-}e=GvtkCX{ZEwY|EdZT zYB{l@3pj9^j9Zrc{iD2Xx-~asYz6yVbp%Z?J;l-b&&-_DU*#Eo^IDuNIsmyzmjWqD zLS*sAxv$8%N=BIg|A={=9MB?*GBMw&j1`;Z2zY`t9WQq*Ov#p*XV$fj!^pg!m{WqHMG5+*!@mBJ8AvHmwh$eLEv6C0#d?)3rAM@806^GWMsjwuN zOZO=a)iot+0L&EbR?ukG?bj8p((QE0^&%}ws8j-cMc=!X-xu;Qxkx|4j3p`RiPk~O zIa6Vz$@bj!SExw#&5QU|I^rc)A)#e(O1 z8_vw->4g_17R6`Tqa2fu{hJ`E@(Q>9zj=gV1vMg}@5kB(7hL?;Evy>DRzD9ZD7NYE z-`AlM)kYeP(JvJu6+l)pL7f>c!v(xOL0yDtU;_tRhA~~cnpY-gY7nPIY!`unPrXm^ zYyaXo$fZt%t-E+WJh1R!Mwmrb5;gY7)?&jFHH1t@#fjL^yVsnex-GaV7D+NiJq=1r7eoafTMU|n(vG7vrYr&-u1T`tSB^2|9TE+ zDeTvU%@g%*`Ta!STT5QhraQZJNj-lh9?R&f+WTtJ^ExUqh8>;ABr*LrB$&GM3#$5L z&$MbJ%smt0?!MwVh*W6duLxJR;1QAEOWnZFf24Y|zh2^bKetQ`ke}>Qt}ec*`;#pRV{D_%4ozC~^P&(Lr*; zG~~^~#|^+JN93Y`V%-aA06h>(LeJbSM8l~Cru`+lvp`rlYHW<6H7&*I;)KWG5AELN z+=8X9n7qWSw$H@x&QD&X=sv}Js=!rg;7+xtFgsaq)>cDuLV9{rRlO+PpJ-Tpu~R~G zo`#uOWY{iPxH-!eZ(EHGEe~(Ld%0L#JcysfyE8t$Wty9c6Pulx5CnK&v18xQJ5{d{ zO=?b0PIGG6?6!N#EMM@Q-v=-1QxO)i6^zv?Rer|vjmK_Ez8HA~Z2e$+MQq7{4Hy-G zjP$0?oEKd9^kd_pQ;)ob|9|Pd!%SuFKa_#4W4T`nFFu-Wv=3Pmok;Qbv(chfjuJH` zvWNKN&Unh-21vz6wBI-?DvIjhdsV%x9CJt_@rHVv(hG(%-+w%dr)gc3vo-XS`_b4r z`)|%K{9gW(qfn!lC-10t>|`bT@9?UhvZ`hS^M%U1{@EDO#uL%y@2a;c-fKD7+A-nn z;XtO!mQzFCa>n~8n(G+Df5na-0>9jtr1E#KPr+Tbi5P;(2Eo(>xhF4KUTUvt@zHdK z#((ouP#t_kM<{r2=cdf#(vaD8=Po=tJhU)U(8mBP>GxST7R760Q!8nOZIdO+Xd7+q zAim;|P%#YD+YTIMQSW2-7Z$bUV!KfwJ3@Fm#-T+S&hh2_4w0m{85%)_VK5EDk-{Ue zW>P%OhxU->u7=O?m4?x(Ri_!thQ{Z>j}%;67CVx&uBQ|Ng|(+YQm@0`^ZT}N2$r_scedR3bFDJFi@TSMPCrJ zkt$^kfIy=p@)A{ubO+Hba$ozUupCsF!unB-wa^kIXdHQU7X<^YMqBjan5O=TrrW69 z1wrXD{FU%!lGz>NmIO1a-xI*_v6a+QsaiZELN6>?_MIB|z+|Mj-};An!e3p|p?V)d ziprT| z#e2eTbuCQFVUf^cK8HwKRd=hwb{{-1@ESxwB`czjB?ZMHhMBVF!zS+%LGjL=;dtjJ zMdOA4K^$g?_hH>*XOlJR1AwopO@JmTo6H+Lb|B+QS#c>hPez=9 z@`c+At@`ofk%s^C1h`dnWRP8I1IM9hn{S5=G3`x+x?vb%tS2h_$tks#~}E ztRcy_yK5qqfO{6b}x!1=4%w8OSOZkso0ydhFx zg}Et`kIj|HIn=IjzWC|(e6i|{Y~M_=OmE0Pv&@pQLh^bs5jP)gE1o1eN6ANg(XBY3 zLC|ov|8h3mEe*RX9LpFp@-!hrIaWKglz#Vo-)GcxRp6;g|2GW>|5C%q^<|xa=`a~n zE4Z%<>fb&h2=2Hy1ed1p@@?`hX*y(k+LxC)D~~cgn2uuz*eiQxD3L`7@bA#&dGD|# zGYAO<`B-D;ZSz|1{TRVTk4Ifw(mX97A^~@L)Xmq-x4+70Jf!)=lHatCbevJrsEp8U^U#6{byBY|k(Q0Ze2m7R#7L8Gu#$?%T!G(Y$Iv~=#aJIUP{Jj}+ zIaz@BaYj+#K|t&J3)Dp0-%ZGQIoH;<{j@RVEMGKX-+A6ZhDP9byqJ5Z!=}i~+@~eg zVV5*2=LFCl%KT;hPj|QU)m@2=>tfsA&5y<1oiNv$<+lz}g-_jqKj_yFV~SFafL}7x zgnNrVDh_;$txDJpB;LFKCr8}nMK*LD7+O42eD%V-`w`kJwS6s64CTq*nVFz$|6~%t zDDsz>WVF>{BkJs~(;f$r^IXSD!H((5!9UY|H%pgp^du`P&?|1*;UOg4g*5cmTPEQW2h`ZWqC^L=aXRY4)QIJDIwE8k9N2;~igvJL24Q|ev zEL5w3O3{W9<<;IxQWD-$dkyB!x05B83%ImxC;;IMU2mjUmm07>;Jcrl$t%urVIfZvf9zQBY zOeNUYSetJTI63`NVE+^=g;_C_M$|>>tp<37olHy?vEPI7W;+0d^K~lIzM`slgb*>I zkWY6>w6+oKqTT@@1uAE+bf8gDX?C}Mj9U;AFmxF&z&NA7E$TF5GkC3c4LBs~3qC&5 ze&lYe4He7OzJ~Hq1?tZWUWrP7jGlHL=uIYiG`GN@6V(Xh9m_BoZ5eI%Ojz*_8K^Ed z`%MQadF(Ftqc`C0!)v04z|D;5(0$hvW^_1!a+I`Y+B8) zct9AIGZT^SfC8Lxvf@ajgd>emq#YThg?a7HuniJCTz-qa@Kg$~O@2-WUwNb>EB@?$ zi9fn=%gA$E4pV8?Eq51-C*+;m^KQx`Fg2xYY2nTzkTG=9Ka&Ybk-vWU;&3%HX=>kd^+84gmLqn%C1V-#`pz^2SiDX5v- zt>YVvoWVY@tD6qT6r3}WJ;OCiq5Ne<(2Qa?KdQyDLHn{I(!pcp4)f2?ZoRF8f7=5-u>JUb*nPv}D3V|{ z!w%Z=VMyi^;O4t-{y=7s&T!>c&*p-8=kjt0tv1)9*sB6Bl;UKSH)Q-aFr1sW7;!GC=CV&rYVChlM2Lw0rzf^NLZ!8jB)wMCWa4DAO9w?;Wsks|s>x!~8+Y#>ikBxaCV6!K)xRH0$LQLBTe8jEEp>JoKIcFcw~OYo z44qVJ`5J%^qsB94ydZABg64?I24$m;Dq^$?6g{|tTXc|Jgz-UR>H6|Kx- zo7>L$N+H9S-Zsq6``Ud`72Av(PuofY-XQP0v$HFk*Epw2Ox;Gy!U(C<&DsI|HmTb@ zc%Yw@Tr0Yrdm($B!%duvTk(y2o6f}AUYJ?n+m(fBiK-bkMIlp5yfi#1CxI|RwZz#r z-%|%8@PVayrLcj8%(wf7KcA~!TSC@1PM6gzJZeUSiJwUZ%7hvALTF6mqOHrk6VijN zaM55GnzM#)Z_Yoc6kr=gYiqI=!3c@JRc(0^JG0_%iN#G%CKZi>HqcaYX4D7(rWZL^ zQw)2m|Gc(b`~Pk>5JEOAiXxz&`p@96*XKXKY`A)D%G46GoUkbqXLaEkoVo<-2=yg+nu(dvt03y7KLGVj@#lJ zC612NYsUFG?|K~;*gvvp7PqCRQodFot%Q<|Vnmc};n}Xge(t@5KHmqtzDoz?xPJMv z{LTMA6i{#aQ^(Zzv6=plA5!V-qi8Y}X{fT({v8}RTe^ts7b($ib_6ueIt>;Hvw6`2 zyJ5sOfQ%Xrn|5d9?gA~o$A;+4E?7xp1@wC_q$N#JW2zi+r+mVcaV!EcVFi4)(_p18 zJZ8z@;uP$vkN|54SJ{e>O$FO;{6OWGprN4w5Q%*Er{C2GRoXCz#t{Hqe5OKz7!Ktw zbjsduth!nyyl>N5Ygi;+O0zaQAD*f+%!dj@nZkpL$Er_m1lef-UthTbwnfrhGBhd` zV=XUM{wBXz{D@!sZ_ccI>^e>ECbL+*TQAEWjE%cY0YJ9-x89BwjKVWGUxy zMg0(rJt>mp0A`f&Ouxo2dfc=TteN{`GnyN5ujO($Q<1WkSW^^WJ;_-~YVKmm#FDwT zLR`+iimhI_{8N}z;6+J2ccVvS^o<5;CX&jAxB$X3v<`eQ7@qoba~ZJFlX7ZMpnLZ6 zJN8lI=tsaFwSebj^t{zHa9J#V``&*j*qww^mG1d9ZS|z%ZdS&B&mD>i=-G>u1kH64 zOw`BedO?Cm<|?&)EUyjATHU;VteAm(*na*EOl#*35A|x5=&559#_p(-V1o!w+z-pA z^BtEzjHTk)o~dE@g2{fOQCFa#Okz&fbW)jn=R+k99Ehi7<;0|pE}Iu0tMrHZ{qUyLXgtb5kqjd*{Wz?BpzYL~waejm!xFh8u(qXgNo|TO0D4xIRff7jByG}K4<%naFLwHUo()!wsIl$*YokfnT1k(n2K4>wE zRJ`2=P#;`BKX%U8v+>dr_{JtzNOArsc`YP0O!@LJG{RYkpK~|jC4T=ULw{HfM&zb* zl|vZY+~&E9Sm1*T`M}P2XlnH{lmquEGINw{(lXMLvuSsU5A21OhzkJgv^HrN!9jxw zY%V@s@=`(jXbxA8>SH@@!Z`WtT_GRi()L$%YyZ#O=us);@0}G{;XyG_Ur zx-WrwF>f-N)wlUR^E<|AOb(W#pxwG~~3iE4m50Cll;82)J;?fvIeuj0>}1It^1;io{YI6R}uSU;+-8EZ-^R*{evH zOAH!f$8=|1qh4l7TnO-S21ui!GWR!5{(@cYYm*gWrUm?)VsC`SN)vuZeXr#=mmYiO z(_5_ZwV!A72Ic@}{=W$%q8=gnfB#BHxs-Zq?K=l(qX0X6!9acM_f$bW4Ttkm~yE9_XMb z6ejUzu{>9yGxd|?WSSrjE|>_E!--OWmb}9IkmJ11?JVl%F>~`H%otaS=o12l*V<4h z+^iz=cES$JzZI0yDm1R5&H~4>`n>E-$cUs|&>;=Dp==`2*w5e%`t~K_$mS8)Bv;NM z_vpngs(x>g+a-omO!ft19lhYVb12e!>&3|@1pK_L24(EI05)PNFv)zj#Q>FIU`dJd z&(cE&RkTIqxcn-c_pYuNR&~heg4RN*c3<~H9xj-QLaJ85POs8-TEdyor5JxGTGb_y zzp18pGaPX7J-5ypZ$WEK*OBV}2VnBWM-Mvw9XGyHUg(WS)%pevP_Xd%O zWV*l`8QnJw7Y|a#xg=!1`l2oyxl!63gySMJ>s!C^dU-gDu-VPt5Vl$xM;<1&2`eEb!72(gx-9}_d89aNoP(eBYB0wYixyZ~Yn+p~m1`T6Ep3FW?1%9Y zNbU9%dA1QKKgO$JSkEeMVi!)JXUu2czsJe^FAGzji4Db`i=A7WIhVmu`Tb8XXUdAb zVZ=V;7s{D-%;#^GZkOE%CKi&sU|XM4PPf{c`#c%VCJWw3dSfA9?W$#%-)>JZjPl7iJ}Id`e_vv2A_NwQ)le z`i)gf=qMJ^z((Z)*wa8q*Tbr^qNIbX9|e3!hTy!X)k-Q7ca#5$ZS5Q}3(E4Gr8#Rn zSg=g~UR>#)>}&4>(mky$XPe!6dv!~&1B5o4hDMeqefn9Wm#0(s{;?|Er?n4e(74TH z0(c}=xUvF!1*`NzLjBm&>xOCA=6CHrS}AJyh{>5;w)s2WPd zdU(dezt%<@*zBz(Q`6oaV%Iaac-N`bmw=4wkOA`x*g63-7WImJktfwE`bIJO!dZu? z1QE-j27gZ5=1>+uF;h}LGC2l$Z38)QYcO;&#jxZ#h8I*?k zKA>^si|6Ln&eZziH{8ZMmJv!PuVwG%zC6>Q*jM_W&o=(~X)A@RCc+$6>x^;mcCb@A zY7bR%4E2I8v_r0GX#btUKuxa4MTdhqz+&UCgBzfSx2mQ=$L!NGKp6V0%*5RzXZY%H z-Ipz^)TdeZd^Y2|M-SW$DiG2p+i+;9ldfe}mT=6`k`e)OYc+A7Kq|)obA4eLJsAy~ zStur!38h#}ANwq9mL8$DF6UF$%c8 z!~o_U?_tA=y`X9u_IMS1uC;p7yGe}8%CFZeWGiO*S{R%Ep{Tj7E;=4rH?gu^&zrHV z7kX&~9Xj^Xm-*3_efzOlnxVpsf0F5+9(x>?(Ip@3#!7fx6ggNdZf{*e{fl+W+x*WU z&Z@L-usyYmv4WIJ$DwnXXQAg+ouK)0S^K-%N6D%d$Y~9)`R}^VPrgw9DF;RQ1KlVf2Z`hH3By78f_9BR|QzvBc(^qa1o1{AB+fZKG zn1p$pp-h8nrl7lM1(hwe$g?R)`Skf&DoyM8t@VRZ`n{3v`T&P0+E3N+&-z8S6s`^J z`u#JtN69J8LTNZQ>ZZru2h0>H*pQ;LF3c2YLa){0tboCF2Su&PWx++(y$YIiEx2@# zM-R>&@u3ITu3yOM!SPdGx!fnMzIR`1ISOi!EEVWSj&oE2acxW2)KM1Qy+aXC7gx?X zM?O^{L%2~&SVt%*8kxN*G+Wyv_j1LsnoR4O3#YzK&UmG@fLb zI4D@1H5eDiI3A^M5#KyI8HTUK0`xM}V2#W0|CO9Y+Z=X|?PXW~W^smbXv zjVbaRVg(8V*c%_a);yM$P$iJBF zfu$nIP0h_8=_Ngpe?VGqqcQC|8Ev9TMYPR?Q|lB5gv5fm?zr+Nv#0_bXh8Cli8>3+ zf{6+Ye`&t)@!2vaTFOIP(-a8DsAsBjC=CR^c)NB106&6?x6QZSM&dW?`g|Jc1W(@Y z1J<6^>Aarb)P;}Hgg$-jx!CNMN+bCFja3x=GERPrqL7dR=Nw<%fu^mw&q=^OVnR&~ zXr_E@j!3V=H>6P%hl)>yR**;RMi<@jF8%^Z{E^b}f0#GM+ZuBJ2PpgB*n6v>xVq@= z6L+`Z?(R+k!Cf1N5Zs-{6WqG7#x=M!&_Lr3!QI`0I|PCSlDxxz=5FSG>icTu+?=X& zbx!R%wbxqvd47+lhPkqae2>ycffs~o5*0(ohfZE%RDE3mNh@@Q$)(Z@wv2igaIz;J zN^{SUxPy+I_>wL6CmeT|T=EeJ28u8eJ|hMNIek#Z29pjOQQ)>|-R7!PfQ8hUnt5ck z*yk<5d&gH_;d|GY@NIUIPm3!Ky!43M3|T}E1nf!X4$jvJYo6w%tyeKE)$yT$%?IcD z{A5+xPkK6K!8H0&b>s5gsrI?kc`A`r`eUu`9ScI)<7lAP+c>Q3?AI-`db^v8)JL@S zhEk`tYVr{pr}UbK-2EhSrGWlnF&@r_Ij?I&cg2}_OW3?}g}c&Kx+n0;j5%@CS!=$~ z+$pG(QbyZ8DAbgtk>b1Jrj^wdYm{TEv@pep>IB^IGb^q>67z(J3F?7y3B*y*ahre$ zPwtj%oN$*g2l>F$k=GrO+{eE`&S@lR4t!A{&7DFf?cQ~ZS?cF(Ith`u+2MY6?zWv?JBEZeZgA_|CP6gs8c0`kQZF;IC7HqA zcYdPN`L%n*tYlQ{uYL3Zzb3PTWqS5?o4Y={nqF^mc7)aKGhQZ}iQ91g9QlK!%-=XH z*O6hokLpI2w`zgIj)<%Ab|M&?{vSeU!;aFXH^{ZQXxGq0vnL9wIy$skmZ9k1NU$8J z@~*`=#+^)#B^~3`@PfuV#|LV+Y@#Urk6}@Scj*v77TaUXeBfkMxu8>{HmoKV<+(G> zI6QwrUwUNPDTl&bi)u&orntc&O;ymag>a;^epE`+8iV6_i^r;lQCpfsTrGG(Fqq86 zXmyur)oJ3lc`@EnvrQnfjzHNlihT^}8DC^X08G!5Dd4Q9;Io_ND%s!2nu>CZ375%e zqCPe^ke^wa`Sm`zN;Sgz?^2fR786nIlIO&@ze=N_WW1#-il4`f>>S8zgN&S-*QLHo zEE8QcaEVHe6s`O^#pX(nauGJwvfvY(<9hZ6JXejRUb^F<@c%92y0 zDw3&0QspK%woV+dx~vD=Md`#k-ay@5tGTmqms^17{Rln`lA7Q6;v8WSL?rScl*;%W3TJOt+5S`$(-Kk zZ*h{*(jfbb0wxJ?ier}td02HkSW0^SGSdt>O%i`5~G?ss={Egt$iO;lY47`#oDC6WOF__r?{DEXfKBK)T+lZt9l}MGpIVYT-1w zGiI|s`|1rT*S{)#y^&*kq`Rq{!nt5#`>oi5uBZDToh zwKZ4&+F;DePhaXwcsZx%NZwW?KTt=Fnp6j@2w82-L*6qLb0MwglwHo?oRgrX z-E}Ft<$hvn6Eg?fL2I{22b& z?)cR2J3ql;S{oAi9D8YJ{Y?s-4i4D(D5@qiF||9|XWK~K6g0l+Q?Xam3L}1NICXSI zQcMInQzyLB2fkr?sf{aOZWFgr3SEgcZ=k*8{Ait()Ar|69Z<+QwhcHK_)saUa-;P4ON+7zvx0 z#}}iPGZ}JWdQo$oxZ+pPSM_Fv4(aRr`^WtA_ZDmOv`7jVN0t#ZT=lTJJ_x4tAVLfN zi8-2MS05;65@1rExgSeeEjDSt&^IC+ICgbqT5e)N=({7#4~f^!aw4ycnWOA9Y3!l+ zawsfcKH;S|`+>h%iPrAn{bE>>pMXrACLWZ;OvtePK9CY*e<%rM zP1S&waimLNAh8O_dJsRIb-#smch&!gKuja{Pup90ou+83XEPmy*0C1svxh6VuuSGN zw~OEh)~*zFe`t>2cp1UVqT*a_zs>XOy4)4h*`bT^pX)lt> zy0*kVE}>d&x9V6c^`wilZ1DFxDP|m>LYl#N{Kn`u*%v)12p!E0EN05)C)hz{DY5j5 zE7kD{#}V+oRJ`na(ttJ&R;0o@^);dRy`ifx#;5q)+s(Ypy&+~@FqT&E!uqgu@l zG1Ow2>Xy$Gl5(q6)@HpQRmpBN)&W>Xm}Byb7gyAXnRe{^^|syvepIb0O4F|rA6A=2 zZ=P1!{z8qt7h(QpZ)YhJTONiIAiD~;{?3eof{^Yg&~OkU2D*h${*W9>f&yiW3bE@n z+)30qfoDOJanvO-(R(S&`QOOuA|3iQz`?mUJo_QUpuR}bq%?+;>-=}CpsrTew1v2O z`z7@y~e*BCCk zIUcmt$K|hoNXkD~qx#E>?y)D4(@b~0Tch~k8)e1r?v<9A4jC$|W#}mfhk$Cf$2(&; zdOP~H42O~(-j9SAn0`cVyKdCR6v-GrXJtfigto6UEfPK8pLq2wJ6bj?KFzM#h2p*c zutId_QZTvtC6Z(r?4nKMhxZi`Bs!gTv8_llhM-er>W~`TmJETF-(L?Gmcjn$Q?P1G z&HtgUPDSKo%Y&IqenhDFOY2lU?4JG(9INCz?sVM?h~nZu zSI>}h&rj5&)ZNgm7pK~`B zl8QF@7_1>IDujuyad8Ek>!hYl_VET58>dCN3GX;$$}dJ-LWKsu@Tp8GYh7N+)hAv5 zUn3P~E>|)|w`jLr04R$EN7Q-40FS=4$Yrv&6UsIEV0-?J$%v zDc<2BaetQ& z8QIw($7*`2zakSr-CzFh*GK}7Y~peNs{lp3&*wH62VX=5F2Oy=vXmzh#bLtYQi#Q~ zjkCCp_9`x_Uc5{cybSFK#9`>vwrA1D|7S+Q|I-ZfruY5d=^=sw z3JQv>Y*1KiN?2@z>=yp6j{vM3j~MANu7X7JE#}ONi3YDTDeROCNqk@j#|r3^ zGN1oI=@|T6Apl-!`d`W6@c+Nd|EGEDC=|Oq2 zg;!(UY))qmWfMs94TsQSP%kU^u)J?50~BI$;=mZ8Rgy5eF5ib2p0r3^yPvm}3rBg_ zFKY!G@Mk=8!k*bEgfAD=n>2N;gKfmp7C`PDoG*3)1ux5#T*modXP1)6|Z=KGKww4#?$rImS;N2#p|Rz&{?&-j*kU@4SB%UOrIKt zgPKosmAK~Y3@z?Duou4h_-y2~F`uccpC>5Q7MW9ipF$gLce}C?Af__Uk!w1%)3zwu zs9R;zk}*Am>42HBxY!#~Ys$0Zs-Vn96r1boq$L3v8cSOnduC1le&O9^#>RZr@(^Hf zjI7q!a?y5ASJ%WEVC?#BWP11TDKX6;k@Z_QIi_tXBr(m0!X_#14OAtj{aUK|P}RQp z-I5Kcd{IN$roPe?wkY_{iH(ER0dVD0CGy&7$NlRcQN(s)ll4T^TU^LW0X1yVk47u$I)_KlncX|sxe5nKw1{qM>kD!D zrS@8tvd9Za6`iB=vk;q^PziS=knB;(SzW8S{SopQKd^f6T%%I6ek3w1Wm{p(xyrs4 z<3ZT$HkroKRdStZp~=?RJXXpIZ|xFvnPlEFk^e|G9%X6cEtdGYnzI|C$upY38n-`f zy=@UweIcp%k(cx#*21V3#fQVLtJ&EXlF?ydlJjd6OyYm)*?2Jm$m{SnZYe+fDwniC zD|-7WFZU&<-{1Uxwc8}Nj*n=*kJfLvOPjxOgU*P+{ta?kSfp-jyjHNp5#zc&#X?33 zmI9PRl2W`oXFeB&nw0W6)7iXZdF4N}zVt`GrE-zms6fLi?W(@LVWJ>&oL=$WX$!59 zws?h##`mIsTao(4RS&UkEg?3AH+XlcwhJX-n4P-Io?|eJ70Z9 zr?-D=93;hGUbwL|z=raCr=5007Z_`F=Ka=;78i*PRny(?kV#4A(@=@f8Rvc4Q@y_n zK-J%WSw{86n_m5QJgcntoH6v?1PJ#K4X4A{DfXi@XdnoUQ^TwBEc<;gFVDG@mYaq-Ayb8(O`*oC}o*9ow{!=Z{SE z59pTB8^Go(!k`jeYPCiY3GS=7~F%pOYqa)0#c5bv_%PC39W@u^`OyQ^Zm z&!m2F9}C(9biedYVkVAHCXLccS6~9@#Kt%y7_1Kq*v}KOCZI4lp%FSX0XF^o>AD1( z|2?D~^cHLyj%$Y7LqC|_>efqqx$2s{9^u3*&=QY;K)g%Q8WK%JRBiI(TaXy#7#%BQ z+v<07F1{Y3>_6SNApc`MGAMv<@X{noeq<~)D{P*~@|x}kCas)W#C`{NO z3pKsEd$wgN6P(Nm(kiiN)%jOfSL0HP}e_>eSuDr%!II zgeejespNH(dn7w$KPRZ;GaBbPzx$9BY2AjQ3$AdU&;|>iHpgA8R73BGv)Z!JR>qAt z8+Fo3oYzLxXhf?jDZBg=jV#dX@*C~ zrwA@eFzGPrcyWY`_KwCFfka+5hD3BWWIa`{IXv4!E9Ztv@DvSQK@jqn8Nro5t@}G^ z5tZxtEI6C?&TFLS`b(si)NjPz+SBWA(_{kB@8O5}!!vL$`>Gtj;$s4h`EwI(!RJAq zp}(tKuy#IX3e&`QktefQcm2lTrP2Y{LP|Bv1xte zeZ-zpT4pOL7(+SCNm?v70C_Azjy^K7MD(LY`y-hYRX-7iC;1Gu1o)g^5*+QfwNScH z)6MyVC!tTfX26(-ZxW9M||>3L5jP6>u} zh$UdNqH%u27eMH8(4Jw@RnZ93kvZJzxF~K8S?mcN>g95xkd*QBW5jQ0P4t_Fj)vaL z7oZa(9MUx8F$WJKRVM1$yQ|veaw;QJ5df5UFs|arZhH1biA)#deDalqI_HOQ!0jnQ z6+R^?XBfZ(O3NRJz#_EB!NAd+r7%QhqyQW7h_?tSveMDsg*yM>*NyYeRl48)_4I}< zV)c6AXe6Pf1lu3W+Q|f(>@^8Z7N0Pb+krLA<$FiWd(=|7g$WiLxK*+Cq`{V#GT+() zo|>HfazsQ|Dw~E4nJ@j;IwUsgz9V+Q6CPFtHI`Gt)0FV^2H2b8hI6I3s?e~g6_w(u zc6s}=M&=$fCsRhjKT<2s&{4~%k??UMtBfB9{SKRBl@lMSZIP!4i^<2)3-M9GI1YU* z#`y`&A1b7h&AA(!u50kDAq?rh#Nb1N1XCH|37Us@_xDq4QAkfol^?_WXmh^(`{d=L zIrwwJ!|dW^StV~a{y|d$xW1SIc#Z*@R6H7=8D9`qR8op+X=&Ds?1^~;-qmm>U??aD zaAKraXOZvuCZ_fucsihilCay9zg(DmZNWo|qr)QnX9UF&Qv`$IKZJJ3x+T1~lpzO0 zTDP@5M>sy~GHQ7yo)ASiG2R9fuRSLUS9K=ffXwgyBi?@qn7~Fm3p;9TUC;GJq%QZe z!2wOBUEp1tmL7BIe0n|6l)7elTI*S7lAn1+tK}>c9cx6Hq*_DHgSC!&Sv8L0h(;V$ zC1{Dax3CqyQBYfJUE=6#@Zcnx5tB!yVW(eTsuoJBRyl1naqm*qz%7+tVY>%t#9X!a z;XK+iC&%(mA)XMQ{c$+ym(v(_d`Mi(oa9D2IcWr!Ux@z}uBqRg!NZbBm7h1oM;N5XKN zGg9kR$V2Y#NFo`R(DF!|p8f}8snwo!Yk3dYTw02(G1aR!Zvv)3(U5El!KG+X2t!fr z^3_)r3?qqRN7tA#lKS!7IBXHCy?Jv#jrHK)c=2qE>rhS@0fJqySLzT6X}eLWe;$+{ zE!!B|o16V8Cp*;Pj@c{hnov{gN73qscL|z;@w%XR3^p?qNzBlyP>7>g3EQ5d2aPu4 z5(_{h_C3X^v#4<~uT6g*2$hf0nmWPkEwa7(AR!J5DUQ2yq4-K2E|T-m z8?ImR0-i^aD4E{JdiETXhnrP9qL#Eya61T^*Nrs|e~M?RxyJQh0luoI=_eI2!Cwo2 z;6Z2^V|AHMpyc{u^FN&Sd*6NxW%%u^jgc-qR3)vFRW?>a4V{jTz{T`YT4hwcjiJ0u z9KloW98U>z3_X0_ejU@xCD-_eSc3|EoA?-0-$y(Q18s_YnM95fDS;Z{9yh`&N2*) zrDtk&IpoM%dl@AbXvcVn;)CkX=q`)CG}z%Y{8#Z*-^IwEZw?)(x2Q&ay=JL#_N?V8 zAhgTQp=!yK@$HlV%P#Fmtz=d2d>&IG!9JqAEP;!h!3brA7RRZYc7DW6gQ|#xYy<;= zCb*K{1BN%h$0^~C&Ed{y~A{Hio0DkLa2W+!P_(3kcBk#w*uuge>+}lXq zP`PEJ_J{sqOD)o|EmUu)?hPx};6ar6(#2va3FP{`Yhf&1vCwj98m$G?5?RpGUGe-D z1N!*KcU7|Ycr&|8k}1Jm99M1e^pe7$s<|M|`5>lvIn`%TZ!$_jh~!bLyrpA3{Wlfz z@MbBx2ydC1lZ5Bi-NIZwO4+n6EVQn>yxS8Gy(vgd%z*!3`ip1{$@Y|po?l^q&`PPV z$JazmDWujD0p6tjsbzFHlIcE+*Iw2jBUU&73%Ngu#}#IKx2bxnY585zDNk{O@bdlu ziPOOGK0tyDZbY?}H#FEqJJN&!%BtorUerCTtoghaaJS%fWlreOm%4?umu!9GbluW& z7n3T|+x6aGv}Z#<_pw^aFn%qQUCP`?G&R|YSm4f^AE%bJRDEWZ#kw{Dy1kJiN}j%x z`e({D@5$fj_0FRs?4K<9hucrZU(+=zzWGg$nJPB9dl@AH&d>yncs`h}b-lA@-5T<2 z2>>=$<5YWUWojr;s7fT1O&HTDam|kns{;B`Zt{Ix;?zNAuxEx}GFpEUZqmwCQte_lf)K@}k}QI3OHm7JQ^xt3 zz;?n{n6EkKgIzK~;{(R)XBcMJqe(6jrU&Je?tKE5E??j*dg;+=rWce=*`p77gOavb zjdBW9P^D4i973IkQHL^`w;aZ43fMeC?cKL5Fh0J--dDsmrdFk=@cYS$3!1jTMdePA z+6XF7a|w2kloVK+Dczj87D`_cC$89~;Ne)gHKsAv5F2-Sm!6i95ws#IC=yG0dc8ZQ z^4>zUHXH63Gob6QwcP<=y~-<*hrUI@36I%i7rn>d=Dl?Y?>5~xqRBb^BIO)P*!}qB z$w4>)fR!(d+j3l2b)gP5Y9Ch?;H9pxCtSrYgmXQfiu;Z`2{!AZtCLpag;@NZKEXoH zC@9Lf%5aS1j;Y-@W0lGrabPF3$8RN&1{CIp8TIWTNj~c>A6>Q6FqL#!1k=y!(zk2( zXnZ-v&i&K_+Td!^g-znb)Eu;P6t#@ecg#}XI{T*0uNm4O;w5HE{~PdnAE|2CZsl>n5Ctp_%Oj34-U3xS${)$ z;wCgMi}p22?PFAoWT7#CXwz7w#b}QrajHXayzmWnhB2*!n-XoRSz6AxiNHm%^t@7GYmC4Ivb? z(vHcAorJ88$reVFr~0Z^vNkpAMyqjK6WuEIq6`iRSfP>}SM)5yz45sgZ)okyZ&A*s znudcp(X9VaHGWA*+~J_%!bUM+rWON52q~S8%RGui=Yjv074uYHn+AbKlhoQ{($ZJD zh>iJ~6}?xP$flKNN{;t*HAM<($P$yzhC<*??paYztlh$gQjgVQzL%61?d#cgGh&|d z>dkj%40q~HML#g-XfZd%aeom<1&jmDy3rT7XS}9 zq<0LhH!CjZ#Kg%#+^&9Aqb3-3>ms?fS4CZ>>$ntT6RMp~&{9mmFnmOAKFxITH*T%r zqST~|^AWMGu#K%+LS#$T?e07cT6{)KCT#)QxvCu@Yv&sh5uqfM<^^6(K(vIa%fZ$O%YmJy zdHi!gE{?0NA$b)JyuJfvf&0%hL4cnAfHA!i)BR3I|K){!1hOZ*P+E4i)1 zOrvdGKp-WWc!V|*Iy&A#WU^qz^HiVrsHV|x?2UKmBRs?gm2>pxjil%1T@!WAyo?+v z$|K_K+gFgWAyIolZ~plOc?{b8YO+uktQl^YK49MPgVNHGedfMhg|?cPki0V&r>_`j z<(lf7`%1*COP7iD5?NX-*c-1DwM;#b*_<9gWIi`bin<&b4NkfTY`=WQ<=YLwv6%|) zC+@yY{IPOkv2_TM9g)cALn(_vYsl&-e(gXIsSNk&a7aNYWTNC&uo2R%%R6&lqTiy}R$go~t@X_V_i}c=< z&`kF7wqi)jCs=#oCL^Gu{XqRwwl<*7^YX|h-R~Xj8VXWX2{gQ>cS2Zxe3| zSQb%3H6bGJ1u}Qiuc8YYp|$*=Mp8i$r;*P~O|2S0A?mqOx{RLY@wMuh8e>CvhlDW~ zffk!OMo&;{Ly>n?BQ#`*e)%^H+?!kH&6Xk>+ymbc$>9fohTaz_OheNdzB_a7%q~1$Q}5N?w|km79px^t-U^5g`v*Tc`J(0D z6NfR$RSjgeU{7NMJ*E>b(zphT@eQFQ_9D|oG;tuyQ4$U=iueKV3_r3@zDuzP}(GR5DMhBfg;-Y7G$d*9G0kR?WYarM1@Z1xhLz?To#~q7zccKM>WS1Fm>R!t^1oq8UX3_^ z2JviW9F357MJ6qRh7<|_)I8*?b|3Pc=OF^)NQs1o1NvzY`#ewX&g8>}xp}M}fs>(^7R8pnXMdFh zOBROAqGO2A*7lg+KO1RgIo{gV8?Ht07+|ccwrbFR2o@|2xx{8?J@>mH*4hy-o z&D-I0YctdhYf~ANg0G&%_Kl$MT!X$wB+G5(CA#@4X#IriY82L+7kuUIE>&cxq@GwA zYl#YYI0TLA3F2+_ri2{%*ME|>Fyfqx^9< z!=vg~rP;gQzx#H)buT7sE7}+SL?qUl)x}Cj4c+XZ8u`;G^LMB9zTA{uG1fk=IaHERK^`hih&cA;W)I0T}f&IW{FUEo)49f}Fl&qT3ANBixok$wpT$EcOG=PQqOp}>s#{~xUl2D(&6IlM*z$X-^K$9^!)i)!va#cp zZ@+ClmHmTB(F$cenILLL)1(MU?%-EZZlxP3B_1vl@4X5KKgjv&d|!d8%KO^lNion?Dya{AXspLZ zyNrnkt!Bw2r}&UhGrF`%I^Gvz+;wGgEDrI%LYnO*T$^s$v;(kUuV!hkO=$>|~G zHu;h;;7zS4P<3>vHi-rI7c{Gr;Ju|T5ZW}oxf~t#YkEXuX}cJGGhTJqF%4U)n=ez) z)AY#D0xA+x*Q9g@M|vZz!I{a307D)v>_{EYZ_(SDdL-wFm-sK@k4k6Tt}CzVK8@Co_htDRs67?9F15bSS(+7R66nhYyOe&VOf9L&-pcOe ztl=pk)7DiS9kQcCt?Ic>RO@JJkKrgLIKg4)z7Dcph22YzB{p4p&l}oqtk}7jOu3JNwX2KeT#+7>UZ$QG>o<^q^bQ zZjB~j*Dm{-x0)DUQ$cgDw&;r&Oi)wB*&$<4IgUjD3zmLGF^+!95i*IaEV_`gl>5Oq zCmyV%-sz2&UTN>+XoQ`r$59`&OUGa(mg1RGJCd}w(G=Nad&tq?%5=it?rsfmdXrKk z8AfTNNd;ly0te$5(Yscq8v?O0JeR!geYB9ey);<&^P8KQ;qnXK51Ufp>C7ohc_p%W zptv|Cj$=c8PU4joDYB6#sl*$&_Z!4f9=B=a>}-dA)h|`=UFcWCU)e06u6>Ny#50-Q z@3(?@so%9kZvS~@P8=C=Hcxlf8GGhW@|Zzc(YB>RJf{vlM?@B_p9OcI-tF}HAVW`R ztM9g#+|s4IKKng)T6TV3?$MX?>~)Xq8q815(>>1dW&k~C043OZ#?U&ll-Y(pP!(O9 zR$Z+CQII+0w_#nnlxSU)%%~ks-52B|Zd^wmW)av9FA%d|e4AqFqC&*d0|;-NLI?8i zo68|&2_wv>V9p)h&2ep?e0muQmi(}zQ2E%XHA?Xz+Gu+B>E?}8wzx{c_DkyX9FH{L z4-3<#z{<7D`2|jL+^56RXEk!KGRNnN|gD9sAoJ;n)|XmXT*58!WlKz zLGNJE$2UqITD(wT<&Y)!Dux)K)3qR%G#d7Oop?^sh`{f}LoX{+j^6&K0U%NgGi~1d z2~3OBvmF*LHBOIDhAcrHVp2*Qa+cJ|O^$CnANh?OJ(hP<;+G9T?9m=6cCMflQ|{r} zwIWRW#~Q=p3gfo{nr@@dbc-cLRb#mX2IW-1gvpoCKjxvx=nfmqTC#XaK?(B zMPXf$Y`)~s@*Kn=iOqpQW)Ej|6$&PV19UF?CkL*{J1W*amj;y`WZ&i=)Sf5~2PDT#YBFN1oTFkt_)G($F6pqe+`EW%P&X<23Yn9)A{!-Nq9<6AoV6V*#Y0mXJF|$u z_{Ub}qba)xq6@Vd*( z6KHxi_auX1V@7XuO~+mN7ps&lFR;DMd{mqssFlQt`QMvTsQi!aAsD!Kg|>ZJH(9XK zd9(!_SiutV{c_G4!R$T#aIPK^CSwt8O2AncrcVTlUyO~=5fAW3W|^W8&vLMl0$;=(z04-G{))j(&JVvZq`5pSz zw`%7H=}!laOh+jL$r4r$RhCa_Zk%IUEChra<{}y->|fd=tm7~+V%#7~3eO-6o{&QR zA0l_3!pK9WcTs3UVCn|0zKLJ{$>+`tmz~x4@!m|fX?+#ToxDLmg@@=RpY%Solo|f| z6Iip>eDrxU>NT-&XJ=AeqhxdFh9uh3o)waSoi#*CZi1jos%P9^m;dO^Ub3}2=fYXM z3@|fTcv~0n+qyhpb0n3-{?DRh|6dS!jQ=4<9xJ@6|7Iv@_mNaREd}o&nbi31SUJ9m z^bVo}>W0?JjWQZcShD55D>0TEhIYEBsH?U+4?xt!O-L|GvoKR8IU$OKlF{tXe^)fM ziOsQXf-Sl+1_V{;@}Gn}iMQbPze;kIk*FV2BgD~!{1N=S0$z;br~gBE*tz@gyWZjh z{95oS*oj0ZkOE3boUO-33!NYoAiO43^e`iVQkOp>CK>2)#BR{%Abd5Y_}o2M5Y=>- z_hrq+htQB5v!L8PB`!ZQ#fb->b6~3ETr`x5b-)4Vn~-OA_?-8$pRPd!n#M7E*wOA| z+odGh`0mDvgN3Ej(lY3j}<@y?CrU)Ny{u%gEubrml!= zoupx`=u~VY2g3?{+%af~q5n1Vpk6p(G4s;@L(~8)kCxqbYFz ziK$3b1i)#)@D;SOBE;+YI3=DahHZL;Pj^Ws5zvl7?$)LV$A>E~$05!$XD`$3Qp3b;1Mr9Q#MXj5UFQ!@w^1ZBt z&7rj5ro_c6v;GWyEuLm}4tY|%rzFAHmZ3~(!s~l}jx*~lPc?da_Xs2!$zwy z_KVeNGFC>SCVT%^#OMj#BR(toFo`yWjq?AfJFJOOBXeI}G;{CZ8w{s22 zA;M&EU`Oq(SgijSmA__>iS0thh^wjrMSr<9pbj+}wDy1$K=FG&f1T9*B>KNS;vEnz3G53$6ka z?N1S5JU}$$$lI>2se--m0-+L!)Y~SyS|Ic9C;O+h6AIAO1is5{g1f^S0t$+%Tro*M z@{-zTu<;M%Yud8}_sCmv^fd|4<+AQ;$nLM?{}8$j$38fL?x`N$fbt8iZ)ZG=g(8K` zeeRm!I?F+=)dB%){%5Bz(;q7l)+{EqG{8Dw}r=Yz^OTd!*cIdDQU z=h|N=Et#F&i&M%M_&WOQ9&NqyRG22~PA2jA038nSZSxw98Y+MPb54tUdV}J@PlN55@|fHs#E7IyaV7 zo5aU6m+&)_%S5x2dCNmDGC7P^dM=X19)+f27CYO@w zide2-I(UW~aG@rUQnl2F{mqq@Uy-a>9Dunidlw$K^{Vz;T)4KiMr^XxteCE@raFiR zOv~X?aF7@Y#+UWeO;*(gl~k6N$$DDn3GS{PjcL&WKLK^T@zZ>yUXz;s3~tUFQgvG< z+O<7Q!M3gem@L}!k}LY3hSzqsHbIlZ=^5t}sn&>xH10c19Tl1p-KV;Yqo1}#eyKl| z1)f%bY9=DL-GLet+nVje66;NMC?|m`}xfVH zFQ2WZbq5&G4EOso=QVKFH9r%+&U#34`)NvBtIvx=fb&5I=^1v&Od}3F(mM5DF+M(} z39{PyeMSLCX+#F10Jhe#MWk~@%mCT~#UdX!Y;prth`6^6Kdp-@pBd+D`X$5AKEDc~)<53Rb(D`zu+jV$`07&O&zt8cAQ|a5 zU6I?86ZBLnY7eF`ajo9|h^6_`NFF#C|OsVTtIM-XA#YnNhvnx4QXwg1#7p97R;T^!6F zprcOkAHu9e{X%T~eNth@PYujw#kRlk+ch#Si%Ru$0!mJt3D5C(&R3 z=B!D$=ARt7eqg#5;oND9GOR9XUc%7#)ATYJhF2!5l5ua%blGBY;w1epGcY4xK?eYg zhm@L7r;M&YWpP>LeV(HRYPw8&Mjscp4%+q5PWBX++ehmiFEHP&W?-_P!;~xXJ*aKB zn|0~|)=DEx6(^_)HLR@nJ>|bX_qQ}}XL~IMG$<`71*LdRMJHWEGLF%A7D=}yy?xbX z5ISuvr|0F{QIh_bp#Ko07QbEMeV-L-46zx^cueu-`L3`bxo`R(LYaS1(B_^6%0vMD zhZxS6GI)ds{?8r~>W4qHPukc`!Jp^Ym+)NRU6xMwCz(BD`;4%KMf>Rb4!Alc*@ZNSxQ3nQ;C2wyoMMsLWtX&A@ippD>A3mo+VA z)~t?B0_EpfI9P$jx)ehcJKYd77R15 zNB?fM)q4;o_uQNJv|W+#58v`Xgz8D|@LHMcn{UzQ2x<4pp#EE_ZS_^YO-HX?koijE z`|T~?L#@`u$BWLB{Jyigarz9vlttt3@S!cR+7UomjrsR^rSBg`o0GkF5bwQ3j+l5D zpB(&K)aw|W|L3?zQ#-p%ofL#;sKzD5Y{&mkhdJecYVO{Au1s)W2v z^|`sm(R2y;wxr%&h1jA(M2@BiMFzHEzf^coXb>cLrSrfikcUNd{$`O8W#P6a9-tf( zx}=q`1M>+vI!cYs6%ssz=n7@Cb;B$wcMNdjYlh-dCe^dD631B}Dz|^Ihxye|X<~i> zbT43VA5p!_&#^<@4YN88_^13!DDJ7VNhmjG^2HBpm=`Xi_(=iUX#MZ92%4k*hxlD> zG72ll9}$crc$9%2!XF&2EuOU1NxRG|r;tD?mQJAIxDU(#HZf<@Z&1iI#K>5C zm#mkT>BQ({c>f;)AxLp7GQe)4QMQUgZh}qFXlgZOyElbE$DkG)HU;v5 zt71{dlvCV6{Ej2S@5qgXs=qavVynlz#M@P>oWX&S@KK0%c+JxXr!@hDX< zFu}iUY>o;#2pnwD7#m#po2^3!qj;->I6MfUT; zIKS(X>e4fxUoNCN1ezRJ``d^tb4cY8PaZqHUygMT%C}UyflW`^0G$!J`vosaJYZx^hkCeQy@CbPpM)(g%D`$FQznH+ulGq zcOC>?KRZ4snOWXmj&x$X%q!_qr^eKPSJ(D~>_`#=gAeJ+%S3R|3!}*J=#m)wPw_<# z!Q41Dh(llk@g!p=ybr^Iwg>UcI)&pG9gkvCt&jc9SoZLphnd+Hv0D<3p|r(UtPK7K zGJAub;IUCYb_o5)^lG@K9+FiGrn)=PJNIcwUyun8!-Quly8GKd=n-7I3$6SO!4zF7yhdfD&8kST|b!+o#Nxc$xX(Ud6K)?7V~FT7O)Du3EOD8H3sd zXY7vMH(wd#;(f9obLZrXl=uk&c#FM}(P3*8I-f>OzW!}&7;0=}W4DkwcFdm&Eq*%d{f{Rel0806gtWU5w30h*w6bJfgzIOe7#$ z*Kd*dj%p^<0{$5NoeVXv25q>YWvgzHuz?VBTzd}oPw31fP-I=HNjiP#Eqs`ZJDx1) zmh21x3U|t*H(y#9usWXnEBgrg*_}=K~8kaRLng!=$`Qn zj)K4;i(CT=$?d+?b|`H;(=0tE@+Uv;ajww_C?q*C$dV4dKPf^H6>g<}h*DdU%VHRz8Q!i0dJo1uX zddT+ckmw!8I1NJx+#YTpEQqu9@D3e5;$0fr7Df(A>;;wPg$B&7rsR z0)2iIm9}GesQ9lV{ftBY^v2<`cB3U=ih3O`k($n#u&&tXxAjF1H`#zniAniBUx4-{ z$q#BTwPpKG-+xeUX{vWVNaZ z3mt3t9TXs~dY(wF=c`%)lmT8eh;*ZW5Gt>X&f%6KlW+}Y=0mE*;Ps`{yU&S2Sk|6h z4by70)3%sX&pkO4w)WFSr^%eC%H6NF9drN0qpy&!hJh5f`-p{z`d5%J%wrxz*h#0| zJVR``l|$HQXo$tuL>pD(0aTTW|Eu)T|7jsMMa8T$!GA_JcGT%HtnAjXok8stBfCm= zvqtR>IpCZ%3&X5{YN>DuPPB=TNH)8+AG$0+X>;)zp49WwlxOS-B3RWrx!mPo{%B{6 zdKRMJpH-z6%YpB!ai1Ys!DY?PPW@FUzDfhLcpLTHQR8k>&pq+}%QjiVQDV{~MmN~j zC1T}uW~Fv#*E28F1cX(SK!QD=1Rd%T&1*WLLZnpk$lDJN%S=xs@K2{`1ffl{Uz6jS z(nkgO^_LD(XlDw7 zhP9hE=`lgdG~xF4S2U`sag8F(7jSxqJtV?F1E>I@eAHBlbE3AJU5*N;} zyL%=o$Iw2~9@W-D7x1D%LBY0v^cC*?|5qyC|I>H&|MQRD|Neph``-Sqn;`lBTuVlhTUh6DHT1g0u>a`?5mK;W#1}uuAXk;bA)`X2b6unyJWT5ba1!XF|4!q zcJT|!pk}q+7l1fpgOPXUo{#e-_4&)!ke!I7`0BOSGjda1a&pG6BjBv6vcGi%HzRJR zj-l5p=apnXK9kvOeEuEM_2t5`@W<1;gJosNMTJL{SGmRsQ{WFcGz%?bDzA0EtIK|n>b z$&LOe;+Kyk6Pv35ipddXi;DaF#g=OU5i9`_@)1|pz?=E@C9HM;(Tu9u$1(7K(FKSb z(HFmU8%AFVN1mtzwVGnciiDSox(AZhKI*6)7^h$_Fm4mRt)$xLp6xfkR%;S)RmK^ZWYr1Q|>Bie4ttFB9OepT+0dvXE~;zD+^ zvTdr)eM?(9H#XAMetLCi8=b!qjOBiM=#gkh#6h%2j^Y(dJnd^lo;`+d(_jH#2EYQO$9=8xLNj}ZE) z$M?U|;XlSge*8+Q3?4W+D^7UX&1y7{hgrCK6m}aO$zst-3gGG@P8FIVLlAVIHTmoK z1(UY;n6n7{9eX< zw3~`by;qp!_a7Sj91oNne`y`Q+;wy;H8%VBmxlQj4vqn9MKLM-@B0^L6I3fwUberD zVz7xD%nuTi30VbNJMPCHxx&6{`%7eBVq9oQ4@{1gXQ;tuqeMX;DGp-MPkwaoR+Q6ov41xC)E z1)@c+oWh7->WHC^(ESf-x@%}snh*&>1ZXGNO^-Ksy@k%>0P@US)Q!UQ!L zHpTi$MrLU|vQJVTas#I-_AjJ#0Lu=S7vZZn!|nX>t=IeO71Mz`i$(%)jWTnr0^_~H zF!frG?>Gahd;wBX)0u)bZ<3>F52?UEC`ZTb&hyVQ=BK6z?s;58Y?u`Qvi;6ym%xXW zI{G})Ry7qi(x(-tztf&!tu2HRik^aYyX~UP>L7L z0-L?sten$%DnPYa65n!Mj!2BCk{ID^zvE~c$_?Frz|9l3yZrGyuq^%GCX-t~0G$Q~ z4La&esA{meQX4VN%%G2SCJ~z4>-x!Uy*#3YEFbAM>X6!H36Wtc$#4y6ml>p!%h1Z7 z2HedWHg%T-^4rV%R+d*E`i;9GHIk#!{N4sF?Xrx18Dk@@E-|yH)-1k5OE|veYy|^_ zQ>i-rLTKfldx3rNTtfthT2S^3Vo*T!%v$zLZao?KS*R#m2}MdYpOn?_@O3s^Y0Zhk zF51bYKTI41>xshL8X@+~_b|`kxY}lB5HQB$ktt?3uD%K6AA@%$n;}ap(r2xlO@f+B zf}k7?#q@Qu24D9^DC@4Fk=J1`)tdl0%h`aK6E@0ntT6N` zt#Xp1%ji@}8J%Nkn0(>T$F`})W~ANAbB`TCYEzttBD0QyhotMP-}Vzx&HezGZ^ESY zg||tjdoK-vuceOR!ak+RB10h!^d4Un5n1HDQse|r?_!v{-O?qA7DaSp#;&4s`M!03 z@F*#*a-mb>Q^&knxZRNZ1>yG4QWGUS#b8PdrYeD1gLh@j()yTq+nQ+uZ|=;-NU=p=|GYgu+vkyIZzFHLrW-j+ zD-cHY<5{#VX0%c_a|z3EaaOD5xKiOvp;AX8ywH>z6j!*sUpb}famy1`c>0Uv=I=Rj zuK3GxEU5(sxFG>D5v@Cc7PjqC>^jMr?1+#+05Q4if8NYKws^pQB#i#ok1beW@XCsA zaMn)BM?%ae_36()-O$(nK^YtBzT5iC|AVsn`dPefulY4@!1klyaxVNBRz%r*+I+1B z1pjq`1n++MGn#j;bRp`zzL(BDQhf%D7f!y}r4!uqgyeiMd^!7sCCVRV;G}@pa6cu< z8m9S&xdc#f!`2m!CcB_;Jl3`ibKeB3@NiHVRJ^=j1x{G6Ikdt}te52pkCZ!?`mzT} z>mnLkxh~!$+UW)iadJw0u&2eEhsrPZ!B~|e=C~sH0C1W&STHm+$6%lP zJXZo=-E6FHyI_s2eSJl0-G#qR!`ZolpTEz za?6_l&?^F*R#Y`;q8tZ6u*uGbk@MkpAf^AA7fQ5^Jd$SHkQ({gpMe5vcirPG+qNbI z9nh#ENpi3KEe9Au(ja@G(HM^^IJ|L|_Vc%KLUfrO6YSbJeO+IaB-|FM4u+olDLD33RYl}fI4M?wJCqXO%&_4; z{`+QTIe@GEzV1_1I6b&o3&^*hgN^rn{F2QPC%slSbx4b|>Zon4qZU-$sG)u^Ih3;h zmuehpD5oQ-eeE;Ra~%w}$}$w<1 zmGU;^zry9l6u(vd`-{>>PfFVkf6!tRfgRw*$AUe8%eHG4*WhNk%TQfyq7!rya>_4K zedrZ2<7t5g7MkuKr2_OWYnZasuM(3#xGZY!u$f5OniGt%`PJ z!X=}B#6mgNS`YQY+<%JY-42#V@9=V0|CZN0q`jBq-PpLS>$@At5o#Uprdms7x7Lc% zoFZhB`6c-_i#~ficUZ}-=1h$c$Z`*g=;%08EdwsVlXRX z5MNNjD2J9+{Yju#3&O?$GBiEVsd2_Oq{fFhyX2Jw^fI^sx9{Uj$3#?@QDs~xxGoLx z@VJ#^Sr~YlstJ`BOHnE#I62|d(j3fnZooefWVtAROL=oAYz!PWExj2V@Sa|5D(`2L zJTAtf@cx79WvGZT@U}`(l9Ud_VjT5fH`KG#?@boZIkOvn?!)>O)V!FVRb_jf1|;l`Tg0bol^~Lxu*%ooe2u(OJrFd<@=Ji|#dcuY zT{3AsDYVnu*{fTO%hRbOg&5ouq6g%5xN2c_)&54$@w0d#g>L4B+B>5+$r3Lx~t_`{aB{`9h zbP-^kb>eWVGF55NDKm^2vp?0zA8Qt5+7UCZgD*jMx*tHXl6-ED%x6*X2V0j}@^1<( zJ8laAaaK!Az zV)%W~_~VGPL0rB|zEq`CEj6mZX;Qyf(6CuZwLO-X;FHLcqMoO{V?%9wP|TKbOGnE=e?2fUjm^q zDb*VXz%TbUF{QrcvVG%nsr}u`0YDMTy%~`QUj!A~AYUB}tuClGL%t>j##iso#6R`! zGf!>%kt*B;x-&5Y7wSCyq1gzJT#-D=pI+=j)#vjgx3#U$<#k1SxJ1O*@!erXNyJwZ zy;1Au!PbSQ-Nn=GBv1G_QUyMw>Hz=ee^Ay#au&8dpKWi&ace{b^d;$M)>?(1Tllf@ z>ClzUtMgHqe-c-EaimveXP4Fa602&{&ONy|COO9OPV{bVmi_>^`1msC06U!FTbI4K z)wQwHk&g1gqEhQ5WAxcX)G3QnV@H?)xeMHl-)Awto&^PJLDW*_MODM*GIV|DTqIh- zxFvk7&3=Me8*vVAX;sV78AA>&5YPvjk+tbM8oSTk$vZY?JR|SLZol5btYHzH{e`H| zXXR<_9;a^iip7HJkj^@??E=`!^b%K60$-t8*b zv{sj0Vl1gLF&M4!$yveI?!wn5UD|?x+g*w*Y*MbK?2(HlBm*|+J5%~3BOEx|)YI*g zsT!(MD##b43Ub>@K1&MGal zo*{E0-q*pZE&Ku+^46urg`Flqk9_}im#0pYi5QlPPdvm23*;A(%Q}N(T{oPgEJll? zq|1j))Ui@we&H5Y84d&P zRWL=Pk|js(M#?RcvKUot`6bzd2jD$Y>E!?x5s?@A4UgUR>S<+Q??&=G23f1E(ORql zGTQj9+%a2d!!gRpVf~O|O_6)tB!_UZ)gMX5k#RuJ3garJ@pe14ncdAknuISNAkNtv`CmFA9|R15 zbJibPLCojknveR^JD9U=@U1lH+jt(2W$WO2rtNM`- zW{}z91mO$9oS~c!!_%;d_Ag<+&A`*9th$i()@7{lWUiA9VE8>NDIZT0w6^4*mJV>; zr2jIQy=oSn?v|hh7pGrr$j#cUk5YWD4q#m*H%75Mk1LxIDO1E@=Dp2;oSWG`1>UE6 z=;gqz^u^~D%KQ)#t}1$XCY*j`8%}{M@YY5Q;39dA;oF7^mN*(451~;Qy2=83A4e^fEf1>CwBr&>%5|EH_L>R8+d*|(9-jF16b5jnoC!! zc1rflK{t8&9vU}0u(7G2)Pjnlg*$aiGkOVFq7k6hhx!cXNxY$~Sa^RL{l{~TuhUs2 zhhnM}$ZgY4Y8=g1WDP-pjy5!juhuhz=q^1jIG~RPl94V%V`P`fB2nvH-qQIttXcu% z??oJjdDNsb{1e%#HvTrE?1$d|%JHgcO!~wsfkR%K&b7=BU5UBF0yeDP#-&C14Gf!3 zC?{_U(DL#Yx(wga;gcJi2kTdo4e`KJD46bDtt>CWBeo+l&d?xI)1PS|aZ-XM#qS?8 z!&xiH&_Jz3GvE1!MDw#768saD%~K&>3}*{r{9GH~s3Z@t?^C4=bKoJ7nCPm3XZSkwfS#yt z#&M@!Oh5SJH6tt?pX{yCpI$P)Bp`2O{g2~F6Iw3rEf~?|I{V0D-4fGh>_b$=V|<$+ zhP=f5&Gpdcr#C0sG4B40a35r(c7K^qWV9L8_Vp@np-Ynn8r>CrdrA-uT`;Ud45rD& z+nw$dudVQG&S7juiybYc@lt;ViJgux-uGS)b@h9kSG2sgn}L zFv3DT5}LM`xMTc6roKP=#p826uvQml7?x|rfGXPf(IcTy1_gPWg*!5ZF(Dd38-LGb zf3xRS0#U_d7%NA_^u1McPdM1&Eevjd7T2ZR*Mn1z+WTytbAsrKXi@u^0S( z)7@Js-*R;vnqu@W2~fgTs~K|xts~)Iz%9IyWEK%(v$(lKDDTRBX&NIC{H7?o+jQ6 zT3)X|>)4iL$hq@eRSm1S5?LD?&nBap@QNm|3)6X|$f5+?>iX2Q1!^rAH8GCpxd$+ zJoR566!bwpA7n5i`jr~oG*>~HjCD8q?QF$RYnHGJ3;tdKMuH_jE)uQ7Vlq#8QfU~` zz#&mY>H?LkRfebUyMs~_MU(7RV67jK_tLkz;Vu?$TKcRWjS1!^_+ONq1=i3!I4^ad z2LwK}BM;`_H=2)e7x#-^mzSLAK|wXyt`agX&GO)dRA6X?ZfETuPJC#qWh%AIWRX6P zkH&({M;fb)6RpcQoSF}4>v$uV%*p{F42rd~$btjdHI;Sk3U-5nB_>`?>{xm~(p9a?`h9O=rFN&C2b!6h#1Pn7_BPQE~ zPx)Q6@!hmtykyM3>gHUUSyQQB{y_}}X=pg|s`*|#&#j{T^!Ro)6xtvX!83|PxqY=A zq?XwvaM5w1GLNXGk+4=zx+B|U`L4)+j*V&b;eF=YK~h?4mmPmYm-`1rOx6`nBC|Qm zZm?1Zh0Ule$sQ4GEj`k!b7a|)y%0zFJ!YGLBb~BU8+h*-Wo`jNgFbkd{t}PAC!GWG ztW!=@T8(U>SW+7IP5aznIT0>{azf=<-HayuT zm6%M{z5L{2whB^|kL1ZBaNU6QNx3D!5{X3R*Ke2L#AY-Rh{*_bcfyQtqYU{r6k-;(TCjqhkscz+PRV;uvIo06u8uekmmHX^ z90gmZ2wQm2yu2QYF0hIu1V7>}B?tYQ$j*6YI7xCh4>N1E5*;3p9HbLFe-tm;B@mS! z#ggn{7eNE3ge;1iis*^;<`~=6VkoLQP2=QXtZiG9i)xdUYR^K{m3Viw5>)HYMm0Jyv;`wf8(eRiqvvG|ESBg%!W8>%EpbzauWn% zQXpT|ElEewyXu*kwD&4w1qwaUHeDyj=PziwfOy#5DmN69TF_ctJFx{hFm3R{LLW*Q z4W?$umkHXMU?d-=Ona7iy2IU^NN$P3=9PW>^McXiM%UTayL2Sh0l9Tuk8y(VhS{1( zX(a1TJOe4jw!%&l)Mgs7(J3lZJQ;tzgR8Z>gz%Y}*}XI*c`Gq&%2WS1E@jg+r>Yp1 zJ;pnGCi~bf0dbmLQ&JqAC6Ag7yTS(z2{25d4eLgzK%5T>6(1MQZk5e0W0DKYS({u6 z$lUL}J{79<6QWJn&lSw`X&hFHxeid<+jcZDLV%)B$AMZT-fN}1%3sJnb-zdT)xYtM zW~lqnQ?FI&3hj^>o}!6fY5_{t=bSiAjk9Uy4}69UI9!p8k+-;|OwK73v16-B5y8QgF(Uaz zIu>3(9hFb6ORBezxOOB?PD)a`0$|1bQqzbVpHfv!PF)~}=opl^i40SMeiPI3aP4uW zjz;1EIe`$n9c5Fgl9yxZ9OkW=A}f;NvDfdbO?M}FAMJl33y%JcJo~+P?c=VQBdoyq zaQAifnm6MX-uQiH0t`}JjYVZaq-CUR2$LayLm8IzB3?y<+s_??w0S4(kq=PVQyvD0$f(;i z^nSaZ#_Lfo4KPq6WTJJpYDy;8l>7OOh1%zV6^Hhu<>mZB2a!f7oHqoK5$-nT_72;L z?egTOXe^84_%`*_WGMC$lf+?iOw=1PDf2$31MK2wc|Gfc%C4;}_#=(#XE-_6} zQB5@H>RWoqkAJC;Y~<1t6L|xXY3Rr)AG^Sgr@-yvR=K-e8ig0sF*UB4rvT$$b#W0} zI9|VhXY#jXbxgZA5Z3V$IcH#s?@@dyDMnz!;WR~@ini5)XSS3%_-sNa^YyFEjcJA@ zU4)&cK|Q95X+j>1Q`(#arShZ!PuPMZwhSlIeOr4jjPl zh41oTBi!qOMq@wr`HnyMbedJ&HHz)&zxtT+s1GKs09=$P`1Y1OzE$Vtr$6;$Ut#_4 zA?!}>+!W%SsYpN7O)lm%D+c5yBp_a_tkps_+_& z_<|8&AE~YJ1+6fmOn?Auq-Dg2TR?#XoexnIG9tN2>m0&wFc}t>O`d_nr9%aO~dH*>q)#~%l;M{*uyAH#D zSU$&m_#KRI*}S_ZF$ZK^3^{mxI(f5E?Eot;M-qjt$sTBJdiQcCuW3u4UVk4Bx@k2Nh;r+u+a zO~|5&Au*vbMsiju)o9HTTYTk&kfKG7oaPV@_2 znK6f_4eKIUfmuT07759egFo$R**KYi+QZ#6Tg0%1%>o%_AW(qFYJVDKeTa$XtD0uw zT}1Ua&Dr9lznmhoq>sUb*bRKCN{ggc*LkF-Or$li6SOc$JE91=(DLo=gTy#Od8uY6 zBgpJCBs`%QXEY37T)0@zgOu(WT5Jq=VzvYQYcKP{gvhB&sr#`m_%@$sh+1@imRzwRl6Z5Zu^{Cn|GFMTd{fg@x_?C5~A1O+={po`y?Jy$`xFIrzG0b<%XA zIoGwS>iJVkCi)Ah`|;%z%ve2Ii0%|6{dFT6=z|G6d9_=llPhN)7L{(Ug%JJ1n&z3j z%UR#a94}QRFV|yhcV_w5wfgYAY@!!g9Hd-!c|}w3lW;L02_)cv@e%>^ z(imL8+Dq~zob>##h1}2*c>%vqB1i^5+ZFxrc0dR^i;eD_jvJ0jW6in|ktiOlm$KB? zeAL_6Khr_clZ#{%S4Ss!PDCCbC8FbY5;jGy5@?pDHukmqL}-;D`I*hvH5|hN>3ZPC zm=iMCVm0o=t|OxTJGR@5Y&-W=9iL_)`z5o(WQP27su;*9|;XOAac}+NARdaTekq)=bcifv)SmHpFOXjRD zWsws+U{*>IN;T(!DrUIiiT%?Pjg_fe?rVHan9z`wisu*|=laIjc-ij@q6_kUiWH9y z?kJ(DcC!BvIOQiMN-YI3o1+Tpiac5>$c zs>!_17w#u2nCDX2^*4 zP@%F*pAroAe}5ko;~Hd^UW#L~i?>Xx9hAIF^D(IrlCzm+?m*tsZOX_CKTC?GnHNAO zQEw1J%giht5e&ywrHM3zniLkA9kmg8z)-`G9C&;nE{;ifS;YF3G>qP#TF1AaPo-0* z@3dY!z0Up9!2k+3t!Gl-NtvJN?R>Q0%@;g>uRx}xDPk9W0Eu@1AO;$@D5y~f-6eh& z5%e{b*>YkJj5>lTaV&yZeE)WsFYHeG$vQ1Op7!W+e6)5dwd5kr4r1IHluD;1+Wd^% z%#$Q*K|j8|?et@xMmulcwl$mOG30lb;A5}>-2S|KhfO9H z>V;X8DaPtjbobp4G>f-)Mpz3$goSz9`;OltE%6x`g7$9vJ=>|NTLfk8O~fQqp%=wO z+b?}s;;ummh~HJnWg+8F&1WPn2jFd=!Ool>(c!UC%BEO7=G&5kMU8RPr=^pYETl+T zZYk@Wksh$2J{>3iX6B=wPKB?@=0SecMz>e|DI(7P#>!sea(C%PD%P-Id+|^;&4r;M z!tzR_ZkofmM)o^Q)3A)Mn_BVQSN6@K`1l7K)0-!zpjo%Cq%3b+o!QS+g2qM%?01WS zz7gB0zs6r(7OW7(+t>M{GcVbSK+Uq)U#+#cCJp3<1PT<`&ef8Y1gn|o-4$YqO@@N7 z>zx)Bd%D7#-CBf_h_<)4?H>HFXX~-P&POE13av?p1ihJdp5(%iXJF^aaUvjnw25}6 z-U%+JoAEu4f+@9~%JNpKe@KS&R!120&nWhdFbG-ZHnVF}dpkf3ji#2V$dZJ%j`|5J zRNl?SS17)%Y1ib%QB+HG1cgnO9V0Rm)8D-slu!tqVo}9_ zen=9&7h?DG&td7yW;)_RV^<452`2O>)*5%tB}1HM$=9bvUOxTB0G`JJrCk> zSkT;_A-Sv)5n>O(Rqu@N1$)ZctH$WPIKIIdwUO?7qf0Uzz8Z{@ zi<$c%tw?@sPB_(Jh9g#N2|^i2Hw+L$U#>Elcyhu(*pBF8oMa>&?_FKeBUIw(2#NU> z?!;V7{~*@9XY)F8(ro{|b?Ozh^%M+zv`L^bVYOQs(jlpuuM-t4uWOT=JSCqXRM^p9 z;hCxl;MSUMAZ@T`gjj-&xohZ6sK_4aumc|?2Y;VMqQi~()_?loB{)na=F$ahwjwsQ zX~PY?c<%`dcG1nxF`+?sA^FJ~F*$mj8p9K~^X+JGofJI8DkUr){mnJOb)K2w7d zFhwkySoZuIj8n9VepNpAiHyfYbqnX8@HrDjs#A8#kw5dCw6}cg<|WC!ELdW#jG3x= z2s7C4T>Wzrg?5vt7DnRu_%VhSS^A#`g^33K!536w(dMe-GbP}KZ z9mwhXEr;WWZbC}0TypsNgG#IX2$8GY$NcjrSUbJlPnXwNZ?+AXYxUTPN!-1W{aD?a zn4&sptD0+UiDTLoj?c7U3cnz>X0h0Xu;>^w~37@ea#;%hbUk zviM9hT0zJ%sK*(fHc4@rK3DxNM?@rhwX`vtr6a}1CtCJd;MT%))IeWvw483lb35NG zT~Z~uo>RG~s+^F*8{tIIRNMOUs5}2->UH>UV|msULH6-b{&%C9Ja^-t3QX4CA*y+l zDKy3U2jg~nt=R{3yjj%nI9=x{`}RIodq+4yq0h;jIQ#sdHYKiVKOu) zS~gPCAyGv-b?&7Xu(2B_Tj>Po+5v{Yb0gw&=Hm2&a*bSoM-#9oJw z+$vM%4DklbxmVibFw(0(_K6p;rS_miLOl3yk)kt7fH&i!Ui%R#T%&BlLdOLlGvDLQ z_P#!-^N8+SdDK&O%(Q72%!3xe5LiSB49}?qzZ1Zw=*B@5Qq8TGJcZz*dUtOrD`!T4 za(O&;G*A57*x0aOV`u&PRR(e-b8OA=uA+$3iqM1ONDHE38@F9R!Wo(Iwfe%dGJnIW z+lDqs#|p^@{UbKY3ZT^ObnGj`%0aa@+}N(;RK?{^looR(ZH$Im=19(qERi)mZ4K{O^eSe|uIKdC>1lbzj1uv@nn#@u^9`e|4uk8xp=S`RiQciUC z2`??{Hx_l8vho(OHN)4#Zb>B!y|P#^|9uuFU*eRh07Hoc+g!kmNAAUc(%x|l5(f`> z?2MNdGd)dWp5wJT-xuP16WI>wTl&E3?>@qU9~4HV4?vMJ$Q1Rp4{#!dd7Ms z4IFbUau#$TDk52v)&>Ob6b~-W$Y3g>6{AN4X`>@kvxc zVgHTZ1y8esbtPfaFi5~N!_UP*j2q|@<@w_Z;i<~1#-!B6!T|zWgCx+9=Z0~48aK*z zt0G>LjyEwDN%-J&Iw$*9jqTEfKCit@oJRq>8fhW)L(MfliyZl_ZJJ-&K|l-5&2@PV zSg{)YWW({Pu5tM&&CTN(A9j5cmC9xn8Gf;~(pVvx#2s!ZfeobX!Q54-&%6Kz@jMXB z>8&zZQhZ}qtp$Vo8vJH|o&B%N@+PU{li0&un)cWz!S-Wi$J&$qMA=(!qB7PZ;?Fj@ z7v7sRhC~W|YUGf}F8X~Tuq_Ra4Q>O>`B0dTOYR6N8P18LknZ}Q50=82qI1viM;pdr z?G>9pGP6+|3@N7V_y4)7*!_ug*vOWxPIB)GV*k}L)3^=Nwh z{S?-lugm?^!~Mcf=1cdIF$KjxC=;9CF*Q1lK1bgcz1FBJRkZzM?^VFLgm4_O6LNji zZbEoG07BJx8)H<+Pbax~?On@~``?G5Rq0jXOC*~5>e{GT>zzR(<;~bLR29Ub8mCeu zMgna)CyNGv4H1>r(bMjUXdB>!0&H&!?k ztdmgEj_visA%9Ea7n{EGe8&rVjIY$>56=35IO-(w0&UnR1NDH98MUuHOI}`6Ub(1g zM->m^@$0948sM1x#c~l1Q=3WJ1g*4s} zCv+?&B`i3Hr&VkHlV5qq=KcmM`+Q?A!&4yE1boQcIe>lVbcHX34f z*wMRI5<79*e7|Mvnx0tsR2@+`w8>(gkP1W#v}9sB3Y8)j<86f01gd#@kRUvr2YhL1 zjeGkJ?9{p^ZF{L6`zo=kkEdFBg3(__ZCmGqs^zTp5kH&Gn;DW8>$%vJirmZyMxtB- zVdUbsBSWE3Mq`N-z&|0Xq(68cIy=ua&Nc@yG#}brdoO!EX4qSIsC#vo92fi8%i}?` zWMR!qOEc~o`$;kPjn<{tOc_CZ2s6uZV4r~F)noq&1N!p91hBj2M_PA*%aT}f<3koh zR=#veK-Aurfzck3VSCHyEzi@7dybJjN3*%tEZ-w8qIe3%3x9PlGD8AQ&SrFkg?{5~ zZFcX@g|M)Vup0ctgO1-PIj5i96-qL*8mffP;@4iK2Li4?^^;$}^@3Nq6P$6A8`!Oi z51g(o$*?c5Gf1t^(~S6=&45)*>F)H?rFjbSsF|&<0DZ6AVpF647Y|7OpU0Vf2h}RQ z08`LNDi%(onmg5MhF8ypEpaxt_Gni5(D8wSw}s<-bv{lQmy{jz4M?Q8j(FNd+J zGCr?|$zk`>oaQ!d34o@oqH_~ap3YPTps{uCpaE2&V~fRyaPv#LOqf;_XNOL=fQ)N? ziraE0JpFbkFS3@7JBf{Ld}zEMITbn)I}w`8AcV{$cic?MJDq-J5#2h152DfSGJQ{; zzxTwSP?;EGonz-`dUnd_*d}RllQC(HN=C9H^2IZwmRA~;4DYOjh>oxEPTAUAMW$V& zU*%<7z2&X3R=$Z>6AKupB{8;`jg2?6Ww$P^8l#YOA0N_Pd5>WJRVNmYV{o2gr?xuW z5sslPaV%{)9V_F=9}#h-BDr4*cydSsCK`={94Xb3w}Rw7PS(R$<-pTH0s z+ux;pQT^C9O1tO!{cRTJR*Y`bSC#2#wKp9};cU{gZDPKwG3}RyB9R%hgrjkF4Bv9c z=x)*|^MN+)+Lk6=zUG(Zw{98`jql=Hi-3o$JeJTT0u1c>o8%xyP|{wKYWa> zKyl^!W^mjGu(aMY_6Xnoml!v7#Yxq;Lbg4AYp3q7>hl+$I@}yq2RDu!DzsD}l0ucM zx^Gb>y-DfAKd6X}FRh(CUmn_`-rkeYn=H>ha3=}Ehv)RntVTV-T!i>O7OOm(e+@H^0Sb*twZTw?8ker^@6R-_VOF zbAq&o;UsyW>glw+;O<)Q{pMrmd{D;a>D&peuBohb)tTrIO#|?9f2uW9G@AK%hFvH__pm7DYdhs+P2&X+9c5wu9xL*0LynCoeH&-oK{)JVRg z8~9PNaCZ@+n~+b!5s9w^=Zl6$9e?KVX??BZ@+3F)pA$?8^ zA%-p$+-^86Q(uuQ7e>dvwatQa1pdUhWYZJsr!hSgk{6e{NXPItrHx5&Lv}E6ew9Ii zld~0ums2QXnB2X)XT#ijdK|ne`9#&DS4UvES7m8pxFR{Lm(H(WPRYt^!>FHF@=ulK zo|S1MMxhYCfec1?!c2w#yYhrBq1E;-dGGU1V)Og;@}E@(qUol|jdb$u?XmSwWT!sD zcSJM3j)|oXvEoyrwgEx%pCh??5(IM($-I8DrHSA@c?O8*uV=fMjCFg~vp4!M%FRs3 zN(wq!S{rh=C`xe2P+jvyY4viU9`JqTUN;xg;ifi`1;#nw{@`GL8d}shONG};qi?N^ zQ9qzo*bttnlz_ufZmvE0a`^zm1#v?@2TN`p)H zCYUrH#Wy!Fshro)JjRE(Xx=A!pjU_DhIuFDCVTqnE2+ueN-?}-5A95|#*C8A`oW@lsNz#X6w zKh@+@JcCA(Nu5?w;~JYY%Tz((He(htqu$wAhwqfW`SKuLF7{g>Ds5GC#eV==(iDz0 z>9mAWHTjUtx$snuvA8g#p@_;Dzr~tELqnrIma^(04^S$0tY?MtVI;&bF+NEo3>FX; z!2>({qJ1P#=Q%l&p#pe#G)cz-8xSX;;P;OUj|-s8wy@N)_u}v7EG*V~3R;EY074JS z(s7apBnMuICiZ2Xm42lg4XK;!L|2pyi^s=p-3YGjnyYyiQ`)eigQ|-;jv3vu~6@_;cnp^6IH8I&2tZY|iS}yluJe(`ULGHndg&Mj!T8=W2V` zoS8|vA)%o8@C)qAv-&CiwWU63I0B{Eqy{@&G}R5l0c%T4h^4M}6+###$|8w;?Gb`; z6O3PE{Fw~!WEEc^Yc; zabPUfSDC4D@>pY1R*bPqJ|CMliYH5TX~Vsw%D4`my3ZXr6VzBq+U`|VG04=cX+3|= zkicXB3cky7yJBOuKs@diaFQUHD;z_?8+*vEtV4R>q-VIvl&8I8J|iq;zXI(5>V^P- z;JfxSx!YnTp#18BDCE#{r%KugqzTeyeDq_jBf-|XF&t~Ku(83w!cN!6;i%-f($cwG zsG(lVj%~aVLao+L{NxEDxB{o z0s{B8uv!|6jV1R-3<5oG*m<32&;^gp)FS%Sp2D9YMoG_z80TEMjp1K1SnWucU3oQ+X=T8T{-ABnbN)%eMPZkS7i@Q1E=ZB zL?NhLXd`kOaAhim`}cLa8MKZR9SFH^jpb9<_n)PROdXKIun>WIWN&`gj_Yx0MUH^p z0_xBh4O;5-%$B7zSmlSg91yh{4}q@(sfirG)s!gLilr}pUR-#)1@B{PvthCXfh_L%|eqL6N8U|KTNq6o#Wr-R9 z3U=n+11yR`Cn{P5AX9~Uf|tL~z(+Dfvjhqp$Z*w>0g$YT;R}gK5X8k34{lM}S`8%K zjxrE1kd_cgO%BkCHJiMwm1}?B>v?=cQPSZgfUTx4QNt~NVXiyG{rxQZXQE` zH{PTJ00;nX6NP8@Ms-W^940m2p1wW_Rq#(jL@>ZYBR=gDp0XENPk&?nW)Rf*n)w>J z%wdFLCYWOQBssn1>A*DO){~ld2t(4;WA2xbygqAvef3`J2Rv}Q(p}v<`3qPu2tHKo zh3TLZ-l!`q>k_iFN%3D{qp4ZVc)X(IJ-*UxA{8fk10Qq=w3N9RA#P9_%){-VdW}FtZ4{Hw3d5 zoK}^nCV8B!IEa|=8G&rU;=xdIXV8c9euZ$fQ2xxp0AiRi4&wqIt|Dtc@jil8gbb|t z{<=QCk{WCx>G^0j}_Q-qn4=F3FX-W3ODjh7P6N zQdXi#vJqqx9kE^WTNiZu;A%qxbP*awYG#V*$@yso4uJ9qT)yN(XlP75#bv?PMo@&E zR)y#jSMIzu9o8W4n=(W*Ht(nwzYB|L5#W4#~#>21jj-<0A!&%gM@fhal{M{3Y> zvMhGsBY-wGoHZJN&;TQ7uy}}KXG9S${Q_l||IIM6fIK*)>kHp#A!b{nU!0$u!o~m* zVJBe(q0;exxyE5bZi6cf?Zks-z+Z_L}O!ti%x}9miP6~yIRK7}bXG~VpN?zeOOf5{~ zA^(i%yrGD}JJao=gDq1_{SjSEGY*J~ogWzYcrO4qnDE?R$YE*mtkl@bQ84eH_i{(| zXyz)b6xnva=9a7KO53ZwSDcZHw2Vr2e3n=R{B<_gd|2&vSTNpgB$hlS@i zy6>kpqwYv8N-aC?VluUs~$<3T1AXqb4zLE=c5`M4R2;O%cH$?dWu9GD>uW_6I5g1^5M|0_X zZ~M&&wlq0Lv0E~AUG5~=HKqO_FDY@qTGiRMH;6q94%@W@L(uM$6Y>;^W!Fs6IKf$5 zGOD+j`4O1}Rh$~@WZAAMGcw(~_#Jf4!GhN?wM8fcGEGK;14&l>IB&(b9KosCTDmxL z<6)s=KW6tfcVQsA5p$(kt#^*?(zQTV{uVIDieLXlx#Re>E)TFG-jA(!PlNT7?|M%m zk$em)!FtWr;M{P7w;2*_C!vA?IPtBGec@XFX>f`=zDmto-`TPh=J#DTy=LA`xg-(@ z!Mt~%n0NsJ;jz_|Qka2k)_Fa)mfhRm<)m-6>N;(^)N=L0hGzsny)s`4u(-N1xNG8N zKvp*fN0+NEx_)?_5A$g$g8I1Mab}j=7Ac;zT&AhsI!|}kJ#1bHDASweYQGkxloZ9< z@tso^oNtDD`aN)dFZqSgsPZ^#Sy#~``39qV^(Li?N7wg8`JvWptt~@A#55zpEOa}avHy8&pj6)Gs>u7J`$zDv8l0-ljXS^ zNf=?6e=~-J7i4>sq`NZJR6k>l5c<2n^Agy=u#Vf#^(uuYfZI-&x?rkmnd7J24y9WU zI~9+6&p{GGC$TSVKG>YyRZdX3R1O9PCV1|jvwFROQ>2eS&Ya%3Uw%)rfG$0&g6iwt z{{r?lW?xh1zmw=p_tftR5btjL8D9OdJh@>zpYdy)w!8WZ_^@&MQ+U>kG`}bBbRO(= z>=3`6+{UmKd+^BLxVd(wYBoVp_n*AY%gw%342s`=o1+p z5)e8Opr!+S7JHS(ZWOKrQ1w$J)&> zeo2;B&zQT<9#=o7NT6Wrh(ERZ_zZNEhG*qH%FB1xk%2Kwet^lp+HZg9;PXUNc9juJ z_+ZkL`9@{y^qMX6=NieP^U2n=OS6BGUT>m^my8UMkp3qhgepBhQ%ec+C&X$;p1iqxNS6yo$ao%ek8R3VbTLg*bWt zoAfc>oZ^?h8RjrIoZxqOk%SE;{sQ6xZ)_-%3Q^Vuze;Ggbmo3wY6n-(wcP>M6gTG& z-&p%GMpKK>!F3^-pa@jseZx=1ZpS%}BNIP!zdYKQ z%uGmG7HO?#xTmJ;+6E036?Ocb@JhpbJ}anY_sa63TWxyoRY&%K`or7<#*B{Dw!0-_ z9=MvoT`?fBVWWX%ON{e1Ia7}Fh^z$9uoEuTNDW3%?6SRyLDfDWT4hTw!%uN{F8;B& zW%yD?V>y$hrZMRvcZ9-H&^=d2ZkezZAf{5@?9m=%Y?s!V+|=c}bWJ!X%IJ^kVo8N5GSq zef-yUM?xM|2Sf9lkfy7LpG73gGQJ0zGCaUyA;TOESarPzy4gX2&1M@#P7mg!lo zv$LPtx;jn__&R(|eq3kcg_(yT_8r~RF{1x>iPM&gwO!Npp6Cc72uMjBpm%Ct$7`D} zP{=#j;~v?vmMp-$t6rmD_7nC^EL9EK;Hr6DdU`FfsOB-xM`uJk#XJotCyaKaunzrQaG~@<1Tvqe8#Qg*#XiLv^R=P0^h_kr?gfxf+JqHAo2FK zD49+2s&K*wcmxMi2!N`^SK*k*S3Ir{d3Gvp9d~7>3t#S5Z@90;5)*pYil^2Vt;73Mn%|y z^+sJ*XNub$P|2xApOIr6Rb`K|p!Q~`!J*`dd--m;w=R?>*df)r4fdj`X1=dyP{*s_ zuCB$lDQEm$oZ-2K6Tgd*Uo}=VKD6wjL86(fjm38Md^RyWE;tm(F{rL$d9XVuE&Xxk zLk=%O8;Mqql{b;g=@&_WQ!{D5pdARbEu?pKz6#`j$$S)6)u;Noi`B;6sb1Se zMWl1QPn9R+@!3p(x-x%?KRm0BGs}IbzM!T$)5Au`bH?}x?fP8_v!w=3s354nnc*7b|LA?8c>+kX*-dEZ^Q#xBy*1tz<$~@8r z)2SF{m{b@M6*!_iE7NV45-y!Ry>k&cMf*Zs$A#jllBm#7<_oLL$HQuV7Bg{sYh6Gh z8)qe(4J0SIz?n(L+h&A?z=^`;0XbS~=wQUWBFZ`bR~T0NX+}G0@EC!dS=gk(_F*Q< zUKF&)lDYX_4OkhCCFV7v|J{IX$7UOd5KR_RmZvo+P^Yi=6y!|3Jglux&tv8&6bG`3 z8G zJms6B=9@9W2A=+#&Cvjb*}svoqN7iV26X+@w>a5qtj!3Jc&#s#OCEWNnsrA>Er~Pn z`DU2iqG6bM37`rIoL6VEMmW^h{z-uz^S`#O`rnM0&Bj36hK61vYKI?Ot#;OZH#N%r zCZvAr9ccAN{zkeQh~G9#e*cdaPX9|^r~iYE7OQ{mtoVYGM$`WS?magD0uBO2ygBlE z$IK@F0-igs-&;kP0>yj&d^ZdlUkl<$0{=0j@c$D)<5nr%(!Ey)Xl;r{V(EEqEE9gyS^cLPN z^99A{o$G{e*!zd(@Q7jemTUDbU;9s~utw{jXVt%e`2IhTZr|k!Gv?l(VSJNsk%IMq z0daM^e*xI{ul;$)e{{n_ro&Ex1o?noEzD|4m1<+`|!zon$)%|~s{{PX*&y?c} z?^!LtrQIw(sdd%TVFM(@_4MUC61+mW5*RK%-nT5G!gM0XXTm4j9s~hTr{}zf4?b|a z#wt*`;&CZ``xaB{VS#Ev`R=@Xkz-S6w*{}DXJG~tO^}2{X4@vAt)Qx4b76DJ1ZbDw zbj=9sOB&@3_Q5WCZ~>chk^hs>;@wCS^S^v!V75rlX@C9E%t6$fX$!*he&Wvez10UR z7l}V?dSP$Qvs0U(Un+mFyn6SRtKS^!x4wzJVr&KlGW7O|-F|;V4O0B_pFc2q>vL!K z!qNV2kO!<4`@?H>;s6dBQ2zNw&=M5C{F?ei-umZFJ1978_wS=edXQ(IO1;!t;=#w4&Tc3GK4dHO577N$T97PiU9z2#8rmMb%)r}b=%mg zSl{!De9aH!ZkDm!@bDr*K3!2%sb!re%AcXA{{j*#dzbM)2Z5iTk$Bz$l>St7zP?$F z^MD?<`AKztGOrpHF9lq<{>L{*`{a5LFPt8wR(B7D<=RK`(QEut|8>~EzL0;PKL45_ z|5`Ht+8qApR{F2C@UOM-UvMpq{Kp^ebFi79(YqY(-;o*rQwjG^<&giJR{L*w2#6zs z;*3k|8=UwYr|a0Syj9lVbb_xIoq%68_C_%m!O3T)iC;g=%AJu3<7b)RG=hJ8-7jNQ zZ@kld&Zb-Mu##hoi;6P6P}Y*W41>b3A|)CBxZUmEIE0w$c~(&si9v^GLXxfj7vRH@ zE;2SdMtZ^3*gM?)gKOrcmSzg+S7yXCkt~TT!bhAmu;={&$XEEUAcg? zmtM)W=3)``r-ZMYJo(1`78BX{qND7RtT@$FW{A+?m?_R;2(TEw#K=D|JP;@=-g5>A z|J{d;;qmIvep6oWhPop4vC4;9j|WT+o}cz<eQ`np@O9jU4ltwIzKlzr*Id84gDB8iDvSCpP2>R<)_ULz!bQbO^&dYRqnUv0 z#Dai1PwwpF<3TVg z6|an+@i*^|%+?tRX4UV>Kefsp0}8hLT-7IcsvoXtX{W#(9o)GFq}xf*Tx~_%ribNN+j&HAq!cb;BpP~Eq#4`7kRxqzc~o~1q|Hu z9x9uXY&JNxeIKgy>)O1j5|u7Rh4pjDupIH$ahK@^f08RB>E?8|mHw_2$0qe&)?W!Y z`kLHrGUe6}ApzVlO@nmgPjx@?*=6H{M+S&cq)U7FThJ^VVqX<|*MbAv!a?!KffY zx{J-EEt1nAA3`yuvVsn^85;(f-03UJj0mchF}TpRiIJJz-DmCaP$8Uk-A57Yc_1W& zqcMD%VsX@Sej+|0xvxW4y#ew&(}zw;%4;7VlUc6u#pQ%2`(d&GA1TQm_?5XPYIYkv zWBSnIG7^$CJI{fD@v7`-@+Ab0btwJXC)Ydj>5a|L;a=kj;?U%Vi3PDHl;k?jzxX61 zcz#%2uL!t%{0_KyqAOW)q$14g@#R{$sA;~__~aO2ms^{KK&8QCZF`qaVPT^+-4dAF2S3KzmFV9(Z8NAIw_mQZx>dn z>0%SLl;aW?qRU-o!z8#v)v7HU;y2D>ljV+$w#*LezC+ZgHY0k7C1IX0wGh>wWbVV( zAMd&V5ktyQO#f7Z3E(Z$fRY)LMBsQGH*L7*6Vo-Fz?>f#AoXulI z!*%U%?rvh-YSuDc8&m48s8hZ>g8_id8mk|>1 ztEMx+nyV)ZomY&Vx=I`WZs>GQvu_w}^}lJe3eh6};h!rB!o^3U!t~rk$B*Wfv>X}* z#7~Woc(Zo#&9sjJCnj4{y_)THqwT&oJj_4$w^J%9bG)0<>mY{J&+2~3pl?HBF;3&R zt&v^hU2U43iT!xXSgG3}H5f*nEQwMToR!X=sDTJC)|(iF^SEVROyknTh_6|F_VYT! z@-eqWnMxPZnt+&dy(+s$rHPwL5t9d7PK$_WX~)Y~YIuLxLb6z%*Qq5&V2}EO7=t^Z z&YMyvzj}CT$FhyfP90;!ADo(?`GUa`oO{SCM~;Poz&1Vo`Elz(<^}SeCupTvubjt| z`X+~VZHVc}ix;fiQJv?xJ}m z3p*6qPBj#Rb@Ke#)pC>KEu@uDu?-X|Gb`ipaY$^MQYeaEGp-?-frQMctb&jOAL;z%u9i=> z3#$mIL;25R6F&sA1E{4MaX*k7v?cmd%cp zCU#|>wedCa^;ym4Y->={)&y7vq5vZEFYKE{b@obQEN%t*c<#(jG`s}>loV(8(R>s6 z#j>YI0xrJX)~a=!vj{2nQU;r1-OKqZklILZnBoyjhD)rZMnEdRj6*Fo{$rXS7Mkp~`8Kp^ zdCORSdQ%ru+w@KHs3p!y&ZIE@N>l)1^ zX}TX8ZZ%cW#F`#YYIre(lv84xO%`DR?^LTpKe#$d(2R^Y0u|lQixrD ze*6vf;OAB#(i_XtJ=Lqez0QcMEBhzH8h?NK2ziU|7tNQ_F7)|$b;xjvnxe1?SZq%g*Q6&WX9tb$suw>hC(wpNTgTRfvBd;3ZrUS|qrUng6i>?d zvYTCweq&QPjLpY9GxavxE%Zm&<#=0lnpP5P!;g^f@2FC8a7c=_tOk~qtEUrIoE)t+ z=q?`T7H|RcU4KMTM#P^V>5h59YLGeQ0Kcf3nZ+4hnRErSnv$LDg$lb6oN>{Vbrxkv zi>`Kjogy;qRv2UH=k4D^I-Sg9^37)Vp}H?|cavc`BJB{%#bZp;TpX<@rvIeRWxWhd z+ZDx($A>8fE9;^8=~#&!cme>vO#Jw5@=|n_K*EYB;0oLA@`?7)a@U=RLn7Ibpcm};G4hI@*3`I%9%@t!C!UhSgi5f#-Ymu4!P znOFHs%yo&;0JC}zL(?wuald?!FXCB1SAzpLAt_IiBx`u)1i2dxZvV9>1K7 ztg?KI2Zfj1#PPwNamR73y?u%VI3pW9WhB_c<(3T9*Y4C&Io{IXoM;4PkC%gRmWF`S zZjkEkph3)Kxr@gLxAFGZ$xms@K`&6jp=yJc{MqmK4YD4ltdgA)T!8ga3@kct{zU*eG9T@X3qy@)B#qRfXk zJyB1J%F^QlcN9zHBxodBdab57Gp(oF5;$yyf~q{`YMV;H9!pABBb~b4M5VUhAV2)M z;3h{~z4^BehtTF1qIq&X`=;}fVQBV)dD-ULd+LL%qIf)}eLzra%&?escS2j@NO20e z3=#$_PA@dxe8m#rkUIC#7Bk_}iq@XrIS-slCJi@@*I-w^0QFK`M(}1{$kLJF5~tY` z78?LoSrbi-7C{Ywl4fpPwtt)vk`a|2m*==wOC%vX+GW8Q28ofEu9o4GqKV;U1FNTF z7ipqU(?Ur~@}KCZ5?AW0$3v)FKI7{xwiJ{vyC$5g4%w)NCae1|ugZ_~x~9s(CzyV{ zoDj5cBnJ*PSl{VDk#zeqllW2+96gPH*kBs`;P^egVzrP@XyoJe43;M-W$+IVL6(#HlBi#G9lcwGp{f&^;l{P8)aIjbf~j#WUrStJn?}myzCg@ zF!~_BIeyzcIkIsGAklPk>&yZRmC(LFmyZj3HGIG&V?h`g_=7qvJsFYyx6m-lewt8O z@1Bq+52+pj%h!VdE{$JA+9lY}Gy^w0Z&=>FRi;{Iy7oC&ZZUE2J>6oG%{XF9CBw?T z?0gOFhTLN?QS~}x>zIZUV{I}+pT1FClqCyH5S0>Vb@6m`bn<<2I3g6IcQvUet8(Rf z&*iZyANb8sM{b@Md^yKj5KhVRP5%;N=bM6JF_a@IvUyA=@qLg9McIOQ)^u5*Vt$Dz*_wa2>i#yMt8^$6=oB zNr7rgW=1k4&xiGrMc9xiHrNvW&JxF#-R6He8vg&bLT3IfbPjo{-tX#MZfon*jk#(& z4$-mseN$?niXQy{n^j<;5e$MWXiQ8?VkD-=nV>;SQCq-HsWp_%UvO(;i&8{@^v=P?J%E;%2Kn>ZK-rv zs^j}>(nM=t=<>on|>(UC?GG- zN-Ctg;?aSx&512`THV8Fv|XZz9(rNfR;ZvKm{dgZ0lNOcbh|}S9RouZt-{+B8vcCF zje4UR@(XI$`gdC*9>9aCiYwc|{!I*`vPipjPn8=aBc zWa|*&>pEm0lz#*Ml?xxil2=0}A zx*GLlB|b^1U#y2qidSzbiP}c_|SR(MP0%v;JS{BICL)pjryMbfN40}9n+NwN19$-Di=PQ z*LfMv{B)Py;d3-aH54iX?GzkW?*h(L=T_*IrJ<&laH?Xtu0)ks<`%rcdq%l;zOxN{Hpz_mW2e-6Or_ z(9u!;RPQFI11L}n$v7rn=rJGS5|j){Jxj1V6Br@eB#pBFbqx`N>6_*Vcv`pYG7S9v^@AS zKC;qr9UyYt<$P7=zwX%kU16cfgKvDC_hGmxMb4kdrT?8B)8_(35}2D zL~Y_Eal*;1mop=|&W8;5SP35bY9ys_P4z5-78qPIKgJ(eQa0<$$x2I*l0|@0iJk1) z3KmUDT3=tEfv9(UNs`$vS;|dmiAiB<@{(<{y@en80^iKe~HINm??MKuMC2%!l zUY~>wT&I!xURPvKS$5@i?#blvaUnZ}V*bqV@=A-LB}6O9m1k_EzDU1v_qL>eQP+oi zl8ZJ}M(lf<9-=kNN z*EejQdw(a=&M#4W1^w)bO)Wdjdah&LwBZzc~wk>33fd015l$`o@iPD zr|W}83}OXcC1=*-220i3e{MusuI8*4r0@J{Y8$IH15P)abLjJ5EoLV~TZ&TB#$aSe zG!CpE9Lh>2$B0XFRX@=p1hdx>6i!#$jG8|+FwTV0)$vw;t?YJ+&s8!%V#FXvk&_;F z&rWte=|$DATiG``QOxvUSLT0QEI~A@n5K5puzx`fU(EJ5Yo?sQ0=CHoK9g^L-Q{ur zGD2l+GpbpGG!&3%i53y6wBOa~zQZ*0Br3>O30h+Kx=M)G;c;Ew-5vQ31)*N9Mnx)4 zOCyi{>V9B3LNg^6NQsA?+YjVD{UboyV z>$Fsylv*A}m?-B=yZV$8 za!zIyjvbcvg{mT2$ck#)im_yqkwT^>pU<%(MvL2$UZtf=-7tGt=cyc->-yAIj6)7M zNtC*=l*>t6NKxfTv8z*&szv|G&d-)tN)&ef5rgN_T)DE_^<_hb)6qT!@yjN^K}N?k z`5rX<*%;+?{qoJ>fuF(1Q~Xsf9uz8B8<2+I_;CJlc9lQ;H%%h}7WE{_0lnJg83Vaa zm+V=)Jo94DNIz^-WgfDtuRj&oKh}axbXab~*cb*7Y4?(?u)AHMjVA4KvR_h9Fz~Tt zxo(u0HGc+e%F{))QS~YM<++{O{kYoEkdMJLd3=hP-ODPSv5 z*3vwoQLBU>ZNA}1EV<|#r;D0v=J*H=`jkQAGC)CB0WF3}`+|sGpfNLpHYbq&@RM!y zkKE4j)pTo)d_&<@Nr?)G4d23jYD%jzd`o9k&^$f9BC3D1Hm@y!*g_0%N)unhx?*AA z+TiF}X~4H0?a$+%h&ziZyTorSgHCckcC|Om?YCz`MPPG(@x-71iP(8oJ{-L3q3I05 zo*y@HFyu2o?pjgCx4thr=eNGDs^W27p7cPjLL+=f6jm`5RU#J2m$_EtM9__yW)+e* zEM*8INFV5pnVGFu*pQiAlb!kRz3X9=@me)**|o;z7S4@My2SU;KFE@tf)K=I1P|%2 zIvPhNqd+{h8O3IPOvd3~oKNOuJ16O@+dL<(;z|{zjy_i|8R!&kAt$%8=gC)=U_ORm zF(6SRGvzbIO`>*G`w6$Ne&c;bP;QZCubjW=BFmul(Op>{kXl93@;{3im=Pn+_3mn> zc>Fn8=Mk-0(7+O!tn8MFofmnHWH){zqUoW$vM?rRKjF$YIe62GKeR5$cxXy7qow8> zJ)c3Bvwnz0?}=z`f5z@ctFT12o zIoP+4SpAm1z48d!$OT$=#GGS8?3lx^TQ|C5WMs_u_n~M|V&mXI6_%$6a#dV>BufG0 zb(qQdhpUKO1?_7ON<=#T1`i}9G{ja4JW8`UDxlT6*vFB)sh3JGffY8u^e&}dXo z%A*|)lf$WI_DF4bgaLJ;4;)wtqT#rjcZ*_Op3@6-7?%BElKPDa#_OCLji&2e(&x!I zvZ@cd5KNQoMZOsXVGW&?c$X-s?gN)efZN2xyFwR{gu-6Qnvz7$Ee2pkDNtzqeSD_a zkVAXZV0oZ1Pcc&t7YD4~(x8`qk7&mIBZBZUijKk}7FwLP%b9-+;~l1$qW~gfrKm_H zCC=CXd@C{eTZH|1wpc>Xa=Omyb>xPk_``w(?9h$M5+FWH$3R?x-VG5Wgm_m~G=eo^ z!xn9M?0H&Bf5|`Y@VA>EYgt1=LP&Os7g~8)OSs(`Yq1E7MeQ18-V~cToHaLfb(`xk z#dCsA)uW6Gv6+?c^%3{eMeFs(qh?u)lMo#?Ig)0$XUeth`GDl`uuNh9q3oKu-#Dzg za;)b(SVPVNwvs|UsfexwJTVb{G#OV+Ewu2#i(t+*&}O-P?y?|^VJz#<)F376+$xVh zFNPSuu?qrh-W~9A&|GL-DtaHUSWYeUZBGs4dL z<_vmpKhlB*3E*RipnhBBQ5zBD>O3Xo5mXVn(sGk{QHCL`OAlQ3|4&<=MrG-ORxM-8TJ)N}P&uOAEwKgl_!Y@}mg#$Z0 z%ps!6O6lN|IBsl@6kh|O9Lz51?{~^uHDhs99T`S+&(K3y$sBezy`FD%Z(Cj1&WeqX z`jgx7Q=MugIW{8d!^xaFVgs--IgKDdM7R|x9(n*=5^jlR({1NuoV_j|}{fEz$&!clPo*tiJiG~;ksP4AUe$H2dBxmDn z#Zrn{+)dR#P+8M>Iqzo!tlS|I@iJ29!O{BM$@D52~eU!NGd4o_{` zxP36&Y&sK)wdSXf9N2}i$K6zKX7#j9^vb+6xIwT7CdCmYkvm09a6HK(_ zwFxBoL|w+VF`Id%5G3KHU)0^T(<3e-F`e&R$txw4_1~)l!OrK6O1~Cq(BX6<8LOsd zgp-Ll*l&t9I>=F)DVxDX)I;Biqr4No6*ueZQDdwrT@|}1@1V{2G(xgpN^!C^H+sG^ z-&>ssL_xRH<|eC&GfQEq9`TeFyFuO<%H7P--MS0s=GZ#tt}I5G1%_-2S3hCk-~K^u zXoh$ciys{5dBr$7!?S@;W5_Mt{5{LuIAm^6BdV<`e%Zw3L=<+PCGZ*Br1XCF>2P#Wp4VRje9ER@;ix@D;k_Q=W|U>ak?BSCFspB3<46&TQOw~ zOPm`*ezMljgU$TDze=hU2vjLE5iqBZcbntG5*Y;$B$ZxifmyOENFwx(1tfBwU_859 zN5bw~kbgY+X0pk(r^@uMOW&YdCG05y8o4(GjYm%yr8A|kMCX36w1VjP$F&o9c2`%; zGf#>n1EFI|s!q^iRb3aQyI&uIs+9i2=dh*sj8t5a22c`E^wl@oV~UW?a0q3SN11>q zVc$Z(t_xo-8yES2ZyiUiI4zwffHE{X8#h%=_`wne=ja03pnc}!L*4fwha3Uqf?@D? zkZcPXQwyJFh6AZ-nC7HcaEuX|lqNXM{JKfm^f=Y=Xd34}S+}~Cd56QrQ?TwDZfPrc zd8JB|BhI7N!TH-*|M*5LyNaEHN==F6Cf{O*9Gg@Wq9Ect);obno9Wq@=9%o1 z!y*8kP<3iM*8l$t&^piP8rXI=0sTwE!fs>db%7ytytPz6U5rMxHopVk(QHjH2v-F7 z3-M;AdM_+1!dtR{u!rOq7bR`>Wyu%Y0Bj?zlSAGwL)%`(HBZ!$_J1z-MS0!V%6{9V zMupZ$;AvV~k;*23vc1$C43Z-CFgK*tuw}WRZm_&3*S0vnVXQitoB7mGjt{o5!Std~HgZW0mc9lbg|>0=R`G(C}1_PDk+&ZxpxLyh`s&Lw2cu#1RC`&l{Up z;~v*=Ei7FZ8<`Pum_URDo-|8J^5iS9$^kyWb12)8T%wY`M4HFaTy>}45SbQM_X%U40|55>xvB3TOM3-a>j1W!EK z@7TGNJEIszh&~{@=v8ksKEVJ6WAmhTzFI68Lg3v3fkYNy2h`UOnsd`EZo<~pWAG0+ zTA9f*zK#eomtl*l0xighepLI~w*#-IoBav;m!!`Zy*Rwop*}T%wGQeb-il?@Oe2(O zedhJ93Kld3AxthOQ(aqXD z#eyWKZkv}Imjh`VGXY-u;ATpYHzVWX6ef>E@+c%lw2zm8SD(zkKKX0uaX3Jt8Fhr6 zFCK~)#7FrqRx-Ef`7bX{`tN^%(f0F;%hB7p7TfJ2$r$#raWz54fyg#EqdZwr4aL_3 zwEh;KA{R5|jLDa6S3Y7#y9>r8(HDKTj^?)2W=IPtgwuJqfbfY1{Df@8FTv^_z4Cmg z$GJ6&Nu>{_1^5x;y!gt#aSL;V6Is>s@(NGe_ZcIIMH?yY@(*kH^V zIM?>R&V5d8=ipL~ts2QArKZS=Mw-YmMhhVa+@?zrCKag&f0G7Klt0gw(Z!n31f_9w-zGiJ%@0kq+jArErCqC!({p*}@#m ziG-8v#mCL8j3G-E%=InVVqQ<{Pi<`4(V{KYUKg5pFTpIy6}9g4o!e5!xPE=d5_!;_f)sf{ZnJAGJ-TEJ0Gm zWM4sy)#}-OVIF8n7=z-@|0b=TXeoRg6dLYvZ!Jzrb^Act{It@sie9E$m|C99c#99T zoy_L0&1A!LJ`Tl-au5AL6hmJnr6hq9iHTC~x#+1g|H{PenEG}8X}I35d81hYx8wV( z0j%VQ=uC_ZSd&!CdDYN>O*3w@F?=hZCWImu{h-C5!QcKc7F?;cBJZatIp*Y ziOui}??L`xFVMpiEuOHH zf!?9JpRO!9_f$8xDP*e?L$!DBi5RbmN+F34#r^@57M~7DDQOgy`Upox5e!Ym8jOZ% zeGcC8bN)RJ8RwTw?~3YPskqLzRN4YXD8IYXn|(m%z3%WgFA+5>ufUo_s zI59SpCOKPrs7G5I&PBKRE6n0dDBEo@H#V0|bUo+EVK{JCtw4&i#FT0?olBmC0-1UG zJASQ}6D2ka!SRvel0vKcJ-X3|koC1Gz0<#`+AS2agp&Mo_j&L*%UQUm+vJt(nC|Js zV#+1wYVqa#suA?@4OQ&VICP3mTaGPpbC@n4SEoy6iA^&2u_m}3*LmV`)E=mGYDfM} zb}#vVzZjf!??=&lmbm%E3di+MNOUV!vu6ch;kL)Xq8Z)eC!|4YQAWgI5E?y|@nvQ1 z{C?juKGyl;96v&ZE@T+~U!1*FR2)(F?c2D!YoKY|okkL@p>Y~$T!OnpV}aoA?t#WN zxRc-nO>lSDBm@mfzRP#dy<^<_KX0erYSdee+Pl_T`#0xAX;NccjfPKEa~v<<764^Q zB(FoTdkckq$T)Da%&gMLV^Mtxbz)4vwq($46+8r9OELCYTCNLA?AQgmsdsf_w6zga>HKAM1Mm}2x zPY#>T%`F#59aC2fx5^xX5mum_qntScBvM#MLIbl8Smydh{~^kqtf&*IoZCt#Yc}pE`Mt+%6mC8xxfYSTJf0lk(!-mRrZ=x;Sm~2tHpCf6 zB3XxBjj9(}0%QzT0idev0w!L+rHTv{f&x52yF@B_oz!Fg{r|(2#dgTaoWn~vP?^yl z?!@iefgfKTs)bzYg9q4S7wVd|8a=HDdVHtvl)$0ybh@)GC@A5P$Br@bcKP}2>rmxN zb2a1agv^&62YFA#{-lm$)#WJCv$i)XTI2~oO_jRnwEOFu#*}%U8UiUE_`CDrp}nT0y`;BZ5RJL$XR0Tx&WrI5X9gATUj2nMZ{mPl>OsUv zi~77vDjeZl3cAJ+h=Upk@NkqXo05un3votJ5EZ7(=SOV+K+4LEsMd{ zqPkTH-o|TxW0T&rq`kiFpXtIE=z+u%QWD@Tsj9AB`oP%#qV0G82h~DS(%ZiJ1ndrE zE;v1KDZ*3lAFXWf=z?2pZI#?L`#y*H({Cc5evNN|K0_Qlc1jP*82i52Rk{5N+cuSK z=T~&Ea~xS1Ckjn7Y#G`eE|vz;$GjQqyt z)g~b!1`u|i4a$8nJTg)k1HlFo}lu#w_c)tF3Lf__fH!8&7N z;nX&>ii2dG!nW#1wuBhWruA%GV}Qp^zS^nw%oNnO9uA z_&#}glyMJaf~pGs!8cqbC@4aH$?q4Rw-o1EZjHpfX2N?i-z`|lHwUr#pfDSybF;-C zkr8X=y|W;I%a*W_#=pR$u5_emw5Zu(iah^*< z&JvYk04GX5wy-9Y+)LNvs!;l<+Qz)u&B*C_l+NER_7vyr2%<+~rU*D=``#sU&`E*S z1CSvE0?>F&I`mWgA>+F<&$1e~JlgO;Jm@1~XF{j-t;a$|5>p!qmH| zT-s;^;@Hb|d7R=z%Ph(m0@Z1BaZsRqDyh&}d@WWoE4$AK5ji#+KP0kW5xa`xViduk zH0E=qK)q`fN7pG8#(xgfS`N+B1X{YLfIyK$a9JRyqL~NeW>*j-}BRW1jkLdqst604erYQqHd-hC4OFv9NtZoE1i^3;?dJvVC0q~I6S2!k;h z)kP-flvU^b2Y`+t{?=!s_tz^yC*0IV_M<=xJ!XT{u^k-#zzT!T( zvVya3uivi`q6>xw7DkZ}y`P5$otb!>iCGdvPVq4tLgXHlO=Ex zgWetJkOEZ=ML(}*g^>lQs8&=?Wzr6M1FO6>QgWuTW`ie}rZdrFGqC|R<>pa!eSiEe znB2JT>Hq6{F)Ys)@EECYSksu!#(kTvK1CETB@YN2hy!wQv|563&8xIyGhfo-t~^mB z^6S^d)vqb88HCdW-D-h&IM0>9hG|cUOj%WQ(y+crqAg;QNM)nXiB^9PavVSIiQV36 zmXZU{s^u9V+5+_PJ{%x9R1S#Rj^4f;rz)x^aP*VV_j|%D-lT=j+vC`dJPjfhPioC` zf+Nk>>9*2<8%XONN_QgK?*czAdTE&YiO`e7EM1qwo?T-qyfu5WIwJa_(kDmGCJ_W@ zP1nZtSyVqFrH|owDU#6u*giviFS+vnPxS%$L}YvN*M(pBKY%={*PpxV|2YH~?B1Kd zUmp7P<|)nl;yM58am*^D>8l;p+oIllTFf+Ti$od?R{blIq5$YOc}w+ZndgFHd@rRGcazq#w#MeJ4p-6C zE?+c$wthYwHy}+s2slSav z?)eH#dOBmELXj%eu+!@OEx8P2Sldfu_&@++*_5z5!^m9cj-D- zu`#~3vLZQnafcH@IeHRdE>JwkwxRp;JVH5ezA&OfCn{~Vm#{Bu*6Iv6BOI=EG-34N zqy7OE0;0s6K!ZAl1}n@J-sfHjeJ;kZoR_JeAj z+IcUAlJXvC{b}uq)^$^{{z13zAPruo_e6XIgWuZ#r`QxQ*?UeC*H){X!elFCf|z>B zD@fXc-MCaFHav?tu?2zxhBmlIy!Y;BXzDt{nkM}ANqxv;1G)jEHmq$**K|sy^rHwE z$?!C7*>o$wRf&?1R3p<(`-2f+I7Pph={@HB30pjddck1peLQ^4rO4(i5w5zvSAz}&x>7V-gU;;AQ*%Ey>CHQCDLZ_i z?v?Eg;4ZXlJ9U$p{VAL*`TOG=K`gwxntxz!#IJYI{zx+S$hbos(CeT3Dsb z3oECjBU>+MU92YM@)8g9Zz5CShd}`oY%{u20m>y-yfnA=w0`2iZWPS}!lug4>6#$Mv+7~ZkIpm+A1f40IqiAkcirS4T=^@ORM!u z(@eT}EqA(&_jkdbneQ1k0_TStc8VQVPn#4IH|(A2Ze$a1hHsQFqQ-mv#M`vRpB&~Y zO>-t9l3^FRQ(SHF&KX>vd60RRaJ<5PPbK`=(09jhgM|>QGt8`V;ilhI__9B`z~rpH zfZQx)ZdfXiagr-%al{ULcifa{Z4mW#%Lwx-!@rr5y%+inaFN#kHt9_l7qpL;BW>g| zQ@<2$M?>w)E2>&|!YSbDZOyHdRaoN^sOwkt{{h33tC0?3PQaX97CLwrbW^&ZrVYD-#VEaj)D^X9qdm8+$Bg z{raohE*VLZ_}+Iv<(6LNC2t;N-VDd=bv{@1ytxOv;dkxyB>tm)xAF^PVdt;>aQ4yv zc)p?BE_@xldY|gm@W4uStY8K#>miU#7qM;AkwQPifPqQTOIEdd9qa_4f$z2L&r#7V z@Jgh-ch2Q`g`QtMsr5(;!mzt5WQ?j?snhV2%NEY0-m-xapzYJ&icF@`$giB>7M=>^KbzoSZ{K;=v| zQ{(k0H~4QG=68PoqC5kL&L(p&>gWilN7M-pOo+QF4#cg;?cQ6D-n_~w>_47yw>A@n z6>42{tgtN=Ih)6|bh>qxX~{apPU#QyyUt&X|pL zXg>n$bL#XxP7{Xqb~g9Xk0X zwvz5uL&Gk(cn7>(#(*Ir9K#LlNxgB4oIVB5yr=g&u4%p0oN9cp2c~_L;$@e_lRqIFIhg55EMhz?%9p!;^ki=zhs@ORhkmJRUHtio$QouIWmf}5?%jJCG21*p8(3s*VkI$ zHEBs`rfb(~{hq&G6(rN-D3;%4AyMm&``6i7{f+TTJ^KdNyb&@re!)mACjk9%Zn+CY z>9cw^E7vUKM#h=NRc@GfIeGbh?p=HGp@==-ld2no%N0>O$ug1eR)xlUB9XobeZH~b zv+3`Y63UU@cmi{V6@%%Tbf}R6@%upY-n9Fedq2;E>~|ywZ)iF`bC$Jrv@R?J7VCWI zG?gmrbPo1bTIi@nr?a7K(NdP>pp?K_S$-)_Ap6mp(wfs$Hh6qyny=4O)R*r%9Wes` zn!KHte%?sA4ccmJh{a*JTJE>%x~NKb2Fg<~3HS6Xl|U#t;**QT{dMr!gnqqmkxJb3JfcGJ!Av{GHMxJ46BL}>+HX{nS)$gz%v;{U zSX&{O<~Cnund8*jndClyLqMm_H6hL|8xGAqODJPa<38EUafu3GFh!nk%Vm9}k89j_ z$w}I3x*&0Lxw`&d-;sObBl)_s;j5VOz*!_dJjC;`{B}#9rpJ4rAV7tx;VZ3~ORvdmIBZVU^tn+qyDZ)k9GJ7}XFMGxPcyBkn6S*dU6kpwI2q0e zjBnSTc%vf3P$HoK{=Df;Qm?c_s2#bV{&|QAJM>$ zr{dBE*ZdLrn##G6wn!J7{YacRBk|-|(v(+mvGrwbE7u{FU1_D`xzgI(E@0g;w)$0d zBa3!d{EFH-{VcBtiH$y&EhQ!Ws^%KT^d3;|hX@c$uE=J|pC8{#NwRa}mw&xcC7k^? z`$_4CU&~2;pUzQ#neinxo`zqLhK`~0Gi&ySXDR(`%c+i#)0UJzbD)cO?A zVwKVCEMs7=HqT8Pjv@C-uHEDyFbh%zZ2~;#{n#Oe_cUeQS>?nQHIpt#z4k3ctR53) z)Mi8{QVvUV$Gc^Zgq(q=XVozE@mc!()(x=o zjLCu>cfy)l_BLB1Qrx5FFHOC!8mW(yw@zjh*aV2gZVP;*t7H{EN!g0!YB{eikNxpw zx&#Yqu{N5Px&oj-**%4BJGd#KfPSJlzR&(QT__+PqE2r^7Ts1PAOgCmrruS}7K;&i zQt7NPo!EG={V8I~d4Hk7RtAXmi{H_i6K zOCvTb)^+ip7&(vPZI~^^!Tz+lrJuh*hcP+fn49Pgh>c zQHeYTpGW5Y=&cofH$(o737Fcv%Hmyt|1$gheSbsB z`({)gf^8b651?$fQ-(@Hl|>tGJubTM*6S(iEdu79FQLFkm4gx=l5;{K67h|92`S7d zlR^!erSX|Nx}dfBYkhNh(1mcO!_%E7Si&KQ?whG(v%3u+vSVc-KUyh4y2wkP$YZ@| zvC<&zTH+SjVq;h}uH8J<0W0{S2ZQyN{7}~{0g`IHLKH5EX9f;CLE@~-aXR)Y%*9eT zO~j>b;|KJ!IrMZCYtq<+1k%%Cm=GXwl*8dfY6Sp*d$1m)ky!D|+EYAMh3&GQd%01` zElpKhQ}wHUOnQ;tt~P+;l@=#E$Qv6a(%e_ve@oLv#d(!ANW5@7`VE%%I|)`yI5a>CjnKeP*UQG4|VgTV_@aBNQa^ow1)dfy$`vnJW3!JsxZ1o5<7M@TAr821nGf%~$>V5Z5orW+SgLtMD9o;>bq^@)^2M4&|9|Dsg!z zGE^Z`h?fD%Ty=NA%*>$g_FWQ1d-0O%4TcPpi|53Un5C*i8lC<@ndz)la)QSi8wT*2 zGTO-hK}ZwCm}P6=wP(GZLhOI_h1X=9(9>Dw;bT?pA|7K-Vasx!rbOa<>Y_1VyPa?x zM~VRyDz2nhvW{{Q^#*-hpO96XL|Eqp$tImGMnk(Pg|P0gaR7mb>3SQ-QNo2s_WW&v zWWCER!EU#*1ZW9Lv~qmgZYmRBWB`WjjRx!uzvd_c`xGPp#)rt&>+$gD+L}WrzVz!= zx7*FNunHycv_x~N>cq$rRtjWR2u84jE*rb_fh<&8eF+DRNv#^KEM1eX%RlD8@0S3$ zO5aUu>#%?E!3R$3{n;roqXgf;e7Yk?`1{wi2r%?5GNlW165aV8k|nL=y}IVsq((H& z-558xT06#2ALawgAzVuMb!?@C`rco40VIZ%Y<%DS>g=XFSNU`D#+Rkcid9C+r~AUk z;C_Urbk!sRB-dhgYXU6#_$FCmi8R0nu~_69dOBOv>OoRUka}`zuW#>YgR`-pS{!Y< zSt@`DpS~gL>$_xYQ|e{R?@}nUd>-2Xv=V?dC`o0&sP*#tKy3cNK*B`+l1(sqzuwsD zJG*8dyj&(gxkrhe9rn|F`9w9s!~67~Bbhh}%5S>9&X ze8%933TMZ~BmP_YFW8bg6_S&xFQeH>42bOHcuSj-M#P#}HGPuiHHkQeVk1K@+{O22 ziu=3>KbJM4|GG@rFR5mBBPTvIoCV`mjZMgloj&*Ce3}vFB%|o?fsFIF{T{73hrRB1 zKDvTl{z-ES(dlE7Dt?{qn_q1hs?nGTIB#)f!o^1=5z(Zozv{<`RSmhIn0IQSz(e^YeI40l&sRKZTWf=EWSSa2g@F`wL<`LOGF1a_n(KYwNED|>MRO(xH?U|^EQqrP~x4Rxy zr}|fBRxtjBY27*8ub(y9#Zlm~Gl6qVAMKkED-B z={xK5HnpN)0g#Z~|8eThO=&_Qq1jMcSd4k#h*j-!`@Q+6Gjn6lXubmi+0BB=ZgN%h z`r*Mu)o%%Gq?cREy6@67cX#Fdk^I!{8jE3jmqK52mHRbio^Tw3utEz5m*acy?qm8? zMC@$Q=QBGvcUUsz1YhkA7#Ft9SBnXvjgrYgYO5>X45~1B6-NDRZc`e+*DMGM@(&bvCkq^eo@Ym8+7zKlLmn0Aoobr$|UN zbA1Mc#DBzQdavcIR`%l1bL3>^NUGHaa>agviYFoofW8Pr1T?#bWNzBi9JU^y)B$aW zQj^pZXtLK`U-TEK)@&tPCg4?18e_EEYo>Cf=i^k1+h03UwLjO4zTx(wgr=kGsYYZT z?1AQi{oj?0_5d+Dw`ABOwy;q%c`j zz84lP{cUM%Vg{yKZVdskWDHD!%e(Nr@L2nte#n;48#{Mga71wo{9o%Z#s6M`#}15N zKOeE%668<3H#6Ew7!6KgpfPQO(wokFs+aQAvEkiO;lT3hk+bM*9Q0WPC*Iy+v#018 ztuuA`)6qBhTjMc~QKj&7NsAkxr3zd+VShWIHqQXrR(vILE~Ner5^3v|-HRBOK&Rhj zWno~Q^=oU|Wgu+)<)*;(oH#9)FN>a~ing?5$wE_g3n zq}SgC{kk3g?;VEeYP(i{ruUub48|zYmKhwyLYzkO8WJY%3s;MY#rAy&j) z+y`KGo1xSr`ng*fjn~FieWS;_!GgiTD5AnJ2d;JQ-`l7<<7PhkjTz+nb^}EEIabOz z)qKRhe()(=&o6TttkV9F>OaVF zCf*p^Zl@}w@*Khi0NbZaWLPcOhD-yCbtk~MVb}|e$!}H!~`R*4T zwQAGu#2HxY(%!x{6Lu?~Tw%3^-Z#lLB7~XxCBjn0-d3^_I9Vk<)a_~y?(>}eH30=vQ(TanT#EJj!ucCb&DiYi%@)=K z?&yOgVg#?}V57^tLY3wDL==*Iu?cW;%p*@%nxcO=m-A=EGmIKnBFKZIqZ+9=N8=vS z2Hn8HikT6@vbak1#<{oTn}N}DEEFR7cBhu`F#NQ6Lo&U578jkqr0p4`c-IqTmDf>f z{UC!j-aTlfo$5w!7*?N!Lo+_SqugN`Yy3Sr; zi@FKVFFwL!RX5+88=@@^Z|VV*vM&evpEDNmeRG@*f&n5BW#Uhym#tZS)q`J{uH?}_d~f^J zgoTabTVeXaM<$*h`1)z-$hpR=*JM0fj8Ouk><2P$cL{6a)A>N#!vcE8=#vj)q@Z_> zs*nkJl`jhF0)ABdq)(eRo z2Bf`` zlB6e_WwW~n#CpC$UxS>X=biN=I=;GJIIKw0rB7Lu^C;U=c_bfB7`Z*UBOh6{En;P&An6IF)8fF zsP;Y9Q0vL8wJqB|`&)CUgwX|t^&xH1aPA7L-3Gd2C32E2p0fxJ2a~CQzF7a?z(ri8 zd}!_oI1*Q$9DPh66o4IzX=lugE+zh0Wp6y<#XMCE*AIRCzNYoa5hS8jRuQ~CnDziEWs8Z4 zDSZ>4Ko!Euq{n7`+84n5mGYV%YB-L(Aq#TGR?xqj-Cxr)e%j$@^H(jJA4DN{q*5u# z$QiSy{@ZHl)1y&P*|Ps3wv-rJDG+W8n80#Ti`sT2l{iEPgCM_R>q)poI@pn-zJBfd+Bj}LASNwcNQ4|3H6#m`ippg^0kbp z)nI}mu5V!v;z;kC9C@sDb?Kx|XzY7Z zI9guPEJ7RySBOn;0GSB3Ph+h3QOIRUO1b-J)_T&mW82AtU^UWqwuxGAG?IIBO?*Bw zWmMXB2TweZ)vjW;80;$0GzTlB9;rODo##fQ`YB_%GfJf*&YmAMU%d|8vv)V|Gc(}Z z>h&tk_BdO}O7tz1FtaX#XX~B7;DpwNFQ}d}7~j zj`HH+Ezpc)AFHlsC%m0oT{l8e^{~uEPUw2f|mn?*svm_Fa z{AA;Y{{UidBUOEZUUF<6e*ZCqn7K=b?{qo|tF|wH6}Tz>1LNRm1HJRK9}JJ}aw(XI zZcZ{)%R*KoyW{*hjda2 zh-JBm@Lr#SYz|gp5-6x7=abLqK&r9G&pEgp{_EojOzfM7TiT!Feq<-N7mK^Ysqd0z z{H;@4g~CK(8VZ>dx&ubcgg>wWDGENs;;I=v4*3TuzICpFTr+mfl4~B$ zvgJk+$6rX=7HOMqCdw6w8N~D;`A8|GD0VFYtGr z^J)gH!3E*Ch9F?2r*&L^iGWw^XVP3Hvzf4qef(1Gm3u}v1Rgk&;N>(0Luio8lqo3E; zI#z&9@|?W$SPIFxGi8x%XUhuSW;qarO8+%f`cTxjQU(~L?>osr z408bDb4=pXHwkaF{$?pJyX~V21{Ud?MoCDbsVuF%hP9S!Y`qXG((Dz;9$Wrch13}J zNdWzTHBLfq$NGA!eq&aWh~tt-AZmC?DPTtYwYk^t$1zV4BO>hCJI@7ZlGrjvSUtUs4NUq7S$B zdr8>Fe4wjNw)M+eH|}#rtqhNIn3%xdg{wzGn#rND)ffW)N~ld83e@}``nynh7#%Is|ig~|O z=_0i0Yhpt|hKbrjd0LKFxa{oPeL`~AJv1LyMMB?LoJwnd2ttQp-trsH4i*NxPdTT2 z+#cEg+Da)OWpX~;HT8Y{XJh*N-*M{`a?~ZYcD018g{wF4JOifq!K_)+o@1!!1|tjJ zt&2uKRXJiH31L>;FIB~OIYOJRa&TMY)BJf5E+y5vo~8KhCf~w&MeNRM)V@t$3~#G= zBKj;M0L9Um(uv(c9!}TycILcxfa7--Fu{OT{f75Q2Mzd6ZI9{{=Rr;U+T^U5*V8r! z&-P>BbG)syb?o}G4EC`x3ATe_F0H(zF`?C{7OXE3v&9cUIV8;D=UOM!Xf)oEuXj$0 z(po6^cXllH*n$asQTH%>mNebT;4{CR5Ixdw>_R21<4QUOXW!)(SsnNKsKmBq8DN{0 zoc5l6^ScHG9u4zLg35q)+L<&`n(DcX(A%TVaHTDy>&ov7FI+Q4l`)H^J%5#~OZTl& zxuUhRfPvHDqIV2MS6e)X(zp@wGGVlt+acF)uIbW9xm4GWeG7t!btx#qb<4x4^ra9= zaEa=WSns2?<^;I4geR8|VqOm%0(j5aV&iZqD*3H-&) z(UG?i46MU~fs@ymHq6!Cn5iD#By>H`0| zs(^8*E{lt4$}2sC{E+R7-(9Gz6UEjwWrDpqJ!+cUJ90EwEzQTlI}|?gLmmmCog!op zb}qB-^MRt+729|j6aekPXgBr03n>ozPj}=R42^9ETd&zd2od^pCW5W}Z~T-fA$@5V zloxI7aVl+2Ugu&O<F16%=&r-&6R1T>P`fqQ*I%w_KrReL8!*-hOS8=T^h?pZ1)v(uTSRe zk#)Y0aTTof^=W2hDqv{!@@%$OUzm~M19iwbdvOoDxq@?Wj_#6lrnO0;I~jr3YOGOd zhw*e?CANtClzrn23yq_&T{(ovXkz&vDU?Q7s-QUgT}z|JfywLhS8dUQJx&{%LT{7} z&P5j4=M(3W&O0HZm>*+Ac}6r`Re@EH;>4w(ZW^R$PTM$;n#H<;#jR_$aH1XjrR$ zlD1y#vPG@0x;82ye}IC<6~kr7;n>W=dYyw;tGbiFS&W^5`YN|L-C;=g>hG)Dsd1m~ zPnX)QE7>(MscKD+y7Yo-v|`^>#E1+#eHNjVR6S2|-47N#4S(j1Ric}>DQ7|#>{xkg zwB8t6>vRaH#JdzPd}V#}wn>Sidc34o_IeQ1RXCZYj0Mrc7M`j2cm7bUM_Wd_y|}dg z%6~$sRj$?`fTNC=aDxlU>2DWgqgf@Uny{iqU7>w|rQ1->MjDi1HSe#BUi;;|c=UmK;@^w9BbMhke# zka?qZR6_O6VwOzU^6RJVZJ%GiQ`oCry~vZqD=IU!_6U1kG$ev=@Ylu7*mk$-^G{{d{?{s%z#DthO-`1C)3)uS$9_yrPQge!>>PL zRLWJ6P)D-Ivcf`V+jGT7w2U?R+p4lq*cZL#k-#LBnh;|9^nNSbH0R@w{{Y(P5~QO# z>vwo7~`wurclO6+y)<% z0?9s5Y|WV-`;j5+f%T@&Yk~LG^VO}k%6SFcEVWmZ&fnH`_(kOhz6f*) z+4x6%70Xt#JrF1Lz{(rdvSkdt;yvl)@GS~_@A^wsD#=4EcjE6=b9u-0b^S64Qoe`f ztoEHojWY`=uSXAP)9FY3u4zwxqCQNGv>`1aI@NzW?+1V9ucAK$Wr|MJoLuJD3!=AS z6;@H*WtA1C^VSNZ0uUWHVzN|yiRyF?pTTm_Z~;XKYma#X771m3Joe@Z=-;_+8=lVs zE649o?KS?Z>#p(BHg3j$qv8i!3Xr?VjPL;?*9Lrq z3E83XY0(K@TfKAvyu21nq`WJ@AiDehGv1=9*+Fw0t)I(9Z#VF?_aDnTj_Ve4WA3H6 z+QL1@7NFUwNnvqvi){(HI8&K#8dqCwTC0~i)n5DOV=MLv1>%2!zR3=`*N0zpgTdl% zHlXry`ud-LA|4VLrp7;-gC&z0dJ%gNDz777awFeN$=bpba3Z+(^2gQvv7dcMmt*-` zmTIYws*2qq=O3Z#yj8)r5E^kc=o?$r4ueXTSK|sY=^p!X4l3E%)MK-Sz52|3Iw=fA zUfgZoMMs|LzPWI!)B#?_bA--K2Gz~EGua? zTT{m>_1}{9Z{JhvYv_=Pzwur9*E`GiUh1W*zAkc}Hu$B`k&@Q8cz8ks279aoB1*v{ z35l#Lutn#&94z>Qmq({$`;XY2BB&`5zopZ?TN!mki=0$-VKbXqokE9yRlR%^A`y}E z-EE;LMSku1ysCyv`1f^sJ0VFiGQ4YGxF^OKAwT3NlyvPk^=s)c>@xj~!Y&=(I6?;` zXUCO!Q4Pr<>V6Zy!vCz$p?jg~d0}oTG2`{VZi*>iNy?FmD)>Ex(|cTBg<9{LC7V|Q z{AIZewEe6$0FE}Sa1)iQyse@#O({7r%EyPOoe+b4l@2$Od~OSf#un4v#b0$3yf)E< zEoakcpLJBSN=u3B z>-hFdmR^!EF1Be{<4Bmz*`O}@d}>ymP&Z%ttlobB>VbudePp7u)>&nSw~2bOkOIch zWHB#YIfS~G{@^5kOj=Ix8d)a-!?>vVkezok(Dv5}S#fdh4g zk!Y^@ay*7hC=Fa4MmE&+PY(0_ZL`WCBic|FbJ7U@5&s`Rkbvtn7ybHz+C*(W{>e(4 z-aA`-4Ajppdh9Hvr0o8(_+=AIEYzv}fw{9ipumw3gvq7LRq<_o@Ir(kJj%z6N!$& zOt!5k-ROgYk}(`YXxM(W*(6?W28a$6&1*63?h6kP3y*WDUI7o-R?`p761*?ggEQ=% zuI87!-D*s#J#NGv=cMuv)u>25QiZ!c($>~qPXA+os4C5S5*c%h`r$GCW$WY~4iR=C zfQ?;it+3DY2BrOppUeK`Yz784(^$yI8ONtb2XNi6T7&i(RVTzf<;5gls~gM6UYaz5 zprh$5_&PAK?qo0l^)HJBu}_1@F=epVT3|$ly3gBU)T-O%8Rkm@hWx&Rc?^YKxp;hX zDxfbVQ$3rQuIy$|!1B0z`=`f;Dk|T@cA#hYf$?gOV(xH_1OeuJmrZzeS6zCMl z)TBK(uxV7N{YtS}Oo79uV3u#&kqOg1oYC07Yq!_WAK!+okRRWR5_>AI=i8AlA7Zg;N4<$+S;_D_w=`jk{fd0wl;LO!P))m+XaCm`VTzmat? z#j7uYeJo2VXk7js*OXZyiiWL5+GVEmTY{TmhubUb0`@S~#l8cF+Ln0Y3B3F*W6mh6 z7d5hW1)RuKG>&JYpkCVu14Ni!qMNG9nEiA}C0L(GbMg0Y6CxaTBPf_LTDb;Mo%ix2 z8Zd}S%?r1i=a}b^Kv(@4I@4h~1jsnV1t8UE=e!LNrF3yl=vAi7=(p8F-H&R6L6{PY5C0?Dc(rT zoM{tT5TE@i-C=a{5REOODskSwPLEtr&y=P7olvgP$IW)lnRQpbr|B7Sly?qes>B~% zym|L+7E}zMRMxLly$~pM=}Jg90dCjU@TpS+w3)Gjquw7`yKc7eYN#Wy`;UHVbn3_P&ml{~ z;^;DAdrLzrx>%DqJO7X)v zlIAX+6@QY$?2I13NisVYecVu&+oaLt-xp0ITh}<4W1C?d)V3LkjyBGQnq?Ggm|$vE zzd=rj1wUhUOJ8tA=Anhq(2?6M!9w|a^hFSbQegyTFL89L@xsR^Yg zrrFdOINW8l;X_hA!pk`qV8VdVm@Y*uc7h;%gwKmZJMZVRuDf3LQrfI~+fR22zy&jv zZv(v}I$jPo=$a|(weS_p0JjqVly3v3lT!4 z3^P}ZA8%MG zW4aA3`YgrY`T`(|wa}J^;pNTFkRwut>Yj8V6&^p5lzDgMAfDRx?tdn(G!q=L7X&R4 zA3HEUo5)XOu>c!J`?DDZTMuzR$|oGVf;LMQcVDw8ycUT^&A&`Hqh(rX`_6Yi}9UR@lGm26uOg1_(}Zr^SL5 z3n93>yA?`{y9U=%2o~JEE$;5t;vQO{P+Dkvc+dQ2&%9^$hckQjr!|?$r)93DZd6feM^q zGl;s-%oGtC(nU6UY+@xf&heS3BwK++JugA@yu0FmfUhCK>tZ4;;@~^Q*T$S-cli2AvJdXTo|1>~xugl>-a8uW1u{u`om$e~ zuUYJ~9SGPZGpW-GI0Jfu3gOyTq4wIKBP2u_-p9tu3+jtn>Fm;*@Y*ZIWr}_F|Eup8@UNyJS zr2A??ql52l$6{UPHJQ%emEO4Nn+Q|>VFCvDhrGd8uUss}>o-;O;9w`zz04Ce0iiR^ z!~g`<^Pi>5xF+Xdn2U+!e)l0Rpo&_utvFRTtWA%G4&$EQJIXuErg0A)d33#@!^VNY zY>Qirm8vAdAFistYTPT!a_@G2#gY#Y|FB$f`FjrM)47h}@6m+o$xb z(b|O<&8Hd5bqhK7+r%~KPTHj#1tCrEHfYE(-PY(#53{S&saZ{~SFci2`TRmOY23Nt z;)buxq@tx`kTd|bARLP(z#KTs+TOulANhKdT10CCxWrbjom{DBdiAQ*gX5; zFfd3wkOt+PmUy#;1*HpQ{a1IMIZY|4t!=Fv%MjdF=lB^pzs z4>y;+Qo|qZ>>6x*n@>W_KmMw;#~^?JT4qzQKT3De18$@|MbT{hQpq-a4&_wTP~&C> zZucJ$mQcYmlirbUjiB)m70{GW4|jZGx$9u}nD{C_on?ILC2tIFRv;IQXaGl4z$9~V zqogHL?UZu0pEUNc;9nl~h+?@Q+fMQ9Zpr-X(XMYH1UTv4w2Wo(?1eq_08u(lS?UG$ z^l4%zTa%reSWg=2omN7$@V;tJXn2XS{1VjAeRDm8zus>-Vw|zPbGW&1%fhg_gFWCr1E4mJtyfY&H`cb_kp2{rUMEt6iVi^Lia2QQ$dnG@%45I5Ti4o1eZhsZB2ZR zl=Lnvw(c=XO4}Lfu8sQrL zf>gu1Zu?Ab{or4USwo2(DZ#Zbh)XtCQB;jA0UoUdvPAX0$O@MoJ*`EFWJY#}Z+qoN z0@$9cG{9x0j(}yG2SV^>Rpih!DbS942b*w0(bzH`SCy`mQNVqTeTUsxw^pQ~34y7j-YWFR?aAXFitwyW z6A7stU-tIZC#XbrnkW@7%;B=%(#etysMAliicM#wumwp{w??S35I+)2^LkFL`r>~J z-v3D&WD1`1C12vVZfZ*qpKPmu9|k!SWbLWo*YN_scnnk9F(U#sCdNN{(?2J}qnzTS zQ4jF{VJbS1V(}M#95b_&fAZU5TzBPRR2w6jp=ovVZKt@}2}hQ(p(_0Yyvw78eRyx8 zN2_NDk>Bjq5=#~*ZP#lMJu@)6J^JTa4j@C3PX*O z8);*N)6V$Qd6E^$j^ac25<}}+yXcTstbBLJs`s8~RxM-IF9jUZZt)*m)Dz7fpDcMn zT;Nfq_JEdh3od0t-Ek2Nx6hPWAgzPX1NJ}etNvLhdq6-O!fr6vEpl@kM#`M z8yO)1KcAVzH|w-S+g&BA7nb3QE=0sT6VFW-Xlm-b1SW_(z*E4+VhR3JAK*alcs&8_ zH#RgXt5TQ3LYqURg7iD`<1=~mh2-js0E&H+8?KOidI^R(G|Yo+vO+>1HVnzp;8J7X z4c^?|$bEm0b-g9Scadp^RM8h1V!Iy>{}7uQ!(|;=Gqdb2u6#!9;6#~TTW`eTmh*DJ zFk?~3GwTs&*TTWxQR+@#XO{C(-S)0JufZ@c*|@QJUkI2Q0?yVwLq2g7kyXBoU`nZ| zQHWBm@~G4l(6(>@Boy_ZY_M;P$ac+4ah*f`dPY)QzFvK|H$ud%Wy0JB=MaS0gGxEmiGpt8q);2mq*BkkIBy2Q!C0tuy z%B)^$ePMH`rbGilypyAjpZMApQR+#ylvC_(^Ozam7UzD^7e6>#h3Te_+ z6Ba-+SAWK%x#bO&`bf}($XP4Ll9OucKa>lm^~r~PSRDWJ@b>HFchX zFV3$H*t?cDZ>L@!j=`jq-c??8*m?U11B*X?+7Qou@Q<+m@n)fe+6OXIJu|1sq|g^$ z%NxL{mq7{B3$aY|vXM+fm(rYQ7kTA5luAs7_8!PGSp4BzK+&3)+J=eU?7o_r>~I~k z5wD=c*IiL(o#WW7zmurm!8^04Ph6fivJN#@kR`C3+-tqA&fZbYj?{dP>DP_|ZrYh1 zci>m(jV`L_*^WEPy7lconBWqE7CNz{z0E6;jT@%RH@RijGsRHT$dd_`h3&_`qA6ZC z47O+g2YIQnc0#l9PxkavVP#!7?zwH6ntJFd=C#VCEQJGDT#PV$h)@*1MW3=fz=uK# z@#HMYAFJ}qRy%-k=t*TjI4A^Z6F@$3w6UyVgi4w6!-9aYuqPaz<;U%v+KPr1^1!2? zM=Lb9E7MB-3`3odv^~1{zB&;%MMrXzt<2|*ON}SXF#gS zTF7DH3P2SG4k4gpBSL-Lu0>sP>2gW-k}%TM_|v)3TJl_XYhO7#5UjByF3`)y0g*#J zoB~;}*Jjbk8%8QJE~M&ZeuiA%(1(_=&b!kIz1WGSVrPU4HO6-{BB*tw9gL#sz04xnO7`^GTD{RWJW4g{e|G`#IK4&Z9G zI0rXsRWsPnr+RbxNv31S@mf;u1x$Yq%lS^P9-qQuC9xCtQ$CF1+WXM38i(kq!GIkfG|YY>`p2orxZ)DZZ9lt z{|f*;F4k}O3=Ce4wmG$}uPC(g?K1kaqqob&i(7^LGNc#xCqVisk92b;r#j}-;G7(2 zw;l2oGQS*UK+S>3a+(-nK`kA}Qx;7$kl%IYp2)yuVl}_z?P|z3^nImb!r77m5gO z-N)#>mGjZs4zJnq7hZ2I<6vYLCQaAIjcZP0-Bf+aau1S%1b};0>5s~)myGW3G@~rr z6p+AtTt@vg%{o0EK!P)+a&-|0IR{Jll-{LN~7gVgh;R;r0fbB#rQ?`WT^p{&-n-&q1G;5>-^QZu!4 zb&kDDLR=RH7ty}*@R_&L2WiZV@&}tPjYY?DMdf_!MUgSM+|_ye8Gm0tEf1&WUtR|R z+WLaM^3~382Fig>N@*@es1&tvZEK>b^HP6MnUu$}z1k`J#Lft?7+#GZKibWbkIaox zi-wlu?r_|Yl1|zAWEgJLRBs&bQ>R;%MP+y;iY*C2FFU0XkLZO2U%69qNlO7NoM>GB zf_{@fx8%y^DYvbkw|XvfEra$#HOi_SD9X@JxnKwMT-PcP1YD0hJ%5(5ei%mADL=i$ zQ?9O;@WhLHKJ{f)xm_{f#Kj2ePVq!Tl_vgRW-BB34=~4e$jCtE>*8izHz|dLiI#_UinB5Y2ZZzu>1|auS9qDsjiAJTWupd+U z7cVZ#y6`aJTxeh@iI;2!D>2YoFwBoz5ABJaD9@Spta9{SfvFQJQAE_zLQMA1yL-s8 zCi_f8H!)LJpPC#kO1^IhtQ0E`V7fG2BzoO&$i1*4#Ta$exaYJmKC1AsK_S9b$=1pIkXJ@Mq?w9{=GQHIrEB?TjqNOCu)0M->r(!=JBJy!{7I@*@N21_LOS zW#x?ZqEq&_!xPm7-`nyxGT?ifvbQMmpCqb?X`x5Nd;|GXk$%GsBMBm!3&wTiqJ^Y* zoXKGpMgld3-t8iFf9Od|nV0&_az1JdX?3$W3@&L{>_z@9ih?YI4QX2B6Pq;8x^2QZ zwoicEptnE0lVRZkY1>Lg2nj}|Iqr&qVe15ov_B*73k!-QbUJy`7o4+{azl30eeFnkW^A7YA>D@{@St>L5Ued{yS-L+AvC#vQ^gz}WyaxcgsMEL~ zFKpKBQX-Hg)gj2z4-2|aLrA6OfKpBsZrBe&Tz@oDredW<;Xz+{c=}8k)eX;BI6imW ztz_mQsV*kYSP@1^*c%(V6jYyqUW*IarJtw3JU3<%CMnz9+s}BEdv9k z{F~osRJ{MSBK$AT>HjWJ{NLXk?@oN%ea!M{{Kh1?J%$Hz zVvh*usqeO0`BJU-+_xrPJgn6vR09A|8#5aEj5+)iWyX3AdC+h~9!lrGOxiM^zdm9O zm$5fBY6|hNt5o1|70UE+m{L%l01?B<$l1xrPM)IwM9H!a-)IX?3;*yDefu5s<*v>= z$x=x>FW}oBhRffAl|{+T-+FvDIYQPAszZ{S&7eO{t8)O&N9yE1pS8Lr*sGUe6G8uI z75ZYMaz%7*#i!w%I|s>04yEesaCK?8wz{196MG0iive%~?BG1z!Q!XV+|z9QpYGiM zx|kJZWc&WiZ`yhKvq_K)W|uu@=@DEWE*xtO(xP-a}$hRV{fmh=-3#F@X@&|-U*#RNYGFT zit3^ULC8;^Cs>e*{DHuzox)}Ii zp*WrAOOs3G01`f6mkYQ1EV7|a%aPhnt)q!>SWtJzU*qb7W*)8$CB=yi+g!*HbD*WC zaqo(;d1R%)b34XQGPLJKbU5w?FB9U&oKFn?N`3;J_t$gBq-U2I*TTd!n=T(jg9%EySQsb#i zsA1o(RbDpMt37;&If4Z^`9-NfN&&(mqi`=@Q-34(DG`?7!_9}e+8eh{M2za5*+O@B zo4M_aE|36}G9_)Z(CFkSu&B+T?qyKMBE0 zYt@}@A17%K6>Yoyb(LlfSh=@?hI5%SY&BJD$kv}RC>aV9A+u&{yLGp(yZ3a9U8OpL zk(dr4UPYv#6qqeHHMR|A5D1wVqjM4+I@{V0ziA1*Frx;5(*90ILUAa+oug+jc)1Ol zdDHd7VLj<0)AK*j?6~^0l=4b?mG?3NiIzCa>am0{W6pbyT`X#9#P(x`wDrJIg%on3 z-@|=DWjMI)0X4VzqHqInPe)bm=S~TChB7O83*?nQ1&uR8Phwv6RgZf8kTo_jegq0} z5FtBJ3ayQ_q&<>{P*lz#E*bV9Jki%uQPP32)l@p`zv~AZw#Zrudwcg%D-iG1)CJ@C zHON5tg%vL8Y-Uryh$3?CB|%n(oHHw{r*;U0>mJ%f5`$w7HE?N$UJKpDi!^h~6Z`YI zNQ$~lRHP^1F{#kC+GbA90d$Sg!*Ih2f1U>=zdH-4cqcmCPcDB179JgD*N+xI`w0dj zs>6l2gEJ#^(YQ!#SS6r7t~*%@FT()O|Ab;|;xoi%rK5&XYeZZC>5(%6u=Eg*}IYb;d<;j#N zg5n8wpFpBi8jl83d#t(QZjm<47@1HWdyF*lSR)GVPne}xnuP4iABQqXfuXpJf(hEI zd{eC$IcU3qSvhH>5Q{LjZOX*eUMpsno0At;%&Bt69GHZ5#CUWHOyA=%%f8&)r7Ff+ zW^67VjPc-BWeHKl=FMDdDUxnuMp$Z+KeY;gj5yt__hHhnu@zr2+P?qj5%sb$7{`y` z_yFsKb^CmAieL_>GWWGLWgTBQnt#-IMiuGE^Yb^;OS0V|kE34~4<^+P+`OJ+SY~5} zRa*1(V9-kA-s@>;cHW-ODVHF;0n)!HN3T!6GIb~k*rG?18DUDlj!%NV{`Kp1+{258 zmpNR--+2h;*ne{=aV>9|Mo?nPRlJF`W(vRL&A{ncW4qp^O5J~27af6pKc$LlS8{P> zWCbFsyJDLLM|6}sp+U|S#}>loaB@Ow8UM@i`tW6!UA8=`IItcC9wn}D;2d?$}^SxoK$4#rX{$ex1U1clVmUh#DyIDYWjelROyQ*mpTdOkGS z4Yz3>AgSZ+GQFFTm?C4Hm0A>dR4M)m1|(nt&FQirm-WHft~V$thw1K_qVB`XUbp2M zyG-+^BH_lp8k}geBwZUh$yc3_uMUE8mBw)6LIlHzKAe$sO`u?#Kd_(S5%HR=YC6!e zapIY6Y~p{?=@}RD38(QWy|s8u%5okkdAl=WHg1yb;gee4=%K(m1CF?`|9owk@EE>( zG@G_q2w$OQG;A~yQ&di;uo~aw4vJMZ2DP-+5XyA%pi1#3rnlNP9Qt@U7@pJj+5}<- zPjC9!F+!^YJZ?U%+*%Zsnur?=cYMVCeJK5&^wPrz@)_j6Dy_L*@d55Ij(qhZBi)B< zbXZlwmyP|jhI)np1lAGCJAHNO)&rxgr`FvVg?(_5H7>`iG5nIh)`L5a4s4Y8jwf8M z%kZp(9b2rCJ_~|gbrOw1+v%{?4R!ZEwlVS-__o?!WZ85!gVuYfvP-$g1FPaf511w6 zDgVxHgCM)?j?YgvK2YxAAP=Rz-4uhH9q50eo$Rmru9PA1h24$GYq9ETML_DTM#1?3 zf0@p^sfJ4`O-9o6MT&S;8;)(ve7}t zE%wK?%}s)1-G1}PhPd5DzpP1E!KKH8KJRVijrZ?Q#@nDhP384dv;AG6ij&t;1Kz0PX~#@jkE8r~Xa&h26MU#il>1A~-d)R%hYT-&sPp-J~4J z`iPZ+ZVr#g7#q)ZRzcaZS&HjoCW-}Yb7U~DKA|T})AM$YK`i(EmA|6SEivk-KDNK= zQ$<#ma-QE9@EY_xviZfy`L~htsBh2X@Q%AaD2Z!GM}lc4Tigo3)S`(1AF#90RO^}y zX^*P2$v5MRqQr8WwoHew>q|sn#qc##>R7`Lb@TR+HrrFk!uRKu;U->_>L9WTm7})M z2hK?ek6($teA?~Y<1>PnGmMw6D&Yr=l0V!(=qi$J4Y6n_&oqnhGVl^$%G{5i;56&{ z5}J>Ubx4$h$E3kHc7Y5#<7z@r4K5yxq{7>gzE1bLNR{RM-*h32-|S3lGBxZl>`B3| z3$&We5tM{BuH7)~x~V&@8-u@Tr+)MuSXhp{?D51OT;6d>_IFD9ch%-&ycrlYxGPdX zP)za%P_G+zaT1%d^YT(EIW{j#smCGSOGUv`;4;jbG+LW4Tmtbp_en7mzWTB-uwL{Z zy>l{6B;Rsa1~n}sNyw7h+<5s8z|zrpe7j9dZ1~Qc}4Fdg`wp?kQMu)h9bLlu0%yuXTbkJ85X1RY3ZH4l%E@yu*~fEi}4>a}k# zN=F7t9JnX3IFP1$gz_yv;Km<6XBZykB>jWY?9R6=%&#Ctu>NWCquBM^j=`SxMsJ6& zt448B8!%48m!3^UrodW!O%A3rTHcb~&*55@1(4s*H=4X@XZW`=BeeE$4J+D{ClLYP zn8YzhkYA*aHj#IHXePY;y4`~^QF(3~3SCU9eY}CnT+*p&PNg13YOT^27A0QBHPKL} zJNw|W;lE2BlPT}MuP-KmJ)URfbnOp#f9Z4oq$kc{GG_{3kZx9NlDz|+Al&#U$1FI2 z43V2y{tgO!y}fUuLR!^Xl0OD?qEc+!Q+(W(f30GuS6WR(PWR^oq((0O8 zS6Qu?RE;jtShfSGKUqixTra0A%WDGgi5lOuq zo7J} z%I|ysrr_eC`TWe2^Q=+-TzkBV-#;QcrepPzr#;@Ct5+tf++w9zZK&gI;@w$=oynM- z@&N$CiBBr;l`!F*S3LhGT&_H%!*URX;gV2aRI&a{{IyZY$2&$}qe&zBUS$SR<2nNc z$Lz5^8Ra3^`vF=t>!67EE+>LEDT8OQBS!~E(R)IKQoY7$o^+eW$amXw86dhI{dwK- zdjek>^~jJ=^B;wNZY|l>l72Jz1A;9LCZa)CwKmiA^6?6&)A(k2c_QAmfsoc~m!P@IV+FoKL^$d;(ggcQns4*}{=GJpzJla0eOu&^s=jDA-qdKo zQ8b|0qIFJHC>*4+z-LyXs<~=j6Ol&k(HzeZD>fSt@Q#oq;_Gbk$ji%BwE@25|IdWP zd?WU!fqCpFejO5L$7S1{RHLcr4{=Py;Tf1#m%cd^KOuLNjG^E2o3+o^U)-oVr?05|ZwD$(9mb33y_0<=K5$-$kj;5aO;~`->=s@A*fUWnn13)( z5ToR;)>cw8bSOW+9?R;jr9?!D7Wg3Hhl+|q8&k!lusP|tTK&S3YBYU)X$`cH)552> zsTb)#dA~7^1(X_p{p7cMbG&80nab1`)Ln1h6L54`YvA)gJOQt!8RR+A7m2JCPM{qT zjN9p-LH2xmVXW?4>6xsj#?_AO5(6V^FnOk$#%A)~d9fLHl}3YznEHJG$*eDU1-OuuqGU_9vHj+OaxGBE1YV9 z@f?@aOx-1oxmOF6j91Os*yLMAv**HD-KeY9{lnukr1XqI4&akm14koF%m6&p_lq~j zv(i%IRNbA+)vN*=sQQGG1?s%?^^KL1PNSV#iE2D?YYNxa!3jE1`WaP*`u@t&TKg1b znADRw0bDleFvBFNP^L`nhgujHcUf*${m-adSPhK8ML@ZlC%J4Y;Od#9x<~)-pi8*l zD3(38bW>jAE*BcOl5N}Q$)j=fxq24rs6&ea&pWdlB~sw7V+i`y7;;Ml5e;`wNSMV} z*#b*wM7wz#ncK*1ZCmnE=c$HsU6RLXOnQ*+)0J>pyJ5&}K(Ko=9&Z2;&hAdfKJB+9 z$Q#8#rvS#Hgo)vrtp(f%yzo6PVmL_HHgj1@%W)4_1?xH!XpUW=Ty@R(ybPW#MHL9f zw{2J-66O;*vZWYWEzTPVj{_etHiJDpv%9iGDO`2l))Zf!*f6?Xw-os7ME>`?K{0!67P>U)% z-ujd)^DhaRr1hAEpIhGcs}ZCxLEBlEQr^1Wl^!*6Sb_S-J)X-W10tTi4nB7^iHyoB zr9*F2SV+z0&8SWEMQryk0^5=tR3z=!U(OPTfTdcm7FEZ!T#s}ZRHfHf*5fpoK8i*{ z@jceSIvdQY$sf)+!bsB{^;~6-_-)ggokcLhV?Ng||KiC?>4)V4)hAaR4qdOSOR5bO zq_`X}+1`^;jo%Zn8){|oxa54-XF;1huo`$yK|3|-9oT5uI-0G|RadUMKzQ=|Zm1tm zqb|d16DYP@2dR&| z^d3+Q{`+GkH@j-3@=GEXVv!h6^pUak;&R^PU2^)7Z&A>oi59Z zL#5jD-HF+QPfEGTcN7oAA?mM_)f3mBR>5RfJTt>ytQ%u1dk%#} z-5zvjI5>QKLbq+_&A5P~%$9KS%%#b^P6lE16!o}1we1+jW={J}}3 zRL4%Ps5tv(SqC-WZ;Km|<4vT$Igob3(sG>eYqw3VUk}+A`D6;_3nwM{2{f#&9wYVha>?Ub zdBf7h5rJ&2tpm%5_Q|<6{a5u>7@oC*Tf7Ga>(-(!F0*#7Elt;2)~tu+e8hS*cCO^z zwM^;gd=|FCyHf&#f9GG2op%%jx}R~4|1l-bcQJV`-M&r}l2}P*pP|4>-MLa6Zy%c^ zJdw`9xf~(qkF3z5fupj$*2NI@RCjVW$M30zpXbwP2a3IB=&?yzT!YU0Nz0bq@e%~O zo!1{x;e}YW`GMCz2EwBAQub}iR*}NiDDjkn#X1`?yRdpAxx|)>c|UqoA!=Eem%esGdD58A4Y!F( z-Vw;cxEj6~NH}7|Bw^geB_Z~t+KOKPV;lL@1gQwsvvz|`h)&k>71}pPdm86a$h4=m z$KgDugTtDrfQhR|1XMQQuDB~Tc(XAMe!9_$h@`a0WuOc+u>Di&I@yLcf$4x&lcM$~ zn$G8ft*(AkA(g2VGyDHgtYTQ3Nzv@7IdNu{I5D zSHX`Pwe(!zm^edT1DT{BS|(*^5-u&X9~Fi1yUY?orR2oePj(87PI7~W7}eB1`jmu| zIz643P)mkGHAk58ic=VUBHQ$e*6AiS-i9Gv;@=W2o134S`r53cf7B|gC*33?75ZsJ zFXKoPWY|o2oM%?R<2X5AH(Odb`_hC-Tgo6FGgSA&_afrB<}diWX`z-sA5WpDjw3|8 zsXnsBzlmKj^_jTWYu@i_ckqp9{cz+F?pz!l6(D@KO)$5F-Q>iydgTl&MeqHa8lzM3 zHL#wim_dia_{xPhLH#;STp2f>@N#BhaE++X_JVqkOZ<{sH*Z?$Q|hpMYV%WDM&oR2 zS>~S)y?I|Zpz5m^8$GrgyyP&t)t*4;s@Yge(yHIt%`hzHeW$9XAi0L}OZn=LcH3aw zbOTl_4yaU{WY1zP{pG3W>dJ^+N*lzT;>WpYuy+1Ot>lO%zDsiZd{3j=-HZY8beltT zX@_o<8D&_Df2P`jR9yKR`$cb(7_;zW?S*$0lB=-zt_!2zetjq-I@4&qY=TuQ1Zx@l ziY=R0Zd7vcZBO3GO_ZsliyGIQd7paMMpIBT^&~6PZ;pqPYVj1dgEA(m)HJKBr;^_I zjabV1rm7l`-jhCQh5|x0uUjtdk~SnIKTJBnC2N1tcyW0+^q%nG*W;ui{-beRmh7wT zFjFyorY!yXWU-A|NEP8{(?aDBzQLIk@%q-qPEaF`WW zF+RmNR~}z46QKMw1)^yHfIt=iqgP^zFiI+PfJx=MHcD?*HotOs?((OJ5`R2_nWJ~r zCOZK%Ju@@fmX${XG1YIK>C1^HFb~pmbo)M`Dov`|omTLiAdxX^8S;t zG`}cUcIDz9Kvrf(%p!A%m`F=_HR4#xcIhDlv9r$YNiRL!=&MkVw`^L;)N>E^DnW`*d2B{-k50eE{7>2GYm_G+x_(Z{B5v@ce-6NcDXCQ)TI zGf`%mW*{@1kw3P4V{adn38K?{*6}vBYHJniH)NeuD}3fB)X8)UZKWtH{xhmR#SpRn zW7DG@VT$H{`fZ+Ar2qin304a59}tk7T061qI!9@LU23PfufrcTH3S*6v0*;TKSpb) z6-Lph!N4|)Oaj;YgfR8pgqL_bR=qxaaMYv02vwqe;mF0oktMo48=X(2y3SlF=NF!l zmLP{q(0T)3$^vjQlB=c-_SlPNpXs#iI9xw2o7#*R7U}jSj$oHc0NY7U9FBaEa<4bJ z>{exJHGf@K<8lFZ)UEz3R~S_%o~GAjl;8O(%eaT)e$0X83wj^VMa1njpldS=iC&g9 zulBQMa%&BB(rGmK^4EO3b@V-HdVmo;U* z@m4SNyBUiPbvH2H+f$i8H(~vdry&ayhj@JHpVxj)uC#CfA@k!pthk; z;(cg~@DLR2pX861jQz9Bc;(-O_+Ij$Q8Tq%vfQ*1 zPRX#_Z$C(Y1sg!{G34<5*t)r}gI=Tki`$_%aJ#WhlQOv$%%lQfiN69ZdVjCvZps-fw8(;zScNkVp(&g*tLar6M^QF0%(jfA)S3+R(3-Yt znuNzk-zD4(nqdo0(|iGY782T%2>8?&U~dqDr(*l$qx58O@2PdZ?(b`b?=J%bd{ATT zTgAd+)d2l3Nmx7}G?SIZOUlba^b@Wb&A)1HJ}rSo1<1tI7_HzI7Y4K52h`hI8lj>{H|@QlL{DGYXixoXGb^*;We6*pJ7lL|{ziG|!=SnBQLVSGn_i zfKlFLX2I}<`La+NK z3cg&|3m)JHXIeE}6IU9j))vqn_`4?>Uc&Xa%AR>n@2kZ7JS^N!JIT#D`{FZfzj8?KzmNmr=% zNcL!++o*9h>{9s#+N`MoeL93Rt-QB2<#%#(4zue_RrcU@d?8FpFJ56auy_=cNf)EGFJiKw`i^c6a} znzFDMUIIV+c6?)aBZ8)W1OZkrLBf|aJ2jBNg4Jm<-D{6$i2EvTo}E4>q|Pe{SkopB z9VD3x)jg%N`-}z=Do^AqnXbb2;FM&T$&^|W3R4}H*JBFvJ_G1VM*)b#ut-msBP@z< zmeQ}Xq~l7#gx0#l(iY^g(q(&vXCS-8d9bD}mn~&EFh;Pj1WOS6RfCF{u0dW!`2}Pz1$wn41(A=@gc^?(zS;|16vVCG&s8p4 z0(=H|gkkX|+k6uD>W)W%$F>rl4FEI|LWxUZj5qiRg&}=k1u96KZoh>nEd(on9%U+J ze09N{gtl50YZ3Nh{+j9IKY)XpkG)P6USw5R!R;RBUHqGW0D=YuW`RCw|I?-5AJ@Pf zW)ob0LM(89WJ3;&V727-e2Eyu_3N=HIJJjcdpi3^zF)UuJ_1WcvIIn_ES;^DUmQ9R z-WSDGg!#gfuj*2{)EAH`8#{&%z*sDK4E<92;%n-ZYP}wR<4M(uS{PoK`MB7tlDM~I zP~Z&V3yV;EyEu$v6!|Vy`~PI6Hqop90ZiPR{{f2AV}Ay${;K}#9{z-Hs1sj*H>)=I z(Bt~J^kjmYRHJM|A;{levK-XLSXB!b@{k7I zN_)(OLOM$07^$MC$Uz>vEfI)aIq0QX*+ISlu@OH)(0qGH^+EO3Vd*p_%A*vblnDryIdkLJe3)X$nEL;^aX;TzxUAqG;g# z`|p6SoO-L~JQ;BL%7jED=M(XYN!IvsKzzl(lsmlK)1~-PTu_&q0I)?k=Ef$DAI3xe zvFXQ?ac1XJko3{So7;$vn}@~_{hOM!HoPEWYp+%7#-(RW-)w4nYd6FNKIV5TK%N!9 zE?7ygXJmr7uC%u2E9g@@ZOnZ+tK}g(F|kVnF@Jj3v$6S@ze)1jc!haSz{23?ntAo+ zKR`47?&Mp;n*@bXruO2cy0Z;WW&u%T5BHx-1kpl|46|)mK}?-eqFU7}B7^A{=@dq0 zGCD@Dxa97L=c#bpMyB)L9vyov)j#9RWX#`;K8~+`y^Y|X^L8^6KqtE6aA=ZD+*1OU zWP#ur(q9agLC+UpoJySFS~8~VQwa!>Lvz#BalmHhW}iRxpHe=%y6$(@%K?NuZ>5vd z(=6HqSJa&xC)lwChi6(9hD4izUFsV@7E3QZ^L#SN_73rsq6X1Lo9H6Jj zR~YcQpe7@Wq0(V_)PHA_b6ca10)xjUtuifz;9z>YK;BQEI77=6qEAK&w7}K~Om)=a z&6R62qdi(im+E~_*(FoqD!a4><)Iji$0Ncc&@!XbOaoj^o0={)o*4aF(av@%>!6Tu zB*yh$mlf`=xGVSBee3BvnD!Xv@yD?BS5Hm;$9nEe-7$$}KSlCNWmq!~H(J{C0GQ1g z?vxi2U09rDGy;QV8Y}YMni{#+PhAcP@U7g3>-Uz8e_R-G*zBqFca@%w(7QparfdKk zv+{biEZ;RCxX+>uZj~Aay4Clg9U|LVQs^0Uzsl`w#fDb0>OD^TG6*{T?IqxuS|2QP z@YZ^k19F;-*5Da5EU1AQOE`-@Tt&f(G~1S)gjTbp6vbgG>$2;ozu}w3uye#A(ZtsL zE%T9TJD?~OvaE0PMdaEli#GURqqcVGtnZb{5~2>#B(KGfIU_w-S83E5glV^Yy$Njl zYCLYgOIVNl^1uI%WcIurITpePhS(u;5Bf(Z_A3vo9xBQwGpa+`Xv^NFSnG8bvm7*_ z-;8_iMNKB;wkB={LJ2Pwo(^W6UACY(lOpvh*cP13U2-P7@3z*jcr#)U2H&2gntAY# zOeV#fu485eSN7I#rlx0M7oaV9{a`!xoA&2z0s%LWECqR#rtMVpT+N>AdlIc}9t(JX zXPH<$-umCLhQ{NJhm5zsXxY0>d5?zUSKnN}f^ijsZk* z%bl;-MH;kXGHVy}u6gLug3gQl=+3+* zV;gm^gzRkGa^kT*V?X9iU?5`jN1k_2t1i%KXkT>8Y zJ-o6S-MxWN)E2u6Tqi5llqGrq>|vQ;YS$K=%XhByCU51IB{Iw_3Sw;f-$n=9G`Fm_ z4$}<JRx<*q}VNs<`Z$BTBrxm13Y|Y^O;rrcWO*v`QwZ;9MK@G|uV3PRLJ-VQB zIeuLYC&dK6x}M)mD#35wz5ss=(OB|fDh&yD2@E;lidlTqvHrjvyEPf$WV&`CGb!Wt ziMPS6ypD*!1$Cj9wAkV+iEw5UPYP%M(#~qTMj0pNg9P(}!Y~1DslL$14dz_S+xpO) ze}Gxfw}01vwL}@^Uo7@)3;e0*dw+SE{Q&M;WHNR#xG3D;hd$x%{ECuj9I6M{VHV&U!s=(_{aZ;v$qVYBl_BWv0%Z21?M2a z2@u@f-QC@t;O_43?(PQ&?(T4q;Bs)c4FCJiJ9Ve(R^6KU)E~NQSM6Qhz1Cjq*}q5p z1aXe7jRd#Zru9$Fu@zSA^0xl$aU#k_JB9c1*ODL;sqtwR8l{F^qRqJp^w&^kw9c9< zb?+oox7e%Y$Em40`}JQI^k6~O(5Ws)Z2Sp{)B$73eWBaNw(pXHwkp>4N(@@#>QSj= zOJk#)sibRB1#D_PXK?R6Z_Xc1^zQGgk39xKA>CrVw|NOFzD%bRY8~Y^grQrLHD=CiExT&S!h`7eY z3iEq9bsyYUWEJ9uXuAtFOG#9`xb=kfrnLdrmh0NDNjMyLF1phLH59JE7d{+I6(d3= z(;W3&!4<`|`!UOQ#18d1rb2vmwVG13AD_TdmM@cv(`6XHndHGAd)rK|a2!v!rG@UX z!SkqYZY>9D%~dt(^#UD|)t!n*X&%?-#mS!63+M^+7);1E6cxI(2dM@R4S2;|jJoIs zUmIR6Z2H~e9F($UBRuIvexufsg;r|2JX;45{cfIggNDU`{C;fC^a=I8(}(CcL?;Q4 zRm%kt4zCEj9?_&H>V7EghCuD+O+!J!$NmgHrUEV2zLo-$wG`j?3AQ0OeBF0UYNYVpIj9f3{ zhoI>AI$cg~%NX-G9j?ztzH)h7&yRDsoGgSOHH9(g&>2^Dg)DI{X`0HJVkr!BPJWiA z?EXPCH9Z-4V}E$tG5v#Z>lD+R)?+s}zv_FUe|y?A{s6mtW|3*F?2SQjZ}msIug>Qv zi@xO7PE)Lk%hwFeAL}_K%w59l{^jCgzmj~{t!)=g;Fn!tB!3Xl2myqfbjgaF0&%ej zNS*8(x?(!vgwEeb6v3{$p?8heFS|!ZtVF%_3Lu?JyYc%Xh2T2&Xb?8eX)l+Z+o;%jUk;!H>TUgvF=maG$Fy#5eqP2zSUj2Xcu zIsG1K!Jz(W#*pRm#X;2-iT9gG7=NC7DY{x+C&~u_@u%q~s7CM~M8l=h!Rh-r+|>jd z+-;%Fe|UMtjf=j={W*q}ZrwKlZ=2SkGWJN#OT(4dCX*tRRpTeTemY8$5z&x)?Dj@A zt0c<`y@42LmkE%>@ZyYn7gDUE^Ku8+Wi>wdiuCId_rSkVp}`j9%)GY839 z@+%dWLyRb^L``NY8g|h@s0xVM`JV~apqhu!$!dG61JAYwM%Cjl?k^#3?f3Wz#A(@-MK$b*Ez^jWfC>fnfS8*7jf)tlMUjQn@)wpEg% z>1%7f30ZS9Qyh||hV05r_|n3^@s&=11Q|yf6NnYH_Jb}4A%SkUM%(q~%?3N2+6w;& z642MqPuGVqVnAu83DdOU4YkxK&_3h+wMt^-{8jptF}v9zh}w?!3~Nu9Dq%cmF>{Np z35U|IJj_wh?&J%)M#;|%7D%rh2q%Q_dc)F3y?trxvu5QDZPs6=Y^J<}nIb(};mMH~ z)l5{Jx-X_FP~4jR2&Ivy9A8ixMLv7`gVX{n&yNbP(q;=@QicF4e7r}MNdE6F&I`k8 z;0JiB+itCu#s$r_4AD_m8*`e{K&u+b8#@Ml;X@kh0UxV4A0MSV_-U09_}^<~=OPDQd5 zxC+*8TQde3kRr<8K+rrQph3!z*$nEj4`Tlt`fpNPweTQE=W~tha zgX-k(d^7AO>+_CmCtNOdj-zAT*%={qXV(5|nw8Un<7zEuN|T6^@M7f3*aVHOx0jh+ znM>X5?{L1_U^Y(niy~tkYfz}w5E1%B5Y2F&Xpk1YnQLb^w}WUA$Abt>tmrq1@jB9< z;Jc{mmG?=tnOv%e`0FIC%_!0B*S+ZT8a$|eL$j}9HoTvBt9)bfy(p@{Yq{bAGdGau zFcMK|r}fC6QBKXubKD-xh7MzJ7dWb1!`#X(SKn6ZKDUAChhBq#jB-o2cQe5`?b4oU zAq6gH0p)ITwDrUEcc4Y5iDp-_il`Fi{!d73vsaP=_B@Lph`&?T{3a`7$1{R!PY++& zBXMf#G@2>6tHIafo#BSx^&8eQ**&^ljaF}Rs38%z1X}6^yF_zM22!vDZP1EoJ>F1*{udw=pP;l?u{0otTlh$XSs8 zHu##9aJDYrEFxYWhtg_sf3i@g+f^W5Cvbz(v-4nxmE^qL(w4wYYczhM_tT~;?YoD0 zkv`|rI-I=4E6;L!tWuD;1JD;^$|bpqJ2IO%h>^B_? zm&?Iz8meBq?#769^~pw?G}Z1z83QJBRl7rHDOXi(XBk%&UBzT!B<=`jv@v|NNZtFd z#D5S2TYhJVCa~ycP4&=Wi@7EbacAqpQ<3II%P(#vru$!pYXA}IG0kM6@pVGWq$TK_ ze{g;t^=el#n(cwe53&cje_YjRQ_YJy(*FQUfVsE2ANEU!8tNLrikTR_w&}rhosAf7 zVhkzzg+daw!yO#W-*Di?N43vwviI+${ehlL(Yovb(c!VCo_@~I9WNU^1PC<9+N+iihHf2RUy;r zj`O#JwW1d&T<01i*QvVd9@*88+xb*ToA~Zl)EX^JL?`fn0c*OSLK8GFAW+V@c!NeM zUWS|++nt-lON{m4Qpf3AQ&sbsQ^}8k_m&DuwUrh6KTKo>&J}D(#;b!xMKsDz)MH~q z`Hl9-4pjgYUX&WAk`eAeyD`ZzQ=AsL0XtNM-(Kss+DjW~S6$GGC-AR52c5qJN}aV= zXET?bh`KbbC{)IRDr*8S&B}U`%}yv1(yPBdrAc@wArf+OH@r4s<2M_d*s(31d9vSX=S)ezoQz2 zHzNN~J*J|T>avyBd(XEz=XoJEO7+Y8`fNg#-$+?ohGsLO*_M_6dyPCwBDDtsXT4NQ zteK+2N#zef6UySnBItUCLD&Wd*^RXjI6OX;Y1CHiifra2^l4}<9PHg}^CeUZmdUN* zR&9b7wtQ+rT8jL6082lbKnQGLT(m~!2@LWn^kSe*#FB%#0Sr-ec?3;3Nm~A{F>WT; z-6W-HrPUE`WevkJ`GM_LY@(W|fv-ZR+A4=9%xi6Me^iKPM;KVv@6O<{;Jf<|f}HJ< zkWEA;S~pAsL}`#&N3y9vAKNG%S*6rIoYyV_64tJY6k7%4kSisKB_brB6n0<>(msDm zbXAWMfMo<`S`Ek~rwv7y^<9_78gn9hIBIogI1#J6GgN1t)Wu$ez!cv)yjAXrPIvmh znErD`NAwavR*wFe(420qvKS@?b$8um-hysNYkA%EP|d43x-4fMony;U2IF#bW(j2* z2MdYLZ*V1ik^^zbB+C7i!h9!TS+Alf#=7mMRW{6?6G{t($B()Ls8SxM?L9{uD#LhXhhdKTD#qPvifB69N~f>C7oQ0q#anzDMC0ul6%)W{ ze}O`XrkVat-%GVhZ_8c9Ym3sTAPI(LXeHI;Sm(G(PohdMzA=p!$S^a42>eifr2K<; zf(`iORj-xTN8a}w$|vK~xF@^weYNo-=o#G8`UHGurQp4;c#C4jy!Jgv1}xQxV>>sl-+NJI-A|v&O~M}XpO$Z`ZdEt)K5wkH#bWa|QLfDtE3I3+ zt7%#(zgkg4SrHlDm^9VNvGBsB=V6X@CDUCH2E{@|D)>`=*iSxr&wH@eGq_go#@@q@6Zy5VEp|M2L*7hBwz)kK#QurP zaH>jh3gWU5-VH<`MPyYS>-oFp7|DSL*i ze%yGMW~tW&L>yMfTUNAC-F^kSsf-rJ)s)ZP4`q(lKT2GTU|g?K62%j;{+KFeRd@LBSX%jCu{748%eRPl=%LG*niDn_kMN*OPqO99JeO}`zp%_% z8XYK~65@+?yT}2vRlJNK8WY#!s8J|keH6J*{AN56ja!_fux*#O8&+>muvu?69qkj{ znE3i=`|^YOJOxu^=J}4s+VCU-?IPj@dgaNZ4oSqAa+lRp7ezj|%5U20s-KLQvFrHX zOIMb!s}-0_(=5Bk*SAkc*&@;gxtJa;yO0HgL`I=h3q%_sT*eb(!mrS&0wMvh|FOvW zw8|pNCm}tAfj?JcLsb}Do^b+uXt4+pTOmV!3KypcNb3P@)cMH7TORmxFGQQ6yM850A~F{SB3XUAHd2_6}Le0{x z_4y?K{#4ei8+ei(8(Cu}k1MyyB8#`(Kd1>G;YP!*lAf^DH6-3vk;;r11Ruh1F+g4? zD@5t|&gRNl#EQFJu00Twn-O&UjV;~(BCfiQVTtlG90b(N*JBTA5&jhsEw~xnOmPE( zvvO)HATO-?*~aBCJ65(!$R)e3KiVVtP<}IEu6t*y?rlfJqI6CS!|^OraF!E5EmJ;c zJ*h1!KH5?$BviYMIAC!>YmlWSn&>?AT?L@7O4UAEe#lI0^bZ36e*4#}tP5N9wg7e| z&t}c7k*+}rsMgi(TO}{Ugtr)waz~9Ut;W2}D6_^)LKUmn;9I7haq{#RBVBh3RNFj@ zuS8OIKGa2S&eN0@AkrpAt}vYw;18V|1$?!tm%{~GWeZD5s$-FAxD4-XNu9Bg0>C^J z>)fLGS7f3!7N}zNy)|ux{o(2JIk4)kJQM2{D0(T`j=gsS?@R7w@#fByaHqg>opZ5R zDsY{(uwrmv{qz^DG8I)4`8c*{byex{CpZ7L=5q_|bWJKDovITTET-1_#^EI`hu`{; z`+n`oI(Lxfg2#Ym`JDbawW%2{TleT0VHu01CH%chfNI`IADNbxEvc@c)s`LFA+--j zpsi)Q-yb{C8)2mzTB7P3oB%PY;(oixW|D2FYZy zT->eKX=61yjNd+XVAeUa39 zr1+8jXDszkd2xJ}Ne%M=!^t(cQ7Mv1DK+Z^PF7V(6@&qhQhXi5!9W4YdWv6!bF1A| z(vhX?v)B&k#ff4fKzCE!TaSS#!y)Q4C<#Zt@^n=;0%a=V_R_~=g+ z73Zp~Hs2JFgZ9v^+_SKJrrU^IvC^Dx)U&!yzt^N`Jh-2*YxmWoY8M|=)LD&amsO?y zK;F#O;^tLqtF>1~1B2LAV!)CsW=V=TXva^Pr-!q|&VCd+>-VvXC@?(P=FqN(<``Q8 z)+>xDuqX5s8dYFVnM&D|&lcf~Ci~`OwU~*5qVZs#G!Lz-_D>J$1jC>VP{C&D5!-eH z*k`KQwvshI)8!?v*2u=`{QjXi1WsIu2q;@iasa<9IoNWAre!e&>*hHBBQ?wSLAHMy zIoGaVPkZ%upKQY#&eYgR&R$VlXla||Dd(qnH;aBoTgS2{DN~KF#wcBJvXO3Wp!nfT z1xud+bApgQtz5xo+(?%Bbi%h_v&D9OrIwA*PA$)~NPc{&rsenWuq8dTL5N2c0>{YI zB-y5JRk4bUj4&aV)ECt+SRyCowxKG zQi_mM#*~60WWm!d``n9?A8p?rIBCB&==_W_%u)A$^l^&;#b0Tau4XrUz?5xP2{m)U}-IuR0IbCILZ;zkpPAy zG>GmHD8`rqD1QBnZDsKiW}GQM3Hm6Ryt{@`nNV^CXZ?llAkm4J!{hXs(2l>a+TG-c z3VuT@R88i1&OTCr6vo}Ajy5C$Uj8HkLf;pR_Un^Sxj>-gX~Z4%Ga3Q^X|!2uYnnaLNI4 zyT-1N-&{`rGjF&GKP@XFA%E0eOeA7(Sl!%0*-9R!s?g(WF| z?H0Svil^{Ov(Gk@LYd+in_;!!$XbOUfu+f&&^W7dyNfsGkVvmqc&!tmFu6Dk#GRw$ zNTdTA^H>|d%B`w=$6yWTO6R3H84p4Z@Wu+(N8&!7S}8sh_e8=J-A#2!Kz&G-1wfK$ zl^mjoB>`xFP+p~3j#<&2o|rs6{*BLSW!aT6*mC}LS=PkJRCaM@DcssXC*fkjH$P)F z1t%dy<^Xfv#27(DqNX>MfMeM)K9-_to|c+pn)R*oQxwWjE3u)ZMDCdnV}xji(((QlaZ96|>pF(wsr_WD>GxOlXv24kIX(R4}9x zYm`;CbB9jw=ER;;WfjV%zQLk(VHF*`&;2BZN|yrV3H(M&vZL!S(MVVIYcf3&I0uDR zdJ*uaUm_g~nXd!2O|sFJrI8NP(~a3)uAQnwA|W;}@~)q71_Aw)q(A_=f~U_X=VzqQ z*V8Gu`IR@8>@a9@7@2}a73Se%qf!6_e+|S%cvv$M-(&*iLrnzekF<*Be7GhVxtIiH zl)0&7Csa6Q6ycd^fO9!KWUPZMLn!+WW(lLPv^|mmsSIMos9leqk5AA_IcnO<^?rHV zi(!xBQ>Py$KhDstA=bk3Z$tMufGr)wpJY*kFI27;J_TOkE&PtGkpXSC5OA`duMzfk@2Dr&?jK_ zXVi~Btmxzk>T#)&-kBlC$}I6#J4lA;Xw+Vnke%W1s4hdKFQ{k2qhdpLCm?AJdz;RVS0qUAMI{uU(04U} zO~dVZpkQH%jK3gDKZD6=mFd?*LlyWRq!J{QMAvc<5QHKH*V^E9w2bpE%X1f&T(+iKfEWE_|v+-DEYp82PS0`1|RLw@rQC zdY*l83Z8H}-!~R}z4(DIxd~hMI90r+kA1>jCwf`O&^w-h)x6=KQB95rjHGhmsD#065e zXeJXJvJUwR_kunxBrnk}0#!&Z(2mmUD=jB7tr15*eYiRpaIT)7#w~-HU(edGgCF2DV3aQ9vExX$Li^tov*hVjp4q$@%qvN2{;b_ zACMNdp9`aX?%JGB`a|vvHdoY2D|<39qo!OZl5Nfrhq10)oAb7e8693RFbr_2CWO$v zln~>j+0!3Hr^R6X0S$%G7%6}CCE5^M&Wq<&$^8dJly5<6nG*Za_cj1x%jTQehRg(6 z-9@p(7{>^6!;xxp0BtL~qC^SW^G$-X!vd2ftF>Y6WF`Z$Mb>!~nC{$kWdQ-4W4u~L zRC_4;$CRv~m6-gZ^_>%eg9iPNUWrVewNd35v%z_ZZncK>ap+$W_$V@As8U6Gw}xQ# zv}rr{8|Y>-*Dg@jhig;>CfP#W{E2I8mFOHRP_*;3-CDg&nC|3sN;4=V#qC2#a6fpm zYf0u%PIShx(e`Y36io5D^Pp;hGFjI>QptCn)no4D^XmK5lXq3Le6!K0ymPd*u|vzK zuva~XBo47A@JHoC}1I=o@n9emr8;Lt?w zYK*JtjvpU4zBv}>|EQX{O%P7iNUr)iEP-XRtV(7^+eG7&>{FyFH#t?(>hAeMsyo#L z<|-7{wnkvBqf+_Hx)4!zEF~+?AEQ=c#v7qNT~HMxm1O?YP9Z|bji*jVvIQvsYsP2p zk|8K5r&zsH2PvO#C0jefzThmP%|TUz)-KGcyLLGVCSox{qU^WtOXl4H=a5@+coTj* z`PG>J`ThB~TegmqF40)Y#i`ISMhbpjhG#*|^XkcgrD9X^TpALnsB2KS(Eu}rM^sD3ZR5tHsP`=5-*F1Qw{Dwx>wdm*J&ZNJ-(PN&-NrnlE?uv%*>^4r z-=DgPwY<4=u0K#ba%;txKM3>~nSxaxBfCZ(Gk!A`aDKbe-)-CCw^MM->-z_x`-cA{ ze}y+eXmpR$kE$a7lD3>1aO~TBPu^DG(UWj`+6LVxSz;N$4Pe(N8^rS>Bz zu}Z=l>Phu#d*|^_C81iv&Kva;yW)LY>D%}Fyof6|mN_8%Y**9^dr5oK=bNkWs=+Pk z=j+$QI(_~+>9h9%VTpK=^~CZx^m_2Jv4}$pYTG5Q^@Te72O)6R8@g3@&tIwcL{xp( zt3`j(6TLvBwPC#F^8S(2e4mo5lu_^c9!aw%*CJG@VzN_>7CY}lNV2K|D5u?Nm*`

-PiY8R5Hi(qJL^{#xHyUkNQBD;mQX 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ⅅF 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 Aga7~l literal 0 HcmV?d00001 diff --git a/pubspec.lock b/pubspec.lock index dceebe56..b0c59601 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -886,6 +886,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.2" + pixel_perfect: + dependency: "direct main" + description: + name: pixel_perfect + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" platform: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6836bdb8..20a703de 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -61,6 +61,7 @@ dependencies: permission_handler: ^7.1.0 photo_view: ^0.11.1 photofilters: ^2.0.1 + pixel_perfect: ^1.1.0 provider: ^4.1.3 purchases_flutter: ^3.2.1 quick_actions: ^0.6.0+1 @@ -104,6 +105,7 @@ flutter: assets: - assets/images/ + - assets/images/ref.jpg - assets/animations/ # To add assets to your application, add an assets section, like this: # assets: From 28122a90cdfdbfc266d81bfc82b6ab3bb0824ada Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Thu, 5 Aug 2021 21:21:22 +0530 Subject: [PATCH 04/33] update profile screen --- lib/ui/pages/profile/profileScreen.dart | 977 +++++++++++++----------- 1 file changed, 537 insertions(+), 440 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index ddb31db0..acd000a9 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -30,6 +30,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:intl/intl.dart'; +import 'package:pixel_perfect/pixel_perfect.dart'; final GlobalKey scaffoldKey = GlobalKey(); @@ -41,16 +42,19 @@ class ProfileScreen extends StatefulWidget { class _ProfileScreenState extends State { @override Widget build(BuildContext context) { - return Scaffold( - key: scaffoldKey, - body: BottomBar( - child: ProfileChild(), - ), - endDrawer: globals.prismUser.loggedIn - ? SizedBox( - width: MediaQuery.of(context).size.width * 0.68, - child: ProfileDrawer()) - : null); + return PixelPerfect( + assetPath: 'assets/images/ref.jpg', + scale: 1080 / 411.42857142857144, + child: Scaffold( + key: scaffoldKey, + body: BottomBar( + child: ProfileChild(), + ), + endDrawer: globals.prismUser.loggedIn + ? SizedBox( + width: MediaQuery.of(context).size.width * 0.68, + child: ProfileDrawer()) + : null)); } } @@ -124,14 +128,30 @@ class _ProfileChildState extends State { headerSliverBuilder: (context, innerBoxIsScrolled) => [ SliverAppBar( + toolbarHeight: MediaQuery.of(context).padding.top + + kToolbarHeight + + 32, + primary: false, + floating: true, + elevation: 0, leading: globals.prismUser.loggedIn == false ? Container() : Padding( padding: const EdgeInsets.all(8.0), child: IconButton( - icon: Icon(JamIcons.pencil, - color: - Theme.of(context).accentColor), + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.pencil, + color: Theme.of(context) + .accentColor), + ), onPressed: () async { await showModalBottomSheet( isScrollControlled: true, @@ -147,9 +167,20 @@ class _ProfileChildState extends State { Padding( padding: const EdgeInsets.all(8.0), child: IconButton( - icon: Icon(JamIcons.menu, + alignment: Alignment.centerRight, + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, color: Theme.of(context) - .accentColor), + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.menu, + color: Theme.of(context) + .accentColor), + ), onPressed: () { scaffoldKey.currentState! .openEndDrawer(); @@ -158,433 +189,499 @@ class _ProfileChildState extends State { ], backgroundColor: Theme.of(context).errorColor, automaticallyImplyLeading: false, - expandedHeight: 200.0, - flexibleSpace: FlexibleSpaceBar( - background: Stack( - fit: StackFit.expand, - children: [ - Container( - color: Theme.of(context).errorColor, - ), - Padding( - padding: const EdgeInsets.fromLTRB( - 16, 25, 16, 0), - child: Column( - children: [ - const Spacer(flex: 5), - Table( - columnWidths: const { - 0: FlexColumnWidth(3), - 1: FlexColumnWidth(5) - }, - children: [ - TableRow(children: [ - TableCell( - child: Stack( - alignment: Alignment.center, - children: [ - Container( - padding: - const EdgeInsets.all( - 0), - decoration: BoxDecoration( - color: Theme.of(context) - .errorColor, - borderRadius: - BorderRadius - .circular(5000), - boxShadow: [ - BoxShadow( - blurRadius: 16, - offset: - const Offset( - 0, 4), - color: const Color( - 0xFF000000) - .withOpacity( - 0.24)) - ], - ), - child: CircleAvatar( - backgroundColor: - Colors.transparent, - foregroundColor: - Colors.transparent, - radius: 50, - child: ClipOval( - child: Container( - height: 120, - margin: - const EdgeInsets - .all(0), - padding: - const EdgeInsets - .all(0), - child: - CachedNetworkImage( - fit: BoxFit.cover, - imageUrl: globals - .prismUser - .profilePhoto - .toString(), - errorWidget: (context, - url, - error) => - Container(), - ), - ), - ), - ), - ), - if (globals.verifiedUsers - .contains(globals - .prismUser.email)) - Positioned( - top: 5, - left: 100, - child: SizedBox( - width: 30, - height: 30, - child: SvgPicture - .string(verifiedIcon - .replaceAll( - "E57697", - "FFFFFF")), - ), - ) - else - Container(), - ], - ), - ), - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .bottom, - child: Column( - children: [ - Padding( - padding: - const EdgeInsets.only( - bottom: 5), - child: globals.prismUser - .premium == - false - ? Text( - globals.prismUser - .username - .toUpperCase(), - textAlign: - TextAlign - .center, - style: TextStyle( - fontFamily: - "Proxima Nova", - color: Theme.of( - context) - .accentColor, - fontSize: 18, - fontWeight: - FontWeight - .w600), - ) - : Row( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .start, - children: < - Widget>[ - Text( - globals - .prismUser - .username - .toUpperCase(), - style: TextStyle( - fontFamily: - "Proxima Nova", - color: Theme.of( - context) - .accentColor, - fontSize: - 18, - fontWeight: - FontWeight - .w600), - ), - Padding( - padding: const EdgeInsets - .only( - left: - 6.0), - child: - Container( - padding: const EdgeInsets - .symmetric( - vertical: - 2, - horizontal: - 4), - decoration: - BoxDecoration( - borderRadius: - BorderRadius.circular( - 50), - color: Theme.of( - context) - .accentColor, - ), - child: Text( - "PRO", - style: Theme.of( - context) - .textTheme - .bodyText2! - .copyWith( - fontSize: - 9, - color: - Theme.of(context).errorColor, - ), - ), - ), - ) - ], - ), - ), - Padding( - padding: - const EdgeInsets.only( - bottom: 15), - child: Text( - globals.prismUser.bio, - textAlign: - TextAlign.center, - maxLines: 3, - overflow: TextOverflow - .ellipsis, - ), - ) - ], - ), - ), - ]), - TableRow(children: [ - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .middle, - child: Container() - //ToDo Add link button in profile - // IconButton( - // icon: Icon( - // JamIcons.link, - // color: Theme.of(context) - // .accentColor, - // ), - // onPressed: () { - // showLinksPopUp(context, - // globals.prismUser.id); - // }), - ), - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .middle, - child: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceEvenly, - children: [ - GestureDetector( - onTap: () { - Navigator.pushNamed( - context, - favWallRoute); - }, - child: Row( - children: [ - Text( - "${favCount.toString()} ", - style: TextStyle( - fontFamily: - "Proxima Nova", - fontSize: 22, - color: Theme.of( - context) - .accentColor, - fontWeight: - FontWeight - .normal), - ), - Icon( - JamIcons.heart_f, - size: 20, - color: Theme.of( - context) - .accentColor, - ), - ], - ), - ), - // Row( - // children: [ - // FutureBuilder( - // future: Provider.of< - // ProfileWallProvider>( - // context, - // listen: - // false) - // .getProfileWallsLength(), - // builder: (context, - // snapshot) { - // return Text( - // snapshot.data == - // null - // ? "${profileCount.toString()} " - // : "${snapshot.data.toString()} ", - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: - // 22, - // color: Theme.of( - // context) - // .accentColor, - // fontWeight: - // FontWeight - // .normal), - // ); - // }), - // Icon( - // JamIcons.upload, - // size: 20, - // color: - // Theme.of(context) - // .accentColor, - // ), - // ], - // ), - StreamBuilder< - QuerySnapshot>( - stream: users - .where("email", - isEqualTo: globals - .prismUser - .email) - .snapshots(), - builder: (BuildContext - context, - AsyncSnapshot< - QuerySnapshot> - snapshot) { - if (!snapshot - .hasData) { - return Row( - children: [ - Text( - "0", - style: TextStyle( - fontFamily: - "Proxima Nova", - fontSize: - 22, - color: Theme.of( - context) - .accentColor, - fontWeight: - FontWeight - .normal), - ), - Icon( - JamIcons - .users, - size: 20, - color: Theme.of( - context) - .accentColor, - ), - ], - ); - } else { - List followers = []; - if (snapshot.data! - .docs != - null && - snapshot - .data! - .docs - .isNotEmpty) { - followers = snapshot - .data! - .docs[0] - .data()['followers'] - as List? ?? - []; - } - return GestureDetector( - onTap: () { - // Navigator.pushNamed( - // context, - // followersRoute, - // arguments: [ - // followers - // ]); - }, - child: Row( - children: [ - Text( - followers.length > - 1000 - ? NumberFormat - .compactCurrency( - decimalDigits: - 2, - symbol: - '', - ) - .format(followers - .length) - .toString() - : followers - .length - .toString(), - style: TextStyle( - fontFamily: - "Proxima Nova", - fontSize: - 22, - color: Theme.of(context) - .accentColor, - fontWeight: - FontWeight.normal), - ), - Icon( - JamIcons - .users, - size: 20, - color: Theme.of( - context) - .accentColor, - ), - ], - ), - ); - } - }), - ], - ), - ), - ]), - ], + expandedHeight: + MediaQuery.of(context).size.height * 0.4, + flexibleSpace: Stack( + children: [ + FlexibleSpaceBar( + collapseMode: CollapseMode.pin, + background: Stack( + children: [ + Column(children: [ + CachedNetworkImage( + imageUrl: + "https://picsum.photos/1000/500", + fit: BoxFit.cover, + width: + MediaQuery.of(context).size.width, + height: MediaQuery.of(context) + .size + .height * + 0.19, ), - ], - ), + Container( + // color: Theme.of(context).primaryColor, + width: double.maxFinite, + height: MediaQuery.of(context) + .size + .height * + 0.21, + ) + ]), + Positioned( + left: 10, + top: + MediaQuery.of(context).size.height * + 0.19 - + 36, + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all( + color: + Theme.of(context).errorColor, + width: 4, + ), + color: Colors.red, + ), + child: ClipOval( + child: CachedNetworkImage( + imageUrl: globals + .prismUser.profilePhoto + .toString(), + width: 78, + height: 78, + fit: BoxFit.cover, + ), + ), + ), + ), + ], ), - ], - ), + // Stack( + // fit: StackFit.expand, + // children: [ + // Container( + // color: Theme.of(context).errorColor, + // ), + // Padding( + // padding: const EdgeInsets.fromLTRB( + // 16, 25, 16, 0), + // child: Column( + // children: [ + // const Spacer(flex: 5), + // Table( + // columnWidths: const { + // 0: FlexColumnWidth(3), + // 1: FlexColumnWidth(5) + // }, + // children: [ + // TableRow(children: [ + // TableCell( + // child: Stack( + // alignment: Alignment.center, + // children: [ + // Container( + // padding: + // const EdgeInsets.all( + // 0), + // decoration: BoxDecoration( + // color: Theme.of(context) + // .errorColor, + // borderRadius: + // BorderRadius + // .circular(5000), + // boxShadow: [ + // BoxShadow( + // blurRadius: 16, + // offset: + // const Offset( + // 0, 4), + // color: const Color( + // 0xFF000000) + // .withOpacity( + // 0.24)) + // ], + // ), + // child: CircleAvatar( + // backgroundColor: + // Colors.transparent, + // foregroundColor: + // Colors.transparent, + // radius: 50, + // child: ClipOval( + // child: Container( + // height: 120, + // margin: + // const EdgeInsets + // .all(0), + // padding: + // const EdgeInsets + // .all(0), + // child: + // CachedNetworkImage( + // fit: BoxFit.cover, + // imageUrl: globals + // .prismUser + // .profilePhoto + // .toString(), + // errorWidget: (context, + // url, + // error) => + // Container(), + // ), + // ), + // ), + // ), + // ), + // if (globals.verifiedUsers + // .contains(globals + // .prismUser.email)) + // Positioned( + // top: 5, + // left: 100, + // child: SizedBox( + // width: 30, + // height: 30, + // child: SvgPicture + // .string(verifiedIcon + // .replaceAll( + // "E57697", + // "FFFFFF")), + // ), + // ) + // else + // Container(), + // ], + // ), + // ), + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .bottom, + // child: Column( + // children: [ + // Padding( + // padding: + // const EdgeInsets.only( + // bottom: 5), + // child: globals.prismUser + // .premium == + // false + // ? Text( + // globals.prismUser + // .username + // .toUpperCase(), + // textAlign: + // TextAlign + // .center, + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // color: Theme.of( + // context) + // .accentColor, + // fontSize: 18, + // fontWeight: + // FontWeight + // .w600), + // ) + // : Row( + // mainAxisAlignment: + // MainAxisAlignment + // .center, + // crossAxisAlignment: + // CrossAxisAlignment + // .start, + // children: < + // Widget>[ + // Text( + // globals + // .prismUser + // .username + // .toUpperCase(), + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // color: Theme.of( + // context) + // .accentColor, + // fontSize: + // 18, + // fontWeight: + // FontWeight + // .w600), + // ), + // Padding( + // padding: const EdgeInsets + // .only( + // left: + // 6.0), + // child: + // Container( + // padding: const EdgeInsets + // .symmetric( + // vertical: + // 2, + // horizontal: + // 4), + // decoration: + // BoxDecoration( + // borderRadius: + // BorderRadius.circular( + // 50), + // color: Theme.of( + // context) + // .accentColor, + // ), + // child: Text( + // "PRO", + // style: Theme.of( + // context) + // .textTheme + // .bodyText2! + // .copyWith( + // fontSize: + // 9, + // color: + // Theme.of(context).errorColor, + // ), + // ), + // ), + // ) + // ], + // ), + // ), + // Padding( + // padding: + // const EdgeInsets.only( + // bottom: 15), + // child: Text( + // globals.prismUser.bio, + // textAlign: + // TextAlign.center, + // maxLines: 3, + // overflow: TextOverflow + // .ellipsis, + // ), + // ) + // ], + // ), + // ), + // ]), + // TableRow(children: [ + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .middle, + // child: Container() + // //ToDo Add link button in profile + // // IconButton( + // // icon: Icon( + // // JamIcons.link, + // // color: Theme.of(context) + // // .accentColor, + // // ), + // // onPressed: () { + // // showLinksPopUp(context, + // // globals.prismUser.id); + // // }), + // ), + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .middle, + // child: Row( + // mainAxisAlignment: + // MainAxisAlignment + // .spaceEvenly, + // children: [ + // GestureDetector( + // onTap: () { + // Navigator.pushNamed( + // context, + // favWallRoute); + // }, + // child: Row( + // children: [ + // Text( + // "${favCount.toString()} ", + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: 22, + // color: Theme.of( + // context) + // .accentColor, + // fontWeight: + // FontWeight + // .normal), + // ), + // Icon( + // JamIcons.heart_f, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ), + // ), + // // Row( + // // children: [ + // // FutureBuilder( + // // future: Provider.of< + // // ProfileWallProvider>( + // // context, + // // listen: + // // false) + // // .getProfileWallsLength(), + // // builder: (context, + // // snapshot) { + // // return Text( + // // snapshot.data == + // // null + // // ? "${profileCount.toString()} " + // // : "${snapshot.data.toString()} ", + // // style: TextStyle( + // // fontFamily: + // // "Proxima Nova", + // // fontSize: + // // 22, + // // color: Theme.of( + // // context) + // // .accentColor, + // // fontWeight: + // // FontWeight + // // .normal), + // // ); + // // }), + // // Icon( + // // JamIcons.upload, + // // size: 20, + // // color: + // // Theme.of(context) + // // .accentColor, + // // ), + // // ], + // // ), + // StreamBuilder< + // QuerySnapshot>( + // stream: users + // .where("email", + // isEqualTo: globals + // .prismUser + // .email) + // .snapshots(), + // builder: (BuildContext + // context, + // AsyncSnapshot< + // QuerySnapshot> + // snapshot) { + // if (!snapshot + // .hasData) { + // return Row( + // children: [ + // Text( + // "0", + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: + // 22, + // color: Theme.of( + // context) + // .accentColor, + // fontWeight: + // FontWeight + // .normal), + // ), + // Icon( + // JamIcons + // .users, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ); + // } else { + // List followers = []; + // if (snapshot.data! + // .docs != + // null && + // snapshot + // .data! + // .docs + // .isNotEmpty) { + // followers = snapshot + // .data! + // .docs[0] + // .data()['followers'] + // as List? ?? + // []; + // } + // return GestureDetector( + // onTap: () { + // // Navigator.pushNamed( + // // context, + // // followersRoute, + // // arguments: [ + // // followers + // // ]); + // }, + // child: Row( + // children: [ + // Text( + // followers.length > + // 1000 + // ? NumberFormat + // .compactCurrency( + // decimalDigits: + // 2, + // symbol: + // '', + // ) + // .format(followers + // .length) + // .toString() + // : followers + // .length + // .toString(), + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: + // 22, + // color: Theme.of(context) + // .accentColor, + // fontWeight: + // FontWeight.normal), + // ), + // Icon( + // JamIcons + // .users, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ), + // ); + // } + // }), + // ], + // ), + // ), + // ]), + // ], + // ), + // ], + // ), + // ), + // ], + // ), + ), + Container( + width: double.maxFinite, + height: MediaQuery.of(context).padding.top, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + ], ), ), SliverAppBar( From 7a843fd7b29d38f4436020c3af8305c44b8543e9 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 12:56:03 +0530 Subject: [PATCH 05/33] add most data in profile ui --- lib/ui/pages/profile/profileScreen.dart | 233 +++++++++++++++++++++--- 1 file changed, 205 insertions(+), 28 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index acd000a9..4d79a6f2 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -187,20 +187,19 @@ class _ProfileChildState extends State { }), ) ], - backgroundColor: Theme.of(context).errorColor, + backgroundColor: Theme.of(context).primaryColor, automaticallyImplyLeading: false, expandedHeight: MediaQuery.of(context).size.height * 0.4, flexibleSpace: Stack( children: [ FlexibleSpaceBar( - collapseMode: CollapseMode.pin, background: Stack( children: [ Column(children: [ CachedNetworkImage( imageUrl: - "https://picsum.photos/1000/500", + "https://picsum.photos/1100/500", fit: BoxFit.cover, width: MediaQuery.of(context).size.width, @@ -210,38 +209,216 @@ class _ProfileChildState extends State { 0.19, ), Container( + padding: const EdgeInsets.all(8.0), + // color: Theme.of(context).primaryColor, + width: double.maxFinite, + height: 37, + ), + Container( + padding: const EdgeInsets.fromLTRB( + 12, 4, 12, 0), // color: Theme.of(context).primaryColor, width: double.maxFinite, height: MediaQuery.of(context) - .size - .height * - 0.21, + .size + .height * + 0.21 - + 37, + child: Column( + children: [ + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + globals.prismUser.name, + textAlign: TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor, + fontSize: 22, + fontWeight: FontWeight.w500, + ), + ), + ), + const SizedBox( + height: 2, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + "@${globals.prismUser.username}", + textAlign: TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(0.6), + fontSize: 16, + fontWeight: + FontWeight.normal, + ), + ), + ), + const SizedBox( + height: 17, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + globals.prismUser.bio, + textAlign: TextAlign.center, + maxLines: 2, + overflow: + TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(0.6), + fontSize: 14, + fontWeight: + FontWeight.normal, + ), + ), + ), + const SizedBox( + height: 17, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + RichText( + text: TextSpan( + text: + "${globals.prismUser.following.length}", + style: TextStyle( + fontFamily: + "Proxima Nova", + color: Theme.of( + context) + .accentColor + .withOpacity(1), + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + children: [ + TextSpan( + text: " Following", + style: TextStyle( + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.6), + fontWeight: + FontWeight + .normal, + ), + ), + ], + ), + textAlign: + TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, + ), + const SizedBox(width: 24), + RichText( + text: TextSpan( + text: + "${globals.prismUser.followers.length}", + style: TextStyle( + fontFamily: + "Proxima Nova", + color: Theme.of( + context) + .accentColor + .withOpacity(1), + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + children: [ + TextSpan( + text: " Followers", + style: TextStyle( + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.6), + fontWeight: + FontWeight + .normal, + ), + ), + ], + ), + textAlign: + TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, + ), + ], + ), + ), + ], + ), ) ]), Positioned( - left: 10, top: MediaQuery.of(context).size.height * 0.19 - - 36, - child: Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - border: Border.all( - color: - Theme.of(context).errorColor, - width: 4, - ), - color: Colors.red, - ), - child: ClipOval( - child: CachedNetworkImage( - imageUrl: globals - .prismUser.profilePhoto - .toString(), - width: 78, - height: 78, - fit: BoxFit.cover, + 56, + child: SizedBox( + width: + MediaQuery.of(context).size.width, + child: Center( + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all( + color: Theme.of(context) + .errorColor, + width: 4, + ), + color: Colors.red, + ), + child: ClipOval( + child: CachedNetworkImage( + imageUrl: globals + .prismUser.profilePhoto + .toString(), + width: 78, + height: 78, + fit: BoxFit.cover, + ), + ), ), ), ), @@ -685,7 +862,7 @@ class _ProfileChildState extends State { ), ), SliverAppBar( - backgroundColor: Theme.of(context).errorColor, + backgroundColor: Theme.of(context).primaryColor, automaticallyImplyLeading: false, pinned: true, titleSpacing: 0, @@ -694,7 +871,7 @@ class _ProfileChildState extends State { width: MediaQuery.of(context).size.width, height: 57, child: Container( - color: Theme.of(context).errorColor, + color: Theme.of(context).primaryColor, child: SizedBox.expand( child: TabBar( indicatorColor: From 3acbcde969c892571f5212d9fb9f8e743e936513 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 13:02:53 +0530 Subject: [PATCH 06/33] minor color fix in profile --- lib/ui/pages/profile/profileScreen.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 4d79a6f2..82435bb0 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -407,7 +407,8 @@ class _ProfileChildState extends State { .errorColor, width: 4, ), - color: Colors.red, + color: Theme.of(context) + .accentColor, ), child: ClipOval( child: CachedNetworkImage( From 336ec7160a49bec7cd895c6ab5ae1f1ef276b125 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 13:10:29 +0530 Subject: [PATCH 07/33] remove pixel perfect --- lib/ui/pages/profile/profileScreen.dart | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 82435bb0..6dd3e151 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -30,7 +30,6 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:intl/intl.dart'; -import 'package:pixel_perfect/pixel_perfect.dart'; final GlobalKey scaffoldKey = GlobalKey(); @@ -42,19 +41,17 @@ class ProfileScreen extends StatefulWidget { class _ProfileScreenState extends State { @override Widget build(BuildContext context) { - return PixelPerfect( - assetPath: 'assets/images/ref.jpg', - scale: 1080 / 411.42857142857144, - child: Scaffold( - key: scaffoldKey, - body: BottomBar( - child: ProfileChild(), - ), - endDrawer: globals.prismUser.loggedIn - ? SizedBox( - width: MediaQuery.of(context).size.width * 0.68, - child: ProfileDrawer()) - : null)); + return Scaffold( + key: scaffoldKey, + body: BottomBar( + child: ProfileChild(), + ), + endDrawer: globals.prismUser.loggedIn + ? SizedBox( + width: MediaQuery.of(context).size.width * 0.68, + child: ProfileDrawer()) + : null, + ); } } From 7211cdff3b8ed4a5806020399bace31892d101a3 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 15:33:11 +0530 Subject: [PATCH 08/33] merge profile pages --- lib/ui/pages/profile/followerProfile.dart | 1258 ++++++++++---------- lib/ui/pages/profile/profileScreen.dart | 367 ++++-- lib/ui/widgets/home/core/bottomNavBar.dart | 6 +- 3 files changed, 925 insertions(+), 706 deletions(-) diff --git a/lib/ui/pages/profile/followerProfile.dart b/lib/ui/pages/profile/followerProfile.dart index 12dcb027..fc8a3da7 100644 --- a/lib/ui/pages/profile/followerProfile.dart +++ b/lib/ui/pages/profile/followerProfile.dart @@ -1,633 +1,633 @@ -import 'dart:async'; -import 'dart:convert'; -import 'package:Prism/gitkey.dart'; -import 'package:Prism/routes/router.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/ui/widgets/animated/loader.dart'; -import 'package:Prism/ui/widgets/popup/noLoadLinkPopUp.dart'; -import 'package:Prism/ui/widgets/profile/userProfileLoader.dart'; -import 'package:Prism/ui/widgets/profile/userProfileSetupLoader.dart'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:http/http.dart' as http; -import 'package:provider/provider.dart'; -import 'package:intl/intl.dart'; +// import 'dart:async'; +// import 'dart:convert'; +// import 'package:Prism/gitkey.dart'; +// import 'package:Prism/routes/router.dart'; +// import 'package:Prism/theme/jam_icons_icons.dart'; +// import 'package:Prism/ui/widgets/animated/loader.dart'; +// import 'package:Prism/ui/widgets/popup/noLoadLinkPopUp.dart'; +// import 'package:Prism/ui/widgets/profile/userProfileLoader.dart'; +// import 'package:Prism/ui/widgets/profile/userProfileSetupLoader.dart'; +// import 'package:cached_network_image/cached_network_image.dart'; +// import 'package:cloud_firestore/cloud_firestore.dart'; +// import 'package:flutter/cupertino.dart'; +// import 'package:flutter/material.dart'; +// import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; +// import 'package:Prism/main.dart' as main; +// import 'package:Prism/theme/toasts.dart' as toasts; +// import 'package:Prism/global/globals.dart' as globals; +// import 'package:flutter_svg/flutter_svg.dart'; +// import 'package:Prism/global/svgAssets.dart'; +// import 'package:http/http.dart' as http; +// import 'package:intl/intl.dart'; -class FollowerProfile extends StatefulWidget { - final List? arguments; - const FollowerProfile(this.arguments); - @override - _FollowerProfileState createState() => _FollowerProfileState(); -} +// class FollowerProfile extends StatefulWidget { +// final List? arguments; +// const FollowerProfile(this.arguments); +// @override +// _FollowerProfileState createState() => _FollowerProfileState(); +// } -class _FollowerProfileState extends State { - String? name; - String? email; - String? userPhoto; - bool? premium; - Map? links; - String? bio; - final ScrollController scrollController = ScrollController(); - final key = GlobalKey(); - @override - void initState() { - email = widget.arguments![0].toString(); - super.initState(); - } +// class _FollowerProfileState extends State { +// String? name; +// String? email; +// String? userPhoto; +// String? coverPhoto; +// bool? premium; +// Map? links; +// String? bio; +// final ScrollController scrollController = ScrollController(); +// final key = GlobalKey(); +// @override +// void initState() { +// email = widget.arguments![0].toString(); +// super.initState(); +// } - Future onWillPop() async { - if (navStack.length > 1) { - navStack.removeLast(); - if ((navStack.last == "Wallpaper") || - (navStack.last == "Search Wallpaper") || - (navStack.last == "SharedWallpaper") || - (navStack.last == "SetupView")) {} - } - debugPrint(navStack.toString()); - return true; - } +// Future onWillPop() async { +// if (navStack.length > 1) { +// navStack.removeLast(); +// if ((navStack.last == "Wallpaper") || +// (navStack.last == "Search Wallpaper") || +// (navStack.last == "SharedWallpaper") || +// (navStack.last == "SetupView")) {} +// } +// debugPrint(navStack.toString()); +// return true; +// } - @override - Widget build(BuildContext context) { - if (main.prefs.get('followTooltipShow', defaultValue: false) as bool) { - } else { - Future.delayed(const Duration(milliseconds: 500)).then((_) { - try { - final dynamic tooltip = key.currentState; - tooltip.ensureTooltipVisible(); - main.prefs.put('followTooltipShow', true); - Future.delayed(const Duration(seconds: 5)).then((_) { - tooltip.deactivate(); - }); - } catch (e) { - debugPrint(e.toString()); - } - }); - } - return WillPopScope( - onWillPop: onWillPop, - child: DefaultTabController( - length: 2, - child: Scaffold( - backgroundColor: Theme.of(context).primaryColor, - body: StreamBuilder( - stream: getUserProfile(email!), - builder: (context, snap) { - if (snap.hasData && snap.data != null) { - if (snap.data!.docs.isEmpty) { - return Center( - child: SizedBox( - width: MediaQuery.of(context).size.width * 0.8, - child: const Text( - "Sorry! This user is inactive on the latest version, and hence they are not currently viewable.", - textAlign: TextAlign.center, - ), - ), - ); - } - print("SNAP ERROR ${email}"); - name = snap.data!.docs[0].data()["username"].toString() ?? - snap.data!.docs[0].data()["name"].toString(); - userPhoto = - snap.data!.docs[0].data()["profilePhoto"].toString() ?? - snap.data!.docs[0].data()["userPhoto"].toString(); - premium = snap.data!.docs[0].data()["premium"] as bool; - links = snap.data!.docs[0].data()["links"] as Map; - bio = snap.data!.docs[0].data()["bio"] as String; - debugPrint("Name : $name"); - debugPrint("Email : $email"); - debugPrint("Profile Photo : $userPhoto"); - debugPrint("Premium : $premium"); - debugPrint("Links : $links"); - return NestedScrollView( - headerSliverBuilder: (context, innerBoxIsScrolled) => - [ - SliverAppBar( - backgroundColor: Theme.of(context).errorColor, - automaticallyImplyLeading: false, - expandedHeight: 200.0, - flexibleSpace: FlexibleSpaceBar( - background: Stack( - fit: StackFit.expand, - children: [ - Container( - color: Theme.of(context).errorColor, - ), - Padding( - padding: - const EdgeInsets.fromLTRB(16, 25, 16, 0), - child: Column( - children: [ - const Spacer(flex: 5), - Table( - columnWidths: const { - 0: FlexColumnWidth(3), - 1: FlexColumnWidth(5) - }, - children: [ - TableRow(children: [ - TableCell( - child: userPhoto == null - ? Container() - : Stack( - alignment: Alignment.center, - children: [ - Container( - padding: - const EdgeInsets - .all(0), - decoration: - BoxDecoration( - color: - Theme.of(context) - .errorColor, - borderRadius: - BorderRadius - .circular( - 5000), - boxShadow: [ - BoxShadow( - blurRadius: 16, - offset: - const Offset( - 0, 4), - color: const Color( - 0xFF000000) - .withOpacity( - 0.24)) - ], - ), - child: CircleAvatar( - backgroundColor: - Colors - .transparent, - foregroundColor: - Colors - .transparent, - radius: 50, - child: ClipOval( - child: Container( - height: 120, - margin: - const EdgeInsets - .all(0), - padding: - const EdgeInsets - .all(0), - child: - CachedNetworkImage( - fit: BoxFit - .cover, - imageUrl: userPhoto - .toString(), - errorWidget: (context, - url, - error) => - Container(), - ), - ), - ), - ), - ), - if (globals.verifiedUsers - .contains( - email.toString())) - Positioned( - top: 5, - left: 100, - child: SizedBox( - width: 30, - height: 30, - child: SvgPicture - .string(verifiedIcon - .replaceAll( - "E57697", - "FFFFFF")), - ), - ) - else - Container(), - ], - ), - ), - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .middle, - child: Column( - children: [ - if (name == null) - Container() - else - premium == false - ? Text( - name - .toString() - .toUpperCase(), - textAlign: - TextAlign.center, - style: TextStyle( - fontFamily: - "Proxima Nova", - color: Theme.of( - context) - .accentColor, - fontSize: 20, - fontWeight: - FontWeight - .w600), - ) - : Row( - mainAxisAlignment: - MainAxisAlignment - .center, - crossAxisAlignment: - CrossAxisAlignment - .start, - children: [ - Text( - name - .toString() - .toUpperCase(), - style: TextStyle( - fontFamily: - "Proxima Nova", - color: Theme.of( - context) - .accentColor, - fontSize: 20, - fontWeight: - FontWeight - .w600), - ), - Padding( - padding: - const EdgeInsets - .only( - left: - 6.0), - child: Container( - padding: const EdgeInsets - .symmetric( - vertical: 2, - horizontal: - 4), - decoration: - BoxDecoration( - borderRadius: - BorderRadius - .circular( - 50), - color: Theme.of( - context) - .accentColor, - ), - child: Text( - "PRO", - style: Theme.of( - context) - .textTheme - .bodyText2! - .copyWith( - fontSize: - 9, - color: Theme.of(context) - .errorColor, - ), - ), - ), - ) - ], - ), - Text( - bio ?? "", - textAlign: TextAlign.center, - maxLines: 3, - overflow: - TextOverflow.ellipsis, - ) - ], - ), - ), - ]), - TableRow(children: [ - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .middle, - child: links != null && - links!.isNotEmpty - ? IconButton( - icon: Icon( - JamIcons.link, - color: Theme.of(context) - .accentColor, - ), - onPressed: () { - showNoLoadLinksPopUp( - context, links!); - }) - : Container(), - ), - TableCell( - verticalAlignment: - TableCellVerticalAlignment - .middle, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Spacer(flex: 2), - // Row( - // children: [ - // FutureBuilder( - // future: userData - // .getProfileWallsLength( - // email), - // builder: (context, - // snapshot) { - // return Text( - // snapshot.data == - // null - // ? "0 " - // : "${snapshot.data.toString()} ", - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: 22, - // color: Theme.of( - // context) - // .accentColor, - // fontWeight: - // FontWeight - // .normal), - // ); - // }), - // Icon( - // JamIcons.picture, - // size: 20, - // color: Theme.of(context) - // .accentColor, - // ), - // ], - // ), - // const Spacer(), - // Row( - // children: [ - // FutureBuilder( - // future: userData - // .getProfileSetupsLength( - // email), - // builder: (context, - // snapshot) { - // return Text( - // snapshot.data == - // null - // ? "0 " - // : "${snapshot.data.toString()} ", - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: 22, - // color: Theme.of( - // context) - // .accentColor, - // fontWeight: - // FontWeight - // .normal), - // ); - // }), - // Icon( - // JamIcons.instant_picture, - // size: 20, - // color: Theme.of(context) - // .accentColor, - // ), - // ], - // ), - Row( - children: [ - const SizedBox(width: 15), - Text( - (snap.data!.docs[0].data()[ - 'followers'] - as List? ?? - []) - .length > - 1000 - ? NumberFormat - .compactCurrency( - decimalDigits: 2, - symbol: '', - ) - .format((snap.data!.docs[0] - .data()['followers'] - as List? ?? - []) - .length) - .toString() - : (snap.data!.docs[0] - .data()[ - 'followers'] - as List? ?? - []) - .length - .toString(), - style: TextStyle( - fontFamily: - "Proxima Nova", - fontSize: 22, - color: - Theme.of(context) - .accentColor, - fontWeight: FontWeight - .normal), - ), - Icon( - JamIcons.users, - size: 20, - color: Theme.of(context) - .accentColor, - ), - ], - ), - const Spacer(flex: 2), - ], - ), - ), - ]), - ], - ), - ], - ), - ), - ], - ), - ), - leading: IconButton( - icon: const Icon( - JamIcons.chevron_left, - ), - onPressed: () { - Navigator.pop(context); - if (navStack.length > 1) { - navStack.removeLast(); - if ((navStack.last == "Wallpaper") || - (navStack.last == "Search Wallpaper") || - (navStack.last == "SharedWallpaper") || - (navStack.last == "SetupView")) {} - } - debugPrint(navStack.toString()); - }, - ), - actions: [ - if (globals.prismUser.loggedIn == true && - globals.prismUser.email != email) - if ((snap.data!.docs[0].data()['followers'] - as List? ?? - []) - .contains(globals.prismUser.email)) - IconButton( - icon: const Icon(JamIcons.user_remove), - onPressed: () { - unfollow(email!, snap.data!.docs[0].id); - toasts.error("Unfollowed $name!"); - }, - ) - else - Tooltip( - margin: EdgeInsets.fromLTRB( - MediaQuery.of(context).size.width * 0.4, - 0, - 16, - 0), - showDuration: const Duration(seconds: 4), - key: key, - padding: - const EdgeInsets.fromLTRB(16, 8, 16, 8), - message: - "Follow $name to get notified for new posts!", - child: IconButton( - icon: const Icon(JamIcons.user_plus), - onPressed: () { - follow(email!, snap.data!.docs[0].id); - http.post( - Uri.parse( - 'https://fcm.googleapis.com/fcm/send', - ), - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'key=$fcmServerToken', - }, - body: jsonEncode( - { - 'notification': { - 'title': '🎉 New Follower!', - 'body': - '${globals.prismUser.username} is now following you.', - 'color': "#e57697", - 'tag': - '${globals.prismUser.username} Follow', - 'image': - globals.prismUser.profilePhoto, - 'android_channel_id': "followers", - 'icon': '@drawable/ic_follow' - }, - 'priority': 'high', - 'data': { - 'click_action': - 'FLUTTER_NOTIFICATION_CLICK', - 'id': '1', - 'status': 'done' - }, - 'to': - "/topics/${email!.split("@")[0]}" - }, - ), - ); - toasts.codeSend("Followed $name!"); - }, - ), - ) - else - Container(), - ], - ), - SliverAppBar( - backgroundColor: Theme.of(context).errorColor, - automaticallyImplyLeading: false, - pinned: true, - titleSpacing: 0, - expandedHeight: 50, - title: SizedBox( - width: MediaQuery.of(context).size.width, - height: 57, - child: Container( - color: Theme.of(context).errorColor, - child: SizedBox.expand( - child: TabBar( - indicatorColor: Theme.of(context).accentColor, - indicatorSize: TabBarIndicatorSize.label, - unselectedLabelColor: - const Color(0xFFFFFFFF).withOpacity(0.5), - labelColor: const Color(0xFFFFFFFF), - tabs: [ - Text( - "Wallpapers", - style: Theme.of(context) - .textTheme - .bodyText2! - .copyWith( - color: Theme.of(context) - .accentColor), - ), - Text( - "Setups", - style: Theme.of(context) - .textTheme - .bodyText2! - .copyWith( - color: Theme.of(context) - .accentColor), - ), - ]), - ), - ), - ), - ), - ], - body: TabBarView( - children: [ - Padding( - padding: const EdgeInsets.only(top: 5.0), - child: UserProfileLoader( - email: email, - ), - ), - Padding( - padding: const EdgeInsets.only(top: 5.0), - child: UserProfileSetupLoader( - email: email, - ), - ), - ], - ), - ); - } else { - return Center( - child: Loader(), - ); - } - }, - ), - ), - )); - } -} +// @override +// Widget build(BuildContext context) { +// if (main.prefs.get('followTooltipShow', defaultValue: false) as bool) { +// } else { +// Future.delayed(const Duration(milliseconds: 500)).then((_) { +// try { +// final dynamic tooltip = key.currentState; +// tooltip.ensureTooltipVisible(); +// main.prefs.put('followTooltipShow', true); +// Future.delayed(const Duration(seconds: 5)).then((_) { +// tooltip.deactivate(); +// }); +// } catch (e) { +// debugPrint(e.toString()); +// } +// }); +// } +// return WillPopScope( +// onWillPop: onWillPop, +// child: DefaultTabController( +// length: 2, +// child: Scaffold( +// backgroundColor: Theme.of(context).primaryColor, +// body: StreamBuilder( +// stream: getUserProfile(email!), +// builder: (context, snap) { +// if (snap.hasData && snap.data != null) { +// if (snap.data!.docs.isEmpty) { +// return Center( +// child: SizedBox( +// width: MediaQuery.of(context).size.width * 0.8, +// child: const Text( +// "Sorry! This user is inactive on the latest version, and hence they are not currently viewable.", +// textAlign: TextAlign.center, +// ), +// ), +// ); +// } +// print("SNAP ERROR ${email}"); +// name = snap.data!.docs[0].data()["username"].toString() ?? +// snap.data!.docs[0].data()["name"].toString(); +// userPhoto = +// snap.data!.docs[0].data()["profilePhoto"].toString() ?? +// snap.data!.docs[0].data()["userPhoto"].toString(); +// premium = snap.data!.docs[0].data()["premium"] as bool; +// links = snap.data!.docs[0].data()["links"] as Map; +// bio = snap.data!.docs[0].data()["bio"] as String; +// debugPrint("Name : $name"); +// debugPrint("Email : $email"); +// debugPrint("Profile Photo : $userPhoto"); +// debugPrint("Premium : $premium"); +// debugPrint("Links : $links"); +// return NestedScrollView( +// headerSliverBuilder: (context, innerBoxIsScrolled) => +// [ +// SliverAppBar( +// backgroundColor: Theme.of(context).errorColor, +// automaticallyImplyLeading: false, +// expandedHeight: 200.0, +// flexibleSpace: FlexibleSpaceBar( +// background: Stack( +// fit: StackFit.expand, +// children: [ +// Container( +// color: Theme.of(context).errorColor, +// ), +// Padding( +// padding: +// const EdgeInsets.fromLTRB(16, 25, 16, 0), +// child: Column( +// children: [ +// const Spacer(flex: 5), +// Table( +// columnWidths: const { +// 0: FlexColumnWidth(3), +// 1: FlexColumnWidth(5) +// }, +// children: [ +// TableRow(children: [ +// TableCell( +// child: userPhoto == null +// ? Container() +// : Stack( +// alignment: Alignment.center, +// children: [ +// Container( +// padding: +// const EdgeInsets +// .all(0), +// decoration: +// BoxDecoration( +// color: +// Theme.of(context) +// .errorColor, +// borderRadius: +// BorderRadius +// .circular( +// 5000), +// boxShadow: [ +// BoxShadow( +// blurRadius: 16, +// offset: +// const Offset( +// 0, 4), +// color: const Color( +// 0xFF000000) +// .withOpacity( +// 0.24)) +// ], +// ), +// child: CircleAvatar( +// backgroundColor: +// Colors +// .transparent, +// foregroundColor: +// Colors +// .transparent, +// radius: 50, +// child: ClipOval( +// child: Container( +// height: 120, +// margin: +// const EdgeInsets +// .all(0), +// padding: +// const EdgeInsets +// .all(0), +// child: +// CachedNetworkImage( +// fit: BoxFit +// .cover, +// imageUrl: userPhoto +// .toString(), +// errorWidget: (context, +// url, +// error) => +// Container(), +// ), +// ), +// ), +// ), +// ), +// if (globals.verifiedUsers +// .contains( +// email.toString())) +// Positioned( +// top: 5, +// left: 100, +// child: SizedBox( +// width: 30, +// height: 30, +// child: SvgPicture +// .string(verifiedIcon +// .replaceAll( +// "E57697", +// "FFFFFF")), +// ), +// ) +// else +// Container(), +// ], +// ), +// ), +// TableCell( +// verticalAlignment: +// TableCellVerticalAlignment +// .middle, +// child: Column( +// children: [ +// if (name == null) +// Container() +// else +// premium == false +// ? Text( +// name +// .toString() +// .toUpperCase(), +// textAlign: +// TextAlign.center, +// style: TextStyle( +// fontFamily: +// "Proxima Nova", +// color: Theme.of( +// context) +// .accentColor, +// fontSize: 20, +// fontWeight: +// FontWeight +// .w600), +// ) +// : Row( +// mainAxisAlignment: +// MainAxisAlignment +// .center, +// crossAxisAlignment: +// CrossAxisAlignment +// .start, +// children: [ +// Text( +// name +// .toString() +// .toUpperCase(), +// style: TextStyle( +// fontFamily: +// "Proxima Nova", +// color: Theme.of( +// context) +// .accentColor, +// fontSize: 20, +// fontWeight: +// FontWeight +// .w600), +// ), +// Padding( +// padding: +// const EdgeInsets +// .only( +// left: +// 6.0), +// child: Container( +// padding: const EdgeInsets +// .symmetric( +// vertical: 2, +// horizontal: +// 4), +// decoration: +// BoxDecoration( +// borderRadius: +// BorderRadius +// .circular( +// 50), +// color: Theme.of( +// context) +// .accentColor, +// ), +// child: Text( +// "PRO", +// style: Theme.of( +// context) +// .textTheme +// .bodyText2! +// .copyWith( +// fontSize: +// 9, +// color: Theme.of(context) +// .errorColor, +// ), +// ), +// ), +// ) +// ], +// ), +// Text( +// bio ?? "", +// textAlign: TextAlign.center, +// maxLines: 3, +// overflow: +// TextOverflow.ellipsis, +// ) +// ], +// ), +// ), +// ]), +// TableRow(children: [ +// TableCell( +// verticalAlignment: +// TableCellVerticalAlignment +// .middle, +// child: links != null && +// links!.isNotEmpty +// ? IconButton( +// icon: Icon( +// JamIcons.link, +// color: Theme.of(context) +// .accentColor, +// ), +// onPressed: () { +// showNoLoadLinksPopUp( +// context, links!); +// }) +// : Container(), +// ), +// TableCell( +// verticalAlignment: +// TableCellVerticalAlignment +// .middle, +// child: Row( +// mainAxisSize: MainAxisSize.min, +// children: [ +// const Spacer(flex: 2), +// // Row( +// // children: [ +// // FutureBuilder( +// // future: userData +// // .getProfileWallsLength( +// // email), +// // builder: (context, +// // snapshot) { +// // return Text( +// // snapshot.data == +// // null +// // ? "0 " +// // : "${snapshot.data.toString()} ", +// // style: TextStyle( +// // fontFamily: +// // "Proxima Nova", +// // fontSize: 22, +// // color: Theme.of( +// // context) +// // .accentColor, +// // fontWeight: +// // FontWeight +// // .normal), +// // ); +// // }), +// // Icon( +// // JamIcons.picture, +// // size: 20, +// // color: Theme.of(context) +// // .accentColor, +// // ), +// // ], +// // ), +// // const Spacer(), +// // Row( +// // children: [ +// // FutureBuilder( +// // future: userData +// // .getProfileSetupsLength( +// // email), +// // builder: (context, +// // snapshot) { +// // return Text( +// // snapshot.data == +// // null +// // ? "0 " +// // : "${snapshot.data.toString()} ", +// // style: TextStyle( +// // fontFamily: +// // "Proxima Nova", +// // fontSize: 22, +// // color: Theme.of( +// // context) +// // .accentColor, +// // fontWeight: +// // FontWeight +// // .normal), +// // ); +// // }), +// // Icon( +// // JamIcons.instant_picture, +// // size: 20, +// // color: Theme.of(context) +// // .accentColor, +// // ), +// // ], +// // ), +// Row( +// children: [ +// const SizedBox(width: 15), +// Text( +// (snap.data!.docs[0].data()[ +// 'followers'] +// as List? ?? +// []) +// .length > +// 1000 +// ? NumberFormat +// .compactCurrency( +// decimalDigits: 2, +// symbol: '', +// ) +// .format((snap.data!.docs[0] +// .data()['followers'] +// as List? ?? +// []) +// .length) +// .toString() +// : (snap.data!.docs[0] +// .data()[ +// 'followers'] +// as List? ?? +// []) +// .length +// .toString(), +// style: TextStyle( +// fontFamily: +// "Proxima Nova", +// fontSize: 22, +// color: +// Theme.of(context) +// .accentColor, +// fontWeight: FontWeight +// .normal), +// ), +// Icon( +// JamIcons.users, +// size: 20, +// color: Theme.of(context) +// .accentColor, +// ), +// ], +// ), +// const Spacer(flex: 2), +// ], +// ), +// ), +// ]), +// ], +// ), +// ], +// ), +// ), +// ], +// ), +// ), +// leading: IconButton( +// icon: const Icon( +// JamIcons.chevron_left, +// ), +// onPressed: () { +// Navigator.pop(context); +// if (navStack.length > 1) { +// navStack.removeLast(); +// if ((navStack.last == "Wallpaper") || +// (navStack.last == "Search Wallpaper") || +// (navStack.last == "SharedWallpaper") || +// (navStack.last == "SetupView")) {} +// } +// debugPrint(navStack.toString()); +// }, +// ), +// actions: [ +// if (globals.prismUser.loggedIn == true && +// globals.prismUser.email != email) +// if ((snap.data!.docs[0].data()['followers'] +// as List? ?? +// []) +// .contains(globals.prismUser.email)) +// IconButton( +// icon: const Icon(JamIcons.user_remove), +// onPressed: () { +// unfollow(email!, snap.data!.docs[0].id); +// toasts.error("Unfollowed $name!"); +// }, +// ) +// else +// Tooltip( +// margin: EdgeInsets.fromLTRB( +// MediaQuery.of(context).size.width * 0.4, +// 0, +// 16, +// 0), +// showDuration: const Duration(seconds: 4), +// key: key, +// padding: +// const EdgeInsets.fromLTRB(16, 8, 16, 8), +// message: +// "Follow $name to get notified for new posts!", +// child: IconButton( +// icon: const Icon(JamIcons.user_plus), +// onPressed: () { +// follow(email!, snap.data!.docs[0].id); +// http.post( +// Uri.parse( +// 'https://fcm.googleapis.com/fcm/send', +// ), +// headers: { +// 'Content-Type': 'application/json', +// 'Authorization': 'key=$fcmServerToken', +// }, +// body: jsonEncode( +// { +// 'notification': { +// 'title': '🎉 New Follower!', +// 'body': +// '${globals.prismUser.username} is now following you.', +// 'color': "#e57697", +// 'tag': +// '${globals.prismUser.username} Follow', +// 'image': +// globals.prismUser.profilePhoto, +// 'android_channel_id': "followers", +// 'icon': '@drawable/ic_follow' +// }, +// 'priority': 'high', +// 'data': { +// 'click_action': +// 'FLUTTER_NOTIFICATION_CLICK', +// 'id': '1', +// 'status': 'done' +// }, +// 'to': +// "/topics/${email!.split("@")[0]}" +// }, +// ), +// ); +// toasts.codeSend("Followed $name!"); +// }, +// ), +// ) +// else +// Container(), +// ], +// ), +// SliverAppBar( +// backgroundColor: Theme.of(context).errorColor, +// automaticallyImplyLeading: false, +// pinned: true, +// titleSpacing: 0, +// expandedHeight: 50, +// title: SizedBox( +// width: MediaQuery.of(context).size.width, +// height: 57, +// child: Container( +// color: Theme.of(context).errorColor, +// child: SizedBox.expand( +// child: TabBar( +// indicatorColor: Theme.of(context).accentColor, +// indicatorSize: TabBarIndicatorSize.label, +// unselectedLabelColor: +// const Color(0xFFFFFFFF).withOpacity(0.5), +// labelColor: const Color(0xFFFFFFFF), +// tabs: [ +// Text( +// "Wallpapers", +// style: Theme.of(context) +// .textTheme +// .bodyText2! +// .copyWith( +// color: Theme.of(context) +// .accentColor), +// ), +// Text( +// "Setups", +// style: Theme.of(context) +// .textTheme +// .bodyText2! +// .copyWith( +// color: Theme.of(context) +// .accentColor), +// ), +// ]), +// ), +// ), +// ), +// ), +// ], +// body: TabBarView( +// children: [ +// Padding( +// padding: const EdgeInsets.only(top: 5.0), +// child: UserProfileLoader( +// email: email, +// ), +// ), +// Padding( +// padding: const EdgeInsets.only(top: 5.0), +// child: UserProfileSetupLoader( +// email: email, +// ), +// ), +// ], +// ), +// ); +// } else { +// return Center( +// child: Loader(), +// ); +// } +// }, +// ), +// ), +// )); +// } +// } diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 6dd3e151..117f646c 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -1,12 +1,16 @@ import 'dart:async'; +import 'dart:convert'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; +import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; +import 'package:Prism/gitkey.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; import 'package:Prism/ui/widgets/popup/linkPopUp.dart'; import 'package:Prism/ui/widgets/profile/aboutList.dart'; @@ -19,6 +23,8 @@ import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dar import 'package:Prism/ui/widgets/profile/uploadedWallsLoader.dart'; import 'package:Prism/ui/widgets/profile/uploadedSetupsLoader.dart'; import 'package:Prism/ui/widgets/profile/userList.dart'; +import 'package:Prism/ui/widgets/profile/userProfileLoader.dart'; +import 'package:Prism/ui/widgets/profile/userProfileSetupLoader.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/cupertino.dart'; @@ -30,90 +36,172 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:intl/intl.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:http/http.dart' as http; final GlobalKey scaffoldKey = GlobalKey(); class ProfileScreen extends StatefulWidget { + final List? arguments; + const ProfileScreen(this.arguments); @override _ProfileScreenState createState() => _ProfileScreenState(); } class _ProfileScreenState extends State { + String? email; + + @override + void initState() { + email = widget.arguments![0].toString(); + super.initState(); + } + @override Widget build(BuildContext context) { - return Scaffold( - key: scaffoldKey, - body: BottomBar( - child: ProfileChild(), - ), - endDrawer: globals.prismUser.loggedIn - ? SizedBox( - width: MediaQuery.of(context).size.width * 0.68, - child: ProfileDrawer()) - : null, - ); + return (email == globals.prismUser.email) + ? Scaffold( + key: scaffoldKey, + body: BottomBar( + child: ProfileChild( + ownProfile: true, + id: globals.prismUser.id, + bio: globals.prismUser.bio, + coverPhoto: globals.prismUser.profilePhoto, + email: globals.prismUser.email, + links: globals.prismUser.links, + name: globals.prismUser.name, + premium: globals.prismUser.premium, + userPhoto: globals.prismUser.profilePhoto, + username: globals.prismUser.username, + followers: globals.prismUser.followers, + following: globals.prismUser.following, + ), + ), + endDrawer: globals.prismUser.loggedIn + ? SizedBox( + width: MediaQuery.of(context).size.width * 0.68, + child: ProfileDrawer()) + : null, + ) + : Scaffold( + key: scaffoldKey, + body: StreamBuilder( + stream: getUserProfile(email!), + builder: (BuildContext context, + AsyncSnapshot snapshot) { + if (snapshot.hasData && snapshot.data != null) { + if (snapshot.data!.docs.isEmpty) { + return Center( + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.8, + child: const Text( + "Sorry! This user is inactive on the latest version, and hence they are not currently viewable.", + textAlign: TextAlign.center, + ), + ), + ); + } + return ProfileChild( + ownProfile: false, + id: snapshot.data!.docs[0].id, + bio: snapshot.data!.docs[0].data()["bio"].toString(), + coverPhoto: snapshot.data!.docs[0] + .data()["profilePhoto"] + .toString(), + email: snapshot.data!.docs[0].data()["email"].toString(), + links: snapshot.data!.docs[0].data()["links"] as Map, + name: snapshot.data!.docs[0].data()["name"].toString(), + premium: snapshot.data!.docs[0].data()["premium"] as bool, + userPhoto: snapshot.data!.docs[0] + .data()["profilePhoto"] + .toString(), + username: + snapshot.data!.docs[0].data()["username"].toString(), + followers: + snapshot.data!.docs[0].data()["followers"] as List, + following: + snapshot.data!.docs[0].data()["following"] as List, + ); + } + return Container( + color: Theme.of(context).primaryColor, + child: Center( + child: Loader(), + ), + ); + }, + ), + ); } } class ProfileChild extends StatefulWidget { + final String? name; + final String? username; + final String? id; + final String? email; + final String? userPhoto; + final String? coverPhoto; + final bool? premium; + final bool? ownProfile; + final Map? links; + final String? bio; + final List? followers; + final List? following; + const ProfileChild({ + required this.name, + required this.username, + required this.id, + required this.email, + required this.userPhoto, + required this.coverPhoto, + required this.premium, + required this.ownProfile, + required this.links, + required this.bio, + required this.followers, + required this.following, + }); @override _ProfileChildState createState() => _ProfileChildState(); } class _ProfileChildState extends State { - int favCount = main.prefs.get('userFavs') as int? ?? 0; - int profileCount = ((main.prefs.get('userPosts') as int?) ?? 0) + - ((main.prefs.get('userSetups') as int?) ?? 0); + // int favCount = main.prefs.get('userFavs') as int? ?? 0; + // int profileCount = ((main.prefs.get('userPosts') as int?) ?? 0) + + // ((main.prefs.get('userSetups') as int?) ?? 0); final ScrollController scrollController = ScrollController(); - final FirebaseFirestore firestore = FirebaseFirestore.instance; - int count = 0; + // final FirebaseFirestore firestore = FirebaseFirestore.instance; + // int count = 0; @override void initState() { - count = main.prefs.get('easterCount', defaultValue: 0) as int; - checkFav(); + // count = main.prefs.get('easterCount', defaultValue: 0) as int; + // checkFav(); super.initState(); } Future onWillPop() async { - if (navStack.length > 1) navStack.removeLast(); + if (navStack.length > 1) { + navStack.removeLast(); + if ((navStack.last == "Wallpaper") || + (navStack.last == "Search Wallpaper") || + (navStack.last == "SharedWallpaper") || + (navStack.last == "SetupView")) {} + } debugPrint(navStack.toString()); return true; } - Future checkFav() async { - if (globals.prismUser.loggedIn) { - await Provider.of(context, listen: false) - .countFav() - .then( - (value) async { - await Provider.of(context, listen: false) - .countFavSetups() - .then((value2) { - debugPrint(value.toString()); - debugPrint(value2.toString()); - if (mounted) { - setState( - () { - favCount = value + value2; - main.prefs.put('userFavs', favCount); - }, - ); - } - }); - }, - ); - } - } - @override Widget build(BuildContext context) { - final ScrollController? controller = - InheritedDataProvider.of(context)!.scrollController; - final CollectionReference users = firestore.collection(USER_NEW_COLLECTION); + final ScrollController? controller = widget.ownProfile! + ? InheritedDataProvider.of(context)!.scrollController + : ScrollController(); return WillPopScope( onWillPop: onWillPop, - child: globals.prismUser.loggedIn + child: !widget.ownProfile! || globals.prismUser.loggedIn ? DefaultTabController( length: 2, child: Stack( @@ -131,8 +219,40 @@ class _ProfileChildState extends State { primary: false, floating: true, elevation: 0, - leading: globals.prismUser.loggedIn == false - ? Container() + leading: !widget.ownProfile! || + globals.prismUser.loggedIn == false + ? Padding( + padding: const EdgeInsets.all(8.0), + child: IconButton( + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.chevron_left, + color: Theme.of(context) + .accentColor), + ), + onPressed: () async { + Navigator.pop(context); + if (navStack.length > 1) { + navStack.removeLast(); + if ((navStack.last == + "Wallpaper") || + (navStack.last == + "Search Wallpaper") || + (navStack.last == + "SharedWallpaper") || + (navStack.last == + "SetupView")) {} + } + debugPrint(navStack.toString()); + }), + ) : Padding( padding: const EdgeInsets.all(8.0), child: IconButton( @@ -158,8 +278,111 @@ class _ProfileChildState extends State { ); }), ), - actions: globals.prismUser.loggedIn == false - ? [] + actions: !widget.ownProfile! || + globals.prismUser.loggedIn == false + ? [ + if (globals.prismUser.loggedIn == false) + Container() + else + Padding( + padding: const EdgeInsets.all(8.0), + child: ((widget.followers ?? []) + .contains( + globals.prismUser.email)) + ? IconButton( + alignment: + Alignment.centerRight, + padding: + const EdgeInsets.all(2), + icon: Container( + padding: + const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon( + JamIcons.user_remove, + color: Theme.of(context) + .accentColor), + ), + onPressed: () { + unfollow(widget.email!, + widget.id!); + toasts.error( + "Unfollowed ${widget.name}!"); + }) + : IconButton( + alignment: + Alignment.centerRight, + padding: + const EdgeInsets.all(2), + icon: Container( + padding: + const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon( + JamIcons.user_plus, + color: Theme.of(context) + .accentColor), + ), + onPressed: () { + follow(widget.email!, + widget.id!); + http.post( + Uri.parse( + 'https://fcm.googleapis.com/fcm/send', + ), + headers: { + 'Content-Type': + 'application/json', + 'Authorization': + 'key=$fcmServerToken', + }, + body: jsonEncode( + { + 'notification': + { + 'title': + '🎉 New Follower!', + 'body': + '${globals.prismUser.username} is now following you.', + 'color': "#e57697", + 'tag': + '${globals.prismUser.username} Follow', + 'image': globals + .prismUser + .profilePhoto, + 'android_channel_id': + "followers", + 'icon': + '@drawable/ic_follow' + }, + 'priority': 'high', + 'data': + { + 'click_action': + 'FLUTTER_NOTIFICATION_CLICK', + 'id': '1', + 'status': 'done' + }, + 'to': + "/topics/${widget.email!.split("@")[0]}" + }, + ), + ); + toasts.codeSend( + "Followed ${widget.name}!"); + }), + ) + ] : [ Padding( padding: const EdgeInsets.all(8.0), @@ -195,8 +418,7 @@ class _ProfileChildState extends State { children: [ Column(children: [ CachedNetworkImage( - imageUrl: - "https://picsum.photos/1100/500", + imageUrl: widget.coverPhoto ?? "", fit: BoxFit.cover, width: MediaQuery.of(context).size.width, @@ -205,16 +427,13 @@ class _ProfileChildState extends State { .height * 0.19, ), - Container( - padding: const EdgeInsets.all(8.0), - // color: Theme.of(context).primaryColor, + const SizedBox( width: double.maxFinite, height: 37, ), Container( padding: const EdgeInsets.fromLTRB( 12, 4, 12, 0), - // color: Theme.of(context).primaryColor, width: double.maxFinite, height: MediaQuery.of(context) .size @@ -229,7 +448,7 @@ class _ProfileChildState extends State { .width * 0.7, child: Text( - globals.prismUser.name, + widget.name!, textAlign: TextAlign.center, maxLines: 1, overflow: @@ -252,7 +471,7 @@ class _ProfileChildState extends State { .width * 0.7, child: Text( - "@${globals.prismUser.username}", + "@${widget.username}", textAlign: TextAlign.center, maxLines: 1, overflow: @@ -277,7 +496,7 @@ class _ProfileChildState extends State { .width * 0.7, child: Text( - globals.prismUser.bio, + widget.bio ?? "", textAlign: TextAlign.center, maxLines: 2, overflow: @@ -308,7 +527,7 @@ class _ProfileChildState extends State { RichText( text: TextSpan( text: - "${globals.prismUser.following.length}", + "${widget.following!.length}", style: TextStyle( fontFamily: "Proxima Nova", @@ -346,7 +565,7 @@ class _ProfileChildState extends State { RichText( text: TextSpan( text: - "${globals.prismUser.followers.length}", + "${widget.followers!.length}", style: TextStyle( fontFamily: "Proxima Nova", @@ -409,9 +628,8 @@ class _ProfileChildState extends State { ), child: ClipOval( child: CachedNetworkImage( - imageUrl: globals - .prismUser.profilePhoto - .toString(), + imageUrl: widget.userPhoto ?? + "".toString(), width: 78, height: 78, fit: BoxFit.cover, @@ -864,7 +1082,10 @@ class _ProfileChildState extends State { automaticallyImplyLeading: false, pinned: true, titleSpacing: 0, - expandedHeight: globals.prismUser.loggedIn ? 50 : 0, + expandedHeight: !widget.ownProfile! || + globals.prismUser.loggedIn + ? 50 + : 0, title: SizedBox( width: MediaQuery.of(context).size.width, height: 57, @@ -907,18 +1128,14 @@ class _ProfileChildState extends State { body: TabBarView(children: [ Padding( padding: const EdgeInsets.only(top: 5), - child: ProfileLoader( - future: Provider.of(context, - listen: false) - .getProfileWalls(), + child: UserProfileLoader( + email: widget.email, ), ), Padding( padding: const EdgeInsets.only(top: 5), - child: UploadedSetupsLoader( - future: Provider.of(context, - listen: false) - .getProfileSetups(), + child: UserProfileSetupLoader( + email: widget.email, ), ), ]), diff --git a/lib/ui/widgets/home/core/bottomNavBar.dart b/lib/ui/widgets/home/core/bottomNavBar.dart index 261b5ce4..a5344ca7 100644 --- a/lib/ui/widgets/home/core/bottomNavBar.dart +++ b/lib/ui/widgets/home/core/bottomNavBar.dart @@ -490,7 +490,8 @@ class _BottomNavBarState extends State debugPrint("Currently on Profile"); } else { if (navStack.last == "Home") { - Navigator.of(context).pushNamed(profileRoute); + Navigator.of(context).pushNamed(profileRoute, + arguments: [globals.prismUser.email]); } else { Navigator.of(context).popUntil((route) { if (navStack.last != "Home" && @@ -504,7 +505,8 @@ class _BottomNavBarState extends State } }); if ((navStack.last == "Home") == true) { - Navigator.of(context).pushNamed(profileRoute); + Navigator.of(context).pushNamed(profileRoute, + arguments: [globals.prismUser.email]); } } } From 415ff394c37061e162da4e201720c927e609fc7e Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 15:35:29 +0530 Subject: [PATCH 09/33] fix routes --- lib/routes/router.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/routes/router.dart b/lib/routes/router.dart index 7b295773..7934def3 100644 --- a/lib/routes/router.dart +++ b/lib/routes/router.dart @@ -58,25 +58,29 @@ Route generateRoute(RouteSettings settings) { debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: searchRoute); return PageRouteBuilder( + transitionDuration: const Duration(), pageBuilder: (context, animation1, animation2) => SearchScreen()); case homeRoute: navStack.add("Home"); debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: homeRoute); return PageRouteBuilder( + transitionDuration: const Duration(), pageBuilder: (context, animation1, animation2) => PageManager()); case profileRoute: navStack.add("Profile"); debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: profileRoute); return PageRouteBuilder( - pageBuilder: (context, animation1, animation2) => ProfileScreen()); + transitionDuration: const Duration(), + pageBuilder: (context, animation1, animation2) => + ProfileScreen(settings.arguments as List?)); case followerProfileRoute: navStack.add("Follower Profile"); debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: followerProfileRoute); return CupertinoPageRoute( - builder: (context) => FollowerProfile(settings.arguments as List?)); + builder: (context) => ProfileScreen(settings.arguments as List?)); case downloadRoute: navStack.add("Downloads"); debugPrint(navStack.toString()); @@ -187,6 +191,7 @@ Route generateRoute(RouteSettings settings) { debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: setupRoute); return PageRouteBuilder( + transitionDuration: const Duration(), pageBuilder: (context, animation1, animation2) => const SetupScreen()); case setupViewRoute: From 371f1fe8619a7468e27d5dcf804ca147ba96057a Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 15:47:00 +0530 Subject: [PATCH 10/33] links can be edited now --- lib/ui/widgets/popup/editProfilePanel.dart | 477 +++++++++++++++++---- 1 file changed, 384 insertions(+), 93 deletions(-) diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index e79a7760..566b7ca9 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -27,8 +27,8 @@ class EditProfilePanel extends StatefulWidget { class _EditProfilePanelState extends State { final TextEditingController linkController = TextEditingController(); - final TextEditingController bioController = TextEditingController(); - final TextEditingController usernameController = TextEditingController(); + late TextEditingController bioController; + late TextEditingController usernameController; final FirebaseFirestore firestore = FirebaseFirestore.instance; bool isLoading = false; bool pfpEdit = false; @@ -45,36 +45,190 @@ class _EditProfilePanelState extends State { late String pfpUrl; final picker2 = ImagePicker(); List> linkIcons = [ - { - 'name': 'Edit links...', - 'link': 'Select your link first', - 'icon': JamIcons.link, - }, + // { + // 'name': 'Edit links...', + // 'link': 'Select your link first', + // 'icon': JamIcons.link, + // 'value': '', + // 'validator': '', + // }, { 'name': 'github', 'link': 'https://github.com/username', 'icon': JamIcons.github, + 'value': '', + 'validator': 'github', }, { 'name': 'twitter', 'link': 'https://twitter.com/username', 'icon': JamIcons.twitter, + 'value': '', + 'validator': 'twitter', }, { 'name': 'instagram', 'link': 'https://instagram.com/username', 'icon': JamIcons.instagram, + 'value': '', + 'validator': 'instagram', }, { 'name': 'email', 'link': 'your@email.com', - 'icon': JamIcons.message, + 'icon': JamIcons.inbox, + 'value': '', + 'validator': '@', + }, + { + 'name': 'telegram', + 'link': 'https://t.me/username', + 'icon': JamIcons.paper_plane, + 'value': '', + 'validator': 't.me', + }, + { + 'name': 'dribbble', + 'link': 'https://dribbble.com/username', + 'icon': JamIcons.basketball, + 'value': '', + 'validator': 'dribbble', + }, + { + 'name': 'linkedin', + 'link': 'https://linkedin.com/in/username', + 'icon': JamIcons.linkedin, + 'value': '', + 'validator': 'linkedin', + }, + { + 'name': 'bio.link', + 'link': 'https://bio.link/username', + 'icon': JamIcons.world, + 'value': '', + 'validator': 'bio.link', + }, + { + 'name': 'patreon', + 'link': 'https://patreon.com/username', + 'icon': JamIcons.patreon, + 'value': '', + 'validator': 'patreon', + }, + { + 'name': 'trello', + 'link': 'https://trello.com/username', + 'icon': JamIcons.trello, + 'value': '', + 'validator': 'trello', + }, + { + 'name': 'reddit', + 'link': 'https://reddit.com/user/username', + 'icon': JamIcons.reddit, + 'value': '', + 'validator': 'reddit', + }, + { + 'name': 'behance', + 'link': 'https://behance.net/username', + 'icon': JamIcons.behance, + 'value': '', + 'validator': 'behance.net', + }, + { + 'name': 'deviantart', + 'link': 'https://deviantart.com/username', + 'icon': JamIcons.deviantart, + 'value': '', + 'validator': 'deviantart', + }, + { + 'name': 'gitlab', + 'link': 'https://gitlab.com/username', + 'icon': JamIcons.gitlab, + 'value': '', + 'validator': 'gitlab', + }, + { + 'name': 'medium', + 'link': 'https://username.medium.com/', + 'icon': JamIcons.medium, + 'value': '', + 'validator': 'medium', + }, + { + 'name': 'paypal', + 'link': 'https://paypal.me/username', + 'icon': JamIcons.paypal, + 'value': '', + 'validator': 'paypal', + }, + { + 'name': 'spotify', + 'link': 'https://open.spotify.com/user/username', + 'icon': JamIcons.spotify, + 'value': '', + 'validator': 'open.spotify', + }, + { + 'name': 'twitch', + 'link': 'https://twitch.tv/username', + 'icon': JamIcons.twitch, + 'value': '', + 'validator': 'twitch.tv', + }, + { + 'name': 'unsplash', + 'link': 'https://unsplash.com/username', + 'icon': JamIcons.unsplash, + 'value': '', + 'validator': 'unsplash', + }, + { + 'name': 'youtube', + 'link': 'https://youtube.com/channel/username', + 'icon': JamIcons.youtube, + 'value': '', + 'validator': 'youtube', + }, + { + 'name': 'linktree', + 'link': 'https://linktr.ee/username', + 'icon': JamIcons.tree_alt, + 'value': '', + 'validator': 'linktr.ee', + }, + { + 'name': 'buymeacoffee', + 'link': 'https://buymeacoff.ee/username', + 'icon': JamIcons.coffee, + 'value': '', + 'validator': 'buymeacoff.ee', + }, + { + 'name': 'custom link', + 'link': '', + 'icon': JamIcons.link, + 'value': '', + 'validator': '', }, ]; Map? _link; @override void initState() { - _link = linkIcons[0]; + linkIcons + .sort((a, b) => a['name'].toString().compareTo(b['name'].toString())); + final links = globals.prismUser.links; + linkIcons.forEach((element) { + if (links[element['name']] != "" && links[element['name']] != null) { + element['value'] = links[element['name']]; + } + }); + _link = linkIcons[3]; + bioController = TextEditingController(text: globals.prismUser.bio); + usernameController = + TextEditingController(text: globals.prismUser.username); super.initState(); } @@ -420,90 +574,188 @@ class _EditProfilePanelState extends State { ), ), ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - height: 80, - width: 48, - child: Center( - child: DropdownButton>( - items: linkIcons.map((Map link) { - return DropdownMenuItem( - value: link, - child: Icon(link!["icon"] as IconData), - ); - }).toList(), - underline: Container(), - onChanged: (value) { - setState(() => _link = value); - }, - value: _link, + SizedBox( + height: 80, + width: width - 24, + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + left: 0, + child: SizedBox( + height: 80, + width: 130, + child: Center( + child: DropdownButton>( + isExpanded: true, + items: + linkIcons.map((Map link) { + return DropdownMenuItem( + value: link, + child: Row( + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Icon(link["icon"] as IconData), + const SizedBox( + width: 16, + ), + Text( + link["name"].toString().inCaps, + style: Theme.of(context) + .textTheme + .headline5! + .copyWith( + color: Colors.white, + fontSize: 14, + ), + ) + ], + ), + ); + }).toList(), + underline: Container(), + onChanged: (value) { + setState(() => _link = value); + linkController.text = + _link!["value"].toString(); + }, + icon: Container(), + value: _link, + dropdownColor: Theme.of(context).primaryColor, + selectedItemBuilder: (BuildContext context) { + return linkIcons.map((Map link) { + return Padding( + padding: + const EdgeInsets.only(left: 12.0), + child: Row( + children: [ + Icon(link["icon"] as IconData), + Icon( + JamIcons.chevron_down, + size: 14, + ), + ], + ), + ); + }).toList(); + }, + ), + ), ), ), - ), - SizedBox( - height: 80, - width: width - 72, - child: Center( - child: TextField( - cursorColor: const Color(0xFFE57697), - style: Theme.of(context) - .textTheme - .headline5! - .copyWith(color: Colors.white), - controller: linkController, - decoration: InputDecoration( - enabled: _link?["name"] != "Edit links...", - contentPadding: - const EdgeInsets.only(left: 30, top: 15), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - disabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - labelText: _link?["name"].toString().inCaps ?? "", - labelStyle: Theme.of(context) - .textTheme - .headline5! - .copyWith(fontSize: 14, color: Colors.white), - hintText: _link?["link"].toString() ?? "", - hintStyle: Theme.of(context) - .textTheme - .headline5! - .copyWith(fontSize: 14, color: Colors.white), + Positioned( + right: 0, + child: SizedBox( + height: 80, + width: width - 80, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) + .textTheme + .headline5! + .copyWith(color: Colors.white), + controller: linkController, + decoration: InputDecoration( + enabled: _link?["name"] != "Edit links...", + contentPadding: + const EdgeInsets.only(left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: + _link?["name"].toString().inCaps ?? "", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith( + fontSize: 14, color: Colors.white), + hintText: _link?["link"].toString() ?? "", + hintStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith( + fontSize: 14, color: Colors.white), + ), + onChanged: (value) { + // print("VALUE TEXT ${value.toLowerCase()}"); + // print( + // "VALUE LINK NAME ${_link?["name"].toString().toLowerCase()}"); + // print( + // "VALUE LINK VALUE ${_link?["value"].toString().toLowerCase()}"); + // print("VALUE LINK EDIT ${linkEdit}"); + // print( + // "VALUE LINK CONTAINS ${(value.toLowerCase().contains('${_link?["name"].toString().toLowerCase()}'))}"); + + if (value.toLowerCase().contains( + '${_link?["validator"].toString().toLowerCase()}')) { + setState(() { + _link?["value"] = value; + // if (_link?["name"].toString() == 'github') { + // githubUrl = value; + // } else if (_link?["name"].toString() == + // 'twitter') { + // twitterUrl = value; + // } else if (_link?["name"].toString() == + // 'instagram') { + // instagramUrl = value; + // } else if (_link?["name"].toString() == + // 'email') { + // emailUrl = value; + // } + }); + bool changed = false; + for (int i = 0; i < linkIcons.length; i++) { + if (linkIcons[i]["value"] != "") { + changed = true; + break; + } + } + setState(() { + linkEdit = changed; + }); + } else if (value == "") { + bool changed = false; + for (int i = 0; i < linkIcons.length; i++) { + if (linkIcons[i]["value"] != "") { + changed = true; + break; + } + } + setState(() { + linkEdit = changed; + }); + } else { + setState(() { + linkEdit = false; + }); + } + }, + ), ), - onChanged: (value) { - if (value == "") { - setState(() { - linkEdit = false; - }); - } else { - setState(() { - linkEdit = true; - }); - } - }, ), ), - ), - ], + ], + ), ), Padding( padding: const EdgeInsets.all(8.0), child: GestureDetector( - onTap: (!usernameEdit && (pfpEdit || bioEdit)) + onTap: (!usernameEdit && (pfpEdit || bioEdit || linkEdit)) ? () async { setState(() { isLoading = true; @@ -522,6 +774,24 @@ class _EditProfilePanelState extends State { "bio": bioController.text, }); } + if (linkEdit) { + Map links = globals.prismUser.links; + for (int p = 0; p < linkIcons.length; p++) { + if (linkIcons[p]["value"] != "") { + links[linkIcons[p]["name"]] = + linkIcons[p]["value"]; + } + } + globals.prismUser.links = links; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "links": links, + }); + } setState(() { isLoading = false; }); @@ -561,6 +831,24 @@ class _EditProfilePanelState extends State { "bio": bioController.text, }); } + if (linkEdit) { + Map links = globals.prismUser.links; + for (int p = 0; p < linkIcons.length; p++) { + if (linkIcons[p]["value"] != "") { + links[linkIcons[p]["name"]] = + linkIcons[p]["value"]; + } + } + globals.prismUser.links = links; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "links": links, + }); + } setState(() { isLoading = false; }); @@ -575,18 +863,19 @@ class _EditProfilePanelState extends State { width: width - 14, height: 60, decoration: BoxDecoration( - color: !((!usernameEdit && (pfpEdit || bioEdit)) || + color: !((!usernameEdit && + (pfpEdit || bioEdit || linkEdit)) || (usernameEdit && enabled)) ? Theme.of(context).primaryColor : Theme.of(context).errorColor.withOpacity(0.2), border: Border.all( - color: - !((!usernameEdit && (pfpEdit || bioEdit)) || - (usernameEdit && enabled)) - ? Theme.of(context) - .accentColor - .withOpacity(0.5) - : Theme.of(context).errorColor, + color: !((!usernameEdit && + (pfpEdit || bioEdit || linkEdit)) || + (usernameEdit && enabled)) + ? Theme.of(context) + .accentColor + .withOpacity(0.5) + : Theme.of(context).errorColor, width: 3), borderRadius: BorderRadius.circular(10), ), @@ -599,7 +888,9 @@ class _EditProfilePanelState extends State { style: TextStyle( fontSize: 16, color: !((!usernameEdit && - (pfpEdit || bioEdit)) || + (pfpEdit || + bioEdit || + linkEdit)) || (usernameEdit && enabled)) ? Theme.of(context) .accentColor From 33f7fbdc0f2a5aa1d8faef6804b92c2c6520cc8a Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 15:58:34 +0530 Subject: [PATCH 11/33] add basic cover photo variables --- lib/auth/google_auth.dart | 2 + lib/auth/userModel.dart | 4 ++ lib/auth/userModel.g.dart | 9 ++- lib/global/globals.dart | 1 + lib/ui/widgets/popup/editProfilePanel.dart | 77 ++++++++++++++++++++-- 5 files changed, 86 insertions(+), 7 deletions(-) diff --git a/lib/auth/google_auth.dart b/lib/auth/google_auth.dart index 556b1f75..e32e08e3 100644 --- a/lib/auth/google_auth.dart +++ b/lib/auth/google_auth.dart @@ -107,6 +107,7 @@ class GoogleAuth { coins: 0, subPrisms: [], transactions: [], + coverPhoto: "", ); FirebaseFirestore.instance .collection(USER_NEW_COLLECTION) @@ -154,6 +155,7 @@ class GoogleAuth { coins: 0, subPrisms: [], transactions: [], + coverPhoto: "", ); Hive.openBox('prefs').then((value) { value.put('prismUserV2', globals.prismUser); diff --git a/lib/auth/userModel.dart b/lib/auth/userModel.dart index df2fdb5e..2805759d 100644 --- a/lib/auth/userModel.dart +++ b/lib/auth/userModel.dart @@ -47,6 +47,8 @@ class PrismUsersV2 { List transactions; @HiveField(16) String name; + @HiveField(17) + String? coverPhoto; PrismUsersV2({ required this.username, @@ -66,6 +68,7 @@ class PrismUsersV2 { required this.coins, required this.transactions, required this.name, + this.coverPhoto, }) { debugPrint("Default constructor !!!!"); } @@ -98,6 +101,7 @@ class PrismUsersV2 { transactions: (doc.data()!['transactions'] as List ?? []) .map((e) => PrismTransaction.fromJson(e as Map)) .toList(), + coverPhoto: doc.data()!["coverPhoto"]?.toString(), ); Map toJson() => _$PrismUsersV2ToJson(this); } diff --git a/lib/auth/userModel.g.dart b/lib/auth/userModel.g.dart index 1b58ebf9..71734109 100644 --- a/lib/auth/userModel.g.dart +++ b/lib/auth/userModel.g.dart @@ -34,13 +34,14 @@ class PrismUsersV2Adapter extends TypeAdapter { coins: fields[14] as int, transactions: (fields[15] as List).cast(), name: fields[16] as String, + coverPhoto: fields[17] as String?, ); } @override void write(BinaryWriter writer, PrismUsersV2 obj) { writer - ..writeByte(17) + ..writeByte(18) ..writeByte(0) ..write(obj.username) ..writeByte(1) @@ -74,7 +75,9 @@ class PrismUsersV2Adapter extends TypeAdapter { ..writeByte(15) ..write(obj.transactions) ..writeByte(16) - ..write(obj.name); + ..write(obj.name) + ..writeByte(17) + ..write(obj.coverPhoto); } @override @@ -115,6 +118,7 @@ PrismUsersV2 _$PrismUsersV2FromJson(Map json) { .map((e) => PrismTransaction.fromJson(e as Map)) .toList(), name: json['name'] as String, + coverPhoto: json['coverPhoto'] as String?, ); } @@ -137,4 +141,5 @@ Map _$PrismUsersV2ToJson(PrismUsersV2 instance) => 'coins': instance.coins, 'transactions': instance.transactions.map((e) => e.toJson()).toList(), 'name': instance.name, + 'coverPhoto': instance.coverPhoto, }; diff --git a/lib/global/globals.dart b/lib/global/globals.dart index 7290112f..59267195 100644 --- a/lib/global/globals.dart +++ b/lib/global/globals.dart @@ -24,6 +24,7 @@ PrismUsersV2 prismUser = main.prefs.get( coins: 0, subPrisms: [], transactions: [], + coverPhoto: "", ), ) as PrismUsersV2; String currentAppVersion = '2.6.7'; diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index 566b7ca9..a264173f 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -32,6 +32,7 @@ class _EditProfilePanelState extends State { final FirebaseFirestore firestore = FirebaseFirestore.instance; bool isLoading = false; bool pfpEdit = false; + bool coverEdit = false; bool usernameEdit = false; bool bioEdit = false; bool linkEdit = false; @@ -39,10 +40,15 @@ class _EditProfilePanelState extends State { bool? available; bool isCheckingUsername = false; File? _pfp; + File? _cover; late List _compressedPFP; + late List _compressedCover; late String pfpSha; late String pfpPath; late String pfpUrl; + late String coverSha; + late String coverPath; + late String coverUrl; final picker2 = ImagePicker(); List> linkIcons = [ // { @@ -242,6 +248,16 @@ class _EditProfilePanelState extends State { } } + Future getCover() async { + final pickedFile = await picker2.getImage(source: ImageSource.gallery); + if (pickedFile != null) { + setState(() { + _cover = File(pickedFile.path); + coverEdit = true; + }); + } + } + Future compressFile(File file) async { final result = await FlutterImageCompress.compressWithFile( file.absolute.path, @@ -259,6 +275,12 @@ class _EditProfilePanelState extends State { uploadFile(); } + Future processImageCover() async { + final imgList = _cover!.readAsBytesSync(); + _compressedCover = await compressFile(_cover!); + uploadFileCover(); + } + Future uploadFile() async { try { final String base64Image = base64Encode(_compressedPFP); @@ -290,6 +312,37 @@ class _EditProfilePanelState extends State { } } + Future uploadFileCover() async { + try { + final String base64Image = base64Encode(_compressedCover); + final github = GitHub(auth: Authentication.withToken(token)); + await github.repositories + .createFile( + RepositorySlug(gitUserName, repoName), + CreateFile( + message: Path.basename(_cover!.path), + content: base64Image, + path: Path.basename(_cover!.path))) + .then((value) => setState(() { + coverUrl = value.content!.downloadUrl!; + coverPath = value.content!.path!; + coverSha = value.content!.sha!; + })); + debugPrint('Cover File Uploaded'); + globals.prismUser.coverPhoto = coverUrl; + main.prefs.put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "coverPhoto": coverUrl, + }); + } catch (e) { + debugPrint(e.toString()); + toasts.error("Some uploading issue, please try again."); + } + } + @override Widget build(BuildContext context) { final width = MediaQuery.of(context).size.width * 0.85; @@ -631,7 +684,7 @@ class _EditProfilePanelState extends State { child: Row( children: [ Icon(link["icon"] as IconData), - Icon( + const Icon( JamIcons.chevron_down, size: 14, ), @@ -755,7 +808,8 @@ class _EditProfilePanelState extends State { Padding( padding: const EdgeInsets.all(8.0), child: GestureDetector( - onTap: (!usernameEdit && (pfpEdit || bioEdit || linkEdit)) + onTap: (!usernameEdit && + (pfpEdit || bioEdit || linkEdit || coverEdit)) ? () async { setState(() { isLoading = true; @@ -763,6 +817,9 @@ class _EditProfilePanelState extends State { if (_pfp != null && pfpEdit) { await processImage(); } + if (_cover != null && coverEdit) { + await processImageCover(); + } if (bioEdit && bioController.text != "") { globals.prismUser.bio = bioController.text; main.prefs @@ -820,6 +877,9 @@ class _EditProfilePanelState extends State { if (_pfp != null && pfpEdit) { await processImage(); } + if (_cover != null && coverEdit) { + await processImageCover(); + } if (bioEdit && bioController.text != "") { globals.prismUser.bio = bioController.text; main.prefs @@ -864,13 +924,19 @@ class _EditProfilePanelState extends State { height: 60, decoration: BoxDecoration( color: !((!usernameEdit && - (pfpEdit || bioEdit || linkEdit)) || + (pfpEdit || + bioEdit || + linkEdit || + coverEdit)) || (usernameEdit && enabled)) ? Theme.of(context).primaryColor : Theme.of(context).errorColor.withOpacity(0.2), border: Border.all( color: !((!usernameEdit && - (pfpEdit || bioEdit || linkEdit)) || + (pfpEdit || + bioEdit || + linkEdit || + coverEdit)) || (usernameEdit && enabled)) ? Theme.of(context) .accentColor @@ -890,7 +956,8 @@ class _EditProfilePanelState extends State { color: !((!usernameEdit && (pfpEdit || bioEdit || - linkEdit)) || + linkEdit || + coverEdit)) || (usernameEdit && enabled)) ? Theme.of(context) .accentColor From cd5be533ec26e9cd14d7b605f4553a4d94eeaf53 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 15:59:21 +0530 Subject: [PATCH 12/33] add default cover image --- lib/ui/pages/profile/profileScreen.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 117f646c..47d5afd8 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -67,7 +67,7 @@ class _ProfileScreenState extends State { ownProfile: true, id: globals.prismUser.id, bio: globals.prismUser.bio, - coverPhoto: globals.prismUser.profilePhoto, + coverPhoto: null, email: globals.prismUser.email, links: globals.prismUser.links, name: globals.prismUser.name, @@ -106,9 +106,8 @@ class _ProfileScreenState extends State { ownProfile: false, id: snapshot.data!.docs[0].id, bio: snapshot.data!.docs[0].data()["bio"].toString(), - coverPhoto: snapshot.data!.docs[0] - .data()["profilePhoto"] - .toString(), + coverPhoto: + snapshot.data!.docs[0].data()["coverPhoto"] as String, email: snapshot.data!.docs[0].data()["email"].toString(), links: snapshot.data!.docs[0].data()["links"] as Map, name: snapshot.data!.docs[0].data()["name"].toString(), @@ -418,7 +417,8 @@ class _ProfileChildState extends State { children: [ Column(children: [ CachedNetworkImage( - imageUrl: widget.coverPhoto ?? "", + imageUrl: widget.coverPhoto ?? + "https://firebasestorage.googleapis.com/v0/b/prism-wallpapers.appspot.com/o/Headers%2FheaderDefault.png?alt=media&token=1a10b128-c355-45d8-af96-678c13c05b3c", fit: BoxFit.cover, width: MediaQuery.of(context).size.width, From cbe8fcb24ad818f75aaa30950bf274efe7ecc036 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 16:35:21 +0530 Subject: [PATCH 13/33] add cover images --- lib/ui/widgets/popup/editProfilePanel.dart | 62 +++++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index a264173f..dad07dfa 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -4,6 +4,7 @@ import 'dart:typed_data'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -272,13 +273,13 @@ class _EditProfilePanelState extends State { Future processImage() async { final imgList = _pfp!.readAsBytesSync(); _compressedPFP = await compressFile(_pfp!); - uploadFile(); + await uploadFile(); } Future processImageCover() async { final imgList = _cover!.readAsBytesSync(); _compressedCover = await compressFile(_cover!); - uploadFileCover(); + await uploadFileCover(); } Future uploadFile() async { @@ -338,7 +339,7 @@ class _EditProfilePanelState extends State { "coverPhoto": coverUrl, }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); toasts.error("Some uploading issue, please try again."); } } @@ -382,6 +383,53 @@ class _EditProfilePanelState extends State { style: Theme.of(context).textTheme.headline2, ), const Spacer(), + ClipRRect( + child: Material( + child: InkWell( + onTap: () async { + await getCover(); + }, + child: Stack( + children: [ + Container( + height: 240 * 508 / 1234, + width: 240, + decoration: const BoxDecoration( + border: Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), + ), + child: (_cover == null) + ? CachedNetworkImage( + imageUrl: globals.prismUser.coverPhoto ?? "", + fit: BoxFit.cover, + ) + : Image.file( + _cover!, + fit: BoxFit.cover, + ), + ), + Container( + height: 240 * 508 / 1234, + width: 240, + decoration: BoxDecoration( + border: const Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), + color: + Theme.of(context).errorColor.withOpacity(0.5), + ), + child: const Icon( + JamIcons.pencil, + color: Colors.white, + ), + ), + ], + ), + ), + ), + ), + const Spacer(), ClipOval( child: Material( child: InkWell( @@ -391,8 +439,8 @@ class _EditProfilePanelState extends State { child: Stack( children: [ Container( - height: 120, - width: 120, + height: 100, + width: 100, decoration: const BoxDecoration( shape: BoxShape.circle, border: Border.fromBorderSide( @@ -410,8 +458,8 @@ class _EditProfilePanelState extends State { ), ), Container( - height: 120, - width: 120, + height: 100, + width: 100, decoration: BoxDecoration( shape: BoxShape.circle, border: const Border.fromBorderSide( From a9d0c66820cafdf0431f6a522edbd734b5cffa3c Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 16:35:19 +0530 Subject: [PATCH 14/33] add defaultHeader in svg --- lib/global/svgAssets.dart | 23 +++++++++++++ lib/ui/pages/profile/profileScreen.dart | 46 ++++++++++++++++++------- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/lib/global/svgAssets.dart b/lib/global/svgAssets.dart index bede7ecf..528bb285 100644 --- a/lib/global/svgAssets.dart +++ b/lib/global/svgAssets.dart @@ -783,3 +783,26 @@ String verifiedIcon = """ """; + +String defaultHeader = """ + + + + + + + + + + + + + + + + + + + + +"""; diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 47d5afd8..2d94e462 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -67,7 +67,7 @@ class _ProfileScreenState extends State { ownProfile: true, id: globals.prismUser.id, bio: globals.prismUser.bio, - coverPhoto: null, + coverPhoto: globals.prismUser.coverPhoto, email: globals.prismUser.email, links: globals.prismUser.links, name: globals.prismUser.name, @@ -416,17 +416,39 @@ class _ProfileChildState extends State { background: Stack( children: [ Column(children: [ - CachedNetworkImage( - imageUrl: widget.coverPhoto ?? - "https://firebasestorage.googleapis.com/v0/b/prism-wallpapers.appspot.com/o/Headers%2FheaderDefault.png?alt=media&token=1a10b128-c355-45d8-af96-678c13c05b3c", - fit: BoxFit.cover, - width: - MediaQuery.of(context).size.width, - height: MediaQuery.of(context) - .size - .height * - 0.19, - ), + if (widget.coverPhoto == null) + SvgPicture.string( + defaultHeader + .replaceAll( + "#181818", + "#${Theme.of(context).primaryColor.value.toRadixString(16).toString().substring(2)}", + ) + .replaceAll( + "#E77597", + "#${Theme.of(context).errorColor.value.toRadixString(16).toString().substring(2)}", + ), + fit: BoxFit.cover, + width: MediaQuery.of(context) + .size + .width, + height: MediaQuery.of(context) + .size + .height * + 0.19, + ) + else + CachedNetworkImage( + imageUrl: widget.coverPhoto ?? + "https://firebasestorage.googleapis.com/v0/b/prism-wallpapers.appspot.com/o/Headers%2FheaderDefault.png?alt=media&token=1a10b128-c355-45d8-af96-678c13c05b3c", + fit: BoxFit.cover, + width: MediaQuery.of(context) + .size + .width, + height: MediaQuery.of(context) + .size + .height * + 0.19, + ), const SizedBox( width: double.maxFinite, height: 37, From e5d457e31d6e4aaa1ad046195826f605a2cdadc5 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 16:46:40 +0530 Subject: [PATCH 15/33] add edit profile page --- lib/routes/router.dart | 6 + lib/routes/routing_constants.dart | 1 + lib/ui/pages/profile/profileScreen.dart | 14 +- lib/ui/widgets/popup/editProfilePanel.dart | 1247 ++++++++++---------- 4 files changed, 643 insertions(+), 625 deletions(-) diff --git a/lib/routes/router.dart b/lib/routes/router.dart index 7934def3..6813e996 100644 --- a/lib/routes/router.dart +++ b/lib/routes/router.dart @@ -40,6 +40,7 @@ import 'package:Prism/ui/pages/upload/setupGuidelines.dart'; import 'package:Prism/ui/pages/upload/uploadSetupScreen.dart'; import 'package:Prism/ui/pages/upload/uploadWallScreen.dart'; import 'package:Prism/ui/pages/profile/reviewScreen.dart'; +import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image/image.dart' as imagelib; @@ -108,6 +109,11 @@ Route generateRoute(RouteSettings settings) { debugPrint(navStack.toString()); analytics.setCurrentScreen(screenName: premiumRoute); return CupertinoPageRoute(builder: (context) => UpgradeScreen()); + case editProfileRoute: + navStack.add("Edit Profile"); + debugPrint(navStack.toString()); + analytics.setCurrentScreen(screenName: editProfileRoute); + return CupertinoPageRoute(builder: (context) => const EditProfilePanel()); case notificationsRoute: navStack.add("Notifications"); debugPrint(navStack.toString()); diff --git a/lib/routes/routing_constants.dart b/lib/routes/routing_constants.dart index c5b75584..4e6928c9 100644 --- a/lib/routes/routing_constants.dart +++ b/lib/routes/routing_constants.dart @@ -37,3 +37,4 @@ const String onboardingRoute = '/onboarding'; const String followersRoute = '/followers'; const String reviewRoute = '/review'; const String editSetupDetailsRoute = '/editSetupDetails'; +const String editProfileRoute = '/editProfile'; diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 47d5afd8..bddb4639 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -269,12 +269,14 @@ class _ProfileChildState extends State { .accentColor), ), onPressed: () async { - await showModalBottomSheet( - isScrollControlled: true, - context: context, - builder: (context) => - const EditProfilePanel(), - ); + Navigator.pushNamed( + context, editProfileRoute); + // await showModalBottomSheet( + // isScrollControlled: true, + // context: context, + // builder: (context) => + // const EditProfilePanel(), + // ); }), ), actions: !widget.ownProfile! || diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index dad07dfa..1f83229b 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -5,6 +5,7 @@ import 'dart:typed_data'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/gitkey.dart'; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -344,699 +345,707 @@ class _EditProfilePanelState extends State { } } + Future onWillPop() async { + if (navStack.length > 1) navStack.removeLast(); + debugPrint(navStack.toString()); + return true; + } + @override Widget build(BuildContext context) { final width = MediaQuery.of(context).size.width * 0.85; - return Padding( - padding: MediaQuery.of(context).viewInsets, - child: SingleChildScrollView( - child: Container( - height: MediaQuery.of(context).size.height * 0.8, - decoration: BoxDecoration( - color: Theme.of(context).primaryColor, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), + return WillPopScope( + onWillPop: onWillPop, + child: Scaffold( + appBar: AppBar( + leading: IconButton( + icon: const Icon(JamIcons.close), + onPressed: () { + navStack.removeLast(); + debugPrint(navStack.toString()); + Navigator.pop(context); + }), + title: Text( + "Edit Profile", + style: Theme.of(context).textTheme.headline3, ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.all(12.0), - child: Container( - height: 5, - width: 30, - decoration: BoxDecoration( - color: Theme.of(context).hintColor, - borderRadius: BorderRadius.circular(500)), - ), - ) - ], - ), - const Spacer(), - Text( - "Edit Profile", - style: Theme.of(context).textTheme.headline2, + ), + backgroundColor: Theme.of(context).primaryColor, + body: SingleChildScrollView( + child: Container( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), ), - const Spacer(), - ClipRRect( - child: Material( - child: InkWell( - onTap: () async { - await getCover(); - }, - child: Stack( - children: [ - Container( - height: 240 * 508 / 1234, - width: 240, - decoration: const BoxDecoration( - border: Border.fromBorderSide( - BorderSide(color: Colors.white, width: 2), + ), + child: Column( + children: [ + ClipRRect( + child: Material( + child: InkWell( + onTap: () async { + await getCover(); + }, + child: Stack( + children: [ + Container( + height: + MediaQuery.of(context).size.width * 508 / 1234, + width: MediaQuery.of(context).size.width, + decoration: const BoxDecoration( + border: Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), ), + child: (_cover == null) + ? CachedNetworkImage( + imageUrl: + globals.prismUser.coverPhoto ?? "", + fit: BoxFit.cover, + ) + : Image.file( + _cover!, + fit: BoxFit.cover, + ), ), - child: (_cover == null) - ? CachedNetworkImage( - imageUrl: globals.prismUser.coverPhoto ?? "", - fit: BoxFit.cover, - ) - : Image.file( - _cover!, - fit: BoxFit.cover, - ), - ), - Container( - height: 240 * 508 / 1234, - width: 240, - decoration: BoxDecoration( - border: const Border.fromBorderSide( - BorderSide(color: Colors.white, width: 2), + Container( + height: + MediaQuery.of(context).size.width * 508 / 1234, + width: MediaQuery.of(context).size.width, + decoration: BoxDecoration( + border: const Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), + color: + Theme.of(context).errorColor.withOpacity(0.5), + ), + child: const Icon( + JamIcons.pencil, + color: Colors.white, ), - color: - Theme.of(context).errorColor.withOpacity(0.5), - ), - child: const Icon( - JamIcons.pencil, - color: Colors.white, ), - ), - ], + ], + ), ), ), ), - ), - const Spacer(), - ClipOval( - child: Material( - child: InkWell( - onTap: () async { - await getPFP(); - }, - child: Stack( - children: [ - Container( - height: 100, - width: 100, - decoration: const BoxDecoration( - shape: BoxShape.circle, - border: Border.fromBorderSide( - BorderSide(color: Colors.white, width: 2), + const Spacer(), + ClipOval( + child: Material( + child: InkWell( + onTap: () async { + await getPFP(); + }, + child: Stack( + children: [ + Container( + height: 100, + width: 100, + decoration: const BoxDecoration( + shape: BoxShape.circle, + border: Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), ), + child: (_pfp == null) + ? CachedNetworkImage( + imageUrl: globals.prismUser.profilePhoto, + fit: BoxFit.cover, + ) + : Image.file( + _pfp!, + fit: BoxFit.cover, + ), ), - child: (_pfp == null) - ? CachedNetworkImage( - imageUrl: globals.prismUser.profilePhoto, - fit: BoxFit.cover, - ) - : Image.file( - _pfp!, - fit: BoxFit.cover, - ), - ), - Container( - height: 100, - width: 100, - decoration: BoxDecoration( - shape: BoxShape.circle, - border: const Border.fromBorderSide( - BorderSide(color: Colors.white, width: 2), + Container( + height: 100, + width: 100, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: const Border.fromBorderSide( + BorderSide(color: Colors.white, width: 2), + ), + color: + Theme.of(context).errorColor.withOpacity(0.5), + ), + child: const Icon( + JamIcons.pencil, + color: Colors.white, ), - color: - Theme.of(context).errorColor.withOpacity(0.5), - ), - child: const Icon( - JamIcons.pencil, - color: Colors.white, ), - ), - ], + ], + ), ), ), ), - ), - const Spacer(), - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - height: 80, - width: width - 24, - child: Center( - child: TextField( - cursorColor: const Color(0xFFE57697), - style: Theme.of(context) - .textTheme - .headline5! - .copyWith(color: Colors.white), - controller: usernameController, - decoration: InputDecoration( - contentPadding: - const EdgeInsets.only(left: 30, top: 15), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - disabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - labelText: "username", - labelStyle: Theme.of(context) + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox( + height: 80, + width: width - 24, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) .textTheme .headline5! - .copyWith(fontSize: 14, color: Colors.white), - prefixIcon: const Padding( - padding: EdgeInsets.all(16.0), - child: Text( - "@", - style: TextStyle( - color: Colors.white, - fontSize: 14, - fontWeight: FontWeight.bold, + .copyWith(color: Colors.white), + controller: usernameController, + decoration: InputDecoration( + contentPadding: + const EdgeInsets.only(left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: "username", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith(fontSize: 14, color: Colors.white), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: Text( + "@", + style: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), ), ), - ), - suffixIcon: isCheckingUsername - ? Padding( - padding: const EdgeInsets.all(16.0), - child: SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator( - color: Theme.of(context).errorColor, + suffixIcon: isCheckingUsername + ? Padding( + padding: const EdgeInsets.all(16.0), + child: SizedBox( + width: 16, + height: 16, + child: CircularProgressIndicator( + color: Theme.of(context).errorColor, + ), ), - ), - ) - : Padding( - padding: EdgeInsets.all( - available == null ? 16.0 : 8), - child: available == null - ? const Text( - "", - style: TextStyle( - color: Colors.white, - fontSize: 14, - fontWeight: FontWeight.bold, + ) + : Padding( + padding: EdgeInsets.all( + available == null ? 16.0 : 8), + child: available == null + ? const Text( + "", + style: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ) + : Icon( + available! + ? JamIcons.check + : JamIcons.close, + color: available! + ? Colors.green + : Colors.red, + size: 24, ), - ) - : Icon( - available! - ? JamIcons.check - : JamIcons.close, - color: available! - ? Colors.green - : Colors.red, - size: 24, - ), - ), + ), + ), + onChanged: (value) async { + if (value == "") { + setState(() { + usernameEdit = false; + }); + } else { + setState(() { + usernameEdit = true; + }); + } + if (value != "" && + value.length >= 8 && + !value.contains(RegExp(r"(?: |[^\w\s])+"))) { + setState(() { + enabled = true; + }); + } else { + setState(() { + enabled = false; + }); + } + if (enabled) { + setState(() { + isCheckingUsername = true; + }); + await FirebaseFirestore.instance + .collection(USER_NEW_COLLECTION) + .where("username", isEqualTo: value) + .get() + .then((snapshot) { + if (snapshot.size == 0) { + setState(() { + available = true; + }); + } else { + setState(() { + available = false; + }); + } + }); + setState(() { + isCheckingUsername = false; + }); + } else { + setState(() { + available = null; + }); + } + }, ), - onChanged: (value) async { - if (value == "") { - setState(() { - usernameEdit = false; - }); - } else { - setState(() { - usernameEdit = true; - }); - } - if (value != "" && - value.length >= 8 && - !value.contains(RegExp(r"(?: |[^\w\s])+"))) { - setState(() { - enabled = true; - }); - } else { - setState(() { - enabled = false; - }); - } - if (enabled) { - setState(() { - isCheckingUsername = true; - }); - await FirebaseFirestore.instance - .collection(USER_NEW_COLLECTION) - .where("username", isEqualTo: value) - .get() - .then((snapshot) { - if (snapshot.size == 0) { - setState(() { - available = true; - }); - } else { - setState(() { - available = false; - }); - } - }); - setState(() { - isCheckingUsername = false; - }); - } else { - setState(() { - available = null; - }); - } - }, ), ), - ), - SizedBox( - height: 80, - width: width - 24, - child: Center( - child: TextField( - cursorColor: const Color(0xFFE57697), - style: Theme.of(context) - .textTheme - .headline5! - .copyWith(color: Colors.white), - controller: bioController, - decoration: InputDecoration( - contentPadding: - const EdgeInsets.only(left: 30, top: 15), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - disabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - labelText: "Bio", - labelStyle: Theme.of(context) + SizedBox( + height: 80, + width: width - 24, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) .textTheme .headline5! - .copyWith(fontSize: 14, color: Colors.white), - prefixIcon: const Padding( - padding: EdgeInsets.all(16.0), - child: Text( - "bio", - style: TextStyle( - color: Colors.white, - fontSize: 14, - fontWeight: FontWeight.bold, + .copyWith(color: Colors.white), + controller: bioController, + decoration: InputDecoration( + contentPadding: + const EdgeInsets.only(left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: "Bio", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith(fontSize: 14, color: Colors.white), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: Text( + "bio", + style: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), ), ), ), + onChanged: (value) { + if (value == "") { + setState(() { + bioEdit = false; + }); + } else { + setState(() { + bioEdit = true; + }); + } + }, ), - onChanged: (value) { - if (value == "") { - setState(() { - bioEdit = false; - }); - } else { - setState(() { - bioEdit = true; - }); - } - }, ), ), - ), - SizedBox( - height: 80, - width: width - 24, - child: Stack( - alignment: Alignment.center, - children: [ - Positioned( - left: 0, - child: SizedBox( - height: 80, - width: 130, - child: Center( - child: DropdownButton>( - isExpanded: true, - items: - linkIcons.map((Map link) { - return DropdownMenuItem( - value: link, - child: Row( - crossAxisAlignment: - CrossAxisAlignment.end, - children: [ - Icon(link["icon"] as IconData), - const SizedBox( - width: 16, - ), - Text( - link["name"].toString().inCaps, - style: Theme.of(context) - .textTheme - .headline5! - .copyWith( - color: Colors.white, - fontSize: 14, - ), - ) - ], - ), - ); - }).toList(), - underline: Container(), - onChanged: (value) { - setState(() => _link = value); - linkController.text = - _link!["value"].toString(); - }, - icon: Container(), - value: _link, - dropdownColor: Theme.of(context).primaryColor, - selectedItemBuilder: (BuildContext context) { - return linkIcons.map((Map link) { - return Padding( - padding: - const EdgeInsets.only(left: 12.0), + SizedBox( + height: 80, + width: width - 24, + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + left: 0, + child: SizedBox( + height: 80, + width: 130, + child: Center( + child: DropdownButton>( + isExpanded: true, + items: linkIcons + .map((Map link) { + return DropdownMenuItem( + value: link, child: Row( + crossAxisAlignment: + CrossAxisAlignment.end, children: [ Icon(link["icon"] as IconData), - const Icon( - JamIcons.chevron_down, - size: 14, + const SizedBox( + width: 16, ), + Text( + link["name"].toString().inCaps, + style: Theme.of(context) + .textTheme + .headline5! + .copyWith( + color: Colors.white, + fontSize: 14, + ), + ) ], ), ); - }).toList(); - }, + }).toList(), + underline: Container(), + onChanged: (value) { + setState(() => _link = value); + linkController.text = + _link!["value"].toString(); + }, + icon: Container(), + value: _link, + dropdownColor: Theme.of(context).primaryColor, + selectedItemBuilder: (BuildContext context) { + return linkIcons.map((Map link) { + return Padding( + padding: + const EdgeInsets.only(left: 12.0), + child: Row( + children: [ + Icon(link["icon"] as IconData), + const Icon( + JamIcons.chevron_down, + size: 14, + ), + ], + ), + ); + }).toList(); + }, + ), ), ), ), - ), - Positioned( - right: 0, - child: SizedBox( - height: 80, - width: width - 80, - child: Center( - child: TextField( - cursorColor: const Color(0xFFE57697), - style: Theme.of(context) - .textTheme - .headline5! - .copyWith(color: Colors.white), - controller: linkController, - decoration: InputDecoration( - enabled: _link?["name"] != "Edit links...", - contentPadding: - const EdgeInsets.only(left: 30, top: 15), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - disabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: const BorderSide( - color: Colors.white, width: 2)), - labelText: - _link?["name"].toString().inCaps ?? "", - labelStyle: Theme.of(context) + Positioned( + right: 0, + child: SizedBox( + height: 80, + width: width - 80, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) .textTheme .headline5! - .copyWith( - fontSize: 14, color: Colors.white), - hintText: _link?["link"].toString() ?? "", - hintStyle: Theme.of(context) - .textTheme - .headline5! - .copyWith( - fontSize: 14, color: Colors.white), - ), - onChanged: (value) { - // print("VALUE TEXT ${value.toLowerCase()}"); - // print( - // "VALUE LINK NAME ${_link?["name"].toString().toLowerCase()}"); - // print( - // "VALUE LINK VALUE ${_link?["value"].toString().toLowerCase()}"); - // print("VALUE LINK EDIT ${linkEdit}"); - // print( - // "VALUE LINK CONTAINS ${(value.toLowerCase().contains('${_link?["name"].toString().toLowerCase()}'))}"); + .copyWith(color: Colors.white), + controller: linkController, + decoration: InputDecoration( + enabled: _link?["name"] != "Edit links...", + contentPadding: const EdgeInsets.only( + left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: + _link?["name"].toString().inCaps ?? "", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith( + fontSize: 14, color: Colors.white), + hintText: _link?["link"].toString() ?? "", + hintStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith( + fontSize: 14, color: Colors.white), + ), + onChanged: (value) { + // print("VALUE TEXT ${value.toLowerCase()}"); + // print( + // "VALUE LINK NAME ${_link?["name"].toString().toLowerCase()}"); + // print( + // "VALUE LINK VALUE ${_link?["value"].toString().toLowerCase()}"); + // print("VALUE LINK EDIT ${linkEdit}"); + // print( + // "VALUE LINK CONTAINS ${(value.toLowerCase().contains('${_link?["name"].toString().toLowerCase()}'))}"); - if (value.toLowerCase().contains( - '${_link?["validator"].toString().toLowerCase()}')) { - setState(() { - _link?["value"] = value; - // if (_link?["name"].toString() == 'github') { - // githubUrl = value; - // } else if (_link?["name"].toString() == - // 'twitter') { - // twitterUrl = value; - // } else if (_link?["name"].toString() == - // 'instagram') { - // instagramUrl = value; - // } else if (_link?["name"].toString() == - // 'email') { - // emailUrl = value; - // } - }); - bool changed = false; - for (int i = 0; i < linkIcons.length; i++) { - if (linkIcons[i]["value"] != "") { - changed = true; - break; + if (value.toLowerCase().contains( + '${_link?["validator"].toString().toLowerCase()}')) { + setState(() { + _link?["value"] = value; + // if (_link?["name"].toString() == 'github') { + // githubUrl = value; + // } else if (_link?["name"].toString() == + // 'twitter') { + // twitterUrl = value; + // } else if (_link?["name"].toString() == + // 'instagram') { + // instagramUrl = value; + // } else if (_link?["name"].toString() == + // 'email') { + // emailUrl = value; + // } + }); + bool changed = false; + for (int i = 0; + i < linkIcons.length; + i++) { + if (linkIcons[i]["value"] != "") { + changed = true; + break; + } } - } - setState(() { - linkEdit = changed; - }); - } else if (value == "") { - bool changed = false; - for (int i = 0; i < linkIcons.length; i++) { - if (linkIcons[i]["value"] != "") { - changed = true; - break; + setState(() { + linkEdit = changed; + }); + } else if (value == "") { + bool changed = false; + for (int i = 0; + i < linkIcons.length; + i++) { + if (linkIcons[i]["value"] != "") { + changed = true; + break; + } } + setState(() { + linkEdit = changed; + }); + } else { + setState(() { + linkEdit = false; + }); } - setState(() { - linkEdit = changed; - }); - } else { - setState(() { - linkEdit = false; - }); - } - }, + }, + ), ), ), ), - ), - ], + ], + ), ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: (!usernameEdit && - (pfpEdit || bioEdit || linkEdit || coverEdit)) - ? () async { - setState(() { - isLoading = true; + ], + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(8.0), + child: GestureDetector( + onTap: (!usernameEdit && + (pfpEdit || bioEdit || linkEdit || coverEdit)) + ? () async { + setState(() { + isLoading = true; + }); + if (_pfp != null && pfpEdit) { + await processImage(); + } + if (_cover != null && coverEdit) { + await processImageCover(); + } + if (bioEdit && bioController.text != "") { + globals.prismUser.bio = bioController.text; + main.prefs.put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "bio": bioController.text, }); - if (_pfp != null && pfpEdit) { - await processImage(); - } - if (_cover != null && coverEdit) { - await processImageCover(); - } - if (bioEdit && bioController.text != "") { - globals.prismUser.bio = bioController.text; - main.prefs - .put("prismUserV2", globals.prismUser); - await firestore - .collection(USER_NEW_COLLECTION) - .doc(globals.prismUser.id) - .update({ - "bio": bioController.text, - }); - } - if (linkEdit) { - Map links = globals.prismUser.links; - for (int p = 0; p < linkIcons.length; p++) { - if (linkIcons[p]["value"] != "") { - links[linkIcons[p]["name"]] = - linkIcons[p]["value"]; - } + } + if (linkEdit) { + Map links = globals.prismUser.links; + for (int p = 0; p < linkIcons.length; p++) { + if (linkIcons[p]["value"] != "") { + links[linkIcons[p]["name"]] = + linkIcons[p]["value"]; } - globals.prismUser.links = links; - main.prefs - .put("prismUserV2", globals.prismUser); - await firestore - .collection(USER_NEW_COLLECTION) - .doc(globals.prismUser.id) - .update({ - "links": links, - }); } - setState(() { - isLoading = false; + globals.prismUser.links = links; + main.prefs.put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "links": links, }); - Navigator.pop(context); - toasts.codeSend("Details updated!"); } - : (usernameEdit && enabled) - ? () async { - setState(() { - isLoading = true; + setState(() { + isLoading = false; + }); + Navigator.pop(context); + toasts.codeSend("Details updated!"); + } + : (usernameEdit && enabled) + ? () async { + setState(() { + isLoading = true; + }); + if (usernameEdit && + usernameController.text != "" && + usernameController.text.length >= 8) { + globals.prismUser.username = + usernameController.text; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "username": usernameController.text, }); - if (usernameEdit && - usernameController.text != "" && - usernameController.text.length >= 8) { - globals.prismUser.username = - usernameController.text; - main.prefs - .put("prismUserV2", globals.prismUser); - await firestore - .collection(USER_NEW_COLLECTION) - .doc(globals.prismUser.id) - .update({ - "username": usernameController.text, - }); - } - if (_pfp != null && pfpEdit) { - await processImage(); - } - if (_cover != null && coverEdit) { - await processImageCover(); - } - if (bioEdit && bioController.text != "") { - globals.prismUser.bio = bioController.text; - main.prefs - .put("prismUserV2", globals.prismUser); - await firestore - .collection(USER_NEW_COLLECTION) - .doc(globals.prismUser.id) - .update({ - "bio": bioController.text, - }); - } - if (linkEdit) { - Map links = globals.prismUser.links; - for (int p = 0; p < linkIcons.length; p++) { - if (linkIcons[p]["value"] != "") { - links[linkIcons[p]["name"]] = - linkIcons[p]["value"]; - } + } + if (_pfp != null && pfpEdit) { + await processImage(); + } + if (_cover != null && coverEdit) { + await processImageCover(); + } + if (bioEdit && bioController.text != "") { + globals.prismUser.bio = bioController.text; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "bio": bioController.text, + }); + } + if (linkEdit) { + Map links = globals.prismUser.links; + for (int p = 0; p < linkIcons.length; p++) { + if (linkIcons[p]["value"] != "") { + links[linkIcons[p]["name"]] = + linkIcons[p]["value"]; } - globals.prismUser.links = links; - main.prefs - .put("prismUserV2", globals.prismUser); - await firestore - .collection(USER_NEW_COLLECTION) - .doc(globals.prismUser.id) - .update({ - "links": links, - }); } - setState(() { - isLoading = false; + globals.prismUser.links = links; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "links": links, }); - Navigator.pop(context); - toasts.codeSend("Details updated!"); } - : null, - child: SizedBox( - width: width - 20, + setState(() { + isLoading = false; + }); + Navigator.pop(context); + toasts.codeSend("Details updated!"); + } + : null, + child: SizedBox( + width: width - 20, + height: 60, + child: Container( + width: width - 14, height: 60, - child: Container( - width: width - 14, - height: 60, - decoration: BoxDecoration( - color: !((!usernameEdit && - (pfpEdit || - bioEdit || - linkEdit || - coverEdit)) || - (usernameEdit && enabled)) - ? Theme.of(context).primaryColor - : Theme.of(context).errorColor.withOpacity(0.2), - border: Border.all( - color: !((!usernameEdit && - (pfpEdit || - bioEdit || - linkEdit || - coverEdit)) || - (usernameEdit && enabled)) - ? Theme.of(context) - .accentColor - .withOpacity(0.5) - : Theme.of(context).errorColor, - width: 3), - borderRadius: BorderRadius.circular(10), - ), - child: Center( - child: isLoading - ? CircularProgressIndicator( - color: Theme.of(context).primaryColor) - : Text( - "Continue", - style: TextStyle( - fontSize: 16, - color: !((!usernameEdit && - (pfpEdit || - bioEdit || - linkEdit || - coverEdit)) || - (usernameEdit && enabled)) - ? Theme.of(context) - .accentColor - .withOpacity(0.5) - : Theme.of(context).accentColor, - fontWeight: FontWeight.bold), - ), - ), + decoration: BoxDecoration( + color: !((!usernameEdit && + (pfpEdit || + bioEdit || + linkEdit || + coverEdit)) || + (usernameEdit && enabled)) + ? Theme.of(context).primaryColor + : Theme.of(context).errorColor.withOpacity(0.2), + border: Border.all( + color: !((!usernameEdit && + (pfpEdit || + bioEdit || + linkEdit || + coverEdit)) || + (usernameEdit && enabled)) + ? Theme.of(context) + .accentColor + .withOpacity(0.5) + : Theme.of(context).errorColor, + width: 3), + borderRadius: BorderRadius.circular(10), + ), + child: Center( + child: isLoading + ? CircularProgressIndicator( + color: Theme.of(context).primaryColor) + : Text( + "Continue", + style: TextStyle( + fontSize: 16, + color: !((!usernameEdit && + (pfpEdit || + bioEdit || + linkEdit || + coverEdit)) || + (usernameEdit && enabled)) + ? Theme.of(context) + .accentColor + .withOpacity(0.5) + : Theme.of(context).accentColor, + fontWeight: FontWeight.bold), + ), ), ), ), ), - ], - ), - const Spacer(flex: 2), - Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 0, 32), - child: SizedBox( - width: MediaQuery.of(context).size.width * 0.8, - child: Text( - "Usernames are unique names through which fans can view your profile/search for you. They should be greater than 8 characters, and cannot contain any symbol except for underscore (_).", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 13, - color: Theme.of(context).accentColor, + ), + const Spacer(flex: 2), + Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 0, 32), + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + "Usernames are unique names through which fans can view your profile/search for you. They should be greater than 8 characters, and cannot contain any symbol except for underscore (_).", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, + color: Theme.of(context).accentColor, + ), ), ), ), - ), - const Spacer(), - ], + const Spacer( + flex: 3, + ), + ], + ), ), ), ), From cf48ae62c5095cb1d3701a88dcb746702390ab83 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 16:52:31 +0530 Subject: [PATCH 16/33] fix null cover image --- lib/ui/widgets/popup/editProfilePanel.dart | 27 +++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index 1f83229b..e7f354ca 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -4,6 +4,7 @@ import 'dart:typed_data'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:cached_network_image/cached_network_image.dart'; @@ -14,6 +15,7 @@ import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/main.dart' as main; import 'package:flutter_image_compress/flutter_image_compress.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:github/github.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart' as Path; @@ -402,11 +404,23 @@ class _EditProfilePanelState extends State { ), ), child: (_cover == null) - ? CachedNetworkImage( - imageUrl: - globals.prismUser.coverPhoto ?? "", - fit: BoxFit.cover, - ) + ? (globals.prismUser.coverPhoto != null) + ? CachedNetworkImage( + imageUrl: globals.prismUser.coverPhoto!, + fit: BoxFit.cover, + ) + : SvgPicture.string( + defaultHeader + .replaceAll( + "#181818", + "#${Theme.of(context).primaryColor.value.toRadixString(16).toString().substring(2)}", + ) + .replaceAll( + "#E77597", + "#${Theme.of(context).errorColor.value.toRadixString(16).toString().substring(2)}", + ), + fit: BoxFit.cover, + ) : Image.file( _cover!, fit: BoxFit.cover, @@ -482,6 +496,7 @@ class _EditProfilePanelState extends State { ), ), ), + const Spacer(), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -1006,7 +1021,7 @@ class _EditProfilePanelState extends State { ? CircularProgressIndicator( color: Theme.of(context).primaryColor) : Text( - "Continue", + "Update", style: TextStyle( fontSize: 16, color: !((!usernameEdit && From 157b55e86575d919167ee4bd9461fa337b0a51fd Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 16:52:52 +0530 Subject: [PATCH 17/33] fix willpopscope profile bug --- lib/ui/pages/profile/profileScreen.dart | 2086 +++++++++++------------ 1 file changed, 1026 insertions(+), 1060 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index a05498b4..fcf72638 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -57,81 +57,99 @@ class _ProfileScreenState extends State { super.initState(); } + Future onWillPop() async { + if (navStack.length > 1) { + navStack.removeLast(); + if ((navStack.last == "Wallpaper") || + (navStack.last == "Search Wallpaper") || + (navStack.last == "SharedWallpaper") || + (navStack.last == "SetupView")) {} + } + debugPrint(navStack.toString()); + return true; + } + @override Widget build(BuildContext context) { - return (email == globals.prismUser.email) - ? Scaffold( - key: scaffoldKey, - body: BottomBar( - child: ProfileChild( - ownProfile: true, - id: globals.prismUser.id, - bio: globals.prismUser.bio, - coverPhoto: globals.prismUser.coverPhoto, - email: globals.prismUser.email, - links: globals.prismUser.links, - name: globals.prismUser.name, - premium: globals.prismUser.premium, - userPhoto: globals.prismUser.profilePhoto, - username: globals.prismUser.username, - followers: globals.prismUser.followers, - following: globals.prismUser.following, + return WillPopScope( + onWillPop: onWillPop, + child: (email == globals.prismUser.email) + ? Scaffold( + key: scaffoldKey, + body: BottomBar( + child: ProfileChild( + ownProfile: true, + id: globals.prismUser.id, + bio: globals.prismUser.bio, + coverPhoto: globals.prismUser.coverPhoto, + email: globals.prismUser.email, + links: globals.prismUser.links, + name: globals.prismUser.name, + premium: globals.prismUser.premium, + userPhoto: globals.prismUser.profilePhoto, + username: globals.prismUser.username, + followers: globals.prismUser.followers, + following: globals.prismUser.following, + ), ), - ), - endDrawer: globals.prismUser.loggedIn - ? SizedBox( - width: MediaQuery.of(context).size.width * 0.68, - child: ProfileDrawer()) - : null, - ) - : Scaffold( - key: scaffoldKey, - body: StreamBuilder( - stream: getUserProfile(email!), - builder: (BuildContext context, - AsyncSnapshot snapshot) { - if (snapshot.hasData && snapshot.data != null) { - if (snapshot.data!.docs.isEmpty) { - return Center( - child: SizedBox( - width: MediaQuery.of(context).size.width * 0.8, - child: const Text( - "Sorry! This user is inactive on the latest version, and hence they are not currently viewable.", - textAlign: TextAlign.center, + endDrawer: globals.prismUser.loggedIn + ? SizedBox( + width: MediaQuery.of(context).size.width * 0.68, + child: ProfileDrawer()) + : null, + ) + : Scaffold( + key: scaffoldKey, + body: StreamBuilder( + stream: getUserProfile(email!), + builder: (BuildContext context, + AsyncSnapshot snapshot) { + if (snapshot.hasData && snapshot.data != null) { + if (snapshot.data!.docs.isEmpty) { + return Container( + color: Theme.of(context).primaryColor, + child: Center( + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.8, + child: const Text( + "Sorry! This user is inactive on the latest version, and hence they are not currently viewable.", + textAlign: TextAlign.center, + ), + ), ), - ), + ); + } + return ProfileChild( + ownProfile: false, + id: snapshot.data!.docs[0].id, + bio: snapshot.data!.docs[0].data()["bio"].toString(), + coverPhoto: + snapshot.data!.docs[0].data()["coverPhoto"] as String, + email: snapshot.data!.docs[0].data()["email"].toString(), + links: snapshot.data!.docs[0].data()["links"] as Map, + name: snapshot.data!.docs[0].data()["name"].toString(), + premium: snapshot.data!.docs[0].data()["premium"] as bool, + userPhoto: snapshot.data!.docs[0] + .data()["profilePhoto"] + .toString(), + username: + snapshot.data!.docs[0].data()["username"].toString(), + followers: + snapshot.data!.docs[0].data()["followers"] as List, + following: + snapshot.data!.docs[0].data()["following"] as List, ); } - return ProfileChild( - ownProfile: false, - id: snapshot.data!.docs[0].id, - bio: snapshot.data!.docs[0].data()["bio"].toString(), - coverPhoto: - snapshot.data!.docs[0].data()["coverPhoto"] as String, - email: snapshot.data!.docs[0].data()["email"].toString(), - links: snapshot.data!.docs[0].data()["links"] as Map, - name: snapshot.data!.docs[0].data()["name"].toString(), - premium: snapshot.data!.docs[0].data()["premium"] as bool, - userPhoto: snapshot.data!.docs[0] - .data()["profilePhoto"] - .toString(), - username: - snapshot.data!.docs[0].data()["username"].toString(), - followers: - snapshot.data!.docs[0].data()["followers"] as List, - following: - snapshot.data!.docs[0].data()["following"] as List, + return Container( + color: Theme.of(context).primaryColor, + child: Center( + child: Loader(), + ), ); - } - return Container( - color: Theme.of(context).primaryColor, - child: Center( - child: Loader(), - ), - ); - }, + }, + ), ), - ); + ); } } @@ -180,1048 +198,996 @@ class _ProfileChildState extends State { super.initState(); } - Future onWillPop() async { - if (navStack.length > 1) { - navStack.removeLast(); - if ((navStack.last == "Wallpaper") || - (navStack.last == "Search Wallpaper") || - (navStack.last == "SharedWallpaper") || - (navStack.last == "SetupView")) {} - } - debugPrint(navStack.toString()); - return true; - } - @override Widget build(BuildContext context) { final ScrollController? controller = widget.ownProfile! ? InheritedDataProvider.of(context)!.scrollController : ScrollController(); - return WillPopScope( - onWillPop: onWillPop, - child: !widget.ownProfile! || globals.prismUser.loggedIn - ? DefaultTabController( - length: 2, - child: Stack( - children: [ - Scaffold( - backgroundColor: Theme.of(context).primaryColor, - body: NestedScrollView( - controller: controller, - headerSliverBuilder: (context, innerBoxIsScrolled) => - [ - SliverAppBar( - toolbarHeight: MediaQuery.of(context).padding.top + - kToolbarHeight + - 32, - primary: false, - floating: true, - elevation: 0, - leading: !widget.ownProfile! || - globals.prismUser.loggedIn == false - ? Padding( - padding: const EdgeInsets.all(8.0), - child: IconButton( - padding: const EdgeInsets.all(2), - icon: Container( - padding: const EdgeInsets.all(6.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), - ), - child: Icon(JamIcons.chevron_left, - color: Theme.of(context) - .accentColor), - ), - onPressed: () async { - Navigator.pop(context); - if (navStack.length > 1) { - navStack.removeLast(); - if ((navStack.last == - "Wallpaper") || - (navStack.last == - "Search Wallpaper") || - (navStack.last == - "SharedWallpaper") || - (navStack.last == - "SetupView")) {} - } - debugPrint(navStack.toString()); - }), - ) - : Padding( + return !widget.ownProfile! || globals.prismUser.loggedIn + ? DefaultTabController( + length: 2, + child: Stack( + children: [ + Scaffold( + backgroundColor: Theme.of(context).primaryColor, + body: NestedScrollView( + controller: controller, + headerSliverBuilder: (context, innerBoxIsScrolled) => + [ + SliverAppBar( + toolbarHeight: MediaQuery.of(context).padding.top + + kToolbarHeight + + 32, + primary: false, + floating: true, + elevation: 0, + leading: !widget.ownProfile! || + globals.prismUser.loggedIn == false + ? Padding( + padding: const EdgeInsets.all(8.0), + child: IconButton( + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.chevron_left, + color: Theme.of(context).accentColor), + ), + onPressed: () async { + Navigator.pop(context); + if (navStack.length > 1) { + navStack.removeLast(); + if ((navStack.last == "Wallpaper") || + (navStack.last == + "Search Wallpaper") || + (navStack.last == + "SharedWallpaper") || + (navStack.last == "SetupView")) {} + } + debugPrint(navStack.toString()); + }), + ) + : Padding( + padding: const EdgeInsets.all(8.0), + child: IconButton( + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.pencil, + color: Theme.of(context).accentColor), + ), + onPressed: () async { + Navigator.pushNamed( + context, editProfileRoute); + // await showModalBottomSheet( + // isScrollControlled: true, + // context: context, + // builder: (context) => + // const EditProfilePanel(), + // ); + }), + ), + actions: !widget.ownProfile! || + globals.prismUser.loggedIn == false + ? [ + if (globals.prismUser.loggedIn == false) + Container() + else + Padding( padding: const EdgeInsets.all(8.0), - child: IconButton( - padding: const EdgeInsets.all(2), - icon: Container( - padding: const EdgeInsets.all(6.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), - ), - child: Icon(JamIcons.pencil, - color: Theme.of(context) - .accentColor), - ), - onPressed: () async { - Navigator.pushNamed( - context, editProfileRoute); - // await showModalBottomSheet( - // isScrollControlled: true, - // context: context, - // builder: (context) => - // const EditProfilePanel(), - // ); - }), - ), - actions: !widget.ownProfile! || - globals.prismUser.loggedIn == false - ? [ - if (globals.prismUser.loggedIn == false) - Container() - else - Padding( - padding: const EdgeInsets.all(8.0), - child: ((widget.followers ?? []) - .contains( - globals.prismUser.email)) - ? IconButton( - alignment: - Alignment.centerRight, - padding: - const EdgeInsets.all(2), - icon: Container( - padding: - const EdgeInsets.all(6.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), - ), - child: Icon( - JamIcons.user_remove, - color: Theme.of(context) - .accentColor), - ), - onPressed: () { - unfollow(widget.email!, - widget.id!); - toasts.error( - "Unfollowed ${widget.name}!"); - }) - : IconButton( - alignment: - Alignment.centerRight, - padding: - const EdgeInsets.all(2), - icon: Container( - padding: - const EdgeInsets.all(6.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), - ), - child: Icon( - JamIcons.user_plus, - color: Theme.of(context) - .accentColor), - ), - onPressed: () { - follow(widget.email!, - widget.id!); - http.post( - Uri.parse( - 'https://fcm.googleapis.com/fcm/send', - ), - headers: { - 'Content-Type': - 'application/json', - 'Authorization': - 'key=$fcmServerToken', - }, - body: jsonEncode( - { - 'notification': - { - 'title': - '🎉 New Follower!', - 'body': - '${globals.prismUser.username} is now following you.', - 'color': "#e57697", - 'tag': - '${globals.prismUser.username} Follow', - 'image': globals - .prismUser - .profilePhoto, - 'android_channel_id': - "followers", - 'icon': - '@drawable/ic_follow' - }, - 'priority': 'high', - 'data': - { - 'click_action': - 'FLUTTER_NOTIFICATION_CLICK', - 'id': '1', - 'status': 'done' - }, - 'to': - "/topics/${widget.email!.split("@")[0]}" - }, - ), - ); - toasts.codeSend( - "Followed ${widget.name}!"); - }), - ) - ] - : [ - Padding( - padding: const EdgeInsets.all(8.0), - child: IconButton( - alignment: Alignment.centerRight, - padding: const EdgeInsets.all(2), - icon: Container( - padding: const EdgeInsets.all(6.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), + child: ((widget.followers ?? []) + .contains(globals.prismUser.email)) + ? IconButton( + alignment: Alignment.centerRight, + padding: const EdgeInsets.all(2), + icon: Container( + padding: + const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.user_remove, + color: Theme.of(context) + .accentColor), ), - child: Icon(JamIcons.menu, + onPressed: () { + unfollow( + widget.email!, widget.id!); + toasts.error( + "Unfollowed ${widget.name}!"); + }) + : IconButton( + alignment: Alignment.centerRight, + padding: const EdgeInsets.all(2), + icon: Container( + padding: + const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, color: Theme.of(context) - .accentColor), - ), - onPressed: () { - scaffoldKey.currentState! - .openEndDrawer(); - }), - ) - ], - backgroundColor: Theme.of(context).primaryColor, - automaticallyImplyLeading: false, - expandedHeight: - MediaQuery.of(context).size.height * 0.4, - flexibleSpace: Stack( - children: [ - FlexibleSpaceBar( - background: Stack( - children: [ - Column(children: [ - if (widget.coverPhoto == null) - SvgPicture.string( - defaultHeader - .replaceAll( - "#181818", - "#${Theme.of(context).primaryColor.value.toRadixString(16).toString().substring(2)}", - ) - .replaceAll( - "#E77597", - "#${Theme.of(context).errorColor.value.toRadixString(16).toString().substring(2)}", + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.user_plus, + color: Theme.of(context) + .accentColor), + ), + onPressed: () { + follow(widget.email!, widget.id!); + http.post( + Uri.parse( + 'https://fcm.googleapis.com/fcm/send', ), - fit: BoxFit.cover, - width: MediaQuery.of(context) - .size - .width, - height: MediaQuery.of(context) - .size - .height * + headers: { + 'Content-Type': + 'application/json', + 'Authorization': + 'key=$fcmServerToken', + }, + body: jsonEncode( + { + 'notification': + { + 'title': + '🎉 New Follower!', + 'body': + '${globals.prismUser.username} is now following you.', + 'color': "#e57697", + 'tag': + '${globals.prismUser.username} Follow', + 'image': globals.prismUser + .profilePhoto, + 'android_channel_id': + "followers", + 'icon': + '@drawable/ic_follow' + }, + 'priority': 'high', + 'data': { + 'click_action': + 'FLUTTER_NOTIFICATION_CLICK', + 'id': '1', + 'status': 'done' + }, + 'to': + "/topics/${widget.email!.split("@")[0]}" + }, + ), + ); + toasts.codeSend( + "Followed ${widget.name}!"); + }), + ) + ] + : [ + Padding( + padding: const EdgeInsets.all(8.0), + child: IconButton( + alignment: Alignment.centerRight, + padding: const EdgeInsets.all(2), + icon: Container( + padding: const EdgeInsets.all(6.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + child: Icon(JamIcons.menu, + color: + Theme.of(context).accentColor), + ), + onPressed: () { + scaffoldKey.currentState! + .openEndDrawer(); + }), + ) + ], + backgroundColor: Theme.of(context).primaryColor, + automaticallyImplyLeading: false, + expandedHeight: + MediaQuery.of(context).size.height * 0.4, + flexibleSpace: Stack( + children: [ + FlexibleSpaceBar( + background: Stack( + children: [ + Column(children: [ + if (widget.coverPhoto == null) + SvgPicture.string( + defaultHeader + .replaceAll( + "#181818", + "#${Theme.of(context).primaryColor.value.toRadixString(16).toString().substring(2)}", + ) + .replaceAll( + "#E77597", + "#${Theme.of(context).errorColor.value.toRadixString(16).toString().substring(2)}", + ), + fit: BoxFit.cover, + width: + MediaQuery.of(context).size.width, + height: + MediaQuery.of(context).size.height * 0.19, - ) - else - CachedNetworkImage( - imageUrl: widget.coverPhoto ?? - "https://firebasestorage.googleapis.com/v0/b/prism-wallpapers.appspot.com/o/Headers%2FheaderDefault.png?alt=media&token=1a10b128-c355-45d8-af96-678c13c05b3c", - fit: BoxFit.cover, - width: MediaQuery.of(context) - .size - .width, - height: MediaQuery.of(context) - .size - .height * + ) + else + CachedNetworkImage( + imageUrl: widget.coverPhoto ?? + "https://firebasestorage.googleapis.com/v0/b/prism-wallpapers.appspot.com/o/Headers%2FheaderDefault.png?alt=media&token=1a10b128-c355-45d8-af96-678c13c05b3c", + fit: BoxFit.cover, + width: + MediaQuery.of(context).size.width, + height: + MediaQuery.of(context).size.height * 0.19, - ), - const SizedBox( - width: double.maxFinite, - height: 37, - ), - Container( - padding: const EdgeInsets.fromLTRB( - 12, 4, 12, 0), - width: double.maxFinite, - height: MediaQuery.of(context) - .size - .height * + ), + const SizedBox( + width: double.maxFinite, + height: 37, + ), + Container( + padding: const EdgeInsets.fromLTRB( + 12, 4, 12, 0), + width: double.maxFinite, + height: + MediaQuery.of(context).size.height * 0.21 - 37, - child: Column( - children: [ - SizedBox( - width: MediaQuery.of(context) - .size - .width * - 0.7, - child: Text( - widget.name!, - textAlign: TextAlign.center, - maxLines: 1, - overflow: - TextOverflow.ellipsis, - style: TextStyle( - fontFamily: "Proxima Nova", - color: Theme.of(context) - .accentColor, - fontSize: 22, - fontWeight: FontWeight.w500, - ), - ), - ), - const SizedBox( - height: 2, - ), - SizedBox( - width: MediaQuery.of(context) - .size - .width * - 0.7, - child: Text( - "@${widget.username}", - textAlign: TextAlign.center, - maxLines: 1, - overflow: - TextOverflow.ellipsis, - style: TextStyle( - fontFamily: "Proxima Nova", - color: Theme.of(context) - .accentColor - .withOpacity(0.6), - fontSize: 16, - fontWeight: - FontWeight.normal, - ), - ), - ), - const SizedBox( - height: 17, + child: Column( + children: [ + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + widget.name!, + textAlign: TextAlign.center, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor, + fontSize: 22, + fontWeight: FontWeight.w500, ), - SizedBox( - width: MediaQuery.of(context) - .size - .width * - 0.7, - child: Text( - widget.bio ?? "", - textAlign: TextAlign.center, - maxLines: 2, - overflow: - TextOverflow.ellipsis, - style: TextStyle( - fontFamily: "Proxima Nova", - color: Theme.of(context) - .accentColor - .withOpacity(0.6), - fontSize: 14, - fontWeight: - FontWeight.normal, - ), - ), + ), + ), + const SizedBox( + height: 2, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + "@${widget.username}", + textAlign: TextAlign.center, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(0.6), + fontSize: 16, + fontWeight: FontWeight.normal, ), - const SizedBox( - height: 17, + ), + ), + const SizedBox( + height: 17, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Text( + widget.bio ?? "", + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontFamily: "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(0.6), + fontSize: 14, + fontWeight: FontWeight.normal, ), - SizedBox( - width: MediaQuery.of(context) - .size - .width * - 0.7, - child: Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - RichText( - text: TextSpan( - text: - "${widget.following!.length}", + ), + ), + const SizedBox( + height: 17, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + 0.7, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + RichText( + text: TextSpan( + text: + "${(widget.following ?? []).length}", + style: TextStyle( + fontFamily: + "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(1), + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + children: [ + TextSpan( + text: " Following", style: TextStyle( - fontFamily: - "Proxima Nova", color: Theme.of( context) .accentColor - .withOpacity(1), - fontSize: 16, + .withOpacity(0.6), fontWeight: - FontWeight.bold, + FontWeight.normal, ), - children: [ - TextSpan( - text: " Following", - style: TextStyle( - color: Theme.of( - context) - .accentColor - .withOpacity( - 0.6), - fontWeight: - FontWeight - .normal, - ), - ), - ], ), - textAlign: - TextAlign.center, - maxLines: 1, - overflow: - TextOverflow.ellipsis, + ], + ), + textAlign: TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, + ), + const SizedBox(width: 24), + RichText( + text: TextSpan( + text: + "${(widget.followers ?? []).length}", + style: TextStyle( + fontFamily: + "Proxima Nova", + color: Theme.of(context) + .accentColor + .withOpacity(1), + fontSize: 16, + fontWeight: + FontWeight.bold, ), - const SizedBox(width: 24), - RichText( - text: TextSpan( - text: - "${widget.followers!.length}", + children: [ + TextSpan( + text: " Followers", style: TextStyle( - fontFamily: - "Proxima Nova", color: Theme.of( context) .accentColor - .withOpacity(1), - fontSize: 16, + .withOpacity(0.6), fontWeight: - FontWeight.bold, + FontWeight.normal, ), - children: [ - TextSpan( - text: " Followers", - style: TextStyle( - color: Theme.of( - context) - .accentColor - .withOpacity( - 0.6), - fontWeight: - FontWeight - .normal, - ), - ), - ], ), - textAlign: - TextAlign.center, - maxLines: 1, - overflow: - TextOverflow.ellipsis, - ), - ], + ], + ), + textAlign: TextAlign.center, + maxLines: 1, + overflow: + TextOverflow.ellipsis, ), - ), - ], + ], + ), ), - ) - ]), - Positioned( - top: - MediaQuery.of(context).size.height * - 0.19 - - 56, - child: SizedBox( - width: - MediaQuery.of(context).size.width, - child: Center( - child: Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - border: Border.all( - color: Theme.of(context) - .errorColor, - width: 4, - ), - color: Theme.of(context) - .accentColor, - ), - child: ClipOval( - child: CachedNetworkImage( - imageUrl: widget.userPhoto ?? - "".toString(), - width: 78, - height: 78, - fit: BoxFit.cover, - ), - ), + ], + ), + ) + ]), + Positioned( + top: MediaQuery.of(context).size.height * + 0.19 - + 56, + child: SizedBox( + width: MediaQuery.of(context).size.width, + child: Center( + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all( + color: + Theme.of(context).errorColor, + width: 4, + ), + color: + Theme.of(context).accentColor, + ), + child: ClipOval( + child: CachedNetworkImage( + imageUrl: widget.userPhoto ?? + "".toString(), + width: 78, + height: 78, + fit: BoxFit.cover, ), ), ), ), - ], + ), ), - // Stack( - // fit: StackFit.expand, - // children: [ - // Container( - // color: Theme.of(context).errorColor, - // ), - // Padding( - // padding: const EdgeInsets.fromLTRB( - // 16, 25, 16, 0), - // child: Column( - // children: [ - // const Spacer(flex: 5), - // Table( - // columnWidths: const { - // 0: FlexColumnWidth(3), - // 1: FlexColumnWidth(5) - // }, - // children: [ - // TableRow(children: [ - // TableCell( - // child: Stack( - // alignment: Alignment.center, - // children: [ - // Container( - // padding: - // const EdgeInsets.all( - // 0), - // decoration: BoxDecoration( - // color: Theme.of(context) - // .errorColor, - // borderRadius: - // BorderRadius - // .circular(5000), - // boxShadow: [ - // BoxShadow( - // blurRadius: 16, - // offset: - // const Offset( - // 0, 4), - // color: const Color( - // 0xFF000000) - // .withOpacity( - // 0.24)) - // ], - // ), - // child: CircleAvatar( - // backgroundColor: - // Colors.transparent, - // foregroundColor: - // Colors.transparent, - // radius: 50, - // child: ClipOval( - // child: Container( - // height: 120, - // margin: - // const EdgeInsets - // .all(0), - // padding: - // const EdgeInsets - // .all(0), - // child: - // CachedNetworkImage( - // fit: BoxFit.cover, - // imageUrl: globals - // .prismUser - // .profilePhoto - // .toString(), - // errorWidget: (context, - // url, - // error) => - // Container(), - // ), - // ), - // ), - // ), - // ), - // if (globals.verifiedUsers - // .contains(globals - // .prismUser.email)) - // Positioned( - // top: 5, - // left: 100, - // child: SizedBox( - // width: 30, - // height: 30, - // child: SvgPicture - // .string(verifiedIcon - // .replaceAll( - // "E57697", - // "FFFFFF")), - // ), - // ) - // else - // Container(), - // ], - // ), - // ), - // TableCell( - // verticalAlignment: - // TableCellVerticalAlignment - // .bottom, - // child: Column( - // children: [ - // Padding( - // padding: - // const EdgeInsets.only( - // bottom: 5), - // child: globals.prismUser - // .premium == - // false - // ? Text( - // globals.prismUser - // .username - // .toUpperCase(), - // textAlign: - // TextAlign - // .center, - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // color: Theme.of( - // context) - // .accentColor, - // fontSize: 18, - // fontWeight: - // FontWeight - // .w600), - // ) - // : Row( - // mainAxisAlignment: - // MainAxisAlignment - // .center, - // crossAxisAlignment: - // CrossAxisAlignment - // .start, - // children: < - // Widget>[ - // Text( - // globals - // .prismUser - // .username - // .toUpperCase(), - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // color: Theme.of( - // context) - // .accentColor, - // fontSize: - // 18, - // fontWeight: - // FontWeight - // .w600), - // ), - // Padding( - // padding: const EdgeInsets - // .only( - // left: - // 6.0), - // child: - // Container( - // padding: const EdgeInsets - // .symmetric( - // vertical: - // 2, - // horizontal: - // 4), - // decoration: - // BoxDecoration( - // borderRadius: - // BorderRadius.circular( - // 50), - // color: Theme.of( - // context) - // .accentColor, - // ), - // child: Text( - // "PRO", - // style: Theme.of( - // context) - // .textTheme - // .bodyText2! - // .copyWith( - // fontSize: - // 9, - // color: - // Theme.of(context).errorColor, - // ), - // ), - // ), - // ) - // ], - // ), - // ), - // Padding( - // padding: - // const EdgeInsets.only( - // bottom: 15), - // child: Text( - // globals.prismUser.bio, - // textAlign: - // TextAlign.center, - // maxLines: 3, - // overflow: TextOverflow - // .ellipsis, - // ), - // ) - // ], - // ), - // ), - // ]), - // TableRow(children: [ - // TableCell( - // verticalAlignment: - // TableCellVerticalAlignment - // .middle, - // child: Container() - // //ToDo Add link button in profile - // // IconButton( - // // icon: Icon( - // // JamIcons.link, - // // color: Theme.of(context) - // // .accentColor, - // // ), - // // onPressed: () { - // // showLinksPopUp(context, - // // globals.prismUser.id); - // // }), - // ), - // TableCell( - // verticalAlignment: - // TableCellVerticalAlignment - // .middle, - // child: Row( - // mainAxisAlignment: - // MainAxisAlignment - // .spaceEvenly, - // children: [ - // GestureDetector( - // onTap: () { - // Navigator.pushNamed( - // context, - // favWallRoute); - // }, - // child: Row( - // children: [ - // Text( - // "${favCount.toString()} ", - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: 22, - // color: Theme.of( - // context) - // .accentColor, - // fontWeight: - // FontWeight - // .normal), - // ), - // Icon( - // JamIcons.heart_f, - // size: 20, - // color: Theme.of( - // context) - // .accentColor, - // ), - // ], - // ), - // ), - // // Row( - // // children: [ - // // FutureBuilder( - // // future: Provider.of< - // // ProfileWallProvider>( - // // context, - // // listen: - // // false) - // // .getProfileWallsLength(), - // // builder: (context, - // // snapshot) { - // // return Text( - // // snapshot.data == - // // null - // // ? "${profileCount.toString()} " - // // : "${snapshot.data.toString()} ", - // // style: TextStyle( - // // fontFamily: - // // "Proxima Nova", - // // fontSize: - // // 22, - // // color: Theme.of( - // // context) - // // .accentColor, - // // fontWeight: - // // FontWeight - // // .normal), - // // ); - // // }), - // // Icon( - // // JamIcons.upload, - // // size: 20, - // // color: - // // Theme.of(context) - // // .accentColor, - // // ), - // // ], - // // ), - // StreamBuilder< - // QuerySnapshot>( - // stream: users - // .where("email", - // isEqualTo: globals - // .prismUser - // .email) - // .snapshots(), - // builder: (BuildContext - // context, - // AsyncSnapshot< - // QuerySnapshot> - // snapshot) { - // if (!snapshot - // .hasData) { - // return Row( - // children: [ - // Text( - // "0", - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: - // 22, - // color: Theme.of( - // context) - // .accentColor, - // fontWeight: - // FontWeight - // .normal), - // ), - // Icon( - // JamIcons - // .users, - // size: 20, - // color: Theme.of( - // context) - // .accentColor, - // ), - // ], - // ); - // } else { - // List followers = []; - // if (snapshot.data! - // .docs != - // null && - // snapshot - // .data! - // .docs - // .isNotEmpty) { - // followers = snapshot - // .data! - // .docs[0] - // .data()['followers'] - // as List? ?? - // []; - // } - // return GestureDetector( - // onTap: () { - // // Navigator.pushNamed( - // // context, - // // followersRoute, - // // arguments: [ - // // followers - // // ]); - // }, - // child: Row( - // children: [ - // Text( - // followers.length > - // 1000 - // ? NumberFormat - // .compactCurrency( - // decimalDigits: - // 2, - // symbol: - // '', - // ) - // .format(followers - // .length) - // .toString() - // : followers - // .length - // .toString(), - // style: TextStyle( - // fontFamily: - // "Proxima Nova", - // fontSize: - // 22, - // color: Theme.of(context) - // .accentColor, - // fontWeight: - // FontWeight.normal), - // ), - // Icon( - // JamIcons - // .users, - // size: 20, - // color: Theme.of( - // context) - // .accentColor, - // ), - // ], - // ), - // ); - // } - // }), - // ], - // ), - // ), - // ]), - // ], - // ), - // ], - // ), - // ), - // ], - // ), - ), - Container( - width: double.maxFinite, - height: MediaQuery.of(context).padding.top, - color: Theme.of(context) - .primaryColor - .withOpacity(0.5), - ), - ], + ], + ), + // Stack( + // fit: StackFit.expand, + // children: [ + // Container( + // color: Theme.of(context).errorColor, + // ), + // Padding( + // padding: const EdgeInsets.fromLTRB( + // 16, 25, 16, 0), + // child: Column( + // children: [ + // const Spacer(flex: 5), + // Table( + // columnWidths: const { + // 0: FlexColumnWidth(3), + // 1: FlexColumnWidth(5) + // }, + // children: [ + // TableRow(children: [ + // TableCell( + // child: Stack( + // alignment: Alignment.center, + // children: [ + // Container( + // padding: + // const EdgeInsets.all( + // 0), + // decoration: BoxDecoration( + // color: Theme.of(context) + // .errorColor, + // borderRadius: + // BorderRadius + // .circular(5000), + // boxShadow: [ + // BoxShadow( + // blurRadius: 16, + // offset: + // const Offset( + // 0, 4), + // color: const Color( + // 0xFF000000) + // .withOpacity( + // 0.24)) + // ], + // ), + // child: CircleAvatar( + // backgroundColor: + // Colors.transparent, + // foregroundColor: + // Colors.transparent, + // radius: 50, + // child: ClipOval( + // child: Container( + // height: 120, + // margin: + // const EdgeInsets + // .all(0), + // padding: + // const EdgeInsets + // .all(0), + // child: + // CachedNetworkImage( + // fit: BoxFit.cover, + // imageUrl: globals + // .prismUser + // .profilePhoto + // .toString(), + // errorWidget: (context, + // url, + // error) => + // Container(), + // ), + // ), + // ), + // ), + // ), + // if (globals.verifiedUsers + // .contains(globals + // .prismUser.email)) + // Positioned( + // top: 5, + // left: 100, + // child: SizedBox( + // width: 30, + // height: 30, + // child: SvgPicture + // .string(verifiedIcon + // .replaceAll( + // "E57697", + // "FFFFFF")), + // ), + // ) + // else + // Container(), + // ], + // ), + // ), + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .bottom, + // child: Column( + // children: [ + // Padding( + // padding: + // const EdgeInsets.only( + // bottom: 5), + // child: globals.prismUser + // .premium == + // false + // ? Text( + // globals.prismUser + // .username + // .toUpperCase(), + // textAlign: + // TextAlign + // .center, + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // color: Theme.of( + // context) + // .accentColor, + // fontSize: 18, + // fontWeight: + // FontWeight + // .w600), + // ) + // : Row( + // mainAxisAlignment: + // MainAxisAlignment + // .center, + // crossAxisAlignment: + // CrossAxisAlignment + // .start, + // children: < + // Widget>[ + // Text( + // globals + // .prismUser + // .username + // .toUpperCase(), + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // color: Theme.of( + // context) + // .accentColor, + // fontSize: + // 18, + // fontWeight: + // FontWeight + // .w600), + // ), + // Padding( + // padding: const EdgeInsets + // .only( + // left: + // 6.0), + // child: + // Container( + // padding: const EdgeInsets + // .symmetric( + // vertical: + // 2, + // horizontal: + // 4), + // decoration: + // BoxDecoration( + // borderRadius: + // BorderRadius.circular( + // 50), + // color: Theme.of( + // context) + // .accentColor, + // ), + // child: Text( + // "PRO", + // style: Theme.of( + // context) + // .textTheme + // .bodyText2! + // .copyWith( + // fontSize: + // 9, + // color: + // Theme.of(context).errorColor, + // ), + // ), + // ), + // ) + // ], + // ), + // ), + // Padding( + // padding: + // const EdgeInsets.only( + // bottom: 15), + // child: Text( + // globals.prismUser.bio, + // textAlign: + // TextAlign.center, + // maxLines: 3, + // overflow: TextOverflow + // .ellipsis, + // ), + // ) + // ], + // ), + // ), + // ]), + // TableRow(children: [ + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .middle, + // child: Container() + // //ToDo Add link button in profile + // // IconButton( + // // icon: Icon( + // // JamIcons.link, + // // color: Theme.of(context) + // // .accentColor, + // // ), + // // onPressed: () { + // // showLinksPopUp(context, + // // globals.prismUser.id); + // // }), + // ), + // TableCell( + // verticalAlignment: + // TableCellVerticalAlignment + // .middle, + // child: Row( + // mainAxisAlignment: + // MainAxisAlignment + // .spaceEvenly, + // children: [ + // GestureDetector( + // onTap: () { + // Navigator.pushNamed( + // context, + // favWallRoute); + // }, + // child: Row( + // children: [ + // Text( + // "${favCount.toString()} ", + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: 22, + // color: Theme.of( + // context) + // .accentColor, + // fontWeight: + // FontWeight + // .normal), + // ), + // Icon( + // JamIcons.heart_f, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ), + // ), + // // Row( + // // children: [ + // // FutureBuilder( + // // future: Provider.of< + // // ProfileWallProvider>( + // // context, + // // listen: + // // false) + // // .getProfileWallsLength(), + // // builder: (context, + // // snapshot) { + // // return Text( + // // snapshot.data == + // // null + // // ? "${profileCount.toString()} " + // // : "${snapshot.data.toString()} ", + // // style: TextStyle( + // // fontFamily: + // // "Proxima Nova", + // // fontSize: + // // 22, + // // color: Theme.of( + // // context) + // // .accentColor, + // // fontWeight: + // // FontWeight + // // .normal), + // // ); + // // }), + // // Icon( + // // JamIcons.upload, + // // size: 20, + // // color: + // // Theme.of(context) + // // .accentColor, + // // ), + // // ], + // // ), + // StreamBuilder< + // QuerySnapshot>( + // stream: users + // .where("email", + // isEqualTo: globals + // .prismUser + // .email) + // .snapshots(), + // builder: (BuildContext + // context, + // AsyncSnapshot< + // QuerySnapshot> + // snapshot) { + // if (!snapshot + // .hasData) { + // return Row( + // children: [ + // Text( + // "0", + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: + // 22, + // color: Theme.of( + // context) + // .accentColor, + // fontWeight: + // FontWeight + // .normal), + // ), + // Icon( + // JamIcons + // .users, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ); + // } else { + // List followers = []; + // if (snapshot.data! + // .docs != + // null && + // snapshot + // .data! + // .docs + // .isNotEmpty) { + // followers = snapshot + // .data! + // .docs[0] + // .data()['followers'] + // as List? ?? + // []; + // } + // return GestureDetector( + // onTap: () { + // // Navigator.pushNamed( + // // context, + // // followersRoute, + // // arguments: [ + // // followers + // // ]); + // }, + // child: Row( + // children: [ + // Text( + // followers.length > + // 1000 + // ? NumberFormat + // .compactCurrency( + // decimalDigits: + // 2, + // symbol: + // '', + // ) + // .format(followers + // .length) + // .toString() + // : followers + // .length + // .toString(), + // style: TextStyle( + // fontFamily: + // "Proxima Nova", + // fontSize: + // 22, + // color: Theme.of(context) + // .accentColor, + // fontWeight: + // FontWeight.normal), + // ), + // Icon( + // JamIcons + // .users, + // size: 20, + // color: Theme.of( + // context) + // .accentColor, + // ), + // ], + // ), + // ); + // } + // }), + // ], + // ), + // ), + // ]), + // ], + // ), + // ], + // ), + // ), + // ], + // ), ), - ), - SliverAppBar( - backgroundColor: Theme.of(context).primaryColor, - automaticallyImplyLeading: false, - pinned: true, - titleSpacing: 0, - expandedHeight: !widget.ownProfile! || - globals.prismUser.loggedIn + Container( + width: double.maxFinite, + height: MediaQuery.of(context).padding.top, + color: Theme.of(context) + .primaryColor + .withOpacity(0.5), + ), + ], + ), + ), + SliverAppBar( + backgroundColor: Theme.of(context).primaryColor, + automaticallyImplyLeading: false, + pinned: true, + titleSpacing: 0, + expandedHeight: + !widget.ownProfile! || globals.prismUser.loggedIn ? 50 : 0, - title: SizedBox( - width: MediaQuery.of(context).size.width, - height: 57, - child: Container( - color: Theme.of(context).primaryColor, - child: SizedBox.expand( - child: TabBar( - indicatorColor: - Theme.of(context).accentColor, - indicatorSize: TabBarIndicatorSize.label, - unselectedLabelColor: - const Color(0xFFFFFFFF) - .withOpacity(0.5), - labelColor: const Color(0xFFFFFFFF), - tabs: [ - Text( - "Wallpapers", - style: Theme.of(context) - .textTheme - .bodyText2! - .copyWith( - color: Theme.of(context) - .accentColor), - ), - Text( - "Setups", - style: Theme.of(context) - .textTheme - .bodyText2! - .copyWith( - color: Theme.of(context) - .accentColor), - ), - ]), - ), - ), + title: SizedBox( + width: MediaQuery.of(context).size.width, + height: 57, + child: Container( + color: Theme.of(context).primaryColor, + child: SizedBox.expand( + child: TabBar( + indicatorColor: Theme.of(context).accentColor, + indicatorSize: TabBarIndicatorSize.label, + unselectedLabelColor: + const Color(0xFFFFFFFF).withOpacity(0.5), + labelColor: const Color(0xFFFFFFFF), + tabs: [ + Text( + "Wallpapers", + style: Theme.of(context) + .textTheme + .bodyText2! + .copyWith( + color: Theme.of(context) + .accentColor), + ), + Text( + "Setups", + style: Theme.of(context) + .textTheme + .bodyText2! + .copyWith( + color: Theme.of(context) + .accentColor), + ), + ]), ), ), - ], - body: TabBarView(children: [ - Padding( - padding: const EdgeInsets.only(top: 5), - child: UserProfileLoader( - email: widget.email, - ), + ), + ), + ], + body: TabBarView(children: [ + Padding( + padding: const EdgeInsets.only(top: 5), + child: UserProfileLoader( + email: widget.email, + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5), + child: UserProfileSetupLoader( + email: widget.email, + ), + ), + ]), + ), + ), + ], + )) + : Scaffold( + backgroundColor: Theme.of(context).primaryColor, + body: CustomScrollView(controller: controller, slivers: [ + SliverAppBar( + backgroundColor: Theme.of(context).errorColor, + automaticallyImplyLeading: false, + expandedHeight: 280.0, + flexibleSpace: FlexibleSpaceBar( + background: Stack( + fit: StackFit.expand, + children: [ + Stack( + children: [ + Container( + color: Theme.of(context).errorColor, ), Padding( - padding: const EdgeInsets.only(top: 5), - child: UserProfileSetupLoader( - email: widget.email, - ), - ), - ]), - ), - ), - ], - )) - : Scaffold( - backgroundColor: Theme.of(context).primaryColor, - body: - CustomScrollView(controller: controller, slivers: [ - SliverAppBar( - backgroundColor: Theme.of(context).errorColor, - automaticallyImplyLeading: false, - expandedHeight: 280.0, - flexibleSpace: FlexibleSpaceBar( - background: Stack( - fit: StackFit.expand, - children: [ - Stack( - children: [ - Container( - color: Theme.of(context).errorColor, - ), - Padding( - padding: const EdgeInsets.fromLTRB(0, 20, 0, 0), - child: Center( - child: SizedBox( - width: - MediaQuery.of(context).size.width / 2, - child: const FlareActor( - "assets/animations/Text.flr", - animation: "Untitled", - ), - ), + padding: const EdgeInsets.fromLTRB(0, 20, 0, 0), + child: Center( + child: SizedBox( + width: MediaQuery.of(context).size.width / 2, + child: const FlareActor( + "assets/animations/Text.flr", + animation: "Untitled", ), - ) - ], - ), + ), + ), + ) ], ), - ), + ], ), - SliverList( - delegate: SliverChildListDelegate([ - Padding( - padding: const EdgeInsets.only(top: 10), - child: PremiumList(), - ), - DownloadList(), - const GeneralList( - expanded: false, - ), - UserList( - expanded: false, - ), - AboutList(), - const SizedBox( - height: 300, - ), - ])) - ]), - )); + ), + ), + SliverList( + delegate: SliverChildListDelegate([ + Padding( + padding: const EdgeInsets.only(top: 10), + child: PremiumList(), + ), + DownloadList(), + const GeneralList( + expanded: false, + ), + UserList( + expanded: false, + ), + AboutList(), + const SizedBox( + height: 300, + ), + ])) + ]), + ); } } From 90aaf7b4c0a4d925fe557fe25c0bb5382ec6fb62 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 17:03:10 +0530 Subject: [PATCH 18/33] add name edit option --- lib/ui/widgets/popup/editProfilePanel.dart | 123 ++++++++++++++++++--- 1 file changed, 109 insertions(+), 14 deletions(-) diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index e7f354ca..4161d222 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -33,11 +33,13 @@ class _EditProfilePanelState extends State { final TextEditingController linkController = TextEditingController(); late TextEditingController bioController; late TextEditingController usernameController; + late TextEditingController nameController; final FirebaseFirestore firestore = FirebaseFirestore.instance; bool isLoading = false; bool pfpEdit = false; bool coverEdit = false; bool usernameEdit = false; + bool nameEdit = false; bool bioEdit = false; bool linkEdit = false; bool enabled = false; @@ -239,6 +241,7 @@ class _EditProfilePanelState extends State { bioController = TextEditingController(text: globals.prismUser.bio); usernameController = TextEditingController(text: globals.prismUser.username); + nameController = TextEditingController(text: globals.prismUser.name); super.initState(); } @@ -500,6 +503,68 @@ class _EditProfilePanelState extends State { Column( mainAxisAlignment: MainAxisAlignment.center, children: [ + SizedBox( + height: 80, + width: width - 24, + child: Center( + child: TextField( + cursorColor: const Color(0xFFE57697), + style: Theme.of(context) + .textTheme + .headline5! + .copyWith(color: Colors.white), + controller: nameController, + decoration: InputDecoration( + contentPadding: + const EdgeInsets.only(left: 30, top: 15), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Colors.white, width: 2)), + labelText: "Name", + labelStyle: Theme.of(context) + .textTheme + .headline5! + .copyWith(fontSize: 14, color: Colors.white), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: Text( + "Name", + style: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + onChanged: (value) async { + if (value == globals.prismUser.name || + value == "") { + setState(() { + nameEdit = false; + }); + } else { + setState(() { + nameEdit = true; + }); + } + }, + ), + ), + ), SizedBox( height: 80, width: width - 24, @@ -581,15 +646,6 @@ class _EditProfilePanelState extends State { ), ), onChanged: (value) async { - if (value == "") { - setState(() { - usernameEdit = false; - }); - } else { - setState(() { - usernameEdit = true; - }); - } if (value != "" && value.length >= 8 && !value.contains(RegExp(r"(?: |[^\w\s])+"))) { @@ -628,6 +684,17 @@ class _EditProfilePanelState extends State { available = null; }); } + if (value == globals.prismUser.username || + value == "") { + setState(() { + usernameEdit = false; + available = null; + }); + } else { + setState(() { + usernameEdit = true; + }); + } }, ), ), @@ -680,7 +747,7 @@ class _EditProfilePanelState extends State { ), ), onChanged: (value) { - if (value == "") { + if (value == globals.prismUser.bio || value == "") { setState(() { bioEdit = false; }); @@ -882,7 +949,11 @@ class _EditProfilePanelState extends State { padding: const EdgeInsets.all(8.0), child: GestureDetector( onTap: (!usernameEdit && - (pfpEdit || bioEdit || linkEdit || coverEdit)) + (pfpEdit || + bioEdit || + linkEdit || + coverEdit || + nameEdit)) ? () async { setState(() { isLoading = true; @@ -920,6 +991,16 @@ class _EditProfilePanelState extends State { "links": links, }); } + if (nameEdit && nameController.text != "") { + globals.prismUser.name = nameController.text; + main.prefs.put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "name": nameController.text, + }); + } setState(() { isLoading = false; }); @@ -962,6 +1043,17 @@ class _EditProfilePanelState extends State { "bio": bioController.text, }); } + if (nameEdit && nameController.text != "") { + globals.prismUser.name = nameController.text; + main.prefs + .put("prismUserV2", globals.prismUser); + await firestore + .collection(USER_NEW_COLLECTION) + .doc(globals.prismUser.id) + .update({ + "name": nameController.text, + }); + } if (linkEdit) { Map links = globals.prismUser.links; for (int p = 0; p < linkIcons.length; p++) { @@ -998,7 +1090,8 @@ class _EditProfilePanelState extends State { (pfpEdit || bioEdit || linkEdit || - coverEdit)) || + coverEdit || + nameEdit)) || (usernameEdit && enabled)) ? Theme.of(context).primaryColor : Theme.of(context).errorColor.withOpacity(0.2), @@ -1007,7 +1100,8 @@ class _EditProfilePanelState extends State { (pfpEdit || bioEdit || linkEdit || - coverEdit)) || + coverEdit || + nameEdit)) || (usernameEdit && enabled)) ? Theme.of(context) .accentColor @@ -1028,7 +1122,8 @@ class _EditProfilePanelState extends State { (pfpEdit || bioEdit || linkEdit || - coverEdit)) || + coverEdit || + nameEdit)) || (usernameEdit && enabled)) ? Theme.of(context) .accentColor From 550518262f371328883077a6840ca219fa3ca1e0 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 17:24:08 +0530 Subject: [PATCH 19/33] better user profile link --- lib/data/share/createDynamicLink.dart | 16 +++++++++------- lib/ui/widgets/profile/drawerWidget.dart | 2 ++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/data/share/createDynamicLink.dart b/lib/data/share/createDynamicLink.dart index 897a9d87..1084320c 100644 --- a/lib/data/share/createDynamicLink.dart +++ b/lib/data/share/createDynamicLink.dart @@ -39,18 +39,18 @@ Future createDynamicLink( return shortUrl.toString(); } -Future createUserDynamicLink( - String name, String email, String userPhoto) async { +Future createUserDynamicLink(String name, String username, String email, + String bio, String userPhoto) async { final DynamicLinkParameters parameters = DynamicLinkParameters( socialMetaTagParameters: SocialMetaTagParameters( - title: "$name - Prism", + title: "$name (@$username)", imageUrl: Uri.parse(userPhoto), - description: "Check out my walls & setups on Prism."), + description: + bio != "" ? bio : "Check out my walls & setups on Prism."), dynamicLinkParametersOptions: DynamicLinkParametersOptions( shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short), uriPrefix: 'https://prismwallpapers.page.link', - link: Uri.parse( - 'http://prism.hash.com/user?name=$name&email=$email&userPhoto=$userPhoto'), + link: Uri.parse('http://prism.hash.com/user?name=$username'), androidParameters: AndroidParameters( packageName: 'com.hash.prism', minimumVersion: 1, @@ -60,11 +60,13 @@ Future createUserDynamicLink( minimumVersion: '1.0.1', appStoreId: '1405860595', )); + // final Uri shortUrl = await parameters.buildUrl(); final ShortDynamicLink shortDynamicLink = await parameters.buildShortLink(); final Uri shortUrl = shortDynamicLink.shortUrl; Clipboard.setData(ClipboardData(text: shortUrl.toString())); Share.share("Hey check out my profile on Prism âžœ $shortUrl"); - analytics.logShare(contentType: 'userShare', itemId: email, method: 'link'); + analytics.logShare( + contentType: 'userShare', itemId: username, method: 'link'); debugPrint(shortUrl.toString()); } diff --git a/lib/ui/widgets/profile/drawerWidget.dart b/lib/ui/widgets/profile/drawerWidget.dart index 6557fad3..7882e521 100644 --- a/lib/ui/widgets/profile/drawerWidget.dart +++ b/lib/ui/widgets/profile/drawerWidget.dart @@ -300,8 +300,10 @@ class ProfileDrawer extends StatelessWidget { context: context, onTap: () { createUserDynamicLink( + globals.prismUser.name.toString(), globals.prismUser.username.toString(), globals.prismUser.email.toString(), + globals.prismUser.bio.toString(), globals.prismUser.profilePhoto.toString(), ); }), From a0ac7af02cb203b632d1812e56996c101d3d5efd Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 17:33:54 +0530 Subject: [PATCH 20/33] fix user dynamic links --- lib/data/share/createDynamicLink.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/data/share/createDynamicLink.dart b/lib/data/share/createDynamicLink.dart index 1084320c..8edd71fd 100644 --- a/lib/data/share/createDynamicLink.dart +++ b/lib/data/share/createDynamicLink.dart @@ -50,7 +50,7 @@ Future createUserDynamicLink(String name, String username, String email, dynamicLinkParametersOptions: DynamicLinkParametersOptions( shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short), uriPrefix: 'https://prismwallpapers.page.link', - link: Uri.parse('http://prism.hash.com/user?name=$username'), + link: Uri.parse('http://prism.hash.com/user?email=$email'), androidParameters: AndroidParameters( packageName: 'com.hash.prism', minimumVersion: 1, From 8c243b4f542858e9790da752f3112ec4397a74ae Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 17:56:22 +0530 Subject: [PATCH 21/33] add wallpaper model basic --- lib/auth/wallpaperModel.dart | 111 +++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 lib/auth/wallpaperModel.dart diff --git a/lib/auth/wallpaperModel.dart b/lib/auth/wallpaperModel.dart new file mode 100644 index 00000000..d140979e --- /dev/null +++ b/lib/auth/wallpaperModel.dart @@ -0,0 +1,111 @@ +// import 'package:Prism/auth/badgeModel.dart'; +// import 'package:Prism/auth/transactionModel.dart'; +// import 'package:cloud_firestore/cloud_firestore.dart'; +// import 'package:firebase_auth/firebase_auth.dart'; +// import 'package:flutter/material.dart'; +// import 'package:hive/hive.dart'; +// import 'package:json_annotation/json_annotation.dart'; + +// part 'wallpaperModel.g.dart'; + +// enum WallpaperProvider { Prism, Wallhaven, Pexels } + +// extension WallExtension on WallpaperProvider { +// String get name { +// return this.toString().split('.').last; +// } +// } + +// @HiveType(typeId: 16) +// @JsonSerializable( +// explicitToJson: true, +// ) +// class WallpaperV2 { +// @HiveField(0) +// String username; +// @HiveField(1) +// List collections; +// @HiveField(2) +// String id; +// @HiveField(3) +// DateTime createdAt; +// @HiveField(4) +// String description; +// @HiveField(5) +// String resolution; +// @HiveField(6) +// bool review; +// @HiveField(7) +// String size; +// @HiveField(8) +// String profilePhoto; +// @HiveField(9) +// String wallpaper_provider; +// @HiveField(10) +// String wallpaper_url; +// @HiveField(11) +// String wallpaper_thumb; +// @HiveField(12) +// List subPrisms; +// @HiveField(13) +// bool free; +// @HiveField(14) +// int coins; +// @HiveField(15) +// String link; + +// WallpaperV2({ +// required this.username, +// required this.email, +// required this.id, +// required this.createdAt, +// required this.premium, +// required this.lastLoginAt, +// required this.links, +// required this.followers, +// required this.following, +// required this.profilePhoto, +// required this.bio, +// required this.loggedIn, +// required this.badges, +// required this.subPrisms, +// required this.coins, +// required this.transactions, +// required this.name, +// this.coverPhoto, +// }) { +// debugPrint("Default constructor !!!!"); +// } + +// factory PrismUsersV2.fromJson(Map json) => +// _$PrismUsersV2FromJson(json); +// factory PrismUsersV2.fromDocumentSnapshot(DocumentSnapshot doc, User user) => +// PrismUsersV2( +// name: (doc.data()!["name"] ?? user.displayName).toString(), +// username: (doc.data()!["username"] ?? user.displayName) +// .toString() +// .replaceAll(RegExp(r"(?: |[^\w\s])+"), ""), +// email: (doc.data()!["email"] ?? user.email).toString(), +// id: doc.data()!["id"].toString(), +// createdAt: doc.data()!["createdAt"].toString(), +// premium: doc.data()!["premium"] as bool, +// lastLoginAt: doc.data()!["lastLoginAt"]?.toString() ?? +// DateTime.now().toUtc().toIso8601String(), +// links: doc.data()!["links"] as Map ?? {}, +// followers: doc.data()!["followers"] as List ?? [], +// following: doc.data()!["following"] as List ?? [], +// profilePhoto: (doc.data()!["profilePhoto"] ?? user.photoURL).toString(), +// bio: (doc.data()!["bio"] ?? "").toString(), +// loggedIn: true, +// badges: (doc.data()!['badges'] as List ?? []) +// .map((e) => Badge.fromJson(e as Map)) +// .toList(), +// subPrisms: doc.data()!['subPrisms'] as List ?? [], +// coins: doc.data()!['coins'] as int ?? 0, +// transactions: (doc.data()!['transactions'] as List ?? []) +// .map((e) => PrismTransaction.fromJson(e as Map)) +// .toList(), +// coverPhoto: doc.data()!["coverPhoto"]?.toString(), +// ); +// Map toJson() => _$PrismUsersV2ToJson(this); +// } From 5bbb22ba9df87bedbc8fcf935a7efdc90f655f98 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 18:19:45 +0530 Subject: [PATCH 22/33] add download in edit wallpaper --- .../wallpapers/wallpaperFilterScreen.dart | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart index f8ff527f..ec3f0000 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart @@ -16,7 +16,9 @@ import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:gallery_saver/gallery_saver.dart'; import 'package:image/image.dart' as imagelib; +import 'package:permission_handler/permission_handler.dart'; import 'package:photo_view/photo_view.dart'; import 'package:photofilters/filters/filters.dart'; import 'package:path_provider/path_provider.dart'; @@ -24,6 +26,7 @@ import 'package:photofilters/filters/preset_filters.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:provider/provider.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/main.dart' as main; class WallpaperFilterScreen extends StatefulWidget { final imagelib.Image image; @@ -51,6 +54,7 @@ class _WallpaperFilterScreenState extends State { imagelib.Image? image; imagelib.Image? finalImage; late bool loading; + late bool isLoading; List selectedFilters = [ NoFilter(), AdenFilter(), @@ -88,6 +92,7 @@ class _WallpaperFilterScreenState extends State { void initState() { super.initState(); loading = false; + isLoading = false; _filter = selectedFilters[0]; filename = widget.filename; finalFilename = widget.finalFilename; @@ -279,6 +284,48 @@ class _WallpaperFilterScreenState extends State { }), backgroundColor: Theme.of(context).primaryColor, actions: [ + if (loading) + Container() + else if (isLoading) + Center( + child: SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator( + color: Theme.of(context).errorColor)), + ) + else + IconButton( + icon: const Icon(JamIcons.download), + onPressed: () async { + toasts.codeSend("Processing Wallpaper"); + final imageFile = await saveFilteredImage(); + final status = await Permission.storage.status; + if (!status.isGranted) { + await Permission.storage.request(); + } + setState(() { + isLoading = true; + }); + GallerySaver.saveImage(imageFile.path, albumName: "Prism") + .then((value) { + analytics.logEvent( + name: 'download_wallpaper', + parameters: {'link': imageFile.path}); + toasts.codeSend("Wall Saved in Pictures!"); + setState(() { + isLoading = false; + }); + // main.localNotification.cancelDownloadNotification(); + }).catchError((e) { + setState(() { + isLoading = false; + }); + // TODO Cancel all + // main.localNotification.cancelDownloadNotification(); + }); + }, + ), if (loading) Container() else From 8858391aadfc52b80fcabaa4df0777a6ba8303bb Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 18:06:25 +0530 Subject: [PATCH 23/33] add links display in profile --- lib/ui/pages/profile/profileScreen.dart | 282 +++++++++++++++++++++++- 1 file changed, 278 insertions(+), 4 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index fcf72638..5e1fa5bc 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -13,6 +13,7 @@ import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; import 'package:Prism/ui/widgets/popup/linkPopUp.dart'; +import 'package:Prism/ui/widgets/popup/noLoadLinkPopUp.dart'; import 'package:Prism/ui/widgets/profile/aboutList.dart'; import 'package:Prism/ui/widgets/profile/drawerWidget.dart'; import 'package:Prism/ui/widgets/profile/generalList.dart'; @@ -38,6 +39,7 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:intl/intl.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:http/http.dart' as http; +import 'package:url_launcher/url_launcher.dart'; final GlobalKey scaffoldKey = GlobalKey(); @@ -401,7 +403,7 @@ class _ProfileChildState extends State { backgroundColor: Theme.of(context).primaryColor, automaticallyImplyLeading: false, expandedHeight: - MediaQuery.of(context).size.height * 0.4, + MediaQuery.of(context).size.height * 0.46, flexibleSpace: Stack( children: [ FlexibleSpaceBar( @@ -447,9 +449,11 @@ class _ProfileChildState extends State { width: double.maxFinite, height: MediaQuery.of(context).size.height * - 0.21 - + 0.27 - 37, child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, children: [ SizedBox( width: MediaQuery.of(context) @@ -494,7 +498,7 @@ class _ProfileChildState extends State { ), ), const SizedBox( - height: 17, + height: 15, ), SizedBox( width: MediaQuery.of(context) @@ -517,7 +521,7 @@ class _ProfileChildState extends State { ), ), const SizedBox( - height: 17, + height: 15, ), SizedBox( width: MediaQuery.of(context) @@ -598,6 +602,112 @@ class _ProfileChildState extends State { ], ), ), + const SizedBox( + height: 8, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width, + height: 48, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + ...(widget.links ?? {}) + .keys + .toList() + .map((e) => IconButton( + padding: + const EdgeInsets + .all(2), + icon: Container( + padding: + const EdgeInsets + .all(6.0), + decoration: + BoxDecoration( + shape: BoxShape + .circle, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.1), + ), + child: Icon( + linksData[e]![ + "icon"] + as IconData, + size: 20, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.8), + ), + ), + onPressed: () { + launch(widget + .links![e] + .toString()); + })) + .toList() + .sublist( + 0, + (widget.links ?? {}) + .keys + .toList() + .length > + 3 + ? 3 + : (widget.links ?? + {}) + .keys + .toList() + .length, + ), + if ((widget.links ?? {}) + .keys + .toList() + .length > + 3) + IconButton( + padding: + const EdgeInsets + .all(2), + icon: Container( + padding: + const EdgeInsets + .all(6.0), + decoration: + BoxDecoration( + shape: + BoxShape.circle, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.1), + ), + child: Icon( + JamIcons + .more_horizontal, + size: 20, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.8), + ), + ), + onPressed: () { + showNoLoadLinksPopUp( + context, + widget.links!); + }), + ]), + ) ], ), ) @@ -1191,3 +1301,167 @@ class _ProfileChildState extends State { ); } } + +Map> linksData = { + 'github': { + 'name': 'github', + 'link': 'https://github.com/username', + 'icon': JamIcons.github, + 'value': '', + 'validator': 'github', + }, + 'twitter': { + 'name': 'twitter', + 'link': 'https://twitter.com/username', + 'icon': JamIcons.twitter, + 'value': '', + 'validator': 'twitter', + }, + 'instagram': { + 'name': 'instagram', + 'link': 'https://instagram.com/username', + 'icon': JamIcons.instagram, + 'value': '', + 'validator': 'instagram', + }, + 'email': { + 'name': 'email', + 'link': 'your@email.com', + 'icon': JamIcons.inbox, + 'value': '', + 'validator': '@', + }, + 'telegram': { + 'name': 'telegram', + 'link': 'https://t.me/username', + 'icon': JamIcons.paper_plane, + 'value': '', + 'validator': 't.me', + }, + 'dribbble': { + 'name': 'dribbble', + 'link': 'https://dribbble.com/username', + 'icon': JamIcons.basketball, + 'value': '', + 'validator': 'dribbble', + }, + 'linkedin': { + 'name': 'linkedin', + 'link': 'https://linkedin.com/in/username', + 'icon': JamIcons.linkedin, + 'value': '', + 'validator': 'linkedin', + }, + 'bio.link': { + 'name': 'bio.link', + 'link': 'https://bio.link/username', + 'icon': JamIcons.world, + 'value': '', + 'validator': 'bio.link', + }, + 'patreon': { + 'name': 'patreon', + 'link': 'https://patreon.com/username', + 'icon': JamIcons.patreon, + 'value': '', + 'validator': 'patreon', + }, + 'trello': { + 'name': 'trello', + 'link': 'https://trello.com/username', + 'icon': JamIcons.trello, + 'value': '', + 'validator': 'trello', + }, + 'reddit': { + 'name': 'reddit', + 'link': 'https://reddit.com/user/username', + 'icon': JamIcons.reddit, + 'value': '', + 'validator': 'reddit', + }, + 'behance': { + 'name': 'behance', + 'link': 'https://behance.net/username', + 'icon': JamIcons.behance, + 'value': '', + 'validator': 'behance.net', + }, + 'deviantart': { + 'name': 'deviantart', + 'link': 'https://deviantart.com/username', + 'icon': JamIcons.deviantart, + 'value': '', + 'validator': 'deviantart', + }, + 'gitlab': { + 'name': 'gitlab', + 'link': 'https://gitlab.com/username', + 'icon': JamIcons.gitlab, + 'value': '', + 'validator': 'gitlab', + }, + 'medium': { + 'name': 'medium', + 'link': 'https://username.medium.com/', + 'icon': JamIcons.medium, + 'value': '', + 'validator': 'medium', + }, + 'paypal': { + 'name': 'paypal', + 'link': 'https://paypal.me/username', + 'icon': JamIcons.paypal, + 'value': '', + 'validator': 'paypal', + }, + 'spotify': { + 'name': 'spotify', + 'link': 'https://open.spotify.com/user/username', + 'icon': JamIcons.spotify, + 'value': '', + 'validator': 'open.spotify', + }, + 'twitch': { + 'name': 'twitch', + 'link': 'https://twitch.tv/username', + 'icon': JamIcons.twitch, + 'value': '', + 'validator': 'twitch.tv', + }, + 'unsplash': { + 'name': 'unsplash', + 'link': 'https://unsplash.com/username', + 'icon': JamIcons.unsplash, + 'value': '', + 'validator': 'unsplash', + }, + 'youtube': { + 'name': 'youtube', + 'link': 'https://youtube.com/channel/username', + 'icon': JamIcons.youtube, + 'value': '', + 'validator': 'youtube', + }, + 'linktree': { + 'name': 'linktree', + 'link': 'https://linktr.ee/username', + 'icon': JamIcons.tree_alt, + 'value': '', + 'validator': 'linktr.ee', + }, + 'buymeacoffee': { + 'name': 'buymeacoffee', + 'link': 'https://buymeacoff.ee/username', + 'icon': JamIcons.coffee, + 'value': '', + 'validator': 'buymeacoff.ee', + }, + 'custom link': { + 'name': 'custom link', + 'link': '', + 'icon': JamIcons.link, + 'value': '', + 'validator': '', + }, +}; From 4144d163f3d587da3d524c9aa2ed0d38e188ab13 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 18:06:43 +0530 Subject: [PATCH 24/33] nav fixes in edit profile --- lib/ui/widgets/popup/editProfilePanel.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index 4161d222..fd66b161 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -1005,6 +1005,8 @@ class _EditProfilePanelState extends State { isLoading = false; }); Navigator.pop(context); + navStack.removeLast(); + debugPrint(navStack.toString()); toasts.codeSend("Details updated!"); } : (usernameEdit && enabled) @@ -1076,6 +1078,8 @@ class _EditProfilePanelState extends State { isLoading = false; }); Navigator.pop(context); + navStack.removeLast(); + debugPrint(navStack.toString()); toasts.codeSend("Details updated!"); } : null, From 8a61a77fffada9ae55365c9b72953874b52e46c4 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 18:27:10 +0530 Subject: [PATCH 25/33] add more links popup --- lib/ui/pages/profile/aboutScreen.dart | 6 +- lib/ui/pages/profile/profileScreen.dart | 17 +- lib/ui/widgets/popup/noLoadLinkPopUp.dart | 213 ++++++++++++++++++++-- 3 files changed, 220 insertions(+), 16 deletions(-) diff --git a/lib/ui/pages/profile/aboutScreen.dart b/lib/ui/pages/profile/aboutScreen.dart index 67020659..49b87428 100644 --- a/lib/ui/pages/profile/aboutScreen.dart +++ b/lib/ui/pages/profile/aboutScreen.dart @@ -338,7 +338,11 @@ class ActionButton extends StatelessWidget { fontWeight: FontWeight.bold), ), onPressed: () { - launch(link); + if (link.contains("@gmail.com")) { + launch("mailto:$link"); + } else { + launch(link); + } }), ); } diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 5e1fa5bc..1b61a920 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -648,9 +648,17 @@ class _ProfileChildState extends State { ), ), onPressed: () { - launch(widget - .links![e] - .toString()); + if (widget.links![e] + .toString() + .contains( + "@gmail.com")) { + launch( + "mailto:${widget.links![e].toString()}"); + } else { + launch(widget + .links![e] + .toString()); + } })) .toList() .sublist( @@ -704,7 +712,8 @@ class _ProfileChildState extends State { onPressed: () { showNoLoadLinksPopUp( context, - widget.links!); + widget.links ?? + {}); }), ]), ) diff --git a/lib/ui/widgets/popup/noLoadLinkPopUp.dart b/lib/ui/widgets/popup/noLoadLinkPopUp.dart index 820a9c40..c1ea84f2 100644 --- a/lib/ui/widgets/popup/noLoadLinkPopUp.dart +++ b/lib/ui/widgets/popup/noLoadLinkPopUp.dart @@ -1,17 +1,43 @@ -import 'package:Prism/data/links/model/linksModel.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; +// import 'package:Prism/data/links/model/linksModel.dart'; import 'package:Prism/ui/pages/profile/aboutScreen.dart'; import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/global/globals.dart'; void showNoLoadLinksPopUp(BuildContext context, Map link) { - List links = []; - void getLinks(Map link) { - links = linksToModel(link); - } + // List links = []; + // void getLinks(Map link) { + // links = linksToModel(link); + // } - getLinks(link); + // getLinks(link); final AlertDialog linkPopUp = AlertDialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + title: Text( + 'More links', + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 16, + color: Theme.of(context).accentColor, + ), + ), + actions: [ + FlatButton( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)), + color: Theme.of(context).errorColor, + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text( + 'CLOSE', + style: TextStyle( + fontSize: 16.0, + color: Colors.white, + ), + ), + ), + ], content: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), @@ -23,12 +49,13 @@ void showNoLoadLinksPopUp(BuildContext context, Map link) { children: [ Wrap( alignment: WrapAlignment.center, - children: links + children: link.keys + .toList() .map( (e) => ActionButton( - icon: e.icon, - link: e.link, - text: "@${e.username}", + icon: (linksData[e] ?? {})["icon"] as IconData, + link: link[e].toString(), + text: (linksData[e] ?? {})["name"].toString().inCaps, ), ) .toList(), @@ -37,10 +64,174 @@ void showNoLoadLinksPopUp(BuildContext context, Map link) { ), ), backgroundColor: Theme.of(context).primaryColor, - contentPadding: const EdgeInsets.fromLTRB(0, 0, 0, 10), + actionsPadding: const EdgeInsets.fromLTRB(10, 0, 10, 0), ); showModal( context: context, configuration: const FadeScaleTransitionConfiguration(), builder: (BuildContext context) => linkPopUp); } + +Map> linksData = { + 'github': { + 'name': 'github', + 'link': 'https://github.com/username', + 'icon': JamIcons.github, + 'value': '', + 'validator': 'github', + }, + 'twitter': { + 'name': 'twitter', + 'link': 'https://twitter.com/username', + 'icon': JamIcons.twitter, + 'value': '', + 'validator': 'twitter', + }, + 'instagram': { + 'name': 'instagram', + 'link': 'https://instagram.com/username', + 'icon': JamIcons.instagram, + 'value': '', + 'validator': 'instagram', + }, + 'email': { + 'name': 'email', + 'link': 'your@email.com', + 'icon': JamIcons.inbox, + 'value': '', + 'validator': '@', + }, + 'telegram': { + 'name': 'telegram', + 'link': 'https://t.me/username', + 'icon': JamIcons.paper_plane, + 'value': '', + 'validator': 't.me', + }, + 'dribbble': { + 'name': 'dribbble', + 'link': 'https://dribbble.com/username', + 'icon': JamIcons.basketball, + 'value': '', + 'validator': 'dribbble', + }, + 'linkedin': { + 'name': 'linkedin', + 'link': 'https://linkedin.com/in/username', + 'icon': JamIcons.linkedin, + 'value': '', + 'validator': 'linkedin', + }, + 'bio.link': { + 'name': 'bio.link', + 'link': 'https://bio.link/username', + 'icon': JamIcons.world, + 'value': '', + 'validator': 'bio.link', + }, + 'patreon': { + 'name': 'patreon', + 'link': 'https://patreon.com/username', + 'icon': JamIcons.patreon, + 'value': '', + 'validator': 'patreon', + }, + 'trello': { + 'name': 'trello', + 'link': 'https://trello.com/username', + 'icon': JamIcons.trello, + 'value': '', + 'validator': 'trello', + }, + 'reddit': { + 'name': 'reddit', + 'link': 'https://reddit.com/user/username', + 'icon': JamIcons.reddit, + 'value': '', + 'validator': 'reddit', + }, + 'behance': { + 'name': 'behance', + 'link': 'https://behance.net/username', + 'icon': JamIcons.behance, + 'value': '', + 'validator': 'behance.net', + }, + 'deviantart': { + 'name': 'deviantart', + 'link': 'https://deviantart.com/username', + 'icon': JamIcons.deviantart, + 'value': '', + 'validator': 'deviantart', + }, + 'gitlab': { + 'name': 'gitlab', + 'link': 'https://gitlab.com/username', + 'icon': JamIcons.gitlab, + 'value': '', + 'validator': 'gitlab', + }, + 'medium': { + 'name': 'medium', + 'link': 'https://username.medium.com/', + 'icon': JamIcons.medium, + 'value': '', + 'validator': 'medium', + }, + 'paypal': { + 'name': 'paypal', + 'link': 'https://paypal.me/username', + 'icon': JamIcons.paypal, + 'value': '', + 'validator': 'paypal', + }, + 'spotify': { + 'name': 'spotify', + 'link': 'https://open.spotify.com/user/username', + 'icon': JamIcons.spotify, + 'value': '', + 'validator': 'open.spotify', + }, + 'twitch': { + 'name': 'twitch', + 'link': 'https://twitch.tv/username', + 'icon': JamIcons.twitch, + 'value': '', + 'validator': 'twitch.tv', + }, + 'unsplash': { + 'name': 'unsplash', + 'link': 'https://unsplash.com/username', + 'icon': JamIcons.unsplash, + 'value': '', + 'validator': 'unsplash', + }, + 'youtube': { + 'name': 'youtube', + 'link': 'https://youtube.com/channel/username', + 'icon': JamIcons.youtube, + 'value': '', + 'validator': 'youtube', + }, + 'linktree': { + 'name': 'linktree', + 'link': 'https://linktr.ee/username', + 'icon': JamIcons.tree_alt, + 'value': '', + 'validator': 'linktr.ee', + }, + 'buymeacoffee': { + 'name': 'buymeacoffee', + 'link': 'https://buymeacoff.ee/username', + 'icon': JamIcons.coffee, + 'value': '', + 'validator': 'buymeacoff.ee', + }, + 'custom link': { + 'name': 'custom link', + 'link': '', + 'icon': JamIcons.link, + 'value': '', + 'validator': '', + }, +}; From c9a7b0700abd45863eefddf84dbf19cf78c2376f Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 18:34:29 +0530 Subject: [PATCH 26/33] fix profile size in empty profiles --- lib/ui/pages/profile/profileScreen.dart | 199 +++++++++++++----------- 1 file changed, 108 insertions(+), 91 deletions(-) diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 1b61a920..2e651766 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -403,7 +403,9 @@ class _ProfileChildState extends State { backgroundColor: Theme.of(context).primaryColor, automaticallyImplyLeading: false, expandedHeight: - MediaQuery.of(context).size.height * 0.46, + (widget.links ?? {}).keys.toList().isEmpty + ? MediaQuery.of(context).size.height * 0.4 + : MediaQuery.of(context).size.height * 0.46, flexibleSpace: Stack( children: [ FlexibleSpaceBar( @@ -447,8 +449,14 @@ class _ProfileChildState extends State { padding: const EdgeInsets.fromLTRB( 12, 4, 12, 0), width: double.maxFinite, - height: - MediaQuery.of(context).size.height * + height: (widget.links ?? {}) + .keys + .toList() + .isEmpty + ? MediaQuery.of(context).size.height * + 0.21 - + 37 + : MediaQuery.of(context).size.height * 0.27 - 37, child: Column( @@ -602,22 +610,94 @@ class _ProfileChildState extends State { ], ), ), - const SizedBox( - height: 8, - ), - SizedBox( - width: MediaQuery.of(context) - .size - .width, - height: 48, - child: Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - ...(widget.links ?? {}) - .keys - .toList() - .map((e) => IconButton( + if ((widget.links ?? {}) + .keys + .toList() + .isNotEmpty) + const SizedBox( + height: 8, + ), + if ((widget.links ?? {}) + .keys + .toList() + .isNotEmpty) + SizedBox( + width: MediaQuery.of(context) + .size + .width, + height: 48, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + ...(widget.links ?? {}) + .keys + .toList() + .map((e) => IconButton( + padding: + const EdgeInsets + .all(2), + icon: Container( + padding: + const EdgeInsets + .all(6.0), + decoration: + BoxDecoration( + shape: BoxShape + .circle, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.1), + ), + child: Icon( + linksData[e]![ + "icon"] + as IconData, + size: 20, + color: Theme.of( + context) + .accentColor + .withOpacity( + 0.8), + ), + ), + onPressed: () { + if (widget + .links![e] + .toString() + .contains( + "@gmail.com")) { + launch( + "mailto:${widget.links![e].toString()}"); + } else { + launch(widget + .links![e] + .toString()); + } + })) + .toList() + .sublist( + 0, + (widget.links ?? {}) + .keys + .toList() + .length > + 3 + ? 3 + : (widget.links ?? + {}) + .keys + .toList() + .length, + ), + if ((widget.links ?? {}) + .keys + .toList() + .length > + 3) + IconButton( padding: const EdgeInsets .all(2), @@ -636,9 +716,8 @@ class _ProfileChildState extends State { 0.1), ), child: Icon( - linksData[e]![ - "icon"] - as IconData, + JamIcons + .more_horizontal, size: 20, color: Theme.of( context) @@ -648,75 +727,13 @@ class _ProfileChildState extends State { ), ), onPressed: () { - if (widget.links![e] - .toString() - .contains( - "@gmail.com")) { - launch( - "mailto:${widget.links![e].toString()}"); - } else { - launch(widget - .links![e] - .toString()); - } - })) - .toList() - .sublist( - 0, - (widget.links ?? {}) - .keys - .toList() - .length > - 3 - ? 3 - : (widget.links ?? - {}) - .keys - .toList() - .length, - ), - if ((widget.links ?? {}) - .keys - .toList() - .length > - 3) - IconButton( - padding: - const EdgeInsets - .all(2), - icon: Container( - padding: - const EdgeInsets - .all(6.0), - decoration: - BoxDecoration( - shape: - BoxShape.circle, - color: Theme.of( - context) - .accentColor - .withOpacity( - 0.1), - ), - child: Icon( - JamIcons - .more_horizontal, - size: 20, - color: Theme.of( - context) - .accentColor - .withOpacity( - 0.8), - ), - ), - onPressed: () { - showNoLoadLinksPopUp( - context, - widget.links ?? - {}); - }), - ]), - ) + showNoLoadLinksPopUp( + context, + widget.links ?? + {}); + }), + ]), + ) ], ), ) From 0788713cf148aa8bd71f89cfbd9b20f5944b8fc4 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 18:38:25 +0530 Subject: [PATCH 27/33] add 22 new filters --- .../pages/home/wallpapers/customFilters.dart | 49 +++++++++++++++++++ .../wallpapers/wallpaperFilterScreen.dart | 22 +++++++++ 2 files changed, 71 insertions(+) diff --git a/lib/ui/pages/home/wallpapers/customFilters.dart b/lib/ui/pages/home/wallpapers/customFilters.dart index 2f7e5cd3..f3f0b264 100644 --- a/lib/ui/pages/home/wallpapers/customFilters.dart +++ b/lib/ui/pages/home/wallpapers/customFilters.dart @@ -32,3 +32,52 @@ class EdgeDetectionFilter extends ImageFilter { )); } } + +class EmbossFilter extends ImageFilter { + EmbossFilter() : super(name: "Emboss") { + subFilters.add(ConvolutionSubFilter.fromKernel( + embossKernel, + )); + } +} + +class BlurMaxFilter extends ImageFilter { + BlurMaxFilter() : super(name: "Blur Max") { + subFilters.add(ConvolutionSubFilter.fromKernel( + blurKernel, + )); + subFilters.add(ConvolutionSubFilter.fromKernel( + blurKernel, + )); + subFilters.add(ConvolutionSubFilter.fromKernel( + blurKernel, + )); + subFilters.add(ConvolutionSubFilter.fromKernel( + blurKernel, + )); + } +} + +class MeanFilter extends ImageFilter { + MeanFilter() : super(name: "Mean") { + subFilters.add(ConvolutionSubFilter.fromKernel( + mean5x5Kernel, + )); + } +} + +class HighPassFilter extends ImageFilter { + HighPassFilter() : super(name: "High Pass") { + subFilters.add(ConvolutionSubFilter.fromKernel( + highPass3x3Kernel, + )); + } +} + +class LowPassFilter extends ImageFilter { + LowPassFilter() : super(name: "Low Pass") { + subFilters.add(ConvolutionSubFilter.fromKernel( + lowPass5x5Kernel, + )); + } +} diff --git a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart index ec3f0000..eb8b0ec1 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart @@ -57,33 +57,55 @@ class _WallpaperFilterScreenState extends State { late bool isLoading; List selectedFilters = [ NoFilter(), + AddictiveBlueFilter(), + AddictiveRedFilter(), AdenFilter(), AmaroFilter(), + AshbyFilter(), BlurFilter(), + BlurMaxFilter(), BrannanFilter(), BrooklynFilter(), + CharmesFilter(), ClarendonFilter(), + CremaFilter(), DogpatchFilter(), + EarlybirdFilter(), EdgeDetectionFilter(), + EmbossFilter(), + F1977Filter(), GinghamFilter(), GinzaFilter(), HefeFilter(), HelenaFilter(), + HighPassFilter(), HudsonFilter(), InkwellFilter(), InvertFilter(), JunoFilter(), KelvinFilter(), LarkFilter(), + LoFiFilter(), + LowPassFilter(), LudwigFilter(), MavenFilter(), MayfairFilter(), + MeanFilter(), MoonFilter(), + NashvilleFilter(), + PerpetuaFilter(), ReyesFilter(), + RiseFilter(), SharpenFilter(), + SierraFilter(), SkylineFilter(), + SlumberFilter(), + StinsonFilter(), SutroFilter(), + ToasterFilter(), + ValenciaFilter(), VesperFilter(), + WaldenFilter(), WillowFilter(), XProIIFilter(), ]; From 67c821700da0a6b400ffebef4b83b47caf5b5779 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 18:42:34 +0530 Subject: [PATCH 28/33] remove filters from beta --- .../wallpapers/wallpaperFilterScreen.dart | 27 +++---------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart index eb8b0ec1..416c3882 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart @@ -272,30 +272,9 @@ class _WallpaperFilterScreenState extends State { onWillPop: onWillPop, child: Scaffold( appBar: AppBar( - title: Row( - children: [ - Text( - "Edit Wallpaper", - style: Theme.of(context).textTheme.headline3, - ), - Container( - margin: const EdgeInsets.only(left: 3, bottom: 5), - decoration: BoxDecoration( - color: Theme.of(context).errorColor, - borderRadius: BorderRadius.circular(500)), - child: Padding( - padding: - const EdgeInsets.symmetric(vertical: 1.0, horizontal: 4), - child: Text( - "BETA", - style: TextStyle( - fontSize: 9, - color: Theme.of(context).accentColor, - ), - ), - ), - ), - ], + title: Text( + "Edit Wallpaper", + style: Theme.of(context).textTheme.headline3, ), leading: IconButton( icon: const Icon(JamIcons.close), From d347c6ab9f6d47c1caadacf3eaf9fc429f20c123 Mon Sep 17 00:00:00 2001 From: Abhay Maurya Date: Sun, 8 Aug 2021 19:32:41 +0530 Subject: [PATCH 29/33] add user copy code --- lib/auth/userModel.dart | 32 +++++++++++++++++++ .../profile/wallpaper/getUserProfile.dart | 17 ++++++++++ 2 files changed, 49 insertions(+) diff --git a/lib/auth/userModel.dart b/lib/auth/userModel.dart index 2805759d..7e30c6a7 100644 --- a/lib/auth/userModel.dart +++ b/lib/auth/userModel.dart @@ -103,5 +103,37 @@ class PrismUsersV2 { .toList(), coverPhoto: doc.data()!["coverPhoto"]?.toString(), ); + + // factory PrismUsersV2.fromDocumentSnapshotWithoutUser(DocumentSnapshot doc) => + // PrismUsersV2( + // name: (doc.data()!["name"] ?? "").toString(), + // username: (doc.data()!["username"] ?? "") + // .toString() + // .replaceAll(RegExp(r"(?: |[^\w\s])+"), ""), + // email: (doc.data()!["email"] ?? "").toString(), + // id: doc.data()!["id"].toString(), + // createdAt: DateTime.fromMillisecondsSinceEpoch( + // (doc.data()!["createdAt"] as Timestamp).millisecondsSinceEpoch) + // .toUtc() + // .toIso8601String(), + // premium: doc.data()!["premium"] as bool, + // lastLoginAt: doc.data()!["lastLoginAt"]?.toString() ?? + // DateTime.now().toUtc().toIso8601String(), + // links: doc.data()!["links"] as Map ?? {}, + // followers: doc.data()!["followers"] as List ?? [], + // following: doc.data()!["following"] as List ?? [], + // profilePhoto: (doc.data()!["profilePhoto"] ?? "").toString(), + // bio: (doc.data()!["bio"] ?? "").toString(), + // loggedIn: true, + // badges: (doc.data()!['badges'] as List ?? []) + // .map((e) => Badge.fromJson(e as Map)) + // .toList(), + // subPrisms: doc.data()!['subPrisms'] as List ?? [], + // coins: doc.data()!['coins'] as int ?? 0, + // transactions: (doc.data()!['transactions'] as List ?? []) + // .map((e) => PrismTransaction.fromJson(e as Map)) + // .toList(), + // coverPhoto: doc.data()!["coverPhoto"]?.toString(), + // ); Map toJson() => _$PrismUsersV2ToJson(this); } diff --git a/lib/data/profile/wallpaper/getUserProfile.dart b/lib/data/profile/wallpaper/getUserProfile.dart index bb60e7b0..d56c53f3 100644 --- a/lib/data/profile/wallpaper/getUserProfile.dart +++ b/lib/data/profile/wallpaper/getUserProfile.dart @@ -1,6 +1,9 @@ import 'package:Prism/auth/google_auth.dart'; +import 'package:Prism/auth/userModel.dart'; +import 'package:Prism/auth/userOldModel.dart'; import 'package:Prism/data/links/model/linksModel.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -126,6 +129,20 @@ Future unfollow(String email, String id) async { }); } +// Future copyUser() async { +// await databaseReference +// .collection(USER_OLD_COLLECTION) +// .doc("3KVCKlBiY7m6dDfyhRCj") +// .get() +// .then((value) async { +// final user = PrismUsersV2.fromDocumentSnapshotWithoutUser(value); +// await FirebaseFirestore.instance +// .collection(USER_NEW_COLLECTION) +// .doc("3KVCKlBiY7m6dDfyhRCj") +// .set(user.toJson()); +// }); +// } + Future setUserLinks(List linklist, String id) async { final Map updateLink = {}; linklist.forEach((element) { From 2aa5840605e9ddaca670546cfe640b7210064edd Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 19:04:14 +0530 Subject: [PATCH 30/33] update version to v2.6.8+70 --- lib/global/globals.dart | 4 ++-- lib/ui/widgets/popup/changelogPopUp.dart | 14 ++++++++++++++ pubspec.yaml | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/global/globals.dart b/lib/global/globals.dart index 59267195..e492a978 100644 --- a/lib/global/globals.dart +++ b/lib/global/globals.dart @@ -27,9 +27,9 @@ PrismUsersV2 prismUser = main.prefs.get( coverPhoto: "", ), ) as PrismUsersV2; -String currentAppVersion = '2.6.7'; +String currentAppVersion = '2.6.8'; String obsoleteAppVersion = '2.6.0'; -String currentAppVersionCode = '69'; +String currentAppVersionCode = '70'; bool updateChecked = false; bool updateAvailable = false; Map versionInfo = {}; diff --git a/lib/ui/widgets/popup/changelogPopUp.dart b/lib/ui/widgets/popup/changelogPopUp.dart index ac0552c9..bd83d87a 100644 --- a/lib/ui/widgets/popup/changelogPopUp.dart +++ b/lib/ui/widgets/popup/changelogPopUp.dart @@ -46,6 +46,20 @@ void showChangelog(BuildContext context, Function func) { child: Column( mainAxisSize: MainAxisSize.min, children: const [ + ChangeVersion(number: 'v2.6.8'), + Change( + icon: JamIcons.user, + text: "All-new beautiful profile."), + Change( + icon: JamIcons.link, + text: "Add upto 25 links in your profile."), + Change( + icon: JamIcons.filter, + text: "Added 23 new filters like Rise, Ashby, etc."), + Change( + icon: JamIcons.bug, + text: + "Fixed first time app open stuck on splash screen bug."), ChangeVersion(number: 'v2.6.7'), Change( icon: JamIcons.user, diff --git a/pubspec.yaml b/pubspec.yaml index 20a703de..1c05b378 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,7 +12,7 @@ publish_to: none # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2.6.7+69 +version: 2.6.8+70 environment: sdk: '>=2.12.0 <3.0.0' From 85a6881560dac2d81d65e39b73092a5a7a38017f Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 19:32:38 +0530 Subject: [PATCH 31/33] change debug print to logger --- lib/auth/badgeModel.dart | 3 +- lib/auth/google_auth.dart | 17 +-- lib/auth/transactionModel.dart | 3 +- lib/auth/userModel.dart | 3 +- lib/auth/userOldModel.dart | 9 +- lib/auth/wallpaperModel.dart | 2 +- .../provider/collectionsWithoutProvider.dart | 13 ++- .../provider/favouriteProvider.dart | 13 ++- .../provider/favouriteSetupProvider.dart | 13 ++- lib/data/notifications/notifications.dart | 7 +- .../provider/pexelsWithoutProvider.dart | 26 ++--- .../prism/provider/prismWithoutProvider.dart | 23 ++-- .../profile/wallpaper/getUserProfile.dart | 17 +-- .../wallpaper/profileSetupProvider.dart | 5 +- .../wallpaper/profileWallProvider.dart | 5 +- lib/data/setups/provider/setupProvider.dart | 9 +- lib/data/share/createDynamicLink.dart | 13 ++- .../provider/wallhavenWithoutProvider.dart | 25 ++-- lib/logger/logger.dart | 4 +- lib/main.dart | 2 +- lib/payments/upgrade.dart | 37 +++--- lib/routes/router.dart | 81 ++++++------- lib/theme/darkThemeModel.dart | 3 +- lib/theme/themeModel.dart | 3 +- lib/ui/pages/categories/colorScreen.dart | 5 +- lib/ui/pages/download/downloadScreen.dart | 7 +- .../download/downloadWallpaperViewScreen.dart | 7 +- .../pages/favourite/favouriteSetupScreen.dart | 3 +- .../favourite/favouriteSetupViewScreen.dart | 107 +++++++++--------- .../pages/favourite/favouriteWallScreen.dart | 3 +- .../favourite/favouriteWallViewScreen.dart | 39 +++---- .../home/collections/collectionScreen.dart | 3 +- .../collections/collectionViewScreen.dart | 3 +- .../pages/home/core/notificationScreen.dart | 5 +- lib/ui/pages/home/core/pageManager.dart | 33 +++--- lib/ui/pages/home/core/splashScreen.dart | 17 +-- .../home/wallpapers/followingScreen.dart | 7 +- lib/ui/pages/home/wallpapers/homeScreen.dart | 5 +- .../wallpapers/wallpaperFilterScreen.dart | 23 ++-- .../home/wallpapers/wallpaperScreen.dart | 97 ++++++++-------- lib/ui/pages/onboarding/onboardingScreen.dart | 3 +- lib/ui/pages/profile/aboutScreen.dart | 9 +- lib/ui/pages/profile/editSetupDetails.dart | 11 +- lib/ui/pages/profile/followerProfile.dart | 18 +-- lib/ui/pages/profile/followersScreen.dart | 3 +- lib/ui/pages/profile/profileScreen.dart | 5 +- .../pages/profile/profileSetupViewScreen.dart | 19 ++-- .../pages/profile/profileWallViewScreen.dart | 21 ++-- lib/ui/pages/profile/reviewScreen.dart | 29 ++--- lib/ui/pages/profile/settings.dart | 5 +- lib/ui/pages/profile/sharePrismScreen.dart | 3 +- lib/ui/pages/profile/themeView.dart | 13 ++- .../profile/userProfileSetupViewScreen.dart | 13 ++- .../profile/userProfileWallViewScreen.dart | 21 ++-- lib/ui/pages/search/searchScreen.dart | 9 +- .../pages/search/searchWallpaperScreen.dart | 39 +++---- lib/ui/pages/setup/setupScreen.dart | 7 +- lib/ui/pages/setup/setupViewScreen.dart | 13 ++- lib/ui/pages/setup/shareSetupViewScreen.dart | 17 +-- lib/ui/pages/share/shareWallViewScreen.dart | 77 +++++++------ lib/ui/pages/upload/editWallScreen.dart | 13 ++- lib/ui/pages/upload/setupGuidelines.dart | 5 +- lib/ui/pages/upload/uploadSetupScreen.dart | 13 ++- lib/ui/pages/upload/uploadWallScreen.dart | 23 ++-- lib/ui/widgets/favourite/favLoader.dart | 5 +- lib/ui/widgets/favourite/favSetupLoader.dart | 5 +- .../focussedMenu/focusedMenuDetails.dart | 5 +- .../searchFocusedMenuDetails.dart | 3 +- .../home/collections/collectionsGrid.dart | 3 +- .../home/collections/collectionsViewGrid.dart | 3 +- .../collections/loadingCardsCollection.dart | 3 +- lib/ui/widgets/home/core/bottomNavBar.dart | 31 ++--- lib/ui/widgets/home/core/categoriesBar.dart | 5 +- lib/ui/widgets/home/core/headingChipBar.dart | 3 +- lib/ui/widgets/home/wallpapers/colorGrid.dart | 3 +- .../widgets/home/wallpapers/colorLoader.dart | 5 +- lib/ui/widgets/home/wallpapers/loading.dart | 3 +- .../home/wallpapers/wallpaperGrid.dart | 3 +- .../home/wallpapers/wallpaperLoader.dart | 5 +- .../home/wallpapers/wallpaperTile.dart | 3 +- lib/ui/widgets/menuButton/downloadButton.dart | 32 +++--- .../menuButton/favWallpaperButton.dart | 3 +- .../menuButton/setWallpaperButton.dart | 31 ++--- lib/ui/widgets/menuButton/shareButton.dart | 5 +- lib/ui/widgets/popup/categoryPopUp.dart | 6 +- lib/ui/widgets/popup/colorsPopUp.dart | 3 +- lib/ui/widgets/popup/contriPopUp.dart | 7 +- lib/ui/widgets/popup/editProfilePanel.dart | 28 ++--- lib/ui/widgets/popup/linkPopUp.dart | 9 +- lib/ui/widgets/popup/signInPopUp.dart | 3 +- lib/ui/widgets/profile/downloadList.dart | 5 +- lib/ui/widgets/profile/drawerWidget.dart | 6 +- lib/ui/widgets/profile/prismList.dart | 4 +- .../widgets/profile/uploadedSetupsLoader.dart | 7 +- .../widgets/profile/uploadedWallsLoader.dart | 5 +- lib/ui/widgets/profile/userList.dart | 3 +- lib/ui/widgets/profile/userProfileGrid.dart | 3 +- lib/ui/widgets/profile/userProfileLoader.dart | 5 +- .../widgets/profile/userProfileSetupGrid.dart | 3 +- .../profile/userProfileSetupLoader.dart | 5 +- lib/ui/widgets/search/searchGrid.dart | 14 ++- lib/ui/widgets/setups/loadingSetups.dart | 3 +- 102 files changed, 731 insertions(+), 636 deletions(-) diff --git a/lib/auth/badgeModel.dart b/lib/auth/badgeModel.dart index 7930f6e8..1794df14 100644 --- a/lib/auth/badgeModel.dart +++ b/lib/auth/badgeModel.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:json_annotation/json_annotation.dart'; @@ -33,7 +34,7 @@ class Badge { required this.color, required this.url, }) { - debugPrint("Default constructor !!!!"); + logger.d("Default constructor !!!!"); } factory Badge.fromJson(Map json) => _$BadgeFromJson(json); diff --git a/lib/auth/google_auth.dart b/lib/auth/google_auth.dart index e32e08e3..74596eb1 100644 --- a/lib/auth/google_auth.dart +++ b/lib/auth/google_auth.dart @@ -1,5 +1,6 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/auth/userModel.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/payments/upgrade.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; @@ -50,8 +51,8 @@ class GoogleAuth { if (user != null) { final List usersData = await getUsersData(user); // User exists in both. Therefore go ahead with the new collection, and forget the old one. - print("USERDATA0 ${usersData[0]}"); - print("USERDATA1 ${usersData[1]}"); + logger.d("USERDATA0 ${usersData[0]}"); + logger.d("USERDATA1 ${usersData[1]}"); if (usersData[0] != null && usersData[1] != null) { final doc = usersData[1]!; globals.prismUser = PrismUsersV2.fromDocumentSnapshot(doc, user); @@ -62,7 +63,7 @@ class GoogleAuth { 'lastLoginAt': DateTime.now().toUtc().toIso8601String(), 'loggedIn': true, }); - print("USERDATA CASE1 ${globals.prismUser.toJson()}"); + logger.d("USERDATA CASE1 ${globals.prismUser.toJson()}"); } // User exists in old database. Copy/create him in the new db. else if (usersData[0] != null && usersData[1] == null) { @@ -72,7 +73,7 @@ class GoogleAuth { .collection(USER_NEW_COLLECTION) .doc(globals.prismUser.id) .set(globals.prismUser.toJson()); - print("USERDATA CASE2 ${globals.prismUser.toJson()}"); + logger.d("USERDATA CASE2 ${globals.prismUser.toJson()}"); } // User exists in new database. Simply sign him in. else if (usersData[0] == null && usersData[1] != null) { @@ -85,7 +86,7 @@ class GoogleAuth { 'lastLoginAt': DateTime.now().toUtc().toIso8601String(), 'loggedIn': true, }); - print("USERDATA CASE3 ${globals.prismUser.toJson()}"); + logger.d("USERDATA CASE3 ${globals.prismUser.toJson()}"); } // User exists in none. Create new data in new db and sign him in. else { @@ -113,7 +114,7 @@ class GoogleAuth { .collection(USER_NEW_COLLECTION) .doc(globals.prismUser.id) .set(globals.prismUser.toJson()); - print("USERDATA CASE4 ${globals.prismUser.toJson()}"); + logger.d("USERDATA CASE4 ${globals.prismUser.toJson()}"); } await prefs.put('prismUserV2', globals.prismUser); @@ -161,13 +162,13 @@ class GoogleAuth { value.put('prismUserV2', globals.prismUser); }); await Purchases.reset(); - debugPrint("User Sign Out"); + logger.d("User Sign Out"); return true; } Future isSignedIn() async { await googleSignIn.isSignedIn().then((value) { - debugPrint(value.toString()); + logger.d(value.toString()); return value; }); return false; diff --git a/lib/auth/transactionModel.dart b/lib/auth/transactionModel.dart index 9136d271..943c467d 100644 --- a/lib/auth/transactionModel.dart +++ b/lib/auth/transactionModel.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:json_annotation/json_annotation.dart'; @@ -33,7 +34,7 @@ class PrismTransaction { required this.by, required this.processedAt, }) { - debugPrint("Default constructor !!!!"); + logger.d("Default constructor !!!!"); } factory PrismTransaction.fromJson(Map json) => diff --git a/lib/auth/userModel.dart b/lib/auth/userModel.dart index 7e30c6a7..222399eb 100644 --- a/lib/auth/userModel.dart +++ b/lib/auth/userModel.dart @@ -1,5 +1,6 @@ import 'package:Prism/auth/badgeModel.dart'; import 'package:Prism/auth/transactionModel.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; @@ -70,7 +71,7 @@ class PrismUsersV2 { required this.name, this.coverPhoto, }) { - debugPrint("Default constructor !!!!"); + logger.d("Default constructor !!!!"); } factory PrismUsersV2.fromJson(Map json) => diff --git a/lib/auth/userOldModel.dart b/lib/auth/userOldModel.dart index b91b0594..aade2678 100644 --- a/lib/auth/userOldModel.dart +++ b/lib/auth/userOldModel.dart @@ -1,4 +1,5 @@ import 'package:Prism/auth/google_auth.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; @@ -47,7 +48,7 @@ class PrismUsers { required this.bio, required this.loggedIn, }) { - debugPrint("Default constructor !!!!"); + logger.d("Default constructor !!!!"); } PrismUsers.withSave({ @@ -64,7 +65,7 @@ class PrismUsers { required this.bio, required this.loggedIn, }) { - debugPrint("With Save constructor !!!!"); + logger.d("With Save constructor !!!!"); FirebaseFirestore.instance.collection(USER_NEW_COLLECTION).doc(id).update({ 'bio': bio, 'username': username, @@ -93,7 +94,7 @@ class PrismUsers { this.profilePhoto = "", this.loggedIn = false, }) { - debugPrint("initial constructor !!!!"); + logger.d("initial constructor !!!!"); } PrismUsers.withoutSave({ @@ -110,7 +111,7 @@ class PrismUsers { required this.bio, required this.loggedIn, }) { - debugPrint("Without save constructor !!!!"); + logger.d("Without save constructor !!!!"); FirebaseFirestore.instance.collection(USER_NEW_COLLECTION).doc(id).update({ 'bio': bio, 'username': username, diff --git a/lib/auth/wallpaperModel.dart b/lib/auth/wallpaperModel.dart index d140979e..2b3d2441 100644 --- a/lib/auth/wallpaperModel.dart +++ b/lib/auth/wallpaperModel.dart @@ -74,7 +74,7 @@ // required this.name, // this.coverPhoto, // }) { -// debugPrint("Default constructor !!!!"); +// logger.d("Default constructor !!!!"); // } // factory PrismUsersV2.fromJson(Map json) => diff --git a/lib/data/collections/provider/collectionsWithoutProvider.dart b/lib/data/collections/provider/collectionsWithoutProvider.dart index fcbb06a7..143668f3 100644 --- a/lib/data/collections/provider/collectionsWithoutProvider.dart +++ b/lib/data/collections/provider/collectionsWithoutProvider.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/foundation.dart'; @@ -9,7 +10,7 @@ String? currentCollectionName; Future getCollections() async { if (navStack.last == "Home") { - debugPrint("Fetching collections!"); + logger.d("Fetching collections!"); collections = []; await databaseReference .collection("collections") @@ -20,17 +21,17 @@ Future getCollections() async { collections!.add(doc.data()); } }).catchError((e) { - debugPrint(e.toString()); - debugPrint("data done with error"); + logger.d(e.toString()); + logger.d("data done with error"); }); } else { - debugPrint("Refresh blocked"); + logger.d("Refresh blocked"); } return collections; } Future getCollectionWithName(String name) async { - debugPrint("Fetching $name collection's first 24 walls"); + logger.d("Fetching $name collection's first 24 walls"); currentCollectionName = name; anyCollectionWalls = []; await databaseReference @@ -47,7 +48,7 @@ Future getCollectionWithName(String name) async { } Future seeMoreCollectionWithName() async { - debugPrint("Fetching $currentCollectionName collection's more walls"); + logger.d("Fetching $currentCollectionName collection's more walls"); await databaseReference .collection("walls") .where('review', isEqualTo: true) diff --git a/lib/data/favourites/provider/favouriteProvider.dart b/lib/data/favourites/provider/favouriteProvider.dart index bb918c2a..b70a3687 100644 --- a/lib/data/favourites/provider/favouriteProvider.dart +++ b/lib/data/favourites/provider/favouriteProvider.dart @@ -1,6 +1,7 @@ import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -34,7 +35,7 @@ class FavouriteProvider extends ChangeNotifier { liked = liked!.reversed.toList(); // }); // .catchError((e) { - // debugPrint("data done with error"); + // logger.d("data done with error"); }); return liked; @@ -50,7 +51,7 @@ class FavouriteProvider extends ChangeNotifier { .doc(id) .delete(); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } await getDataBase(); return true; @@ -131,7 +132,7 @@ class FavouriteProvider extends ChangeNotifier { } } if (index == null) { - debugPrint("Fav"); + logger.d("Fav"); createDataByWall(provider, wallhaven, pexels, prism); localFavSave(provider, wallhaven, pexels, prism); } else { @@ -169,9 +170,9 @@ class FavouriteProvider extends ChangeNotifier { Future countFav() async { int favs = 0; - debugPrint("in countfav"); + logger.d("in countfav"); await getDataBase().then((value) { - debugPrint(value!.length.toString()); + logger.d(value!.length.toString()); favs = value.length; }); return favs; @@ -191,7 +192,7 @@ class FavouriteProvider extends ChangeNotifier { } }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } await getDataBase(); return true; diff --git a/lib/data/favourites/provider/favouriteSetupProvider.dart b/lib/data/favourites/provider/favouriteSetupProvider.dart index ed8cb97a..d846b4fb 100644 --- a/lib/data/favourites/provider/favouriteSetupProvider.dart +++ b/lib/data/favourites/provider/favouriteSetupProvider.dart @@ -1,4 +1,5 @@ import 'package:Prism/auth/google_auth.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -21,7 +22,7 @@ class FavouriteSetupProvider extends ChangeNotifier { liked!.add(f.data()); } }).catchError((e) { - debugPrint("data done with error"); + logger.d("data done with error"); }); return liked; @@ -37,7 +38,7 @@ class FavouriteSetupProvider extends ChangeNotifier { .doc(id) .delete(); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } await getDataBase(); return true; @@ -84,7 +85,7 @@ class FavouriteSetupProvider extends ChangeNotifier { } } if (index == null) { - debugPrint("Fav"); + logger.d("Fav"); createFavSetup(setup!); localFavSave(id); } else { @@ -110,9 +111,9 @@ class FavouriteSetupProvider extends ChangeNotifier { Future countFavSetups() async { int favs = 0; - debugPrint("in countfavsetup"); + logger.d("in countfavsetup"); await getDataBase().then((value) { - debugPrint(value!.length.toString()); + logger.d(value!.length.toString()); favs = value.length; }); return favs; @@ -132,7 +133,7 @@ class FavouriteSetupProvider extends ChangeNotifier { } }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } await getDataBase(); return true; diff --git a/lib/data/notifications/notifications.dart b/lib/data/notifications/notifications.dart index a9b1abe4..2cc98dc5 100644 --- a/lib/data/notifications/notifications.dart +++ b/lib/data/notifications/notifications.dart @@ -1,4 +1,5 @@ import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:hive/hive.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -28,10 +29,10 @@ Future getLatestNotifs(String modifier) async { } Future getNotifs() async { - debugPrint("Fetching notifs"); + logger.d("Fetching notifs"); final Box box = Hive.box('inAppNotifs'); if (main.prefs.get('lastFetchTime') != null) { - debugPrint("Last fetch time ${main.prefs.get('lastFetchTime')}"); + logger.d("Last fetch time ${main.prefs.get('lastFetchTime')}"); if (globals.prismUser.premium == false) { getLatestNotifs('free').then((snap) { for (final doc in snap.docs) { @@ -63,7 +64,7 @@ Future getNotifs() async { }); main.prefs.put('lastFetchTime', DateTime.now()); } else { - debugPrint("Fetching for first time"); + logger.d("Fetching for first time"); box.clear(); if (globals.prismUser.premium == false) { getLastMonthNotifs('free').then((snap) { diff --git a/lib/data/pexels/provider/pexelsWithoutProvider.dart b/lib/data/pexels/provider/pexelsWithoutProvider.dart index 911236da..b247b953 100644 --- a/lib/data/pexels/provider/pexelsWithoutProvider.dart +++ b/lib/data/pexels/provider/pexelsWithoutProvider.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:Prism/data/categories/categories.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; @@ -30,7 +31,7 @@ Future> categoryDataFetcherP( pageNumbersP[index] = {categoryName: origPageNumber + 1}; } if (navStack.last == "Home") { - debugPrint( + logger.d( "https://api.pexels.com/v1/search?query=$categoryName&per_page=80&page=${pageNumbersP[index][categoryName]}"); http.get( Uri.parse( @@ -51,12 +52,12 @@ Future> categoryDataFetcherP( ); } pageNumbersP[index][categoryName] = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsP; }, ); } else { - debugPrint("Refresh Blocked"); + logger.d("Refresh Blocked"); } return wallsP; } @@ -89,18 +90,18 @@ Future> getDataP(String mode) async { ); } pageGetDataP = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsP; }, ); } else { - debugPrint("Refresh Blocked"); + logger.d("Refresh Blocked"); } return wallsP; } Future getWallbyIDP(String? id) async { - debugPrint("https://api.pexels.com/v1/photos/$id"); + logger.d("https://api.pexels.com/v1/photos/$id"); wall = null; http.get(Uri.parse("https://api.pexels.com/v1/photos/$id"), headers: {"Authorization": pexelApiKey}).then( @@ -138,7 +139,7 @@ Future> getWallsPbyQuery(String query) async { ); } pageGetQueryP = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsPS; }, ); @@ -165,7 +166,7 @@ Future> getWallsPbyQueryPage(String query) async { ); } pageGetQueryP = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsPS; }, ); @@ -173,8 +174,7 @@ Future> getWallsPbyQueryPage(String query) async { } Future> getWallsPbyColor(String query) async { - debugPrint( - "https://api.pexels.com/v1/search?query=$query&per_page=24&page=1"); + logger.d("https://api.pexels.com/v1/search?query=$query&per_page=24&page=1"); http.get( Uri.parse( "https://api.pexels.com/v1/search?query=$query&per_page=24&page=1"), @@ -194,7 +194,7 @@ Future> getWallsPbyColor(String query) async { ); } pageColorsP = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsC; }, ); @@ -202,7 +202,7 @@ Future> getWallsPbyColor(String query) async { } Future> getWallsPbyColorPage(String query) async { - debugPrint( + logger.d( "https://api.pexels.com/v1/search?query=$query&per_page=24&page=$pageColorsP"); http.get( Uri.parse( @@ -223,7 +223,7 @@ Future> getWallsPbyColorPage(String query) async { ); } pageColorsP = (resp["page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return wallsC; }, ); diff --git a/lib/data/prism/provider/prismWithoutProvider.dart b/lib/data/prism/provider/prismWithoutProvider.dart index 069f9e56..674fc18c 100644 --- a/lib/data/prism/provider/prismWithoutProvider.dart +++ b/lib/data/prism/provider/prismWithoutProvider.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/foundation.dart'; @@ -14,7 +15,7 @@ late List wallsDataL; Map wall = {}; Future getPrismWalls() async { if (navStack.last == "Home") { - debugPrint("Fetching first 24 walls!"); + logger.d("Fetching first 24 walls!"); prismWalls = []; subPrismWalls = []; await databaseReference @@ -33,24 +34,24 @@ Future getPrismWalls() async { prismWalls!.add(map); } if (prismWalls != []) { - debugPrint("${prismWalls!.length} walls fetched!"); + logger.d("${prismWalls!.length} walls fetched!"); subPrismWalls = prismWalls; } else { - debugPrint("Not connected to Internet"); + logger.d("Not connected to Internet"); subPrismWalls = []; } }).catchError((e) { - debugPrint(e.toString()); - debugPrint("data done with error"); + logger.d(e.toString()); + logger.d("data done with error"); }); } else { - debugPrint("Refresh blocked"); + logger.d("Refresh blocked"); } return subPrismWalls; } Future seeMorePrism() async { - debugPrint("Fetching more walls!"); + logger.d("Fetching more walls!"); await databaseReference .collection("walls") .where('review', isEqualTo: true) @@ -71,12 +72,12 @@ Future seeMorePrism() async { if (prismWalls != []) { final int len = prismWalls!.length; final double pageNumber = len / 24; - debugPrint("${value.docs.length} walls fetched!"); - debugPrint("$len total walls fetched!"); - debugPrint("PageNumber: $pageNumber"); + logger.d("${value.docs.length} walls fetched!"); + logger.d("$len total walls fetched!"); + logger.d("PageNumber: $pageNumber"); subPrismWalls!.addAll(prismWalls!.sublist(subPrismWalls!.length)); } else { - debugPrint("Not connected to Internet"); + logger.d("Not connected to Internet"); } }); return subPrismWalls; diff --git a/lib/data/profile/wallpaper/getUserProfile.dart b/lib/data/profile/wallpaper/getUserProfile.dart index d56c53f3..237f6b5b 100644 --- a/lib/data/profile/wallpaper/getUserProfile.dart +++ b/lib/data/profile/wallpaper/getUserProfile.dart @@ -2,6 +2,7 @@ import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/auth/userModel.dart'; import 'package:Prism/auth/userOldModel.dart'; import 'package:Prism/data/links/model/linksModel.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; @@ -13,7 +14,7 @@ class UserProfileProvider extends ChangeNotifier { List? userProfileSetups; Future getuserProfileWalls(String? email) async { - debugPrint("Fetching first 12 profile walls"); + logger.d("Fetching first 12 profile walls"); userProfileWalls = []; await databaseReference .collection("walls") @@ -25,14 +26,14 @@ class UserProfileProvider extends ChangeNotifier { .then((value) { userProfileWalls = value.docs; }).catchError((e) { - debugPrint(e.toString()); - debugPrint("data done with error"); + logger.d(e.toString()); + logger.d("data done with error"); }); notifyListeners(); } Future seeMoreUserProfileWalls(String? email) async { - debugPrint("Fetching more profile walls"); + logger.d("Fetching more profile walls"); await databaseReference .collection("walls") .where('review', isEqualTo: true) @@ -50,7 +51,7 @@ class UserProfileProvider extends ChangeNotifier { } Future getUserProfileSetups(String? email) async { - debugPrint("Fetching first 8 profile setups"); + logger.d("Fetching first 8 profile setups"); userProfileSetups = []; await databaseReference .collection("setups") @@ -62,14 +63,14 @@ class UserProfileProvider extends ChangeNotifier { .then((value) { userProfileSetups = value.docs; }).catchError((e) { - debugPrint(e.toString()); - debugPrint("data done with error"); + logger.d(e.toString()); + logger.d("data done with error"); }); notifyListeners(); } Future seeMoreUserProfileSetups(String? email) async { - debugPrint("Fetching more profile walls"); + logger.d("Fetching more profile walls"); await databaseReference .collection("setups") .where('review', isEqualTo: true) diff --git a/lib/data/profile/wallpaper/profileSetupProvider.dart b/lib/data/profile/wallpaper/profileSetupProvider.dart index 09f31742..85c9c721 100644 --- a/lib/data/profile/wallpaper/profileSetupProvider.dart +++ b/lib/data/profile/wallpaper/profileSetupProvider.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -7,7 +8,7 @@ class ProfileSetupProvider extends ChangeNotifier { List? profileSetups; Future getProfileSetups() async { - debugPrint("Fetching first 8 profile setups"); + logger.d("Fetching first 8 profile setups"); profileSetups = []; await databaseReference .collection("setups") @@ -23,7 +24,7 @@ class ProfileSetupProvider extends ChangeNotifier { } Future seeMoreProfileSetups() async { - debugPrint("Fetching more profile setups"); + logger.d("Fetching more profile setups"); await databaseReference .collection("setups") .where('review', isEqualTo: true) diff --git a/lib/data/profile/wallpaper/profileWallProvider.dart b/lib/data/profile/wallpaper/profileWallProvider.dart index 1f95162b..42bfbf52 100644 --- a/lib/data/profile/wallpaper/profileWallProvider.dart +++ b/lib/data/profile/wallpaper/profileWallProvider.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; @@ -7,7 +8,7 @@ class ProfileWallProvider extends ChangeNotifier { List? profileWalls; Future getProfileWalls() async { - debugPrint("Fetching first 12 profile walls"); + logger.d("Fetching first 12 profile walls"); profileWalls = []; await databaseReference .collection("walls") @@ -23,7 +24,7 @@ class ProfileWallProvider extends ChangeNotifier { } Future seeMoreProfileWalls() async { - debugPrint("Fetching more profile walls"); + logger.d("Fetching more profile walls"); await databaseReference .collection("walls") .where('review', isEqualTo: true) diff --git a/lib/data/setups/provider/setupProvider.dart b/lib/data/setups/provider/setupProvider.dart index 0a1d5c4e..8864ab1c 100644 --- a/lib/data/setups/provider/setupProvider.dart +++ b/lib/data/setups/provider/setupProvider.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; @@ -5,7 +6,7 @@ class SetupProvider extends ChangeNotifier { final FirebaseFirestore databaseReference = FirebaseFirestore.instance; List? setups; Future getSetups() async { - debugPrint("Fetching first 10 setups"); + logger.d("Fetching first 10 setups"); setups = []; await databaseReference .collection("setups") @@ -20,7 +21,7 @@ class SetupProvider extends ChangeNotifier { } Future seeMoreSetups() async { - debugPrint("Fetching more setups"); + logger.d("Fetching more setups"); await databaseReference .collection("setups") .where("review", isEqualTo: true) @@ -47,9 +48,9 @@ Future getSetupFromName(String? name) async { .get() .then((value) { value.docs.forEach((f) => setup = f.data()); - debugPrint(setup.toString()); + logger.d(setup.toString()); }).catchError((e) { - debugPrint("data done with error"); + logger.d("data done with error"); }); return setup; } diff --git a/lib/data/share/createDynamicLink.dart b/lib/data/share/createDynamicLink.dart index 8edd71fd..14eab568 100644 --- a/lib/data/share/createDynamicLink.dart +++ b/lib/data/share/createDynamicLink.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/popup/copyrightPopUp.dart'; import 'package:animations/animations.dart'; import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; import 'package:flutter/foundation.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:Prism/theme/toasts.dart' as toasts; @@ -35,7 +36,7 @@ Future createDynamicLink( ClipboardData(text: "Hey check this out âžœ ${shortUrl.toString()}")); analytics.logShare(contentType: 'focussedMenu', itemId: id, method: 'link'); toasts.codeSend("Sharing link copied!"); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); return shortUrl.toString(); } @@ -67,7 +68,7 @@ Future createUserDynamicLink(String name, String username, String email, Share.share("Hey check out my profile on Prism âžœ $shortUrl"); analytics.logShare( contentType: 'userShare', itemId: username, method: 'link'); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); } Future createSetupDynamicLink( @@ -96,7 +97,7 @@ Future createSetupDynamicLink( Clipboard.setData(ClipboardData(text: shortUrl.toString())); Share.share("Hey check this out âžœ $shortUrl"); analytics.logShare(contentType: 'setupShare', itemId: name, method: 'link'); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); } Future createSharingPrismLink(String userID) async { @@ -123,7 +124,7 @@ Future createSharingPrismLink(String userID) async { final ShortDynamicLink shortDynamicLink = await parameters.buildShortLink(); final Uri shortUrl = shortDynamicLink.shortUrl; analytics.logShare(contentType: 'prismShare', itemId: userID, method: 'link'); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); return shortUrl.toString(); } @@ -158,7 +159,7 @@ Future createCopyrightLink(bool setup, BuildContext context, final ShortDynamicLink shortDynamicLink = await parameters.buildShortLink(); shortUrl = shortDynamicLink.shortUrl; analytics.logEvent(name: 'reportSetup'); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); } else { final DynamicLinkParameters parameters = DynamicLinkParameters( socialMetaTagParameters: SocialMetaTagParameters( @@ -182,7 +183,7 @@ Future createCopyrightLink(bool setup, BuildContext context, final ShortDynamicLink shortDynamicLink = await parameters.buildShortLink(); shortUrl = shortDynamicLink.shortUrl; analytics.logEvent(name: 'reportWall'); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); } showModal( context: context, diff --git a/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart b/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart index 3d10ab0c..2c72b871 100644 --- a/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart +++ b/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart @@ -5,6 +5,7 @@ import 'package:Prism/data/wallhaven/model/wallpaper.dart'; import 'package:Prism/routes/router.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; +import 'package:Prism/logger/logger.dart'; List walls = []; List wallsS = []; @@ -39,7 +40,7 @@ Future> categoryDataFetcher( .then( (http.Response response) { final resp = json.decode(response.body); - debugPrint(resp.toString()); + logger.d(resp.toString()); for (int i = 0; i < (resp["data"].length as int); i++) { walls.add( WallPaper( @@ -61,12 +62,12 @@ Future> categoryDataFetcher( } pageNumbers[index][categoryName] = (resp["meta"]["current_page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return walls; }, ); } else { - debugPrint("Refresh Blocked"); + logger.d("Refresh Blocked"); } return walls; } @@ -108,22 +109,22 @@ Future> getData( ); } pageGetData = (resp["meta"]["current_page"] as int) + 1; - debugPrint("data done"); + logger.d("data done"); return walls; }, ).catchError((e) { - debugPrint("data done with error"); + logger.d("data done with error"); return walls; }); } else { - debugPrint("Refresh Blocked"); + logger.d("Refresh Blocked"); } return walls; } Future getWallbyID(String idU) async { final String id = idU.toLowerCase(); - debugPrint("https://wallhaven.cc/api/v1/w/$id"); + logger.d("https://wallhaven.cc/api/v1/w/$id"); wall = WallPaper(); http .get( @@ -157,7 +158,7 @@ Future getWallbyID(String idU) async { ), ), ); - debugPrint("id data done"); + logger.d("id data done"); return wall; }, ); @@ -166,7 +167,7 @@ Future getWallbyID(String idU) async { Future> getWallsbyQuery( String query, int? categories, int? purity) async { - debugPrint( + logger.d( "https://wallhaven.cc/api/v1/search?q=$query&page=1&categories=$categories&purity=$purity"); http .get( @@ -176,8 +177,8 @@ Future> getWallsbyQuery( .then( (http.Response response) { final resp = json.decode(response.body); - debugPrint(resp["data"].length.toString()); - debugPrint(wallsS.length.toString()); + logger.d(resp["data"].length.toString()); + logger.d(wallsS.length.toString()); for (int i = 0; i < (resp["data"].length as int); i++) { wallsS.add( WallPaper( @@ -206,7 +207,7 @@ Future> getWallsbyQuery( Future> getWallsbyQueryPage( String query, int? categories, int? purity) async { - debugPrint( + logger.d( "https://wallhaven.cc/api/v1/search?q=$query&page=$pageGetQuery&categories=$categories&purity=$purity"); http .get( diff --git a/lib/logger/logger.dart b/lib/logger/logger.dart index ced76fba..67989ae4 100644 --- a/lib/logger/logger.dart +++ b/lib/logger/logger.dart @@ -50,9 +50,9 @@ class LogOutputPrinter extends PrettyPrinter { .then((value) => _logFile!.writeStringSync('$str\n')); final timeStr = getTime().substring(0, 12); if (prefix == "[E]") { - print(color!('$timeStr $prefix - $logMsg \n$logStrace')); + logger.d(color!('$timeStr $prefix - $logMsg \n$logStrace')); } else { - print(color!('$timeStr $prefix - $logMsg')); + logger.d(color!('$timeStr $prefix - $logMsg')); } return []; } diff --git a/lib/main.dart b/lib/main.dart index bf11d52b..1bb83e26 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -78,7 +78,7 @@ void main() { Hive.registerAdapter(BadgeAdapter()); Hive.registerAdapter(PrismTransactionAdapter()); prefs = await Hive.openBox('prefs'); - debugPrint("Box Opened"); + logger.d("Box Opened"); if (prefs.get("systemOverlayColor") == null) { prefs.put("systemOverlayColor", 0xFFE57697); } diff --git a/lib/payments/upgrade.dart b/lib/payments/upgrade.dart index 0c66ce48..e1e58b20 100644 --- a/lib/payments/upgrade.dart +++ b/lib/payments/upgrade.dart @@ -12,6 +12,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:purchases_flutter/object_wrappers.dart'; import 'package:Prism/payments/components.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; PurchaserInfo? _purchaserInfo; @@ -29,12 +30,12 @@ Future checkPremium() async { appData.isPro = false; } } on PlatformException catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } globals.prismUser.premium = appData.isPro!; main.prefs.put("prismUserV2", globals.prismUser); - debugPrint('#### is user pro? ${appData.isPro}'); + logger.d('#### is user pro? ${appData.isPro}'); } class UpgradeScreen extends StatefulWidget { @@ -61,7 +62,7 @@ class _UpgradeScreenState extends State { PurchaserInfo purchaserInfo; try { purchaserInfo = await Purchases.getPurchaserInfo(); - debugPrint(purchaserInfo.toString()); + logger.d(purchaserInfo.toString()); if (purchaserInfo.entitlements.all['prism_premium'] != null) { appData.isPro = purchaserInfo.entitlements.all['prism_premium']!.isActive; @@ -69,10 +70,10 @@ class _UpgradeScreenState extends State { appData.isPro = false; } } on PlatformException catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } - debugPrint('#### is user pro? ${appData.isPro}'); + logger.d('#### is user pro? ${appData.isPro}'); setState(() {}); } @@ -81,14 +82,14 @@ class _UpgradeScreenState extends State { try { purchaserInfo = await Purchases.getPurchaserInfo(); } on PlatformException catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } Offerings? offerings; try { offerings = await Purchases.getOfferings(); } on PlatformException catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } if (!mounted) return; @@ -140,7 +141,7 @@ class UpsellScreen extends StatefulWidget { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -374,20 +375,20 @@ class _UpsellScreenState extends State { // ignore: void_checks onTap: () async { try { - debugPrint('now trying to restore'); + logger.d('now trying to restore'); final PurchaserInfo restoredInfo = await Purchases .restoreTransactions(); - debugPrint('restore completed'); - debugPrint(restoredInfo.toString()); + logger.d('restore completed'); + logger.d(restoredInfo.toString()); appData.isPro = restoredInfo .entitlements .all["prism_premium"]! .isActive; - debugPrint( - 'is user pro? ${appData.isPro}'); + logger + .d('is user pro? ${appData.isPro}'); if (appData.isPro!) { globals.prismUser.premium = @@ -403,7 +404,7 @@ class _UpsellScreenState extends State { "There was an error. Please try again later."); } } on PlatformException catch (e) { - debugPrint('----xx-----'); + logger.d('----xx-----'); final errorCode = PurchasesErrorHelper.getErrorCode( e); @@ -518,15 +519,15 @@ class _PurchaseButtonState extends State { // ignore: void_checks onTap: () async { try { - debugPrint('now trying to purchase'); + logger.d('now trying to purchase'); _purchaserInfo = await Purchases.purchasePackage(widget.package); - debugPrint('purchase completed'); + logger.d('purchase completed'); appData.isPro = _purchaserInfo!.entitlements.all["prism_premium"]!.isActive; globals.prismUser.premium = appData.isPro!; main.prefs.put("prismUserV2", globals.prismUser); - debugPrint('is user pro? ${appData.isPro}'); + logger.d('is user pro? ${appData.isPro}'); if (appData.isPro!) { toasts.codeSend("You are now a premium member."); @@ -535,7 +536,7 @@ class _PurchaseButtonState extends State { toasts.error("There was an error, please try again later."); } } on PlatformException catch (e) { - debugPrint('----xx-----'); + logger.d('----xx-----'); final errorCode = PurchasesErrorHelper.getErrorCode(e); if (errorCode == PurchasesErrorCode.purchaseCancelledError) { toasts.error("User cancelled purchase."); diff --git a/lib/routes/router.dart b/lib/routes/router.dart index 6813e996..bab0bd94 100644 --- a/lib/routes/router.dart +++ b/lib/routes/router.dart @@ -44,6 +44,7 @@ import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image/image.dart' as imagelib; +import 'package:Prism/logger/logger.dart'; List navStack = ["Home"]; @@ -51,26 +52,26 @@ Route generateRoute(RouteSettings settings) { switch (settings.name) { case splashRoute: navStack.add("Splash"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: splashRoute); return CupertinoPageRoute(builder: (context) => SplashWidget()); case searchRoute: navStack.add("Search"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: searchRoute); return PageRouteBuilder( transitionDuration: const Duration(), pageBuilder: (context, animation1, animation2) => SearchScreen()); case homeRoute: navStack.add("Home"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: homeRoute); return PageRouteBuilder( transitionDuration: const Duration(), pageBuilder: (context, animation1, animation2) => PageManager()); case profileRoute: navStack.add("Profile"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: profileRoute); return PageRouteBuilder( transitionDuration: const Duration(), @@ -78,45 +79,45 @@ Route generateRoute(RouteSettings settings) { ProfileScreen(settings.arguments as List?)); case followerProfileRoute: navStack.add("Follower Profile"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: followerProfileRoute); return CupertinoPageRoute( builder: (context) => ProfileScreen(settings.arguments as List?)); case downloadRoute: navStack.add("Downloads"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: downloadRoute); return CupertinoPageRoute(builder: (context) => DownloadScreen()); case reviewRoute: navStack.add("Review Screen"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: reviewRoute); return CupertinoPageRoute(builder: (context) => ReviewScreen()); case favWallRoute: navStack.add("Fav Walls"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: favWallRoute); return CupertinoPageRoute( builder: (context) => const FavouriteWallpaperScreen()); case favSetupRoute: navStack.add("Fav Setups"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: favSetupRoute); return CupertinoPageRoute( builder: (context) => const FavouriteSetupScreen()); case premiumRoute: navStack.add("Buy Premium"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: premiumRoute); return CupertinoPageRoute(builder: (context) => UpgradeScreen()); case editProfileRoute: navStack.add("Edit Profile"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: editProfileRoute); return CupertinoPageRoute(builder: (context) => const EditProfilePanel()); case notificationsRoute: navStack.add("Notifications"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: notificationsRoute); analytics.logEvent( name: 'notifications_checked', @@ -124,21 +125,21 @@ Route generateRoute(RouteSettings settings) { return CupertinoPageRoute(builder: (context) => NotificationScreen()); case colorRoute: navStack.add("Color"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: colorRoute); return CupertinoPageRoute( builder: (context) => ColorScreen(arguments: settings.arguments as List?)); case collectionViewRoute: navStack.add("CollectionsView"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: collectionViewRoute); return CupertinoPageRoute( builder: (context) => CollectionViewScreen(arguments: settings.arguments as List?)); case wallpaperRoute: navStack.add("Wallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: wallpaperRoute); return CupertinoPageRoute( builder: (context) => @@ -146,7 +147,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case searchWallpaperRoute: navStack.add("Search Wallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: searchWallpaperRoute); return CupertinoPageRoute( builder: (context) => @@ -154,7 +155,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case downloadWallpaperRoute: navStack.add("DownloadedWallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: downloadWallpaperRoute); return CupertinoPageRoute( builder: (context) => @@ -162,7 +163,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case shareRoute: navStack.add("SharedWallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: shareRoute); return CupertinoPageRoute( builder: (context) => @@ -170,7 +171,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case shareSetupViewRoute: navStack.add("SharedSetup"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: shareSetupViewRoute); return CupertinoPageRoute( builder: (context) => @@ -178,7 +179,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case favWallViewRoute: navStack.add("FavouriteWallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: favWallViewRoute); return CupertinoPageRoute( builder: (context) => @@ -186,7 +187,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case favSetupViewRoute: navStack.add("Favourite Setup View"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: favSetupViewRoute); return CupertinoPageRoute( builder: (context) => @@ -194,7 +195,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case setupRoute: navStack.add("Setups"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: setupRoute); return PageRouteBuilder( transitionDuration: const Duration(), @@ -202,7 +203,7 @@ Route generateRoute(RouteSettings settings) { const SetupScreen()); case setupViewRoute: navStack.add("SetupView"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: setupViewRoute); return CupertinoPageRoute( builder: (context) => @@ -210,7 +211,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case profileSetupViewRoute: navStack.add("ProfileSetupView"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: profileSetupViewRoute); return CupertinoPageRoute( builder: (context) => ProfileSetupViewScreen( @@ -219,7 +220,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case profileWallViewRoute: navStack.add("ProfileWallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: profileWallViewRoute); return CupertinoPageRoute( builder: (context) => @@ -227,7 +228,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case userProfileWallViewRoute: navStack.add("User ProfileWallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: userProfileWallViewRoute); return CupertinoPageRoute( builder: (context) => @@ -235,7 +236,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case userProfileSetupViewRoute: navStack.add("User ProfileSetup"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: userProfileSetupViewRoute); return CupertinoPageRoute( builder: (context) => UserProfileSetupViewScreen( @@ -243,12 +244,12 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case themeViewRoute: navStack.add("Themes"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: themeViewRoute); return CupertinoPageRoute(builder: (context) => ThemeView()); case editWallRoute: navStack.add("Edit Wallpaper"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: editWallRoute); return CupertinoPageRoute( builder: (context) => @@ -256,7 +257,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case uploadSetupRoute: navStack.add("Upload Setup"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: uploadSetupRoute); return CupertinoPageRoute( builder: (context) => @@ -264,7 +265,7 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case editSetupDetailsRoute: navStack.add("Edit Setup Details"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: editSetupDetailsRoute); return CupertinoPageRoute( builder: (context) => @@ -272,14 +273,14 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case setupGuidelinesRoute: navStack.add("Setup Guidelines"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: setupGuidelinesRoute); return CupertinoPageRoute( builder: (context) => const SetupGuidelinesScreen(), fullscreenDialog: true); case uploadWallRoute: navStack.add("Add"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: uploadWallRoute); return CupertinoPageRoute( builder: (context) => @@ -287,25 +288,25 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case aboutRoute: navStack.add("About Prism"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: aboutRoute); return CupertinoPageRoute( builder: (context) => AboutScreen(), fullscreenDialog: true); case settingsRoute: navStack.add("Settings"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: settingsRoute); return CupertinoPageRoute( builder: (context) => const SettingsScreen(), fullscreenDialog: true); case sharePrismRoute: navStack.add("Share Prism"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: sharePrismRoute); return CupertinoPageRoute( builder: (context) => SharePrismScreen(), fullscreenDialog: true); case wallpaperFilterRoute: navStack.add("Wallpaper Filter"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: wallpaperFilterRoute); return CupertinoPageRoute( builder: (context) => WallpaperFilterScreen( @@ -317,14 +318,14 @@ Route generateRoute(RouteSettings settings) { fullscreenDialog: true); case onboardingRoute: navStack.add("Onboarding"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: wallpaperFilterRoute); return CupertinoPageRoute( builder: (context) => OnboardingScreen(), ); case followersRoute: navStack.add("Followers"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: followersRoute); return CupertinoPageRoute( builder: (context) => FollowersScreen( @@ -332,7 +333,7 @@ Route generateRoute(RouteSettings settings) { )); default: navStack.add("undefined"); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); analytics.setCurrentScreen(screenName: "/undefined"); return CupertinoPageRoute( builder: (context) => UndefinedScreen( diff --git a/lib/theme/darkThemeModel.dart b/lib/theme/darkThemeModel.dart index 848a46ab..4342e811 100644 --- a/lib/theme/darkThemeModel.dart +++ b/lib/theme/darkThemeModel.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:Prism/theme/theme.dart'; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; Map darkThemes = { "kDMaterial Dark": kDarkTheme, @@ -49,7 +50,7 @@ class DarkThemeModel extends ChangeNotifier { } void changeThemeByID(String themeID) { - debugPrint(themeID); + logger.d(themeID); currentTheme = darkThemes[themeID]; main.prefs.put("darkThemeID", themeID); main.prefs.put( diff --git a/lib/theme/themeModel.dart b/lib/theme/themeModel.dart index dba482aa..e064120a 100644 --- a/lib/theme/themeModel.dart +++ b/lib/theme/themeModel.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:Prism/theme/theme.dart'; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; Map themes = { "kLFrost White": kLightTheme, @@ -45,7 +46,7 @@ class ThemeModel extends ChangeNotifier { } void changeThemeByID(String themeID) { - debugPrint(themeID); + logger.d(themeID); currentTheme = themes[themeID]; main.prefs.put("lightThemeID", themeID); main.prefs.put( diff --git a/lib/ui/pages/categories/colorScreen.dart b/lib/ui/pages/categories/colorScreen.dart index 038e42b3..74eae5ac 100644 --- a/lib/ui/pages/categories/colorScreen.dart +++ b/lib/ui/pages/categories/colorScreen.dart @@ -5,6 +5,7 @@ import 'package:Prism/ui/widgets/home/wallpapers/colorLoader.dart'; import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; +import 'package:Prism/logger/logger.dart'; class ColorScreen extends StatelessWidget { final List? arguments; @@ -22,8 +23,8 @@ class ColorScreen extends StatelessWidget { navStack.removeLast(); count++; } - debugPrint(navStack.toString()); - debugPrint(count.toString()); + logger.d(navStack.toString()); + logger.d(count.toString()); for (int i = 0; i < count; i++) { Navigator.pop(context); } diff --git a/lib/ui/pages/download/downloadScreen.dart b/lib/ui/pages/download/downloadScreen.dart index 05c6c778..d857a39e 100644 --- a/lib/ui/pages/download/downloadScreen.dart +++ b/lib/ui/pages/download/downloadScreen.dart @@ -9,6 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class DownloadScreen extends StatefulWidget { @override @@ -18,7 +19,7 @@ class DownloadScreen extends StatefulWidget { class _DownloadScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -61,12 +62,12 @@ class _DownloadScreenState extends State { try { files = Directory(fileNew).listSync(); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } try { files.addAll(Directory(file).listSync()); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } if (files.isEmpty) { setState(() { diff --git a/lib/ui/pages/download/downloadWallpaperViewScreen.dart b/lib/ui/pages/download/downloadWallpaperViewScreen.dart index db53ef58..3e140deb 100644 --- a/lib/ui/pages/download/downloadWallpaperViewScreen.dart +++ b/lib/ui/pages/download/downloadWallpaperViewScreen.dart @@ -6,6 +6,7 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class DownloadWallpaperScreen extends StatefulWidget { final List? arguments; @@ -19,7 +20,7 @@ class _DownloadWallpaperScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -64,7 +65,7 @@ class _DownloadWallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onLongPress: () { @@ -106,7 +107,7 @@ class _DownloadWallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, diff --git a/lib/ui/pages/favourite/favouriteSetupScreen.dart b/lib/ui/pages/favourite/favouriteSetupScreen.dart index c8ac13f3..a0bdb4d2 100644 --- a/lib/ui/pages/favourite/favouriteSetupScreen.dart +++ b/lib/ui/pages/favourite/favouriteSetupScreen.dart @@ -6,6 +6,7 @@ import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class FavouriteSetupScreen extends StatelessWidget { const FavouriteSetupScreen({ @@ -17,7 +18,7 @@ class FavouriteSetupScreen extends StatelessWidget { return WillPopScope( onWillPop: () async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; }, child: Scaffold( diff --git a/lib/ui/pages/favourite/favouriteSetupViewScreen.dart b/lib/ui/pages/favourite/favouriteSetupViewScreen.dart index f31dfb55..9143ac2e 100644 --- a/lib/ui/pages/favourite/favouriteSetupViewScreen.dart +++ b/lib/ui/pages/favourite/favouriteSetupViewScreen.dart @@ -25,6 +25,7 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:hive/hive.dart'; +import 'package:Prism/logger/logger.dart'; class FavSetupViewScreen extends StatefulWidget { final List? arguments; @@ -38,7 +39,7 @@ class _FavSetupViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -82,7 +83,7 @@ class _FavSetupViewScreenState extends State isLoading = true; }); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); Provider.of(context, listen: false) .favCheck(id, setupMap) @@ -597,7 +598,7 @@ class _FavSetupViewScreenState extends State .liked![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< FavouriteSetupProvider>( context, @@ -643,15 +644,15 @@ class _FavSetupViewScreenState extends State .toString()); } }, - tileText: Provider.of< - FavouriteSetupProvider>( + tileText: Provider.of( context, listen: false) .liked![index!] ["wallpaper_url"] .toString()[0] != "[" - ? (Provider.of(context, + ? (Provider.of( + context, listen: false) .liked![index!] ["wall_id"] == @@ -776,7 +777,7 @@ class _FavSetupViewScreenState extends State .liked![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< FavouriteSetupProvider>( context, @@ -824,28 +825,28 @@ class _FavSetupViewScreenState extends State .toString()); } }, - tileText: - Provider.of( - context, - listen: false) - .liked![index!] - ["wallpaper_url"] - .toString()[0] != - "[" - ? (Provider.of(context, - listen: false) - .liked![index!] - ["wall_id"] == - null || - Provider.of( - context, - listen: false) - .liked![index!] - ["wall_id"] == - "") - ? "Wall Link" - : "Prism (${Provider.of(context, listen: false).liked![index!]["wall_id"]})" - : "${Provider.of(context, listen: false).liked![index!]["wallpaper_url"][0]} - ${(Provider.of(context, listen: false).liked![index!]["wallpaper_url"] as List).length > 2 ? Provider.of(context, listen: false).liked![index!]["wallpaper_url"][2].toString() : ""}", + tileText: Provider.of( + context, + listen: false) + .liked![index!] + ["wallpaper_url"] + .toString()[0] != + "[" + ? (Provider.of( + context, + listen: false) + .liked![index!] + ["wall_id"] == + null || + Provider.of( + context, + listen: false) + .liked![index!] + ["wall_id"] == + "") + ? "Wall Link" + : "Prism (${Provider.of(context, listen: false).liked![index!]["wall_id"]})" + : "${Provider.of(context, listen: false).liked![index!]["wallpaper_url"][0]} - ${(Provider.of(context, listen: false).liked![index!]["wallpaper_url"] as List).length > 2 ? Provider.of(context, listen: false).liked![index!]["wallpaper_url"][2].toString() : ""}", tileType: "Wallpaper", panelCollapsed: panelCollapsed, delay: @@ -1028,7 +1029,7 @@ class _FavSetupViewScreenState extends State .liked![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< FavouriteSetupProvider>( context, @@ -1076,27 +1077,27 @@ class _FavSetupViewScreenState extends State .toString()); } }, - tileText: Provider.of< - FavouriteSetupProvider>( + tileText: Provider.of( context, listen: false) .liked![index!] ["wallpaper_url"] .toString()[0] != "[" - ? (Provider.of(context, - listen: false) - .liked![index!] - ["wall_id"] == - null || - Provider.of( - context, - listen: false) - .liked![index!] - ["wall_id"] == - "") - ? "Wall Link" - : "Prism (${Provider.of(context, listen: false).liked![index!]["wall_id"]})" + ? (Provider.of( + context, + listen: + false) + .liked![index!] + ["wall_id"] == + null || + Provider.of( + context, + listen: false) + .liked![index!]["wall_id"] == + "") + ? "Wall Link" + : "Prism (${Provider.of(context, listen: false).liked![index!]["wall_id"]})" : "${Provider.of(context, listen: false).liked![index!]["wallpaper_url"][0]} - ${(Provider.of(context, listen: false).liked![index!]["wallpaper_url"] as List).length > 2 ? Provider.of(context, listen: false).liked![index!]["wallpaper_url"][2].toString() : ""}", tileType: "Wallpaper", panelCollapsed: panelCollapsed, @@ -1364,24 +1365,28 @@ class _FavSetupViewScreenState extends State Provider.of( context, listen: false) - .liked![index!].data()["id"] + .liked![index!] + .data()["id"] .toString(), Provider.of( context, listen: false) - .liked![index!].data() as Map); + .liked![index!] + .data() as Map); }); } else { onFavSetup( Provider.of( context, listen: false) - .liked![index!].data()["id"] + .liked![index!] + .data()["id"] .toString(), Provider.of( context, listen: false) - .liked![index!].data() as Map); + .liked![index!] + .data() as Map); } }, iconColor: Theme.of(context).accentColor, @@ -1441,7 +1446,7 @@ class _FavSetupViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1509,7 +1514,7 @@ class _FavSetupViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, diff --git a/lib/ui/pages/favourite/favouriteWallScreen.dart b/lib/ui/pages/favourite/favouriteWallScreen.dart index 8aff8360..5dae15c6 100644 --- a/lib/ui/pages/favourite/favouriteWallScreen.dart +++ b/lib/ui/pages/favourite/favouriteWallScreen.dart @@ -6,6 +6,7 @@ import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class FavouriteWallpaperScreen extends StatelessWidget { const FavouriteWallpaperScreen({ @@ -17,7 +18,7 @@ class FavouriteWallpaperScreen extends StatelessWidget { return WillPopScope( onWillPop: () async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; }, child: Scaffold( diff --git a/lib/ui/pages/favourite/favouriteWallViewScreen.dart b/lib/ui/pages/favourite/favouriteWallViewScreen.dart index eef43838..b4634458 100644 --- a/lib/ui/pages/favourite/favouriteWallViewScreen.dart +++ b/lib/ui/pages/favourite/favouriteWallViewScreen.dart @@ -22,6 +22,7 @@ import 'package:screenshot/screenshot.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class FavWallpaperViewScreen extends StatefulWidget { final List? arguments; @@ -35,7 +36,7 @@ class _FavWallpaperViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -166,7 +167,7 @@ class _FavWallpaperViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -179,9 +180,9 @@ class _FavWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == true @@ -196,11 +197,11 @@ class _FavWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -1006,7 +1007,7 @@ class _FavWallpaperViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1024,7 +1025,7 @@ class _FavWallpaperViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1087,7 +1088,7 @@ class _FavWallpaperViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -1157,7 +1158,7 @@ class _FavWallpaperViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -1170,9 +1171,9 @@ class _FavWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == true @@ -1187,11 +1188,11 @@ class _FavWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -1612,7 +1613,7 @@ class _FavWallpaperViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1630,7 +1631,7 @@ class _FavWallpaperViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1733,7 +1734,7 @@ class _FavWallpaperViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/home/collections/collectionScreen.dart b/lib/ui/pages/home/collections/collectionScreen.dart index 0a30da36..0a690937 100644 --- a/lib/ui/pages/home/collections/collectionScreen.dart +++ b/lib/ui/pages/home/collections/collectionScreen.dart @@ -4,6 +4,7 @@ import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/home/collections/collectionsGrid.dart'; import 'package:flutter/material.dart'; import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/logger/logger.dart'; class CollectionScreen extends StatefulWidget { const CollectionScreen({ @@ -17,7 +18,7 @@ class CollectionScreen extends StatefulWidget { class _CollectionScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } diff --git a/lib/ui/pages/home/collections/collectionViewScreen.dart b/lib/ui/pages/home/collections/collectionViewScreen.dart index e0791d29..4792cc2d 100644 --- a/lib/ui/pages/home/collections/collectionViewScreen.dart +++ b/lib/ui/pages/home/collections/collectionViewScreen.dart @@ -5,6 +5,7 @@ import 'package:Prism/ui/widgets/home/collections/collectionsViewGrid.dart'; import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class CollectionViewScreen extends StatelessWidget { final List? arguments; @@ -17,7 +18,7 @@ class CollectionViewScreen extends StatelessWidget { return WillPopScope( onWillPop: () async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; }, child: Scaffold( diff --git a/lib/ui/pages/home/core/notificationScreen.dart b/lib/ui/pages/home/core/notificationScreen.dart index 4090ad5b..423f7b21 100644 --- a/lib/ui/pages/home/core/notificationScreen.dart +++ b/lib/ui/pages/home/core/notificationScreen.dart @@ -14,6 +14,7 @@ import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/main.dart' as main; import 'package:intl/intl.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class NotificationScreen extends StatefulWidget { @override @@ -31,7 +32,7 @@ class _NotificationScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -48,7 +49,7 @@ class _NotificationScreenState extends State { icon: const Icon(JamIcons.close), onPressed: () { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, ), diff --git a/lib/ui/pages/home/core/pageManager.dart b/lib/ui/pages/home/core/pageManager.dart index eadd91da..b186d835 100644 --- a/lib/ui/pages/home/core/pageManager.dart +++ b/lib/ui/pages/home/core/pageManager.dart @@ -24,6 +24,7 @@ import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/main.dart' as main; import 'package:quick_actions/quick_actions.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; TabController? tabController; @@ -60,11 +61,11 @@ class _PageManagerChildState extends State Future checkConnection() async { result = await DataConnectionChecker().hasConnection; if (result) { - debugPrint("Internet working as expected!"); + logger.d("Internet working as expected!"); setState(() {}); // return true; } else { - debugPrint("Not connected to Internet!"); + logger.d("Not connected to Internet!"); setState(() {}); // return false; } @@ -96,26 +97,26 @@ class _PageManagerChildState extends State if (shortcutType != null) shortcut = shortcutType; }); if (shortcutType == 'Follow_Feed') { - debugPrint('Follow_Feed'); + logger.d('Follow_Feed'); if (globals.followersTab) { tabController!.animateTo(1); } } else if (shortcutType == 'Collections') { - debugPrint('Collections'); + logger.d('Collections'); if (globals.followersTab) { tabController!.animateTo(2); } else { tabController!.animateTo(1); } } else if (shortcutType == 'Setups') { - debugPrint('Setups'); + logger.d('Setups'); navStack.last == "Setups" - ? debugPrint("Currently on Setups") + ? logger.d("Currently on Setups") : navStack.last == "Home" ? Navigator.of(context).pushNamed(setupRoute) : Navigator.of(context).pushNamed(setupRoute); } else if (shortcutType == 'Downloads') { - debugPrint('Downloads'); + logger.d('Downloads'); Navigator.pushNamed(context, downloadRoute); } }); @@ -164,7 +165,7 @@ class _PageManagerChildState extends State final Uri? deepLink = data?.link; if (deepLink != null && linkOpened == 0) { - debugPrint("opened while closed altogether via deep link"); + logger.d("opened while closed altogether via deep link"); if (deepLink.pathSegments[0] == "share") { Future.delayed(const Duration()).then( (value) => Navigator.pushNamed(context, shareRoute, arguments: [ @@ -191,7 +192,7 @@ class _PageManagerChildState extends State //TODO write code to add coins in friend/user account linkOpened = 1; } else {} - debugPrint("opened while closed altogether via deep link2345"); + logger.d("opened while closed altogether via deep link2345"); } FirebaseDynamicLinks.instance.onLink( @@ -199,7 +200,7 @@ class _PageManagerChildState extends State final Uri deepLink = dynamicLink.link; if (deepLink != null) { - debugPrint("opened while bg via deep link1"); + logger.d("opened while bg via deep link1"); if (deepLink.pathSegments[0] == "share") { Future.delayed(const Duration()).then( (value) => Navigator.pushNamed(context, shareRoute, arguments: [ @@ -221,11 +222,11 @@ class _PageManagerChildState extends State ])); } else {} - debugPrint("opened while bg via deep link2345"); + logger.d("opened while bg via deep link2345"); } }, onError: (OnLinkErrorException e) async { - debugPrint('onLinkError'); - debugPrint(e.message); + logger.d('onLinkError'); + logger.d(e.message); }); return true; } @@ -430,7 +431,7 @@ class _RatePopUpState extends State { color: Theme.of(context).errorColor, onPressed: () async { Navigator.of(context).pop(); - debugPrint( + logger.d( 'Thanks for the ${rating == null ? '0' : rating.round().toString()} star(s) !'); if (rating <= 3) { if (Platform.isAndroid) { @@ -439,8 +440,8 @@ class _RatePopUpState extends State { final sdkInt = androidInfo.version.sdkInt; final manufacturer = androidInfo.manufacturer; final model = androidInfo.model; - debugPrint( - 'Android $release (SDK $sdkInt), $manufacturer $model'); + logger + .d('Android $release (SDK $sdkInt), $manufacturer $model'); launch( "mailto:hash.studios.inc@gmail.com?subject=%5BCUSTOMER%20FEEDBACK%5D&body=----x-x-x----%0D%0ADevice%20Info%20-%0D%0A%0D%0AAndroid%20Version%3A%20Android%20$release%0D%0ASDK%20Number%3A%20SDK%20$sdkInt%0D%0ADevice%20Manufacturer%3A%20$manufacturer%0D%0ADevice%20Model%3A%20$model%0D%0A----x-x-x----%0D%0A%0D%0AEnter%20your%20feedback%20below%20---"); } diff --git a/lib/ui/pages/home/core/splashScreen.dart b/lib/ui/pages/home/core/splashScreen.dart index d0ac736b..d1765687 100644 --- a/lib/ui/pages/home/core/splashScreen.dart +++ b/lib/ui/pages/home/core/splashScreen.dart @@ -11,6 +11,7 @@ import 'package:provider/provider.dart'; import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/theme/config.dart' as config; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; late RemoteConfig remoteConfig; @@ -37,10 +38,10 @@ class SplashWidget extends StatelessWidget { 'verifiedUsers': '["akshaymaurya3006@gmail.com","maurya.abhay30@gmail.com",]' }); - debugPrint("Started Fetching Values from rc"); + logger.d("Started Fetching Values from rc"); await remoteConfig.fetch(expiration: const Duration(hours: 6)); final rcBool = await remoteConfig.activateFetched(); - debugPrint("Fetched Values from rc"); + logger.d("Fetched Values from rc"); globals.topImageLink = remoteConfig.getString('topImageLink'); globals.bannerText = remoteConfig.getString('bannerText'); globals.bannerTextOn = remoteConfig.getString('bannerTextOn'); @@ -75,17 +76,17 @@ class SplashWidget extends StatelessWidget { categories.add(json.decode("$element}")); } categories.removeWhere((element) => element['name'] == "Trending"); - debugPrint(cList.toString()); + logger.d(cList.toString()); globals.followersTab = main.prefs.get('followersTab', defaultValue: true) as bool; await getNotifs(); - debugPrint("splash done"); - debugPrint( + logger.d("splash done"); + logger.d( "Current App Version: ${globals.currentAppVersion.replaceAll(".", "")}"); - debugPrint( + logger.d( "Obsolete App Version: ${globals.obsoleteAppVersion.replaceAll(".", "")}"); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } } @@ -94,7 +95,7 @@ class SplashWidget extends StatelessWidget { globals.hasNotch = height > 24; globals.notchSize = height; notchChecked = true; - debugPrint('Notch Height = $height'); + logger.d('Notch Height = $height'); } SplashWidget({ diff --git a/lib/ui/pages/home/wallpapers/followingScreen.dart b/lib/ui/pages/home/wallpapers/followingScreen.dart index 1ba56a66..7a384f7b 100644 --- a/lib/ui/pages/home/wallpapers/followingScreen.dart +++ b/lib/ui/pages/home/wallpapers/followingScreen.dart @@ -15,6 +15,7 @@ import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/ui/widgets/premiumBanners/followingFeed.dart'; +import 'package:Prism/logger/logger.dart'; class FollowingScreen extends StatefulWidget { const FollowingScreen({ @@ -34,8 +35,8 @@ class _FollowingScreenState extends State { CollectionReference? walls; Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); - debugPrint("Bye! Have a good day!"); + logger.d(navStack.toString()); + logger.d("Bye! Have a good day!"); return true; } @@ -146,7 +147,7 @@ class _FollowingTileState extends State { } void showGooglePopUp(BuildContext context, Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/pages/home/wallpapers/homeScreen.dart b/lib/ui/pages/home/wallpapers/homeScreen.dart index 5815e86e..500ee014 100644 --- a/lib/ui/pages/home/wallpapers/homeScreen.dart +++ b/lib/ui/pages/home/wallpapers/homeScreen.dart @@ -1,5 +1,6 @@ import 'package:Prism/global/categoryMenu.dart'; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/home/wallpapers/pexelsGrid.dart'; @@ -36,8 +37,8 @@ class _HomeScreenState extends State { return false; } if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); - debugPrint("Bye! Have a good day!"); + logger.d(navStack.toString()); + logger.d("Bye! Have a good day!"); return true; } diff --git a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart index 416c3882..a79d2b45 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/darkThemeModel.dart'; @@ -129,7 +130,7 @@ class _WallpaperFilterScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -155,19 +156,19 @@ class _WallpaperFilterScreenState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } } catch (e) { analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Failure'}); - debugPrint(e.toString()); + logger.d(e.toString()); } Navigator.of(context).pop(); } @@ -192,17 +193,17 @@ class _WallpaperFilterScreenState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Lock', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Lock', 'result': 'Failure'}); } @@ -229,17 +230,17 @@ class _WallpaperFilterScreenState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Home', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Home', 'result': 'Failure'}); } @@ -280,7 +281,7 @@ class _WallpaperFilterScreenState extends State { icon: const Icon(JamIcons.close), onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }), backgroundColor: Theme.of(context).primaryColor, diff --git a/lib/ui/pages/home/wallpapers/wallpaperScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperScreen.dart index 28faf663..7a383204 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperScreen.dart @@ -7,6 +7,7 @@ import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as data; import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -42,7 +43,7 @@ class _WallpaperScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -167,7 +168,7 @@ class _WallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -182,9 +183,9 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError as String); + logger.d(onError as String); }); } else { main.prefs.get('optimisedWallpapers', @@ -200,11 +201,11 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -501,7 +502,7 @@ class _WallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -518,7 +519,7 @@ class _WallpaperScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -578,7 +579,7 @@ class _WallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -647,7 +648,7 @@ class _WallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -662,9 +663,9 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == @@ -679,12 +680,11 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( - "Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -1164,7 +1164,7 @@ class _WallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1181,7 +1181,7 @@ class _WallpaperScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1245,7 +1245,7 @@ class _WallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -1316,7 +1316,7 @@ class _WallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -1331,9 +1331,9 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == @@ -1348,12 +1348,12 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( - "Wallpaper Optimisation is disabled!"); + : logger + .d("Wallpaper Optimisation is disabled!"); } } }, @@ -1698,8 +1698,7 @@ class _WallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint( - '${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1718,7 +1717,7 @@ class _WallpaperScreenState extends State HapticFeedback.vibrate(); !isLoading ? updateAccent() - : debugPrint(""); + : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1787,7 +1786,7 @@ class _WallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -1860,7 +1859,7 @@ class _WallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -1875,9 +1874,9 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') @@ -1895,11 +1894,11 @@ class _WallpaperScreenState extends State File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( + : logger.d( "Wallpaper Optimisation is disabled!"); } } @@ -2266,7 +2265,7 @@ class _WallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint( + logger.d( '${offsetAnimation.value + 8.0}'); } return GestureDetector( @@ -2286,7 +2285,7 @@ class _WallpaperScreenState extends State HapticFeedback.vibrate(); !isLoading ? updateAccent() - : debugPrint(""); + : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -2366,7 +2365,7 @@ class _WallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -2440,7 +2439,7 @@ class _WallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -2455,9 +2454,9 @@ class _WallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') @@ -2475,11 +2474,11 @@ class _WallpaperScreenState extends State File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( + : logger.d( "Wallpaper Optimisation is disabled!"); } } @@ -2838,7 +2837,7 @@ class _WallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint( + logger.d( '${offsetAnimation.value + 8.0}'); } return GestureDetector( @@ -2858,7 +2857,7 @@ class _WallpaperScreenState extends State HapticFeedback.vibrate(); !isLoading ? updateAccent() - : debugPrint(""); + : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -2934,7 +2933,7 @@ class _WallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/onboarding/onboardingScreen.dart b/lib/ui/pages/onboarding/onboardingScreen.dart index bfffb973..d9114f4b 100644 --- a/lib/ui/pages/onboarding/onboardingScreen.dart +++ b/lib/ui/pages/onboarding/onboardingScreen.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/pages/home/core/splashScreen.dart'; @@ -629,7 +630,7 @@ class _OnboardingScreenState extends State { ); }); }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); globals.prismUser.loggedIn = false; main.prefs.put( "prismUserV2", globals.prismUser); diff --git a/lib/ui/pages/profile/aboutScreen.dart b/lib/ui/pages/profile/aboutScreen.dart index 49b87428..1a34c9ab 100644 --- a/lib/ui/pages/profile/aboutScreen.dart +++ b/lib/ui/pages/profile/aboutScreen.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -27,7 +28,7 @@ class AboutScreen extends StatelessWidget { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -41,7 +42,7 @@ class AboutScreen extends StatelessWidget { icon: const Icon(JamIcons.close), onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }), title: Text( @@ -142,13 +143,13 @@ class AboutScreen extends StatelessWidget { future: printStream(), builder: (context, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return SizedBox( height: 250, child: Center(child: Loader())); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return SizedBox( height: 250, child: Center(child: Loader())); } else { diff --git a/lib/ui/pages/profile/editSetupDetails.dart b/lib/ui/pages/profile/editSetupDetails.dart index 2c8692fb..2775899a 100644 --- a/lib/ui/pages/profile/editSetupDetails.dart +++ b/lib/ui/pages/profile/editSetupDetails.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:cached_network_image/cached_network_image.dart'; @@ -199,22 +200,22 @@ class _EditSetupReviewScreenState extends State { .then((value) => setState(() { imageURL = value.content!.downloadUrl; })); - debugPrint('File Uploaded'); + logger.d('File Uploaded'); setState(() { isUploading = false; }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); toasts.error("Some uploading issue, please try again."); } } Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -251,7 +252,7 @@ class _EditSetupReviewScreenState extends State { toasts.error("Please fill all required fields!"); } else { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); analytics.logEvent( name: 'edit_setup', diff --git a/lib/ui/pages/profile/followerProfile.dart b/lib/ui/pages/profile/followerProfile.dart index fc8a3da7..9db3bcbe 100644 --- a/lib/ui/pages/profile/followerProfile.dart +++ b/lib/ui/pages/profile/followerProfile.dart @@ -51,7 +51,7 @@ // (navStack.last == "SharedWallpaper") || // (navStack.last == "SetupView")) {} // } -// debugPrint(navStack.toString()); +// logger.d(navStack.toString()); // return true; // } @@ -68,7 +68,7 @@ // tooltip.deactivate(); // }); // } catch (e) { -// debugPrint(e.toString()); +// logger.d(e.toString()); // } // }); // } @@ -93,7 +93,7 @@ // ), // ); // } -// print("SNAP ERROR ${email}"); +// logger.d("SNAP ERROR ${email}"); // name = snap.data!.docs[0].data()["username"].toString() ?? // snap.data!.docs[0].data()["name"].toString(); // userPhoto = @@ -102,11 +102,11 @@ // premium = snap.data!.docs[0].data()["premium"] as bool; // links = snap.data!.docs[0].data()["links"] as Map; // bio = snap.data!.docs[0].data()["bio"] as String; -// debugPrint("Name : $name"); -// debugPrint("Email : $email"); -// debugPrint("Profile Photo : $userPhoto"); -// debugPrint("Premium : $premium"); -// debugPrint("Links : $links"); +// logger.d("Name : $name"); +// logger.d("Email : $email"); +// logger.d("Profile Photo : $userPhoto"); +// logger.d("Premium : $premium"); +// logger.d("Links : $links"); // return NestedScrollView( // headerSliverBuilder: (context, innerBoxIsScrolled) => // [ @@ -484,7 +484,7 @@ // (navStack.last == "SharedWallpaper") || // (navStack.last == "SetupView")) {} // } -// debugPrint(navStack.toString()); +// logger.d(navStack.toString()); // }, // ), // actions: [ diff --git a/lib/ui/pages/profile/followersScreen.dart b/lib/ui/pages/profile/followersScreen.dart index 7050b8e3..4836046f 100644 --- a/lib/ui/pages/profile/followersScreen.dart +++ b/lib/ui/pages/profile/followersScreen.dart @@ -4,6 +4,7 @@ import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:Prism/logger/logger.dart'; class FollowersScreen extends StatefulWidget { final List? arguments; @@ -28,7 +29,7 @@ class _FollowersScreenState extends State { return WillPopScope( onWillPop: () async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; }, child: Scaffold( diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 2e651766..8b8ee24b 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -7,6 +7,7 @@ import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/routes/routing_constants.dart'; @@ -67,7 +68,7 @@ class _ProfileScreenState extends State { (navStack.last == "SharedWallpaper") || (navStack.last == "SetupView")) {} } - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -252,7 +253,7 @@ class _ProfileChildState extends State { "SharedWallpaper") || (navStack.last == "SetupView")) {} } - debugPrint(navStack.toString()); + logger.d(navStack.toString()); }), ) : Padding( diff --git a/lib/ui/pages/profile/profileSetupViewScreen.dart b/lib/ui/pages/profile/profileSetupViewScreen.dart index 5ccb93bb..d80c4740 100644 --- a/lib/ui/pages/profile/profileSetupViewScreen.dart +++ b/lib/ui/pages/profile/profileSetupViewScreen.dart @@ -4,6 +4,7 @@ import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -42,7 +43,7 @@ class _ProfileSetupViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -578,7 +579,7 @@ class _ProfileSetupViewScreenState extends State .profileSetups![ index!]["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< ProfileSetupProvider>( context, @@ -765,7 +766,7 @@ class _ProfileSetupViewScreenState extends State .profileSetups![ index!]["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< ProfileSetupProvider>( context, @@ -1030,7 +1031,7 @@ class _ProfileSetupViewScreenState extends State .profileSetups![ index!]["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< ProfileSetupProvider>( context, @@ -1458,7 +1459,7 @@ class _ProfileSetupViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1526,7 +1527,7 @@ class _ProfileSetupViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, @@ -1551,11 +1552,11 @@ class _ProfileSetupViewScreenState extends State listen: false) .profileSetups![index!]["image"] .toString(); - debugPrint(link); + logger.d(link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); toasts.codeSend("Starting Download"); if (sdkInt >= 30) { @@ -1574,7 +1575,7 @@ class _ProfileSetupViewScreenState extends State isLoading = false; }); }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); setState(() { isLoading = false; }); diff --git a/lib/ui/pages/profile/profileWallViewScreen.dart b/lib/ui/pages/profile/profileWallViewScreen.dart index 689721b8..1abaa88a 100644 --- a/lib/ui/pages/profile/profileWallViewScreen.dart +++ b/lib/ui/pages/profile/profileWallViewScreen.dart @@ -22,6 +22,7 @@ import 'package:screenshot/screenshot.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class ProfileWallViewScreen extends StatefulWidget { final List? arguments; @@ -35,7 +36,7 @@ class _ProfileWallViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -154,7 +155,7 @@ class _ProfileWallViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -167,9 +168,9 @@ class _ProfileWallViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') as bool? ?? true @@ -184,11 +185,11 @@ class _ProfileWallViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -597,7 +598,7 @@ class _ProfileWallViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -614,7 +615,7 @@ class _ProfileWallViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -675,7 +676,7 @@ class _ProfileWallViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/profile/reviewScreen.dart b/lib/ui/pages/profile/reviewScreen.dart index bc35b482..0ffeea48 100644 --- a/lib/ui/pages/profile/reviewScreen.dart +++ b/lib/ui/pages/profile/reviewScreen.dart @@ -20,6 +20,7 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:animations/animations.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class ReviewScreen extends StatefulWidget { @override @@ -31,7 +32,7 @@ class _ReviewScreenState extends State TabController? tabController; Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -78,7 +79,7 @@ class _ReviewScreenState extends State icon: const Icon(JamIcons.chevron_left), onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }), backgroundColor: Theme.of(context).primaryColor, @@ -369,12 +370,12 @@ class WallTile extends StatelessWidget { final link = wallpaper .data()!["wallpaper_url"] .toString(); - debugPrint(link); + logger.d(link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); toasts.codeSend("Starting Download"); main.localNotification .createDownloadNotification(); @@ -396,7 +397,7 @@ class WallTile extends StatelessWidget { "Couldn't download! Please Retry!"); } }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); }); } else { GallerySaver.saveImage(link, @@ -708,12 +709,12 @@ class RejectedWallTile extends StatelessWidget { final link = wallpaper .data()!["wallpaper_url"] .toString(); - debugPrint(link); + logger.d(link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); toasts.codeSend("Starting Download"); main.localNotification .createDownloadNotification(); @@ -735,7 +736,7 @@ class RejectedWallTile extends StatelessWidget { "Couldn't download! Please Retry!"); } }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); }); } else { GallerySaver.saveImage(link, @@ -1359,12 +1360,12 @@ class SetupTile extends StatelessWidget { } final link = wallpaper.data()!["image"].toString(); - debugPrint(link); + logger.d(link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); toasts.codeSend("Starting Download"); if (sdkInt >= 30) { @@ -1382,7 +1383,7 @@ class SetupTile extends StatelessWidget { "Couldn't download! Please Retry!"); } }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); }); } else { GallerySaver.saveImage(link, @@ -1897,12 +1898,12 @@ class RejectedSetupTile extends StatelessWidget { } final link = wallpaper.data()!["image"].toString(); - debugPrint(link); + logger.d(link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); toasts.codeSend("Starting Download"); if (sdkInt >= 30) { @@ -1920,7 +1921,7 @@ class RejectedSetupTile extends StatelessWidget { "Couldn't download! Please Retry!"); } }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); }); } else { GallerySaver.saveImage(link, diff --git a/lib/ui/pages/profile/settings.dart b/lib/ui/pages/profile/settings.dart index 2b261ab3..5010412e 100644 --- a/lib/ui/pages/profile/settings.dart +++ b/lib/ui/pages/profile/settings.dart @@ -15,6 +15,7 @@ import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:animations/animations.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class SettingsScreen extends StatefulWidget { const SettingsScreen({ @@ -35,7 +36,7 @@ class _SettingsScreenState extends State { return WillPopScope( onWillPop: () async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; }, child: Scaffold( @@ -347,7 +348,7 @@ class _SettingsScreenState extends State { Navigator.pop(context); main.RestartWidget.restartApp(context); }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); globals.prismUser.loggedIn = false; main.prefs.put("prismUserV2", globals.prismUser); diff --git a/lib/ui/pages/profile/sharePrismScreen.dart b/lib/ui/pages/profile/sharePrismScreen.dart index 032efa50..b10e3f09 100644 --- a/lib/ui/pages/profile/sharePrismScreen.dart +++ b/lib/ui/pages/profile/sharePrismScreen.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:share/share.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class SharePrismScreen extends StatefulWidget { @override @@ -31,7 +32,7 @@ class _SharePrismScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } diff --git a/lib/ui/pages/profile/themeView.dart b/lib/ui/pages/profile/themeView.dart index e97f070d..c6fd3222 100644 --- a/lib/ui/pages/profile/themeView.dart +++ b/lib/ui/pages/profile/themeView.dart @@ -1,4 +1,5 @@ import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -84,7 +85,7 @@ class _ThemeViewState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -117,7 +118,7 @@ class _ThemeViewState extends State { analytics.logEvent( name: "accent_changed", parameters: {'color': hexString}); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }) ], @@ -331,7 +332,7 @@ class _ThemeViewState extends State { onPressed: () { Provider.of(context, listen: false) .changeThemeByID(themes.keys.toList()[index]); - debugPrint(selectedAccentColor.toString()); + logger.d(selectedAccentColor.toString()); setState(() { changingLight = true; selectedTheme = index; @@ -346,7 +347,7 @@ class _ThemeViewState extends State { .replaceAll("Color(", "") .replaceAll(")", ""))); }); - debugPrint(selectedAccentColor.toString()); + logger.d(selectedAccentColor.toString()); }, child: Stack( children: [ @@ -448,7 +449,7 @@ class _ThemeViewState extends State { Provider.of(context, listen: false) .changeThemeByID( darkThemes.keys.toList()[index]); - debugPrint(selectedDarkAccentColor.toString()); + logger.d(selectedDarkAccentColor.toString()); setState(() { changingLight = false; selectedDarkTheme = index; @@ -464,7 +465,7 @@ class _ThemeViewState extends State { .replaceAll("Color(", "") .replaceAll(")", ""))); }); - debugPrint(selectedDarkAccentColor.toString()); + logger.d(selectedDarkAccentColor.toString()); }, child: Stack( children: [ diff --git a/lib/ui/pages/profile/userProfileSetupViewScreen.dart b/lib/ui/pages/profile/userProfileSetupViewScreen.dart index b568bca7..63b75907 100644 --- a/lib/ui/pages/profile/userProfileSetupViewScreen.dart +++ b/lib/ui/pages/profile/userProfileSetupViewScreen.dart @@ -26,6 +26,7 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:hive/hive.dart'; +import 'package:Prism/logger/logger.dart'; class UserProfileSetupViewScreen extends StatefulWidget { final List? arguments; @@ -40,7 +41,7 @@ class _UserProfileSetupViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -600,7 +601,7 @@ class _UserProfileSetupViewScreenState extends State index!] .data()["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< user_data .UserProfileProvider>( @@ -808,7 +809,7 @@ class _UserProfileSetupViewScreenState extends State index!] .data()["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< user_data .UserProfileProvider>( @@ -1118,7 +1119,7 @@ class _UserProfileSetupViewScreenState extends State index!] .data()["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< user_data .UserProfileProvider>( @@ -1606,7 +1607,7 @@ class _UserProfileSetupViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1675,7 +1676,7 @@ class _UserProfileSetupViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, diff --git a/lib/ui/pages/profile/userProfileWallViewScreen.dart b/lib/ui/pages/profile/userProfileWallViewScreen.dart index 4fa8d272..1876a362 100644 --- a/lib/ui/pages/profile/userProfileWallViewScreen.dart +++ b/lib/ui/pages/profile/userProfileWallViewScreen.dart @@ -22,6 +22,7 @@ import 'package:screenshot/screenshot.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class UserProfileWallViewScreen extends StatefulWidget { final List? arguments; @@ -36,7 +37,7 @@ class _UserProfileWallViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -158,7 +159,7 @@ class _UserProfileWallViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -171,9 +172,9 @@ class _UserProfileWallViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') as bool? ?? true @@ -188,11 +189,11 @@ class _UserProfileWallViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -612,7 +613,7 @@ class _UserProfileWallViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -629,7 +630,7 @@ class _UserProfileWallViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -691,7 +692,7 @@ class _UserProfileWallViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/search/searchScreen.dart b/lib/ui/pages/search/searchScreen.dart index 2c33cf43..b4d1a40c 100644 --- a/lib/ui/pages/search/searchScreen.dart +++ b/lib/ui/pages/search/searchScreen.dart @@ -13,6 +13,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; class SearchScreen extends StatefulWidget { @override @@ -22,7 +23,7 @@ class SearchScreen extends StatefulWidget { class _SearchScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -165,7 +166,7 @@ class _SearchScreenState extends State { elevation: 4, initialValue: selectedProviders, onCanceled: () { - debugPrint('You have not choosed anything'); + logger.d('You have not choosed anything'); }, color: Theme.of(context).hintColor, tooltip: 'Providers', @@ -439,12 +440,12 @@ class _SearchLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingCards(); } else { return SearchGrid( diff --git a/lib/ui/pages/search/searchWallpaperScreen.dart b/lib/ui/pages/search/searchWallpaperScreen.dart index 9e8f26fa..1a969fea 100644 --- a/lib/ui/pages/search/searchWallpaperScreen.dart +++ b/lib/ui/pages/search/searchWallpaperScreen.dart @@ -23,6 +23,7 @@ import 'package:screenshot/screenshot.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class SearchWallpaperScreen extends StatefulWidget { final List? arguments; @@ -35,7 +36,7 @@ class _SearchWallpaperScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -147,7 +148,7 @@ class _SearchWallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -163,9 +164,9 @@ class _SearchWallpaperScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') as bool? ?? true @@ -179,11 +180,11 @@ class _SearchWallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -484,7 +485,7 @@ class _SearchWallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -501,7 +502,7 @@ class _SearchWallpaperScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -561,7 +562,7 @@ class _SearchWallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -629,7 +630,7 @@ class _SearchWallpaperScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); setState(() { panelClosed = false; }); @@ -645,9 +646,9 @@ class _SearchWallpaperScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { main.prefs.get('optimisedWallpapers') as bool? ?? true @@ -661,11 +662,11 @@ class _SearchWallpaperScreenState extends State _imageFile = File.fromRawPath(image!); screenshotTaken = true; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -981,7 +982,7 @@ class _SearchWallpaperScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -998,7 +999,7 @@ class _SearchWallpaperScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1059,7 +1060,7 @@ class _SearchWallpaperScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/setup/setupScreen.dart b/lib/ui/pages/setup/setupScreen.dart index 9783805d..a2ec8ef0 100644 --- a/lib/ui/pages/setup/setupScreen.dart +++ b/lib/ui/pages/setup/setupScreen.dart @@ -15,6 +15,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class SetupScreen extends StatefulWidget { const SetupScreen({ @@ -28,7 +29,7 @@ class SetupScreen extends StatefulWidget { class _SetupScreenState extends State { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -155,12 +156,12 @@ class _SetupPageState extends State { future: widget.future, builder: (context, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return Center(child: Loader()); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return Center(child: Loader()); } else { Future.delayed(const Duration()) diff --git a/lib/ui/pages/setup/setupViewScreen.dart b/lib/ui/pages/setup/setupViewScreen.dart index 7963df42..49e35bf7 100644 --- a/lib/ui/pages/setup/setupViewScreen.dart +++ b/lib/ui/pages/setup/setupViewScreen.dart @@ -26,6 +26,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; class SetupViewScreen extends StatefulWidget { final List? arguments; @@ -39,7 +40,7 @@ class _SetupViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -569,7 +570,7 @@ class _SetupViewScreenState extends State .setups![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of( context, listen: false) @@ -745,7 +746,7 @@ class _SetupViewScreenState extends State .setups![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch( Provider.of( context, @@ -996,7 +997,7 @@ class _SetupViewScreenState extends State .setups![index!] ["wall_id"] == "") { - debugPrint("Id Not Found!"); + logger.d("Id Not Found!"); launch(Provider.of< SetupProvider>( context, @@ -1408,7 +1409,7 @@ class _SetupViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1476,7 +1477,7 @@ class _SetupViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, diff --git a/lib/ui/pages/setup/shareSetupViewScreen.dart b/lib/ui/pages/setup/shareSetupViewScreen.dart index 39242ab1..eaa985e5 100644 --- a/lib/ui/pages/setup/shareSetupViewScreen.dart +++ b/lib/ui/pages/setup/shareSetupViewScreen.dart @@ -29,6 +29,7 @@ import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:Prism/logger/logger.dart'; class ShareSetupViewScreen extends StatefulWidget { final List? arguments; @@ -42,7 +43,7 @@ class _ShareSetupViewScreenState extends State with SingleTickerProviderStateMixin { Future onWillPop() async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -112,7 +113,7 @@ class _ShareSetupViewScreenState extends State body: FutureBuilder( future: _future, builder: (BuildContext context, AsyncSnapshot snapshot) { - debugPrint(snapshot.connectionState.toString()); + logger.d(snapshot.connectionState.toString()); switch (snapshot.connectionState) { case ConnectionState.waiting: return Center(child: Loader()); @@ -583,8 +584,8 @@ class _ShareSetupViewScreenState extends State sdata.setup![ "wall_id"] == "") { - debugPrint( - "Id Not Found!"); + logger + .d("Id Not Found!"); launch(sdata.setup![ "wallpaper_url"] .toString()); @@ -712,7 +713,7 @@ class _ShareSetupViewScreenState extends State sdata.setup![ "wall_id"] == "") { - debugPrint( + logger.d( "Id Not Found!"); launch(sdata.setup![ "wallpaper_url"] @@ -898,7 +899,7 @@ class _ShareSetupViewScreenState extends State sdata.setup![ "wall_id"] == "") { - debugPrint( + logger.d( "Id Not Found!"); launch(sdata .setup![ @@ -1265,7 +1266,7 @@ class _ShareSetupViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1331,7 +1332,7 @@ class _ShareSetupViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: Theme.of(context).accentColor, diff --git a/lib/ui/pages/share/shareWallViewScreen.dart b/lib/ui/pages/share/shareWallViewScreen.dart index 7c777d44..738dbea1 100644 --- a/lib/ui/pages/share/shareWallViewScreen.dart +++ b/lib/ui/pages/share/shareWallViewScreen.dart @@ -34,6 +34,7 @@ import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; class ShareWallpaperViewScreen extends StatefulWidget { final List? arguments; @@ -86,7 +87,7 @@ class _ShareWallpaperViewScreenState extends State isLoading = false; }); colors = paletteGenerator.colors.toList(); - debugPrint(colors.toString()); + logger.d(colors.toString()); if (paletteGenerator.colors.length > 5) { colors = colors!.sublist(0, 5); } @@ -151,7 +152,7 @@ class _ShareWallpaperViewScreenState extends State Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -178,7 +179,7 @@ class _ShareWallpaperViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -191,9 +192,9 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == true @@ -208,11 +209,11 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint("Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -264,11 +265,11 @@ class _ShareWallpaperViewScreenState extends State ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint( - "snapshot none, waiting in share route"); + logger + .d("snapshot none, waiting in share route"); return Center(child: Loader()); } else { - debugPrint("done"); + logger.d("done"); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -554,7 +555,7 @@ class _ShareWallpaperViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -571,7 +572,7 @@ class _ShareWallpaperViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -631,7 +632,7 @@ class _ShareWallpaperViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -700,7 +701,7 @@ class _ShareWallpaperViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -713,9 +714,9 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == @@ -731,12 +732,11 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( - "Wallpaper Optimisation is disabled!"); + : logger.d("Wallpaper Optimisation is disabled!"); } } }, @@ -792,11 +792,11 @@ class _ShareWallpaperViewScreenState extends State ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint( + logger.d( "snapshot none, waiting in share route"); return Center(child: Loader()); } else { - debugPrint("done"); + logger.d("done"); return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1325,7 +1325,7 @@ class _ShareWallpaperViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1342,7 +1342,7 @@ class _ShareWallpaperViewScreenState extends State }, onTap: () { HapticFeedback.vibrate(); - !isLoading ? updateAccent() : debugPrint(""); + !isLoading ? updateAccent() : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1404,7 +1404,7 @@ class _ShareWallpaperViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading @@ -1474,7 +1474,7 @@ class _ShareWallpaperViewScreenState extends State panelCollapsed = false; }); if (panelClosed) { - debugPrint('Screenshot Starting'); + logger.d('Screenshot Starting'); if (colorChanged) { screenshotController .capture( @@ -1487,9 +1487,9 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }); } else { (main.prefs.get('optimisedWallpapers') ?? true) == @@ -1505,12 +1505,12 @@ class _ShareWallpaperViewScreenState extends State screenshotTaken = true; panelClosed = false; }); - debugPrint('Screenshot Taken'); + logger.d('Screenshot Taken'); }).catchError((onError) { - debugPrint(onError.toString()); + logger.d(onError.toString()); }) - : debugPrint( - "Wallpaper Optimisation is disabled!"); + : logger + .d("Wallpaper Optimisation is disabled!"); } } }, @@ -1567,11 +1567,11 @@ class _ShareWallpaperViewScreenState extends State ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint( + logger.d( "snapshot none, waiting in share route"); return Center(child: Loader()); } else { - debugPrint("done"); + logger.d("done"); return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1883,8 +1883,7 @@ class _ShareWallpaperViewScreenState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint( - '${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return GestureDetector( onPanUpdate: (details) { @@ -1903,7 +1902,7 @@ class _ShareWallpaperViewScreenState extends State HapticFeedback.vibrate(); !isLoading ? updateAccent() - : debugPrint(""); + : logger.d(""); shakeController.forward(from: 0.0); }, child: CachedNetworkImage( @@ -1970,7 +1969,7 @@ class _ShareWallpaperViewScreenState extends State child: IconButton( onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }, color: isLoading diff --git a/lib/ui/pages/upload/editWallScreen.dart b/lib/ui/pages/upload/editWallScreen.dart index 363b5944..9e25e28a 100644 --- a/lib/ui/pages/upload/editWallScreen.dart +++ b/lib/ui/pages/upload/editWallScreen.dart @@ -7,6 +7,7 @@ import 'package:Prism/routes/router.dart'; import 'package:flutter/material.dart'; import 'package:extended_image/extended_image.dart'; import 'package:image_editor/image_editor.dart' hide ImageSource; +import 'package:Prism/logger/logger.dart'; class EditWallScreen extends StatefulWidget { final List? arguments; @@ -82,7 +83,7 @@ class _EditWallScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -121,7 +122,7 @@ class _EditWallScreenState extends State { Icon(JamIcons.close, color: Theme.of(context).accentColor), onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }), actions: [ @@ -412,7 +413,7 @@ class _EditWallScreenState extends State { option.outputFormat = const OutputFormat.jpeg(100); - debugPrint(const JsonEncoder.withIndent(' ').convert(option.toJson())); + logger.d(const JsonEncoder.withIndent(' ').convert(option.toJson())); final DateTime start = DateTime.now(); final Uint8List result = await ImageEditor.editImage( @@ -420,13 +421,13 @@ class _EditWallScreenState extends State { imageEditorOption: option, ); - debugPrint('result.length = ${result.length}'); + logger.d('result.length = ${result.length}'); final Duration diff = DateTime.now().difference(start); image!.writeAsBytesSync(result); - debugPrint('image_editor time : $diff'); + logger.d('image_editor time : $diff'); if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Future.delayed(const Duration()).then((value) => Navigator.pushReplacementNamed(context, uploadWallRoute, arguments: [image, false])); diff --git a/lib/ui/pages/upload/setupGuidelines.dart b/lib/ui/pages/upload/setupGuidelines.dart index c6672d1a..0d5f8879 100644 --- a/lib/ui/pages/upload/setupGuidelines.dart +++ b/lib/ui/pages/upload/setupGuidelines.dart @@ -9,6 +9,7 @@ import 'package:image_picker/image_picker.dart'; import 'package:Prism/routes/router.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class SetupGuidelinesScreen extends StatefulWidget { const SetupGuidelinesScreen(); @@ -24,7 +25,7 @@ class _SetupGuidelinesScreenState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -36,7 +37,7 @@ class _SetupGuidelinesScreenState extends State { }); Navigator.pop(context); if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Future.delayed(const Duration()).then((value) => Navigator.pushNamed(context, uploadSetupRoute, arguments: [_setup])); } diff --git a/lib/ui/pages/upload/uploadSetupScreen.dart b/lib/ui/pages/upload/uploadSetupScreen.dart index 97880bcf..f8bc77d9 100644 --- a/lib/ui/pages/upload/uploadSetupScreen.dart +++ b/lib/ui/pages/upload/uploadSetupScreen.dart @@ -16,6 +16,7 @@ import 'package:photo_view/photo_view.dart'; import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class UploadSetupScreen extends StatefulWidget { final List? arguments; @@ -145,7 +146,7 @@ class _UploadSetupScreenState extends State { setState(() { id = tempid; }); - debugPrint(id); + logger.d(id); } Future processImage() async { @@ -171,22 +172,22 @@ class _UploadSetupScreenState extends State { .then((value) => setState(() { imageURL = value.content!.downloadUrl; })); - debugPrint('File Uploaded'); + logger.d('File Uploaded'); setState(() { isUploading = false; }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); toasts.error("Some uploading issue, please try again."); } } Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -223,7 +224,7 @@ class _UploadSetupScreenState extends State { toasts.error("Please fill all required fields!"); } else { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); analytics.logEvent( name: 'upload_setup', diff --git a/lib/ui/pages/upload/uploadWallScreen.dart b/lib/ui/pages/upload/uploadWallScreen.dart index 521dd989..7c834574 100644 --- a/lib/ui/pages/upload/uploadWallScreen.dart +++ b/lib/ui/pages/upload/uploadWallScreen.dart @@ -17,6 +17,7 @@ import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class UploadWallScreen extends StatefulWidget { final List? arguments; @@ -78,7 +79,7 @@ class _UploadWallScreenState extends State { setState(() { id = tempid; }); - debugPrint(id); + logger.d(id); } Future compressFile(File file) async { @@ -87,8 +88,8 @@ class _UploadWallScreenState extends State { minWidth: 400, quality: 85, ); - debugPrint(file.lengthSync().toString()); - debugPrint(result!.length.toString()); + logger.d(file.lengthSync().toString()); + logger.d(result!.length.toString()); return result; } @@ -96,8 +97,8 @@ class _UploadWallScreenState extends State { final imgList = image.readAsBytesSync(); final decodedImage = await decodeImageFromList(imgList); - debugPrint(decodedImage.width.toString()); - debugPrint(decodedImage.height.toString()); + logger.d(decodedImage.width.toString()); + logger.d(decodedImage.height.toString()); final res = "${decodedImage.width}x${decodedImage.height}"; @@ -120,7 +121,7 @@ class _UploadWallScreenState extends State { wallpaperPath, wallpaperPath, wallpaperSha, "master"); await github.repositories.deleteFile(RepositorySlug(gitUserName, repoName), thumbPath, thumbPath, thumbSha, "master"); - debugPrint("Files deleted"); + logger.d("Files deleted"); } Future uploadFile() async { @@ -156,22 +157,22 @@ class _UploadWallScreenState extends State { thumbPath = value.content!.path!; thumbSha = value.content!.sha!; })); - debugPrint('File Uploaded'); + logger.d('File Uploaded'); setState(() { isUploading = false; }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); toasts.error("Some uploading issue, please try again."); } } Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); deleteFile(); return true; } @@ -302,7 +303,7 @@ class _UploadWallScreenState extends State { onPressed: !isProcessing && !isUploading ? () async { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context, [wallpaperUrl, id]); analytics.logEvent( name: 'upload_wallpaper', diff --git a/lib/ui/widgets/favourite/favLoader.dart b/lib/ui/widgets/favourite/favLoader.dart index 688a22a0..775176da 100644 --- a/lib/ui/widgets/favourite/favLoader.dart +++ b/lib/ui/widgets/favourite/favLoader.dart @@ -2,6 +2,7 @@ import 'package:Prism/ui/widgets/favourite/favGrid.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:Prism/logger/logger.dart'; class FavLoader extends StatefulWidget { final Future? future; @@ -24,12 +25,12 @@ class _FavLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingCards(); } else { return const FavouriteGrid(); diff --git a/lib/ui/widgets/favourite/favSetupLoader.dart b/lib/ui/widgets/favourite/favSetupLoader.dart index 66e22cf6..9c02bea2 100644 --- a/lib/ui/widgets/favourite/favSetupLoader.dart +++ b/lib/ui/widgets/favourite/favSetupLoader.dart @@ -2,6 +2,7 @@ import 'package:Prism/ui/widgets/favourite/favSetupGrid.dart'; import 'package:Prism/ui/widgets/setups/loadingSetups.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:Prism/logger/logger.dart'; class FavSetupLoader extends StatefulWidget { final Future? future; @@ -24,12 +25,12 @@ class _FavSetupLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingSetupCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingSetupCards(); } else { return const FavouriteSetupGrid(); diff --git a/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart b/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart index a8b32542..dd6fda9c 100644 --- a/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart +++ b/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart @@ -19,6 +19,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class FocusedMenuDetails extends StatefulWidget { final String? provider; @@ -125,7 +126,7 @@ class _FocusedMenuDetailsState extends State { @override Widget build(BuildContext context) { - debugPrint(widget.provider); + logger.d(widget.provider); try { return Scaffold( backgroundColor: Colors.transparent, @@ -2294,7 +2295,7 @@ class _FocusedMenuDetailsState extends State { ), ); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); return Container(); } diff --git a/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart b/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart index 486537fc..1c48f87e 100644 --- a/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart +++ b/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart @@ -10,6 +10,7 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:Prism/logger/logger.dart'; class SearchFocusedMenuDetails extends StatelessWidget { final String? selectedProvider; @@ -485,7 +486,7 @@ class SearchFocusedMenuDetails extends StatelessWidget { ), ); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); return Container(); } diff --git a/lib/ui/widgets/home/collections/collectionsGrid.dart b/lib/ui/widgets/home/collections/collectionsGrid.dart index 6ce603f5..3ed867e5 100644 --- a/lib/ui/widgets/home/collections/collectionsGrid.dart +++ b/lib/ui/widgets/home/collections/collectionsGrid.dart @@ -13,6 +13,7 @@ import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart' as CData; +import 'package:Prism/logger/logger.dart'; class CollectionsGrid extends StatefulWidget { @override @@ -103,7 +104,7 @@ class _CollectionsGridState extends State } void showGooglePopUp(Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/widgets/home/collections/collectionsViewGrid.dart b/lib/ui/widgets/home/collections/collectionsViewGrid.dart index 0aa382d7..009526ed 100644 --- a/lib/ui/widgets/home/collections/collectionsViewGrid.dart +++ b/lib/ui/widgets/home/collections/collectionsViewGrid.dart @@ -9,6 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class CollectionViewGrid extends StatefulWidget { const CollectionViewGrid(); @@ -136,7 +137,7 @@ class _CollectionViewGridState extends State animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return Padding( padding: index == longTapIndex diff --git a/lib/ui/widgets/home/collections/loadingCardsCollection.dart b/lib/ui/widgets/home/collections/loadingCardsCollection.dart index 601538e5..13d208ca 100644 --- a/lib/ui/widgets/home/collections/loadingCardsCollection.dart +++ b/lib/ui/widgets/home/collections/loadingCardsCollection.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dar import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class LoadingCardsCollection extends StatefulWidget { const LoadingCardsCollection({ @@ -83,7 +84,7 @@ class _LoadingCardsCollectionState extends State try { controller = InheritedDataProvider.of(context)!.scrollController; } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } return controller != null diff --git a/lib/ui/widgets/home/core/bottomNavBar.dart b/lib/ui/widgets/home/core/bottomNavBar.dart index a5344ca7..41b7f745 100644 --- a/lib/ui/widgets/home/core/bottomNavBar.dart +++ b/lib/ui/widgets/home/core/bottomNavBar.dart @@ -14,6 +14,7 @@ import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/main.dart' as main; import 'package:intl/intl.dart'; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:Prism/logger/logger.dart'; class BottomBar extends StatefulWidget { final Widget? child; @@ -197,7 +198,7 @@ class _BottomNavBarState extends State } void showGooglePopUp(Function func) { - debugPrint(isLoggedin.toString()); + logger.d(isLoggedin.toString()); if (isLoggedin == false) { googleSignInPopUp(context, func); } else { @@ -258,14 +259,14 @@ class _BottomNavBarState extends State ), onPressed: () { navStack.last == "Home" - ? debugPrint("Currently on Home") + ? logger.d("Currently on Home") : Navigator.of(context).popUntil((route) { if (navStack.last != "Home") { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return false; } else { - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } }); @@ -306,7 +307,7 @@ class _BottomNavBarState extends State ), onPressed: () { navStack.last == "Search" - ? debugPrint("Currently on Search") + ? logger.d("Currently on Search") : navStack.last == "Home" ? Navigator.of(context).pushNamed(searchRoute) : Navigator.of(context).pushNamed(searchRoute); @@ -418,7 +419,7 @@ class _BottomNavBarState extends State ), onPressed: () { navStack.last == "Setups" - ? debugPrint("Currently on Setups") + ? logger.d("Currently on Setups") : navStack.last == "Home" ? Navigator.of(context).pushNamed(setupRoute) : Navigator.of(context).pushNamed(setupRoute); @@ -487,7 +488,7 @@ class _BottomNavBarState extends State ), onPressed: () { if (navStack.last == "Profile") { - debugPrint("Currently on Profile"); + logger.d("Currently on Profile"); } else { if (navStack.last == "Home") { Navigator.of(context).pushNamed(profileRoute, @@ -497,10 +498,10 @@ class _BottomNavBarState extends State if (navStack.last != "Home" && navStack.last != "Profile") { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return false; } else { - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } }); @@ -829,7 +830,7 @@ class _AdBannerWidgetState extends State { ); if (size == null) { - debugPrint('Unable to get height of anchored banner.'); + logger.d('Unable to get height of anchored banner.'); return; } else { if (mounted) { @@ -837,7 +838,7 @@ class _AdBannerWidgetState extends State { adHeight = size.height; }); } - debugPrint('ad height is equal to $adHeight'); + logger.d('ad height is equal to $adHeight'); } final BannerAd banner = BannerAd( @@ -848,20 +849,20 @@ class _AdBannerWidgetState extends State { : BannerAd.testAdUnitId, listener: BannerAdListener( onAdLoaded: (Ad ad) { - debugPrint('$BannerAd loaded.'); + logger.d('$BannerAd loaded.'); setState(() { _anchoredBanner = ad as BannerAd?; }); }, onAdFailedToLoad: (Ad ad, LoadAdError error) { - debugPrint('$BannerAd failedToLoad: $error'); + logger.d('$BannerAd failedToLoad: $error'); setState(() { adHeight = 0; }); ad.dispose(); }, - onAdOpened: (Ad ad) => debugPrint('$BannerAd onAdOpened.'), - onAdClosed: (Ad ad) => debugPrint('$BannerAd onAdClosed.'), + onAdOpened: (Ad ad) => logger.d('$BannerAd onAdOpened.'), + onAdClosed: (Ad ad) => logger.d('$BannerAd onAdClosed.'), ), ); return banner.load(); diff --git a/lib/ui/widgets/home/core/categoriesBar.dart b/lib/ui/widgets/home/core/categoriesBar.dart index cba85114..f5155620 100644 --- a/lib/ui/widgets/home/core/categoriesBar.dart +++ b/lib/ui/widgets/home/core/categoriesBar.dart @@ -12,6 +12,7 @@ import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; class CategoriesBar extends StatefulWidget { const CategoriesBar({ @@ -72,7 +73,7 @@ class _CategoriesBarState extends State { } void _showError(dynamic exception) { - debugPrint(exception.toString()); + logger.d(exception.toString()); } @override @@ -91,7 +92,7 @@ class _CategoriesBarState extends State { }); } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } }); } diff --git a/lib/ui/widgets/home/core/headingChipBar.dart b/lib/ui/widgets/home/core/headingChipBar.dart index 149ec9fc..6f96fa0c 100644 --- a/lib/ui/widgets/home/core/headingChipBar.dart +++ b/lib/ui/widgets/home/core/headingChipBar.dart @@ -1,6 +1,7 @@ import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class HeadingChipBar extends StatefulWidget { final String current; @@ -28,7 +29,7 @@ class _HeadingChipBarState extends State { (navStack.last == "SharedWallpaper") || (navStack.last == "SetupView")) {} } - debugPrint(navStack.toString()); + logger.d(navStack.toString()); }), title: Text( widget.current, diff --git a/lib/ui/widgets/home/wallpapers/colorGrid.dart b/lib/ui/widgets/home/wallpapers/colorGrid.dart index 06ea3760..fe8e57c5 100644 --- a/lib/ui/widgets/home/wallpapers/colorGrid.dart +++ b/lib/ui/widgets/home/wallpapers/colorGrid.dart @@ -10,6 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class ColorGrid extends StatefulWidget { final String provider; @@ -168,7 +169,7 @@ class _ColorGridState extends State with TickerProviderStateMixin { animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return Padding( padding: index == longTapIndex diff --git a/lib/ui/widgets/home/wallpapers/colorLoader.dart b/lib/ui/widgets/home/wallpapers/colorLoader.dart index 7ca24f3f..f5723851 100644 --- a/lib/ui/widgets/home/wallpapers/colorLoader.dart +++ b/lib/ui/widgets/home/wallpapers/colorLoader.dart @@ -2,6 +2,7 @@ import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; import 'package:Prism/ui/widgets/home/wallpapers/colorGrid.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class ColorLoader extends StatefulWidget { final Future future; @@ -27,12 +28,12 @@ class _ColorLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingCards(); } else { return ColorGrid( diff --git a/lib/ui/widgets/home/wallpapers/loading.dart b/lib/ui/widgets/home/wallpapers/loading.dart index 894f51d1..84a02344 100644 --- a/lib/ui/widgets/home/wallpapers/loading.dart +++ b/lib/ui/widgets/home/wallpapers/loading.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dar import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class LoadingCards extends StatefulWidget { const LoadingCards({ @@ -85,7 +86,7 @@ class _LoadingCardsState extends State controller = InheritedDataProvider.of(context)!.scrollController; } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } return controller != null diff --git a/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart b/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart index f0beba6d..88c82462 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart @@ -15,6 +15,7 @@ import 'package:provider/provider.dart'; import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; import 'package:Prism/global/globals.dart' as globals; import 'package:url_launcher/url_launcher.dart'; +import 'package:Prism/logger/logger.dart'; class WallpaperGrid extends StatefulWidget { final String? provider; @@ -41,7 +42,7 @@ class _WallpaperGridState extends State { } void showGooglePopUp(BuildContext context, Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart b/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart index c0af85e8..8e54261f 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart @@ -1,6 +1,7 @@ import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/home/wallpapers/wallpaperGrid.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class WallpaperLoader extends StatefulWidget { final Future future; @@ -25,12 +26,12 @@ class _WallpaperLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingCards(); } else { return WallpaperGrid( diff --git a/lib/ui/widgets/home/wallpapers/wallpaperTile.dart b/lib/ui/widgets/home/wallpapers/wallpaperTile.dart index 084cc0eb..0ab65382 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperTile.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperTile.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; import 'package:provider/provider.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class WallpaperTile extends StatelessWidget { const WallpaperTile({ @@ -19,7 +20,7 @@ class WallpaperTile extends StatelessWidget { final int index; void showGooglePopUp(BuildContext context, Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/widgets/menuButton/downloadButton.dart b/lib/ui/widgets/menuButton/downloadButton.dart index 1746bf70..d59090c1 100644 --- a/lib/ui/widgets/menuButton/downloadButton.dart +++ b/lib/ui/widgets/menuButton/downloadButton.dart @@ -14,6 +14,7 @@ import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:Prism/global/globals.dart' as globals; import 'package:flutter/foundation.dart'; +import 'package:Prism/logger/logger.dart'; const int maxFailedLoadAttempts = 3; @@ -52,13 +53,13 @@ class _DownloadButtonState extends State { onDownload(); } else { showDownloadPopup(context, () { - debugPrint("Download"); + logger.d("Download"); onDownload(); }); } } else { showDownloadPopup(context, () { - debugPrint("Download"); + logger.d("Download"); onDownload(); }); } @@ -115,11 +116,11 @@ class _DownloadButtonState extends State { setState(() { isLoading = true; }); - debugPrint(widget.link); + logger.d(widget.link); final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); // toasts.codeSend("Starting Download"); // main.localNotification.createDownloadNotification(); // if (sdkInt >= 30) { @@ -138,7 +139,7 @@ class _DownloadButtonState extends State { // }); // main.localNotification.cancelDownloadNotification(); // }).catchError((e) { - // debugPrint(e.toString()); + // logger.d(e.toString()); // setState(() { // isLoading = false; // }); @@ -158,7 +159,7 @@ class _DownloadButtonState extends State { // }); // main.localNotification.cancelDownloadNotification(); // }).catchError((e) { - // debugPrint(e.toString()); + // logger.d(e.toString()); // setState(() { // isLoading = false; // }); @@ -201,7 +202,7 @@ class _DownloadButtonState extends State { // } // main.localNotification.cancelDownloadNotification(); // }).catchError((e) { - // debugPrint(e.toString()); + // logger.d(e.toString()); // setState(() { // isLoading = false; // }); @@ -245,7 +246,7 @@ class _DownloadDialogContentState extends State { void rewardFn(num rewardAmount) { downloadCoins += rewardAmount; - debugPrint("Coins : ${downloadCoins.toString()}"); + logger.d("Coins : ${downloadCoins.toString()}"); } @override @@ -267,7 +268,7 @@ class _DownloadDialogContentState extends State { request: request, rewardedAdLoadCallback: RewardedAdLoadCallback( onAdLoaded: (RewardedAd ad) { - debugPrint('$ad loaded.'); + logger.d('$ad loaded.'); globals.adHelper.rewardedAd = ad; _numRewardedLoadAttempts = 0; setState(() { @@ -276,7 +277,7 @@ class _DownloadDialogContentState extends State { }); }, onAdFailedToLoad: (LoadAdError error) { - debugPrint('RewardedAd failed to load: $error'); + logger.d('RewardedAd failed to load: $error'); setState(() { globals.adHelper.loadingAd = false; }); @@ -301,20 +302,20 @@ class _DownloadDialogContentState extends State { globals.adHelper.adLoaded = false; }); if (globals.adHelper.rewardedAd == null) { - debugPrint('Warning: attempt to show rewarded before loaded.'); + logger.d('Warning: attempt to show rewarded before loaded.'); return; } globals.adHelper.rewardedAd!.fullScreenContentCallback = FullScreenContentCallback( onAdShowedFullScreenContent: (RewardedAd ad) => - debugPrint('ad onAdShowedFullScreenContent.'), + logger.d('ad onAdShowedFullScreenContent.'), onAdDismissedFullScreenContent: (RewardedAd ad) { - debugPrint('$ad onAdDismissedFullScreenContent.'); + logger.d('$ad onAdDismissedFullScreenContent.'); ad.dispose(); _createRewardedAd(); }, onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) { - debugPrint('$ad onAdFailedToShowFullScreenContent: $error'); + logger.d('$ad onAdFailedToShowFullScreenContent: $error'); ad.dispose(); _createRewardedAd(); }, @@ -322,8 +323,7 @@ class _DownloadDialogContentState extends State { globals.adHelper.rewardedAd!.show( onUserEarnedReward: (RewardedAd ad, RewardItem reward) { - debugPrint( - '$ad with reward $RewardItem(${reward.amount}, ${reward.type}'); + logger.d('$ad with reward $RewardItem(${reward.amount}, ${reward.type}'); rewardFn(reward.amount); if (downloadCoins >= 10) widget.rewardFunc(); }); diff --git a/lib/ui/widgets/menuButton/favWallpaperButton.dart b/lib/ui/widgets/menuButton/favWallpaperButton.dart index f100c330..e1670a9e 100644 --- a/lib/ui/widgets/menuButton/favWallpaperButton.dart +++ b/lib/ui/widgets/menuButton/favWallpaperButton.dart @@ -9,6 +9,7 @@ import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class FavouriteWallpaperButton extends StatefulWidget { final String id; @@ -72,7 +73,7 @@ class _FavouriteWallpaperButtonState extends State { } if (widget.trash) { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); } }, diff --git a/lib/ui/widgets/menuButton/setWallpaperButton.dart b/lib/ui/widgets/menuButton/setWallpaperButton.dart index ef61c477..41037673 100644 --- a/lib/ui/widgets/menuButton/setWallpaperButton.dart +++ b/lib/ui/widgets/menuButton/setWallpaperButton.dart @@ -5,6 +5,7 @@ import 'package:device_info/device_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:Prism/logger/logger.dart'; class SetWallpaperButton extends StatefulWidget { final String? url; @@ -42,12 +43,12 @@ class _SetWallpaperButtonState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Success'}); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } if (mounted) { @@ -58,7 +59,7 @@ class _SetWallpaperButtonState extends State { } catch (e) { analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Failure'}); - debugPrint(e.toString()); + logger.d(e.toString()); } } @@ -82,13 +83,13 @@ class _SetWallpaperButtonState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } if (mounted) { @@ -99,7 +100,7 @@ class _SetWallpaperButtonState extends State { } catch (e) { analytics.logEvent( name: 'set_wall', parameters: {'type': 'Both', 'result': 'Failure'}); - debugPrint(e.toString()); + logger.d(e.toString()); } } @@ -123,13 +124,13 @@ class _SetWallpaperButtonState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Lock', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } if (mounted) { @@ -138,7 +139,7 @@ class _SetWallpaperButtonState extends State { }); } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Lock', 'result': 'Failure'}); } @@ -164,13 +165,13 @@ class _SetWallpaperButtonState extends State { }); } if (result!) { - debugPrint("Success"); + logger.d("Success"); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Home', 'result': 'Success'}); toasts.codeSend("Wallpaper set successfully!"); } else { - debugPrint("Failed"); + logger.d("Failed"); toasts.error("Something went wrong!"); } if (mounted) { @@ -179,7 +180,7 @@ class _SetWallpaperButtonState extends State { }); } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); analytics.logEvent( name: 'set_wall', parameters: {'type': 'Home', 'result': 'Failure'}); } @@ -209,9 +210,9 @@ class _SetWallpaperButtonState extends State { if (Platform.isAndroid) { final androidInfo = await DeviceInfoPlugin().androidInfo; final sdkInt = androidInfo.version.sdkInt; - debugPrint('(SDK $sdkInt)'); + logger.d('(SDK $sdkInt)'); isLoading - ? debugPrint("") + ? logger.d("") : sdkInt >= 24 ? onPaint() : toasts @@ -222,7 +223,7 @@ class _SetWallpaperButtonState extends State { }, onTap: () { isLoading - ? debugPrint("") + ? logger.d("") : showModalBottomSheet( isScrollControlled: true, context: context, diff --git a/lib/ui/widgets/menuButton/shareButton.dart b/lib/ui/widgets/menuButton/shareButton.dart index b920e56d..536cc803 100644 --- a/lib/ui/widgets/menuButton/shareButton.dart +++ b/lib/ui/widgets/menuButton/shareButton.dart @@ -4,6 +4,7 @@ import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:share/share.dart'; +import 'package:Prism/logger/logger.dart'; class ShareButton extends StatefulWidget { final String? id; @@ -34,7 +35,7 @@ class _ShareButtonState extends State { Widget build(BuildContext context) { return GestureDetector( onTap: () { - debugPrint("Share"); + logger.d("Share"); onShare(); }, child: Stack( @@ -97,7 +98,7 @@ class _ShareButtonState extends State { final Uri shortUrl = shortDynamicLink.shortUrl; Clipboard.setData(ClipboardData(text: shortUrl.toString())); Share.share("🔥Check this out âžœ $shortUrl"); - debugPrint(shortUrl.toString()); + logger.d(shortUrl.toString()); analytics.logShare( contentType: 'wallpaperScreen', itemId: widget.id!, method: 'link'); setState(() { diff --git a/lib/ui/widgets/popup/categoryPopUp.dart b/lib/ui/widgets/popup/categoryPopUp.dart index 24389f93..6bf12a50 100644 --- a/lib/ui/widgets/popup/categoryPopUp.dart +++ b/lib/ui/widgets/popup/categoryPopUp.dart @@ -6,6 +6,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:Prism/ui/pages/home/core/pageManager.dart' as PM; +import 'package:Prism/logger/logger.dart'; void showCategories(BuildContext context, CategoryMenu initialValue) { final controller = ScrollController(); @@ -69,8 +70,7 @@ void showCategories(BuildContext context, CategoryMenu initialValue) { .changeSelectedChoice(choice as CategoryMenu); Provider.of(context, listen: false) - .changeWallpaperFuture( - choice, "r"); + .changeWallpaperFuture(choice, "r"); PM.tabController!.animateTo(0, duration: const Duration(milliseconds: 200), curve: Curves.easeInCubic); @@ -127,7 +127,7 @@ void showCategories(BuildContext context, CategoryMenu initialValue) { color: Theme.of(context).errorColor, onPressed: () { Navigator.of(context).pop(); - debugPrint('You have not chossed anything'); + logger.d('You have not chossed anything'); }, child: const Text( 'OK', diff --git a/lib/ui/widgets/popup/colorsPopUp.dart b/lib/ui/widgets/popup/colorsPopUp.dart index 161c3159..a9cbe401 100644 --- a/lib/ui/widgets/popup/colorsPopUp.dart +++ b/lib/ui/widgets/popup/colorsPopUp.dart @@ -4,6 +4,7 @@ import 'package:animations/animations.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; final databaseReference = FirebaseFirestore.instance; List colors = [ @@ -105,7 +106,7 @@ Color showColors(BuildContext context) { GestureDetector( onTap: () { currentColor = color; - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); Navigator.pushNamed( context, diff --git a/lib/ui/widgets/popup/contriPopUp.dart b/lib/ui/widgets/popup/contriPopUp.dart index bc5eda71..9b91c0da 100644 --- a/lib/ui/widgets/popup/contriPopUp.dart +++ b/lib/ui/widgets/popup/contriPopUp.dart @@ -5,6 +5,7 @@ import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:github/github.dart'; +import 'package:Prism/logger/logger.dart'; void showContributorDetails(BuildContext context, String username) { Future getUser(String username) async { @@ -13,7 +14,7 @@ void showContributorDetails(BuildContext context, String username) { await github.users.getUser(username).then((value) { user = value; }); - debugPrint(user!.blog); + logger.d(user!.blog); return user; } @@ -28,12 +29,12 @@ void showContributorDetails(BuildContext context, String username) { future: getUser(username), builder: (context, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return SizedBox(height: 300, child: Center(child: Loader())); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return SizedBox(height: 300, child: Center(child: Loader())); } else { return Column( diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index fd66b161..e1137448 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -271,8 +271,8 @@ class _EditProfilePanelState extends State { minWidth: 400, quality: 85, ); - debugPrint(file.lengthSync().toString()); - debugPrint(result!.length.toString()); + logger.d(file.lengthSync().toString()); + logger.d(result!.length.toString()); return result; } @@ -304,7 +304,7 @@ class _EditProfilePanelState extends State { pfpPath = value.content!.path!; pfpSha = value.content!.sha!; })); - debugPrint('File Uploaded'); + logger.d('File Uploaded'); globals.prismUser.profilePhoto = pfpUrl; main.prefs.put("prismUserV2", globals.prismUser); await firestore @@ -314,7 +314,7 @@ class _EditProfilePanelState extends State { "profilePhoto": pfpUrl, }); } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); toasts.error("Some uploading issue, please try again."); } } @@ -335,7 +335,7 @@ class _EditProfilePanelState extends State { coverPath = value.content!.path!; coverSha = value.content!.sha!; })); - debugPrint('Cover File Uploaded'); + logger.d('Cover File Uploaded'); globals.prismUser.coverPhoto = coverUrl; main.prefs.put("prismUserV2", globals.prismUser); await firestore @@ -352,7 +352,7 @@ class _EditProfilePanelState extends State { Future onWillPop() async { if (navStack.length > 1) navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); return true; } @@ -367,7 +367,7 @@ class _EditProfilePanelState extends State { icon: const Icon(JamIcons.close), onPressed: () { navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); Navigator.pop(context); }), title: Text( @@ -878,13 +878,13 @@ class _EditProfilePanelState extends State { fontSize: 14, color: Colors.white), ), onChanged: (value) { - // print("VALUE TEXT ${value.toLowerCase()}"); - // print( + // logger.d("VALUE TEXT ${value.toLowerCase()}"); + // logger.d( // "VALUE LINK NAME ${_link?["name"].toString().toLowerCase()}"); - // print( + // logger.d( // "VALUE LINK VALUE ${_link?["value"].toString().toLowerCase()}"); - // print("VALUE LINK EDIT ${linkEdit}"); - // print( + // logger.d("VALUE LINK EDIT ${linkEdit}"); + // logger.d( // "VALUE LINK CONTAINS ${(value.toLowerCase().contains('${_link?["name"].toString().toLowerCase()}'))}"); if (value.toLowerCase().contains( @@ -1006,7 +1006,7 @@ class _EditProfilePanelState extends State { }); Navigator.pop(context); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); toasts.codeSend("Details updated!"); } : (usernameEdit && enabled) @@ -1079,7 +1079,7 @@ class _EditProfilePanelState extends State { }); Navigator.pop(context); navStack.removeLast(); - debugPrint(navStack.toString()); + logger.d(navStack.toString()); toasts.codeSend("Details updated!"); } : null, diff --git a/lib/ui/widgets/popup/linkPopUp.dart b/lib/ui/widgets/popup/linkPopUp.dart index c96aa8fb..ddd77438 100644 --- a/lib/ui/widgets/popup/linkPopUp.dart +++ b/lib/ui/widgets/popup/linkPopUp.dart @@ -5,15 +5,16 @@ import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:Prism/logger/logger.dart'; void showLinksPopUp(BuildContext context, String id) { Future> getLinks(String id) async { List links = []; final FirebaseFirestore firestore = FirebaseFirestore.instance; - debugPrint(id); + logger.d(id); await firestore.collection(USER_NEW_COLLECTION).doc(id).get().then((value) { links = linksToModel(value.data()!["links"] as Map); - debugPrint(links.toString()); + logger.d(links.toString()); }); return links; } @@ -29,12 +30,12 @@ void showLinksPopUp(BuildContext context, String id) { future: getLinks(id), builder: (context, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return SizedBox(height: 300, child: Center(child: Loader())); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return SizedBox(height: 300, child: Center(child: Loader())); } else { if (snapshot.data!.isNotEmpty) { diff --git a/lib/ui/widgets/popup/signInPopUp.dart b/lib/ui/widgets/popup/signInPopUp.dart index 5138e2c2..cd15279a 100644 --- a/lib/ui/widgets/popup/signInPopUp.dart +++ b/lib/ui/widgets/popup/signInPopUp.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/main.dart' as main; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:Prism/logger/logger.dart'; void googleSignInPopUp(BuildContext context, Function func) { final Dialog loaderDialog = Dialog( @@ -244,7 +245,7 @@ void googleSignInPopUp(BuildContext context, Function func) { Navigator.pop(context); func(); }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); globals.prismUser.loggedIn = false; main.prefs.put("prismUserV2", globals.prismUser); diff --git a/lib/ui/widgets/profile/downloadList.dart b/lib/ui/widgets/profile/downloadList.dart index 5739d189..4020b142 100644 --- a/lib/ui/widgets/profile/downloadList.dart +++ b/lib/ui/widgets/profile/downloadList.dart @@ -5,6 +5,7 @@ import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:Prism/logger/logger.dart'; class DownloadList extends StatelessWidget { @override @@ -97,13 +98,13 @@ class DownloadList extends StatelessWidget { dir.deleteSync(recursive: true); deletedDir = true; } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } try { dir2.deleteSync(recursive: true); deletedDir2 = true; } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } if (deletedDir || deletedDir2) { Fluttertoast.showToast( diff --git a/lib/ui/widgets/profile/drawerWidget.dart b/lib/ui/widgets/profile/drawerWidget.dart index 7882e521..0243e7db 100644 --- a/lib/ui/widgets/profile/drawerWidget.dart +++ b/lib/ui/widgets/profile/drawerWidget.dart @@ -210,13 +210,13 @@ class ProfileDrawer extends StatelessWidget { dir.deleteSync(recursive: true); deletedDir = true; } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } try { dir2.deleteSync(recursive: true); deletedDir2 = true; } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } if (deletedDir || deletedDir2) { Fluttertoast.showToast( @@ -367,7 +367,7 @@ class ProfileDrawer extends StatelessWidget { final sdkInt = androidInfo.version.sdkInt; final manufacturer = androidInfo.manufacturer; final model = androidInfo.model; - debugPrint( + logger.d( 'Android $release (SDK $sdkInt), $manufacturer $model'); final String zipPath = await zipLogs(); final MailOptions mailOptions = MailOptions( diff --git a/lib/ui/widgets/profile/prismList.dart b/lib/ui/widgets/profile/prismList.dart index e05cd42d..bcf1c898 100644 --- a/lib/ui/widgets/profile/prismList.dart +++ b/lib/ui/widgets/profile/prismList.dart @@ -210,8 +210,8 @@ class PrismList extends StatelessWidget { final sdkInt = androidInfo.version.sdkInt; final manufacturer = androidInfo.manufacturer; final model = androidInfo.model; - debugPrint( - 'Android $release (SDK $sdkInt), $manufacturer $model'); + logger + .d('Android $release (SDK $sdkInt), $manufacturer $model'); final String zipPath = await zipLogs(); final MailOptions mailOptions = MailOptions( body: diff --git a/lib/ui/widgets/profile/uploadedSetupsLoader.dart b/lib/ui/widgets/profile/uploadedSetupsLoader.dart index 36a9cb1b..c74c7b5f 100644 --- a/lib/ui/widgets/profile/uploadedSetupsLoader.dart +++ b/lib/ui/widgets/profile/uploadedSetupsLoader.dart @@ -1,6 +1,7 @@ import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/profile/uploadedSetupsGrid.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class UploadedSetupsLoader extends StatefulWidget { final Future future; @@ -26,15 +27,15 @@ class _UploadedSetupsLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return Center( child: Loader(), ); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); - debugPrint(snapshot.data.toString()); + logger.d("snapshot none, waiting"); + logger.d(snapshot.data.toString()); return Center( child: Loader(), ); diff --git a/lib/ui/widgets/profile/uploadedWallsLoader.dart b/lib/ui/widgets/profile/uploadedWallsLoader.dart index 6492a33c..0edd913c 100644 --- a/lib/ui/widgets/profile/uploadedWallsLoader.dart +++ b/lib/ui/widgets/profile/uploadedWallsLoader.dart @@ -1,6 +1,7 @@ import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/profile/uploadedWallsGrid.dart'; import 'package:flutter/material.dart'; +import 'package:Prism/logger/logger.dart'; class ProfileLoader extends StatefulWidget { final Future future; @@ -26,14 +27,14 @@ class _ProfileLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return Center( child: Loader(), ); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return Center( child: Loader(), ); diff --git a/lib/ui/widgets/profile/userList.dart b/lib/ui/widgets/profile/userList.dart index 9a328fa6..4fdecbb2 100644 --- a/lib/ui/widgets/profile/userList.dart +++ b/lib/ui/widgets/profile/userList.dart @@ -7,6 +7,7 @@ import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class UserList extends StatelessWidget { final bool expanded; @@ -42,7 +43,7 @@ class UserList extends StatelessWidget { Navigator.pop(context); main.RestartWidget.restartApp(context); }).catchError((e) { - debugPrint(e.toString()); + logger.d(e.toString()); Navigator.pop(context); globals.prismUser.loggedIn = false; main.prefs.put("prismUserV2", globals.prismUser); diff --git a/lib/ui/widgets/profile/userProfileGrid.dart b/lib/ui/widgets/profile/userProfileGrid.dart index d33a0096..f6595e4c 100644 --- a/lib/ui/widgets/profile/userProfileGrid.dart +++ b/lib/ui/widgets/profile/userProfileGrid.dart @@ -13,6 +13,7 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class UserProfileGrid extends StatefulWidget { final String? email; @@ -311,7 +312,7 @@ class PhotographerWallTile extends StatelessWidget { final int index; void showGooglePopUp(BuildContext context, Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/widgets/profile/userProfileLoader.dart b/lib/ui/widgets/profile/userProfileLoader.dart index 571452b1..e330efd6 100644 --- a/lib/ui/widgets/profile/userProfileLoader.dart +++ b/lib/ui/widgets/profile/userProfileLoader.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/profile/userProfileGrid.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class UserProfileLoader extends StatefulWidget { final String? email; @@ -29,12 +30,12 @@ class _UserProfileLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingCards(); } else { return UserProfileGrid( diff --git a/lib/ui/widgets/profile/userProfileSetupGrid.dart b/lib/ui/widgets/profile/userProfileSetupGrid.dart index b4982b6a..2379a967 100644 --- a/lib/ui/widgets/profile/userProfileSetupGrid.dart +++ b/lib/ui/widgets/profile/userProfileSetupGrid.dart @@ -13,6 +13,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:Prism/main.dart' as main; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; class UserProfileSetupGrid extends StatefulWidget { final String? email; @@ -42,7 +43,7 @@ class _UserProfileSetupGridState extends State } void showGooglePopUp(Function func) { - debugPrint(globals.prismUser.loggedIn.toString()); + logger.d(globals.prismUser.loggedIn.toString()); if (globals.prismUser.loggedIn == false) { googleSignInPopUp(context, func); } else { diff --git a/lib/ui/widgets/profile/userProfileSetupLoader.dart b/lib/ui/widgets/profile/userProfileSetupLoader.dart index da2af56b..00c8a685 100644 --- a/lib/ui/widgets/profile/userProfileSetupLoader.dart +++ b/lib/ui/widgets/profile/userProfileSetupLoader.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/profile/userProfileSetupGrid.dart'; import 'package:Prism/ui/widgets/setups/loadingSetups.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class UserProfileSetupLoader extends StatefulWidget { final String? email; @@ -29,12 +30,12 @@ class _UserProfileSetupLoaderState extends State { future: _future, builder: (ctx, snapshot) { if (snapshot == null) { - debugPrint("snapshot null"); + logger.d("snapshot null"); return const LoadingSetupCards(); } if (snapshot.connectionState == ConnectionState.waiting || snapshot.connectionState == ConnectionState.none) { - debugPrint("snapshot none, waiting"); + logger.d("snapshot none, waiting"); return const LoadingSetupCards(); } else { return UserProfileSetupGrid( diff --git a/lib/ui/widgets/search/searchGrid.dart b/lib/ui/widgets/search/searchGrid.dart index b2684cf2..e14f077b 100644 --- a/lib/ui/widgets/search/searchGrid.dart +++ b/lib/ui/widgets/search/searchGrid.dart @@ -13,6 +13,7 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:Prism/main.dart' as main; +import 'package:Prism/logger/logger.dart'; class SearchGrid extends StatefulWidget { final String query; @@ -97,7 +98,9 @@ class _SearchGridState extends State with TickerProviderStateMixin { refreshHomeKey.currentState?.show(); if (widget.selectedProvider == "WallHaven") { wData.wallsS = []; - wData.getWallsbyQuery(widget.query, main.prefs.get('WHcategories') as int?, + wData.getWallsbyQuery( + widget.query, + main.prefs.get('WHcategories') as int?, main.prefs.get('WHpurity') as int?); } else if (widget.selectedProvider == "Pexels") { pData.wallsPS = []; @@ -222,7 +225,7 @@ class _SearchGridState extends State with TickerProviderStateMixin { animation: offsetAnimation, builder: (buildContext, child) { if (offsetAnimation.value < 0.0) { - debugPrint('${offsetAnimation.value + 8.0}'); + logger.d('${offsetAnimation.value + 8.0}'); } return Padding( padding: index == longTapIndex @@ -302,8 +305,8 @@ class _SearchGridState extends State with TickerProviderStateMixin { widget.selectedProvider, widget.query, index, - pData - .wallsPS[index].src!["medium"], + pData.wallsPS[index] + .src!["medium"], ]); } } @@ -334,7 +337,8 @@ class _SearchGridState extends State with TickerProviderStateMixin { createDynamicLink( pData.wallsPS[index].id!, "Pexels", - pData.wallsPS[index].src!["original"] + pData + .wallsPS[index].src!["original"] .toString(), pData.wallsPS[index].src!["medium"] .toString()); diff --git a/lib/ui/widgets/setups/loadingSetups.dart b/lib/ui/widgets/setups/loadingSetups.dart index 02f393f6..fdfe4a16 100644 --- a/lib/ui/widgets/setups/loadingSetups.dart +++ b/lib/ui/widgets/setups/loadingSetups.dart @@ -3,6 +3,7 @@ import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dar import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; +import 'package:Prism/logger/logger.dart'; class LoadingSetupCards extends StatefulWidget { const LoadingSetupCards({ @@ -85,7 +86,7 @@ class _LoadingSetupCardsState extends State controller = InheritedDataProvider.of(context)!.scrollController; } } catch (e) { - debugPrint(e.toString()); + logger.d(e.toString()); } return controller != null From d8ab41e0c03e19905037f3fd261eb4fec0aa5f38 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 19:42:24 +0530 Subject: [PATCH 32/33] fix logger stack overflow recursion error --- lib/logger/logger.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/logger/logger.dart b/lib/logger/logger.dart index 67989ae4..ced76fba 100644 --- a/lib/logger/logger.dart +++ b/lib/logger/logger.dart @@ -50,9 +50,9 @@ class LogOutputPrinter extends PrettyPrinter { .then((value) => _logFile!.writeStringSync('$str\n')); final timeStr = getTime().substring(0, 12); if (prefix == "[E]") { - logger.d(color!('$timeStr $prefix - $logMsg \n$logStrace')); + print(color!('$timeStr $prefix - $logMsg \n$logStrace')); } else { - logger.d(color!('$timeStr $prefix - $logMsg')); + print(color!('$timeStr $prefix - $logMsg')); } return []; } From 60b2af94e4e920907a2e9b126dc71e85bb9a5022 Mon Sep 17 00:00:00 2001 From: CodeNameAkshay Date: Sun, 8 Aug 2021 20:02:23 +0530 Subject: [PATCH 33/33] fix splash screen stuck error --- lib/main.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index 1bb83e26..17b5eeec 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -71,7 +71,8 @@ void main() { await Hive.openBox('setups'); await Hive.openBox('localFav'); // await Hive.deleteFromDisk(); - Hive.registerAdapter(InAppNotifAdapter()); + Hive.ignoreTypeId(33); + Hive.registerAdapter(InAppNotifAdapter()); await Hive.openBox('inAppNotifs'); // Hive.registerAdapter(PrismUsersAdapter()); Hive.registerAdapter(PrismUsersV2Adapter());