From a6bd25ce3b70fc69ec3ee9ed716dc9f3eabe95bf Mon Sep 17 00:00:00 2001 From: VincentMeilinger Date: Sat, 3 Feb 2024 17:51:51 +0100 Subject: [PATCH] Code cleanup --- .../project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 112362 -> 108657 bytes .../Localizable.xcstrings | 3 + .../Models/AppState.swift | 26 ++-- .../Network/CookbookApi/CookbookApi.swift | 6 +- .../Network/NextcloudApi/NextcloudApi.swift | 44 +++++++ .../Views/MainView.swift | 2 + .../Views/Recipes/CategoryDetailView.swift | 17 ++- .../Views/SettingsView.swift | 118 ++++++++++++------ .../Views/Tabs/GroceryListTabView.swift | 2 + .../Views/Tabs/RecipeTabView.swift | 1 + 11 files changed, 163 insertions(+), 60 deletions(-) diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj index f1af7c4..f3bb6d2 100644 --- a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj @@ -742,7 +742,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 1.8.1; + MARKETING_VERSION = 1.9.0; PRODUCT_BUNDLE_IDENTIFIER = "VincentMeilinger.Nextcloud-Cookbook-iOS-Client"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; @@ -785,7 +785,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 1.8.1; + MARKETING_VERSION = 1.9.0; PRODUCT_BUNDLE_IDENTIFIER = "VincentMeilinger.Nextcloud-Cookbook-iOS-Client"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate index 4b66b9b73f1fe4add174338dd804f9d1bf51067f..b2caf32ed4fa2803d4c5a767ce61ff2a2263b5ed 100644 GIT binary patch literal 108657 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

