From 83d91b6a7378269a45755793669e082892a96eb6 Mon Sep 17 00:00:00 2001 From: Li
ha6%D81}KJ5vvw?L_8py~n9+>vgl7INkFVtEJvF z%Sj0@{?v#G6eCtYHpA(lSI%@wg#SF8NoYoXnb}S!N1q5e(c#8NGR^cWcFO3rA?JDQ zMe5iYPC(C?}o3 za@9OM(#GOU1k?kba@FHd;|yEtDOcq|Q40}J`JQssL8u9a9r6^0LQoS8I}`GxtNwwS zWT1`uO3GEGp(Yzv)>E#k3q>t>KsEG~t8$>G8rH>Au9{j7ExTbepavUtug6?9$73N^ zEr7gf%!{D<8MVw~u3F(SOp`(>i!xsAF-$po%vEbWhOq^dWs%<&j|J2V9&^=JkGaZv z>Br)8^AFtboGTWh9-&{+y_=0Ss9GW%VpJD|bng8oWVH|b>_<}uZLkK_8H608GSZ?m z?pN(ZtrPVT6sJN{dvvw@>N*V@>0 4-<1SZlS8f5b_#Z)EBQ zk2uM8yQaDaZ8tZ~pZ -d5xf1(Tnum%*KrAE1mhIGtI>nG~?%7%su z80{%nEfTg&*lJ-<3fm%#=0+%4*UZLo2Go&c_Lca3C+q?%n!x)-poMeIk!j|YBUcbs zMHmgo*{`868jUlftH^PC3hOIurZCK9Dt(}?FER9*uwCN!zOaMBs4j3G-wL}d>~~?* z*=9eQb>Xrk2}>20!HP~oU4b;@=g94Z4HPz1*hFDdg)I=aNZ4v&PYR=HMb6_eRESGR zb(G-`;&@fqbzy!~O!jj =XFDI35vpRM>XEQlrdm{i>&2wFhdnVefj%HBWLr;ut*B`Sd4vDxi{tWzb{-JJuzb ze{8+;l;btjwUB5u?oYp><~avz(7e^7N2uRCYv>W`SJPmj9=c!6hU#ei9z@vIsFx6; zdk!nj0dp#NU2fjH;k^u02dqK!I7U|;elgTgv*TY-oLyzyU;~X~Qz*`uZsIZ~%6uq} z@iJ5~!}5iF1VxRXUwtO*8z_thz`hsuD-`86!mqADawdO6VW |Bft4MKW6<4THWTuHg=XN1hoddgK8PkHRRuz0J0C3?zL7 bb`my8*fe1e z2wN kDMr}8 Vj;{&ZC5)OzF3jtm za@8SWM@Z#w+3wT`c I1S$g`&ZLUo{lgT3Bx=%F?d}igk)8N{{2N6u(tseNx!d z9t)vO7V{n`j(k`gkBar2s6WIn3TK=PQxuAepC+m%6sMOhe)x5r=hvB3$Q((3ahxcQ z_lP4sLOJPG; mQ;VKl0}imPDQ4BPj#L+0_!&6pH 7qLd*A +x$Q#9)FKRCo$2~0UD=3b84vORcB32u3dr nyT$Q6F@GiMBozDoA%1_0wWwQgArhh3uLcws zx{g>|i^>(hA()o%97l g`E*bgKW;^Phs@yBxdw#kW@gWdCE2Kw3*Q; zn*Dl;AC00z3~7Rd9mk5}5@Gc6oBimOH~Y~mZ)W&0w#Qx-c39XK!mbPZM_ADio}HXv zaZkCbrm)(=nh9$uth2E0!UhW)E^LXg6~fkf3f)lZvw24%j;{)PPZ<4-hyA`5c1+ks zVZREq@nGeHqd_*ujTe?kiXND*swS|eI5rd3QW$j+IKiR9rV5)OY@M);!dl}odDGO7 zcAj$8(1>~ 9JACXUI-v=O;y1qyWJPnMtY(T@ z48>D))QRGGyXVA8^MGunyN|8SQ3_6_0~A|n2*cJjV% GA-g`UNC0xyZOaQ(;X&|#;lwL1UV!;TZ7(*wSm zAsWNdL}I}Fj*^tC$_t}GC9@o1U4#u0HbU46VGj#iE9_}uTUk*{vt8gj;`pAhOTuW1 zl?!uIn1cgkMl*M$0_qN7^g|kEG;_y(^eT-RH7_BCGX&l%j?09t6!xUBb;4c{woTZ_ z!l=#RJdO$bLD Q9guN*2Wnp`Sy({cfVKgDl8F$5P&V}hoN@soT46V~0*C?pUBfN&yuc{*K zXjoH({}|R1;a^74oK23#50FaNq8}?F8M9)eR-=``ZEyBz+u76PL(8Z6Y2P?~tWJHQ z`FBgC_;*XBT=f(}W*a=^D*7n~GnzbNzt*U3%;+6J-~5lib!OV$ppITqeu>qu$|20b z8dNn9b}{NMgm`}qYbS(krIdPL4Vu9t#~mS7YOOf#vrse?44Mh86HtCdW#W^ykJ@NX zhLRY9HK QrU+X~4Lc|Jpg`(FF?&kbOTuX8iW595?4qy|I9iTNKYC`rKEehFqaPZOH4;^q zWPa8e=jVdC)5 A9+j&v&7FDzE7H=H27(_z1T;&)m6@FN$`FA|FV5}+u(dUzoR$=MAT z^EfC@ni^=fZieC_e9kkW(=VD@wdkVL#MPa)+lh59AjN@L@uJ96u6d!wjQSm 8;tci*+b`@(Vc!Tl#fl!E=L80Dpqz0r zPvIxs!paM)Bdme2R>Il}>miKlB^PjnF!~v4h#_^#Ib-USGkaXvT4C=AJ0Og@;vDyD zVKf)cjJhqHUYw@_s-&=T)KO>0iUJ!6YbxwcVRsAbC9Iz?dbh>t(Yr0qc%!f_!swS+ zWJO2)HGu~`6;OwS{Uq$PFb7X4&Lq-PuA()&BC4+_J**xg?%IJxG*OI`EzL^@dV})mhe D&SaUe7ldsSwolmm!Z5=e@**D 9K3oC}1EzYEb zr_e44D=+LWVKhZYF {-OaG}7Z!f1|;Gu|w0C}yXajr0^==p!pdO`jU0 z-@55kwa3)cPyOQ@ZrT!vf67gYf67hDRZo+%VVgYVs(n!G_dcl|*L?E|o|7p6^bifI zx(J6D)d3-O%YvqxwGqm1x~m-xqbCOY&4QvQX;3XhxEZToEl0?HtDv|awgt+IfkWA4 z{N~bgl6yDwTZKFW_ds1SiW+&g9)cPG7F2&gy=tsC#Lu=1{E9>EG}e|-G-mZHYOy&z zdS%7wQU4(t)-irXLmD5F@~e5`xKJDmhA%<&4j6UUgQ}>b)Hahey?5jU8$j{V4T5^n zSZOwcGad_-V?OHmE5b)zwiv&!d_<@{+_=j|io0y2Ty+W|vvZzu)gQwC5|)C3vtM~n zxvG`0w!(S{>mzIqoqUdbzra<(9v4QJf&D%d_M @g!;uq6<@b&8J!9SSx+oXf22~yJYy{2cozt;*>v&=q_In#Yn*OEA z>R05$)$ 7vWH&4j}xGQJ QAKbzT0;fR=a#Dts}IICrxVl@hS5dhVvU6wVqz>1wG4_51~V8dA%~kNk3fwu zihdn5l4dYUhn|F_`xxiUEHo4>?d`{5JNaMs(OL9uBzqT!ed53DJ7ACWzCogNhWyK3 zyd_}a*OU3%i}{}Q{SRL!{RD67g$K-6Z=_uHyD%E}GNUgp*pGgZz^t#Zfx;dTwpiF} zRJl1awJaR@ePIWMofdXp7>&p{ZfQ@s=EXO&Y++NxZ@Ms=d?G*eeYOhxRvb?VYlAjn zC>#T-y{BB&32LNa-8|(gnjNJ}98lDrkaE=&D5?MfHQiJAX(1HVkAR}i*)Xc6uA=*f zOP%B?^BL3p^HKB})BHJg)wIYuyZbLa*>7);<=NMA@i}7m(}<~-Uc<+T58Rv?PsLHp z=xgTv1B~;uqW|LA*A};_wj}$;qBb?_>?WV|etXLy=3uNr^BL<}D8E8g^y+w9sP%^3 zjW8!1`*Z0KB^u?e*qBL-NNiDd)Ic8o-fF+Q6`)sh6QF29;a2- y>ZVrS!H$U!uOhp)V;psG7x%G>J?c zFm=?_vBL(888#CK*E;Un&6_uMR-_fIO2w&c63J8vn29NlZ+~%J)aY2HUdQ?*R{9D! zN}qq+zC&Lx>kEeBRluY`Y2TW%t#UwUK46hakpn9DWvoT9-pfesQEDz7%zkW jPEY};TPi)~kIJ77ByTa4r8;!GL8 z7;M{N<-dzSivKPGDgL_%%uopLJJ9bv6);~YvR^S=6ZWe?LurQH1ojekLfB8F@(-r@ z#udyn(J{P()o*$@+^|wg+^HD?)fsEh40+!*e$x=L-#n nAt5-xLJ@hGwMn)t0L?UVJ(EU z7B*fOJ(xJ|9AVToVYY%54eDv~oZ%*Md`{TM!VU|&F6 ibrjgyQ?8 {n|LjyLKM!U;xwiEyG()N?T}K1%E1>E_B$ zPxqzRW$NqI>AqxZxX#C}wKxCEbl-F*MC~hgSV?h*m6U7dL782^KC{0)6)>-+m{r8t zXTPeRa#d4dS;A<(i2bO4#BnFm&Bk!5K$ qSim(;^WfZ- =5f8rB;4|NAebJOB$>@!rH!_) 8Z~Nf5RH(zrHlK8u;2s+I&(vKXY?%Gvfx&S%=X_K2jRhY)l>7C? z7b 6=aDL1&&B_G{J!h&g+Cg0WbUD>4|Z$PZ0+0I z{2P|vlT%~Uu35uVN*CGRq{*yek6nJfW2J}%)23{Se)h)6rHfj hIxom#mpr>bHoT zrzg$5XYk*u;gH@VYhO&OdPn? -s8WW|2^Hx$mrqZmu&6pY5nW-=y$Vy73_73^3P@aqHNuyoi90nK813uzG%H4 z(u3%; Qd2%06{ye!MU{&*Za?D70VNZ4I zklj$H-04e*pf`v`_$%de6vKR_d=Nf0_$%c)?U8s{llV2%yjnW00t%5^5g&ARtYG=8 zQpY_2GcCy`ZBkTfT8gVwddgu**J~ 6~r3ik$550 zBGN+jo>QJ{_HX@$IP8(alsDf_8e@0Y?Ff6+1>&V3X?lx(J2|I^ckq?(Q{4Kup~8QW zCjUjKy}Ug+>g(Q4rs|!Qt@0)471iyA=k(yaedR+tJVTT!_*VICkGMi;27nfykgq%v zD}^Wr~Z(L%p%{?BbB-A4XV#;CljPml9;AgG&W#mJcmidabI z5W!kVmJmVGg=7^GRQp2mG!c}fkZiM6rdo%tdm(y@oKT`da*#-L0lD=L)1~U%9ABAe zdPhKu`NX?a0(BK>c`doq)`Ek=4TR6DkKsn&ljDnTm_w;!NyGZDZ@obr3nem3?5XC@ z7bY $mM!;p};ttNR_j4pu!R*B5WU>F6)8Q!3VTy|MGtErqV9^w=Ey zt%gtF8C`@f50=XMlPXpz9nlG~TlmbU;0b8@&9e94TW=J`p5oKRa?!9%BG*+u^DTJ7 z9iD6D_4ndFEGW}9pI(PA#Y<5IqUEo~<0cncf7RRYk-6T{8R^^+p<}99$q6(QLdyqZ zilgx;NN0G2F5AhMoIvv+wCw46_jiTX )Y;_AI!kkGCOy%js9sQIL2XT@{d3SF=0 zw>lxq^sews_3Omyh&GINa{M|MI|(#wqh;!-U(OXqTkO|^I^&Q(CD%N^-UV0lmmbJ9 zsuO*>Ur^NJ`e0{YO0CLd!Sd!uP1_Y3OL`ZU&Ihjh;3-p#6M}|%d^ca2hPj>t-Cxda ze}sVUFUO+MBP~1DSGgt6sgZg@7ZmS!Hx%#XNPXZA99GHh*f|@ys>Us6b>Tn57ZjGJ zT$GOMifHr5vwf5vORhyZ1GV(epH~#R-V>$ogKI*;VNKumdPbr3@hE*1adr6~Na%2s zE?N@_;jqnOedoVg=o%HRQ@SC~2g$X0w4Mc5{Vwg?6Ro#VJQ^_5^2oA9KNZH?9If|I zyjned@z&@1YB&6K0(ywi^3c|y9~XKSadnOEzT{e|#)gLLgYKxD1(zoa&s|#DV!i#& zYo|Z%=__MTclBe4o>0cPVd6r6hap`-^bM~51XkU=moL7|XI@&c|0}J#^u%6BD&BC;@0(ugx`g^3+aEABDrCAxy>?M%h$f2+yIs$UyHu6V6r}y?HggPRY zV-?ih&Z9f7DM$q$|Ima17V@#xfKdacP98OE3N^Z1$;j3mK0YD0HgP$yI#vofVR`h$ zi?^iQ-b*=$8l>A#W-bW+Obf-q^4x-UKNc2fL5#k$Cyu*BA6)f~F*<~uTFu#0^*ub| z)k4=Fy%cB~;r0x==vjSmhEt2^bClK&N^4LNU9J~ScR^`CUhvZV!n9Tv(LG?*<@&<) z<05)Fc1G0pvORzL&PNMfuNPrVE&1))_5^XPN?xoHkIfic7^_iH#^iH*tX}%9zP>WS z>7GL`<3P^O7S$K}`Vy?({HHQ#-o&wv7F0I!Fw3r@x>Y}4hQ99yyHx(${d|KhU44M> bjr^p6zK`s1qZ*CF?-!|(pEJ}~Ir{$qCD%yK delta 37879 zcmd6Q2YeMp*Z1t*o15g`kOCnD2+1Xc&> 1&RtTo zQ&KXLVTA ?l$J{q&bbdbjrz9u!=$zi8OL|skOCmls zIkiiATG!r*E&3*RHdcl=H~zE@@uX&CWMy?vP3P!%qxD~OIpoxoq%K`j)4Fs`>5?>h z P606?Ke1&&US49$$+o xk)4KFX%g9VhpD`nEMq ko343AueuqJ+S^piO6u0LOP8LhUAiZw z^-qJ@9GMS{X7&u@!+MeaIr&qk&6qH?V62gEKd9v!i4Bez;f^UKFFM-khE}b%;p?nk zrDe|^nO(9{Q&e6`Y!M$f%kU4cQ_{}4(bk}QQn%!u$vv~uGm{D?6ih~ %#?~IH3Pl_vZ zWleiRi5dQyUhi*aHuKB|TYDofqUB%ZxDqoWQ~&>^=ri(zI*<8(QS6z?wd~0y54#`J z{(CQ(F)+GKQ!X+8R)J}*aNE0;9EfhBHT|!Zn#Q`yT_^wV6qtXnyflZ0+f$8(RemZN zTz7%?9~7GnjoY!48vYkbmz;Vd?<`%K#^&Tq&Ko^)a!!81m T*tldI`gPaiwx<4`=#rI`22Ncy0Uq@M61^PoLz{8 zZ@}aRMc0Ot6dat=v> u|j%M3qf4LJk)+25mA%fF6S;ctL47y`|LH0D4!c5Z`Prr=#9~v`MU^;rl|g+EUIw zutnNfyaio{t&( i)S9HNP|hnngQSekH`mUnwv82@c`@ ~_W|Lqz+WQ4w`C1NYh)BN&l7 ze8x=rR*SX$a>f{e+gnPBp04W86tZ6PXJNijhNyP<`O)UlzLa~{fVxm->uEgPyjsb_ z&22XAK*^&mHr6pWd~a)6^2oq4zW|r;3u#vwNmMYhz{no?i5Yy#7A@Hiz;+psm1Z;^ z^+V+lh_wfS@?&H{s}>UynwJEQF3{rRz&8p3pO)UgYifE G zN$%UXch{7Debf8o^z7F+yI 7m&Z#qGl2+l2w< zl=-$gK~*g8P*EGGk9mHdR^7ijARPfl*1l>@pG2&hiO%@($`6u2aVFw$#<0&k)PUw& z7xb1@tBOt`Ze$xx {^ ?@Lt~=0a^cadw{K@J?;JdUd;*HEX+aC$hF8&c@(_iQMca>E z^$@DsX5n#Ag_Vl7pMbk1Xu%T5!Q@1x>sNd&IA~$Pzc)JwUb`2@T!XQMvaw@>q83mL z#mdL+pq2&LivDmv7*_O0vjU%@KZX|CciU}El8UdnA2@#2LpRW^ew}nbTDG8)KTzYi z4*oO!l8gTce&E-$LxVOg3 +Dhayx9rw|pM>VR!nU;;eml z`gyT3r^E7#E3>p!%N!XC$_oEjnSQ>}h3u8mA{=_^?3JB6=)3O-S3kdU;d=T-l;Pr? z5ev%-+IhTp_Jw7$o5&!G+k_O kGBEPA(DXl0)>ikKqZo!!rVJR zXp}*&l)2qN!==U-K(i$}0Ys%!sQ4KOEi-8R3uva~bX22rB? s^#vgk#Sai@D>ArvB5#TmDYt-2Rku3k$pNq2969!sqXxUo>AAMB zpl}FOmqIbN@3mmF*J`bn$BAOHK#~(gphylOJ5-1Z(O%wH2Kr9kj}|rHUk!LL5><#F zMFZiFNHrACh^i>&l0z!vnW!WYq8*;Cf#j-zTP(Rk3@l6(!3b{@85Ps=@6Va!$(@ZP zPYXGJ`}XY+c)ci}V_HtW9P*Q1RA>a2$1-O|Zh?rjVp^LFp(#-X#bY+?Pk_5n#B1tF zG;u|S94 5U4#LzP-34tqfGyzO2!4UA1>A-83PM8lLXl-r^b@Sbl1Zwax8XW&MN%E5j8jF4Zd zqV1-;V#p-L$SK-|+(7z-!Ca8=0V9uG8a*^eK41&?Q0h^l$|OaKRzYP%$wsNkX-T!# zQ3z5xcvB%zv<-=}?6m?<_ie5Fw${DM9ccGk_YdFUZxcO3#P1$3)GP5Glri_>rXkLu z7N4VuBFcOd;Ksn62)8lZJh+|UPJ`PS?tO5nBj buo&Dex!Y?zaRE!hI3 <+<|a6!W{v3lO{Yxa{)Gkm 8e7(ZnkH7Vb{C z7~>Nt%8DqTq97}}4)+jT7gF#exHaMKhZ_m^Q@Hf1lRuRVb8z~K&A569y2Lh%bc%Bp za*6ZI* ND4vxi-voV6F>unaqu0ZajV~Y1%1fG5G* q(H^ZK73o9^IYoEodRnN1Qw(7;hXp4wm&e=!=9XB fQ$WT>ARhy!HZt9-t wP+*RS;;TeA`-UY$kuKRWWM*5@?v;F4e+~ z+DAgGKVij+lqs~maN}^UD9Ji9PV>yNiK5D&=fJH6cP`v$xW#bkLGH(?>IXuqdLZPK zBPWWxXvsMRl|_nkS;#4xGuMi_ZeGqKyN}8s75hq=ihaecU~Uz2s533O&CKm*j(%gM zdz878%$;ZMl0>K~oT4h8R|Q<%LQe5Gb5An&8gp+l7m6QM>4sa#DPowb&s-97Y0PEo zc!`v9UnV~VdQc|yK?^xW9b^$DSI 5V#Oie#`SB7 z-ote!&QS3ct~2OWGv4_wJ7h-(+*+?xXP|Y)$ETx8;=d2oJ!5dIG9n?B5eYeEO`$j{ z5EX~_MIx7=7K`G7nG0pEHFNEm>&{$H=I*D~i3;RFCf6~yp1Fg}eZ|}<=6+$0+G@() zpUj0JS1FE0$yKCdEi}m`8Zz051yh*IVy-uH! n$aw423mW|> z6KpFx8e30CYCo5Jd%CCY$>raGkopY>ImJ)7DvoLk#ZkqeIDZQv*D^;bujEphql!Us zQ<T%M1P1X$6jA #w5^{+La3$mvFImVX)-kt@xiaR?GDj7>(#3at ziClu}a>X@Zt_gE5Qd?35{3?^%m@6Yx^6wqsODMm&R}K1BM`3^7 B*sY#+Iny77 X}94`- Q^8&{-+^5hD*6XpxF}D z02(M!U7#0$9HJ2r>3Tv%M?j@a1s%Pe4lxi&1y=-=CzTB#f9d-q5RGGm3aV?~l-yfD zDl#;XNe>fBqXV*s8!A2nQek`p^t#kI0W`C|6r?V*@}_F%Rq0IyqB2Mg!MU=V>Y*Bl zUNt*J=%BGm%IxRQGq-^$6V5aulu5eeu;Mutpdf*Yr>~g3)<_CVeB? z0$dsKm?oc=2EpVgsT}C62H6;jiCBP9RT}8j#CFPh82QzlqNzv`E)3~)3Q30{HG(!i zZ%Qt7Q$nbCd7M~ub!fOR`HooACr3wRz34Kc=f((OP#|I-jri7Zgy}&bYr4kBJ4b+j zpd%_EDB9r@5E$JM(f1db$U2BK#hc>45$-1IzSMHbFSJ6mFr9BK=00-Fs5ZyXqnRUS z=;5Bq^6q!^bvmKLI~+ZzF!}r;c;0mB7a%IZ9(57X3C|fjhLdNJ^iCBu?|8gedOT-< zZ_#C!lSWM|d51q~)RgRWK>Rd8vkT?;v4_(6wzTci+Q9T;(F@~MfmR?IWg#5CsAldO zaiyZP+8rTVBd!QJz~AW&_0B<8`X#(PjgQm#Y75QJ`0S&q)#p{lV~>{^#5>GN*{flQ zS^Jb;+e71^56eiR-HU-$HO>iQmPL|7nSL+a0Gw3K(eX6~=O{zt6)rjj_YB<2a8JT* zj^v|zN@cqL2i((e_gXx3C4Wjowj)7$6G_k)0nt4LL~R5${zOQPKM_(bdc{#muDH_{ zatUfFC@vRPl^pfg6<5gIY(kXnonj4>RGBEjwup*S?r0&W7{uH#<_ejc&D>+mJ;B^j z=1wwq&DPQz$PFgnK&hhwe%nI$#LV1YLgwK4wsx-Gh b$S&? zo!-7i?F(}}cTSuYn9MEe<`1=sKw0{@dA_fk<~O@1 Nue$F}uBUnB8|P z)T^6c5B8dQXJ W=<;IdvPusnQ< zXvxzTT$)zNtbJYY-lfgjh0evzwYeAHI3D=Z^rY8wre@nhA}0KD!>sqq4?Y`*9jm#0 z!l=pH*Ihi=^VEiE{y`7LUe|jMN=O*`*pxVT{1@lOoa}M9ZqL!R4ClpZNs%w!%zf*= zVGC~7e=_`!@0QN+T&i)k|D~eC^Zbuo{&nT}Uz*QyU;KV_Lz`{XgjXsZ?qlCG$d;9x zcRu3Mwoh73{b+$ IW z)HwXY3)>U+ z?VmXP?JpW8UyA*8% 3ysU!V!8x8%`Ha7aVpPw{BF17W0N*ue9 zRQ7R{x&AXP+gN)k#^=Y?$oIy+Oa08W0~l26blKr^35>7N^>S2Db0EB^V)~^QF`#5K zN8Z+}`p|^3O2#9XqXOu25Xw-|Xv+&Z# zQkjtVQSHJl)r3ejZ` c(?-QL0E zGovCU#6uPn##+?!r=tcl)C-`)$;@^|;9iDBmD|S_6~RJZTTCP~KUquwGsxWXpz4KE z39VvHI%vFj8Mnm*Gt<^$ypM|TsS`m*WfmH2G0~FA$r(Kv#kLZ%7%FfpGI`T-sfQsC zZ}5{XJKn(1zqy++m)h-BJkQ)si?{D#cHYArzK8ks9)`Ln<&nzCnKB6#+#L)-Uyn*Z zH2&QJ?+gz5)JcaQGgK EN{<9XLv-i?SqzQx&>bB%(Ns=6 zHRBFy4z0d%;?J74wKgOCW@LDvk`PxyPoeYa4QZ#%e8|rpYYe;|So0@~Y *|;k6W^n YAM@L^p9dn|;M5gxId|EgCoc74@+Lmwb_BFqk z`)<|EPVmk0zR*|l8sqKr>Rz%!ROS4gAtuNW(ZZL<17&_+mTNV#o3B%djV#~9rJr3Z z_w8#pPm(WLprieu7I(yFh20Eu!I#P-I(l^&*0o%Bm)*>SugCi={iBYrDfhi;C0lFg zRZO2YV06s~S2|{I*@bUo-e>G((Iit*t1X!FRQ+br;5n8SX-xJpe?wHVsHmo6dBU?9 z Bj#DQzMumuv0wF$V|W;VHT4XgYbTH%Q!_^f6bFFAX!$u~6?4 zR<2viVeW>nG5kiDt&PLHLHMy7VQr>cc`^|i6=RYFM%NI$JPND!$E)Ox*Xs^*d?kD2 zqc_8B2OZ{ffJUpEVQp?$#!{eC(O4=NUGwIDWzuV`k+10tgoU*?! 6}}TkvDlv?u=~oNRyMA#~CZ?*DUFAD_?Wx{Kd>EkyAc|VFs3H5mjR3yqlPW z*1|$9 ^ckHc({_TN|pWxQ#NdGBqlyB3y%Hz;>>AsQaD zb4KUoO`4F4)r-x|q!O*^;)XV@6y2RM8_YnP7SXD0+tzKHyXhF=%+$t;Uw2m-^Yt+A zbU 2Pb8M6`ijZ>J6^|P5t z`1mg u4;MOWVL&_wkRNa1({XHxL$FSRh= z9buaIC`>bJeW}&<{Q@_8s$o6EMy-~M3eQU6ny3 K&BnkjXV=rjJB?Ma4P>zQE|Xe~=j`586W_%txd^$+DkK0U z@gMP6@@X|(Tbplevek4n!e`cpJDU3`q#rtI;_Wo^65;6?nz+BS8BuDBuCyKv+n4Ag zERJ}&4#@W*OceQ`hh{$eH9aV99`31`(>LPgCce=|XKUuouaIn%j;*paaj=*97%b^Y zy*1
e_boHsdziVr~0-n`Qrid%d?=ME8Mx%md^` zDpzmUM;Qr%k^X&5_xmuCYjKUiP3U7zBkpm<`BKvFw=n4(v~UgJ?<~Epz}NejWu%wZ zS2G{^R;#P`?<)iHrIenou%kNgQ+>_gEr?J_UwVRQ->Tqz`f0|<__}%xxb%d*z{U47 zH;~-?eyhtUKK(TFb9&I%` BB1Xd zpd#sp*3SdX0}#^v2U<@ZWdU2ef$DeYH&BMDj~}SCsO9&t^3%6iTokxZ2AaViz|uKz z?;z^e2AU)2zWN}gN59R$K{87E0*fQPX9mef+-gzOJ~}W+#n?93dX)Nu%{BB0se?5` zYhK$ChZpA6!KLTRY$Xk1UKsJ%ckc&QUfJ`+z!`@I^qB5h8#?oeoL81z9QMwFUELP1 z!>?mAd$rPHOMm^vwylOX#(dpJk8-v{;pB(6V!WTZ$45`Gk3qA=oHtBMF3oc2O BIjq0GsXlgmoft~)PMIH4Jjn?@1nr|oS-OR*9-M@5AC*4nzi+oD|NYv}w$UoQ| z)KyP4yQk{@=9*M}Piegry_OO(gVLciEluyDo59KOKioyfs=*B1xAgtadayL_Fn6X| z3y;j&>G}Y*tO%%PWh^<0lS_u$cozkk_HKFuPeZ(GE^!cj4?>uQ0Yu-rT;hy{oMIlj zK=YBlF0s%;PVp2_vE-h!kW-WZEs$KPg`8qP&_c-_un=Y$04 tS!(E}Fe6c1V)ro1lz zL}3ZRB|tNz;0lX#iia!?lN5pKY9#lB#bLnR;+*0+i^J!7pjeIM)>)iOthYF)c+29P zLVNp%%0;EGch}Dbc~BIhe@b0RYUPIF^OAQCTOS}wdx!k0pwLd-E4i D{_FgJ#|Y0MQc zw}81N%ss)}GtAL6KpCz_&^$nbPC?mTMdo|vt}yo}a}MNiCFisdCWkZEh`B`OQkm<+ z+yII2{7x~Q$wC% |;$cc8O3X-7FZx zTq1L+%ne~Khq?Qidyu(h%ss^12If2)ncT_bUgi!lcbK_%(FA-@z7d-& LB=uJf>7x{ChE`YR@qO3TWEfx;H46OG|o^t&6;Xu zhn&$*wX#D_(MEe52*W^<50#U!scjr8r)JWOJcoFXt!xDvDSbc0b%aFdhsbFx4iP{F zlM0U3o2cMu1zMpLqz}6)V0yEYAmN}n#g@i9KrJL!%G@VF?IiaFb4P$^dZ0sm$K3Bg z6xt+*xCW>Kxe0_W1O#=w1u9wrK*~21sH^m?!M@FaRJ}))PNwu7$i5TV_aQ>Ewm6X| zYm4)Fs4cE^Fhi!HmPqYr#*_O}$I@QY^xu3v_u=VPZ9z!Y7KEJQ6t0Rx?@=PBxWe3@ z%%K}+$N)B42#wXKoL3KQMQiIa=kY?9n7? zrCXc1y3EnfO}?ltl9}wmg1wlV&K!N*R|Xd{x0E@WVXXqDyrSejVvh2P;;2Yha+DeF zQ?*40{AP+wvXE2IudFysyS9{vGDpR?GWZ~K^O;-A+$+regSme)*V2ygRUmCqt|^1* z7IKNM%#CC&mpLk9l`fUBN_Qc1OPPCtxtE#y(aU+n878lJNpXWY6sT4pRGz9pS~1s- zxeVsIG1s5D!OTr%ZiYlXDRVu=
znYnGuQR%3jc#DOc;sA4p2$e3Gqc?F`MO`d1 z7&W*Zf(ku_Ixy B)e$;hv2x?g> z (nKRX_D&P-+l=49qJj}jl z8C_*LKcu*dOdyc563wV7kg}J~a^2atHz9hf9AY>NPGiCQSdeN_WqLKstz)^j*!M$5 zpRn8smivi)uQJjd2w%mpD)NMSlA1s&xOhe#fs|Y}a|3{s##rWNu-rW6mayF8K#S!A zKkfDPh!>cA)k})4jP?MjfWKny7?2A1ERZsIfqi{YkE`g@ie9DbX09HP(rpQ}m>Lca z(Vo3~G8zJ;lqWJb9Y`sAfELRqS;)R7qZfgc?z_yr52SQI1X?V0_xK`w71tvycp6A4 zUt#VhkWzN~d6k2Klx_^8IG`ocbRu&ZKuVVu$S;<@gW1 !Eu z@=NSn%4i4B5~+KTxo?1!?pYwEdx3pz{xbR=B!3{_5~*BIk>C=TO9xVBy0dQ|=0-6$ znb9mDWp5eFtzzF78NChUQG#VGxSPGdVe}J_lDo=sH`zDP>HQ&U04cd9Kq}G+?3>0Y z8%W8G#$bmfIDx(AFj~xlPqEw@_AO!b0m~g^xx?)H3!^J6=fq@@Wk~Z7hX@8-Dw96~ zNH)kqVt|ssdA}S_D*bVVe%s-pp%~Q$Q-d i&&K0TIOi!isIg7ZWD6{nfr ~KCcbvK3nERbM8|qsbE=mgvIz^b56g8M@$XrwAIx&~R9JL(OgN$LWfVo-BtznKv zwq^*~21`TrsRk#zSjZ{H0I7k<@fLE5`9RdlafwA1a*8!TD&Ut0l{Pl@8oFm8epZKE z->c9x+$%Jj5xt?sQjXeI3nY3SS0(oqkn*LsPx&SyY~@Q`Fy%`<8|C{f`@TYNmGa)g z-t;~wWqJ#gN&_Gz*Aqzjjs%)7BU8X=5u+y=z0T-;M*A#;2FEcb|HVktVcN`jT5q6D zDqZ@tuKRdsuu>I2gj5%hkW-w-RdHu6 bR9IOZOr zgi;0{W%4=Z)-p%yNR-^W%>9$O-OT-qIU4v?k-5#Bj+9UwjR+D#@za>eGz+Pfb4qXw zb5sy1ZWeP7Ft>uaRm?rZ91RmH-Sy0EAf$?)Pno3BNeLcj?tA8bV~)lZl$-;
7r>j?)`k9I>WWm|Y(F80N$WrE>WbRq!-em3_=00R@7jvI` zxf*huTm{_M?hRxhA+z?2`j~`?c(hPa2iIEo86DVS$2%TGUjixbIYbJOTcS*$(Q?gU z{18BxktZB6sU<#jS@-1jwlK-i@lvVnC4Gq2YdWx6p-4!rP$c9O&*Q4N7cJxzrOeR) zl#)wBRFoWjnwVbt*30^Ao7F3<2B{l39ild_qj83cCb*81s5`E=aXPR-#Opg0XcEp) zF%nm$OVUc0$~C3?8qj2%p>j~n2O&EI#c7n}c2Y)DX1)eeV@W50Y*O$PkP@T@hVpg7 zX9Dg*1r74}NjVzYp~5y)i~({ Jv-zCNo9ss7FUxTy{;;_{y<8XUQIRZ_55oz>{YtqHQm=oZn3D! zHcBQ{wh?lQ?{QTeJ-Om;F-K{lxKs p-f-ml=1}&ImKiopyH+xD&6+Be#$$1UJp|9aXPREnHP0sL?wmt zoyKS$qemIN$Y>*@U5u(A)MDH@L TD=MdJmMG!M^m` zD-HVAr{s3B+ U+@) zr8Y1Vij$5>rTTk%d#8s+|5X7&NEHx-)Gwnr`ehVHJubyzvXjM83srH{3sZ7!nd`_L zC7Y7#!CXG2sv>7HxtO`-%$dwl@u33Q!Q39^zGm(SbEla*%N%XBMOM)G39_J5L|Mos z>M)nUTx;f1nd{6PO-WY|LgkT);5g=JGP>fZ-=^fK-&RO<5(Z$Ie2xWoGxsrb)Lm1` z-!eyEQWQr`TNOx%g SFD&UuxTgTi+ z<~B38-^+Q#0VaR+lHv?=y4@Q=Ukf<}eGgTUZpIva8C4v88C8*?FQba1FQbYZ$J``| z@cd3OlgT+OxR|-+%)QFo8_aEG?gQqIFn5AE9StrO8D9%IMHTv5s>o_g_GH06%+dEy zB{!Nm+ALXd`OFnFhrNlUFPd!3y~y0#%y~+fJjmo%%ze+?Ddw&)_a}3-@4JdjpoN^G z26K_jwPUW6LUKb|CVR8sEao0yj)r_yAS;+#&)f#)b~3k@Ir=!EbPqFk21u5FE^&^@ zAYZRw6$_zUV6F~x-I=4&T{7(yIn0e_ZYFbcm|M);@(xVC$mFZcjq&qFX1s+kvjRa? z*s$5BwcN1T+__7y-y;j2s+K0CYH33Mez#^Nw-+)>uH61Sxgm5_pVsihfvha3CMd?4 zY_1w+tEq*V$9HJq@^7G+*LP^$G+}PorN>krBSaCTXv4W8 -s1#RF8*>7PzV=IdyMxB{vY)k8t8c2d<+eN772}exT`+ zTa4>|oDR8loRV9Od({ p_-QT*;UC=1J)nD_*72aYN}5iVjc@FW tlbi;wP;iW4-*I(A|_>zfCjZ~&4 zGl_)?>Zz{8d1p_Ra^_U&OL=dV^qq<8D9KT-e^PR9;YxWBn;YY5NVEgj*%Ez>>oXF4 zLG6R*B|M7jT8Vzbl}tIrZ@5whcF2v~-jJvgQll48sNBGh0&<8};6_WX7tlMBqaR5{ zi<;XilPqAg0*GEAjH0aqoFi2p1A0Irn$R|vM$xL9V-Cq#7KMi}%c50^x%v=hSIkQ> zH^J48mwtIjFSVOL7 36BAA? +XsDdh+9l|HCFB(OK=ezv#7qleQY#SsP?*$eA
{7KS{Q$NGzP%^?5YfdCwh)CO31xR}XS6)44R(DG zSol#v{PN@g>}2HEwvETWeDB!{ZQB+`E>E^E&1kqR*>6ck(}c3Sw+SkGu!HEca(IWJ z1)oq(9x$H5xxI<^3ZE$YP-Z}9J9KIK;jQ>7#L{7hXjh}>04D~n>~Usy`W4a3yWtVG zl@BbOyfS?oc3CgOxfADJocnQ}k;c7}5yjVh3R8kMrSD(XZ`+deqd}fc>3f%?9|N;< zN&0a(WlPdeV6S$y{d)f;{Z23GchZVX01}4cl5pg#V_CnG@Vi}j7!k9)?ZtBsh`BvT zd4SqUY58H=V(G~2+A );U$3A|Jx s^VmnY%3F1$D~SU&Xfy|hu+M}?t7 za*FrfzAJ|;>vwu-+vRhQE}d;((#vn*kwO=2Elmzsn$_m4|MJuTg55m |wN&lwhJ3*nnBX<^6^F&lpGzFYO3xPJ`L`j6JD%zd^8j3Si{;`9>5`B*=m8K3^ zzVwkCl^|Or7ejSA4Jw4nDr=BLR0dM<94c~wwoAcDK%*o#7f3~62~e5zeF$i@^rg(I zqVN;Y4(Ut%OBKOCfrdyqU%dOfftoo)B|v353`j+x6;OXENS{AcaMUxDy>`!PpfvdU z;iQ8`a6{nYwU#cm67KZxkxEkJOM8N0n%rIfPe^}djY^HcyZkRpe>JdmL5L_p^Rb)X z^*1;uQWS}~HZ$v}-YAN;Wv_<&P@E{-Y}GJW)d%NjY{=fy7D!t A5oO|-u}nSE6X{vloyJ>*DOD2!zziD|PT z+KTBAO0j4uQ(&WQk;Wr_e%J(E{&B$^{0%@Xx=#(EAnBlH7KZ5%ja2F>%k-jF4z?82 z>S8ytWDiz$kpd+oomAb?C|Q`~)V5h`BsU*}=#7x&(&Q%Vl|_08c99aN5gpQ?G@`BV z( vC^^n9%cnXXZ`Dn^H2{LG2R^Z*ZS#7}8dfKa^I zJIvagpR((nnY9vlN-|1Aq#)f=V#(V$c}vM8Z{v{(T=G#U!MuM8fHWvIq(}?W@Ptr8 z$ouB3LTTbv2^7OaT3Wv+y%ciuEAczfNts3fIOyF!54SDOLl*y`5Ji+bcEOE?y9X}4 z@93NrHG-R^iK4bt{e1$0N~HsEsn3W0ND-CO_|9B30PZ(%N5lOV?l`!lNHIQ+`(n7? z!F>$w4{#}~{Ro%7R-c0VE?hK+i!Q;v0QVZ)%W!Ed_X=E3BY-~vs4Yx_9pK)Ci%u(6 zn2RDRPJG~wfa?pFzV7(LodMSccP3nl5H&jk;Vy<74EJ%k_&QYdEL^g)#=56Z8mNAX zcEPPqe=Xo6fLb6Z%hiVKKvJR~RTK&rU-ac}&W+*Hi;Gz-MGfILgG*m~;^5LqWNWyI zaNEF5h1(8pSGW{08iDKxHy3Ua+zD_~;O4h-y!MQ9rkGV&fqhwWb zFEIBqbNiV4jJXrcQFl@4QYVp+OL(Z4s7M;{Rb&+lIYl$(D4CTUO@dZ({g|Vf35ug+ zR&s^R(efC@(TJ{+qY+&o8t9^~fg;~!!B3ex$lUkL;bV+tkOp^^u8)PBf+{b?(J(I| zr=Ve8#nCXY;^qT&R^%ck53=A_%vJXBDu-FfDH<~uN2v6L |kHYV=97Q1N{NH z9++Ih-t *=5pX!t@jT|YtY0MQcN8dV?9KC2t?nQ;hBj8t=q bue9b)dyIw!H7d+K)Js~w* zPe^@KSKLzED~^gs#g#ILriI1TvJm#?W^NTBicQVP+tci~ L7~@D%?&^vl|%p3hH89QZ;*8G%%ToXYA~x~p7nRnspXwy1{d1~ znA>-0H5$65w-35A<$rXM7TRMIS+^dDMmUmGgn?LPYP+>2mB`QghZmE~w|>`Kcql+x zmrsGlNONd%`l(3^``}VUK7~uonLapG`Vvy F~??KYh$)Yiyb3 R(H#W@duJSyb&gGU0lE=XNFc%A$D)?R7%kNo1fOTp7y9S`n)TIBtj`OW)>>i0dn zx!<6 ZPl!}_{JOU?+-lwUW1i|k1UMozODMB-R4bc7a>kwIqmz dh4=oto;l`*KEBPY)>AHw8@qV^l$(_f zb$KE_VO!#f_C-q{p4ao+_xirP 6m(obmt3CI?dY2SI{hX;(KSHgX$eNoBy<4V-y zTkO_$l|!A_28On)RQqVsewEZuk^5CjN^MxFIBZyHcGIwBR^T; nOypWJLNYm4!9-+?SzWg`Fo(Wss~ko5 zbLk=vul;4#eT3O(ovnc GF#ouR`84Jp>V(Av3%4wv zF@4N@+itHj<&x#$#~#$Iql11qD$0S>Zz}A}(A+0FDl^l-VjRr0v6x6^x|)eT_Uc`0 zKv5SlnOX6zfcD@d#vvJcM-EhA+Taf34|mA4#ohPBm@oL)YkH`Cz6ien{Rn93 LRmYz^OB{dq>Xm>IfiNRSebDJ0hRL;0)F3uXCJE>~KASUHP)Z<%Y z)r`dA0|qgOW4TN+G5+R=V0) 0#ZEo`r znHg&4thYr~qe6_1fAotzQEq3x`8YhyBtHngXYM0>A8>10GD`=AUeSIW7+tfx#p;E1 zpD(xOGJT!)DD!)=R@dwZoaHSlueX~rqg-$tl9`U?I4hc`vc7zy!)_~ o1m-`~L1DH@-Bp{AJv_yAaO>z@8lIcc6$?j0)vf zT~h $$uk9|^+HYx*jHPAXcG)Y%SC_*0QlJoaO*21-fbCa5GYQ*RR`XVw506Pj+t~X6 z4b8$p#3UsEF&XV|u7_kiHL&Sed~582a>=Ls726q3#Z>EJz7~Lh@HgedgHY4|NVfjv zZ)V|!pK9iYEy&^CP^+L-K}R>76>W7lyH|p(?oM+H*;-Tyw&pp_^JGibbfi|j5D)FO zwb`=O;~raC=C80->0g!rb!u$phr#wL;o)Qj$73s&{8(wrr0Cm}7Ah?#(SellE>e7u^zIK0~5`!S=8=7pNP7 zV<1jtt9~UR%8(l6Woi#FCo3@1Dw#ur?cqZPK}*NqDON}CiCNEjtzcVgXwgA3HtaZ> zQ!ryfZa&p0Di@O9X2{r?xpNQR!RBYd_L{wRSVjg*BX JH|W W>dQ*Wpv5P t% 7zZExH45X?nr)1(p>0biR=1b={U3pJpb-E7 diff --git a/libdvdcss/src/css.c b/libdvdcss/src/css.c index 55cb8df..b3ca4e2 100644 --- a/libdvdcss/src/css.c +++ b/libdvdcss/src/css.c @@ -200,7 +200,7 @@ int dvdcss_title ( dvdcss_t dvdcss, int i_block ) { return 0; } - +#ifdef ENABLE_CACHE /* Check if we've already cracked this key */ p_title = dvdcss->p_titles; while( p_title != NULL @@ -253,7 +253,7 @@ int dvdcss_title ( dvdcss_t dvdcss, int i_block ) close( i_fd ); } } - +#endif /* Crack or decrypt Content Scrambling System (CSS) title key * for current Video Title Set (VTS). */ if( i_ret < 0 ) @@ -273,7 +273,7 @@ int dvdcss_title ( dvdcss_t dvdcss, int i_block ) /* We cache this anyway, so we don't need to check again. */ } } - +#ifdef ENABLE_CACHE /* Key is valid, we store it on disk. */ if( dvdcss->psz_cachefile[0] && b_cache ) { @@ -294,7 +294,6 @@ int dvdcss_title ( dvdcss_t dvdcss, int i_block ) close( i_fd ); } } - /* Find our spot in the list */ p_newtitle = NULL; p_title = dvdcss->p_titles; @@ -329,6 +328,7 @@ int dvdcss_title ( dvdcss_t dvdcss, int i_block ) p_title->p_next = p_newtitle; } +#endif memcpy( dvdcss->css.p_title_key, p_title_key, DVD_KEY_SIZE ); return 0; } diff --git a/libdvdcss/src/libdvdcss.c b/libdvdcss/src/libdvdcss.c index 627fcc6..202010c 100644 --- a/libdvdcss/src/libdvdcss.c +++ b/libdvdcss/src/libdvdcss.c @@ -91,7 +91,7 @@ * "C:\Documents and Settings\$USER\Application Data\dvdcss\" under Win32. * The special value "off" disables caching. */ - +//#define ENABLE_CACHE 1 /* * Preamble */ @@ -204,6 +204,7 @@ static int set_access_method( dvdcss_t dvdcss ) static int set_cache_directory( dvdcss_t dvdcss ) { +#ifdef ENABLE_CACHE char *psz_cache = getenv( "DVDCSS_CACHE" ); if( psz_cache && !strcmp( psz_cache, "off" ) ) @@ -299,11 +300,13 @@ static int set_cache_directory( dvdcss_t dvdcss ) print_error( dvdcss, "cache directory name is too long" ); return -1; } +#endif return 0; } static int init_cache_dir( dvdcss_t dvdcss ) { +#ifdef ENABLE_CACHE static const char psz_tag[] = "Signature: 8a477f597d28d172789f06886806bc55\r\n" "# This file is a cache directory tag created by libdvdcss.\r\n" @@ -344,11 +347,13 @@ static int init_cache_dir( dvdcss_t dvdcss ) } close( i_fd ); } +#endif return 0; } static void create_cache_subdir( dvdcss_t dvdcss ) { +#ifdef ENABLE_CACHE uint8_t p_sector[DVDCSS_BLOCK_SIZE]; char psz_key[STRING_KEY_SIZE + 1]; char *psz_title; @@ -465,10 +470,12 @@ static void create_cache_subdir( dvdcss_t dvdcss ) error: dvdcss->psz_cachefile[0] = '\0'; +#endif } static void init_cache( dvdcss_t dvdcss ) { +#ifdef ENABLE_CACHE /* Set CSS key cache directory. */ int i_ret = set_cache_directory( dvdcss ); if ( i_ret < 0 ) @@ -485,6 +492,7 @@ static void init_cache( dvdcss_t dvdcss ) /* If the cache is enabled, create a DVD-specific subdirectory. */ create_cache_subdir( dvdcss ); +#endif } LIBDVDCSS_EXPORT char* dvdcss_get_cur_disckey(dvdcss_t dvdcss) { @@ -628,9 +636,9 @@ static dvdcss_t dvdcss_open_common ( const char *psz_target, void *p_stream, print_debug( dvdcss, "could not get disc key" ); } } - +#ifdef ENABLE_CACHE init_cache( dvdcss ); - +#endif /* Seek to the beginning, just for safety. */ dvdcss->pf_seek( dvdcss, 0 );