[Beignet] [PATCH] add a new utest called 'mirror effect'

Lu Guanqun guanqun.lu at intel.com
Tue Aug 27 19:18:21 PDT 2013


As I'm developing this effect, I think it's good to add a new effect to utests.
It could be a good example for starting developing more advanced effects.

Signed-off-by: Lu Guanqun <guanqun.lu at intel.com>
---
 kernels/compiler_mirror_effect.cl      |   13 ++++++++++
 kernels/compiler_mirror_effect_ref.bmp |  Bin
 utests/CMakeLists.txt                  |    1 +
 utests/compiler_mirror_effect.cpp      |   43 ++++++++++++++++++++++++++++++++
 4 files changed, 57 insertions(+)
 create mode 100644 kernels/compiler_mirror_effect.cl
 create mode 100644 kernels/compiler_mirror_effect_ref.bmp
 create mode 100644 utests/compiler_mirror_effect.cpp

diff --git a/kernels/compiler_mirror_effect.cl b/kernels/compiler_mirror_effect.cl
new file mode 100644
index 0000000..d923348
--- /dev/null
+++ b/kernels/compiler_mirror_effect.cl
@@ -0,0 +1,13 @@
+__kernel void compiler_mirror_effect(__global const uint *src,
+                                     __global uint *dst,
+                                     int w,
+                                     int h)
+{
+    int x = get_global_id(0);
+    int y = get_global_id(1);
+
+    int new_dst_index = y * w + (w-1-x);
+    int old_src_index = y * w + x;
+
+    dst[new_dst_index] = src[old_src_index];
+}
diff --git a/kernels/compiler_mirror_effect_ref.bmp b/kernels/compiler_mirror_effect_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..f5626ea4112eb9058150868f6cac7346510953f5
GIT binary patch
literal 49206
zcmZwQ-OH|3wfOP&f3eSkD5$is0;M29BP2)<tb<Z}A$q}GDFv3U-O88DEU_0XcN(Sn
zRvC&>tP}Tvs3}C)E}{;kBma^8ne+QRqie7BfIWZXn)kfs9OFC29CP0Hv+Q^Il@~wv
zx-A!L-|YWxJNdtVd)>d&$aA~>Kg~Pd at s1CC-~(4*ef4KQ``NF3?Q7RubIp}kURlq7
zY at uIv*=0H}z4X%ezW2R1+;GG1fB*Zx|NZah&YgSgvB&5?`N>b-yv3)zXp&ET>Qg2(
z0mb7#{_&4LZTZVz{_^KP|M{<f{p<73KmXrbo__l2#~*)O`}3dw{J*xC at b0_szVE*K
zzWd$p{@@2c_~tji`R#9i`_4P>^qBZmkJcllPR1K!@K?Y3Ro1 at cEpPe47rsDeFiZ3>
zPv;xn at CNNW-}z1^^POCO{q@&gdo6eFxZ{q?FTeb)Z+$C&-~ayizy9^Ff6sf~W59(M
zUa04aE3WXCN1Yd6eDS;9^)C9`-~M)wbhBM`)m5B*=%I)B^3+pLX$jZ9|NZY<oeli@
z?Qehk;DZmw85Y7S^H4th=}!mTU>HM}u6^J8-gn6*ml*S#-~0xAVmACh#eo at beB&Fn
z4D+t>CbS}Z%tL?n*=PUux4*si+H2bX+49m$FTMQo%leN|_}R~XX4)V9=ttlC-uLh~
zbJ#(iDCjg`+CpQP9>O(7q9LQsoH+wN13voEk1~mQ`thd-!37swz*;?KX6FyLQ1k#U
z3dnHkZEt%UK1Sj!C_VZVb2>4eE;QUE_(K$Y$}fKL3%=-Q5BR_P-S4CsGA0+(W=70_
z8*jW(8#+qddeq`?2B9qZVVC?*Zu!brzG8fFY}%PbKaZLg{I)>+>G%`;875DD^{Zdu
z&pa7&|NZwDf^r*P5^6p86OVv<)ZTU1U41I&IVDwYx#bqI`0|&(%vt<(0#*LgNd^mt
zcu8HmKm>%$UU<`+-X!^j3Es9qJ3=coHiCW;F^NE!mh!<5eh at K^1ODq@|9V0o5Ny*=
zq!#|1Ws-GC at 5VpiSP{B0Ug?p-1s<6ew^v_%Ro?QN+<Wi6KmF-XDaI4yg=xf#Z3jvv
zX!8G$fBa+o*&_sI76R~v0Dp4=3u*jE7lqqyyG_67^pT}K%3&Y1uQ_$=t+%Q?494Hm
zk_RIGLP{|7DF4|BZ){Q3SqMY{e{A*0ZR52D7<|!17a0$J<jrPNSn;~+t`kQFNK4E)
zMJQsyPFRGSU**4%=Cp+UrK&T-fan#4Ldo)vee7e}KE3_++ksMfFf?;Mis_Gk{A205
zf^qlVU;p~o*)XB>E^94qhT$)Qwm^HqgwH+qoYsW$|KW!p#=j7llc++D0BlXpk(BcP
z7=rq5y6Gn2CTsv- at gZ!`gCu8Rv;{!(2pSF*9Bcvk(1$*RaHjyO<!4*K;662jF~khS
zqt>VLUkDf={}q4fG)Dk05C%b#NHB4+u2;;@q$7Nkpo<=}MMT;YigfC<mHg1j6X8H+
zSIr+r{+ at g8u~u~ekoLYgi2(=;+_4Io$0<+<$`&E83p$07C*S$bcf4yMEh*<MQ3&d!
zm;V+*!@A(dpYdvuROjsCwJ#g^>%kBWJrrKxPZ0>ouT_HPERgN8h)8~82zv6L;Gg1C
z!=wb`<veGJ5D16Kg$94gX+^?X_LTo at F7qi?q<{S5A1~)W_qop%g%U|j76154duM^-
zV{**nfd43TQd$CHn3>CYQLq<m0T&_s$qO&MAPT|9U;gt#i+_{Dj=9O3uqePj{c5b-
zW54Zuc1!%(k8lb9?svZ%1jMueGD)hV?arg-d)K2RM>5DIypd*ze8DOZ`e#4|%CwAE
zWH84{6xsrk2Y>J4FU{ib^#pcO&LhtZHWRockNV?8!~YxK_=X!Aboh$`K at 5L_iTxh=
zC<RR`1X=?)s|dS%&K0OwbPAY?I8)>d%aLcK5Fo6r&ImW!rXuyUV#fj6>|{1yAoZx_
zg32S+`A#T8pasgKK){YUNddMZ4}u=~X$(qg5&jh-q3K<n6rJTi#TCf0<^BUQFA}lf
z0{(IU|Bhh!?_KkooWVY2szoLI3dY_MYE+86;ts-?5C7<)<P-qJ%vwMI4~w`^z$bzt
z2dwDM??sdJx)y)=556rB{C0s5kS;=^U=r{pd6R2(rYle at BzN8!ZLML|f8oHt<j0nS
zGPeBBcQHZ_e;?5a>_qX=f<uWv<ISMLz%B$7J=Gsd-wTA`fd?KyyZSF(d1Mzb9$|4W
z{~f{jvq}jfoA)X~B;8=S<gw(ZEB*rK<W)D&d-25=>94%<3jQ3w`R1GX8~KI%{`>c~
zxHnx3l#F%O2<7lMkNb}*6o02MYh}*x2VV%hUbf?J9?LOaKuP at 3(*vC?424ulJmRm1
zv;}x1sVauw`qsA`d_0ABgFj;)n^Y~*LvR+X(z}9h9!e3U+bI|lgFT9cpqLgYInNi4
zXo($RA?~AuSXUtPANjME04 at ZQLBUz^I2FZblE3<c9<dgrai}frD?5571P*J<$-48-
z-!?)aunSl#VdfTuza^Sv65h1*LLew;>(R0tXL#GNZ136=f9RAQJzAg`Bg6a7i=+q=
zArK3B4m+w)qv~}+Pbp*`O{m8(W3&RNxLKOP@?Rop%}?+L7Jnv5Dk0FC0S#v8logQ<
zzJw==zx?U))6EBP at QKW?RebW-&H_PlPTBEDWE7$3k3ZlOg5YaysC58r5dxJHdHKUs
zic{DYP{FjOY9ruZMbcUqfB6Fl0v@%D4|Uuy2VbjS36g}!$TZk9QY#{2Ap~9#1;Ye_
z+3=$6kX4R&YGeT_`F%QrEnWTL%4UB~I&lHs;csdD-B-;_R^D#`pKVO~&n;dNH9`Rd
zCCr5&XmpB!fCQgHsy5o3f}PGP=vvMp>qQ|@%9=_vkNH0(Xf8tQ8hYQl2vvy8)>_Bb
zhAsaEf=*mJVZ;z~N+sH^H%#I&PjF={McNaJ97Ym<5Cp<oI1}$`JrW~@$qYs!Pej3|
zrt*p;!Cwk-vs2hE&=Y?Z&+e%H$p3(R at rz%C-vEY at l3&{+{z?Z>tK97Tr#mZ^BU7pT
zG7bNj9La>s(iBnPUCVKyL&R+H*G~RtHv7Skzf_qL1bE4RT*&=L4g<~$liQD7+wd<x
zD->F>FhGvUWa2X5R#Pl?1nvM(fWVKxPuYyKPTA{Iv_)<1qHPc}>o*}!8Kc_7U(yx=
z_Ty=c+Ql86gkIsondRD&KmH655srM~6Q8h;hQC~;qr?pGk$0v{9^%|7EKyU+e`Sh-
zM!$Nw^T>Z<s&;{c*cRwp0OLvZM at tH#)-IT1mjb)1j)b4v4!rzgIbZ1bSdn6Bx>iLZ
zSZQ5oC9Qr5U;ayMZ24{@U at ohRh#3Ups;jO-jLZ5v7a$d#_=}^GA`RHdeu%n%(#1u;
z85kCS^epOiVFllc_`CdrPw%ma*c~XrzSDm-CInmtmi+13x&P2heo>%!#NW-97nTEr
z at 32n@OitPYCYKvp#UJ^KCy$tIHpgxy$ebf~1pXC#OYqbdsQ4g*IYdfORmjrDV8wTY
z at kbJk@*jV`gYQ6$ydUL6#7N`KX0VU+#9!?6C-4e7?CfE-q}^%08pgAV<B-N*D~?TT
zMdW>iXZ&Y7IIsW&XW&z$jq4Eixv4de7UAwZllH;a%6!3Mn{TFkCz$x=E3Aq6C4c<c
zUkLCo1fqbC5On{UuK;E?E%Fq(#27BP|8Rk`n3vlS;ifGF_<LN{=fVqBW0dp+-y|gd
z;G2Qoj^Lw^!Q~*Zzp6h5sNwd)X$00!K+1Ay1ADii_?LcGv}X$e#Z)F_HnBDEw<7VV
zl|p`4wuy$nJHHa4)7JsOtNdCb1S94bwWBzdxH%y}NeKK227dvaD0Kf}@NpM71 at Kow
zaVA#L77IH5EGg&BZ|3fD{ovV|+b$4yA!sik=Fzn9Vk^nLB?_1zFA7 at W^P-Os_M+A+
z`iW`v_*6tVBDkXIY6LG|m}h2QRDZOLXQ9{SGn)&6mhrGJ`kO!ITu3*Pk+^m3M at bZj
z{1i3(%_HU7_|;^YFCq0uzU at Fy$sLmmgvpsITPps;e|7=m$yA|^fKFZ$S_LZ$5uxu0
z`26QT&v-NtZWRlGh7wkj|MO at h0$jEQc<OpUObfW65c3eJPB%b+49*Mvv#nGWQ<;_^
z<66j0- at me-3u=)cB_u8WOaffQrKsf?K#w__DafQK)D*NaFGaP);cl4OWSs$Ir~ggI
zV=*$Y`!XmQ)E{f1&1~=5R;|Kpxug*JQOGLlk3h5qv at Eaf76g0KYR#F>2D!=rM=+BZ
z!$*=MoTZoZ;7kajs`U{X2+Jb6so05sAy8YGr_%tGgg_u9yyY4rSmLWL?P7MJ)s;TK
zKUDu=w+oa|isC8%vq$0?X+<G`NC;TlF7OdDBp3W?3jt(csfCE|2B=iTJjA;;0;{B@
zD6|F4411YR at qO0nUbL1|fZ~YJ!+1G^za?COtU at LP6q^@+_FFfZC`fy2;WHP0#^j?_
zC^290IQ<p?GLgehPd3miL2{cwfq%?J$0_U)WXwrhfTD-4+R*W*n_rClequIQSSxu*
zA<$X<>G)F^r6N<sH2w?XHP^6*Fk7Bj-CLCfIe$DWnPf2LozVr(#;m8kpe;*_g-aun
zlmFmY$m_!G&LDXJ at s-4K>Q9S`g;)ATNb%{*S94AjDB#CmYf*+l!3Bb?))wmspjWgV
z5SBB{V4VO;MLD1f0c#%Zsy at 5^)bftkQpKa_NH%Y&53Zx;!JnAQwS-?d*sAPTg7BCB
z@<*z7CCEIjkqlt7D7fL5F#4Hi2JcpR9Ju()Nylzv#05Gwdl8U;>xsXXd9JK`f84A-
z5cDJi{z7k2OOtSkHU7fQBdsV1!H5vBpYIkTkvE&nr|Y2*#^A=melUr=R{rzI5}fi#
zw}eiu&iKn)NX@`6oE4T@#mBmI%tfSrMtWVR2ugkd<uCXq at w!e?phy at 1%l|?k|9ywG
zqNVKu^JJd!P=L?29me%<22^<P(U$he<1Y#x+Xy}le%oh*IcbUo_!O;T=+_CY==%d@
z{5Sg*dLd(s{A7%l0pZeep%AP+{PfcfFCHZoq9Jd85nnk)`7 at vSOgqa|g at AWvqXRV?
zfdalZudOZt;O!KKnu0m_I$3A{)IF+5CMP;YO=}C_W<rmED5N*uc%wQ7JIl4|Cx!8D
z?0!kGs5w<XZ?S=G#DpIETBKIXI(5FZpH>L^!Hw^N9()T`;q5q;pYBs1;V=I?6zHHi
zmBiiB<-aKF*TV+JM2R~TV`{yEyv at 5}uz!vKfg}An5_ZfjC-b??Bs1Gz9OM!5$@cHW
zLHXGuTtp^l8PMrj<uOJX5d~{i|FziaAx1J1E=D$$NU2K<wzRb2GRV$fy30TQgz+Bj
z(~M-H+GX8BU^eMtLhDL<x6O3~?z9J-RCWY{E;R6#|Ir@)l0506(sf7_JlcJR^@Y^x
zZ2`vMZ*`8~Pzbbq)G`lYr~&u7){dsYQt}sK1;?~}CyI>O%x_wAhDa3XJZ&MZwe*<Z
zD- at zr0kJOEKo)eZ<gfB*@fQ~XGR8<D=xW4HA6dwpj&D2Ka`rnTF_-yxuGHE2uVAW>
zY8MNwDC at jsDwY@ttO{?}M_c8wl>mpGPU!CH#(*Dx90=xx035m?0)7<b8am;yDD&d4
zWo at 8>;G?2on0_!BoFiT*4g#%JOjz+3AW7x&V=5bJLeR7=M;D+Vw~!VwDQ88#x2OQ=
z$I~W~!|~Uq7!N!C=#~FQDoWncSw!qXP8rD<`(4`4{U3j1e3Ozh at o#CXC-6%6jd?Y6
zv`2)1^eCY6Hu75JlYm=g$jc&vm4Zf5sQ}4$pyJ<-U<@gX_+=RJ2)?w3{XFr_*S;__
z1LBXE3k)%{IZbW`yUes!)Oy63vy{$)`oYvskhHX)L!~j2C;@8=XoWzl3VCcJNL}!~
zWj5pO1*ZU|0w~Erz`V+zf{bj5KY*E`;7c=B0iJ-5bAcGeqrK2}=<t>QVJ`%h>)-zb
ze{@BUKKvKu)BFdAkIcY9i#CN{Hn>M7sqK;+{|SNQ=Y_}l<pF$7F~%0~ecZ+u0`Nt_
zBr at N$Gr9TWucsVl%<u=FxbCtF$uE8BOQMf<fzXPALS#aPs5!ms70iVOe+FwU4X^s|
z*ed^PS<YHx{0d|?#z+J62!R%1l}CFN5fK74C-QU(q=FcKw2#T}(WhG3ZaFRZdN at KC
zDGR9*u$2GIsA98(J;VTch?3(8d`WI2H<d}~a-J8&M}%Tp!X8%H1?Ch2t6*FHn~iQ$
z5KBnfT5IX|DJkw8w9P9%O3KuKiq&gH!AE95-V78Qfgle%v5Nf1U)rk`;1jh70Uj|@
zbs{<Lbt0xm?A<eAAMyo)c|MZ=4k<1NKZQ;LuB9UnmzL!K8s>)xzH>SF79IX_fEn#X
z{EcyIHHmjYmWo7%GhS;dqThkiDIf}M0iU907xXQ_JRzdA5x_xPXKPVlWR*;IuA$^#
z0>r;iGN3KM)cHEVLY?kBUR0ONU`M$6dc|+Z<-Z+jx4OrQ0#S(MA#2 at 6>=!#U+cM7#
z at rM^`x;(F?5I0Yc|1W>}kHezBafwb*@Cg3!cl79K*ISeUM7H2yJ1_u$Cdos>S%g_D
z+qF_|TK9Y|J4$p~cM8#we+g!O6KZ|wuwr{5f2}17T4HI!Hn;?ivx3<D(?a-LNO=LD
z;*o7O0#PTK$`bG)MV{k*!7&frgfd?U+(MmS9wnsjL<WnIOpp>RWP`TiUkTdC7k|LD
zwq!b`{ND+9(y%<iiqNqt1X?2bNgv^FErNy=mCyLo{R9CBdkm0WrZ$NT*D~9M$2 at fK
z6Nrdm;#&xCsM9Gx5du}nLY&pcU!W-#(qk1mNs*$8hJ5giLs;>LTD2D%E#_JRrdR;3
zM-?)apr|}nab$a4xUuy*gY72cm7q>x`Husa<IiiWvxEo%=4eM=3phbLL7s?_uLgo>
zl2hvI2g!6B0V1Dzv^wBg+d<}A*GE|8tQD=!RF<$I?0j(w$SD22%Qf(ydFC1XiB3Ia
z%8^)@7Jn@>JQf8fvM4}gs>I}0jDKFMcsdmjCUxfe(!@urm;`(YA9ih`$m at q4e>Mw^
zcj at RkRejWVTVAV0H~=p5g<w~p)!-mZ62t4s#(%=UY7f4 at iNxP_XkYXw7QQ1`h_ig;
z^?8Rc@;+riW#@?}p0FZxIt}(Iyt$7Cv0DlIp~xK`nViT*UNd!)nNF%LlnxQBoOCjl
zP~tB}-cpSlBLq%!t)+?Ocx~SyVBKH-@|WgxC-J)z$A#OAjw-9$jB;MWYdxwt9PvoR
z!aPL35V-2d$q#?{!!n;=CX^NOzdwG-f4W?9a}z0+7^D7Bw2aYC=8HnKYw at S_;}8B0
zDR96C)2&iVL_sTawB>&ZED99kZ2^4z{>)z}<e{Yr#p;qUDfx}(i at -IBXqsPV^H0Io
zlbD%OYYQM>6kv1<g2FDV$^nkQTBo(HUymt#F~G4X+3aqVyy9$y+AS1Y at U;$Hk0NUl
zTR;dX?jaIJEUYg1<+c#;OZ|sJ!tcA!`j1NJ;7daME$3aiAqrX$DAk;zaO8hdfcF0b
zzEHxR<CbU(l-nK&N<<Voh<RbWMbTge{-NML8>}nsK_KP7ktTPaVY$8LCtOUBaelRl
zOg;sN*Ot~Mbngy-7~3z(GUmByq3+uZfKJZ$S8rdtB9Abhl7uClzi0~q{wfli#e%Sw
zE+UG*M}w`x4Dcb1KUN9&>{pJI0way#ID3p7iGN1`&O%UI^3z2C3a5z~%73)^D>;w+
zcMwi4pQ7L+$?r0W2L8;>{dONSaKOY)ClqIH!eH2iz at nD+Xg2UoNFfw~APh+82-pHe
zLB#RbB7>)OEhqX`3BIcc_&yZ{;g%<i^eJJdO(YgFT-kxT5U4f+A^AO;)8ycr&GvC{
z+X5~Xkm{E$oxk7{g^2q)<3HGomq(lnLCGI{j(b#sV26TGc$aXt5NOW}0X_<dEugh1
zzic`dS`GmQL%}HuPx;$-UNv9lo60L}Zbb!|g6)u3k?dtHF at GV@lK9VER8>b<mRf~C
zXHiAlHpC5c_W0CV>Nc?>m?Wi%evny0gn&-$1-nD4n5W85F_<OJT>QCd&ho$FuO(t(
z75SsI8X*0=NEr$Hv7M8*!YB`Mut`tx|MS{|zfxZac5bdFI32#6ioex&eyuxC$=`SI
zI_>x1dmS9bN4RYVVA~Xh01*5M_*R*U6nyn(L>_X`qSbthS_ov~sMU`crwo%J-2_yA
zaJVB+ywxtiA8mp>{z7SMh at gt(%);MP{`CLJPkz#lv!dDTdf2=CfF>0g43v>jutd%q
z>4Yi-NAh%;-^r_`mx@|0SA1p**!$<@KjQ(^l6dl$N$nSUM}T#CD)Sw_ypS_yHl8q5
zw#a<N#BI}B6k>o_V4f7^mG at iBPYjN~E2u at S!ezuP%4=&epkz=AENYArgsOgo at fRa?
zTX|udlz>-T{cjg|G}tR1MZs)(%74qrD*<&Glk>7j6!=0{|ADf{jj8 at n`kqdS|CAsH
zLHrdWA_NtGMRJP2JPeoC%p?W&$TUE0l>h1gGVXQ!;-D2t*(j;N at m~w|V~)3!O35#=
zk(5zHq^#@FB<3&qZ7zW at Y(;v<df*$0zZWGK{w=C)BUDbU;!!7<Dw0Q#8ROBeMAfH4
zriV#FqwL!VavpR2ZaYH5Fao$*XE)`S6;(57kAIa%YYQ;XJiK=Jnj!cW@)rIBpWZiL
zApl?6YuPN0AedxA065!%uZ=^=kBndu^Ghnb+lzdJnn)7D5|=<?j5+ZKlUN9UXRcR}
zwAmxCRog9E{uc$~rN18i6oae(m=rjZL+bp6S~yIe*vkylk27L`FwE&-u>B|^bQbF8
zV`r}VPq&*SKaw5IqF^hP|2Cj?C3*R;{s at 8P@Ru!oWPnwKtonmI^N1o3JI=?}Bk2Z$
zzkiDoe`#E{Lp|_I{@{1=79Hd{$W4f(1dlvg7k_SY);4D_ZfF~0Lh${&P?qZfvwcx4
zgaB|5M5idMfbH+vqR;&!e}%<D<v;jrz}y!uXR9k&HHR?~@H$hOmxZviO>UUba!L)_
z-TZA6TR=bZUa=7p<V^*vvgQ at e;;;UwX82p$-+za{Ex@*s_=8WR{bau6k3XgAiUUDO
ztN4dqa4D9sE-Y%Dwwo#oIim0yEdQCuWo`NIBf5VW(9K8qWVKkw-<&1$UUTh*hMC+{
z at z+XwAuyOU(p%-f$weXf0&Ql(Fkh4;e|I4eaMNk9pfDBowt!b)PlQ160iWoR|KcbR
zvQf3MoE}agY~RJd%-6CO99H>M8VGUUN5Clr@;vz3o%O5cQ(#XZ^?Ke-&W|E_pi3mb
zoubEJ#eXN%`Zv!Wv0`EQ?@;g&H(6_D>Ex1ACJO=nc7gHUf}OOwea(^LE2(A|ATJ7&
zA;trOJfvK<BI&=fWRj{_kI5wf2Qh at gU>ANS^{Fi&Kw7}D)pq`>MQj!_HpkyuOcjN`
z|5}%wICTFh3T!U_kMK<r|H=PuJ~8jksRz$sY6)j~DxWzb1lq`BZc&zKt5oK<9Mn9L
zV7>zAp=)(kV4YmU-##+NZ1I;xKHB(Ce)g}_Tf*)JpNN7-(iX_V_&X3G<)BozB1inZ
zuQ;ekdI&Q5z2bTxEjt$RXS2B23l3j3N1n3;YUDkFPuD}I04sc$I|9sRMLHMaU-4n2
zN35K=CRhKhRm3GE3#Gc6BMMsZkx$s{(YtJx8)krU(w at teAj^R-GqvpTQxE>aRFX>}
z%)KsZRbzHCLnmt$|M;8DJdz((KSf#^WN_3R_i#$z1sG#H`-nIr$nZD6oFqjJ2cE*H
zj7WYXm3{w46x(&`@BgZl!SLd5hce08%G&r-jMTbbMq4-xHlc(^-a<A7kGNp1x&P3O
z&%ExR^h&hNXmVIM&Nk%DuSGto_<+y->W_j6rd1F?+swcU0ag_DPyXu(1x2SwNh(Rs
zNDAid8lJ{qrm=zXvDKOof8mp;LcnY*79F2Tej&ERPW<)Xb#DCYKUO7e0WmV3K;&-E
zO$-_1M`nrSpk$l4yWUvcN3w#QPEtA!{RZv`K&g$O)JuEVy8;<$Ovf?5IO2;5INd)B
z0siU_<GcS90%-%Iy~E|0TW%!m0Y at HlA<(j!!F(sYfIWtkqEH~Tk++KcH`p-Fa+4$A
zyL3?mi||we5Iy*~`NP#E$6ELU%Le>W^^r7_|CX~sd}^VvAK?#wV~l5j5>)<MU25Sk
za}*yLE{!eC420DIA(qn0k?{=1*{8&(0)dqYivswV%Y3a#RC`e-Hi#1BD{#O6m<N#f
z&lLz3Uy2Rjcr_>ZB1oVnMWM{sf-e=N$D+Tb5Ck7d$|ky+_-pCL8fn`2YunvjTIg($
z27F`#P~Zm*Ju41>F5qu~tj6E8TBwot(J01u7PH45F<bfHW><N*W(@dj!#VQsDnW{{
zoWxvoQ0=ONE%FA`13SV*n1oNK!FUp8<Bz<(W*&GgYN77`?2NzFC;tUh)^Qvktyjp#
zzp{Ncf>+GXWxIx7l4M%SQ8=Y6=mFm<7z!CtdE_3*6d}+$TaDp<@I`?oHZS`@Bk-30
z^A*580yFZQ^(peT6e0?Vne|)UJe|M1`@<jpAo=-XX;@ITI+G|&Qc1LWU at y-tA-zF%
zwu+Q%kI*PSn5#L(#iId!KDEIGMg0U{6r_FiM^E)9{vE+=vx}kblrIG4*W-tyl3yzX
z#e&Tka(qP4?Xt)#6tHtvtEWeLj~oB3Y7RR&NWe$iR4DO+PH+$it1F&DfU`We3aZR-
z1 at aS6Y41f;4e$|10Pi^SDY1GdvUf at RWg}3M-&A}7-_j+2_Q;L+W9woMF9i^RpcpCJ
z;VmL!#B6Pw#g1SSW2C5=!Pi=D>c6|FEm{4qHCRx at DDrBT{P&8UBY*H&3#r7D`9$VV
z*$FS~NB(p at wt(a(3?s4{bG|t2xJkDhtKx6h5C68ItZ*|II4hbB`M!eDB{Ol%p<ykA
zrGfOr*(yYjVOrs{v at l6Xc{T7kB`48ijCN<lYM7^0XF!HREA1!G0S~^J>6Ih6&}INj
zSSx>!ZwpZHSKE!@Dd3Tp0Alg4{Dl&EgGrf>Ji=UXE6^gZEyqf;mEVW5&xW=Gs(qwo
zmDnL{kK4=3&(r at P3oGSaIP^=o@*f0+0!)*r5*TvOJkDSL23tM%6KEk|3=~2`xWlAE
zpblgwTzZ5FOl8MkwMu^BFhEM<FYP4*leBc<P+`;`?-Kbh?R668)C47KISY{u$WCcf
zb%l|^mVlA2pCXHF4g3>t#ozp#HO5H8#7ip*{#I^sMkdH7Iw`UXY66Qq*QW2j)ku4-
zNieZlOu|9tsXyFIvW+G96V=Ip4g&Q at 0`S7VW}66NDF5-dv^fP%2qZRz`);SMXK>jy
zdN|cN;w_J6L*4*)9?SXjmTSLQgAXagu%+98QksR5L8^F{NPhVs1cJhBj|STmdi*}=
zPNJmCuC8<Jl=A=*HqaRluScaug&g><pv*qjA0q`96CuDKWYA1l<`)YsK|B7DF9h-s
z at LD}Y2;?@~%p)Or6n2g$b_BeD_%>Af>E{TsfAKc}&k{pDkH1Y}M^sXLgtO$gH5{yT
zuh{Q=F$u?!_f1OX3lR9;Wffz1TIGk`qL4BG?Y at GEf=;Lf6zYyzod)!luWX!xg7NB}
z;2Mt`=2qPJSHnCuu*z~!TUxMeK&=;*AVo=xx_o+l#Jgp?RZ^s!<>*>octktS9 at 8ti
zmHqfz(F_K&B*H?#)OFVGKez*h9<Slj-$!-<vrQ|Sy!N6;U&CF2oU^Si1oB^)a?oBT
zq8U1qn}p+BgPlOcWnvhsV8<L`!z^m|splxk1pVx>3p}bqfWvNDvG5T^h&jb&qPV%t
z*p(mo$Vd1Hpb*4Am<}B_=)~XB(tgBa{Mku*U2Cv+Lmhm~38X37m at 8<Mc0oN%ihNNp
z(hdq^$*<)yJ{*Kgk(B4$=i0`<?ms at I+w~3Of}8=r&2AS9Gy;4l#>dd$f>;I964)i1
z{IBc_1UQ0jxh%0tko!K;sS2{tNP7Z^RtUUe4ESv39WyxV2Q-PnN5hiRzAB`L at iIhb
z`7h_$qYBOWTM7Yg at G*Sx2hhnLc3>ZQ<Pn at H+C(n(xUymYk^RUYC8CT6A63ar0!v|-
zYK&Wst2QMAbQJd=<x8GOu;4S^x_mdS!VU|w at ieokyyeRdf2EMla^C!1_*F2Vyxy^E
zQC1Z)sa^swqj2akiD|V;kZiFK-3CN2XJK&%W2CEc*tJPj$SZD@@?R(Z(v|)4e|Dnp
zzu>SLd9PTs*FE}bFd-1`#ES3|Ua-N0 at y{N5J(Q&4Z(8=pJU2aZjqfPIBH!p**~sSD
zs?t7{>TD+RUk;P5`VKFJ-2hCyf&i05#5F at uB$ZURvrN9K&pviNIyIb|iccpjg)oVQ
zAPWZ at v=YO##X|Bkm9WISM&hY%c$5YfvK?eQ8_HoXV%Q(Q=q!{E&eQIn;OCC~hlr>B
zRkXLXq}cfgJ=jHof;@dT0%r?EUtrU<r{Euww5~n!P4QP}9KQIMaukl($UIefAX-~u
zUqZMk?W1Z5X)krP1o>L_3qittA(Qq9SPqkZZ2&y at Y!1GZ<C-y&A6S*78yEOu!Jh8M
zD!&0>3Ws47pLVC>8pDjoA9+!RNcOUU1g$j2-=Rz=9ZwYb?=8l&L>qs3>s at 2^*tG?`
zD_B~lmjBum at KZPyaMw$-`TL!FPVnn53g8<rAvv-$XdQEyw-IasUVAhfHzgk5<F5zm
z3cj}Ly>ow^0`b=pt5=KA;4(hKXQax5KVu9?d}?pX_R`zZR&;Q9gjBz!q4r2On@;i4
zV@|<UXA}haBXF=QhW47`uN49VLZ|f>m=lgn(t`smjH&qJZwt#7w+LrM%wg|cuUAqO
z|B~PKnJ7qUI`8mDo=|uvV~JJhK4qJb*|0q29oOU-CH@|HCwtNEfM^&S*v3IuN-e=3
z_W0KZUu%~Ujt~Y{Z4`VtuVoC|*khCONW^6|8{~uIb at -#I$l#_mK<lcHvoUs-BVHo8
z{0NHGeR1HOr0v at W%M}p(^{||x1(Q(ZRs89q7JngNx&7<WhIN%S%m4zuYS!x at m(2V^
zyK*GiDnWWS?DdCT at QK-skAE|Jh4`K*mtZH|eDDXKRE~_nho^?wAdE4IOGWUtZ3If2
z!hJRVl_2CncEtjpA{_A-0`n9RSVXyF7iavfu1%rq6dlYZzqqhj>n^HD%0Q4sK>~v;
zSN(0;czPnu;xELMgl-I;Y74<u{Xw$Jrx3WcGS&HO5-t}n!@Rg6vHxC%r&o$XZ6&CU
zpr=@9-HWtE0R%xYrV5siQhjcT!(S?5E<@O(rSqCGLXWwBcYO>&_kS7KDFA+11hS<W
z<5A54U!ee><fgo35BL&WtMY``LY4zxKO+ at +_UK`TE08Uql*#;lWddJjI=)Sg80N&I
z&`4lCXvYozbR_ZTmn)Ftxcbi|ApoDkDpkck>i%PJneRnnYY^UXtrl2>^EdLML+Hml
zs$pJXu*9zTfG_!Ziae2N+IqCEF)~4>m3~e)CV at QgQ$!^4l*qGR@>@%i6Thu-ikM9+
zQd$7*Sx6<e!mFg<uU)CX|64^LF-#dm-aWx1T~E-!$Ce{OMq5^Z34T$~666sR&_YmK
zkNqN!daD0(`DDB*At+uq#sK`aV%H8*6YN=If=>aTn;z*2-^s+HDB$nN;5f56!XuDf
zZz?{Wxq1?@kXPm`A|NP4+{7^K6{1Rzw)$V?u at KqpS5xxKe@UfZj-h8OSz6jNqaPFC
z#o4-S^N|{;M=UJOcLk6ElGYfRpzKKU0j|{hcW8RBMad&mC4<KRmif|HkKBXQB=~!b
zzoTuX$o}yGUS-oHhIz5%H?2861|MFL!e<`2Hg!f6e2SG$BkdR4!C>TxAC9=mL2 at iU
zQ1ksX0_(zQ2KCAoz`<aNWZKyRWxkfgzso~Q#~%d3jOq`C8NL*-0em~lw1BV&XTXW&
z&}If>bZRkYfXw&R!>*J<YL`^U1VD+3jQ{XNpz)zYXJ3 at A+Ok(mz~luf|BaWEaIriQ
z0`^z`%m3aovO<I>=2{L`cDzm at B|m5sZgQ5?UoB!A{<*_JX+}60c?m`l5lnE9Y!;HV
z#>-NLg4wJ^Tk?1L+3Z)tcOe+&6f0^~`}wvDn$63R;G2^$0DqkbThumG6)oh^Ig5Yc
zV3J)^ZI}E4AqwuUdJMLw>`Ffa`n3lx5fNgo=y)W?SV9{^u3_u^)uYsa+4)-)0#N>Y
zy|<ddR75l-v+-gCaxKC*2fQ}sI!z^@6oc8!T4wWz*Eo|B-e#nvW5QYDMhBO34S%%=
z5C#jMe6|H5k2%Go^tP7Oy9E^pI{xK9Q=OisV#Wr4^0yVtJxUDoJ8;1lf|Me{TDS<~
zJG{)`w*`)93yNQ`)qf=je~2W%3Bv_r%wd%LbX3j87aLp at I0%m92MT|RgGts|&iPyH
zyg0i_F~>j76cS!7DHicJA)yoF87%Qk$mPg$JnYh*v?HXPewD$B-m;t$#1ij9!6|bF
zUyHwuFgH(8K)!a>o&81381n!k11+u80P9L42eblR&I=9rIt`#7#iqmD_CZ at FO!48-
z*|TQ_1^+^zMsW~x#<wEidTcS+(T;y1V2nqvE6$v13s58y{$@7JyWndXUkCu_j<yXh
zb{=IH$n=x~;c<mz|0 at Ni@`7N<YuI_p_rCcekH1bm`1?pLlGQBXg$$7}Y;YB%I66yv
zH75zR!Hi$`%l!{{w0%n9j!B%eZa4&Itt79=bIqa<6&L*JJ{1C1F+dJzi6{_zkUOHF
zb>=cG{tQNp;4e&YnVA at XGw~69Dv$iv!!VXh`-%@2=nQt*^QqUp82MV*3qjcFZFZai
z7X>qH>Z|xr^k|tX(Du~abD+kVgCHaxDeAm02z)_RV(?n#GZGWAW4v33gvZtZslIUU
zB2%^3qrXm--|k?Bbvc5VGq>9g$f965)3)P$ioYJ;0>EddSfh=Yk7WL4zskP)4+VwD
zQu$B<_+qXKRWvLo3f_%*tw&--UYLCNb2I*0))Mt!WQ(0w?0U7%q7=ZBc0u`%u+Fd-
zh0!UFQ8^=U7M1Xrt3MT=$j^2F-#=?{A+HiLOeP2co4v~<F`^7!idZlh{E{Dv*#+R+
zaVXi9$VXU<Ez}mJi-KCGhhYi=@_MvlEr&7hFZCkmw1w1cIz1v!mz-LQ^15AM3=2VH
zwzjlKQW+5iQjhvijCB5TlfS%RIT`+dm;8kQe99^QRfQmhmqPTH>X9FvVe*;S#e9Sv
z^UALz1cBHKAo$2%PSuvu05tEK)}rjR3%uoQLRIn$Q&9-`v_7go_!7yBTENY(><A^i
z9+ej-GTQRr%=HL?9`Gd$@@|`6 at 1BD*>_VpPAU1|=aG}R+GN%A;J{sC|qO*Rn;F0{-
z+S>8YYgehq9(#<Nk`4b}q==xF41dayuk%P=9OYy^;JY=+2X2<|^1NyTJ_Q-#6&QVW
zrGQW2pu at M~V_#$IkGZM}0a<H2ueC%^#YYeLR!7XcW`<q<SMxCsHLya!0FMk4mogs{
zFS6O{I0qbaokSf_f0QG-N@#0y&8Kecwym=1ZtOaz!h|m1JMm94e+S{@_aAF@{!a4y
z2jp}S!Qc0YN|4Ma at h{bZHKq_uAOdcHyd}oyVcyFAd+%-6cLTu$_Ixi8D|`0;fGX^Y
zhIQGdm4O&yE4BQRu-QLPfm%2`3fAadI1R>@Ra)5nd~G>X$!e|Y2Q{knPJaboXu#JG
ztktCo_&95ErVxtSlCHHWFo9hW at N=;`Ij1mC$7~0`SQG{83PJUU!aKmL|0&R!(~sE3
ztAV}iEsB|87j)hcdXRC3UDEnUPw<h^sq6>=zd(>?+}Fn3UeM_*;HHc<o>La;e_|AW
zB5?kR0`UbW_}Y?Ro9H<fB^f0&<vjjYLD-_oj>FgdTD!m_{(=HK2wig6NwH|0C3cE<
z@!cb(ph$ju!ByV?ADKb^2mw270lO8wpy4J`69vra_|N?x_RhOGe}Tnc{)_m$XcALJ
zz82?{*%Sj`M1-T{_bHN4Ncf6B8We>WB{d($zL|C;X&EUTk>^z8rG4eScCdp_`jkCB
zb+U-8%(n!{avKV3^)o*HFcu4`Zi_imSqMIiK60f28SPN(AvlYy%%n5Vb}&FC?}nh?
zy2uk>gt>rK*=r0PMuDaef2F{%>JMi}sy{68&&j+<yuyAn2tmm|<UNx3Ytu!6s3a1p
z5U8|J;4j;&JVM~i_2 at rvRzRc^0+IKw|F{WHA_UqgKJ at Z`GN0G+*TX7$Wyf*~yP_x0
z{b&q+nGZPfoOLMs)PA%sADJq40>Oo_15VKv2&D!q*bOc^(q4WdPaK-+e<jElVPC}N
zB5Hi}A_-&XuVaEP&nrH*K)*lZZ$e8j)hkwsKi!Lr9Qbt1J%(LNdZhRWd@#km%$M`v
z6OWEyDeA%uAP0kQT^A=8>G<bP`5*b&2-SSd?ROtp)IuJaZ7a!t`NI*Ad0|>N3WO~L
zg)<$0b%saQ#hfmU>BgJKM!>o8eg-jTJ3^-n)SAaG&=TYm^n^eaViNw?TFVlYgsuln
zr?X7!{$KtxwOcoZFj&9s)A-t6k9kq(EZEdf8qAd)E(9O{zVk{&%#o*nBM^#%${_i<
z!*M?H7X&?W-aUtu`NKQ~<iw{GokGTINRhX$Hn9QuLZ`6GN8J$Ad|M#qR;0jA4C4_?
zw16W_GR$K^sb8miJ1h{Hp*wv1+Xe7q9{lPLy)^bn`u$lT>@Ul)(=KQu#J~HGkyg=q
zH!1lMPQks1 at Gi+yI#YcrLmYqQyz+}Y?A2!g&0|chS4tkqU*;DAB_-e#X-}`<Xsela
z(0Mk12|Gt1HOBn(E(w;Sc*HH#2FMeg2J4{%g0{HG4daP^vG6FJ_*GF-GyO`SU#^;s
zR72!{g*5)Qf3b*Uol<Vj-}rl%B at DAw*{?3CJYMWAk+SvZJmpULF9d{n&}sFPdL%PD
zwUSM#UqxsC`|Z)?zv6>u-XU+2s=c@%F9h1)OY%{CO2?eFTH%1&yDZoGBB0+z6ih9h
zJ*+Z6o*s>XI@%t+%TApjXuYKc*<g@~a2S9*)E?=Cf`;NRC-ICwZgP*={OX4|xO{44
z!{}nsqtl`KBhQC_`EMRQ`n?6a5O|BC)x*4i^NX%cp(lOHNRLXZlNWhu?@KOm6>;vX
z{B{A1$SANl2q<(_o{}GDg1i{T- at cGqfP)F3=&0nfP82rL)tFEqB3~?YN+-tn2wsD=
zRwNXi6n{7~pj{JlI!89_1)ow2wY^|dJ60sQ%HWphtU(O?;a}cLV9W__VnK|zYdp&T
zYLvg)4}X?3Mr-M_XU}>u_+G@{TY7v1xHg5(1;$%Ch3+E;%OZ8AtELbf75pJZ8%aF9
zVqI)wuHUEWqtq#6MhZm0>0ZZKj7Z<Vbegu0nmNdHZ>iE+pXwYDeVqo#cE$?<oeLhr
zPDeiY7)nlmVL?(dI|A^R1_nc?{=5Gev$&tiX213Vp&$9<jK9ohQY8pdv-RaS=H4p#
zJ(lf@{w_PY&?7w;SWEF1&W>Ga at 7RsMYhl~LIqRNNhVz|L^4Al5xmtfw;2rX4TaLBf
zGJrxT0zr%v2p?&65<0`$5gzHilA<3sV~F{gExq%??w}i12n2;9rM2?E>!lK;2P at SH
zG$iq7WcjZJK|9hTjFR6GEUVS|_)84JHiYdyaWQk5?=1lp0!pYQO#GQjVI<*#7l|JA
zQ{_k71-s(Y&0iFBiVOIJsR&~gXDxtaN{}$gc|F)R5<{Q{Z(x0 at -!Ls{M`#I;8WVP{
z*GC7x&7z0>9u4LK1!w0M?9!<oKtx23uf2eKv<qwjA`o^5l39+MPYI>eg${O7ERYuh
zK|FKjjN4|FAAhzH%h_UHH`wIft)(DO&<2^Jtpuq*V!>dYURU4zxkTp6cB0zb2&7%$
zE0QmXM9vTSDLY)CBkwO<e&<9+m=I=I*ikJa+IqBf0>1HD<MCX<*#G!PC!4iIPfD$6
zQ&>*ng%=f1Fwxd>hailVdr^Pe^@s_))pH8|P%xh2v8{m^fia~JfIszL?ZV%>-JKTw
z&0l;?GH+45YZtJmgx3-)l9m0Z5n(^$<$SUZ-3!*gbBMnaLBFFD(zZbS0hj0cJ^Dq$
zN01V_P8V!OTH2=@^GQ?M<LQ|$F7+@*Pa7w;wLYcDaD<KN^x>~>5Cz2&9$gy@@P$_i
zavQN16dWQUv85o>BOs-ykDR28^ba9)dL%*+K;ucePfLC+q$acks}}byY#{i1-Q?oi
zyYa^yVfhgJb>#1#-AaC at vO&%9^>!)`;AMUr!M`gg`9X%g4O{XH3JE59I^7SmF#ag%
z6p;eZPBF5$h?fDVc9he7R7AA;^-#>IEebll#qSAI^<T}=i9b&fSoHTlY_kPOzr48u
z#Tg}VIs!O_Fm#ClK1H4~81=}1{M8?I25oC8K^y<N{Kz+}7;mbgW`2stsX2xv5{c-~
za;+bBpqA>ePxAY*#iLj#{%*)ZuwkG4&VyJdGPdC0N%6~=q>_h at HvFNW80JNv7C3>R
z8xJ*wCB>rF7z1D at 6p$-Qc8Z>uTaIoEa36M^{L+F?;dlqG(#kbhKwwq*DJYS_6L1#F
zf86NK2+X6WQY8bk`XdD9k^kT`%!-A;JhIMUlNU9*sGY}O<&pf=ALda+!Li%5r<@18
z5D15xfBb`A@>gV}4S@&^cvVFabaF96GO!Q|c_J2Eo)CbHFzi8&Ih_axk=|CRA7s%n
z|A=7|0^5OZYw$>PDo_Bzh(Gd<UGS}rEj=adakd>`boqq3=;)^pz)^fVbNE(&%!79M
zKU+YWxfg-o7%$Qj96*Me(6t^rc9kH+a6?}40bCUVT=CZy4xjoVy82Vj2UCwgAn(zO
z#`q@?JgxXxr4Wb(*Ic=aV3}V<n!41!z#M0UYq8ZM1ca`$lO1Z0EKh-5$j}f7^sEKG
zY{y>}Y9olk1OjtL8VL^F(iqBBJ^I1#qtd<$q#Q2!eg72*cUP{(pCyH$-&(=1vY9+x
zAS59gtK#gR8t5tm(JyInMp%nsyTHvS`0;o7RR3`XP{OAmg8=d_&&Z3KNn{8Y%<QjA
zB|kffg2{5hnh@~XJYpf?OLeC<r9eQ9ZBY;o{OLu3zkthpv)TI|6JM(>jk)NnNEEkm
zi7M^&_^9Ns{tss#SrPDLLL&<CM-NXDfA at b%1r|mk3MulRn?{!ZWxm0r0kuNlz;)Y^
z|2C0NF|WwDXQsd|7Ftp0@{h1Rj$VQruMq=BXu$6~8vfjje>+Zy(O{T`eCl=B1rchB
z-BdxN6MD4UBk2N^vbMpq&mymlxk+R`kHD9rPFUF<eAtD6l>dNN+bIdcUZJzWHnBZV
zgRtrk_{Rb=`OgK8*kaJdvtlmC<iEK1)B!C7l*BwxOy<*B1-|^Wx!{$zP?K`rW5;ft
zee=>vVB7$dida!(KJpH3hebQciV<Ls`K at Im0KzbdVSf9i5I{%FlcEJ#D;w+aXd#aj
zve~bujZozm1$)6CKrM<MzpN#tDfsA2R34n8N{Ms)rHa457ZCx{=~HnGek0Q%1wa1M
z32pqrCu at gq{({cU#z0XNYy?I&7!$UYlWYSGy|4>JIUjbNjsu<8+8{=Dq-yzS9=ltT
z2#Nts;uVYPulOhq3Y4|@hzT<c?i3J$i9)H4Ii=%Zf&zOH5e2A`?{rQP3nd6EJ1)+-
zrqzQ##qWeZf>#fTbCA(yzv>ZWpBijH+eE at MSZnZXgpGfF|CLVs;vlMKAflirH;2C&
z3V{Jex~<u#Dvz|(N^-yO1i$Q!HvR&kp9CL&g%MToiB&{Dg$qiS!`f5^Te^)eK;T={
zTR6x-ZZgLAYe<i~fZmx>Ekd}8)Gh!y@?s(9kymh}6NL+=HF+W{Z0h!!R;NesQDr1y
zKzJh at c9G@U4$et*^fw+o0=`FzSj1nBnP=(`^8`ZvtN-F+yaU>J&ej at ljQUgMk&Q&<
znLMW;j5hvSk6OtuD9TQ`Ex48_1deQvfvw`<Z<te?g?tej<c+tYKsat}Sc$|i!E%I^
z|FA<{wjY at bfzB$AC?GG-0jJv|9tpe_iaE$r?IW)z_{J1^#OxI0DXKSP=%mtQm`)#w
zg^vL5+C%A)(!pvABkV0cf*=!Iek8vP_h|294mb{tr<005?8evvzN*V`w4nx>%-3E$
zbYg(oUgeSSRdTP(e7;*9e~&(5Hmdjw7Q%e75bOqMiyA(L`4oIEFsb^3GXWNVEj_$+
znNRQVEjm5w$5uu$gH?2j`3VJo at Y$dxoyZic)2lE(?Ve*W?4<F=5NB~)1IeTiz%HeM
z)#;V^!`|gHm%IP-t}P%0{ME9PZN~V8)6)L72rm(WGJm#!PVn0ToxIldI at De#6dPa5
z0QM7Gz;|A62|@X9E!c@&;N5l&*I2%?VW)?YlDR0rOB5pfDP_KvC`w{M{H!My0%}6v
z0@}`Y7E9PrwVznv3AJ-srm?NcqmyjLCyjI^I&Du#^@3CVVXB-b!Eax%nTUe>ziPuf
z{Es1+`j5Y1Icu<fmZN7O$A`-APg>F*VQuhJ=siklVN!_7^BD3JcJm<2Wxi7g%NZt=
zTFC~B at x-D|0SW{76 at LL;ZtUOEI|vja0zSe}QwT*YI-Ny9@*^+p6VqBn50fYs%@U6r
z^9gD>Z(X0-9TGe4dQgSMAYhRf1s~~GkzyY99f5UlDE`v8%;AOlgTH at 40lp{{2teTV
z=~Ny*_J<y}F;#l_2>dIqSpQ!|08S8Ax1o!CadDFRNOV|b^0FQIj$N$~cq9mGIU?M?
z{HiT<%i#dKE#O^)@z>7_*@!=33G=*e3xJO>=71LhagqEUiwie90;GNCFNGk_DQsJ`
z{4b^TfUo6(7Q=xLa?EQ%^O61Hv0+;LSxXTDNTbSN4$5t>@S1CWe^!48O8BckTr({1
z#7m^~<A8}r at QJcR;KdyON)W|kA65DNC{%`<VX at v~9$=}Wpr39`1lZ;kzqI?*iX!eK
zgxhx at 417lN$Qj2Zd0rLrZ4U6#UMz~p+TQzruh02w3-qN}@;mt20_>6A#JQ%r&Lf^W
zEvkiAA(H9 at Qk)5fKFxAt1Z4sQeij-`5eQMx0;`_m?{z+w_F4GoqmSmMVVvruu$*B*
z5D}b}6qz6Vfa~nn1_>|i`^Z;XpN28obgng9yTG)>r~1qAvV|9h!H&Nu5W~1xDaer=
z<Qh{sg+D3PwM5yG at QzyB0eQkrt>ROg*M9H`IFb|x6OtApkuL-u*=A9;DLW1<01fas
z{ChO4kyRc^;;q>NOhpe{c`o;k{OKT=%_~)Y!0mdSJ~Fu<5TGvkp)S>9Uggmmpr=E@
zy8wn-F$q4f^%Mw`Q`!QQe6f~yb^6rB%<9F6vvMN{T9UK8QzRw)V6W8R+!aVmm-&?P
zU*%z&uQQgg3#`jL?HmNKN8a{lk36(W at D*)6_<Ni{C|SnnA*|{YDD&|otkvRgkHc&4
zSXy53j*lG#di29?j~Hp`2B=QKFY^(0$%(&vyPTKmwg3fr;?e6iR1CG)au9iepi?|b
z0RB3L^hk0#0?3CV^Xvj2O=$3U2=XrSTA7(^HUdW~{z{NigL#r(EXse$ul^+EhD8BS
zSBT8)Q3)cDS`pr;8VNo)SW&boJ|*!l;gv_sML~Kn5?Ds!uk|ALnGydsBii<bchU21
z-;#X9X8Z#lVfuXYRd7T>Tk>lyr1pA|JCp5U*Aws_wex6ouHkQtRyZgGf3aw5u#G!m
z=P4!*3tmq+peqE(Q_B3vJ9Z_%o2N&L<nLrLdB-l`6fLowR&a0I|FfcKd$b}xB<ylN
z(Jutdm at R;|RAJRh{T+go_`_=wj&nKkwdH at 6-x6gY`0`&$6PXV$CEC01q!AY%5tI94
zkUw?#C)wZ=^8iZ;b?rO~0oqzLFgLOmd7UgQ5XNvP{#q4)zl<bw1V#)~f8=~=uSLF%
zz|G(rptBHQ?$|8~bm!~}!2S=uwB^562&8eT-aZ9?rT!M=nUN*g$w(n+3rI-(-P^&D
z{~qx#|NoW0VcwPeeS|*+Wi<!nc7Z_Xp(n5p|KQ`V8lO9N4mYS798U_W1D_3aJp~AD
z90bB(J&nYl;zfjW4f$w~*ZHpXk=C$k(QJXrKIUo;_?)6xNE?4kQwW2Ji0mMo+<$y(
zLj6S?a=L|J6a}5^(Mj<ZUH;pr1Zpq|{++7T|7wfkL*i at +ViIqO^+boMmPQ+7*t_<_
z-VqRg+ra=KaP3ifz$gABXA8*ovIRpnd(;M&?r5;6$BMj1;n0IQ5dz^LbZ^BUTf)IY
z5P4=(suEf+8iQfgru?@N_|nlV^Zgd*f2xaXEn!iy at S@P`5r{Sd-5tr~*s`J45>`Z>
z4S*K{V=_q&Y#UGh1RsBUK`cm75I8Fm{{}Mt6+_dyUjgDH{md&y at Dlu?CUi9)d_APl
z=(Lu=wFU6E1^nY8{81%73ci+KR+;<{f-wR?tR9CQhx_zTDc~AU6$EYAxethTdSIki
zjZsy6kXLyG!p%pI?ch-?^4(nsWL8;4)Z9YNU~)ZL%+piSEk_|;fqY~|=-QG35q9;5
z(srQWuLNn0=X=+lAahwl+82EB5$wu-=Fx*6XZ$Da<^1qBKeM%51HUa`JK$N`YYDIf
ze1iqOwfX at TZ9VZXB1Td~keeI?|Csh+pKL_Kc!Oaq1l%-Uu&i6=gHK6>Lm-GNr~zf5
zK$xeLMx)JJWDAE+Da7Orqw8#~%yUvO6^f(S0>lwK_s at z?{Gnz88d@%U^woF<;2&!B
zC-~Yr^;68uYkSs;mWI6$*aChBFsB at 5r?zTCX*o*}(O-GL1qY9WVpvGM3xeAY2Pvd2
z06vKWrD32AB?<vYt1>Xsw4y+uc3+b1s?DBe&0~g<{pxC3qD^6pM-#HaNT1S)k`nyd
z$WIh(0X;H5 at fOq|^SC6Z<h8aQaj`+P1nn-F?)mXo|KqR6;lgG1SjCD$+!hc5A{N$S
zD)RB<h!9&5iWC)~EwCf7{zW~}1HS(tT1$A%HS_yfk^&~LgMbO)6f-DB>JOTAG1sX_
zyHTx8K at f{x?*@~e;-gVo<=E3OEzxg4Q<=659P%FPM2UbS1O{VLo^zR}C1LPY%YG4x
zg8|_8BLn!h0O|g(--Nt|)NNT##zz@!3*c`H*y*y}Fd+zdoGnTbg&s$-t{yFWjMwj7
z7&&5oyNtg`B24JDYLsE1VNwq_y~Q^D8`atBSW)n)3AN#!PVY9!v_7II4Q at j3R{wR9
zCX^WNFi<0ZlwE$-Pe9cl{G-j&sQ at _+zD_$-zrCQdYEvuiiL<~LUaQ!=93%|jY(JG)
z*X;uQeHB{&(|IP8{KTT9MT-TzC4kO)46rEKW7k<s;xGBPuZuqgt1{3d_XAb1LgcN)
zBUX(ujL;MFc!ZZSkbUG8kKWQ+NDpPdx+;GIJf_#0L55UqKxh~AC at 9tc@?R=qJ1D9-
zTFIa96l8=z3pn`u?z8?k6DZ(|Blx_ts6=83-4+l63t4okkS*XJ34kx?4p}g9CT7Om
za at M6xn*p^#!$|QpIrzj{RwP!`;=p&5NH*xv?{Ua`1k)r at Dr)I2EhLP_1Ud2zz`Vy4
z(?(vqmfVjPYEib4(mw1$km!uROOe5x;%|8Koxhm#H|)9ZBeGNe<Ub>I;7WeqBl1qm
zJAyo+FrXFDM!pi{Qfj%q1J)KWr$Fqv|JjI$F;71E<m@}wWA>2vx4E<}s)Z<BF{eZW
zUJ6`8EM04iPtiueyR4=6sE5c6!zezToG)H2*PK2j;=<YbO_J~G&t$%whoV5}R4$Zj
zt%wJK^PJ^)E|-C2rk+GNoVM$tzrXh4uZXR{-+nv8tPXo-q-Y_Ms8&?@@hA9q5wfEB
ztzPRpmq51>ibQdr7JP$Y;T<Wml-7*{-(k_oj7 at RfSW*fcQ;qZr(Qj}s;t=fyr+c at A
z_m&<y#ft&AicaDcJz4{_`U&_fWCq^}{iw)%{QHK>DR{YzIcK$mvq6Zwo*t1G0wVK+
z&j7AL%`mNXElOd7MN?dZ4eKDb5hzZU;x75|Z*pzMSgv*1qq7iDSY^D0g3lwXc-<<2
z@(~3$f)%kH^oUy6 at uBN6l1?au3p$NiK(}}#>1InYo?=?9PbqqQx+Xe}!rDcrTVVLh
ze6$OJw*04<!P30WWo3t(=@hO-9*r^+e`&9s%x6h1Kta)3RNC_;eL|p~v;~B~7BG2N
zFRK&t>mdQR;=tG0qn^qF{(ZG+2`gH916xc+jy>$De>%MqaOikZ2#gu98|n&>PZQ(k
zQzLa2&79Q|#&}UnLS43CPSGhAbm9~+LlEXmt`J}zhe8mC_)B~6{aqm1mZPMzC#5LR
zt+hVeUkBjQFZ0!(wt#DurCY*ru+VS#Vlf7^3-lBeHqg0jsw(O%p(iq}E+^SW*Xrjc
zC5G&5hEVsG at hLMVydEid7M&iYcZ&HbUTnGImCIU*$2`nMfyALB0Q|Otsa(i;$7Lay
z{0~e0+Q~+jf0^Ip?J_o4S8F+ at QZj%-inz8@!2IARZ2^;uZ}6=`(dta%->2XksYMSB
zbMl3Qoy7=PmnGSNHbI6^P-2XacK6x{eQLY`KH39M%6qy_t9X$}5AAG_CTYT!YZW&1
zXj;Y`;WM>BXoC-<|Gi2KdFK}f{73Yh0yw#che#*i8FS1!3o%T~1_rRIrC|{ftw%De
z`zcZt5&}PpI+U#ySd-I_ at W%!#TGylGXNlHY=9E;X71_PQ`c_LpfEi43646Phy|P)Z
zd>%1ubOY$@cOh at 2*1LKry{-+rwye{Wc(?IvK$RH7JmgtOA#&cMQb2M3vfunJ9x|UO
z2tvR+5V~vxB(L=l2 at FL$%ltV$ibo%jQRqG`McZ-nT>yW&In7VvKW*^)w0zKlufHu|
ziTF>5V}*u~&=@6{9$Bsp6eX&StQ8L8qdsLhq4#O?&|8QypL$EDk%B^DfD|Q|m-!q2
b`o}*hEXUuYSNI-(Y;%yO9FM?o&_n(gOy$qV

literal 0
HcmV?d00001

diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
index c6399ea..d2f384a 100644
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -56,6 +56,7 @@ set (utests_sources
   compiler_lower_return1.cpp
   compiler_lower_return2.cpp
   compiler_mad_hi.cpp
+  compiler_mirror_effect.cpp
   compiler_mul_hi.cpp
   compiler_mad24.cpp
   compiler_mul24.cpp
diff --git a/utests/compiler_mirror_effect.cpp b/utests/compiler_mirror_effect.cpp
new file mode 100644
index 0000000..635e416
--- /dev/null
+++ b/utests/compiler_mirror_effect.cpp
@@ -0,0 +1,43 @@
+#include "utest_helper.hpp"
+#include <cmath>
+
+static int w = 0;
+static int h = 0;
+static int sz = 0;
+static int *src = NULL, *dst = NULL;
+
+static void compiler_mirror_effect()
+{
+  OCL_CREATE_KERNEL("compiler_mirror_effect");
+
+  /* Load the picture */
+  src = cl_read_bmp("lenna128x128.bmp", &w, &h);
+  sz = w * h * sizeof(int);
+
+  /* Run the kernel */
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src);
+  OCL_CREATE_BUFFER(buf[1], 0, sz, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(int), &w);
+  OCL_SET_ARG(3, sizeof(int), &h);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 1;
+  free(src);
+  OCL_NDRANGE(2);
+  OCL_MAP_BUFFER(1);
+  dst = (int*) buf_data[1];
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, "compiler_mirror_effect.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, "compiler_mirror_effect_ref.bmp");
+
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mirror_effect);
+



More information about the Beignet mailing list