[v5 PATCH] wmvcore/tests: add tests for WMReader methods

Jefferson Carpenter jeffersoncarpenter2 at gmail.com
Mon Sep 4 01:51:10 CDT 2017


Can somebody explain why this one wasn't committed?

On Thu, Jul 27, 2017 at 11:14 PM, Alistair Leslie-Hughes <
leslie_alistair at hotmail.com> wrote:

> From: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
>
> Renamed wmvcore.h -> wmvcore_test.h
> Removed DeleteFile check
>
> Signed-off-by: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
>  dlls/wmvcore/tests/Makefile.in    |   3 +
>  dlls/wmvcore/tests/ahh.wma        | Bin 0 -> 35744 bytes
>  dlls/wmvcore/tests/wmvcore.c      | 263 ++++++++++++++++++++++++++++++
> ++++++++
>  dlls/wmvcore/tests/wmvcore.rc     |  24 ++++
>  dlls/wmvcore/tests/wmvcore_test.h |  28 ++++
>  5 files changed, 318 insertions(+)
>  create mode 100644 dlls/wmvcore/tests/ahh.wma
>  create mode 100644 dlls/wmvcore/tests/wmvcore.rc
>  create mode 100644 dlls/wmvcore/tests/wmvcore_test.h
>
> diff --git a/dlls/wmvcore/tests/Makefile.in b/dlls/wmvcore/tests/Makefile.
> in
> index 8054ddd..befb08a 100644
> --- a/dlls/wmvcore/tests/Makefile.in
> +++ b/dlls/wmvcore/tests/Makefile.in
> @@ -3,3 +3,6 @@ IMPORTS   = ole32 wmvcore
>
>  C_SRCS = \
>         wmvcore.c
> +
> +RC_SRCS = \
> +       wmvcore.rc
> diff --git a/dlls/wmvcore/tests/ahh.wma b/dlls/wmvcore/tests/ahh.wma
> new file mode 100644
> index 0000000000000000000000000000000000000000..
> 4a844627583af3e0ff9086adce34e8124e9b5f27
> GIT binary patch
> literal 35744
> zcmd432UJr{yZ4=hfC)vC5IPD8NoWB9X##2p0TY^`N>vC&s(^qZqJ|h^LeUU<Q at V5k
> z=^)YtQAC=kfQYCF77*;^eo>$2K4(4WJnMbW`qsDBnXJ9n<l2+Wp6uT>`})t!jwY at l
> z>Z0F0c-cchC4e>>{1yoKo%px*Kv3aqRnmcqd+>`(fNo(0dtd)Q2mi~yAn_k2`o5|8
> z`h1|!Ki<~)egpl=t{p-D{$4rZKL>sp>09|<8(<R%XyUthMB`UI&;Hb- at uwI7K0Z;^
> z{>%R2k6qxmolr71zU|pKJaY|DFnqY2>hq7%K!7sf5WpI+3t$E~2Ji-i0(<}gTe+hE
> zdw?$>a_jZyUBvJ5asVrU7vKcI51<Rs2WV_<x?6iKfacZ<07%(3+tTu%YCistItZ5o
> zK3lupgO~pR(2uy2)Tnp+ZeH at b2TyF+`u!Rg75-5SAh(r)Y;AvjPA?z`K&swq?>+$F
> zB?tx({9WwNG2lzkOVC!9V0WLjLu(9PT(Z?FKJv$Zw#wvR?7uz*0!VJP^jB+qwpw`-
> z5CKrwYPaw2_IhpQO#o59^PyXLCxF54+CTs=px(b+?FP>8L;q#>&+7*SG5`RmN9wNv
> zi2x?>SKR=}%dN}z>q@=^ZSEff0Qi1v8MT`q2>M-A6(kB;anGkc5Y2THCxZ(R^c-6=
> z1JS#WZv!dffsR6^pT7MtJbN!y84 at c(u%aZKGraX90gHr~oU;fx`?E+wXR^}GRt!9u
> z#&a0U2O0%KUk~oP!+&CY0uk;HrIQN*&^Z#s%(1DdWi==$vZPzMlJ}UNns8xKL;wW<
> z;sCrznSit3>FG`FCjmr2FF}RkDdB=yjw+C`q;M?kcy_4}8IYZ;B}IQb{UL5+>*N74
> z0Dw9LlK}(-unC?3ojScOo6%T+CWdGII#>jNB*^e6m{Ju?E++RKhPMO|&e%?WapJ_;
> zeBR>swH-_8>U=h+(bvm{()&_*3sWo8FP{3(AH at X~;-0ddeiD}Sf`z^(M1KO@#47o9
> z^%NSlQ}7F6d47D^htC3+I$!gug&!j<N(q>2-`uK8lN%`0!OB(q(ZC_0yRT*UibS0l
> zu4#-=04y&S0J(?jM17<?k6L!RhMyYU4Bklwj27jtQeM?y#~IwZpC3=H%GzWGEZASF
> z%1^j@;e%x(V_V at D(^t96>fr`o$3rv*mO99=od%^4TZ5U+%|{*yR3 at vxP7jrsz#|8z
> zpkHUYeRB(I5ejK_yX(G45iYh++A|uF=PXS+a21K?jFLG0`@f<y(EOvg$6?_Zo_x%M
> zJp;@O^P4RO#`k=rZ_bkz-CyqMKNA*$VmHLIvs{Ga%pNP<cz1gKLkW+9`g9GSF_R)B
> z*y1*F4#T6^S)N8vyo56zN4V^zxi2Ef6s+OkV;xkuNP=+le9Vfxn>x=;miC>@<c)+h
> zzkmO}zqpxC6`OHSlA-gnL at 24CkoRynF?=Rg at jGp=9B6;XxsEKU8N5Ze&HoQ+%X_!d
> zZ|)s_bN}JoKe^wpfw>S$bfPQACe@$iYo>U%SK!hXl-7|Gh#BN%qZorBB(qe=fvSUW
> z`u at m@3uTt9tMAnRD`#$x{fSvhQP at Qn3<czw6<01ff at wN4o3^)+!tkWvz4`!BYmGN=
> z?_h`xeowHI9}j@=UF6m&5iqQhDH8OAoe5EyoTu636u|G9Hu=aB1-MPkDL- at UdmXp=
> z%EYVkFKc}kPUTP_5S)YUa4M(J;U<)#0xg|h1hW)Y7mHA~vImX at 6pRbb#C`^SCX~U<
> zn?v<sz6lu?%l;#D7dv5)r<pB=0m&&T_clv at u6a`1c_u5F$J2~cK(g4{6a~tR7=IxT
> zOJPFL1+*_2+4*g1L(UQSFR->N+GnD?;z|!sU6DupbuM%I?edqPJO%vKD|dye-poJP
> zeXAyqar5XEK%7u%+rDk6z^UiM3464IUspbQywZBfpgt!y*nMyQyDq2nFNYAByR%b+
> zv}9i8UOF*ya{28@=+t|89${QD#_G&7TLZg63HgaH^DSTHV>Dt$xe4e2<!3}mqrF_h
> z`a$GjGr7Y7BsR+?ZEck2ZE5`4KCH2$Ec8`L>6?QhFJb=0P5SqRRO+AJAR>;+Hdre1
> zoeJV;al8v1ddFF!M=MW>Syov+nLv8zP9YQ%=SeXU10c5koz66^x~48<RPH;99<^=y
> zoV_i&YrV1k0slY`7Jg%|L1i at Kp5kGyvB!b8<FfB){VT6Y)LdHu9MfXxYy2qb-4Pj&
> zkpzvC`731nxUEyB+5NDe1LNWLmuu8Dl#H#Fi>&t#UrJyqoAE4 at poRSQl0=3~@1j+j
> zzH31F>w{91T`cacv`o0^GV^o7A at g=*A3~N$b{TMy9cpa at N)3kL^nS(+Zb0UIu<Noz
> zO6zZvlMK9X$zEcr4!qy%J7wtLNq5(I0Svr&<oz{GurMJ~`uos<Y|nq^GC;n+xsU!A
> z?&VDFg9{w{bhPd1%VkCT9SwU5+^S;>;;!|N_}hhi#(h5=v>CuAmtfMy-n8D-78I&K
> zMk&Bp^r$>*aeIPLsid6;Yg4B&kyEmP5Ae}Fvk(RD2|h^g_+Wgy>X_Y?p_-c~0$fYt
> zC<uQtzj(e%N~F0Ij>jy7oI^5J%P$P6?BXT*24j^`0ix5lVAk8|EniEzEC$L&IhCs8
> zab(ii_aeXL^R_5~G{xk=YCHPvVFd&NorbKjw^aj=OT8{ozmMHM=U<j!vJD?eJKk-R
> zg?6df-kb(R$f9W_<=xXeddjEW`#Ro<U at ktClm?m>2$OCL#mJI4-Xypp3BvUZsMj$i
> ztbBW6<$c5ST6;Z!@19yq<fwkwJN@)??>58toe_C?`}OFjMAwMVF;m|gA4Jz)cb9tm
> z{_TD0{LgnO?V~T>Y6Pm45?ikC)bn#ci8oL>IsRe7;EVTN>gKLsI6TN$)7kXV9yS2I
> zQBP|-trG5TzPz(ul3^Z+4nH4*S<@^w8g;q|1z7LHC&%<OrF6+3GeH*C##b~;>>K#N
> z$WvKjgp&QeeC&-x%R&!Ek0+w?tw;+2wdE8h9q(A3_Uf-Rodu#bvam#A!v<w#KFjd?
> z?xFHb2>lBA0k;^Xk^L=SIU0{qM_ujZv5U>%W}_cS6P(Eu8#D2;-RFi5r&;fg{uyxo
> z?!Nwn%|-0!bMN*TlfZ?|qSo_LkAG}b7*wS`TwE?%qe-F*6U#lG`E4E=ZM}#$A9EYH
> zYAkK?LqC^;EH(C_Igh%)`!`YyoXnj~OfCkU3V}GQ44PXL<Gh9A5GZ?!ULBfv{tT?B
> ztZrSD98BzHUfF5LO|>pD#@Rw{gLe&|>oovRj!P7MK}vt8+OYZ$U0EXpsV23FeF5G1
> z`Teiw$CnoO!q;4N7-#7J4)XuT4g~+r{nbC*|3{pYB=ECxO2tikzYb90R6B#wLUgVn
> zWX_1xg}rh;TTt1QcC`HoOp7I42q{_j)yPnz5eX>G%vE2}WHl2sV8<P7=~YwnmwUd-
> z`8^yH>uU73cAz3a2x at aL!>*pp)&`oI7;Y~HYjW+Gd<dLMp>jG#Qz31CAq at g8gCgVe
> zZI#jGV6Yu`hY1sA)rT#SVvKpyJk!Z37pOgz#4uK$0)@mAs;Gg28KG?oAbnwxSuR3Q
> zDu+tX3CxW*7c2y1ac4A%N&ZS<t^<N?(H5Q{0=gPpif+KXb(mW1*VNGi!{Gvzbne5s
> zg!-}%5r)Q1ve;^Mr|FxL4TBxjD(Q|Re24AF-_>R(t$frxjJo*aUH#<Z at sES;ca(1&
> zFil)&h!FSa;UsOhEK`zCwTL0zvRJ)&GPczr-TRqqO>Qpx+N+T&YtW4dK8-fZ{x+?9
> zC*R7IZ0z^Cd2IWS+3Ir9kuS at Ob%00FdpRYdwDL-Yq<0Jtxj2EM6Q|*s%D%Wr4*cNJ
> z6mvG=lhwZIiL2 at L$q_k6-(`CC-tQzG)>sQ_j~Ht>oZThI%^;Zp7oxL<lfUfNhY{Xe
> zJ;?WR_%a2ryXrbIG;4EQNeqiByKRWGF=S=2a!p at 5toALMntC0ItKF!VKP7$-G<`uu
> z);W{`r;zK$X$scg*W<rp_pcxVwmN%?&ALuj*3>pWYn^uPP*_?2y!0-xSEKFp6 at zc$
> zC at rt#=UpPzoP|;mi1)A>NYEQSs(Da=M>7r4`~1Z2V1?69bRHz25xotPDia$W#WALW
> zwe$tM$F3g`3RC<MuNjxbd*%7*T^Lae1G_5#EOCw-5 at b4wdBQjUTGTuUU;xWYT%X(N
> z1BO-Y{(aZ|-%$O3H~pgie_8sYKl--Lim|0XeyP$waoCeT`s1&E#$j at nM<5Hj<*{~j
> z<rXOV+RI}qi;HopM$n<pqIXGVZCEiQH}O7-D at GdwZu~j@*KrC2d+p7L14;-Awj*%n
> zmf)%NBCwlH$57_8KuvP{k^+d at f7=RK=$&B#b;a?y0XTMOp>oIxFAOize5K!nYXXo4
> z(HIw|vM^@m_gOh0f2%1~tt7jXJwCMDerdti^(8^Uvz1vGDd}j~j#H-}BB#JPJTVZ3
> zkx(~H7m!wf at +gKfFpYQ&;uvrmhAYP~hv!`Ase){~6VsYtsl5Q6Ac&kJXyzytNHzjq
> zumxs)YL5CS<eTFO8$QxSkAuB%J5hWn<Fasw!{$}v81Dq%PZ{~Ui3=}Jqct9N=Iz#=
> zQz^4adZcwl#<%wx|D)W;Lx4LIiATbtu9wjsqln`DgS0mtmx~X*d%^gTJu{v({W3g4
> zu0?feGx)lc`@tb$r;!t-cRtGa-fnzr33 at vB=D6M0<tv>Z+Qd2}Rm9pHb59?T1Z<BV
> z`x<T#suCl^4h at G7pV(G$et0n#o at hb1e7#?btbD^NZ*4!OBg9}|-Wv0YfD%(wiS;qZ
> zdLy}UvuEi&`kAfCiz~9R6yk&+ry9n_@;Kgu;*@0G;7_#99 at u;I{xboQX87QPozg_>
> z{s6X1L0W^fuRGe`+dF`BJT=&xX>yOBUy*`i^h6f!3+Ft=Xh9;*qF~NEPqAJi#uO7G
> zmg0cTcyFm3OhjSW at ghxMRQh|RI!wA9N~}mY;$i`ZlbVNr3T at 0*_kCd)QrZ(wx?-La
> z7e?{YYD(ceml&bwFu#h+yB at sM>9G^cVqHk9%RxvnRVp%*P!8JQ$CfZi+n(ZDMELGK
> zwepqK!S@}HEU}&uwk?oXnGC*<LLeQ!AgMu#j}D}(b*LSnD75aajPLRPHro34{t5g&
> z?(tiHfJJ`m?!UP=26qCC{Y%OiaHq?9ob8#F{-ydUEQ43B_rjWOq#^|?)?l97>{?zt
> z0g3?{c4R)`i4hQBSXyC7fSPzE2qp|S3XYR{ej)JUU}o}>9NeM|W%gMV*hhKSG$Mh*
> zRP`evpcM85pM@>U1cpYFRlHBo3w3Z=rdwgOXpiM$=DRBi%GNq1e40Rhw;d8YM$@}K
> zvW+-c7y6BOYX&=hJW9#Dnv5B`_|zL3fJsw`gLdFC=~k9r=S_XsP#GmsxwuUq%#TdS
> zse?qJX_gochod?NP15c*rI_URq(nY{st%}gKPmV&1pM at ZT|u^wj%w*gt(9XA!^!$p
> zlT#at7OLu at FYAYkYt%dq>S{N!d9_MGy{iPt!+nU6CZioKoxU~mA9u~tCJu#AOCM$V
> zT~od8L|Z)^D4R52(%lXbtmwFf9en!!_A~F&2PzSycOkQNi;3-*gX-tWD<i at hhvd9L
> zCQd)<=8Es=TH9<2=7CR4>z#QxUHvKPp`oVN8 at Wb+7WRoXiGB4_{(Bu0mDU0N9liq-
> zVc+)ZOW%`_*&l963&xAKG``twco{>43!J??a?=fNLE(3|-m6@#S*!6Oi6{$4%XUAa
> zDO|7>l{c6yek)5kOMWtR%KKSD5$-mqre4 at Tjmdp%Pts#vNJ<^;idc3fMfJ<uz0~Ot
> zD_37!NrXpUwWOe0y3 at Us|60m}oUW>wppkv>m?J{yp at BSy)LzRrOYjmU9tp*;^!DMd
> zCnbPUP6O1-0>-`xWer-|F{+}wyQ>zJtuJXHnQNG*NWLSH0eV+R=j2^XL)i?0v0R at t
> zZE0ne#a~~8H1)XLAvm5|{WBnERh9??wMn}#{DjYrA5^HZ)<Jq6J8=G8Atom<K)I3&
> zNU(3nmj7-k9no+j9llf$9R|lME=up`0i)uyPZa*&9RaxQ at BUu<5BE3!+25;QTDu_D
> zQi>HRnoq5Fen*!!@4n<Xu`ifPL6?EbnCA`LBOl8j^91ZdDe*_L3YGb%kU!7e9H;&e
> zo&u3pDyaulq|f*#2c#ak)B%%v{K<gG7%csvY^KZrR;D+SIjJ{nK51)+s|W%$i}~+7
> zRCgYWzS33QT?XZE_1%?9Bsyp{H$1pK&FE<+^4r}FC?R-G*76sjrF`l0wwM9)v>X;t
> zO{6eBDFLmlz(6m+#@RC>cB+H)3XO7IJ1z&tB}7rPt-S6mOQl}a^RW;#fvpH&5I#td
> zgf0MQg at p8aqH9a^43Hjr;dRe~!c}V*;tIo*!lm)ipPJiT-*0Sxb1EuZ{}fPNPh+R^
> z3gFr?-y<jZUxe<kJSGCn$ZR@!#`>FW<z`L#M#3S$$m{E|g;DpLw`X<ao~1iFd7Yc<
> zJI%e?UNo+e)q4BIyq|9QH!$g-9zUOtv$~Pui%pqBRn5abb?$}7o>e at mneLDg`Q6#4
> z9S(R^p5sM%apge&^hD#=Nk(vz^k21 at xSdz{2_M+?hL_sFp{KS_=(q3h*IJj2hlOmk
> zkxfQDUbfqwHa;b>e_zf;^r|As!P>DePsv3Qt1TVadw3mk`6I at r9}eYDu~o#fv)hIS
> zZi&C=Hz8tz6NKnN$qJ26JTjXuFL_%Rao)+B37kDL-LD_d?{n4?#%QA;^jsy3lZZ at j
> zrZ<dv{}^()xEJZrKIY)A at +>}8{DVQUnUt(-NOS7JJ-tIit282+qNkS`rgatOzVNlq
> zZl4a?EJbK#o`i>`j##hj_4B-Jq0KW_V3ZA_v%+-iJ~f at smkJeyiLiy8AhLpz{DE|l
> zKD^rZK!X;|d7)ctSCaM{HBTuIedjA(rPclW?)!gy1o&&@_)nbU^)KB2>hC4KBdl8$
> z?jE^a!j#wVw`@6^?vp}++>2QNtdxqf9tZC^M;xQpjR=Z;yI+<X58k#oC%Pn^RsiWb
> z5PaybyZHw5Yx!E$wmcfaT8!)o#F!@`yvS;=VL&Thu}q10_aME1`qK_lmB~mUm-1h~
> zu8^@qLh~f`(kZR^q#~m0_A-a$+YoUm20#T at n?lHd9o#@m6Hi?)WoL;gekcY4r#ymU
> z9F+ at 15QtuqSbPbRBUrr&W at VIg@dLoT1fnXb1YHQb>NzJ63C5!8vc&{IG7jS=ChVwe
> z7)Dxw9e_=$Z&RfOR_^S#St at T|8*og1{-Iv`W`WGK_jpFk?DU()H<mxXt_*6%X0$g@
> zULvNuA6SLDQLmkUtby=$UWk>fI$IpF+zi|n)7s!RX-$_o=4f5}E^qKf<Svw at n3#`j
> zx0A!6g4*Jf-f at C6$JDpN at O01PN9vTUd~-P&emfxEWY0EdZ$f^Rpz9NCwbzQQD*qq}
> z(Y=JPkE>kXc#PkxJdWweeH0$Kn7b~UwqT=|CrWDE{5B3oU%sjU1$5T$Be6Mfn`F=L
> z4Z`y-Njqb?2l at 8~v)Zl>^TQ9qy?oDffdCWV!w~hZsApQA^?6V^ER54HcPPUy(}g60
> zmX#WpA2Cx2AezI~jh*za$WXfa-}00%*QV+1^O7IEGQCe5Hpqz=QtxinS^3e4GzcR<
> zi0G+J#E9UzxXaO)$10)5r-*S$#9(LCmfZ33XSO~T5<EWUtYU#3q$aox8;ix>L&%I+
> zCpS0fUl!GJ+8Kkfzcb)r2JI at F-zm$G&_b0xUg&a!CSM(-X0cFS4N{*U2<ceVBxm|=
> z*s4D*55$CsLhbPAMYsXcrA7$9HhJ6!;u87(z>?&bq|Q66V*pLz#=bmtodre1o_4;A
> zM_=B(sUuE)ed84H80X$PhTi?7`oHywU)29EOMmponXQSBxGntw{dIP~<FM at i;+O4!
> z?dZq(+zZFNg3;FY?rPSqi~jnu5$|8cf<w<<8UFEH?cBZf{jn2eWmeCvK>>xDAr%1u
> z8jN__HiGG)<-Y2OF*|9IFU9y}0OYun!UflQ0U-(p4#L#UMe}$b407TSzZd`2)3abf
> zYI;&ystU2mRsl^)|CTz}4I60-bk-20TR(aXzV at 1&)XGVgLTE2E0 at YzKUK}gOs+<DB
> z)I%TB2x5nP3x at F^Va7BYR<017mT4zqi?A at MK!Ldqva}aSJ^^7<0tHVOYi7fRD={L$
> z_d;IWaH+rXq4w=_>GnEPnL8FS4o>6YEv1igLyUskRNC^JM}PJl8GSKOcwW{v*6Pd(
> zme(-kv~PH_iS_=z2LDIl_`8YUyu;NVxM66y>Da{hyc4FnJ}XLY+g|fd^QEE}bZ|1=
> z_n)}Y2|f+aU%#W81Sh#kK6^|97~%(Rs6Gj6P5g$iC}3sV=CE%zS2dYhSD9$bM4{1J
> zp%)7v$Bw@`kLf_1Vzo*+e9CoH$QEfZc}bH^UR6^Jk2z{<t4?Ce`#(t>EkS`>DOWm*
> z&y24UF~t_Ryc>~m7~7m%?qCG+_BG+KUga^RAKEGA5iyzeBf$YWtP7b!UyzaM5VkEE
> zJ7wa?zFJj<_bIUqsn>{4Quo!OHrkXS14Q(=6X^DO9vJO-PRLFUyuE#$;^Q)Gy3;J3
> zTb{*?pB at 0r+UUoHZ>Vris1PMxWd}+7>N$<^J-+-d5LyqBqSx at bk;_s}qHvC@(IjP5
> zOnqR+%Fg}$gno^tv;;ddm9lZnRW!Mf-&F=K9SBEz4leRvNs$_1)U1hWh=VXpok=g@
> zoM?4TJt$n56MW0T)9{upx<uvk4YeL4+lyj&E1c;6J<R%VeepjVfxqV~e{<jUhx@<v
> zhtSmzbziRtiI(e}^%<^kS3d#ag4;izUwK-JjZ^+Uo>G2r>1X|ueW_uUV{iV#7AV{_
> z1R%a8hkm4LsF>ee8z5fjIwNH)7~ycF>M4E96U0aA1{Rd!_^?TE+?Xcaj<SF81d#3`
> zCO}YdBAW<FdVwWio(g(E9{8Gsl|;six8zRqZ#+sHVM4X8g{GkC#pA=$Q at 4d9<fV{g
> z3=+(vu3!~xkme=Lr1}Cqu_DsbjG-vH2pNFHlL-Yfg?KKnTU=nFM7M|ln?jKCG^?;o
> zh(FF!Sl`@Fq*&?3%yn#nn%o0r&)$ysrOJcDV>KZs{oAbkZ&~!uWX66|ovC{soxb-m
> zt?Q6Q=DQsev*O=^rGj67e;R+XXM#Uv>NTsX_{oFgRRbS|n6-IU4{$+m?o3u_jcPqR
> zblE`CBDG0;cF)T4gzx+lbJ~s9r+e(JGQ at XD=g88J+p4a*X+^#Be at +G1fy3QxNbiWl
> z0@}<y0KQY=xP9!@7>vhN(n8<R=r{2q*UVGfP(3AM4yMCOYonVpTsNdejmqoug7sHo
> zVFLsee7M}YCxf5o2}c`_gfNSGtpe2+Uy4zBQbd`;rjFVdOZ)egX_UQZxU<g{@(a>F
> zV9TgErsNPv{4`Z}2MWy(Sh!>#M_ at B)%R at xks0*yY3359`B;J6v)-Z6{r&xNGQddRM
> z!bnte^r+%0R;EFk_(bUtNDx#Dach!VXqn^wOhxcja`S|WB*=DwMw3=V;dvH2&C;@R
> zcfxE-FANEci}_oTy_G|@W~$<rc%Dp>m!#PM&(Bn*^2MU~mHvm2W;KQPaBn4_8fS%5
> zYCnNJo#}F29$~_AB?ijH>_wQSi&iu8qzuB3-Cg270%Y-B23ilJRSk>y4_y6u4k-Jd
> zY5srD|5?ZIoBP-Q!o8Z+&(Mb5pFDHYa3(bnI-`Z)mBm!IJGXzv at X9=20Yr*YRKL2z
> z--Q6jxD{1>J!hioXuZEvAihXL;f^xb)S_g>mA_XvGTE=C<B=YKrB%0mXx0&WOb+pt
> z&Lju4YQIEV0A}g^pz?kwczHjF?%`P{!=Y;qrE$Y|tnf+W^+zZ(IL)Pyo6lq9hO%}W
> z`h#lWTtP+ at 5H{_Qic<xbsixw|C}Cj}mJNy at qfL8uL#IxM)stZBASIsboYG9u^kg4n
> z_6OL?1OO1@(2)x5!3Go%fKh`6gvOSA=EMn$%Lsm;JZ#GE7YH!HW>{ye))uG;EzLj7
> z`3@}fZ at n{oAwum0WrAxcd0a7Qgv2=Q-Z%An#?hs7#X-A=>k;8wTAA8qH74m^-f8Jo
> z6Kao;j${e&zX=GQYmyRRlKktMTyP(&W+tSkv7rKP?{Nyd3%WwpQ%4H=gkcI&4<}Q#
> zU8Az33?zs3haX+Eg5P+kpFi49FXyOgCicH6qM*Nc0I!Qom?zEOO~KsJdUax~<LZFM
> zy3DHo{AEtr^O<9ZH&ZZg95$>T73|b$useG8dg-kr7`d-Y9U~2sm(fGoy!?Gb8d~*A
> zGY#84rgK8 at k!9Yd$oVDJIUi*SO}6CHX6Sl`n5?r@*R3P>lJ~_^JH+qB>}$#q*v%xA
> zt(77RD|st&;l{=#r7Ne#iYbkQES&9p6EfJ#p%8to-pPyUt-*Sa=+xy4&O)3o@{mC{
> zKM<Hugan9+3OfrHrF_~E|4i}aYiBfQO(e-o<!M7+A#X6gH)$P-8^p~L>eEEZa9T;x
> zGN2wJt((2f983+_w60IxE-#D1prSDEbC0!ZTmJPF!em)U*yHvFL(kZPj_|adU#w6C
> z_b)x4)(%kK&h{yzXpKsCot<{>E7>J8GaUL*DEcoyPfdZ<9cKlk0znNy)f?e8$6zMQ
> zzH8EZG~)=D{^2LUt-;lQ#5pqCe~mYN*#A%6tzBh&fL-H|r(0rk<vA$20uINFdFggH
> zalt8gCNAlVJVME*;GJTcL#a+bkCwCF(qT)>h!vC|u}^N)EgCEx2$od6k$cyfxr3nq
> z28i$@?NOu44LC|4xU6<K*{0D2F!{mNskaA!2hbCS*M_?36o at R=I!oG<-=Q=I5ocGs
> z!;dFXUc^KNyjLlymdH?1^Lo$kYH at -!hy+3vxIAIFNqJfknRDLG!rHz;*b!X71*X+a
> z(x7m`#^3_Fow&NUZwVP2wT at MR02ti!L<E>`TO9<P?#XgYM3YefR_dYPL`DIdjnPdK
> zqmDoVt2>%x$Nc(2=hdZ;B<<075c~6Enetd;<I}KO2Xpq<5q#5;z=Gu<k8k(p3?P${
> z_W_4quI_kX9*_~x5t?q(h-_66N;`B~=<DYxo!&mr*B)oS(TX42N>s`&Wtf#+yWZ*j
> ze8Y&pN2uPE*W7Xa(c3OnWSfiLAr}$9BD7)r;5XGu$ms)kfM|@USh!NDmUL(8sqx*d
> z9h8pVzVVQLuJGol;4Y`*a*xLs`cvfMDi&Xv?yoWs5?x|&Ah+E}NsT$os28GZ!{39=
> z8D^DaVz|+LuaotMW0u9{`(1kbJ`*Y6nk2GwaE4y0)SOR!T6tp8Q<KidqLcBvie4Iw
> zrQDoJ;p0A{G!ev!l!ns}rd!2BFyqn`)8!{<g=V$T_L$JrQRJ&D14EY%R^!>Nn%Ba&
> zfpv1FzOp*Rl?Lt$(`2m6j5h;xvQ?G8(ThUji&Peg2;xrX at nr{6Du7$3O&!S75++JL
> zwjxsc1)<((!3J;+EC-h1W<^Cl#~I9dpBl=w_SH=>h7|g)S?db!lz_<AsNTxc!52cU
> z at Mc85&qpqOo`6WKT;6ZA%V6Qc`i-UGZYBArr>FT&(*<^0B!Vq7462^=N6_)y{)pG;
> z!JewwVXDvv%9H;Z82zIDe_8sYKh(Dtp!`~YwRIEvhhI|u#V_T|AIy at iQDded%WOX?
> z_syrGFnfTU0Izb|F5M&2NuPN<0mU&<c-45e&wsI at zVKlj8vKa9`-I*^MQ2CtKv at sM
> zdP6!ALkuj*7=dC%ZzGLn*}irpm;ys{m{eAN=?jU#uTxeO2e2njwS|0W^RgE0w(vho
> z?BzD|&;__cf9(B9GnmBmlR}6I<_;U8{n-pTVdb#v)j3D7dRb2F)J^3=?06az`-Oso
> zf^qi3+A?lRA~=8gB*QMpo<cD)w16_L?KR7HJAix(5Hh`yr~-xany|r-XHKLjk at +;N
> zkawi`)m6~4r^({SyYGN_P>i&=zzAAcVi-UDSn<pU-veMFEP-}(XV`<lweKFT at 155x
> zCQQq2T<>rr*AK}GRef9Xcr!2`$Q^lea#qfT+W5_Lvuiyu|3nEf!K_L~Qq5EUZHssG
> z8#ggt8?Qs}Xn4Ksi-Bhil|MF~egT=IUmjJ;-W70Lhl?BclZcNAT?>vePzKVZ-(!p8
> z=!bSqqam{0r)Oc*Z=(U9ushsCmm8qT{rXj+`vUgeocSd3?4wJfPQu6o4;x?^hP7rR
> zlL)`W!S+jtT!OyZ*NoG;6^3CxwGkgHa+bO++b8305(F#i>L1rH3fQ<l-<p3}>w4_G
> z$z99oOe2ZY$bhSZwgOaJedO^E#^bArlMTjc3n3M+*AL1D<2ms4vQQESK`4vT_!{eK
> zpaaOHZCEBU4rUW2$O@(l+)Qw8h!DdTX%oSqcK7cqx{T68=^WTL!0LF9uok&ObZilj
> z7P`j8eNBC*{UjRGu0zd`4be#uler@`G?s9BkWo<-XH1Q$>mQPpkQ!?z4BF`!Ckp}{
> z%ytGiMMjU#QSag^c6;emE#4H}41=l{#oqR!znA^5&i4NvhS>nOVE+gAasR^o?kCEw
> zz~Hn32RE&o3)wCE0~bGgPCq##B~l|SZOKmWu|Q+Q1ROU$vj{3>^?g3+o)BSg%I at JL
> zzZV}2U#cG|Pn-)0rS3JMKzUIBi|#Sr*-hA?j1oBmtS12NqD at UBlDF1K=-34kO*bgw
> zG`s7|7Gj22ilb>c#&GPwapt8DI#L2+jio|@7G65`CMNtBAVXxF47>FW7{>K4vnuo?
> zC at Yh_DdIjnFMdsX#W0Zt9XVzH&LLGuzsXF%7(lZCzh(k8Bd3%D#C<3}{pN75^G=p_
> zCStAJ`60m|-y-XU@{(=4j|6b?lSwYQFVkbticV)EoMJrXom^^sZoict{{B37n4#ZX
> zyF=U6wOFcPFnqV=@Ju^$(62j=)033_W!hWPC+&HChvbWuo1D|GRmk??$2!}r5=X6D
> z7FjO21qNmA)7c)t#BWP4u`LHI@|#RP`dnr#jNWcNZ<JB%TjhBAz)k?b>$p(OM!jTo
> z^5^Ol>2dR?0c>jhE7X<lQ#s)C&jvO3yKs<UDJ*7)B+~lQ-b4wH2@@N|G!!jc at iQm>
> zVTIy15Sfzry?Oq~AxVp)$wCn8&UL64jExEQr*f(b*RehIFMt~H24AN39{7|ewsiQ!
> zu4uW3L~k1<HxfJ82Mb{8UrZ{lg6WFu40FVBpLGuG8Ec`0#lFovbcovCz(&L+`CE%<
> zY*eh5cS;!AwLdr%JsCN;aS^8UnJw#L;tu687nHsi8fyq)bZ#-{WmaDOunK8LTSAoM
> zooBB1=*Bbk(^9>Ocy1;0%<|xHuk(QSPRmgFUf4K733J`#C4SZDnJ448WmcW~3(bUu
> zC%i)79bKtcf{r$6G6vv~i_S`Gl<7(1XZP=1-Tu7(<o_qy|HCnWqJMK=_M7|7zvn;p
> z!*6O}>rKj-MD_b*^$mC1TPEzTw3w>9PrfQ}XSFU*;<ElykZ9SSU{6)O9VRcO%m!Jw
> z$WtU)6>Zcvht%ta>@3k3 at qVRqio#fsn2b)fKL&SXe at Tehn;ZP}x>6(-noz9_mOzR@
> znFYgY0V?PD)i11HFd<+;LT=?(T$pVxr~(!Pqz~NHIOTlqjV*If*Mvg$Z}rdkYaD^G
> zyFLb_xu(?FR;XY|l*GaFo+gkWNLmlz&g%<ycBabK(1L;{&W!_ZzPVzy0;U2<js~76
> zZEkWyF<D%gPLf0WSQGkgY_J-P(4ubd0!gn--QLlF^<L)=RIT#QHy%45Iao0CXq_f$
> z9=ymHLa+I#`2;od?H8s{MRXWl%g2;=8|hz{YrtlDsLD3A`erAa<j)Css>rnJh~J&N
> zJCT!fG&(aVqWKMF_qrKrkMapfK)MF!=&?X&O=4kW((ys7Igvx2_3eE(xI?YG{m=`h
> znTPb@?%=9ecar%vcsaa5;G6q|fTG60Yj*U$`S_U|`(s{pQtx*n{5&=vh<r}6R6)Ml
> z*nV2Ur1XJ8o~Tf+jlPUW8YH0UlhJ6r)MV+q>Q~A5W{qa{XRAUz2Rza0wrc^s9$fZ_
> zHnP*4Q7>f=5?i4KCBM37Fp%WQhCNMM#Epm4bDSP6^mZZ-N9jsh;a?HBSB}t%zcy~b
> z3+quyrw}=8Y2nr!3Xy$#)jG|LNH!(=8icGTAa<u=+2Bm632Uzf9*Be#RA@#W*a0AJ
> zUuxtQTC{2p<khDom!G<fK{O^HZprgqF_eh!q?uX^iVINlz|97R_}W^$-t9fN9x(NW
> zr0T}+N#jki)-->H0v>aV at eJXghGkL0!TdjMMS_SqE{HuBg}W^x6z`Z7+8ErDkIg$*
> zFDT)6?qE!bqE-=7X}g0%*e;Q>yM$l`C#i>u3KfONP7iJe*!S_g4=8=!*o`?T at r!;S
> z>~HQT|8RfqpZa6>+_5M9Kl}?nD6E&Dvo!|Pd>^JZJQ0HNm1exZm(h*lrR|GsK0THl
> zxwd_JDAs2=!T<J=YH19N$+y>EEAGlk*uDH+ at k%j{1WPY#om8MQN02S<Lsc<T=n8C6
> zQ at CqdLP#rn1`>En2c&aElS%smN at bj{CiOxrP?J%3zCvMrmz$pXgkJ4l3}Os?Y_S)(
> zHP4p}R~I*RQGj`ALL|pCG>fR++`3Adl87A==0`On0YDTL0$`Y+O`ww)biX1&vVTcI
> zMt)Bm*kmlHBnbsCAY{7p1cmHUSqK~%LG4v?6eJ;nD_wCT9-o#?p8RMHZ1{dz<w at Um
> z36{Hyx8 at VR%hk;jORx86yB&?rAA8|>M`x~B`=lamxvdhU6odD}hgBGP(~x+6kJ)4D
> zMzrUHNIED(uyycuuJ3avcL;2zQB!J4dTybrc<*V_nf!R*<eL*43XR&Qv|nUri at b^7
> zR-3dLDOG;?E1p%m`$j&)N_iLOA)fUze?w5SLbz4-o#DH2^WiQTVYM2$O#tp^+WW(c
> zHF}GD^BgVtIfZD0@;u}7liJ+g%^Z^vD^nlEPchWi{8(kP#*}Xjn`Rns at ZHp`V&7!1
> zqQ)VbxJ`g+XY;Q6in6lkW_&%q5!Kv(;eMiFpwcOE{8EY!34t?ixo<Y{46cG<5^@nj
> zs>^qO>_u$^=EiP67EMK`lzh82Sf?`_<y&HUNmlrvx)KwC`@(vRUzL at 8YEjYH-;Y_K
> zE$0wrF-&edE9+2xp9)2!u^tpH*sa0)I(VMv?T!%JDdr8wYNu~fw8GpMpApS=RjIVf
> zA{J5gWsLHx!h7^Sx2lkFV>#AhJKBZ1XTGwiGmq$bKF%(?Dk0WzzP*vY!3^m4Xvd at x
> z+wxU~v8JPBB!;+?ni%8Ry=z~@n6BSGU?1TYsYiWUK*atmef-}}75<|Be_8sYKi0SO
> z$FKPh_^-43Jsu{qb!*ys{^Rd)U^Tu~X_443TM~f~r{-dzh60k!FmUG~Gfy>pv8yAF
> zeQ9YYS#i599zP{pINI*|%NL1h3GlJm1gv~){>dNHrPvuRn2YHF!YIm~fj|Q?W2`6a
> z{s3CaC%aFZqQXJ at 5#Zal=Wr!-VS!4J!ZdOzGJ);n1wV}n^QoBavpjUnuV6(cm!7)&
> zv2>|4;C5;RRJaumNC>TFD$vcD*&G<uheUt?QjIiKD!T!I3ok&0C47)_`U4k?MM=Z<
> z?4oXDFuz}U)YkZ;mMQ=`sgnvDP8Xkz&3=iO&F6OrH93=xCzhIz`hK60%W?4e#(yZ|
> zn(?H_t!Z`r%Pp<%uGp#)g1^6Yq4CKKU<lVl?%7R==MJY%W at yraXaX}&_e!f;#5c@`
> z-K?5Xj1_Ag06^6qCza1NNRPK19un+^336o|1nX$WA4^{L)0#aoaMWV%RI)p6a_8d@
> zIl1Y}I&+#c?2N#_7<)pcZSBh)^Roctc9C0SZN?LcrAxb#YxdP$<F<isB`ulUE4trP
> zux*}w{F8AAR17(v<}ZrY;SN3_3kDoKU2=tbi+;`ehjM!?IYT#2_5PkP!9ua>70J)@
> zh1I^TOAhNvg{>)uMQP7PFf*yK<g78J6lTrQo7I*5S(C)e8k_1W2{RK1J746!jQ%Wv
> z<DB!o6--mq6qAa^;<TP!DjsU-{BE2?W3ru at +|*!VJcOAee at M<mZyB$uS9kfWHw{)O
> zr)=Gj#?0ydtn+9wwB~tPs+V2nMU=KyMnBIg(>ZI1Qub)4q(wMST18Y`I0zaa6QA%N
> zyDl&2C%aQq>+aCSm204+>s@><H7V|V7e4B5TVJS!oRwuHv}{`}6#s at cHS<O(z*rFX
> zvCA=09&)f7XHR%a-k>%-%T$xC+Ep8QUr;wn=8O3MEI<Py{^nlm5BGn^Vd at v}d4D_b
> z@|fi&Q|W^P2C*nS^5T30KR7}DRL4yUNo(@2_Xl#oUng46?$>{jhRoJ9eO?IE!MQRa
> zPE at i0g}O;P(~fl+f8V1OyUfC{**nY*cpesxgRxJDk+l at gBZ|+x!3v`xq#}s at b{FuJ
> z&hix0g0E%QlOi|(mu*V5Q*}%=4DvFanPP}PdXAJ4IoS+gfZmToQE(Q-Uspg16qbna
> z<5PAcF$=P}5V1CF0RjVqWatTDK+wE8v@<T1%A7KUF(?y4KzEwVj0lNq$?wV&(@bFv
> z_xiIGhW+7Z?(A*k|A;?XFZ)Gga*r~x@<3FZ$LXjl^u75*=cm5DR8Nn3T~e!BtMM_&
> z?O2Y@<XeYB9-2*=d2TE#li*kJrL`WQamVa=^|_ehhNGoueB*}zRrYnv5M3s!U^>46
> zlP=Jo6_<4HOrURzYp_+afNl}kY;|xm^aew?`NflquB2F2W00-SfnaQ$nTEHlTu&!=
> zHu{mIKucM^yF=Ym$9!JN-r|ehd_1V-O+mSJ;dz^F3MTwn%O_qQxVra4+|^<RK&*49
> z|B3L*DTTwTTo*{5P4=YO<g)<T`*ybI4SXT`nS}ODja>NRSA(IjigYx&#xo`ae>Dw(
> z)DfjYVu`1eUd9!EXv{ohj#}3h3 at Y*Blo!XY#Hw5-`R=}jEK;@d*lrCyiFY12b&4nl
> zMzLLXK|x5EVbJ0MrXFsFEz^rIl?^H<@jJKci7#-Jx5rA-5SQ((NIEz!Pev9)bO}<q
> z%7`W=j>l(wgZD4(k&Sit7V}jpY|5B-PL=v;SqoTNR_}*349O_rDbHbKj+w#W?j*_b
> zU{f36TZ-Uhp^v*#VlToMWr)%kZ%4zbBrB<PI7}>g__Ot0GuMiS`L!vWtS-aRRL3_E
> zs!Bg|)Jr}L4ffVmcF&+MHC$SoZ4if4Fl>YVLwNinx3y;QpZ)!jf8pL3_2uVXNF~sE
> zj}-%#>Fv{>VI<)H<4c+6Rr9h&J=?Sz^mYQOAr?O-Sf;jXep<b+<N$itYWO9W+(XS0
> z+S1#sNDtG83U)LSebPF at ex}`yE4Z|#K5-;lfC5pYvSGC&o|9)WrI6A*|4PQJQGt}M
> zd8xC{^|FC@{y8;6bPwj3tBX245`ayuz`yEXK`T|g;#k=_ps+Xs&IKRD|I9j_)PI>J
> zW75a<hcd_v&3;|tLsb?_GZMhM-G9eK+>YIc(Kcaa1O?vHm3h1<zGH_6US3uvu>G2A
> z-k?T9 at iyp9n-{BwQ$Hg7UVA)IFtze-%xByMjLnJ0Id>fOjkz%wJ0~0Oz at PY>{?SoC
> zqhaIJ{oQvy-urmxPM at bpayH0$%rnC|SQSgC2#n86T->8p^|Ogt4zxR(n=4D(<)J0w
> zpZ(4%iHKQje~N#sMX#*W!AZGHO6jxM*rap^@bzO}JY7TXK%~iAsp)_S0F@%r;dSDc
> z=8s3=7`Y9rd1YIxH;qZ(lRw(eLWqybi(WH6WHg2ufY*2B>fbnOc~Cj-J-kbnY1 at CL
> z$16YHKms=FxHZ4Vhq+Wyxlr0(*fQC5>iz*FvD(8!&dm62+Bzf}tCi%p9BLH=MO7 at M
> zT4iXpP$xemYxSS;(2rYqBJLd~3S~Fjq9bP}&~noYwIx{>*6s_|z}dmhQUyP>lqQ+v
> zG<<Oq^ENt7Y;p}>k~NbW;ti6M{v7v#(5{ynOI%SVovc7zO%VcF*Nc>+ylJHMs~2IF
> z!QQuER2MQaI6zq&RZZO3Q{MHIlW_fza8`qsqM1#haPT=a_=13+WYqO(Ak)Xwxwxl%
> z+0wS|d at J<1%cm66W%jkZ!URycz^Ye8U49nM^Kd%-zhL}7HUN=-bARy<_kZh;{rgmJ
> z?OHZ1kXj^C#jArc`#}7gc05f<sVobFiEYO-pL7=Kia8PmCst31182ea4?aIeuvYX(
> zpNtf^`-7m)jXVa&M!Jw_uo)Bx+4Uiwa^CLw<;J|SS$PncZChHS3CYv3Mk)+p7;$@3
> z;!Q08rHHR{L=*Y;YlRR3iXX<WZ2HXhqZCX}cQKyvEprDUz=9DHy640wor}p<%@*N+
> z={QvsxP*SaVQWSYToIY0tE#IG-g^F4m=~u>rFoXvGJ$F!qOvB?8N(F0j&~Ja?!h)-
> z8h~2Te%(=UBi*g14{x*#fk~-dtaN#sj$n)WS(S>V8!;EE77Pp at 3`$?oDtCyI%DVZ^
> z_rUH6L%&RyklJfTva(Rd_$g at v-`rzo-vwWbU&Fm)S!Kj4g^exvsA5RLRWNLF0PO{Z
> z1+mjZV*HyD*i&z0ut~{T$Ne37d-50C5A;?YEeI#|pGV++PIc-$bdYdS-#t5IC at 40@
> zn3KqE09*A0_l)OG90>H+)9cJ-9uYQr2#BE7wF)4*MIITH1F$nYWyggstj&j``(2Om
> zD>#im6?xj46K=Mu4I!%7iPi`LWiNh7>GWb#4xUzEPQqU80UZ=uGCyDh^jh>guIGj*
> zyR2Q%yHnl`85OstZpEUeBKlUgvA$Y}k3Vz?OAsg`AxtUINdLH{Lak@@dX=Y2zUqV?
> zjN!3!Lo13dn^`CwIem)<))wT1x at qJ(Ht!$G*^vf)ib|PYqt;Qm52%m&0vV6P!C$SM
> z8o%@mte6h-(N?NNG*I4fSN8z at j0Cu)?7{=2ZCYY-Nzp*;Ds9DMx!r}+1nTZ5JSICf
> z;x|LHv1}I<M=4KapBKU0uPAC-*%DTD&eNZ_B<D-?cgdHy at B!#eHCXITj>{~w>^V2E
> z?f%$8)ouOiNP8jX)J?G$hmSkfkE`~^w*4Cg@{9WaW$BOpDA;-sF=<PGi2pjf-}<BT
> zU+zaD^`Aws8V}b|dx)AZL^RJu4pA`m-<E{VA)4|<xl*^wTgJY|O}#cg_ at W}vf<ug+
> zu!;wW89lsJfJXb=O>&=-P3)R?@Z|E<0pg%^#6y(cQxO(aut$U)U_>UAYWqyh)1?jw
> zZyN#(05QF=3sjiMu3?kKUh_K*Rw8qSJ7?K+9Vw{*zK9d&2`eIt4&2^dPA-5u4v-wX
> zG;V?d2tlEb>jJvjGunE5m4ZnMJgd4SO+hm#p*$6m);R3%&x6QLpdE1nS<{w23IS!2
> zB{}i+5pKfC>CzRcC-jIl?mgiGptu`G7m~Ub_mxZDjk(ie(L!8(ZoSBNW3e7!{_$;G
> z>&0-TvfvMTBKLi)_>=<OYXb}caixBWO(90-u}=O1b20(;HkKp43_hdlm^!v+AnVTD
> zNXm^$?e_yO{QBo)0zaypvkHD^Q7I)Q+YmWaXXKdJq*Zz{LdYvcHX!t2hm%)<c(-{^
> z#>4C&uvP-^>fIwZuDRc^o7oj}=Y32X$$n~7di?3ZXo-<=c>brhW032kr=&u!qB=PP
> z^bM|gWGHEof*91BSlXNqF_Q^t9DgT~XaDs{Zwa|!KmaB6K8k6$O7<~jgJ)K1`M%C;
> z-9O9P{B|EM011gIV~>RH5kxi5JaJyb^0~h>c%oA@;A@;P(6jy_G1~%{l?mnqM@<Q6
> zDpN+C2e}zywGv8zTnPzh$5dOCttYL|Dv1BFj2Xn^^<fPt@}rs*6K&SN8n(&$dfk=m
> zjJ=dp+PeWCD9|66l2CY`y72h6cLA#NCUf<i4*4Mv9qsK?jW7*J(^@Wx&6O at +Bi5G6
> z?{~^k1h?=+VOfuhoPF27$V>7Z1_RMT7i)&h2DRd#_Hw!x!3Wq27S at v{IW~39OTI*-
> z;5!tX`gUG5Zk;D^x2b34^~{*gLx%YO!~F^<@i+IYf4Ki!cWYOvd|xh3RxYb?ygCNk
> zFE-}&c&_c-SEUW~dI}l|H+d#RBJT!^`=8T=ocmhz((5x1DAicy=W_OX)OhaKI}v+;
> zv)S3RASS?))QwAzC+)Ke5b>RWZ954UGDcw1hs23Y$)OT4vUmWgtO%f!9uJ8sSV22W
> z%S>!{)}gbWs_}UOot(ELM0AEA;2}~P7p{^(=Vb{*VUNP3RE4#15FkKW+&`PBql)G8
> zno=;aQb1KqKiuYN8YyBYjmkQ0f*I-!!6Lz878a@|86mNX!47xy$ZW>e#9pJRE1}%C
> zOdPiI^)3WxCK_?Hncoz-{qXvmVs=xc#I<)B#;Z+Fkh}43T0cZM4&T|BFOW!8czt)|
> zje$!+WsZC4i&r;10;~_DAHQf7T%U3(wd39ENAvBSGS^SO=s&LZaWFgA%FS`UjqL4Z
> zz1ECsdDQ}kHP|%y=+s+HuYBN(N(zg`x0*VplV<KL)x7gx>IMpH>~c6CZoT<Ep5#qT
> zdwO5xw2RDn8xs<DVT8D%SN=Sx?E6)|m{a$S^>nZ*kqsR~4MG<M+H(WSBiP|?s at 2g`
> zM=rijD_ObMr}CQgey~J8`J+k~d%H_{`m_d=?O}?Fhq-1eDum#s0B4SGJ_^uCB&(mH
> zd7B0*hUg{{_4y>g9NN|c-=?Up#5~GVy_q!IF0W?We*H&)ex*tAh1O{}7WzCqTr^&e
> zc;|3(ZJGx3hJHzJq5mTPk!TJ6nD^qhpPf3hJYMiU8<Q5FETYw{S9e?1IwD^Ii&&JW
> z_7CzT4&(UMX!m!JGX_%^G1fxrT77YeZMSc~wOooi?fso-=#!kBAZ`cJFb;$p;M%g~
> zCyuHWeGf~udVLnBRGxWZ<=Dfo0tlu|#%+FveEDfpgXle&<~gHIlTXh7;~;G713<~Y
> zxtHD=65bkby7|v>VCA(q)Cb3U24 at ZK^7CL(sgYek%h)*$%#!gb%cWJp1no<A->dGL
> z1mAoH*8OWG1!N~rZ9D=dMNkK_8oGitzfUi?w^DFv at Uu5JZ=S8w+6F<DfB|0<7}F+#
> z-D1s-7?>TVAe%;q_7eNe#8^3(;!JWXE*!J9vgl6*%-*ow|B*2^Bn-E}g3nWV+eZLA
> zgp^6XRF!FiDhH}e<_)EZxn!ZPn^>qe_Ar>35yC8kT2D|{Rw+;t=Jim=vmG3HX>iyH
> zY4DIQ)mm4Tj2UOtkqenA5S8pG0_d4Yl?*~k0i0G=D2%Od<CNc|mQ7_(<z;Sv;f?p<
> zS`(lG1)8W-PU_JJjr~T6K2M&g$*?}W<MfQ+`m&S5 at 1FNR+VF7xCn5CCeLdf^ejC#2
> zt at G16C*h-S-dGcx(bA{pdU*OV*Gr$3bL3CkCJSceyWef-O+Npqu)T@*RDVQ>-Y}NT
> z_es+FTY0}BUXXk%+UaLf%Y~G#b#>dYxhVLU(g8dj`YobXY0p)J5<<T*K~R=`G~CtJ
> zkade*zIVyx<hIU{;jW`Gw(c5u7eN2QOjb(N5Ph9}@5Lu)HV1*@4(gX%h0*pBagvtb
> zX%b`@j}nErm7bQl2UeyOt&pO{=^99wzP!^DmTDu1P at -oF`zmLQt<AJ+*6V4s=5fS$
> zpRSJ9u1A$~y4F?RqV*oY_hPIav?5JSVS`M47WWF38q}o2{PrNO<ny%VzDQf*Xvyb}
> z-mD~wqj(tkpt2bj?)navdghs_C7=5%Q at ABZva@%^!{6O~SS=4BW35oIYKfM4DGBQ!
> zEV38%`ZX~2llJo`aL%_8V)FK9x)YqtMjh5O+8;f8sXc)erV&xkacGnb#v2~<Q`(90
> zIZjZV at Io5}QIGa^u_p;A%kh#RNqZmiN>C2NU`VHs%tgO1)O$o<?-U83xq at Ke`&<2*
> z|LLzwfKq>RPyWsQf2_aSu`dg&Z1I2E`|_wH+x1;UG*C=HR1_^hK%4<lvq1&Xz<Ca*
> zazInl%+j*)Q$$45QZ#bTImdENP0J~#tW481tsKg<d7g*k_kH_(XaDx^>~r=yf9-YF
> ze*SuS*UMVZy4Ur*?|t3Fb(6-gO$&5KZo!PgXSF>Z^+`3!G?(vrTPB?oy4T~a3t0YC
> z5di3<Rbq7c)BP7SiDNWi+`8CVZYGhf<<wvu(%)!2N)9;~g2gsg%|!!nI1~~ZCtdL|
> zb90tEGYgi>OmR^FSMpt)U{coIZ6E7i<ZKBap3zkmY`^g=0BpCi)4V6Mf++=;$RjEm
> zJgUIMF)7SRDLiduO(-QdodqEE+C at up?T~mH!YhG50DK%6=q<4g29`B3<I=$okYUd7
> zA`=R>G5QMk3jn%%@@e`|^?;q&O~?fY_eb9~)Z5Y+-LXzz at g2VHrgK<b-G_ziCSjNM
> z<d<M`PG0xAe<NofV<Gp!^@Bd@)(L{hi16;7wK&A1SIz3+pefVL!&|=iNk|lgb<Tw~
> zV#sn}p at 3<6JxZ{Jza#bLtwZl9`_jPh^VCVlFyr2Zax8C?P1#GERcxwL$WjqttX;uA
> zbbYL=a<O0YJ`1T@$$mZ_f9K6M@)1Gt_%G at 2m#-B at cjAt0!bk)}CE_+wdDVDp{?C9P
> znI=CNu!i}8g~Moczy^yx(KBDBLO=hG>lb8sj54v&+J!RZBD4V+&!IMQ`b{2u>Ts5x
> zz6<Qvk1<w!nd^Yz6NR-RC7r;S)C at 2`@pQgCiUBK*Xr&FzK0^nF=Tj71<Ehfv-z at yC
> zrzaE~(<*Wp;XdEPS<Vo4YP$ixm2$FHJ2yNC0>R?boxxf?F|u#1-wujrAR at EZVNfnl
> z4Pvk+3bIEx_?+ykiYcn~Y=p>|k+?ZA@!b!#OZn{@48={>RJNdmX$>NLq-4Jj&erAa
> z6UHStiyrJ+Hn0FE_MQ>Jpd&XCY`lmCM)_;2{DKNOaX4F)@$~=8i~XPc=Xccqo2 at _j
> zhu4}Q#P9W2D!=dU5B_oR&+pM+e%RKfU$^R#f<4l9$ubUZ)H8~RkUOU&`ZE4%)Is5?
> z#aQpp-`+R-yqhOkuVfr&>fuXX&Wy>PRP7#k9_$I<H}An0$vGV?Z}gtft<+=$oEsBZ
> zEmVieAo at s{47U#g9;(l<O%5Ofqa&}BOZp>5ZhT2Fl1Oh$_{fD<Sf{?ENZ07yPN#$5
> zjVSjtOJBbxC8V{GUFPOhtt3BUmyXCzNwsnT$l-^mSYA-d5C%0y7ePr(SXi=+3S!*>
> zMUEGQIu*f&hA4VN3FUn0p|yHdbl0=XGY9i=H|7PS@%$j5-zbJ9q|~G&9Wb-9%1~}@
> z)xRxwb#Ax)wDC6Bg&!I``92(G^!<Z5oQ6+n_C&CEARJzEse&XUVA3{ReDJuS{b)#4
> z>Y>1{r`~tq>zZ__?QOl^vS-9_nR{%xoWLWA6UP!Xyo4>{)e;<d0$Z~5+oZ0w5F_wH
> z%|eH6gRBzF?~f1)u4AKHqG3#xjEm(_{xG_H$kG_VWWy1f(zZ>BRQUq*?vF>aD}GTj
> zL%M39I&A1scZGH)GCTgrE%iVK=XMW9ZptBjtibPGDZ9eKFiD_m&j?-8umeY&puHYA
> z`F&wg2iE)~f0=Pouk7=P+(#FquGD>+ at v#1fU`te at pn;B>Lh<rnMQ57VFoST9c2?#_
> zdD<{jnHDx93aG*b8ZMqTmU}%yDN(`cfwV<$PU51eQEJviT=6ZJ$OhAX{KHL at tP-(v
> z#%Z3CRC-OncAkQLE#!T%Q3ga;Khb7~G>%Ns6y##dHbEky0|{lHCnCT_9D!=~ZJ2Ja
> z14vVvjT-PmfhJJ%*b-~wVO1FKVySuzWwDrYdL1b>HS{GnSSB|#O>Lpu(m`IR at j<g|
> zYwU at wu}UG1)1FSRBy&@8qL*_|@GZJt<ER*<XF;KKcI3iVwq;xDx4m1KdqIZx9x-6K
> zN|u6=V%X!>zdxc9Ya(fX!~Mm7 at WagE&*I<%ml)9Xv>xiWRMF=l=_)zW&<x$EID4Gc
> z)3rnP1)Hp1^<|A6fOBwjKP&YFDwEyAUrVlXYVr(Dmd7(>RQ+P89ug7wGN9Ne#AaMJ
> z8Y8wl<B3 at RYrMNy$)?W^Z38Z*nPD}-AUvxE<6Ma-Gl7S|Q;>7rRP?&)lHe_gM|N0q
> z?RhmAJCR#RJZO{vLQb+ocWSkbFv&daCawgLnOO=bjDvX8a3|Mv6;wqqD<`J(Xp8rU
> zXc1kG2;0%y1gPJOHdKym)k;|i+Bp=+0@(UVQ1R}1AfX8TK!@FQG^yfK-qo`xP5V2G
> zh3dLpO*I$mCxExlzj&NdlSllR*_s_niAHpJCfanEgj){{){REE9PG3nI+=TAO^J~B
> z4sB9Z9%Cp`%@PdV-c^O6HC#Fa379`RtsTj&oDA>I5pKJf2koq!PL6Nv+yA4#vi!x=
> zE7vO3dyNMj&hH3jD_0kV%&ZH`kaU(PI#pa`*Q^ehkb~9IMYZX+vySWHKIN~goin*R
> z)Ya=)^cM3(n3N>m{pAqraG|WCfu~7FzgP!$YqbD^+{j*;_XAJZzwxIT52<@zFxx=1
> zD1wIx_!*Ee(lbYRue}-87?(k`_=Y%oN4HP<w+-5wa4!XP_Z5HlQ)S3L&q&97bc&0M
> z(`T32$WD6*V$S at ov{SNTfS~oP>i5#O{X+Z4`1*HAj&B~P;d3M$9ybtfW~JdZ`vsXR
> z(`|wY(w7B!2t>D-I6lwgS8TlyB`XImr;!pu*yl4|Gr}!nV^yNSA;o3JpJ!nMV`6aN
> z^=c{S$n*Q at +<BR<Va+-GzzErBv{`82RA6=X_D!Xj{9u5G)!WiZm(ie)77yO7MOZ;Y
> z5{Ii#E at Wg316xPu)A_dzTAd$tcR$)Cmv0g9ZZjF4?G|76FOcrv`3L$h+)w<8``^a?
> zrgy0H;@O_<Z!guEBXg-qAF|5Lv-J}&6wxlgX<4D+UI53`a<Ow#+&!`@C3ylDcQPs`
> zj03YhNL~h3&lwmo8mmvOj$e@%4H(NUC4W`0a?9`tP$H-~RMfxQCii?^vS`2(LmsKX
> zz|v1kmSidLecg)EH{t=obiPhy@?O2CJ=w0V`&A8`8OSyWIRJ#0DH`Eswq+={V0dGE
> zCn?YL2`PM!gEasLL?e(+Y)D)$xRT|^?k$Gk at 8CPeRdX=f=^0MLcgXck!PpF76^n}B
> zE3=j$cTepga)<oxicRujv9`&W?l5S#Kdz45+31NCRr)7#uEnIeZsw*!GAWW9&5jO!
> zd_p!tzkG3Vz`sLEY=0x-<Bp{>dX|=$mA&0U+5XW}@X{2o?(5yqQ`uvx?cVQihyx8{
> z<$?sSTF{NXLpnG66_GE!rUX?jBWIwnp|+Na078OIo^5Yl=*A$2V(UIXtLI_0xSI>P
> z>vH*(7J2=x80|LR)voA)kq($+_=GZI_)t#U5Q-}k$t+}T(=Te&?NTV^S!h(PK1NcC
> z53wsN7LLhpB4QH`KieGIIzao{Pn+Y7hnmT!fwf>8qU~W6lKEPBVeAI$!S at rnNh;mL
> zUW}wqg-jE9HJL2^78$#T$5bOxJQ+ at 3=m+D6p9x}B`z-x;cE=vQ>wI;11f0(h43HYE
> z>l+bUmmw!nLHBkE#nkOdM#-uBgqANsc$2YmiK3!Li~iZr)PQ+`ZPYHCji~<gy9m|g
> z$@-dzw5^*wHt48WWQJP8ac8H~bmesYnItr(_#KHIL^GpQ)m4LM81tp{d~iT~qqT#z
> z)jq{X%|~KwGF2U`UNaMSNq?rm5>?!#Q6z_kFh5fT*&Xqu(B(!ryq=0`nQxB*u*eIO
> zE2 at q^5k+mF18rpJr^D?PMWA^mxc1W at byk1>j{o~>iQm;r|MYWyFZo#G-GAYJE8$o)
> z77rS;{fTv*j3I=@OS8z&W5G0usbujRJ%~8v^qgh#gm!U-#Shq>vg`gcC37&jM;B){
> zYdEc(hbO4-iMv<O^2LO at mxl0DZ5+1%)kRfghS+s$F!~U%({F^CV_8#vw`s`9gN!*`
> zkzJge6sYK`9rC_3bSAjZV4Hf6Zh#0<J;oGBD<#K+F`^JwI)az%4=SIMbcV9T!?K7}
> z4QteKcao*E8`}af4vVw5aFW2+D?yT_p(#U>FgA-#$GBM-frfQi)fTyN_2b$VmEkB2
> zyPb3Z!k5MH0HOQCieN?UQR3C#^beT^T~eSxMRIg!NE$F+0(S&W?l~%|Tb_~C at o@3G
> zAMw1sa>;PRg8L64Z#rUxgi%lT!ZzT;`ul7HzRcR~RmC(a#&yXF<c_HhOl6xMJfH_v
> zEm%^JsEs^C*7A34<F48!w(1t<5I7NWG~?cwu`3?~wQEHL>x?S#!%8Aju*>jPx(8^;
> zwN4uoc at TUmK88uPjluM_pKV5Oy<6$_)U>PgWE_B~eY8K4d2If2St0bZmhZSQ(<y*>
> z3JM5);cL>|_S!PsZ2XaKtdj|5;+FSy_S>Vd4WT%sc7}z3BYY8 at QKJ($I+T3Oga;fy
> zWjWV6Z0kTja1!bl+w-xJTx`q4L263i1l`hdHJ>Av6KGcXhnP;In?|F(Nlp_8t((&I
> z!bEuD7YG#-<|jr?gf7HvZJE3+TUFjm&U1(x=of8B at 2%F~Qi1<=Dr;*@Yl+#1H^jT%
> z^Xcwy(vqDHr#^1Jb|>GepCIpb+zQ8lLq5pWUZ4;g1%i`LfSd at 7Sa+wfXaGGltEHv`
> zjg*XmX1_)ZUX^-!I4)JVhkyE_uI2K^*n3C=ZTM&^W0OF|xCX70K&b*x2DJd<$bqgw
> zj|1p;*1tIabIU9tt~G1^^ygzk%W*~Hj43tUzlZ!E*T19w-)#NKKagv}SHJTQ_1|~*
> z2mc`d!@1PicnbclW-kMAZrWe+GYEZr%hm1$#cpPE6sGm7Gz2CVfQd#6j=8Xmm>|YA
> zaG)x)|8bv@`rh4s1J|COyPVTum`jK1I`y!ZO42=~s<`5_w=(5EO at MlIwX{I&y?3iX
> z1dK|N9#6|r9R{)T!B5g<cSDIqc=o*xXOC+mH&1d<10{YBB%EN}YDoqF$gQ|A6lb~K
> z!ovERvm2JeK#4Mr2^FP+dG(;D%iU8WtO*IZOc3B+Rkek3e|=w=His!aEQnBV$=u-#
> zGFBiN`6o7!4~^-%*U3&B3||vXDLoiNz^s5pTlx^-<b5VSpN>tBz1<afKQ(B?=jD~w
> zubW*y=vKv^I$L1Z<1cQ+E#A^Dj=m=~&eR^=T|4$5Z at m6Ovzt`h1&l$$x*|&abmEla
> zvvf&#ng9?~=QH)gg}@dC1V*$;=Y2w at EGu?X4-Tj#_P&V at nA<6>vZK*7WP3OWlJ-_A
> z+KwG6mv#|m0-IjT`MTJJE9}d<4$2tnDir~M7MgGR)4g18HlV-vs<hamwyn&<#<D(9
> zC48Bf!#AsEe(Z;aT=7J+-`@+8t8FfS8r$It3=ed!Qc66*60%!<$|l1cC~=tu40dXG
> zei!DjvM4<~b<9-Ru^=#L7qv%ILDf=4Lj at 98w<)=^Buk%Jcreart@~o2gn9Djn-7^8
> z6<DlA5k7v|AM2vLZ>r=5gofOA4IO}3Wcz9Bw(xivm$GK$UYlMER95A9`mWl_#7Nb8
> za*+!s7dLQ{;Tktx7WeSSoNXAP3v!BZ8Pzbw_)GC=mmbhQ<B8|6uyde$u<WNcYFn$W
> z8oZUJq`-rE;)zMhVPEq&BZJ!^dYz9qk!=;eXRGh~HnFvA(@=vaE%wF+6^U+*XD!K+
> z%}4i<>Tk3be?16N7?{4{I3$Sp?w9c|MujET`Vanw`<?%Qd-H at Znkh-)Ux5?vhdieq
> zO<EAjPj0;&em=EtSLso*`C)r0`+l+Vulxizfe6lPc1Zx_QwhF6$_9SP<Gp$a(7q2;
> zkOZg}L%WWV#5-Ap;h`j4)zYHjX4MX>g>sQUS&=?1$j-qr*29XhQnV8fS5;Xh<%$Tu
> zvN&|Hw7U#lBJb`1uYV^BFb2Jypn$-}6$tEv0F~_IDk%Z^Nr01`WV4GU6wIRIC#4WM
> zp)SEFdN?`3T>v1DD at c_URrlj0xb$2WJz4q{#}ZN_7lvL3Va({k at 6dqLldn6tEqO^g
> zkElOK>cM;&2?jj|n_%bfVn_G=XzRI+<92b16jy3?a9~TV`Z762xjmu+skhT=3axWy
> z>cfbHm^!EhZKI7MOy=Ub26_`xCFfVa$b?uo4-u+)Loac%l9UK1)TE+nTBY|bHR>vL
> z+*W05m&}E1KlNRs)jo-XS-W6pLVT0I#~vq$yLW4m%-pO;sI}m!L81zL#!q`_vfHP3
> z5;dtD>Q*ynORwLMzRBc~8b>65>gf5qH;k2_&h|e|;F|H+tZR`Dbe6vS=3 at -T1{yCQ
> z;RQjZthdgQF!Kh|i30{#J+so_98lV at KL=loy_$@w+99>K at wh%s3_h)#AoG|=aPGp4
> z>j~c0Q(7BFAOtDBEaafsU2^V|0A|FM4`!yIV#|>7vb(rwUC+acj+;C$zPGX(;L~hk
> zQls9ONFH;?UO5kb3h}nbXODH9+vv at 1(9BtcZ$mp)>B at Hc+;D0r(|rOAWQ3lqs;HE$
> z4U+6WWaoGh8h?dI%uXLh2Mn at eEq#?0=%b7SRD&tc7w#E0G~j5oRct_z-iNGry60=d
> z11;g!e)zD?OFQ~S2dCqbzrs&D<EN-5%OTSzf4SlP4kQ+%PX%#9;E9<?oSy)2<3`0!
> z%h6h_=b0O?wcjmW4XW+V-|GJ3Lid09CP{4k3- at V%;{LDv2eozH<kl%CzDv$_q)2Z2
> ztKsV4;2<5p!BrwxFSC75k)HUWUMR_C#>gAcYo)_Ni-3&cl;f*4{dOPfJhf#@TeQpC
> zsO4?d{GKFtGbQOFRC<j{9k~y4C*8V;2^L-le0FtSOWl=WNmfiFEj}UiH60)q%2O!<
> zz}0H0D2QGTmT4KN`g(>62>}!iA>t>O at kk&LL0zVw<xp^0=@Q8R*)usfZarL&-A9DP
> zI1}urLgm=`^%+JoL1j5&Fx7(6E^@_Ld1A`4CPmyF!lh)fO_QFXzMB87yXLZN2_TC=
> zkSK0wZMR9i7_g8?iM}B#BgaU8jK9%mW9zoUw3vq`swhiwiXLr_zb#aqemL|ArXRka
> zeDh8yp}MDS!)WVXg4146u)84RSW5@~*5q=e_Vx9TUC`}o(W}VD+2Ncm_g at h0F5Z9Z
> zaBsFn&m(wHrilFF>@hCoRwV!uH0!@j+V_Cl`aN|Za at ZFMj-Rp|Skej0!`OlaVVmQD
> z#4XTA=NX{*{>#^nSZ!NZS6T7SQ_Yujy4*moHT(VheNLc9$<Mf*SuEs3;r3CkROh&g
> zqvv{s*rM~*9f2Dkvw!6-WCmS_nQ3-NnytwSBf{}-DMF_+1U|`y`&I&r^|RITD?Cus
> z6{-HnA?wg%g at Pkq#~p<n1r8h!=T$<kh3-bFZT_VlB6v+nALhyeVQ<8FVW at ls_ZX<-
> zT8aC1 at 548(@*Cj7;O3E|x0}ZURuX|Dj1_00o|4a|>pvbvG>TN8X at xeFW%qKnXI%Pd
> z{a}yEnt;iJuh%orHIDc0)q(XB`!C0*U-EYthgB at LIH3^T6)-xG1ItbqmGLux8mMl5
> zBE^kF=3A5aEwayJQO^gJcn9p-kAKd`Po|yL6+MYay}Z}VdvA0*X7J&xlL&yvOu89J
> zfkyH8v)wuievE7XgoaCC{=)s`KXLz8oK;77$rh9JjLou9fRa~85(Y)tIPLgNI%axy
> zEUI2kZm4Dj50zLi0b(kN5<rYvUd at p$(>@)GM(`QAy^pkGe3EsA?ToJ}mxYPi1o?EX
> z$Y9I5{m?i}I1*9GOrsQ+Fxce)gedC at xJYrH_adD>cHQ!j at -ViE>h5YEDiudjkkev=
> zB&36b=|DQZm9sV^!(IzOi6 at qkz@CpL>Cz=OXu;5)<(F1Q)^SjCW>_(|)iwah?L!*{
> z-~ybo>`-HRTMFq_5Dbi`I?$?WB+aoo`y3W2wsa_UR at H4f_Hc{Lg2-u1qRK<H`_Yg|
> z*zueYqY at RR%WHyOqLuanm}gL5PvAxy!7DZ1)o|bQ&SJP!!%Z$M_y=c#>6<Gv(%06N
> zBCD@{@8o%>cF*=Yxt!3Kw{}pfV`L{^ZJbicfbI^*Hf?$EsX;n;pam3$dzRYb`SjWk
> zOOO}rqPIGX6Apg5GWjF#jNW7H at X40_ZOd$Ft3_lQUHb9D(iW5V at 5NcKOY_&#Y0*9*
> z8 at Ape7mqOZ%VIxF&!Q$wzz=+$0CFSQvXzb!I*)LI7NL(RvD1ySt5{}hc&aF{Y#zf=
> zJvQ-_#jV&3_8vSx`Fc=7W&S-=SEyxSS0kwvgynQWaObD)f`~3=SFWkrQy>c>Y>x$c
> zgW((fGMtKSV1UNS{9)E412)!M!eUZdzfNbdax6y{uZP$-U>dM7F=lV9tmGh#N_lXg
> ztPFV|H_-9<rd>Ndw|fP|G)TF!0#$u%6HxuR_QrWK3ytf}39lnamiEQP#f13g92sdJ
> z(H_)<DlKt0e3g<Kni+ouLiHj&U9dqge-kv~Sl{=R=uB=@Shr&}^#tfQ$uG6 at wIQAr
> zlx}7?+*O@);x|_&qy#)1s~WnHMlGS9S{4Dy+tQAH2U#TQn450V&%VA`Ov8d1u+p=H
> zAj4h|PM+;`V_TXWAE9z~gXSM(<agBno2 at _j$MoO$2ln^f{lP!p|HHYYCczD7_MSH0
> zxZslX*gF^~2SMimGl(e&Nth5;r2jCD7H28Br6L2U4Tcs2Od?v+XJ*15ZhO(xGPkH&
> zW_26TFEO#ELCpXN!f|l66 at b2l7+j@`4u^z>3KRS6GG$b7FgU|P5nIN#k^=Nw_*9-b
> zI8}r1w;O?$<6(4abe3%+59+3irpijbW`Rkz(kY0PO1oksFr)-#)89?%Eq_yLWyH}=
> z_ln~K8}Q8~=`3o3_Rx+1gP9fSR#i at xn___rCe0y(8U%z#*Eizu&nto~sX3W?fi_~U
> zv0H-qwp!0s769aM6P^h(2+u#1)5HxkeR|tEVD;e*SHrGPrv~gDc&S0Ri-!I5x~zjA
> zDz#b<y(-z3)~A38)6dS%i}N?t+GFefDoXn$G^TDz5E{1=8DDO++vWblcD+4bSJ*R#
> zC8e_7sFu1uTG5>l+ifkt-G`bV&N@!#e4VGf#ZVW at iC3<MRl08pS1G9OyZjtByJQEm
> zh|{bi4?41xt*;*Ww$<;=CD_BnmH9ZSiD%<0J5;Q+U0UJ~<X{RzSBLaNVOSUz85-&j
> zu|m`B at l^BE-}a@({1VNd9#^zoz!kdTg&d^&z|hbv!#-xe?#@r8fodw;$BmmZ!?On7
> z4qS6(D3PGHHF6g;D~!hD-<PIU<Xca{L=4Qn1se6NB&s(j(p2mC(voF(WKFGUwEqr8
> z<XT;$GO!^aCQARpYX*Z9rTWC_GVFY+Zb&(mpJJWQ$?(V?5G`A0x^4J$5oo{8jFu~t
> zHMsKDwl69+k2DM^YZy(7=_mQ`jKLzoYt<19j(Py*yzcSPG_3L1 at R|%TG@`Th-i0k`
> z=yg0Ch{K8V42)glp=pV(*SnuhIWE_DRL{c|fM196zE5~*$61G<u({yvneiDz*E8`U
> z)tLAI{}o-)b{$a<M5$MaB3;BjGTI{$PLf+T91;v1syhL~#;$P`3EW?}$E~%3{C(fk
> zR!|W@<;C6~CFN?YYNfKqa)axQ(IA*TKm*5sL;!jlov(4eZ$}?;W74e4KR_XLsdUb4
> z!tPyxaHXIO>7R9y?j#(#k;^7AW*2cXe1Za70s}sP&`o1Hlr{!)f~0x0Ox7lM2rGn5
> zBTT`BVI??4I4siN!e832N7 at x*F_V*1?ds-M38*ph7w}x{Mt~9pIKC6fqS8;wC2NR_
> zv2hB5rWB2e?6RyZ$z|mPYB5ze$>r*g79+0P9qCE7Gl`7D8sRMz5eX)tC(7f{lkfuv
> zv57T3&Yn`)Ik{Kd`d98B0D}4TyqmA~_&m}X at 5D@R3)Wc?ZbL654IMtZG~D8JQICFR
> zHt?vR^4c$rf|I3lm4jM)m%ZU!ZP}w9F&L7aetSpG9 at 7G&b8^Dnq%;Z5Fo^HYE%)DH
> z5~u?_(^p3>M+B5C3!CF#UO1x^loS?n(mJ8@#%qC;r_9Tj9ohyBCJBb^T{$T)(zL(J
> zAGGLt{;3?U`m`{HnEs{w!Rm)Jq`X0X#1M@?2#+e>4L^)wKg}KlF?D6v&DrAwDZ#S%
> zRLAImJ&e$KdrAf0vNnWCnUFb8X5!A4-&?RZlffw?R5i(9CQb&cCGg{q<rY=+8;e2$
> zmo~bfzKy3hr3s4!N#fZAt<(Uvl(jLDk4+a{-y5fWR~d2r)zP`vHcDnu`xwsx=+>?e
> zt{qPqXmm-u2B!@Sj&DHQ?KxG9-LL)hDJh(=-Zq(#0V#&z&@xll%ux!IqlNH!LU!;*
> z^>+}B2R5-)%w;P*xnObjpoc#ennm)~rxZAVS+!Yuim8D^e3Dt*xq{u4eEDU2!%9c2
> zXTK!&yJ4CqQU27U93kI}+aOS@(cGeKorg2$nQEO9yEUS)`1}Zy-MZ#0W7L0A@%vxs
> z#((=Eq45{)xBrRzzxc;i&^>_KF^iw+5~PY0nc)3|QVl0|;e8R=gDW#qmC<qW^SR7z
> z0;B1o@)m&f{@z?x+RgBL{jzd#x3t2QuBDeSU`5-mc`4XyCCY3Mp8F}vb+HTeu8_ry
> zCb~TIiqvBc0SJ(gVp+FhzubDdgpmY^MJ#se5up6q;3XiK?>;|p4iACg(e)5n{zBne
> zQ->7UB3;CFH*%(CT_O5%(F<fOCesNhxn9i;WeFicwh`*Z!#w6LkX<;aAjb}$mCSQ)
> zP0!U<;n_6<B?x4R_=7`wmBEsPjulHJRO+htDaYf!*L{bm4x=yGko8SQc;Rh at qh27}
> z-G?q^83<eU<oOJbO-3HOepxv)Dfn0M{ujHBMqc?mJ$avs8h#$xbUzOYoqWC{Z^xzB
> z5)IBwP~F at BS<?v=>ToTmDFo at 9;Ji&N9%-Du_tqjF4Grn=zj{dD(oR{9B9QxZaxKfF
> za0;oKzn>H2GEY9m(0uuXn`a1hV+Fj?>y&QZFlkBx`f>C!4WH#Y<N9TWOr{G=+K9b^
> z7{&HSc7Z7KQb^7au=i|A+R~OndA+pee9F<Av~dnYChFFK{N?n_G&Cd(se-<K!%iHl
> zWYz#HQjoE7-ef$iB>fP6rG%-q3S at K(5PrKJ`Gz(WS4_{*q)E(?O-2X<s)!VIBv<Q|
> z{Hx7(rMDJW3y2GSp7s at ms*#C$soV?is<j>Y{xL{Ob)JHqZe)V83wte4j12LaSb{xN
> z;6P#@xRRVGq$;G7x39v}$b=zx|3kuJVMw3?$uhM;z|dM!2qdI(-_=ywzrpc|*bB(@
> z8yY#+%|x?kPGC5rq8OGhQ#^H*KmkC8a$|>v)wC**&LGzZI6n4N3DvmXeCcNxo`3Y$
> zAjr at 7YfC)HPmTQ3#9T9Z>)nMo8`-YM=BRDLCFIHLj>!gb7LNk+{Qeu_|GXiA{|ooO
> z{R8gJGtbqn`;|M<n4UG>OnyC;Zu at P&M7-0jczkh4ziN$Ndew>FcC~GDxc9^ObFR~o
> zHFs~%J+4DpL;cM at v>|n~`@S~dO1iA|hy5EdSuX35x%{v?8V*c%E_-_LATppBo2x+W
> z)dmL1o#DAS@$toeY34O_5aD~62~@H at t-e~;-MP!Cf=DA2XqVclY2dszhlVF00RH&L
> zuX7nv5>l|WqAR*Yd6lNU0)Pn!5^w=iDCaaRpTuVD_AkMt%RtM>2+ouWp{ON+eph$z
> zd({qTL-gCW#0OKHDWfO=34jr@;TWYtukiXd<*?zd*ko;1s#E2gJDaX3S-0$|Kd3r-
> z^PT${E**B6+)zEU$HBZYFu)+}b#Lh*qUk;T&AZ4Nb&MvsOw|}~swoP$#Xm53w9)Xy
> z9_Pt-(PI6G(>2fgA-+LY>#XWr>!;^h*mvm7J1TEy&T9DAoy>#J^=(0=TByYrEFK6A
> zZmqkwcQ8T#ITQS(T=lU0cuJ(B>9&+i^J5Opny?LtnoR?VVr&=Y$+jo^Ms`;lXV at _p
> z6tGUT63KoO<y200d)X8gk@`&1?r>aEyt at OOLD{_+(2`0pJF0k~LG}8nIo9b8XEZ~h
> ze|*<xws9V+o)iWfN25eh${X^QLi;hMAN0vj?h0Ag_mC|b3mA8B5FBVBp(+h55L?#^
> zu+6>Jn_%@goi)DLy^J+$yI50Zd``jBN)o|h8h at S$IcygmPw6-l!sl<2#*d{peHL`2
> zY<hbaHsYeDVi!+I>(nQZZBa1(K-|fx9Ib)P8k-1Hm at LwW4Li`bl>MI9&%l$kYg|V6
> zzl1K9o^cKzRerrycCq(!bI<NYIcst!YI|x}4BjI&*J`9HNAqATa>Vebq~Ym#YIfX`
> z#y9f>?|*{r|I_W?QU7nY{^TD?YXcC(Yxxht at 4Nehf0X{ixzu|pURo^GLgvcAzxi_#
> zvS=rk7mq=(vr!c>Y)eJUUqdHG1vSy$Z3762Y;^Iv_wc3)IjKYD7 at K!GgApNEhVBoZ
> z*X+mJgDmo}Cj0oeAF2^UT6#P?$QYv at U)|?q^?D|UKYEa^OS|pX8Vmwqcrg0CMp^cw
> z;euy54^*=KbhFcE(wIs;VP0G}5=lD~uK=>(5in~-OmGPp>%^MwVv%~eA9iyVV%jd*
> zPeGMx#V}>diPrP8D}vdoR3Hoiz}7hnUAbbBzBq?C*gKUM*HzZeTxysBwXg<(wjlAz
> zN9bB9ySxNU#QhWZI##<5Ag}zekUajr51j{HAQ~QVKGM{JOdCFPPoe49zNxRtLgf~p
> z+l2FW+~=1vRj<U1R}ep^vAYf!P$!h*)ic|Io{hYl+D1O^vEr|tfn}X~@>s0h#;kNV
> zws0FQ6z~d617V#sg?2q&nbIq|#n6ne)XuPIziO`m at a@h-5IErSbX*Uj_C+ds^Zod8
> z+vunjK+YV`*0zEEsEhfQR-RQ^Z0OwVIJ4dtennmZm9h)oyvS0FYDf($rrr4Rgd^T(
> z>2q>2gHePe?KR#&)<xjRSnZFkl2?cE$Ym^Qh!y-Xy^!<3bvd7xe$4Ag2zR#zCQ^#T
> zPD?%J?~FwdUEi0*vE>s`&0mJH7ejT=-Ck!*!^%KY9c8jKQdg73u%^#%`FB at BxX@#v
> z{jfw)hMcnfR-(&on at BYW&46gzI#_1lydZ at +J+fgBBTzk@p+vrIwBpar$a?L$Y8eq7
> z(c>G_#uV{IQBH&3!b;Y~+cTADyz{Cu{Mot&2qZ8EHIMK-TBKB!Y0YUu`r$(9YB||z
> zo393)y3$jJjw3!4o2J6<zC}pt5|+bh+~cpW*Rz2ZxU3w`i1?!n^x=4MU+$Drm*`({
> z%p{0^;ePxda8J!jx)ZhTnT3qP0LH^QcQ}-KrFzo)H$;FoF@@z9B)e`UKGZoBd#6Dx
> zfi)1No32eC2zD<#-kWh$rj|S;w~=Gxk}zCY;-3QWBYeGgUx(?Y1=DO7XY<_S0D7N7
> zV=Qo at K6=W=BBfz8C at UGEa$!jL;QfsP3xq>1hVCYvY2pi400;wCGc=hw5PT!Pxmy;D
> zW2$62xwz!oTL{>O%@_%MIzXnJz*7bL at i@i!YI at EY#R7|<Zkqx77lvi at bc;9yu?qiG
> z_2KK8>Qcqv>?-O-(*nyQD(AUnJZ7ALnU?78GGAj5 at Yv|Yy$2u4d(p?VWAz91cFnye
> z={|gZD}8LN{38v+jI;UpkyeUQ(K(}+v+Y9#0H99)%p9#>OsLemdf<f65MH8OZ}&;N
> zkp>tG%+LF9g17QK@=$Nd=95>SD`?H;0X8Q9e?B>Iua$Fsbjb%Gb?~AdTCWj at k*MSj
> z<jv?hHOhyf4fO~fVe2mMHgA`J1sx6M5UMK!0_iW*cz`Vqg^owJMbVnSP2G6YAXOzL
> z_i|Zvy=b9p+X7@$ZothA*<NG6LWOkCr!q)VDVH$RnKGjhsG1;~*phnq)+0A-*7wlH
> z(Bh~Vzg at B#DQzxm{%NSA+)Kv*DH(Ts#iO=&@2{Q7D9LyO*9zzlDGT(sK8{b!za-o*
> z8uqumJ<rmn6lEP|8u4>vm#wYoYuQ}}D+2qbtmzCO^VzVjJ<)i&WS=Rvf~IdGp8kv%
> ze4R!3c!pca3L{!=2<alNz0$_`B;ZIy*^0)gTsCB1c)8!c)_$a={d#F#6Zh~~q+G*-
> z3`%*0eV4P;u#jpCgo#+k=+<A2v$LB3gHFjR$A3Ll?oBjFJq>VP_`Y{b>Osd}vAMnS
> zpNWI#<Gbl~p5Q02r#Oi58{1KBv04(Md6n-yoYy%h?-CuXo%GMVur=PT`4{eG)>_g3
> zo_BBTYwh-NW`T&+IcrlOE~L(5x3y$=ns at JmH0T|S=xNaK$646*2=}&12oouRvROgm
> z#r57{G5*=?;<qw&{06N{#4Ix=jS@}Qj&SPrlu at Tui<{Mr45|#$zk!E=*Z_R7RK+R?
> z#X2F%A(EF_Yppp-(s6JnHw~s-I5QEA^Md$raX=}SznGti<0|oH{2G-=m^*f5E?RvY
> z9=jrwU6z$JpXEvimNvM=eVMi>_5*5LV0d9!%_0T&qN+pyn9EEc2%sRm5)kKPWkD|i
> z`U7N=+_mY#bh?N26Q(7t7qym?f3owCaj+NBHhA|Vsvc!Y{l;&tJjG7V=!4VpQVBUD
> zTRhRNyCzN?(sjR73Apz{fAmHN()Afmx$p2&<n(yciGEMrkOR?1$T0Diz at x62y4P-a
> zY8>BS?@XUM&3SCS*b%*ByB*?zos9Tnv9r~2-9%3KXoPJ;q<?$uN#_fP`gRtw5Qhg5
> z2AW+VrB(b!NCnQtox)Nq**6iN7+nTd>c%!Y&Ar~xc-YlZeIp`P={;4}{oDY_A9aOM
> zaS;1X*d`F999A-LL&*?7pRYOXSgK%&MqmPvc=Hj%P6q1i*rjXduPHm|tSk&UXAvJR
> zVHooqXLvtytwZ at RYVfXN>sNB6;DNQRT?7U3K-FG>Z;~{rcqOYhyIyD|&wmFT$^vp2
> zs!^&-!m$$CXJ>_cFM5FNM#|*vwXy?`--2FzBzd`xwNQ|Lr4SllM3Bd4HD*){@N)+}
> zK(ibzdk-_w0CLrFhxOL9*6gu~?g?ha$rAU_TKemTD;s|ey)M-59^+%T2PU at HE#_+^
> zB9b?)1)m#0$Ldq0j*52p{FEfKluK7{Y(1;o2jTsT+3f$52lhAqLHY~#rhnl6fAxRp
> zsN-dvnr%1$z4NJ(EeD5w)QNlBJq}+S2JOy$sA@{fX2|I+SMjEvPS_t9{*b-i!;f at L
> zx*$u>g(n}jG8Dcjiqoih?5l{nH&ix0ObiBKX+;ic^8y}@PFIG}>G^p60x+v-J?)73
> zQuNR)_;z}b=Gw#-AKchDj)m|8287zvcYt+WNc8ee4kNA-WjwYYXY#l#w+>`ZyTaI5
> zPBWvI6W+qUSMZ&(#-$Kh#S&T=kVsfoOOjueKez5#=&@%0o4TYsTVfi&yj7R_+Vl3>
> zS7!?w7l0Odl2wJV at so}h1gw9Y_ISw7(o>5(wI8 at poLk{pL?HVV)!({uvmqdOZdo<5
> z%dYTyt#fOn$1L~xieXL2jh2qjb+zv%f5;aYwC|MHI~RF;>DAZjs~4os++0wY at X>f_
> zG+ydHP?>nov-8 at St7<uUH#+vu>2!KO8 at iBq!)V(?AwDt<(wHCWh#J6J5PK_P$`Z<c
> z?4CMO$keV>=sQ|w at TTy?0oCd~D}jjari2^rV>=Vmo-DG>3rrScHWy)@3sSt*Eqj2T
> zBYZDi2c&tr;NB}*_LQ2+lHGZ^irky3D`OpI$msLQP*d45;&==+zkw>1Bv at FR0RSzF
> z0u2tlZnR~fL+nT*L}ce;M6z6BGEsC>W|LX at fKtEtshwX8d=K0?pHP^hsmAH_vR_TY
> zH-B9uOqVRmdI?jk;B7VeuL2VDqoU{7PjIVOLLGtk&0aqkf9`AerTpgV6(&8T1ebvm
> zf9Yv0WD>Ehcd3Ld-KhhqY1joETx+*Vo#?@_U7nV!YYM;8mJaJu+=G>c>{H&4Z7K}=
> zSaQeJ_ut*3x+$nMj%B+S40;2i1+zXnef=*L;{SI{|0_ at Yj{1MIwZ=c-zDFSRKPFMd
> zOKAPRy*~(u at 1Gwe^Z!{8Y<Pd-gQ=C&54C8qOqJHbkB=~;VrrF<?JwFP+(*XUCy|R`
> z8I_W~ZL4Fuqgv{_ZyeCQ7V8(58zz8OO=C_+l=-Y*4Ac%%1SmtK<X3)-#euXH-K+}x
> z34EIMOR~3<D4~Vd{qrV_6i<uCA)0r$1)m>dbYvJ;7;Wx^Ygj7~0b(~+^?D&hCW9(x
> z|5A=aIU4~LJ++shxUs7cDwuq70L-GIn7<&fSD^FgMqwy2mY)n^5kR0`CplT9yA&oD
> z0^#uyQ+%G~S_eEM#nx8;CG*gydPbdqM)JF#qP(WmpzTH?TFMf?xSH4`ywbJ|%Ft^X
> zZ*?0E at EE<Wn7$Su_~C-SVf}9SeO;bh_vy)j%WC(^(7wJm=N}xCJ(K&zsZH@&>>UsK
> zt5?(ebDBM#?=neCC)hsO*m~#vPLz+_Q<)Y0Lwk4JKWVZsaFwZjrS)4oAjH at D;M|+l
> zP@?f!#Mz>w4~oIr2$GkJ6caL;aVu#0L17woyZ7!_g-pw60rSn{C-MYwaHYy7em)~f
> zcp|joP@$%5NWAa_<E)K$Oy`AFt90ihvm2z`ps{5{Gs<}ZRmYN}#g67gIX*QkQ`}P-
> zAe_$rQjz#37}xkrM-r9YV2Bsy^81Hxfg1aXt^=8lq+{WBcAoaB at p4GBH_iRXsKd9-
> zh#ei{LC_*!t{i2(2J6@}-(!O=p|lQxNg*xQYG7b&;+16Pv6RJV-Bs&c-vx)vC{%~j
> z`0)s0CgYWK9xLKaw4*6p)@UV-a>?+CT0}r6jg at -=Y`qg!&%TiLuG5}E6IeN&!G&!`
> zYIGMH<dk|h5#1p`B|in-t=*WdcHd*mWt3h#F8+LX!!ze-lApGpQ<{W=kH5zo)}2mZ
> zzEfe(7x?Y<5=I}3Onnq at Ofg5(Qqn8bGvrg^vJRvo?&%wKbe!Cwer9hrCu?38u4D1P
> kJ*WR>hw?w$`HuzuV}buz;6E1lj|Ki?f&W<G|6>dM59FM&TL1t6
>
> literal 0
> HcmV?d00001
>
> diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c
> index b11a5bf..b4b3d3b 100644
> --- a/dlls/wmvcore/tests/wmvcore.c
> +++ b/dlls/wmvcore/tests/wmvcore.c
> @@ -21,9 +21,117 @@
>  #include "wmsdkidl.h"
>
>  #include "wine/test.h"
> +#include "wmvcore_test.h"
> +
> +#define DEFINE_EXPECT(func) \
> +    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
> +
> +#define SET_EXPECT(func) \
> +    expect_ ## func = TRUE
> +
> +#define CHECK_EXPECT2(func) \
> +    do { \
> +        ok(expect_ ##func, "unexpected call " #func "\n"); \
> +        called_ ## func = TRUE; \
> +    }while(0)
> +
> +#define CHECK_EXPECT(func) \
> +    do { \
> +        CHECK_EXPECT2(func); \
> +        expect_ ## func = FALSE; \
> +    }while(0)
> +
> +#define CHECK_CALLED(func) \
> +    do { \
> +        ok(called_ ## func, "expected " #func "\n"); \
> +        expect_ ## func = called_ ## func = FALSE; \
> +    }while(0)
> +
> +DEFINE_EXPECT(onStatus);
> +DEFINE_EXPECT(onSample);
> +
> +static HANDLE onStatus_event;
> +static int onStatus_call_count;
> +static void *pvContextOpen;
> +static void *pvContextStart;
>
>  HRESULT WINAPI WMCreateWriterPriv(IWMWriter **writer);
>
> +static HRESULT WINAPI TestWMReaderCallback_QueryInterface(IWMReaderCallback
> *iface, REFIID riid, void **ppvObject) {
> +    if (ppvObject == NULL) {
> +        return E_POINTER;
> +    }
> +
> +    if (IsEqualGUID(riid, &IID_IUnknown)) {
> +        *ppvObject = iface;
> +    } else if (IsEqualGUID(riid, &IID_IWMStatusCallback)) {
> +        *ppvObject = iface;
> +    } else if (IsEqualGUID(riid, &IID_IWMReaderCallback)) {
> +        *ppvObject = iface;
> +    } else {
> +        *ppvObject = NULL;
> +        return E_NOINTERFACE;
> +    }
> +
> +    return S_OK;
> +}
> +
> +static ULONG WINAPI TestWMReaderCallback_AddRef(IWMReaderCallback
> *iface) {
> +    return 2;
> +}
> +
> +static ULONG WINAPI TestWMReaderCallback_Release(IWMReaderCallback
> *iface) {
> +    return 1;
> +}
> +
> +static BOOL createTestFile(
> +    int id,
> +    int type,
> +    WCHAR filename[MAX_PATH])
> +{
> +    WCHAR path[MAX_PATH];
> +    static const WCHAR prefix[] = {0};
> +    HRSRC res;
> +    HGLOBAL data;
> +    char *mem;
> +    DWORD size, written;
> +    HANDLE wmaFile;
> +
> +    res = FindResourceW(NULL, MAKEINTRESOURCEW(id),
> MAKEINTRESOURCEW(type));
> +    if (!res)
> +        return FALSE;
> +
> +    data = LoadResource(NULL, res);
> +    if (!data)
> +        return FALSE;
> +
> +    mem = LockResource(data);
> +    if (!mem)
> +        return FALSE;
> +
> +    size = SizeofResource(NULL, res);
> +    if (size == 0)
> +        return FALSE;
> +
> +    if (!GetTempPathW(MAX_PATH, path))
> +        return FALSE;
> +
> +    if (!GetTempFileNameW(path, prefix, 0, filename))
> +        return FALSE;
> +
> +    wmaFile = CreateFileW(filename, GENERIC_WRITE, 0, NULL,
> CREATE_ALWAYS, 0, 0);
> +    if (wmaFile == INVALID_HANDLE_VALUE)
> +        return FALSE;
> +
> +    if (!WriteFile(wmaFile, mem, size, &written, NULL))
> +        return FALSE;
> +
> +    if (!CloseHandle(wmaFile))
> +        return FALSE;
> +
> +    return written == size;
> +}
> +
>  static void test_wmwriter_interfaces(void)
>  {
>      HRESULT hr;
> @@ -232,19 +340,174 @@ static void test_WMCreateWriterPriv(void)
>      IWMWriter_Release(writer2);
>  }
>
> +/* test_wmreader_play_wma */
> +static WMT_STATUS onStatus_expected_statuses_test_wmreader_play_wma[] =
> +{
> +    WMT_OPENED,
> +    WMT_STARTED,
> +    WMT_END_OF_STREAMING,
> +    WMT_EOF,
> +    WMT_STOPPED,
> +    WMT_CLOSED,
> +};
> +
> +static HRESULT WINAPI TestWMReaderCallback_OnStatus_
> test_wmreader_play_wma(
> +    IWMReaderCallback *iface,
> +    WMT_STATUS status,
> +    HRESULT hr,
> +    WMT_ATTR_DATATYPE dwType,
> +    BYTE *pValue,
> +    void *pvContext)
> +{
> +    DWORD *dwordValue;
> +
> +    CHECK_EXPECT(onStatus);
> +    ok(status == onStatus_expected_statuses_test_wmreader_play_wma[
> onStatus_call_count],
> +       "onStatus called with unexpected status: %d\n", status);
> +    switch (status) {
> +    case WMT_OPENED:
> +        ok(pvContext == pvContextOpen,
> +           "onStatus was not passed pvContext: expected %p, actual %p\n",
> pvContextOpen, pvContext);
> +        break;
> +    case WMT_STARTED:
> +        /* MSDN says dwType is a QWORD, but it is actually a DWORD */
> +        ok(dwType == WMT_TYPE_DWORD, "onStatus pValue not WMT_TYPE_DWORD,
> but %d\n", dwType);
> +        dwordValue = (DWORD*)pValue;
> +        ok(*dwordValue == 0, "onStatus call for WMT_STARTED not passed
> correct starting timestamp: %u\n", *dwordValue);
> +        SET_EXPECT(onSample);
> +        ok(pvContext == pvContextStart,
> +           "onStatus was not passed pvContext: expected %p, actual %p\n",
> pvContextStart, pvContext);
> +        break;
> +    default: /* the other 4 cases */
> +        ok(pvContext == pvContextStart,
> +           "onStatus was not passed pvContext: expected %p, actual %p\n",
> pvContextStart, pvContext);
> +        break;
> +    }
> +    onStatus_call_count += 1;
> +    SetEvent(onStatus_event);
> +    return S_OK;
> +}
> +
> +static HRESULT WINAPI TestWMReaderCallback_OnSample_
> test_wmreader_play_wma(
> +    IWMReaderCallback *iface,
> +    DWORD dwOutputNum,
> +    QWORD cnsSampleTime,
> +    QWORD cnsSampleDuration,
> +    DWORD dwFlags,
> +    INSSBuffer *pSample,
> +    void *pvContext)
> +{
> +    CHECK_EXPECT2(onSample);
> +    ok(pvContext == pvContextStart,
> +       "onStatus was not passed pvContext: expected %p, actual %p\n",
> pvContextStart, pvContext);
> +    return S_OK;
> +}
> +
> +static const IWMReaderCallbackVtbl TestWMReaderCallbackVtbl_test_wmreader_play_wma
> = {
> +    TestWMReaderCallback_QueryInterface,
> +    TestWMReaderCallback_AddRef,
> +    TestWMReaderCallback_Release,
> +    TestWMReaderCallback_OnStatus_test_wmreader_play_wma,
> +    TestWMReaderCallback_OnSample_test_wmreader_play_wma
> +};
> +
> +static void test_wmreader_play_wma(WCHAR* filename)
> +{
> +    IWMReader *reader;
> +    HRESULT hr;
> +    IWMReaderCallback callback = {
> +        &TestWMReaderCallbackVtbl_test_wmreader_play_wma
> +    };
> +    DWORD outputCount = 0;
> +    DWORD formatCount = 0;
> +    int readerContextOpen;
> +    int readerContextStart;
> +
> +    /* initialize globals */
> +    pvContextOpen = (void*)&readerContextOpen;
> +    pvContextStart = (void*)&readerContextStart;
> +    ok(NULL != (onStatus_event = CreateEventW(NULL, FALSE, FALSE, NULL)),
> "Could not create event\n");
> +    onStatus_call_count = 0;
> +
> +    /* Create WMReader */
> +    hr = WMCreateReader(NULL, 0, &reader);
> +    ok(hr == S_OK, "Failed to create IWMReader: 0x%08x\n", hr);
> +
> +    /* Open file - without providing an IWMReaderCallback. */
> +    hr = IWMReader_Open(reader, filename, NULL, pvContextOpen);
> +    todo_wine ok(hr == E_INVALIDARG, "Failed to refuse to open file for
> playback when context not given: 0x%08x\n", hr);
> +
> +    /* Open file. */
> +    SET_EXPECT(onStatus); /* WMT_OPENED */
> +    hr = IWMReader_Open(reader, filename, &callback, pvContextOpen);
> +    todo_wine ok(hr == S_OK, "Failed to open file for playback:
> 0x%08x\n", hr);
> +    WaitForSingleObject(onStatus_event, 1000);
> +    todo_wine CHECK_CALLED(onStatus);
> +
> +    /* Get output count.  Sample wma has output count of 1. */
> +    hr = IWMReader_GetOutputCount(reader, &outputCount);
> +    todo_wine ok(hr == S_OK, "Failed to get output count: 0x%08x\n", hr);
> +    todo_wine ok(outputCount == 1, "Failed to get correct output count:
> %d\n", outputCount);
> +
> +    /* Get format count. */
> +    hr = IWMReader_GetOutputFormatCount(reader, 0, &formatCount);
> +    todo_wine ok(hr == S_OK, "Failed to get output format count:
> 0x%08x\n", hr);
> +    todo_wine ok(formatCount == 37, "Failed to get correct format count:
> %d\n", formatCount);
> +
> +    /* Start playback. */
> +    SET_EXPECT(onStatus); /* WMT_STARTED */
> +    hr = IWMReader_Start(reader, 0, 0, 1.0f, pvContextStart);
> +    todo_wine ok(hr == S_OK, "Failed to start playback: 0x%08x\n", hr);
> +    WaitForSingleObject(onStatus_event, 1000);
> +    todo_wine CHECK_CALLED(onStatus);
> +
> +    /* Check that onStatus and onSample are called as media is streamed.
> */
> +    SET_EXPECT(onStatus); /* WMT_END_OF_STREAMING */
> +    /* (audio file is about 2 seconds long, so this wait should be plenty
> of time) */
> +    WaitForSingleObject(onStatus_event, 3000);
> +    todo_wine CHECK_CALLED(onStatus);
> +    SET_EXPECT(onStatus); /* WMT_EOF */
> +    WaitForSingleObject(onStatus_event, 3000);
> +    todo_wine CHECK_CALLED(onStatus);
> +    todo_wine CHECK_CALLED(onSample);
> +
> +    /* Stop playback. */
> +    SET_EXPECT(onStatus); /* WMT_STOPPED */
> +    hr = IWMReader_Stop(reader);
> +    todo_wine ok(hr == S_OK, "Failed to stop playback: 0x%08x\n", hr);
> +    WaitForSingleObject(onStatus_event, 1000);
> +    todo_wine CHECK_CALLED(onStatus);
> +
> +    /* Close file. */
> +    SET_EXPECT(onStatus); /* WMT_CLOSED */
> +    hr = IWMReader_Close(reader);
> +    todo_wine ok(hr == S_OK, "Failed to close wma file: 0x%08x\n", hr);
> +    WaitForSingleObject(onStatus_event, 1000);
> +    todo_wine CHECK_CALLED(onStatus);
> +
> +    CloseHandle(onStatus_event);
> +    IWMReader_Release(reader);
> +}
> +
>  START_TEST(wmvcore)
>  {
>      HRESULT hr;
> +    WCHAR filename[MAX_PATH];
>
>      hr = CoInitialize(0);
>      ok(hr == S_OK, "failed to init com\n");
>      if(hr != S_OK)
>          return;
>
> +    ok(createTestFile(AHH_WMA, WMA_RES_TYPE, filename), "Could not create
> test file\n");
> +
>      test_wmreader_interfaces();
>      test_wmwriter_interfaces();
>      test_profile_manager_interfaces();
>      test_WMCreateWriterPriv();
> +    test_wmreader_play_wma(filename);
> +
> +    DeleteFileW(filename);
>
>      CoUninitialize();
>  }
> diff --git a/dlls/wmvcore/tests/wmvcore.rc b/dlls/wmvcore/tests/wmvcore.rc
> new file mode 100644
> index 0000000..7a03942
> --- /dev/null
> +++ b/dlls/wmvcore/tests/wmvcore.rc
> @@ -0,0 +1,24 @@
> +/*
> + * Resource file for wmvcore tests.
> + *
> + * Copyright 2017 Jefferson Carpenter
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
> USA
> + */
> +
> +#include "wmvcore_test.h"
> +
> +/* @makedep: ahh.wma */
> +AHH_WMA      WMA_RES_TYPE ahh.wma
> diff --git a/dlls/wmvcore/tests/wmvcore_test.h
> b/dlls/wmvcore/tests/wmvcore_test.h
> new file mode 100644
> index 0000000..7910110
> --- /dev/null
> +++ b/dlls/wmvcore/tests/wmvcore_test.h
> @@ -0,0 +1,28 @@
> +/*
> + * Resource identifiers for wmvcore tests.
> + *
> + * Copyright 2017 Jefferson Carpenter
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
> USA
> + */
> +
> +#ifndef WMVCORE_TESTS_RC_INCLUDED
> +#define WMVCORE_TESTS_RC_INCLUDED
> +
> +#define AHH_WMA 1
> +
> +#define WMA_RES_TYPE 256
> +
> +#endif /* WMVCORE_TESTS_RC_INCLUDED */
> --
> 1.9.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20170904/30d93e51/attachment-0001.html>


More information about the wine-patches mailing list