From 07440c720f6ebe73107b36257aa212168dbf0cae Mon Sep 17 00:00:00 2001 From: nawal-ahmad Date: Sun, 28 Nov 2021 00:53:19 +0200 Subject: [PATCH 1/3] fragment and adapter for product --- .idea/.name | 1 + .idea/misc.xml | 7 ++ app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 47 ++++++------ .../com/example/thrifty/ProductAdapter.java | 67 ++++++++++++++++++ .../com/example/thrifty/ProductDetails.java | 14 ++++ .../com/example/thrifty/ProductFragment.java | 64 +++++++++++++++++ .../res/drawable/ic_heart_svgrepo_com.xml | 9 +++ .../drawable/ic_outline_heart_svgrepo_com.xml | 9 +++ app/src/main/res/drawable/item1.jpg | Bin 0 -> 81034 bytes .../res/drawable/selector_wishlist_item.xml | 13 ++++ app/src/main/res/layout/activity_main.xml | 60 ++++------------ .../res/layout/activity_product_details.xml | 9 +++ app/src/main/res/layout/fragment_product.xml | 34 +++++++++ app/src/main/res/values/strings.xml | 2 + 15 files changed, 267 insertions(+), 70 deletions(-) create mode 100644 .idea/.name create mode 100644 app/src/main/java/com/example/thrifty/ProductAdapter.java create mode 100644 app/src/main/java/com/example/thrifty/ProductDetails.java create mode 100644 app/src/main/java/com/example/thrifty/ProductFragment.java create mode 100644 app/src/main/res/drawable/ic_heart_svgrepo_com.xml create mode 100644 app/src/main/res/drawable/ic_outline_heart_svgrepo_com.xml create mode 100644 app/src/main/res/drawable/item1.jpg create mode 100644 app/src/main/res/drawable/selector_wishlist_item.xml create mode 100644 app/src/main/res/layout/activity_product_details.xml create mode 100644 app/src/main/res/layout/fragment_product.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..9976b04 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Thrifty \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 34c1ecc..44e6c62 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,13 @@ diff --git a/app/build.gradle b/app/build.gradle index 5067d4d..7bc65e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,6 +39,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 316b66d..14903db 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,23 +1,26 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/ProductAdapter.java b/app/src/main/java/com/example/thrifty/ProductAdapter.java new file mode 100644 index 0000000..d0eee93 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductAdapter.java @@ -0,0 +1,67 @@ +package com.example.thrifty; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.amplifyframework.datastore.generated.model.Product; + +import java.util.ArrayList; +import java.util.List; + +public class ProductAdapter extends RecyclerView.Adapter { + List allProducts = new ArrayList<>(); + + public ProductAdapter(List allProducts) { + this.allProducts = allProducts; + } + + public static class ProductViewHolder extends RecyclerView.ViewHolder{ + public Product product; + View itemView; + + public ProductViewHolder(@NonNull View itemView) { + super(itemView); + this.itemView = itemView; + } + } + + @NonNull + @Override + public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_product,viewGroup,false); + ProductViewHolder productViewHolder = new ProductViewHolder(view); + return productViewHolder; } + + @Override + public void onBindViewHolder(@NonNull ProductAdapter.ProductViewHolder productViewHolder, @SuppressLint("RecyclerView") int position) { + productViewHolder.product = allProducts.get(position); + TextView productTitle = productViewHolder.itemView.findViewById(R.id.productTitleInFragment); + TextView productCategory = productViewHolder.itemView.findViewById(R.id.productCategoryInFragment); + + productTitle.setText(productViewHolder.product.getTitle()); + productCategory.setText(productViewHolder.product.getCategory().toString()); + + + productViewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(view.getContext(), ProductDetails.class); + intent.putExtra("title", allProducts.get(position).getTitle()); + intent.putExtra("category", allProducts.get(position).getCategory().toString()); + view.getContext().startActivity(intent); + } + }); + } + + @Override + public int getItemCount() { + return allProducts.size(); + } +} diff --git a/app/src/main/java/com/example/thrifty/ProductDetails.java b/app/src/main/java/com/example/thrifty/ProductDetails.java new file mode 100644 index 0000000..8eb5208 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductDetails.java @@ -0,0 +1,14 @@ +package com.example.thrifty; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class ProductDetails extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_product_details); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/ProductFragment.java b/app/src/main/java/com/example/thrifty/ProductFragment.java new file mode 100644 index 0000000..ffd0604 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductFragment.java @@ -0,0 +1,64 @@ +package com.example.thrifty; + +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link ProductFragment#newInstance} factory method to + * create an instance of this fragment. + * + */ +public class ProductFragment extends Fragment { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "title"; + private static final String ARG_PARAM2 = "category"; + + // TODO: Rename and change types of parameters + private String mTitle; + private String mCategory; + + public ProductFragment () { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param mTitle Parameter 1. + * @param mCategory Parameter 2. + * @return A new instance of fragment ProductFragment. + */ + // TODO: Rename and change types and number of parameters + public static ProductFragment newInstance(String mTitle, String mCategory) { + ProductFragment fragment = new ProductFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, mTitle); + args.putString(ARG_PARAM2, mCategory); + fragment.setArguments(args); + return fragment; + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mTitle = getArguments().getString(ARG_PARAM1); + mCategory = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_product, container, false); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_heart_svgrepo_com.xml b/app/src/main/res/drawable/ic_heart_svgrepo_com.xml new file mode 100644 index 0000000..41a1078 --- /dev/null +++ b/app/src/main/res/drawable/ic_heart_svgrepo_com.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_heart_svgrepo_com.xml b/app/src/main/res/drawable/ic_outline_heart_svgrepo_com.xml new file mode 100644 index 0000000..9b2b9ab --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_heart_svgrepo_com.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/item1.jpg b/app/src/main/res/drawable/item1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32d7b603dc57136fec2dc73cae880b48e4c56047 GIT binary patch literal 81034 zcmc$_2UJr{*DoFmil`_Gf*_#ugr@W&peW%C$b0fYc;(L==>SBGS7T-}ips``xwf_ul(o>%Z3BXPum#*;Dq+ocYZ@duDzQ{r&lPF8}01 z{_uDI$tV2b{mhX!_T#+V=jB}f3xD^&@WBB-0sC=2{)zACks|W z_=K|;8nyql+P^OV`~gUSF~D%2|NoW#)t=t@0D#si0C4EpzryZj001?y0D#cQzrv(m z0syCC0D$TqpF4hc{-Mm_{ojN4?g0QxWB}l#H2`q77XaX~`42_^mG)nK@!!<-;(nS7 z`}OqRzgz$w0B68O00iI#a0Dprb1Hz#fGYrv-=lyVfYZlM@Sfl~&3lsf4BzRqLUO`F z=gtXTk(3sd(^1vCs;#P}dF?M-__dpsMw(h?o(M~ayDqLS`Y_*6AEyvoXBWpmnH=Cd zb4Ex&NLg4|+0jtT(DDB>{eA=B<36l)SnJRM3BW8U}@z@bA24~FsTE#fnOZJkHjf3Vb>Q45Y9-xog#6P4Xn6kqEjwe~w>xVsd2 z)AtC;+pac!ZqaPYZ$O@iQ1uaO*OiHtmFV6l7?|d+p7M(1jf+47Cx*k0y7-F3gyVjj zF%Z82h9ZJ<)__>zfBaRb#5inW4d(Mcyab-)eZEY}+Zz!#AvhfSPKNJQe%s~YTq%l1!80}=s9-B~w3?N054KQXhcfm* z6%&PF-(BG@{%O45O@+k0m>d27Qy?sU*!tpGQL)T_R3sn(W4eVApU->dS{Z)-b1q{= zg-OyA%Q5NekN*vL+s6#Z$;zyL2yIGr+&z)4Z^8U9%L)Ix>+!8#Ps?7n=HcX(v&DJ+ zm8lngRKFFFSO2HXe)E(F~Z4SGB;yoD};g_!>a1juLHfRG7(w0simDxKLcNXG~Z zLvhpI|SwKMGQL@OO8^m&% zsM1;!-zX#C35N~Fq)Q*&E(cYFMaO~A)~ACZr7V6k}biH zQVQKld9Yc6;m%njm9orLp6bGd+=aGRVqth;5Coc_Q2)9(AGat=aeteivJ$6v3N=$f zCnXON-QKSwzPp>1<}u~4Zd$O#+*J`_AcG9|PgPqfk{vOFw^`m0%h0P~u*Y&;xSMw_ zWQ)gfoUK)>jLE3s^AxQf)@79l<6a^X$8-g@o{9SeY?0oQ{77whXN7zJ{YSr?IgK2S zRs0pXsZ=KmE469M$^9t~^l5F2pBX=7$pW=?f&!wS<_wzjZg~+1Bt<=8x<8Ns`wdVf z!>`1kb$k*ou?3u5N<|4VnL)TY6T@jn7zVdDN!p>bZJpV2fT3!J)N<$Aws_%JI+G8; zTK&g1Zp-MYlJ#|hQgT)tcaQD0v%4+APJ$fvUhH?b<3oHkwCxmnaK<(8CydtM(&2qS zDS6EpJ{tV8-{m)8GI>RETbvAa_!2->{tb9!(Cc{;t$5R%+HM|i_3Fd?Q@c||-CLG0 znB2;)@(-{Fjl^C#`!Fpo5qk2wy|AYs z(^XBtRr$C{Vba_wkf&sq!5~9Z!b(})cDMY=HCK8iV+;^ zr)uV^os|hwl(4|)>CZ*a8*lM4urnN6MgYzCJB#ZS+12)fejC|zqd{(e z`2L#N;;9T$ROfCf?tE|Q@S@X@t`2NRnXG%aW0B~K?01&q<33N4vsat4DeSuT>$M@C zjpa?eUYoxG{LLu#xIejfAb^mXiKKE(r*!Jy{`yV!yk8E2@^r%BYdQzMNm_>NIUixO zp^dJ{xQ2oakY3HZaiy#+6qUkY&~!55sa!J6s4`ysOVh3bMt$^-@7_aKLrkQ)4u4+t z6{|T-$JjipKHOikZZu6{T_dGUK1@*E27`C8KF5Ll@~IqbnVV# z6NWh|eV9Uv-f;z!$z}<*KsHs|`o~>e{vA-jy{x5A9Yw=P&jNbS)NwJ*f|U+JPT7~P zX5Oq)`CmzGb;-ASrJ8HqvhmH%7k&dIvwMLzyb8%GR7B-`rl@m3BNtK6EBmDgr<=|nbh40;EFcIpw$sFVSn2Ax3BGF*13GRW@fktjNaovrgQd1!@E zGH`|@J`+k;O2Z^#Qh%K{NV_Tt&V`|DfSfAD?t<5*Wutw)j6Q_fL%dPvidszLVQC9~ zDw`PPEX%J$hUe2rYhe*SFN*`HsPrc!P~2&EKKF~?kR@~wwAadV;bV~*TgQt116h)m zc24k7vZ4*b^agVp6NU{0HUVGDiubNII#}vSYrS75Oo|=1vk#=zD1&S-KAsKBXW6T* zgoViu@G~8jF58=|=W?zISd7b#@8#8QH8bxY3^uS3$)#Q7R>)kv*PY8)jf9pyCOr(A z-V#cVT$Ft*mTT!AN3V~MambHQHn|S#aS#rROI~*okZMLzckzs=<~MGZzX5&8D;n+f z&z*#>p z=r!j^d2)2GTlD^%aI}BR`+pX2!^T-kAjwYoTBgJ8e`<4sJ+42o+x(AQ={2){DVeqx zi<8MS0)s|d4Iyd$= z%P7AzjZ#JP?#v*JR!mJ@r;bg0WqGx9W~CM$WJnTz}dLSAOPWt^_!|I6H|>!OlotxaARRic-ZT$ie!p)_BFLAVAD|JFCii;ERYtOt+4UhYG_G5<#in&om$ODDbHW}P!!iOMz{o5 z2Wmkzky8(KD21%-g+#Tx-#Sz`4DOZ3dFdtk=Hf4l2!=Z_H-GHq!Ow6O5kKy%2*^8s z*^F-KW9pY81HUqDmNaMF&$(w8aC92aHsw?j=i3MScN|%AQTnX~>Z=)&3-lDr$EpRMj(S?@O6S4EslB3xWKDUxwhP5cfHR@!ImMsur(Ee0h)MMGNkrJ$cr>}ia zq)8`diT(yW42VYz9GR>Fec6s=} zW`7=(zirD%P++B;x2XIkTJJR_frX0&hjS?wsp6~0BX2E{V4xiLT7{c^>S30aadw~7 zr@=|ttj{dQU;KNCQ+*xCM7kNv!3NGhMv`hOUaHdh);}{1K8s8V)~ZV)7Y$%|J!Q5} zN-}5lFXkEPrA!z&_Pj>3&=^9$7b@*^3_-i!|9%3E!WNE8i zwwPKL>SYykA7FleAD|A%_2my@1JpIy*w;;*p?iL2#=ZJt8%cUl{UanfOIzKg;MzxvFBo#$YU-*eb>W0VXhPL14~Gc zULxl4_&%t-i&J2|Im&+h?3b{Y&~o9`yDMj|OJCcs;=iHmQU|(cg-9m9F4*}m8)fHI zZ3{aje49moJL;HYhZPVz()-~V#YZJ&IUgiXL*E^mH|>sj755P};ySVSqtQ`z&RueD7o-Y%w%+^wo(+5OR?K66GbRMr8U%hTE^U<3t z!^ST4Cd$uRtTf7KSZO+c;l8K*#`CBjVI_CO^WG#0>;6=Gx%=QWNnlw552Ccfl+K-0 zNpKcX-+ZCYKYjFZ2;Mp@3a5lDrNrSO`ckEi8NZSq#WPTJC=Ts~&!_v>pZEDXmuB6? zVC@ZXyu1v?DZ0kv&+QKugBUp-&r)S)`kKKbg;a;mPJ42}2ID%6@u(3F4jY;R3DhS|T_G*zu zFoTfg_TRll?`=T%6HSG~9iMDvSUi?tBv|Ner^jlc$vP?!Fm~*?f86ws-b#CWwp5yb zOg!K8Z4#LYjafHpsgLA+ltUmZ^J#P|l@@h3BdEanpm%N}0d<>j8zuVB7^I~s0&VOb zXW@aR;0ZxN+L+xNi8@%e_1e9}tE>>C_E6;ao#%Fnx+&T70o^2lD#>(mF&*nx;XR`9 z-as?|A`7vQ@NzB%j1f?T{S0ePx%MhHmpC44%Bv0Q{^D>LSg&X!HxD zLgS(X)fjFk5~mecMSLQR_y>Wk1d%FGMEUh){XFuvOf_As&#SFh|1?oJ`czAUcgoe$ zmbeGZxBc<3;_C2IkAbfvbd5S=#uF`U(mLm3#M2+OBM_mPp3?=^)ogMN*5MNY5p(y) zz478FRFZ(;W7j3j>0eSD(`j27;SeYT4{nO7d!8oP(FiayskKwAo$9nG;3o;l$_I%Q zQ+}QsCn*i8f&$nOk}L>k=~;Y{G|21-vl*5vzA99gMJXYSgNswj*F}n$j1+T^9rX^A zl%BwOk8EY$%jIdoDj!M?g%?b7x`d(LZOQjOEm|9+$Zk8Zo3h%IS7UAti{`kB)R`?8aqe&!C%Win!wSwlGPEiBu&M*S%_zN1^b@#~e8>oU#yJ9rQs7P%>x%TI@ zytRbqY3P(L&e^E+P1K#X18=T}ACJIIbCmq2V=-$fMxu7AbF+9-g~uJ70h6RP{3kLovnP)zBs z#-v$yY)7~v!s6C@cs8{}jj0x#vtFa=^*!0iRi^ zPxEGoRGWE{rFUkKCY$NFZS9p?JG~Wb*W33f*w8eyjMXH|plx76yKSA^>|4(!^{6o= zDuTKVY&av4acLPF_>|4szm{~mX(a+pdarsBNw(hH{_P^K&R z=0GIRQ3}Je>hm{h%e(e^d8<72N^^M%6|9xEx+KA%7G#lszLP-iDeA~N5_WKxf((d-2r(tzCk ztI}|XaB{+6|F=~=OH(zxp2Wi);Mwa@3b#|t;D4=7@NxoJGl~m6wcn`NJHSwCedH;` zA`65-`9By{x_nOW&Z4Q=Ul*=_$`(J1 z_%?vAUToxI27=5}-MZw|yV?i5s1xb$R6+u!KQMtlQyqL%3I&WZ^UoD@dCsY8uEyR? z4Wis$8NY$%@vPCHl3F&erV^+Y{&D5r+-0DP_L+S?$98cGMKYoe5lunPYbgp3LvTLcvYmp`FF ziZ`d4FOE?eh~(~NpMaV{_(Es7L?eE^>Uh`^m;68>Rn7~Q@_jtU+;`Ct_*SZ3MUBZX zFkjm--(GU0^-9T4M6J{u?m)n|CZ+t?{6*r>QuOIAQ_B1Uh*Y>z9>Un9I&P@(RfuSy zv4b_z^YipWEx<*oKdXPIA+B^rT-E5?8_{5r@Hom89-&Q(i4-qznq$hBPj@-epcM&_CFkGA*2@>B4*SK3xEXyWyHCxtVfom|d9-Ii-6bZw(5 zxk4jOyUz!UT|=#@n|7|KG17g@YpKX0FCd=yE7NPDAlNqwdcXmUtj{HI)hLq}o4 z)@QM7Eyhoc-~a+93<}Mb4{t^?fv7wqWC1SDJ}V*SFNN~<$um2&!?Lk{66NUxxx0J_ zN|#34=K)s`N^&ger?f0WzV-ZV4@T7DvP|4sW>jm%|Fu=!HS17D+UT}((7DY#dCf>kqPln>38W>=LUQP+Gf#`CYC}i z-x15wLy1!CzGbiadv(GB7L}{QFQ{-UM6;uyW&e9)?tz%%+`Tcs4(*9EH8!Tl-tIKy zAkoC*!}U32Gn%_AT~BT_$|f>dleLA0XCQzOxN@EP`GS552RgCj^^%IROc`tBb>_C9 z%!5zv89TxlS)Ph$^TuaFRm<6-U==UZO1{z?i@VSP8ZG^yNnb;zTx2c`UFX}7`?D$f z1{I7gf-Ucuihn%rR#}I=Y+f0Fif)tkH&V(p5YX1^VU(*Ov(Tw`GgrYBxcgOAUAuj= z?RlOF0?JRF&(VY^9EFljCXTExguyIwa!O6D%^#$$P3Gu}8uG8ZO*L6tQSOz#MA6Vp z2GeYdMpT(eiM^Q}GH?H6Sky5!=q;tx7s>3-viBNxKCj-WW1jaFMf<8g#9rB>!xMFU zVrz`QdtRt1YFrOXV(jKx0y~JlZO3@@EK(dy(WqA1i_$dx!VUr<5Eob8bWYK+(@ov4 zg~uvgP^Xgf8p=oi?)LSAB}O;|j2vFJcFO3(6QzSDURPOzeG}}a2FyUKwrlg>)}NfG zd7I|b(VIax#8K0Px}=iAf>Ey}{ggqXdLK;_;ow+j{K3%wA0&mK`6`%@vaPZE(b&C5LfaV1?e=Zm=iVYbf;yr#42DG zOnzHONRUN)YoA%bs@dY0bIqB^q{_QAG#*laJv6Gos*;1z{f;x`(SJBI>LHqivikrP zxtc1G)o7zW%pe}KzcaODsAc^))H>u%M@my;)tPLw6RNeUiL?D2>i|L z*9#$BzX2)rzxV@r3P@CXXwyZ)+qZJh00;j995nm0Q)M9$f#TGK>NCK6BVb|?NuS^8 zh4H}8x+~Ew{OzGZ0%XE|-)K$ixbGcrS#p9dEt!0IYF*{0oW|wUA8J^@Fy;Eb)BPdn zi<-^;TpRbi+!fbk!~vae7u#8K7MEWLF`VCVp@X8 zdmhQ!Wrg+g+{0&u=B=h0LSCKfx9QpxzEx-B`5W+@!cIO<1sr_&Z`>LCqKi1d_tnxN z)Q+*r$vUKcn+ZMYUG7)y%Gc31_B|Sx8PiDu7ht8n1*fcEeo9wI?WR5_eB_CbNOU`% ze#zYFoU_N_q0Z5HRPke61CV6y!hkI83MeYa>#+*SJJ zAAfO1(>1j`&HlKj=X1FU78m%u&CIT`pizXB>c%+WQ6?ZJ+eRfU2*wzH1%z7|Kq0@_Q-|(j08^s&ET#K zd{PdfKvMCU^`7L-*~%J-wGi9*eT#Ic$c$?d8W;A6up&{;35(U!AOsefcmxeA{pcw| zqnO?K%>-Ds_|sWdt~nJ9EAk17o9n)p!-Iki%P)4R44&UqYGKl4cFONf6XWCRcT)I} zIAS<>?%@fNIwv^l3=JMuSGmehR2$Hg&uVW0=dg_xMVlY%7=`)&DpIVEQ=~C^jF|#P zM=0&%T5CF6Fx>L|xa`~BSRt*~tOr?Du533r0{KJP;5iPYxI{trBZ9q6#2qGNZi({eS7s#&;o7Y4RNU4POVC=dO(xo*{O zYFt7+);bsr&bN?{?Xb;Ezm>_8q)<bC1~T7MdJ1p zzR(jU3NBQ-9Ax@jRM*(}hEAd^Fl_W8wb@y_+bTIPO*|CtXX5?(TppYRp?)5%Cw%{Q zEEGSNumaL3nW`>1!v(66mW|2v5jn2a5hy<8%zWLUd&zTf%40tA8Qjl(=`xzpk(xSd z>ZIJV)bSv*pqp z=4?cG;)PX<< zM$t|vwngbW69OgGM?P%|R0PcJnsLI$odu>?=;Z3PqpUF**2vyXC|hx8Ro~N?wwibg zFDyXTc8HDM)Jwm?-ZjJ(yKC+sIF?UjXUQb5S4)JEKxov1;O?l8FBlCA z%d3E_AKIZ_&;M#sSW=mnKQhY2m-wvHj_bAJo71oG?IxFQbN3bQ{`}Z0341RVkOh4P z0R4OXJb3IPuZzuYticC=*YErLCP)Ln0gn6r;SSz@?dbucxIn>W(k-l%{f0!Y@nzTU z0c)~p+NULpOzu3$31^|>&NkA|-o>R?m@dgj=D-(k^fTLlN=PEbrVSWdNkj>fa7*G(zZ;rrfr}t))y~&wsagknc#DkXFFY}nC6pU{Do1$verISdP0_)S|dg`73dl4E{YSttURa8 z0~<0yo9sG26FHJ}c^W&S#j8eRLI&MItILKMqAE+55)z#VHr|>Oy{w{MaAVc!M2^yD zvbwIhk1t+ZcAVe+aSW;UGiq|}>d)3xNjW4_7ubXt3>z`GB_yBsSTZ;r2n^)mOi0=D zQM!EZ*ClSBd_+K%gR48WBuh^{4y*!(lqJ|kFkX^(G##br`zIfiOlr%btf;$+hw=Ac+aHEfBKMT9Vf_ z4m4KyTw(cuU5B9!18xz!aUEGKsfMfCJc~k`n!+exIJxFF9WBL1!A~0bCRz8;q$%m~ z_NGo+V261DnQ5fuD91mn4YTM5$IIKBR473E2I{JFO+`B_soPXBq+d>cJykh}*z=0O zva<%lky-WCp8X&%5Xxf2JTT0TNA25moaat|Edw8{B{zIWl{emFrdCcp>gYSr*;Lzt z@h1Cs)JhNn_L^!^)x{4qFQvv#G0%SRaO!8JX65k&Jy_`OexMXIDxO|@WNoeA_c30` z{bzzDVJYfSq7$`04j!B`=NRJ>+1}FmN`QP+w$7dN!JG~oSY+2XEwoa*&8h0h&fvug zB|;)2_2R;W!cj!QOrKd@0;%&#Aa=x4DJ~>XX7CdO%;|lALsCk+N|H5yfy-0#g!%CW zpKpoIzXCI@88niLSpvD2TuzPFn&AFGw10vG0| z*Hx4wY%$wxn{@<_FSSmM1GLEu5)qO^RfaBbnVVZ^DtrCo0 zqWxX(`Su<}pEppyhUizBXKk}XbY!jg;}R}RN8e5y?5dTPIBUCw&&K!!;jNTuJhy#{ zp_MqF%5-Kz>wMvnMAgkE;-@WpDOVlGR^{tbXUzXSxc=D#(f!98@HDH)3a8WPzNXfE zR@;2=#gBAM!bt4ybeiqiq81-pJ~*Qu!b95z+b7G>Bh2scIEyHCT$bx7w>}{!eL9|t z8+QyKa^NqIL$b)tJ_rr%O#N!YF>=OE;10nqyv?ZM?z{d4od4zC@nC5`lQN^AABVKc z3GQ~0&wiil3|{6|gLaNP8G0(E(+fRuB{uw&?GK!(K{dCZ&>_KGK^u3iP5 z!*;w+)0A}%hy!b{$ra`sxb`sbTG;mbE4NtS{ zi!VrHNjrOFFJv1cNaud$*hJup1J>&*8h0oSosGK%0_& z?Ohu?hT2M&I$okk{oRk%D;66S5GWj!n(-|xsSF#)l83KlzH^S>B zrWWioY>b6+nsoZKkecS>bp>4yjuVhRN0*6_Yr;5Qa`Dz{zGQ5lZpH-jsI8u}Prrx3 zleKF=Ps_`YzX8ie^3mM24#D$hcb*h7#^F^uWtnj0)Sl?`AtRu(zTOe&jb_oF10pu{ zjx&LJL2<>lpmF7K?93@oq#&Lul@(E}zXvya~1(I`N{2|J(8IE1nZ+GTG;-&F8!aPk7`$CR-*FJG-wLVOJbwrV&v4 zPd@^A^G@!sUb`1h^3mz!{{BEhWj%OD%#;$izuDsP{?16hk55>EpplGk9~;a3)kwgO z<&>0Fudm;hFTEPA^-`1IS&o~O37j#DugtP}I2o3qwi1C!FRyV*V(|oi{n8+&QvO8e zvR_h~LD0+eb8m{`ubA&JaGgf0ymbW)LHWC9er zSF9vD;p!K3#^;=@%cGiO|^UPq#m(|E{Y8!-@Ei^okqZINXPHKPc>kl1lF*$Ih zYG6SrQg^bstgWCQV|-Mmfqf_Uviizio&y={Xc04B`eNdQBxfB~Y2np5_H9OAhCPz4 zk`4VVdb2zuld|KG_cANs*Dp>`goK-25hGF9iv;m_(CL|DOxb}rpsi=>0_;fgKqa`Q z`7Gu$Rimh@RWwh)J?G)1Qi`dm_`KLlmR9jwQ$dA?&AoL2mBMO8?H!fNGDGvmW(@YK zJp4Ne<4~7$)MleKTaT%OMW*boy%t!^A&}g9C>$F+B%($_?*@Fn^O+gqdazS_dIvZj z-(M%79;GEzFj8^ur#GC@C1t!<=&HKSb+|q z);r=3zwVhd~#O2M}(<=gD~UgJYu|Z_Kcu>jU$Js zjH=5_uva$2qOq$@mDnQ3a+9x4%IMer{NOJs%D+eU{Z9z(NdJ8}Ki~dXjIsxKoV`S@fiK1Dq_(kDnce}kjcIQORGx`HqOJFLhRk5BUHq~4K2 zIJ&@tN}3Wry7lT}`HpN=kI4ioIH2?@tW>I}mhboXXEtfwCHOb}xRcb5nFeXAkF*^3 zg-nl$p^5QZ2je3oW`+JDsw?FdkPxQtQMBlc9LKMZg#ryg)u$WlyQ$McwX(sv&}1$q&W)fy~iE9&DK&2u^-Vaa`NGuVEN9wrarD~v0Pgz?hy@U!n$ zCVsxvFn5g=gdQ_5cf0#u62XM(%R??~1!7rM1wZ!pJvr+@P>rlyO^Hn9lZfi+XbYa; zq@f+EgZ~#fH?i^{@=@u}-VX)s2iYr3{gy&nQ~n2%;Dedb+(Dh15gY?)LFV-w`}S7* z>c#SfQBip19hcjQ1en^|23{#YppwZMOzTn!+Ee9H%8Ma*h6U*<8xpnMNcJZ0A4Z|y z%4Lg#$&wq?Hv$Cp}lG;X_Rzs-qWk|M;1NW-i z{?QlGs!pB3gFsVv=3oMP`JRcfI7yw%)M0KK6B(-lmY$!-F62}&*egkt$`xtZqXIp> zFwo=NtHmW7j;~j!-JYRoksX||v|JCVY_R_do;gJXj*dkYsdzzCBJN~g>GAmSD9if^ zwl&!_kxN>q^apM$$7&@q81^M#L*Cx|pMxTjFQ^oeaj-=AZeG6W|cN~sex z4sy6O@J`%0%R6YCzXSvfG?8AH4?9M!GX;3F)3!(Dokb5Fg~7nVYns`T*)viPp!ff@ z!GBK={yLOCzzA@QlJVUmyU?pC{WZU`0+mtw?pR4Q0U^M9dKZ?><*26_b8V>M%RS<> z;kV_JbQiAss;SNe==-$-&IRVjZsKciQ|ke@o?Ubjs>En>N0?YxBAoBqm(D#qM{LJ- zo*?m>pqs9>C|s7Y9Q)|Z=QYjVszjfF+6Eo8Jd!N}ZMZcnS=j~pb#a^?MCf|u`0MQX z0dm>f5{$MN9n6T6hgB4%H#1E~&bDNp6=gZ(mKEZ~wvo3nS<|xPypV>EG%RSon1=~1 zpf>Y{ix;(DXQ~IRgkh>=0qT7|5fZ3)jTCy-s0+XzI6h1Ah=xOV_lKnR~)% zH!YZ&LajO3hVmQP3wO3{WnB#L{M6!@m-ESnT&rDPO*Wor7^BLoT%dBQK@w?F;J!FXQ?Dyg?_oOh6j zrhY0}Por7}(1&a*{M*uOO5s`@KDGIWdSO^Zh=#h;2lEgmO>|(*nMTcHqCGJ$$1&v* z7rMMe`$jjACU2;-{=-VYLd$dQ^B>oiC-FuCttKF!+l1*pQ4jNXZB(x(!FN(TU0VV_ zPk#d*hgmgPjcO@{s5C=ujWIwGpuwDo=wZEF4=mX z9=UTKxFg!{s4*t3?4qGeT9q~oik6&Oflx7s;P`gVd%cF?NwSRi$rVcUZbh_(7sGXB z#B_1xlIaBY^;X*3v-2JzqrxH!bDI)tPmk9x90xiu;~p=CmJh3R{as8GEccY*vaFHr zZ!Ebfkm*rZ(ev_VKKnSbb49ss&F&3;0lgJ{*-tw7nk0ghM~VAIF(fzSXI_rHbO*e3T{)@E873KPzfv^HHHVa+2R?M-Djk^5Z(c5hDFpCupJsX%yM=pa~q zUUB!f-;nF(Y7p+)>)IB?K<9^BKLKz0E?_a|hik9In+hY~=Dk8G-+Ieqavj4{<<-Sc zd8SJ@h?XAbmQ+;K_>ulLU+qjRyA8OmwgCxE_e19wPh3>wxNu8Rf6d*bp^HlI<&s(l z@zujFuZtPsxra~W9kT<6-Ye2^GernBe-0|MyZU8bu2j97Y*aAozV6p+>6L|6%WtyE z?p>E^+HUhJUVjzPC1F(DYs~*wtZG)EM4KY1mi$` zL`~zPUWj>olb5vDsxnmh1FUK4{GLkIq+tTPy=D9M*BPBE+#`}kBVuf$%i%iMK2Z$% z(6T)GV}Bc!OeJaAXZ0zgJeD7J8LE)K#}H~3#yGBlYFMcv2sKReK0QZ`Q}|g0$8j4b8>{DxN93R#;+0?ug#S)&p zCW(Mt(Sj(1rHACSDuRq`V0u@}Uhmd%l{5R)82&e-klp(-`>MHZ{6I%eb?nXj22<3F zBJ*HaGt=`}E3g(;*vMVtB-i6_BZBY#0b{`1S@Ab#)K;;qUvwelDy~yk{`~{Uiym!} zwv&Y_h@>GqVUdjLi#i3MzrmWMy@3Lm-Px%mX*!sPJi#*)sxon z%3n;1RA>?9k=3DJ4izizePLbCn}D$|6p-i6?w*OoId&~^{d{1sF1dO%24T<;zpj3! z>CP{8o7Jux#yZ)-;TqnYEi56Yf?_`C>rK)L8dnRdIj{d>K2pzEx76{LNYLv>{R~tS zxC%elqhw*P`*oNcS~kIsyxxzEbqQ%OstzR}v6i=HuK#=xp?1qFp=@-p-T+LPdc5FQ zXWtwV)nh%pn5olmZIbKHO0o&{YlAjjHrlwhaj9PQuX6VX^&1}apXnbPM@v!`4&BkL zmjrfs-Gjg!PCYWDr+Y*>3umqEFHl#K?`1DJdM^9f-70)DQjmFaC*vFP=izSXmFNu# zHE(2)+_alx#pyy8LHWGBX2dJf>`Fk@R`3nf$zEL5?y2BjPR}!jLd}23nLkWmbhu`;Xd7MKRxL9@5IL21jBUS}AU9|iWLLF!O^j>`2S<^* z?B=xmjziMKP)|f+J)aXkJA>EMZ)wcwOkG`hh(zi@^vgE5fr{5`g|r;Q^Uk-|RX`}r zV2W!8m&3j)rR3YRF!Oji-emc8vmo%^=QpnTEcy27oVH1V!8i$n7@2-MRTp_m#F|If zW?XqH@{lQ1&6Pnm<&on(QKZEI8Nw#hvW;A%Ubh~ip%&{N*8C(?3cDM(7MIi;#k!F4 z>C{osXH3K>bCx}WB8nJEd*5_$&(8e~;K*C#$9UCB0BQ8{li;zStE(pHqF=!gA~Y7> zx+>WFZk>)ImR(poSn?q@OQNPcQSeYU;LYhBR$ymwRR{1fL~1^OHF zxD$7W4miKv2Sl#Yy9WmWGFP9qKfD9%6Bh_mvE<`hSw0pCAPHukBDCIGnRwB^eB$p% zWCdD9a%~t*`dW!e8}E4BWUxZ{{rYLa!q2O#f)^Un$;%4C*KEEL>@{yaFis$fnC^FP zPv}6}LgtZOQ_-UQNmK-a^fX(vvzxGPxWf(Azu>+4Wf*KPeOxwF3G5m3G7J4xfDjWX ztgV=6VV^Ki#9@jg^5^e5#Un_yBU<-n+}z>1w&?rcEPl}-pm-<2g_3W1ngwJ~g+*cg zFaHXYLL1d`Rrf6uj;i@p7kEr)$VccDc57m-ItimF^Ss-1z2aflY*-Zeh87*BmzaBt zEh=f!Kk2FCU72WrXrQ=9xy6;ZXQgJjQ$%y8hzRb13rA`WT&aM2&%jZdW|nn*xW0eD z`}_Kh8$a*^+&H&$9_N1U&-b~lqSP&==^t*mCAiythbTl%sg={rfy;&8_jhM5aQbU% zB~}809swrMIUZG=%?T}eJ$`Fzut3f4+w(91+%j~e+;z*eakcCt$|?9d^7i*tabWjq zw&=B21F{2?55RTZv?QjY!9->{?iW;Gv3Fc?<|$`<6k*h3e`G3wcYJKO4v{Q<;d9kY z@k?f}^zu>~`~I_)u;o{Rcl4F80SgJhwhg)k?8|y}m}T+N8Snd6``XTn?@O#i8$RZq z`-=Ep(pJ=DZj8lKYN#dVU$18WnP3F_M8GZgW(S6!&mUa_bA)E zLLyhfxSDy7`8IPW=Nau#VH^W)n~-Dr8xvOZ;7SMQ<=WE@95VL5ttBO51J?XIb=E8o zXF8JnMT&?-r^B;NO8(tLHRGi2&_jEmNeeA;#}q2lU6>*5Jo{oAnX`;(7P_Tu)wwbY zjfcluCr*X8ru>5!nE^5M)B3<-*rs5q<)Ufm$qU6<#XAO$t0^Y)a|MFBFKda-^K-*? z-D!923K?j#H2Kz~XrZ~R8emBw*%DPJnt#Q-8n`-J^q`dJN}wGu{PtiT0cJan%1KGd zCCy#{QnStQpn7~I;j8<7Zp@N4d<`S?5Uzfy|0_g;+g8Z4;ZT~BRzKtOAyMlQ%XIy? zYkHE7%MQ35gGX4k@|~3gdto!Y)@a>JU8{+SN4WS?fI#f;H*qF8&fol8{l5IIWJl?; zes;!v$$#ZQMNP?Huqf1gFX&6u=O0;3mZ-iFj+OP&gcje zmB+KL{p_I9IPRoMXtdQm*7|DYO*;pqg}!@2lf$DXT@SP`eNz7= zz3D0c+JIz$EsEyIL7?jQQH4`a@B<^yz2Sy%9Ct?AU(@aByHgc>3mVfJtuyG)kJnI~ zo&ms%HbP=3hk1$c0~FZ4#Pl2I*7 zT4_z1zKI;2u1|-U{ObOy-j)$2>s&-hC;*`php(E!LS7_g@1D-8g;!p>NFa4;_^=dB z!pL%yUjWYf)QVzNxX3lDk%w0m|963Y~@% zg8bIq(QXMDTD_yWS@JytFX^j0Ab%pv7TFsEuZk8YNs|Kx>Lj}A>u|BhKeLlgLyD_z92pb3IcCR;>~ zZZr;b_FNe4vVvWYt6hpoN5DiZl-ftlEiF0%c2dJq3*JJ8x88MoNxoS}e9(yyDF>^3 z={Pm*`P1A<12jJ+EZ_vXhk| zOL&0m&wcW=x*HKCoJ(;$axo)v&OursK6Tb})jO!WS46=8e#0Un6~a~Q?>Ajyf_L7& z`?k!$CYM(GUAXssao&u!msTClJ>s=M2An9US8P^Z<|l#rOyAoX*x@Y($nbeCeYGFI z&yD{=zC$a)`B9$BA#g$ts`SQR-&7YV86RZs_ zYg>)R)#s7OQjHEWX!PB?l)f;6f?>mnysar37FuRhumoqjxcMAp0;+% zR0^3^w+t-5UugZ-zb+NA;OziW&A;UCR2GuX+)A+a4BQGBWv?=dI5_|BiuT_aYh?HP zmF&lVITlwzcPl5_pX%>EUtHB?cW-XKNBlPd11wb3H-6Opw&%tGk03$A!w-!KMaO+7 z$Gc694+Kko<9IrOchLNI5FC_K=<~Nlq+stjPIJ8FHy8y^qk2Ldm=y3|mv}9T)gl!> z@xtx}Mpl_Zwu?nZtp~q6d*k_Cx(9x;@*nBY^du=`kzW6!CmyW+e>pChd}q6Uq6Wj% z7^QmNM(Q~}zO;i&DqRQ9&$Hj&xJ(2nAt7F4M%4xTkTeN*H;rzc@~Yri2Ag{%4h%?W zUu<}|sd%veeY_4;(Wxyq($wwl3Z#ZH13AChctJwm&>=&(Qf z$xDGX`&G%b>!A-Z6xrBvxU9*9Uue^0e z15YG6t{m%D7N%XKsm}S{tA4VZWnR*;vo)y}oSh^i{}?wnC#bZqV z{b34US0q{mzLIBVM5powy;cU& z7~X`OdO670FrxDcKWJTAgiZHDfu}Jp52nbWd_`*|bk)Zeab_6~`F6&9(n+Rs(W7~G ze6H&LYRr8<7eI>|7_FGzDx!F=IPKsn!o4N;6{>l{a3mOIW_K(fq~&76($eE%lrd@E zoZPN!O%LXvvW&#L)0+|UExFpcpoU|EB`BQ4@=qgYWkT=ET#14q#s(nTF|VYny)N-t z{7n!LurzLtYsVj5s&(^E>?s$aSZ|Ew$0Cjblt#1Z!ySW;8gxbCnbE2-SY;K^|z(%3Kb%_u)f$%D-^;l#w6?2ty>FS;;E(2-tq-;|8 z6t>)_9CTlrT5Hh!CznQ6yz#U!8f7Ku_(`&qX_+W;T#Zhy(P~xg2G{Rd*4<{_KTb@} z*~#(B_HjFuB0)VH@(A$J5_;(}%wc5BU+7|1T&o7rE)q9+EF|dXnoETt2$I@Y27lNl zM~#*&WCCAXGCU#+&a7uB%U3r%P@9M*4a9skGrn{&bfx$G+>J1;3&KsZ65?n0vfrx- zG_~3Jh7@oa=3R}N(J)_S$&mWFmt{}yU`i9b_0Y9jyoKp3`6=V|13~1x+N!53u{U5r zE?+kFRA*kdSj`lO0CPAUTWU_S**onvoufREY^zNy3A)Gv6TMf zpb4{AsmtqUf-5031*co?D?ctK86E~Luib6<`uoyprQcSu(`vc5{^bZ|C1sX$|8F}F z%tX6`{_cM@RLuY9;g;*4`^Pt;*=gWc)aD7mpSdi_<37Ct%OOYUuI9^oWj^%vu=Y9+5bUwP5eON7w0dJ!-1tg_G#1?+^neH*5{x6vRPCJ3Yj>yPXs zenoxq{}RJuwZNRzDWvD;3RX(Si8`cGh?R4D=B9d}Ee%Bs3d!`qn5Kr^1ognvr+`W^ z(5S9|JXq6~e*Ox%oN<169tnzwk}XTWqNVJb>5x!yq5ksN&z&xB3_%)W%x3Rw=dR6iOaDOObhit5vl z-h!M&V1+>+LA^TlP<|pX5V#DSD@!9vk2bHbuj;Tsmdr^D8Q9*N*r^Lip_7h|(>&N; ze2JrR1R4gWL}mTtp?{_ZYGP$GZxWWeH}XdYS&rKe&yrt?n9sxsx5gKBs_gUgoYXt4 zma|^&F84^iqF3glUT>xEGrQ~$3K-yB^S|<#G*>l4kl4|wKb({;#kG7&|h(EMtrjRW|TN|&JJn{C!Txy z&ECz>-^nREB=KUjl8kguLMU1p8?2a9gq=5_Gy8Ln)~>2Xl#WE1C0|z=@NON-;;fzv z_I1EQR4Dm<+G)pXJMBV|+Y9fEo!w9Z{ES7Gf0Ddfgp>4ar@|~x zf4ZnLH^+7^h#WFkwv>X)eqRWeK5{vyiSrhElO)r24rQyR(4YTW30O4Y=gBfD+U)#< z5%MQ*VayHylo0hit#T;o`%Fy2@0)=*5sHE-USvgPD-Bt?C#O$MQ z_?h!nloj?MA`sYbXEO>uT(KbVQBzs#{X?G4VtXg$1<%Ph?EKAx>5weyx8a=&U?-bO zi^_?9>-oSu!{mEZX zTfvt5HvIjs3{+b*&~9u@xNhQ(Wg>PZh0g4eH~b+eB@1X@g*@E%_51ul+fFQw!Tst> zfCJuiY(@qiLfexR3Hr9lNWMg4HJH@RpFz?)fS`@p6+KEKwAAXeE7rn<5UP(>D6St> zA8Vzpai%rsF^?)SQY@H`bVTGVOT2jnLQ^ZMZT?e?O4<|e&2Gl#GtQ_roNeYVVpLdk zYpT37PM2BnktxE>t=95P9|$i`TO0z)$!*ImE}K8Ev@YrC!AgvRo zJD!+--uh`G60>CPAujG-tHN!X^hTpvGMZs=Rvk;%(j#Kokc{lvGVIc2}jfTw1 zid3dszw8A+=cE87ASBbZ&MEy+@S~^lcNJmDB-5qzsOEtyD$#KESX$GMU0|x06UQ)J zi~cD2QZqknCFV80e2Jbw5eso0GL3e*1-)6RS^q7>q0n{AZ>G&_&+XaF1;;wxjK-mK z=%0(j2Hr+Z^I8<%5b%JY!zXbaMMj0~mBt&WIoaN*1ZJo0#(BH1rC@r2EZ47_jGk_B zh(Z*?T=14cr9QF{rT$Lk*0Qc4d4vC9(nbSge|s1Eo~>APtaKP={p3{>m)6pURnCP8 z=xY}hkOAI#P!&GGC9CS}E~4IU`8mmu$#6iRRpo2esn7jol`hr3_6!ushho-V@CZZ@ zs~AVSkGVQo9*Cz=PWj?EF=mNs(Dsuc)7j+`*h04Mz9N%W^!@wuPEUe>yIiEvERgy; z+t_)jIRB@S{z%C4sKQ-QL6Z!XRVD)NDbln$Wtcwg8E_k>9srM9?j|YSDik8ilewp9 ze}xFdsS^Uf2|ags#lxf{A_!jcb3DJn@MJ5pNxYiUB0g9pKG(1)T_9LZ!3*kc(_cXV znc`IH2d*ixHc;S@n&z`xV;#KoR))hZo%6=q&kdnAirtdmu0d15=8?7N`9a2t8&IR( zH3&P?lv?W9I6sKvGH*_@%1Ts4{|0?_FSiyq*0>7~k5yDss3S>PQ<1hz2CCI$&HDW7|1+^pX14aJrCHbd$FvVMMsDe)uVli2@z za{cS%+cUt*h|Y{QP$WK-+&*~+s0oqo(2*67p$77aAO(y7qdrO-+${WYyeW)sMU@VFMZb zBqWVW?ys-(p(~;jk0J4UE?RnPR_Hkw5i3u%o?$nhQhcc`fdar9GSLfRDMu_wWyELFE$k+|ZQp%uRk zrU-wBT>E1WfQ-wvk^ms>Q`3XwnXs325VMC4f|F&c{HN_1uSY!{5AI(WhYe@1e&ZSb z)O8T1UBL4rRrL#NUJGp@mD_c$D#_uqpO1xR`p{7aa$lC}v2O-|7SgHdn*kxG)sw=QK+*v?@z*M+<`6joC`nxig|` zVHYFU_#IR}{6re7xtZh%0=_&wFcGQ91BoGFl2%cp`<88@Y7h2mQr2-oHG8?*SmIam z8+YBwFJkDbccGX{It$ zw`4D{Wr5cYSYvc8UU66b^n77G+kVR)+-h9l&~Nx_INq{&#`ea7pKlxArU`lfZZRFK zLsoL79QPK?*e9KCFP^{|d8E3tzeaBYiYc~;we+!*z3}q{@mVTrNN`6u~L=jq+>uQ81P*F zK&hiiv<+;%H*FI^wS~%_fu!RZrM!~cU#MKIH)DMK%W{V?Lut>F@8inPBCULVM?JkH z09R*R*lvpqt)6}r@>|kdH=7s42byiYdeLb_z4;iP>L}CLdG;NpfiU2^R;hO~06(vfr%I}XZ-ZaZKoJ*L=RS)o@W|g#7nVKKmPA?C$NrQdrf_nIJgn(pI&iQFh0rK;k<7pyytqHh4UPl^g!>|)6a2`^p7jt9Yd85 zQD2uUcVr3ewJ1Elk~2l{1^|#Gn`|tElE>L7H&|piv_kF&_OG1EdWuT`jzkx3rPk`j zrP&U2ytOOVM-iW!c+2@65dpD4MaEF^#*HuRo$3F7^}1WRo_OoOPAd6o?f)0MvB$@i zt|)#b?h1k8In|m`N0cv!|2*Nt$4OGyoxXEXo^tXQ4)2e2oCZ$dZ;8%Ge87qR9n2w; zdgabP9DkvL9F|>P-(CE>4JF@XDKq$PrYn^XT+}IK7LydN??SC9H4Rof@N9a?9k`>@ z4|o_5^jCF1)s-CZu6UQqg|*uEt<4{C1bAU-JI#_O> zy(?BKCjwiU9*^W}DuJdoYUy_eGgCC7X3N_@uia%FH0s0k(krr!-P4owNH`OdtH1(0 z9k2HocP>a)=2(_)SZEsXT)sov`|OYaqTJX6xx=<}siPoQ;t)F{<!19a zLtna@J^|a4XxEr57g6%SEx1>yh2Enkr2uHUl(04fNw1E@tl~T^ z8JM<__uEHrGNk;)*A7)GW2VK@GVH5cY;t_IEcvak)h@1)xmsKJSx%0lDvmYIL=ENm zIKJlLF1KmO7Q{7o-fIJTg{XghHLYy)5w-LYB@3-Kz5>!7%DtIu+%=BCEPq!6lm@7{ zp^BFm0N|XmpAp)xZz+dA7VXQu(E<}v3;7sQqqh?0>1Xjw$1$4g%ABzG+no=k9ogn> zTO$j^Y%|$A`hT0|POX!v%@uO}ZANg?@Op6ECx5U~_kep)b+gZ$b8DQHN9A#%(w%Ia zk`=-4$CgFFc=XmDFmikD3GqFsVr@H~;Ed>|HE8}7M9*3cSDT-=;!kUkfp(hixJcC0 zi;MQ6zvis`Dt2Y~1Q_@!A=-gwfN}kfn?J=Om9z$=L2AceL1}(_{h`kll$FTK4S|B7 zt*nUUf@|3*x5Og68s5u}D2~|O@~iQN85*^)GYi-4QCfT;O2W^`W2HAlWINgvaUd4t z^)E+XQR9JP!q5I)nwu!XNc@w3^O+I^-Gnq}p^2j(>)Rp-0+-j?i7E@47nuUAT%eu6ZXizF?PFcI5Ku0b zv%r*>sYh1Majeo(%uT^MPPkz$1EGT%tYF(F+6oabsgu3iXxLjvl%ORYwaE15R*C}l zQUjv4;ETtcb(|g5n9efnoTDMlyuT~Y8 ziq1lGDt2B;3nT;$NM^DK@Yd4F{!-q6t@|KB&_*Nn(8t5;Wy3l7glUSAIc+P>%Foga zXliwU@u7rWiksmJefFa0vzL`kme3i%V>lQb`YNXl=@?(BDMjHw=eJ%dHrDRQDLHfN z-IP9hX=RpNg?n*c0w0L3xIsZf!BWoMe_Sg*-0d>L`YL(KXSY}x%udIg#VX|-^W7r*cDNwr?Zd^d-JqfY z<9y(x-j{n^*#_N6>A{J9dDEJ=ygt7eR)=6646#17Uc6I^L za*cP&W-p(!%i)$aL;Aj<--_ef=OFdrZ|zOVo(eEQ-M|~)%-TPH+g10xMiEJ@ z?-=-jF3d21j!v=yq*fAbHMwizK$M!LGtV03IbzGMlPmjEst@mNdfRvO((j8TYp7~a zaU(3=C7Is5QpLgvk&1T;bl3wWYU(p|U{eJ;6!|Smv)pAWtEUd~(K769#S|B{X2gj8 zIiBS8u~EaS+Epb~Gs#Xe-c(LP^^a3(AVm?P$}5`sFNYN`Q91n-pvLe}fYI;axh9aM zTmH~n3PqnD;>QarBgU*Rts8sp(ifs&T)IrU;fAmb+<98bK|?ITDJI>l`SWkMX@VO) z_)y~#)}eEMIvddC{)M{Zww~r#>zDX6V2PQOI<7mw=l*irrlKdJzykh$xy{-C>3Vat z^(H+hzebJWx`TJ^`IjS;&UhF~uBB#tfTu#wR^P}<3wV$g;z`HiGbWj4G}&uI(q*x< zXy>v__~(eL4DS(XX#>Oj{=grarm02y{y59*&hTVA0=)}aj4W7Kw~aw!ED**O%lNf@ zH8OU6JFWHND-=3sO+qtsrMT|v!ckmVTo%#LkEGxC>!ulrNhqWjx7&YhO}05Z(4CE` z*|KL%o1^?NuWA~l^v^s>!v(ce4+Q~2Q`yJoW?MUc?jT|rVKzLtnMehm^u$ku#N@*` zpOt;@E`1iVeXW4KeJ@3?)`aa9rh?I-&tIctx7hJ46-stMyMT{qmy zF&+(aU(XgM63o23oA8#1+8scg$&yPdB5gyck@|4wdr^GR`|1uW8#S4=+J>pjtL}QA z@6G*?7DJ4Ff;pYXcmdWhbyD9BP6(Pearp*DT3c_;U*Q#Scje3z zE}z4e@~YMyHHa|cAOC#jl17lQ;I+|C6l0iwk2h6+EsGPaA-9?u7Bp^zoV%U+{{OBn zY^lqd|Cj%6s`!PH+JAAf9krlZ_WgithCQmXF=OPs5*rNLdXS!&qu(2)C9&P6-+jtL z6HBDJ^OEK|ubG14s;>2kMxKC+T=nBs?f|RUk2wjRuwN+oxCM~rF8Uj%xoGX(^p)q2 zy{ucyi?xmnxJZ#J!phdbGSl(Yu+Gd0wJw0PpuDj}{9eW1``>rrZHTn#xR2pU{%25Z zZ7o9f4wg=s{Mi@LX1u5P88g4CXz z|FNICrxnd_J3zU{t@e^p=@N?f*CGqqeHi%Zj4YTm&KqOv3^1ANG0Cytl0kZ*Jk8>2 zIs(NqgcnywgY`x{_aMAd{ojT3qotvf9;dC1Gj6Wkv}){I3r%yg6IaEXEDnDi;`M&Y zCFJ8=GC64)P(^qWTY7~gtr|JN%m4IFwTp(pYmm6(kl$+7quw()S#JHn!(cT>+GLot z;=cc#p`xkTt>DV&Y%((JCiYp6CVHS$xUcXN`g2*#!^PBc8}vzK`|&lq$?4yNA@lcz zJ3dyllzo#=Vx=0<4|p40-c{rsk`H-lC&X&Wu_f5rmzX>&cQFX#Mv?n<2C2bW?&;IG zwS>54>R643SWhuP0<90A>t;Ef^Yjd~=`Y}{41fkwO}G6(-?mV~;)2jq-z}WD^DpFa zJ2MhTX`x&K!Hc_2mMg7d+|OBd>pkiiPVbvj9L|6;!sFUs zD<7+&=M7lgiTXk$=|i!cKs^XSD(*{N8s5ck?_EY{eTrf3{agA=4eU$$y<47jslo!Ov>tXxvnT61^mRY5Fjlhe9p;v>1ZzHymwLi5m4g@{dDps(0cP zb+QwbsTNm*%I-hB;qRYTKQNdP0D^^?l&ente2a>QW1flz26m(?;Y4EzOlK4UQVu#y z^-0FR0jhz3^;;C4*5#r(>@S=>jh0w>9)m~&Jaj5MEr1nCt?jJ>x2Sl;S3*MA&7!T@ ztXE!C#VlS{#FnFCO;S|cF$Hv#2D2Jj-E2Ap(g}X-V+EhFu4ntHSvST6FT8Y zo|OiP>7fX}f$jD})Lm(QCjv`b zb;k+9xEY$|@K!cE#VlHX{p!)<^FU#X3!IOl4dUiMSgu-^Qy(Du$&nUdjldJCPH#&y z-aLH&Ll_6oKHKopf8pJE@AlKEFL$rnyGy-h~}^O{xZ)t}HcXYU@~cEK}PvM|Rv(H=s{v zb;>q7P@e2&{%#?uTrnf9uI3fO!`-|ievAi~68l_O<60c$8Zjj>NZ9(B1yIz37ZX_P zY*PQ_4#L)19%gNVcL=J%S*HkE$ISKZ_+3~^jN-28>9Fp;Giv5KdO<VW^;edBa^ z9_Un*nVu`BZ^3JtwvzYxH3Dol5=R z6;QPXbTjVe)xDoBrg@$i21?B(gCz<0*8FACwA$AlJol!4U7iv)S@g^=2U&2_OHPda zz_Si%^LK@;HLn3liyNB|n1e)FcD0gV>T0&_xj&#cCWZ5%*rAvfUeqAHusTR)HA`Yt z(ypqIYBPfgNKH&-e>7Du8?7Pm=&5*Ap1%YBJw)DZZ>)L*%vNd#|H~0koN@k)z1*|B zAoU}kE*cSTI^D`iFRm~8mXZ#!kgiqm)yzV9SQG!DlB;*%ruli? zE$Mf7m~qMO>nNw|+ihzBnHIEPYhfQRSiWhb!@lY+wjf2e12KjLw%*qz1$=TeC*}@L z>|2eYkU{q;&*jyD9vjWls^qBj!a0@m6uTx*vC-Q(-R4Pk?O&w1dF={)iG**O;%?uF-eWU zyOUum_xbdVwH>;c*=)>Y{P+%hlmWpS=((RrVG1U;sC6 z1CP_J0S{U%QVJItv#A>|Q{&;a^$_D0-tvf5vZS-YONG?908`bUM?0u1w$A>*{$JSK zk0XTQ_s2F+<9yd|_Hp}p$*P9xiMng`{q*5|Jg>|JANCzFubO$eVL^i&PW(CIE-E*> z{S;1Q9v)>xmo&|aX7+RKeTj01u*M7*ffmI{6_{6BzvO>f!fDJEy~FTH26(UWPLHHT zU2D&)%ImjHdE2mMn-Bgt*;q>cnZND%o?bCRQ%)@xh_mHc0s7XBdHrw1I+Z=PEHNV# zk}t5Kr++z~{)ciZ@GD(t>^tYgq|WxSgPG>u4u=%(ZfETq*5^IjPf~;b(%wvUA$Lr@ zNaa_(^9rFeBeN&-;1tz>cpK_!U1Qm8&MV9PYUPO_59TWAXoT^h6?R-;63=JucxwEw zN4GdqxUw!=s#b$?YWm)I*kna)m?qTsXx9BuliPBmqe$>*6RD~P3_H1%pWAjVFS>Fug1SuUJQ|9s2^9V;_@U!&BR2}vxadMu(jC2`Yp+eoFUe^0|_jt30zpr*k z)Nf+b1@4GXW|mfz64{d_51^i$$iyw57GHm zLk+R`qHNJ#-_V*q0M1RBlFIx&+y1uu^kQplz1E9f)9h!k@0Z_agig+>?j$xUSV(o> ze|FVO($lmtwrAW^VB^|Kl9!mz0=Vt-`+^c86buL1SnYQV#$i1*B1Cf6a&mb^IsN(g z42JNy-}6Sbfq!edi3&=>ls4}s?kd4_iDSsy^_BCF_7(Sk;afFBI4AZ$)sN;%Lgrt^ z+RB1>HmEaWtU3OUGQ}e`W42h2m^)hC%##EZ&7Qx!*HGST6X>b&xal<4i>=o*j(kWLFY}1Z!$Zzlu zlUY#-%J&XN(U_@0FIzQM3+y=(R#U{98OrSzPn1uE(CeoGWvjoAGQ*`X=CKNClAXq> zH3tWhg~YMP@#wT!iuB+pRCl|rc>TAG70A%P+|;@~V@ink+U^Yp5dn2+2^zBg(3O?5 zlU7e^+DVFS{9jNWju&dTF3UFJfBehw)n_HD_P@%YznkNVW6vK_mRw?SlP!qm+XL|5 zzXV~6$mi05Pt)c(S}7Ge{c!L0_mVD=w#I)+U#4>K-7!kpvU?b!-!1aO zX3BN8d;s)fwI3z4oGs1on5fgL*oi$SjIHH76P8w$)8^XzJWs3-KE%Qkr}-Vl~K8#W#2=aN~49%ODM|GC9ncX}kEY zRu|DY+%1(M@A3SWQ)Sl4OXu{0qRwZ*-zDeb%7Rj5U1^1 z%x>CS`S+!zVLu@VyUqmr9v7>~kJeY)V~v^ zUFN!ajV;iub}OVj%wuY;xpLc+tZ}+}Gagx=>Mqh@zdF2^aDNoAgD!V7f&e zHmeha$iVg!cX%c5`k%EQZ{{DZL$!EkdkVvJA!z@+3<^X~YUboW80dr0T*tUM3 zcMK0?&ZARim`F_+;8Xt(RrR3xoZq8UpYPXZg=KwfH{Z_}3Ke&bjjOBpl@2%WwI55K z%ge~*o1Uw&J+F~3`c$ybv*`)6+T!WSytCeDXycWb>_uz3-OZ@1y{|H;(GESo`i|M* zv3S%E=lX^RD^aHlTeAq)k19KK%^=TAkMQvVPw^%tJ)-+R9}zgQvXUVo0xZ3wHjWLw z^y$fu2*n_CPmAho;kiuIvzfquIc^76zG;S*wN0GNS*|Ikt`{z^wg=4On7nSJ4Aa)5 zeNAs0=6!qm5Bf@oad7XcX@$=%pmN+2tkck@4qupTQq+ z+UOhccS1js@!Td{tyG^UX)?zp40TQml;j^_q>`X!gyAYmm8{ezffzLBO3yRgxk_N_+Sy`UY1XcBo!#kHZ&-Ax`u>`zjAh&P){9eJe%!sv zXIZW**Sn^k*_P3H%ID5Sk;`K&DRo}IQWL`ktO`tz=Y$^Sj^XOBhR^+vHG-`;z)bAw zWUQ!GY23fe-axOYj>uu)eirhV?ZouLb$%`H_oLcT@gGhXaZa5tG+veDT7CU0(r$3) z1t&NTQ_HUndUTs2D&KIY|AWP#N%543HV1y-gL%Ib7sy?MCQ`Pw+=)Hoe#I*K3c0hP zKk^E?EPcy#5wb7JYmoic20Y1fwfTGlk0H>$fnVlVKNUtLK%!tNKCajTz%@kJ)vH{?}d;sT>CHb>ZDY1v%%jtgC!wYs(` z`0e7g!0MY(g6C-&Jz37tX7%9dy z6&ntJddWQ#;4KhMvA!83U9+l@ds)nuo7Y+XhGUxYieyXNn?AH}c~7&nop>vg+m~7Q z>90qJ;aAACJ3GTc2RUp&fjSFNmPty2PR-TGzd^5EX*NGGBz1W^{f$RiQF{uqpLI!U zFBjZiXW=uuKc^Si?l7=9o2n)q|kvX0G6$ccB* zMnCzbh6&jwYBj&UWSm$OkQJyN0{&q+Nxgb2Qz7GKA-|b>q-Aqe1nd0T&Bndx`ma{x z3a;SRH?Dz!bWn(J%v0WK=V6X_E==x;KDE=EqvZzPyreG+q%en^}< zH_q{NF!`)vliJUpKr{W0tY&u%5pg|y3d?rs*hJ&Hd-A6akctP`tfij`gyw_>CJ7?l zQs?!f7P3fW5rH%7)dTDeF>@NBn22U<%I2DU+e#ELtga-8-r^@me81NTF@}RFEeeQH zweGsTHyR;7$0{waH2Zvc3Q!fW5bx?@n5d}do`T~VWvWP232($6l(@#47MO8$=1#KgpY32p>6Jy7-OFDB6v7)S1}A}WLY-xc7}M^!Z=e-V}Bd&^31KvC<{66{gd+%>KWRcCuYhg@+t> zE{mJRr8p7WI5(|OQj%X^j6@zSUJm>V9UKU_`Y~>m)4(KV(Bws_(NJ)I;K|eWQLUg$WbhgLX^9d8I=G)IFGNuR_@-kAEto!C|SXI)!ni0fh z`i8hRTeFRfKAz>n>PptdnxeK>o3E%*+Xf3^l#EFmpp@{JM>a3@cE)84H@R^4xv7$K zU)fOT+34&6y)K7zb>B3rw5rGV-*;vR#@p#ZB-GY-8_9n;o)uHB_ZAzb zc?MKK!_FGC?Rfd2l|m}l^$y*6(AYSl$_s(D56!9Ycqgmsd}Gu8g`>YS>43F7Z!78H zKgrb-0Jyc7h<%7*-1cWBwIm3KX*b$9KOr@P3??Unz-A1vegWhHMK|z5;k|e=Fm{>E*AHu zMpvrXNTeu38GPy?3?C&%!fz~g*lx;>c!onUQ~LSv%ddyOtRG0=u{>qI{+>`1Y;HNr z52a^|y#FxQR+_Q#mJbnHYOCNwyeW00-g=j$z84ZQ6qK^`Ge@0BPtD=Y3>T6#dfcMX zLr`(L+3Fa5TplPXG@8JZJ6AL6SBn;|&ya1(E3)0xW%M^ZMZC)GE3=%_bY}t(sjU;f zT_ZFIFTgnUn~rJqJ|JZ$S)5)HBxGyqrdQ#;gM!;AalJLG#r{w?DN&tje<+hDDClX& z@}lijFjVaga7r+3(zCSvUBi139#?b<^VqJLpAt+WB+aR*J@aSIA6$Va5pE|dcW`@{ z;O{;!mL+f7C})htxg>n;9kUC`{;0)4;}txjBu1wBUa`V0+sFchnpABx1OLj#Bpqpp zvVxw+h78%57F&iGqtb$F)!AO!HA3gZUW*my8LhuT zlblp@lU@UZ4^{x^?eil4Tzx@OjE%kYHXb1JgQv-9rsi7H3F1*ED*ujI_*UH?oeL9p zD1Qgvsrw6U3@B0KBcn}jp9uTOOw^McsP1PUOR5D{$ZCaD0~VM^V~AW&kwUJ zQM&iqj%#w`Gs!b=qD#eQe&Fm<4#Tg9C|SIh8&^NjxX=U*olU{ZOr29?^ho?Z8=Tyv z+nbW#XX5GjE1||+45e$i3bvGJCa22B{)V9EKRja{B%_0q! zQ;WI<`TSi=_V}cB*`6X}bn~avc+6=zmNPxRTXVK>wYlwL5|jrj`uow=2kYwD4R@5R z+$f3uWLTy?pu=8Gy~%b%etXAe$BRz&l1Jhzbf^s%aGIuYz!~aKd)}SW9PF4> zvRx8&5U-G|q8zr^#d#&=VINhW%#gaLn~PE#oV9bg1_o!^i4Drhbvi>2Y+@tJO%YhL zdhIu!>L||fhlssjFOp9Kl&$66#`fADFlD6Cv5IqzoK#yCefh_~J}Ddz4>DB(7FN*& zLj-9zdf>DfjHp=TfqPI=Tn+S{H7IdbUTdi>;Hp~^{0@*VELRUnJ_Fa9$-veY4PV3| za3lf(8qh^3W~rmTLrBKYndH3bN^G)=r1yOSjQ zvD#ZFx2h=q^jQi~vZwvTQ^P>hI7iT=D8ZsM6abVyp-cqn%^wEwF~SX^~09%dtPR z%DNSI>+7dyDAE5FjQDSNdF_n*@_7KybN-L7cG!jCVO+ZKM@~jW?+Mp|zsYjHUZ?Q1 znVc@Ew=TMQMX;C@m$y@_xYoQnHI8p>eP;=+L)ZANei&;)^*vq&y<14`>Bt1iP7FE?Ai6#!IIRW4uDr@}oY?(U)Lx*Ls+a^{2D8p<=Ys?$y7BBeAeA!!nyzGgR+ zc3w6J4@3U|wAjh=i^y!MDRL@=1X$JUo$v8A7qW4~T->fJ9QQu4KGwPc)?To@c7PK+ z8{zs-5oo<@e22%%1zx z^^-oLVQx2G%-So=rPlfw_6`YSd>_Asgt>%pa|=Mxa#d5$c-um_QeINbg3{m?Y3{te zrkC%IQLG92A#{g=Bj=Z$qs3Y~fnHYvao%Lt0Wat#dGP;>A8j!5U ztA*W+JIsmW43XYU=$#4-V%UBkKHKo;1kHJJ?{fR)pPrv|?*7L9%6_o*;5YxqB}2r$ z6aQ}~!$Qbj8#^Bs27N z%WT^{E7RLvzV-kqnQ}Ns;YMPwxWxA>IJZPe#s`0~>t@zm&7uqki7Zgd=el{w> zq?aXODkAP*C;?kU-?K9t6M;57MAvdo-!oZ=d$1sQLaexT&hbJT-7|-gDB(fDBD0P) zn9F+TLR_G)SmWz<=|w`Iw|hEqYAq-$lGAd^8g^ARBgj(Bvo!vi;BHAw$ddHwh*EOo z7p3b~tWq*7>uIA8w)K#o&|P9^m(ZWJRgCF`dsY|MD~YwQ!*LY>!uFHbB^0Bt?Q^UD zlFT)$S8AGhVbk>qJcF=yNCYVI{LG=licW`p-D|oEynAjf zSwE*f$@~5Fga@?3`WBa98Jfs1HJN9Xjs82cI5#Cr-eh6Td(kV)@qwHW8+-1uxHMlw zR&{>%6b>NphB5d{-luoIuS>xAK_Ss4e1^;?aedYN0Q<)04|9Bmu|yMopy(+UB_l3E z{#;?#=e&@W0!Cx_IcSd{bmV;x1pM9JFejVC0*7|8L>ZR&5#Zn&OlTF?cK}W_L^?}r z!o7`f+c{7X9FYkf3iY(>b>vYYQ<&0hqn4v={bg1_4Hz7nsyY7~v(-=B_NVnqEz+{r z{Ak_PREMv!wP$|>q>Mw7cE4x&*H0`!>??n-tnaQjyINP#R2LSRdLlAaCLJoNPQ}<; zl;MK$_}YT?=#=@wj^W-Pw>3w}?vp|6gGIvz>D#(rqLqvQQdiZ}dp$ZbTlg-F?3Cr* z`Y4wQS!`0KaD<4PX}ir)r!-^K$>T$2yNlt6dY9nYO}R$S#G=%|;DsY&tX1UIR?3;l zrAj--T}U2(i=B6xZ~D3L0E}fuEudr-wUoV4%zC_PSGckpNDju$4W8d)w)N^wFwifz z)QTDrmhAVZCS^V5t`X@;X}hJ*n?h)_RMKg_nnh%$Oj?m$Pgl`xz9p`NLnK~| zn$edlE@NoFk+B3m4QDjWa28(*yHZrq-mjH8m5#R69JXdNLXdYRRnxwVzH=)sNC-$z z|Dw>&gMozmemM|UJvF+Rv0_!&5s_Ho_|I~oCA1t|;V3nbXa@PT3RIL!KlTC3)_830 zN!^@n4M=VOq-Q(oDiC7<;S)>6$i*00*}^OLWV#E|%+tMP!VjlLdAZPkPNWi|oR3ux zwBC&UX9o#?cB~3}^XRaRJ%KLpu>o2C{NG+GwpN+4b(U>_P)R5m82^0p>&kDH1Qgq- z=`#11?XB9=GK}HOgxA;@BrS}jm^b+07xhxwW};GkagR&kR9lUWOqGz()6X?4oggRc z1(ktW%gJE4~W)S6!rY&ToIP_X7fb&{SJm7}Qu%jzc+c~p%g zD_6ePm_7fxGB}#ETwoFgCXRb3t!i$SiS+2cMfo|p)(*EDJJ;eK^#>ZtKiCmFD_LkF zFXU)it5wI0nCztMs5}Z{HESg*p5~o#3|YF*5%DGCjCX+@VsMn(WSbxQXkuF)q|u#Q zoLJdQaw!_D4UPwXjWwCwZ+|W;mZB88D6|Su>PKP`W)?7%g4>HI6jB>P^J^sNog;)8 zX4|vHU+Z2^@4^7ywE)ES!21xav6o!BJCo9o?JaLQNp zbBkhb6y)bo%6T4#T9qgcQUwF^=efNzxk2fIW?+N8hSBa-=kt&vLgC1GqY=(HN2@8d zItTyyAz*knGUb(2Pf0%FPBKL&%!;k8!M(YK!Y z-ChNop)Z|2#S)*_sSajB>w^+ngVGCyG; ze#2R=ntpt~HPJSL??Vaop9e{E(~#OLWY6}@vVz8*qDSaJxC5v9XDwZ)3Sy6ztsU6? zrfQa?A)Wxy7*LeXb%j{Z?KpG)(l)o!w`&B*+vyb4%7L7JV}B18#{Ta+r+IgTB@8rS zBZu2`y9?P4@azBgT=@^%ZMLnXubV4<-`ZFnwn4tV3N!nwlSp1u*ZzeGlx^56+bfdX(^TEbHLU3~Pr(#^14^Oed$%xWA`h@P(L8JD{G_J<#CO% zWP59anvTlgYHa<%7S;r#?_CCuPco`+HkP$Ch2J*%2%1$GRRxALp{XyBzW7206%tqPJv zx{kSftJt_>95lm8QdGqBv^n*p*?UWB$5Jke3@hR|CtuVHMyMRi*=5~{LM33C@7SBo zqt}DpBk6S^%JZ=mxq{c^Qkx#uoGJ);3JY(RklB=*hE$?r^I=IZK4H5fGP~)$=sZgH z!T>BE+!U4ONy*%wvuki!NdLy|4%ZG;MmOpb9iLq8D`qKNh1XY@ehtR9gz$Zl`6&p6 z?|Zy2?rEh%ZNlaGHL8=`NRq8{idytsP~9r&n1d*j7G}nNWDri$ag(eBkkr{ zSMW0q71T}Xv>6|Zz>0ulpdZGCN);&v(QqcO*I+p~3v2nwis>76JAY1GW9=y*64KIn z`*ZmFh6Vt#PzrAZ`Dv8xE+R4!I;t*enDO;@F0n8x_=s>rQBGi5D;T~`Ik$n#O06x) za^+jEmQ!>o_vevg0rh{VSlOj*^2$0LCsoq(~jlA zzV40QADUISWvV>6-%I>dg^kjR!PX?)H{;NE?Jgi*TO;&q8CaRCI6H!IRn$kp8Z zoVd4W)*{GE;b}9u)(Q$I8kiB`3jXNKQSV~47sWtr?I$>v3Fj($;FmF|*eq8(%!@G@ zcGb!0RW#ThozB?IS$+n-$u0Y&^ud4^_KRom@JcY+OxAbY8*5~jL@=AIr4!UfDl`sl zW47>Ry86kO%CdYEpPFic^m0gSV00q_2+9PiC@Fx(a3HcKcJ6}gKMrxHJ-+t^_93lqTugqa$klz}!If*1i4NOJ=WTpsQV*WL`t5T5 z_CLxeLWCNqA~KEZe@-kk3U=^S#~2K(*H?5iV;l9NC8A&5BwvdqSky1{1uNTxE3L|h z`oQjZJJ~ktRpj!CcQ@Y`g!<1cH<>lX@zS0~>ME2)Y^`8 zqXEM5V|;!JI*GQ+?#j|O^rnD|(&oi}7xYNP=34hksTj;&ZIdn8Lu@~ z%fzHeJEsQ@P*aU{&Zm8}<4US+DL&I`AKqP(Zqiarc`2txdhzFk>~@n`gq#;xPLKbR z_HB3*Uynae%0QJsCE2(#iZgZdLo$7fE`}FNb{=+GKN-6=%NemXiE z@*(lWML7V}l8B4O-Zrk6ANzOek-silV#hRt%&ygrcWa7fv4b>t%V7 z&Pg45g@CE|FEtAz^jsjz>I8PbMOdD zfqq>ABV>irb;=;qx(BkDy{xx15~$Ksu-bz)8*|C_&xwn+8Rm8YXrvd2lhMgSNW(oj z0Q8hw-z{Y{tQx5^nX|*v+9qlm_38-jdgJVM(NvIHIRI5~i&Y|@B)Fn!sO{P9D0c0Y z{Vt#`%ex`!pn6f1VDuS$MsQz{=dT|dYp%Rhh4DHlQ-ZQYfX zj$H7er#?#Z-MF$Y+^`Q8cm*G=iG9%D!IoqG-`F0FFIS(vVecxRiIdYm6ZhHjYSf@Nd$R|y$W=Ux5;>!?Du!NQn_UP)BVNA6I!o$~S;7mlKdqIyw zzWBTQB9s#j@po!%0jFhj`0G)H$Dcon^Xk*W6mTbhbdh@bUUwh7hc51%?#dPWOYYoX z4~I{s%a(BgY-L~`a6R)IF_C4t9EI7F58E+0Hurhd+(Z*AvZ)cC#yUd9_6?KG3bo4} zW-A+B^A%=|!|e%;z&&<`5r1FdX~Z`-hB4-mBJtW9ana= z)U>!3TqP^F1luOseS8aU*J!#>D$^{N52nsk_=>sIb-Zm?joxDE@xE3|vrB92t0Zn@ zxEi>>32TYVOF76B_bt6d1QLJi3gGme)waj2vEj?j7;b*){r=zHW+b1=qj2&EPLc1b1CFYxXz2@Q>dAsUrLhp#fo$(z^w2D-40;hp)yl1+#vm-7IeUt#4^T>n(MZwA&#sU(y|BMiTs%t<`j` zcuQ%Hnno6!;`L~Gz4&6fNlfH`l2i7;qOib=hVl1f%m*{kF+V6`|b?Y>_*8?4@l zT(3xB!`aQDmSXGt+N6yTEB61zU%bYtRN;?Mv+*a~rPgi9&3S`?l@067d3eZD*j12V zk)7jP8c+Uq(Wdud<{s@xFRp-)^*FS+2U7-&?Jrs4Y=j)Y2yh&J{B>nMbYaZCmKl5} ziD?ua-M3?>s%~sjlebc-Dt|7LTR7oPmH^7v)xq9I1TzVF+2o_bTd!gjKG_!F)j)Dd zTqvJ&<3jYkn1=aDm}pb=#;td`WxMTu{;lgc0;af5EbU#gtempdXx9EJEK{GKGm~{G zcnoie7sJ<79Y}q_BXymSX8376=4BEIX#>KxZcM&-MIvHD8E3oeh(&kuq&s(|Oe^V? zTLG^KXJaisvb3;U5X+(n>j;mf&>{rWkYFyR`EknPmC9$=)-&1tr)}w5>VS1`n<UB38WN<{An&jdg_?I&)4O|IL1_;=rqjRHA|LIgN7)+&ph~{>{ zL|?yWr@zplCS!WuqnFfWkac;^7Q+ z1d+J_r?g;=d~Awv!Pm^bd+^)^$|6K?ZK`QAF3!d25&Y(N!X%0T1l0L9u9l@=VXx`Q z-W*fkHin7#>8^P2hW#h?gquLJtW7jL9)GshW;opyV^vtkzG=+zIWf8FvsNE<^&BU= ze*g04gnz}JXDWd^E^_k?yX&PQJcK=M%EgKhD-~LwDiBWt4wL29Sm7EBW5VsTXCDpt z<&}s9SIN6AunAWJoga%`h`)PZs525BPB|Hq9^fT;Dqfljf7>YU>lv9pNG4=Cuv<@= zKykm0eys}V`o#*dYm+E2%84g#f5&`Jlfqe4P{qBd-g$uyecUf=LSZbdF&C>OZ&qr- z?N?`-&0i$>%Zj>5*W1n!PR&i1*XjWX5b_iLVnsR^8%`~RAbA#2EC{a27ME}>SQB5l ztFxP*RC72GKed&8#Y%#M<7MKH@Mw^)S*N){7O|9tifDhe$1bdFwn;-h8YrpuPF=4A zs=LfyQc4I{WkP)&+Rv0A0b=w~locrueMDFrXuM9~7GDVfq&C=j+M7cjm~^k~l-x*h zw1O?<%V4tA7RH=U3x>#4m-{75gN{dZIpy|5QjMwS(E*7Sb@EQ-WG{*$EaJ;st>sBU z8dEF_+n3?el}@4VA@vdjEo;Uc?8{anCF+k%2(;3+aL;apWxDM~7B04U=1{#w3A<9< zBKI zku}VhRWw4aqz|Fx;RY?cnERFYBR02KX=GYTHqfhJ#&pz454sh4Sr+uU0O!Wrm{DfL z42()cgOuy%PWPxmefL|I8T|4NB%K;r`-xSSH_50sbo>&(*GR@7#2s^fecHHr;j_BH zBWTeN$yT+|Fyi+o--QSfPEPGsEIJvAh0Nf6#FW!+YbtVuo4hFZyAu!#JDNzaxAd25 zKKQ$4C?|wN7N{}3tF^3%f8c|t-k#Em!~d5Mt>i79;7az3Rs&##`g7v5^H=z9(ZTeF^9fNpmO*5*UY4K7nLo(VMkWUvbYCn26eBqMtGofb3@%Qx~^GuYp zGSW};Eb4Q4r}=;P$A{Wh4GM4M#J4~BfVb0LmQ{d&osD1SeR~8aZ0IGC%>-p?eGmh^ zQd0U_kx(LWk(cEidJ!-$oRbQyr<@WYE+&!Qu+B3pFyMQ`V#-(3kpMTeQOVDU(u)2Y z`p8^$UF$ag4UfjeH#WQT)rk&Csi;j&fs#8<577++V+02NHC;TSjCZST^hrgg6Eq-Z zJGd(OvV@dAE^djj8R(4s_Akp&BTRzJB7APtDP6jAp|a8R=oZ-`m{A-rfUzOc1}*_c zl4V6iRRuNLXP2-6i}vy^%W~PG9tjEQKSI0hMywI}703p~S4K5h=s&9B#kLJc@+iC%x#4CUg4bbL| zeQ6^tHK2x-#q?M;?&rG}qosTJAuKgx2o~I^i4h{wr(c69?5OP+lehQrZ$>;}w(*f*(uR^p*E1%FP!B4f_BafkGekB>bK>Yk)UtK^NS zN_DoUZi>M(uq(P}BBy#Hv4NI6L5VqEjKC|wEEHDZdWN433zD8%J-VX2$75$c(O>+~ zp-NRK`{!i=RhR7QO5h^T5B-(+5n^6QZ`gTtpw4&RX&ra&Y)uW%R8**SIIK%3H-0ZF z_&cpLv*GT8mxQ6>;@PEQDxvm2MqM|%+f+n2d!9A5deBA&+l-s5Z2Nh%=R zHQCpSR4=!8D`RhUG>ZnmH%5%>1^d4mJ4u3i7l&lAyI7M?df{Z`-;No94v7qIc`hiA&~NDsMpl14vDoD?67e9du{!{RVS$5+7Wv z9Kv0H|4|vAmcu4cIKjW?>7hZXStncN1IbIsKH4cAexmNFGse>{~+0r-j`eT4Z*7&owKS zt)J)>57<))(kV_4>OR~93Ovk#z)jC~}pN|vwD;vsh`Ov2P53%{$%Pq6%&nMw3piqOd} z^T71*pt~)oF7*u6TIRQUn=jII5=c6Rzjvid+}m!;{ADqOtn*|C-O1dM^a*za>lCCh zjU|p$04sxj2ywrz>8Ju3-vUP8pA)`b@4-O3&pTl(Nab<7*>9pZsB%odEi}RwTzyaL zHKX{~Amsb}bdzG8PW#y<&u1UTs*4}|OiZ>JOg7DK(Mbuk&~8|p%2?9buRWgEp31;P zFoMfJ3;B9~PI`x%%EHKZ+#K!~vz45K-50~)Kco%Q)Os!}{5(hT(0to< z;JaAoUxs8>;ElXrn91vbcMHSOj{**Yf;|gH;Pk|qSzY9Svm1?GEM8mnQrKp3l~Od7 z6`j&5!t>BnbZ=oOzl3UvePfZ@>XlHw!~IQtS7s;by_N9BU6UQ>8S^0;5mvGHSN0Rx zmMBpqL>N`J^I#I3sjZ#_og9*`APQ7DYU>RByZWyK+`vY&|cT83R6&-gL* z>^a|K8H8KpLC1ceBA>Sx9ygdyz+eww_#B1hB5vi zMZj!xI)`p{TSrZ1&E|~(>UhfumP=p$ejw>|WECTaC!!ObTi3z`5&{b8o3%PM-Md~^ zBrQKmMk)eu?1W_!2x)%%kkKXiC;@5i4LhwfO% z|Fzl-o@JZzoXf}m$CLLJ%7z;Jzpvitt@BNo+;2L2YQrm$zX9|=C$26tHG2P}D(fkp zdWWCn8s;_zc#O$UX*J*9?&U2Uz)+vD!2@$;LJCL)>)I8m?-37ndURo3pr9Cb9pN6SC!pv$z@)=a!2&j)tPr<0u8pj zk`;fc_nwIU$5O=u%Q4c8#LkD0z&vj{X+`XDdrtCuY;+8m_N#kDlqG{KYz^8yPxBbH zY8aOOTl>XTll#l8N|lw}#c$)scEv#4;vmHUox@SjUn5_)ND9s@a z(YudF*LsW+9h$f_s~s{lq{c2ux5$>M3all{s$$`yV%d`=M2i*-s6YF=N80e|1!$*D zhuNEl=q)=VIEdNAc^Q;m1u@Q^D(UHueS@2d3E64pg;x6YjHZ8@EASW-PXii@rL+vy zPW7j7aA(n?UkQ{2->g6NnCb^!Tk9*@igLqh3!m96yr1PI9vhX7dM#hKq8Kt@tF|et^Q{=3ovsASmRu#An&WW%GpY}1vLXcKfIAi$);2cr%9+*qqV}#2g#3S<>+d-f3HK~n3UqCDN*N$6C2MM}E`Tr_9Z>yFs7koux=xmWww)$J zNXvIS1i;mgf*#uoS(2|WWXRu`QJC+| zI($vWOZ))hRh`dMt6S9l_`O>CCEaKXgN3gVHWshA_S9N;h$Q3IfN50g6Vef&W~7ww zNX@mBJZkO4eLn3QMriuH?v1Rmb*H*O|MHyk!W7mc65KjlvveD@6pmOdrc}QY%VP}> zy)hXwwC7fp3$s?G<(-$^_>jlFa^F$rNLT!P!1Och!^IFYoHNAAEZbV5Hi;VQTT6_G z)qfJwl}HF)zzp8y+0za_jIwut7xvCH#ihBE(~TvnzfU$<1g0-c|E&`lgFtFpCAqE* zlgxc}97Ho%S1VAXf%_1|%xMmg-}bYV@Ydl_iSB@zgmg9F#EbGeFrO;J$e2dnpo81@ z%fg(h4A3C;ul#IlUR)_qMl~Pj%{d8t*|%q&gcw7k5(GtmneK2S1{$rQfq}S1)c6W( zrHYH7Do_5}v=n4o?|6;csQM66@&nqu62&bwo`is6)9luwhcBIhjf+FLlHARCxL*!g?FD~xsy&y!Rt`HKx*sXz{mf$v z?ms-UewyRk3S!9mejq=c9Y|~S;-OSy! zv;A}SUz1WB3>vNkdAr~b6CQ-{Z1JV_@FiHvWr9jibNIZvFZ~X5M&E6Q&AUG#KbbCe z+TMckfI@_EYLu zC?q4rFboxOGY@T7XwR=J?`6kT7j^9avS%1=m47_U4!0eK7mu6HuM6xHwNu2}N7H+% z=N0@Ez&XC!(ozSt^5z+-$ZESYE5Tur<>U3T7uF->h4wW^$JNu}qehl;J^!XjqYeVUj#QPz48#<;PJQO>AIDhgJ-U<&0Y zN9gAt*`zm^GJH#BR7`n(UmV(zRRIgq%!RVHOV}mkz5SB15gLa=*&+UdwwgOP(}f>4 zUm&ro9;V%%hJiN6e$)oM*1N2^rlu&3mvdvhY5h$MOuU#jwiX}QTjpD`AhnQUVO)dp z%`cUz=OBTYG2mU%>#5$g*lVL!SvSkN3+uCUD%_=Fu6E>rUD7fJPIjZ)#6?Rc!LoDH zB=EqW6WgAozuhIuUglU8YJFqm7mR!}5>O7P&~~(y9AQ^p8gaV|m$84`v)I~wVW1mW zhoS-mxQZhInL{HzBc{vu7^FoZyjkU{jHRPBuUN*pb_=puvBU~foOe}P)Ln<>Juy%@ z;+s<{yS20{lRGWba=iAqQBHqIQgK`N^pX7uO8y)-2taE;V8 ztr)!|ENJ7d1(2SNMReT;ZT8$xVP?54@=QB8LOObR^muj>NYd_6k$dxA9={6%)1zgmqFc-@efd{Q0cZ7zkJ8vX4@q*o!x|2%?DP9aTr?$|b@X+IKBz z!Lh~imh7TmOK)#`XR=J=t7ug-?VNMjAsmKx5^DgI}(k%UYvnLj;YOpZh2-H{%kj0u13t zq7+E`Z(Jy~U8AK9x;GReYM8tXVlb1&5Skim>8BZOV9e50#koBb`3H$QpoEFhqxV&G zw}$aLEp1Em^h=%5{2y|WD$13M?UnsPovBVa>z|%l`%UO9jOJO`Dv#9x1`J~iGF*ul z$2?Q1RV7yV${_N~O7ssl@OKeU91kv!z>lm5JX1WsJ{DL2_| zh>{1O^UgG$tSEP>3$F2+>$Ua_-?3IK>=}BvbC|K@>0M+x$8tno9iV$Wyj_C<8bxA6 zU~4}Og5N-=7GL7c60+^Q-xq8IGM}P4Uck(TeFK6p;Fi&%qR6wxE<2qgo$MUbvUv$O zJdONh(rM}Xx8q9#7h097M&?FA*GK9dKV1X2%W=L!8_5;5sg1xZ%g;+2y;AJMOFRFA zG!pONzdi-?V<2UWjm1RLMDnN8f7>+bja58g*8kv&vw(RhBUIZe)ZmM0F2v>sPPt1aW!)sFjGoMV4iIe5Ffug2 zuucteJZOY_Q(!7(h_9Sa`F*MUz`#%)@zeGDaVDdyApf`fvp}`=Sl}y7pu*KF^>scX z?CPPGg1Mnd;Nya?UiBvod!*H52xNWenyqATePoXRH>cA5hbHD6PX068OaP}{f=p3D z#~nnP4`vl8SD!0I3(1bfC;+NdATc%CSDmS=t3*;!PK;PTT<}jEYhH-~q-eRo+maeRPK`a*gL=1^&XZFZ=2BYDoxsZeB^BT6IT-0t6zS_G$?G;%x2L;? z02TAeP8vJ5>phj}jLPqjQMFsF4B<4_KhCy4#8YkloA#Ce->oe5TVhPhIA+;IMG z(oXs_#D9E+%)+F)k673GtCm^0r=f%5MCksL8|LH)t@b}B`XYtJO3xj$Qy=Md`LWAk z53rA7yYL@2D-Cc$68>U*Ratoc3hRlkp1(r)11uKu^8)#<*j{TnmwL|K&o=F(iAZ79 zztqtU2yaY}fy{UIxT&v9!D5fvU9G}v;6l2Nza|S(qpvHBs{?&sCYE1Q{FLW*+AXju zVU)A-lO}c%P7K{zy^-ZJBK}p}m2B?glFPF;;FJs5Xmg=E-j7adTyhbIStC zL~}=pV=of2@?_$x!W*WRO_iqAup{2W!vJe6BMIwhKoTn9Mq0`dx(E8LkiyQ31>rU=h(c&ZA64uq`y+epSsZ)o(UIU02^NFLL6R{1bsdd5N%EIRdbTSxE7zHXU=#); z1IZxw4wouQT0D@i!bSr^cS>vrk@o(33TxlepHo1;3F)7H=qj9V*Qxr|YuLSL!{ekO zF~0B*O1$Ibqh|3mpMx{gKDW7D`C5v5bT=k33hLxILB>9i?p6`^lnP5 z^Zh8p>Nl8It!5hu(g>aPYEwbR{j#B&jd}vOsept8$K0UObM4TEh3Wf+6(GP=lkO>F zt@nQ2Zj}YtFF1uO&4Ak0$98_#qOA6fF!d?YwfAWRK`}5r`XdZk?iq-g{M3EL!lK~F zEWvVFQ8v+9FNj|052R#EzGtlKA*IO>kVW|qoznJ7xM8-|yFS`NIlk|ozwUk9sMQU- zUsMHfVX24TFxdTaX%s@Mk~^>We0VCDRAv8?7#PXT;HY7t%3Reyq;kmo->;>}TjSDgV!jfr0DPDNnZe1D4~2eJsonp(yz-UQB;qD^~DAXYlj+sfB@N zaQg1|L(z;af!{m4Yko{qI5fe8uO`g@*Sv zU041+aY4jCu<+e2ihCyPRH_x%Km5SB4kiDkTfV0w3r7p#vi!jZMM&;(oX(ABW^6~H z2U_-3q8|+ZB1??l@WI$R9ZAlmcT0ViafMEUJG@;(cC4OhLZaz z#1G{$6n}}aZ04$m9P>5kb5HpQ>~_xEWhaB3n;|iXFj+4d-+8?iWWa~&TdXvn1feu6UVawwQ$$5Vhwbn*aK z<0LU-0Fu9JwIn}DEcq~%_i&NEC~Q`=Zuq<#*Afs9@s1nISTbA%46SrOoD$)S0E}Qp z{eWVPaTd0kqsWkjFQ%m^kqAc7qlO5h0t!!^NB;4*h#v2=J{tXYXX;FnGF^&AO|`G7 z#!Xa7(9yta{6Kfn)Ve8Ysv8SVK$K}S*yK1yE~4R@w4>S>Mm2Bj*@Z`jQO{l1nR z=G5T!r0aRU2sbU*+MkjtIWJ$^@cyu=DtIFoTBB@ohEng!apUGZXXUD8q?UE1lXGDT zcE^rk1@<6X6;)5iO#E|eN~}>sb3kdY<$+;_Ijmv)_4JR%6NfNV73b^W#|86E${ zDFs%MITh=5)f-Kg^?boopsCmAtSHh|Y)=!3CeAlPx=!w7Gt2<+CsNgnDF*@jiJY}^ z_`sD)7j*doG>fE`+WY&yK>#*uA1K4_H~jG%xXc~=!>Pk=&(d=-5f^^XE{GwmJtfUQ z54)OZo-tvtsv%8wKRiDTYp^V>p4|N_a%$9#v5*J$U<|5`his2(Kp`O6A;wtMwZJb> z`iT$}+OmM&L26cbN1ImJ~B+pNG^1h_K}Q#oYrSYjxa4 z8dmm}(17w^s5*`2%e5eGg2INH_QSG7Hv9YD|2e&G$*`8iz&>*HCv3{l~JPEA)IRBcenLpn^#6bHP}_u<6fw>S*m#h;K3 z?6Y6E;E-m;bI-K?LPnozJZ|TzIW2bdGIe_hDZ+Tv7$UA7)XyBp55CR|RLB+Q44@lC zi$$S3rA7Rf(epYwoa?e z{=zfECJf$f`hYP(aq!7*CotaE_+|nH3njluXc;?<8&gHt3zB)p4>$*lYucdM{8^CL zCl51<1itz>*-$8Ad-XLreOj~1ITJ_e#RM(O;XGu`%ma$DU?Ld%gVCARsh4 zYdZuvB{i$<-lMWNzCddmk()N^wc~MkuQhFMM<#{*tx@GrzO~FU;%v|ND^QjvHlA&n z7|5jubJ`ky?XgafnSE$HS@N$tG>4C&-0)iAl7J(VNSzG5)nv+P>@YbrRfAXj1@ zkX@{l(w^zatk-KFm#tHMkmuQ5f=o;G(2$#d=_qJCJINj;k%jCIf~m1*brD70k_Dr# z#IawJ*(lD5E$j{PfZ=G4l<EYk#*y~}!-x!fVb*T)XaDc}aO+MwUHfQ128 zQ`)aj2IA;+{Lc&`!mB7<)-Vm*=hk7h%1}<{g&>$cGvXplwH(SQpiwXD7b4!oyV5#n zNnriKD1tTitXURsZO`&2uM+IWlHG!kT|FEI7YS#fAgR1MUAa9gx=2$~=LZ7e^>s3| z&Nw177YJTS|LXBYSvzgFq$#uh)23t6lp!k9EZfGoBXs%;ojC+8Y*3Z>(B$c7%20bP zAiyrd?0o5zZ5a?{g?5AIUr9tw)GNYZ&?HGjSl}K%U%-VD<-YB7k~jxYeD*600h^AF z&;GDp>$e6%g5K3_AH824z~*#SPuV_xQnYMF#n*q%!qt2%21gDca+AhXydRI@&qK22 z(kOQ=aOBdj7U@zJ_KUsuh4jkoV}PI|>|)l}sZZ-AJ5dQI&&iqIZUV{DMV~#Sf!JAG z>1K;z=ukvnlW}*X%2^QJlMjkEj_#jhe(^P6Q{x=}-OIk*X6ebNJvFXXI3KN(@f_+n zZR9SHTdc5jTNyo{FJnZ+ zpLhREP{*HfTS@L2ZZ7pS77`jjYJ>BWjll;XtFPtsCMVEX_^m-XqHBiS#7_^+AM9P{ z`U8oCC)ZD1i+Xp8@ZzDtyNh`)RE~Sk|2qBJa>4&e(BkR44|d9?h`2e}OKt^ih+ub) zvst4?0LG+FYG}XM1!Jq(vtqMSe>*Br$*J`?<__<_`&ALxR7B^E%+-E*ctT?-^U%4CHOcsl4X9}``T+EHV3seb^yGz**^$in2~ z6ndLde{QIMlo=n%lf9IhTJ~)qCiJs@L2BDsNO{U4&z|P^{aSQw1K=&3_+qU4Z#dSA zV%ua&Kd7)#g}|?b1>cmd9bnOpI*?d_>Lh|%e#WJ_g*|x#aZOc?hQpj(&8_9Z5|4aX z?I6Zp)w-~t)=*t`hLQf>SGJZy*wcEnV*!~d$<2$)uI>Ow3Bp^XrAtIHf!$L^=BD%+ zH*|xUM3epAp8G~vu%aifDp?z5zY1=$uT`=VE6;v$R|)Q!tk2aWeJR1qEu5Q&T9FdJ zO?9C1GdzV)4 zZ{GjF=X?K}Uy?jtxz3!|c^=2}uwP%A{y_sMCgcR2c6PCg`lP{msm&wxpPld&&5{DU7!wj#bkSy|qu?c5 zm+IHZrRs*O*? zaH7X z==Zu)FjlT6g7SNh_R7LZe4S;4I2=JHvL}{ATqf0IM()*Da31;DH;v}BFjOO*7VMSvV{|9Qqb6U_!Hh7xexw(eKmM8)rpO`DFK3P%>Ze`f zlae4Gy3>Rq|ABwcbmM~Hf*=Dn!LGUFSsbDz_)Yn@mfW{ca)K9WfMNd5Fugd$t|ZHu zTqttW?6olBne?@n)`=UJI%xLR>-+p5jT!~b!`GA0p(p!Pd(Q6iFC2EmVs+W1=*XkkPZWzc%)kNA!HOYSPR{!d_Gg5_UH^0aNbh?j`K?2416Cd!T0h zE1Qu=xnHH$NNT*`%aDz=cA8wJBCNK9p1NX^ba=c70Yu%Vj`T5#;OPBQ*&|PCb40&N z4{RL8Ff^z(Ds>L|$j{m7V<$pQsnx%`H^2k!E9ZZD$U_nf`4oDo&uyls9`-w8QtPCR z^on;SbK)&=6`~)!)4~f(TEs@i7so_fV{>2XWqx0r!tpIk@oNi9$U+wPbL}ecY9ET3 zMh#hI%1-9 zMI}(&NyPp~xtWXfz|A!B$Y#_*x~tVXBV>=D~{OiAJVAe?{Vwyg>8$roH1r7Gkx=c@@yH- z)$wkho`S%}ta4o8={UI-oSY$4HmYwu%>5-W6cDR7KPlFDV~X+dMOlK%ko!Xx52IA9 z;t~^Y*f!iQz7JAcM~0o+nB&i_kAgv&#%roEFj5~qT#Pc8-gClHwCDem-L<_r_sX7Z zvGVSZcZRk@EIfx|P-*;^c@0K}8OX%0TE37m@y@%XCY@E>*vL2gWA7!W+~52zCn_z! zHbZl(WBcz8$isR^OF+x-;Aj7(-|CUGL-Jw?WTfn#E>OxkCSFp(_w-c3#^L$j=(*Y9V3$x3^#sjTrW;W9`*yzrFyg-AZPnn=dnU2S%Vji12! zVuV4h*8N}bmCDhPkVHOBlMkMWE4ja7N<7?~Mc3k9FLPhKG{^M1F&L2*_moGqNAW_? z{cQIy#Cd_J2dw)GpHN2Vf&FRY;&D-@VH!b|Q7g++KkwTKe%)S~|7}alPamRks%LT| zkwZl*VIPU$Dj-yzrGvT(1MnWm~3rlxx2&Hg( zQ0#eF#ZNx?9ML2(1=^rr;*XU5`}L>TLWM9l{{{CHsiqoxV@}zHe$u~8uG8`UO>ycA z9RUD<@lat37R^~??*zN`d{|4(;iSRvfPpkM5YF>H)VKD|cb2DoSwSj!Gt~LUt_n-R zvb(v|huB}Ph-#|$%!0^U^VWym6(yw9hn0+Mu|cq=W6=W->HCE zTptt9{tlWbDr48;DprQrWPDjU$hG;B5nvmvn>FqMEToXz?#@r=M-|t3)i}-=h1f?) z64^%VV_oSG4nmzH^bIlwBJHn`vq>D2+SN-G@X1(Q8Z7YuS9mY%5+D>gR9_lCJ&DKwD zLEHKUq=}l^CesKap(tMFop5$FsX{Czq--e#yO{x~2Aum9+WzIm1zkw6aUJG9pA}!m z;y?^hf9i)b2ef6^1v=*?-}j?pNi)1^KNZ$7AvL<#=<|n>&x>_9r@y1OY12N_9a3(Lj^MYx@i=CAyBeKakTBssO;ypun|!_Q-uc|f z)+bM?l-l$4$S;5+pEQ0bQ&61Zf4o9x-5sd=sUf<;4NzK=5#KaQn6oS>MC6H0Z@j)& zIF-s;+L>bRST6>1ddT6zi3aBgII)P$a9=PpH0dEcOH@B;VsLIv1Z)->$zie2OqUFt ziVhIGs-y<6XO(79xtSI$7@ptz*MQi|r``NF9eji7LS8%bBM~VG?L_Wzw8_;X6FD~J zN&4VDWSC;@!A09Rfia`nFqca`C7k$MzXq~k*rsaT7%C28tvr8aoLfa){8npsFGMOJ zz%Oq1B*WtYP+ZdPuHv3p_OMYD@Rr_};Fb7Spwh`YFJNr^lBAT!3e~v)lQ)SX@fnh{ zHBTx4qL)o1Lzn20FzgI_2)Egbj$09fDv}FQ!BMD`U-ewk6pVF_+c%56MfF2s*NB&i z68Dew16jP5%q3vNU=-POkJisc2C?ePJrH6058@Nw zcYB4nU*jv@F=0CItgR6ij4ClXu8_S3Q50L(2slu9?3(!K?zT*P#N{WlZ5h$P^+A#5 z#*PEG@(ggwShZ&KOWDf5VwPIhvYVYLW|BOL-dS7BNotBt(L8+rCE z#g6F?vmwyO>c%6c8y73ht4Fty&~ad0?Gn?lwXWP6Q1R!+H*0o5JRZ2h{9QFawqF{80O^lH2w~qdmzpX;*zF?vC?H z9O`K*y=z@eg9fE&ElYBy5!dv$x33IiQ1)egCe_QEb|k z(Bak|BECZu)QH&VHOJlh)<5I?KDkgRfm?Qc*ZDwSD{QtnD;KM)jAMrvvyP%S0%Y83 zyZf%>ibx)=^E5sgH95%K~+8rw`bT! zltOk5==<-JJO<2CX)5CMX>#=E)x|R`aYAf&QeF#oPAJ@ zac#w4IM?&l5FE~9nC&#-ntgLy9K_{WdRig5^XbqO3nz;Y%$+S5CU#oKG3L-^Nvp2pEUc=_>mKpb7_7imeX zY0f9}LCHwl=1FM3_B=oh#t`eY<*kS5dH{thZz+jH`GBnjF4`Tj|M#f z0*?PO>F&FamMdL0$Ek&hJa@(M3tJ5jGhV%DMj7ts*HZnLX~#mS*+TbMKrwV=cm$kT zfTaY(wOZWUky(h+9^8w?kSdRkI>!iLo%=Xe`*xm;;sG+3oE6m8y_v3PPQ5+r=4ADs z5 zBR?(Vh+2_b`= zioKPm5Z#jAt4fP<0TgK8o~&j!EL{KP8XFR7a3Mf>p0w(US?}s0OOC%!>+Q*?%)wSE z^zcgEXH$xWO66-Pj?4`V>N8rIZqX0@pR@$Q#rOiyY0h=!;1m6E8j6&$8E~-hbF>(7 z?WRLZoz7!O0t4l(JetLsf|AA-KH?ARW9o}^mByTj+cw%-T{3vO3q@S9f}e$Ya)lVpP9ryqC~tp`ZC zTBzHZa%QLve|2?Ci(pGO8b{X;OV?MPD}1fw%oN$vbgt6niB&L%^8Kp0W(CoGz-=Nc z?)FD_`s}>hzJW?Wm3mk_ZN*nFHMuAbIIWQo*-zG2<=2&*ekAO|TKOm#ViTt2scrTz z(`!X*uVCoEOdGK03ykkD^S?qP4=2TiVA#IBJ3FzvVIg+xRT`JjjbwiEm>tN}-~u_o;z+7e3td$;bVjZN=c$S$u$fq5@HHckh+@J;XimmA9S!0}+PHy%&hz_s5EFBw}Mn#EDr z4g6-lBQDe@Zrjtug3hq=MQT02r612B3DgICmtC3_X=ZoN9$PF~9~l$rU<3jcV6f{z z$(k(zUa2Kdod^sxeE0ov!6NEm;jm7tjmD<0N6_sS%bp9HLx-_LC* zY}`{&<$9RRwtgA)D&-wBR8(k`xmc9?!2cc#$r1D70b0`H(CZu)gtdHZ#d+n86;8CS zqMnv=pQE+*R(4fqVMe{(jn#1u3;cVTp?%jv$Twg>prX0MdxIohWIvgEz7RnG2En;` zL7BaaZk-itw%n=8bHnIbo>X)dXt|pREC}^%<}*h>KRpMt@p@ZC%2^;1o8_pz#sR&Y zcdOx!1qe~0qPXiNqD}lej;TX%d*HR?8$n?}177fWuxgi4L0zcGc8MG1PnlK_;z4m` zuAr{-X7%eTl6i_XnG>dn3SAE&mbem7^7lJe%gp0zS~ODH}PH6kyN{rIakb-Ic*knXuym8}`T@lLCByaYuuio`k4z;sw z#mP(%vL?`bd|~lz%_jM0EpEaN&Tj-+5#>38#d}>BgxD6VJV?$Uin(DO-*cd3QGaj` zQn@%7;@e=7pz`6jQBd8J=_WBruBb{Zy4mhnp;Os{4~(syTKsBa{xrczWctUYc~bNjk-8i5VM@X4+g9&ygjyI<$zj5ynP%_Fh4BppJ#X$ z+I!j3s05EcyC+q6(h^H7>Jo^*whm?ymW)`qdjYW60Kvr{?NcsjzkN3Y?-+pH#JDctXPSIaB346DRzd>Af;1{O^zx8dSXU zx(7p19)vfMdtq3at5<-zMKJG6K-c62BFFM>Mxevx@7~C&Q>}}!miK7d=FB6_h_VMA zov96;=CZ3@_*g`yEw*Kl`>p_wY*SJ)q$e8K6PIGnd#L!S6G(>rc7|csQbZ<=P@1a! zASM3D%2kqCac(TNy76jb1Q&HGFDZ%u;5%dZiZtI*;FiaYD6G8BPLb4^$_VUJIl za!^*v7XFV8=Y$=(UkHczJ)fcA2*%jKber17v+R<7s}$%I8$WbbIRfq;b*G8*ereoC z4wGpCHzE;H5EfFB-+%D&U#8GxV58aZ>e6f1R6ss`>lBNJY}@?rF`LGY=P&Oxg(z%z zZ2Oj!^iizN_`MIl%Fba|azpeV(g&_b%o3Sw$<8e1`kks$$aluO`LW*JP6LdP} zR_(EGmDY*@t>z>s*ZY<|(cZ)IZi|Y6DW1l8*$UN{UY;(|l?%65k?V(rtoY<X?R%05lR5VtsegS~pd{#VZD%E8^70`0- zgW>-_p4ab%D8m(Ou#@9KRG>r{{tud>Nu5o#gSFDd=EdDoXU*X1iKSE1YQ>Ew7BnE2Zlt-DBhG^fIYlAl4`vBz6z&N z=^yV{-*i^W{;PCG-C6EA(GA4!iwYYSthKVk-s>&o!Y$WxY)mXeGEcC#s+bEm%~E=) zaF-i!^WC0?>ugV$;)IGCFMjm5w(q!I+X>w_P){r*JqIPO0k-X~6(_u}@QdX0j8qi7 z+H(a2J;`u+UOHQeO4{JPpIOLiZZF->W^W2m0FE#53X)4U2epEt+Y9o;Q?iW`#sq`6$nNBKsmpWnPaz1fy-MLi4c&5V}9jQ)yUmd2;fesITeNqQK5axgsat1 zHp2P#cT?Ev#4fAy1f(<#HK+R3Bsor#>5aaAK(%vdBeJsf@{bD9BKCq znCktfyUF-`o%B^4p!Q?UpZure`7-M2+=%zLPbw$vJ*TEA*=xjfCBMJ_GQnhJ<9LW> z2&v&7ET#_NxD30!ICM3D7Wt*ra6Ne4X)PdHHbLw-vy!lhEIIaCim=kTZlIg6yNle- z>`5}(S^DRdR=JSj!!w*n#uQpus!BSSV3chiMIi*rz$dCFZ!OQ@ZZAFYe)%ucbx)gl zes)ji#k49V_ZR%Mu)t;9Ld|hTrD8efC)z}7KKveK*ymrS=Ita0y}AC&6n!PSQD?-& zp~imDcMwP3tuKC0`^745MiuUxh#N<3%T8`ZWM9<1SCx3i5FImg&P_yVz_9;EW8$9C zt1D`9E?;t5B&cvwf=8%VELr8Ov}}Iu^Li&*j}oaFt?tnk|2|bDmr1){xrq(uC@d~l zUau|xs)b^ac*)d1m}|Q%-Q9@iOdwkenY`i9C@`GjAHUaZ_qi%{$<>7@%Hxe$SEns$ z+z