>pSh`BLs#!XV%K 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 literal 112362 zcmeFacVHA%_dh)MPT46tyR$vJp#%d+3#1T8kQPz^sS(1(k)xCGgk8&Q;-xshz`f=7$QaB2EUaTo=^r zWAjIamV}D3q7NNlL`IsFUsX^Q($Nlw*ppEhE8}D07(bK5^k(`n$xI59%A_%UnRKQf z)1Mi`jAh0#@Al!6AK!Dt8? zin7pfGy;u8XQHuaBASGzq3LKoT7XJX87fC%RDsS%%aM)FN) zqfO{ev>n}rcA@*w{pexzINF1rL{FjT&6w*W(R%Bi@AXz?<<- zd^g^O_uyCX8~9E9KK>Ygg1^9D;&1VH_$T}`K8%mxzgf((tc6us8|z@5tc&f*_F|LR z-fSN>nN49+*)+B=bq?JB=-1=dgur5nIfj!!BlZ z_Cod|b~U?(y_~&*y_&s-y@9=vy_LO z74`u82Ky%a0sA5Q5&JRwHTw;Fi2ak}IFXY$m9uen&c*q-c&;6nz;)ufaD%wP+z@Uk zm&Fa^vbh{Cm&@aZbECKkTs}9Ao6gPQ3b`UK#FcU7T$o$TE$3EpYq(3eE4VAUYq%S@ z8@XG#+qhb8J@+v82=^%W82320huh0N!9B@6#XZgK<6hwoaBpyLavyLXavyOYbDwbE zaNly@aldhY^8zpP3UB8%-p$AH?fCY5C;l|PD?gYY!Vl%M_+flDpTp@hkY%{AK**{8jvQ{7wAL{O$ZYegnUef0TcW zf1KaL@8zH1pX8t7pXQ(8pXFcR>-dBGtNh#iJN(D|C;X@UXZ&~k_xun1VSy1u!78YN zLvRXSAs}=RItqzGXQ7+WUC0uK3E4u9kSpW~!-WyTNa0LjlrT=1EKCum3bTcvFi$8J zN`(2s0wE$)3Dv^+!bQTR!j-~W;acHF;a1@`p;lNg+#zfh_6U20Cxj=3r-Y}4XM|^k z=Y)O2^TJEQYr^Zo8^W8ye}wmi&xJ39FNLp!uZ5q5UxY)#-xl7YS{xRq#cT0d;w>F5 ziI&cmZkFzrBulO(&obOH!ZOlwre&06v}KHCtYw@f-!k1Y!%|?GW0`MRU@5hfS*k4y zEz2z{Etgr=TCTEOXSvC8v*mWnI?D#jM#~nCpMVENGUrR6Kj*Os3xzgP}g{uX)BDr%xb^oU+DAa)Qtiiu)pv76Xk z%o2x**%at_=`{gQX$TP$^3qCXJ9rN@Jy|(llwh zR3wF@xzf4PdD2p8nRLFiT+$^Xt&lE|R!NsgS4dl=tPHDSzm$XCLDcvpYlJ1f2 zl^&BGm-a||rDvt*r2W#%(reP|(p%CY=~wAD>38X{bVT|?`cwK#`dd0GGcuAn*&@rb zDr>S!_R4;_o!n7AP3|IR$^+yxKpCp!D7nfQWvntznWRis<|^})Vx>fxuPjhXl?vq?Wr=dGa-MR5a-njO za}! zQ29vtSouWxRQXc*LHSWRtQ=APQ2w$qR?f;>L)H@Od~3NiY>il}tc$HntjnzDTUS^w zu&%ORY`xTanRTu8D(iLD>#a9iZ?Uek)>t=MH(9q@w^?^scUteY?zTQ?eaQNl^>OQy z)~Bq`S@&6Aw7z7mvmUg*VSUs3uJt|Zht`j*pIJY*er^56`h)dH>mlo})+5$GtVdNw zTkR>1sE%mzt!esHti{wZA$}9j~6HPEhmJiRvVE zvN}bbs!mg9sYPl?ovY4M%hYmpp}I(2tm-OJZ&YtmZ&q(nZ&hzoZ&%l;HEON8UcE!T zOTAa!tv;$graq%StG=&(pnj-+q<*Y^qJFA=rhcw|p?;};tNx-MQU9>9HqOS|RGZD# z)pokAo2|R8hpnfrmo3TG+t$aHZ0l<~!#2=1%$98%WgBf9V;gImY@1>W+bV45*eY!i zTa~Taw$Qf7w%E4Bw#;^+ZH?^`+ts#fY}eYZv)yL9-FCn20o#MNhinhq9NdvKEpoKKF3~YUtlk_m)Xnh3+;>S zSJN3J8!G2Ai2 zG14){G0`!}G1)QGG0PEh%ypDI!j4sriyf;SYaEw2E_GbyxZH7t<4VU`$F+`I9JP-1 zj%|)R9orpuIqq}Z?|9kqisOKz&T-K3s^c}s>y9@ZZ#v#`yyy7D@u}l$$2X2&9ETjg zI{tPXb^4rfPQNqYjCZzkws&@Lc625>#Dp66WZywG`(bEWfg=M~O7oSU6noLimSoOe36JMVJt zaPD;8?cD8r#QCW6G3Qgxr=2f4Uvj?ee8u^u^DXC(&Yzq=JAZK=a{lW4&H20Yu=9xX z59d*r;Ig_@m&fIGb#Qfb^><~sGF<~)XSfEs2Dt{ihPZ~hvRt{Y(XKJBv95`(Nv>J0 z*{-1LY*(?X#6?^yTo<@5bY0|H>00Hw*tOcV#&wD73fFb6TU@ugHo7*s?r`mJ?Q}io z+UI)S^@3}^>qXZ~u9sb}xDL4LT(7&{bA9ak#PyBqTh}4iuWp;$?$+E6x6|!%yWJkQ z*X?u1x!buD-QC?i+^Oy~cVG8F_aOHq_hk1J_f+>Z_jLCR_e}RJ_iT62UFe?gu5h2@ zUgAF2y~2Hg`)2no?pxirxo>x`bJw_Q-Rs>O+#B6n+&kTOyLY+oaX;vO$o+)-N%srx z{q9fPpSnMDfA0Rm{iXXW_t)-k+~2ytbN}Q%>^|aQJjf$?WRK#pdfXn5r;jJulj2GB zq=@THhZ>swtBXC?(}T;-0gY5^PuM;&mPZS&pyxd zo)giT7OZdETYoW#03>%e}gncvpBY z@UHS+?!Cf$t@k?bZQk3x>%5!2TfBR{Pk5j7KIMJd`;7Nl?{nUL-sin9cwhFu?tRz$ zp7&GlXWs9;-}@{+(I@$2pW?InRG-af_h~+d&*N+7JI$Bq>*?#|OY)`r`uWEC#`(tk z&hkz0<@+Z3Ciy1&rue4%X8HR#&xR>Hyj(a2S&A7MX-j4ey?&G*W;{J^LEAH>O zqkhJZ{MgU>IX~~0{F>k4_xa=e3I0z0)BHXBJ^k7K9DlAq&p+Hh!ave~rhk-ww115M zEdNyhY=6){&tL4X@So#f?O)@+#DA&(GXLfNEBsgb*ZQyWU+ur%f1Cey|3?2N|6Tqa z{+<52{k!}R`5*Ql^uOwV&HuXp4gZ_|xBPGW-|@fef6xD+{|orREATTFT z7$^#a0&@fN0~LXD0+oSt1Lp;n29^a@1Xcz%1U3h@1hxn63hWBp6SzO{K;V(Uqk+AF zCj!p|o(;SZ*dKT$a3Jtn;Pt@Ufp-G$2R;aV68JRmW#HSukAXvh!-2ozQ9K_n#jEj- zcu%}PzGHkse5d&S@fq=%@dM(|h#wd~D1LDKkockTS@FZ-v*UB(bK~>kC&cH+PmG@w zKRJF%{M7hq@xl0#`1$b*;!ESp;>+U~$1jOr7Ej{W#$OeGb^JB)*T&xve`EZu@$2L7 zh~FB2fBeIfI+s_MmL6nO#>Utgjd3yFDP!|{F9C30E$NR1_43a>9kxWufw_Sj_<@k?FOWiD%j|?U@ctM<#*k#GIz{x}aNhQI~XC zS9I%UrZdw8KBqI?;Gxb;H(k|j@UiPN;UN{iQ-Yd@)>Bem6kaqkk_Vm3FRToO%4gSK z&8sXZ3k9_#xGz|UDlsYUqEvaw+?7XCml(gieetmQLWe-cv>YJL8 z6V$raw*cNAR!}*mATqfmQUbM1DXA*XFDai_8iG4Pts^{`Ragb8qWa-#TA$``C@LH- zol{UbGFDVji)*-NR8xOT3To}r`z7>GPe|#ToScx6o|%vg|5DOZQWG-MlM`Z7k--dO zdTn7cnE}ih%s^%kGng5|3}v!(O?T){-KD#AkM7lddfXP6f*dB7$zz5yBbbpeDWhN# z{Q7qNF8ywOmwqoy$o+ImG-y+Pad^?#f`ujX3Sex_OZ9(dRfb@M9q`nos*=)@s*+G- zN=Z>wvH94@@<;_}%EFZmkJZ0vJT`N3NoY|{XioLKc`zHAYfPvtT)AX;WkE%8!_`T8$<)#VnIM9Yo!ehM>(>9v)a%1mRXGc%Z(%q(U$6J*Y23iN;;uea0N>mBrtdV=0b zKTS{E$`mq1Oo*Aw%wvj~5@tTLfGO2G>#6!+eTY6%&)3h^%k``ETj?nDm|7Sv3iYOA z5w5N*3`Hqu(#YQR-RYfOTu?qQ6bWj5TJi9NP(?UGI{@Pa!0R`$`ssSN4a{;zX9%-g@2>aMd%-tMhdZyNv?^3-Eb(DW=wN^X7KU+jL8Pj_-Sl!$ z^G+(Cd)$ZP%rZhnlSVczC)S?T%o@hKZk^tvj=7AvoVkLza=MA7K}Q`C(Wh@L;TtYnba8Zw+&;o>aqJulJ^qOhMqd z@6-Xx-^|>?+#1vZK#dgR##7BTkWytR0)SjVTcIcGea1Nuo)gn*Bg}HVV6jarsS1@D zJ%yzSETJl^5av4)DgulQ&5jgOKpanL5(=3WiPGapcqg(hE$it!ewg!2r%tt^QY*=c zO!U9RJ)OYQKg*8&x@RNku5qKU!UIa(*x^rQtbaa`FLZ z%jbD8d&CGVXh_*0WnQhFSdYax> zPuKfxVD4geFguyM_5S(*{S1Aev4|*$F0LqmnJF^nc_J`dlm1|7gvJ7uk1v3Us4UN~ zs)ROCHXP-869BA&TCc{G+N7jmp}FD8kh#F%O57P@4V9I!)nDfp{?v;>~lDw=}!g;CvQ+p+3q^2%g7Ay5>=GppEpVJ5F zJz_UrVD_73v<~ZHuf4*&Mu+hLQ^y=+Ue$-{S^6+Nn_|%$%$o)l<>3D^m4|`Xqg_K1H9p5!pc;?S`DlrB4Gfbf!K_pH1h4;zUePGO_A(xY95g z^<2{go^jrNevjCv(dwsuneaIJ)u42F6%W0gRIJ!bbRn;!%58d8nN}y#{sA zXPgAe&}j(vNEFJ%<3d?_ay^uxZm36nsXg^zJ(Qu|sE=7jYzR|Pe*h_zhWes()K4$a z=jerc(FT-(GSL8Zh91(3^%8yl|4Lv&!%z-wdA2^c2IcDWPKre19Ju^gfcftY?xHlY zG90eb(H6z(i|^F=^q#%U-SKOx%??6{%kA+-H^MW+6(QI)hASy6h8<^BctNNI zTtf-X?-`?NlnxFN4kiFw&hFs$&>yy&qruf7A27HO+#ITz72w2h7q}@L0A~9daM-uN zRpCqKD{xZyk@*u`6I7&uOF{?K5p@EGgmfV9!QhGj%paHEw~iCWHJF969-e9 zG6w`K?}UeL)SHpqHMMqCq@IlbKu4)RuT_*+0))?{7c0 zeEvKC3*L%mpgByhO=u>Xg=V85IvW+}VZA~>N3YZ)detVt?IILnI-_~07?8VKzX;R{ zYxS!r2(_p94XT83<)uqTmc!x!Mr3dn_`Muhk`L}140B>-L3yMEt{Kz?{LGg#Y~L9({te=cP4+ox5#>mgD1xd` zHCm`I)EDWC^(Feb8_{B*-OlJdv{XM2`lIU0^($$QsJ_Z*aTDp+0C`7aF_U*$sFL zdlOJHdFqu66Mz8#zR^7kRX*i}%L+=$8y*LE8cFw{5ei}U!)Ve_jn+$eCZ<}g2YSFW_ zv#oyKtYaT~{#Y)G_R+RXOD*hIRFFBhAo+x1nTBKd@G^Rpid(Os1E>xi)UVO6)vwd9 z-vFZ4>*x(M07R`D^c&$D)<~P`r&__tK0qH)zV)GgQw{o9zqv)e^*QjZFI(bUw~TW* zU#OSa8k{A8J=>7yzgI8q(1wD)r48&CJ}@G51ZzS!rWeQw{Xl=61q$jjK~|W=Oa*;z z5afku+yb3N$BZUglvB)Zngw^E#03^wM~>? zl}0p{s_`^xjX9ngE=2V)^^zIr-R|3GUG2Gsq5*B8n{n1M9>&{Jg)>aUNu)Sj6{$1) zP6MY>-*&UMc1(v_FzF~Q)uy33)8=z3b?i3l0E5taunQ?n*OqFT2}-AuiqOciig0C> z#@B%?*@NlX>MCvPe+rvbCNU}NO)uP*s%+_gv`N6UX_JJys7G&WXV$j@#94JgcHa!*x+pQ0v?FBlL&T+%QI6&ty|$QA;(qbbqqB z1nQzDr`9*+v$M^njAF)bfUSe!E!|ROE#03)*JNahNmLPytBbl`x4u;$mzk}a%s6Y9 zDJ|7k7qv>YzWlw{nB~u62CfG~mcoo}xel;(ff20rb-X#ptfPnm3)sS1s$trMP{c5R z0j!utvkt9Y`5Zt*sZ}^JTN%DrR6U z^`mdO&Xc#P4&3mUfSIcGqr88g*@C5XnJ+VX4$}6?YneW-d``HavIsT+b%p_K1#=2r ze#5NrLZ-t8BVb?vv#O;ETe{yEPwE(I99z+vAutFEq9#4Rl35FJ z4y_;R_s=jZyoQ4OwXkTeYq7fA#ju^EJQryC1|y)NwbcP_y>C``3p0K_b1PIgprz{S zAXo!zQm4?RZ?>6rtY=a-K%56fzl|-`GHXJpIzm;N(KT}ivl(ncttBAa_LAjho!ck@ z-DxnU?JdyZy`L@(D%~Hoa$LxbZpw?2gZT;a6W-Ip75qQxUftOmUXR_Jn+vM(*23xYXcMhCMXbFHRxsw-l2Q};-gwBy(Rrfl-y{H)rYO=e@wbR zY&PR#${ap12D`<9s57FtzG!tVw)OA4VAk>#bNU7d|DquBO-mgH5TOz`WxWO$GVN)t z2a&lO%{qT#I;;m1oWlIlQjHU-zg8XdE7<0KKZVX6m||9Rgl<^=XnA{7$NWXZ-%ep& zdSQzL!Z4T~of{CQvKV4p>P%xkM&s+C!d5InvmTMwBef29>!<;(b%g`T-QR9@#S>h$x#dO06Fbee0WoRK<3^9i* zA;xeQL>9gTF@&F?@6j*VjlH-dPQ_XHOq>r2?5c78x#Q5EdAH~n$7xA|cyBA>F zv0c~um+;T?i6+lk3me>#}?LNh3Kx{mj0HZ5Ybg)sj@7yTnTYnn=N-+9)c*WBcdSM z#nZ$TaR5YE6^iBJB5{p)Bg9K>6L*Pq;(Ov};$caID5!wc3F4j3lx9h#QZ>Xjt&;AL zc0=US0qFzjOX(-+4>?}$Ca1_ba=tth;*93YYan*$A^Am!6#7*DPX0~tK`c-|Wu!7y zDS&vNbCk6Z#d8lt@VpF>JD)?W&S9(Hnqcj29cUe8ooJl}kvX?oYa#OHF^I8w-TIF8 z4>dvUt`1a3K}5_fh=EzDUI9@qcdHMnPpbRXZ`30Y!Q!=bfoPTfw!ya9wnAH}ZMp4o z+x50}wv7;H@{;XC+Yh$G5Lcqud)oWihuA0B3+(gl5r_%7#l8b#Kc2Pkw;zDWkB{wN zK(xmZ`(K)%IUuIvENy1gAcW1IsGa#U_N_%?dcAMZcTBGu^sRnd4f~nHzKIs* zjk;$6hUOQ7^)b6R9F9i6&2gC9cyU(FsDhxmwHJ0jI_06EX!cOeM?rGp*95LL2 z^exjOV8Wmp`cgyP3M(T^U(kX0HIct`hJ*wfGTToJF4nE z{>@{q*LU75wIimc%x0xF8NOQFi5B0&Q;9<>h8h$Top;UGyC__;h_Io!?Gi z(5W0>Nv$iDp`vW?rke*Yto6H!kvSlefVBnpL~GaSSJVS*ti(Pzg_fAC-&4bM2GbIh z7*Fj*5o#uj`dd*jG|kg7s>S_qCey1H_s1FfZvDPm>M@~HUkP~KQ~&yC@c9fCnFcYi z6i=N{eivA?5gO~MJ;NJm)?;-dRg5Mn z?R1zXu25w@_$nH^dvLThUB{@6uAs6c5~e;Jq2MGK;pkA9Zoj7S&u-cb=n~1VT2dOC z-f(mFn1aP6WhLjp;0zA%XH^!UAjV@Rct_GWCLd;4RD?eI&)Od)!>*5idtXS`T{9tiIRy~ix@5oj<`&7^-dc&BUdCndx&1@pjMSzQ#G27_XD zD{<(W;wH;P#}_uM=_06UmHr~s^is@KCPn~sRuYF!GqHL4xQbBu$Z{&nQ@uA`I+ug7 z5MQC!HFV`Fd?T2l@zwYmd@a5XUypCl59+V#uj#MrZ|HAs!Z+cY@h$Lu8!U^r^tTDV zN(ZvrMHfgTDghcaI{=k|TYuCl>oTv6fXRS`3>U$iJj=XB=`JO$=L|a3qX1_Ox8wG( zs;Wzi=-L_&K?@T?0IQKIAYp1D1dV@e__yFY>5|=wx9RWb@7Ch&_%8iDg4fcCbkgo- zMWS^^ExB5Zc;Kc%Fy?67gEnph@ntu@58sa;zz^bw@Wc2K5N96K|3i?IpiF{-1YJbX zodg{q=rF+v1m_SuU%&KCyca)#pTtkWs6Gwy&$IYBybnK*U%>l87J3Q449u@68sO2y zB1hdp0qf?1g_R2Flp#bJKvQZ3RQtQ2A^^f(R^+Wpm1UU%O^dIzJnpl(Z0bGX?m=E%PVCSLqDeh0sc-_t+RKhZzazo<9y;^z!=>BrPu3h>idgpC?h z@u#R5?604KJH$#;{~WvVm2u;9dZQ(QIrhr;Mr~i3#@UnW5)a~EV7d?CU-56~hQ@LjPL-MrVRrF`eK6efspFkQ?a(zQ~0op+3V)s`}I`Tbj6RH(c(LnjEt@ zz^~voKra}M1AQoJMEW!x5|dN^f&T<>1z?F8+^n1J2(dP-hxM{PHjeef7AhV#QSI3d`mg$L z`tSN-{fPdD{-^$z{83;y9V$u z&`_n>q}~xDB*Bn|+cm!l*gK}A95{IefYfnsXTzLkharbg!8`!6j>mmwBzSfhVO`*J z)V!2ZgQwS{5ImFEyc8pj0(eGMsCRho+(-yyfaWEc(H7=YG#UZ+0?kW;E@f3$6^ARK zqUN_LiROh%seRyhqqPWpNJc}+rtHb~LmO+@{sbZYQUl4@0f1!e8SFs%AqW%1n&0}R znqA|f9E;6nbHR^*%^`@dVe<$QDB}*~gi5Ol%vmwTocbY&y>})%hVj<2qu9{|SqKtq z*|F?6f+T`uy~pero{tWd&#Nk)K?lI#ZlQ=n$~K!f32j`bUz#{H#S{tZc_=%bokdHY z!2+q+2(s6*wiK(N%KXd(GG; zTY~qo3)oV;pDkg-Yz0AH{bzy_333^{$V*Tsf=+9~jo3;y65~b$btK3g<40zvm!ORs z*>l}GZgsFJp^ce2~ry9ff*>q1ahf=(x> z8$sO(>OoLXf_f2@w3Xc%Mag^F-RwX>$p;vCzIO~IQwZuuCksfw|Gy|{gn#yq{F5m8 z3`NOj3F;F=$>%9bzJNmXLr}5~A~k#gMh0R?SI53e5%M5GsWt3t1f{hSA>U%(r8qX4 zeFxx?puQBxKzIinOK*md4)4Ikp`wX|v3fsYKR0pkGXn=RPWFCt@cI_O>wESG0I#3e zpDB0^qTn@xpaBMW%_eAgGw}MA{jCAKatXv2M1^S+y#Au#^*4KzV>rYCKLM^Xn4m0z zh7pJeh`B+s-k3xe$-7q8#*u=Fru_-S~2V7SUv`1UH)46V3cdiH5lk3GL zalN@dTrxo;2|AOYQ3L@O9zzhYN#Mcb2|A0Q30t{T6KlABTz_!b?#2zESd$;an#lys zfYAb|nfWi&{PR%5jR2_OV1gz_p@tg`P{WNe{}D8){(k_Q!LiAn$V~>Y;o#`ieuBLIK~C3I5z!w;+R8a6CeMf3D|IRxe^0xxMBlrW&zl6pkM&7 zn%)eoK>b*1*l$w7Rj2}-Dni{VL+1?W-VB7e3cQc2XI);Q>!Ck1pvU24J)pgzElVU~%=^G$eJ&=&AQ^)$wg_?Rv> zf|D8(PD+E?|Fi{W&Ju0|M+GHrBe#jWgWC+&w5{AW?oMty2ZB;LL1BV`HJw9HB|#B_ zstBqkXdyw1wsKKHiMyBE&D{s!We7@(W8ifjK{`Q%qSuOl(W?#6iwa5{2ue$0=tTu3 z4umB7A?RExD8UzCS4{WJ)p1l%;y_SZTEl^$w5*lb^%iFeN}MSuolmjH6qJ@X!ybqG z*~B4H?9yVW#J{9nW@5XoMd+G<+eyTqYdR85r{tGR?PH86)?U|`Nxz#P87keD_#LoKjy z7!p%%(@)z+d`Ben%An0y_b`f+>JqYm;6A^Zrh@ipNBx>bqA~mtc z+mIbcVB)Vgi@Wz!0Ol4GVD2*krnD^trkJLvS@#+wCVst%DGvm-|7{aYkqLZ>?xqlS z2fvx$!f)lb@ptmu`MdZX{7!-%BIsd)9wF#af*vF2af0>`w3nbK2zqiWzbgu1_wo00 zV*tV)q7e2}48oox=tbCbPzZbJUkGah2z!n~*gk@ujzQRdy69fyU!os^o*@Y2Df$f% zHdafB0m*Cp8x+D`Cum;{|0Y4tw-UnM<=>|OG@1ulNhIh63P2wk0JOgu06A<+6NmP0 zvgPAH=f5%m>`Mc{UOw6Tu;qjFQ$^jVIgUDRl!mBB#_^!*M}V%M`CkCKe&v6o(DfRH zt`7*RGob5tg8p+XbRFUUXn?MF2?Sm?Ryzp@geUS@P;U|Rb_0I> zXzu%7GxvRt$*ITq7)GTb!Db3jZ?s;3Iu5)E@g}^za|-Y#B$)8_o(XRY+XCL2$xqFP zp#kWG(@mgzKdAj*HO7QIp@)zTkSFvMdI?EFZ=sKnETjmjLYmN*ARy_F2>O_yPYC*y zpw9>bA^!`4fNHloyHPtY#}9iou;>%Wlq&qJO7DyHDn4mwJBHT(kXsd*ah1CLV z5C0_SZ-R~z%+!OMu+RjpzYNdL? zCRicZO0Y_>jbJ;$+E!tA6uBN09ugh~c@B4_@|+R% zb!r+eOM+Qbk5fQ5OBWN}dYR}}*%s(#N@&y-w9oN6-vDoxE+)M7icUYoi-0@$R!bjC zvL(fmYDu&7wWM46K@dp>!F>o$COC!QRD#n8?n`hw!TkvCPjJRo%K#H|dz)=b^>|GEt4?EP@9_p~f=Vo+&Y-C6k6s2NLY#}%z$NGthLOeFaz~8_seo9)rmuso9qfL z<(6{{kg>8B*AAAJh~oJEQ`#QKEhn- zc4`yL2e)o;UZ$~SQP^l|?u%ZuTyKKRs8jHPvfN@;H|A7;rN#u7aVD^|i3hG>3Ou&& zjo@Un2`6W@k&o)}s{b#&t1Nd~?x#q%-Ex;@hh--O#qF}(W4YI|+j1Yl6A7L~@MMCg z5ImLOX#`Ivcm~0MUbD7Z9*82{Bf>+}yUMbMBHip5(#@elmEm25=lzRxZGdzyQKWmB z;9v~t>geJ2tJ$O0`nV?uBXPwupmQN{GjkbUk z1d?`$VihO{Kp>ji467V!ZLGR)ET$Y~G3BV@lf5>renmA0JCLF*zgs|xvixEB6E=bn zivwV{m|(C7z((*&f)^gM5wsi?8wpWW1eZ3!IuV4Z4WdO9MM;EClo1>z_#A>O8?Y`a zKb2GPnVnTpVLBK$20GDc>=iNKH&_Ux33+0&Q*+M-(bQz&$SJ^?Xlk->wFzesulUag z6qt#G`W(~620Rl@1^XNUk$BGp&n3t|AZir`BLzKn`um;Vb;|2#m6 zR9_{IA^5^5K#5deC7xyc1I}_$?EjSjP#&#I6fwkUBGp%kz-cb75n*yxw+^7hvqe*1 zB^vrFyatd)H1t*YlI8$aus?BVTy)PT#A+@TO?{PU=&SG*Co3Vp0MdYohOef$2*T+^ zfTFAQE9%7a7`wPsTn1SM3(cgV%^c$izJ}ntn?ala5GN9G#W5Sj+Xx0jx`UwKN%M`O zc(J&;L7uyn;Om-V+!e4<6t5K5idTtOi%{$J1m8gLjRfCB@Xhr=Cp6wD#-z2zTf!Kk zwa(u`yu%dQZaD>%YqA@R&BsphVY>3~hB*9t#Cyfv;(g-%;sfG?;zI=APVhQ{YY46- zcs;=z2;NBWCW7xEc=J~A5mPh~_i%3m*iL8u1{( zTVo6Vby)bv--E@b`aKcsYc(RsBX`z_9}v8~m5crp(eT?IErO{6q>{U+cyXc~RIILV z#UG4amk1UM*mdnZ**iv%i}`$!<*i zL;SO0^*&7Sy-ilHgkkkcti(yYBuKDv+f6VC<@Xc(0KpHo)#{Z3=IVXu|8ez7i4x=; z-5_fdEPO6k9WzgFCO6gKR2{bWJ5d0*;PZ9j|2BsTC9E@W+!}7m~ z?##`c0Fxmeo@Vrdfb7sBBaVMU!6HM22k~Knrgx*K_ZUeYAi%uIP2+XQSD6!nD72Ca z*bBq^-X@P2rPB!CSYxxLT!=iEatMC5M#>}jxs$}6OJ_ptxim@w6~jJ)8=}vpaZ>)V zG2zlgrke!Ywdbi&1M%neLz*~rx#?3AYrzaD*zD!Ana&dI+90BwUnlrCcIoDFT4Ab8p_Horc% zf*D{42`U?1Ggb`2ZyP`8PZzm zD(PzJ8tGc;I_Y}p2I)rWCh2B^-y;|}!}|mSXZVodj|l#l;7&(LE0E;lLV5$7lgGE%WuST1ZWy|d17ZGb^#C&PbXqGW6eR1dn0wnVn`A} z52&DPKbk+n1Z;!gB9Lny;(jAD&9eye3yVWEdf#pS31z_I2d8%};$$+Sl03?3Nw`q>%2D z?w5e=d`a+E1b@9=dPsU$dW7I_2>yX!FbJEeUz!c4*|~_3*C8FKx!D7BP#|oesA-#r zEiqp--lL~QHhZt>^R$9kgP)L|qTmYX|80%*G{N7|i9UHif1R|Cu}jZOFVJXn8pEGx zWQtzVrz64No0R>c^wMNFnhvJ2R(i4id@$)1sg70#sP|)y1gQ5@D=LF{d&v1Cy{T^j zAWMe-`oV|(lG-mNH#0dqEh8g2B{v8O?8A}8!IE$UehU^*Cwe=S;6VrFW!v zrT3)&Nbf@est=`)q>rUfq)#PS5x)?8h~Qrd{*7SRHbBCPBLx3J@Sg<#MeyGQAH7rh z0&-S;C4DV@BYi7z7dX?kHR7wke88>-Zvw;Z&G?H)Ydm6yMIzf z|C}`V%1!N`lA4;5l9GC&iUuV2%gD?~N$;DKo!Y-&Qs1<6IEpnlCp{^xZ$CJRG(9aR zD<%6xFApqQSXC5S2*)@kLArvH@w6-BOX0-UVhD>4RVKxnI-sKAVnh420qH4eX~S|; z`X;3&XTS*Mq^2firswrfO3uj4?33W zVd+pzUV2J$R&q|iJUCkQL@%EjQ9=5Db2?H|>5DmiGyA2c^-J#GxA}CyZ1m60%1i?a zg|Qq41Dc!-N8Q5X(5b$;$>}K>DS5+EPSmaeSsBS`IcaHWN!ckmS#UaRdU8@`PU^6v zjI8X;jMTi0oQ#ydCwe*B$d+lwSj;k(UVue>_bcO^SFWIon67Y{H!f~mxq9b)AVo(n zisqAb1E1})y#AtMUOaGR;!%K*=#w_%;!ZMkWY?wj7ahjMO}%gV1hucf=#G}TEn&?w z^%s4{#ryWz?*9$+m(el<=96niUD-#dzu4ZmxXW_n;A0opUrdOW`R4F4;C|896U~d4 zsGA>6go{ytkh{uow$*0&bjU~7UG5?GlzYiZa&N+_gtZaYPFRhw4#GMK>msasvz!cR z>r&-3xv!iq_mle*)^uV0hm=FY7~G6Ha#IE zC-F#*m_i#04Z*Tdu-U_o*=VZAkSE@9*Jltw`t@|lJyiiH$%g>9iaHfB5mDPADQ zUZ^T2HOOP+$&>)c%H!nm@>%i(NQpR6oywkK={!geHV!e)7jJXM}1 zPnTyv=EPa@Y{GUT>}iBeBy4BGb|Gw6!uB9+PfCD3GjoY~$Yw)!t;mdskx4z4>!}EY z^^($tOoO11gT#SmQaN+#M?*p?F1ljmm0r=+%a<4$n5BX7#Dq|p-qWHOZON`$k<$- zBUd(&i{)w=4pFL+7ZUdL8hJ5c4XM>`9BWY&9f4>*Jb9_SY#m{{8{!JOOkQ3~j|iG= zc7=A8Hak|&3i*Pj^{kXvLoO|Om3%Q_lL*_V7IIf!Lf90-rZ*+0D@}6h9n{91Dmm5X zy6;1mCmi_}N=i!t9@#gefA6x2w8lhxtyv2kBQxs1uce?A#El>f0GtPzY}8;{6yzJ^ zn`vinly4$zDq+(=0VLl_O<8PTN?`t&kQ`fSu_Q{7S+P6gA?b~o3P!F4Wfx?_g5bQ^ z;BJz)G%Frdj!=9*J;fxCyPCbUO9tPz8u=c=X4J^L2|J+aus>uD2%H_iXmQeFnyeh7q z@-K#=ScXsp*fX3-SJ$rw`HyO5htXoOgz_Kq--c3F2De)fQO2C?t>{8iI7NUpqreVj zT#W)dl(U+w8O3U@nelC8v@|lbmYhp;|0eL2b%35ET;UQ6*aCk_5`;6G|cpG(9C8lWz2=bV&jn6dC+vbvN>DkQ9jDAu3c=lvEhQ`%jDfx1NLYw)mT3hYOX_oK8Vk3$WKKy{WTcUX z-PG;*LI%hi`o&>O8Ws@f_+kQX?qcJ$hI>G|iJ@aJPARE^jMbG9&|uO8A)uLn{B}#m z8OicaP`A4cm!aAE0jPY6`(5V zvzUs^l~ijUO@0Y?V^@j{;xUdcoeR$zLlM0Va!OVG6jmybXSY^~C{=_F6SksOS*R=` z>^X#8NqN$s|E`r4bKu=_3FCmFrR2NLR!r!Y+>rPRbS#oRsTOh<@nMUSxdfmpbtJ#63;pK9ya{ZbPh5 z?lr_3nk+-P-vEmXn+ZdX-Q9xPz>}!}nxzj-ib6yb$YLb)sIrIB<73L>gk440i))p= zlpa_ASM>O-a)8p~bILyDdF2IVzw)B;5}a7@3Srj}7WRmj6818}UQSq`&?^bMmatcC zQR;viO?rF-=0fO~`X)VIOX=}ClO9h>Ypo&H|DVz0XOtd4C+sybdi;vg;~PMa z@FDEAlpf&==+W|Cj39ne4w+;K5t<-fUr)*KH-ijsXhw!k2K9X#Q4? zg7IT4B;&4C{$|!1oWcsB!ZlVf6WjucMfa3^&{&UQ6|CU1w?pe~wOB=~WRA1marQL3k!5JVYd?YP6Bx$*`0*lMg67N zdkK3VVILsuLxg>Vu#XXT4`H963HjKk2>T3SpCjz^gxycrmk0|qT}RkgY4RENb;7<$ z*tZG$E`dyf><5JXh_Ig!_A|nMLD;Vdu~D`>qzUFaJ0v0>lo`;>p1Ip>si(b)_geXW0G~Ub&7SW zb((d$b%u2&9Q`rd8nm8mEwIk9783R+!byZ{N4R9dWM;lhNwfN(bv?k>XZCETlo z`+{&s3GXF*Pr?r+{3ODc5Pmt~uOs{x!tWvctAziY@P81&Mug5p7(j%xiLj6etBG(c z5q1&bX(GHugzt$36N{Hvx)aL~Vwp%RCB(9nSgt0PJDLcL)?!m&yuFR2d+H3_hklvf zsnGy~2I<~fX4YTxe-e_|s2!DNJJtua^4LBDESmptw(o|sqo}mnd@vT7jo28}+B%ZT zY)R8FvPPq^)NIHd|AW!UhVvYcKN`er1Q=MW+G0xT6EsIaE}S0|!P zF^nO#ca)kZ8|t+L~3!kq5_l|CvDDMW^*16 zYG=2_;A8<-R7IMT$USDYa874gTU1L4p{1A;>jP#R9&aO#)(A1ES5N()%?IOAvmtwf zn%)+J5kv43)_Iz))=e0Hhw&UULNiq~#e=(c$Mo>GqEmm-S zvie|b%7Sp%Q_wu>2_iC^kI!MVL2tDYDK}Zw<{uNo<8$(wH{@@#A@8)299ypdXq;f6 zVM(j3Sv?#y9d3(>G3nM6)r`z3$E8+PG+P0A-KyK76~~zkFarbN9%qxMs%Be0Y@DQu2|YZJrt z+~Fv}nyz|khMEoDW@@H7Ks^Hvz8<6wR)?rV)hrdf%6=y7FN8fr*k1|z8)1JZ>|w$l zA?zQ7{d23DW5%1QBiP;iOH4O)G_^tf1tup5I3x5#oqjYqEc|MLYhbZIsTr#Id2#fh zq<>Gyqr0D|2S(Eq^3>^I9a3iy_V1{bN}UZ>Dm92gYJob3ut&j4#W93~1N5}s+7Ruu zsHI9RR_BA)nOZ_Pwnkk*IIeYGXKGljq!zBx>N(WwjN`$=rB+c37bi5ca5=o!#j0DP zE;S5e>Uq>K#=*&YCw?vV&I%QR*S4w`s28di!4d4M)Qi>C>KgSD^-{t?eG1{Mgi{Fz z<=F|R5zaw4C*fRM)yoa5XgBpLGYz479nd7_j(R|HUYaonx1%%}_?IUCc^61^1EtB0 zgo8ALh6z*M3^aNCG=#Ca-l5)2$#Ey)d^PGW!nHC1p?aSRQFD|WA27(#4|F9!;v7gc z(>#4(tggq^Crn!0YtUkRYufbKt|Q?R z2-k^lrx7lZa6oWf2-kJ1`f8LG-!#2()psc^o*tvc?lEs%uJ^yB*aoBsHv1a&Yr=Jl zk>YniiX!Ckr5~CYg=VUw-}U~u>LK+vN{YV{u1AgfJK=h^5*hzgkD8b2aOCwxg!le_gAL05FE`xBHgd4Ec7H?9cts|dd>%?@kB~ogHG>P;d;Re$KLAY%C zYtFyq_|KE0Ed|KY2GcVzN{+U4AV*t2bq@UyZV)hP^BdUp(%5VdvJC-(v<)WQkQ&=i z!a>eLBYL`p(`;=yw&4ar+VTv7%%YSv(jdrT%?UCvOdAlZaGY&|Ns?z7B$<1%7ym!@ z?gBchYmfK%Niyf0043v&6$w%t+R~!I2@oV`&=3NIgancR37U<&yC+aegF|sG?nUZC z-Myu5@4II*6fSbJ-YR#!^%kr5lM6%6od5ps-|U$=BPXy;m#{b)$*y5BVco*IhxG{S z8P+STcUWu~!)hiB&4rF;iSPQ7n0&v@0^58N_PtEvr(vIkeIE8j*q32ng?%0NP1v_#-wDHDVHhF|slt#Z z4C%r!R2YT{!*F595Qfa$upjc0__J2qP>99xcbUWyfh3OdoeH9XTph*3DE|9VG!`I= zMiMbHFN(&(L^0%i@D_=aDvRK`{+~A=J{oOC2XQpog<*8I(J2gL@)t*=*I3LKM`KZ6 z9LJI?V+mgzv+j&z!RvX^GL|ux^Tp9v))&Wd_uDM6O=Y9}(rsfEV^w1{V|8N1Z z#wUzV8hMyFK^QnHyOA3BgyK^op!E_)OKGaH{Kb^pd*1)?Kb)j6Lm9kn2029 zzTaknZH^ev$s`^%zF<6NJZ?N;JZU^-JZ(Hsji6+gYn?g+mOa)DaOpllfo5D;+VK^oXJXAg*3@3%* zl;GsXhBLxILeB}q`COCPpG1>Aq)bS-QqJU-NxTq9;w2GONPZZd`|GO@llbo^(NvZs zn#u{o#k?e%9+M9rYlqa4L=Z2Ih4_EoeE4XpZmLNZO&q^_G26uPyUY2@qUkA99kOV8 zT4wQz%wkBC%wmE2WYN^n)I=_(-As*rS-eITL!#tj8dTt3`Q@}heBn&4sTF5Fi!!w_ zwKcUfwKqkZI+!{NPLFMPMHpTchS!AQbzyiz7~T|yw}jzsVYr@a>YSIwZvOjcQ!kmt zcLG^_@8AZ){2yhIa!|96}WD`(44N4ATf1#Y|y%Kif1?7(U2n6vvvz z$tY&YDDqm2JX?!tg5Yc|hL7%umG23@X-d#DYyPscZ<$XNamh$SE1dsZ0!kV~X|P5a^N*YYh4yd)nnG<|^Y8+h-0 z#a@1CPE)?QkGI_4?bZIB&V4;Qx)gV+= zsG3l9p@s^zK(6WYyjXs1tZ(|3Sbk3|)q;7kRC(mESg2NFsoEaK^50)B%?hzJGd+d! zVre!IOS5X$B%wYc)WZIsJk!2nvgOUUxv<$tD$QX+HD;SlLN(AAycWE z$(EV(=@k^J<<3+VZEQLb*kN&VNna?UH&-w}X0B+iWUg$k zVyRYx+ZJuI0ZAH`kG&d^8ZsGJ(5r zwfw_OK7dR{%1pKtYRNz*qhu!AnA@7$gq#;@DWNhOr8pi*CJUMLz;t&uca@p!BGm9~ zbBs{S<};H$&9VMW_V#769MQVx0m;C=`kQ%I5sxU%93~=;74oyqVDm^B$06oabDBBb zJk&hQJlvdN&NPn@YDJ+|5^80kRuO7dp;i+r8Lc7InnHa%*E}jOj#=s+^EjoPd4i1N z6M;C^lBb4O>&i8<-ordTfIQBVd7LlQCj)t0L>}+?(xG{!d9}>pDxp4=ZC)ePr}LS^ zb!H9~agS|Y@5^Crxx_u^TN~@#xi*H)HT4UGajSWUKa3n8B8>I#w_#wLz2@UGjQh;{ z%?Hc}&4k-6p*d0{-`e;M0+ zL58tqAdFFgm$B98hgp08S$sog@lBy}21Vaf3iEZjHog-SFA0_N8v1^)GV(^Q!b+H8 zG=FUVROXTIYG{*f{!FNC^O?u5%<{A*=C65rqqZZGIp*(prmb>j@H>zCm}9R5cK5US zH-8#`^`)_cOyhUH7`MM8#(CRV6iXq}XbG|eTS6=bi)zs9zyLY)LyxkNBn8DnEYw9*kl@e2h!N*W*Q%!GBEFLwg2Xm8cRviXyN`i zHZP5q@cXTdmP(c?B+QGuwKTW1utZu~T3T6JTcRv&ENw0AggQ{Di9$^h z>L8&e3pGWkgM~UosHs9t%e6%3C9$*rF{7oMOk#Q)FxZ7szBIXc^5XlN>pg zF>-C>o!+527QQo7sJu_%E^A|0m%#2OTc-IFIn|fQF*1?D7vxd*TpQLSdzx zWt~jqv_K+f33a~j4QJ|thlzXuiQFL*xl^dq1Bv7a&^pVW&<>V8mi zk)=(6Q*l_1SYD8c*2uXsTIYSyns-OE%%&GhHK=mi zYuJ`6mY4j|yylChd=31b+Xv$OhUFs}%{MJ?S>Co>x4dI{*Ycj_eai=y4~5EMn+T&OFAx>Be-CSEPnHMy3L^P>5A-eUQ+jAnKqnrm+^md`$n<^zc4A2OPM3NhVR<%8?2x){@pz*3#B8)^KZCYdLFqYXza^ z3U#AUHwksKP`3zmt5CNIb-Pe^2z6(!wW9xRxz?&$ZEJO#bDy#c(p`H-xNuiz+ z>S>{#5$ai?p3Aik^RJKA5&ow&)-f`a=L75G#hXuS9=@FY0G`%ZXUI&>6zYXQCg+gJ zdmiwyF19X}S>*2SQnr=5yBG7B#Z}g9|Ju05w>Dmuk>ak8)%D69kunDdo?u%ySU38U znCnZTd^P)?n+1}%-Fi?aaffxM^?Bu&2F>t5?V>wfD2p}s8CSA_biP+t@3>q31) zs2pE-OQ>%P^?I)LP+k&W@E?1$o|H)pyqc}@YIfk*<3|sd#|N-HUXxMen>GV4XIo#r zZxpXv-<45(N2u>-Ti+9EK3~eVeq`ks5yu{_pZKEqA(^`8vByBBzP5hn&*8Ve9Dbai zZGN@|%N+h<{nh%L^>^zZ)<3O(S^u^vwjiN?DpZb6eJ<25g!-jWzY^-#Lj6Xl-wO4+ zTw93$ZrY~%A2Her$sB$kxSQr{X#HnkR)2jM!+$@9Ha9V}d4&2y-il}|N(@8W1;tBz zu#m%!^2g1`i?-6XaDr$nBh(+WZDob}Q~uUO+hexMgvwS?-aqr6gwPyY6?y;s%U$oE zgA?+yXnWjN%a=vllfEp5=3AWiXixX{= zY?EzMY*TI1Y}0KsY%^`Mgk}_)NoZ!FS%hX4noVeSp*e)+6q+m7HYYEO3-Z>*B{GZd zKo*My)Q&t)kE>39WLj?e)As zzHPf6T8G8)JsHRScNe2Qe+HMzWMPuy#HwL9!3IkUIjX?NM(c8}d_FJdohFJ>=p zFJXUFXtjk_M`(40R!?a4h1Ni55khMyv_?W}EVL#Y?WO#WBkg7F01{eL z!YB{;Xf1>mB{beqEZ;7!_5A-Yqw@6f{wK|x=xbQs7w1L{&ESmQv8kE-*wtkFedaGqc3Gx&J3|4$q6T zy_vlQakld>k=gc0p>dwL{M_5yqwE}1%CWbRac<>{b9))*)_09_QE#aRMQ)FCS9@>H z^<lLMExz-$zh1AG z$$R^@Z4;7{Ia|Dc>N&5}e{Ooqndkl6%k#m>n55;MYqqjH?PzL3-}u0}S?wwIA+p_r zh1NOSo+`91Srxi-GRe5qgh8CcJ~_RUJo!>WTwr#F+j+Znjy=PkDYO`&b<44jw2u-R zedv)@p?yN%+qPwJ{?lSt=H#3G<16>gOpYDIxmDAW_+t8={_~^-zQi}MgYouB{#9k7 zZ&m3fR~7lL1!nS|tI7=fV(#zkGwrkNv+Z;2bM5o&^X&`l3+;=9#zW0MLW>hxU!lbd zt)I~P3vGbV5`;D|*S^Gme`jA|yB;)vsa+$Nlf=ONT?+SiS@Yy1r~m)Al-%WHI{)kS zL7w>3zEx;Rf%Sox-PYN6+Mkz%Hb`j6{-3N57E`T2L=M;w$;ciQ+Td*aVWADl=L&Jm z&bzUBK43rLdp?jVqs5aAqLp?>w9H}i1G~Fm=cD_)UC_?c6CQyLz29bmZCj`Uh>0k(~T6lK=iAF#FFklD`OTTp*Ia6G=5nZ6k>w4)$jIf8Kn0 z>Iilih@*o83=^^)s?a9pFOH4^jz@fPbnx-EP@zrYl`@sD_~6yG^>@TEFINtW!|uzX z!{*E4l>BVtb%c{eM-fL+M=?inM+wKHj*^a2j?xaE3QQB)bfL`<+DxI%654E`%@NvM zq0JN8{9H#_e-<5&`CrIzRFPR+5Xj=9zzZ4L@`q9U_oL{jOB5YE5?+`WMMs2u^t3T3 zUgC)Y+m_!c(W71}zXJtMUBLVGsXk?eoy??^T5Qrjry9K&Q5HxNAE1Aoq_oyAR4 zu8Z3qhVcP}ae@pZfqO0xMm`O<&RX3uP2x3nq47e!{K;MQlYxZHamg_U+%YA{|de1=SI(ErG zZggyNY<6sMY;|mNY~!$>W2eyg$x)u&LgOgUUZL$1+J2!O5Zb|9$L_qvalf`d zghM5c!!nS(*T5ghBl7DzgF<8=k3S6L0|?{=8OV!5I~)k)Wdf;R(_fNAaBmSD>;L)B z`uM8jbs5LkgmyIB@rKY|$Y&g{JKmGIYUOy>cSn7UTxKXH8S&*Epk zES|{EHs3mams$MI@x9{*#|_7ij-MPqJAQHe>iA7)r-XJ|XlI0WR%qvhc3x-~gvRhM z3GKyP#~=PIIu-wMWT!!9@p2%GS8pCie)VA#|NSUBEkx1D!Tl?FQFJkcs5L$Y8^0^4Lcr^`qR=Q!th=LF|O=OpK3 z=M?8uC(mFwVE&!Zz8BgLLc1ZfABFal(0&#gPvd^gbHJncN= zJnKB?Jny{Vyy(2-e9?JX=pjNk2wfGrCUjlsp+YYp^nyY!B=kpeomc%&Vw|t!-A}(k z7WKm9PCkjzje+}V{o%*uAHX{UouA4mekSy=Koq|uism+a{0@95nJ3ip$3H>*!O4lT zvz<4DZpwE4By@8=gZP`1SLAY>zq2mt7T>z~7we*Kz1zBI+L5=!xePAd7e$xmi=zCL zyp!)=B0Sc6#n)BXiy@=3@3cZ-n ziwnI(uFLIT7F|WP+8WEE>rolSNAs3Ny_D}eJAag^Ecy3lLny7-bMnMPM!Xl)mtb#nEWS*#gY7J19T458PNS*-go ziw_`+LuD3+3H|ZBb zQ(V(YmTRh98=sbIqicp-8*ATfZ8TedGo=J}IN!C%AIXKjNY*2gt{J}NvGzSBJ{38j}dw|p_4F{&z`w1zFx_jL^plJxl09=se~aFZ2mQ zpD6T6x$ZG}NgU@M@8;{Z-IHVzCkIx>X+obZ^f@w#a~~%00VHvOOyWYJPYEoIOGu)7 zX;8c*^r<9K{*d2{cs8)?ta0baFlGyVdbWG5&}ZZ`jL*7r{bA&*l?dZZxy12sfR%C9 z9bq&_?kv@yqW?X9=AbcwUGH@B-fg)`?($`G-u_zZh4r9DE{G#;`;k-mbZ;3#1lpoJqC~J(LA~*)KkDy z&{N3sh^Mg7HwgVXq2~&HqtG`AeY4QF2z{&2w+VfFuE*$qlI^kjA3%DXGKxEho$uJ= z^EV$r?t7TTe?N(yG9=LxF7%ywN%WK_iI(J$I+FZ~o1hT?&ztwyo~oYeq|w7sl3m%J z8baTlzchND^gKshclZuY zO&J&{r=urEskqM5$#ltfwoWlCxw1VzG1tP z@BP&^+Hx)Naq0eN4!*ZcrwmQI?ZQS$v1z!-@qBm zTcyPL&eF}bhu`Jed-*TB^~!shoVWdAi{ySO{?Y^QK(BG@ulqhp;^{8~I6&y9vSz&G zNeuom_=aNiBzXpTl07M1(|k20r0_8RtkBO0{j|_8KImyH6>)Nh{-?9eFM;_>^9)le z=6KRQLxp}$=;w1h!{xo|1rgjbt6C@j2s`;lc8`J1RAza`c*gcJ6}_!N|Jmxbo-B`0 z=Ki-|>t(Vw?$qHwHx5)g-ZMd|xMmHJ_kUHNXR>FZQgO3qif5{4nrFIahG(W{mS?tS zj%TiCo@c&?2MU*kepSdrYOe_WHKD&D^tXh5UFh!${e7W-DD;no{^@4VBF|#a63q-u@5RG zw2A)b;xg5%2L6FR@=x-Dqy!FhRPmqByhCiCv?_eYVenwSTDw(3S~?fVfAOEmyFQ;L zNKJ3WhfnH0{#3Z{FO5=?>OK)3pWHWaDSwogRjU=wrx2*pcX`bx^8VJQU%#~Y^tv@F zSG{$q+2kMOwO*#v4|b4uJyUtx#!c@SUbU)s8y=Sih8Gx+Z+JCsA6?DcN4MQSx|jc7 zo5E_<{u$$wH>Z$G^Tt^HwlUHW-+boHV5Mre4|2DEkgxtP2iYt&B`!WS^L{aX>hXWZ z_|(lYa%o^5iSa)%t@Y&XgRJ)C?SnkvALQ%3Ocx()PH(v}=3|hxZV79xn}g)iz#s#| z@`d%uz_jMgWcAy}c+@|}H+z|0d9Y)QiccS&lA2g0upmVYPPp~Y?c;|GjZaIz?=AC| z)ZQFyb!PmZ8T~J*J?S6p+r3O@AM9Y|gv!r!C8bqq9h;DR^RIUdPexEKvT_Z*WiEXq zm6ufyjL1Kiftk&l%l{1QIsf?H`G048)vEt9zG}D3U-dv(Yuq-#z+djM>b&S5-+TYd zRVP39jx}$Y#eeP{xiqk}(uIFQdNZw;_TWRBR;5jHpOn~Cd1{SY z{&?5N0M%;T@*v=rx#Z%&IJt}YXPnh)1a6ywxc8ZZ+ z?G%lQ&q$9;N*UU>MBu)=1WzSO_@7ARb;(=OTTyX5=Pl(e?JeUC_m=gR^OpBk@IEH= z--Z5%(Ek+rUqb&|geoF5NQ4H9(2(bp(%#BSId4^OHE(rq4KH5@nN?VX8aTols)|re zgz6$RRD>4b7*~augtR6}3H=lLB=JFO8+VyJdvDCArQ_n;CdH=rOG)Lk+m2f=ZjshG zA(dy!@<4#e{}0iPTXu>~P2h9V|8W(8XZ1W$_5Wr>YTST?be{PSO^xq*bK_nn`>lKM z-N85FUjB|fH%dv4ON~#D?=&bjE+s9aQ$k7_f9ho_*>_mF|AW+(k~ol%#B;krgNLTa zr#|ib>wuKB^p3HqgPy1vRG4OJwx0#otIqSU5y)C?v z-j*V?kO+N5gwnpSb>7zAC~q5YTM=p$p(YV(7NHh-_{71)M#QBj3`3B{jW6 zLb`0H>yCfu#1l;pFx>5*+6+$TUubI8JGN@XXp-XPKSvK8G>ES_@JA>*zQ25JJ*{KI zp$SQSJ6C(W(c@LC_A!0#JJjKg37Wgs+s)hE+e3s}MW|bZ7R{O+NL6odU!~$&Z>+bE zH%^4wM5tYaI@WsQz5TqcMW|DRx)`J!TlgKt+_vwwsR=2m47-=6LL!mx{lXy~IwdzYj!661!(+hSf%~t}*sp(oe zR%VpHbts*lGPq0Wls@vHSeiu%nzW{u$ru&gGCniDuP?~_(v{Ex9a2+L(zAlLn%spR zvD%6hEnlJP)3xiAsvFTFvSq8*(Ve?=@71w%^3bHDYlXv%CbOkWRCM0>O2^6LY2Blu zBhpzD`ViQ(tl%tHR!Gc8X@qOd_Ub8#GoNlkIJuyBrEr$QkD=6EQWytnqsae)e zQPE9PlG9%)R=mWcCBsUUE)!n19G68WjEHAn{hB7l_Ln>1YZ3T9gTeHlYiS zzyDnC%?Nw`^IvWmpu>_CG{KM+Do0lBaqrsdHEL!R$SRmsXzdeE*2<8*8<9(e^V0B1I=7yWowmnnQ#uq8J=+LoeRCMd1>9MT7 z5vi%MnQJ?AYR_Ez{!G~XW0g(!4TUYb#<1%CXLobDwZF@y{C1C?dD+P6(VoBdj%6Xf zC2f8EIn3$9=6AVV302IBhZjuBE7g@Jl@>}XrJWM3q$op`QOZPRhO$&yuB=p6E6*w0 zl)cJv<)m_2IjfvkE-Ei6?gJ^k`72pgKW~f_emv2pSb6 zg2o3;3z`))Cum;Kf}kZq%Ys$}tqNKbv^(hapc_HI2K^rNXVBllT5y5jLcxWDO~IC6 zTd*UzW^hz++u-)WorC)XCkAH(j|`p=JT-Vp@QUDd!MlSG1YZii68vHCXTjeF{}B93 zNZ}BZKi9!QdCN##-v8(QUq~4dTI8z2Aye-d@7NwUXQMF-#ab@PQs&Y^`M1F8GtN7e zZ%AS3oZy}4jq^_SPVp_E#YAXv)=&{zLWDlLUcS)jo#CBnC}iMs?Ys%3fe0-rLU}`R z1O6u$){^&M0cF7c>n~9jzf|`A*Cc-_Iz3a~AN`l#?2sTIoba1h3!G)iTvXsZ2dDQG zIX&#TUqtXXJv*fIjm<0(n_i+?)u*dI;lGoSr;=98ELt-H?OEkr!>b|kvTSd*2o2Aw z=KsxgL391TIotpD4MB6)Waa&NW6(3X+8>4=LsCM1FboU6r2nC2sy};oiQq~iXr2gq zR0K5>L5W%4ieMIaUd_2KLd&zue_mzr?)N=h4&|fXgC4-EEFAgGJIFFLEj?vWlhjms zZpGmV{nCk1DBLIs`AT~=JdOHjhfe5@o{D1Hi^DjNYq*Y&@HxK3*Z2WH;urj;DCS2| z3r)avnY$ncT&J1qH1|dy^hG}mMAW0vL=99 zt<$guJMjW8fqh%qx0QWc*|(K_TiLgjee?CLij{p^<-UJb6dU`sv0oeewXt6t`?axO z8~e4fUmN?i6+;OyU$!=&H@1b?j|=!sQSAJ?o%yrVS9=y_ViA^L8CGBwp2c(6h|SoF z?Kp$CKwS=MaTEpnbrc7^c2vOQsE3wli>@F~4(f4Cz$8q?bg+NN25{XDdg8c@tBT@$ z4eu$6i=Mm8cp9t0@461-B=|kon|K@VK>j{Gb$yAi@h!f`4g5ru3!@yK1bK3&VHh$% zrg(>v;vS2+pa*XD=Vs1$GmGM0i-R}|dg-QC_Z3{j%XlB`+x;OvRum8O<>9vDVJx_5a>-2Be=dITwf9DDH03jtH>rW)*@_M zv?7?-qRF6VMJHhjreOwVVGfpKCFo(%Y|y`=&wyMN-3NMAjQtk#pc=?au?RFmQ#3~; zx+4Jtk%&QH-^C_l0TyE^=vOi3tQhlEY%{ii%of`Y@=}Z*7Ndv7&f_9p1Q{##2HwJT zybI>B*sqFGoPHE%&Wcl0@hG%IG&-RRVlY%u9{q&nF&Ol&qzPuwzmg?T3T03Z6+rJw zHbYx5j*=-Dq9~=)7IBD2e@sR;4&W7hr10ong%`vl2m^fxCuiXu zz;%by^Kg0|-W@$b7Q%;teT1`*aP|>C4humh!q?ykPT&K43-TY%IKqFz--=R}eU)Wj zWtq3K78J*$C79j_F z@FHHqNB9Q6DN0@TS64>?6axFK>j8bNTMiXa5#*|FeMEqL)@7e{`(Y4rKF9OvMb$!W?V?8LW2{$3Q;n zoyB=v1mmpt2@i1?Q+)^MUHvMk25uwu*?)cZU;io8MqMzr`i!kU{jE(j&f^ss(! zP+R@JV7&DcK#lcNkcy$8*80=27w5pZ>odpo|4@_$B~c6AFb3J6{sv^P!A|T3+cnsa zOL!G;;X24mgZIH)HK30Te!*|xdLu%>+(j^V5sWjU5Znj{%Ig6nFh#^P=V~C*75%e}KlHBCde7Ac9&Ws5OFd zM|^_M@Fl*+xA373kh($7}qak%Pq?ZjxfnGHf7>^~Oj)vr_A^UE~ zz8hW!`)&9NUI#sE_ztL{;YausU*Ic6X%q%>+$ak4q7m2KXdYJKAP(awj^P9tXCvmZ z(FI%r<7vcr8gYG%BM(oyO@H2FBZXDyCy5W@9U;tueJVrnbh^*7$v}@5c19i3%MBPzYR4ld)KcW!Q#& zU_4Du;f$g*^`bPY;&D)4Q|fEl34PEP+%J`f9sVL1V;c2u%J4B-+ zI)j`w>xLd+UYjwm%@}L542;BRP+v3VwAlnq#x%?T<83w<^FiIsUIe{uZU;SW&h<4X z2hDTv0!7 zY``w;1+_(zsYq&xd>ikA`HlP#-{Mb2p%qHY5Rk8y)YsC3q9~3>5dkvOlKF2*jV+n~ zmekgA943N!ZAq3}v3)BGY;eGh7GO-R=xZzb+G+^64YV4L5g3guFs4?MAg_npXsc{6 zo>tG`S>$3fwt>F4VtlRWeXD(V1wSfEYxdW=HhO`&T0e&~AU9EDB#N;`nLsY0>?nq^ zr~q;iRRz^h1COI2nt*wVqDfKoAgV0}f!d>(k0^Q&#lE7ZVJ7Ba9;iQR9jG~qIfy!f zV>pR(xQNTRiuV+yO)ymGD2T$K);84IhF-Q|Y;CH8y4uvj)2M@bXaM@$hP9?mXT+cf zdLs_;NX1al_coaz(`}Z6UbmsvHuSp9HtYbkwxQNG)Y|4WUc#$*9dF`Oe1WgP?XWGk zx3)!49FL+DxX!j)z;(9eI@|67*V&fqY5NA=#=H0cALBE833+|r<3|ov(1&*Pp&i%X z&J23dj$X8*7wxKjSz2iN6&kItrfOWKrcH`XNQ`20<}Pm9hxB$tw5a}l0gqU z(8CV&u){de>kf>&1LN)(1Orkr77MT#%Rv1d>1{_c*O7VZ$nCV_CeY`OJ8&AzUB?T! zgv+=F#?+B9b$k=o@h%uwNA}mL7#gB4reF)Mg7J1Xp%NHR=cmB!rgJ?orp|2nG6`h5 z%M6g8F7vPu^uNnGJd0dx!f{*%{p~`nU8uDSx5+Nl*yVfNz)y@$Xa#<0&A_8F6cS=fP>K##joUpIQ#Ef!?88~N)-?z)k?ZuFqr z7VN=M(2s7Xa26N97`k1?RWOEbjG-HI+3iz&0p_ziI*|>h4b6-OHi^DxnIf zy*uku_eiutSM&rmb!R@iCm;#b-<`a5r_S!Ha0JJ20;h2f7eP(knX~RM<7<%f?#xwp z=Bhhm?*1G8P?R1j!eE9C)Y*f1>p`tO%A+DGqblfY5Bk_68lBJu@#qig>yd~Ikg*=4 zF&3+_30tupJ2|Y(_S%|dSd0UBPf>c)gWjdV_+JTBo1xGluK3Tlm|&#|B3OMDIL>_dHh%pfCu$VeY@!bM;tIh9#vVuR;uwG2641}M{Wt{bjXMr*dvRxR z0WabzUdC&nr*YI8M^EF(dK_7g`xSrSZ$;@#pZhY7zGS3tDClor>g_uK)362fq3 z63-ap$z^;rs6Dh$j>Aj3ItGxShslV=Wj*{6$cA zJaxxYcl_IU7a!mwP<#B(iqcO(FpQw@{ivxQJ?ck)`jrIr_bUtP>{lDq*^fH=#ezEf zal7m{5Y*dmFj7J9`_cP;b3u0dQD?u!Sc)8M1byhY9nWJA_JO|lqwoFbd%sKg7(aj> z_oK)Cepi(K^t69LJc2NIQ4A$Oz5N@a4cemvI^i5%#p`$z*A-;||2}|m3`oati~w05 zkcIJ>gsGT;*_elCk&8{B{sG&t6T3nE0}kLYj^Y^J!C#7!KwSxBAb|`d%)$;_0XZ62 z7!J5m1dL@M{T^5qHSh$ULLJmY12D#cT;ITUV2lGhBL+RdmbeGOy|1}?x- ztiWoJlY!JeklF_x1T_ylkIT4*S3sWzUdMYNGXuZJUy71g9E>NiG^jJN0xE%e6R9_m zdK2k?BK=M52x?30if*93#C{k8`kqMN6X|;*eNUwCiQ_=86X|s#H770ty-wT*>P)20 zM0%Te5?ApOs5Oy%Cz9#JPw_dv#IN`R)SRTC1gJBKI+LoSCZ5A??8SZ@0$E97-jd!2 z*O|n1CVhdg@f~j9XZ(gg6=jeGb~xdN7sc=>=+U5Xl*eOW|AQitfSK3|`aOtRlZ&Db z=u>hA1SViIn9F2(lDr(N!2Bhz19?nl49VP{k{Ltt0nnr57jOcnz}zK&iy!d|epi$f z`jHX>4WXd+6c0*){-ivPTBwZ%XoRL{j?SRIl#yWGQnD}}lR%v*Gr%0CYyfqoY{53{ z!1JKrDMxSy=Wz*Fz+9#?X)8Of#--8+d5EVMO&LLdqkl~<@L#S=YSzN%2xQdtY8s5ZpyoV3*38-tx z--?nNgb;AOsi7!@FqmM49rQP~CZfUqQkR0Pr83quYDo(RV@T_RL?naTNLm_3VIro0 zaiq<{T+GKpECyLfV+?7z*bMreM!(Y-N7`GU?lkI7qwcgX@eRJm4Mj<(_H+%@n(l%Z z^f#T}rc+mXc|3-v(HQX_}O zuoc_E_=fGqUa-$$Hxy+!y&e8EdSU`L;50r~lnmw|gDhqk!I&}_Q$|rRo(%e*Q4v*8 z9X0U;YM}`jLqZI5I|qx-+OdgSs=wf5sfl$3jqh2ARp&h8^HGnQ;QtlyMHs zMaET7e+E6vkad0z@{{o+e!=hfQ&BQCFbA2XQ5MvcNllrp(H7K{*$G|2Tx9k_2FOb0 z7_f$9QfnrC$()4QSca9L*O_av9`rer{ABLM0UQE#XI=pHW?sQHyo>koA*eg^2mAzT z&Ll%4bQAHzR7P#oLjyEK8}vngkdG1MV+4I2k%nO)A0x=e2=Xz4+DDN05!5_l z1y+H&M^N_&>K?&dkI2PlYy}w^aS2~3%1AS6pfg4z8%OaD{!o-rDnd~Rh2cPPltdYn z!(*rf@-?b17{jPWXbR?HR6J5K93#MfMp5%9vN383reP_lbrk&_wFT5TYB%=bAP(aq zUcuL(r=zK9bWuEkr%(se+9i8{g%*B*dcoy`13ge%` z_@^Af8C(JVo$@w5#%G`hQyBXc#y(Yt304$A8I(gckd>)*(G>K3YJ1R|seREOgOQ0* zpq{DB=~VJCbq&^HJ)Q&eJasE};5bgCk~n2Q;0 z5sgmhitgwM_B&$&xc(W8X~t1p1NoZq1O9;AFZIr395V}`5XjcdnutI{G(r=!2lG0! z3+V4m_A#?JQo;CU(%+e5F$FWR0`zreE;eE__JcW}c?>6U4i|A5SMd(s!v`P-vuc5T z&tkl@TA&q}zgf?M`I^Oi&0=h`_JHf2bqHMltT*u)zQ>RF8NVvZYz>TYb{NcXz>OlH z@3ZOm>d=RuF=?!!SG26>oE@8{C{x#VK*D|j9BZtgFNGLPEl6+~f}V22A{ z6b1Fqqet_ocU}XKlX=uRuO*_;4$R5OP z^m-9lTT}|=@EGXbq8ecS7S+PjXp6~MfW=@ei&lcUT*O>1+KuD5jB8-d7BOdw-oiV0 zAK!r7FZvO`fVvkk_Qi~SaR|zQY%T7NaiI3ad+`EJfW9q0t0+q%(HZ>Sl3rjQm-NR# z(Dx5{FWw@cX166S8H0`{?#-Y%uLOT$2KmzD%$T*_^EX%}=uPsE}xxZb5)?^3RJ z>0qQ`5~g4}W@0v&=cUZ^QhKwL-Yi`K`oHuT82>WHxQy{FYYFOG#yl?DjB}u0%jnlK z`nBv$e2A~`E$G)W`nBw5{E9ymWjXm@Zh;dX6b0j0&h;;64wqNJQ>cTHpw{KoxqJ@h zV+odn`j#_)%Xi=mUdE@OZ_B^Ncenxez5F-OM~0=WppPpYaKj7szoIy(VFfj;C<|&> z!EIp$Sz5uES1{%kWOBtWFvb;sE6U1ZsEZiHp&t^Eh;)ob7RF&BCWG75N^S=$mxB6N zl983Z@_1k|u< zI7Wb4R#D5U@nHT}QO7FkSjF70V(wQl_p9jZD*C#Lx>ixwD(YJGEONnIuiA#4*o}QS zh$A=#YF)(~tU8ZNxPq7PD&7FKuX-0B;A4D-FYyh?$m(|JfX<+wt9zg~=<90wx;g<# zU>;VdVkj~&5@R4R0rYtFG?16oJN9JR0m zWMTaapl9pp*|QOdLR+*)N9@H(oCZC8mY!~?gBECs*5LOy@H-o>;w8L-*A?Zt?nnR` ze{K*4;|u(P-|z>xUFN2PJmikYL`+eXjr4M(5oTDyST~LZecU(;b3j%$(d$k0auff) z$p!kgiJoqvr<>^MCVIMwo^IwkHkUw2(2vdZYx6Up51XIIZtPQ(E%awgLo`NHFwQL} za0S=!GG0@Zt@LJVAM`~(FwU*l!T7d*1#Tx>zgLuP1N8a;^&X(k1Jrro z2*~RJYCUiYXTi7+T*PHi`+=A6ouVA1w+ET;gY5I*2r&MGWar=qigG9z#X&|6k$ z{ZLiVw?p*!P!lvqOHluzw&;Q0hy#5;lz>D`!9pyN~0_)pc1I}FgZC)orkIOaBGm`!}R(vy*}I- zG3bt7hy}GD&cbTY!^0mb%8>%7f@m-=N9KZj93dY^_Jh73q4pzZK`~Q z`j5Paukjsj;Ai}XKNRJt8{v2i^!aEtJOO%rv<}G2QEER*kB_zowI1z@{uqc9P}k9+ z7>-FGD@W=K3wnK&ULXAgpW{nV`%!8? zO8<}ks3z89$0SSvSvj@?)P9WGk5T)vV>k(Ve(W4x2U$5L_y0Y9#&7sjQH}>gMJNh_ejg7< zZP44}5onBNhy=YpPOpzM-^aOa9Pf%`3_%*`^Kr&}oO+K_@A0t^m;h=%PR+-u`S=NZ zswgMe=LzQZ1erULfyLO3YoO*6CoR52xtmsfE}FdT=@fCBb~0 z?g{d7dLRaY+D~VI+D}vaX=*<`4KqRgr&nM#azO7-Z$K_igSt<@4tjlB?uR~~{sf=n zOHli1dVHo3=Le4d)mQ}g*utOWZ!|AC@hV4c2D39XQbDWK*H3$PeVL60wN#AZAm;t^kRBUw&}h1u8C>e^uA+?=}jq81VKcRB8VVL5Q2HHJ?G1LXRbM4_GbOoz5Y*T z-g9Ph{BvXVeLTn`JdWSS>Sxiq`U7me`V&6mOIG6DSFhqnen$K1EkUp*3|p=_l*_Tf znlGrt_b75FMed_$Z$_iNC=cyL+KcR5R6rpIawNxaJl>(`R8Gfx6y1aFBHcy0i)>x= zJiblQE4;^7e8&&yEV6HreTzz1%O^E!crNp?b@5>=WCnP~!Jd;{8g_##CF|KhJqxf}AM}>$EY(@+7D|6dYiSXsc<<5*s?c6qOK%XYwe8w`Jag?Gc>lGl zX$yj~Xxvhn+b)}m-OFZRw=x@-E#zp9Lx0)HT)@A$6uXyQ%_1J-WnSYAJf}=^*@t|> zXZ*w(G?$fN-?Gg#(n33(?4&yg%EKAX7{=j_%O^60X=p8XBjvNvTs{vQm)p49`#WgTyweR^2@o3Yq*xj(O6#2UqMjen^w%>eD1{iRJf6f->`Ru_6qG4)o8EKUZK6h zo)z2CU!lK3f8{_15y=o@iDNvoaMzV{nUB3I7jiVmat<0QFG6SKO)SPOSKh_FJitS^ znaa2MhE@E?FSwCP-@3AxwNy|=4LU1zR{pQk@1@eMRQ3nKx&Ynl!WoR;>pJc0#&R&1 z@-QFaKfLbmAgHog)lA$-)mfa2&8xImU4`~4?N!>V?%;0pSKZHpJcoCva`#p4zG^vd z;ytQL&|RgwN_UmtW0l`yRTFlv(q7ev_G+!wHm-Iv)g#!8RMHvEBnq%^^$DEJX}FbY zdso}LT66U!xRYw_)mp3X!`9Wdu6_hJQ~earpuJjqwcD?Lm9NpcKEN~A`?l+Cw%+f2 z{rjw;72B_OZ|i&cI|yp*T@ynb2_&JvW)x|7hZ^@^$sVk73iw@kneCWHJjK%Gg@of=|ppl<{Hg4{XtOc9c%4eI})w6 zT5Gk|X0Q)_x3%u3c3;M$z4i#~QEQJ{H&pA})_VU9-fzQf&Oq~qJGlopvO)U>dvDOb z;Z>HQf5RKR#ixA1SA2utz=j{#$ToJciym~>>8^9*bvCcFb)Bv2lF23)t#y;Iah;9p z4xj+-b*FFzS92{kuG3q0D@)K_r@Kyf-9u=tTh5!LVCNJc*3N=Jn&qV*-#;Xye9>{I9DKchl&fElpu0 zGYYLuqsc;ZljbJPP4;f`j!o{R>2Qw3)=loY>3B}!R8Hqi&Ov+A1>C_h?AYX)&Ax5( zWbD;^El;Ak+4jx0Z`R)YJ@#%cqmpWB(cip@2E0Ra7v1dUZ~h5_mJn%ZZ?ScYTW^`h zEZj`X9Oh!@7VRx(a0yp(4cBoqx3UENEsygGpYS}`xz*mS_HI2L8@FD;)!4K3 z2K2Ws#@)BN`_@N!f~R?wPqA_9FZ_<@v}$fGXC3x#Z9!{mAA5qJO=H_2BJmB|Vn}5i zvpEp=+~%I!4r3v1r0qCP1@;4c0D(uwawOTwr;zVySa}C(BAeAwr$%M1lwZq zJ-3~V_uJ<8yX`A9Z>z^$Y_t0|?b~*seVg`n?d@Sipuatuq3nfsXiq1TY}|dj_h>%` z-R-*Db+@0x`CP=sXm7s-?d@9IZQO3-b{n_9z{@PH;F;Tf+wC^%h+`s0aw)d&xBfq@llSH2W}#sZ3`k`S=}l zoyNbooU2%b?k?S3x8eJAJ&NA0WoYfv+Vw6U@G+nABPH0k%f4N0xQ#Bi(Y1>n+;`WW zAlMngeeX<0>rSmZweHlq)80FC7{|U$K>N-q9K{tpfoJZl;-4VcmC1ql9=mSk9`5HM z9>M0jmhw7oWY^pL2k)@!zkJPi{J_ur$`-Wmvh%K9`h%c*0O8oWI|}{X`n$*CJ9X>q zwsH3i4#2+MbI{#=I#+WozGb(2?$+A9ggepPt+`usx4paV+->LXcW@Kk@9`m@@HtB$?$O?(y+?bG`{;2WJ^FhN z;c$-R7>?&e7NNW6ZtlZ#dLH9Rp5ZyP_xMIV_U*B6kH(&#ux-yDtfqz*_5{K15N=|3 z1h(Bhlwrh^h^=?)-K}%C&fU}4AFaFdDa3p4K8OWq-+dStVcXrl_ioSJ-5CVE-oJMi zr*I>Fm%XpB47>NfiQRf_+`E!*`5yhfzwjI0q1WH*t;Y7f8`(@F%|Xx?&Tu@dZ!c0A zO%^$fV+Qll*|(6RIf0WojWf86n{dZ{kMk7nx$gyDW-0EvPjjDJ>3bKgeOmjp_G#_Y z+P8)h%BY}<^=R+w4T8Uu$>&V&;BCC$-)%wAAC2aI+xOePe>&Rx4@7&v_I~aC$8jS1 z`%lI8{g-e#SFwoe@cZq5mF2v}f3SD|$9%>YXz%}>wb-_Q3(d6BK^NWh1i_vN63Asd zI``<@qjS$pyw@K0v1cy!-s3j*xa&RVasfK`T+F3hf#2yKztcT8VEa9bxeYhJ$L4#! zralP%8ORupz<>6i7x{{6{t8?)0~y3%;@FE+(#a&79L6!7ndDQ*T;_2OSFnidxry7j zox8Y)r+JQLyw6I$<$HeOSN>oP>)F6YHnW9hw$c`aLLu~pbc9Z2G5&Vw4c=x2o)P+p zPgsS&A1bGsTKw&hzZ>#*L#=G1gZ>~izy<@xGL2ajFo*dZ!r?6BbS}ob4)Cr6yz78_ zd4Pv`j3;@9=XnWD13u+*zT_*uLF0fQu*Cqa1AgaET7uBP!R(7?4!oLYvEM*D4eSj< zVM*8{%=ZfOy~1*s#7y!j#J395A9gT@;vK?H<}}Xa9M0!L?nHZ-Zx&|Puoqd%>%57L z!@fX!nAWh>6tk9f=nC`w!fYJ2oxg)nxZ4U(Kx?>t!&A{5t~p$DxV^)@WB3FPVga@e zKa3+dieou}lQlu6JABM%*nN=pK|i8>koG~^2USpo z{z1*Si$U#lvXky06cLZ^h%D?J;W-f#nZh*oM|;F^*f+wy5gH@T!?qFbCE`+U=3d-H z#H+l<8`w5t1@1S(twgw$2wO+!jnEmPGr}E5RH8MahB~}=#AX`N92j+}$tBj;ncNE=6>Oq1sIxg2w;Xj5m*57XuH+i7MSIkfe2g8VY!RKxTzsSGyIGEZHbwuz8cNU} zZSQF9(b}W6N4t+`_Yti>dRGt{GJtRf6HN@m$iwe($ZQT|9=^*Ew>{)2jzRkn8xOJZ zkn6aSTUf%K+{1l5i@qWM^x)#JF)c;?>*#i{s}@uLxeF1 z?L)J$?NA#Iy`T3e!}p0vVj9O{_ZYj!xQ`g^F_)n|Mth9*nA^A={V|VW_n2pRo|kxq zmFSMKbBvv1JSV1#8tSM=drW^2inVX7ePcDo4#l>y@r+;}CgFx-58-g!a;$A*kLM)Z zbnF?}I#zG2&RCtXxAJea#@@xfc<iH{u#8n~poy*6 zeb{#F7H8wQf#{EmAQCqcHjzW8!_Bicvev5JEasj?goLi3b4smz$ z01u-z?rEOmMPBAz+)JGHICl|O&N|kkH?E!rbjRtA(>>hQ!?h0AI$Y~;t;5~(@Hi4k zBpL0){eFhK@8Ku27~ggH53~fKc;6}B?>PQ2G{;}XBDBYAkGFZe_IT~_+T-0wyc>zv zAO8aGB>o+|L%jXtKjt&Oz?FmEBnqcDu8zhH>amoWTLi=0N7Lfb-Cu zcpY|5^qj;c+{r!MhxWwf*f-I>i5e3>#kPrG@il)^MLV7B$ z>^|}t>^9QIBUfPKkssndMtX;l-}4i{@&{`uW*gc^{u6|f2M|saL-Adbhoe6^6TQj% zu|GPK3z^G&4(3GcoNV7@`zGJU?cBw^xa;JHc?@@*tT|b0^808_)|#v}+1|Q~h(Vg-TkK#Eg&+-B2B=Xq0V74JMix;z%Hg zy+|b;y`yxF(m5(0w>(PgsDoI58yIysM{+dUM_tJyd`vmJgHY<;c)!$hSc2x%H+hG5 z(VlASRPCwSQ?;l5&T90hmau_(?4H`hR@#D4n%hoGB!x6GaNlWTv31&bw5Pd|v;)za zb{uXb?G(;LSK9eph~H(}9oRR`zG+(1mhw89(=?}PPWu4wnD!a&IL#fW6=Ul(Tc=f0 zO)Yh7LVH?c5ZZenqj9f$U&MoaLcgS)#Suf%}vVKN)mhLRwS-wkF6*X+Y&RM|qQigYoFjcK6x#&9-m0eY3S@AJ0i>_V3jXWoyoM3)wef=WMOnTC;D* z4P@Io`+gqc5wvH&$7<|2CZ6e>j`th$D!#=S&11IEjQbv=eM~pnbF}BUj~pB4L=sI5 zDWu^Ya%`V7hOu~$oMX|QqdP};j-7KZ;9p#VopZG3+|7MF%?rHDQr_TgR-ixUYksGW zO=!*0nxi$R9q*RomUDdT9GmC#2cfa{9Xo;~lF>U>?^wNK^^VO(@7P@OI23(jZ8!FP z+|JnDL1p8+Rx7pncrqXdm|yub_Y2Yb@s@KIIF(;v2rBmaVw&aXZ+B z?s2;PU%iELZJrxP0(x_`=4#E|mq|>;cg&r^!MKy$i@6NH#oTLfC%Nt<_ZDu$jpVwK zTsM-dHP^S#UB>I!JNIquoonyh5BM1Ext~);R}k9Qmiv0c?-D&JLfIt-*`@*=DY`Zm`Aa5o}KgFLucM+ ze2IPYR`Dac^2*u7|N5F~rJW9Jo%c@=8XqEz^SBDPIo`9!d-izG9)CA}OXGd#@lWwA zzW4Z-Sk2!-Xo7c}a2%K8zcb-M{C6h!?@V}-<+!N{?qPyWC%A_R?qOmI`(Tra)3EJC zw>EJO2eAO#OgxGcxs+?sG4VxKQc4{gsb@3ZZ&EZd_!g5A@a-n;MJnlJl8w8Xv@a8w z%n^9rq+>aOlR1quIfwJPh)eLklWaC=5$eq#ea6P+nlU@@)bd7 zig%pin@>5IL-D++ewR~iI5iI)Q+4b&kYNl*|9<-SYhowe^w1ZCrj_Bnr+M#bzVkHS zdHN@;;s<`>*C4e2lPu*mmh)B+nsFn(?~HrVJL91sH1k}p%4*ANB$?cyZq1j5u4=yj9vWy2`8Q@c!z>xu}y(nDR3(V`U|udoX)a?pu6A>Y+hjV zf(LjQ?@;h0&+r^CpuOO0v=y`jq1m22djxwk9XC4rMC>)&-<*9P{>E(YKKlc{WF_D7 zJ>Gft8cHaml4@$$6@&_h;ae5@dxhuWUJErBUeB#)FSK{zJ$P2()4as1cxIvA!gulP zLYo(UhTnN%eGr-xi~E>!5c9FuoKrZRvp5&OkvW%fCD(8*w{RB^1)+H_@(OR^Z_l&M zJl}Gj_nEf=&zaYNZ#U0(o41V)`h(DX+sz-yAR-xprulJ9<5WCn{`+X2zY2eQ{#xua zzYc$Y{$~8m`CZs-eh+VnxQ0;L^7k9&P?(tWG=Q?a4?6lkfS+{6F3+5 dv*1GfzbXCif5Ha*zyH(!PWS)+PiR5){{ilOM!En1 diff --git a/Nextcloud Cookbook iOS Client/Localizable.xcstrings b/Nextcloud Cookbook iOS Client/Localizable.xcstrings index 1f6a575..cd63589 100644 --- a/Nextcloud Cookbook iOS Client/Localizable.xcstrings +++ b/Nextcloud Cookbook iOS Client/Localizable.xcstrings @@ -3180,6 +3180,9 @@ } } } + }, + "Username: %@" : { + }, "Validate" : { "localizations" : { diff --git a/Nextcloud Cookbook iOS Client/Models/AppState.swift b/Nextcloud Cookbook iOS Client/Models/AppState.swift index 13d1e7b..0333e13 100644 --- a/Nextcloud Cookbook iOS Client/Models/AppState.swift +++ b/Nextcloud Cookbook iOS Client/Models/AppState.swift @@ -19,12 +19,10 @@ import UIKit var imagesNeedUpdate: [Int: [String: Bool]] = [:] var lastUpdates: [String: Date] = [:] - private let api: CookbookApi.Type private let dataStore: DataStore - init(apiVersion api: CookbookApi.Type = CookbookApiV1.self) { + init() { print("Created MainViewModel") - self.api = api self.dataStore = DataStore() if UserSettings.shared.authString == "" { @@ -47,7 +45,7 @@ import UIKit - Important: This function assumes that the server address, authentication string, and API have been properly configured in the `MainViewModel` instance. */ func getCategories() async { - let (categories, _) = await api.getCategories( + let (categories, _) = await cookbookApi.getCategories( auth: UserSettings.shared.authString ) if let categories = categories { @@ -95,7 +93,7 @@ import UIKit } func getServer(store: Bool = false) async -> Bool { - let (recipes, _) = await api.getCategory( + let (recipes, _) = await cookbookApi.getCategory( auth: UserSettings.shared.authString, named: categoryString ) @@ -157,7 +155,7 @@ import UIKit let recipes = await mainViewModel.getRecipes() */ func getRecipes() async -> [Recipe] { - let (recipes, error) = await api.getRecipes( + let (recipes, error) = await cookbookApi.getRecipes( auth: UserSettings.shared.authString ) if let recipes = recipes { @@ -197,7 +195,7 @@ import UIKit } func getServer() async -> RecipeDetail? { - let (recipe, error) = await api.getRecipe( + let (recipe, error) = await cookbookApi.getRecipe( auth: UserSettings.shared.authString, id: id ) @@ -290,7 +288,7 @@ import UIKit } func getServer() async -> UIImage? { - let (image, _) = await api.getImage( + let (image, _) = await cookbookApi.getImage( auth: UserSettings.shared.authString, id: id, size: size @@ -366,7 +364,7 @@ import UIKit } func getServer() async -> [RecipeKeyword]? { - let (tags, _) = await api.getTags( + let (tags, _) = await cookbookApi.getTags( auth: UserSettings.shared.authString ) return tags @@ -419,7 +417,7 @@ import UIKit let requestResult = await mainViewModel.deleteRecipe(withId: 123, categoryName: "Desserts") */ func deleteRecipe(withId id: Int, categoryName: String) async -> RequestAlert? { - let (error) = await api.deleteRecipe( + let (error) = await cookbookApi.deleteRecipe( auth: UserSettings.shared.authString, id: id ) @@ -450,7 +448,7 @@ import UIKit let isConnected = await mainViewModel.checkServerConnection() */ func checkServerConnection() async -> Bool { - let (categories, _) = await api.getCategories( + let (categories, _) = await cookbookApi.getCategories( auth: UserSettings.shared.authString ) if let categories = categories { @@ -479,12 +477,12 @@ import UIKit func uploadRecipe(recipeDetail: RecipeDetail, createNew: Bool) async -> RequestAlert? { var error: NetworkError? = nil if createNew { - error = await api.createRecipe( + error = await cookbookApi.createRecipe( auth: UserSettings.shared.authString, recipe: recipeDetail ) } else { - error = await api.updateRecipe( + error = await cookbookApi.updateRecipe( auth: UserSettings.shared.authString, recipe: recipeDetail ) @@ -497,7 +495,7 @@ import UIKit func importRecipe(url: String) async -> (RecipeDetail?, RequestAlert?) { guard let data = JSONEncoder.safeEncode(RecipeImportRequest(url: url)) else { return (nil, .REQUEST_DROPPED) } - let (recipeDetail, error) = await api.importRecipe( + let (recipeDetail, error) = await cookbookApi.importRecipe( auth: UserSettings.shared.authString, data: data ) diff --git a/Nextcloud Cookbook iOS Client/Network/CookbookApi/CookbookApi.swift b/Nextcloud Cookbook iOS Client/Network/CookbookApi/CookbookApi.swift index 8b83fe4..467d5a6 100644 --- a/Nextcloud Cookbook iOS Client/Network/CookbookApi/CookbookApi.swift +++ b/Nextcloud Cookbook iOS Client/Network/CookbookApi/CookbookApi.swift @@ -11,14 +11,12 @@ import UIKit /// The Cookbook API class used for requests to the Nextcloud Cookbook service. -let cookbookApi: CookbookApi.Type = getApi() - -func getApi() -> CookbookApi.Type { +let cookbookApi: CookbookApi.Type = { switch UserSettings.shared.cookbookApiVersion { case .v1: return CookbookApiV1.self } -} +}() /// The Cookbook API version. enum CookbookApiVersion: String { diff --git a/Nextcloud Cookbook iOS Client/Network/NextcloudApi/NextcloudApi.swift b/Nextcloud Cookbook iOS Client/Network/NextcloudApi/NextcloudApi.swift index 93a9875..e4326cb 100644 --- a/Nextcloud Cookbook iOS Client/Network/NextcloudApi/NextcloudApi.swift +++ b/Nextcloud Cookbook iOS Client/Network/NextcloudApi/NextcloudApi.swift @@ -6,6 +6,7 @@ // import Foundation +import SwiftUI /// The `NextcloudApi` class provides functionalities to interact with the Nextcloud API, particularly for user authentication. class NextcloudApi { @@ -75,4 +76,47 @@ class NextcloudApi { } return (loginResponse, nil) } + + static func getAvatar() async -> (UIImage?, NetworkError?) { + let request = ApiRequest( + path: "/index.php/avatar/\(UserSettings.shared.username)/100", + method: .GET, + authString: UserSettings.shared.authString, + headerFields: [HeaderField.ocsRequest(value: true), HeaderField.accept(value: .IMAGE)] + ) + + let (data, error) = await request.send() + guard let data = data else { return (nil, error) } + return (UIImage(data: data), error) + } + + static func getHoverCard() async -> (UserData?, NetworkError?) { + let request = ApiRequest( + path: "/ocs/v2.php/hovercard/v1/\(UserSettings.shared.username)", + method: .GET, + authString: UserSettings.shared.authString, + headerFields: [HeaderField.ocsRequest(value: true), HeaderField.accept(value: .JSON)] + ) + + let (data, error) = await request.send() + guard let data = data else { return (nil, error) } + do { + let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] + let data = (json?["ocs"] as? [String: Any])?["data"] as? [String: Any] + let userData = UserData( + userId: data?["userId"] as? String ?? "", + userDisplayName: data?["displayName"] as? String ?? "" + ) + print(userData) + return (userData, nil) + } catch { + print(error.localizedDescription) + return (nil, NetworkError.decodingFailed) + } + } +} + +struct UserData { + let userId: String + let userDisplayName: String } diff --git a/Nextcloud Cookbook iOS Client/Views/MainView.swift b/Nextcloud Cookbook iOS Client/Views/MainView.swift index 03556d1..039c37b 100644 --- a/Nextcloud Cookbook iOS Client/Views/MainView.swift +++ b/Nextcloud Cookbook iOS Client/Views/MainView.swift @@ -11,6 +11,8 @@ import SimilaritySearchKit struct MainView: View { @StateObject var viewModel = AppState() @StateObject var groceryList = GroceryList() + + // Tab ViewModels @StateObject var recipeViewModel = RecipeTabView.ViewModel() @StateObject var searchViewModel = SearchTabView.ViewModel() diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/CategoryDetailView.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/CategoryDetailView.swift index 06607db..56d06f9 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/CategoryDetailView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/CategoryDetailView.swift @@ -15,22 +15,33 @@ struct CategoryDetailView: View { @State var searchText: String = "" @ObservedObject var viewModel: AppState @Binding var showEditView: Bool + @State var selectedRecipe: Recipe? = nil + @State var presentRecipeView: Bool = false var body: some View { ScrollView(showsIndicators: false) { LazyVStack { ForEach(recipesFiltered(), id: \.recipe_id) { recipe in - NavigationLink(value: recipe) { + //NavigationLink(value: recipe) { RecipeCardView(viewModel: viewModel, recipe: recipe) .shadow(radius: 2) + + //} + //.buttonStyle(.plain) + .onTapGesture { + selectedRecipe = recipe + presentRecipeView = true } - .buttonStyle(.plain) } } } + .fullScreenCover(isPresented: $presentRecipeView) { + RecipeDetailView(viewModel: viewModel, recipe: selectedRecipe!) + } + /* .navigationDestination(for: Recipe.self) { recipe in RecipeDetailView(viewModel: viewModel, recipe: recipe) - } + }*/ .navigationTitle(categoryName == "*" ? String(localized: "Other") : categoryName) .toolbar { ToolbarItem(placement: .topBarTrailing) { diff --git a/Nextcloud Cookbook iOS Client/Views/SettingsView.swift b/Nextcloud Cookbook iOS Client/Views/SettingsView.swift index 5fa365b..17387ae 100644 --- a/Nextcloud Cookbook iOS Client/Views/SettingsView.swift +++ b/Nextcloud Cookbook iOS Client/Views/SettingsView.swift @@ -11,18 +11,40 @@ import SwiftUI struct SettingsView: View { - @EnvironmentObject var viewModel: AppState + @EnvironmentObject var appState: AppState @ObservedObject var userSettings = UserSettings.shared - - @State fileprivate var alertType: SettingsAlert = .NONE - @State var showAlert: Bool = false + @ObservedObject var viewModel = ViewModel() var body: some View { Form { + HStack(alignment: .center) { + if let avatarImage = viewModel.avatarImage { + Image(uiImage: avatarImage) + .resizable() + .clipShape(Circle()) + .frame(width: 100, height: 100) + + } + if let userData = viewModel.userData { + VStack(alignment: .leading) { + Text(userData.userDisplayName) + .font(.title) + .padding(.leading) + Text("Username: \(userData.userId)") + .font(.subheadline) + .padding(.leading) + + + // TODO: Add actions + } + } + Spacer() + } + Section { Picker("Select a default cookbook", selection: $userSettings.defaultCategory) { Text("None").tag("None") - ForEach(viewModel.categories, id: \.name) { category in + ForEach(appState.categories, id: \.name) { category in Text(category.name == "*" ? "Other" : category.name).tag(category) } } @@ -100,19 +122,19 @@ struct SettingsView: View { Section { Button("Log out") { print("Log out.") - alertType = .LOG_OUT - showAlert = true + viewModel.alertType = .LOG_OUT + viewModel.showAlert = true } .tint(.red) Button("Delete local data") { print("Clear cache.") - alertType = .DELETE_CACHE - showAlert = true + viewModel.alertType = .DELETE_CACHE + viewModel.showAlert = true } .tint(.red) - + } header: { Text("Other") } footer: { @@ -136,24 +158,27 @@ struct SettingsView: View { } } } + .navigationTitle("Settings") - .alert(alertType.getTitle(), isPresented: $showAlert) { + .alert(viewModel.alertType.getTitle(), isPresented: $viewModel.showAlert) { Button("Cancel", role: .cancel) { } - if alertType == .LOG_OUT { + if viewModel.alertType == .LOG_OUT { Button("Log out", role: .destructive) { logOut() } - } else if alertType == .DELETE_CACHE { + } else if viewModel.alertType == .DELETE_CACHE { Button("Delete", role: .destructive) { deleteCache() } } } message: { - Text(alertType.getMessage()) + Text(viewModel.alertType.getMessage()) } .onDisappear { Task { userSettings.lastUpdate = .distantPast - await viewModel.updateAllRecipeDetails() + await appState.updateAllRecipeDetails() } } - + .task { + await viewModel.getUserData() + } } func logOut() { @@ -161,35 +186,54 @@ struct SettingsView: View { userSettings.username = "" userSettings.token = "" userSettings.authString = "" - viewModel.deleteAllData() + appState.deleteAllData() userSettings.onboarding = true } func deleteCache() { - viewModel.deleteAllData() + appState.deleteAllData() } } - - -fileprivate enum SettingsAlert { - case LOG_OUT, - DELETE_CACHE, - NONE - - func getTitle() -> String { - switch self { - case .LOG_OUT: return "Log out" - case .DELETE_CACHE: return "Delete local data" - default: return "Please confirm your action." +extension SettingsView { + class ViewModel: ObservableObject { + @Published var avatarImage: UIImage? = nil + @Published var userData: UserData? = nil + + @Published var showAlert: Bool = false + fileprivate var alertType: SettingsAlert = .NONE + + enum SettingsAlert { + case LOG_OUT, + DELETE_CACHE, + NONE + + func getTitle() -> String { + switch self { + case .LOG_OUT: return "Log out" + case .DELETE_CACHE: return "Delete local data" + default: return "Please confirm your action." + } + } + + func getMessage() -> String { + switch self { + case .LOG_OUT: return "Are you sure that you want to log out of your account?" + case .DELETE_CACHE: return "Are you sure that you want to delete the downloaded recipes? This action will not affect any recipes stored on your server." + default: return "" + } + } } - } - - func getMessage() -> String { - switch self { - case .LOG_OUT: return "Are you sure that you want to log out of your account?" - case .DELETE_CACHE: return "Are you sure that you want to delete the downloaded recipes? This action will not affect any recipes stored on your server." - default: return "" + + func getUserData() async { + let (data, _) = await NextcloudApi.getAvatar() + avatarImage = data + + let (userData, _) = await NextcloudApi.getHoverCard() + self.userData = userData } } } + + + diff --git a/Nextcloud Cookbook iOS Client/Views/Tabs/GroceryListTabView.swift b/Nextcloud Cookbook iOS Client/Views/Tabs/GroceryListTabView.swift index ebb4526..b3ece9a 100644 --- a/Nextcloud Cookbook iOS Client/Views/Tabs/GroceryListTabView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Tabs/GroceryListTabView.swift @@ -111,6 +111,8 @@ fileprivate struct EmptyGroceryListView: View { } +// Grocery List Logic + class GroceryRecipe: Identifiable, Codable { let name: String diff --git a/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift b/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift index d9c266f..76bebfa 100644 --- a/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Tabs/RecipeTabView.swift @@ -95,6 +95,7 @@ struct RecipeTabView: View { } + fileprivate struct RecipeTabViewToolBar: ToolbarContent { @EnvironmentObject var mainViewModel: AppState @EnvironmentObject var viewModel: RecipeTabView.ViewModel