From 204169746a525e7cc1dac7142a0a406c37343ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=9D=8E=E7=A5=BA=E6=B7=B1?= <2107895621@qq.com> Date: Mon, 27 May 2024 13:29:42 +0800 Subject: [PATCH] first commit --- collection.py | 130 ++++++++++++++++++++++++++++++++++++++++++++++ 功能模块.vsdx | Bin 0 -> 25402 bytes 2 files changed, 130 insertions(+) create mode 100644 collection.py create mode 100644 功能模块.vsdx diff --git a/collection.py b/collection.py new file mode 100644 index 0000000..6d8225e --- /dev/null +++ b/collection.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +import csv +import re +import time +import urllib +import xlwt +import requests +from bs4 import BeautifulSoup + + +class SNProcess(): + def __init__(self): + #模拟浏览器 + self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'} + self.run() + def get_html(self, url): + res = requests.get(url, headers=self.headers) + # res.encoding = 'utf-8' + return res.text + def write_data(self, data): + with open("congtent.csv", "a", encoding="UTF-8", errors='ignore', newline="") as f: + f_csv = csv.writer(f) + f_csv.writerow(data) + #获取评论的总的数量 + def get_comment_num(self, clsid, goods_src): + src_args = re.findall(r"com/(.*?).html", goods_src)[0] + key1 = src_args.split("/")[-1] + if clsid: + url = "https://review.suning.com/ajax/review_count/cluster-"+str(clsid)+\ + "-0000000"+str(key1)+"-0000000000-----satisfy.htm?callback=satisfy" + #https://list.suning.com/0-20006-0-0-0-0-0-0-0-0-11635.html?safp=d488778a.phone2018.103327226421.5&safc=cate.0.0&safpn=10003.00006 + + else: + url = "http://review.suning.com/ajax/review_count/general--0000000"+str(key1)+"-0000000000-----satisfy.htm?callback=satisfy" + #https://list.suning.com/0-20006-0-0-0-0-0-0-0-0-11635.html?safp=d488778a.phone2018.103327226421.5&safc=cate.0.0&safpn=10003.00006#second-filter + html = self.get_html(url) + # print(html) + oneStarCount = re.findall(r'"oneStarCount":(.*?),', html)[0] + twoStarCount = re.findall(r'"twoStarCount":(.*?),', html)[0] + threeStarCount = re.findall(r'"fourStarCount":(.*?),', html)[0] + fourStarCount = re.findall(r'"threeStarCount":(.*?),', html)[0] + fiveStarCount = re.findall(r'"fiveStarCount":(.*?),', html)[0] + picFlagCount = re.findall(r'"picFlagCount":(.*?),', html)[0] + totalCount = re.findall(r'"totalCount":(.*?),', html)[0] + againCount = re.findall(r'"againCount":(.*?),', html)[0] + return totalCount, picFlagCount, int(fiveStarCount)+int(fourStarCount), int(twoStarCount)+int(threeStarCount), oneStarCount, againCount + #获取手机的信息 里面的获取clusterid这个很关键 主要是后面的评论和评论统计数据url构造中都有这个参数 + def get_goods_title(self, url): + html = self.get_html("https:" + url) + soup = BeautifulSoup(html, 'lxml') + # print(html) + title = soup.find_all('title')[0].get_text() + clusterId = re.compile(r'"clusterId":"(.*?)"', re.S) + clusterId_ret = clusterId.findall(html) + try: + args0 = soup.find_all("dd", attrs={"class": "r-info"})[0].get_text() + args1 = soup.find_all("dd", attrs={"class": "r-info"})[1].get_text() + args2 = soup.find_all("dd", attrs={"class": "r-info"})[2].get_text() + except: + args0, args1, args2 = ["无参数"] * 3 + return clusterId_ret[0],title, args0, args1, args2 + #获取手机的价格 手机价格的连接需要自己拼凑 + def get_price_html(self, goods_src): + try: + src_args = re.findall(r"com/(.*?).html", goods_src)[0] + key0 = src_args.split("/")[0] + key1 = src_args.split("/")[-1] + price_src = "https://pas.suning.com/nspcsale_0_0000000" + key1 + "_0000000" + key1 + "_" + key0 + "_250_029_0290199_20089_1000257_9254_12006_Z001___R1901001_0.5_0___000060864___.html?callback=pcData&_=1581050220963" + html = self.get_html(price_src) + price = re.compile(r'"netPrice":"(.*?)"', re.S) + price_ret = price.findall(html) + return price_ret[0] + except: + return -1 + #获取评论数据 + def get_comment_data(self, goods_src, clsid, num, redata): + src_args = re.findall(r"com/(.*?).html", goods_src)[0] + key1 = src_args.split("/")[-1] + for i in range(1, int(num/10)): + url = "http://review.suning.com/ajax/cluster_review_lists/cluster-"+str(clsid)+"-0000000"+str(key1)+"-0000000000-total-"+str(i)+"-default-10-----reviewList.htm?callback=reviewList" + html = self.get_html(url) + print(html) + content = re.findall(r'"content":"(.*?)","publishTime', html) + publishTime = re.findall(r'"publishTime":"(.*?)",.*?sourceSystem"', html) + username = re.findall(r'"nickName":"(.*?)"', html) + color = re.findall(r'"charaterDesc1":"(.*?)"', html) + edition = re.findall(r'charaterDesc2":"(.*?)"', html) + labelnames = re.findall(r'"labelNames":(.*?),"score"', html) + if len(content) == 0: + break + for val in zip(content, publishTime, username, color, edition, labelnames): + result = redata + list(val) + print(len(result), result) + # # 数据保存到csv文件 + self.write_data(result) + time.sleep(1) + #主页面数据获取 关键函数 + def get_phone_data(self, html): + soup = BeautifulSoup(html, 'lxml') + li = soup.find_all('ul', attrs={'class': 'general clearfix'})[0].find_all("li") + # print(li[1]) + for i in range(len(li)): + try: + src = li[i].find_all("a", attrs={"target": "_blank"})[0].get("href") + print(src) + comment_num = li[i].find_all("div", attrs={"class": "info-evaluate"})[0].find_all("a")[0].get_text() + # print(comment_num) + is_self_support = li[i].find_all("div", attrs={"class": "store-stock"})[0].find_all("a")[0].get_text() + # print(is_self_support) + price = self.get_price_html(src) + # print(price) + clusterId, title, args0, args1, args2 = self.get_goods_title(src) + # print(title) + totalCount, picFlagCount, five_fourStarCount, two_threeStarCount, oneStarCount, againCount = self.get_comment_num(clusterId, src) + ret_data = [title, comment_num, price, is_self_support, args0, args1, args2, totalCount, picFlagCount, five_fourStarCount, two_threeStarCount, oneStarCount, againCount] + # print(ret_data) + self.get_comment_data(src, clusterId, int(totalCount), ret_data) + except: + print("数据异常") + continue + + def run(self): + a = urllib.parse.quote("华为手机") + for i in range(50): + print("第%s页" % i) + url = "https://search.suning.com/"+a+"/&iy=0&isNoResult=0&cp=" + str(i) + html = self.get_html(url) + self.get_phone_data(html) +if __name__ == "__main__": + SNProcess() diff --git a/功能模块.vsdx b/功能模块.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..e1faa2ed6366d992feac6926c3eb4336bbf8b59b GIT binary patch literal 25402 zcmeEuQS$NdkkQ0Du8N0000G0?-M`cZC810BnH*03ZWE0BH)^+Bg~8IO!_6+Zj7*)4Ew( z5#)maQRD&u{eAxbAO8;{(3m)8GeCeM{F3wzkG3&RHkMyr&Zh39)~sHL@3+g&|2xo6 z%6BL9pfD;4Qg~~%es9|m{}v;9rF=Shx0AV@=g=CbCJ+f^WerBNe*>Pr}=@XoJ2wRiz9~kv2>XKij&C1nuZ-(4OiP@PCU7# z3`&W`@l#9V$8Sy+VSiM=yvI-F<ZC(9q$yp%F7&g;4T-z@4Ar)6xO`<0_9l`T3AGP8{0BPdHxuo2V*NoI@*7%|DU)250mx3Y`rpJLS}#-LHI@NGw{g!ppYv_F2M#t z!4)DH9^+En0Fl>7w*2{~4hocr)Oe1T8*j(cq`Fh%Mrx)RBj2U@P&nB!M1`ZsTJyf; z-Tkgtoun4Z!?fCpCg|pnFU12V`PS2aGh+h~nfe22Ef@b)FOlaWe;LX0y)WK~)6v zi{9*f&6ny$osR{oE7LM^TSxI6Qcm|2**>~M*x@Aa8jgny;g${(q-&5$9tSMwHvXT% zQ&pv$|HvvY?QY0I6aWC60001_zfZWBJDS_l8QB^-TmOxX{|Jhg+PaR!ZT7yh%H6;d zFMJ(ZzwTlvs;di~B-N(9XcX0*7-MaI$AQN*YL3+<$)w763B)i4=I6{FvUD%3sNlOwecJFJ@>) zc}P!+-mzuw;4P}29gZz{T$#>%f6hGX1_NLY7A#3kE?_05)4`uFFl&2tcXi=N4^gYx zO!dnn(H)4l{|-0ZxHCeE9(=|{+qC(eUUj98Fnv*edGbe*Lnn;=HfwN-Y5u5T_`CUwphPw>xc2nizc>ec0%b9XepZ%w|Mu$2OA2re7~z*U^^+^xs0|$EWiK80nT6O7 z<+lUEtQYCT-5kTGU2GRl00i7Tn75*q%X&u^9=T0N8R1pmwMGp8<$R&oKsj~ z^EqIUkwCp1S6ke#x~4VD<~LWDP3u`IT`riD2c(msDphNhSIaIIRiEf0$81nGc}5*e zaYPpGe9Y|ZA&P*RXZTGE{+V`Zz3BGRKo?C5#=cEb2kIhzaJ{~`i@cu$HN2niJ>73P zx@!n(sd@oV!YE6$aOV;`_W1#12S~S2XQh;A0OZz`04F`*w>ZVm_L+}p5vMx$wsPNU zPnL+=GK#_*7R=b3Q`!#;H2Ftn_mQ-LD95NUhIOc_cNWnTwVIb^JlCY+pEejiq$Ewk z7n~?9ds_2fq}ou;W%$%u0s14VHJngVHG9OA@2n1t2UqpmBa@nZtjC)C*!&T`{Uq*3RoQxiW`uHaVsTNx0#W zUvSw-Q9YUqYH)jec4m_)v5_a?CYOZC+7;uBxdAD_N*_E0 ziT9WQ9UWg`L5LGe!wf$<#Og&4YziaS8ZzHKSP6B`pnIb7_GO0SCNl7SFQY%`vpHPL zCb=6|G~^8vsmXa53YjJE{_cl`afRd}hizxj09T$hjAXI51BC)eG z;D98XaYowShU#)#j)p(igUU0h%=eqNN|jR1n{DW1tKHd$ly3IB=h24a(+s_%+6(Fo zo9X9_!^KbS1JZ^jqGz2Jc9>|qBMK=)kX_9Sf+RaW;A_cVH8<6(%Z4i~)RoS8q$_Q8 z(0miv?1@OIiw{+(qog}_%T3TsG19lzpr-@l$1*xNy|M2_G`>BEzRr~eXO-uLa=cOt z^l|jUi&=rn#mI0rf?aTAYYAC>Z;H%`Faz{7V~ZDCcmHy;hlfg2uSs-3+l)BWnzUim zE^1^|tq>yt=E^M|C$rJ?+)J@ME&qfrO=SXAGRJ>{#d9=YI`2$Q`_N5RFkT~MgHSt4 zH11MTUnWnaJ}1rwX-J#rk)-*kg&?ujDF|a(YRi z6mfT^V0+0k2+$5oll{#cIZV*L0qxM%iZUjZOBYlZX$4@2zvd_DGtg1*Eo*1wXuWrE z+lBGsjNbk@LE)n+5MroXzA4eIl5e)g-cA8TWJEV0|0cZnyc=&H}S}% z4+vn(Ylt0PAV+5?l*0s8j~(4=tpT@ahiI>opI1~0ZUb*3;YD^Wbf{1>i1f_1siKvB z&#|j;F#p&MDaw+vDw|N+!j(m*GC6s=HMEEEi%UxAHhImhh{yx1KuX!D&0ozf6uJlO zyl!e~AiXsG91%PtkFe7L1tHQ!@9p9h$V9eSQ!}cogtJP<(e}l>WKJXoRa*^)>p&Tf zH?r4Agf+w@yWxrjYpX>2C~KlQ38zv$#otp8-|r)(77X9EVuPVXl&YEEa@*K!N$j%* ztwSJ(K#NHidIXgp_s1D_I0f{_VN)Hfrh;PRWw^(00V(^>=9zy0)w}bhLJ`&jG$`6* z4N|Fv$!|T3f_gMBWX)>`;paed{`~knDCSdbxN8o6+6A#HyzUVB$g`m?BR2c@nRl5Zo|T z&=lOC3ckBAUCweDOYl(iHY3L>B^#&LSIwFo+O1Z(;UNP` z<8eS#_Ju@7u7=f_i52LDUTPZcEBYKslHpit>tQL9r>J%e=B1iDgc>-t3b)=hWq7u^ zWFK4s@zrQ)NZ(L$D!~GY%S6&pjId^OVhkh%Jyf;F#f5?1DFMj+wYLHiseZ}OcAUbb zRonwf*wbF91R@pG>W8O+hA&fC?|&)e+ZHk{2@#5URt4G;Ss|@ATny-z(U=kE*zZF) z2n4TUXE}nAt!fa^Ep3)P!fp-l$%erJbr5cL`U&|Ygco?PoN_KNa~~Gsq*F>bh=&uU zZ~GX#6Yj)}8;~%Qae7u0Oh|{rZrYXv1uj&I8SpGN3^3|*n7d} zF!JIT-7AkOyyp-OCks#Zpj}X-RlPO%OAIaxM0nGmtM_DX#x2(smPX7wc>s~u>uw*W zddAyEw=wOsUMspW*_3y&OQ14fDLEHEq93coQqbb@&0YKgO#BvZdCyiEY+BLC`4L+9 zqEu7TiFr=Wljw@FP)5+_1cLFZyiY@{%pUg)%BykGqXxu@WnqK}Nrib?b;zi>9SM#HOsBiA&V&Hg5mnJ_7!bbAssfAkbb zMPhG#0SR5Xj3Gq9SHp|P#%X?ssqQX~Bi^06oCi!39Ku?IKM%{eq?&48(G2M6tgkf) zlWfC_inoe6W*Rf<*NVc8ai0HK^4+YOVTt4f;Wm~4Boq?iq~&L~Nzh|>G6S#t7}4)n zC*bQt?%ojOi#_p3Vbt2iqs`$pw^7Ht-rJXxB2WnawV09nYyc9oggtX`_{$xUQe1@` zr<$nM#x$EL#LA5FJnh_}pX3W{Hp-}`FB?Fi9a`IDb zP}W9zI1HL8qpI710Pm}a&CJRS+&Hl@G#j+aB`ub5{G%Yejb?=rQ{zNv*;wCEPjB~i zS!a?#Z3!D}5${Shnps}ssMR7cq*=D9 z9Z@}s+*~#(TcFiS36(ys1*;Q7`Sga_9U;D%0Ft2+MpZP3>NdYfJx^+GwNj46l}@QQ z9z)n99rXtIlxklKM9yFj%r8DsvdW_}-q!BUzhXrlGqZb72@pX|%szXt z@-U=Ct?KzqJMw1{bSz5F;ZE~<;=38e!nPZ8;)M@1&eG=``8cLP8_l=5cYaI=V-STG zieTHR&-2aFq)Dg0d|x6h2D;OegEfSNvoz?%{3l>4goma{d{SC;d)QT>@kReVkxP8C zIvOKcF9{tJ2FstcKGgU$%%F_LNk6EuDVP9h2NOGd;n@Xcx}S8c?Boz+)g1}!WBCv7f`9d#zY!y1hS&%Z z0mtKZAJ?x%%TZ%7oSdeOL(pEa|-Yw!+ehkuhgHB~jX+jcT!LaA4 zqLFhT9EDbLpc_ReklxOst|8ujiMxz%QoDs+cvOj5uYXIoc$6$11v@`h%&d z*f=O%Urd6|-&{PJ&R6eH0y%?yQXK7UP>}L!P%7Atf$Z1RJqzY6k9bzJuThmNV53x< ze-LbY)J{RwohZ{hWjnsyER#adu9XxKYgBDvoXAO*64kU{#06z0q!CII|C%TBOlLSc zwjQD0%Y%cXe`&RA(G`n2!P;R_lv%lFF_bB_KNW6G-y=1B2`1S=sno?OmB!`nYF!|e zc79=;J*LUUc&A7gYCG%o3)9V-coSsrNjO}5Ad-a(-?8dzLuQW(Rj{rj@h%)eUUY~vu&$GOIcbxE=pIf0cJ}>$aKactm zJumb_KQ_9lyIaIv5$mFx>v*mvrjl=AT|cc%zT?}zn`ykpH@w%AIrT62pVL~&JU}wB z)IP+nf7TeVm_rU;dcIEJeP3*Ob5Y{Q-DM+7PB~$fw<*Ndql~vpTd^-EMaWIf8Crx5!>42+tf|=VX1>8wK=uoZ*t133{~sm@nddU=pi&!6dLl zCjwy;Syt%bFS;X4>{3~BHB+};?kJ9{Bf#?~Jh?d?W`?!{kI?zl3vmG7Yz3gzr=E9X z3m5|*gy7L)yKDP^q(tA2Y`hd)y8+cAx*!iLj_a0xD+x|S+ZjSZD_~=mPh`0=c-GP= z$)U-o@{d`AYVoOha#Npal?Z%g+w%?&u75D#)75vF|IA`OlY7k_!(6=3PiACd?rN^S zrOe!ItiJaGK!MGCm4HTnTN8KdRw}&Sq6i&Kx7GmcZj|k9B)R74@oa5i$Lw`E+qS`% zbO!+OU@=!6TCW*>f&HR~Q+Wd~zi%->790NM>(A01&ba}>=C+)eQ$xW0%h#4gKV>eo zAoT<7w+a{{;}D%fd=Uf?)RSa6A*EAuCw8?BnmAX0?Q_KBQ8#zYO!Uk)ZdL2WmI zdokF8Oa~2I{Nl(U9P(|JqXQZqIhIgVwnKbTp?pk$X(x!b8Q792%ip{`H1;)F6qofw ztD(20_3XN2>2~B=hR^x>&q@LCs`eu?7y!WW--agUzk8b2`i@S<4vuvH^Zd`&rmC&& zh7g9YZrM)X&1V4F$*PQ@s(p#%W^7pTFKN!^u7}JB!@bo$my03@^II@xlGs?jFhVd0 z5V1}^0RoKmXMMHxI~up^X_?Dn-(~4ee$I(*&+F_D?iucvo0IpX4Psd~0{ug zfj+(6br9TEzi^{6qJp@iccPmPG}=eF;X&|CeuU^sHY)JE1c6llE?y!Z7=n2!s6VDd zyQa)eBZz{U5yQ#SF!ng{VL{+RTC!g#9L0p=`L)JTquGSl2%ODcBgFZ$f6_nXaU$oF zp;j0M4?cLM@qIL{LjA(}T`(et>j?3@U)LT3b)$dYy*zH_cy~UZ4`VufciiD0uX=CV zLU%z<4Q8CZ!Y3nLt5)$?$h1Ow6_&c}cf#B5vv0baWJ?QdCDV)NTS&y?rFa#@H{?hu zsw6ZTio}*eKBFm^E5j}(DwdLU6fKHitB8`6gsTI5s+8lM)ho&?!i!bPzMD}8GT&%s z9Q4L}1DiK)kW)=5?%y`EBGYOvo~$Pby9f#EYR}#a(Pg>J0J@Sd+#StRHlt1FJ-WoX zWLFu5*56=T@Zp8`(g~@Iwadg6q$|o4iZm4UA+InET7Kml#IV?B>3>dYdkpwEIMauT zd1XDtjVFbxl!?{XQ%%HcBrJ9Mw>`raYjfyk!R|DlLir<#8H=~M!I+ql*2;R!tihte z!t%1Fx^l;Owu_A5x3_Gzo@gEnT{}@^_u~bet zI=yhL=yC2iaIzAw{W#DGVJ&>ce~S-f<@?0)E^KS?Iv{!V8!4f9SN$) zoxxTyxJOCF6I>3=0gx5H;Ny6|JwRQa9dz{6NbUT*j}6G`p9FL=eqBeD#C#W$cAu#h zNh_C zQ#Kjv%W6!Vz}VEX5s2#s033%2Ig(a!=_R>NXUl`y!1As8BWFOQ5gdO+N?}bLn~UZ@ z98rY4tqpSQBEvHfWI#Es+5&LAw9_UF3;+OV9 z=jJ+10mXxY;6TGMX~h$-zTh}wf4rp*;eB*yn8WmyqD65+P)7zPs(Nc+;JFXBWU(L{ zcm;aAzQ)+Aoolbp*)qD7HdMWGP_K*@%>)Bm`XiTj} z0?L#aT`^uodYQCRMG_l|MKURzGUYa8-2erQEpofu;0r0Suw2D&a!O|JCm>NPBJv zcv0)=hSf1B9*7j`C9yj%(VnSc@?;GzmcFe2Tq^C7z~Z0(20=ch6mi1R``fk~()m(k z%Hg)W4I1cycH(U-b8AjrhVGWO^O9&}ky9m~W$IdA)&B)yT@gQ*Mbbnh3Oaf3+mx|I zYEKOkK~3it5TSL_x+ED;{}`|dG`U0h7SI7|WMt}LPTI=B{Tet1=|vxnU&1IMFTG91 zv9_~Q=m19NQ1Mu@J31;`m_S#O#_^&v*+Ue$DgAB0GW%j;7fn26A*626>9zFO?^}@q zqAQ?2yg%Z z)PF}3JAG4QN4kHm|A-=)%91u4^axw%r?`y^RPP$`xI%FE<{H4_IBGKK)R^u@h)H5e z`B{abr-)EabHq*y(l!e-G#rJOLe)_ury>AjtPk5fs>BBZZPZe2AjKS-C%oT=ADfR2kR~%D$Bu&cmO1J5z^Ahgn57Y&etB&F9 z)-(3p9VCfq(wEI@5yz;169Id9By~+KDRfFWcaC5F;!^uT&3*x5O6n(#<<8Al?L?G= zCZxGw4B!nl%2USHK{=qNVvi6|IdYPbZ5VH2w`mGrlP z(fAy=bdLjI8<{#~3!`TtdDv}nI}w|p#__;n2dRu=hglNgkD`qfc&di2N$?fl(|{MR2n`y&vdQL>6k(~>o55VNXGt8@U z1^I1iH@;aTeFE;ZL1FbbN?o?6!T=}EekVZ^FL|_59i^7wi^!p_8bkZV_weH2wfspQ z9Z*-EO&l$$Jqd*NLR)Ffy|>9yOzT!J?~c9*@X74M%RrM1SJ9;idcF-SjEBzJw4Ts< zWe8}uUV{?S)s>+VtBo)2QJIE!>l4n$0Vz zmOUd^neBP8k!^$_6xnppcCozjWZf?>_4MjUs*PaCN-!`JQb%Q~Xx}b;O3?;qZ!`;4 zsBSeCr3bnmb=lD2g^#lr@GLioG$p-Gj+fW>7ek{T<{8`a5TZ`)^YH zYn?I?`zv-m6N3*7{N2d;Y3aMBbdjThrz22U?w$j7SF#%fsd)dkd5aF5 z{**tr77Nh!QkXr#(J7KD7A;Za2jt#qM9G@w8kPaG=5Y>nkWZdr)bZfszC+0n;ooGA zA!r`yJ>=bnjSgjZ>M8oMeq0@n~APvJ%v`!G6WJ=*(5>sJ!z z*x&}Mu?2RtlhrolI4vK0;12us2=7tMW1(qz8#OtdH^W3TKDl(@9<}gFtkT0dI<`^P z^B1E3J_Q5!*%vYV7c~FBcS-&Y-v7#N{{`ZI$#DOPVPous#Q-0S@QeTFK(05400B-%%J(1INlFZit-MLJfHVjsJIhb(Y@LaI?z>D2C zo8P`czgaSd*nk9#cgs#zw;6+QvYX4FBsn0MwIs9_Swsjz$; zHN|OqSB8&qhmU8%GDe*LbB-S~kapSncmL3TaUl3N4*&AZ|3cy4{`sF6XwA$(_0z+E z-FED9CT?o8!V}fIuP6TLqVXFOmC_~>@~xCIMy)y2xn^RF}#(62MU zouX`3pKKw5C?k_M6ox@kyDOMW5E2TG(4Q*PST@_ z85*;?9AHcQXyzWhxAfCVGsr|qv_I$5+DS|Jx!koDPrPobqZ}0``YGT28se z`5Uv7BB_y1zhd_|N=zt~ZdI!25)JT4xeT*5tTx)7!;Sg;`jjD-{|>6G0IMWwcI7X0 z!)t2+2xu8GS!uIf6T8htQ+o|JPHDrH0+wjx^m!x6ySKG|SHpCbpHmYnLuld?2C#~K zRFM|y{D?~iKUClXNi>iS@=%|N^pb}LL|7o^hPzDR7YrK5%#bdB;mAB=IH@iA-WPCe z*%Gy+NZ#>bjykY(hD%qBox0G;n#!tfc7hNSIM2co_)y&CmBgyAO2!qibP=b5l8eF1 z3zN_{nwRthL`;7TV~$bc*Cuv9_*BP#xGm#^xQl&YfPK?$uvk=yM#o zL;C(&01Ivor0qR0YFhac&nXqD`}dyd^*2uA_!coh`w295MxX2$ppzd8;6a98oH>)3 zV_lA}Oq}kd9392{m$#|z!FTaRIcPcBLk|NdbkY^JXZcrQBQfH@o)1AXovIWkEa}Ue zqQu#QT$F6(1WtgPlq|)i`6q!y9JHscVZbWdrLVLnr(4(ce+0tnUVaf|arWwAbFL(u z8M)hg-W#;s4Pob>9&g4W{n!FSpn}Xu=8txZx$t*&);m-S7Kt7qD=m0_qq5IqwYRk} z_^UcwE2+MIJeJe7l@r8?5}_C-JJo`yOnjxAZIFNl0jrtdXa^Kq0jV;#uNr-Z2jI{= z2*GVkA>$1nZ8@ox0Zj3GHKOsP&!c2(ZMlEezZXhH*R+Gxw8Rg9(U+}eL+N=y*AhRL z69v^TP>5rI23!$8Fa?a!^Pu)dvgqX#sCv-Of5X#T;5UyKVH}n18aCgtYve_nc}pWo zEG;kQf*k6GN>wf5g%oC8`uYJv(NBQlrvpUVOgONh*lD%*6<=beGn0RY%ef5WyxHt~ z&}*yszi3VXarjU!gqy$&?$loU(1RvQY+~+)-^ZGa5!*OdVa|Z}l!HSQ3`U;dHd=b` zJ=A1f#9^ymgnEueqG!2gwq67_E7xS*(>S}i@4Mhrl2c-^xq1uct7*rBr?!{Mmz~eUG++V${dZKSIf$ylGtMsXchv7A9fj!V ziS0BWYN?k9L7HNj*64lw?gXW`kL%CB$>)FY1%C7&e~>@`0Gy%z&%S{1AHE<`Wy@h* z1f}~%YKLE%4o#tww|5oq00vM$74VYacSuDvHCkg+;ZmiMfk%?L?LPRauxUE@sN$ji zJV(u(c2$rH!NMt!NXLoS$%bRMqsmDQo|mkKAQB-?qd!>%Ux0rgI)z$OpLZu02jF}~ z#7z$;{)Rk^I6623%)VH@4gVsT4Nj0{7+S2QxLOd<-fOH)pXEF?z6kfD2l1Gw=oh z34MSOY~N7Z**an5ys!DHWguB>HH1c9@AK*}?$Rd6GDQQ(LPV%sOk1w@c_0ORcb#vO zzEHOh7yIqtY;x)KT`W*0f-Ylo%cjNyldiSWm8E2let`Ae`;+NL)w0eI=Hp9pVztTg za2-$yK)vrM07o$T9ne<(h*fFCMr3Klr}w(*im2pm1d7^O(M%D-Pk{U+Z1QW-bgx<8 z>8}&eA4HdCO1Y!svUMv9_HaIeytnxD#MTE89Nfnfp%(y-zVSdvZ;eUo{w19fgyNgL z*c9=`b61h#I@6IcoaT&vh%c}ax42+5sPTkPDSnqLH+t>ua^k|0KX= zMyd`yVdsmge#ic~c}05TaN~m5P0po+%CjNzhw0$116m2qQbOS_WVo_FI#xB7p3_r) z7qXk!d~}U=VVOo3G~qrBuxs{T_&$Zm%F4nEv~a9WQpJvY7YCswF}_^f-M;T1^7+l_ z%+n&Bi$f%XB$z|G+dtnkCo#G|pAni0DZad3`4L37Ag)}EP&x;p-acK@v!QnOmYl9y z*ZBuUuJCK6+dFOTUrk#NI_bvjFz!OY@*8%xtX&Tt9- z!s)UEuS|6pX<*hyz6|{&OYf)0?Mow;R5Gc;)e`|WYPY#$-&ZwzpS(B>vp7m* zzNX6*mj>3*cX&81x2A>@0_W@+W&&z=CPF$2HoynEroJ;4I8EbyZiXCrKl|3I`gES} z&Df?w7R2G~} zF?ZOoa9}=$8t5XiWn-cn2;aMyu<&7v6ZDw3Go0=98$XT_2lEr?*D*{(11Z5c*Lc~o z54*bP+3_w-GQJM%S;mH48@}5bSf9a1){LHawv(V|D|bAN?Gn4%*Lt$AWd6SEK;^4Z z!_U#k57*m{?t9mj=g29kZ{tn}OR5wTOngC0O2fdw_OFbus=z&&o|knKT~NrF{nR0@ zBQCh4Q(KHGo1?0IzWY>R2?|Ofj8I5x=O?|?tx34&=Mwh~dI&*6Lz$l^PmI5ll0B~G z4Zg;$vN_*l*t|;xQ~1X3@EdCz3y$RYzRyFZ@H*{;J)Z}3vOKN6_Z_a??}xS}J#H_L zfj^nw&pWz3FWW1=?LR{$@G^Kl_e(oBIiJUZljkDeyK7NemKJo~VcbH!#z;_Ps3}wi z;c%!Tzb5kn*yg4RkpzUxb{m(b0yh@E1hV)B?aNyw)ccbdHNHw&Fu0Tmn~D$1Y&Da7a5_9;0I>m(FYxFg8J?L+(x^+qvlx&O;3KSmvc^anNAGF-dEGpR>65{KYX=gua^owcI zIATH12ep*^Gq3KI?JR|1MPeo9{xtU9&U0>n0^F^Qqjm!Km3tgB`!`wIW++=0y&O~6sgdmE|L<)ax$2o z3In>0&tSA40+QBRlr5Arjtofsx5JT8P#)ou)TvQnq5<{37<_P8W`Y5klRz;w64032 zxKh~Sb4G6)%Wqix>*GvAG#oMt!a0K~l{VVxCQ5zU++yHZ!oMlkg^M!oX*e}|OBh^M zb43arWU%D1@`%_DW~I)56L25a#w zjUbohW#!^T*_bGoeuNM1YwB|B>d&h|T&~=`A7~Pntj)9qbnO&U=t`e1bqLR4K>gq^8pl zoes3E}8A+6gA94y^+w?Il$Xj`tU08&pL8~>$aF1)-sEt7)@FE&5iLG&*7H@H%FT>IoG8#44Ewu4 zKM@^xbq0Hsvd>56W@fUS?_s1>7N7qq$?!H};^u~jLr#n~qt#r{stVvNGc}iA z??$nz2Ke{;OeZe~R8Jv6fIV?Eo}y{h95gA;q-zXVpztjk6vcx*RYoUgQ&A;qG-noH zv)5E5Dc&5azR2==^kjIP5iJ_NvqZ&9Q5cE7_Ki-fOh3V-Hp#_ci?-7&9{kDBA6BnA z3!U^ny>n8WnP0d)4lXN^%3a0VGWm;3)?!0rEojCs0G?W&^R$HRa!~CIQUsWDXR|r$ zZV%j=ERW?ytZ)SYXN8$_v$L{%fimN*MaL<3>nfs^3A#h~tpUT`bQN%rUW znk*NsB|DT42X#1*sKx6dWH4l0<%iQg@nh=vzT--1{J0g7?U61=PqguO;%6|=kMf~PthTvHMKl5_xaHeqmfzIn=a@k46ww(LhCW}D z>7D)k1QIBA&Brl|HSgXZePEHQ;jWDjEZ63+G12BN-(^V4o_Z5E4g$Nn)^@@HzTT&c zt}aw*b-UfV(u*Qo?HSxp=9}iM4aw*|Vn*JW9PxI1JTVhV#>VLPY?#xpd@JY)vzLL&NGhk$h7)=UAf%eD9=9n2CKs#7}rN7iU-@2-B zW~s#h55;{1Fl6S1oBItDZGDWubz zMdwpojm&puoee`&l0z;O5Evk#q2&!GQC8ETF9EYs8Z%^dq)ki1RR^E>6XC<>?fTS;pQT=FxiP!WEBj^+!MxMUxozuaYHFcxB4j!i`D~I9Q=BX22s^ zrBvagFJ{m?Sk?h7aJO3#aMwh55a3qcigLgsd?Wu=DA3ixV(`ah8xd+4&ChFLTU-q|^Q3sv2eakTpJ~}K40uWIM0WMK zk5oG%bRLsapjek?fER;y-)-}0)FZ*pGZJ>OO+*+=8RBK3#h|r969_%Sv!d`^80#7d zf*Z|`jTs~frV~++nmqV;i}UDvSX2TyF^Tr+dpPcgxb7Jq4eiWCa&_Dw1rF`@nOUM1 zb7?4&US@y4S^$ye(Q2-z7`+-x(@=pyRB-{L6T(7y_3jTA#kN@W1pSbo9cmz3f$kS}M;TL1y!TPDq)3oISDldI; zW)dc0c+1m?NX#*yTtmcSE4s>14A>-9{fv$7LLkUt3wpia*APhi61Bv6&Z8>&EbHAJ z#~0Ay3aED>wU|JyB!s-F%iBWzVatG7-QX`RR~2`wZMsg$+25Y+;;Eo8&|5neHMaG?m0B_w*yR*f-W6DgX0<9>Z0>@52aiV-T_4 z30l*{!U|aDiLB>ib#ltgCAQe3pw-#`vDT`Sx#0|pw2VM@oP2y?mTG$l4R4eAJj|mH zl$~UtSlN>ZvGQ6+9bZ!Cafne!2RP9r4+tkI%5#*kI6Gk2pYukak3T5rex_ummJ(XnCs2HD43wwE`5nL8vnN&IvU97wI>? zxL1(yzaPAnqoGcx7?{%8-yd<21e&inuZ;W_Lw_?FQ{twcFNH#>p2iVJhee6<5%=Vj zd}cQ@t3h1?rj`&!BIiZb!X?FN|4n&c!Ooq?(6FvCY1%3n>01Obmdtyw;CFz5xuPOR zGoSR?bPZMMM;XpsJAUR(C0tRzwTfK3m=>~@lz&6Co?$C_D%=d@*E3}%`!#E01Gt&$ zQ$IxH3GT;$WTKjDq2wY)4CI3EO}T=-RXzG7s!Pv!@4Fkhnzy6|efT47(jGJkk2@t8 zv`-JX6UfyerSr4c!HkD{zufLY4}8xe74g9c0lZ5i+&aR zRj~D3YNqTaduI?Z*TOURbb(!=ZL}x z(nOUAzp2m08%&R-8+@!jJ%b9vUj=o<)ZHl1j(5f`SV3v@*DF9wRB7c7W8G&E0yADk zIA{NQor>kp6r~i?wXZBLU2#s2Ds%2x&)})@Z zVNs0K0Xw%FGyE8W-$?8`Rj(KMsnUT%G+HmqCH|&D)n8?l|DF5PHTbe>zJ_qy)al*O z={;)yH2wXzQSje&i4C0++5Eq99@gK#T0r~@$G^TJbv3s!vUPR*M-OsQY2qImc_;cQ z@9D7OV;Ihq;508}~}Jpw(W_21IRzwqktrUQjW*j#}i6em3*H;Xidb3mQ! z1YX%3H!L=>0mZ#Jg1R57yVxotziT}+D%LsM`#W({q4`+UTv}2hwY|u)De$Qd9vkK{ zY4%E{h$0*?pj@ihtVD_11xNi-EVxK}PQY%Ab)44i=yoauZIE4#ZR1XR#+6EH&HP5K zb9KtHKleH$0_vB!V;y%=>YafuzoOhAEH1x9rC-$MoCeF%aQ!f-xI9f5$v&T)i-Dnc zMiE5&?@b##OEqTXSBOJRdQ~;R^EP<|*v>d!Gvu8yu+i)xYp(%I2;kTWr3(~~0F7V~ zevo|oVn15M<5kdYB%?Fig*kYMXm@`}Z{~U@X3zkkPpP?CxX?a3grMtQ_`uqnucC%H zPAEaT`+S0EuH5vSSNk@)y>KQvdk^`9H0btetw7cv*z%871dyNW=SPGFTiKPuiD~IY zBR>q{;BJ4=5-Dd(o!zm{&4f$}P=^U>nM_mrcqT1ZbzVGy81KR{T^@@5MrUI*n8^UV zMe4L#Yw^Ma(gx9xKEL!s(t#IJbxUp?{se5VoE1{#+?Rlf$)>%_p4vf%md{CXJ4J8u zqghS<2{bNt%1AC&yeN(x41Dgi+Pb)vA#!Zk_Vubi0={9D%WstF(W=mWEkLTv=uknb zs#lfjD^rNZ!i7IOwKBRWFWd#UaqG#v}A8BXIn|$vG@F%^30CaB|4f&kw&kR zpgSvRCEN?(*+orO>sDQ$SRTs1dr(JV`Y+1etBWlczkE?Ls8d#2-af>Sd*thLllBk9 zT^QOjw7Ux?0$3%MyEgC@>faphd}tTok9ff!9;?SL|Jw6^FzBEls6$X_0DwRq006Xq z8?=*|v9&SXKi7XX#jwY04o08w2!8lZr_o-9%wGH|u54^?=lSs`kVx&N;-JLaHjpPp zLD~*8Yar-HcP5R$iE6?l%17ginipke25oYOsJcC#o?k5XHt@SAk@pD4BiJP2!SAun z353olut&}w?d&{}!i;z$hHMC~~c6qvyq(G$eE!h>{wz9wvc z-cNS51G&ZY!W*gWMkvN=7_QB(V(+>l0VBLTPDtBs{o)7wg}%WCTx~;7bHT*Md9*Ns zZdC`C01iBhLS+}6rtCDlKnN&5?EEn?{O9(G0nC_zOx_(WL(1GVU?l;SV{kUR&ng&! zW%pD)nK?PWM|zQSp?a1B;RWFfhyQV{bJKTGef3W51Ekc4&F!Y>;5B7*i=3;DRPw@Y zCeEr#T21vXK@gFCzL8IQ zR%`~+Y-{00qGvv89F4Tq&pQ5q*J<6KpN>rLb?$+ z^X~V!QTDt4f^+7VdFFcN`?=O!&swwMzP~p>F5f8d!Ozb*+K!H|g%!H$%7#@5T{5SF zMGTD}EWH+#^_bUi?<@b&Me79aIoK}AIYL}zW1xKDBd2kVtv!?K zkWn0=m0)I}9>q(mp^f_Rxm?*#ncPAhXM zUFp`Pioxr30Iwx@KG9Fj?$u)6cr**#2hUs%c@88s*Q|LpwoTWV>8|iP+Z%+Ekww9U zMi*mwOt@;9uh%6)6#m!cn-}k^in@8|d-vs459+cT!?N-wLG}Rj5856Q%8x?)r*pG7 zXSqTduvDV0Rbp~#eWuGDl<54ki|G`sR9P^jDlf<-p0WJJ5)64R;GHdbEVu~^L2s?% z%qZ~_JYcJ8Ww6q zARmy&qc)NE-FcBdbFya{9?R<*I6w9Vod1Y#y17XA0vpwN^KdR`se;kqRR&%NhFg*( z0C%6KI+}j1w1dUOmP6aq7lTlQv}yKJkk)niSg_Vb9!J?Ngd?3=lGY>}t-lF4EORHL zUKF_a0wkFs<7i%wpaYWe^6;7^oF{aZfR_=-XB*A(>eE*HqGG}y@-p49MS@L(iidWGBw8SRJtIzv+$Y0ElG}^|nMV$)d)XpIgy%y53vj_t zVK)>I?ZfMb(LqwmRkas#^HTPM>aU$vhwOmLYpiZD#-gm@A-+6oOPly&JE%dJ?v?4O zo-eXXy+mM-<`3=CUJw&=zE7WZt4EyJ{uXAKMQ>rhy zQmy(dg(5(5mS~kn7f})`OGQ z>$0+w8|hkF$1yy*RE$qA=M;@6aB6ys;;_VP4i&6|WKy0^tQz5sMbSSQ3m5y|-j?VA zvn;@wV>OWXo9ojTHcg^t4`Y>C>R5c@&s^^lX|}4r&AcR`g&KxfkWuzR+S?=5MX?^4wk~-jt5ug0%!w&=_KdVakt()YJik~B zotChs7NPJJL$_l86R-(j)FBXQtU0>*Gl)%8hO?6?T21#6?T{KL!`5QuJ+#G86sRuP zC{2kJf&&y3Th7DFL%X!*7Y`@LdFY`hm>}?OT~Mv`raD^8x>Se+5QHUHp>E`MZ_@Wi@XFi z6j8mg@znPZ7xn0tCwJa{xfD2@59d_lPS0f`gZmja+Pkgjxjf|!`}(%>^$>h`7xCojP7Qj|}NhcjlOLJ5lwjY~i( zw2*ZdYu8UDQ9VgDK)KJj7dT|v2z!HD;N*lp91zGtF)c)i6GI2N! zNdx9zT~bRet5N$hVOvg_KejkPsxh(lOZOVZO!E zA!Z)LmgqWZ5ZUMY<`Cmrida+6q(B*G-2W_Tb8g_UnC(+t^++KzH~(;XJw({AB!Pd( z7pqyVgR)H!m###bEhcxlxHy1!)HZ%n-(al^5U-o^Lars}GE3L*h35Wg8~>QtPv58A z@dI8Wv=UubOB=;;`uKypT>H(BT!eKZL#LWLOg3NT(dU~p+L?h=t+kvgSaD1=hB*6F z7D1_6v`-vPe4mvoHIc zJ;9T(o3sm}uK*#`W}4@t*Z1Y1#fu4!1#HD+I86@4!sDUF{np4|32-~~M#HS4`UG@D zFo7nIR?keiL0>0%n*21*7-V(0)uzK6CJmtBR?`cQql|oyYxY()tLQgF7D+=a6VeLC z1^^!%#K*1N@brqu1#M`bP+6~A=@=9$jkoC0&q**YCb%9uJ-)e@+=bpqh<&NQNA5W- zq|UF&cBw>bl=n%q*tXt_|@s$`lMikUfe4gqxO68htr72F<* z701nZ%(Gu(n@h>sFgG_#u4Dt{Rl4dtyb#3~iL%aL#yquWYttuR8jg5#|A`+0TFsu| zBQHKO5&wXKhPBUAIF{PH*5iX}vvU;1D$9$BB-n*6_1Y6xSNnDg69d?Tqfqn8nBuPCX-jUHJT1YEvuzIEMW!X<0|u z>xO;W+%d?AL{Nbaa$?Y~rogeG3y?@Sn!MD8sxf5JS z<<&xmdvCsg{$4o46FQX~Aa;)MRkO2=q3tURYZen5(`_9EYf=em<*{tL8xgmxxhS;(OEfcBjViEU~gE zm-oXX3@4_c`z10uE=k?g0igrckgxI6slaA$PY0$CE{$nHoQ@$m7Gx3JJUptw!0;FO zql2J$zpijDgE__GFCn9iRx_B=G6MQl|{VG&v?}(PURVA;-DO- zprs#YeLZK~OJXOqqE|9N3&ypZeg;cmu&L`3uP;b^s{VrcLjOH<-E}G>s$)pWEbMHz z2_xX0u408|Zz<72z|9$V>T|k%mAPWvsr2TXR%5NcHH6$7Q=s3W(ii$6079t5anbCD zn}JTdRA?1#2!<$nmpryH(gGHS(oh7Oh~BGq;kf`;f@+rBb{pHXu4yOoA19DEOR2$J z$%Q3cEsQ&?dLaF}UUV~~p-@Bvb%^hS4AQw5)7dq18fNZpAN_VIAmO+-P>hF}P)Dbi z_Vlr zQ&m-!QX9h&`$){ZMCahAg~EmjA9YeyX(>>Rj*UAcDMaCF#k}Kl4ltls6)Av%}fr79@C zqwEolBL{#21=eUmEg32PjOhhk=~($=<_E2Z_{9NlI;YRwmD5(d96^FZhRJ&)BbAk0 z&m(pOZcd6ZM%hT;nF|{)e;v`c9YCugA%O^Q(FfsG8Q`MI@c{=l@5gmG(L6pPb@%iQFqj?E3{rK3jco{%P_5Gf>}@`7_n+k~>cpDwofU01g+drr zIy_C>-!9VRKiemg0LeoX7k`{L%5IDicM4X;#uBnwZ)SGD^jCG$bFo@q;@Qz0UE&v8 zEpZ9Xk-3fS5DEo!PSrB(uPxE;4-Lpa01_~{%`3W3IR(WU-i z>IjBM^W@FE-?(6nF;IS=;|1yZmp&HT>+qFy5l?^E`5>ga;#42!dU6OX@7(Z?cN!!m zZe$N0#9}6)kClGN=}2}=?XdHOQ_4!@@y<>P?*#d<&q^>+b!YJ5CegedTI5@gFLITp zMW%nleHG(_>k%?l_IJER>+H$?J?3%H%bF|hcQ+pO73cWZ6^qNsKbkh0 zHv;o|4o#rmHbhV7xJ5SIr}m)KTa8rNX$lAH!}QM5;qi#sW`!laG=r#F>t;0X#whlD zor!stE)mHnxama68AfjYarW5uRj3Vx-$8}vIO8JRNBsBfVFYn7`Rg1JUg;4LUZEBK zmH*qX(5M#B3@c8+ZY(sg`}9*P0&}HHn@5l0c^$H2^peue!= zogC=y5yv(Pg+f+QcF+{&)5kU<7hcqdbihr}v-+@c%7h%EV=elDzKcHX`}B>yYcZ zlXuw68IvQB^>JY#K~8C{(e3m>qVzkzQOp=00$si}-7R->Ert{^Nj2hE;nGaTl3Y3L zrQ&4eIFeNEX^0c*^Hr!sOq_f7vp{n=NnFb%UvK0{f=fnoO|RLdT3Gfe`&9E=jsp;> zg5M|Fx2q_%B>1b);aV-fS0NT45=C{MA-#tzW)`Ys2ma{S=+Q($MlMg`noYZGn|b7` ziN(d&eHh~p&W_!Qb5Uo1S?G^Syp=F4=uQAv z^BiHhU?5+-5fPZZmuoz;P=FgUAAM%(O^;!V%P|c|njrmsPn7D?hJJUao%n)Zg z5JToXtEF=s87Ny7%UY_D9YP0LRG;#-Kc?%S>W7ao$6ov(ZUQgBYT3XhWcLK+C8=U% zb}~t66~)XIydL*|?jx$>XNoN0fAhBRnE+m``?s0E+0hAN^Zz61b|lqDD?)r(A9n7_ zojjJ_o%GETMacFI?lJw+DX?vb6T+RzZ1FZ(>tt5LfCQW0#)>Y^Eo@71&ccGM zH1bV3f~Md-%rER|_*K}=a%HSt&5;ZyFl~nbB)e8T`PNH*FJ`E}Kb0nlwr>vtSxmmb zeG`{v&R9V~Q&$x`py~&?(!hE;=>Y1qF#--`n>PWh1s|41Ke0Guj2wny`qqq(7HPVHvEUCkjIx%{nL44(G4Qf6<1!ks(m5wi!61pVDb5dq8y|E;9_?GyR? z>K_WsE6M!{__L<#xLf2ui}>Ev-z|}GtKTI3rT=9r z{LM~y7jxGieT(6w`h~gUmcEO)>ju3=1V8(Q_%GhjyQsU~$Xiq=%`eoiAN9{p$-Bh6 zF2h^m0PQd0fA<{TrQLP!-O}3We$jrl@9+12MH%m6?izn?F<+Vf8S^h2&|S>kwEtVo zBeq|d+h_NWExDWhaEnkA`4e$#$-K>lxZ9w+Nd&hvUEnX;Zz%AILo@r_;U|)OF%$)ul5_`*N*0{{Ll5{?{YKE-{k+hn!Kz2 lbK3k}U8M7y+UVbtsFEBq{Iu?`+TVBxBk(1wvff{x{s;E%iKGAk literal 0 HcmV?d00001