73(gEe3mg)B7eAN`>Ffa=BNPvxPePN73g@H|5gamdDOhIGx%&sI?AlDYua)o~tA8Ztr=Ozb zeS(k$OY((0YRg?&U`aZCSH?ZyAZ;Dg741`<_biK2c zbgQ`gO`M`$Wev+}6D)~p*K4q1It5u>N~i*_drf$Q=!cdHcA=sIGMS5k@VXA%o=8a5 zTFo_?DoxEQTJ2x^OD(ugo`D*YgkmYZ|HN7a@h9Cq`?9uqM(>SMC`b|S^37_m)Hl-x z&OpaJ=aSuDc{v}V9a`=%yY@n1WZ`Ef9v7AL*6o{b0FVpEw>=5a4|j+9@Knu_F12%d zD@A{a-x{q9l7yx>)@JyD)ewhj{&e3}f5BLih8|g=f)q^f+jXbcBbh?)r-1 z(tG{T2N*Yx}eC`K=*L5u*2)TWAyb5!}&w0RA49AHcj8%*@An{*{9?oTv}f3 zt3JS_@wWLpgp*+H$VvGxRw2@(MM8D}HmO!xDfp}4$4YA;zwX||Ut*#;gV(I>=@G!Vk z%0`@Xd~UakumXHvseJDB9ciw8D>qO49~ml%in09aCHmFbf>Yq_{ADvD73Vnt5CudC zk9dHFaBVcF>g^;`s=FsVwJ@i1IEaMAqzMpB&5)@KdpUuDVNB7KiXPS%2{)n-?( znJ`!2;{HQ&JIDplu`w;s;RO9EEVJ!r`#NWjqn95Bp&AEDzi5D9qliACD z*E^&Pcv3+aF&eQqlW+PF49u2xTg)j5JUUWT>@i=PTM`Mtjg&sL^=oQW)YB8l1C^>t zi^e$Hu|p4j(?%fp-~9qfK;6_FRJ5eefy=GGER;bb{y-^|uUDSu;a4q$8b2=zZ({+7 z7|_`c{LkCRT=thS`M(C0%+SMsO#kx!uMy~j#h<)Id{Bh8>pwRSIIo_Poy>_{a@O?{ z`HWS2?gtRY2L-6llHUO0@IllsIcebSr2B@af3BP0=9!g(?$kN9e17j@m&dMXa{SPI z?i^PVi-X7~Nl{cOcQW*Hne-$1Pzxqt8ADJB59Lx0uJ}{{hZn(`uTmqr%`R5lSqCwb z{6Imf`;zJ-wTBw=rq0-^@wY&*`5H-8=|CUHJI@KeeBYMKVzW1f`kQAGWVFPtX&$9$ z4u6$Vxr<-*C!Yp>!Da?exYsUX;!`FA;*`}2${JM19>H8lM9Y5V&0Y2UHs+P94$P8< zb}8sy9#8oy!>K8NjEkS)b%MZxi!As@rFpvUporzvLv{fR>ZN~zYc}`Mq(3Ey9J-XqA*&!tac`ER5loE96C&foW>46aPh#8CGh^8{U`x zA*T$|`h|gmwCB3T2kHBddg?*{GPMup(x1K{Lgju9S|kAypZic6^lwCixzEQwOPLW4 z>KG59{_JzC3aqJ!S^HwSl4ijr`Ix}6998+9*62OsK@@(th=!ors9yXSY)MG~C11x3 zVqTJXdm%9wLI^F&I!-^mTnmiH#A+`u2+hDRZ)HVq_lnfoFL72Gf1EiKPcep#OCWtc z^T->3D>2+>2`<8%PTJXBqB^_f6-zdWrC8q!5pIUv`ya1~N?1 z5ck!6h@d?9g-Rnt*%97&f+Tl$$H#{CwuHG78vo{g%H|=rTm(uijSG}Z{G{3Q5k1{Y z#a|l|z!7bFQBO~1FL?r_!22l~rV|S&t!omGQsVCLF-m}ToM{nV)B*DHe6FwA3=t^N zb<@KI@Ub@zDzl~v--!IyVxS)!XNs0BR7Sby zvxW?0wysS|wC38*m73MlBqjy{)Ikf=3tUIi!4fpx0#}N0=A^{(*GA(Yiy`sm# zP}HAp<&ZiV)lLtq^oWO)6zT6~_5w2 z%yE*crdkxGRnMOOIu-9%+Iz9t`0XZa)y{IME#QiHtaYk+=6cxjGI=+gN9 zpMcTq3%=V_9iHW40rWzIN6`y~{=q2Dr`B;3s`X~5gG$a~Rj;5gg`9U4%Z+2BMZG?( ze;=DWdb`K1raNPKPa@!?&)4M9s&mIkxs0knkRU0Ex*rBVls?p4;pC?7TdTDsZ$%~y z1>4^A)M&E#UV||5#fU&HmYP2pSG@sgpuKer&Dk1nTXX$L+;7lSKf{bRyj~FL(XNmf8h?P zKXm_@X7_AiA~>i_IlnDHOWft9zEab-6+6dZn@H4)`P=6hdGs(`uXDF;rYjaod^AYv z6?@;If=V@fvXS75`so<&{Grx|33aIfGCdSp^UPvh2N4Th7cT_RU?crX{Q0}8IXd9R zg;>KL1)zi~X*GU-#RbXe5>yWs7blHf`caERdh)&ZDbI81Uc&{b`Y7iRk1&NVo-)@+ z)~Ce^Ghb6f5)iR#VVUE{v*LL2pE9+;s(2?i>6R`h;BC?IU4P`R4O?A!cD5+>1zx&* zbek4<*|Y2rPm z@57>>EB9+%swYHrrG^HFdL1738=y4~B$%$n7gQ~A%5jE@Zaz3LVaXq^q50J@CN8sH zmxj80O($Vkb^c4JlP0nVuj`~p+ ztDB`M*lac(92k%f8DIL*Vd3T0RDJw;5UR~TC6*=gRel6HWoxJO(mXMzFlQqCue*+3 zIy|RGP1oK*-(A=Q-kO7jX5sL@vd8K*NJ=^XNf_Dh#kkr|>j1QW!*RbDl;dI4o<@JQ zYG6XdD{)aa*W=8ya7Fk_pbhO##We(=v*dtlGR`Ks=B_C9Zm6AxJcK4Wih2Y41^i># zyAt^_IsIv3RO{8M*azU#oj(Wax*iRY_e z5{N)0NzjmgNIip7cEEXXv)r(w{-lZo7(*&gNzJMmST63X7PXh=_#{^T*Wll`J37A* zf(bbYUoM7v@)zYX=qVMpVK@;#@xQ5}wcU zZK|;|?skV?t`LZ&vymk@zuW1amjyvITYxWC#K&ks~l?eH<`7j*Fd+|_ukf41>OexBk)11g1ziVIG1 zTU9y^$Zq|lTx{cC7O!9^DOQ$V#VHI`p2m!)6MRzpQJ!&7SgA%FRhF46^# zszJ4+1#nSE{pdRQwG`3Aur2aV&;^0SLQcGt|L%Zl#gaHnbc5`-z-w{ENoE*tAuyZ8 z7fUb#obBTA{PJ7ntYAt|n*?RpneLgo@=iDtUYxK##{U)>HW+AlGzSY~b!}BNd)$|x zB|{DihT>*6uWML)_wH$FC;G*pvVsof6Os*gBMUg+MO$jx;yjkdx8X*J_O)JDR7sk9 z+b=;;WPA%~tEzTb?ZVHP~l;<7I|_hvc(aZFmONY(jC;N|64(M2gNl1KRRO5|H=c}c)yK< zQGxP)4JxiT-DLA2_|#UjRJ4gjVBibJpz1!TZ+lCxV|gWJ$N~vaZAp; z9RCzRrgIi6ln-aGK3t+>3I~!5)26Wbq-$rAO(UIw7jX~mrE&i#^cBn9kKnMjy>e^s zrt3csq+f|JF}W@&dH72~+#9S^rdWCxU9BUkZK~to^3sN{zP+!!Si#QXAspb!xhHJD z0E@G|TxiH?O$?NjbBdp_uAE#_Vq`^ixmd{sC{b9j6V*pbos!j3-%Rd*Gf(anH~)p$ zNQMr>jqZ$_j4E*8nTKPpsQ6c9Cl|$!Z~=SINa?-ocO~0ktrPv2G<&Q!SHIJ%6D&?()JCU$Zc%kX%o?BVWIig6JEY7Z(qL zm)!Nlryzs@AyPj^v1u&kX4TTbr?bM`7h_{3OL22ej_vQN6^Gws!t2w)Qj!2$im7Fa zDp|pifrUodced!x=J~b^_2&};UAF^W+zLGM*cuvLM}UD-8UEA79${$(3qQqIc|kA3 z+ondfK)YI2vqd9+;$0K-wI=9QM+*6~s=F^r-am@$epPwr9DD#xOnqB4T+Z#njiz7r zBiy1UI*G<4p#*-<+voFJ7+Z(-Gq|G0kcqp}Y&)NC+`hLIwJ?|cSvB=R2Y8;|V~-Qi zffW)cB!8IDv}99Z6N8LqG2hW?xjr;T{T>}AtB|;~>4(^-(a=O(pGE(5-GmfL^1Tdy z(}0e*l;U}Q%r&3P$GEuqHd8$tG{F?pC~_?)S3p!e8C;T^>KVCRa=7Q3d!{(%1cdzS zLOv@KR7((M32d~P+il`=GDEuXxc%s`P8nIcibEy-%Vbij-l(dc1FsCvDr*wFTq7mQ zSC{L5%4Ze=LWii$-h{nGya~3G{T6kt(ErVBzRG@d9cYO@0JN?u&UtA@qF{gKz5QMj z)2rZMMul`p$T{_ihQ-mt-j$13R7RFH=mimsgnp9w1T#@sXJ>liw0dbJ($h_&tiS7@ z;h-j9bf}3oZvUjR1oN9j4@=A(*>3?$aV*uAw!%X;?A(tXPo?>}@NY+pdaUdgzaO4* zL4W%+vYn1Ip6R&SbJ?8fpj!Jf!RD zJzb7>uFNfRGkK{mXSkbp(!Dus$b*zwH{1mx9V?7~7(|MEeq(0#R{%IB zhBET)qN|B-pF2%Ncc^ z?0WKEKk8>x|Js99)Si*yt%YgGpEgsg1Zah&e+895;_en?7tq z*vXIXG}IgUICv%1_O8?=Tl_<&XX_|D5uHF22f-sr0?$vM6G`E}0leZix09}`$ zciQYz)F9zzD0OSqw#qtLtB>$7^9``YCMYdRANrR=O@wxOHH;j~Yc+dRk@#`2#HA~i zC@xhMG5z7~n!7shTds<|*Aj<+H3`zO*zVX5On1=WC@V8PVl)Eksb<8jz%LL-(WxPY zi)>un{Vw$d$Bd?4y|)A&2;gD<~oj_uO?*2OM}+ZFiZ53{A=YoQCtz1HIo@McJEZufnT3SG`7g2Set;#`aJ5KFsRbpB0*BC5&!2&u| z^|>Q44U*~0Wyub2vG(+`F{O((&|O;1Kz5twR4z#rtWRo*rF##XIV>5l@yft}mt=G> zO3RH}m-C^DpK62FU57xRgZTq3UAWO|l8i??$k3|X42P#Tz7^Ec8r|17aJ?dtJ^P&W z>?D}bk_kHPZ<9xPYOwGx2 z2MEc-+9>M1)!+uZnKz&=IfLK1h5>FU_%rk(n$e|E8I(X@6;H9fr0?q4+Bkg5T$Xcb zgXKD3mg7F#e}VR0kK?bY(K&sa9wCsq(C2~tm+9}|AAzSIi8t*Wzb7y|59QMCCiY>xOM`Fx1k8W1`t+!Du>pvsd|^6Q#nf!1efe7|vrBg@ zozj5SRk~fsJcNXBo3PjmQ!4{B{kz0}V4l98PKDaavf$~~8~IW#bH6W+J_u2{RaNzl zDl-u(1nY>o0lqYq4tT~ju`D>GFC{AIBRNk|*dcnqRiR*hklW{xz88vAEgYGW1&ESb5YDs8|+vtw>HzEmO z-#sKK;)fR0u-Wv$JR}q}s4Axc>Q;3LB+=K`yk$XlwMG^ue3_`Gh9n|sVaNz0z}koa z`zKLX0vWI|57Hm0?ioR=Zj3e9#1biG(!)cD=${$^8-~ZfbGAX7WUEU;qg(u+MnA%N za;4%XI$dCaY$hanA8H=EhxS=;L3W?lbGD7_z7WTO?(a3kgsyuq1F1f-d9gi~dETmq zVjehIzWvHn825W|k<*wVe@qj*L}e9b38Mc?1NrjFSY;RGfxd;CeO&XU_l7U5ZJt{t z715@>HJ@Z>c;|cD_wK5mY=q~PB&gW|0f6nGybJRPadJQ2pUja=^oU& zuo_6^aJ5$fIu0xymMVQs3bg!C*JCfzIY(O7u%oHuoa;JExtrs-X|g}cM4lhU9khKG z-O3|3wA>k3gqJ2H;u%Th65wK$SkI5!y=H0e4YgO(ajL56$iPxb3VQQ=$8tgeJD%Hc zDD}zLp-(2Yn-BWNR-N>~czn$GgYE2r2ps=IC+Ky05-^1NCZ(!{XQ?qK^|_8kYgTTQ z&I{ImvVCF|@Cy%C8hV~RYkh%-a<1qT6RdpjvJ0f-JWzNZRKvlUoan7SvR?&GfTsjjYUbW0LeJZ{u9l7`?GYoz46pC1`V@z&|l2%HmTgnCc1a zISkQEjB?;T3CL{1ab-G>W0gzO!uh|j($}4D^hMl=d{wYrx9f1Y-;n)I%5n!OMdQwzx^LQp3Uv3>-5Xr1(f!P4)F zfx|m@myKi`gje^cWm9zm3vK-uJqb%09%*syPjm{P38EGV(8jaG%Wc4|F&ItF#viOSwU4>tDy6Y)BR>j}|FOU2?r(Th@lK=vnx{zVxADTv z=bZrYbwHz0(x*PWk8yENt?@#(nw%p+Wadf%sw+>bOU+)Ic*qCw&NSh8=DVai(*%ls z??4s3gANZM1IWw?v4kmSOtfi3^W#G9^ACnEp*cD=^L&=EQcNsYDUQwBct3*Up!j7p z$x;UyOqhVQR6D(`4j~PD3|Akg`8#i2&jX5HwE94|7f)@JTJhg!5F?hZ;@?JID@@)% zbk7AMl5-(tTNts#!}rsF4L**AHs<8D{d9Y&+Nqm0QE?IwtnkG}*hSp~fEH4OqENxy zkfy)R9TS$9s?mtp%>KApWq@LO5!aFz=M)>9V+ZZ8V8SePbcdHa7B0sZiw>!D5ldz% z)|ZN4%?CVtL$+{|c!F^XyapMeG&?U2hX+LP)hONG693#GiD_udZ&*=Zz(E?wz7h7E z14ocRcn&^lZ{y2?o8&-2GyG_JT7j~pW2+^V_1Z_b%R-S^gy~|0yk3RC*8IuVZ`llV z#|*f}hBPSi{iHUQSAteN_>~ZxS`n75B?`Tn;@N3<*vL#Pe68VB8TuHc+SMlN)_Aj} zPUL|P9Hc7hdCv@*zz{o&fq9Lp&p_u1cag&20^EXKm@q8mLq1G9eHrMnjqF;|5fE<(j`iPH}dhktZEFfalt3FVB<;Jd^8LnNzH&3MI6U0dWBxg+m1G$+DA{d zkda{l*$$O!lHxuporhYnnU*06^q+#foE)&pmHKgze^@s0Xy zh{1oBXI{$x0_}aJdJ5u38vuar^r6Wy1L?V8A9d1!v;jU3(7_wdqc~oeTZz;0m*U|` zz3IkxBzNvp%jXho9$)ZH5%v7~bf$EFR{OgmS41v`I0*w%GJ0+VJyB(PC8}&E|E_|g zNDBMAR@rg68Fg05r3@nPb5>HrL_yzqSb=g}uVhedjH$2lw0WKU#wBGJrr5A)eKWWv zzIZ3UNnY%6RaFG56{*{A>Bm({9&ba-yF|2i^AAO@wtZe~{uNWPml#ZB*u{p3Er5`e z`--88pdvVn8tjJ}iid~Vzo~QubIkW|3l*3?fJaM>O>=Uc-i*PUc#|&KW>Cz;c|m=I zAtD8!zd3gEP`&4Gf3<(vc*#SoM=Ar(emL%M9^U72!tEpyn;~u}_Y_(%L;yOjk5Mzm^);*pqHv{ijPj+SPTTs@zvy@w0Aq^`?6a=Rjal4gMQsh_=P0 zcE7p!DSv{{B?*~=CdKP`D}u`+R2^MXvj%m(`2 zv48`(*}iVh1gOy>kZ1BT`^OyOLx}ah5emcd+H<2;7 zOR;rmWI?a-<|I&*DqqN^VoslO21J+s;x>V98Q7aI(NtdV1Z}?xR%*L+U?&`e|0!oF z9A}LIu^~umW-sF1Cu&Wu;;c#BM=%$T7M5}^lycdM=`W&PJ}M#jC#7xc$w9VG$tr0F zii7F;9=Sv<&-17nA#LJY;I{wVvSXtkxY8j9**ju@)uQf;-ONt&o22%@c_f|zQi zsG_Z@B?&E|HN-p<^H9_jrASaBv^A&Znc{o${hjmby!f5}d9&Z_wf5TU*=yhHdG7nV zK36>?Smqpas>RF%Neri*Vfj{)uj={yYa zbKKwRsiFmcUgj5aH_%N1LiYL*#;|-zo6qOJwcx6GAZw9f#EN}MyR11L`at6U9aE`! z`&>{<;-q%Cv&plfo!46`!ECwItL~w++Wa7irw2m4n>lTC(TeDfjFg{v6)zLXtTLay zixn>O{^_wj+FvCK^niW>9AziuBIB!%oT=S%{;9u@+L~|L0#@Wq;cg%F2N2;0XR@=-5pnppXI*q-| zGrj*dTcH)tX)5`ntlyU>;(d+W?KE#=an9)kJ@QG&k34e@Ldr~BkrK8*$l9=(3Evjt1=@%5&3o;r}IUR;aw+$ z0C_Yd4qgy;XNIBSn&t&B^#mKT(uZrs+#}mNn>zio2!w{n9xKWhCufQ$VWu4Mt#{8p zHINzf>~7Yi(>R7~m2z-jZIV@s>cqUNwF)yr0Hu8?BPn~28W^Z$n~!v{gmRv)uf3K| z!fz_sc{>gu1{aWNUA=Q_$l%oaux~$9Lj@TgZUnj3kB5sZp)=leuatjty!M+;%AgXz z!!8XZS1px)a|s|bq%FRE#_#ajQ?u^A)VQGNdWe ztu}c%vhrZ{<{0&h>YWAIBT2w!bw9<3kUqu=1CAksfR>Z(nOOAtf^rISS%YCxyT zf-{nxHHG0jxa=o{`QG!$Kmlv%D`~b4fgakDGEDp zr%qKjto2ql#45wJ>)x1JXBxE9r3P2LCo#OZM#L4^L0Qn7KQ+=XR*>Iw=UU$>W}}Ue zzrRAyCn_mRUKt~0>CA0QngWjcG8$dU`@ju*b--%Z_6j;?;JaFb9f zF}Xi#*q;+3unHPGzWwBUExToDY`0V7rrN}{DSB%>6Gr*aqp_HF3;w{^c(czSz0 zj<%cD+OpHGWL81(v-J=KG@O zhOb%ICqurURM`ZD;e`9TnYmi9=_X0f&7fr)s*udM+5+FE33N<=P%vP5@#)z01HX%Z zthratXL}WWI#nPxeJei&L=B z`0vM*f0+^NfVZF)cG4wbsLhvA*u^@$#um=PR+Yaw@&C?zx|!3OSC)xivPpyM`u<9y zG)dg=$EqCH)d)SNr&Pl z+L)F}8{5*hMPh_SX>N~WVdngL?~mxoDXo}D9lkV|)iSnovoI1dcDBUmit5kS(9-z% z!@FMT!@KHI9F-zbh%IG{$m%_%QbWk&@Jn^4BI_3POs0Pt*XLR%XiYokmz$Yyi{XKq zDj$9LW%5^`S>rZcUfdpB&cw=}nFG72FQTZIcdvCgbCB(~$#ze-BFn!Ia=H^sR+R0h zwpQo3d_aZu;X{AAHxHo>p1F43=xH?rK19j znB6blhN-(W3d{eJT<0>Enw%SapF8=SkJon-MqIzwV{c z{g3Izwho_{mgjnf^wZUix`jksb#p5|?44sujl3z8M@Ro}LkKk+h%l^@+w{_|^{d*K zTU!YZB>B}0xkpw-(3K-(W9%AQe7DscizE8K=bs+Y>-Y!I->B@1f(v>{C7Eef%&NLm z>r>tm#9=rO1+R+~U=N;Bg};fMm6kHB90xCU17*g+WGKc$zVd6%R0FNKFci;7+`FJ! zr&x1l(a+h?h{XOgZyYyVa18aSNs7njCp})bNj0?5)2QNqWp^<%de193`4zfSm{-!% zAN_ae;5<#qvo-*GGsXjVOT&G(_uwwDdS!GEApFFY|8U>9=_*CNeeU+t%+nFY0=MNd zR5v9Z)%I5iK{-&I+vuLas%=gA-e;AT0=rhl?=|n1rbk-mL%ZPiDOTNmX=@qqy6V{< z)~{q{QuH@$eFv}oePCt_YB6hQ{A~2K@NAM+6L&B>Ol36c%FI1J{4XLwT;XX{1x+A3 z!?VZ!89BRdNU1A$Vbm}*T3S(2(BXO7Ghe7-u;uZI)`15&GnPaC-6u=DzfiYTJUkQ9 z6hA`cYKd$!Jt98g2K!dPMov)qsnSI2&cII*%nvmvx^$lflpP z2&T~shDJ*yUiFy97$%IkwY7Md6cjD>miG_%xi`_@mA79&LM-Mufo(OriBd^A(4jI2 zp5O29$wDs>`HQGa@;`u@P4N1s0Twt@+SSREEpa*_2Ly6C~}&c-(bsi#JR<6fMbS+Ir0iFAfZ zs@nw!|H_Os#UGJp7NHQ#c9!&shLQz)hHU&7KGJ$<$*WwstT-~ZFsup^8~e^^G^M=- zcQIeAEZHjNtX^(#9WUi(P+@b$z?O)Wa(kvNbMWIQBSa5E!$#*j`t(wo+JSchfu8;g zsUYv}$(d_Bo|r?o#q}p`Y^u^6%^T&;12vzxp*;*O#D7Rie?6~%Eae9>j|{Z)2-^v; z3-|6}n{bT}=SSO_w+%c42YHh>B{QY(=|Z)}b+YDmgN!3b7TR^fy(vx~Db>&8W3A%3 zM%(zVPQ@!aoj38>%{-GgMmOZYCROZ_=c2a87&~UwK8&&pG`x4XXJsczaUlZs?Ooj_}5!r(n;+ffS9py z$`Tw#rJlTMIE~rbyKu3xbnZrq>IrlE{r3!vNhe=z6vAp8oDZG0f%n+iQgq}p-b=xM zNj&~@-N1m`ABOk5l%ekB#j^i%zVY?wjN|06SkfrX{0r-12WL(r?}iZkHt+1I)Hf3d z!J1m)t@jUlGGmsUaqUvJR=N4{u}Q&Tzn)9#CS$QnS*A34qjM}Kf?(_;?VOxAsrmx- z#QyOkN^e9uDLcHGNF%vqMzm@35&JI-zdcaE8 zfqtT6T$ssn;(|0J)5|^sqQ2xWFBL2Nz}!A#I>o*1yLL<%y8#mB``~@2=xoQy4FKTI zT?tEWz`tqrQQ*vsR>|HAyYt0)c7S7SPt;@{ZNuS{K!uJkGk`}*nIM`W_PWD}TTA-| zxE-=>of}6-TKk=-d}wog4Pj_2JZeC6N2bB+_M1M!2h;YIF}+iTx=l$6w~=pG{@lBs zI=ysR>-8d#G1m^xl>8cnIsA#@Pg8xXn8A(ARxq7Ic|MW$x%8KR<=G_~n=^VHC@&l= z(PVgmX8gJ)pI!Dwb=eGue)`>C%oniIo_MDZ6{z`%<0kDXdPJcYTrfTOjC$0uvAnm< z>!C?lOlIM$42yf}g3csrNoq>XO%K`jw|e!Br#7z%EMIQLq8ijg)tCX-1))Kg5&{cG zNp8QNJZc{wR)l6mZ#4oKLf&FdW9it6esB64zT{Wfl?zmPmjL3CV7*9a@u29v2<=hyOpDlz#xP$veHA)2Xli1H==W{YzR#$Lc={V5=e%Pdqb*EdqJo0kC1PQe(!& zk)u{)mpQjOYv@e?BO}$)srB*z%G-Yc9~M})V`%-$DpQ+0C~t!VbN#fmzbX^yLMLh( zCspA~p$ViV2tP(zm*znuLJq-%N6r38*&9dy1BthKTROD@2GEH5uW`TjEdS;0jC;c3mRwMFMZgm z5-9Vu6PR@3>vI?s^sBQR1i4~C8T{2RXVyc6q+Z_-$Z)asi^xa+RbX7wM{mqDT|t?doYF3_zeNvxO?*Evok2I8i~ah5UHUSFi*lj+#|n0{HevCxSA09(wN5M4?fCQt`a+Q2V_C2Xx_by!m4jmJEcnTWzE4KJ`K9D zJaJId(06mZrS0b)7vr|9yXLhq)$KrW!>EmEP(J>L5t}T1&|*Z1w}W5&LS6(xm;o1>1cNfL znPZ%PIF^ovcUJR3BwaWJu7+^lQ2+qe0DM5`ZMmeq8?55hHrSdBm);^|g?xNdj_5GM zYlP{1^g=YmgRaq3AN5L9xMH^T;8b2gqFS&qY$f}fr8WJuk3ob<3-4}v(>-k)m10EE zvVD~A`m6P32IH#v{NfspX^r}a$yqE@XUyhUAHm<`|C~e; z-WC`fGWpcE45nxXtpyvS{2f&Vp6p%6%^uQZpT}r|7t8IJ^uK4`W$~M6G0H(Xv|fB| zIBi3gikbF=LGr&^pMAZ@bpV*(NR?&!=-;2+$aOJMVu~Kg(*7TMY&~@T_n9o!FJHMo z@a|t8w%NXHR$6N)$DDM@z-M%s8XR9WtQGM zY@kJxJ?IXrd7I}&P;~C>u{OAMx%Af#ZY?G+MuIT#aESJ>G#i=kGK87LVoB4Lpyx|} zMP%k#j>6E@*SQ0<`HU=7n31xF`H6n4$qD8RrZFOG;`?J<+tW^QlSOyO8Jvrrk7j+C zv0tftW+6YpN~5Cm@o_B$&h4pWrZx8T?c`k!bd2h>a+l0@-K8BT&aM3MiO+oXXdm+v zMq{P1TOz`;Z1*P6mSDAe?Bk!gTvSXRcpB?4*Y_^YW$)+cXjPi&#cUT55f%7@U8BHj z0rUV5b|6U$Q1)D49Y+F!+Z}()EdLps%*4MOAg=whF8I2Vs!W%vNQ^J0z}XljA1?`B zhhOK*q$ys^tsCzW_>m|fE8pZ4a?^1*s^-D;NZZI+h(0y$Iu-lU`t(9j`gBuWTg-VR zbz7dI_$lHTya*;(3o@)$9c`~H_7V}7bl8dd#{B!zmG_{e8uX&a8w5w+N;2y-iJI9D z>C%%7f`k|Sz2=r29eB`Dgq_#T>2MnRMASj( zG?{EM{T~JUJRHBcRGy0VcL}FY7lzH7l;sP4^7Ldu)v%2k+GqueC2W3I(=-$eWzFD-+%_quvCg z`*7bVuN{#qwJKM8CXtXa?^tnOAoxR@X_4B|L~9!#9bB*ggXl2i~}Vqf89SknOqg zf|rjhl}zlHoyQ#Pirmw}KaDK5EgJUdS)qx*E;Mu0X=VcQGcJi9Or5&-4T?HBKX4C`-#^&+1uCZfMsfri8H>AHJ zQMm}k@h^_ilL|skR%RV#$wAQgSKA6?%q6tbNXSTESlQ$r--_(raneM8oG98XS5R|E4lEI z9hDVGzN+{+O;$&0)^h=;Jn!fmiLp?%xl6nJugLa)&~nne^F_C=@G`k=_%$5jTo*NtwJ$Xf!tzK#M zHZPIssdD%sE3qBe`NoP#wp+5m4Z#*`VFWJiTfMAlx*DaLveiZo_t3E~I=U3-y~mGV zV??w=SG{4U@*`bkxbl1!x?n zOJa#iO*doP!0?Z}8@iG_P$*X>NZ9ie4m$UzYs;uT#BcP z~W#e)Y z)@|L}nu8z&xvHzqeZc}^NGtecQ_%8YIw7Dad;O-Bc)mgQcUwG>+vAhXhY617s+g|L z9#9q;tPnJ;WV#bs`3D>^xT&86&z|;{988|M-(N+3{Z;7ij{ZM@w|xVf@H2%udDI(+ z0>1CdUPQdLzDE$hEbK%Wf<*dwI2}*jam}TY4N4p(z5W(%-vVKr+~Sf2#CVN%`Qv9P zU2y7YxQ{gNWTl~2N^)QkXZjhn@|NSZeoX{&)m?_*Pfw)VBT5P9FTQD@YFIdR75ZqQ zUHzi8flp7*S9OX;+v89wwukz#b}4ym-2DftJ*{?sO9E$kBt7DMJSgQ~G z@j<2ms`0BnU+efiP>jl+ZE@%Hr7|AdnQ76&5rt_!Qkrc^T`0nERwr5{r7~xPLxq(? z?fF?D>Akr2c7>2hWFIy0o~uGyM;+lVrsb%qx0PiRbF#{hVrr^gx?OeJR06a4`J=x#07fITLvI-XM zx6fh2ePOjVp0r;d4u88U{WwVJ29t)c#$yea0TU39>pf&5IQuua#|?Xv-Opmj#eDwn z?W}VU0DJ${#&er}d~9xEI*WdP)AU52Z79+>#g5So|K8)=?U>gp&`7Hf9JxZ@^i<3niY(EBZNz}h`4flCk z)<)2Ubp7OJ3nt{?m!v<@i!X{9G89}w?5euF?~H~IOre>SGJ)CGmrCUFj8iY48wTmw zNUANOo=^6@?d<}+RPVJKL5+QS8Z}eb*4++O^h& zj&_j42P4ZL6_4ZV@lEtv7i8JbQ=7R}_HR8G&noY?Yv?G9@~i!NYt^>LCsjWXtEq%o zb9%0Zxb7qcA=hkkJm0l?gY(6b5wX>?-+CaU4gu!!4;Vr&k+xB^x`92VL`?S0F+onnIfLYs;tjDd z$R*w#S&@vKxj#83QQvG|@VfeRGq0#Nkb<)N=3(9mL>N;Qull6V@rR`VETW%plo7cV1Ywp=b@%8zKUveMd`6j(VUSokg7D_va2pnRqbWhR7B@T4I_x8w*rM`-a?gf z$LC~LJDk*Jx`|j`VDv<`3wY-+4-CDTDh%Sp=c6w3HP0oaEK(6G-~Dx%0(Gv^=2J9bO5c)fScRz+9+OZ8=2y1 zXZ>Aw;e=1Rym&J(@62vH=E`bmS-u5zoM~f0DpQ9-vDFIaj!N4m{EQ~62JZ^| zCTZs`iwAzjJL$YRE*m#C>H3sb?-3?7hBv%8HFU}61*eo@^nf>2{@7Ifq@?zJV*D&! zT+Sab46;H`Em=kxxv0Y=p8-c1*VSG>8UGsjD!!+rJ&P>ptOU$_$zut+kWy7OXZ87b z=T*Sfc%l0tSF3rC^0Hld90C%6;WWIX4{qASS!qt=W67WY2>yx+y^rC_A2jn=6c)_Q0Ktrll~$~$t8a4s@7AZ*%q8ZDt~pm4vT z%=Z8gmYxyrQIrm6PSt1Sw)e;U$e}$?Sh#w!-JsT%Z4*f8#}P%=gYGXl%DdeG-g+zG zC6N^1yCIeo?J>B3^!hx`A41u-T9Qpk#qa?AqPoj`WeS+%R*TKfqn&jGg~D@=Kcc!h z`$yAQ3SRsJuUR+v>|O&8?@F>kgmrG5&w>VO1K;OaVOq&VO8fZl$+HR?oIb}tj+BWD zOchymJl`$gc;-}eSL%1NZ2@Ks4+5**L3*3%@zy%g69X_Kl147Q3gcg(v4b zl=F!wM2aWY$dZ!B7V0X$3HRobX;!(w@BIRBa^aw8`qWf<{8F!?;U5b{82qEQ=A|B2 zN~HmT7xjvYw;)W{x-68kb>JNQz#cF+)u8N-;I*vD0NAI8mlMf>s*Os8 zh292QrflrzsgZ72L>l|o3(-B!@Z>3?(>>c;|ezOo+gCH_$jzc;_tiF zzYflPV<&)LZl-83m9?z26(40AK}?+o@fUcg*o+@uh{St2NW*x??A6Q9O;*P1U?$*q z<3N8=sgL4%S;fWlcH+f4D@|D6o ze5+ki`4hNRjR$@K3xZExnv7H>)^s8Es9+q12wZjfd#dZ5R56` zXq2g`(6Oze&J!LDlOp+Ue7`iOw->rw6p&*pnA4++2PfXRPpZKLq`yW7tcPkfj8~l? zt9zFidP$Ub0VNt6ijX8EVrNVCH>oJ|w2%M;Th4>_5O2J-_I`eddbn z^YAG5o#0}D)4xsP9m#Kdz z{!P5WuhVu$zGzLbX`pOk%gC3v-xVn5#YzJlrI#KqAQy->6hVi!u3rhBG#`V_^H~Xd z+*JX>YU5X0H#LWTtL6U9RMUW$#gU#|k!{p^g)4H_V@rcoMV=(Oxd2Py-5xHIv+B0x zyrIaA=JR1$$;eVu?uuj|MZP6sK?u8zp=Y&M>fw{ij=Xv?-%!%RH(#Yj>J&x7aie|N zQa>5^8gnC(pIufGwClRSB%6AH`Pnd7prnbz%DuQtc7pumX;xP-i9*azPq5BG^!5}z ziZ-niSl>?4%n{o`5fQWqxumUgpL6R9sLbYGHW%@GiC|cHK%D@5EpY}#QYdV8e1}V~ zmXQyz+O@uRu`MgZLj(@Gu`%8`zW>r3EI(4&7|zFQdAldZ9l7jLhIAZ13^DAI4AV_m zs4(xK3^s=8!NQ8T(nNdw&1y5#Btguw!fKVbc*Zm5m)II}{@O^tDJ$r3r5+*^+3=-4 z`)Hx3ZHjT$--G)s+4l2Zm*TCBdN;4U<#QG0Svyo{`>-fatI8Y911`shZazC}Iy^_i zAu;0H+J_mYIfIZ|qR5sdx1lROvjwbRQe`r@>7PJLj@*bUjdH@*`AIw8Px^hd00KA~ z0;&g9{xxIG-8_?R%CA{`=9A9UrBUNNR4UaF*JMNUbV-Kk8@;g2HezC0D@ISuO_xPq zh__Z&(bKT1csex}OL|s|C9s6K=qg6!Iwzk|g>ZdU&xIJ3nbC43#i5Gbt*U#u{V2~( zzRZGEkdOt6(!W9N3%3B*iz9D8eDe-EU&x$q`Z!>Bv2=Y;sa{Yj&uJ-XgN+k$n8$j( zCtlPrBDlqRo&DG`czRJz8Gie?Av7pnziynROJX!`diu&&-^$j{qln59GS`o$KTH(p z(gO?mIA_Fm=C99Tx(;8;sGj9D5RF!QLp`mfsO+ndQxEfI=(O25bfLu+$a1@;X-C`p z$CeohB0l##KglH~7j<61%B;KI;T~yge*QQuK>evSZdZs~Z^N+@F33D#=Fj;l`UMQonC6V8$y(ZM_e}8J0!hjkSMU>~Tq-U# z#X$@L7d@hK(duS33i2Ka_w44);ZL^3UsPtTZ~zy)eVaUma8+|i!{_BqEVNmbCufQ| zBs0E5PdY-~S#AvDcYzj&>=iNR_Ti#5-!y}VMiQ{bg3O3GEGw=kP3zb-FOO@A$sO(57RT?5P!aeS^Eaq zAd+#hNb4oc2=*MV7EWCpQR8)aKAI@nNw5@M_)?+lw7vx2%K9CyS-HF4ez*7}{p4Mb zQ8+Jarsq7QAz$rol?N{9v( z(DT!IVC&kLx>n_TP5ysNB`YT4*6|DbF|VEfXM;z;kyoqt37!>-k|OlL^6#?j^ysyF zn*b$$`kBnz`|l5+weJr#4nH3=VN;Znuo|`R_kXZzKOj)6X|7*G&Uoe2gOIQu^p#w@ zn>YReFtZx8I{~tRX4XCE#Jzq8M$k&1rw*ct!!PClClJxj zgZ`%b4iywWiBfcYP+cFuL>d*AUgdc09T;^ZqmtF2@@e-y2Up=eM<+wB-7u?TrR>M{ z0XY4=RJZ%ew&gaBpRAdXKdoN{oE63gq?lQ=VENfl7Fp^afG~j53XKgKPq^J1e#?^A zrx4!M4lq>82OHKELznmGoS*6AQqb0a?f{^LV2xF5a3Sv|AMJpm6?7F42{Y0I`Bs!4 z+Cqz=B*n>re*kCz$8E>3%ug|h38ZvRCXtDD{RfZ)IC2YarS6$`?*M$-`cXz!<}51R zssH*BBeLJ++`&J8W`-6kn!+zlRd;d>Y0{Y&c0&NxbAo`Y3Lok72fU4??Z{jN>6YD9 z&Nx$5X0Ze@K&US=>m_}?Y2Mu%%J<)5V&1fHxL%m)1f_z1XY2=yf3 zem4i%*kDN4^NfP`-viE?0J|hu169B8jm;^5?&Ay zSI7~=NKcZFc1GRGOqNnOnm7Mq{*vkAW5v8$^gsP0KB!N7@1YG6gDhIr?>ooU^>R(f z&$j7JLs8&D`E9RUkb=)uK#o_=h$K3tiC0P$YZTpRemB|CQ>408hc$2+=LHMfO zK7j5Z+M*!u-)}1eRo~@K;tkf-e7<34LzIh@KC^Y=RH8sD;FxO zP^fiyEs}B~dz+50TKx>TW}1nopo3Y8lgN78d?fXI3gBqCFFivOO_BQtka8;AQ396T@nxlFl?7#uQ1vQ=&7=&8? z(Mv<74m#2k{{ctD`>;aB@#0OfQ; zNQe=C?x=Ke1Ql{>}!iA|J_Knd3-ODyVf6aAIzQ`kv(IOtPh!maB(|u1>PK P*?@unYae#|pOOCsB*Is7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/selector_wishlist_item.xml b/app/src/main/res/drawable/selector_wishlist_item.xml new file mode 100644 index 0000000..9d1bb50 --- /dev/null +++ b/app/src/main/res/drawable/selector_wishlist_item.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3acf237..05d8a3a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,66 +6,30 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - - - - - + app:layout_constraintVertical_bias="0.0" + app:srcCompat="@drawable/item1" /> - + app:layout_constraintVertical_bias="0.272" + app:useMaterialThemeColors="false" + tools:ignore="MissingConstraints" /> - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_product_details.xml b/app/src/main/res/layout/activity_product_details.xml new file mode 100644 index 0000000..ad8bf9a --- /dev/null +++ b/app/src/main/res/layout/activity_product_details.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_product.xml b/app/src/main/res/layout/fragment_product.xml new file mode 100644 index 0000000..dbbdde9 --- /dev/null +++ b/app/src/main/res/layout/fragment_product.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1324c05..f2b02ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ Thrifty + + Hello blank fragment \ No newline at end of file From 95342f6729ea1a2ee64658a724fad8d666b9c891 Mon Sep 17 00:00:00 2001 From: nawal-ahmad Date: Sun, 28 Nov 2021 21:40:53 +0200 Subject: [PATCH 2/3] trying to render all products from json file --- .idea/misc.xml | 15 +++ amplify/backend/api/thrifty/schema.graphql | 4 +- app/build.gradle | 13 ++ app/google-services.json | 39 ++++++ app/src/main/AndroidManifest.xml | 4 +- .../com/example/thrifty/CartListener.java | 8 ++ .../java/com/example/thrifty/CartModel.java | 53 +++++++++ .../com/example/thrifty/MainActivity.java | 14 ++- .../com/example/thrifty/ProductAdapter.java | 68 +++++------ .../com/example/thrifty/ProductDetails.java | 14 --- .../com/example/thrifty/ProductFragment.java | 64 ---------- .../com/example/thrifty/ProductListener.java | 8 ++ .../com/example/thrifty/ProductModel.java | 52 ++++++++ .../com/example/thrifty/ProductsActivity.java | 111 ++++++++++++++++++ .../example/thrifty/SpaceItemDecoration.java | 18 +++ .../main/res/drawable/ic_baseline_add_24.xml | 10 ++ .../res/drawable/ic_baseline_delete_24.xml | 10 ++ .../ic_baseline_navigate_before_24.xml | 10 ++ .../res/drawable/ic_baseline_remove_24.xml | 10 ++ .../drawable/ic_baseline_shopping_cart_24.xml | 10 ++ app/src/main/res/layout/activity_main.xml | 11 ++ .../res/layout/activity_product_details.xml | 9 -- app/src/main/res/layout/activity_products.xml | 71 +++++++++++ app/src/main/res/layout/fragment_product.xml | 34 ------ .../main/res/layout/layout_product_item.xml | 48 ++++++++ app/src/main/res/values/strings.xml | 4 +- app/src/main/res/values/themes.xml | 5 + build.gradle | 3 + 28 files changed, 560 insertions(+), 160 deletions(-) create mode 100644 app/google-services.json create mode 100644 app/src/main/java/com/example/thrifty/CartListener.java create mode 100644 app/src/main/java/com/example/thrifty/CartModel.java delete mode 100644 app/src/main/java/com/example/thrifty/ProductDetails.java delete mode 100644 app/src/main/java/com/example/thrifty/ProductFragment.java create mode 100644 app/src/main/java/com/example/thrifty/ProductListener.java create mode 100644 app/src/main/java/com/example/thrifty/ProductModel.java create mode 100644 app/src/main/java/com/example/thrifty/ProductsActivity.java create mode 100644 app/src/main/java/com/example/thrifty/SpaceItemDecoration.java create mode 100644 app/src/main/res/drawable/ic_baseline_add_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_delete_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_navigate_before_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_remove_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml delete mode 100644 app/src/main/res/layout/activity_product_details.xml create mode 100644 app/src/main/res/layout/activity_products.xml delete mode 100644 app/src/main/res/layout/fragment_product.xml create mode 100644 app/src/main/res/layout/layout_product_item.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 44e6c62..bafb522 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,13 +4,21 @@ @@ -20,4 +28,11 @@ + + + \ No newline at end of file diff --git a/amplify/backend/api/thrifty/schema.graphql b/amplify/backend/api/thrifty/schema.graphql index 5981bb6..7b8258b 100644 --- a/amplify/backend/api/thrifty/schema.graphql +++ b/amplify/backend/api/thrifty/schema.graphql @@ -1,7 +1,7 @@ type Category @model { id: ID! name: String! - products: [Product] @connection(keyName: "byCategory", fields: ["id"]) + productModels: [Product] @connection(keyName: "byCategory", fields: ["id"]) } type Product @model @key(name: "byCategory", fields: ["categoryID"]) { @@ -15,6 +15,6 @@ type Product @model @key(name: "byCategory", fields: ["categoryID"]) { type Comment @model @key(name: "byProduct", fields: ["productID", "content"]) { id: ID! productID: ID! - product: Product @connection(fields: ["productID"]) + productModel: Product @connection(fields: ["productID"]) content: String! } diff --git a/app/build.gradle b/app/build.gradle index 7bc65e7..4e3c16a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'com.google.gms.google-services' } android { @@ -40,7 +41,19 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.room:room-common:2.3.0' + //noinspection GradleDependency + implementation 'com.google.firebase:firebase-database:19.2.1' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + implementation platform('com.google.firebase:firebase-bom:26.3.0') + implementation 'com.google.firebase:firebase-database-ktx' + implementation 'com.jakewharton:butterknife:10.2.3' + annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + implementation "com.nex3z:notification-badge:1.0.4" + implementation "org.greenrobot:eventbus:3.2.0" } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..17d035f --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "608816577570", + "project_id": "thrifty-7d9f7", + "storage_bucket": "thrifty-7d9f7.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:608816577570:android:812e4f298ed2836c925e7b", + "android_client_info": { + "package_name": "com.example.thrifty" + } + }, + "oauth_client": [ + { + "client_id": "608816577570-4k85dlc0p227aj9ofddejrfjdbmcj5s1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCI4K3t7Dae5qYAEs02EyaAaCJqYOx76Ag" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "608816577570-4k85dlc0p227aj9ofddejrfjdbmcj5s1.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14903db..8cb7f46 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + cartModelList); + void onCartLoadFailed(String message); +} diff --git a/app/src/main/java/com/example/thrifty/CartModel.java b/app/src/main/java/com/example/thrifty/CartModel.java new file mode 100644 index 0000000..35f4161 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/CartModel.java @@ -0,0 +1,53 @@ +package com.example.thrifty; + +public class CartModel { + private String key; + private String name; + private String image; + private String price; + private float totalPrice; + + + public CartModel() { + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public float getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(float totalPrice) { + this.totalPrice = totalPrice; + } +} diff --git a/app/src/main/java/com/example/thrifty/MainActivity.java b/app/src/main/java/com/example/thrifty/MainActivity.java index 29ef16b..466438e 100644 --- a/app/src/main/java/com/example/thrifty/MainActivity.java +++ b/app/src/main/java/com/example/thrifty/MainActivity.java @@ -1,10 +1,11 @@ package com.example.thrifty; import androidx.appcompat.app.AppCompatActivity; - +import android.content.Intent; import android.os.Bundle; import android.util.Log; -import android.widget.EditText; +import android.view.View; +import android.widget.Button; import com.amplifyframework.AmplifyException; import com.amplifyframework.analytics.pinpoint.AWSPinpointAnalyticsPlugin; @@ -29,5 +30,14 @@ protected void onCreate(Bundle savedInstanceState) { } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } + + Button products = findViewById(R.id.productsButton); + products.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, ProductsActivity.class); + startActivity(intent); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/ProductAdapter.java b/app/src/main/java/com/example/thrifty/ProductAdapter.java index d0eee93..5bea8ae 100644 --- a/app/src/main/java/com/example/thrifty/ProductAdapter.java +++ b/app/src/main/java/com/example/thrifty/ProductAdapter.java @@ -1,67 +1,69 @@ package com.example.thrifty; -import android.annotation.SuppressLint; -import android.content.Intent; +import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.amplifyframework.datastore.generated.model.Product; +import com.bumptech.glide.Glide; import java.util.ArrayList; import java.util.List; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + public class ProductAdapter extends RecyclerView.Adapter { - List allProducts = new ArrayList<>(); - public ProductAdapter(List allProducts) { - this.allProducts = allProducts; - } + private Context context; + List productModelList = new ArrayList<>(); - public static class ProductViewHolder extends RecyclerView.ViewHolder{ - public Product product; - View itemView; + public ProductAdapter(Context context, List productModelList) { + this.context = context; + this.productModelList = productModelList; + } + public class ProductViewHolder extends RecyclerView.ViewHolder{ + @BindView(R.id.imageView) + ImageView imageView; + @BindView(R.id.txtName) + TextView txtName; + @BindView(R.id.txtPrice) + TextView txtPrice; + private Unbinder unbinder; public ProductViewHolder(@NonNull View itemView) { super(itemView); - this.itemView = itemView; + unbinder = ButterKnife.bind(this, itemView); } } + + @NonNull @Override - public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { - View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_product,viewGroup,false); - ProductViewHolder productViewHolder = new ProductViewHolder(view); - return productViewHolder; } + public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) { + return new ProductViewHolder(LayoutInflater.from(context) + .inflate(R.layout.layout_product_item,parent,false)); + } @Override - public void onBindViewHolder(@NonNull ProductAdapter.ProductViewHolder productViewHolder, @SuppressLint("RecyclerView") int position) { - productViewHolder.product = allProducts.get(position); - TextView productTitle = productViewHolder.itemView.findViewById(R.id.productTitleInFragment); - TextView productCategory = productViewHolder.itemView.findViewById(R.id.productCategoryInFragment); - - productTitle.setText(productViewHolder.product.getTitle()); - productCategory.setText(productViewHolder.product.getCategory().toString()); - + public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) { + Glide.with(context) + .load(productModelList.get(position).getImage()) + .into(holder.imageView); + holder.txtPrice.setText(new StringBuilder("$").append(productModelList.get(position).getPrice())); + holder.txtName.setText(new StringBuilder().append(productModelList.get(position).getName())); - productViewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(view.getContext(), ProductDetails.class); - intent.putExtra("title", allProducts.get(position).getTitle()); - intent.putExtra("category", allProducts.get(position).getCategory().toString()); - view.getContext().startActivity(intent); - } - }); } @Override public int getItemCount() { - return allProducts.size(); + return productModelList.size(); } } diff --git a/app/src/main/java/com/example/thrifty/ProductDetails.java b/app/src/main/java/com/example/thrifty/ProductDetails.java deleted file mode 100644 index 8eb5208..0000000 --- a/app/src/main/java/com/example/thrifty/ProductDetails.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.thrifty; - -import androidx.appcompat.app.AppCompatActivity; - -import android.os.Bundle; - -public class ProductDetails extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_product_details); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/ProductFragment.java b/app/src/main/java/com/example/thrifty/ProductFragment.java deleted file mode 100644 index ffd0604..0000000 --- a/app/src/main/java/com/example/thrifty/ProductFragment.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.example.thrifty; - -import android.os.Bundle; -import androidx.fragment.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -/** - * A simple {@link Fragment} subclass. - * Use the {@link ProductFragment#newInstance} factory method to - * create an instance of this fragment. - * - */ -public class ProductFragment extends Fragment { - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "title"; - private static final String ARG_PARAM2 = "category"; - - // TODO: Rename and change types of parameters - private String mTitle; - private String mCategory; - - public ProductFragment () { - // Required empty public constructor - } - - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param mTitle Parameter 1. - * @param mCategory Parameter 2. - * @return A new instance of fragment ProductFragment. - */ - // TODO: Rename and change types and number of parameters - public static ProductFragment newInstance(String mTitle, String mCategory) { - ProductFragment fragment = new ProductFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, mTitle); - args.putString(ARG_PARAM2, mCategory); - fragment.setArguments(args); - return fragment; - } - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mTitle = getArguments().getString(ARG_PARAM1); - mCategory = getArguments().getString(ARG_PARAM2); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_product, container, false); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/ProductListener.java b/app/src/main/java/com/example/thrifty/ProductListener.java new file mode 100644 index 0000000..f7cb2ed --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductListener.java @@ -0,0 +1,8 @@ +package com.example.thrifty; + +import java.util.List; + +public interface ProductListener { + void onProductLoadSuccess(List productModelList); + void onProductLoadFailed(String message); +} diff --git a/app/src/main/java/com/example/thrifty/ProductModel.java b/app/src/main/java/com/example/thrifty/ProductModel.java new file mode 100644 index 0000000..372b977 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductModel.java @@ -0,0 +1,52 @@ +package com.example.thrifty; + +public class ProductModel { + public int id; + private String key; + private String name; + private String image; + private String price; + + public ProductModel() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } +} diff --git a/app/src/main/java/com/example/thrifty/ProductsActivity.java b/app/src/main/java/com/example/thrifty/ProductsActivity.java new file mode 100644 index 0000000..810d9ab --- /dev/null +++ b/app/src/main/java/com/example/thrifty/ProductsActivity.java @@ -0,0 +1,111 @@ +package com.example.thrifty; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; + +import com.google.android.material.snackbar.Snackbar; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; +import com.nex3z.notificationbadge.NotificationBadge; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class ProductsActivity extends AppCompatActivity implements ProductListener, CartListener { + ProductAdapter adapter; + @SuppressLint("NonConstantResourceId") + @BindView(R.id.recycler_product) + RecyclerView recycler_product; + @SuppressLint("NonConstantResourceId") + @BindView(R.id.productLayout) + RelativeLayout productLayout; + @SuppressLint("NonConstantResourceId") + @BindView(R.id.badge) + NotificationBadge badge; + @SuppressLint("NonConstantResourceId") + @BindView(R.id.btnCart) + FrameLayout btnCart; + + ProductListener productListener; + CartListener cartListener; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_products); + + init(); + loadProductFromFirebase(); + } + + private void loadProductFromFirebase() { + List productModels = new ArrayList<>(); + FirebaseDatabase.getInstance() + .getReference("Drink") + .addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + if (dataSnapshot.exists()) { + for (DataSnapshot productSnapshot : dataSnapshot.getChildren()) { + ProductModel productModel = productSnapshot.getValue(ProductModel.class); + productModel.setKey(productSnapshot.getKey()); + productModels.add(productModel); + } + productListener.onProductLoadSuccess(productModels); + } else + productListener.onProductLoadFailed("can't find products"); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + productListener.onProductLoadFailed(databaseError.getMessage()); + } + }); + } + + private void init() { + ButterKnife.bind(this); + productListener = this; + cartListener = this; + recycler_product.setAdapter(adapter); + GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2); + recycler_product.setLayoutManager(gridLayoutManager); + recycler_product.addItemDecoration(new SpaceItemDecoration()); + } + + + @SuppressLint("NotifyDataSetChanged") + @Override + public void onProductLoadSuccess(List productModelList) { + ProductAdapter adapter = new ProductAdapter(this, productModelList); + recycler_product.setAdapter(adapter); + adapter.notifyDataSetChanged(); + } + + @Override + public void onProductLoadFailed(String message) { + Snackbar.make(productLayout,message, Snackbar.LENGTH_LONG).show(); + } + + @Override + public void onCartLoadSuccess(List cartModelList) { + + } + + @Override + public void onCartLoadFailed(String message) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/SpaceItemDecoration.java b/app/src/main/java/com/example/thrifty/SpaceItemDecoration.java new file mode 100644 index 0000000..1afc2b7 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/SpaceItemDecoration.java @@ -0,0 +1,18 @@ +package com.example.thrifty; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +public class SpaceItemDecoration extends RecyclerView.ItemDecoration { + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + if(parent.getChildLayoutPosition(view) %2 != 0){ + outRect.top = 50; + outRect.bottom = -50; + } + } +} diff --git a/app/src/main/res/drawable/ic_baseline_add_24.xml b/app/src/main/res/drawable/ic_baseline_add_24.xml new file mode 100644 index 0000000..eb23254 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_add_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_delete_24.xml b/app/src/main/res/drawable/ic_baseline_delete_24.xml new file mode 100644 index 0000000..3c4030b --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_delete_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_navigate_before_24.xml b/app/src/main/res/drawable/ic_baseline_navigate_before_24.xml new file mode 100644 index 0000000..09598f1 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_navigate_before_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_remove_24.xml b/app/src/main/res/drawable/ic_baseline_remove_24.xml new file mode 100644 index 0000000..791a2f8 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_remove_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml b/app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml new file mode 100644 index 0000000..cf0dcc8 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 05d8a3a..9604de9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -32,4 +32,15 @@ app:useMaterialThemeColors="false" tools:ignore="MissingConstraints" /> +