From 0e0ef465dcfa38b9f34d98cd718e1d2b5c396494 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 26 Nov 2016 11:48:21 -0500 Subject: [PATCH] v2_03_98_src Former-commit-id: 0ccae4566e2686b634ad5e56617ca947993f1d28 --- Debug/.gitattributes | 1 + Debug/ddraw.dll | 3 + Debug/ddraw.ilk | Bin 0 -> 1033500 bytes Include/dxwnd.h | 11 +- build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 349 ----- build/dxwnd.log | 32 - build/dxwnd.reg | 16 - build/exports/Crimson Skies.dxw | 14 +- build/exports/DOSBox-0.74.dxw | 36 + build/exports/Dinosaur Resurrection.dxw | 35 + .../Need for Speed 5 Porsche Unleashed.dxw | 35 + build/exports/Ultimate Spiderman.dxw | 36 + build/exports/dxwnd.log | 14 +- build/help/Colormanagement.html | 2 +- build/help/Commandlinearguments.html | 12 + build/help/Generic.html | 2 +- build/help/Screenresolution.html | 2 +- build/help/Windowsizeposition.html | 100 ++ build/help/js/hndsd.js | 2 +- build/help/toc.html | 6 + build/proxy/d3d8.dll | 2 +- build/proxy/d3d9.dll | 2 +- build/proxy/ddraw.dll | 2 +- build/readme-relnotes.txt | 21 +- dll/ddblit.cpp | 71 +- dll/ddcreates.cpp | 1046 +++++++++++++++ dll/ddraw.cpp | 1124 +++-------------- dll/dxhook.cpp | 11 +- dll/dxwcore.cpp | 27 +- dll/dxwcore.hpp | 5 + dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 147456 -> 274432 bytes dll/dxwnd.vs2008.vcproj | 4 + dll/dxwnd.vs2008.vcproj.gho-PC.gho.user | 65 - dll/hd3d.cpp | 6 + dll/hddraw.h | 13 +- dll/imagehlp.cpp | 67 + dll/user32.cpp | 103 +- dll/winmm.cpp | 10 +- dll/winproc.cpp | 14 +- host/MainFrm.cpp | 6 +- host/TabDirectX.cpp | 2 - host/TabDirectX2.cpp | 17 + host/TabHook.cpp | 1 + host/TabProgram.cpp | 1 - host/TargetDlg.cpp | 20 +- host/TargetDlg.h | 16 +- host/dxTabCtrl.cpp | 1 - host/dxwndhost.aps | Bin 252408 -> 221388 bytes host/dxwndhost.h | 1 + host/dxwndhost.rc | Bin 137170 -> 139468 bytes host/dxwndhost.vs2008.suo | Bin 100352 -> 89600 bytes host/dxwndhost.vs2008.vcproj.gho-PC.gho.user | 65 - host/dxwndhostView.cpp | 183 ++- host/host.aps | Bin 47496 -> 47508 bytes host/resource | Bin 50146 -> 51342 bytes proxy/d3d8.suo | Bin 0 -> 7168 bytes proxy/d3d9.suo | Bin 0 -> 7168 bytes proxy/ddraw.suo | Bin 0 -> 7168 bytes 61 files changed, 2018 insertions(+), 1606 deletions(-) create mode 100644 Debug/.gitattributes create mode 100644 Debug/ddraw.dll create mode 100644 Debug/ddraw.ilk delete mode 100644 build/dxwnd.ini delete mode 100644 build/dxwnd.log delete mode 100644 build/dxwnd.reg create mode 100644 build/exports/DOSBox-0.74.dxw create mode 100644 build/exports/Dinosaur Resurrection.dxw create mode 100644 build/exports/Need for Speed 5 Porsche Unleashed.dxw create mode 100644 build/exports/Ultimate Spiderman.dxw create mode 100644 build/help/Windowsizeposition.html create mode 100644 dll/ddcreates.cpp delete mode 100644 dll/dxwnd.vs2008.vcproj.gho-PC.gho.user delete mode 100644 host/dxwndhost.vs2008.vcproj.gho-PC.gho.user create mode 100644 proxy/d3d8.suo create mode 100644 proxy/d3d9.suo create mode 100644 proxy/ddraw.suo diff --git a/Debug/.gitattributes b/Debug/.gitattributes new file mode 100644 index 0000000..b110a24 --- /dev/null +++ b/Debug/.gitattributes @@ -0,0 +1 @@ +*.{dll,exe} filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/Debug/ddraw.dll b/Debug/ddraw.dll new file mode 100644 index 0000000..a4a427a --- /dev/null +++ b/Debug/ddraw.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57380350f6215b3dadaf6f920ebbf18fd2ec95162c1722bafac6f8b949eb851b +size 458240 diff --git a/Debug/ddraw.ilk b/Debug/ddraw.ilk new file mode 100644 index 0000000000000000000000000000000000000000..8641d7b5edcceefae1bba56a512954198e8f08e5 GIT binary patch literal 1033500 zcmeFa4_swM`9D7QUjAHmu`p3rMZGGkWVBt46m`?tT~<+9#g&qZl2uk&MfbX}in-;r zP&cI_+Y*iZpi!-fMn*-7Mz$#xDcV|FVqs!pqGD3wr*-|k-{;J5AMRcd{q$A)y=HdL zopa{Q`*~*GGxN+dbI(1jSabHewe@SyX^51qx$yke>mntq8djaPs($snd6|1FrA9+# zfh@%PtqkMywc{T8ZuIy)N*@WR9T~V*Ic0%N_39sws^kU3unI=z6R|E`sXGE*TKio= zX+qjO6=%-&`;|_aF-78dRX~poXY0Ppm9Dr#>2{Ql z*}8A`uSY|#9jEtr?YQ>+b5$Ja!#H}*_xg+1U|MIX61HLFrYE!YjXXhj zo`*)?2ZV39Ax-x~XMQ-W$1hX5@1p_T{Euv%_g7Oc=6?ghcDURbFx&n&TQB)FTRNz6 z(o*-OuuW&%;3(k0M~L%-Y3R(cntgeqw8^V8Qp@r(xsU(fGf zR=8}(eBIC$(jzBi=*du)R{sup=^M&2wEj(+u6+;E5E^O%T3ry-wUI1cbFb0`Dy+9G z4{N(%(z3G=q7ymn~qqyJl?kqiUTTo9#(sln)S-P(%OUEF05SY#z1A1$>uOo6! znr>c_p{pmudh-^@LFm0Jq;+wY?s+Ox$J4WP;aEuL-8WC?|2U-M4`l1`#&o^;@9Dbd z_vw1$Jm}px&%@R27uHoPGW1|HOOM_$PmdpwrOQ#D$}eW<9?0pQ28?Onw=F>(t`F+Ux}e^2 zO{U(M7SeA0cM|Fm-Jp|?b zTBfc#e4Z|OE~JYlAwMTeFIXSc<9CDaXVP@_&$9IPvyiVmLl@)TrjLhp#nBl$S7+(P zC}+!>ur7uD8IJ{ZcpZ+sEWPoube-P~SqL=;r0db=1A1idux?&~wt6O@2S1&mn>*5V zgU-;KA+rMV``?$P$Is93FblSab#-^P&H+!GQOBBBLOSj8dAdtw>9o6oy5;&b-LMpO z2A_S){eH8d5_~{b*Tb8bUGF?}rjUy-{%hHd!Z~sC-cl<)>+KW-Q1A<;U z?-d-Fr3(&D(}Njki`T+>__pbDTKQffJzfAEXos9^zYh+hf3?03^|&Nm=YA?%4;~4f z$NS|8qb(Q5Gqt`vQ|F-VTX&zQBZp_{{Glw}J|Fjb0=n?#Y~7R@*4YD@y6w13U43=B z?#T4PZ`9epwSD)>gf9wo1_fNn%ztUfQS>-I?3dCM|&-acVng0YdaPqyy-%{(3Z zQidM6KHaO=@CUQ>7Vx}jNv7U@KP^XF#eSQn$I-w0z-Rda$VZ(z zelTCxeivo@aE2bcCZu!s4eR#113Gqm82u|v*PWfE8*fV28b=iMXnR@bpG#!hf?UtdR-;kk8x-#^@aT&TC<1dUpymbYmTNqRb$frB*2iIt{{h&ZkZuJplv{Uc zx~|*<@Lniuu+x6MH?PPxpH=@6G!4`L7+}FTX zrM)Xt55q1~-oTjwy`eXx%TG$vag5Wx{*Vr%P4g~6zjzng0rtB0hauhhfskH+HXSIK zr`vAH(!;1X@tc5e{s!zn!e)%Yq2n>ejtc9E#Thz`c5g>rcyIU#^pDjj>xN97y&Uzt zD5w{pk89|tJ};=N_Y3M)^snd;`fy%QSKNm=Dus>V%wLZAEf4m#5A$MtS-Nhn!I(THL-%2>Y6+vA^0RdZY)mz5ZowbWR^YG;^HxoI z(8E(k&#M`F0c=tabPqiN+m1P_82zXRHnpS@@s6a=UNObB{&a9OjoV`W-*5WGU+ZH_VrqZ_4&f)59G~hcS-&Fn)4zt$!EL zJs2wsV7Iox&Q-!5G>?aL&d*>UFMurc!EMEu2QgkpFehdo=<}by3;dB&FkTm8&VYT% zzA;Tl?}8lg5^hb?5wxR1pUyoAbNsi_ANTRgm5aV#{c=b*tb)CU?ao0R^#vKa6f&y5 zouOmEG`w%VZUU|geR<%|^K=d7kCyx_-3%K;-nxDO`DbM6Z5ilGzfRK|AH-NYBVBi` z2am9q;RA!Z1okkBwyH(D7v=eOBMx1$(Rq4%2FeN>)_mc79sWzYZt6t;gZ{~LgSvRn zEWH(Dx(9Y8d@1_y^XLa?&)iSLo?S6tH^zgyzdoqb#sWHrHVthS2Iq|^Yb)AkJI2TO z%h0!f8f2h8XwU2$a35{ejd2=9{;m&zcVKeR->PAUYL;Nli1~E#5A$_oU+^@Vu6t4c z4%pIW*yKvsj4fOIF|h5uVO7yMxEQ}DTQ7#~ilAOyC`SjS9ezcZZ+nNjF8@l`E3KnMl z0?1zcDEw&DmmIcShB5mO*t5ofF8>#NVC0Fx->FzIUvGr3miGhSUguvoPq%}YS{!+e z^YzFR**XTjW#GFT?NNCY<~8`x9eMD9Fvd4vOl*NqwQ&J_PxwVm73g>Hk+wg8c?5n= z(+L<;@GDt{%8Stk?@rg*H)ZMxv_S>R-vhsSGs;m5AEfJ0$cOLQcU`)!fPav!Gj;F7 zLEVNn?uDPa5q5xb;;?01wf^|){tns&xCqKMcp&;c)+QyuHEH+)e?y;#9%44YH)_OO zF?@4S_o1v+&%zen9nxKu^K=W=QUzD0>w$T&xoEF;*rrH2c!3Wy{v!N9*o12IwQ96^ zSFvA)Hu!nPDEG(#^K~=qFm-IlxZ3yx=C6sM9{o+49)Ue7dNHI+FU`>7mjrde*I-jH zr>XIPuKR>P_DUgpbb#YAO^=?B^~Sg7>1^27Qq-{r_OTmvDTR&Mc1Zy1rGW0o+*oxF zd~2jtqs-0Vz7u*jeKV+g(?hy%Ir<>x{xJ9|f~~8|NZ0KpnYwZmZ3OuPdtoeMJ{pH@Dn*+s^wIKb{qo1*9~EQm zr_V~vzvFcwz2VF7zhVE!J7EK`euzKr_kkSvbz2We*TWd^;cTpBc1pNzRcksQwj4s%Q!h=u_v}xf!A>DmyhVDdvS6D;UZphRP zn49{MKMI+VT{87%jI}|`IgQIR^++}B6vp&8=D-~6UzMVsweS(EjqD9*w`%z48+&<679*V_?sL8O5AZiM7qdNxuJ{gLz>A?s@h4A=(jrw-o*vuP5#d>Im#{F>G)x z_W5|kLbws}w>xVWOy3g<;8sf>{Oi4TPHzIXL@igxt0n3qs!UbjI8iNCN1J$=T7k3@ zNWgvp^5*XO+Hq9XJ0tE?AWPIKkhcPIPeheBe@-Z@pTt)~Fh_NYx=e3wisHw*Yl#`KoZf3U?aRYPAl#gsZ$W z#up&vXmuw3#neh%UxG5!;ol0JuR+can|me5cMj6lds0&6gc>jOn6eH+C+oaYoq*4y zQL=T=dNw5TtOl|ga3liTB@N|eiPouey>cxAA1lGeY?xwTYNnOWXW(dcz9;EIeAcNC zs>200Bj9})xOC`j^zds`JxarxuLTEIf*+qPkkiZCJqN68lMdvs20v_*@i|~G07r=y zovu3yIW=gbROP+^sTYH5GA{8EU?$Km>`SpZ;$``53D{O$z?YzRm)S(bOz%hfspz{E zX!9EUTL)e*K`ClHc131)>KJegI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG z90QI4$ADwNG2j?*3^)efAq?=hEoJz^^Y8dFw*b;zNVy6zdR|AzC8u^>RyZvXN+W31; z{=5}O+hyV$_cxn7$#{3|7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwNG2j?*3^)cH z1C9a5fMdWh;23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwN zG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG z90QI4$ADwNG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2 zz%k$$a11yG90QI4$ADwNG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8jseF&f`M&!zjmC; z!8ML;$0$8@eworEI1)MCnPb2);23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$ za11yG90QI4$ADwNG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8jseGjW56-s7;p?Y1{?#9 z0mp!2z%k$$a11yG90QI4$ADwNG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8jseGjW56-s z7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwNG2j?*3^)cH1C9a5fMdWh;23ZWI0hU8 zjseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwNG2j?*3^)cH1C9a5fMdWh z;23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwNG2j?*3^)cH z1C9a5fMdWh;23ZWI0hU8jseGjW56-s7;p?Y1{?#90mp!2z%k$$a11yG90QI4$ADwN zG2j?*3^)ef*$jj~qxApF67K&7h4*ZjUY@Zhvb9RvSxCSn75|6JA5nE`jk-{suU4yd zDxzu-pW~&h#(6|tpw=Q@k6f$061-l1N;?aZR^hl5hz^vu6UVqLcQm|n1usrlai#ir z*qe*as;}qysKAfjnx;ccgp8(ZGL+gQpqg^Q4q^ovS}Dx~ITTXVqIET^8dfP)_*tck za4>!H9;H2s%d=Fx9WoZ<|IxUy2ae_pX6oaCD_@2$LdAe@G%|S43oTjpED_)0$Q4-j|dv+?K8X z<~4}TZQGxi{L`6QBXGPPYF9e@vMhZkFGTSAo~J9ng2`m^Tt+zi{U(4 z70_kSS2Ybat(?d6R`wM>$86vJzh>)PTu1A(G=_*OKPIfouSi!Fe>ZJo#t7530vEvZ z{`h4|4?}0$jWd^*x@0K6t3G5YWL;(pxk)#BU(VJYD5p)H5a&#@@_rYzIi|<Tz!c&d>Jl*CWq4ssZ;;S0(CX z@9r6%U97>KOT6og)e&luimD|*R(W>xEX4Jy7U!410>+Skkx6Gsw}`Uv+LrfI_JoNd zOeOEK@5#U4@ql-!KmS(OhxY$0u<}85xTsBwC0!tiegN|~!duhV{8{@#^xnFp`b4ix zaLe*o{+HOn$wU#R>SM-ED6y_T`ut~Up+?6TKuaMcA!<1 zg~hhzeZQ!KJhk^_+br1lR@dij)ZzlPPaWog>3ywMlttF(TW_GRjS3lWOjGrbU z2a#I3BTW; zZ(dTreS?QnG`D3CiutIJB<588nor<;0RKcg$C)JhAdUeA? z%l9aKBtV&zu>yeC5H3f&-^!*b+etZXH^YC&A-h5a{NW)}wn4<3Z?|n92vAQHX_RSo zE`m2&f_`@vYIrWrYw(XN^Gi_IwMab=dFPTR_WNAbhl6tGAo1QxW7RClh8i~{mE;d zWGt_ve+a5bPI)!g&C&PyJjZUqI_%3z&qJDR-xu1hKI;o*U5gn9WJf_Bos+Y43t|SZ zomhV0c`c{1m#&;o8mH3QP{-0mSi9#$y*-lB2EY7~Z-KwNeZ19A+`z7jcET6EFM%(* z$j4U#-fcAf2)6!J!1G$x|F9>2 zev3>a$K^tQxzOL1q+fM^@Vk4yYt=^>r_w(_!3b9WPzwEx^S3Q!9$O~Xv0CV_7W(tP zGQIwXRBgW}w9D_-Gft&Hx&5nvm%4a<-J^Sz$~4w7CiKUI{+9 z3;lUtonHT|I{vWYn~(hT8pf&g_fRl`)n5fXudObgcX!-ypiE;OyM+EOp}#Fj|HB{r z(S5%kSbHbqRQmfU7{TfvN}<1Jc=fT&W6Q)k_6hxcLVw<->GfaJeD=oeb-#OnaVq`E z{jUmmsf*_aUHs6!GL3Z{6#55+{sJ12MKUL`S7sLFQ_x0)Z|JP%m-uA9<{Qbv_ z=c2y~c&Ur$FMnmv17#ZPm?QM(2>oqI`fn~4?f=qy*G|*VI!1;5sLrLVw;3)9b%? z+UUU>>wo$ z`p47o)tt~@*NycUoZpQEApHD^!m`sg?s+TYRQd~mXRzb1^M^kFOZ;T-b4y$3P@dQ_ zv5s~89tQq5m(6wf9)|c~`tP`BM0(h@=RFqX3FDxb;(s&=e3QWEePcTQFV|LniU`IM z-)8V!tF#Gx74UMI@$-Ltf9(9$HB}V~O7)%D+Y6hk(boq*LK* z125mr3&s*ZB=AE5pVu}WA1qiopLoU+KOxFLA@EheOa2F6?nUoVim}9p7yIqU@6p1a zOSE4b@R|s;`0SQU*Ly;xBY~;zl7Cz)Suszje>9#50!oL7{(8;Meiz{^Lh~{si%iC4SQ2+5aX5KJR~~^Y?J(wcg_@j3qwz!-@Wz z`}suwtpZ-w|Lcz*(?I=J;n) zu29SIJw8J|>Q(!h#Pdj1*zd|8&ekX4p0{s@{kqHK~)y*+KRxnNxrK))#hqq6+s9|*@2T2=nh2|*T7}6zAX6v4Zvh`LPG{_=WpPBAI zD`PO7$d9`U#o=u)P&fDJ{HuVsS2%XNf4%wPZ2b#tf-b;b+u$eh{VnS0=fme*pY2)K za5gbzkikAc8EO4Norirf?*CCg_XoKzn1zO8xfTJFU$Mfo4BiG0*?EB#BpDc z`+?JNC;GTn;E=_uYd%j9h~a)5&&j6#Lr_^xSl5F<`=G#SFQ1R&KAL|SQ02f``NS>2 ztRL=3=&Kbt?tfWaHE>owabM0x8wuRC0>`~Mi;DqgfHTJZJm$0cYhCcOsmL7J)lX;PS8!;lY3#1kTDQ z?tD0*{Q_s7pYikw+%RxfK5_jN_#Iy^>vy@-$9)Gc1k^ZiRz7im1uw+{cZ=cSZlK6}Vp*9FkSr6b@@UtTU{9Ulzo_alro{#B>jKBMoz27bo0V_VdIYXd;JBuNwV*K#%w*K1b3 zO)L1Gf1kYUZYE#CxrVcOxK6Y3ZCbU!@!3}f;<$F>IRn>cR=%I2RI9+%3mn&MHV@Zj zR=!Oe6u5SQ<66z;;d;!8OG@FO(Fe~4tX@UE=+uYU?0 z*HKo!#VO+}vVNxu9M@Jh57$ptzD+9@xXT2NYbu+E>n1DTro{yAM*_#Sl+DBSl9g}M z?6VCl=Tid5HI&W6b&{2D({}KI3I?ngtY1u8voPl{u*=ft=Q#s?{^XEHC#_)Z`rzwQi&G}BlH#^mvIp|7*o;!qdp8~KHQ z&9&n1;UBZy7FR29+yiAg{ek%7LA7a10=EVQVqJNc<@~fLXU`uk4)Y$$+4?8{dTcn& z%TIn9QC8xv6S%4;6Sx>~i%0zH;co>!96418#C=!b`W9L~v4-80rP>enueX@;hPx8D zdjxK5ETOLf`Uaje*H8H6tUwuwt-;ZTV=IpAA1GadV*?JBh4&bzqfEauvV*veeaMyx zJ{bCs4K2^4>u@{&T6%3TVX=wu2BJ>ra@BbJ+U+bN|z6QjPf0jLu&k()Wdmd}W1xh9V z_JVR}3W?e%WuM2QOv-pK4w{aW5hp*7)p?K712|BPsley4_)HPop_;MjTPR_GW$Z(F zDU;_6$<)#(=NWY>7V6g{_|MXBDoYeUe3hjT*@n- z$0~rVij0eP^rGHjm9EfqDvUNnq!gaVTI-$o<*dOzP0f_eGdE_5xSzH7BYp<2o^k9e z7+Ykzl6Q0dL$QfuG2`ZWtodmCaqRC9&*!mfV9(D;&YbERV@IoKAG)pg`!ElWzR-p7 zY+N7@b;b#w_r6O_7C}47=eZ)t96!vjKlhQw?uM;J=2Zspz2;Buwyyr0KW3cj`=kk! zpTX9@(Ae;O{bcX6?C?i^!xP(2X|IPc*!X=?KGKJL_$&O;^!>=a{`G7fv5bu> zUSh)W@gC1j349&!GT-w@y!-;QGnVOLgU9xX3JZKE@RGl#Wd;5o5@LzZHF)x$EAV4U z_{>Keye48S@%ci3zQ7m$c)I?V-n;y2mY=c2M@9Xk0$&GwhyWA5+WN77@RYH{7YqHx z0^gaWKksLMT~9n?i7yfQO9XxlcxzjTt3M*@8F|JMUncNn0$=!(>Fsy*sj(XKbC|qdhWt8;u%YPoxs-# zd|}UY{z9*0U+d{dEb$Ej-yraHN%(6&bfh=_8B6>If!`qTok{rKGyjPl6{Q$Ue3QU8 z3H(?R{;4N^NRz7=OMJ7yHw%2>Pp8-ak!vsF5LJvNev`m&68O3#{0jr`_q-3r65l59 zZ35p3yv%pZF7Nv)^)r^~9R|#Pp-!Vz7F$`%vYF|IiGmOGQG?^PaH;J z%kaGc=N~>#%)DtxlXXabo|yAjv3Z`D_+os2Kz!v4_~hq_iEn?xpMPV}*A9k=k754h z8i;eJoh$#m*WJfII5D!0G^@Y))_uOTY}5HKFizz^ zlqQvbBk+KG&-629IDOt{zRTE_pBzn!{xd1c-+bb9|L5Tik3LN-V_ANt$?qe{AHR>x zKivBL%rSGw-}ANOy1^CWUc~%$n{~yN}&m60Z{GXevB4BuXA&xTRY;xR=0gK2B^s(%k*{0PA z+*JZczsu&KZ)N4%v<`v0Md0Xf**x^AtbCg`ByfEKM?cHvp)Y0SPo@3Lzt8$TDRA_! zY@U4JtbChRCU61I^YDia{VJP>zEiHrXVaPlE>Ga-PuV>5nXG)9)+=yF3mp9@o2LXg zE8nI~2;3P0NB_y@p^s$c+qA+y|2}!C7dZM&HV=IxE8nKo2;7$ij{cI(L!ZdXw`pwx zcbmY`PqKMxfV1*#+E#&kK;Y;f**x@ttbCi6{d505>o+2B^owjB`aV{^O)C+&0QM~y zI3DN^@tlD^kCpGIAWh)*6FB-oHcu09R=!Q^2CfqOJS^ui0!RPH=An;c<=eC|p|4Wl z==az>^ld2LUNg?W&%dU=^#VtKhxZxi(^&a_3icHR?kfUEKgZ_j0M5#{X`2M@`vOP* z#^#|9W98el0fBo+;ON)bJoH_xe4Cc`3;#ar_kzIDpRsx9vsn2yZLz@dJ9GxNJN+1* zGtgJD^8FO-Ckfn#1djfT%|jo>%C~8q0{0Ptqu*ll&^NL2yPHE^`iQ_?C~)*wERJ)s zm2cDR{tbD#R^T{K+dP~L?VhSl^Y)xUM3ve9Nym*_f$ze6>-kJ(pN09`&oKkdf)U$2 zRN{J#Ug9`6A@T#}CM(}2G3MTr=Z}a)?un*h&y9Pr-d-in+i=*uO5S63?!!H7^ig+2 z1-x|L+kkyWY-4%XjdumT7|B!m7GD$4IblEDmVs${M^M*T`N;pgksri)Hv9!d2m#gd z3{(8T@}Gy56U)dH^8d0ZS67zBDHTV#TITuJvfj1~8;=QSeg{iAHjU-#zjb;V?=x&e zo7ufvyLTV6dscoH@6*Z>NmKG?OS7_Ar@g(^mG4{W-4b zwzA^%hE?kt*2nZ=heJjm%2tK_UdlV#$Rm^EAGh+bw>%zHwRrvq$zEv37`NXaR9@=y z-uD2W^T*wgm*ch9xC?mM;`c1)Gizl5BiOq)^M{Y!`96Ioer3bGR15)x0RGJ$_%0Co zqZ2*z^ajLUd0A9!r4l=g@=~UibFx~lR^r*N<#@)+|HV6h&0ps!3I8EiRpMY?x-%oc z1!r4BYSOf;<-p5~kCp@0OjX5nJCBzd;~$p=G8DOCe%1}aD~A6rA^*KVOgx1jNr8T^ zeFn_lVm+9*!X!{wBqvgxERT!1PvO{P@{ta%L;UwZ<$G&A-lDD8jH8nm2$YBYzCM$$ z$VPZf%_J-_aV)ajM^YOuCFs{>08uy?0%mL>b&Mmba8J_;iLCoK?=@&8=wjy5?_1-HhU1r6FJQO6}~TnuVJ5~ zSctUKOvfY_tTQ5nfFk!Y1a?!Z3A*`?NFFQ)%UC>^t!t2xT#=(fz{r=J$9n~i{A~oT z(cs7txkd4(j-rn!{Xt|(_BZ(hlt|Ey{A4N9ugO`e@Mir@_VH@0 zamE;?eaH^Q9$~eUpED1 z%gy9(eh>HVF!{*QO#WsM?)9e5H|1}>2lwwcd2HnTP0NIf9RrSmH^jgk{LRQu>O=gp zowkd$XL<7g@<@ME;rhSH-yAkRk@PpcIVuic!}wdM>a5{L z;cwmu3r;-!&7r?y{zUM2N|KPu-{f4wVD+~dJgH9()?cGf%V$TezgY)gig@}<_Bqj% z`h`F({7ns?ig@~)ZBNczeyg88?JdUNVeYEl< zAC1@lO+H%8%-zyQ^X4e{XnC{v7_uj{!%wh#g6;6ph^LQMH|EcEDSae=(w`E;b-&#c zwE7DTo>Opgu=D;9=12Zc$NFe7_-Mq_N3*}JNvU55ED=6h34Ao->7x}sH*@)|e)@sk zVo$IeJ{s}#(drCdsG2&J_+%d~@;LUgAjAIlXdzI17XSmf7&1NqyU&ZVY+xV>Sk6GWRw%ht+tx5hEum79;G4;ICs2M&I z-_d$=6#TJHGxzZRY~efb39LW%9ZVR+(;wUZPhWOQe<+1N#<_;U>hCppQlA{GKU0S? z@^{SEA8UX=Mm+s7`@7Bs?-$41T{vrM?yG2j?@Lk!Hp9}D-?hy16Pl)|G&>KXV}pTfjRe{4AopYg|NyRAPq zn&gl1`oGB^>v&md@+kc=Z;paLws;nQf*2b*g+JB_3r>6t{#g5KzU-9#PzryHa}9&l zUv2QDJ~>!_hCUzP;bQ%q({jqj~7pkUCB|h07)8nWPd=2|vnuS2!A^b7x=dxzxUWOX{Hi7=w0KS`M zIR??bd?st${Kn(;_RP|LiQk0+S9F&zw{>!6A8lfe-(k-5sOp>b(bz9WnzD5TVwP92 zsK!U@L3!Woo>}h>-$x^7rN|?nGvoDtlaE$}`5QIEq?Fh*^X8~H-aBRH9^RiV+$nstJ7K|z zr;irRn#D&Vfg*5D;atOD^^b>rJm;L`V0|3=f&Bfe_0cxKM7V-?Z5G56a)kMSm6AoN$i;&inP2r?wKWifxr?Z z!khKS*azrejv)4abIhU|f2yO3Z zj}cFQ%)Un>rG6o>Lil49@W+U!KNdId;YfwI`swrSF#Z_ltR3*jh^If+C*I>B)On{8 zpX`q{gaWz*zJ`65$wDB8gg?eQ`|<*c+{+Ng-&>ihKgRcuRHCf8zw%}D%n#^eAk1%? zggZkRgJ&eHJ5eM$73w;&~e)?m3(C`_5jJBJ`+MB15NA8a) zT>m%uV->mn+%EkwZ;paLre^Uc3{75iukgq2g#{;`{+Kp@_ac=)14^d_&MBO07_9!7 zdG`aUPY%|fq0h&6mRWzS3H})I^v5>epRI{Ysb2`J6#iHx{4wI`kB!cPxBBVx?fo_C zkMwcQ+WWgcp8nXle0PP=$5V+<_Q%q83FxixHSBxX=#RZ3{4wk2vS#F7h9G#It3Ss5 zvr*LbZ_oJ*mF^zUFX5C|?DKrj*t>CIzJv5LNo6U{t?!b2i!#{cd=DG%9df_-r@nbQ zW8k}UY#*orm)?G#UtO;(wJ0xT+JepYUJUtnDp-~QV7WgQH~rsoU<)((gZj|M$$GDs zn)-X?FEedA6F={y_xzBmlb%0sM-A#4Rzdv3JInVBXx5SAeHl*>JPt74C-?I2`Khyf za=hSgPFK>%dhNblLaXH0~YH zd`Ap*vwq$?Vo;_6oZ@j{`<|J@d5fXJ)SvH}+0A=Hy+0O@1$`^URI8uw_^--w6?^n96sbY^f-v)S#Hr^Y`#=6`>7p=1?cm{ zb3CNVn<}jXdF?pje8(}sgXN`c%H$Xqdkxo?16%OQ zgJYrAf9>37H=1^xiJx~;pCwgyzIfh_cJMS?pY=FEpH<>-oLL@H#k7CyvyHep_HF!q zYj8+kjejGpAr&Agt?w%deBZZxJo~P~+%XqC#o52pcGIxm`g*^B<{wI6e_$_T4}Rvk zy_WBTtI0V&r^WZSqzZ3lA8HtW5BaP*G@vK)(RY*HHBp7~%6+Jh;O~j^4YaepdzOA# zHDrByNl-QJ>)Qxhe_QUp!&2`-4FShI+=C)7JZHTSJOY#76Bw{Zrtlhoo{LnifwwI$zvn82W6RXv17n7 z@P-(e!yZ)RlNU^T&qNlkhw&u`eTGRIG_waq+im@qF!IPfC|;{7;4qI6^49nj>s7s4 zt=5@Ys1AQk@+|0nz4y*$AL7p~oFDAG;muF*DdKbVDYjq_g!2a1JX>JBiRbl)V$J1F5%0%P$E&#DU?>RaXK~6a zjuZMQ^KoJPR+GugIpc@-$L>u>j?@`&E;s z57Ry@VI>f}`olhynDODK&iu)KX4lENSkn?875g|IVKc+kDQ3Tl_T?0eFXB1A;#X$r zSztTe;{J(kJA0FRDf#g8?R9c&?{OSmB*u}oEzDmF`(uNZPh1q`95H_=F8_T2y*qjz zJD}|ckK){nUawzT88gMk=ilizWst)+I!4%jEN?MlubzHkys~JNmoja^<~l|?fa4h9 z+6i!F>(6tB+LiU8K{G~7-Mz9$OkbLbn|IO}Dcv`=V=?M!$GBfJ*nTlay!vB|bje!Nat%sI^97h?`1-dmRgHy1p`SH6GxIIwNsggGTunEI}v z{8v}s9O(}<{5h!mFU!)~F7e0Z>$O<~C2Lg0>InR`?JBhb9?RMAU)I8pS*y;$-@=Zl zk0Pxef4grL{+de!tLz4x*C1^zu8zXr%8ml}QTSI?xKDqlN|mV-)l#Iaz+Y4;K@RH& z@$dPt4mW+>FLn2#fd1#06e6%R&3ebs=s39=Y`aXm_+3H)Vm;ZSzj*ThhnoI~{&~ z{i&~(dF|zY=hJ?;8CUqb=d2q8`QYC@Z#ruFnDg(Z{-k~BFdfw66ZR$lu({y}Js-Wi zT0`_8e01XJqjvyLk=$cucu)3?-fJlsr}EK9{A_-ELjQ=-pXyx}*2m>K;NSRLXYrhz zKK9>#!v~;#{>{yFi4k}a#b?L{_?95I3X*YLpv1mcTP|L75OEB_7@FlPF}Lg2q3{Q0g6tc-w) zyafO9BLA8??B4(+cEI){uLRRS>^;i!!Di;D>qkbcmb^F1wh2qrNSB}+rmDSm9{Vq9J3CV zbH6@#2KmDmgvuBD-&>%Idm)6+GSf$AYL9oSEo9lZEcwo>m8iE}Pjq6uL^+lfY!Ny` z6cr^Ov_%ca2J~aVU>e>zP?!lh<@9yR`*@jyztKzlB>paA+R;9*CflqL$8xtBCtiDC zEN?Nkn9p0jULd~2WFnrnAnlmB>E92y4aRQp?=Idh#%taND4H zZ3b`e%h=w_gzUR)9g$(=FaGm5%$t8rV$G7<*zD&_9~^u+Pi1d^22dOg8cha|Dl1jLD`s+62$0 zn7>^`n?gKoN=Xua-|t-bY077u7@gQlqfIjST!HWY()9B0xa!dk;u%Xk)99aY{l{R- zzs2ZJ&dWU3Ke2X?_+s8bu=pa_R9?@9w{;|c{GN}2c-piHgZEQs{1Q^PFK@@p+;46!vD&jKi`(>h^f2+8g?td-Oi?>JZw<`XI66%$OARhJ4W8CiZknb|(npxm?%ZKiE4 z|CWcI7tafI8T(-Q4B_TDaLiK{NZmH?RQtf+uf69tr@guz{VR;!8P+9k+fvvE@ECMfTi=CP z8*Ccus7HPKsBu#-7WIdH;`gjJw5-b9%5%o4^tUAGuQ2w_>aube+cefOZuI8>9~b)h zck4li*H4I9cu~fcHcqAAJW@Q>{sX4}SY5>0VAFC<8QFjGMgO6F&Mu!@{~Izg7DD(A zVVhYuUmt8U>PS25Ut^vO!ACQFpSWB@G%dI-6I-6#Soy>*gZv%Xye${l_Y3SqOG0P- zm7p5=0LGVmU+S+3)S?4nHx+2yYW)ks@H_A)FmtUTh*5x5C~ zYuOQ0dEZRn&PSPQ@a~dLC}01&da6|;#|QM$c*!5TQ(0ht^&ouGYwNQn(nXOo_(=;?;8ewQ_z4CBxaqR z*TF+5FXx>+@Qh+B%RA2*a-OdXwc_tN^PIj1121aLc$%qA-l_A>ekgnMB|mw!0rd{U z@^FZDf5fz*n0LrW4d$Kb$ILzCd%ZxrvB}sCk5AZ*GT5!x!|{I0Grrv&M#pJEejI>uU77Cb zA4d5HaL>4oUhegQBf5CPIN@R9cOM4N^dx$_H1I_iyfEXKl|i>W|P|SymDY@ z5%G*u%{%6?1AjcR{efqG%Qeq!uxV`LE}_3m=x+v|^|$&@Uw3px`?mfE zy?Ee(#4}E%zbHxnz#R0mjxnJ>CiG{oz+SA-zvfR{yl%rdmHyHs{bj%dK70M4zf0)v z0%B_X1OG?!@>sT%HR}1~wr~cpcmjTc6*uKtl8*ExL^tTB8Ekb`Y z@O=Kt(5hCQ6M33=#;NL`Z8A>Pe-8Rt$3CIIPw0<+{QssuX68>@S6g?+HjQ=UHRsPN zo*=ON^t)qK{yjf+=FbY_pK~AdM&oaWkiA*VzntUfUs6hRzcepywm78ang=0>`rW{z9Bz zV{kM?oI4O91Qh2mE1xOvL&vETxUUNwZ9el5$GOMKj~^J+t#FDu1ny>mqpkK}z;Vv7 z@|kuLHeQA-4w&x?9Br({(bik}i(d)p9!$`=EB*VdU$4N?{#zVvw3W}a!_e2u1nxHi zN1JAGw5?V?(@MZg6L4)PEA{k{;5hdEd;vupMEU+T>V|$?Xx0}j=c@w8G3)0GDB2DypK0#}&aO*{n`a)F z^7@Owam-u!#2t@g2i8LERwwlBC9sX(PUsvI&S$(ULx10l0b;k~D5?nPIvgE1hH&J< z$1cOcd(_2odZ3V<_WguxogPy8cl+1*A4}Jp&|Z{haqkznrY#9vdnBX=9`LUVK9;2$ zQ6`qb;+6Lviuz#QRTJA{i{Fp06u9P4P~$d2Kt(j(k1KFdyv%gu83N}SNw1)MDxaWA1S_ThbAxj5f%owpQF8_x*n zQ;#BJXpg|V)xFrG2popLmC8cSG2m;qlz}ohw75q>$KUQzRKHvwN(n$B_sF?!UGUR1 zosYQsoGJc1mm#k*ped8(Wq5n`C~ENJW1aG!nT*c5M-fMPxku4w+THT*mmdA*u?s_C z!^cvSNOH1`?=e%Gyi@lm=)RoQu3QbbQ9AL9%1>hN3s}cBclA{;Gf?)*|7HC-JD7lW24Hu6&*L_ z$5pf>QT`b8lT(}b`FoCef&j+efaQe=EPuodTwDGwQ+``ko0qXoBS$f#KLSNDp}!05 zcOmi`_dhtm{B@cBm&%4&{j6hUl+S8t9f7>ci~au7`bqc*SNQ$M z*8iBJp18)Ulz665zbz;0zd4TQD1qlaLkmx*!cKUx#vq<+jObb)KLwiYWL{LInft`& zehU5Kb92O_t~odeXIalYGq!ToB_(xrD^{%`|F|w$ea@=&bq&*!Rn%Y>BF})Br`RWv zgaBV0W25a%d#%)`;ltDl+@B0CgxpuTI%8?x>Ggb9St5iM%0S=F#AzY(V@8(idn-Y)}rVVY`BvGdrKp>$C7@$mBCV^O^) zNNL~(p`Qoubz%M21>J}7g0g^RU>~rU9j_@>0bB*%dCq6=c1PVA*iQMw*_!7JQSt0u z&0RswG~&E*#0vyoZv~Ip)p$23jtw}vag5=}Ulq{3xX*m-SNlN^b@1pia}7?FIycLc z!_(&5gPQS#z!d;T?vin7z*+gkFcg|LrM|;~gZr@)E)1NNzY)(XB8#da?lz^m)<8i;|crdDueUJ^BzHsBm}H8 zPlhkGPf+uUoF9!ZL&-C*xgOy6KMcg_;-E%^5Kx0>hE!`^Q1fc*+OTedp=R6gnz)M% zjvOiR+q4$^HfPve5A7S&yv_Dx%yM2Q^r_u~8c7HNRepR(W!L!mSkBWicGw4am-^ZS zF1}09ODC>Huc{3Agx zow&&7LTda{|GN2>p#C{JI?K?0yI+@A1+K3ofs4gLs-WJ#ZU^o*ki>E;1h(-myYbA- ztzQgko_id8C8VmJ_w%uwzXFbRN`~E)2o6SNeJk}Uks_zcu?cQ!ySM=MNWB5+=m6O`g=i*Bm_K*{68U8ds|TRiuwZR zDq7%<7r6Mfem>&HzZ_C&rq2`C3jUhW4#c+M*ouRFyadMv9Njp^aPVGDg1gv{+#JYa7pO3hsU^iG--X*R<;G*{iHIfkUJ^SYA zb=#>9P3=u5jlsF8$#zJFUt;oX{= zSHxvt0g%5sfxBDadVlNZBTjdQRFBC=+_zv)V`v9r<2ZP497h4x4$;lZTL<#lFYg}K zuq@L9LUvzHLU#GGkm?uX_#5Dy@>i5nES#iC5@s7upBz8sc`&w;QE4L|qw4GCP+ zqX~W0w}&9r55!%HfyZ*^nmvjMfvbEhsQsMS`?>?;s>8n~?lz1Mu6H9S=atBm&M&VJ zC_Q-&<2s)Ah-2Ie9Anzf-3*R%QPmScjR*mItUpMUb6{zfzB(P|6!o)MKi|%u{2fsb z^wfsYxCp)H2K2X=Q6l#Y7I@FqjbdT3)Vn*k53U(f1g;Or z)ZmMdP%7{-;9;Jo!aqOw{v&w7SmHMrd>-y?5cn?OInUeBpSiMu=Zq!3Rp@UO`0-@@ zAKP&%@&80D@dE}Q!My>2kAgp#?y0cobLD68g0aMp5s&>7j_omlZ(r}1AEs#5kPCl5 zj{O_1A#%T!;qlM?n+;b_um4O!TK?hhU(lwsV26Y4&;6HZ-E{uX`eH6D8Rm1up79U@ zz5N4oZTn9QcqXMPzfI#FMZ3`-LEd(uzYBP-3axE=;04Ip}8{ z`;7i5uzf;*^a6kX$F^19KD|Goe8zzg&k}+4x6h7S{W0K~!`3yCJCVjZjtl+cLO*}U z%H_RPb@))pzLdc@mHrWzA0dn5XXJ?#no!^Zy3 zT7OeU+TWPjsAc(!VLz)c@%b}iXN(%nKG#CzSZMqk_8IP9S`ck?a_ADcGX;)z+vcTh zw(@P-sKB)f9PPEuLz`^n+q6i`zt3|1THt7>Z64ZUE8nJ73S8RmergC2?X%588*Js< zv=)Io(%?9jX>6(E@VBiG$aeUyz;V3!@&k%vg7SGy+_53=JLJHKNkg&KBL>SkR{kz;0e+XZ=^H-Q z8;cZzV6pzy&Y%3v{TTZG-+Mc~o8fxA`=-br|7Cb@>E-zTZ6P)c584?zV+y}pOBE=C z^Cf+0*2RARmMX7J*$%d@Rtf6`0H|4mBVZI@r z{#NzH{#wlXte4#}5+{Ihs`;+gbTq5K9eC!?jUxLsUAK@Q~jv|A2IqZUd9q%?%}njzf>;pz3^8H1t@gq|9+L1 zj3vI$@JD~4Pw>ZgbC5eb{vz`p^nP2+I2C_|N&H33d~3O)ZX0YG+lcS|pua@@gF-*w zHSmAYKV?_BdHys_VT|B_fS7Xd5`^G0R-%Jle&AtPI_P*uG~2CG_UJji3I1`HqO$=De6H z!tPM&H^soN{ytar;UJIPgBU|OIrkNTUtB87H_sVL7q1Cb{_naF&pECcc+qIaZXRoR;ngP8dneCd%zfm8bKl72J}<2I>jm1Le6z9R@d?{g1>5&}INl#Nwlji; z8HVj7o^xLt@c4O*vR3De&);}D^E3838ZS)XTDypb7QyNtGWzjVz)r#1PTFVnPv3TT zG1rL+{T=auey>1oJn!-&r!LuvM4TQ}ck45GZ0X=(k>_{nd6&-rY4&Ff)H_$I{Z9`w$3qzLt) z9jP^Qt!)F#L-CFaL$$_^c$+o25yH`D##dP&b^E+i?FjwBr6*LqI)FB_zvnJ$GVLks z2>GBL*?yI6Ys<*YF~>opS)h4*VjPT^ab$+~jNt4K`g^9#mwjov*B-U#XWfT}G(om+ z@jO-NGIpQ^H@jd5sGoKy|BC6q^SpZVFCQYFaVk5s*w_JE{uOYNfja7c`F3a+ zdG$#`KkUET_}ovy z=G{0qd^P%N!Pac=S*$4?Gd)uUsx=OqZ_%=q6+GVr8GJ5_&vSL%nx<>eucCLPd20}k z4~~o7&=4FW#N=0=xQw{Xz%X8j<9~#Y%YMmpwjRfaeeW4lR)jEL3*7ew&hkkd+ttb^ z?htg49r)cL1K;cBwbQRc-unkBpVv*`jrV!Y@3Ck4&UFC4@nL?xuZ(+A^q-02_q;qXk->2q#*LH`mZ|$>}>2*HxX1Gro9P6AP4?t|^ z#~HGF$($c)CtDr~>T$&Oy)P)CXJSTCUdps%=sz<*+I^(CzJt+!?;77{8^fE|_y*kB zes5ledT?H3+pvY5fc}-p z#WBM0qYF>h4FgO0`U-uiX zxnFU=>8#XI)S9J@Sk;PWf^u*0uQ&cGA)DCzFW{Lw9Gh?q;7EgA;``ia+jx&MD0^7Q z-g0w7b{k}O+~Qxi{mRczc^3C?fvdPJfolh@sMEjRYH%!r#qDeQ6zekCoxpVfx9vy% z^{BzI+!nXg;MgQvw+Fp+TBr7VLaOam|GELVA7Bu$t_p$m`>4>j@!o{K&Cpl-GgHoX zKR@4B5=UD_AD>6KO1n0oZ@<>s>?6JBXf9u`)DOM8bNiUdzEj4LIB2t%BA)AWGp^3QXI(iL?f{V#v5 zx4}>H>~@P8k7a?>ZSzjG+ee@d-A|qJY8%=stTGgz+RDGhue`piA9#cGH=if^CSwp*v-=O5%x*qBJ~ z)<%QJ*JWy>z;^>L_kVV+|LFG!U@Y;y2Cs3iSKudr_eUgAO5O9`zAhU}{B}|P?E+u) zrRmSWsJ|_{*%O3V;v;yu5Pw5bi2)S(f~Y_6d_R;8Yi|APcAhhq_{I_+&)>;6UX#F2 z0RI6CMqIzg^WKV+vBdK`OFV<)Jp#1=?;9omd|zqP9say$MJ&6bmrb-&Xj%^ac!sAJ zcbcvh`o9v;2O!P1;lGZ&$$axYUBn2U73VWNX-FRVj?s_)*L2_9`d|B`Kkr6?Z!hz| zv*o-yf&Rz2+}8D?#>+hu$~e`$J8p_)`)`q1&&{@;<=j4K^s{peO8vkej5OAZ;n>SR zag%?B&(PGFcf$4LB-)Q*NB^7%?pGARI2Hc|N%ikG z^|!i+wZW$GePH88e+wFVT<9-C`M&^w#vcq{Io><`Chpa;O!iC^~lyz z%43{r{In*GpQ5k%`fXi_wZW#5?d^+r<5R<(OxG8K)|LaZ>wr15ey+>mG8{?v)?&C-Sz7@^_>B z65H8%wAU3F%koc}`g5+B6!;0?Lo9#^FCF!xE}k-$__R`=KlanKFD3XZ`Z|8wVz7*g z$1b|t#u6VE_^`k?059`hGy1~+63n+?bs*oH}gim zZ)1sXGkEsjHi7R3Ue>?-BQG96JY$I;6#54Rej=&-1xLR4PvRL%{E)y8349Uyuguq1 z8DB~~W0^i`@Z@h);3t5$)O~)^#uCrJ1jO;zf}1%NiSbv2bw4X?^PY5E3(bii zWXDDd?N^uStW);W>>J2A#KLX4IL0SU`Dv#nMftmdx4Ma|zVL=78_V=|Q+~c@t6h|z z?`Amx0BiqV{aN4p{y*lvKfdni{{Q5in>MYOAc*O>s;z9oE@}&E4vPsg3yPW|2#O%c zC~EE|CdddYiXte2u#9eEI=koy%k~NDETgk*t0@cep(gvRweRzJ&UxMUE7xsgUw`m= zJnns+^E&7GdYxbI^Xq-y?>F(}`TCEAIq9zgp7ABEbPI`$Wn>QU*RN&ZHSzU30zBKK zP+iG>E9fTI>8FhApE^$VKrFwiw6Q(+c>7-ZG5=~mop|o2H@-GL{DQFWJ{=~`4*L#; zaC6^Eta6Q&OG_2*A%)|*OX6~ECHh4+q;RVhj_WOn!!?!Y7umF1d^poNm6IJ%A%0wE z(M{r7O7wdPo>fw~V-=3;D~ZE3l;{_koWrEOTNJKY;kb4Z{eqKs$`bcdz_GqL*Y|O- z|ARUIk`C{$m|AG>-2{FAV(%yJAIjdEFpnjcb47W#t=EP20^I78{Mp%E!wj_$ft)`| z9L^C%zsQ=Ez2g;*^G1ooxgqt7pS(-qu2MM87bPC&grZ+$d>`(T{d_tP3kPiq5y*L> z#Nk{}^ova1hs$!=*v$Zay)O;(Gsfc_MBd9QxY@U29n%(j{WjpUXir{ zM>p+Vs&JeSP)_2QPyNml{+27;Lkh=vfW+fiFZxBcR^fiFa2)?74##-WzwD(#C!cwn z4`(`8DICXr!EtOC{UU2rxEUPuL528nyr-MQFHp%SFG)Rw~>N z6prJ&#Nik&`bAcDyANmn?o~LB>k@}!x9AsHt-}39;W(a49FEzdUt}%7tw367Z$j7r zErgrnxWwUDE&4^aOxc^Ea2&rS4##Nf7eDzLg*!muIBrWkj*X(9@1di-68*-kCw;p< zE#TO{xUq;4uwvktDEcXR6oatryE1vU~k!L-aq$* z2`>I>)DNF8;Ijz){!1P9VC#R3@7CZR3E++>ql0NWR_ShhJJ!7nx@+I@ex`}>`L4Q| za1Z|aB6>~TT?O`99PTQBo8P~D2KRq=gVH1e$4SBbM`9--;jDs~4c>#LK`>OBOm1xkMN%XNdUo+88b)#Cd?9qN0(D31p0;Z}D^{W7;> z6X(z~Lx0aR!iIBb%)yCbKQ$Kdp*XIAnhMd^9FF?{z;h3Y?_gXCAf{)IE?Ik+bCLrx zins=9V@C`U`z;~;ysmReWL&3Mw}!BG5h7WvA&4JD`m3-8&}WjbI_<5mQ4e`A<6(_w;WzyNP&mji-#|KbH;= z(_e-3Cw}J3-%H2%57#mKtESLluz0zK5){iw-owf3pYkf;y6^LS?=IXd1`)?{qnpIC zF+soJq~BoQ`NxD3)f14OrHxT12%HZS;u|J`37bhLeupP~w9^>pEV_e6SLOYDHlI6qL zwD*G~UEW^v4l%C&WxOwETkoF@d+D(F=5qsVk393lGfs_4*L6v!%B7+4E3vNrKgDTi zgRXPYQLRMX5j)m%3VfGq8n(W6_$;Tm{r&>`w*@kOR+xS94ciUp8S}6=JFfrGJU#uqk@nM$ zPOqy(zWIzE$B7!5U#qc{<-xHu@s!kc$ov?LeR)IDM{wndzPuV^Atf>v`p}R5H-@nU zm#S&RSVBCm%X9E2owBTly2v%YP2t-VK7sq;+V)kwlkTUVT;tmnzFpy~bMSBf z_@}Na$TfbU!Y@?#}|+9%ieRJfnd`b*({KI@P7^IL!8=hiwd@wv2!_KmfT z2w0@-x1jxOsv@6v)B$@cZ`R3oUAws$_6F@yI8z4uoQt*m1amP|>eV6UgtPyFnHtvW z;Q8iaE5eOCX}`;XXZ#EJmqSIt&-q^BAU_vk51zO-ZokVBruTDqI_$&&!pL=*Scmub zL#)Clx<}s++w0PcZzP^v;}-?{?1vXAd^PZL7J@kQ=Rf-L1J`&4+47W~N(V@;zZT$~ z;A8$WA^rSrNJiOT4*X1o{o(Fkb|p-%?XRhg=aOr#i_0&8^5-=z)baZNewS`?jW7Ks z@zypYtn^1Qz8d&40fP_y`tV)oCD-^Chxgy@X;Jv)=>K&29eeB#A19t%gR>?;S=gd89i=$Y_6r?ec$e#A{G`z^rl3Ylc}bA6B9OMQ++7`)8CJfkf3myg3f^Ee#r z*Fo2?vY%Kw`h8yqPhN6qFc&9E+2{QzlGv{Xp8hfO5Bqi-U;f>QYtN0#zXka1ASmEbWtz z$9{E~e~p>{kVd_hX8xOVY<=o8emC`!FxV7@bQkz_mT) z*V3;feJF99w|O7tW57|r_{othn9=V_daiT=KTt9;b!A+AZ`^!$u-FzTn)!GLQ}xK4%B^D@r8ME{zATMXRry(kyh z8&o(wALE=$^cSD+^S1)HC78Dmx7Adp#9zCd2RRS^IM>MYS)_Ew^Kcx5s&h^Wcwj3(;SCRKm#@05|tIkGoaj^n8JH0_vxp zX#ux1_@_g5<}`+Qdz>dY5B@k8pnma_55Yfhk1v-Vh2#7{;&Bcj`ZM8sKhqxb;VjQ{ zX%tk5ALj*hlQ{NMKi%mKeR)?w?Y=yBQ#g*_UP}QM>xEhUDd29zyfzWm;>=&8#)W>H z>15wb{nV5G#YB4>I>cEDcY(sOFJnC7*r$sA9^n3n%U{<1wAZR|EeglJQ1qw1ov>%& zK$p88ge)u#c8h?&G2oF6)1uZHTubo!VJe10I~@XU*{wL60^Hre5tECX37qKf4LJG! zO%dWR4fYD**6SLsJ*XdIv-0K%j?>NO+}MwD|EIJ#a&o?BoA0phd>s7{e&x&1_v6=! zUj{$GvN+ziYQH>kaVclopH_KZvS*>CoYZl6yw5gppKpWI&oGwt3jxQrl&Od;7zpnT zsl|I@zaLrp<{{7DLK!nn^b_~0!i`jmJ>2X2OCjFn;{B!fPqZgsk-~fs$8?S;T%tC{ z^#dnViFaPlz{Hk$r;PT@_H_Auw!Yah&i)r8! z*8Sq=efYAl<^%Tua7+X3vHW&axJ8%5xc0XS4b#bZ^D)Nkf_+i(Go5<_SAh$O z*V3FU4)uQ&-idyt*V7ipCgzoTXs=e;Yq&nPmq{edz_yW#w+emYYV6;#d;oLha%{lS zUfa`x!x@~TyDi1{GLi@x-4>X z*C*B#ngzJ75zW*bJjrg2zPkbSK&;#^U|2rNwvAzof&b^*UIuNYXGXP)UYEg|4-dW+ zz*k$ah1nDPw|ngbJNcBYN0wZVoH}^?iTk%3fRA_omiu^Jf1hASp2WK%dVRi;!UCpo z80n=>x=Ejn{ab!@`8;zx7L%upv41-o`EmC`L!C<<_?%!bYB%iPhI^qq2Vo)jAaL}q zuYNwO`?tI=H|tBS>xNKgdQn9Ca_niq{%tY#-wWKzt1oho?+a7;`L1;eh~H(PyZL`&x5c2g!qM(A}i$C$Rs3DL}UUopIPPQ)!>v4LTZLmA5FFd0=%?&0%vHO9TX49~-`fhux)U7Rkm#pu2iTLj z3e#Cy;bXEbOPMo&tb6MBq3GKtxbe`PH_HwvN<6QvPR{3 z&q2Jmh3TS<{^nOBrQk%mOaJuX_quM6xmyZU~B-+{OuX97>HL|VL(as6+*o>4{HIW&~-~|kY4Hx-NC0cCvL!LhI8@G#p7{~Vf|+q z<{tg2a!w)LC~`;itOAan_0`8`bq>4*(%gO5o9l*ANAixe zE~!5?2WEM24%|54^U1t^9I+3d&x!}R@f51e@318;l< z?;}yj6MjA2%>k6iIs3yHX5s6{7)Ctja5b>cB(cs&6VJVlQ#!}o@!&pZyR{0}Spt^Eb|OVC&BwBq|y$DQ&6 zI?40pzdXl&FYt_yZt)|O%|FuE74AV#L98y^gJ${%+5UjnZEyN4E%pne`Pu4R|7olNmz=CNLtU%e{7A@o1ec4&9{f6TkWb@}o8={&>Y=Fk_$n}qrX z&zJsT27H86zYG1BwqN}4JFgH;p3lBpU?5!VcZL2}YKSpR?N?|eMYRgO_}74~f&h3^NVj}Q<_ho zm~%$B!JL5I<#QlyHs`Au_DA1CybS5*9Ghz@WWz{3&`s*CIJ2g7y@m-$~KlBOlm7)Exe8!@cEPuQ=jPrE@wqn6C7EM!9yb))-z-ELQu%L0{&`Iay>ZMD|Dl^)x4(*S`E$072&=e0 zzW%y^XPXxK?Yn!uM>n~~FLd~nO(ATd!VdvIS-{}+dtCQVddW3@dBC%OTCVVwe;S?s z3B9M>Mm)L3kA(E|;u=x-M&Qc{2voGot;^{o*Z8J7pZ|7*HQk`{|L4*8FTMHNcEpow z{6Grr2j`TN2phnApICoOsLi-b2#0rUwZM<}cc#Ttf zNo>Co<;OLK*e^Rec^L8J`OZmJ=h$xqp7F&N-9jQ`9&NDCh*sI}`Wv1Tflhxo9`oqu ze*9bF$@5)*(kQa|2cGenhg=f-%%eHPx1TwTbYt9ph7g8r@+|Fj!SVm5hg`RxIRQTp zVRIC|a&R>MmlvIX1M%bL=})=1^B2YG?*blE z<1D><$7O5jA=mgt4sUHA!WJp~5b#s8Xq<=JsmjtzuJH|rdHcLp8*Ym2SN>)6_&@on z!k36A*Z2hi&%SDb!Z+sNXIz_lhk*h%_Pc=J1~Rd~%b~|zPds@(`yC;o*dH2){Yu0c4E8zx3@ZC=SU-G{@uxPdKP0bA zyO7A3N6Pdb6VqRnHnw)ehY4m(uHKtPJl~s@*&?!IVnX23u$MI*{=37zK_T4SBMeat z*EqQ}q;M}N9M?S(munl*FS2QW_u;g+_YPi4dtC2$AJ#FziGGpIRk(8%j_VwW!?ld) z7uiDK%5L@dc^?Tlwtvn&eH`rJU=A$$DVvDw_5s&?v&Z!+dz_bh9LfmxsGt7Cs>t)# zy`T9jti&HVew@$JP2!xD`so(jEQMRHaGb|79*J|+M2IK2W`+Cujy@jkasKLkn3n=4 z`bE~IaKBVI&RZo8=cb}x?5$F`3quDP40S32in zdJpPQ9F&+1T%yOpr6^`>4iN`sL z=oeY#KYTdT`Juvb-Xd{0Hxd1E9W^Li4>vGDh4^v4LN|$X64CD^xc8xO2Ytm$iQ_y) z;&3h^`bD-v;WqrLmlDVMiNxU?MD&ZSB<#1cU0)G!?t0JSaNT0;75!c5iT0cgaQ;H! z?o>FA)m}HwcK|2)i~kkbv!Ph_cUhi~E1Zn6>|Z$6i+<|bKM|e-`On@?wLYV=JQG<8 z^PRh?ehc%4$FaVz_i4(9`~Q_uH|?_A{;2X{e^=<_%tuFM!VHCY3-+C4ljtW&@@&ZB zrC7T^9@+K~hwoGQYtV%(nuIgRRlXMEQhOxKly|+K^O+UM zA8oEU1pNW*ZCFJO{vJ-cEwXgG`fV>X#WzNlzSSQ@_7QBLE);vfl_}i9DBLCQVK0Nc6FZDw#XAMI9=}ES_2XAOjJn6!D2CA%^RkuF-B}XrZmMI6dtzSR zEI^q<2PMqQjtVzz^B6aLc*68;<^4ndS7>VrjbR!Dx2M9@Y^QKX#`e<4%eEz0*DBn8 z3b){kF>dgv7&j00UYdaQl)`;e;i`6wamjDTxIVmtu6|S8|3dk!;TVJb9T{+_db9R} zNiO}&Lk90{TRGzW_2Ib}3tZ}6|4dc0ve&k2Y%g<6!Ysn`Gt@CS64`xWemUxaSba8- z;hI*W4X;A^H#aspal`-OIVp?}s1Dq(+T6T=^It#5JkM&-$GEp!PdIgKjvwz=p*Y5U z{)_i4`225z6aL%uTY2T{uIlD z_ow>SO8qjoV-wehOUiv5SDsiO_J#H3*huUt?CjU~{b)F;%POoUyJl} z+9@mhog21uQ9;*l#-0?~kQ`ZMrqCzrJ;&?~feaeCc)6Pp->9 zIWsQ5WNTc0eX!5AD{&`%aoQhrcwchx&h!v5e}J{W@j87I+MA zS^I|{yV387CeK%XQqf|+Z5;NQ$F#DaR`&aV|3vu@`%98npL72&GUl;c+3!~NYf*on zB>yGA)0)`wmi@oTm`6(V{us-T`(q`E$b~U{ELs@yIUSKMuJSPp!F2z_K8EuHAL{@6 zfa}BBhq!))W4|Nu*tdv&H*O;!fj)m>#;-rG+TF)w8|Ag=eYlWtO;W%2f9nTTc|~*cw01-&myMeWx$S^fmWPuo>_cq!&<-pTG4Wz0@iF{iip7JJZeJ&NL^g z+1p3Y7fnGPIDeCNE#>aAgul9?GYZ?o8GgA($#&Nn<~6ki`RnAfI)CGuJmwkMP8^8T`u{tn*6VLfu z3GD0pTh%MCeS~_*b)JU9_|GlvVTG>+zE~MPr)cw2=q1;9%51r{4RnCSejD&kFpfVx ze-nJIiR?I_CizuA|ENdgoF$Rhff<1h0#80>R#HmK~^7DV=T;FDAW z`rOfX%@Ll@eq~6g*lz=#@yBX^%;S_f@%_~)x5e$R%|xTl2kkI;!a3AOE@eXh9EZ1- zliN88-)AB>e_@pO{stN&FYQ)0g_*dMe0VSkM(zcs4-Ov&i- zduG8#*v-NBn!$r9dQJP@arw3XC{BM#VPt7r%5Sr+4qn3eT!*IC+E$KxAYpHza@f$Y~NW7@%N9| zpTg;geWvIa*-C{g*~?1{!Pt+2IbvTa`bAbYA+mH&$L}{pB^P0@y9Ky~Vcqr@Wv@1hEaQ;ar_^TW=U%ofas^>V*K#_F}DD7-zvd+i}zT#?&7+T zYcH~^Ij6K8?LqLzFBDJVP3lYF~3iK9Bd{Khd)~pSujVXc)xzx_ajTs%J2KS zuK>)jGRYw)sUxoWmvPK*X-x*kO9M+Xc z_jOPC8}I|gk)4U<8~fbag0GmTu;>0|bPUhZ;5doxAsS{ zI(X|=kp&dw*KCcGB1@f2FX_`+vo&M4y#c%J$K%>8Pk|ERYEp7M6SGg>-lt& z=bN+fo&hPFf8gntH7DIdMZw|b6-W6wJGu~4etVI_52E}m@R0z(ufO`c@6$`JoU@mKpltaE`(n$7`v0s9aXNzi41zk8 zeT(wb^`!7Ma!BfrdF&4MdHr-N`x)SQ{Y(D$`dw=))sW}2pWA*+X=E8+ zY|$+wGUhQ8?AIeOqwHJYr$9C#fd0K;r@QGS&u2gP`bh`-W9A?BlVA7spMvh>jjH~E z{~Tme{;wVWn(M#F^Vu)XX}<>T5Ad<;A2#ZO{dO3tQ})xFMD_>3hiQ?ieE+iDsE<6K zeK}|^^`8Nr@!dud9g3v(p z;MsnJzW(GsXVOis@g3^=?NE4w^lSX@pB>nocyf*JR`_m(w>kLE6>DB6o?PQID*YLS zPfw39vc=T;^KCb!k6hyi_w((i31Ndb#qGyz>et*-hDYsDwU~JFeDx=LCQ^SEc*Y;A z{j!bJeZ$-DM*FL~S=ld(>@mP^LM5Qxzj)YRh3B;&GMlvzJmXL2Uk*w8VID`qGhHdf z8NoAM#Jgv@HuHN{QdTE@?V2Bo8jYun_xzI~koe9t<}bigBzU@oM&WT-iSv(P2BL(C zck>UVpZ8PPE=jw;`i5Jfk>|_*;+*R@6Y{^2hmZQt+DDw>V4wLPR`w0j&pjVW|0DZ+ za|V@==No^A7zoOif5?B>VL=4^*_+?)VZQY<0;Eq|G+a$%8za#jqg6l z=f4Ai-Pk0~)<4o;0ojHD^q6H*4r} zNmk+RS2(U47*68aK=gYF_9+xDvA379jdH!?eFcVV0?|*|PUytD1&4<61%=}}fpJ(< zoXd;;fx(1rD#qDT!68Ovz`6Wk?go(~&Vl)EzTkB%xn<=1ESE!+Jm}eMLVd zmFTeMDBKAO$GIZoxO8&P7UEHI$mg*4t#Hi>$2lJ35XZTu=%-|}O>qxN;aW7VG_s6C z9Oq~~$H)1b%0~V9$l~9PPd5Y{%Z2lPFh`u*q)&=*6jl+3GG)2Epm3b;K;(#X8qqJZ zCS~s(h2uO&;&3kG^oszzQ{grVF_})zZ^%fT!-#$_!CXS&cC%jU@~3c|yNG_lm4|&L z=I^k8bA4zSPh5Fo%#inl6ZawNy$-l}Pxw91;}nj445EMv4Es9nvpFyR{)Wz#`&gM) zk2^htID4UQAdY<$^#kH)0j>f6jqFQIZ;%%u4rknyU6>g`(X^4)W>k9X+M?cHQW0uD>8*${zB5;*LfAlXz~5e%bSEioEP*L!QZm8Pd~#3ke`NKynp0hV)vuEW+9J!rehE~%ac*|d5;FT`JBsQ zaE8@l9#8~(3xhq@p#DxnKfW8Xw$+HRv>@BH|?G3_S%YNRU+-#zYzZ7LfY-(GySN!-*2!4m6 zbSn18@G~HWk+c5(cOSY!UvYJ0>1LYjwV1cu7+LyO?O$XcL0syie>#5a6t3Y%g-%Xf z>O(wB`JneRFP9;+@?8qn!-o4}o(4SYPk+Cn7~ijGdd%ZiJ?^=DKZEwR0geQ9W|eBk zwlLw^JHu%21=wI-t8e#x+Aaadx~e(Ymlfl#LfKV(%lnr+P-H1%`81=g(_Wpz4ICNc zRs+{F$NOmyQ4QN^G2AOk_M_L-Y!}%Fe^kJl#r>vr?ww@+`f`D(VB;Gn%~(%7>R5*` z-fy}Q2FCkNGTwt&d(cF?W?E$HzZY4r-rsK;LVBr_=_P$S_nS`4`%bcXxbrmnt-l{V zGgyZ_@%|J0ET&)Tfo@XoTW1ue|LNaJwnOA)tcsPu(YL-j`mEl6T8lK-%)DaVYSde? znSeWUxSr52gN?fX#PVps{U38>WEnIbvRJ>>Z0BRT@=OE&#mG{!3;)KTKFmS+PLyKA z>BIgR@q@r;(DtNl5nj4_vs;8mbOc(V@GBJF%ovS-D|-32gph0e%79NGY^B0m;33M= zG1nhlMGv{g4=VeE3ZKrgfAam;Z%;hA#;;cR)e3L6AH9G0hr>3t#FJ~hIUVyl+<&WN z;Jp)E`SJc;8uiCA9S`YuqDlE%*dGs;aq{8QpAetnTtEm*m(tsDDP5 zywWWsGUl;A*iRy`U)i_7PlQZNy?EZM-zJ_sU;YOe2$J$okHbFmI2`PEps^1t`v!B> zVd(p+(~5LFd)<-28COaWu>PCF#Ul1C@C@FJe>s%RKhjwIZ9jg@LY(4`c>FMxqwhcM z|9Vd|)sRb_&|e+!>_4j&-U83^6T0n{#M5+>YkX6{Gx<#lp9Wsap17|)v~UmM8s8l7 z6$orr_)L!dlJD$wFY)9Wzc}El5w=+2&5r*5Ju#%mH{ARK;Tk{a@cx;@L4~)#Z|;!( zulfU?=tUWUYy6y}efhKe=G>vm|I4GtpVuD#0;3r6QTVX`pClgp|Ez!B|1mrJ{!hv< z-#h)-#sPEv2d40ji0?%IWr3$a@N^65_S1f-zkb<&wBHk7zg%lgflT_33$A>rm3Z=e z*H1$*B<(j7+OOCmRwyfD9IWHmf4hXDhKYCgpHP0BaBL7jf4=$)?)oLq*MD;jPs-W{ zo_^hi=_iSO=CLKzAKPDxsy_?-1Q*-?rBk;qq>EhFUsu4_BCJc{%`X1_w?`Xu>31)l zK{vU^8{9Zz{#pK}GtR$B{dfI$Q%?RZ@Kh;zrCUg3Y2>jf*tZC5Qufopv;9l^`Qn>f zevWwZeDz(735^!4}tk2iiy^k_U~?7vGxAno(|O9M}llpozf8sBty7(dZao9>J2 zKQlA3mjirM0R85r)g6M*UX(#V`y)ByhuJN%3?8%nql`vE`(@-2)qXA7ZwVCyI(EOW z-AX69ZogG?eg9_>R&{6G|D|)<|Kww)wh&LQ@$((t_rLQMJ_CFi0fF{>aizQd$Tfag z*&kMTvuiZ!nUP0V&zMYA7_9^EtOwWlc7<|NO9v6>)_U<_SY2b?m4F2TRT{qB6uJMfl&+)ra z;qk)zQSI;LlRAGuJh{dX&-K@j#kDfrt*#&7_eXpgKdx-(yM%c1eErAToc_yvC9;e^ z*7d_{v^%7K8sc`V^rvB8=l|%>|NeUFBiHF)5%3&8Rw#T1_Facd5a{&Rm#GWsB+pm=^30?3-=-?EjK3NGa!BkmkI8!9{y0}j-V?V!6Z&s~4j%e+CEet@ z{AL9_17|6GX7|zcw@2|o%ZMk}_(f{`Sfs{}4ARdoS<1hwdhG|qlXUv&&o_P;*k_pF z=@!!X?&Ey@ClT2Fh^l|sXWJKi|LR*@`yj}eGd_Pbc&7c0C4-VK-pfi}72hV6xGe1E{#Ah2KI z)4-Py5NP22<>hpeYkc|fe*9a6u=0E3>o)_u9)D~1+T;P^$u+(^;5!i3t?*_~e}0e{ z(us#QvpaHJ8K$#MVH{`2_y zF~I*f{nr4MgXH?Lz|*huKtD-jyhgi&{dy#-TiLg`{x3vasl(@ou5*_IdA{p69Wo{M z)4&5h=J>@t&U59La%=5*s{Athj9!0s?KuAi>Lb_XH=z2z0oDK6y+`+dC%jm)oOqJt zpZ4j`*Z-w~XBfJ$kC4Wfo*K_TN`Dd8Uk3SS`;)Y8@zNO=QxSQ-^2=R6nqWU`OQk|& ztRoxjCy`LA?E}9TFp~oAtBIRi=_Jo*e@)1!)St1DMRYUP_`^JosPZ4traczzy681{H^`(%3sdkOa9Zq8<3PW-9jSEpp4st{Za(BEBhHc zI{zQ{{6k+*F80knk)=p%(Jdr0=CLE#uSZ~qvTuQ(A^`9w?wjE1--&VxmE}J($i#kn z9QK(1Ao z2ko?|{=@7$di?$B_wKxsYRKi9q`yb?-#rR%f!E{5p6M-jXMA#vFFo1!{~ZV`?Na?e z@LLlQ=(L@7{|cSt8s8o88H9B!dVL}`x5uS-&bBFT;m56 zen8#qY5o0iAdp9TKg0F(vL)Q2Y1Ysm9me>EXfa{Z-){jt`cyvFB*@?-taQRSCL{`LI% z_Ahk0@ta(iU)tfV?L+$03ZH@fgG1WM)-FBy4&fSKrOLlbmA~D8bou8S|CxU3%vb(t z;2Abn`4eA?BO-498WBsMiOW9&{NcdM9B`6d_hsrM&sY9+IpuF^BFp&MMng}aZ2hB* zYESd+-y*EGTeW}K*XxfBU;fb5Ke;Zywt(kY(Wda3gGTostInSL9hxWC_&KWl=jif3 zV08KCUH^wRmbd(Yr@gVtpKUyiN5onFNyJS*8<)RD`Eg7ZdUJ;de@ZubzV-h{#{W?M zQr4n}Tx6`{j$l6nd55x}0e%K##rTmHeERCYsjcveC#$e72DV4rQhL)o|C`j!0uxAV{RIP5cz-NAkb zGTN=}qyAcvCK*5O`r(u9Oh0+P_O~FX{iQ?w3!Ye^Z2pnP&d`5VAh1*QUk2@Oq5#1A z?zrk#^pZ=R(BB{MwR9`I1zzv}k2FuZi}A@de#+_b{A0>b;{G=cd@%umZhxbnTRetb z<7)zb8p3K6K7;&ge8bV-dX#u_jbEg$zeVc$Glz}7{_>4~Y$Mc}@A|XAGfdhK-9ozj z>n`xuAM3yFH}UnCJ~*;h0I+2M{ovhQzd$E>zWSF#b<+Mbz%%{^{L7)NeUwpSC_mPJ zqbffG`~-!2{+ol|@yk^GFH?AP$msf;aO-bQCZ1g5 zhcEKwSBJ3S|B1`be9PZIOAzG99xXgy|1~YA|FFO_zLXW+LLy@wQI;&Pt9O%QxLN-0 z{6WC$Ylv|jj{VFy>@$zlNBcX{0TTPBF0%CJr9AeBLqusmHsB?%T93%m z%6_TByZrx`_E#yqN#p$AIP5czc0m}w3vnIx$N5j=`g;yKw+(tzLpz-kobjQQAmH_z z0G=fI&xGq&u0J2@|Fijr{nerUa{jkkwO@<&EAfcBzGk=8!gc#iH2VH;76KCwtNsu8 z5&{C9xA2+Y(n+rIHsDhTvkIR9ep0}aP2KCvFALZBrhvByY*Ki0=;;1?LC0R*#FJ}$ zcfhl+?N)dTyl!T1?Ka)@-{czK6Y!$ zFkOc9lcZdTFHQUQUy4MPu87;eIXtrGAnxW4f&1>aytptp^S1xqU`X1(1)lNq^

0 zxJE`o`Ei{*qRP+al;39U$DT%gVVEJpCU>C1?2SCxwV5kHptc z2KdPeoILs10eZ>v*_W|S?3*JZ%lP9V_P_gth{U`8FO*-t`pd0U_WvC@<(~<7DQlgM ztPF9I-}m+3jtI$@;`+BpKgV>*SL3}mvpE>@eDjBotlvWZv$hBhB(gN@&kE(w{%@8p zf8h1?_pKL>$Lz)!a$Wx2A^p7n->uT0Idb&<|MQPo)iJ%765(!xiGC)aq>;@c0eAA>7I+OI|VZ3>aJ-+#P!-Byf3 zo^Sp%#6S@7hSzT>e`zZ&F#L&(b(~W6Q_6k@_>B->>^J=B{<8@u&u5=|BX$6P~aCs{o!P?LPxN{kjjM zpOno%(|D#IKWiAUG#)<<@SmeB(C?nQrHxMVV9JHm1iXc>M&T{+di>q0@ai=LkZXKv zz*i!yRpHICqx-M-yRSKrcyf(zx;(DGrdQ(fGspP(tJL4UcT8JAJbAwQo08LhEbxpk zWkt7;$XG`m%6^Bkp9Y>~FZR1HzsMCac|QB89Q&DZ*k>O5gMCZ`O~10ALHYd*_O}g* z{{DL#a)>bG`P$D%_Aif%EaQ*WewfFlq5i57cd4pB3;TNgGW4H!T>X>l`WsR0Z$#nK zz;DO|1iEU@H{AF~uJQIPwqI-KAfEkc+W%hBs zu;Fb^5e<31^2;56%n6ZY{A^j#6G&vt<8ZLgYh_s3x4bzJ`D zuW|WjfZt5nKe@K*T_%M*U;E9Se;L$2<4a!Y77`irm5+rkwV5>LZWn2-FbpT)#AE zeEaD2!<}26^)Mmi8c&&3?+;`9t>XOshR8B(T%_I~M!fqb{W$S84Uwgd>G++tFI|3n zg71H%o5W|_b1AKGmn$5fdzZL;wq5j#tViLNC>)=6mpFW;UG$4=7`O^NSI2Zdp>X;+ zcRtH5`UO{U67J)?<#Del9G`EOIDCek`o&LP4;(q|{WIVqxcSU37^uMT*ec}wB=e5u6YGo+$lWXV(Tj;Wt}+>B~3EhO79 zvScJaJ4*d@3(WzJZkFd?6pqi6Lga|gj8eb%`G0wr4RJ^9=Vfd!W~a!KvAytFP0>%u zS1`czDto5|oJ;4IBg;4>KI16w)bSGh&xs+z^&xB>)<|Oe47jQ02(oA+US22S*gtX1JYP&hunCUN+Tn&=l<2DoMOef}Oh zz)M~J6pqiPiGIP2D0^qS6R6ioaORkh2wK-5IN$rXrfwr2Vnc(I5P@_qf9G85xK`=$GmX4c|NEy!hL4GRC$uFm68K^YBp5x zhx(YV{$@o!93nm&Bl>*|;DMu?<+6{$@p&1D9PybL6XJ=i3I5dQy}e5Uj_sPyp!hf# z-|;Mp=%?&Ow9ii98pAktxx&e_8*JBnhK2fx;kfzsL|nVU&vgDsr8B)(WFd0IXHTf# z`}}`-llK$%S7ndST0jIUFns1i^iwkMIqbbC-1`bA&o~grXEj7WahVOVX9!&N&wRa4 zK8(^Z-`zX1bQ8yC97I1Q6M@Spds7sS&jcU}2;~VJ_0vbHKzWWR+)f&|Ph=T~IG*Vj z{gk}GwdL7Z>*4#oESJ3lj_oCr#bKU>@)Z5Vk>&xnWUmXY8q8{N(B2Xa25JIG($Q$Pv%hQ@{85{~m?=wZiedy~N|0deJYk zVTDT^?xidjp0oEp{NpUP=oeYVxsj!t>71o-raH0^IpP_5(J!)kg=xpVei9ri?iC)@BPM{u>r=v zX76YImIjZgx%Gx~`+z%Bo~ufGo!j%QUFhd6g;7V+pK?T+E1 z9sb5GJZ@udhJ#$WC>+naQa{5;HRuO>;cpA}rYW49ZKOS(QKf!jND=H|@o(|(+Vxih z&ei)tUd}L{Ev0_Cg{liNmv`qF-d43OC~@FJ(G; zzSR3T2gmv^#1q+|!nFmQyB@wNIJ}P=XE#MZaR+RS_22nEoY%wc${x?7Lga{NE=9k{ z>J+Z*+g|Ffhl3+4ad_5J^oy)j;jU0Pp1+hhJYy;PMV0~1-sjurzXOi>lQWI1cb=^j z{lvYv5yn4dZ;PY7HkZyrBI|v)W?+x{#ZR7^kL%$M-#!miIG&SZIEiQBM8B7yO9hT@ zmS?-dr4^26;HV!_vecn)FDe|*#YrTdeG~m68&J4S=X$Bj-=UF}I6U(v`bAcHfe&Xo z_fR;VgM-Ks&$@|zk<}>N=?cg5ZxV-R+(f^~(!dR1?nQg|DICweNgSSS6a6CVQTA3U z9M8K+9G>Z-e({qJ!{79PZ!eo2<3rqaq;NcoCHe(habaZXW;)vxPM@#h8KU9i3tT+L zCDkk3Qvv6$zat{caMv&4?2zcE`EcfMj>7T$4@8c5#)ta7&;MKCy0Dfc?ly(vxgQ?```*Bbev!>r z_NE=@rLLdP;xLHdOa=7|CXM-gx5DkFa6AL!<6%4kPV`fD59Z~o74ATV$1^94Lmbb(h<-}W+7x979NjFJvlNbJMIZv<8>_%kKYgUz zF%M~nf8nFPJTFr?p7CHD;&|3X^i%RYhM8XA=A&)X-eQI0*$jw4C>Na3pnm#De<;G= z#gWCoOXpIBZgx%18`Le*B@|fXFRV3<_Y)2MZbue6z=MJFLmv6Ze+a= z;}~$FUu2!YHQeUQWyj;alsKNx@II`efD`>98&vl04mdYHWO0~>;OqhQ3+5kilz%s} zot@s^6AH((3O-(e;h721PucO9htvVrgFQpm!+^r^i~&TT0>iTo)K4GjOq6G9@DumG z%AYwlvJg4q83pS1KL4MAzxgM=KfCD!FLULha6FqJ`UN`@^w8c*3di#b5{G9Js9*f# zsY@bDPF&fEbcOj@7Kix+&LW6@hL>TzIS;soLwtGe5^ye^$3>QLNIXLz`n|-M4&XY= zeR;m3?D3wxkAr%^y?g5Sek@zj>;{6L>3mb+c%A?v5UxMqsGmO4PPlGM(~*VKfAY z7EwUB-ht~6>!b3KB6}kGiJo+15$Mu+s>1PJFy+MYo;3Bt<7hw3=ZDjgrHAEmfx_`V zHAEov6TpdnO8$n5s`y@H=_c-n0SB?+`2;XWyaz1$MOF{osvci1iIcpPINlfbKHTpG zPV|e+f7gX?s?SS%_k{Em0WcqW%fJ)(WoASc%uyNMiOu_#-WUHb`&ofqgI^{3*#`U; zKVOx^sJt!UxC~v+BS0c7lu{-%GO4f@k#9{mw|PW zrJGptX~dmeU}qv-BXFl$U<1Dn{08tVy$pN#kTWjR`5%?e?z7``wm+X>6i3vZj?n)B zPXTcoo=lhT|K?p7<4S)!8h6zM^nZdwnNLx;WID#RzZm1DT%54|D08NnHfXOx;bvYI z&g0{TC}!QL(bR|FmNj-PD791UGJ$<&z-aY)lCO83Y$vFjjxYYAup8kTQ*E1-s^4WA600zjNh@LT+8ys6WM&EV-We^x3U%@e|`8Z{sHz; z-zcz+7!%jrjy!|J=F*J|oqoold^&!uA^pgf896Pk!(r6n!0F!4^di`-04~$yukYIe zj&-r@wuB33T_o2gO!J-IzijtnyC<%}xxf*dLjFoHr>Gt(u!&yuk+`k_cf_#bZ6a3} z51s5~PIrgb<;Ia1;jM+TT6*mk)>=(8_wuJmUtXzFxv`kJ;u5D z@PBu~jtn+)S|j_`=}s%YwK3B?vFFbF*B)WauU+W){U2{cbTW^l6j~c#*g7i`+^^iWT@1dMynoY_ynB&2BGH00+ z%xNw?O)r(141P=>TYeq#!0(^1O~Y%X-03FuzkOz5`3N>lK{xUbM9)g#z}8zQpVjZ5 z?20sB*>d)})u^Xp6S?n_^xhp=h>e+C>heY>%cB9`Q=EdApli}Ppg+xVESJkvOT ze^q2DnZ>^`s4{%NqZ)B4@%;|s`TdUCp3&!z*Qa6{#zBkkf3Sa>c6Gqx`xAp9{n8%S zhv)a*x%T|j+gErJYV~h_xFkY zOt3%Ep-2CTede(}*zZ6=w=4VR8vp(6(5;x)?Nt|03wb{Ki$g_;eG5F}kJW2)a$SApynh||ZK(uw&*InHy$k<&uK#JFptAOXXMFY{xs=U6(m1e7{Qj%~ zJbz3)zyC0JALa%ChHRN{U-4TuM@Je@fqwp&_|CMk$@?SAFu~I;r19O?$MxU+hRXl7 z{`o1X|ECuI*%bwOzVe?P3}y2VJndx@O;4b#eUwpKIRDIbY#Yu$6F-RbXAqW+hp_*f zz5gJX}5t{Nn5fuiTnS$j5d41JC$bTl54H z8S_}D?AIy#{66PKh%fEu z@_gkl@Ba|{7I?;&ywWWsGUhRPqqlDnnEZ#Tf8e(e0C?*bH!(S$q)>vF*PlFpCiXMI z{+RWTIQ7AP9dy+z`v&cIFXoA zFYudC321Hd!(D{uEC1Z}%C zC)})m_Fv|P$in-vG`J}AKPdmfp}74e(f{uYw3PpuTi(sf(U6a){5!(@cdYVf9j9IX zQ|?^@X`O$hzgVSy?a1^G=q1(dVYm?KEINDAhP4Z7T<_<#ssYE5&7q8UC;Tq$78=7b5x6ai{5X{&rm7+ z&g)|Avk{k3IL@hjyaL0y9oO~Vk9`0X$b8@o_5+A}PUFISi9IgoMDo2^Vh`lCNgRl{ zmlcll6o^1L=Yg@@>GuLN1qHntxbC#i-#Y=v=}S6`!?=rUNc0D&NiK>k-L$vaDRlX1 z565M?NgR8rpKhT!f-A-IKmq6K8)J=+gUqnc5Ao(nc&HR2feWVRG#r;2p zyF=mFmobj32jE0MB~9=)Dcp|(&ecN}hyD-cDf)>cbt>Gnd0s{w`$zBdeW2(U*&uNJ zXZw1;SmD?&N*wlmqF-d?VPA*kQgy1Avi{gtcpvu2(PvS=_v3uz2G~ylu6GOHuJ;Q# zrc?KW>}y27U}YbP_I|2xR`s9kW2j#+=|bj#B6lTj`*KIO?zfu-qGz4g(!xtK$(LpE&BM1aApC zihw&?rGwvYg~$>2hs2i1mMPo<;AodWjY|P1`WJ_CT%&L;z;S%b#mxjx^b4-?R?Jh+ z@avH_;5aAE#Z>_(`Vs7?0XRB%PvLstz&?VT1swGw$Sm2q*zv{iFTwsZ%jI_9%D{8& zS>QxJpG83wvqIUsAGq>7xN6|2A39gBZQf6NKLu_Ic&@z~;6y)y9aRIDn&->q zN#K%@=HhCB6a7-23xG?m@cDZlxM_KCb-+KXSLfuQ>=@1;n}OoDF-_PekkXg^o|dbzgmlPv<{?OCc;5Hy5}?YK$kI#P6K5 zows0oqn~{U`E>mL71GY~Ufev{f;n1)dm0PAxJHRhbf6EzuNl8C{1|V_9g&@lAH!DFd)=i<_Zp=;u`|Yqkap2ceFnt5 zlm{Hgh*Y@tbW0yA>m%+KO-$wYWYyvO^y{}$Ps5qALPyA<`%4g6~Snzq3j0>9F! zmAg}GxbJ{N)zk}d_L`u*<+pg; zEef|r;p`s8hWa&*X{4X_?ozm!3O8-HV#DhRQL^@Ee;(?VxCa!jS>dXxijC-(_P6%A zxcu5*#I^e>^dL>Vw_pEbV;AAaa|b+=(10@urAu%x8NZpoGOpb1hd2{ADUt1ac&|}( zGkv61+>@njX;qIG17|WpL z?=fz0qasteIxd4#Q3kZ%i2jzia)s+0igBj2$ScG@?R{7Py}(gO+)fHtbwZ3AekNfS zpB&pe7jgTsex#1t=aAl2D97SL+l@T)JW4&rRYb{4#aP3(0(Znq3tjlKdm{TD1~nuF z_cKdOC+;!VRQho)uYx?niaaukpw`Wkc#nB&xaA&mZ~NHyn0eo^VrrqC4bJoe3i9`u zYwtxLLZ6d;TKAYw#a-o7&6)V=JIuNFm%EWx-d|=P$mB|y(@kpH?X<$-P!`j?$P|Ll zLcZx;UwwR5?=NqFG*2BESXYC5qbGEAU-4jMAs%&qndQ-d`@3s@99ag9hb;DoW^d(V zy7Elp{`7s3rDOvC#-Iv!f7oVf5vKz8hlwA-{ow_DzAXv#U%Q=mvA8uaz1i>2^%r66 zd)qiX?+?}AkNyS?@$(__8_&1DNGEx|{ke{Wk0|Ny0G^VNEjqIVQ;xU?xEyO=zF%e* zB+IeCM*JZ1zqWgH`nUbtvnvTAXP+fBqV6w^;QkWvyuZ}+Ci)IUlDHp~y_~(2wSDT* z_m_z8g#B*d879{v-9j2aczY;61P;Czm)`=Ue^!P-O4lUdH7O+}W=~ zruucOi!hGAFRmv}1>_sx$8nj{d>NP56Wxh<_KW>B*YCsNjbSfG#^u#WFLf3KC7;gO zuX8aTH<*(!GM{If#ytB~i#%{_=6O6OS<0PmQdR$%h3#Q%{(={|v3USEdTR^v*U4vf zY@UoXe}0E^*R4W56(c9Ct0vSX*r>6Y<-xJJ z``_K+$A(f|@ZD=Xo@49UpJ2@cR8VWKIeN*_R6?F_Y*-Zxg;`_fwUj*#y@m$PS5{fTMo#lg|wO9&sC<=|gCb_3eE)w+o!;7a9A@ zUaZTUJ%wXEOB~jv=>LDreGPnN)7AdDADPJzq?%R`S#j;LCUnvOJ47^LMP+@JbUkT@5;?d z=KA;j{bqK4IqU3?XRW>0-h1tjbN0CswsAXq$F&}H)4ok^Dn0kahryR)5%+;P2dL`B zz6$0hCFt9XYk{9*QRH09hjm~5UV2;|Q)|*_{T%<2Pug^RADi;Hw&Xq!`7wsPwo$wa zzY{UxwEV*p5wCZd^)LT5rdxyhS_=7xOzdr<>VJu6 z7HFhoDYo}~3}ky`0%!0qm?n-qXb(9aZUdU_ct{&r@GQy;nuqcN3TM};ZT0 z8_%Cuk9x{QEzLn0hNKSFyU^4J$HT;=}({h^iKB>P8w!IRE}%ae&?6+SGw^;%Bqr^Jze^jLr1=o&xNtC1grDOm0GemrkiYfwGiP`Pzn%5*xhJ2Q@>{0W7=NPJhvt|; zJ1@`hxQB1_Aq+sf@ZJW)IL^q~H;y|xT_^I^lCbO1(^cL^J-c>gt4QpCeUUlVPiz>5 z+y{++%m?rCBr^~C#|`t4~{YA zzYY70%Er+~loZ;OMxU?|i7ahI7tS!YxbreyowH1R&_?TXjx*(?ZASg&U(vk*)$`6!F6-e;@FA ze0%uv+x|*cq;hDlV^y5MN zbMBs-ME+qnm)?cFy%^@m2#@2R{JR`~mOp>hRz8SvdDuf5bAF>ggpyw|o&^&3tirWF zoW|t?*V1GCf}{Lp=U9283RnI_8dm^Z@oy&Mn31yUVe6qkIk(9$J|AWnpGh%%aWd>9 z*kiu7N$}1-M_u!DntvhquYP7S{|1ytuogA-%J&2|z{U^$p0jO?;ZKD9>%S=WJKwti z_WM0Fl)a`xrwu8YCWbt){4w^MeS7Y4OH+1t8i>bzGxqCI&{9x&|3U0`{5N6q8yEk# z_B(+Y|LHjQcp;upHDE`qcGCTqy<@y;?+C9F;Z5EW?3tb7PD$3{PM&LB01l^_xS4GF z3gn+Qy)PN|sROA8-qS6vXoys~b;B+;$k_B4bU|-rD7cQcRGYpX@?19X)rk_6I~OxY z_DjD%?1LDaF1C;QpiS?6ChQ|7E9b+eFWku{HTr~2Du+#FNG>m%aC`?n>e3KTn;7j2 z`z~mcBnV&rAL5t(hxoq#5a0V;cIA&Rz%vmK`a?&ICuW)UTr1;&bj}$x=$EAN{`nTa z;$z^;_e$f-FR=K5kAbiLd>UVUp~Xj~U1pL07~Z+!8JsxE82bp%qmp*r$@j9jW{tSA zUwHNBj^{0D(3mb~0Hyu*x%NBT;Wc63q2s)P?|g~;DkZ;n;N!{9cV!j%8(jaJNj}TS ze6as5c5^D?IVUK4KI|iElWuQV+(y_-yv2b#d-i-0e9KUWYcV(Ky4>??evJP3JB*F^ zXExd9*w)zQqC}qGcv|t74?7IEUQ*%M4$6VyKXIn5p^Z((opcg$;|dppyrsbKpE$NL zwyjCHYAY{}wj%lDv*A8q_)i?$7TeThoRzonBc|ZFovGiIF%j<4;M!si{Cl}M0NYd) zGC+)@J~Ca0!j&pqxx!H&!e8)ffy>9Wka7z`A`VjttEBHO$jl?%9h&x8%s0&F$ zeUQKSNsCX%zH2h<|L~W$o8W?{!~X9+>v_~pWoSFE1M`rt6?@)3CN{gvbaNK+;5fu} zB%7%{z8?L2Per&K^uxCtK>gV_W3?jfY>E=s-QmTC)Cy zu#ezLYf0*Z^N#3?VV_aiINH5>XZMUgVfQw`?h;GeKa=D4a9Z42vKwnj;<=W@2MYX| za1z&O-p#S!ZfL~2IR=k+bJ|`GPs0D`#2u>yqiKs9H)05E!MH&@*P><5+HphDj{EO_ zllP<{Y2+@F`*ox4UdrDLJcDQlGM$8RY-)G%+mWbU$?pZe1Yx4T=5PPk`{Y9!G;Wr< zJc;}bPW~K%GMva~8T~FhZVn=ikKUUqKjuCABP`EhzqZ{YC-RmwNdAfp`OR+LM4OQ5 zL_W)y|8py!m6H#}iu|Q$f1Jun+DCq|)3M}38YF)WBjKd{<*xk--p1Oigq0zWEoLvk zK0j^2UI6jKY`=&rP@sp-IQpOTl7?0IxZ6u$^B-6E8nnMzD%~M}Kd6gdQjKRA`%f)z z;3(hhCHyJu)4wUV6!VLIyvsWe3BR7OsmY&h%lh!{EZSJtp!i{P~QIM*-+xBXX}IhfFpnU z^Oi*o-H1Lx$L}0bHynR>9)jPeqCeUd_8CwA2+GLsSXJYHIsW_bzXAUXVdq%>?p5~u z#--;GVdqTEDLr`}ZHautOXQO$(=y-JI9v|y>(^}MgBVwYy@&D_t)F>fAoJ1bzLk52 z!?9kP)OWW$e0OX9ZMK}m6+pkt``}Wm-}{uj^{=Gm#UO9ZtCQuiyxr#mmyfxh!nM7f z#uWqCw9fi_W?TD89U)uhx$GYmZvOwIar1%8eb4$A-(mAhy%NXw#Qx@RQTRt*$}{1N z^Ddm@QTMzpzTM))Puxa@D}FhRivl;~zHt|IxE9m{-%Td3>D(CFYB}^cclPxrNzEUD z+11WTDnmKmFEEEX8Jh^YUr)zN!uOV&3`!ns2b@D~4Jvb}jAWC%+{@v(y5_zde|!zz zgG%)+JBJ!We#ujYm(BAI)EV9d*u}X3dp`;Moom)5)6b)-Q4Y?dc*cN*72WfmuKTVt zBl(qfUWw*y9Q*w+aP&-9FI(z7if#Ob+0RXkqONki+4zHP5?igF`%)jAM-9Cc_K_qj z$8jL;=21qU7>D}YI7YcMxjHwF#?W}`Fpd(>c?{1`904HPC|&g3(rtwXjiaNk@rnFG zH;>Yn>21Aa0A;;#!-I$71oZQu5iseq;aLd)fP_1F(1p8;%vqXVW0PO^YOmuGWg#r z|F-eRhr<4g3&gH%zkKBHCX%Qpt_@jF6|aVUkV$Jp>Vr0I?QqyfOjeFI zp@S27IHOP4gu=gsefni>!}}nY--vffJl}6cWd5&n41O5+vA6K7UjgoYeid5(RM+Iz zh8(M#ur{Q8p4*78!@N-?FFUa2E6SU?<(V_?DPpSPwS+?kPn%kU{Le|H!fy{vY&2d{ znBGZ_Yr`QIBIR#$o{-9Py=Sf3--UsWY2Ss{02MMJ00WSLNx;7UAv5L+m;O5F_7nmkzFj*t-j4YF6;I^GZJ@t_@oQu zyuN2R?1Nwo46chUbqr+vMkmH5`cOak#T8TUBht^+yq@~t7?{8q1V~nnHl%M?o7CtN zHe{uOvb_H<(-&?qKUTd2~45Hx7nV z>GI#i`$PC|!9Ty%FaXLm2EX~uI1i5bABCJbC^PjF+cw7sfeU#z?v&#ZLmzqXi8SO# zKXJ1zK)wQSN#H0GNem7@1D)~{w=;0N2jG4JoaBr0-g1*JzEdydBv0mPfC>J_0mlkEcn`VD7oFulD{a;@5-L{44A;Ttjo`$$KI1MYV$yH7GZ2 zat!_z<6$3U(z=BDpiN%!@37CPY#eRM_|7(^(I;$5H*6Y1(5z>4?Od1OJT+~1`>*l- zAmk4NAAdXSYv41#KIjtqN!gdgbvQiNB^?T%0G{z9iDTwq{5E@&oYU-@3K#n@t#!U2Z+bJE|{u%0~!zg5wFWYe5PBD z`5^E~rd^J88TH3?nfx}1^um^21KvD}csb4(ojJLcO+w5LmW;lFQtfw!bV zV`96@sMLS_A7P*Aci<(%K$NCz&^<>i=&xj`5pvexdKnfGPOI$HK?`J)981 zcV~%T>*}BRU#sg6c)ce7P0jPhORDRiVwwLs-oT0cIP_0{Hjelvmr(GD(XgKlws1eR zAAD~$hQx)J*!IJBPF8LcG3`&<&tUY=7>TT#Qh%6}u>I0eekc0xTHxsyJnzM6e14B@ ze^rRg&r7$z1lrFh5GMFXu7CCc;z@(nC4UU~ zIS3Q^1>cArPdq7>?~@$oWPXPHxYNJL(f|o#8C#uvPFPx%{KOcZd4lJ`4tV4-2mXY& zq(S|!&o!!4`GIG8mLb!Le3miqLTi6ZkSOnwwEgWy{x$Z0ci!z`@*&mjx76WF5m&14 zW59EtQrxbk#~;OeQjJd-yzloQE}`)8{|@`R3mCLMblW(+q#DmK+K)osz@^$h@bquW z&A*7{_x;64IKNkwANWryaQ8mphv+5M@>>l)Zq6sSD*PDmI^8Y*sQZ9;QXRfh;a4hr z{2gomiJ@!x%iU&Qid5q}6~0s96B+nbf8PE+@*&mu)eav;+-imI23|Mw+9gfz6Hlt~ zJr19bxE_Tc1743^`SIT`B%V~`8HO{M<2L2`jeOrF#(PruZN_`rI8w?#j5ly1zj{O1r$0j!gQf&he!EL3^4GZe>rC>; zoP5q-Yb|FZzZCheo(TIcXwyV}kB0L3J({)KMzX?>Lr=rEVP7*Jb%V7c9s3RUXg}X`NIA4}ToD&Ow32O&#@ve6N^`{EQ zd9tM8Tv+%^*bs1?ms#9X4#)N-n7g)xo%mntXZil3 z!?FJK{EK5O`CC5rI;LwQc*}S?j;X?5aCN{j zj{3acj3l<5CDb^{v5@?cB<0%RpTC>cOXwmS%<^?B9LGT6FTg=1uUO$YE=n4XedI5G z(%gTBeNyK02!-Q#h#=!Q<_UiZ^A+w}3deC!(r~O3{&K#xN#VY&a2)>xXT~^}PQtq3 zZ~CLHhkF%Hk6Rp@gumd{DS2-yoE~pDrjS1|lF!(`aGvaVD{rTZ8RP7P8mBmx2!ERb z=Qx4mJ@vU(;W)k^$T*H6b@q3N1Rdw&;J0kzEHcN2CkQ383?1DT%hnJ~5loaHcc;+F#a}JXlSNwd`zcpm< z&2Jte4`L@6D*SB z+0>JLccTDp7r~SENU0C*k@kAh$4!bEFPvlc?qHJ`ePWKe!p(7`Ga|7sp!WD$vByWe z`DP~O_=LKyJS~^jN9`U9%!AkZiIBl_j=u)-wd`wNy4mcpkcKjta*w0Vg-QMk+#ES= zS<+dMFwW!Ko%|T0+m-wc$p3Z-6H)I*w%?T;NQ3q`Mi>bv@;5mBi!2*!uM);GGDOeu zi7$ozn{y&2j`1_Ol_+PT(AxMLm3?K|EDm!+l##y^ZT+72SqxeHrZ9gKx(V;5vTgm? zVX5B=WpRY1Kpr>Wsf#%Z=@1t}ToH?ON)i9(J;JYZu4DZo;vjE}mx-8GWLkmW3@| z+o~WoMNM`uhIX##F+8D${9*QU;5GJzm#=(|cv6n-;#Md-y8?EWc=Ie}o|PYxgwxQ~ z>ipGeoWC-7lz)TE|1_{vaMIaH{ytF>c9MA7>9R-!eJ1^WLisii_7FrGWG7>@EKA}& zmLGVA9L!6G6FW&;T;lXcU6m;P^&m0rmadiq`7LAzi z*9pFC=X*PNPpa{44$t=ArtrWsReb0Wxds2<>RQ1=X@V&rmHC;Pia~ScY8sDqr z_bU7b;B~r_KYuq>+drKSDr~csmAx3_G6!g_Nw-?@N>5P6SFBt z`?K(?wx_fHIZs%b>DY#a zzl5y?ZaLOMly|klv0Y0Vwq4;bVFj2YH2u_`$NP!Gu{}!~wpsEQKWQa!xo6w?+Vcv> zb}Z@GR>@!dq@0s<;Tty0=X!->`(->G+bH?-zU-x_p&LK4mVxKaOq;np>dTooo+TSc z`Z&f%{#HmX*3Heh@4@-GT)gYVIP&7!eMcH8xE%cF?Y6bgd%7~5Z5Va_>T|42@?#wH zx|hPOT#&~3z%_r)`i(6k0FLW#?Pq@0BcJ4TgyQ8dO!F!Suh{-mdGWVQ$V+rFfbz&Y zTt-;HrR!dNe+QVa6`EndTRkV@&%z@IlVZjT$A{%R+ayMx7$1r-J~2d(u{OozYs+sV<_yFz z2CbGILZ&`AzbnG{avPHF?vlT=&9g`GmNaO7*Xjm6kzeb^C%3)exL874LdQAKFl-l} zb+3kh7~?DP!yMm`{}>ZFH*xuWPw|#ikFP5(vGZ&8wH1%2@oRzCquQDi9{xV@q#EDv z@P&x$SNJ0Lt_d-8tHv)oQK-fb8@zqjWmw^BfiEyfd-+Y@&sXt|RO4$dwdGGBt|pnz zf9z8ce|rlx*V(^3^f$aA)%a5Nu1qQ3m7)Ilu1wvhH~p>*^-rFhUvhp%M|>yr-wr(e zAzm_^uD`k`ZTsPGZ`AFSZa?j4zg&}Z9Y*(!4{mu+Xi)oE=>$ppsdMdrjzLephe}v;R6j#4?<}U&3cBe7?fpF5z!} z`Iuuct}<%N^MK|(H_dx^PkblB{q9Kzc>mb(=I?y4eK4}LH9 zXjjp#p*xg&1bOTq_#VZ2&D%%(1CF=-xH9xf^S#^mEPqj$Rc*iz>(+au3i&%Zd4i~RF9LOA7Ejc2JKljbng z2j?(VySg}&VCD;LcmDiU%MZ32*D2n?}}tN|Mr2oExaMs;X`T;GNkY^=#Oqf9WXSgZx(4{-y8RSbG)uY@-#I z**R=EqAH$9*IzsIm#0B{joG4rYW**F`1we?T;Yd-pQZ4R)Svz#y`&ny+Tn{4w_4$2 zm;>oK^z9#B^>gA$HGW9phZMdlHW@$s<${-qC)Id{={X$r$2na7Znpjyze%U&aKv*C z*KPU&1)1x4HL%u4=KNl*jgDeb5VVUTW;Op&QMwjoCE_>#%0q z*?#BmW*ZFWb({-x{>Hhjp5MtFQs!oYoBwFYCm+t$_^#04!l=Lcp0EkyJ3tI?*$@B7 z$D}!;n$s=Z8F8_&$%F9cyD{ZgMJI)EUxs;Q`q8_s&faP9jAPx7@0p&ryr}MNdiUi=%jpxK{-#aN>)5%sgE$iUh z5ig1NaFE2z#7wmy%0%!0aFijkJ(3WzpOkHF`S1y}t?Q6)%+&p`Jr+8;z zp4^D%(idX3o<7|;b-vt={Bpj`zQ-(!-d*;+_@5gh?QXvO2^UDaQR2o?zPl4tCtK=# zc{cKX(y5P6l$v^qn!UI_sY7+2n9czK>m+_!G(y-ujcGfbb) z5&3ISe#T|v^n8VQ&R16KksZFqwE^0>>Tg?VZ0DRWSs&Jj&=KvE_(`Sz6Zc((quv-# zN8Jd28)D!2;XU7t9fNG{i6q>9l%yeLTy6)>h+xm*zpk<|90v5W$|Rm=#`m@Ix{tBr z1;>~n=-}>O*cH$i#?_|X#g5J~&rasd#W^d>GOO!>)1)GgIryg?<=$epc9eaKnAEfJxU1*k{q(L^gk_{M6^1l%B>1Q9wbYg>P=evy!wPzH&VMB?h4K9EU zW0}PLY3+&k@}5-N(0*rw8xhy9@YTTU=N?6K7MnFEsm7D1-ZK#SjU^wi{%Xkxj(FPO zg`dw3zZUsyxx&uVkH5Vkzv`cMo?10O;-7_yW(a`F(5KCuXumklY6*iZ zXz4U*$b)u+_O%#P?Cbc3ncp#IzvCQy9cXkPDZ90=!^kgrGQV`2$G)Bdx%{=8nfG+d zk$>7(t{0hC(K+ww@&_6sp8Ib6J~jwDq1exNc4xZ!*i!B5r;zupK6rd$E$WEBSHoi< zBW`@x?@dx4w6CN4OWnG{&p>Ejd$~yrXY`5wxf=G3e!Z_qf2M0U_SH{Px$Us8#M8cZ z9E^U8#9~X%+q3gWnOOSs_rn~Kzt_V1OL7c;@zprDa;23Y3IeIHg$Fu35-z;l;v2=b zAZ$~3&XZc)H!zZT@5|&L`Wrtq;wv%J-qyWr#|KQsyt=(Z2G8+fJ@m&iiTv1B&s|C; zq(S3DA0y#J{|lXcm9fCa+N*?d3`#ip?GThu@>c_2jpS@MbkVbZ`J&Ju`Q#~R%k3J0cB<^RR{z6jKcffOxf*5Cee&UJW($=zL4W>Qt3RLj@wEOH?q#1ZNmEu@-KB?p{+}oC4bhYH^st&Rs4U%7wA-@rLrk_bZ%b5R))j!LhzfW5K ztAW?$ZykT?RPrMYlAoI)e|;A6S;iJ8pXF~+@*B{8_{>tuf9V$@t0|u}NPcGdOMqwk z8O!hT=)?ZW{Dkd?^OLRvEuK7Pa_z7+#jscWU7*&VMg8@d*YTg~plzZ}V%wlC*!%F~ zs*7u?Y7WEwYG1U z=D-U0H@sr^NmnTx+Z@vo$F?v03(Ir-XAwG}oPu z-YN3=dxc{=W;){7)`b7?;W_@zz-|2KO3!!mAf6)~a#+?^u{vkduFl!i9-QNoBXMjm zxf{bNe<#95@z41qf5)A_3)zfudh~}l%Z~7ti*a5R*f*4%k+pdSk6^F8346y#$9rST zK#Ajh0+hVhVg1j%{$26tP&~?U=9L)osBn2Djy#4yxi8??WB&m0?VvF~Og&@IS{(E6Hz;5=^KgyDMVH!G z;#T@;T-|;-UIFTfvBVAFAz3r>L~K5u2k^Xb1t`xGGmSXLb@kYHeYSJFnSDFKUC#Ngm7|%Aem%^=HlE&2nx8fY@U+i!V=%X#jU$ovnl&V-5@h^b!41t&I zg%%Wjy!~mjp~lQ)xc}e%Y0d}NJUZJS1}!O-dbRWZA>@~9N#>Vs^UV8Y)_)GpmZo>7 zGxt@>kblnm`8(e8dFDhZ@N+H zPwlHvADs6WW8O_YWaBvQ^|+TNj6ON;xp8w-_(3;rw<6)-KCrEj&w1|%F zAMI>a1oxw={-`6`CYMD+r0)}VgThg7l8(9&{t~tk^;GtL*gS{jw+pJi0y~Uxfbsep z3B|vfERXSx891Kh@5CN=6Uuz#?N=~~*L)D_4K@;DU^8cVkKvi#(w#QF{xo2B`GWSS zd#+(IbeO#ozNaC3B`V33TfWE7zQlSd1TDHN?At`vX6ApvzO%vn(rq4_c^ZE8m;2GD z;k+sLq^Gx=jmR(U=4xjU58BP9EZ6%~3GJqQoYLqM{kGWg&a@FsuU-2InBQT)A&$WI@8KOP z$mf1Zd8HkL`K)9nSNE!2uhk(@-M)AS3V7PxQrI2ZT~lYE57xf>Sr9{m?CuyN;Uxb( zuKd(nrjsz*cE;)T67jTKO-IX3&=l90DaZ{nwh8#Ri40*sr8N0&g z0NL6VwzZ-o@x5kH<`+;nYgg(IiTLEXdF=|%zVo*`8)4U`w<-O|D{TtL1C~H^&U?C{ zw;Li!w;z3o4KnSs+O@UHP;h;0sWydk@1K46tBE?4o8LjkGQsPvaP3~%6zYREW#FsX z^$DtmeX4~O4`=krK7~F_zn;&~pXvJ49%di*Fo_?B{I<)plb>`pr8R_c05*kq+LZCb z@D3M*$sXdVcjW(-vPpw%N+~-roaDdsOIE(%ZLGaY@21__pyqNLFc%|!808;F9LH^O zpZe1U<-8|#qD)l&74|&?&gJs^()d#3U(e;LN51kN0i+twFg=$O`IS}K>91)&*z|ng zkAY7U-isxk@5L6jOx^dB zpns0#f?xEl*xO`78j?T;z)`;J;ZeQ^`8}@wM3zlyuM);K(xT+IDEZ?bQ+}SylgKYU z9Ql9~Syr;WN*K%7t>kwr`AxuMizik7_xHc1glN*B@~^k7Q|-4W3;8VLu#!Kl{N-7cA2RY^k9hK%>-qbu`Un0$Dt{L8Sw`Q-4C4U_FLWGI^I^)S#_n?YN zgX~8%v;N(jLh71WaT3-98SSe4?Mi+Wb1L?K>Fd9qebN6APZ}hDjbkqDZz=E$5?L}jy(y@7q)j&u3BP)cP0cckZD9|fjo0pa zY>t!yxA;8!9_NV;$5cIjS}tv~@E3eS$@`wd(Oyd$+GO$Z~ZtshmKcx6xwEo#nmeu`>fz-JIG&f ztn4b_3jSG^iufjFo4 z73*J#J@xa@KFCXOoeEcdbQ;%WX}I`#IM6Y&+IM3-T`s^=e_~=9GJ%B3zu${uh!$!`AQswXOSmb zKe4ne%-q@7Z=d;_s~H}k8o|{W^&9o^;ytH%TIhIy_ z?c>Q8ImCAYU(;gos;Gh4;5u~~`avsj8;-QQ1ck>${Ob;te!H``8~W`r3-K+CKn}ry zUkna5JoxGj-{a!*ifq4!$F*g{KcjvUbmT_?P=zBt53nxoKwBC z@NJTdu}j$q-xBzz-%}_;dDxFRPM`>$)B*2}yAS>Ndl#6=jO@$M)9KdQm7(DJ*;4y4 zm;AA#S5B-(o$-4keE)8=#?`0VQ=mTTv8EsYhSasu#*7#CqgFNqIHOPWg8|q9`Z4Tm z(s51fy0O6z1HU}WH8Gh7;RpUhe4fkyCNn>c{L23jpLbk#`fqsyb{M}|n?&PmIRNuo z)F16|Yq#@I)T?7c%>pno z5~}h2YEP$M;qy>_&UM5+{@3_1yeHN8vMbelX}?S7f9Ueaq~BJ0qPgNa;z>20Vf<~0 zmv{pw^*7-3k7?Xg7n&Tz-kw5S;<(tNVJfzBhLKfwR4F4_Lf7pKgFR1)`OCAA&oU;Q{C4n8DER}x^TCSLRitT;SK#$XgXB-Ce>aa2Jh9>=tP(Qv zabA=5qYjbz2dB&5R2%WRpDJy2tL=_8Qw!1{`I+S}1s?EJ{&_D>hQBB?*l z!!vZbMXEbaGiL@GY=7ebvUNdc8j)&{53Y} z=0L<9`yCrY9PO3$S(`-u;wLRrxO)_ic1qIG772d|YgD*Xmf29sqkWPzv_ZmO!nzdh zJ%?jmvd(RqkjJ*iIjHsHcg>*}nd7m16ACAFMSZf(2!CQPf|0@=!FH?hjeXW1*Uvm# zz2@ks&-mVlLjHREmpmNu>+!!5{|!0#9o1OaoKqeR!r@)3OkM>6Ve{W0-pqB3tJcjT5;Xi?YWYv7npK_bN?)CwI>qOiz{&{|S1uz5n z_Yu$Z;`loN8prU=Fu_o_Ic7Al{cGtrb9|J`3y(}%EYw-+XVA3^}u_&#Fhg9VE%h(bm_v=Z{98u=PD| ztk~3AA)&^q#K9p`ALjWX@SOiq=X57Ov;CDq!yyxtx^S+W=fXsO={Ifub5g0&HxkD2 zkfD06Mm*&=IXukZRF^4V&DBJHPZsjWm3*12iTrVgpDG+70rJOOLXls3au(%xGW1+c zkw5HqOjA9%J=5mmZhoq7I78dU#lTsB31=_y&1 zA2P8>(d4@pbzma?8a*7}glE03Ta3a4a3;E-aA6u6$f2>Tkf8g2nME;Tc zKYIuHlLpBjWF(x(FRja>{E*=*`M#3h1U&n$$ltTR@kH_`4U#{l{8`8!hx|GvzfQ>? z2cGXUiTqb%{7RGOkp{`1QvO9*lpiu$l>8PYzX^C<{uc*(ub_O=Ao)|upM`vuv0ce; zSMtY!*X1u+QTRE^Ck>K6rTnL6QGUosD)~tzzX^C<{(XM6moZVKLGq`RKMVORSl0Oc-?*AvhGE_2^UfSq(Snhls^mkEMvPWf4h=D4!kb^s>s`QlusHYe@gk!%%c2|kyP@N zN`4dYy8l0O(`VkHe9|EKQ_7!(e3o%o$sbno$AQ=Vf8VFS^9bdW2FagN{7*D^L;$n${{{tSC>8_!#;a9>n7uCoMJ2b}O{ zSRM`^wFB21weJrdrEpw32(AS<;m@#FbMgK>a2xOq8s@WF;kd408n*0q;K<*2ak&-- zFaI3tC+=j0<6PaQ3wcT4$lv<$-Tyf_D-2x!r8b{uD;(Dmf*S@-_%rMll&=N2BK#%| z4BJ|kiYTbGKhhp2maE3T6tG19Ovye9e#TjIP$lC*bo@hG3Teen-q?7 zQJW6WOMoMP>&H2bIhgmIYyHICsc@Vp+jJo>0i5t>*qQjR1FmkV&F4J|$GIQVuzan+ z34ew>1H;><EX^6Z!K?0&SFYng;0ZxA@)&!Cfl z%S~85EZ^_7JU5Rs^?hi^^%Yrpe^fZmZA>EMlXEQL&#*7f!8%FF8&){Z zy9CF%5&2s`zAYEUemMO}EAQ_L$GL<}hk5``_%mz+`olWlR^M%L?<*YVIfCO{#PGKP z-aM2qb{^_4X>p>bRmypHu+mWp63JC5C59SY(Lsv;W&;9j$^IxXV`712M_!D$sMiz+*{!| zHZcwBons{V8!s+-uxF*ft;wDlY?}JjGd>?cGcuBJ<%DJJu4{GWIbHhA5izbfma%{>GU+fYQ z&$(r#!*2>Z7YX{&j@yB2KVXqbz7FmC3mN_H!;jhT{AmRL|Mol9NB=ir%Sbc&T~pJR z)9=p5Gub6G^t-jlEBhU72vsCH7j<*Iw2l`FTO z`yKJ@cWvLvPCok`-{B|(ZsqW?^m%ocMf@)B;&}1iC6P|o7cX;x97omzM{i{)xQ@2ezPJE+_TRpB!bAS~4PtKgciv#jqQ8+z zebnRqh~n?MI2Lvjj(sV*n@wc&iM}x8`l4y;GvNE(`D~71{WzaZ{5a*`JlSTUHJ>tH%1FC$uaupH%8;DqCRyVno049 zv$ohz&Yy*Qo{3@o!4{8v5A_GI;BPn^6Vm|K`rmGU4hdTi!0t0e?Tz?&g4tc0c;Zyd@1Pe-(`roRq)t zDqDVc#KA_oYf3(J)ac#?FGE}--UTO~{ig%{AIq|otJr?kS@e*a7ZqGgkJ4X{(q9|o zYyAbC?{9N;6r{i6@7w&(s6XIi@1@&M?8vnK3a`d*BqEP8mjCPLQF&cG{nC{y1La3u zp+tW*z%yFfpG#_p=#O>eZtG|k6IDeFr<8$pq9njtP+Cn~VGA_r}74btx zfA%cGkka4CtyX`c>(STWzc+<XJ zNy~2op3i(RtQogz{W;IL+d%ns8TMny$rt^lu(%QVEMwJ#mCrqhs$xG>^OCF>lS62GzsQ<#u^1HQ&$g(NzRl-=tVJAP1s9`0)9`moQ5GJbr_s9k2`5b9b z`x~~bQ{zv)n?H&y7j1}yv5XAh{1HnXc1!?CP|VpDO?u~GQLYg{96C0MKSp8+)(=epm^^;ypx3pfTWLZfHD z-MjJhrpDqXZ>f^CO6M_UV?rM7faHni`1eG`_X3yOV)vjQ*ErX-$byk1m{UUhB(EiC^ zuffMooZ}56ErL_76}Y~ALq2h@0XH8?&%}+_%<+W30Q;4^e*j1Q5~s^DgtCyoU<|!J zozD+|D?nf-ZY^-aU$CVLH|GYlivZj(b?4Fvjx;|v?6V!S9t)mDdqJM~t>gUN!{)oZ z+{@>=4Efz<{;qSywP}p(>95519W)=F4QYlv{sz)|&=RcQ>haIthvV}Co(JKX55_Sc z+`IoI@=iy6mtVZK&wIMMTjqGhP1YYhc9zdD@*|yx|IaAgx|TGq9=QH*TfedONXtA_ z-i3AwdHXvYnuFJPUXBj}hjw~oj<=%8`g6aK>)(pB3tgF|ynKeykG#uyl{G9IbXbo6 zX8bqa8TQGI;iaAS8^&K&`E0sAozKO{XUz@PzZhpch$FA@o$WJ?T7}D9k;XLux6b+7 zziRbD`NQX0c^9hkt-CT^zU0x=uyt|B8^JS9=9wYX%QA%hh&&Qjy2`h~wVSqoDGgzNV-> zM;-(--~WVtj~_eRF9covuq`KYXojZzn<74WO7=F-vycn08{3FQ=egJsS_C@%x%x)r zmwQ3-%~sL7l)dxVb0dT9tjzwdP#h~fH^xm@CtK=X(0R!Em*V{sc_=qd?|EGN6(?OC zsd0bk1q#8e<@B<2854@Hi`^6cR#FJ|L zT9yB`3f}>|X)gr99k=+2uM5@qbxQs^g&)bt|LxIt_aUBCLN$K=0hqtI-6g7F3+;&9~UxsuBAuN{+TC{|HVHpTSgpd z&|G?uk#N#~icx<0(<23a)=3!W>oFxirsUTHujOy*_jZOIZ;{`Tg?yGV?&P_uSPfW|N2fi8rk$>ktHyQnt2Fc%$ zA-^LF`6G~@j9U3@=*b!-AA5NRL;lt-)3+A%m-Ci1NIvyXm#Tla7ns^Wv(e_7DnIg= zyAb`~eQPxLQrmyIms{U9x%~(2VzfUd7FoO(Ct>xFQ8&xVuR=!aPEzuLuK-{> z2l8*LdXu-LLHZwZ1x?9!Yyk{4vIyoGyPo^3T0^(cg|Ehn~hHq-McFk8_m2 z*4<0_J6!oimZT+>uo37u=Hyo)qcJ7F_|AyW!zJ=8>d7B3xRhAZApJ{0MSeZ-OfRx{ zFHXW(#^_Sp|2UtIKArA=#Xq!rd4f6hlpDD`^GLN$6M0sDb%;yUrS;bV`K&O}-*>+D zZacizNucwZ_UpnV|07xCpE??J@?+pNsN@%;{yBDus3Twf7OT@E4XVHOjD!>U^{)Mh zu57HmN*K#HCgq2qF)jZG5&tM87yDVZ_t)w5NQ3Inp5#^XfoJ;Nc*$@gpJi-P{ijLy zAJiZ1r_|L~i*q&z8;xgJVE+N0af0W)IE}B`*494av`{UiU{e%XRlZvUQHV$q}XPe1FQ_Lq+3r~Pagu;mxLjkQ;eZ~26+ z|8_*RoUZC0`r89xGJb6Q@$dr{jcW!|%8!O@tmuEl>0e}}u(**h)^TimD}M~ij(saF zzxXb!-@%jhLU-H=KToSIK>k7(Ci3fnCr;+SycZ|(J0L&l>Te|?ldAseQGZ1O0NwBY zSNiECO=kqZ2Y8LOza@yPeI{*xJAl{opT7MI?j)X6? zhc8$7JDmPpwc1FzW(4wC@M0Gx`X6z4 z(X~KHC5&~Pzk{v+#4N0z&ra8W2lD@4;JLE{etOBtx2AXm)PGY({~rOK>1FdhZ&CP;jPf^sbh4R$lWKgo!?Uk+D||ijk0z0Fk5#NQ^Jh|x zkMCyn$9G}k7b^YTW5*Ba!+%^ab~;Vz?i-IES6R-3w;_ja28q@H=cjzP}Rb3ZG54pAq0C?__b@>sOf}mQ>>zhyLfI zs~E@p55xW!qx>#tMzY$-x8F5gt>o7OujM>hRQ(q+BGutNF8|zX=u!9%;AQL}?)f=q z8V!?beBLtKe~OVN?>SX|=wI7Uziivv$cI$pTZ(P{Q`ap`>H4n+Uf12DulF*G9%)FF z#Q->tUqkjbHGk}I^)Gepq79L-5tOmj$!|wYtCoK+p4A~t(r(kVz}%7swZAf#Cux5j zzyqGb^In|rWEtZ|f4;vO__)$vG4K@v06lEc_RrBvs`WQ=oz*|v+Q{=t|G;lWfOB8` z-@n%JmQ>^8^Q`_`5E#Ei>Hnwr&O6e}`sd~9^IM504J!X|X8D0w(whzw@xqnD2^`iY)TWHF)2&^<0JT0A9}@4n2J5Cz+m9<6E8l7~)zL-oyM~%Rl(S z1;$IN@#IPSC2dXgSNU73zs$5upVA+m(a_K5ceT8MBfhi+=b0SdhHm1jeyfFezKhth z#`4|-((Ag0y=kJd94-oN)!tuGGq~)_g;V)rDU3k}^ z+nyLbq{8OH{oEMud%9WuPj&EH>d{5j1*_6S+F!32#^{>V6dH3YNjsVy9 z8(R-oD;%FG369UUgg?V>*cv(pu5F2}hfbBx5%;``>G(`&@or(C_u>jxS-vdaX*b$X zPDuEi$ola72hW1YU;Lz%z_s3Q^SR(A8^iK(@7wx99{1qoyQ~b`8O?R6l6R=XQ68Tw zF%2E}&dJ|++@%-()yr)89#J^%r%O8SnG1gjTd(9beb{n<45b^tbygg?XZ z+LBie+|UX3TND3QIPTdAj(dl~pJ8R&;r$;aFW<~~>>eEVx&+5PH}bcBynln6)$p&o z#M-kx6pnjTHXYg-aKfKq<9T>~4P3=hw!Q4*aHd_m{XeGT9vAuZUR?15*3bI8OyRii zC26>~MgHO^tp%=Q(B{+so{cf`+SBQ{ry~3Xy8^has6!I58=>Yu8 z&ak-i6ps5Vl8$>QSd5euP{axX>S3v$Y)?T~dFTTO%bDhE!V{IwvxJD;`@sp0gUv-bQ zOE;{rF-D%kwE#!{Hr8H?ei8B8->~@%yB!tcxL%iZT$7VO{iPS@8d?n;{nY0!4rlC3 z3K#OY7AJqEql@6-;d1!rUuor)D0y7pn?$&94K4g7tWU{Xr*K?XOB$}7$zS}W8x*eN z`!>e3PqiNAnpgM>cHwHvhvn;4IIe>w4cEHDU&0!I>$%vL?^3fub@La6;~H1^3$8=S z8*(_K&lE1?acxWff?0}!tc5?}`q5ho$F-nM7xK6!75)t4Fj??Rycd(O_H0b$b0mes z`VILce`3T{0=L%vCf);P1!Bv`^`)fY8j}3QPrB6ksn35o9Ls0cY)s&xyF<7 z&p7wO-}k1~XY_U(!}=Rh^0?*`{(@bvRQl-b#J^{#MS+mXLuNLRvN|5J-QP2u!7k|v=^9C(X zudA?j5&p!{H3L_5p0#H`RyeMwOaffEW+H#_lk$Di`dJot>JMxT%g1$;^LoVXj+> z{{;R!@y|FWr7rti9;wS^cM5OJT~4HA>&W{@nDdYyLx}r>!sXqa#tq^OfjHu}$JlQ2 z;Bc=iTyO9}!xSx^xl&Y&**$HrKe8f|yAl_{J&sDhkwRt9-asGvKJXs4#T@lCo zqJ1&OMICzLG;Xxelhd@hEKlJmr7M5e3(ue;I_+R)4_Q31#8xWve zzpRgj{hWNy`?8jEbGnRtmr&MGod?-*ll&@I&84o96<{6OinF2`&6q4hIQ3%7^P zfm_poI)uElmAtCQ1c!EY${eri73&{!x@Nw?-n6wQC2!!zf(v1xljBA2Nz3~u=B+HN z;I3D=f}f>vgXiRUmG`A_bC5Tqn^&w}RszR*=YPdJg2UXXZjKinv;MArD`!6P$ulK9 zA0cN%3l2b2L5~TzaIZ3kHQ||pW&;Ivu9WCRrR3X4;@3jGw&$2 z**_sAujZ?)UREo84!AqC*_u2lTvoZbwM?7PCmAs<&1?PE5=u@1uXXcq< z#67KW^~&zGpuIFZ{R@ueT!ArzxIY575Hz#?Iv|hrjHp!ks2lo;TdU-?s`l9c9NRI| ziM*8xHwxSc;wVqsiV@g~ahFbTF_e#3hQ}X+eZzk{{`ni7L!kMO+qlw3=p6jU!Mn)u z)^(M)WR6EXqEdMhKXG$@ls@;Pak;>;EodC`P<4jwqlLiHv2W-7Tj~m9tE%JD=cE4J z7>t;2rlq{kDBOrQ%Y<`o)P65xt)mVKaLaNsWFG!Y6mB@0#(ABSanEgw=c>?65%yXb zv%kU><)(3iKb?#_326t$!#-uR4@tinfc|;*C~p+MmD-QrnE`K}c^Upi*ql)shQIDR zXe<+cojC`H++)l^G{>n?6;n8gsKbUx-izvLs*rP*YWwZ zy!_rAujDJ%Pn|u5aldkQS`Rg`s9&)lYHV8<;{U$rdLyC!iHLvi4raH+d}Hf=ob!1K z8^_r4$l4t~O-k~J;-51kCXsVKyr0hToDa`_^Kqt6!4?{|3G zy_wtwbxvag&S?YaWdH&7l2mtOnfly~f|! zahmz1+dO^m9MkveP2XGO?K?x?8$y2B_X?qB=2!I2d%EGn&W+T$zUP{iS*z8%HZ@(H zY^i;Zc5%Uu&rBpxZvJ*Hh5&Cs+NbJ!)Cc=s%kv+v@A-w)8s;a|C))n#GZxQz&WsN8 zDc|#xu@F+V%`$lQy)NM62x9xB>pT30BkbMeE9bW@I3qP5!DBchMfu~%e{wLu#!QB$ ze7f%v&%RqSkX`u?aa=g>=X^2`{h}QIoXg6*R0MJCCI7ZII|pOhl3D0Cm@6#C*u4yu zLK|7E=Ea52VLt-t$YXGk#nE5*FU%!@YXmMAojDWNHjwLepJ~(QV%ZW*ZIlN*!?JO-F%9e>bgU29n546@qI(+|d?mhIqJXE3^4EMk`RMl6 z0pAIH%L^7ClJIFLZCsDDhx2fMud^N0n_oT42Z6($Io|O~Imp=0Z3PfJbb$1uREpFM zzu_?sd$P7~Zxgl_dn5Bo#U^~pdkk}*UH0+3qf>}Y-yAtj67t}9&biMnpxMrSI36ay z7V;ZGOJ5YdTbt1Eoc*0&(c|Ws`z&$a7C2j31hn@*6?jSfGjFVpLFAP-f%{MJdZKgQ z)Ahf2PNd4&gad4l86#?4TdfQQ*T6Sy~#-+%tZVw9WTnZ$OYSA;zSQ#3X2p*}e8 zDS64onFKRm*e4Tif@Ac_KILozti+7Y+7v%oi;AI5A>Pb;Aiqo@yHCEpOLEo9e;;`IRZphZI0>WOEX1A@ ziks{PzVN3m|Ipu>jg#N)6l^9 z^F}RK@=qOgFR=P+2fq7?wEmK?iQHe3vy~4%*SsrvkOs+bpb>-<{ds@1`V+j3wO5hP zGIry65znT=%z52-w~qK>D0K8?d$vq)cR&8jAn!??C=<0#o$XwQvpK}`Y;o6{llMS^ z&K6TXnXvw4Ody_P!YJ^JgIcCIo&Ty5tG_Cws%lB=&qw+3Xg$?_9zXgLQK6#z;7k-{9=eO!8SqVrYMAc>_m$DeAB5A2!a0ZsMxm zjU=A$Mvi8Q?}whouD1Kjzf|)9X|;Z7!#;D-@ufNbWmJkAJLlo{cMfOFlADV# zE&B%f^Ijas+zk)deNM04hLWA=g7R1=oJ-hP&$}NDcH>8f8t?jh!amDbzJpy0F>qN| z*gQk4{(0EvH?Q~|tD3g3-+fouUx)v-SYr_*`^(%bCQf+OA7FX)yL9|53rWj#t>3Zu z6=&eLF#7F0Nry2F9e?ATa+r?4v)+QT=3f&|JzvV-4{PDw!hQwlQa5(3sX%=JBhQd1 zm%NtkX~QR#Gb4;Vs^eCd+qDyA`&Qczw)Tw&mju2$)$~K_ryPd2LbrLiPyECTDc;gQ zNBrYg$vmyn>_yJH9Pgorm^wRm)HKP+qY`nPr~M98=4svGnZE+ZCUM zwcOT56?vqz?c&D1Yv)RA4`VN;@eRQ1y8GYl_A&V<)%aK|@xI>#eC$tYd>8Pa79pT> zp8w=O=q1(oHixf6T${o-p!_Do1i{7fu3Ilu<6HN(`j10@tyiV>-vvC^*23ctXK!QF zMjE95&J6vJI{j}=p&3r}&pIAA`M2Le8CUr)d3Cb>-nsI>&0LpM=Rf&*mw(7eUY*W= z$t(68xuo6UPfK9^vF`>Nl>fYp{5Js4^paQJi<29=nuUCp(TltCb0)h~m45`^@j&4(HC%E2f5#h_@|HBH{LP%0!ioF_;OVE` z%XF#oL;n2l+4kFpMDzcgZodtvKm9ytS^jgTJCI79kZ;oAIoC}pd>8P0FoAQwJ#0VI z6iGF{^JXi*6X`mK((*@vFA^~5wU5PKqnA|Ut8TIQ2E&aIE_cMWez zHJ)L9q3?g6H*jJ<8h|$eo4E8E`EetwSIO@J-c^a=@a$Q4nXW{tUhFX9Ni}}l;n{!26@C=>-3f5+v0I{}yd~B6zFTei3lZ1% z7ghe(Czt=$9nP3fJgLU7b$GV5wF=(=ydHbrUHog)ZAdkqJb4c9bG(6*_R|Ht3E0GC z+{pL+9;6#r@<)M>DeM>ST(*o}(jfUPKb^=gc_Tad#OQN`f^WzY-~D~7e;SAGwQ2o# z0Z;oW?)|byZ{$6x&VR4Nv#<6l{3!5Zrws15511L&`=A;>=@~lD80uao=#dw*DN+Apcb z=k9O6g#BEJOsV^D@Dn<^ua z^4ndQ$Zv3Xk!6AQDq$>R{0mW!dz~$?&heYl<8Q%7_>LHq_Z=_*>ORl|D+nYEvd%W-ER9&H{$AEOUv&9ey+ok z?ETTh-xR9x`FB`+10wT>)A&)~_4vI<=`Z&uo>b!*#__w2H*nPdFxp?q+gATJboy(v zksmj@ZdURefYz8iVM=qpVew)jG4dU7qz62W>Q1Zw1mdb*PwT${cs+i<_T4YNPCTi` zCmnteaY=>m0)BS_ocqK+|2&wtq#ED4(zf3c#I?SWmOlzSbs}!$km_dMlWKgg!!JZ! zufmu7ZF2d~+p3CN{~oEvGmP!$YrKJz_R|2o3E0GC%*eOn_n4C31-x$mdEdJ6M6x2) z@;iTE%g?sf`KBs=hWz^BN6#gmRO7oG{{Jy|HsEy?)!yGpPSOAog9a>6AV3NMBSftl zwdz)iM977R5sOv{5HZC7xll1;)u>g1R?XF@6$=C{8lXVXsu2ssYmul$0|qHtHD2qr zV3Z(LqqgP!|7K?8OwyC|^zuGWJ8kyt`S`CjYd+SjnLT?S#>(0VU-S6X{yXvUF1l!f zAL9oDp0Pd{;oF3d=g)>Ku6FY;evIGh@P7W>8sXOpACKR!AF=uu@W+qw_1F9U*Q~U9 z{phXL|CsRQ0D?RJfOjq77C*-KIlP~L`yzZrGIjst&PR8;y?Xo@Ul+~4bzLd%R(0^`pIZ@a(l$l;nqBFy{OD zd@(q#*K?uFZg0m03ljF2HvJN`xvcfg&REF%hwh0V{gOfDM;93fxclrDrHmi z7avBxFGo1HC*d-x-Gzg`;f~US$Ce0pdsI&Ldn_M&3IqQroD37cTDT3r)-xU5x2_?^ z*C+c7E}#p02}a-IMk0R4-{fPd7xot{4|@pEw=jO$6FMXJ7GE!qML6~qEFXIZM&IHV z3CBIpvw0j&99DOgkKUi%)@HO|-6N z?GAmP>aUq6eHh$n5iVYjv*tGXhFuupN^bSBu3n;bFl$|-Z@6UE^{(Y%O$+_Wux{r4)rYB<)7SbGCtrkPEo<}* z+Z5sMjBsni`igw4VXFR8kQxSmrEulf`gU)>&8NVRb&U^cy`r^;(YLq_!fosF{p^+q z$9l%{ux5e2h4HsX(ZBviDs;7uFO;-{Lk${3`DBv96pEj)t^07uR`W9F7H=POW_2qm=uDf(VCA5B(UoTH)5qJik{*xUmR_Ef4(|Hxk0g_u&YK zeQ)`&;h}F~{Ib7mez@J2^G^{DyWa9)yBmFrTO=I!@Vm*a7=wHf4x1hN_F|Q>+Qf%aMW^#fA!Xc^-ch3;ODEMpC8FL@y@J#{gThz#F-^2i{-hY%`6^&wP@Kp ztBdsRYSUKz7GGsyTK6xV=~J5xYRquI;4aycqOl;7Wn+Ir!7n>q~Y{XqD)9ggLJvlBcU9D^K^IiMI*` zpUUshU%&q1GH{P0-zK#${bO;&Z~cd|{07C(9Bp%~0?;K6+yxP?`IA}P_>N+&PqXEG z>$A0QD%>*J%i#Vqs=p<7W$SOb>TluqruGFZKe$gt{2D)(YB}HYtR(4?t+h^N zp1AD8Lh8B8cJ--q{9buOL1l86&a}Vdv?Te0OU>_6KSMTXRO*kjQVsI$tdwqNbi7N; z`I**7bgoSPyi%`IRKkJ+q0$}x*%tS>y>nLTy~)z#QoZN0R41lpe$Qo%%E~z@bP{E? zI_Dl&eOFsiT{t&(rH^v7oPklbD8FhKQa!7eNt?PVeONG zAEo}aPs;w3xgY%VAMfHGKaL-Dc>jAvqY=JG__*!neCMdwgU65YO*i;`Zgfb~AF}*M zgxAzO>7KsetP=>}$N1iWU#PU+2wzc@nQ~6+={1iz{`fJzHSF_N3g4=IUgYOFYek{& zKLv`%Z9VVcNwpc*A8GNKcJO`FpYWs^o_ljKzWa3F|7w-7`}(N=34f{pw%7jHsb{~{ z@J^9T20Z_cAk<|02mS{~`RsO*zxqg5B!5>Vf0OEuE@kDv;Gwb&x$wm0lD|iI(hSeN zxtRap8D9Qjjj6#Kvht4zf4=}n2he98KjcPk@pJY6Rnz)^MaJ`YohHyQZ<4?2XmjX4 z^#9FK|EYe~RQ>U%Z{Fi(V*I%O^hNd87u8?#?y2>6=emhax%d;8tNv2qNt?C)RQ~R> z!gFfn?fz=E{+c9zmEx?d|8v_#Uxl7?IrLXeU}XKLC)A(Sl|k_>jy5W9^!zIoU%n>G ze?<5L6leUucGdk(f8gh8zaizt8UKp#oWpqeRDZQNWUP(&*GBxCgg;2xt^R&-)%x>6 z<2z%+lX6$;-#WMP@5zHdGB!s18zcUGntx*c`#@Ym&VR?)reETk?EPo^#Ai&<{c9Z46;>n<5*ZHpqR}u6g z`OrPs?A)7ME8M0pdE5^Jjxj`E_jw8u#vJqs^Nz;?6=+KcBj3Xjjy_60Mgn66`Yx!; zFUz$5D;s>>w|x7JMmXzR;OOHYrU0@ERT)b*j98pV1sa^&(tRS>Y9xC zbxG-iJBHOxrJ5<|-wUk`qcs`z!J4eK~hC&0+cV-|=Ak zFc+484{Cm{$EJ4yU1($UGvV#!#m=vOHuH&}3)2WkyOR$`+ZufzlO)Z;ExOn5`CcC3 zXm86yn?j$k@mrmnTOOg~jLdpy7UA{^~YJ{)ZbeHRE9^!vK? zp5N98N4r`++79{_#@`u~C37!xaI=2@VYz5AKay^4+gA%y+KPR9=D$U^YVHpDh_TE8mn!ICtJCg;@FZ z0@ohQeN_kR9c`sQHxM}CgGCQ;i=S)mn+Qgm@oy2H{QGg4=4?)3ekF2`IW!@&A$Fq(P_UqTmNfRf5>FE@Yx$T%aYgc5X#TBp0Au%|64-+TU~=S zXK}P~f5g8(;$L-0#+|!1{%?BE8(a^=&xe1D@bEKU#ygHf#_@>%c*K8=@Xt|ZGJ2n9~o=U$<}}EE!q07dfuMNKW`fU7U5%Axi@EZf{g7E|MrOg8sX`G zCjaO!zrG1PelGdzrt#mB2Y+PjkNEdT{Hx|_uPx%g^q2m11N>b48>aDZ5uWmztlXQk zIAk1;_>V{Y*9gBS^0S|fGyStA5B|tl`xf8+wZhik8nyqSQ{{if+u!^W=;P;-e;bK% z#=k{)!X_*C<}3~wn0c;Fm__akibhpo^Z{P?A zeIM5E2$pL9bDs9t6bG&&#s$4hy`X!syA5}qZWanR?*?Dak3~3imCvVg3I}~3);nE# zaJMXk;nx%4&@n!r$|)T5eOTjN6|h#}@-DwdSrg&V4TeKU8GYgo)me)z!u7w~m-Cwu zjxlXGbPM!-I7u#(F*Hwhd-+n2yEnoy77d3^fWF~)DAyG1edK!}!ZC(?KAq%_{qa}`Z@0-+SvR#`Rr=EM; zuJAH!TKx^FT{*||r-fa z7wb23vbasE*Adk#*wUl)-6Q>V=&xUYTlH6|J!UA8hEJIeiD`c#OS|!(#rhUhmiEos zWP{$OdwiQ6AK{u;W^tW5k5j37gFdp1tB+6y!ti@pgsZwOi)%l&Bx&f+;;vF#Q*Og8 zigCARal^tP8~NaOd5NC=D7^g~Uw3bcaBCudy~0_!z?~}`^-~jc*aa~z;+IsFOqL7W z6&iER>QifVUwc^_#YifT&ZPGoLvLa)b^qjHtw()|JbiMrA<9vOogl@`Qr}9EGOqI#rS)=>!>RzaI`umdeX8m^mT*<&1-OgrO zy-Nh=HXU+FQDw%j(K)+T9&Ng+e-s<3%J*l(?ziw2)!gHwL(MG; z_<4$06yfWI&sZk;m2*yY`@{G#zB%Ao4>w2nF5yce{Lj~Z@vj8&V|<6h`!#+?gdY-~ zHHNtp&Rg{j?(t*%cvSxJ2tV+GspX${-0GKt$B*&E#Wp7OU#I%p9_pX;*<7P+(PcWz zj9$MY=u5`gP}F~DBlKfTr%SlGzm~0`d3bw-quneYZ3BJ68$UnC`GX3t>JUzGi|-}H zk89e?1$3cJpl@OP35D0o1^{-{n7M$Oa9nnsLiCo$t7%J&|p#{8hCko45DYsJzhJ7shQq_Fk!EVC-^U zM#WC7-nqxM&cCE+B8=VexWUiZoUdw{0f2Ga>uzSWQ2UMa@P+Y4NKFm_kISnZ?C#{|F~ zr=I&5xA?j2y-Z+a{L8dd1dRxupd>evDrc;a5cX4&iAtbMx08^%3szWBj^+$KG5Q;RmMS z8(y*>MNIHx{IJ8PX{XYLBm9K$*r4XhAKrnQO7LTR<5#J_G;LK{<73(S8&>}bO8`gW zJ6msRL1!>SpOZOuAoM?CXk+v%_k%n9d4vJs zw%)Gi{N+jVzVDOb?LOMw1$3cpp-*@s;PiclbUSAjg`0?Qv^V*1v?=ttFWc$)Rfn-Q zUvby`Hz}SU?d$@&(3a4*Fn)7{`)P!ueJvktX!Kj2@bRXf9lsy=oYV{LYB<`?=xa-uckEKd=>zKyx%Gva z^n6X8%oF_HUE{(Rp2or`u#KqCe0$~$Nzf3f$R5q__kqwgtsf{zJLOYePu|aK9WV0h zp1nJ-U6`~c@0LZnOxKz1(akC=b6Tb97#Xb2y*$#dJ1#9M59bU_FVZJkB{z9yYL9(& zPNVD_2itcnliaaAI{0?YDf)dNgc`iFz|{wHO8Lt(X|8uRlr3wx=(bny^`_zXfqJhk zad^HDJ@ozT*m0OyF6cCS`0m<6I;}g*sc~6nA_2ZCB!WjLmYj(V4+(} zHE-~Q3gyw)eMohqdYbO4G^Xc@-{>W7x=U8QB$FQfM;oto$?G&;50W1G%XHu@;j?B) zgGQbH-1<=i?8viMOxlk#KoZ__#5Nf@Lua7m*T2E!@#A&jOI23_@9pv0u06-|bgK4( zHd_+FKtF^mqS4y+xx$Mv0gX;Ebu!{7E%&MvJ9eXF4$cN^`i zWB6r~Vda${+EFLD?HloJYFj5-WS3GO*riQpT6+iKXYm+AtB>{>TzzT`HA)8%^Bf;N z>y@)EHbTIUG6w7RfPW5r<1@r}KSTWRGsKs_B2W3>;qCfzl=L?WTz^IfcdP!t8rAwE zo5oOA34X3M`T8)Bt^I~W``P+CBIWj?2&3oA&-eVtW!RU0E6cw;&7{5B4|_b&{mCDj zKMe*y*Sezg7*b^$Gal(b!V`9j5pE)9WkSY*U>CP5eL!}x^`A!7Uu+kD{J1+;LINNC zY_58Zx2wTdKc2;RPs6vrqvcpI_%VJ}!1pU{RfHcF-c>jtxikOxSzd*8evGfb$@A}1 zTK%80{L5cC6@T`1cWwfYALGXzzBWyjHXh*{g^$-YSJt1n20VU@Cywz~%Z;4XU$^is zVmFuCuVu?$JC-f~u<)#v%nkqP3AfC{-<5xwo*pt9|MG?T@!u5q_X@u$;@>E|J;Q+X zCx7sA*Z=Ti{vBWUkI32w(oHsm~Gq_bk7h#EEY*^ALEIO&q`YRH40DK?%ZhLzgQVZBmUjO$Io#VZLj<}wD4p8bvoFJ#uJyT{N=C7ulydLre=su%AY5Gt1Ex4YpbnM`MZUW?dQWj zHo6^N_`8-rd}Cbc#(y|Z{=WR#v$}>K*#rB7Z)`sbAvy4F{tNTR93MUP8s;R6f9)*omxKSfhdaER{{r54g=FVhTzAC3Ji+Iem$_rMurHU3Dks)R{xE{lWekv ztj@EzZk2I3@NZPgaKyh`__>NR{%7vL=A)A|EHXsE-_Cj(|KU9Nmn%=@tzQ0q(W-np zlK+%UiosA6c)V@XbL=>0wonoO=IQbaPqN7xvO3S=kdX-bpUt(_|GER-0j6K3%dh^w zIpmp?KM(%pArJhIitug^V9}oS|LOc21KwnfMX)%N5&k-&X9=K$M&>m26~ z8Lm7@UVk4cevDwRyMQj(~q6mgF~ON;o3u(dinJIr1)}Tm%D&2*xt}5Y`DG%_mUw}JTA7Uv6+p&;YK6e zc!Z1XU~FBZZ@9UqdH$61)*m@`PUm3%`jG5e*|xy=!@}X^p<|8;o#IML6tS!(q!BeZx%%x9;2i{KxGZeNNgP`_^#Sutwi-we=dC z`nDkT^3ex;PS;-|9JVX;Ni|%naD>6V+F9(r{jg_=$6>QVpL@gg8czNCke`tf`gLT7 zVrv@x_FLwp(AlLdCe>LCHyOjD{t-rEn|6PMVea8UY z(9Qa8qHHPl4>w<1l6Hz7-%}VNufCB!SKn70yGwhF^4H1llAjAVJ#OUgIq86CEfS4E zVR(MB_;ful*B@tvmn*)sZ&zCDuhqL}gGH`PJV#mk{^E2^SFyux{)YOA+U>BYKI*?! z;>tsP)K-;H4Chu~Hz!@B`hef&VeR`0cTB+1zbd5neNLU#y)A1&uL$j(5iV8v+EhRB z*`hI(yXw2DADuhuD9t|GvG-7++4*8$eyh_#(c=4x-FNG|iuzk3e4;bHb^2@9U!VTK z#cfe`p_glV+@{4@+SFCs-$Yw&H!2!@GonYdH|mdb+8MRiLj5h%-^ArpalJoN|2lVS z9JH!(#BG>Um=39rq+_q3n91sfOnTvmy?NA7aJ<_Czx>@gOYBnfyEM*_4I0Pmk3I0W z%FlNXoPALGZ@v6^i>+<_9(ej6nG~8fo$sBqx17S5X%GC0=qZ-Q^0eQyU!(G~2Tp&I z82Vu&-wxd4+RwYRs5$I`U*n^kj;Rf{$xLmuukL{#Cm9y~^@BSWN^ahlJz3!`=Y}?o z_Q0tR_Q2OKvGxwa&*EW&4ORLKu0Cah^#on8r+eVwM}@CAYY+HGd*Fs|dWQI(XNVtp zhWJ>Q&QkSG&!$Q0&MlWdRqXmR^*5sW53hhY_=!)y<8?Xdto3WSN_POM(BWCbG`&eW zusBJ21L%-Lj(?I{{9Jq3i$g*165 zrai)E_h5~G&mQ5kdpL$4*&}?KE}B;UinI4j{$r-$oAwBwrl!cP{5^T%mua5oeerqX zzbx*5!e>I6@c#Lc%Puz`n=5v-e{+a1{uQDB#QA2rkM|G_Khd0j{jr9&Jv8w2|B=97 z=FYCpCcTgn@1cQD&|giSzxDN)h{Z9+h=;%Jp&9?CfRAyL_c{2FheYGwlLvp35&q>7 z-pRj*{I^7SC;yxCkY7A1@5}C?RUR7YAL0KmduWsL=fQtO{Ko_TMwNd&;y)t%|78!& z_*a~hhy3D^{xG|TmL3+#FZ{78Q&FhbeD~0de@`C#krDE=KjRk%-nD>oD-!$7EP9FSw^58!b@wYuR<6n1yuba5sllOV>-yZBI zlXViS8;dg;<2@|+vxl|(?X&QYh?!kJUvV#v)?%^#Mn|*Wh+uwA8zOS8Y1vD%b#0Su zf7Z6MtzjV*uX!7;pOZe5xDN4TU2JPz_5k8FF6+pcKKJIV92OoptSF^k`ELE<1Lvfy zqsK&lwsk0L%SA`}HT?AN1R8zTM#!1!o9)n#^EJq}o^5T)+H#B5kKk<0+46$obggi+ ztvOAm>17~(wm8GB|43oFQ9MhpUge@H-lp$V>s&QmnzMOp^zP143ftK|!_DTuafU=_ zU<0_bSMu|H2Y|H)=Q{i4Q(i%F?&wCJ$_q^!f_rD(d7j?cd8fY3bcs$~wdgK;+G_eb zvrICu&TM$AAJ10rP9j|f{<^fNJFGL!)diaWsGYJqKtbAQ zok@ML&aB%5I}JTK5e`?n`jnpR2>9tXW#BmJO@wb6(sw3q(L3AX&o>PR_K^RQKoLB8 zy6&C%>1m#aZ&P1hB-}ved`G4G9Xh8{V`J~&B%^bW->K5xYv7TOclHdKpg~nJ_UKpn z?)lIjb)}_gjeN>0sGQ&PsXEV}ZQZ+LuQfSeqp!uiId^$9@^;$_A9W3SZh5ok}9`ef_{8>x^Cv$*Zi*xRnL2cEIl{-1lmKicB~Kg!rU|C!-C zo*{nV8R93NA%5V({Nx`GYm7>@(YV$a)E_qffZFdM#o2g%?jeWWL^I;&+T$4|QO??b zBDBBRvp&^dEe<=n{C>a2X;xDC;aUE5DnE92iH9W3f8O~NxA?jEmxqEH|BfKP@d{*| zXK~2b9{97yYmfQ2WYWVG$DDxM|Ip)3F+UgoEiPA9{tn@ZGF~Csc@~F^-ENO0O_wXB zTYDtdeH%5oEUg^O0Y9Mx**4jrey;{~(j`?|r)PW(5=cT=ic)t^L!WzxD$( z%~|~;BT4ZZi~48o?rh6%{B&xL9|+G4uMTT0%1qyaHY12WzT&3Blo0NIm32V4^7s1Z zjkiTO`h?3Q9DNh|KAa>!(?06B!hL`9xCa7`h8>v1sUN9NLEmur)fZ{KGUlKAc0J@% zz|qfqNc~5B3HlbsZx*iMn;!RYz#(5H-@Bze zqmqg5(&u^~&E#nOXkn^%ThbRD@+B9wq*Z%aCwg7VcgR^seSE&wHfX5j=Ds)T$}z~rf(t4yoPF2`LW|z zUn7ClIrq5EgD)=X4Qr_5eU!7~HVa2^ruNuZ?KpJu&gcDl$5yqGecQHH>tSR`B0G-y zz>XVl&yGu%XO;_ka5&g;u0Ev)2ZJ8nWxY0yPVJDN#|IT(JFn2S2X;i~yEExYinH}= z=Z}B#TA=v3^!P~Vbd&srC;xM~Omn8knJb2(-|889e~IJIZ#|7`9z^F@U;f)22YuJb z#CYO3?`V77@b8oSwO4rlhBqvJj2{p3_bYxpl0VTrLccTl|8`>A?{JTO4)V`y*ffi(ZhvU0f(ub1DcazU%RtuURVa=jwpD1FN>%Tkk}^ga6}>sNW)*p)_4W9yhg zx8G>LT|)jiZu=Q?(q*F0{@KJF{U-9q3e&}_3e)}@^&2PpD_0l{F5Q`>Ro3NsR6J1R z==&V9AvAxiRC^uwCckgka9Jk3>BWA`H58P)`R*>wf2SEB55H-KJkU^;xcQFtLB8`H zdXVyOk-zCZR#$$$+pO|JGj#oA@631a)Gwg4hy9D0=etzpXTHNGQIQj?bMA2+^DZuG z5BnCp+lXVBZw&LmOzp9+&UepN*+2W{%{w-!jreW|`&JFITjWid@2C&vyRGlDwskpX zy`Zo94)a-DeM(=A2YpvED^iL2z$m{>iJg?(TH@M+eT#`tOntUJ6PfNGhi7|*ve%C+ zba>{=cFi}R708}>4IR?&Sm5WHFINT~ZsqR}^VP9A7~6cooKO|kjaAB5rFA3tQS`Ou zOZJA$J@MO@Y~&taMV)l@4)1>(vOdE13m?B9^zjouh}ufjvUv!1Lc27+L#O3r`kJ0lPTkPahc#^*2wsMx*+x z)qH8T1_b7of8%uXN*aBeR_^?kXmRI@60jUoqNtb??CE4V|uJ45eu=PLpzroh7du#!0ob|fLCLwNc z#M?715$*obEbWz|-TgZst_ya}nu($mKG-C6AJFsGkI4QIt*Sdbt*Zhp`q;#0O{Rim zcr25w`l1gHi`Ee(zM$BLM$haLY#fVoJVbwu%8zY^jT4_MHal$~N4Y9gMt%>6-@vio z#94SmVd^>iYwe1{bh+eN^L=mgq#c>`do^bBlscQIvO4!~^u~1J`!~md=$`YKtiM>} zKSzGPHV<FvHS@9b`!U;a}+?{#WcFF&TxwFh=fWoIV+qj=g`wF^H{^;e33pUZ9; zbXI}vRh2&x|ItwXV{?=n-GyUrEq$rJjidL9D-|wXuJ2t7&%EC&{*bi(e9aTD&`AaF zVmvYNybqpve^hwV49~r}UGS>EB_R1OF$5l@BHuEv1pR8{Ja`j~w7c~aG zeWZ_aX7ci&4`ynMeOYhUzu-4Jx?KBY+}`}SjqPZEmij<%uUj#-&xb0=>7lnr!v3tQ zPwAcJptmwP5!uM@hrHfqf3f?xLf0PX?FAppq-QA`b_MSFJDcjw&!x9}3SBnep5nhP zl%Ktr>CW^fb3=8cx2uxC+uMXE&G6it+XWx# zZSd&rbsx{a{$srj9=*LSPds|N{ao=Bjxmi+HT{dOHr>7Q!NN(K8-0pyMIO_~+~Wq+ zr_8RMN$0JK`0;yGhh3sZ)Mefag`)v>|b# zOU>`{mKm}^V}Jc&%c8&X)rE|ch94ECeexGxZEfatVXw*yP3r@D$Chn%wrsneR`IRG ztVZ0`md!{8bRzvg#ZIi=xp(f_7Zr8iPQ%=u|s=k%958uCsxh%SzUc-V zMY1fEVCV8zUdSzeE}b|x=)_6>K_^Tapn(pa=_K@SeWVlXr4zxsXI8gQ)rq;DS%HUM ztP{bb6Kn7AX*M3nXD;Sn{&0|AiRC9`<*(BoP^^=`_;r)Tik+BN3@^W(v%;a+|iSN`^P#NJUY4k&iwGEN9L19`Y_nP zsnXho!_J*a*Fzh-dZF^SJ@`d}$%y8d4}944_z6yrpZ}jp@*$U+-(~R(*`RTP{?OyA z<(nR#DDb~glMBYTGa1``_svP${Pl_EjBTt+Ee3@~a)qlDjm?BozuTx;C_5 zq{FEXboj#StZl7EX7JBoxc5%zv>@R`wJh-|IzcWa~nPQarx^59{pAy;TK--&%jXz z+~beb{oDK)pZwCx-$~+0S@|c#pRvQb1b4;w-A|gIOMW}QYVBVa_RLKGI3nR<G8OJ03;}QP};bZ-^^qO(h zNrIothNS=CCgl(3V~m$i^;e5SM)ni=y|!9aRP)K%`saMjm7;lc05*@m>?_>j=aN4Y zh#LQaz~9bI1v1Vv{>aGL9r(AGXnm$%A_LF-F(Le$#XoFsCNFr+(hC6N=i*;EjelKu z24=i+@pos49`pQN`@Jg5ze9KwwvE4k{cOu!(7?~df6cV|9|-&>pJPV_ureWI^W#B& z4T|PhXZiCCZ-p>{Z1Sg*-q-{Q{9OF4qgwsf1$%hb{x2RpAEf?y=slcf`F99!XW8KU zrB^@lJM(k(KdCY2jQ>F3Z?gJSf3-MdEZ^q&cS_Lm`YeC!`LmVX=Fg*^x@$9N{9N)c znO6UGVGT5^{u2+@3a5uT>KXbk2Cp~2m8%r^{M`9 zamYwayoLi`*QsyB-00IhV&?0h}pR2Er)L#(^ZI(8(JEZcZGPQ$ zL%=zHlQ`Kg;%D>?+bdj|p1r{DyhnU2xQPgd4Fi3j>aUv=UNY#v>-UQYhh1a&uw9^U zVf^whXrJ#m&+l`ad5kKq| z^5C!upzi|VQmyrL|A#%l=l{}2B43^6u#hFe7J$Bm@tcLKS?BBXzXFbOqWeg98csTx z=V30W%QY$|XBK)s?)lvu;n2%IUqOQIguV|a$!kQ|*8SAyV2lf64Swhxp1m3F&BfZ2 zU?DDn%5@%88s41&`dPrE+Nyq4HkrRd=SI!B@vZ5Qw={}s_#6VWIW4KOhc zaM0+JPuaL13whWhHeO&TH{ppH(vgYuxsnUnYM$~kJ?mGX{rg{Q9?jO>*s}c+Fr*nD zaNO6)M^9~^C`i>LNo7QXbAe!RtXaXhK)7r<-P7QGf1V5QExrbonfFX;^xTuZB|E>e zR$-p!Rw!@gg&t=ZzGFZL2hy3Z|2c+_x>(-f|%0KzA)!WF&3)771ZTz!KT%HwQ z);otU@is$4!E=+t^v?6MPSWqj1seHy=gyD`8qd`q!vx9medn2djFoRLNo(b={fgCx z-><4(?e_@6)V-I^4Nw2h-BSHd(}nuAm-p#3ar|U<*XIx`Retuc=yR%)#M*&-+~W6L zQdAm#gYX0&srIne9PTr?`jic{J=Bw}0cU~_{@dGd&B`!%R-tPT))4Ep2A!w4V45b^G+a^x z4g6d-+&GDHll+Az%vhZ6EDk%d-K~Msv_qNNwFU-1s`4)vKHh(O(Py69108(yiMg#| z4b2$a8sW$9n0l7<#IF0F27@2tE4O?3N0nBoU+05A@-MtW@6ai3KmFluzW1S}=I4@s zVHk)e|8n8UZ?bZ4&f=(J;`q)`FefJYuMhZKYY?f>DK7rbm+{}82Y+OQ5d7`z)TI2q zK5Ysk3*_KGz5SO5yvb@%e2X&~;jih!Ipe>65BYD2@Cp4t5B>|uvm^9>WO`%N{#rwv zsVG~6U%IyTVp!nkTEp2Mq}BiOum&+%!J4x;WNhB)`8O)D`RpwJ_S^j)Bz7Y1s$?@EbxoE+n;DKBpCJU6>g zXTg>wwaHR_fn}-gW`1^-kqqwqLzsK5-hJt{ru@^TMg8H~*})-_{?#4E(@br$ui72V z|E-zJcdS-B#e33DG}#?D1sNBqKCnCbZ<{)9LUK+Iz0nXhTEU}t#{=H+zMh zyt~X>UjK)@uFnOa=FDtwSz% zUqx%vHxFK<+-=ej7r3;|$~UCHR3Z5L6yEsH=1J5i#&YCoiE>pdPr3f4)49ZHqAaaO z<*AGEU82>}m0B;MyQc6|d75X)7xP`CJXIepNY{Qq?>@<2@HOda{ZajlFUA$)i`n<2 zQ_gOxTKtCB>NeRN;plVAgy9byUybrwy^N|4Zxe<;aBiGvd`!bRe*E6_!rsDkq59tIPrX{X zHUF^$Ll?8mzv+@Z8Kzp26~zKAFC$c`JXwVW}AMSL4Nf&Y<&8C zh}9}DG$}7`@67*~xe?y6o4G$x`Q6+f^pw@PFL{y-zUs1~+J>dhgBQ`P+pjhn79N zxJmx1qpEMH{q$}1h00Ym;oA?rSGr#N!4dNQgBJfMLHxofJ}D^n&kc!tbGH2b;$NXC zlm9tiy#AkL!FP)d0>Mo=`>Fb)|BZ+8TUjkHzQs{TwSj-T;%g)RgX;h6Ih6pAJK`U$ zqvq%8KlERm)n8{AKgP?a`m4nuBQaBKAC({5XE3zCN9^Vry}t~9&YtQ+lId zSo0Nnc(X^)KGrvB0mfMD9??Q#T)6Sm{QJbe2{^hHdu^7NzG3t&&gKmG9r|k@3qPw1 z_|YcJg^G6WXCln|#JHhVg=x3`?EES3#kRNVJpN^RF7)NXlsw&67pATq2*@pwp5r~* z0i`cFUv)Esn~rO`QS-6tGqdjF4zc>1+J`yL_es9j#C-g~F?;rI){+@`i>y26&3s&< z`+VnP^z`!9{n7>UDX*Y%em<^Q=f_~^ntN$JX7~RJ{qZbd=CydY%F2AqyCFzmb7{@bUNeT z8Tgy-i%3oCV{~q1p`QhVN&sSKPn{ z3sb0`5wM(Nuzb^fWU@H0HWyi3?DH+Fjmm%I(SA>N^t;;MZL~S0*6rz@sKuCnQzAyr zeE;?tlAuwmKjx5E$pM-G#M0ls|T|Ua`-j*;v8wzr_$-X*|oGckWQGNN2cFC<> z9=E1%_*rPfXda?Q!T<>i8P0G0XBTI)&<~M z7u0KA5Rcw>EdC6S))IWvZG@KvJbac#_%7kCFOu)k_rL6~=EwMsfG<~KM}!{|KF;^s z_SJs`j~~Z(Mfk1=UwU^YWv(_?diptk;T}K6uL^j!#8*Z5dg1LkGPsR@drg)3F}~m7 zbv#MJ_DA?G;ZFk)-0ugL4Rebh$+5V+W(!!m)?^}h5zza`+4t|Vp40vsyC5;h&NO-CJNmrE|c{u_67{5H=Q>87B@TK?q zXIx-#x4-|%kDDLk*GKsE5x#yJ{=JL;?9>o`jNcyc=-%xSzDsy5zb4)13zk1d06)gp zd?(v}H9NBPH#Cj^4<7uHv!n21d|SXT5bd@IUphEd{{PzlmF`q1evI!8c-pTw!q*EQ z*Z+O5-MN+WCDFz3`<0i}!{@{(ijqF~0JZ z?}@whoreR9Qxw+o0LhIVK4sYXNL?%SA_M2ao4H?H=66I|E84B}{;eD#VS{$}|XW);r?u_`?|1gu@uI$t+uKuN8?lM1@9p4)&#rSs# zPyX5Lcw}4|>YvWFGOGW2)qmXo|LeL_z6Cw}xc&zmK23*|HW1;vgg*{Ia1-N4y7#&8 zV?4>ck7sk0&A&s!2k5L`=Uwza%|FW3nfUe}?bN>BhNOBhrh4}LioA(TR%1aLwWM=i}?3N{7diC8QrMlNB!_W zsG`yK%DaGV9RH9zf#{um15FSY?ENllC7EL>}d1E0`;!#dV<#UxfY z7Ke@)oRigGgR+c_f5k{9)sitWS>N~hw>tfSpG$w(zOeCc3ih}0%EjMgjQ54XvktGw za~<6+ITzhjn9di2#bHg0E?{5Ycw(bZcSFKW@LfeEbVfMrcFT)x4t)zde@NxK#P0`R z7vZqiEgv>H^ev2ECmcTf?vHTT>BQr(#gmZF$H*p)aN`jU``q$igByK|>l3beg|C;x ze&b`Q7wmG&gY9kfEp9a8w>ZLKk6RvWZs=PWf9{Wb82LUQ;jqI=$6;$5eIFy6Rk+^Q z`*s+KaM<6L2OHbyTU?iL{ViU;=ls^kI{6|Twl(w(gFmS7#Mk_LOmB{G*xQy5n;QBS z#-9jbX^^azK&Y2Z8yBwW z8sA^;i*VS-mIoWy=v!R%MxEOz_x(EaKR(vU7vZpdp>G)cX5rTAJs;}xln94COgavm z7y2#`E~^wCKGL_}ha((zu;s&6W1r5#_`||A9_n#}5f1y!@?oPv-@^E%59pcj6~3Gw z{k=~?zS!=T8w0LTNjA5#qsbf( zeZ&1p3oG~jT6osja-P1cru2mqh3V+MMQQrC!nF0CqIBX({XT*2Nh|O0GW{yz(XpW< z(A2ZjlS_=evmxGjpbuuY6sFE5m`qKQb&`{~rr&8#`I0&5kmzUb(>FoCsqbhWUX(WK z%y8pcy%!~(Wn%?tW=PL8RW>l)cNC|~4k^*^1kFjeg*fO~eEFKfv|RaK`XNq&=p4jw zCVlK2+lM|RY16aJo6bs-)1&h2?)DusWPk=XBKy$n73KSm6MK_gN6bk}<(F-;cJcer z$%EeREC@XR|LjAz>%84Nbpr4`IxWj9+`l0?Q>O|~O&S#6q2EzmmYkRWckXuGvzv={AuPfKfozF%1zBkk-CTe$8BpU2gwY~d!^;>0kn zcjs6OXF?|T`&q(|1Y3M}SkiOhE3}r$2RjqK=^5gCo*};V*ZGxy!{z=rCaAv+x0ks7 z%v!E*bAI^BQooj}6uxpvp~JJ5>rwl$7eb%MJ$mmse>OkYT8h0WoVEW*X#Zj#J>_a~ ztk=@OzgIcZn7^KhRw~Z&9{uH;-GT@|C;y;)Ci#bFs`UHm&S)ZIU-V43Z@I5Op6T}d zV(K&9TxZ0j>*FSiQm#hA(|FZk~pTtXlt*i2aQh%)FxBkZCee7H-{n!syRiG$-AnPPp^w54pU#eqWJuUIU`b@6NZ$Zy75}>0{M_ zKDvp$B}YIPbk=m&T&^{>>W+8Rx0e^Yb5qcq_dVHgD(j-CtZhFjNj+ZQf2b`<#y9$K z?r46m-m~$q4mJ(CVY;(8=AEI)rWuk= z10I`Z(U$z=AGJA6f{sSzUm<*t7@rWBUv=}1S8|J=Yfjq~D$2^A3H%Qa_}H`ZQ%8eg ze}Aqr3>NwFkE;IrB!5W+I{43{Wd!l#HrW*R_m?ScQ-t3td_{z>-Cmy|h#%vL!zQLb z;V3`+tMi=G8t(DWC*akP$(FxW__+LU?|A;#p^qQ)Z+3Y9yI;)_zEAkL{FirLyZ}6Y zj2{X7NgRprnLkW@zIuD+2X57YALF4(|6jt59P%@#Xa1O9|Ec|LCf$0u-+wtHns;bh zM^GbxKE~YO!%1?RTC!ER>Z?8OO#z2~ifwuN2J{Vw->dN2Klr_h4@5Zni{+zFK;Odn zn-t!Bs>i+RF`ojzxSeTB==)TEEg$t^bm)5{9PMlQXhY~*7@xUie3{?3dC}uO1%9-v z52?L`Gx`>{)0+;-!0j3XqG7+8WZ$!IzC$LCelLWytzYo;?+Wx8S6iMsV3K~1z7exw zn-9Bjsq`iLW$gy+BSj?}zpC@$YIkf2!nk_v*G!LFE}kp&ogDja4)2dow-1`$m8HM= z+LE;4`Z;OEO@-+K(ZBK?*Erhq{wI_E;iRlx@J;R699ymLV7S!$F3mG!gNE4!`|Cbm zyMXzk<)-3vKtAOaRLAdcAvos$(tG{cg%t{y7W?uu zH!jlL!oH}vkyBpP!##dnCo3JkHmyEY&JLu=;g-WX}$(DcQuT$s7cfEemec(&syp*a1L*4-mKoQ_10+a#HR5$ z^+)v$=vx?nJ-92pP4V?V`4qZ7{ndxm4~2uih4HtA@O<4L=z3yUD@8c^BJ{~`u14jq z(K8KjKZ9eH2N0D9FNSs_xSJHW&SLAl$g=qqRG0^c#78kyc-3+SGdLD8#4z9 zhoeq=9xh3_XI343NlCKycRoy;eGS5LV7Ke9Olx|c|L_jkNM&JKFI~xcpS0%pc$?y| zi1yaUBigSjakRKVdz<=u)pGx=$Myl%zQ5Sf?77?T)tnsBTJ_f~t@c+>rFFY#rFuRE zUA{Rpc!1wm7^cj3CX>&KCJPYVG~85}HVD@@l$ufd1HfpxyGdF_?GwhR!_sU26+dLFK%SQSm2#p3&6D-r0LF8-w>0X8-0)hsukM z!Tt|YSiN(Po4aOdQERXads&F?k1A@xKU z=g~7E>H`~Nwp13T zHR|KG7aXT?Pg>Xge!f@~bUd;x+mT&^uF@K`X{Qgnwoy9g0QyzVOF#B*$Rsu6ne?9H zv%30W>4n!E&ASZwy9;K>3JufM*sS^LYR2!}iQ;rf{>WrocwIfH@pz z)lQ{qrTrvhDtiK19}+q zcyx8!gudOZ{Ko`L-`~&qKDYR}be(Nr8vh#M$xol0?o8L9Pf261ll2e|{HV%b@zfs3 zFTA#DoHKmW9^#LihVRJ}-zHm{Z*!$S*r2YTswQe>bpzdu@J86ytlwkzc(cMx<#)x6ucri zTHmX_qh4qFU21-p3unj%jaTRoo1HO{?^!N%!>X%_(oy*%`&&Etd0>;u3(dVd59In@ z^(8vpb%ExEW!fv8d7p5hWMW=mttBxMYX|OebML&QsIK1c6I#8}--d#|oT-iW)p_CN zDtl$?mv@Y)-LT=y6z0%`$9}c`b@KD>a8m?+u5&Hpfrs(0`KNDJn*-t^SR8Xtf8bxK4E+)R zHsR+e&iKFNF~3iTpNs#dz`*#g&4WKO4oC72NBqZxkL5r6kazzO7WldN?;`)d@{pf0 z9vrQqmS*d}P54;;4Ntsu75wpY@!v)MJoqDHW#CWyS4RBDgpcLl`1w1}g+G2S{=3Nk z?>yuekH$#;#)yBL@Ui@>FB{Rx+9bix#eWz1^Wcw+?UDTL5&tpanOCjN*DKM(%MSR3)LjrflV zAItyfgGcJAq0U#z&&7Wi`FG|azj!o9{F@{GZNkU$zwnh^OW=>6i~lb2=fNKtyCeSH z5&tpaWBHH#YvUI9Y~5SIh*_9X(II@rb8q!<$7-|H~`YxCfbjF5o;3j!_UKNj#Ida9R$|1S1VCJ*@o z5BQf)JoqDH``oPlX>ZHwpE2R%ea5;MH`l-&KUe!tAAdDr z57=~FD7o`24jH=x|7}X?j`&yV8yR$X>whoqzTTQB`?5nI${zUWwEovCJjt`|OCe+X zv-RE^zd5SB?H3li`m66MO6$K};?Ct|AR>3lFHT?U@3e=`LR1cX>C5(W`$FJLKTzWE z?BQ=aZ0a8V*zf-FbqCVLjo&0(W|MzT@RJC~`ieZ@SOXb- zVty-rD}^h&(VqkORfJ>BKpt?cU7+uRy6Drv$p(ej{meg?e=NeWp7Htgdu_r&--k7) z>p94Fg`3$YQ{+U1!$$Y{3KG@|(Dz~OO{pI)D9zSO@e@A9wO_FRDJM2Q^bL20__Ybw zb(8;%$chMuP3-e&K*=^T`ovu%erqCrM@P6e*^-9CriQ)`C&|w>h&C&{{Bd8OwGj>* z)Nt6sMxVGJs-IQtr~dgaU!SjvaM;I&!-j>v4=2gR;@2P?Vd}FX!eR3fPrYD!Lf-{- znGnAf3J)Ic`JEf#u+@CNf&`n<=o9xJr8@r+@oSB6*jR?c)`Pwes{|_NHiZ}8;@jap z5w1trs|((zZ=uSsS9yJYzo%UGtl|`!W?uaN zeYTkEO<@099!s=S+@Uv4-lOM<3uf6fZddu(Gv;g#<+gg}9#{E_rA3XIE2xfSE*Cih z+lAwPrZ(7D_l%2G=8|K^ca*C9ymvx)Kz6~3LuIoiwashQP%ADeboGJFT%%_}Y|=>` z?dn{u_~_;5$!1Av2MI0za*4z9U9y4WvSZNaocW5)p`TB6&b0@7&SB3wKA$-g1!uF+ z+2p{xXHkdj8UIEPclbW>UvRj`Q%}2fdT1y00Sc9;>rV!6KGDIND+>BEE7hRoOF|0+pIXY@VzTAiWW>BB3|n3Fa> zTlSCW^i&q6$o50w7UaN<3kQ8=adlFo`h|ZF?=6bogOUDSQBvme!EZq(+hh8#(m8b5 zO)G_4{V~t)w-FBg0ex`vLv!mJO4A_)Hwag*bC;w%A>1$IBVUYr>tV8gluyyl{rf<@ z`!S(2Aga%jmwd{_Z8)enEv)gni0_i$A>H}KZ=&h(v|dhcP}=o9wH)R9!lG=%o+tXp-D~ zoAUgP`e@Pfw{?eR`=`q@%LQH57$zK7pVCEb(#5ktCX+_P88+afI>QE@ zGi()S`1Rvt#u;vE5BKZ$ehsqP%L*NyxnP0TpWVV7A8;pcyfNh#Ki9dAvY?Bt{M&;3 zCkK4&*{El}A)a#`Hs69DmHcCQ%0D*f&s9{4&RB_;AAHTh-WGvA?ko46)L}mQBzEwZ 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 - Next + Next

diff --git a/build/help/Commandlinearguments.html b/build/help/Commandlinearguments.html index 022a37b..34f4118 100644 --- a/build/help/Commandlinearguments.html +++ b/build/help/Commandlinearguments.html @@ -86,6 +86,18 @@

Enables debug features. Not recommended!

+ +

/R:n

+ +

Automatically starts DxWnd iconized to the system tray, runs the nth program in the configuration file, and exits DxWnd.

+ + + +

/q

+ +

Quiet mode. DxWnd will not produce message dialogs.

+ +

diff --git a/build/help/Generic.html b/build/help/Generic.html index b179e05..8107856 100644 --- a/build/help/Generic.html +++ b/build/help/Generic.html @@ -89,7 +89,7 @@

SAVELOAD

-

Optimizes the CPU load, but only for DirectDraw operations (DirectX1 to DirectX7).

+

Optimizes the CPU load, but only for DirectDraw operations (DirectX1 to DirectX9).

diff --git a/build/help/Screenresolution.html b/build/help/Screenresolution.html index 9232d73..350051b 100644 --- a/build/help/Screenresolution.html +++ b/build/help/Screenresolution.html @@ -49,7 +49,7 @@
Parent - Previous + Previous Next diff --git a/build/help/Windowsizeposition.html b/build/help/Windowsizeposition.html new file mode 100644 index 0000000..3f0f703 --- /dev/null +++ b/build/help/Windowsizeposition.html @@ -0,0 +1,100 @@ + + + + Window size & position + + + + + + + + + + + + + + + + + +
+
+

Window size & position

+ +
+ The configuration panel ›› Video ››
+
+
+ Parent + + Previous + + Next + +
+
+
+
+ +

+
+ + + + + + + + + + + + + + + + +

Free

+

Allows you to move and resize the window freely, with commands from inside the application (through system calls) or from external user commands (such as grabbing the window border to stretch or move the window).

+

Floating

+

Move and resize operations are allowed only from user commands, but internal operations are intercepted and neutralized.

+

Locked size

+

It is only possible to move the window from user external commands, and the window can't be stretched or altered from internal operations.

+

Anchored

+

The window will remain fixed in its original position.

+
+
+

+
+ + + + + + diff --git a/build/help/js/hndsd.js b/build/help/js/hndsd.js index bdec263..1b31a5a 100644 --- a/build/help/js/hndsd.js +++ b/build/help/js/hndsd.js @@ -1 +1 @@ -var aTl=[['Introduction.html','Introduction'],['Gettingstarted.html','Getting%20started'],['TheInterface.html','The%20Interface'],['File.html','File'],['Hook.html','Hook'],['Edit.html','Edit'],['Move.html','Move'],['Log1.html','Log'],['Globalsettings.html','Global%20settings'],['Flags.html','Flags'],['Texturelimits.html','Texture%20limits'],['FunctionKeys.html','Function%20Keys'],['HotKeys.html','Hot%20Keys'],['Tools.html','Tools'],['Window1.html','Window'],['Process.html','Process'],['Desktoptaskbar.html','Desktop%20taskbar'],['Desktopcolordepth.html','Desktop%20color%20depth'],['View.html','View'],['Status.html','Status'],['TimeSlider.html','Time%20Slider'],['Palette1.html','Palette'],['Desktop.html','Desktop'],['Shims.html','Shims'],['Help.html','Help'],['ProgramList.html','Program%20List'],['DxWndintheSystemTray.html','DxWnd%20in%20the%20System%20Tray'],['Theconfigurationpanel.html','The%20configuration%20panel'],['Main.html','Main'],['Generic.html','Generic'],['Position.html','Position'],['Hook1.html','Hook'],['Injectionmode.html','Injection%20mode'],['Hookflags.html','Hook%20flags'],['Sonprocesshook.html','Son%20process%20hook'],['Additionallibrarieshook.html','Additional%20libraries%20hook'],['Video.html','Video'],['Windowshandling.html','Windows%20handling'],['Initialvirtualcolorsetting.html','Initial%20virtual%20color%20setting'],['Colormanagement.html','Color%20management'],['Screenresolution.html','Screen%20resolution'],['Input.html','Input'],['Cursorvisibility.html','Cursor%20visibility'],['DirectInput.html','DirectInput'],['Cursorhandling.html','Cursor%20handling'],['Messagehandling.html','Message%20handling'],['Keyboardhandling.html','Keyboard%20handling'],['DirectX.html','DirectX'],['DirectXVersionHook.html','DirectX%20Version%20Hook'],['Emulation.html','Emulation'],['Filtering.html','Filtering'],['DirectDrawSurfacehandling.html','DirectDraw%20Surface%20handling'],['AEROhandling.html','AERO%20handling'],['DirectX2.html','DirectX%282%29'],['Ddrawtweaks.html','Ddraw%20tweaks'],['Direct3D.html','Direct3D'],['Direct3Dtweaks.html','Direct3D%20tweaks'],['Texturehandling.html','Texture%20handling'],['Direct3Dwindowtweaks.html','Direct3D%20window%20tweaks'],['SwapEffect.html','Swap%20Effect'],['3Deffects1.html','3D%20effects'],['Timing.html','Timing'],['FrameperSecond.html','Frame%20per%20Second'],['Systemspeed.html','System%20speed'],['TimeStretching.html','Time%20Stretching'],['Logs.html','Logs'],['dxwndlogs.html','dxwnd%20logs'],['logoptions.html','log%20options'],['loggedinfo.html','logged%20info'],['Libs.html','Libs'],['GDI.html','GDI'],['OpenGL.html','OpenGL'],['Smack.html','Smack'],['MMmultimedia.html','MM%20%28multimedia%29'],['Compatibility.html','Compatibility'],['Tweaks.html','Tweaks'],['Registry.html','Registry'],['FakeVersion.html','Fake%20Version'],['GOG.html','GOG'],['IOtweaks.html','I/O%20tweaks'],['Registry1.html','Registry'],['Notes.html','Notes'],['Configurationfile.html','Configuration%20file'],['Window.html','Window'],['Language.html','Language'],['Position1.html','Position'],['Texture.html','Texture'],['Keymapping.html','Keymapping'],['Examples.html','Examples'],['SnowBoardRacer.html','SnowBoard%3A%20Racer'],['RobinHoodTheLegendofSherwood.html','Robin%20Hood%20%2D%20The%20Legend%20of%20Sherwood'],['Specialkeys.html','Special%20keys'],['Commandlinearguments.html','Command%20line%20arguments']];var oWl=['hotpatch',[[33,1]],'content',[[54,1],[70,1],[57,1],[24,1],[79,1]],'otherwise',[[66,1],[11,1]],'examples',[[51,1],[54,2],[88,2],[56,1]],'beginning',[[32,1],[29,1],[33,1],[67,2]],'capabilities',[[54,2]],'exclamation',[[81,1]],'queues',[[68,1]],'matching',[[57,1]],'become',[[79,1]],'fortunately',[[31,1]],'integer',[[75,1]],'altf4',[[87,1],[91,1]],'surviving',[[0,1]],'few',[[82,1],[92,1],[1,1],[3,1],[2,1],[0,2]],'rare',[[54,1],[49,1],[75,1],[31,1]],'row',[[2,1],[11,1]],'itself',[[37,1],[48,1],[29,2],[2,1],[28,1]],'meanwhile',[[0,1]],'elements',[[28,1],[54,1],[62,1],[39,1]],'configure',[[83,1],[29,1]],'application',[[0,5],[45,3],[16,2],[68,1],[37,1],[5,3],[51,1],[29,1],[54,1],[71,1],[2,1],[91,2],[3,2],[40,1],[11,1],[7,2]],'idea',[[30,1],[75,1]],'buttons',[[44,1]],'attempting',[[13,1],[75,1]],'speed',[[63,1],[87,2],[0,1],[75,2],[20,1],[91,1],[64,5],[11,2]],'article',[[23,1]],'terminating',[[2,1]],'recovered',[[48,1]],'ahlgrens',[[51,1]],'channel',[[51,2]],'enumerate',[[56,1]],'let',[[5,1],[75,1],[0,3]],'preventmaximize',[[37,1]],'increments',[[64,1]],'hookglut32',[[71,1]],'key',[[87,1],[46,4],[43,1],[12,1],[75,2],[91,4],[11,2]],'blocks',[[75,1]],'limitresources',[[75,1]],'combination',[[75,1]],'stretching',[[49,1],[29,1],[70,2],[87,1],[45,1],[48,1],[20,2],[52,1],[91,3],[64,3]],'shows',[[19,2],[90,1],[16,1],[20,1],[64,1],[21,1],[22,1],[23,1],[26,1],[2,2],[24,1],[43,1],[89,1]],'when',[[73,3],[19,1],[50,1],[0,3],[56,1],[84,2],[39,4],[9,2],[29,4],[51,4],[54,10],[2,3],[4,1],[91,5],[32,1],[30,3],[28,1],[31,1],[44,4],[62,3],[68,1],[64,7],[37,3],[25,1],[43,6],[72,1],[75,4],[85,1],[33,1],[11,2]],'fake',[[77,2],[11,1],[30,5]],'detailed',[[18,1],[68,1]],'glpixelzoom',[[71,2]],'whoever',[[24,1],[0,1]],'config',[[92,1],[37,1]],'downloaded',[[0,1]],'reference',[[30,1],[54,2]],'works',[[9,1],[49,1],[54,1],[31,1],[60,1],[13,1],[32,2],[48,1],[33,1],[56,1]],'prompting',[[29,1]],'never',[[75,2],[0,2]],'from',[[87,1],[1,1],[67,1],[0,3],[39,3],[59,1],[9,1],[29,1],[49,1],[51,3],[2,3],[54,3],[4,1],[60,1],[71,1],[32,3],[80,2],[40,3],[79,3],[82,1],[30,2],[31,1],[44,1],[45,5],[13,1],[52,1],[92,1],[64,1],[37,2],[25,1],[72,1],[75,3],[3,1],[33,3],[58,1]],'virtual',[[73,1],[49,2],[51,2],[54,3],[38,1],[50,1],[44,1],[80,3],[79,2]],'lockreservedpalette',[[39,1]],'filling',[[1,1]],'bypassmci',[[73,1]],'incorrect',[[56,2],[54,2]],'shutting',[[32,1]],'suppresses',[[45,1],[54,2],[70,1],[56,1],[79,1],[39,1]],'specification',[[54,1],[84,5]],'cleans',[[60,1]],'module',[[31,1],[75,1]],'approximately',[[20,2]],'crashing',[[32,1]],'declaring',[[38,3]],'situation',[[45,1],[33,2]],'videogame',[[0,1]],'block',[[75,1],[32,1]],'direct3d9',[[48,1]],'timestamp',[[67,6]],'rid',[[15,1]],'assembly',[[33,1],[64,3]],'operate',[[2,1],[54,1]],'calculated',[[19,1]],'hookgdi',[[70,1]],'fifth',[[75,1]],'fixtextout',[[70,1]],'enable',[[46,1],[9,1],[44,1]],'scrolling',[[51,2],[44,1]],'api',[[39,3],[64,1],[70,2],[71,1],[44,2],[45,1],[75,3],[56,1],[33,4],[35,1]],'series',[[44,1],[37,1]],'each',[[79,1],[30,1],[28,1],[45,1],[50,1],[67,3],[64,2],[27,1],[15,1],[51,1],[54,1],[66,1],[2,1],[34,2],[48,1],[33,2],[18,1],[57,1]],'differently',[[25,1]],'operation',[[63,1],[51,4],[70,1],[50,1],[75,2],[32,1],[3,1],[56,1],[79,1]],'task',[[19,3],[31,1],[0,1],[28,2],[45,1],[29,2],[25,2],[2,1],[4,1],[91,2],[32,2],[11,2]],'playable',[[54,1]],'sound',[[75,1]],'forget',[[0,1]],'necrodrome',[[44,1]],'ordering',[[56,2]],'set',[[1,1],[19,1],[0,1],[84,2],[49,2],[29,1],[51,4],[54,5],[71,1],[80,2],[91,2],[10,1],[40,2],[79,1],[46,1],[30,4],[28,2],[31,2],[44,3],[52,1],[20,1],[64,4],[5,1],[17,1],[37,1],[63,2],[76,4],[43,2],[75,7],[11,1]],'whenever',[[73,1],[54,1],[80,1],[43,1],[0,1],[85,1],[48,1],[64,1]],'overwrite',[[66,2]],'keys',[[87,3],[46,3],[80,2],[0,1],[12,2],[13,1],[91,2],[11,9]],'boolean',[[84,3]],'predefined',[[1,1]],'sys',[[39,1]],'pixels',[[85,2],[50,1],[0,1]],'246',[[39,1]],'found',[[33,1],[2,1],[0,2]],'disabledisablealttab',[[75,1]],'currently',[[84,1],[26,1],[14,2],[25,1],[19,1],[2,1],[0,2],[70,2],[3,1],[35,1],[37,1]],'wouldn',[[51,1]],'access',[[35,1],[64,1],[43,2],[18,1]],'dynamically',[[20,1]],'pity',[[0,1]],'injection',[[0,1],[34,2],[75,1],[32,3],[24,1],[2,1]],'100%',[[44,1],[75,1],[0,1]],'necessary',[[33,1],[40,1],[64,1]],'versions',[[84,1],[54,1],[33,1],[43,1],[56,2]],'wm_activateapp',[[37,1]],'nopixelformat',[[51,1]],'lighter',[[39,1]],'cpus',[[75,2]],'unsupported',[[75,3],[84,1]],'wm_windowposchanging',[[45,1]],'tweaked',[[54,1]],'nobanner',[[29,1]],'preventing',[[45,1],[39,1],[71,1],[44,1]],'clicks',[[45,1]],'pending',[[45,1]],'placed',[[1,1],[30,1],[44,2]],'acceleration',[[54,1],[75,1]],'regardless',[[0,2]],'retrieve',[[45,1]],'released',[[51,1],[54,1]],'singleprocaffinity',[[75,2]],'source',[[0,5]],'leave',[[48,1]],'definitions',[[46,1]],'print',[[11,1]],'wow32registry',[[76,1]],'saves',[[3,1],[11,1]],'closely',[[32,1]],'adjusts',[[77,1]],'greater',[[62,2],[32,1]],'read',[[51,2],[54,1],[76,2],[80,1]],'fourcc',[[54,3]],'lacks',[[56,1]],'setsyscolors',[[39,1]],'simple',[[2,1],[0,1]],'type',[[54,1],[68,1],[79,3],[43,1]],'blue',[[80,1]],'object',[[30,1]],'sizes',[[73,1],[56,1],[54,1]],'getting',[[15,1],[1,1]],'changing',[[37,2],[78,1],[32,1]],'reaction',[[45,1]],'romsteady',[[24,1]],'keeps',[[45,1],[43,2],[44,1]],'architectures',[[0,1]],'noted',[[62,1]],'stored',[[85,1],[82,1]],'invokes',[[60,1]],'even',[[51,3],[54,1],[80,1],[43,3],[0,6],[75,1],[91,1],[3,1],[11,1],[84,1]],'tweak',[[54,1],[75,2]],'well',[[91,1],[54,1],[29,1],[45,2],[48,1],[32,1],[75,1],[33,1],[11,1],[37,1]],'network',[[0,1]],'directsound',[[35,2]],'figures',[[62,1]],'serve',[[9,1]],'comments',[[81,1]],'clock',[[64,4]],'50%',[[64,1]],'unwanted',[[37,1],[32,1]],'tray',[[26,5],[92,2],[3,3],[19,1],[2,1]],'lockwinstyle',[[37,1]],'max',[[63,1],[75,1],[10,1],[40,1]],'zeta',[[56,2]],'possibility',[[91,1],[68,1],[79,1],[11,1]],'destroywindow',[[70,1]],'special',[[87,1],[46,2],[91,2],[57,1],[11,7]],'under',[[33,1]],'started',[[37,1],[9,1],[1,1],[2,1],[0,2]],'five',[[45,1]],'selected',[[63,1],[59,1],[23,1],[25,3],[6,4],[30,1],[3,1],[40,1],[7,2],[5,2]],'kind',[[24,1]],'including',[[34,1],[22,1],[3,1],[58,1]],'than',[[1,1],[30,4],[28,1],[0,2],[62,3],[56,1],[63,1],[49,1],[54,3],[2,1],[43,1],[40,1],[11,2]],'themselves',[[45,1],[15,1],[51,1]],'space',[[33,1],[75,1]],'behavior',[[78,1],[30,1],[44,1],[4,1],[0,7],[77,1],[91,1],[92,1],[57,1],[84,1],[37,1]],'restarts',[[29,1]],'sharing',[[0,1]],'2ms',[[63,1]],'enum16bitmodes',[[56,1]],'hooker',[[0,2]],'skipdevtypehid',[[43,1]],'invoking',[[52,1]],'detail',[[11,1],[91,1]],'attempt',[[37,1],[75,1],[0,2]],'big',[[75,1]],'background',[[30,2],[51,1]],'izer',[[0,1]],'apes',[[43,1]],'unchecked',[[46,1]],'writes',[[68,1],[9,1],[1,1]],'mix',[[70,1]],'showhwcursor',[[42,1]],'where',[[50,1],[44,1],[5,1],[37,1],[51,1],[54,1],[70,1],[66,1],[2,2],[3,1],[57,1],[33,2],[11,1]],'composition',[[56,1],[49,1]],'situations',[[51,1]],'quarterblt',[[62,1]],'encourage',[[0,1]],'address',[[33,4],[51,1],[75,1]],'viewfinder',[[44,1]],'expects',[[37,1]],'japanese',[[0,1]],'listening',[[43,1]],'automatically',[[45,3],[34,3],[48,1],[29,1],[30,2]],'bilinearfilter',[[50,1]],'calculate',[[75,1]],'editing',[[82,1]],'won',[[45,1],[2,2]],'experience',[[30,1]],'editor',[[57,1],[7,1]],'quit',[[11,2],[91,2]],'launch',[[81,1],[80,1],[28,1]],'bilinear2xfilter',[[50,1]],'isn',[[33,1],[13,1],[51,1]],'1000th',[[63,1]],'pointing',[[25,1]],'directinput',[[43,10]],'fit',[[49,1],[70,2],[71,1],[50,1]],'posx',[[85,4]],'double',[[26,1],[1,2],[25,1],[50,1]],'machine',[[54,1],[0,1]],'bug',[[49,1]],'imported',[[2,1]],'classification',[[30,1]],'looping',[[72,1],[44,1]],'addrelativetime',[[67,1]],'now',[[49,1],[75,1],[70,1],[0,2]],'arguments',[[92,2],[28,1]],'short',[[68,1],[29,1]],'needed',[[25,1],[32,1]],'explicit',[[73,1],[51,1]],'final',[[52,1]],'exceptions',[[75,2],[82,1]],'techniques',[[0,1]],'closes',[[14,1]],'update',[[51,2],[1,1],[33,1],[62,1],[58,1]],'pressing',[[12,1]],'onward',[[45,1],[75,1],[0,2]],'tigerhawkt3',[[24,1]],'while',[[30,2],[0,5],[45,1],[67,1],[16,2],[56,2],[37,1],[9,1],[51,1],[54,1],[3,2],[33,1],[11,4]],'gameplay',[[11,1]],'alone',[[48,1]],'time',[[87,3],[1,1],[62,1],[0,9],[20,7],[68,1],[64,14],[63,1],[29,1],[60,2],[34,1],[48,1],[75,1],[85,1],[91,4],[18,1],[11,8]],'height',[[19,1],[30,6],[85,3],[10,2],[86,2],[40,2]],'managed',[[25,1],[49,1]],'malfunctioning',[[45,1]],'behaviour',[[33,1]],'extracting',[[57,1]],'involves',[[49,1]],'duration',[[67,1]],'such',[[87,1],[30,1],[0,2],[44,2],[45,4],[62,1],[67,1],[81,1],[64,1],[39,1],[37,2],[84,1],[51,2],[29,1],[43,1],[75,2],[32,1],[79,1]],'synchronization',[[24,1]],'annoying',[[0,2]],'worms',[[37,1]],'lack',[[49,1]],'suppressime',[[75,1]],'side',[[75,1],[0,1]],'exported',[[3,1],[56,1]],'codec',[[54,1]],'render',[[58,1]],'intercepted',[[68,1],[70,1],[19,1],[33,1],[64,1]],'impossible',[[45,2]],'unfortunately',[[33,1],[54,1],[0,1]],'written',[[37,1],[0,2]],'right',[[26,1],[54,1],[25,1],[80,1],[2,1],[44,2],[81,1],[32,1],[33,1],[37,1]],'selection',[[30,2]],'child',[[58,1],[34,5],[81,1],[33,2],[37,2]],'monitors',[[54,1],[37,1]],'way',[[51,5],[54,1],[30,1],[0,5],[4,1],[45,1],[62,1],[84,1]],'binplayer',[[34,1]],'moving',[[58,1],[64,1],[44,2]],'ads',[[46,1]],'easier',[[57,2],[67,1]],'reg',[[76,2],[82,1],[0,1]],'confirm',[[3,1],[29,1]],'uselastcore',[[75,1]],'measures',[[67,1]],'directx7',[[48,1],[29,1]],'there',[[1,1],[0,5],[44,1],[45,1],[56,1],[64,1],[9,1],[51,2],[60,1],[82,1],[3,1],[57,1],[33,2],[40,1]],'creating',[[51,1],[54,1]],'beneath',[[29,1]],'disabled',[[46,1],[40,1],[0,1]],'offered',[[67,1]],'replace',[[57,1],[54,1],[75,1]],'settings',[[0,1],[81,1],[42,1],[8,1],[5,4],[37,4],[39,1],[22,1],[29,1],[25,1],[80,1],[2,1],[82,1],[83,1],[32,1],[11,1]],'further',[[56,1],[0,1]],'boxes',[[29,1],[1,1]],'far',[[81,1],[51,1],[33,1],[37,1]],'appearance',[[81,1],[80,1]],'tabbed',[[27,1]],'priorities',[[15,1]],'mandatory',[[75,1]],'increase',[[91,1],[87,1],[0,1]],'f12',[[87,1],[11,1],[12,1]],'properly',[[54,1],[29,1],[71,1],[43,1],[45,1],[48,1],[75,2],[56,4],[64,1],[37,2]],'forbid',[[75,1]],'focus',[[43,3]],'stays',[[3,1]],'ollydbg',[[24,1]],'handleexceptions',[[75,1]],'infinite',[[86,2]],'restored',[[3,1]],'opens',[[7,1],[5,3]],'loop',[[72,2],[75,1],[46,2]],'createdevice',[[59,1]],'back',[[14,1],[43,1],[0,1]],'doesn',[[63,1],[92,1],[51,3],[54,1],[43,1],[48,1],[52,1],[75,2],[91,1],[11,1],[58,1]],'quite',[[49,1],[68,2],[70,1],[91,1],[2,1],[11,1]],'caps',[[54,1],[29,1]],'box',[[45,1],[31,1],[29,1]],'section',[[76,2],[57,1]],'bypass',[[73,1],[78,1],[75,1]],'crucial',[[0,1]],'only',[[1,2],[46,1],[30,4],[0,5],[39,1],[37,2],[63,1],[9,1],[29,3],[49,1],[51,4],[2,2],[43,2],[54,4],[60,2],[70,1],[32,2],[75,1],[33,2],[11,2],[78,2]],'alt',[[12,1],[46,3],[75,2],[87,3],[11,2],[91,1]],'blocking',[[33,1]],'harm',[[44,1]],'states',[[44,1]],'imperia',[[51,1]],'according',[[63,1],[54,1],[75,1],[30,1]],'requests',[[79,1]],'seemed',[[0,1]],'nowindowmove',[[58,1]],'occasionally',[[45,1]],'backs',[[51,1]],'ordinal',[[33,1]],'confirmonclose',[[29,1]],'depend',[[70,1],[64,1]],'800x600',[[30,1]],'heavy',[[75,1]],'swap',[[59,2]],'keeping',[[43,1]],'wireframe',[[60,3]],'displacement',[[44,1]],'modified',[[9,2]],'library',[[71,4],[24,1]],'regain',[[43,1]],'something',[[5,1],[0,1]],'suspend',[[63,1]],'higher',[[40,1],[11,1]],'same',[[38,3],[0,3],[45,1],[77,1],[63,2],[49,2],[51,1],[25,1],[70,1],[43,2],[34,2],[75,1],[85,3],[33,1]],'falling',[[0,1]],'obfuscation',[[33,1]],'threads',[[63,3]],'heights',[[10,1]],'reading',[[54,1]],'spot',[[67,1]],'chosen',[[49,1],[30,1],[28,1],[77,2],[12,1],[37,1]],'asian',[[0,1]],'unable',[[48,1],[32,1]],'compose',[[71,1]],'wow64registry',[[76,1]],'tasks',[[91,1],[11,2],[0,2]],'looks',[[84,1]],'320',[[85,1]],'was',[[54,3],[25,1],[70,1],[30,2],[24,1],[0,7],[44,1],[45,1],[3,2],[33,1],[79,1]],'manage',[[51,1],[75,1],[56,1],[57,1],[37,1]],'undesired',[[60,1]],'com',[[78,1],[48,1]],'galapagos',[[72,1]],'yellow',[[32,1]],'releases',[[56,1],[71,1],[28,1]],'messageproc',[[45,1],[44,1]],'probably',[[71,1],[30,1]],'tested',[[1,2]],'has',[[49,1],[46,1],[54,1],[19,1],[30,2],[0,3],[34,1],[75,2],[33,3],[7,2]],'region',[[44,1],[91,1],[62,1],[11,1]],'virtualpc',[[54,1]],'overheating',[[75,1]],'scrollable',[[67,1]],'shares',[[70,1]],'fpstoggle',[[87,1],[91,1]],'distorting',[[54,1]],'fixrefcounter',[[54,1]],'fast',[[11,1],[50,1]],'simulate',[[54,1]],'session',[[25,1],[66,1],[54,1]],'fully',[[70,1],[75,1]],'domain',[[51,1]],'received',[[45,1]],'again',[[43,1],[26,1],[91,1],[3,1],[11,1],[0,2]],'telling',[[48,1]],'code',[[51,1],[87,1],[24,3],[0,7],[2,1],[75,2],[33,1],[64,1]],'widescreen',[[30,1]],'outd3dtrace',[[68,1]],'windowed',[[30,1],[0,1],[44,1],[45,2],[68,1],[37,1],[49,1],[29,1],[51,3],[54,4],[2,2],[60,1],[70,4],[75,2],[11,2]],'measurement',[[75,1]],'wonderful',[[0,1]],'clipboard',[[11,1]],'involve',[[32,1]],'shortcut',[[5,1],[1,1],[2,1],[0,1]],'son',[[34,1]],'revert',[[39,1]],'supporthdmi',[[40,1]],'dxw',[[3,1]],'fixed',[[44,1],[19,1],[32,1]],'yes',[[19,1]],'disablegammaramp',[[39,1]],'devices',[[79,5],[43,4]],'unexpected',[[45,1]],'videotosystemmem',[[51,1]],'power2width',[[54,1]],'device',[[70,3],[79,2],[43,2]],'mind',[[68,1],[2,1],[0,2]],'point',[[44,1],[32,1]],'moved',[[91,1],[62,1],[44,1]],'running',[[1,1],[19,3],[0,3],[16,2],[56,2],[37,1],[63,1],[26,2],[14,2],[29,2],[51,1],[2,1],[54,2],[4,2],[60,1],[70,1],[75,1],[3,1],[33,1],[11,1]],'getcursorpos',[[44,1]],'one',[[1,1],[19,2],[31,1],[0,7],[45,1],[62,1],[67,1],[64,1],[37,2],[51,1],[54,1],[25,2],[70,1],[6,2],[80,1],[75,2],[3,1],[33,3],[79,1]],'overlaps',[[70,1],[44,1]],'directx8',[[48,2]],'eliminate',[[54,1]],'avoids',[[49,1]],'wm_windowposchanged',[[45,1]],'freestyle',[[54,1]],'forcehookopengl',[[71,1]],'zbuffer0clean',[[56,2]],'fakeversion',[[77,1]],'propose',[[9,1],[84,1]],'corrected',[[2,1],[51,1]],'1980x1080',[[40,1]],'texel',[[57,1]],'archive',[[1,1]],'self',[[9,1],[84,1]],'bits',[[17,1],[56,1],[22,1]],'timeout',[[45,1]],'main',[[58,1],[73,1],[51,1],[71,1],[2,1],[28,1],[80,1],[34,1],[81,1],[33,2],[37,3]],'instead',[[78,2],[49,2],[54,1],[25,1],[71,1],[82,1],[92,1],[33,2],[37,2]],'encoding',[[54,2]],'class',[[75,2]],'equivalent',[[25,1],[78,1],[44,1]],'modes',[[59,1],[49,1],[51,1],[70,1],[30,7],[43,2],[13,1],[75,1],[40,3],[56,3]],'keycode',[[87,1]],'order',[[5,1],[29,1],[37,3]],'performed',[[73,1]],'timing',[[63,1],[61,1],[75,1],[64,5]],'tools',[[80,1],[13,1]],'coded',[[45,1],[33,1],[2,1]],'resizeable',[[37,1]],'dealing',[[0,1]],'tweaking',[[54,1]],'unpredictable',[[0,1]],'captures',[[11,1]],'piece',[[0,1]],'open',[[25,1],[0,2]],'shared',[[0,1],[84,1],[70,1],[43,1],[24,1]],'fixd3dframe',[[58,1]],'button',[[30,3],[44,2]],'yourself',[[51,1],[0,1]],'text',[[54,2],[80,2],[30,1],[31,1],[81,1],[92,1],[40,2],[7,1],[84,1]],'opinion',[[51,1]],'callback',[[32,1]],'restore',[[12,1],[14,1],[15,1],[2,1]],'customized',[[57,1]],'continuously',[[44,1]],'form',[[79,1],[1,1]],'unnecessary',[[71,1]],'board',[[1,1]],'wrong',[[49,1],[75,1]],'inserting',[[72,1]],'layout',[[83,1]],'overridden',[[84,1]],'arranges',[[5,1]],'dual',[[0,1]],'kept',[[84,1]],'with',[[1,3],[19,1],[50,1],[0,8],[67,1],[56,2],[84,2],[9,2],[29,1],[49,2],[51,1],[2,3],[54,8],[60,3],[71,1],[80,2],[32,1],[57,2],[7,1],[30,5],[44,1],[81,2],[52,1],[20,1],[68,2],[64,5],[37,2],[26,1],[25,1],[70,2],[43,2],[34,2],[75,10],[33,1],[11,1],[58,1]],'keep',[[0,2],[44,2],[33,1],[30,2],[2,1]],'cds',[[79,1]],'loads',[[84,1]],'between',[[49,1],[51,1],[70,1],[62,1],[44,2],[67,1],[72,1],[56,2],[11,4]],'working',[[0,1],[51,1],[1,1],[92,1],[37,1]],'obsolete',[[54,1]],'following',[[59,1],[49,1],[25,1],[19,2],[30,1],[48,1],[40,1],[11,1],[84,1]],'lang',[[84,5],[92,1]],'sacrificing',[[54,1]],'nosysmembackbuf',[[54,1]],'wm_nchittest',[[44,2]],'madness',[[54,1]],'understand',[[0,1]],'direcx7',[[48,1]],'absolute',[[2,1]],'luigi',[[24,1]],'saving',[[9,1],[44,1]],'particular',[[57,1],[49,1],[0,1]],'just',[[1,2],[37,1],[0,3]],'maybe',[[0,1]],'possible',[[73,2],[54,1],[1,1],[30,1],[0,3],[45,1],[48,1],[75,1],[33,1],[64,1],[37,1]],'omit',[[71,1],[60,1]],'insert',[[79,1]],'smackopen',[[72,1]],'fixnchittest',[[44,1]],'extracted',[[57,1]],'like',[[1,4],[70,1],[80,1],[30,1],[0,5],[45,3],[34,1],[75,2],[33,1],[11,2]],'range',[[87,1],[64,1],[75,1]],'offending',[[45,2]],'option',[[67,2],[56,2],[39,2],[9,3],[29,1],[49,3],[51,5],[54,4],[60,1],[48,2],[91,2],[57,1],[7,2],[38,1],[30,2],[90,1],[45,3],[64,3],[37,1],[63,1],[89,2],[70,1],[43,1],[72,1],[34,4],[75,2],[3,1],[11,1]],'cpu',[[63,5],[54,1],[29,2],[0,1],[44,2],[75,3]],'significant',[[68,1]],'without',[[51,1],[29,1],[25,1],[43,1],[0,2],[2,1],[45,1],[62,1],[91,1],[56,1],[11,1],[64,1]],'folders',[[9,1]],'trilogy',[[33,1]],'screen',[[87,1],[19,1],[30,4],[0,3],[44,1],[50,1],[13,1],[52,1],[62,11],[64,1],[39,2],[37,4],[49,2],[29,2],[51,3],[71,2],[2,1],[72,2],[75,1],[91,1],[40,5],[11,5]],'file',[[1,4],[46,1],[67,2],[92,3],[84,1],[5,1],[9,4],[26,1],[25,2],[66,4],[76,2],[80,1],[82,3],[48,1],[3,3],[57,2],[10,1],[7,3]],'rely',[[54,1],[75,1]],'hardware',[[49,1],[54,7],[44,1],[0,1],[42,2],[75,3],[56,2],[35,1],[64,1]],'superchamps',[[43,1]],'wrapper',[[54,1]],'implemented',[[70,1],[33,1],[35,1]],'activated',[[64,1],[15,1],[32,1],[3,1],[2,2],[28,1]],'explained',[[0,1]],'movies',[[73,4],[51,1],[54,3],[45,1],[34,2],[72,2]],'net',[[0,1]],'titleless',[[37,1]],'specific',[[54,1],[30,2],[0,2],[45,1],[91,1],[64,1],[11,1]],'upwards',[[6,1]],'port',[[75,1],[84,1]],'resolves',[[51,1],[54,2]],'consuming',[[63,1]],'rerouting',[[78,2]],'eliminating',[[30,1]],'activate',[[54,1],[2,1],[26,1]],'drive',[[79,1],[1,2]],'intercept',[[46,1],[44,1],[0,1],[34,1],[75,3],[32,3],[33,1],[64,1],[37,1]],'finer',[[64,2]],'inclusion',[[56,1]],'makes',[[51,1],[54,2],[70,3],[62,1],[67,1],[45,2],[57,1],[84,1],[37,2]],'reported',[[9,1],[75,1]],'nod3dreset',[[56,1]],'basic',[[48,1],[32,1],[79,1],[0,3]],'know',[[0,1]],'recommended',[[92,1]],'imagehlp',[[75,2]],'dinput8',[[43,1]],'prevent',[[4,1],[39,1],[51,1],[58,1],[33,1],[37,1]],'640x360',[[40,1]],'protection',[[79,1]],'off”',[[44,1]],'blizzard',[[11,1],[75,1]],'unless',[[64,1],[0,1]],'want',[[0,1],[44,2],[48,1],[82,1],[30,1],[2,1]],'add',[[27,1],[1,2],[25,1],[80,1],[2,1],[0,1],[45,1],[34,1],[67,2],[81,1],[5,1]],'issues',[[75,1],[1,1],[56,2],[64,1],[71,1]],'skipfps',[[62,2]],'happy',[[29,1]],'combinations',[[17,1],[75,1]],'sizx',[[85,1]],'movement',[[45,1],[51,1],[43,1],[44,2]],'replication',[[71,1]],'described',[[75,1]],'discovered',[[75,1]],'cause',[[73,1],[84,1],[44,1],[45,1],[91,1],[33,2],[11,1],[58,1]],'allowing',[[72,1],[54,2],[32,3],[35,1],[0,1]],'injectson',[[34,1]],'“cursor',[[44,1]],'allocated',[[75,1]],'common',[[51,2],[1,1],[70,2],[88,1],[43,1],[0,1],[75,1],[33,1],[11,1],[64,1]],'portions',[[0,1]],'enablesonhook',[[34,1]],'refers',[[30,1]],'format',[[85,1],[22,1],[51,4],[10,1],[80,1],[87,1]],'different',[[49,1],[54,1],[25,1],[70,1],[31,2],[0,3],[50,1],[71,2],[48,2],[33,2],[56,3],[84,1]],'available',[[84,3],[54,4],[87,2],[44,1],[48,1],[75,3],[56,1],[64,1],[79,2]],'activating',[[34,1]],'zbufferbitdepths',[[54,1]],'matter',[[25,1],[33,1],[51,1]],'done',[[33,1]],'multiprocesshook',[[84,2]],'several',[[73,2],[51,1],[62,1],[0,3],[45,1],[75,1],[33,2],[37,1]],'options',[[88,1],[1,1],[62,1],[67,1],[81,1],[84,1],[37,1],[49,2],[29,1],[89,2],[48,4],[3,1]],'need',[[51,1],[29,1],[54,2],[31,1],[0,2],[45,1],[2,1],[82,1],[92,1],[56,1],[7,1]],'technological',[[0,1]],'hot',[[12,2],[46,3],[87,2],[33,2],[24,1]],'computers',[[60,1],[54,1],[0,1]],'preserved',[[30,1]],'force',[[37,2],[51,1],[71,1],[44,1]],'sizing',[[45,1]],'furthermore',[[49,1]],'extract',[[57,1]],'purpose',[[34,1],[78,1],[0,2]],'technology',[[48,1]],'hookglide',[[35,1]],'leaves',[[54,1],[51,1],[11,1],[90,1]],'don',[[44,1],[28,1],[68,1],[56,3],[64,1],[37,3],[51,3],[29,1],[75,2],[91,1],[79,1],[11,1],[58,1]],'wants',[[0,1]],'wikipedia',[[23,1]],'bilinear',[[24,1],[50,3]],'backbuffer',[[51,4],[54,3]],'zero',[[86,2],[75,1]],'service',[[49,1],[54,1]],'kill',[[45,1],[12,1],[15,1],[25,4],[37,1]],'push',[[0,1]],'dialog',[[29,1],[1,2]],'extended',[[30,1]],'win',[[91,1],[68,1],[70,1],[37,4]],'color',[[73,3],[38,2],[13,3],[52,1],[56,3],[39,2],[17,4],[22,3],[49,6],[51,3],[54,3],[2,1],[75,3],[57,1],[11,2]],'flush',[[45,1]],'interested',[[48,1]],'clones',[[25,1]],'sure',[[43,2]],'drop',[[54,1],[30,1],[1,1]],'accidentally',[[62,1]],'mark',[[81,1]],'accessed',[[12,1]],'cpumaxusage',[[63,1]],'fixfreelibrary',[[75,1]],'gets',[[91,1],[33,1],[11,1],[80,1]],'updates',[[51,1],[62,5]],'conditions',[[33,1],[13,1],[32,1]],'activity',[[11,1],[91,1]],'ddsd_pixelformat',[[51,1]],'generated',[[57,1],[67,1],[68,1]],'unnoticeable',[[44,1],[39,1]],'decelerate',[[11,1]],'supportsvga',[[40,1]],'break',[[49,1],[52,1]],'namely',[[19,1],[64,1],[44,1]],'200',[[85,1]],'disassembly',[[24,1]],'placement',[[30,1]],'card',[[40,1]],'unusual',[[49,1]],'dedicated',[[51,1],[44,1],[48,1],[75,2],[3,1],[64,1]],'debugger',[[32,3]],'remapmci',[[73,1]],'case',[[58,1],[9,1],[51,2],[54,1],[70,1],[44,1],[92,1],[68,1],[37,2]],'suppressdierrors',[[43,1]],'locate',[[1,1]],'will',[[88,1],[1,4],[30,1],[0,5],[45,1],[67,1],[81,1],[84,4],[27,1],[63,1],[9,1],[26,2],[25,1],[29,3],[2,4],[51,1],[66,4],[80,3],[75,4],[32,2],[3,3]],'else',[[0,3]],'overriding',[[11,1],[91,1]],'cross',[[44,1]],'state',[[4,2],[26,3],[46,1],[3,1],[92,1],[2,1]],'troubleshooting',[[1,1]],'always',[[54,1],[24,1],[0,1],[48,1],[3,1],[33,1],[84,1],[58,1]],'stretchmovies',[[73,1]],'preferred',[[7,1],[64,1]],'checked',[[29,2],[64,5],[62,2]],'thing',[[77,1],[0,1]],'injects',[[32,1],[91,1],[0,1]],'highlighted',[[25,1],[0,1]],'jetboat',[[43,1]],'deinterlace',[[54,2]],'choppy',[[63,1]],'alternative',[[51,1]],'slowdown',[[63,1]],'replaceprivops',[[75,1]],'unmount',[[79,1]],'not',[[73,1],[1,1],[19,1],[0,5],[77,1],[56,4],[35,1],[84,1],[49,2],[29,5],[51,4],[54,7],[2,1],[60,1],[71,1],[80,1],[48,1],[32,1],[40,1],[57,1],[38,1],[30,1],[31,3],[44,1],[45,4],[62,1],[92,1],[64,1],[37,4],[17,1],[26,1],[25,2],[70,1],[34,2],[72,1],[75,4],[85,1],[33,3],[11,3],[58,2]],'anymore',[[29,1]],'log',[[5,2],[65,1],[1,1],[25,3],[66,4],[67,6],[91,2],[68,1],[3,1],[11,3],[7,5]],'incompatibilities',[[9,1]],'maximum',[[54,1],[10,3],[40,1],[86,2]],'frontend',[[33,2],[28,3]],'implementing',[[33,1]],'desired',[[79,1],[30,3],[49,1]],'saved',[[80,1],[9,2]],'someone',[[0,2]],'ever',[[37,1]],'conversion',[[49,3],[52,1]],'replaces',[[57,1],[64,1],[75,1]],'addtimestamp',[[67,1]],'safely',[[70,1],[64,1],[0,1]],'acting',[[0,1]],'refer',[[71,1]],'nop',[[75,1]],'manipulated',[[64,1],[75,1]],'argument',[[84,1],[92,1]],'auriemma',[[24,1]],'most',[[54,4],[70,1],[31,1],[0,1],[44,1],[45,1],[60,1],[75,1],[85,1],[64,1],[37,1]],'impacts',[[54,1]],'occupy',[[37,1]],'since',[[63,1],[54,2],[1,1],[82,1],[0,1],[48,1],[75,2],[91,1],[11,1],[39,1]],'expect',[[45,1],[51,1]],'becomes',[[54,1],[43,1],[37,1]],'diagnostic',[[68,1]],'express',[[34,1]],'emulated',[[51,1],[21,1],[70,2],[80,1],[11,3]],'ansiwide',[[33,1]],'partially',[[89,1]],'view',[[7,1],[24,1],[67,1],[25,1],[18,2],[2,1]],'hooks',[[71,1],[43,2],[0,4],[34,2],[48,1],[72,1],[75,2],[35,1]],'bottom',[[6,2],[30,1]],'destruction',[[37,1]],'process',[[45,4],[12,1],[13,2],[63,1],[15,2],[51,1],[25,1],[54,1],[43,1],[34,5],[75,3],[32,2]],'harder',[[33,1],[34,1]],'notice',[[77,1],[31,1],[51,1]],'counter',[[54,2],[75,1],[64,2],[62,4]],'develop',[[0,2]],'might',[[49,1],[51,2],[24,1],[0,2],[45,1],[81,1],[82,1],[32,1],[91,1]],'depth',[[17,2],[73,3],[22,1],[49,2],[51,3],[54,1],[13,3],[75,1],[56,2],[11,1]],'gsky916',[[24,1]],'hooknoupdate',[[33,1]],'determining',[[29,1]],'existing',[[51,1],[76,1],[66,2],[30,1]],'rollercoaster',[[45,1]],'notification',[[29,1]],'clipcursor',[[44,1]],'filtermessages',[[45,1]],'1ms',[[63,2]],'debugging',[[72,1],[35,1],[32,1]],'microsoft',[[0,1]],'winrar',[[1,1]],'rather',[[54,2],[1,1],[30,3],[43,1],[28,1],[11,1]],'reliably',[[43,1]],'descriptor',[[54,1]],'output',[[67,1]],'exaggerated',[[62,1]],'behaves',[[44,1],[0,1]],'onto',[[79,1]],'borderless',[[30,1],[37,1]],'line',[[84,1],[54,1],[92,2],[67,3],[2,1]],'harmful',[[45,1]],'oses',[[75,3]],'directive',[[44,1]],'tell',[[29,1]],'files',[[1,1],[57,1],[0,4]],'merges',[[70,1]],'resolution',[[17,1],[63,1],[50,1],[13,1],[20,1],[40,12],[11,1]],'limitddraw',[[54,1]],'directinput8',[[43,3]],'fogging',[[60,2]],'browse',[[91,1],[11,1],[0,1]],'virus',[[0,2]],'24bpp',[[38,1]],'goes',[[3,1],[54,1]],'nonexclusive',[[43,1]],'usergb565',[[54,1]],'send',[[45,1],[37,4]],'startdebug',[[32,1]],'backbuf',[[54,1]],'texturedump',[[57,1]],'around',[[62,1]],'trace',[[68,2]],'install',[[25,1],[1,1]],'initialres',[[40,1]],'getperfcounter',[[75,1]],'soon',[[34,1],[75,1],[1,1]],'save',[[81,1],[9,1],[46,1],[3,1],[80,2]],'tough',[[37,1]],'query',[[75,1],[54,1],[64,1]],'libs',[[78,2],[48,1],[69,1],[35,1]],'transferred',[[49,1],[54,1]],'correctly',[[45,1],[51,2],[1,1],[33,1],[71,1]],'easportshack',[[75,1]],'bufferediofix',[[79,1]],'intercepts',[[46,1],[76,2],[0,2],[32,1],[33,1],[37,3]],'extension',[[71,1],[7,1],[72,1]],'called',[[49,1]],'managing',[[70,1],[49,3]],'mintexx',[[86,1]],'question',[[0,1]],'also',[[9,2],[26,1],[49,1],[54,1],[2,1],[0,1],[67,1],[77,1],[48,1],[33,1]],'debugview',[[67,1]],'software',[[75,1],[0,1]],'reserves',[[75,1]],'hide',[[9,1],[87,1],[30,2],[42,1],[16,1],[79,1],[37,3]],'simplified',[[51,1],[50,1],[0,1]],'settimer',[[64,1]],'instructions',[[75,2],[37,1]],'similar',[[78,1],[49,2],[54,2],[80,1],[4,1],[72,1],[75,2],[32,1],[56,1],[11,2]],'chance',[[45,1]],'down',[[63,1],[54,3],[30,1],[44,1],[6,1],[50,1],[12,1],[32,1],[68,1],[11,1]],'directory',[[9,1],[92,1]],'windowstyle',[[37,1]],'incredible',[[0,1]],'resized',[[37,4],[91,1],[30,1],[44,1]],'internally',[[49,3],[68,1]],'suspending',[[63,2]],'turns',[[3,1]],'graphical',[[1,1],[57,1],[2,1],[60,1]],'etc',[[0,1]],'admin',[[9,1],[29,1]],'unlockzorder',[[37,1]],'refusing',[[75,1]],'tiny',[[62,1],[1,1]],'screens',[[11,1]],'mech',[[54,1]],'directx',[[49,3],[51,1],[47,1],[53,1],[89,1],[90,1],[48,6]],'translation',[[24,1],[84,1]],'peek',[[45,1],[68,1]],'nosysmemprimary',[[54,2]],'standard',[[71,1],[52,1]],'noticing',[[62,1]],'slanted',[[89,1]],'direct3dcreate',[[56,1]],'bullet',[[0,1]],'win32',[[0,1]],'hash',[[57,1]],'categories',[[0,1]],'playing',[[73,1],[0,1]],'1280x800',[[40,1]],'recovering',[[13,1],[0,1]],'write',[[51,1],[1,2],[66,1],[0,1]],'added',[[66,1],[31,1],[0,2]],'blank',[[2,1]],'luckily',[[33,1]],'coop',[[43,1],[54,1]],'means',[[62,1],[0,1],[34,1],[86,2],[64,1],[40,1]],'hel',[[54,1]],'0x7c',[[87,1]],'feature',[[37,1],[75,2],[91,1],[11,1],[58,1]],'referenced',[[33,2]],'manipulate',[[75,1]],'parameters',[[70,2],[71,1]],'event',[[43,1],[32,1]],'simulates',[[75,1],[54,1],[79,1],[39,1]],'italian',[[84,1]],'scales',[[73,1],[70,1],[71,1],[50,1]],'expected',[[54,1],[75,1]],'routine',[[33,1]],'games',[[73,1],[1,2],[50,1],[0,6],[56,4],[39,2],[15,1],[29,1],[51,5],[54,4],[2,2],[60,2],[71,1],[91,1],[32,1],[40,1],[79,1],[38,1],[44,3],[45,2],[68,1],[64,2],[37,6],[78,3],[70,1],[43,1],[34,1],[75,8],[3,1],[11,1]],'compensate',[[90,1],[51,1],[70,1],[44,1]],'drawn',[[62,1],[64,1]],'your',[[7,1],[39,1],[79,1],[1,2],[24,1],[0,10],[91,3],[57,1],[11,5],[37,1]],'copies',[[54,1],[1,1]],'calling',[[0,1]],'shown',[[27,1],[44,1],[20,1],[25,1],[2,2],[0,1]],'scans',[[75,1]],'almost',[[0,1],[82,2],[30,1]],'published',[[0,1]],'cornerized',[[11,3]],'simultaneously',[[84,1]],'characteristics',[[27,1]],'processor',[[75,1]],'axes',[[44,1]],'html',[[24,1]],'part',[[11,1],[91,1]],'gives',[[64,1]],'pause',[[15,2]],'setappcompatdata',[[52,1],[75,1]],'shift',[[91,1],[12,1],[22,1]],'rdtsc',[[64,2]],'min',[[10,1]],'pcs',[[0,2]],'repaint',[[11,2],[91,2]],'within',[[45,1],[44,3],[71,1],[58,1]],'vice',[[79,1]],'segments',[[75,1]],'gamma',[[39,3]],'methods',[[59,1],[48,1],[51,1]],'chinese',[[24,1],[84,1]],'strangely',[[44,1]],'offscreen',[[54,1]],'separate',[[0,2],[75,1],[66,1],[37,1]],'reserved',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,2],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'helpful',[[48,1],[29,1]],'midtown',[[54,1]],'updated',[[72,1],[51,1],[85,1],[19,1],[33,2],[64,1]],'difference',[[11,1]],'nowinerrors',[[70,1]],'window',[[73,3],[87,1],[1,2],[19,1],[50,3],[0,5],[39,2],[9,1],[14,2],[23,1],[29,6],[2,1],[49,1],[51,2],[54,4],[71,1],[32,3],[91,4],[40,1],[30,20],[44,13],[45,5],[62,1],[12,1],[13,2],[20,1],[68,1],[64,1],[37,19],[83,2],[21,1],[22,1],[25,1],[26,1],[43,3],[70,5],[85,3],[75,2],[3,2],[33,1],[11,4],[58,8]],'remaps',[[51,1]],'redirected',[[70,1]],'affected',[[49,1]],'hdmi',[[40,1]],'planet',[[43,1]],'videogames',[[0,1]],'hookdirectsound',[[35,1]],'legacyalloc',[[75,1]],'stopping',[[4,1]],'intro',[[45,1],[34,1],[51,1],[72,1]],'strategy',[[70,1],[48,1]],'system',[[67,1],[0,4],[45,3],[77,1],[13,1],[52,1],[92,2],[64,2],[39,2],[17,1],[37,1],[26,3],[51,1],[54,4],[63,2],[2,1],[70,1],[76,2],[78,6],[84,1],[3,2],[33,2],[79,1]],'activates',[[29,1],[25,1],[30,1],[50,3],[45,1],[72,1],[84,1],[58,1]],'timefast',[[87,1],[91,1]],'unallocated',[[75,1]],'downwards',[[6,1]],'setcooperativelevel',[[54,1]],'development',[[24,1]],'defaultmessages',[[45,1]],'detecting',[[54,1],[32,1]],'executing',[[51,1]],'activities',[[70,1]],'arrives',[[0,1]],'procedure',[[46,1],[0,1]],'majority',[[33,1]],'protections',[[68,1]],'fastest',[[0,1]],'painting',[[11,1],[91,1]],'being',[[0,2],[45,2],[11,1],[37,1]],'sim',[[37,1]],'conflicts',[[66,1],[51,1]],'filtering',[[50,2]],'textures',[[71,2],[54,5],[56,3],[57,10],[60,2]],'logtoggle',[[87,1],[91,1]],'newer',[[45,1],[54,2],[43,1]],'showing',[[42,1],[29,1],[1,1],[54,1]],'traditional',[[43,1]],'autodetect',[[9,1],[84,1]],'regedit',[[80,1]],'implementation',[[33,1],[48,3],[71,1]],'winposchange',[[45,1]],'redirect',[[33,2]],'sends',[[37,1]],'stop',[[4,2]],'however',[[45,1],[48,1],[54,1],[64,1]],'ascending',[[5,1]],'keyboard',[[0,1],[44,1],[46,1],[43,4],[11,1]],'explore',[[25,2],[5,1]],'elevation',[[9,1],[84,1]],'interceptrdtsc',[[64,1]],'future',[[72,1],[35,1],[48,1]],'front',[[39,1]],'ask',[[17,1],[29,1]],'errors',[[73,1],[54,1],[51,2],[70,2],[79,1],[43,2]],'createsurface',[[51,1]],'warning',[[84,1]],'“intercept',[[11,1],[91,1]],'forceshel',[[54,1]],'slower',[[62,1],[49,1],[51,1]],'tries',[[15,1],[70,2],[48,1],[75,2],[64,1],[58,1]],'determines',[[49,1]],'doing',[[4,1],[46,1]],'remember',[[1,3]],'less',[[49,1],[62,1]],'advanced',[[54,1]],'single',[[75,2],[33,2],[71,1],[0,4]],'another',[[32,1],[0,1]],'noalphachannel',[[51,1]],'location',[[1,2],[31,1],[0,1]],'disk',[[75,1],[3,1],[79,4],[0,1]],'entry',[[1,2],[25,4],[6,4],[2,1],[0,1],[28,2],[34,1],[33,1],[5,2]],'beware',[[3,1],[84,1]],'movable',[[58,1]],'defaulting',[[45,1],[84,3]],'offset',[[54,2]],'looking',[[57,1],[43,1],[0,2]],'directdraw7',[[49,1]],'course',[[75,1],[0,1]],'follows',[[85,1],[87,1],[10,1],[2,1]],'caused',[[54,1]],'terminate',[[15,1],[29,2],[46,1],[51,1],[2,1],[87,1]],'32bpp',[[38,1],[54,1],[56,1]],'hacks',[[68,1],[0,1]],'msec',[[62,1]],'rect',[[70,1]],'geiss',[[24,1]],'fullscreenonly',[[29,1]],'useless',[[38,1],[48,1]],'availability',[[75,2]],'schema',[[49,1],[24,1],[32,1]],'supported',[[17,2],[51,1],[54,1],[2,1],[0,1],[75,2],[40,1],[84,1]],'vmware',[[54,1]],'internal',[[50,1],[75,1]],'above',[[63,1],[54,1],[89,1],[38,3],[30,1],[28,1],[32,1]],'inhibits',[[44,1],[29,1]],'joystick',[[43,1],[44,7]],'noticeably',[[50,1]],'fix',[[73,2],[31,1],[44,1],[45,1],[56,3],[37,3],[51,3],[54,3],[70,1],[71,3],[89,1],[72,1],[75,6],[91,1],[79,1],[11,1],[58,1]],'exists',[[66,1],[9,1],[29,1]],'startup',[[75,1],[9,1],[13,1],[84,1]],'alternate',[[33,1],[44,1]],'emulaterelmouse',[[43,1]],'figure',[[54,1],[62,1]],'issue',[[51,1],[54,5],[89,2],[60,1],[31,1],[90,1],[92,1],[37,1]],'sleep',[[64,1]],'stick',[[33,1]],'platform',[[77,1],[1,1],[56,1],[79,1]],'asks',[[25,1],[2,1],[29,1]],'defines',[[27,1]],'contained',[[54,1],[82,1]],'small',[[45,1],[62,1],[58,1]],'titles',[[75,1]],'period',[[45,1],[68,1]],'hiding',[[42,1]],'resulting',[[32,1]],'emulatesurface',[[49,3]],'environments',[[75,1]],'mount',[[79,1]],'8bpp',[[54,1],[75,2],[38,3]],'messages',[[1,2],[66,1],[0,1],[44,2],[45,15],[68,1],[37,3]],'choose',[[59,1],[54,1],[50,1],[28,1]],'widget',[[30,2],[54,1]],'celebrates',[[29,1]],'field',[[54,4],[1,2],[71,1],[30,1],[28,1],[45,1],[80,1],[81,1]],'legend',[[51,1],[90,2]],'trails',[[51,1],[60,1]],'resume',[[15,1]],'input',[[41,1],[45,1],[43,2]],'ini',[[9,2],[46,1],[80,1],[82,1],[0,2],[92,1],[57,1]],'interpolating',[[50,1]],'returnnullref',[[54,1]],'dirty',[[11,1],[91,1]],'handling',[[73,1],[46,1],[44,1],[45,1],[90,1],[52,1],[37,2],[51,1],[54,1],[70,1],[24,1],[72,1],[48,1],[91,1],[57,2]],'showfpsoverlay',[[62,1]],'drag',[[30,1],[1,1]],'two',[[0,1],[44,2],[48,1],[30,2],[28,1]],'rudimentary',[[44,1]],'splash',[[29,1]],'2016',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'needadmincaps',[[29,1]],'automatic',[[42,1],[48,3],[57,1],[84,2]],'windowized',[[30,1]],'copying',[[54,2],[0,1]],'seems',[[75,1],[48,1],[37,1]],'320x200',[[40,2]],'backbuffers',[[49,1]],'actual',[[54,2],[80,2],[62,1]],'favorite',[[0,1]],'centers',[[30,1]],'forcefully',[[60,1]],'predetermined',[[54,1]],'needs',[[28,1],[39,1],[75,1],[33,2],[82,1],[37,1]],'specify',[[48,1],[1,1],[54,1],[31,1],[30,1]],'key_wow64_64key',[[76,2]],'verbose',[[11,1],[91,1]],'info',[[45,1],[68,1],[0,1]],'improvements',[[1,1],[0,2]],'frequent',[[62,1]],'receive',[[37,1],[45,1],[1,1]],'children',[[34,2]],'desktop',[[73,1],[38,1],[30,7],[0,1],[13,5],[16,3],[52,2],[56,1],[39,1],[17,2],[22,2],[49,2],[51,1],[54,1],[70,3],[34,1],[18,1],[11,5]],'modalstyle',[[37,1]],'recording',[[85,2]],'home',[[0,2]],'detects',[[73,1],[54,1],[48,1],[71,1],[2,1]],'events',[[45,2],[32,1],[68,3],[0,1]],'check',[[73,1],[9,1],[1,2],[3,1],[33,1],[56,1]],'names',[[57,1],[31,1]],'bought',[[0,1]],'diagonally',[[54,1]],'direcr3d',[[19,1]],'sting',[[54,1]],'lower',[[56,1]],'configuration',[[1,3],[19,1],[30,1],[0,7],[81,2],[92,2],[84,1],[27,2],[5,2],[37,1],[9,4],[25,2],[80,1],[2,2],[82,3],[34,3],[3,2],[10,1],[33,1],[57,1]],'packages',[[84,1]],'invisible',[[89,1],[37,1]],'periodically',[[45,2],[51,1],[62,1]],'every',[[51,1],[1,1],[33,1],[60,1],[44,1]],'ones',[[57,1]],'timesetevent',[[64,1]],'optimize',[[52,1],[29,1]],'directx1~6',[[48,2]],'font',[[70,2],[75,4]],'smallest',[[66,1]],'alphabetical',[[5,1]],'tool',[[67,1],[0,1]],'icons',[[19,1],[62,1],[0,1]],'d3d8',[[56,1],[48,1]],'autorefresh',[[51,1]],'rites',[[54,1]],'beginscene',[[60,1]],'intervention',[[48,1]],'click',[[44,1],[30,1],[1,1]],'hookgoglibs',[[78,2]],'dxwnd',[[87,1],[0,29],[15,2],[29,9],[80,2],[2,8],[24,2],[82,4],[48,5],[32,6],[91,2],[57,3],[46,2],[28,2],[44,1],[13,2],[68,3],[92,7],[64,2],[37,3],[33,10],[11,1],[88,1],[1,11],[19,4],[84,4],[9,5],[49,3],[51,2],[54,6],[66,3],[71,1],[4,1],[7,1],[65,1],[30,1],[31,4],[45,2],[62,2],[78,1],[26,8],[25,1],[70,1],[76,2],[34,1],[75,3],[85,3],[3,7]],'introduction',[[0,1]],'affect',[[92,1],[26,1],[62,1]],'timeslow',[[87,1],[91,1]],'edit',[[34,2],[54,1],[25,1],[82,1],[5,1]],'story',[[0,1]],'coordinate',[[85,1],[11,1],[30,1]],'letting',[[0,1]],'completion',[[43,1]],'emulateregistry',[[76,1]],'configurations',[[1,1],[30,1],[0,1]],'effects',[[0,2],[60,2],[56,1],[11,1],[44,1]],'nopower2fix',[[56,1]],'include',[[56,1],[57,1],[1,1]],'clear',[[13,1],[54,1],[3,1],[56,2],[60,1]],'emulating',[[54,1]],'requires',[[48,1],[29,1],[43,1],[2,1]],'considers',[[45,1]],'empties',[[45,1]],'compares',[[2,1]],'flag',[[73,2],[1,2],[19,1],[56,4],[39,1],[59,1],[51,6],[29,2],[54,13],[71,2],[60,1],[80,2],[91,1],[32,1],[57,2],[79,2],[46,1],[31,1],[30,3],[44,5],[45,2],[62,1],[20,1],[68,1],[64,5],[37,4],[63,2],[78,5],[70,2],[76,2],[43,5],[34,1],[72,2],[75,11],[85,1],[33,6]],'tracing',[[3,1],[72,1],[35,1]],'nomovies',[[73,1]],'languages',[[84,1]],'sims',[[51,1]],'characters',[[11,1]],'engine',[[33,2]],'resolving',[[60,1],[37,2]],'rendering',[[54,1],[11,1],[58,4]],'recognize',[[43,1]],'algorithm',[[31,1]],'outregistry',[[68,1]],'overrideregistry',[[76,1]],'menu',[[17,1],[26,1],[1,2],[25,2],[54,1],[2,2],[89,3],[90,1],[18,1]],'keymapping',[[87,1]],'approximate',[[54,1],[75,1]],'processed',[[54,1],[68,1],[56,1],[37,1]],'suspends',[[63,1]],'setcompatibility',[[52,1]],'day',[[0,1]],'handles',[[65,1],[49,1],[32,1]],'ddscl_fullscreen',[[54,1]],'forwards',[[49,2]],'forced',[[85,2],[42,1],[51,1],[76,2]],'includes',[[2,1],[44,1]],'directdraw1',[[49,1]],'removes',[[79,1]],'windowproc',[[33,3]],'provided',[[24,6],[28,1]],'registry',[[1,1],[76,9],[80,9],[82,1],[0,2],[13,1],[68,2],[37,1]],'accordingly',[[62,1]],'sections',[[62,1]],'normalize',[[64,1]],'creation',[[54,1],[32,2]],'drives',[[79,1]],'own',[[37,2],[84,1],[9,1],[75,2],[2,1],[0,2]],'coder',[[0,1]],'during',[[45,2],[59,1],[51,1],[72,1],[11,1]],'glide',[[35,2]],'33%',[[63,1]],'masks',[[43,1]],'000',[[54,1]],'backgrounds',[[39,1]],'simply',[[54,1],[49,1],[75,1],[79,2],[0,1]],'wherever',[[0,2]],'instance',[[1,1],[33,1],[30,1],[44,1]],'empty',[[45,1],[54,1],[1,1],[79,1],[30,1]],'frame',[[37,2],[51,2],[54,1],[19,1],[62,2],[58,1]],'help',[[56,1],[24,3],[57,1]],'asynchronous',[[79,2]],'next',[[85,1]],'locale',[[84,1]],'calls',[[73,3],[67,1],[56,1],[64,2],[37,2],[39,1],[78,2],[49,1],[70,3],[76,2],[34,1],[48,3],[75,1],[33,4]],'trying',[[75,1],[33,1],[2,1],[0,3]],'movements',[[43,1]],'thread',[[45,1],[72,1],[15,2],[1,1],[51,1]],'filter',[[45,1],[24,1],[50,2]],'date',[[84,1]],'tick',[[64,2],[67,1]],'adjust',[[54,1],[29,1],[20,1],[64,1]],'smk',[[72,1]],'detection',[[43,1]],'job',[[4,1]],'related',[[83,1],[23,1],[29,1],[70,1],[43,1],[62,1],[48,1],[20,1],[68,1]],'invoked',[[60,1],[37,1]],'behaviors',[[32,1]],'clientremapping',[[70,1]],'hence',[[0,1]],'stack',[[80,1]],'finetiming',[[64,1]],'folder',[[0,1],[9,2],[1,3],[31,3],[5,1]],'picture',[[19,1],[2,1]],'comp',[[45,1]],'becoming',[[49,1]],'thought',[[0,1]],'team',[[24,1]],'introduces',[[62,2],[44,1]],'features',[[54,1],[48,1],[92,1],[0,2]],'unskippable',[[45,1]],'suppressd3dext',[[56,1]],'play',[[34,1],[91,1]],'glactivetexture',[[71,1]],'causing',[[75,1]],'experimental',[[0,1],[58,1],[54,1],[59,1],[71,1],[37,2]],'logs',[[1,3],[66,3],[67,1],[68,8],[3,1],[65,2]],'had',[[38,1],[0,1]],'error',[[51,1],[75,2],[70,1],[2,1],[43,1]],'subfolder',[[57,2],[2,1]],'fields',[[40,2],[30,2]],'destroyed',[[37,1]],'limitfps',[[62,2]],'defined',[[45,1]],'coarse',[[20,1]],'client',[[62,1],[51,1],[70,2],[30,1],[50,2]],'fixwinframe',[[37,1]],'enableclipping',[[44,1]],'outwinmessages',[[68,1]],'sports',[[75,2]],'globalunlock',[[75,1]],'already',[[80,1],[32,1],[38,1],[60,1],[0,1]],'directx11',[[48,2]],'modal',[[58,1],[37,2]],'eminent',[[51,1]],'keepcursorfixed',[[44,1]],'fight',[[11,1]],'buffered',[[79,1]],'management',[[39,1]],'exist',[[80,1]],'trick',[[75,1],[91,1],[11,1],[58,1]],'frozen',[[0,1]],'freeze',[[11,1]],'functions',[[12,1],[29,1],[49,1],[54,2],[11,1]],'similarly',[[49,1]],'together',[[30,1],[0,1]],'their',[[73,2],[54,1],[2,1],[0,3],[45,2],[48,1],[37,1]],'compatible',[[49,2],[52,1]],'subset',[[26,1]],'palette',[[21,2],[49,1],[51,3],[54,1],[70,3],[18,1],[39,3]],'separated',[[33,1],[66,1]],'emulate',[[77,1],[76,1],[40,1],[43,1],[64,1]],'releasemouse',[[44,1]],'snowboard',[[54,1],[89,3],[56,1]],'solution',[[78,1],[37,1]],'confirmation',[[29,2],[25,1],[5,1]],'bypasses',[[70,1],[34,1],[73,1]],'for',[[50,1],[0,10],[56,1],[27,1],[15,1],[29,2],[80,1],[24,1],[82,2],[48,7],[91,1],[57,1],[79,3],[46,1],[28,2],[44,4],[81,1],[13,1],[68,1],[90,1],[86,4],[64,2],[37,2],[63,5],[89,1],[43,4],[33,2],[11,1],[73,2],[1,5],[84,4],[9,4],[23,1],[51,3],[54,5],[71,2],[10,1],[18,1],[7,1],[30,9],[31,1],[45,1],[62,3],[52,3],[25,2],[70,4],[34,2],[75,6],[85,1],[3,2]],'libraries',[[0,1],[78,1],[70,1],[43,3],[35,1]],'decrease',[[91,1],[87,1],[0,1]],'that',[[50,1],[0,22],[56,1],[15,1],[29,4],[2,3],[24,1],[82,1],[48,2],[32,6],[91,2],[57,2],[79,3],[38,1],[44,3],[13,2],[20,1],[68,3],[92,1],[64,5],[37,5],[63,3],[21,1],[22,1],[43,5],[33,3],[11,5],[73,3],[88,1],[1,3],[67,3],[84,2],[39,2],[49,3],[23,1],[51,6],[54,9],[60,1],[71,1],[40,2],[30,3],[62,6],[45,9],[78,1],[26,1],[70,4],[76,4],[34,1],[72,2],[75,12],[3,2],[58,1]],'appropriate',[[45,1],[43,2]],'area',[[73,1],[50,2],[44,1],[30,3],[62,1],[12,1],[81,1],[51,1],[70,3],[80,1],[91,2],[10,1],[11,6],[58,1]],'troubles',[[51,1]],'first',[[51,1],[25,1],[30,1],[0,3],[75,1],[32,2],[79,1],[7,1]],'reducing',[[63,1]],'troubleshoot',[[68,1]],'care',[[49,1],[37,1]],'syncronize',[[70,1]],'globalunock',[[75,1]],'native',[[76,1],[40,1],[43,1]],'asking',[[0,1]],'could',[[45,1],[48,1],[51,1],[70,1],[75,1],[0,2]],'plit',[[51,1]],'1000',[[62,2]],'top',[[0,1],[11,2],[37,2],[70,1],[6,2],[2,1]],'correct',[[64,1],[48,1],[44,2]],'below',[[90,1],[54,2],[20,1],[89,1],[2,1],[27,1]],'account',[[45,1],[51,1]],'codeproject',[[0,1]],'key”',[[11,1],[91,1]],'actually',[[75,1],[2,1],[37,1]],'step',[[6,2]],'resizing',[[45,1],[37,1]],'svga',[[40,1]],'sherwood',[[51,1],[90,2]],'thank',[[0,3]],'screenshot',[[11,1]],'filled',[[76,2]],'often',[[75,2],[0,1]],'fixsmackloop',[[72,1]],'plus',[[26,1]],'aero',[[49,3],[52,7]],'owner',[[0,1]],'export',[[9,1],[1,1],[25,1],[2,1],[0,1]],'formula',[[62,1]],'glut32',[[71,2]],'prefer',[[9,1]],'analyze',[[44,1],[68,1],[1,1]],'lose',[[43,1],[29,1]],'uprising',[[45,1],[37,1]],'notify',[[29,1]],'hidecdromempty',[[79,1]],'return',[[54,2],[51,1],[70,1],[75,2],[43,1]],'conveniently',[[75,1]],'bypassgoglibs',[[78,1]],'accelerate',[[11,1]],'slow',[[0,1],[63,1],[11,1],[44,2]],'supporters',[[24,1],[0,1]],'whole',[[37,1],[44,1],[58,1],[70,1],[30,3],[39,1]],'bit',[[75,3],[76,4],[56,2],[39,1]],'too',[[45,1]],'recent',[[17,1],[49,1],[54,1],[71,1],[0,2],[85,1],[75,1],[56,1]],'audio',[[75,1]],'sets',[[51,1],[87,1],[62,1],[48,1],[75,1],[84,1],[37,1]],'mechanism',[[30,1],[43,1]],'killed',[[45,2],[72,1]],'generate',[[51,1]],'opcodes',[[64,1],[75,3]],'ran',[[0,1]],'call',[[73,1],[78,1],[70,2],[71,1],[34,1],[52,1],[72,1],[33,3]],'alpha',[[51,2]],'mcisendstring',[[73,2]],'ime',[[75,2]],'mintexy',[[86,1]],'usually',[[11,1],[5,1],[49,1],[70,2],[0,1],[75,3],[64,1],[39,1]],'afford',[[75,1]],'unchanged',[[11,1]],'leftmost',[[20,1]],'approximation',[[51,1]],'cumulative',[[51,1]],'pump',[[45,1]],'maxtexx',[[86,1]],'yet',[[75,1],[0,1]],'stand',[[11,1]],'networking',[[11,1]],'resolutions',[[40,3]],'usual',[[0,1]],'provide',[[51,1],[1,1]],'logic',[[32,1],[31,1],[0,1]],'into',[[51,1],[1,1],[54,1],[50,1],[0,5],[45,1],[91,1],[57,1],[37,1]],'avoid',[[62,1],[44,1],[35,1],[37,1],[78,1],[51,1],[54,1],[66,1],[34,1],[48,1],[72,1],[75,1],[58,1]],'great',[[0,1]],'fixpixelzoom',[[71,1]],'collect',[[1,1]],'ratios',[[63,1],[30,1]],'referring',[[30,1]],'locks',[[51,1]],'refreshed',[[72,1],[51,1],[20,1]],'handled',[[49,1]],'those',[[56,1],[57,1]],'offscreenplain',[[49,1]],'logging',[[87,1],[91,1],[19,2],[11,2],[66,1]],'runtime',[[67,1],[1,1]],'calculates',[[30,1]],'terminates',[[56,1],[29,1]],'varying',[[54,1]],'windows',[[73,2],[79,1],[30,2],[0,2],[44,1],[45,4],[52,2],[77,2],[56,3],[84,1],[37,8],[9,1],[23,1],[29,1],[51,1],[43,1],[70,1],[71,1],[75,6],[32,1],[91,1],[33,1],[18,1],[58,1]],'patches',[[78,1],[75,1]],'using',[[73,1],[54,2],[1,1],[43,1],[30,1],[45,1],[0,3],[67,1],[75,1],[57,2],[64,1]],'either',[[75,1],[19,2],[2,1],[0,1]],'unacquire',[[43,3]],'disablefogging',[[60,1]],'fail',[[25,1],[45,1],[51,1]],'although',[[45,1],[0,1]],'successfully',[[75,1],[37,1]],'noimagehlp',[[75,1]],'artwork',[[0,1]],'win98',[[79,1]],'localized',[[92,1]],'multimedia',[[73,3],[64,1]],'selector',[[30,1],[84,1]],'correspond',[[54,1]],'timestretch',[[64,1]],'user',[[33,1]],'copy',[[59,1],[68,1],[79,2],[0,2]],'how',[[49,1],[29,1],[54,1],[0,2]],'icon',[[26,3],[80,1],[31,1],[2,5],[30,2],[81,1],[32,1],[3,1],[33,1]],'die',[[33,1],[2,1]],'switched',[[38,1]],'external',[[3,1],[92,1]],'condition',[[75,3],[51,1],[44,1]],'criteria',[[57,1]],'certain',[[78,2],[33,1],[0,1]],'pack',[[84,4]],'0x70',[[87,1]],'locking',[[11,1],[91,1]],'relative',[[43,2],[67,2]],'cooperative',[[54,2],[19,1],[43,1]],'texturehighlight',[[57,1]],'skewed',[[54,1]],'setcursorpos',[[44,1]],'configurable',[[62,1]],'smearing',[[51,1]],'blockpriorityclass',[[75,1]],'inject',[[32,1]],'exiting',[[3,1]],'pax',[[51,1]],'unresponsive',[[0,1]],'picker',[[30,1]],'bar',[[30,1],[37,1]],'maintaining',[[0,1]],'name',[[34,1],[78,1],[19,1],[71,1],[28,4]],'fullscr',[[11,1]],'black',[[51,1],[49,1],[54,3],[30,1]],'commands',[[26,1],[3,1],[2,2],[27,1]],'suppresschild',[[34,1]],'warnings',[[46,1]],'d3d9',[[48,1],[56,2],[24,1]],'match',[[57,1],[1,1]],'developer',[[24,2],[1,1]],'based',[[48,1],[62,1]],'basically',[[54,1]],'endless',[[75,2]],'modders',[[57,1]],'stretch',[[73,1],[85,1],[54,1],[20,1],[50,1],[64,5]],'gho',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,2],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'clipper',[[70,1],[51,2]],'path',[[9,3],[1,3],[23,1],[25,1],[2,4],[28,3],[31,5]],'identical',[[80,1]],'theory',[[45,1]],'weren',[[54,1]],'unlock',[[51,1],[54,1],[87,1],[89,1],[11,1],[37,1]],'until',[[92,1],[2,1],[26,1]],'middle',[[44,2]],'showhints',[[29,1]],'potentially',[[45,1]],'encouragement',[[24,1]],'adds',[[67,2]],'lowering',[[15,1]],'here',[[83,1],[78,1],[85,1],[88,1],[28,1]],'frames',[[72,2],[56,2],[60,2]],'suppressed',[[45,1]],'advantages',[[33,1]],'reached',[[33,1]],'outdebugstring',[[67,1]],'args',[[71,1]],'current',[[19,1],[38,1],[0,1],[44,1],[84,1],[17,1],[21,1],[51,1],[2,1],[24,1],[48,1],[3,1],[11,2]],'refresh',[[37,2],[87,2],[91,1],[62,1],[11,1]],'michael',[[24,1]],'internet',[[0,1]],'compatibility',[[0,2],[77,1],[13,3],[52,1],[74,1],[59,1],[54,1],[29,1],[78,2],[48,1],[32,1],[75,2]],'afterward',[[37,1]],'delay',[[62,9],[44,2]],'wildly',[[62,1]],'corners',[[64,1]],'string',[[73,1],[67,1],[84,1]],'yfactor',[[71,1]],'must',[[45,1],[80,1],[92,1]],'turned',[[45,1],[43,1]],'disks',[[79,1]],'decided',[[0,1]],'suspended',[[32,1]],'closer',[[49,1]],'terminated',[[45,1],[85,1],[26,1]],'border',[[45,1],[58,1],[54,1],[30,1],[44,2]],'tight',[[72,1]],'choosing',[[1,1]],'emulation',[[49,2],[51,3],[54,2],[38,1],[70,1],[90,1],[11,1]],'processes',[[45,2],[34,2],[81,1]],'retrieved',[[80,1]],'notable',[[54,3],[75,1]],'flickering',[[70,1]],'affecting',[[25,1],[39,1]],'the',[[87,9],[50,12],[0,47],[77,7],[56,12],[27,4],[15,4],[29,13],[80,11],[2,26],[24,14],[82,3],[48,15],[32,22],[91,19],[57,7],[79,8],[46,7],[38,5],[28,11],[44,37],[81,4],[12,3],[13,4],[20,10],[68,7],[64,27],[5,10],[37,28],[63,9],[21,2],[22,1],[83,1],[89,8],[43,22],[90,7],[92,9],[33,30],[11,39],[73,8],[1,30],[19,15],[67,9],[16,2],[84,17],[39,10],[59,3],[9,8],[14,3],[23,3],[49,25],[51,41],[54,72],[4,4],[60,6],[66,2],[71,10],[10,1],[40,14],[18,1],[7,3],[30,54],[31,6],[45,16],[62,20],[42,2],[52,6],[17,2],[78,4],[26,11],[25,19],[70,21],[6,8],[76,10],[34,10],[72,8],[75,36],[3,10],[85,12],[58,8]],'speech',[[81,1]],'off',[[54,1],[1,1],[19,1],[91,5],[3,1],[11,3]],'perform',[[73,1],[56,1],[68,1]],'better',[[78,1],[49,1],[51,2],[54,1],[50,1],[13,1],[33,1],[11,1]],'surround',[[30,1]],'straight',[[54,1]],'result',[[73,1],[75,1]],'bear',[[0,1]],'twice',[[50,1]],'fixbindtexture',[[71,1]],'modern',[[51,1],[54,1],[60,1],[0,1],[75,2],[37,1]],'green',[[2,1]],'entries',[[76,2],[25,1],[2,1],[0,1],[56,1],[39,3]],'receives',[[70,1],[44,2]],'minimal',[[54,2],[44,1]],'allowed',[[54,1]],'located',[[0,1],[54,1],[92,1],[33,1],[5,1]],'handy',[[4,1]],'generic',[[29,1]],'adjustment',[[20,1]],'banner',[[29,1]],'mysterious',[[0,1]],'significantly',[[54,1]],'crashes',[[45,1],[13,1],[75,1],[0,1]],'execution',[[31,3],[32,2]],'hooknorun',[[33,1]],'progressive',[[51,1]],'required',[[54,1],[1,1]],'previous',[[67,1],[2,2],[60,1]],'full',[[73,1],[50,1],[54,1]],'everything',[[1,1],[0,2]],'specifications',[[51,1]],'dump',[[54,1],[57,2],[86,4]],'level',[[54,2],[29,1],[19,1],[43,2]],'shareddc',[[70,2]],'xfactor',[[71,1]],'routing',[[78,1]],'cubes',[[80,1]],'drawback',[[32,3]],'turning',[[11,1]],'rendered',[[56,1]],'vfw',[[73,1]],'english',[[84,4]],'guarantee',[[75,1]],'dll',[[84,3],[71,2],[24,3],[0,1],[34,1],[48,5],[75,3],[92,1],[56,1],[33,1],[64,2]],'making',[[45,1],[34,1],[49,1],[38,1],[43,2],[39,1]],'scaled',[[51,2],[49,1],[70,1],[71,1],[50,1]],'movie',[[73,3]],'taking',[[11,1]],'social',[[0,1]],'listen',[[45,1]],'exception',[[64,1],[75,3]],'opcode',[[64,1],[75,1]],'opengl32',[[71,1]],'detected',[[72,1],[13,1],[54,1],[75,1],[40,1]],'conversions',[[49,1]],'smack',[[72,4]],'seem',[[75,1]],'outimporttable',[[68,1]],'width',[[54,1],[19,1],[30,6],[85,3],[10,2],[40,2],[86,2]],'note',[[49,1],[54,1],[80,1],[30,1],[62,1],[68,1],[3,1],[40,1]],'release',[[0,3],[77,1],[51,1],[30,1],[44,1]],'simplify',[[28,1]],'dungeon',[[44,1]],'blitted',[[50,1],[54,1]],'horizontal',[[85,1],[51,1],[54,1]],'cover',[[73,1]],'function',[[71,1],[12,1],[87,1],[33,1],[11,2],[44,1]],'affinity',[[75,3]],'reserve',[[75,1]],'backbufattach',[[54,1]],'appear',[[63,1],[54,1],[51,1],[1,1],[79,1],[89,1]],'active',[[72,1],[3,1],[25,1],[43,1]],'temporary',[[49,1]],'behind',[[0,1]],'contents',[[45,1]],'handle',[[79,1],[29,1],[70,1],[2,2],[0,1],[45,1],[75,3],[33,1],[11,1],[37,1]],'designed',[[45,2],[29,1]],'size',[[58,1],[73,1],[22,1],[29,1],[49,1],[54,1],[50,2],[30,4],[62,1],[85,1],[56,1],[37,1]],'allow',[[3,1],[54,1],[0,3]],'“dave',[[54,1]],'useful',[[67,1],[13,1],[52,1],[68,1],[37,1],[39,1],[5,1],[9,1],[15,1],[51,1],[2,2],[91,3],[11,2]],'16bpp',[[38,1],[54,4]],'given',[[92,1],[40,2],[2,1],[27,1]],'surface',[[19,1],[50,4],[90,1],[56,2],[37,1],[49,14],[51,9],[54,12],[70,2],[60,1],[72,2],[91,1],[11,1],[58,2]],'noticeable',[[54,1],[39,1]],'vista',[[52,1]],'packs',[[84,1]],'improve',[[59,1],[54,2],[75,1],[0,2]],'project',[[24,1],[0,4]],'oddly',[[51,1]],'golf',[[37,1]],'1mhz',[[64,1]],'bpp',[[38,4]],'produces',[[70,1],[11,1],[62,1]],'tracehooks',[[68,1]],'tricky',[[45,1],[0,1]],'ubik',[[75,1]],'perfect',[[11,1]],'programming',[[0,1]],'usb',[[1,1]],'free',[[75,1]],'manual',[[82,1]],'along',[[75,1],[30,1],[68,1]],'rightmost',[[20,1]],'who',[[24,10]],'human',[[43,1]],'executable',[[1,1],[23,1],[29,1],[2,1],[28,1],[0,1],[33,1]],'classes',[[73,1]],'positive',[[73,1],[0,1]],'weird',[[11,1]],'realistic',[[62,1]],'keeper',[[44,1]],'specified',[[63,1]],'returns',[[73,1],[75,1]],'provides',[[18,1]],'new',[[37,1],[1,2],[25,1],[66,2],[30,1],[0,1],[43,1],[34,1],[85,1],[5,1]],'existed',[[0,1]],'shortcuts',[[0,1]],'installing',[[1,1]],'altering',[[39,1]],'little',[[29,1],[49,1],[0,2]],'attention',[[0,1]],'dragging',[[37,1],[20,1]],'adjacent',[[40,2],[50,1]],'choice',[[33,1],[40,2],[75,1]],'listbox',[[64,1]],'showtimestretch',[[64,1]],'determine',[[70,1]],'directed',[[48,1]],'cost',[[25,1],[54,1]],'providing',[[30,1]],'bother',[[0,1]],'textureformat',[[51,1]],'gray',[[2,1],[31,1]],'very',[[39,1],[15,1],[29,1],[51,1],[54,3],[70,1],[0,1],[75,2],[3,1],[79,1],[37,1]],'quality',[[54,1]],'join',[[0,1]],'clipping”',[[91,1]],'modules',[[31,1]],'limitscreenres',[[40,1]],'logged',[[68,1]],'physically',[[75,1]],'0x8ffffff',[[75,1]],'fixes',[[73,1],[89,2],[43,1],[24,1],[44,1],[72,1],[75,2],[90,1],[56,3]],'image',[[51,1],[89,1],[56,1],[11,1],[90,1]],'low',[[17,1]],'giving',[[37,1]],'ticks',[[64,1]],'outdebug',[[68,1]],'kills',[[25,1],[45,1],[15,1]],'inserts',[[5,1]],'though',[[45,1],[48,1],[51,1],[70,1],[33,1],[75,1]],'hidemultimonitor',[[37,1]],'older',[[45,1],[54,1],[40,1],[56,1],[84,1]],'learned',[[0,1]],'playback',[[72,1]],'bitmap',[[57,1],[54,1]],'functional',[[75,1]],'killing',[[2,1]],'long',[[45,3],[67,1],[0,1]],'longer',[[17,1],[9,1],[54,1],[0,1],[75,1],[40,1],[84,2]],'person',[[0,1]],'enabling',[[43,2]],'places',[[54,1],[44,1]],'duplicates',[[25,1]],'hooksmackw32',[[72,1]],'divide',[[75,1]],'refreshing',[[21,1],[37,1]],'applied',[[34,1],[54,1],[23,1],[68,1]],'cleared',[[84,1]],'setting',[[51,1],[1,1],[38,5],[43,1],[2,2],[0,1],[77,1],[48,1],[75,2],[84,1],[39,1]],'texture',[[51,2],[54,5],[71,2],[60,1],[10,3],[57,6],[86,9]],'hookopengl',[[71,1]],'improved',[[0,1]],'occupies',[[30,2]],'multiplication',[[91,1]],'foreground',[[45,1]],'configured',[[1,2],[25,1],[0,1]],'displaying',[[45,1]],'moves',[[6,4]],'scan',[[54,2]],'people',[[0,1]],'second',[[63,1],[21,1],[20,1],[19,2],[62,2],[0,3]],'discouraged',[[70,1]],'list',[[1,2],[23,1],[25,4],[6,2],[2,2],[0,2],[34,1],[3,1],[56,1],[79,1],[5,3]],'selectively',[[63,1]],'alphachannel',[[51,1]],'and',[[87,1],[0,33],[56,3],[35,1],[15,1],[29,3],[2,4],[24,5],[48,5],[32,2],[91,5],[57,3],[79,3],[44,10],[12,3],[20,4],[68,2],[64,6],[37,12],[63,2],[83,1],[22,1],[43,5],[33,5],[11,11],[73,4],[88,1],[1,7],[19,2],[67,1],[84,8],[39,3],[9,4],[49,9],[51,5],[54,14],[60,1],[66,1],[71,1],[10,2],[40,3],[30,13],[62,3],[45,10],[52,2],[78,3],[26,1],[25,3],[70,5],[76,1],[34,2],[72,3],[75,11],[3,3],[85,2],[58,2]],'individual',[[33,2]],'still',[[17,1],[64,1],[1,1],[29,1],[0,3],[3,1],[11,3],[37,1]],'powerful',[[75,1],[0,1]],'meaningless',[[45,1]],'racer',[[54,2],[89,2],[56,1]],'delicate',[[64,1]],'record',[[81,1],[80,1]],'before',[[54,1],[1,1],[38,1],[80,1],[0,1],[45,1],[75,1],[37,3]],'256',[[39,1],[2,1],[21,1]],'ignore',[[54,2],[51,1],[62,1],[37,1]],'lock',[[39,3],[51,3],[54,2],[87,1],[89,1],[91,2],[11,1],[37,1]],'refreshes',[[51,1]],'fps',[[87,1],[91,1],[19,1],[11,2],[62,12]],'various',[[18,1]],'mouse',[[51,2],[43,6],[30,2],[45,3],[44,17],[68,3],[84,1]],'forth',[[44,1],[45,1],[29,1]],'intercepting',[[32,1]],'modifymouse',[[44,1]],'virtualjoystick',[[44,1]],'starts',[[34,1],[75,1],[92,2],[3,1],[30,1]],'cutscenes',[[45,1]],'which',[[30,1],[44,1],[0,1],[77,1],[64,1],[39,1],[49,1],[29,1],[51,1],[54,4],[72,2],[75,1],[32,1]],'stores',[[0,1]],'war',[[54,1]],'policy',[[33,1]],'dedicate',[[0,1]],'start',[[70,1],[31,2],[0,2],[4,2],[85,1],[75,1],[92,1],[39,1]],'center',[[30,2],[43,1]],'lines',[[91,1],[11,1],[54,6]],'title',[[37,1],[62,2],[30,1]],'gaming',[[30,1],[0,1]],'differences',[[2,1]],'mci',[[73,4]],'controls',[[79,1]],'setzbufferbitdepths',[[54,1]],'require',[[44,1],[30,1],[1,1]],'diablo',[[75,2]],'activemovie',[[73,1]],'nofillrect',[[70,1]],'entirely',[[30,1],[91,1]],'syncpalette',[[70,1]],'exports',[[25,1],[56,1]],'switch',[[52,1],[51,1],[29,2]],'trouble',[[1,1],[0,1]],'work',[[11,2],[1,1],[30,1],[0,2],[84,1],[37,1],[17,1],[51,2],[2,2],[43,2],[75,1],[33,1],[7,1],[58,1]],'centering',[[44,1]],'deactivates',[[13,1]],'wait',[[45,1]],'gog',[[78,8]],'keepcursorwithin',[[44,1]],'sfb7',[[24,1],[0,2]],'references',[[24,1],[0,1]],'therefore',[[34,1]],'hooked',[[1,1],[19,1],[0,2],[28,2],[81,1],[16,2],[64,1],[37,2],[9,1],[14,3],[54,2],[80,1],[2,1],[75,1],[57,3],[11,3]],'avoiding',[[51,1],[46,1],[79,1],[44,1]],'you',[[88,1],[1,11],[50,1],[0,25],[56,1],[84,1],[59,1],[9,2],[29,10],[49,1],[51,1],[2,2],[54,6],[71,1],[80,3],[48,2],[82,1],[10,1],[57,1],[7,1],[79,3],[91,2],[38,1],[30,4],[28,3],[31,2],[44,2],[12,1],[20,2],[62,1],[81,3],[64,1],[5,1],[17,1],[63,1],[26,3],[83,1],[25,3],[92,3],[34,1],[85,2],[3,1],[11,6]],'happening',[[54,1],[0,1]],'left',[[0,3],[54,1],[11,1],[44,1]],'immediately',[[91,1],[29,1],[46,1],[11,1],[5,1]],'pathname',[[28,2]],'moto',[[54,1]],'memory',[[49,1],[51,3],[54,10],[52,1],[75,5],[33,1]],'used',[[19,1],[31,1],[30,4],[0,1],[44,1],[45,1],[50,1],[63,1],[9,2],[51,3],[80,2],[43,1],[85,1],[75,2],[33,1],[57,1]],'restores',[[4,1],[13,1],[14,1]],'roms',[[79,1]],'coming',[[1,1]],'user32',[[70,2],[64,1],[37,1]],'reliable',[[25,1]],'directdrawsurface',[[51,1],[54,1]],'segment',[[75,1]],'its',[[1,2],[0,5],[44,1],[45,1],[52,1],[64,1],[37,3],[63,1],[84,1],[9,1],[22,1],[29,2],[70,1],[2,2],[82,1],[4,1],[34,2],[75,2],[3,2],[33,2]],'victims',[[0,1]],'programmed',[[46,1]],'enables',[[9,1],[46,1],[92,1],[71,1],[35,1],[44,1]],'imports',[[3,1]],'sid',[[37,1]],'flushes',[[45,1]],'taskbar',[[14,1],[30,1],[45,1],[13,2],[16,3],[11,1],[37,2]],'buffer',[[49,3],[54,1],[56,2]],'sophisticated',[[33,1],[0,2]],'present',[[75,1]],'ratio',[[63,5],[54,1],[75,1],[30,7],[64,2]],'pixel',[[17,1],[22,1],[49,1],[51,4],[50,1]],'hookenabled',[[31,1]],'cursor',[[51,2],[87,1],[19,2],[44,10],[90,1],[42,4],[68,3],[91,1]],'key_wow64_32key',[[76,2]],'unpack',[[1,1]],'documentation',[[24,1]],'sporadic',[[51,1]],'react',[[45,2],[11,1],[91,1]],'introduced',[[51,1],[54,1]],'sort',[[5,2]],'negative',[[75,1]],'why',[[29,1],[25,1],[64,1],[0,4]],'suppressdxerrors',[[51,1]],'disablemaxwindowedmode',[[75,1]],'sometimes',[[78,2],[1,1],[25,1],[13,1],[11,1],[64,1]],'physical',[[79,2]],'problems',[[9,1],[1,1],[70,1],[88,1],[45,1],[64,1],[84,1]],'style',[[37,5]],'layer',[[70,1],[54,1]],'didn',[[45,1],[91,1],[79,1],[11,1]],'crazy',[[15,1]],'“slow',[[68,1]],'happens',[[70,1]],'hooking',[[29,1],[70,1],[71,1],[31,1],[0,2],[28,1],[48,3],[32,1],[68,1],[35,1]],'discussion',[[1,1]],'bring',[[37,1]],'hack',[[75,2],[57,2],[86,4]],'advantage',[[49,1],[0,1]],'prompt',[[3,1]],'context',[[70,3],[0,1]],'number',[[62,1],[66,1],[75,1],[33,1],[30,1],[28,1]],'rom',[[73,1]],'close',[[29,4],[14,1]],'nick',[[0,1]],'make',[[63,1],[64,1],[51,1],[54,1],[0,1],[33,1],[57,1],[37,2]],'bmx”',[[54,1]],'known',[[73,1],[1,1],[43,1],[91,1],[56,1],[11,1],[39,1]],'demonstrations',[[0,1]],'adjusting',[[64,1],[44,1]],'temporarily',[[11,1]],'portable',[[1,1]],'but',[[1,2],[50,1],[0,5],[56,1],[39,1],[9,1],[29,2],[49,8],[51,3],[2,2],[54,6],[4,1],[60,2],[48,1],[32,1],[80,1],[40,1],[82,1],[91,1],[38,3],[30,1],[28,1],[31,1],[44,1],[62,2],[64,2],[37,4],[17,1],[63,1],[26,1],[25,1],[70,1],[85,2],[75,3],[33,4],[11,2],[58,1]],'benefit',[[72,1]],'may',[[73,3],[0,3],[56,3],[59,1],[9,2],[29,3],[49,1],[54,8],[2,1],[60,1],[71,1],[48,1],[32,2],[79,1],[31,1],[45,2],[37,2],[17,1],[63,1],[25,1],[43,1],[72,1],[75,2],[33,1],[58,1]],'interfering',[[75,1]],'clearing',[[70,1]],'teachers',[[0,1]],'relied',[[75,1]],'proper',[[54,2],[25,1],[56,1],[2,1],[0,2]],'debug',[[9,2],[67,2],[0,1],[92,2],[68,1],[84,6]],'fixclipperarea',[[70,1]],'bigger',[[62,1]],'addresses',[[33,1]],'research',[[0,1]],'20msec',[[62,1]],'both',[[54,1],[33,1],[24,1],[62,1]],'any',[[79,1],[1,1],[46,1],[0,6],[45,4],[81,1],[13,1],[42,1],[92,2],[84,1],[37,2],[27,1],[26,1],[51,1],[54,1],[71,1],[80,2],[34,2],[91,1],[3,1],[40,1],[11,1],[57,1]],'typing',[[87,1]],'synchronized',[[75,1]],'anti',[[0,1]],'ensuring',[[45,1]],'systemmemory',[[54,2]],'slowing',[[68,1]],'default',[[50,2],[84,5],[39,1],[9,1],[29,1],[49,1],[71,1],[2,1],[24,1],[4,1],[51,5],[48,1],[32,1],[54,1],[57,1],[40,1],[30,2],[31,1],[92,1],[20,1],[37,2],[26,1],[70,1],[34,2],[75,2],[33,3]],'declare',[[52,1]],'store',[[85,1]],'normal',[[50,1],[91,1],[1,1],[11,3],[2,1]],'keepaspectratio',[[30,3]],'decently',[[37,1]],'evolution',[[0,2]],'slows',[[11,1],[50,1]],'plain',[[54,1]],'gettickcount',[[67,1]],'clip',[[11,1]],'creates',[[33,1],[54,1],[37,1]],'overlap',[[62,1]],'about',[[22,1],[1,1],[29,1],[19,1],[24,1],[0,1],[45,1],[91,1],[11,1],[37,1]],'artifacts',[[54,1],[60,1]],'gdinone',[[70,1]],'high',[[63,2]],'manually',[[9,1],[54,1],[92,1],[82,1]],'whose',[[56,1],[24,1],[0,1]],'value',[[73,1],[19,1],[62,2],[86,6],[64,3],[63,1],[51,1],[54,5],[76,2],[2,3],[75,3],[40,1],[33,1]],'can',[[1,8],[67,1],[0,2],[56,1],[84,3],[59,1],[9,3],[29,2],[49,1],[51,1],[2,3],[54,7],[80,2],[48,1],[91,5],[57,1],[79,1],[46,1],[30,2],[28,2],[31,1],[62,1],[13,1],[20,1],[68,2],[92,1],[64,3],[37,2],[63,2],[83,1],[26,1],[25,1],[70,2],[43,3],[34,1],[75,3],[11,5]],'koch',[[24,1]],'calculating',[[57,1]],'timers',[[64,4]],'interesting',[[49,1]],'breaks',[[78,1]],'programs',[[31,1],[0,3],[44,3],[45,4],[92,1],[56,1],[84,2],[37,3],[5,1],[9,1],[54,6],[70,1],[2,1],[43,1],[60,2],[75,2],[32,1],[33,1]],'operations',[[73,1],[62,2],[67,1],[45,1],[52,2],[68,6],[37,1],[49,2],[29,1],[76,2],[43,1],[72,1],[75,2],[91,1],[11,1]],'widechar',[[33,2]],'explorer',[[5,1]],'deletes',[[3,1],[25,1],[7,1],[5,1]],'important',[[80,1],[62,1],[82,1]],'takes',[[49,1],[0,1]],'disables',[[84,1],[75,1],[70,1],[40,1],[60,1],[44,1]],'uniquely',[[57,1]],'pieces',[[24,1]],'monitor',[[0,2],[45,1],[54,1],[40,1],[30,6],[37,2]],'unconnected',[[33,1]],'controlled',[[91,1],[44,4]],'checkadmin',[[84,2]],'receiving',[[44,1]],'move',[[0,1],[45,1],[5,2],[26,2],[54,2],[25,2],[6,1],[85,1],[91,2],[3,2],[11,3],[58,2]],'none',[[49,2],[48,2],[92,1],[57,1],[66,1],[0,1]],'extensions',[[56,1]],'fontbypass',[[75,1]],'hard',[[75,1],[1,1],[33,1],[79,1]],'supposed',[[44,1],[37,1]],'classic',[[40,1],[0,1]],'showfps',[[62,1]],'plocktoggle',[[87,1],[91,1]],'shooters',[[0,1]],'meier',[[37,1]],'typical',[[40,1]],'lockcolordepth',[[51,1]],'browser',[[24,1]],'upon',[[0,1]],'chat',[[0,1]],'cease',[[75,1]],'xyz',[[84,1]],'runs',[[9,1],[51,1],[25,1],[2,1],[28,1],[33,1],[11,1]],'exits',[[3,1],[0,1]],'multiple',[[84,1],[75,1],[25,1],[71,1],[79,1],[37,1]],'this',[[50,2],[0,13],[77,1],[56,10],[29,5],[80,2],[2,2],[24,1],[48,2],[32,6],[91,6],[57,2],[79,4],[46,2],[38,1],[28,1],[44,10],[81,2],[12,1],[13,2],[20,1],[68,3],[64,9],[5,1],[37,11],[63,4],[21,1],[89,2],[90,1],[92,1],[43,7],[33,12],[11,9],[73,2],[1,4],[19,1],[67,2],[84,2],[39,3],[59,1],[9,5],[49,4],[51,18],[54,23],[60,4],[71,3],[10,1],[40,1],[7,3],[30,4],[31,3],[45,10],[62,3],[17,1],[78,5],[25,5],[70,4],[34,6],[72,2],[75,16],[3,1],[85,1],[58,1]],'operated',[[0,1]],'elevate',[[29,1]],'more',[[1,1],[30,1],[0,4],[31,1],[62,1],[68,1],[56,1],[64,1],[63,2],[51,1],[23,1],[25,1],[54,1],[2,1],[43,1],[75,2],[32,1]],'polling',[[44,2]],'peekmessage',[[45,1]],'noflipemulation',[[51,1]],'essential',[[73,1],[29,1]],'determined',[[64,1]],'impact',[[56,1],[75,1]],'ago',[[0,1]],'accelerated',[[54,1],[49,1],[11,1],[64,1]],'factor',[[91,1],[20,1]],'associate',[[7,1]],'focused',[[30,1]],'information',[[37,1],[22,1],[23,1],[29,1],[19,2],[24,1],[82,1],[91,1],[68,1],[11,1],[18,1]],'ignored',[[70,1],[30,1],[54,1]],'forces',[[59,2],[51,1],[29,1],[54,6],[43,2],[42,2],[52,1],[91,1],[56,1],[11,1],[37,3]],'glories',[[0,1]],'directx10',[[48,2]],'lot',[[0,1]],'use',[[1,1],[19,1],[0,1],[81,1],[92,1],[68,1],[64,1],[37,1],[63,1],[78,2],[51,1],[54,4],[84,2],[71,2],[43,1],[60,1],[34,2],[48,1],[75,3],[33,2],[57,1]],'cdromdrivetype',[[79,1]],'involving',[[51,1]],'contributed',[[24,1]],'acquire',[[43,1],[29,1]],'ddrawex',[[48,1]],'swapeffect',[[59,1]],'represent',[[87,1]],'intended',[[11,1]],'affects',[[0,1],[44,1],[40,1],[39,1]],'ram',[[75,1]],'against',[[49,1]],'refuse',[[15,1]],'createprocess',[[34,2]],'contains',[[54,1],[1,1]],'auto',[[72,1],[9,1],[51,2]],'what',[[48,1],[29,1],[54,2],[70,1],[0,3]],'have',[[1,1],[30,2],[0,4],[44,1],[9,1],[15,1],[51,1],[54,3],[2,1],[43,1],[70,1],[72,1],[32,1],[33,1],[11,1],[79,1]],'concurrent',[[68,1]],'position',[[58,1],[87,1],[43,1],[44,5],[30,8],[85,4],[91,1],[20,1],[11,2],[37,1]],'hookdi',[[43,1]],'years',[[0,1]],'crash',[[54,1],[75,1],[3,1],[43,1]],'real',[[49,2],[75,1]],'paths',[[9,2]],'graphic',[[51,1],[54,2],[70,1],[33,1]],'ensures',[[72,1],[51,1]],'created',[[34,3],[51,1],[32,1],[54,2],[66,1],[37,1]],'other',[[30,2],[28,1],[0,3],[45,1],[13,1],[62,3],[56,2],[64,1],[37,2],[49,1],[29,2],[51,2],[70,3],[24,1],[43,2],[75,6],[91,1],[33,1],[11,1]],'efficient',[[54,1]],'128',[[56,1]],'element',[[75,1]],'simulator',[[44,1]],'functionality',[[0,1]],'ramp',[[39,2]],'quickly',[[91,1],[11,1],[68,1]],'olly',[[24,1]],'suppressing',[[52,1]],'clean',[[75,1],[89,1],[56,2],[60,1]],'fixmoviecolor',[[73,1]],'setwindowshook',[[32,2]],'gone',[[15,1]],'returned',[[51,1],[54,2],[40,1]],'append',[[66,1]],'hashed',[[57,1]],'discontinued',[[0,2]],'trail',[[90,1],[0,1]],'put',[[0,1]],'hijack',[[0,1]],'inactive',[[43,1],[0,1]],'defaults',[[28,1],[1,1]],'panel',[[5,2],[39,1],[77,1],[19,1],[64,1],[27,3]],'request',[[54,2]],'invoke',[[75,1]],'alternatively',[[1,1]],'they',[[73,1],[1,1],[30,1],[0,1],[67,1],[64,1],[39,3],[37,2],[54,2],[76,2],[80,1],[2,1],[43,2],[75,1],[91,2],[57,1],[33,3],[11,2]],'map',[[78,1],[11,1],[84,1]],'permissions',[[84,1],[9,1],[29,1]],'then',[[63,1],[9,1],[1,1],[25,1],[49,1],[12,1],[52,1],[91,1],[11,1],[37,2]],'language',[[83,1],[84,8]],'requested',[[51,1],[54,2]],'badly',[[11,1]],'ignoring',[[43,1]],'mention',[[28,1]],'replacement',[[57,1]],'toggle',[[91,3],[87,3],[11,7]],'ways',[[64,1],[0,2]],'power',[[54,1],[75,1],[56,2],[0,1]],'mainly',[[39,1],[9,1],[0,1]],'taken',[[32,1]],'ddraw',[[51,1],[48,1],[54,3],[70,2],[50,1],[89,1]],'platforms',[[17,1],[75,1],[76,2],[60,1],[0,1]],'identify',[[57,1]],'devoted',[[73,1]],'hid',[[43,2]],'unpleasant',[[44,1]],'rate',[[54,1],[62,1]],'windowing',[[11,1],[48,1]],'example',[[63,1],[51,1],[54,3],[30,1],[0,1],[28,1],[62,1],[56,1]],'because',[[15,1],[49,1],[51,1],[30,1],[2,1],[0,1],[60,1],[33,1],[37,1]],'additional',[[56,1],[54,1],[1,1],[19,1],[31,1],[35,1]],'rgb565',[[54,2]],'timetoggle',[[87,1],[91,1]],'translate',[[0,1]],'pitch',[[89,1],[49,1],[54,4]],'normally',[[44,1],[0,2]],'behave',[[75,1]],'reset',[[56,2],[59,1]],'repeated',[[45,1]],'would',[[49,1],[54,1],[25,1],[75,2]],'corresponding',[[51,1],[54,1],[25,1],[80,1],[62,1],[44,1],[48,1],[33,2],[84,3],[39,1]],'group',[[43,2]],'data',[[25,1],[51,2]],'reposition',[[54,1]],'improving',[[54,1]],'appended',[[62,1]],'hopefully',[[0,1]],'target',[[60,2]],'association',[[46,1]],'privileged',[[75,3]],'unlimited',[[40,1]],'smackw32',[[72,2]],'abnormally',[[2,1]],'mmporpg',[[0,1]],'blitfrombackbuffer',[[51,1]],'borders',[[39,1],[58,1],[37,2]],'compensates',[[44,1]],'warhammer',[[54,1]],'tables',[[0,1]],'original',[[49,1],[51,1],[25,1],[33,6],[24,1],[54,1]],'texturehack',[[57,1]],'four',[[30,2]],'hybridmode',[[49,1]],'contexts',[[70,1],[56,1]],'explicitly',[[75,1],[48,1],[51,1]],'contain',[[2,1],[29,1]],'developed',[[45,1],[54,1],[24,1],[0,1]],'activation',[[32,1],[28,1]],'applies',[[51,1]],'cpuslowdown',[[63,3]],'parent',[[28,1],[34,2],[37,3]],'idle',[[4,1],[26,1],[92,1],[19,1],[2,1]],'tycoon',[[45,1]],'grayscale',[[54,1]],'import',[[9,1],[1,2],[3,1],[68,2],[0,1]],'highlight',[[57,2]],'remap',[[70,2],[73,1],[60,1]],'aspect',[[54,1],[30,7],[0,1]],'custom',[[84,1],[78,2],[57,1],[71,2],[0,2]],'switching',[[75,2],[71,1],[64,1]],'flexible',[[54,1]],'counters',[[62,1]],'played',[[73,1]],'typically',[[37,1],[72,1],[40,1],[44,1]],'returning',[[75,1]],'hex',[[87,1]],'enter',[[31,1],[28,1]],'large',[[68,1]],'maxtexy',[[86,1]],'cleartarget',[[60,1]],'named',[[66,1],[0,1]],'sufficient',[[1,1]],'objects',[[54,2]],'diagonal',[[56,1]],'processing',[[51,1],[46,2],[44,1],[45,1],[10,1],[86,4]],'assign',[[11,1],[12,1]],'count',[[67,1]],'applications',[[54,1],[29,1],[75,1],[33,1],[62,1],[0,3]],'bundles',[[2,1]],'hookdi8',[[43,1]],'impress',[[0,1]],'minhook',[[24,1]],'see',[[87,1],[1,2],[19,2],[0,2],[56,2],[9,2],[23,1],[29,1],[51,2],[54,1],[48,1],[32,1],[10,1],[57,1],[18,1],[91,1],[30,1],[31,1],[45,1],[90,1],[13,4],[20,1],[92,1],[64,1],[5,3],[89,2],[25,2],[34,1],[75,1],[3,1],[11,7]],'ready',[[4,1],[26,2],[19,1],[2,2]],'refreshonresize',[[37,1]],'blit',[[72,2],[51,6],[49,1],[52,1],[50,1]],'involved',[[48,1],[0,2]],'success',[[70,1],[75,1]],'reduces',[[63,1]],'posy',[[85,1]],'directx1',[[29,1]],'fails',[[70,1],[33,1],[51,1]],'connected',[[44,1]],'ctrl',[[12,1]],'allows',[[28,1],[81,1],[12,1],[20,1],[64,1],[84,1],[63,1],[49,1],[25,2],[71,1],[80,1],[10,1],[79,1],[11,3]],'milliseconds',[[62,1]],'despite',[[75,1],[0,1]],'global',[[8,1],[5,2]],'invasive',[[0,1]],'clears',[[42,1]],'problem',[[49,1],[1,1],[75,3],[40,1],[56,3]],'resize',[[54,1],[91,2],[11,2],[37,2]],'loading',[[84,1]],'out',[[57,1]],'emulators',[[54,1]],'directdraw',[[19,1],[50,1],[0,2],[90,1],[52,1],[68,2],[39,1],[49,1],[29,1],[51,6],[54,9],[60,1],[70,4],[72,1],[75,2]],'vulnerable',[[45,1]],'tsuda',[[24,1]],'interlaced',[[54,2]],'altered',[[49,2],[33,1],[64,1],[0,1]],'toggles',[[11,7],[91,3]],'many',[[1,3],[68,1],[56,1],[24,1],[0,3]],'injected',[[0,1]],'happen',[[2,1],[44,1]],'alter',[[92,1],[20,1],[64,1],[0,2]],'expansions',[[72,1],[35,1]],'lockedsurface',[[49,1]],'resuming',[[63,1]],'obfuscated',[[33,3]],'act',[[38,1]],'directx9',[[48,3]],'direct3d8',[[56,1],[49,1]],'entire',[[30,2],[62,1],[11,1],[39,1]],'indicated',[[32,1]],'desire',[[62,1]],'transitioned',[[0,1]],'uses',[[0,1],[51,1],[92,1],[33,1],[30,1],[24,1]],'def',[[30,1]],'routines',[[33,2]],'narzou',[[24,1]],'take',[[45,1],[49,1],[51,1],[80,1],[37,1]],'cases',[[1,1],[31,1],[0,2],[30,1],[28,1],[44,3],[37,1],[59,1],[49,1],[51,2],[70,1],[48,1],[75,1],[33,5],[58,1]],'seen',[[19,1],[68,1]],'primary',[[49,12],[51,5],[54,5],[19,1],[50,2],[44,1],[30,1],[70,2],[72,1],[37,2]],'produce',[[63,1],[54,1],[2,1],[64,1]],'general',[[0,1],[75,1],[25,1],[37,1]],'hookdlls',[[33,1]],'installation',[[0,1]],'zbuffer',[[56,2],[54,1],[89,1]],'randomly',[[57,1],[62,1]],'corresponds',[[48,1],[11,1],[20,1]],'bitmaps',[[57,1]],'embedded',[[73,1],[84,1]],'email',[[0,1]],'inside',[[51,1]],'consider',[[91,1],[11,1],[68,1]],'resembles',[[32,1]],'values',[[9,1],[54,2],[70,1],[76,2],[30,3],[80,3],[87,1],[40,1],[39,1]],'last',[[9,2],[15,1],[48,1],[75,2],[30,1],[79,1]],'multi',[[30,1],[37,1]],'polls',[[44,1]],'discrepancy',[[54,1]],'subtopic',[[18,1]],'usable',[[66,1]],'systems',[[75,1],[51,1],[0,1]],'heavily',[[89,1]],'robin',[[51,1],[90,2]],'processmessage',[[72,1]],'priority',[[63,1],[15,1],[75,2]],'alters',[[54,1],[0,1]],'starting',[[1,1],[38,1],[40,1],[37,1]],'respectful',[[49,1]],'red',[[2,1]],'nowinposchanges',[[45,1]],'reason',[[75,1],[1,1],[25,1],[29,1],[0,1]],'whatever',[[40,1]],'doom',[[33,1]],'minimize',[[12,1],[14,1]],'dumped',[[57,1]],'tog',[[11,1]],'setdisplaymode',[[51,1]],'try',[[58,1],[84,1],[49,1],[1,2],[29,1],[51,1],[0,1],[91,1],[11,1],[37,1]],'particularly',[[49,1],[54,1]],'launcher',[[28,1]],'easily',[[45,1],[54,1],[64,1],[0,1]],'palettized',[[54,1],[75,1]],'referred',[[30,1]],'borrowed',[[30,1]],'strength',[[0,1]],'support',[[79,1],[54,1],[0,3]],'activateapp',[[37,2]],'seconds',[[45,2]],'neutralize',[[75,1]],'select',[[30,2]],'possibly',[[75,1],[37,1]],'handlealtf4',[[46,1]],'coordinates',[[73,2],[70,2],[19,1],[30,8],[44,5],[45,3],[85,1],[91,1]],'renderers',[[70,1]],'forcing',[[73,1],[51,1]],'loops',[[75,1]],'restoring',[[2,1],[9,1]],'term',[[0,1]],'tab',[[81,1],[75,2],[80,1],[84,1]],'dinput',[[43,1]],'potential',[[9,1]],'commander',[[54,1]],'resolve',[[88,1]],'visible',[[84,1],[26,1],[71,1],[11,1],[37,1]],'accurate',[[51,1],[62,1]],'entering',[[31,1]],'speeds',[[11,1]],'funkyfr3sh',[[24,1]],'glbindtexture',[[71,1]],'good',[[0,1]],'iconized',[[2,1],[92,1]],'hidehwcursor',[[42,1]],'outside',[[0,1],[30,1],[44,4]],'lets',[[17,1],[54,1]],'scaling',[[50,1]],'attribute',[[51,1]],'boundaries',[[57,1]],'sizy',[[85,1]],'program',[[85,1],[87,1],[1,10],[19,1],[0,5],[77,1],[56,1],[84,1],[27,1],[9,2],[14,3],[15,1],[29,3],[2,6],[24,1],[4,1],[54,5],[80,1],[32,6],[91,3],[46,2],[30,2],[28,4],[31,3],[44,3],[45,3],[52,1],[62,3],[68,2],[64,3],[5,2],[37,4],[63,3],[26,4],[81,1],[25,7],[70,4],[43,6],[92,1],[34,3],[72,1],[75,10],[3,1],[33,6],[11,6],[58,1]],'table',[[68,2]],'quarter',[[62,1]],'threaded',[[0,1]],'these',[[87,1],[1,1],[30,1],[0,5],[31,1],[45,2],[12,1],[64,1],[39,3],[78,1],[9,2],[49,1],[51,1],[54,1],[2,1],[60,1],[70,2],[34,1],[48,1],[75,1],[80,3],[57,1]],'enablehotkeys',[[46,1]],'nopaletteupdate',[[51,1]],'ignores',[[31,1]],'finds',[[73,1],[29,1],[57,1],[2,1]],'descriptive',[[28,1]],'look',[[79,1],[29,1]],'combined',[[75,1]],'old',[[54,3],[60,1],[0,5],[44,1],[43,1],[75,5],[68,1],[91,1],[79,1],[11,1],[64,2]],'interfere',[[43,1]],'executables',[[33,2],[68,1]],'some',[[1,2],[0,6],[56,3],[39,1],[59,1],[9,1],[29,1],[49,1],[51,4],[54,10],[60,1],[71,1],[82,1],[48,1],[32,4],[91,2],[40,1],[79,3],[46,1],[38,1],[31,2],[28,2],[44,7],[45,4],[81,1],[68,2],[64,1],[37,6],[17,1],[78,1],[22,1],[43,2],[34,1],[75,6],[33,3],[11,1],[58,1]],'cliptoggle',[[87,1],[91,1]],'colored',[[0,1]],'normalizeperfcount',[[64,1]],'sites',[[0,1]],'bilspelet',[[51,1]],'noddexclusivemode',[[54,1]],'hook',[[1,1],[19,1],[31,2],[44,1],[92,1],[68,1],[35,3],[37,1],[78,2],[26,1],[29,1],[71,3],[2,2],[43,2],[4,3],[34,6],[48,3],[32,2],[3,2],[33,6],[72,1]],'blt',[[51,1]],'parameter',[[31,1],[1,1]],'clumsy',[[0,2]],'built',[[1,2],[84,1],[0,1]],'comes',[[1,1],[56,1],[2,1],[82,1]],'colors',[[49,1],[21,1],[54,1],[50,1],[39,4]],'unique',[[33,1]],'opengl',[[49,1],[48,1],[71,11],[60,1],[0,1]],'ends',[[9,1]],'complex',[[32,1],[1,1]],'exactly',[[29,1]],'emulates',[[54,1],[43,1],[44,1]],'forceclipper',[[51,1]],'16bit',[[56,1]],'erase',[[66,1]],'modify',[[5,1],[48,1],[25,3],[27,1]],'exe',[[34,1],[1,1],[67,1],[0,1]],'iii',[[33,1]],'imposed',[[75,1]],'override',[[76,1],[79,1],[80,1]],'maximumres',[[40,1]],'toggling',[[11,1],[91,1]],'fine',[[64,1],[20,1]],'she',[[24,1]],'flipemulation',[[51,1]],'normalizes',[[64,1]],'fill',[[54,1],[11,1],[30,2]],'transformation',[[49,1]],'version',[[51,1],[1,1],[54,5],[19,3],[24,1],[28,1],[77,2],[48,3],[75,1],[92,1],[33,1]],'d3d',[[56,1],[58,4]],'consistent',[[25,1]],'decrement',[[54,1]],'suppressrelease',[[51,1],[37,1]],'expressed',[[62,1]],'noperfcounter',[[75,1]],'except',[[79,1],[30,1]],'control',[[0,1],[91,1],[64,3],[11,1]],'technique',[[48,2],[32,2],[33,3],[64,1]],'missing',[[76,2],[9,1],[84,1]],'surfaces',[[52,1],[49,1],[51,5],[54,4]],'method',[[51,3],[32,1],[54,2],[33,2],[60,2]],'disablemaxwinmode',[[75,1]],'rights',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,2],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'exit',[[91,1],[46,1],[3,1],[11,1],[39,1]],'saveload',[[29,1]],'causes',[[78,1],[54,1],[44,1],[45,1],[77,1],[75,2],[92,1],[84,1]],'calculations',[[45,1]],'characteristic',[[49,1]],'game',[[1,3],[0,12],[39,2],[9,1],[29,2],[49,2],[51,9],[54,5],[48,1],[91,4],[79,1],[57,1],[46,1],[38,2],[44,4],[45,1],[90,1],[13,2],[37,5],[63,1],[89,1],[43,3],[72,1],[75,2],[3,3],[33,5],[11,7]],'upperleft',[[30,1]],'assume',[[64,1]],'initial',[[64,2],[38,1],[30,6],[2,1],[85,3],[40,2],[33,1],[5,1]],'direct3d',[[89,2],[55,1],[70,1],[60,4],[0,1],[68,2],[56,1],[58,1]],'tons',[[11,1],[91,1]],'once',[[21,1],[1,1],[26,1],[19,1],[43,1],[0,1],[20,1],[3,1],[33,1]],'recoverscreenmode',[[37,1]],'malfunctions',[[45,1]],'copes',[[54,1]],'flip',[[59,1],[51,5],[90,1]],'clipping',[[51,3],[87,1],[70,1],[91,1],[11,1],[44,4]],'filenames',[[57,2]],'storing',[[46,1]],'holds',[[82,1]],'made',[[49,1],[52,1],[70,1],[33,2],[0,1]],'uncommon',[[45,1],[68,1]],'restart',[[29,1]],'plan',[[57,1]],'flipex',[[59,1]],'stretches',[[73,1],[64,1]],'changes',[[49,1],[51,1],[70,1],[80,1],[30,1],[0,3],[34,1],[39,1]],'outcursortrace',[[68,1]],'pretending',[[0,1]],'inspect',[[20,1]],'refcount',[[54,2]],'colordepth',[[19,1]],'minimized',[[14,1]],'copyright',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'nonresponsive',[[72,1]],'cornes',[[62,1]],'effect',[[59,2],[51,1],[46,1],[54,1],[71,1],[30,1],[60,1],[62,1],[80,1],[48,1],[75,2]],'interpolates',[[54,1]],'fullscreen',[[19,1],[30,6],[0,6],[44,1],[45,2],[68,1],[56,1],[39,2],[37,4],[49,1],[29,2],[51,1],[54,2],[43,2],[70,3],[85,1],[75,1],[11,3]],'blackwhite',[[54,1]],'life',[[33,1]],'10%',[[64,1]],'fixparentwin',[[37,1]],'web',[[24,1]],'down”',[[68,1]],'255',[[39,1]],'completely',[[32,1]],'informational',[[18,1]],'through',[[73,1],[9,1],[49,1],[70,2],[31,1],[44,1],[12,1],[11,1]],'kageyu',[[24,1]],'locksyscolors',[[39,1]],'suppressclipping',[[51,1]],'influences',[[49,1]],'fixpitch',[[54,1]],'suppress',[[51,3],[54,1],[70,2],[43,1],[34,1],[75,2],[56,2],[37,1]],'scale',[[70,2],[50,1]],'optimizations',[[49,1]],'fixglobalunlock',[[75,1]],'track',[[48,1],[54,1]],'legacy',[[75,2],[0,1]],'lost',[[45,1],[43,1],[0,1]],'are',[[73,3],[87,1],[1,2],[0,7],[56,4],[84,3],[39,1],[9,1],[49,6],[51,1],[54,3],[82,1],[48,3],[57,2],[46,1],[30,7],[44,5],[45,2],[12,1],[20,1],[52,1],[68,2],[64,3],[17,1],[63,1],[76,4],[43,2],[72,1],[75,4],[85,1],[33,2],[11,1]],'releasing',[[30,1]],'others',[[44,1]],'getsystemtime',[[64,1]],'fillrect',[[70,3]],'greatly',[[44,1]],'parallel',[[0,3]],'picks',[[75,1]],'notes',[[81,3]],'printscreen',[[43,1]],'leaving',[[4,1],[11,1],[54,1]],'filename',[[92,2],[66,1],[71,1],[28,1]],'proxy',[[24,2]],'colorfix',[[75,1]],'holding',[[12,1]],'centered',[[30,3]],'aeroboost',[[52,1]],'load',[[92,1],[84,3],[29,1]],'resources',[[0,1],[75,2],[84,2],[44,2]],'skip',[[45,2],[34,1],[43,1],[62,2]],'gdimode',[[49,1]],'results',[[54,2]],'hookchildwin',[[33,1]],'forcewinresize',[[37,1]],'directdraw8',[[56,1]],'experiencing',[[64,1]],'outdxwintrace',[[68,1]],'hogging',[[44,1]],'local',[[2,1]],'enough',[[51,1],[91,1],[33,3],[11,1]],'limits',[[10,1],[64,1]],'surfacebuffer',[[49,1]],'flow',[[20,1],[64,3],[0,2]],'gdi',[[49,3],[51,1],[70,12],[50,2],[44,2],[11,2]],'prevents',[[39,1],[54,1],[37,3]],'skips',[[73,1],[62,1]],'incredibly',[[0,1]],'detect',[[77,1],[48,1],[32,1],[44,1]],'queue',[[45,7],[51,2]],'replaced',[[57,1],[54,1]],'shims',[[18,1],[23,3]],'zbufferclean',[[56,1]],'emulatebuffer',[[49,2]],'extend',[[34,2],[0,1]],'run',[[1,5],[30,1],[0,9],[28,2],[31,1],[13,1],[68,1],[64,1],[39,2],[84,1],[54,1],[29,4],[25,1],[2,1],[75,2],[32,1],[3,1],[33,7],[40,1]],'interface',[[1,2],[19,1],[31,1],[0,1],[9,1],[15,1],[29,1],[49,1],[2,4],[43,1],[54,1],[32,3],[33,1]],'hood',[[51,1],[90,2]],'pure',[[70,1]],'cinematics',[[46,1]],'build',[[84,1]],'three',[[33,1],[43,1]],'random',[[34,1]],'over',[[30,2],[0,1]],'aqrit',[[24,1]],'aware',[[70,1],[11,1]],'relevant',[[13,1]],'distributed',[[78,1]],'mirra',[[54,1]],'fact',[[51,1],[0,1]],'definition',[[1,1]],'unnotify',[[75,1],[29,1]],'simulating',[[64,1],[75,2]],'accepts',[[92,1]],'interactions',[[70,1],[75,1]],'attachable',[[54,2]],'depending',[[48,1],[19,1],[30,1],[56,1]],'non',[[33,1],[43,2],[54,1]],'patching',[[33,3],[24,1]],'minimizes',[[9,1],[14,1]],'playability',[[44,1]],'diablotweak',[[75,1]],'clone',[[25,1]],'habit',[[44,1]],'description',[[1,1]],'immediate',[[80,1]],'patient',[[0,1]],'anywhere',[[0,1]],'compressed',[[54,1],[1,1]],'advancing',[[11,1]],'grow',[[68,1]],'duplicate',[[25,1]],'sleepwalker',[[37,1]],'resources_xyz',[[84,1]],'viewport',[[60,1]],'environment',[[0,4],[49,1],[52,1],[70,1],[28,1]],'sharedkeyboard',[[43,1]],'“force',[[91,1]],'somewhere',[[0,1]],'solutions',[[1,1]],'much',[[54,1],[0,1]],'erasing',[[13,1]],'selecting',[[25,1],[30,1]],'false',[[84,3]],'tells',[[9,1],[29,1],[33,2],[38,1],[62,1]],'performance',[[59,1],[54,2],[75,4],[64,3],[0,1]],'properties',[[77,1]],'cdrom',[[79,7]],'hurt',[[29,1]],'initially',[[92,1]],'please',[[0,1]],'embeds',[[64,1]],'poor',[[54,1]],'hacker',[[33,1]],'critical',[[51,1]],'resources_',[[84,1],[92,1]],'been',[[30,1],[0,1]],'producing',[[56,2],[62,1]],'mode',[[50,1],[56,2],[84,3],[39,1],[59,1],[9,2],[29,2],[49,9],[51,2],[54,10],[60,2],[48,2],[32,4],[79,1],[38,3],[30,3],[44,1],[13,3],[52,5],[68,1],[37,3],[70,3],[43,1],[85,1],[75,1],[11,11]],'injectsuspended',[[32,1]],'gui',[[85,2],[9,1],[84,1],[82,1]],'per',[[17,1],[21,1],[20,1],[19,2],[62,2]],'welcome',[[24,1]],'pronounced',[[54,1]],'uncompressed',[[54,3]],'null',[[54,1]],'after',[[5,1],[32,1],[3,1],[79,1],[2,2],[0,2]],'were',[[0,1],[75,2],[60,2],[37,1]],'clicking',[[26,2],[1,1],[25,2],[2,1],[0,1],[20,1]],'hidetaskbar',[[37,1]],'win7',[[45,1],[75,1]],'ansi',[[33,2]],'shortage',[[51,1]],'should',[[64,1],[54,2],[43,2],[0,1],[44,1],[45,3],[48,2],[75,3],[91,1],[57,1],[11,1],[37,2]],'white',[[60,1],[1,1]],'updating',[[37,1],[51,1],[2,1],[39,1]],'brings',[[49,1],[51,1]],'command',[[73,1],[1,1],[19,1],[28,1],[13,1],[20,1],[92,3],[84,1],[21,1],[26,2],[25,3],[91,2],[11,2]],'overlay',[[59,1],[54,5],[62,2],[64,1]],'terminateonclose',[[29,1]],'initializes',[[37,1]],'detour',[[33,1]],'improves',[[44,1]],'vast',[[33,1]],'generally',[[45,1],[34,1],[48,1],[54,1]],'continue',[[1,1],[75,1],[0,1]],'launching',[[28,1]],'windowize',[[30,1],[29,1]],'patch',[[33,1]],'usage',[[63,3],[54,1],[57,1]],'multitasking',[[75,1]],'define',[[25,1],[5,1]],'regwin32',[[80,1]],'discard',[[59,1]],'extra',[[54,1],[49,1],[0,1]],'getmessage',[[45,1],[68,1]],'find',[[88,1],[48,1],[0,1]],'actions',[[46,1],[32,1]],'occur',[[67,1]],'turn',[[1,1],[0,1]],'search',[[76,2],[33,1],[31,1],[84,1]],'later',[[0,2]],'limit',[[54,1],[75,1],[40,1],[62,2]],'minimalcaps',[[54,1]],'limited',[[33,1],[62,2],[75,1]],'“adopt”',[[0,1]],'show',[[26,2],[1,2],[29,3],[87,1],[60,2],[62,2],[45,1],[67,1],[42,1],[16,1],[3,2],[64,1]],'odd',[[54,2],[32,1]],'stretchtimers',[[64,1]],'mapping',[[87,1]],'principles',[[0,2]],'bad',[[44,1],[75,1],[32,1]],'core',[[75,6]],'pick',[[30,1]],'graphics',[[54,1],[48,2],[57,1],[60,1],[37,1]],'winmm',[[73,1],[64,1]],'depends',[[54,1]],'independently',[[32,1]],'likely',[[3,1],[75,1],[84,1]],'corner',[[30,1],[64,1],[62,1],[11,2]],'cossacks',[[51,1]],'rgb555',[[54,1]],'exclusive',[[19,1],[35,1],[54,1]],'whether',[[56,1],[25,1],[19,1],[2,1],[0,1]],'direct3d10',[[48,1]],'vertical',[[85,1],[51,1]],'complicated',[[70,1],[79,1]],'forceswapeffect',[[59,1]],'anyone',[[84,1],[0,1]],'able',[[54,1],[2,1],[11,1]],'capability',[[54,5],[51,2],[56,1],[0,1]],'computer',[[11,1],[1,1]],'performs',[[54,1],[29,1],[68,1],[44,1]],'hybrid',[[70,1],[49,1]],'versa',[[79,1]],'all',[[87,1],[50,1],[0,8],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,2],[47,1],[80,1],[2,3],[24,1],[82,2],[48,2],[32,2],[91,1],[57,4],[79,2],[46,2],[38,1],[28,1],[44,1],[81,1],[12,1],[13,2],[20,1],[36,1],[64,1],[5,1],[37,2],[63,2],[21,1],[22,1],[41,1],[68,4],[43,3],[69,1],[83,1],[86,1],[89,1],[90,1],[92,3],[33,6],[11,3],[73,1],[88,1],[1,2],[19,1],[67,1],[74,1],[16,1],[84,2],[39,1],[59,1],[9,1],[14,1],[23,1],[49,2],[51,1],[54,4],[4,1],[60,2],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,4],[31,1],[45,5],[62,1],[42,1],[52,2],[8,1],[17,1],[78,1],[26,1],[25,2],[70,2],[6,1],[76,1],[34,1],[72,2],[75,2],[3,4],[85,1],[58,2]],'displays',[[21,1],[23,1],[22,1],[24,1]],'delete',[[9,1],[25,1],[7,1],[5,1]],'meaning',[[37,1],[1,1]],'solaris',[[37,1]],'having',[[91,1],[1,1],[79,1],[11,2],[0,1]],'trigger',[[46,1]],'tweaks',[[54,1],[89,2],[75,1],[56,1],[79,1],[58,1]],'privileges',[[29,1]],'maximize',[[37,1]],'styles',[[75,1]],'bubble',[[81,1]],'near',[[54,1]],'visibility',[[42,2]],'constraint',[[45,1]],'depths',[[17,1],[56,1]],'flash',[[1,1]],'insist',[[37,1]],'nativeres',[[40,1]],'minimum',[[63,1],[85,2],[15,1],[10,3],[86,2]],'technical',[[11,1],[91,1]],'camera',[[11,1]],'them',[[88,1],[0,1],[44,1],[45,1],[92,1],[39,1],[37,1],[78,1],[21,1],[49,1],[43,1],[2,1],[48,2],[75,1],[57,1]],'produced',[[24,1]],'succeed',[[48,1]],'apis',[[68,1],[71,1],[64,2],[0,1]],'instruction',[[64,1]],'apply',[[33,1],[57,1],[78,1]],'metrics',[[75,3]],'disable',[[9,1],[29,1],[75,6],[60,2],[39,1]],'create',[[34,1],[51,1],[25,1],[19,1],[57,1],[0,1]],'efforts',[[0,1]],'hints',[[29,1],[24,1],[1,2]],'cleartexturefourcc',[[54,1]],'purposes',[[33,1],[75,1],[68,1]],'universal',[[33,1]],'darker',[[39,1]],'factors',[[20,1]],'hides',[[54,1],[16,1]],'change',[[39,1],[37,2],[54,1],[38,1],[13,1],[48,1],[75,1],[64,2],[5,1]],'directly',[[75,1],[33,3],[64,1],[28,1]],'suppressoverlay',[[54,1]],'mostly',[[51,1]],'via',[[44,1],[2,1],[1,2]],'failure',[[43,1]],'operating',[[4,1],[45,1],[13,1],[26,1],[0,1]],'recover',[[13,1],[37,1]],'repeatedly',[[37,1]],'sending',[[1,1]],'status',[[44,1],[19,3],[2,1],[18,1]],'administrator',[[84,1],[9,1],[29,2]],'attempts',[[75,1],[0,1]],'dlls',[[78,3],[92,1],[33,3],[31,1]],'iat',[[33,5]],'recurse',[[33,1]],'successful',[[43,1]],'enumadaptermodes',[[56,1]],'switches',[[84,1],[11,1],[51,1]],'complete',[[82,1]],'notextures',[[60,1]],'localization',[[84,1]],'flags',[[63,1],[9,1],[1,1],[54,3],[70,1],[30,1],[43,2],[13,1],[33,1],[57,1]],'operates',[[63,1]],'remains',[[11,1]],'optimizes',[[52,1],[29,1]],'western',[[39,1]],'getcaps',[[54,1]],'gdiemulatedc',[[70,1]],'does',[[51,2],[1,1],[38,1],[0,4],[45,1],[34,2],[32,1],[57,1],[64,1],[58,1]],'tricks',[[82,1],[0,2]],'interferences',[[51,1]],'resource',[[92,1],[51,1],[84,1]],'best',[[54,1],[0,2]],'ddscl_exclusive',[[54,3]],'coordinated',[[71,1]],'get',[[26,1],[1,1],[51,1],[62,1],[44,1],[45,4],[72,1],[75,1],[91,1],[56,1],[11,1]],'freelibrary',[[75,2]],'enabled',[[11,1],[51,1],[91,1],[70,1],[31,1],[2,2]],'gear',[[75,1]],'shaped',[[44,1]],'handler',[[75,1]],'video',[[73,1],[38,2],[0,1],[44,1],[13,1],[36,1],[56,2],[51,2],[54,7],[70,1],[2,1],[32,1],[40,1],[11,1]],'outddrawtrace',[[68,1]],'decelerated',[[64,1]],'0x4000000',[[75,1]],'hidedesktop',[[30,1]],'opened',[[0,1]],'reasonable',[[51,1]],'share',[[70,1],[0,1]],'interfaces',[[49,2]],'cannot',[[33,1],[2,1]],'distracting',[[30,1]],'locked',[[11,1],[49,1]],'presence',[[43,1]],'checking',[[45,1],[32,1],[29,1],[33,2],[44,1]],'ryan',[[24,1]],'sourceforge',[[1,1],[0,2]],'stretched',[[11,1],[64,1]],'slider',[[64,2],[20,5],[11,2],[18,1]],'solid',[[57,1]],'considered',[[30,1]],'searches',[[64,1]],'remaining',[[30,1],[37,1]],'schemes',[[79,1]],'widths',[[10,1]],'message',[[51,2],[29,2],[46,2],[2,1],[44,3],[45,7],[67,2],[37,5]],'types',[[43,1]],'dwzbufferbitdepths',[[54,2]],'prompts',[[25,1]],'display',[[27,1],[22,1],[51,2],[62,1],[91,1],[20,1],[11,1],[37,3]],'peekallmessages',[[45,2]]];window.bSearchDataLoaded=true; \ No newline at end of file +var aTl=[['Introduction.html','Introduction'],['Gettingstarted.html','Getting%20started'],['TheInterface.html','The%20Interface'],['File.html','File'],['Hook.html','Hook'],['Edit.html','Edit'],['Move.html','Move'],['Log1.html','Log'],['Globalsettings.html','Global%20settings'],['Flags.html','Flags'],['Texturelimits.html','Texture%20limits'],['FunctionKeys.html','Function%20Keys'],['HotKeys.html','Hot%20Keys'],['Tools.html','Tools'],['Window1.html','Window'],['Process.html','Process'],['Desktoptaskbar.html','Desktop%20taskbar'],['Desktopcolordepth.html','Desktop%20color%20depth'],['View.html','View'],['Status.html','Status'],['TimeSlider.html','Time%20Slider'],['Palette1.html','Palette'],['Desktop.html','Desktop'],['Shims.html','Shims'],['Help.html','Help'],['ProgramList.html','Program%20List'],['DxWndintheSystemTray.html','DxWnd%20in%20the%20System%20Tray'],['Theconfigurationpanel.html','The%20configuration%20panel'],['Main.html','Main'],['Generic.html','Generic'],['Position.html','Position'],['Hook1.html','Hook'],['Injectionmode.html','Injection%20mode'],['Hookflags.html','Hook%20flags'],['Sonprocesshook.html','Son%20process%20hook'],['Additionallibrarieshook.html','Additional%20libraries%20hook'],['Video.html','Video'],['Windowshandling.html','Windows%20handling'],['Initialvirtualcolorsetting.html','Initial%20virtual%20color%20setting'],['Colormanagement.html','Color%20management'],['Windowsizeposition.html','Window%20size%20%26amp%3B%20position'],['Screenresolution.html','Screen%20resolution'],['Input.html','Input'],['Cursorvisibility.html','Cursor%20visibility'],['DirectInput.html','DirectInput'],['Cursorhandling.html','Cursor%20handling'],['Messagehandling.html','Message%20handling'],['Keyboardhandling.html','Keyboard%20handling'],['DirectX.html','DirectX'],['DirectXVersionHook.html','DirectX%20Version%20Hook'],['Emulation.html','Emulation'],['Filtering.html','Filtering'],['DirectDrawSurfacehandling.html','DirectDraw%20Surface%20handling'],['AEROhandling.html','AERO%20handling'],['DirectX2.html','DirectX%282%29'],['Ddrawtweaks.html','Ddraw%20tweaks'],['Direct3D.html','Direct3D'],['Direct3Dtweaks.html','Direct3D%20tweaks'],['Texturehandling.html','Texture%20handling'],['Direct3Dwindowtweaks.html','Direct3D%20window%20tweaks'],['SwapEffect.html','Swap%20Effect'],['3Deffects1.html','3D%20effects'],['Timing.html','Timing'],['FrameperSecond.html','Frame%20per%20Second'],['Systemspeed.html','System%20speed'],['TimeStretching.html','Time%20Stretching'],['Logs.html','Logs'],['dxwndlogs.html','dxwnd%20logs'],['logoptions.html','log%20options'],['loggedinfo.html','logged%20info'],['Libs.html','Libs'],['GDI.html','GDI'],['OpenGL.html','OpenGL'],['Smack.html','Smack'],['MMmultimedia.html','MM%20%28multimedia%29'],['Compatibility.html','Compatibility'],['Tweaks.html','Tweaks'],['Registry.html','Registry'],['FakeVersion.html','Fake%20Version'],['GOG.html','GOG'],['IOtweaks.html','I/O%20tweaks'],['Registry1.html','Registry'],['Notes.html','Notes'],['Configurationfile.html','Configuration%20file'],['Window.html','Window'],['Language.html','Language'],['Position1.html','Position'],['Texture.html','Texture'],['Keymapping.html','Keymapping'],['Examples.html','Examples'],['SnowBoardRacer.html','SnowBoard%3A%20Racer'],['RobinHoodTheLegendofSherwood.html','Robin%20Hood%20%2D%20The%20Legend%20of%20Sherwood'],['Specialkeys.html','Special%20keys'],['Commandlinearguments.html','Command%20line%20arguments']];var oWl=['hotpatch',[[33,1]],'content',[[80,1],[55,1],[71,1],[24,1],[58,1]],'otherwise',[[11,1],[67,1]],'examples',[[52,1],[89,2],[55,2],[57,1]],'beginning',[[32,1],[29,1],[33,1],[68,2]],'capabilities',[[55,2]],'exclamation',[[82,1]],'queues',[[69,1]],'matching',[[58,1]],'become',[[80,1]],'fortunately',[[31,1]],'integer',[[76,1]],'altf4',[[88,1],[92,1]],'surviving',[[0,1]],'few',[[83,1],[1,1],[3,1],[93,1],[2,1],[0,2]],'rare',[[55,1],[76,1],[31,1],[50,1]],'row',[[2,1],[11,1]],'itself',[[37,1],[49,1],[29,2],[2,1],[28,1]],'meanwhile',[[0,1]],'elements',[[28,1],[63,1],[55,1],[39,1]],'configure',[[84,1],[29,1]],'application',[[46,3],[55,1],[0,5],[52,1],[16,2],[92,2],[69,1],[37,1],[5,3],[29,1],[41,1],[2,1],[72,1],[3,2],[40,1],[11,1],[7,2]],'idea',[[76,1],[30,1]],'buttons',[[45,1]],'attempting',[[76,1],[13,1]],'speed',[[11,2],[88,2],[76,2],[0,1],[92,1],[20,1],[64,1],[65,5]],'article',[[23,1]],'terminating',[[2,1]],'recovered',[[49,1]],'ahlgrens',[[52,1]],'channel',[[52,2]],'enumerate',[[57,1]],'let',[[5,1],[76,1],[0,3]],'preventmaximize',[[37,1]],'increments',[[65,1]],'hookglut32',[[72,1]],'key',[[88,1],[47,4],[76,2],[44,1],[12,1],[92,4],[11,2]],'blocks',[[76,1]],'limitresources',[[76,1]],'combination',[[76,1]],'stretching',[[49,1],[29,1],[46,1],[53,1],[50,1],[71,2],[88,1],[92,3],[20,2],[65,3]],'shows',[[19,2],[44,1],[90,1],[16,1],[20,1],[21,1],[22,1],[23,1],[26,1],[2,2],[24,1],[91,1],[65,1]],'when',[[73,1],[19,1],[0,3],[74,3],[39,4],[9,2],[29,4],[51,1],[2,3],[4,1],[32,1],[57,1],[65,7],[55,10],[30,3],[28,1],[31,1],[44,6],[45,4],[52,4],[92,5],[86,1],[69,1],[37,3],[63,3],[25,1],[76,4],[85,2],[33,1],[11,2]],'fake',[[78,2],[11,1],[30,5]],'detailed',[[18,1],[69,1]],'glpixelzoom',[[72,2]],'whoever',[[24,1],[0,1]],'config',[[93,1],[37,1]],'downloaded',[[0,1]],'reference',[[55,2],[30,1]],'works',[[9,1],[49,1],[55,1],[31,1],[50,1],[61,1],[13,1],[32,2],[33,1],[57,1]],'prompting',[[29,1]],'never',[[76,2],[0,2]],'from',[[73,1],[88,1],[1,1],[50,1],[0,3],[61,1],[39,3],[59,1],[9,1],[29,1],[80,3],[2,3],[60,1],[4,1],[32,3],[40,5],[65,1],[46,5],[55,3],[53,1],[30,2],[31,1],[45,1],[81,2],[13,1],[52,3],[68,1],[93,1],[37,2],[83,1],[25,1],[41,3],[76,3],[72,1],[3,1],[33,3]],'virtual',[[51,1],[55,3],[38,1],[50,2],[80,2],[45,1],[81,3],[52,2],[74,1]],'lockreservedpalette',[[39,1]],'filling',[[1,1]],'bypassmci',[[74,1]],'incorrect',[[55,2],[57,2]],'shutting',[[32,1]],'suppresses',[[80,1],[46,1],[55,2],[57,1],[71,1],[39,1]],'specification',[[55,1],[85,5]],'cleans',[[61,1]],'module',[[76,1],[31,1]],'approximately',[[20,2]],'crashing',[[32,1]],'declaring',[[38,3]],'situation',[[33,2],[46,1]],'videogame',[[0,1]],'block',[[76,1],[32,1]],'direct3d9',[[49,1]],'timestamp',[[68,6]],'rid',[[15,1]],'assembly',[[33,1],[65,3]],'operate',[[55,1],[2,1]],'calculated',[[19,1]],'hookgdi',[[71,1]],'fifth',[[76,1]],'fixtextout',[[71,1]],'enable',[[45,1],[47,1],[9,1]],'scrolling',[[45,1],[52,2]],'api',[[39,3],[65,1],[46,1],[76,3],[71,2],[45,2],[72,1],[57,1],[33,4],[35,1]],'series',[[45,1],[37,1]],'each',[[65,2],[46,1],[55,1],[30,1],[28,1],[67,1],[52,1],[68,3],[27,1],[15,1],[49,1],[51,1],[80,1],[2,1],[34,2],[33,2],[18,1],[58,1]],'differently',[[25,1]],'operation',[[51,1],[76,2],[71,1],[80,1],[52,4],[32,1],[3,1],[57,1],[64,1]],'task',[[46,1],[19,3],[31,1],[0,1],[28,2],[92,2],[29,2],[25,2],[2,1],[4,1],[32,2],[11,2]],'playable',[[55,1]],'sound',[[76,1]],'forget',[[0,1]],'necrodrome',[[45,1]],'ordering',[[57,2]],'set',[[1,1],[19,1],[50,2],[0,1],[77,4],[29,1],[47,1],[80,1],[10,1],[65,4],[55,5],[53,1],[30,4],[28,2],[31,2],[44,2],[45,3],[20,1],[52,4],[81,2],[64,2],[5,1],[17,1],[37,1],[92,2],[41,2],[76,7],[72,1],[85,2],[11,1]],'whenever',[[49,1],[55,1],[0,1],[44,1],[81,1],[74,1],[86,1],[65,1]],'overwrite',[[67,2]],'keys',[[88,3],[47,3],[0,1],[81,2],[12,2],[13,1],[92,2],[11,9]],'boolean',[[85,3]],'predefined',[[1,1]],'sys',[[39,1]],'pixels',[[51,1],[86,2],[0,1]],'246',[[39,1]],'found',[[33,1],[2,1],[0,2]],'disabledisablealttab',[[76,1]],'currently',[[26,1],[14,2],[25,1],[19,1],[2,1],[0,2],[71,2],[85,1],[3,1],[35,1],[37,1]],'wouldn',[[52,1]],'access',[[35,1],[65,1],[18,1],[44,2]],'dynamically',[[20,1]],'pity',[[0,1]],'injection',[[0,1],[34,2],[32,3],[76,1],[24,1],[2,1]],'100%',[[45,1],[76,1],[0,1]],'necessary',[[41,1],[33,1],[65,1]],'versions',[[85,1],[55,1],[33,1],[57,2],[44,1]],'wm_activateapp',[[37,1]],'nopixelformat',[[52,1]],'lighter',[[39,1]],'cpus',[[76,2]],'unsupported',[[76,3],[85,1]],'wm_windowposchanging',[[46,1]],'tweaked',[[55,1]],'nobanner',[[29,1]],'preventing',[[45,1],[72,1],[46,1],[39,1]],'clicks',[[46,1]],'pending',[[46,1]],'placed',[[45,2],[1,1],[30,1]],'acceleration',[[55,1],[76,1]],'regardless',[[0,2]],'retrieve',[[46,1]],'released',[[55,1],[52,1]],'singleprocaffinity',[[76,2]],'source',[[0,5]],'leave',[[49,1]],'definitions',[[47,1]],'print',[[11,1]],'wow32registry',[[77,1]],'saves',[[3,1],[11,1]],'closely',[[32,1]],'adjusts',[[78,1]],'greater',[[63,2],[32,1]],'read',[[81,1],[77,2],[52,2],[55,1]],'fourcc',[[55,3]],'lacks',[[57,1]],'setsyscolors',[[39,1]],'simple',[[2,1],[0,1]],'type',[[55,1],[80,3],[69,1],[44,1]],'blue',[[81,1]],'object',[[30,1]],'sizes',[[55,1],[57,1],[74,1]],'getting',[[15,1],[1,1]],'changing',[[37,2],[79,1],[32,1]],'reaction',[[46,1]],'romsteady',[[24,1]],'keeps',[[45,1],[46,1],[44,2]],'architectures',[[0,1]],'noted',[[63,1]],'stored',[[83,1],[86,1]],'invokes',[[61,1]],'even',[[55,1],[76,1],[44,3],[0,6],[81,1],[52,3],[85,1],[3,1],[92,1],[11,1]],'tweak',[[55,1],[76,2]],'well',[[49,1],[46,2],[29,1],[55,1],[76,1],[92,1],[32,1],[33,1],[11,1],[37,1]],'network',[[0,1]],'directsound',[[35,2]],'figures',[[63,1]],'serve',[[9,1]],'comments',[[82,1]],'clock',[[65,4]],'50%',[[65,1]],'unwanted',[[37,1],[32,1]],'tray',[[26,5],[93,3],[3,3],[19,1],[2,1]],'lockwinstyle',[[37,1]],'max',[[10,1],[41,1],[64,1],[76,1]],'zeta',[[57,2]],'possibility',[[92,1],[80,1],[11,1],[69,1]],'destroywindow',[[71,1]],'special',[[88,1],[92,2],[47,2],[11,7],[58,1]],'under',[[33,1]],'started',[[37,1],[9,1],[1,1],[2,1],[0,2]],'five',[[46,1]],'selected',[[64,1],[23,1],[25,3],[41,1],[6,4],[30,1],[60,1],[3,1],[7,2],[5,2]],'kind',[[24,1]],'including',[[34,1],[22,1],[59,1],[3,1]],'than',[[1,1],[55,3],[30,4],[28,1],[0,2],[44,1],[50,1],[64,1],[63,3],[41,1],[2,1],[57,1],[11,2]],'themselves',[[52,1],[15,1],[46,1]],'space',[[76,1],[33,1]],'behavior',[[58,1],[78,1],[30,1],[0,7],[4,1],[45,1],[85,1],[92,1],[93,1],[79,1],[37,1]],'restarts',[[29,1]],'sharing',[[0,1]],'2ms',[[64,1]],'enum16bitmodes',[[57,1]],'hooker',[[0,2]],'skipdevtypehid',[[44,1]],'invoking',[[53,1]],'detail',[[11,1],[92,1]],'attempt',[[37,1],[76,1],[0,2]],'big',[[76,1]],'background',[[30,2],[52,1]],'izer',[[0,1]],'apes',[[44,1]],'unchecked',[[47,1]],'writes',[[69,1],[9,1],[1,1]],'mix',[[71,1]],'showhwcursor',[[43,1]],'where',[[55,1],[67,1],[45,1],[52,1],[5,1],[37,1],[51,1],[71,1],[2,2],[3,1],[33,2],[11,1],[58,1]],'composition',[[57,1],[50,1]],'situations',[[52,1]],'quarterblt',[[63,1]],'encourage',[[0,1]],'address',[[76,1],[33,4],[52,1]],'viewfinder',[[45,1]],'expects',[[37,1]],'japanese',[[0,1]],'listening',[[44,1]],'automatically',[[34,3],[49,1],[29,1],[46,3],[93,1],[30,2]],'bilinearfilter',[[51,1]],'calculate',[[76,1]],'editing',[[83,1]],'won',[[2,2],[46,1]],'experience',[[30,1]],'editor',[[7,1],[58,1]],'quit',[[11,2],[92,2]],'launch',[[81,1],[82,1],[28,1]],'bilinear2xfilter',[[51,1]],'isn',[[33,1],[13,1],[52,1]],'1000th',[[64,1]],'pointing',[[25,1]],'directinput',[[44,10]],'fit',[[72,1],[51,1],[71,2],[50,1]],'posx',[[86,4]],'double',[[26,1],[1,2],[25,1],[51,1]],'machine',[[55,1],[0,1]],'bug',[[50,1]],'imported',[[2,1]],'classification',[[30,1]],'looping',[[45,1],[73,1]],'addrelativetime',[[68,1]],'now',[[76,1],[71,1],[50,1],[0,2]],'arguments',[[93,2],[28,1]],'short',[[69,1],[29,1]],'needed',[[25,1],[32,1]],'explicit',[[52,1],[74,1]],'final',[[53,1]],'exceptions',[[76,2],[83,1]],'techniques',[[0,1]],'closes',[[14,1]],'update',[[63,1],[59,1],[52,2],[1,1],[33,1]],'pressing',[[12,1]],'onward',[[46,1],[76,1],[0,2]],'tigerhawkt3',[[24,1]],'while',[[46,1],[55,1],[30,2],[0,5],[52,1],[16,2],[68,1],[37,1],[9,1],[3,2],[57,2],[33,1],[11,4]],'gameplay',[[11,1]],'alone',[[49,1]],'time',[[11,8],[88,3],[1,1],[0,9],[61,2],[92,4],[20,7],[86,1],[64,1],[69,1],[63,1],[49,1],[29,1],[76,1],[34,1],[18,1],[65,14]],'height',[[87,2],[41,2],[19,1],[30,6],[10,2],[86,3]],'managed',[[25,1],[50,1]],'malfunctioning',[[46,1]],'behaviour',[[33,1]],'extracting',[[58,1]],'involves',[[50,1]],'duration',[[68,1]],'such',[[88,1],[46,4],[30,1],[0,2],[44,1],[45,2],[52,2],[68,1],[39,1],[63,1],[37,2],[29,1],[76,2],[80,1],[82,1],[85,1],[32,1],[40,1],[65,1]],'synchronization',[[24,1]],'annoying',[[0,2]],'worms',[[37,1]],'lack',[[50,1]],'suppressime',[[76,1]],'side',[[76,1],[0,1]],'exported',[[3,1],[57,1]],'codec',[[55,1]],'render',[[59,1]],'intercepted',[[65,1],[69,1],[71,1],[19,1],[33,1],[40,1]],'impossible',[[46,2]],'unfortunately',[[55,1],[33,1],[0,1]],'written',[[37,1],[0,2]],'right',[[26,1],[25,1],[55,1],[2,1],[82,1],[45,2],[81,1],[32,1],[33,1],[37,1]],'selection',[[30,2]],'child',[[34,5],[59,1],[33,2],[82,1],[37,2]],'monitors',[[55,1],[37,1]],'way',[[63,1],[46,1],[55,1],[30,1],[0,5],[4,1],[85,1],[52,5]],'binplayer',[[34,1]],'moving',[[45,2],[59,1],[65,1]],'ads',[[47,1]],'easier',[[68,1],[58,2]],'reg',[[83,1],[77,2],[0,1]],'confirm',[[3,1],[29,1]],'uselastcore',[[76,1]],'measures',[[68,1]],'directx7',[[49,1]],'there',[[65,1],[1,1],[46,1],[0,5],[45,1],[61,1],[52,2],[83,1],[9,1],[41,1],[3,1],[33,2],[57,1],[58,1]],'creating',[[55,1],[52,1]],'beneath',[[29,1]],'disabled',[[41,1],[47,1],[0,1]],'offered',[[68,1]],'replace',[[55,1],[76,1],[58,1]],'settings',[[0,1],[81,1],[8,1],[5,4],[37,4],[39,1],[22,1],[29,1],[25,1],[83,1],[2,1],[43,1],[82,1],[84,1],[32,1],[11,1]],'further',[[57,1],[0,1]],'boxes',[[29,1],[1,1]],'far',[[52,1],[33,1],[82,1],[37,1]],'appearance',[[81,1],[82,1]],'tabbed',[[27,1]],'priorities',[[15,1]],'mandatory',[[76,1]],'increase',[[92,1],[88,1],[0,1]],'f12',[[88,1],[11,1],[12,1]],'properly',[[65,1],[49,1],[29,1],[46,1],[55,1],[76,2],[44,1],[72,1],[57,4],[37,2]],'forbid',[[76,1]],'focus',[[44,3]],'stays',[[3,1]],'ollydbg',[[24,1]],'handleexceptions',[[76,1]],'infinite',[[87,2]],'restored',[[3,1]],'opens',[[7,1],[5,3]],'loop',[[47,2],[73,2],[76,1]],'createdevice',[[60,1]],'back',[[14,1],[44,1],[0,1]],'doesn',[[59,1],[49,1],[55,1],[53,1],[76,2],[44,1],[52,3],[92,1],[93,1],[11,1],[64,1]],'quite',[[11,1],[69,2],[92,1],[71,1],[50,1],[2,1]],'caps',[[55,1],[29,1]],'box',[[46,1],[31,1],[29,1]],'section',[[77,2],[58,1]],'bypass',[[76,1],[79,1],[74,1]],'crucial',[[0,1]],'only',[[79,2],[1,2],[55,4],[30,4],[0,5],[44,2],[50,1],[52,4],[61,2],[64,1],[39,1],[37,2],[9,1],[29,3],[47,1],[71,1],[2,2],[76,1],[32,2],[40,2],[33,2],[11,2]],'alt',[[12,1],[88,3],[47,3],[76,2],[11,2],[92,1]],'blocking',[[33,1]],'harm',[[45,1]],'states',[[45,1]],'imperia',[[52,1]],'according',[[55,1],[76,1],[30,1],[64,1]],'requests',[[80,1]],'seemed',[[0,1]],'nowindowmove',[[59,1]],'occasionally',[[46,1]],'backs',[[52,1]],'ordinal',[[33,1]],'confirmonclose',[[29,1]],'depend',[[71,1],[65,1]],'800x600',[[30,1]],'heavy',[[76,1]],'swap',[[60,2]],'keeping',[[44,1]],'wireframe',[[61,3]],'displacement',[[45,1]],'modified',[[9,2]],'library',[[72,4],[24,1]],'regain',[[44,1]],'something',[[5,1],[0,1]],'suspend',[[64,1]],'higher',[[41,1],[11,1]],'same',[[46,1],[38,3],[50,2],[44,2],[0,3],[52,1],[86,3],[64,2],[78,1],[25,1],[71,1],[76,1],[34,2],[33,1]],'falling',[[0,1]],'obfuscation',[[33,1]],'threads',[[64,3]],'heights',[[10,1]],'reading',[[55,1]],'spot',[[68,1]],'chosen',[[78,2],[50,1],[30,1],[28,1],[12,1],[37,1]],'asian',[[0,1]],'unable',[[49,1],[32,1]],'compose',[[72,1]],'wow64registry',[[77,1]],'tasks',[[92,1],[11,2],[0,2]],'looks',[[85,1]],'320',[[86,1]],'was',[[46,1],[25,1],[55,3],[30,2],[24,1],[0,7],[45,1],[71,1],[80,1],[3,2],[33,1]],'manage',[[58,1],[52,1],[76,1],[57,1],[37,1]],'undesired',[[61,1]],'com',[[79,1],[49,1]],'galapagos',[[73,1]],'yellow',[[32,1]],'releases',[[57,1],[72,1],[28,1]],'messageproc',[[45,1],[46,1]],'probably',[[72,1],[30,1]],'tested',[[1,2]],'has',[[47,1],[19,1],[30,2],[0,3],[50,1],[34,1],[55,1],[76,2],[33,3],[7,2]],'region',[[45,1],[63,1],[92,1],[11,1]],'virtualpc',[[55,1]],'overheating',[[76,1]],'scrollable',[[68,1]],'shares',[[71,1]],'fpstoggle',[[88,1],[92,1]],'distorting',[[55,1]],'fixrefcounter',[[55,1]],'fast',[[11,1],[51,1]],'simulate',[[55,1]],'session',[[25,1],[55,1],[67,1]],'fully',[[76,1],[71,1]],'domain',[[52,1]],'received',[[46,1]],'again',[[44,1],[26,1],[92,1],[3,1],[11,1],[0,2]],'telling',[[49,1]],'code',[[88,1],[76,2],[24,3],[0,7],[2,1],[52,1],[33,1],[65,1]],'widescreen',[[30,1]],'outd3dtrace',[[69,1]],'windowed',[[46,2],[55,4],[30,1],[0,1],[45,1],[50,1],[52,3],[61,1],[69,1],[37,1],[29,1],[76,2],[71,4],[2,2],[11,2]],'measurement',[[76,1]],'wonderful',[[0,1]],'clipboard',[[11,1]],'involve',[[32,1]],'shortcut',[[5,1],[1,1],[2,1],[0,1]],'son',[[34,1]],'revert',[[39,1]],'supporthdmi',[[41,1]],'dxw',[[3,1]],'fixed',[[45,1],[32,1],[19,1],[40,1]],'yes',[[19,1]],'disablegammaramp',[[39,1]],'devices',[[80,5],[44,4]],'unexpected',[[46,1]],'videotosystemmem',[[52,1]],'power2width',[[55,1]],'device',[[71,3],[80,2],[44,2]],'mind',[[69,1],[2,1],[0,2]],'point',[[45,1],[32,1]],'moved',[[45,1],[63,1],[92,1]],'running',[[1,1],[55,2],[19,3],[0,3],[61,1],[52,1],[16,2],[64,1],[37,1],[26,2],[14,2],[29,2],[71,1],[2,1],[76,1],[4,2],[3,1],[33,1],[11,1],[57,2]],'getcursorpos',[[45,1]],'one',[[1,1],[46,1],[19,2],[31,1],[0,7],[55,1],[81,1],[52,1],[68,1],[37,2],[63,1],[25,2],[71,1],[6,2],[76,2],[80,1],[3,1],[33,3],[65,1]],'overlaps',[[45,1],[71,1]],'directx8',[[49,2]],'eliminate',[[55,1]],'avoids',[[50,1]],'wm_windowposchanged',[[46,1]],'freestyle',[[55,1]],'forcehookopengl',[[72,1]],'zbuffer0clean',[[57,2]],'fakeversion',[[78,1]],'propose',[[85,1],[9,1]],'corrected',[[2,1],[52,1]],'1980x1080',[[41,1]],'texel',[[58,1]],'archive',[[1,1]],'self',[[85,1],[9,1]],'bits',[[17,1],[57,1],[22,1]],'timeout',[[46,1]],'main',[[59,1],[2,1],[28,1],[81,1],[34,1],[52,1],[72,1],[74,1],[33,2],[82,1],[37,3]],'instead',[[83,1],[55,1],[25,1],[50,2],[72,1],[93,1],[33,2],[79,2],[37,2]],'encoding',[[55,2]],'class',[[76,2]],'equivalent',[[25,1],[45,1],[79,1]],'modes',[[41,3],[71,1],[50,1],[30,7],[44,2],[60,1],[13,1],[52,1],[76,1],[57,3]],'keycode',[[88,1]],'order',[[5,1],[29,1],[37,3]],'performed',[[74,1]],'timing',[[64,1],[76,1],[62,1],[65,5]],'tools',[[81,1],[13,1]],'coded',[[33,1],[2,1],[46,1]],'resizeable',[[37,1]],'dealing',[[0,1]],'tweaking',[[55,1]],'unpredictable',[[0,1]],'captures',[[11,1]],'piece',[[0,1]],'open',[[25,1],[0,2]],'shared',[[0,1],[85,1],[71,1],[24,1],[44,1]],'fixd3dframe',[[59,1]],'button',[[45,2],[30,3]],'yourself',[[52,1],[0,1]],'text',[[41,2],[55,2],[30,1],[31,1],[81,2],[82,1],[85,1],[93,1],[7,1]],'opinion',[[52,1]],'callback',[[32,1]],'restore',[[12,1],[14,1],[15,1],[2,1]],'customized',[[58,1]],'continuously',[[45,1]],'form',[[80,1],[1,1]],'unnecessary',[[72,1]],'board',[[1,1]],'wrong',[[76,1],[50,1]],'inserting',[[73,1]],'layout',[[84,1]],'overridden',[[85,1]],'arranges',[[5,1]],'dual',[[0,1]],'kept',[[85,1]],'with',[[1,3],[19,1],[50,2],[0,8],[61,3],[59,1],[9,2],[29,1],[51,1],[71,2],[2,3],[82,2],[32,1],[40,1],[7,1],[57,2],[65,5],[55,8],[53,1],[30,5],[44,2],[45,1],[81,2],[52,1],[20,1],[68,1],[69,2],[37,2],[26,1],[25,1],[76,10],[34,2],[72,1],[85,2],[33,1],[11,1],[58,2]],'keep',[[0,2],[45,2],[33,1],[30,2],[2,1]],'cds',[[80,1]],'loads',[[85,1]],'between',[[63,1],[73,1],[71,1],[50,1],[45,2],[52,1],[68,1],[57,2],[11,4]],'working',[[0,1],[52,1],[1,1],[93,1],[37,1]],'obsolete',[[55,1]],'following',[[49,1],[41,1],[25,1],[19,2],[30,1],[50,1],[60,1],[85,1],[11,1]],'lang',[[85,5],[93,1]],'sacrificing',[[55,1]],'nosysmembackbuf',[[55,1]],'wm_nchittest',[[45,2]],'madness',[[55,1]],'understand',[[0,1]],'direcx7',[[49,1]],'absolute',[[2,1]],'luigi',[[24,1]],'saving',[[45,1],[9,1]],'particular',[[58,1],[50,1],[0,1]],'just',[[1,2],[37,1],[0,3]],'maybe',[[0,1]],'possible',[[65,1],[49,1],[1,1],[46,1],[55,1],[30,1],[0,3],[76,1],[74,2],[40,1],[33,1],[37,1]],'omit',[[61,1],[72,1]],'insert',[[80,1]],'smackopen',[[73,1]],'fixnchittest',[[45,1]],'extracted',[[58,1]],'like',[[1,4],[46,3],[71,1],[30,1],[0,5],[76,2],[34,1],[81,1],[33,1],[11,2]],'range',[[76,1],[88,1],[65,1]],'offending',[[46,2]],'option',[[73,1],[50,3],[61,1],[39,2],[9,3],[29,1],[49,2],[71,1],[91,1],[57,2],[7,2],[65,3],[46,3],[55,4],[38,1],[30,2],[44,1],[90,2],[52,5],[68,2],[92,2],[64,1],[37,1],[76,2],[34,4],[3,1],[11,1],[58,1]],'cpu',[[29,2],[55,1],[76,3],[0,1],[45,2],[64,5]],'significant',[[69,1]],'without',[[63,1],[29,1],[25,1],[46,1],[2,1],[0,2],[44,1],[52,1],[92,1],[57,1],[11,1],[65,1]],'folders',[[9,1]],'trilogy',[[33,1]],'dialogs',[[93,1]],'screen',[[73,2],[88,1],[19,1],[30,4],[0,3],[45,1],[50,2],[13,1],[52,3],[53,1],[92,1],[39,2],[37,4],[63,11],[51,1],[29,2],[41,5],[76,1],[2,1],[72,2],[11,5],[65,1]],'nth',[[93,1]],'file',[[1,4],[67,4],[81,1],[77,2],[68,2],[93,4],[5,1],[83,3],[9,4],[26,1],[25,2],[47,1],[49,1],[85,1],[3,3],[10,1],[7,3],[58,2]],'rely',[[55,1],[76,1]],'hardware',[[55,7],[76,3],[50,1],[0,1],[45,1],[43,2],[57,2],[35,1],[65,1]],'superchamps',[[44,1]],'wrapper',[[55,1]],'implemented',[[33,1],[35,1],[71,1]],'activated',[[65,1],[15,1],[32,1],[3,1],[2,2],[28,1]],'explained',[[0,1]],'movies',[[73,2],[46,1],[55,3],[34,2],[52,1],[74,4]],'net',[[0,1]],'titleless',[[37,1]],'specific',[[46,1],[55,1],[30,2],[0,2],[92,1],[11,1],[65,1]],'upwards',[[6,1]],'port',[[76,1],[85,1]],'resolves',[[55,2],[52,1]],'consuming',[[64,1]],'rerouting',[[79,2]],'eliminating',[[30,1]],'activate',[[55,1],[2,1],[26,1]],'drive',[[80,1],[1,2]],'intercept',[[65,1],[47,1],[76,3],[0,1],[45,1],[34,1],[32,3],[33,1],[37,1]],'finer',[[65,2]],'inclusion',[[57,1]],'makes',[[63,1],[37,2],[46,2],[55,2],[71,3],[85,1],[52,1],[68,1],[58,1]],'reported',[[76,1],[9,1]],'nod3dreset',[[57,1]],'basic',[[49,1],[32,1],[80,1],[0,3]],'know',[[0,1]],'recommended',[[93,1]],'imagehlp',[[76,2]],'dinput8',[[44,1]],'prevent',[[4,1],[39,1],[52,1],[59,1],[33,1],[37,1]],'640x360',[[41,1]],'protection',[[80,1]],'off”',[[45,1]],'blizzard',[[76,1],[11,1]],'unless',[[65,1],[0,1]],'want',[[0,1],[45,2],[49,1],[83,1],[30,1],[2,1]],'add',[[27,1],[1,2],[25,1],[46,1],[2,1],[0,1],[81,1],[34,1],[82,1],[68,2],[5,1]],'issues',[[72,1],[1,1],[76,1],[57,2],[65,1]],'skipfps',[[63,2]],'happy',[[29,1]],'combinations',[[17,1],[76,1]],'sizx',[[86,1]],'movement',[[45,2],[52,1],[46,1],[44,1]],'replication',[[72,1]],'described',[[76,1]],'discovered',[[76,1]],'cause',[[59,1],[46,1],[45,1],[85,1],[74,1],[92,1],[33,2],[11,1]],'allowing',[[73,1],[32,3],[55,2],[35,1],[0,1]],'injectson',[[34,1]],'“cursor',[[45,1]],'allocated',[[76,1]],'common',[[89,1],[1,1],[76,1],[71,2],[44,1],[0,1],[52,2],[33,1],[11,1],[65,1]],'portions',[[0,1]],'enablesonhook',[[34,1]],'refers',[[30,1]],'format',[[81,1],[22,1],[52,4],[10,1],[86,1],[88,1]],'different',[[49,2],[51,1],[25,1],[55,1],[50,1],[31,2],[0,3],[71,1],[72,2],[85,1],[33,2],[57,3]],'available',[[49,1],[88,2],[55,4],[76,3],[80,2],[45,1],[85,3],[57,1],[65,1]],'activating',[[34,1]],'zbufferbitdepths',[[55,1]],'matter',[[25,1],[33,1],[52,1]],'done',[[33,1]],'multiprocesshook',[[85,2]],'several',[[63,1],[46,1],[76,1],[0,3],[52,1],[74,2],[33,2],[37,1]],'options',[[1,1],[50,2],[90,2],[68,1],[37,1],[63,1],[49,4],[29,1],[89,1],[82,1],[85,1],[3,1]],'need',[[83,1],[29,1],[46,1],[55,2],[31,1],[0,2],[2,1],[52,1],[93,1],[57,1],[7,1]],'technological',[[0,1]],'hot',[[12,2],[88,2],[47,3],[33,2],[24,1]],'computers',[[55,1],[61,1],[0,1]],'preserved',[[30,1]],'force',[[45,1],[72,1],[52,1],[37,2]],'sizing',[[46,1]],'furthermore',[[50,1]],'extract',[[58,1]],'purpose',[[34,1],[79,1],[0,2]],'technology',[[49,1]],'hookglide',[[35,1]],'leaves',[[52,1],[91,1],[55,1],[11,1]],'don',[[28,1],[45,1],[52,3],[92,1],[69,1],[37,3],[59,1],[29,1],[76,2],[80,1],[57,3],[11,1],[65,1]],'wants',[[0,1]],'wikipedia',[[23,1]],'bilinear',[[24,1],[51,3]],'backbuffer',[[55,3],[52,4]],'zero',[[76,1],[87,2]],'service',[[55,1],[50,1]],'kill',[[12,1],[15,1],[25,4],[46,1],[37,1]],'push',[[0,1]],'dialog',[[29,1],[1,2]],'extended',[[30,1]],'win',[[92,1],[71,1],[69,1],[37,4]],'color',[[55,3],[38,2],[50,6],[53,1],[13,3],[52,3],[74,3],[39,2],[17,4],[22,3],[76,3],[2,1],[57,3],[11,2],[58,1]],'flush',[[46,1]],'interested',[[49,1]],'clones',[[25,1]],'sure',[[44,2]],'drop',[[55,1],[30,1],[1,1]],'accidentally',[[63,1]],'mark',[[82,1]],'accessed',[[12,1]],'cpumaxusage',[[64,1]],'fixfreelibrary',[[76,1]],'gets',[[81,1],[92,1],[33,1],[11,1]],'updates',[[63,5],[52,1]],'conditions',[[33,1],[13,1],[32,1]],'activity',[[11,1],[92,1]],'ddsd_pixelformat',[[52,1]],'generated',[[68,1],[69,1],[58,1]],'unnoticeable',[[45,1],[39,1]],'decelerate',[[11,1]],'supportsvga',[[41,1]],'break',[[53,1],[50,1]],'namely',[[45,1],[19,1],[65,1]],'200',[[86,1]],'disassembly',[[24,1]],'placement',[[30,1]],'card',[[41,1]],'unusual',[[50,1]],'dedicated',[[49,1],[76,2],[45,1],[52,1],[3,1],[65,1]],'remain',[[40,1]],'debugger',[[32,3]],'remapmci',[[74,1]],'case',[[59,1],[9,1],[55,1],[71,1],[45,1],[52,2],[93,1],[69,1],[37,2]],'suppressdierrors',[[44,1]],'locate',[[1,1]],'will',[[1,4],[46,1],[30,1],[0,5],[67,4],[81,3],[52,1],[68,1],[93,1],[64,1],[27,1],[9,1],[26,2],[25,1],[29,3],[2,4],[76,4],[82,1],[85,4],[89,1],[32,2],[3,3],[40,1]],'else',[[0,3]],'overriding',[[11,1],[92,1]],'cross',[[45,1]],'state',[[4,2],[26,3],[93,1],[3,1],[47,1],[2,1]],'troubleshooting',[[1,1]],'always',[[59,1],[49,1],[55,1],[24,1],[0,1],[85,1],[3,1],[33,1]],'stretchmovies',[[74,1]],'preferred',[[7,1],[65,1]],'checked',[[63,2],[29,2],[65,5]],'thing',[[78,1],[0,1]],'injects',[[32,1],[92,1],[0,1]],'highlighted',[[25,1],[0,1]],'jetboat',[[44,1]],'deinterlace',[[55,2]],'choppy',[[64,1]],'alternative',[[52,1]],'slowdown',[[64,1]],'replaceprivops',[[76,1]],'unmount',[[80,1]],'not',[[73,1],[1,1],[19,1],[50,2],[0,5],[61,1],[74,1],[35,1],[59,2],[49,1],[29,5],[71,1],[2,1],[32,1],[57,4],[65,1],[46,4],[55,7],[38,1],[30,1],[31,3],[45,1],[81,1],[52,4],[93,2],[86,1],[37,4],[17,1],[63,1],[26,1],[78,1],[25,2],[41,1],[76,4],[34,2],[72,1],[85,1],[33,3],[11,3],[58,1]],'anymore',[[29,1]],'log',[[5,2],[69,1],[1,1],[25,3],[66,1],[67,4],[92,2],[68,6],[3,1],[11,3],[7,5]],'incompatibilities',[[9,1]],'maximum',[[87,2],[10,3],[41,1],[55,1]],'frontend',[[33,2],[28,3]],'implementing',[[33,1]],'desired',[[80,1],[30,3],[50,1]],'saved',[[81,1],[9,2]],'someone',[[0,2]],'ever',[[37,1]],'conversion',[[53,1],[50,3]],'replaces',[[65,1],[76,1],[58,1]],'addtimestamp',[[68,1]],'safely',[[65,1],[71,1],[0,1]],'acting',[[0,1]],'refer',[[72,1]],'nop',[[76,1]],'manipulated',[[76,1],[65,1]],'argument',[[85,1],[93,1]],'auriemma',[[24,1]],'most',[[65,1],[46,1],[55,4],[71,1],[31,1],[0,1],[45,1],[61,1],[76,1],[86,1],[37,1]],'impacts',[[55,1]],'occupy',[[37,1]],'since',[[64,1],[83,1],[49,1],[1,1],[55,2],[76,2],[0,1],[92,1],[11,1],[39,1]],'expect',[[52,1],[46,1]],'becomes',[[44,1],[55,1],[37,1]],'diagnostic',[[69,1]],'express',[[34,1]],'emulated',[[81,1],[52,1],[21,1],[71,2],[11,3]],'ansiwide',[[33,1]],'partially',[[90,1]],'view',[[7,1],[24,1],[68,1],[25,1],[18,2],[2,1]],'hooks',[[73,1],[49,1],[76,2],[44,2],[0,4],[34,2],[72,1],[35,1]],'bottom',[[6,2],[30,1]],'destruction',[[37,1]],'process',[[46,4],[55,1],[44,1],[12,1],[13,2],[52,1],[64,1],[15,2],[25,1],[76,3],[34,5],[32,2]],'harder',[[33,1],[34,1]],'notice',[[78,1],[31,1],[52,1]],'counter',[[63,4],[55,2],[76,1],[65,2]],'develop',[[0,2]],'might',[[83,1],[46,1],[50,1],[24,1],[0,2],[82,1],[52,2],[32,1],[92,1]],'depth',[[17,2],[22,1],[55,1],[76,1],[50,2],[13,3],[52,3],[74,3],[57,2],[11,1]],'gsky916',[[24,1]],'hooknoupdate',[[33,1]],'determining',[[29,1]],'existing',[[77,1],[52,1],[67,2],[30,1]],'rollercoaster',[[46,1]],'notification',[[29,1]],'clipcursor',[[45,1]],'filtermessages',[[46,1]],'1ms',[[64,2]],'debugging',[[73,1],[35,1],[32,1]],'microsoft',[[0,1]],'winrar',[[1,1]],'rather',[[1,1],[55,2],[30,3],[44,1],[28,1],[11,1]],'reliably',[[44,1]],'descriptor',[[55,1]],'output',[[68,1]],'exaggerated',[[63,1]],'behaves',[[45,1],[0,1]],'onto',[[80,1]],'borderless',[[30,1],[37,1]],'line',[[85,1],[68,3],[55,1],[93,2],[2,1]],'harmful',[[46,1]],'oses',[[76,3]],'directive',[[45,1]],'tell',[[29,1]],'files',[[1,1],[58,1],[0,4]],'merges',[[71,1]],'resolution',[[17,1],[51,1],[41,12],[13,1],[20,1],[11,1],[64,1]],'limitddraw',[[55,1]],'directinput8',[[44,3]],'fogging',[[61,2]],'browse',[[92,1],[11,1],[0,1]],'virus',[[0,2]],'24bpp',[[38,1]],'goes',[[3,1],[55,1]],'nonexclusive',[[44,1]],'usergb565',[[55,1]],'send',[[46,1],[37,4]],'startdebug',[[32,1]],'backbuf',[[55,1]],'texturedump',[[58,1]],'around',[[63,1]],'trace',[[69,2]],'install',[[25,1],[1,1]],'initialres',[[41,1]],'getperfcounter',[[76,1]],'soon',[[76,1],[34,1],[1,1]],'save',[[81,2],[9,1],[3,1],[47,1],[82,1]],'tough',[[37,1]],'query',[[55,1],[76,1],[65,1]],'libs',[[49,1],[70,1],[79,2],[35,1]],'transferred',[[55,1],[50,1]],'correctly',[[72,1],[52,2],[46,1],[1,1],[33,1]],'easportshack',[[76,1]],'bufferediofix',[[80,1]],'intercepts',[[47,1],[0,2],[77,2],[32,1],[33,1],[37,3]],'extension',[[73,1],[72,1],[7,1]],'called',[[50,1]],'managing',[[71,1],[50,3]],'mintexx',[[87,1]],'question',[[0,1]],'also',[[78,1],[9,2],[26,1],[49,1],[55,1],[2,1],[0,1],[50,1],[68,1],[33,1]],'debugview',[[68,1]],'software',[[76,1],[0,1]],'reserves',[[76,1]],'hide',[[9,1],[88,1],[80,1],[43,1],[30,2],[16,1],[37,3]],'simplified',[[52,1],[51,1],[0,1]],'settimer',[[65,1]],'instructions',[[76,2],[37,1]],'similar',[[73,1],[55,2],[76,2],[50,2],[4,1],[81,1],[32,1],[57,1],[11,2],[79,1]],'chance',[[46,1]],'down',[[69,1],[51,1],[55,3],[30,1],[6,1],[45,1],[12,1],[32,1],[11,1],[64,1]],'directory',[[9,1],[93,1]],'windowstyle',[[37,1]],'incredible',[[0,1]],'resized',[[45,1],[92,1],[30,1],[37,4]],'internally',[[50,3],[69,1]],'suspending',[[64,2]],'turns',[[3,1]],'graphical',[[61,1],[1,1],[2,1],[58,1]],'etc',[[0,1]],'admin',[[9,1],[29,1]],'unlockzorder',[[37,1]],'refusing',[[76,1]],'tiny',[[63,1],[1,1]],'screens',[[11,1]],'mech',[[55,1]],'directx',[[49,6],[54,1],[50,3],[90,1],[48,1],[52,1],[91,1]],'translation',[[85,1],[24,1]],'peek',[[69,1],[46,1]],'nosysmemprimary',[[55,2]],'standard',[[53,1],[72,1]],'noticing',[[63,1]],'slanted',[[90,1]],'direct3dcreate',[[57,1]],'bullet',[[0,1]],'win32',[[0,1]],'hash',[[58,1]],'categories',[[0,1]],'playing',[[74,1],[0,1]],'1280x800',[[41,1]],'recovering',[[13,1],[0,1]],'write',[[52,1],[1,2],[67,1],[0,1]],'added',[[67,1],[31,1],[0,2]],'blank',[[2,1]],'luckily',[[33,1]],'coop',[[55,1],[44,1]],'means',[[63,1],[87,2],[41,1],[0,1],[34,1],[65,1]],'hel',[[55,1]],'0x7c',[[88,1]],'feature',[[59,1],[92,1],[76,2],[11,1],[37,1]],'referenced',[[33,2]],'manipulate',[[76,1]],'parameters',[[71,2],[72,1]],'event',[[44,1],[32,1]],'simulates',[[55,1],[76,1],[80,1],[39,1]],'italian',[[85,1]],'scales',[[72,1],[51,1],[74,1],[71,1]],'expected',[[55,1],[76,1]],'routine',[[33,1]],'games',[[1,2],[0,6],[61,2],[74,1],[39,2],[15,1],[29,1],[51,1],[71,1],[2,2],[80,1],[32,1],[57,4],[79,3],[65,2],[46,2],[55,4],[38,1],[44,1],[45,3],[52,5],[92,1],[69,1],[37,6],[41,1],[76,8],[34,1],[72,1],[3,1],[11,1]],'compensate',[[45,1],[52,1],[91,1],[71,1]],'drawn',[[63,1],[65,1]],'your',[[7,1],[39,1],[58,1],[1,2],[80,1],[24,1],[0,10],[92,3],[11,5],[37,1]],'copies',[[55,1],[1,1]],'calling',[[0,1]],'shown',[[27,1],[45,1],[20,1],[25,1],[2,2],[0,1]],'scans',[[76,1]],'almost',[[83,2],[30,1],[0,1]],'published',[[0,1]],'cornerized',[[11,3]],'simultaneously',[[85,1]],'characteristics',[[27,1]],'processor',[[76,1]],'axes',[[45,1]],'html',[[24,1]],'part',[[11,1],[92,1]],'gives',[[65,1]],'pause',[[15,2]],'setappcompatdata',[[76,1],[53,1]],'shift',[[92,1],[12,1],[22,1]],'rdtsc',[[65,2]],'min',[[10,1]],'pcs',[[0,2]],'repaint',[[11,2],[92,2]],'within',[[45,3],[59,1],[72,1],[46,1]],'vice',[[80,1]],'segments',[[76,1]],'gamma',[[39,3]],'methods',[[60,1],[49,1],[52,1]],'chinese',[[85,1],[24,1]],'strangely',[[45,1]],'offscreen',[[55,1]],'separate',[[0,2],[76,1],[67,1],[37,1]],'reserved',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,2],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[93,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'helpful',[[49,1],[29,1]],'midtown',[[55,1]],'updated',[[73,1],[86,1],[52,1],[19,1],[33,2],[65,1]],'difference',[[11,1]],'nowinerrors',[[71,1]],'window',[[88,1],[1,2],[19,1],[50,1],[0,5],[74,3],[84,2],[39,2],[59,8],[9,1],[14,2],[23,1],[29,6],[2,1],[51,3],[71,5],[32,3],[40,7],[65,1],[46,5],[55,4],[30,20],[44,3],[45,13],[12,1],[13,2],[20,1],[52,2],[69,1],[37,19],[63,1],[86,3],[21,1],[22,1],[41,1],[25,1],[26,1],[76,2],[92,4],[72,1],[3,2],[33,1],[11,4]],'remaps',[[52,1]],'redirected',[[71,1]],'affected',[[50,1]],'hdmi',[[41,1]],'planet',[[44,1]],'videogames',[[0,1]],'hookdirectsound',[[35,1]],'legacyalloc',[[76,1]],'stopping',[[4,1]],'intro',[[73,1],[34,1],[52,1],[46,1]],'strategy',[[71,1],[49,1]],'system',[[0,4],[77,2],[39,2],[71,1],[2,1],[80,1],[79,6],[40,1],[65,2],[46,3],[55,4],[53,1],[13,1],[52,1],[68,1],[93,3],[64,2],[37,1],[17,1],[78,1],[26,3],[85,1],[3,2],[33,2]],'activates',[[73,1],[59,1],[51,3],[29,1],[25,1],[46,1],[30,1],[85,1]],'timefast',[[88,1],[92,1]],'unallocated',[[76,1]],'downwards',[[6,1]],'setcooperativelevel',[[55,1]],'development',[[24,1]],'floating',[[40,1]],'defaultmessages',[[46,1]],'detecting',[[55,1],[32,1]],'executing',[[52,1]],'activities',[[71,1]],'arrives',[[0,1]],'procedure',[[47,1],[0,1]],'majority',[[33,1]],'protections',[[69,1]],'fastest',[[0,1]],'painting',[[11,1],[92,1]],'being',[[0,2],[46,2],[11,1],[37,1]],'sim',[[37,1]],'conflicts',[[52,1],[67,1]],'filtering',[[51,2]],'textures',[[61,2],[72,2],[55,5],[57,3],[58,10]],'logtoggle',[[88,1],[92,1]],'newer',[[46,1],[55,2],[44,1]],'showing',[[29,1],[1,1],[55,1],[43,1]],'traditional',[[44,1]],'autodetect',[[85,1],[9,1]],'regedit',[[81,1]],'implementation',[[33,1],[49,3],[72,1]],'winposchange',[[46,1]],'redirect',[[33,2]],'sends',[[37,1]],'stop',[[4,2]],'however',[[49,1],[46,1],[55,1],[65,1]],'ascending',[[5,1]],'keyboard',[[0,1],[45,1],[47,1],[11,1],[44,4]],'explore',[[25,2],[5,1]],'elevation',[[85,1],[9,1]],'interceptrdtsc',[[65,1]],'future',[[73,1],[35,1],[49,1]],'front',[[39,1]],'ask',[[17,1],[29,1]],'errors',[[52,2],[74,1],[55,1],[71,2],[80,1],[44,2]],'createsurface',[[52,1]],'warning',[[85,1]],'“intercept',[[11,1],[92,1]],'forceshel',[[55,1]],'slower',[[63,1],[50,1],[52,1]],'tries',[[59,1],[15,1],[49,1],[76,2],[71,2],[65,1]],'determines',[[50,1]],'doing',[[4,1],[47,1]],'remember',[[1,3]],'less',[[63,1],[50,1]],'advanced',[[55,1]],'single',[[72,1],[76,2],[33,2],[0,4]],'another',[[32,1],[0,1]],'noalphachannel',[[52,1]],'location',[[1,2],[31,1],[0,1]],'disk',[[3,1],[76,1],[80,4],[0,1]],'entry',[[1,2],[25,4],[6,4],[2,1],[0,1],[28,2],[34,1],[33,1],[5,2]],'beware',[[3,1],[85,1]],'movable',[[59,1]],'defaulting',[[85,3],[46,1]],'offset',[[55,2]],'looking',[[44,1],[58,1],[0,2]],'directdraw7',[[50,1]],'course',[[76,1],[0,1]],'follows',[[88,1],[10,1],[86,1],[2,1]],'caused',[[55,1]],'terminate',[[15,1],[29,2],[47,1],[52,1],[2,1],[88,1]],'32bpp',[[55,1],[38,1],[57,1]],'hacks',[[69,1],[0,1]],'msec',[[63,1]],'rect',[[71,1]],'geiss',[[24,1]],'fullscreenonly',[[29,1]],'useless',[[38,1],[49,1]],'availability',[[76,2]],'schema',[[50,1],[24,1],[32,1]],'supported',[[17,2],[41,1],[55,1],[2,1],[0,1],[76,2],[85,1],[52,1]],'vmware',[[55,1]],'internal',[[76,1],[40,2],[51,1]],'above',[[55,1],[38,3],[30,1],[28,1],[90,1],[32,1],[64,1]],'inhibits',[[45,1],[29,1]],'joystick',[[45,7],[44,1]],'noticeably',[[51,1]],'fix',[[73,1],[46,1],[55,3],[31,1],[90,1],[45,1],[52,3],[74,2],[92,1],[37,3],[59,1],[76,6],[71,1],[80,1],[72,3],[57,3],[11,1]],'exists',[[67,1],[9,1],[29,1]],'startup',[[85,1],[9,1],[13,1],[76,1]],'alternate',[[45,1],[33,1]],'emulaterelmouse',[[44,1]],'figure',[[55,1],[63,1]],'issue',[[55,5],[31,1],[90,2],[61,1],[52,1],[91,1],[93,1],[37,1]],'sleep',[[65,1]],'stick',[[33,1]],'platform',[[78,1],[1,1],[57,1],[80,1]],'asks',[[25,1],[2,1],[29,1]],'defines',[[27,1]],'contained',[[55,1],[83,1]],'small',[[63,1],[59,1],[46,1]],'titles',[[76,1]],'period',[[69,1],[46,1]],'hiding',[[43,1]],'resulting',[[32,1]],'emulatesurface',[[50,3]],'environments',[[76,1]],'mount',[[80,1]],'8bpp',[[55,1],[38,3],[76,2]],'messages',[[1,2],[46,15],[67,1],[0,1],[45,2],[69,1],[37,3]],'choose',[[51,1],[55,1],[60,1],[28,1]],'widget',[[55,1],[30,2]],'celebrates',[[29,1]],'field',[[1,2],[46,1],[55,4],[30,1],[28,1],[81,1],[72,1],[82,1]],'legend',[[52,1],[91,2]],'trails',[[61,1],[52,1]],'resume',[[15,1]],'input',[[46,1],[42,1],[44,2]],'ini',[[83,1],[9,2],[47,1],[0,2],[81,1],[93,1],[58,1]],'interpolating',[[51,1]],'returnnullref',[[55,1]],'dirty',[[11,1],[92,1]],'handling',[[73,1],[46,1],[55,1],[53,1],[45,1],[52,1],[74,1],[92,1],[37,2],[49,1],[47,1],[71,1],[24,1],[91,1],[58,2]],'showfpsoverlay',[[63,1]],'drag',[[30,1],[1,1]],'two',[[0,1],[45,2],[49,1],[30,2],[28,1]],'rudimentary',[[45,1]],'splash',[[29,1]],'2016',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[93,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'needadmincaps',[[29,1]],'automatic',[[85,2],[49,3],[43,1],[58,1]],'windowized',[[30,1]],'copying',[[55,2],[0,1]],'seems',[[76,1],[49,1],[37,1]],'320x200',[[41,2]],'backbuffers',[[50,1]],'actual',[[63,1],[81,2],[55,2]],'favorite',[[0,1]],'centers',[[30,1]],'forcefully',[[61,1]],'predetermined',[[55,1]],'needs',[[28,1],[39,1],[83,1],[76,1],[33,2],[37,1]],'specify',[[49,1],[1,1],[55,1],[31,1],[30,1]],'key_wow64_64key',[[77,2]],'verbose',[[11,1],[92,1]],'info',[[46,1],[69,1],[0,1]],'improvements',[[1,1],[0,2]],'frequent',[[63,1]],'receive',[[37,1],[46,1],[1,1]],'children',[[34,2]],'desktop',[[55,1],[38,1],[30,7],[0,1],[50,2],[53,2],[13,5],[16,3],[52,1],[74,1],[39,1],[17,2],[22,2],[71,3],[34,1],[57,1],[18,1],[11,5]],'modalstyle',[[37,1]],'recording',[[86,2]],'home',[[0,2]],'detects',[[72,1],[49,1],[74,1],[55,1],[2,1]],'events',[[32,1],[46,2],[69,3],[0,1]],'check',[[9,1],[1,2],[3,1],[33,1],[57,1],[74,1]],'names',[[31,1],[58,1]],'bought',[[0,1]],'diagonally',[[55,1]],'direcr3d',[[19,1]],'sting',[[55,1]],'lower',[[57,1]],'configuration',[[1,3],[19,1],[30,1],[0,7],[81,1],[93,3],[27,2],[5,2],[37,1],[9,4],[83,3],[25,2],[2,2],[82,2],[34,3],[85,1],[3,2],[10,1],[33,1],[58,1]],'packages',[[85,1]],'invisible',[[90,1],[37,1]],'periodically',[[63,1],[52,1],[46,2]],'every',[[45,1],[61,1],[52,1],[1,1],[33,1]],'ones',[[58,1]],'timesetevent',[[65,1]],'optimize',[[53,1],[29,1]],'directx1~6',[[49,2]],'font',[[76,4],[71,2]],'smallest',[[67,1]],'alphabetical',[[5,1]],'tool',[[68,1],[0,1]],'icons',[[63,1],[19,1],[0,1]],'d3d8',[[57,1],[49,1]],'autorefresh',[[52,1]],'rites',[[55,1]],'beginscene',[[61,1]],'intervention',[[49,1]],'click',[[45,1],[30,1],[1,1]],'hookgoglibs',[[79,2]],'dxwnd',[[50,3],[0,29],[77,2],[15,2],[29,9],[47,2],[2,8],[24,2],[32,6],[79,1],[46,2],[28,2],[81,2],[13,2],[92,2],[86,3],[69,3],[37,3],[63,2],[83,4],[89,1],[33,10],[11,1],[88,1],[1,11],[19,4],[67,3],[9,5],[49,5],[66,1],[71,1],[4,1],[7,1],[65,2],[55,6],[30,1],[31,4],[45,1],[52,2],[93,10],[26,8],[25,1],[76,3],[34,1],[72,1],[85,4],[3,7],[58,3]],'introduction',[[0,1]],'affect',[[63,1],[26,1],[93,1]],'timeslow',[[88,1],[92,1]],'edit',[[83,1],[34,2],[25,1],[55,1],[5,1]],'story',[[0,1]],'coordinate',[[86,1],[11,1],[30,1]],'letting',[[0,1]],'completion',[[44,1]],'emulateregistry',[[77,1]],'configurations',[[1,1],[30,1],[0,1]],'effects',[[45,1],[61,2],[57,1],[11,1],[0,2]],'nopower2fix',[[57,1]],'include',[[58,1],[57,1],[1,1]],'clear',[[61,1],[13,1],[3,1],[55,1],[57,2]],'emulating',[[55,1]],'neutralized',[[40,1]],'requires',[[49,1],[29,1],[2,1],[44,1]],'anchored',[[40,1]],'considers',[[46,1]],'empties',[[46,1]],'compares',[[2,1]],'flag',[[73,2],[1,2],[19,1],[61,1],[74,2],[77,2],[39,1],[29,2],[47,1],[71,2],[60,1],[80,2],[32,1],[57,4],[79,5],[65,5],[46,2],[55,13],[31,1],[30,3],[44,5],[45,5],[52,6],[20,1],[81,2],[86,1],[64,2],[37,4],[63,1],[69,1],[92,1],[76,11],[34,1],[72,2],[33,6],[58,2]],'tracing',[[3,1],[73,1],[35,1]],'nomovies',[[74,1]],'languages',[[85,1]],'sims',[[52,1]],'characters',[[11,1]],'engine',[[33,2]],'resolving',[[61,1],[37,2]],'rendering',[[59,4],[55,1],[11,1]],'recognize',[[44,1]],'algorithm',[[31,1]],'outregistry',[[69,1]],'overrideregistry',[[77,1]],'menu',[[17,1],[26,1],[1,2],[25,2],[55,1],[2,2],[90,3],[91,1],[18,1]],'keymapping',[[88,1]],'approximate',[[55,1],[76,1]],'processed',[[55,1],[57,1],[69,1],[37,1]],'suspends',[[64,1]],'setcompatibility',[[53,1]],'day',[[0,1]],'handles',[[66,1],[50,1],[32,1]],'ddscl_fullscreen',[[55,1]],'forwards',[[50,2]],'forced',[[77,2],[52,1],[86,2],[43,1]],'includes',[[45,1],[2,1]],'directdraw1',[[50,1]],'removes',[[80,1]],'windowproc',[[33,3]],'provided',[[24,6],[28,1]],'registry',[[83,1],[1,1],[0,2],[81,9],[77,9],[13,1],[69,2],[37,1]],'accordingly',[[63,1]],'sections',[[63,1]],'normalize',[[65,1]],'creation',[[55,1],[32,2]],'drives',[[80,1]],'own',[[37,2],[85,1],[9,1],[76,2],[2,1],[0,2]],'coder',[[0,1]],'during',[[73,1],[52,1],[46,2],[11,1],[60,1]],'glide',[[35,2]],'33%',[[64,1]],'masks',[[44,1]],'000',[[55,1]],'backgrounds',[[39,1]],'simply',[[80,2],[55,1],[76,1],[50,1],[0,1]],'wherever',[[0,2]],'instance',[[45,1],[1,1],[33,1],[30,1]],'empty',[[46,1],[1,1],[55,1],[30,1],[80,1]],'frame',[[63,2],[59,1],[55,1],[19,1],[52,2],[37,2]],'help',[[57,1],[24,3],[58,1]],'asynchronous',[[80,2]],'next',[[86,1]],'locale',[[85,1]],'calls',[[40,1],[79,2],[50,1],[77,2],[74,3],[68,1],[37,2],[39,1],[49,3],[76,1],[71,3],[34,1],[57,1],[33,4],[65,2]],'trying',[[76,1],[33,1],[2,1],[0,3]],'movements',[[44,1]],'thread',[[73,1],[15,2],[46,1],[1,1],[52,1]],'filter',[[51,2],[46,1],[24,1]],'date',[[85,1]],'tick',[[68,1],[65,2]],'adjust',[[29,1],[55,1],[20,1],[65,1]],'smk',[[73,1]],'detection',[[44,1]],'job',[[4,1]],'related',[[63,1],[49,1],[23,1],[29,1],[71,1],[44,1],[20,1],[69,1],[84,1]],'invoked',[[61,1],[37,1]],'behaviors',[[32,1]],'clientremapping',[[71,1]],'hence',[[0,1]],'stack',[[81,1]],'finetiming',[[65,1]],'folder',[[0,1],[9,2],[1,3],[31,3],[5,1]],'picture',[[19,1],[2,1]],'comp',[[46,1]],'becoming',[[50,1]],'thought',[[0,1]],'team',[[24,1]],'introduces',[[45,1],[63,2]],'features',[[49,1],[93,1],[55,1],[0,2]],'unskippable',[[46,1]],'suppressd3dext',[[57,1]],'play',[[34,1],[92,1]],'glactivetexture',[[72,1]],'causing',[[76,1]],'experimental',[[0,1],[59,1],[72,1],[55,1],[60,1],[37,2]],'logs',[[1,3],[66,2],[67,3],[68,1],[3,1],[69,8]],'had',[[38,1],[0,1]],'error',[[52,1],[76,2],[71,1],[2,1],[44,1]],'subfolder',[[2,1],[58,2]],'fields',[[41,2],[30,2]],'destroyed',[[37,1]],'limitfps',[[63,2]],'defined',[[46,1]],'coarse',[[20,1]],'client',[[63,1],[52,1],[51,2],[71,2],[30,1]],'fixwinframe',[[37,1]],'enableclipping',[[45,1]],'outwinmessages',[[69,1]],'sports',[[76,2]],'globalunlock',[[76,1]],'already',[[81,1],[61,1],[32,1],[38,1],[0,1]],'directx11',[[49,2]],'modal',[[59,1],[37,2]],'eminent',[[52,1]],'keepcursorfixed',[[45,1]],'fight',[[11,1]],'buffered',[[80,1]],'management',[[39,1]],'exist',[[81,1]],'trick',[[59,1],[92,1],[76,1],[11,1]],'frozen',[[0,1]],'freeze',[[11,1]],'functions',[[12,1],[29,1],[55,2],[11,1],[50,1]],'similarly',[[50,1]],'together',[[30,1],[0,1]],'their',[[49,1],[46,2],[55,1],[2,1],[0,3],[74,2],[37,1]],'compatible',[[53,1],[50,2]],'subset',[[26,1]],'palette',[[21,2],[55,1],[71,3],[50,1],[52,3],[18,1],[39,3]],'separated',[[33,1],[67,1]],'emulate',[[44,1],[77,1],[78,1],[41,1],[65,1]],'releasemouse',[[45,1]],'snowboard',[[55,1],[57,1],[90,3]],'solution',[[79,1],[37,1]],'confirmation',[[29,2],[25,1],[5,1]],'bypasses',[[34,1],[71,1],[74,1]],'for',[[87,4],[0,10],[27,1],[15,1],[29,2],[47,1],[80,3],[24,1],[82,1],[91,1],[57,1],[46,1],[28,2],[44,4],[81,1],[13,1],[90,1],[92,1],[86,1],[64,5],[37,2],[63,3],[69,1],[83,2],[33,2],[11,1],[1,5],[74,2],[9,4],[23,1],[49,7],[51,1],[71,4],[10,1],[18,1],[7,1],[65,2],[55,5],[53,3],[30,9],[31,1],[45,4],[52,3],[25,2],[76,6],[34,2],[72,2],[85,4],[3,2],[58,1]],'libraries',[[0,1],[79,1],[71,1],[35,1],[44,3]],'decrease',[[92,1],[88,1],[0,1]],'that',[[50,3],[0,22],[61,1],[77,4],[15,1],[29,4],[80,3],[2,3],[24,1],[32,6],[57,1],[79,1],[46,9],[38,1],[44,5],[13,2],[20,1],[68,3],[92,2],[64,3],[37,5],[63,6],[69,3],[21,1],[22,1],[41,2],[83,1],[89,1],[33,3],[11,5],[73,2],[1,3],[74,3],[39,2],[59,1],[49,2],[23,1],[51,1],[71,4],[65,5],[55,9],[30,3],[45,3],[52,6],[93,1],[26,1],[76,12],[34,1],[72,1],[85,2],[3,2],[58,2]],'appropriate',[[46,1],[44,2]],'area',[[30,3],[45,1],[81,1],[12,1],[52,1],[74,1],[92,2],[63,1],[59,1],[51,2],[71,3],[82,1],[10,1],[11,6]],'troubles',[[52,1]],'first',[[25,1],[76,1],[30,1],[0,3],[80,1],[52,1],[32,2],[7,1]],'reducing',[[64,1]],'troubleshoot',[[69,1]],'care',[[50,1],[37,1]],'syncronize',[[71,1]],'globalunock',[[76,1]],'native',[[41,1],[77,1],[44,1]],'asking',[[0,1]],'could',[[49,1],[46,1],[52,1],[71,1],[76,1],[0,2]],'plit',[[52,1]],'1000',[[63,2]],'top',[[0,1],[11,2],[37,2],[71,1],[6,2],[2,1]],'freely',[[40,1]],'correct',[[45,2],[49,1],[65,1]],'below',[[90,1],[91,1],[20,1],[55,2],[2,1],[27,1]],'account',[[52,1],[46,1]],'codeproject',[[0,1]],'key”',[[11,1],[92,1]],'actually',[[76,1],[2,1],[37,1]],'step',[[6,2]],'resizing',[[46,1],[37,1]],'svga',[[41,1]],'sherwood',[[52,1],[91,2]],'thank',[[0,3]],'screenshot',[[11,1]],'filled',[[77,2]],'often',[[76,2],[0,1]],'fixsmackloop',[[73,1]],'plus',[[26,1]],'aero',[[53,7],[50,3]],'owner',[[0,1]],'export',[[9,1],[1,1],[25,1],[2,1],[0,1]],'formula',[[63,1]],'glut32',[[72,2]],'prefer',[[9,1]],'analyze',[[45,1],[69,1],[1,1]],'lose',[[44,1],[29,1]],'uprising',[[46,1],[37,1]],'notify',[[29,1]],'hidecdromempty',[[80,1]],'return',[[52,1],[55,2],[71,1],[76,2],[44,1]],'conveniently',[[76,1]],'bypassgoglibs',[[79,1]],'accelerate',[[11,1]],'slow',[[45,2],[64,1],[11,1],[0,1]],'supporters',[[24,1],[0,1]],'whole',[[37,1],[45,1],[59,1],[71,1],[30,3],[39,1]],'bit',[[77,4],[76,3],[57,2],[39,1]],'too',[[46,1]],'recent',[[17,1],[55,1],[76,1],[50,1],[0,2],[72,1],[57,1],[86,1]],'audio',[[76,1]],'sets',[[63,1],[49,1],[88,1],[76,1],[85,1],[52,1],[37,1]],'mechanism',[[30,1],[44,1]],'killed',[[73,1],[46,2]],'generate',[[52,1]],'opcodes',[[76,3],[65,1]],'ran',[[0,1]],'call',[[73,1],[53,1],[71,2],[34,1],[72,1],[74,1],[33,3],[79,1]],'alpha',[[52,2]],'mcisendstring',[[74,2]],'ime',[[76,2]],'mintexy',[[87,1]],'usually',[[65,1],[5,1],[76,3],[71,2],[50,1],[0,1],[11,1],[39,1]],'grabbing',[[40,1]],'afford',[[76,1]],'unchanged',[[11,1]],'leftmost',[[20,1]],'approximation',[[52,1]],'cumulative',[[52,1]],'pump',[[46,1]],'maxtexx',[[87,1]],'yet',[[76,1],[0,1]],'stand',[[11,1]],'networking',[[11,1]],'resolutions',[[41,3]],'usual',[[0,1]],'provide',[[52,1],[1,1]],'logic',[[32,1],[31,1],[0,1]],'into',[[58,1],[51,1],[1,1],[46,1],[55,1],[0,5],[52,1],[92,1],[37,1]],'avoid',[[73,1],[55,1],[67,1],[45,1],[52,1],[35,1],[37,1],[63,1],[59,1],[49,1],[76,1],[34,1],[79,1]],'great',[[0,1]],'fixpixelzoom',[[72,1]],'collect',[[1,1]],'ratios',[[30,1],[64,1]],'referring',[[30,1]],'locks',[[52,1]],'refreshed',[[73,1],[52,1],[20,1]],'handled',[[50,1]],'those',[[57,1],[58,1]],'offscreenplain',[[50,1]],'logging',[[88,1],[92,1],[19,2],[11,2],[67,1]],'runtime',[[68,1],[1,1]],'calculates',[[30,1]],'terminates',[[57,1],[29,1]],'varying',[[55,1]],'windows',[[46,4],[53,2],[30,2],[0,2],[44,1],[45,1],[52,1],[74,2],[92,1],[37,8],[59,1],[9,1],[23,1],[29,1],[71,1],[76,6],[78,2],[80,1],[72,1],[85,1],[32,1],[33,1],[18,1],[57,3]],'patches',[[76,1],[79,1]],'using',[[65,1],[1,1],[46,1],[55,2],[30,1],[44,1],[0,3],[76,1],[74,1],[68,1],[58,2]],'either',[[76,1],[19,2],[2,1],[0,1]],'unacquire',[[44,3]],'disablefogging',[[61,1]],'fail',[[25,1],[52,1],[46,1]],'although',[[46,1],[0,1]],'successfully',[[76,1],[37,1]],'noimagehlp',[[76,1]],'artwork',[[0,1]],'win98',[[80,1]],'localized',[[93,1]],'multimedia',[[74,3],[65,1]],'selector',[[85,1],[30,1]],'correspond',[[55,1]],'timestretch',[[65,1]],'user',[[33,1],[40,3]],'copy',[[0,2],[80,2],[69,1],[60,1]],'how',[[29,1],[55,1],[50,1],[0,2]],'icon',[[26,3],[31,1],[2,5],[30,2],[81,1],[82,1],[32,1],[3,1],[33,1]],'die',[[33,1],[2,1]],'switched',[[38,1]],'external',[[3,1],[40,2],[93,1]],'condition',[[45,1],[52,1],[76,3]],'criteria',[[58,1]],'certain',[[33,1],[79,2],[0,1]],'pack',[[85,4]],'0x70',[[88,1]],'locking',[[11,1],[92,1]],'relative',[[68,2],[44,2]],'cooperative',[[55,2],[19,1],[44,1]],'texturehighlight',[[58,1]],'skewed',[[55,1]],'setcursorpos',[[45,1]],'configurable',[[63,1]],'smearing',[[52,1]],'blockpriorityclass',[[76,1]],'inject',[[32,1]],'exiting',[[3,1]],'pax',[[52,1]],'unresponsive',[[0,1]],'picker',[[30,1]],'bar',[[30,1],[37,1]],'maintaining',[[0,1]],'name',[[34,1],[72,1],[19,1],[79,1],[28,4]],'fullscr',[[11,1]],'black',[[52,1],[55,3],[30,1],[50,1]],'commands',[[26,1],[3,1],[40,4],[2,2],[27,1]],'suppresschild',[[34,1]],'warnings',[[47,1]],'d3d9',[[49,1],[57,2],[24,1]],'match',[[58,1],[1,1]],'developer',[[24,2],[1,1]],'based',[[63,1],[49,1]],'basically',[[55,1]],'endless',[[76,2]],'modders',[[58,1]],'stretch',[[51,1],[55,1],[74,1],[20,1],[40,1],[86,1],[65,5]],'gho',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,2],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[93,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'clipper',[[71,1],[52,2]],'path',[[9,3],[1,3],[23,1],[25,1],[2,4],[28,3],[31,5]],'identical',[[81,1]],'theory',[[46,1]],'weren',[[55,1]],'unlock',[[90,1],[52,1],[88,1],[55,1],[11,1],[37,1]],'until',[[93,1],[2,1],[26,1]],'middle',[[45,2]],'showhints',[[29,1]],'potentially',[[46,1]],'encouragement',[[24,1]],'adds',[[68,2]],'lowering',[[15,1]],'here',[[86,1],[89,1],[79,1],[84,1],[28,1]],'frames',[[73,2],[61,2],[57,2]],'suppressed',[[46,1]],'advantages',[[33,1]],'reached',[[33,1]],'outdebugstring',[[68,1]],'args',[[72,1]],'current',[[19,1],[38,1],[0,1],[45,1],[52,1],[17,1],[21,1],[49,1],[2,1],[24,1],[85,1],[3,1],[11,2]],'refresh',[[63,1],[88,2],[92,1],[11,1],[37,2]],'michael',[[24,1]],'internet',[[0,1]],'compatibility',[[55,1],[53,1],[0,2],[13,3],[78,1],[49,1],[29,1],[76,2],[60,1],[75,1],[32,1],[79,2]],'afterward',[[37,1]],'delay',[[45,2],[63,9]],'wildly',[[63,1]],'corners',[[65,1]],'string',[[85,1],[74,1],[68,1]],'yfactor',[[72,1]],'must',[[81,1],[93,1],[46,1]],'turned',[[46,1],[44,1]],'disks',[[80,1]],'decided',[[0,1]],'suspended',[[32,1]],'closer',[[50,1]],'terminated',[[86,1],[26,1],[46,1]],'border',[[45,2],[59,1],[46,1],[55,1],[40,1],[30,1]],'tight',[[73,1]],'choosing',[[1,1]],'emulation',[[55,2],[71,1],[38,1],[50,2],[52,3],[91,1],[11,1]],'processes',[[34,2],[82,1],[46,2]],'retrieved',[[81,1]],'notable',[[55,3],[76,1]],'flickering',[[71,1]],'affecting',[[25,1],[39,1]],'the',[[50,25],[0,47],[61,6],[77,10],[27,4],[15,4],[29,13],[47,7],[80,8],[2,26],[24,14],[82,4],[91,7],[32,22],[57,12],[79,4],[46,16],[38,5],[28,11],[44,22],[81,11],[12,3],[13,4],[20,10],[68,9],[64,9],[5,10],[37,28],[63,20],[21,2],[22,1],[41,14],[69,7],[43,2],[83,3],[86,12],[90,8],[92,19],[33,30],[11,39],[73,8],[88,9],[1,30],[19,15],[67,2],[74,8],[16,2],[84,1],[39,10],[59,8],[9,8],[14,3],[23,3],[49,15],[51,12],[60,3],[4,4],[71,21],[10,1],[40,7],[18,1],[7,3],[65,27],[55,72],[53,6],[30,54],[31,6],[45,37],[52,41],[93,12],[17,2],[78,7],[26,11],[25,19],[76,36],[6,8],[34,10],[72,10],[85,17],[3,10],[58,7]],'speech',[[82,1]],'off',[[1,1],[55,1],[19,1],[92,5],[3,1],[11,3]],'perform',[[57,1],[69,1],[74,1]],'better',[[51,1],[55,1],[50,1],[13,1],[52,2],[33,1],[11,1],[79,1]],'surround',[[30,1]],'straight',[[55,1]],'result',[[76,1],[74,1]],'bear',[[0,1]],'twice',[[51,1]],'fixbindtexture',[[72,1]],'modern',[[55,1],[76,2],[0,1],[61,1],[52,1],[37,1]],'green',[[2,1]],'entries',[[25,1],[2,1],[0,1],[77,2],[57,1],[39,3]],'allowed',[[55,1],[40,1]],'receives',[[45,2],[71,1]],'minimal',[[45,1],[55,2]],'located',[[0,1],[93,1],[55,1],[33,1],[5,1]],'handy',[[4,1]],'generic',[[29,1]],'adjustment',[[20,1]],'banner',[[29,1]],'mysterious',[[0,1]],'significantly',[[55,1]],'crashes',[[13,1],[46,1],[76,1],[0,1]],'execution',[[31,3],[32,2]],'hooknorun',[[33,1]],'progressive',[[52,1]],'required',[[55,1],[1,1]],'previous',[[61,1],[2,2],[68,1]],'full',[[55,1],[51,1],[74,1]],'everything',[[1,1],[0,2]],'specifications',[[52,1]],'dump',[[87,4],[55,1],[58,2]],'level',[[29,1],[55,2],[19,1],[44,2]],'shareddc',[[71,2]],'xfactor',[[72,1]],'routing',[[79,1]],'cubes',[[81,1]],'drawback',[[32,3]],'turning',[[11,1]],'rendered',[[57,1]],'vfw',[[74,1]],'english',[[85,4]],'guarantee',[[76,1]],'dll',[[49,5],[76,3],[24,3],[0,1],[34,1],[72,2],[85,3],[93,1],[57,1],[33,1],[65,2]],'making',[[44,2],[34,1],[46,1],[38,1],[50,1],[39,1]],'scaled',[[72,1],[52,2],[51,1],[71,1],[50,1]],'movie',[[74,3]],'taking',[[11,1]],'social',[[0,1]],'listen',[[46,1]],'exception',[[76,3],[65,1]],'opcode',[[76,1],[65,1]],'opengl32',[[72,1]],'detected',[[73,1],[13,1],[41,1],[55,1],[76,1]],'conversions',[[50,1]],'smack',[[73,4]],'seem',[[76,1]],'outimporttable',[[69,1]],'width',[[87,2],[55,1],[19,1],[30,6],[41,2],[10,2],[86,3]],'note',[[63,1],[55,1],[41,1],[30,1],[50,1],[81,1],[3,1],[69,1]],'release',[[45,1],[78,1],[52,1],[30,1],[0,3]],'simplify',[[28,1]],'dungeon',[[45,1]],'blitted',[[55,1],[51,1]],'horizontal',[[55,1],[86,1],[52,1]],'cover',[[74,1]],'function',[[45,1],[72,1],[12,1],[88,1],[33,1],[11,2]],'affinity',[[76,3]],'reserve',[[76,1]],'backbufattach',[[55,1]],'appear',[[52,1],[1,1],[55,1],[80,1],[64,1],[90,1]],'active',[[73,1],[3,1],[25,1],[44,1]],'temporary',[[50,1]],'behind',[[0,1]],'contents',[[46,1]],'handle',[[29,1],[46,1],[71,1],[2,2],[0,1],[76,3],[80,1],[33,1],[11,1],[37,1]],'designed',[[46,2],[29,1]],'size',[[55,1],[50,1],[30,4],[74,1],[86,1],[37,1],[63,1],[59,1],[22,1],[29,1],[51,2],[40,2],[57,1]],'allow',[[3,1],[55,1],[0,3]],'“dave',[[55,1]],'useful',[[53,1],[13,1],[52,1],[68,1],[92,3],[69,1],[37,1],[39,1],[5,1],[9,1],[15,1],[2,2],[11,2]],'16bpp',[[55,4],[38,1]],'given',[[93,1],[41,2],[2,1],[27,1]],'surface',[[73,2],[55,12],[19,1],[50,14],[61,1],[52,9],[92,1],[37,1],[59,2],[51,4],[71,2],[91,1],[57,2],[11,1]],'noticeable',[[55,1],[39,1]],'vista',[[53,1]],'packs',[[85,1]],'improve',[[55,2],[76,1],[60,1],[0,2]],'project',[[24,1],[0,4]],'oddly',[[52,1]],'golf',[[37,1]],'1mhz',[[65,1]],'bpp',[[38,4]],'produces',[[63,1],[71,1],[11,1]],'tracehooks',[[69,1]],'tricky',[[46,1],[0,1]],'ubik',[[76,1]],'perfect',[[11,1]],'programming',[[0,1]],'usb',[[1,1]],'free',[[76,1],[40,1]],'manual',[[83,1]],'along',[[76,1],[30,1],[69,1]],'rightmost',[[20,1]],'who',[[24,10]],'human',[[44,1]],'executable',[[1,1],[23,1],[29,1],[2,1],[28,1],[0,1],[33,1]],'classes',[[74,1]],'positive',[[74,1],[0,1]],'weird',[[11,1]],'realistic',[[63,1]],'keeper',[[45,1]],'specified',[[64,1]],'returns',[[76,1],[74,1]],'provides',[[18,1]],'new',[[37,1],[1,2],[25,1],[30,1],[0,1],[44,1],[34,1],[67,2],[86,1],[5,1]],'existed',[[0,1]],'shortcuts',[[0,1]],'installing',[[1,1]],'altering',[[39,1]],'little',[[29,1],[50,1],[0,2]],'attention',[[0,1]],'dragging',[[37,1],[20,1]],'adjacent',[[41,2],[51,1]],'choice',[[41,2],[33,1],[76,1]],'listbox',[[65,1]],'showtimestretch',[[65,1]],'determine',[[71,1]],'directed',[[49,1]],'cost',[[25,1],[55,1]],'providing',[[30,1]],'bother',[[0,1]],'textureformat',[[52,1]],'gray',[[2,1],[31,1]],'very',[[39,1],[15,1],[29,1],[55,3],[71,1],[76,2],[0,1],[80,1],[52,1],[3,1],[37,1]],'quality',[[55,1]],'join',[[0,1]],'clipping”',[[92,1]],'modules',[[31,1]],'limitscreenres',[[41,1]],'logged',[[69,1]],'physically',[[76,1]],'0x8ffffff',[[76,1]],'fixes',[[73,1],[76,2],[24,1],[44,1],[45,1],[90,2],[74,1],[91,1],[57,3]],'image',[[52,1],[91,1],[57,1],[11,1],[90,1]],'low',[[17,1]],'giving',[[37,1]],'ticks',[[65,1]],'outdebug',[[69,1]],'kills',[[25,1],[15,1],[46,1]],'inserts',[[5,1]],'though',[[49,1],[46,1],[52,1],[33,1],[71,1],[76,1]],'hidemultimonitor',[[37,1]],'older',[[85,1],[46,1],[41,1],[55,1],[57,1]],'learned',[[0,1]],'playback',[[73,1]],'bitmap',[[55,1],[58,1]],'functional',[[76,1]],'killing',[[2,1]],'long',[[46,3],[68,1],[0,1]],'longer',[[17,1],[9,1],[41,1],[55,1],[76,1],[0,1],[85,2]],'person',[[0,1]],'enabling',[[44,2]],'places',[[45,1],[55,1]],'duplicates',[[25,1]],'hooksmackw32',[[73,1]],'divide',[[76,1]],'refreshing',[[21,1],[37,1]],'applied',[[34,1],[23,1],[55,1],[69,1]],'cleared',[[85,1]],'setting',[[78,1],[49,1],[1,1],[76,2],[38,5],[2,2],[44,1],[0,1],[85,1],[52,1],[39,1]],'texture',[[87,9],[55,5],[61,1],[52,2],[72,2],[10,3],[58,6]],'hookopengl',[[72,1]],'improved',[[0,1]],'occupies',[[30,2]],'multiplication',[[92,1]],'foreground',[[46,1]],'configured',[[1,2],[25,1],[0,1]],'displaying',[[46,1]],'moves',[[6,4]],'scan',[[55,2]],'people',[[0,1]],'second',[[63,2],[21,1],[20,1],[19,2],[64,1],[0,3]],'discouraged',[[71,1]],'list',[[1,2],[23,1],[25,4],[6,2],[2,2],[0,2],[34,1],[80,1],[3,1],[57,1],[5,3]],'selectively',[[64,1]],'alphachannel',[[52,1]],'and',[[50,9],[0,33],[61,1],[77,1],[35,1],[15,1],[29,3],[80,3],[2,4],[24,5],[32,2],[57,3],[79,3],[46,10],[44,5],[12,3],[20,4],[68,1],[86,2],[64,2],[37,12],[63,3],[69,2],[22,1],[89,1],[41,3],[92,5],[33,5],[11,11],[73,3],[88,1],[1,7],[19,2],[67,1],[74,4],[84,1],[39,3],[59,2],[9,4],[49,5],[71,5],[10,2],[40,4],[65,6],[55,14],[53,2],[30,13],[45,10],[52,5],[93,1],[26,1],[25,3],[76,11],[34,2],[72,1],[85,8],[3,3],[58,3]],'individual',[[33,2]],'still',[[17,1],[65,1],[1,1],[29,1],[0,3],[3,1],[11,3],[37,1]],'powerful',[[76,1],[0,1]],'meaningless',[[46,1]],'racer',[[55,2],[57,1],[90,2]],'delicate',[[65,1]],'record',[[81,1],[82,1]],'before',[[1,1],[46,1],[38,1],[55,1],[0,1],[76,1],[81,1],[37,3]],'256',[[39,1],[2,1],[21,1]],'ignore',[[63,1],[52,1],[55,2],[37,1]],'lock',[[39,3],[88,1],[55,2],[90,1],[52,3],[92,2],[11,1],[37,1]],'refreshes',[[52,1]],'fps',[[63,12],[88,1],[92,1],[19,1],[11,2]],'various',[[18,1]],'mouse',[[46,3],[30,2],[44,6],[45,17],[85,1],[52,2],[69,3]],'forth',[[45,1],[46,1],[29,1]],'intercepting',[[32,1]],'modifymouse',[[45,1]],'virtualjoystick',[[45,1]],'starts',[[34,1],[93,3],[3,1],[76,1],[30,1]],'cutscenes',[[46,1]],'which',[[73,2],[55,4],[30,1],[0,1],[45,1],[50,1],[52,1],[39,1],[78,1],[29,1],[76,1],[32,1],[65,1]],'stores',[[0,1]],'war',[[55,1]],'policy',[[33,1]],'dedicate',[[0,1]],'start',[[76,1],[71,1],[31,2],[0,2],[4,2],[93,1],[86,1],[39,1]],'center',[[30,2],[44,1]],'lines',[[55,6],[11,1],[92,1]],'title',[[63,2],[30,1],[37,1]],'gaming',[[30,1],[0,1]],'differences',[[2,1]],'mci',[[74,4]],'controls',[[80,1]],'setzbufferbitdepths',[[55,1]],'require',[[45,1],[30,1],[1,1]],'diablo',[[76,2]],'activemovie',[[74,1]],'nofillrect',[[71,1]],'entirely',[[30,1],[92,1]],'syncpalette',[[71,1]],'exports',[[25,1],[57,1]],'switch',[[53,1],[52,1],[29,2]],'trouble',[[1,1],[0,1]],'work',[[1,1],[30,1],[0,2],[44,2],[52,2],[37,1],[17,1],[59,1],[76,1],[2,2],[85,1],[33,1],[7,1],[11,2]],'centering',[[45,1]],'deactivates',[[13,1]],'wait',[[46,1]],'gog',[[79,8]],'keepcursorwithin',[[45,1]],'sfb7',[[24,1],[0,2]],'references',[[24,1],[0,1]],'therefore',[[34,1]],'hooked',[[65,1],[1,1],[55,2],[19,1],[0,2],[28,2],[81,1],[16,2],[37,2],[9,1],[14,3],[76,1],[2,1],[82,1],[11,3],[58,3]],'avoiding',[[45,1],[52,1],[47,1],[80,1]],'you',[[1,11],[50,1],[0,25],[84,1],[9,2],[29,10],[49,2],[51,1],[2,2],[60,1],[80,3],[82,3],[10,1],[40,1],[7,1],[57,1],[65,1],[55,6],[38,1],[30,4],[28,3],[31,2],[45,2],[12,1],[20,2],[52,1],[81,3],[64,1],[5,1],[17,1],[63,1],[26,3],[83,1],[25,3],[86,2],[89,1],[92,2],[93,3],[34,1],[72,1],[85,1],[3,1],[11,6],[58,1]],'happening',[[55,1],[0,1]],'left',[[45,1],[55,1],[11,1],[0,3]],'immediately',[[92,1],[29,1],[47,1],[11,1],[5,1]],'pathname',[[28,2]],'moto',[[55,1]],'memory',[[76,5],[55,10],[50,1],[53,1],[52,3],[33,1]],'used',[[46,1],[19,1],[31,1],[30,4],[0,1],[44,1],[45,1],[52,3],[81,2],[86,1],[64,1],[9,2],[51,1],[76,2],[33,1],[58,1]],'restores',[[4,1],[13,1],[14,1]],'roms',[[80,1]],'coming',[[1,1]],'user32',[[37,1],[71,2],[65,1]],'reliable',[[25,1]],'directdrawsurface',[[55,1],[52,1]],'segment',[[76,1]],'its',[[1,2],[46,1],[53,1],[0,5],[45,1],[64,1],[37,3],[83,1],[9,1],[22,1],[29,2],[71,1],[2,2],[76,2],[4,1],[34,2],[85,1],[3,2],[33,2],[40,1],[65,1]],'victims',[[0,1]],'programmed',[[47,1]],'enables',[[45,1],[72,1],[9,1],[93,1],[47,1],[35,1]],'imports',[[3,1]],'sid',[[37,1]],'flushes',[[46,1]],'taskbar',[[14,1],[46,1],[30,1],[13,2],[16,3],[11,1],[37,2]],'buffer',[[55,1],[57,2],[50,3]],'sophisticated',[[33,1],[0,2]],'present',[[76,1]],'ratio',[[65,2],[55,1],[76,1],[30,7],[64,5]],'pixel',[[17,1],[22,1],[51,1],[52,4],[50,1]],'hookenabled',[[31,1]],'cursor',[[88,1],[19,2],[43,4],[45,10],[52,2],[91,1],[92,1],[69,3]],'key_wow64_32key',[[77,2]],'unpack',[[1,1]],'documentation',[[24,1]],'sporadic',[[52,1]],'react',[[92,1],[11,1],[46,2]],'introduced',[[55,1],[52,1]],'sort',[[5,2]],'negative',[[76,1]],'why',[[65,1],[29,1],[25,1],[0,4]],'suppressdxerrors',[[52,1]],'disablemaxwindowedmode',[[76,1]],'sometimes',[[1,1],[25,1],[13,1],[79,2],[11,1],[65,1]],'physical',[[80,2]],'problems',[[9,1],[46,1],[1,1],[71,1],[89,1],[85,1],[65,1]],'style',[[37,5]],'layer',[[55,1],[71,1]],'didn',[[92,1],[46,1],[80,1],[11,1]],'crazy',[[15,1]],'“slow',[[69,1]],'happens',[[71,1]],'hooking',[[49,3],[29,1],[71,1],[31,1],[0,2],[28,1],[72,1],[32,1],[35,1],[69,1]],'discussion',[[1,1]],'bring',[[37,1]],'hack',[[87,4],[76,2],[58,2]],'advantage',[[50,1],[0,1]],'prompt',[[3,1]],'context',[[71,3],[0,1]],'number',[[63,1],[67,1],[76,1],[33,1],[30,1],[28,1]],'rom',[[74,1]],'close',[[29,4],[14,1]],'nick',[[0,1]],'make',[[37,2],[65,1],[55,1],[0,1],[52,1],[33,1],[64,1],[58,1]],'bmx”',[[55,1]],'known',[[1,1],[44,1],[74,1],[92,1],[57,1],[11,1],[39,1]],'demonstrations',[[0,1]],'adjusting',[[45,1],[65,1]],'temporarily',[[11,1]],'portable',[[1,1]],'but',[[1,2],[50,8],[0,5],[61,2],[39,1],[59,1],[9,1],[29,2],[49,1],[51,1],[2,2],[71,1],[4,1],[32,1],[40,1],[57,1],[65,2],[55,6],[38,3],[30,1],[28,1],[31,1],[45,1],[52,3],[81,1],[92,1],[86,2],[64,1],[37,4],[17,1],[63,2],[26,1],[83,1],[25,1],[41,1],[76,3],[33,4],[11,2]],'benefit',[[73,1]],'may',[[73,1],[50,1],[0,3],[61,1],[74,3],[59,1],[9,2],[29,3],[49,1],[80,1],[2,1],[60,1],[32,2],[57,3],[46,2],[55,8],[31,1],[44,1],[64,1],[37,2],[17,1],[25,1],[76,2],[72,1],[33,1]],'interfering',[[76,1]],'clearing',[[71,1]],'teachers',[[0,1]],'relied',[[76,1]],'proper',[[57,1],[25,1],[55,2],[2,1],[0,2]],'debug',[[9,2],[0,1],[85,6],[68,2],[93,2],[69,1]],'fixclipperarea',[[71,1]],'bigger',[[63,1]],'addresses',[[33,1]],'research',[[0,1]],'20msec',[[63,1]],'both',[[63,1],[55,1],[33,1],[24,1]],'any',[[1,1],[46,4],[55,1],[0,6],[81,2],[13,1],[52,1],[92,1],[93,2],[37,2],[27,1],[26,1],[41,1],[47,1],[43,1],[80,1],[82,1],[34,2],[72,1],[85,1],[3,1],[11,1],[58,1]],'typing',[[88,1]],'synchronized',[[76,1]],'anti',[[0,1]],'ensuring',[[46,1]],'systemmemory',[[55,2]],'slowing',[[69,1]],'default',[[50,1],[39,1],[9,1],[29,1],[49,1],[51,2],[2,1],[24,1],[4,1],[71,1],[32,1],[55,1],[30,2],[31,1],[52,5],[20,1],[93,1],[37,2],[26,1],[76,2],[41,1],[72,1],[34,2],[85,5],[33,3],[58,1]],'declare',[[53,1]],'store',[[86,1]],'normal',[[51,1],[1,1],[92,1],[11,3],[2,1]],'keepaspectratio',[[30,3]],'decently',[[37,1]],'evolution',[[0,2]],'slows',[[11,1],[51,1]],'plain',[[55,1]],'gettickcount',[[68,1]],'clip',[[11,1]],'creates',[[55,1],[33,1],[37,1]],'overlap',[[63,1]],'about',[[22,1],[1,1],[29,1],[19,1],[24,1],[0,1],[46,1],[92,1],[11,1],[37,1]],'artifacts',[[55,1],[61,1]],'gdinone',[[71,1]],'high',[[64,2]],'manually',[[83,1],[9,1],[93,1],[55,1]],'whose',[[57,1],[24,1],[0,1]],'value',[[87,6],[55,5],[19,1],[77,2],[52,1],[74,1],[64,1],[63,2],[41,1],[76,3],[2,3],[33,1],[65,3]],'can',[[1,8],[50,1],[0,2],[84,1],[9,3],[29,2],[47,1],[49,1],[2,3],[60,1],[71,2],[80,1],[40,1],[57,1],[65,3],[55,7],[30,2],[28,2],[31,1],[44,3],[13,1],[20,1],[52,1],[68,1],[64,2],[37,2],[63,1],[69,2],[26,1],[81,2],[25,1],[76,3],[92,5],[93,1],[34,1],[85,3],[11,5],[58,1]],'koch',[[24,1]],'calculating',[[58,1]],'timers',[[65,4]],'interesting',[[50,1]],'breaks',[[79,1]],'programs',[[46,4],[55,6],[31,1],[0,3],[44,1],[45,3],[61,2],[93,1],[37,3],[5,1],[9,1],[76,2],[71,1],[2,1],[85,2],[32,1],[33,1],[57,1]],'operations',[[73,1],[46,1],[53,2],[50,2],[44,1],[77,2],[74,1],[68,1],[92,1],[69,6],[37,1],[63,2],[29,1],[76,2],[40,3],[11,1]],'widechar',[[33,2]],'explorer',[[5,1]],'deletes',[[3,1],[25,1],[7,1],[5,1]],'important',[[63,1],[81,1],[83,1]],'takes',[[50,1],[0,1]],'disables',[[45,1],[61,1],[85,1],[41,1],[71,1],[76,1]],'uniquely',[[58,1]],'pieces',[[24,1]],'monitor',[[0,2],[46,1],[41,1],[55,1],[30,6],[37,2]],'unconnected',[[33,1]],'controlled',[[45,4],[92,1]],'checkadmin',[[85,2]],'receiving',[[45,1]],'move',[[46,1],[55,2],[0,1],[92,2],[86,1],[5,2],[59,2],[26,2],[25,2],[6,1],[3,2],[40,4],[11,3]],'none',[[58,1],[67,1],[49,2],[93,1],[50,2],[0,1]],'extensions',[[57,1]],'fontbypass',[[76,1]],'hard',[[1,1],[76,1],[33,1],[80,1]],'supposed',[[45,1],[37,1]],'classic',[[41,1],[0,1]],'showfps',[[63,1]],'plocktoggle',[[88,1],[92,1]],'shooters',[[0,1]],'meier',[[37,1]],'typical',[[41,1]],'lockcolordepth',[[52,1]],'browser',[[24,1]],'upon',[[0,1]],'chat',[[0,1]],'cease',[[76,1]],'xyz',[[85,1]],'runs',[[9,1],[25,1],[2,1],[28,1],[52,1],[93,1],[33,1],[11,1]],'exits',[[3,1],[93,1],[0,1]],'multiple',[[72,1],[85,1],[25,1],[76,1],[80,1],[37,1]],'this',[[50,4],[0,13],[61,4],[29,5],[47,2],[80,4],[2,2],[24,1],[82,2],[91,1],[32,6],[57,10],[79,5],[46,10],[38,1],[28,1],[44,7],[81,2],[12,1],[13,2],[20,1],[68,2],[64,4],[5,1],[37,11],[63,3],[21,1],[69,3],[41,1],[86,1],[90,2],[92,6],[33,12],[11,9],[73,2],[1,4],[19,1],[74,2],[39,3],[59,1],[9,5],[49,2],[51,2],[71,4],[60,1],[10,1],[7,3],[65,9],[55,23],[30,4],[31,3],[45,10],[52,18],[93,1],[17,1],[78,1],[25,5],[76,16],[34,6],[72,3],[85,2],[3,1],[58,2]],'operated',[[0,1]],'elevate',[[29,1]],'more',[[1,1],[55,1],[30,1],[0,4],[31,1],[44,1],[52,1],[64,2],[69,1],[63,1],[23,1],[25,1],[76,2],[2,1],[32,1],[57,1],[65,1]],'polling',[[45,2]],'peekmessage',[[46,1]],'noflipemulation',[[52,1]],'essential',[[74,1],[29,1]],'determined',[[65,1]],'impact',[[76,1],[57,1]],'ago',[[0,1]],'accelerated',[[65,1],[55,1],[11,1],[50,1]],'factor',[[92,1],[20,1]],'associate',[[7,1]],'focused',[[30,1]],'information',[[37,1],[69,1],[22,1],[23,1],[29,1],[19,2],[24,1],[83,1],[92,1],[11,1],[18,1]],'ignored',[[55,1],[71,1],[30,1]],'forces',[[29,1],[55,6],[53,1],[43,2],[44,2],[60,2],[52,1],[92,1],[57,1],[11,1],[37,3]],'glories',[[0,1]],'directx10',[[49,2]],'lot',[[0,1]],'use',[[65,1],[1,1],[55,4],[19,1],[0,1],[44,1],[61,1],[52,1],[93,1],[64,1],[37,1],[69,1],[49,1],[76,3],[82,1],[34,2],[72,2],[85,2],[33,2],[79,2],[58,1]],'cdromdrivetype',[[80,1]],'involving',[[52,1]],'contributed',[[24,1]],'acquire',[[44,1],[29,1]],'ddrawex',[[49,1]],'swapeffect',[[60,1]],'represent',[[88,1]],'intended',[[11,1]],'affects',[[0,1],[45,1],[41,1],[39,1]],'ram',[[76,1]],'against',[[50,1]],'refuse',[[15,1]],'createprocess',[[34,2]],'contains',[[55,1],[1,1]],'auto',[[73,1],[9,1],[52,2]],'what',[[49,1],[29,1],[55,2],[71,1],[0,3]],'have',[[73,1],[1,1],[55,3],[30,2],[0,4],[44,1],[45,1],[52,1],[9,1],[15,1],[71,1],[2,1],[80,1],[32,1],[33,1],[11,1]],'concurrent',[[69,1]],'position',[[86,4],[59,1],[88,1],[30,8],[44,1],[45,5],[92,1],[20,1],[40,2],[11,2],[37,1]],'hookdi',[[44,1]],'years',[[0,1]],'crash',[[3,1],[55,1],[76,1],[44,1]],'real',[[76,1],[50,2]],'paths',[[9,2]],'graphic',[[52,1],[55,2],[33,1],[71,1]],'ensures',[[73,1],[52,1]],'created',[[34,3],[52,1],[32,1],[55,2],[67,1],[37,1]],'other',[[65,1],[46,1],[30,2],[28,1],[0,3],[44,2],[13,1],[50,1],[52,2],[92,1],[37,2],[63,3],[29,2],[76,6],[71,3],[24,1],[33,1],[11,1],[57,2]],'efficient',[[55,1]],'128',[[57,1]],'element',[[76,1]],'simulator',[[45,1]],'functionality',[[0,1]],'ramp',[[39,2]],'quickly',[[92,1],[11,1],[69,1]],'olly',[[24,1]],'suppressing',[[53,1]],'clean',[[61,1],[76,1],[57,2],[90,1]],'fixmoviecolor',[[74,1]],'setwindowshook',[[32,2]],'gone',[[15,1]],'returned',[[52,1],[41,1],[55,2]],'append',[[67,1]],'hashed',[[58,1]],'discontinued',[[0,2]],'trail',[[91,1],[0,1]],'put',[[0,1]],'hijack',[[0,1]],'inactive',[[44,1],[0,1]],'defaults',[[28,1],[1,1]],'panel',[[5,2],[39,1],[65,1],[78,1],[19,1],[27,3]],'request',[[55,2]],'invoke',[[76,1]],'alternatively',[[1,1]],'they',[[65,1],[1,1],[55,2],[30,1],[0,1],[44,2],[77,2],[74,1],[68,1],[81,1],[92,2],[39,3],[37,2],[76,1],[2,1],[33,3],[11,2],[58,1]],'map',[[79,1],[11,1],[85,1]],'permissions',[[85,1],[9,1],[29,1]],'then',[[64,1],[9,1],[1,1],[25,1],[53,1],[50,1],[12,1],[92,1],[11,1],[37,2]],'language',[[85,8],[84,1]],'requested',[[55,2],[52,1]],'badly',[[11,1]],'ignoring',[[44,1]],'mention',[[28,1]],'replacement',[[58,1]],'toggle',[[92,3],[88,3],[11,7]],'ways',[[65,1],[0,2]],'power',[[55,1],[57,2],[76,1],[0,1]],'mainly',[[39,1],[9,1],[0,1]],'taken',[[32,1]],'ddraw',[[52,1],[49,1],[51,1],[55,3],[71,2],[90,1]],'platforms',[[17,1],[61,1],[77,2],[76,1],[0,1]],'identify',[[58,1]],'devoted',[[74,1]],'hid',[[44,2]],'unpleasant',[[45,1]],'rate',[[55,1],[63,1]],'windowing',[[11,1],[49,1]],'example',[[63,1],[55,3],[30,1],[0,1],[28,1],[52,1],[57,1],[64,1]],'because',[[15,1],[30,1],[2,1],[0,1],[50,1],[52,1],[61,1],[33,1],[37,1]],'additional',[[57,1],[1,1],[55,1],[19,1],[31,1],[35,1]],'rgb565',[[55,2]],'timetoggle',[[88,1],[92,1]],'translate',[[0,1]],'pitch',[[55,4],[50,1],[90,1]],'normally',[[45,1],[0,2]],'behave',[[76,1]],'reset',[[57,2],[60,1]],'repeated',[[46,1]],'would',[[25,1],[55,1],[50,1],[76,2]],'corresponding',[[63,1],[49,1],[25,1],[55,1],[45,1],[81,1],[52,1],[85,3],[33,2],[39,1]],'group',[[44,2]],'data',[[25,1],[52,2]],'reposition',[[55,1]],'improving',[[55,1]],'appended',[[63,1]],'hopefully',[[0,1]],'target',[[61,2]],'association',[[47,1]],'privileged',[[76,3]],'unlimited',[[41,1]],'smackw32',[[73,2]],'abnormally',[[2,1]],'mmporpg',[[0,1]],'blitfrombackbuffer',[[52,1]],'borders',[[39,1],[59,1],[37,2]],'compensates',[[45,1]],'warhammer',[[55,1]],'tables',[[0,1]],'original',[[25,1],[55,1],[50,1],[24,1],[52,1],[33,6],[40,1]],'texturehack',[[58,1]],'four',[[30,2]],'hybridmode',[[50,1]],'contexts',[[57,1],[71,1]],'explicitly',[[76,1],[49,1],[52,1]],'contain',[[2,1],[29,1]],'developed',[[46,1],[55,1],[24,1],[0,1]],'activation',[[32,1],[28,1]],'applies',[[52,1]],'cpuslowdown',[[64,3]],'parent',[[28,1],[34,2],[37,3]],'idle',[[4,1],[26,1],[93,1],[19,1],[2,1]],'tycoon',[[46,1]],'grayscale',[[55,1]],'import',[[9,1],[1,2],[3,1],[69,2],[0,1]],'highlight',[[58,2]],'remap',[[61,1],[71,2],[74,1]],'aspect',[[55,1],[30,7],[0,1]],'custom',[[0,2],[72,2],[85,1],[79,2],[58,1]],'switching',[[72,1],[76,2],[65,1]],'flexible',[[55,1]],'counters',[[63,1]],'played',[[74,1]],'typically',[[45,1],[73,1],[41,1],[37,1]],'returning',[[76,1]],'hex',[[88,1]],'enter',[[31,1],[28,1]],'large',[[69,1]],'maxtexy',[[87,1]],'cleartarget',[[61,1]],'named',[[67,1],[0,1]],'sufficient',[[1,1]],'objects',[[55,2]],'diagonal',[[57,1]],'processing',[[87,4],[46,1],[47,2],[45,1],[52,1],[10,1]],'assign',[[11,1],[12,1]],'count',[[68,1]],'applications',[[63,1],[29,1],[55,1],[33,1],[76,1],[0,3]],'bundles',[[2,1]],'hookdi8',[[44,1]],'impress',[[0,1]],'minhook',[[24,1]],'see',[[88,1],[1,2],[19,2],[0,2],[9,2],[23,1],[29,1],[49,1],[91,1],[32,1],[10,1],[57,2],[18,1],[65,1],[46,1],[55,1],[30,1],[31,1],[90,2],[13,4],[20,1],[52,2],[92,1],[93,1],[5,3],[25,2],[76,1],[34,1],[3,1],[11,7],[58,1]],'ready',[[4,1],[26,2],[19,1],[2,2]],'refreshonresize',[[37,1]],'blit',[[73,2],[52,6],[51,1],[53,1],[50,1]],'involved',[[49,1],[0,2]],'success',[[76,1],[71,1]],'reduces',[[64,1]],'posy',[[86,1]],'directx1',[[29,1]],'fails',[[33,1],[52,1],[71,1]],'connected',[[45,1]],'ctrl',[[12,1]],'allows',[[50,1],[28,1],[81,1],[12,1],[20,1],[64,1],[25,2],[80,1],[82,1],[72,1],[85,1],[10,1],[40,1],[11,3],[65,1]],'milliseconds',[[63,1]],'despite',[[76,1],[0,1]],'global',[[8,1],[5,2]],'invasive',[[0,1]],'clears',[[43,1]],'problem',[[1,1],[41,1],[57,3],[50,1],[76,3]],'resize',[[92,2],[55,1],[40,2],[11,2],[37,2]],'loading',[[85,1]],'out',[[58,1]],'emulators',[[55,1]],'directdraw',[[73,1],[55,9],[19,1],[50,1],[0,2],[53,1],[61,1],[52,6],[69,2],[39,1],[51,1],[29,1],[76,2],[71,4],[91,1]],'vulnerable',[[46,1]],'tsuda',[[24,1]],'interlaced',[[55,2]],'altered',[[50,2],[65,1],[33,1],[40,1],[0,1]],'toggles',[[11,7],[92,3]],'many',[[69,1],[1,3],[57,1],[24,1],[0,3]],'injected',[[0,1]],'happen',[[45,1],[2,1]],'alter',[[0,2],[20,1],[93,1],[65,1]],'expansions',[[73,1],[35,1]],'lockedsurface',[[50,1]],'resuming',[[64,1]],'obfuscated',[[33,3]],'directx9',[[49,3],[29,1]],'act',[[38,1]],'direct3d8',[[57,1],[50,1]],'entire',[[30,2],[63,1],[11,1],[39,1]],'indicated',[[32,1]],'desire',[[63,1]],'transitioned',[[0,1]],'uses',[[0,1],[52,1],[93,1],[33,1],[30,1],[24,1]],'def',[[30,1]],'routines',[[33,2]],'narzou',[[24,1]],'take',[[81,1],[52,1],[46,1],[50,1],[37,1]],'cases',[[1,1],[31,1],[0,2],[30,1],[28,1],[45,3],[50,1],[52,2],[37,1],[59,1],[49,1],[76,1],[71,1],[60,1],[33,5]],'seen',[[19,1],[69,1]],'primary',[[73,1],[51,2],[55,5],[19,1],[50,12],[30,1],[45,1],[71,2],[52,5],[37,2]],'produce',[[65,1],[93,1],[55,1],[2,1],[64,1]],'general',[[0,1],[25,1],[76,1],[37,1]],'hookdlls',[[33,1]],'installation',[[0,1]],'zbuffer',[[55,1],[57,2],[90,1]],'randomly',[[63,1],[58,1]],'corresponds',[[49,1],[11,1],[20,1]],'bitmaps',[[58,1]],'embedded',[[85,1],[74,1]],'email',[[0,1]],'inside',[[40,1],[52,1]],'consider',[[92,1],[11,1],[69,1]],'resembles',[[32,1]],'values',[[9,1],[88,1],[41,1],[71,1],[55,2],[30,3],[81,3],[77,2],[39,1]],'last',[[9,2],[15,1],[49,1],[76,2],[30,1],[80,1]],'multi',[[30,1],[37,1]],'polls',[[45,1]],'discrepancy',[[55,1]],'subtopic',[[18,1]],'usable',[[67,1]],'systems',[[76,1],[52,1],[0,1]],'heavily',[[90,1]],'robin',[[52,1],[91,2]],'processmessage',[[73,1]],'priority',[[15,1],[76,2],[64,1]],'alters',[[55,1],[0,1]],'starting',[[1,1],[41,1],[38,1],[37,1]],'respectful',[[50,1]],'red',[[2,1]],'nowinposchanges',[[46,1]],'reason',[[1,1],[25,1],[29,1],[76,1],[0,1]],'whatever',[[41,1]],'doom',[[33,1]],'minimize',[[12,1],[14,1]],'dumped',[[58,1]],'tog',[[11,1]],'setdisplaymode',[[52,1]],'try',[[59,1],[1,2],[29,1],[50,1],[0,1],[85,1],[52,1],[92,1],[11,1],[37,1]],'particularly',[[55,1],[50,1]],'launcher',[[28,1]],'easily',[[65,1],[46,1],[55,1],[0,1]],'palettized',[[55,1],[76,1]],'referred',[[30,1]],'borrowed',[[30,1]],'strength',[[0,1]],'support',[[55,1],[80,1],[0,3]],'activateapp',[[37,2]],'seconds',[[46,2]],'neutralize',[[76,1]],'select',[[30,2]],'possibly',[[76,1],[37,1]],'handlealtf4',[[47,1]],'coordinates',[[46,3],[19,1],[30,8],[71,2],[45,5],[74,2],[92,1],[86,1]],'renderers',[[71,1]],'forcing',[[52,1],[74,1]],'loops',[[76,1]],'restoring',[[2,1],[9,1]],'term',[[0,1]],'tab',[[81,1],[85,1],[76,2],[82,1]],'dinput',[[44,1]],'potential',[[9,1]],'commander',[[55,1]],'resolve',[[89,1]],'visible',[[72,1],[26,1],[85,1],[11,1],[37,1]],'accurate',[[63,1],[52,1]],'entering',[[31,1]],'speeds',[[11,1]],'funkyfr3sh',[[24,1]],'glbindtexture',[[72,1]],'good',[[0,1]],'iconized',[[2,1],[93,2]],'hidehwcursor',[[43,1]],'outside',[[45,4],[30,1],[0,1]],'lets',[[17,1],[55,1]],'scaling',[[51,1]],'attribute',[[52,1]],'boundaries',[[58,1]],'sizy',[[86,1]],'program',[[73,1],[88,1],[1,10],[19,1],[0,5],[27,1],[59,1],[9,2],[14,3],[15,1],[29,3],[2,6],[24,1],[4,1],[47,2],[71,4],[32,6],[82,1],[57,1],[65,3],[46,3],[55,5],[53,1],[30,2],[28,4],[31,3],[44,6],[45,3],[81,1],[92,3],[86,1],[64,3],[5,2],[37,4],[63,3],[26,4],[69,2],[25,7],[76,10],[78,1],[93,2],[34,3],[85,1],[3,1],[33,6],[11,6]],'table',[[69,2]],'quarter',[[63,1]],'threaded',[[0,1]],'these',[[65,1],[88,1],[1,1],[46,2],[55,1],[30,1],[0,5],[31,1],[50,1],[12,1],[52,1],[61,1],[81,3],[39,3],[9,2],[49,1],[76,1],[71,2],[2,1],[34,1],[79,1],[58,1]],'enablehotkeys',[[47,1]],'nopaletteupdate',[[52,1]],'ignores',[[31,1]],'finds',[[74,1],[29,1],[2,1],[58,1]],'descriptive',[[28,1]],'look',[[80,1],[29,1]],'combined',[[76,1]],'old',[[69,1],[55,3],[76,5],[80,1],[0,5],[45,1],[61,1],[44,1],[92,1],[11,1],[65,2]],'interfere',[[44,1]],'executables',[[33,2],[69,1]],'some',[[1,2],[50,1],[0,6],[61,1],[39,1],[59,1],[9,1],[29,1],[47,1],[49,1],[60,1],[80,3],[82,1],[32,4],[57,3],[79,1],[65,1],[46,4],[55,10],[38,1],[31,2],[28,2],[44,2],[45,7],[52,4],[92,2],[69,2],[37,6],[17,1],[83,1],[22,1],[41,1],[76,6],[34,1],[72,1],[33,3],[11,1]],'cliptoggle',[[88,1],[92,1]],'colored',[[0,1]],'normalizeperfcount',[[65,1]],'sites',[[0,1]],'bilspelet',[[52,1]],'noddexclusivemode',[[55,1]],'hook',[[73,1],[1,1],[19,1],[31,2],[44,2],[45,1],[93,1],[35,3],[37,1],[69,1],[26,1],[29,1],[49,3],[2,2],[4,3],[34,6],[72,3],[32,2],[3,2],[33,6],[79,2]],'blt',[[52,1]],'parameter',[[31,1],[1,1]],'clumsy',[[0,2]],'built',[[1,2],[85,1],[0,1]],'comes',[[83,1],[1,1],[57,1],[2,1]],'colors',[[21,1],[51,1],[55,1],[50,1],[39,4]],'unique',[[33,1]],'opengl',[[61,1],[49,1],[72,11],[50,1],[0,1]],'ends',[[9,1]],'complex',[[32,1],[1,1]],'exactly',[[29,1]],'emulates',[[45,1],[55,1],[44,1]],'forceclipper',[[52,1]],'16bit',[[57,1]],'erase',[[67,1]],'modify',[[5,1],[49,1],[25,3],[27,1]],'exe',[[34,1],[1,1],[68,1],[0,1]],'iii',[[33,1]],'imposed',[[76,1]],'override',[[81,1],[77,1],[80,1]],'maximumres',[[41,1]],'toggling',[[11,1],[92,1]],'fine',[[65,1],[20,1]],'she',[[24,1]],'flipemulation',[[52,1]],'normalizes',[[65,1]],'fill',[[55,1],[11,1],[30,2]],'transformation',[[50,1]],'version',[[78,2],[49,3],[1,1],[55,5],[19,3],[24,1],[28,1],[76,1],[52,1],[93,1],[33,1]],'d3d',[[57,1],[59,4]],'consistent',[[25,1]],'decrement',[[55,1]],'suppressrelease',[[52,1],[37,1]],'expressed',[[63,1]],'noperfcounter',[[76,1]],'except',[[80,1],[30,1]],'control',[[0,1],[92,1],[11,1],[65,3]],'technique',[[49,2],[32,2],[33,3],[65,1]],'missing',[[77,2],[9,1],[85,1]],'surfaces',[[52,5],[55,4],[53,1],[50,1]],'method',[[61,2],[52,3],[32,1],[55,2],[33,2]],'disablemaxwinmode',[[76,1]],'rights',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,2],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[93,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'exit',[[92,1],[3,1],[47,1],[11,1],[39,1]],'saveload',[[29,1]],'causes',[[78,1],[46,1],[55,1],[76,2],[45,1],[85,1],[93,1],[79,1]],'calculations',[[46,1]],'characteristic',[[50,1]],'game',[[73,1],[1,3],[50,2],[0,12],[39,2],[9,1],[29,2],[47,1],[49,1],[80,1],[91,1],[46,1],[55,5],[38,2],[44,3],[45,4],[90,1],[13,2],[52,9],[92,4],[64,1],[37,5],[76,2],[3,3],[33,5],[11,7],[58,1]],'upperleft',[[30,1]],'assume',[[65,1]],'initial',[[65,2],[41,2],[38,1],[30,6],[2,1],[33,1],[86,3],[5,1]],'direct3d',[[59,1],[71,1],[0,1],[90,2],[61,4],[56,1],[69,2],[57,1]],'tons',[[11,1],[92,1]],'once',[[21,1],[1,1],[26,1],[19,1],[0,1],[44,1],[20,1],[3,1],[33,1]],'recoverscreenmode',[[37,1]],'malfunctions',[[46,1]],'copes',[[55,1]],'flip',[[91,1],[52,5],[60,1]],'clipping',[[45,4],[52,3],[88,1],[92,1],[71,1],[11,1]],'filenames',[[58,2]],'storing',[[47,1]],'holds',[[83,1]],'made',[[53,1],[71,1],[33,2],[50,1],[0,1]],'uncommon',[[69,1],[46,1]],'restart',[[29,1]],'plan',[[58,1]],'flipex',[[60,1]],'stretches',[[74,1],[65,1]],'changes',[[71,1],[50,1],[30,1],[0,3],[34,1],[52,1],[81,1],[39,1]],'outcursortrace',[[69,1]],'pretending',[[0,1]],'inspect',[[20,1]],'refcount',[[55,2]],'colordepth',[[19,1]],'minimized',[[14,1]],'copyright',[[87,1],[50,1],[0,1],[61,1],[77,1],[56,1],[35,1],[27,1],[15,1],[29,1],[47,1],[80,1],[2,1],[24,1],[82,1],[48,1],[32,1],[91,1],[57,1],[79,1],[46,1],[38,1],[28,1],[44,1],[81,1],[12,1],[13,1],[20,1],[36,1],[64,1],[5,1],[37,1],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,1],[83,1],[86,1],[89,1],[90,1],[92,1],[33,1],[11,1],[73,1],[88,1],[1,1],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,1],[9,1],[14,1],[23,1],[49,1],[51,1],[54,1],[4,1],[60,1],[66,1],[71,1],[10,1],[40,1],[18,1],[7,1],[65,1],[55,1],[53,1],[30,1],[31,1],[45,1],[62,1],[42,1],[52,1],[93,1],[8,1],[17,1],[78,1],[26,1],[25,1],[70,1],[6,1],[76,1],[34,1],[72,1],[75,1],[3,1],[85,1],[58,1]],'nonresponsive',[[73,1]],'cornes',[[63,1]],'effect',[[63,1],[49,1],[47,1],[55,1],[30,1],[60,2],[76,2],[61,1],[52,1],[72,1],[81,1]],'interpolates',[[55,1]],'fullscreen',[[46,2],[55,2],[19,1],[30,6],[0,6],[44,2],[45,1],[50,1],[52,1],[86,1],[69,1],[39,2],[37,4],[29,2],[76,1],[71,3],[57,1],[11,3]],'blackwhite',[[55,1]],'life',[[33,1]],'10%',[[65,1]],'fixparentwin',[[37,1]],'web',[[24,1]],'down”',[[69,1]],'255',[[39,1]],'completely',[[32,1]],'informational',[[18,1]],'through',[[9,1],[71,2],[31,1],[50,1],[45,1],[12,1],[74,1],[40,1],[11,1]],'kageyu',[[24,1]],'locksyscolors',[[39,1]],'suppressclipping',[[52,1]],'influences',[[50,1]],'fixpitch',[[55,1]],'suppress',[[55,1],[71,2],[76,2],[44,1],[34,1],[52,3],[57,2],[37,1]],'scale',[[71,2],[51,1]],'optimizations',[[50,1]],'fixglobalunlock',[[76,1]],'track',[[55,1],[49,1]],'legacy',[[76,2],[0,1]],'lost',[[44,1],[46,1],[0,1]],'are',[[73,1],[88,1],[1,2],[50,6],[0,7],[77,4],[74,3],[39,1],[9,1],[49,3],[47,1],[57,4],[40,2],[65,3],[46,2],[55,3],[53,1],[30,7],[44,2],[45,5],[12,1],[20,1],[52,1],[86,1],[64,1],[69,2],[17,1],[83,1],[76,4],[85,3],[33,2],[11,1],[58,2]],'releasing',[[30,1]],'others',[[45,1]],'getsystemtime',[[65,1]],'fillrect',[[71,3]],'greatly',[[45,1]],'parallel',[[0,3]],'picks',[[76,1]],'notes',[[82,3]],'printscreen',[[44,1]],'leaving',[[4,1],[55,1],[11,1]],'filename',[[72,1],[93,2],[67,1],[28,1]],'proxy',[[24,2]],'colorfix',[[76,1]],'holding',[[12,1]],'centered',[[30,3]],'aeroboost',[[53,1]],'load',[[93,1],[85,3],[29,1]],'resources',[[45,2],[85,2],[76,2],[0,1]],'skip',[[63,2],[34,1],[46,2],[44,1]],'gdimode',[[50,1]],'results',[[55,2]],'hookchildwin',[[33,1]],'forcewinresize',[[37,1]],'directdraw8',[[57,1]],'experiencing',[[65,1]],'outdxwintrace',[[69,1]],'hogging',[[45,1]],'local',[[2,1]],'enough',[[52,1],[92,1],[33,3],[11,1]],'limits',[[10,1],[65,1]],'surfacebuffer',[[50,1]],'flow',[[0,2],[20,1],[65,3]],'gdi',[[51,2],[71,12],[50,3],[45,2],[52,1],[11,2]],'prevents',[[39,1],[55,1],[37,3]],'skips',[[63,1],[74,1]],'incredibly',[[0,1]],'detect',[[45,1],[78,1],[49,1],[32,1]],'queue',[[52,2],[46,7]],'replaced',[[55,1],[58,1]],'shims',[[18,1],[23,3]],'zbufferclean',[[57,1]],'emulatebuffer',[[50,2]],'extend',[[34,2],[0,1]],'run',[[1,5],[55,1],[30,1],[0,9],[28,2],[31,1],[13,1],[69,1],[39,2],[29,4],[25,1],[41,1],[2,1],[76,2],[85,1],[32,1],[3,1],[33,7],[65,1]],'interface',[[1,2],[55,1],[19,1],[31,1],[0,1],[44,1],[50,1],[9,1],[15,1],[29,1],[2,4],[32,3],[33,1]],'hood',[[52,1],[91,2]],'pure',[[71,1]],'cinematics',[[47,1]],'build',[[85,1]],'three',[[33,1],[44,1]],'random',[[34,1]],'quiet',[[93,1]],'over',[[30,2],[0,1]],'aqrit',[[24,1]],'aware',[[71,1],[11,1]],'relevant',[[13,1]],'distributed',[[79,1]],'mirra',[[55,1]],'fact',[[52,1],[0,1]],'definition',[[1,1]],'unnotify',[[76,1],[29,1]],'simulating',[[76,2],[65,1]],'accepts',[[93,1]],'interactions',[[76,1],[71,1]],'attachable',[[55,2]],'depending',[[49,1],[19,1],[30,1],[57,1]],'non',[[55,1],[33,1],[44,2]],'patching',[[33,3],[24,1]],'minimizes',[[9,1],[14,1]],'playability',[[45,1]],'diablotweak',[[76,1]],'clone',[[25,1]],'habit',[[45,1]],'description',[[1,1]],'immediate',[[81,1]],'patient',[[0,1]],'anywhere',[[0,1]],'compressed',[[55,1],[1,1]],'advancing',[[11,1]],'grow',[[69,1]],'duplicate',[[25,1]],'sleepwalker',[[37,1]],'resources_xyz',[[85,1]],'viewport',[[61,1]],'environment',[[0,4],[71,1],[53,1],[50,1],[28,1]],'sharedkeyboard',[[44,1]],'“force',[[92,1]],'somewhere',[[0,1]],'solutions',[[1,1]],'much',[[55,1],[0,1]],'erasing',[[13,1]],'selecting',[[25,1],[30,1]],'false',[[85,3]],'tells',[[63,1],[9,1],[29,1],[33,2],[38,1]],'performance',[[65,3],[55,2],[76,4],[60,1],[0,1]],'properties',[[78,1]],'cdrom',[[80,7]],'hurt',[[29,1]],'initially',[[93,1]],'please',[[0,1]],'embeds',[[65,1]],'poor',[[55,1]],'hacker',[[33,1]],'critical',[[52,1]],'resources_',[[85,1],[93,1]],'been',[[30,1],[0,1]],'producing',[[63,1],[57,2]],'mode',[[50,9],[61,2],[39,1],[9,2],[29,2],[49,2],[51,1],[60,1],[71,3],[80,1],[32,4],[57,2],[55,10],[38,3],[30,3],[44,1],[45,1],[53,5],[13,3],[52,2],[93,1],[86,1],[69,1],[37,3],[76,1],[85,3],[11,11]],'injectsuspended',[[32,1]],'gui',[[83,1],[85,1],[9,1],[86,2]],'per',[[17,1],[63,2],[21,1],[20,1],[19,2]],'welcome',[[24,1]],'pronounced',[[55,1]],'uncompressed',[[55,3]],'null',[[55,1]],'after',[[5,1],[32,1],[3,1],[80,1],[2,2],[0,2]],'were',[[0,1],[61,2],[76,2],[37,1]],'clicking',[[26,2],[1,1],[25,2],[2,1],[0,1],[20,1]],'hidetaskbar',[[37,1]],'win7',[[76,1],[46,1]],'ansi',[[33,2]],'shortage',[[52,1]],'should',[[58,1],[65,1],[49,2],[46,3],[55,2],[76,3],[0,1],[44,2],[45,1],[92,1],[11,1],[37,2]],'white',[[61,1],[1,1]],'updating',[[37,1],[52,1],[2,1],[39,1]],'brings',[[50,1],[52,1]],'command',[[1,1],[19,1],[28,1],[13,1],[20,1],[74,1],[92,2],[93,3],[21,1],[26,2],[25,3],[85,1],[11,2]],'overlay',[[63,2],[55,5],[60,1],[65,1]],'terminateonclose',[[29,1]],'initializes',[[37,1]],'detour',[[33,1]],'improves',[[45,1]],'vast',[[33,1]],'generally',[[34,1],[49,1],[46,1],[55,1]],'continue',[[1,1],[76,1],[0,1]],'launching',[[28,1]],'windowize',[[30,1],[29,1]],'patch',[[33,1]],'usage',[[55,1],[64,3],[58,1]],'multitasking',[[76,1]],'define',[[25,1],[5,1]],'regwin32',[[81,1]],'discard',[[60,1]],'extra',[[55,1],[50,1],[0,1]],'getmessage',[[69,1],[46,1]],'find',[[89,1],[49,1],[0,1]],'actions',[[47,1],[32,1]],'occur',[[68,1]],'turn',[[1,1],[0,1]],'search',[[77,2],[85,1],[33,1],[31,1]],'later',[[0,2]],'limit',[[63,2],[41,1],[55,1],[76,1]],'minimalcaps',[[55,1]],'limited',[[63,2],[33,1],[76,1]],'“adopt”',[[0,1]],'show',[[63,2],[26,2],[1,2],[29,3],[46,1],[43,1],[88,1],[61,2],[16,1],[3,2],[68,1],[65,1]],'odd',[[55,2],[32,1]],'stretchtimers',[[65,1]],'mapping',[[88,1]],'principles',[[0,2]],'bad',[[45,1],[76,1],[32,1]],'core',[[76,6]],'pick',[[30,1]],'graphics',[[58,1],[61,1],[49,2],[55,1],[37,1]],'winmm',[[74,1],[65,1]],'depends',[[55,1]],'independently',[[32,1]],'likely',[[3,1],[76,1],[85,1]],'corner',[[63,1],[65,1],[11,2],[30,1]],'cossacks',[[52,1]],'rgb555',[[55,1]],'exclusive',[[55,1],[19,1],[35,1]],'whether',[[57,1],[25,1],[19,1],[2,1],[0,1]],'direct3d10',[[49,1]],'vertical',[[86,1],[52,1]],'complicated',[[71,1],[80,1]],'forceswapeffect',[[60,1]],'anyone',[[85,1],[0,1]],'able',[[55,1],[2,1],[11,1]],'capability',[[52,2],[55,5],[57,1],[0,1]],'computer',[[11,1],[1,1]],'performs',[[45,1],[29,1],[55,1],[69,1]],'hybrid',[[71,1],[50,1]],'versa',[[80,1]],'all',[[87,1],[50,2],[0,8],[61,2],[77,1],[56,1],[35,1],[27,1],[15,1],[29,2],[47,2],[80,2],[2,3],[24,1],[82,1],[48,1],[32,2],[91,1],[57,1],[79,1],[46,5],[38,1],[28,1],[44,3],[81,1],[12,1],[13,2],[20,1],[36,1],[64,2],[5,1],[37,2],[63,1],[21,1],[22,1],[41,1],[68,1],[43,1],[69,4],[83,2],[86,1],[89,1],[90,1],[92,1],[33,6],[11,3],[73,2],[88,1],[1,2],[19,1],[67,1],[74,1],[16,1],[84,1],[39,1],[59,2],[9,1],[14,1],[23,1],[49,2],[51,1],[54,1],[4,1],[60,1],[66,1],[71,2],[10,1],[40,1],[18,1],[7,1],[65,1],[55,4],[53,2],[30,4],[31,1],[45,1],[62,1],[42,1],[52,1],[93,3],[8,1],[17,1],[78,1],[26,1],[25,2],[70,1],[6,1],[76,2],[34,1],[72,1],[75,1],[3,4],[85,2],[58,4]],'displays',[[21,1],[23,1],[22,1],[24,1]],'delete',[[9,1],[25,1],[7,1],[5,1]],'meaning',[[37,1],[1,1]],'solaris',[[37,1]],'having',[[92,1],[1,1],[80,1],[11,2],[0,1]],'trigger',[[47,1]],'tweaks',[[59,1],[55,1],[76,1],[80,1],[90,2],[57,1]],'privileges',[[29,1]],'maximize',[[37,1]],'styles',[[76,1]],'bubble',[[82,1]],'near',[[55,1]],'visibility',[[43,2]],'constraint',[[46,1]],'depths',[[17,1],[57,1]],'flash',[[1,1]],'insist',[[37,1]],'nativeres',[[41,1]],'minimum',[[15,1],[87,2],[10,3],[86,2],[64,1]],'technical',[[11,1],[92,1]],'camera',[[11,1]],'them',[[46,1],[50,1],[44,1],[0,1],[45,1],[93,1],[39,1],[37,1],[21,1],[49,2],[76,1],[89,1],[2,1],[79,1],[58,1]],'produced',[[24,1]],'succeed',[[49,1]],'apis',[[0,1],[72,1],[69,1],[65,2]],'instruction',[[65,1]],'apply',[[33,1],[79,1],[58,1]],'metrics',[[76,3]],'disable',[[61,2],[9,1],[29,1],[76,6],[39,1]],'create',[[58,1],[34,1],[52,1],[25,1],[19,1],[0,1]],'efforts',[[0,1]],'hints',[[29,1],[24,1],[1,2]],'cleartexturefourcc',[[55,1]],'purposes',[[76,1],[33,1],[69,1]],'universal',[[33,1]],'darker',[[39,1]],'factors',[[20,1]],'hides',[[55,1],[16,1]],'change',[[39,1],[37,2],[49,1],[65,2],[55,1],[38,1],[76,1],[13,1],[5,1]],'directly',[[28,1],[76,1],[33,3],[65,1]],'suppressoverlay',[[55,1]],'mostly',[[52,1]],'via',[[45,1],[2,1],[1,2]],'failure',[[44,1]],'operating',[[4,1],[13,1],[26,1],[46,1],[0,1]],'recover',[[13,1],[37,1]],'repeatedly',[[37,1]],'sending',[[1,1]],'status',[[45,1],[19,3],[2,1],[18,1]],'administrator',[[85,1],[9,1],[29,2]],'attempts',[[76,1],[0,1]],'dlls',[[93,1],[33,3],[31,1],[79,3]],'iat',[[33,5]],'recurse',[[33,1]],'successful',[[44,1]],'enumadaptermodes',[[57,1]],'switches',[[85,1],[11,1],[52,1]],'complete',[[83,1]],'notextures',[[61,1]],'localization',[[85,1]],'flags',[[9,1],[1,1],[55,3],[71,1],[30,1],[44,2],[13,1],[33,1],[64,1],[58,1]],'operates',[[64,1]],'remains',[[11,1]],'optimizes',[[53,1],[29,1]],'western',[[39,1]],'getcaps',[[55,1]],'gdiemulatedc',[[71,1]],'does',[[65,1],[59,1],[1,1],[46,1],[38,1],[0,4],[34,2],[52,2],[32,1],[58,1]],'tricks',[[83,1],[0,2]],'interferences',[[52,1]],'resource',[[85,1],[52,1],[93,1]],'best',[[55,1],[0,2]],'ddscl_exclusive',[[55,3]],'coordinated',[[72,1]],'get',[[63,1],[73,1],[26,1],[1,1],[46,4],[76,1],[45,1],[52,1],[92,1],[57,1],[11,1]],'freelibrary',[[76,2]],'enabled',[[11,1],[52,1],[92,1],[71,1],[31,1],[2,2]],'gear',[[76,1]],'shaped',[[45,1]],'handler',[[76,1]],'video',[[55,7],[38,2],[0,1],[45,1],[13,1],[52,2],[36,1],[74,1],[41,1],[71,1],[2,1],[32,1],[57,2],[11,1]],'outddrawtrace',[[69,1]],'decelerated',[[65,1]],'0x4000000',[[76,1]],'hidedesktop',[[30,1]],'opened',[[0,1]],'reasonable',[[52,1]],'share',[[71,1],[0,1]],'interfaces',[[50,2]],'cannot',[[33,1],[2,1]],'distracting',[[30,1]],'locked',[[40,1],[11,1],[50,1]],'presence',[[44,1]],'checking',[[45,1],[32,1],[29,1],[33,2],[46,1]],'ryan',[[24,1]],'sourceforge',[[1,1],[0,2]],'stretched',[[40,1],[11,1],[65,1]],'slider',[[65,2],[20,5],[11,2],[18,1]],'solid',[[58,1]],'considered',[[30,1]],'searches',[[65,1]],'remaining',[[30,1],[37,1]],'schemes',[[80,1]],'widths',[[10,1]],'message',[[29,2],[46,7],[47,2],[2,1],[45,3],[52,2],[68,2],[93,1],[37,5]],'types',[[44,1]],'dwzbufferbitdepths',[[55,2]],'prompts',[[25,1]],'display',[[27,1],[63,1],[22,1],[52,2],[20,1],[92,1],[11,1],[37,3]],'peekallmessages',[[46,2]]];window.bSearchDataLoaded=true; \ No newline at end of file diff --git a/build/help/toc.html b/build/help/toc.html index 3478fc8..0449eb5 100644 --- a/build/help/toc.html +++ b/build/help/toc.html @@ -456,6 +456,12 @@ target="FrameMain"> Color management +
  • + + Window size & position +
  • WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) + OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); + } + bVSyncDone = FALSE; + } + + if(dxw.Windowize) lpdestrect = &destrect; + // blit only when source and dest surface are different. Should make ScreenRefresh faster. if (lpdds != lpddssrc) { dxw.ShowOverlay(lpddssrc); - if (IsDebug) BlitTrace("PRIM-NOEMU", lpsrcrect, &destrect, __LINE__); - res=(*pPrimaryBlt)(dxversion, pBlt, lpdds, &destrect, lpddssrc, lpsrcrect); + if (IsDebug) BlitTrace("PRIM-NOEMU", lpsrcrect, lpdestrect, __LINE__); + res=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx); + //res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } if(res){ - BlitError(res, lpsrcrect, &destrect, __LINE__); + BlitError(res, lpsrcrect, lpdestrect, __LINE__); if(IsDebug) { DescribeSurface(lpdds, 0, "[DST]" , __LINE__); if (lpddssrc) DescribeSurface(lpddssrc, 0, "[SRC]" , __LINE__); // lpddssrc could be NULL!!! @@ -229,9 +240,9 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR if(res==DDERR_SURFACEBUSY){ (*pUnlockMethod(dxversion))(lpdds, NULL); if(lpddssrc) (*pUnlockMethod(dxversion))(lpdds, NULL); - if (IsDebug) BlitTrace("BUSY", lpsrcrect, &destrect, __LINE__); - res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); - if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); + if (IsDebug) BlitTrace("BUSY", lpsrcrect, lpdestrect, __LINE__); + res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); + if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__); } // Try to handle DDBLT_KEYSRC on primary surface if((res==DDERR_INVALIDPARAMS) && (dwflags & DDBLT_KEYSRC)){ @@ -239,22 +250,22 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE2 lpddsTmp; extern CreateSurface2_Type pCreateSurfaceMethod(int); - if (IsDebug) BlitTrace("KEYSRC", lpsrcrect, &destrect, __LINE__); + if (IsDebug) BlitTrace("KEYSRC", lpsrcrect, lpdestrect, __LINE__); memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); (*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpddssrc, &ddsd); res=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpddsTmp, NULL); if(res) OutTraceE("CreateSurface: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy background - res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpdds, &destrect, DDBLT_WAIT, NULL); + res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpdds, lpdestrect, DDBLT_WAIT, NULL); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // overlay texture res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy back to destination - res= (*pBlt)(lpdds, &destrect, (LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, DDBLT_WAIT, lpddbltfx); + res= (*pBlt)(lpdds, lpdestrect, (LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, DDBLT_WAIT, lpddbltfx); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); - if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); + if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__); (*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp); } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; @@ -271,8 +282,15 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR if(dxw.dwFlags5 & GDIMODE){ extern void BlitToWindow(HWND, LPDIRECTDRAWSURFACE); - //if (lpdds != lpddssrc) + if((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)){ + HRESULT res2; + if(!bVSyncDone){ + if(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) + OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); + } + bVSyncDone = FALSE; BlitToWindow(dxw.GethWnd(), lpddssrc); + } return DD_OK; } @@ -363,8 +381,18 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR emurect.right <<= 1; emurect.bottom <<= 1; } + + if((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)) { + HRESULT res2; + if(!bVSyncDone){ + if(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) + OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); + } + bVSyncDone = FALSE; + } + if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__); - res=(*pPrimaryBlt)(dxversion, pBlt, lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect); + res=(*pPrimaryBlt)(dxversion, pBlt, lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, NULL); if (res) BlitError(res, &emurect, &destrect, __LINE__); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; @@ -428,6 +456,15 @@ HRESULT WINAPI sBlt(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE OutTrace(sLog); } + if(dxw.dwFlags8 & FORCEWAIT){ + dwflags |= DDBLT_WAIT; + dwflags &= ~(DDBLT_ASYNC|DDBLT_DONOTWAIT); + } + if(dxw.dwFlags8 & FORCENOWAIT){ + dwflags &= ~DDBLT_WAIT; + dwflags |= (DDBLT_ASYNC|DDBLT_DONOTWAIT); + } + if(ToPrim) res = sBltToPrimary(dxversion, pBlt, api, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx, isFlipping); else diff --git a/dll/ddcreates.cpp b/dll/ddcreates.cpp new file mode 100644 index 0000000..f620e56 --- /dev/null +++ b/dll/ddcreates.cpp @@ -0,0 +1,1046 @@ +#define _CRT_SECURE_NO_WARNINGS +#define INITGUID +//#define FULLHEXDUMP + +#include +#include +#include "dxwnd.h" +#include "dxhook.h" +#include "ddrawi.h" +#include "dxwcore.hpp" +#include "stdio.h" +#include "hddraw.h" +#include "dxhelper.h" +#include "syslibs.h" + +#define MAXBACKBUFFERS 4 + +extern void SetPixFmt(LPDDSURFACEDESC2); +extern void GetPixFmt(LPDDSURFACEDESC2); +extern CHAR *LogSurfaceAttributes(LPDDSURFACEDESC, char *, int); +extern void DumpPixFmt(LPDDSURFACEDESC2); +extern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int); +extern void HookDDSurface(LPDIRECTDRAWSURFACE *, int, BOOL); +extern void RegisterPixelFormat(int, LPDIRECTDRAWSURFACE); +extern void SetVSyncDelays(int, LPDIRECTDRAW); +extern char *DumpPixelFormat(LPDDSURFACEDESC2); +extern void FixSurfaceCaps(LPDDSURFACEDESC2, int); +extern SetPalette_Type pSetPaletteMethod(int); +extern ReleaseS_Type pReleaseSMethod(int); +extern CreatePalette_Type pCreatePaletteMethod(int); +extern GetGDISurface_Type pGetGDISurfaceMethod(int); + +extern int iBakBufferVersion; +extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; +extern LPDIRECTDRAWSURFACE lpDDSEmu_Back; +extern LPDIRECTDRAWSURFACE lpDDZBuffer; +extern DDSURFACEDESC2 DDSD_Prim; +extern LPDIRECTDRAWPALETTE lpDDP; +extern LPDIRECTDRAWCLIPPER lpddC; +extern LPDIRECTDRAW lpPrimaryDD; +extern int iDDPExtraRefCounter; +extern DWORD dwBackBufferCaps; +extern BOOL bFlippedDC; +extern PALETTEENTRY DefaultSystemPalette[]; +extern GetGDISurface_Type pGetGDISurface1, pGetGDISurface2, pGetGDISurface3, pGetGDISurface4, pGetGDISurface7; +extern GetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7; +extern CreateSurface1_Type pCreateSurface1, pCreateSurface2, pCreateSurface3, pCreateSurface4, pCreateSurface7; +extern ReleaseS_Type pReleaseS1, pReleaseS2, pReleaseS3, pReleaseS4, pReleaseS7; +extern GetPixelFormat_Type pGetPixelFormat1, pGetPixelFormat2, pGetPixelFormat3, pGetPixelFormat4, pGetPixelFormat7; + +void InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds) +{ + HRESULT res; + DDPIXELFORMAT p; + DDSURFACEDESC2 ddsd; + GetPixelFormat_Type pGetPixelFormat; + switch(dxversion){ + case 1: pGetPixelFormat=pGetPixelFormat1; break; + case 2: pGetPixelFormat=pGetPixelFormat2; break; + case 3: pGetPixelFormat=pGetPixelFormat3; break; + case 4: pGetPixelFormat=pGetPixelFormat4; break; + case 7: pGetPixelFormat=pGetPixelFormat7; break; + } + //OutTrace("dxversion=%d pGetPixelFormat=%x\n", dxversion, pGetPixelFormat); + p.dwSize=sizeof(DDPIXELFORMAT); + if(res=(*pGetPixelFormat)(lpdds, &p)){ + OutTraceE("GetPixelFormat: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return; + } + + ddsd.ddpfPixelFormat = p; + OutTraceDW("InitDSScreenParameters: version=%d Actual %s\n", dxversion, DumpPixelFormat(&ddsd)); + dxw.ActualPixelFormat = p; + SetBltTransformations(dxversion); + return; +} + +static void ClearSurfaceDesc(void *ddsd, int dxversion) +{ + int size; + size = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); + memset(ddsd, 0, size); // Clean all + ((LPDDSURFACEDESC)ddsd)->dwSize = size; +} + +static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, int dxversion) +{ + HRESULT res; + DDSURFACEDESC2 ddsd; + + OutTraceDW("DEBUG: BuildRealSurfaces: lpdd=%x pCreateSurface=%x version=%d\n", lpdd, pCreateSurface, dxversion); + if(lpDDSEmu_Prim==NULL){ + ClearSurfaceDesc((void *)&ddsd, dxversion); + ddsd.dwFlags = DDSD_CAPS; + // try DDSCAPS_SYSTEMMEMORY first, then suppress it if not supported + // no, DDSCAPS_SYSTEMMEMORY cause screen flickering while moving the window (and other troubles?) + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); + if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){ + OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n"); + if(dxw.Windowize){ + // in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled + res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); + } + else { + // in non-Windowized mode, the primary surface must be released and rebuilt with the proper properties + res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); + if (lpDDSEmu_Prim) while((*pReleaseSMethod(dxversion))(lpDDSEmu_Prim)); + res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); + } + } + if(res){ + OutTraceE("CreateSurface: ERROR on DDSEmu_Prim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return; + } + OutTraceDW("CreateSurface: created new DDSEmu_Prim=%x\n",lpDDSEmu_Prim); + if(IsDebug) DescribeSurface(lpDDSEmu_Prim, dxversion, "DDSEmu_Prim", __LINE__); + InitDSScreenParameters(dxversion, lpDDSEmu_Prim); + dxwss.PopSurface(lpDDSEmu_Prim); + + if (dxw.dwFlags3 & FORCECLIPPER){ + OutTraceDW("CreateSurface: FORCE SetClipper on primary hwnd=%x lpdds=%x\n", dxw.GethWnd(), lpDDSEmu_Prim); + res=lpdd->CreateClipper(0, &lpddC, NULL); + if (res) OutTraceE("CreateSurface: CreateClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); + res=lpddC->SetHWnd(0, dxw.GethWnd()); + if (res) OutTraceE("CreateSurface: SetHWnd ERROR res=%x(%s)\n", res, ExplainDDError(res)); + res=lpDDSEmu_Prim->SetClipper(lpddC); + if (res) OutTraceE("CreateSurface: SetClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); + } + // can't hook lpDDSEmu_Prim as generic, since the Flip method is unimplemented for a PRIMARY surface! + // better avoid it or hook just useful methods. + //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Prim, dxw.dwDDVersion); + } + + if(lpDDSEmu_Back==NULL){ + ClearSurfaceDesc((void *)&ddsd, dxversion); + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.ddsCaps.dwCaps = dwBackBufferCaps; + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + if(dxw.dwFlags4 & BILINEAR2XFILTER){ + // double backbuffer size + ddsd.dwWidth = dxw.GetScreenWidth() << 1; + ddsd.dwHeight = dxw.GetScreenHeight() << 1; + } + + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); + if(res) { + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); + } + if(res){ + OutTraceE("CreateSurface: CreateSurface ERROR on DDSEmuBack : res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return; + } + OutTraceDW("CreateSurface: created new DDSEmu_Back=%x\n", lpDDSEmu_Back); + if(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, "DDSEmu_Back", __LINE__); + dxwss.PopSurface(lpDDSEmu_Back); + //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion); + } +} + +void RestoreDDrawSurfaces() +{ + // if it's a ddraw game .... + if(lpPrimaryDD){ + OutTraceDW("RestoreDDrawSurfaces: rebuilding surfaces for dd session %x\n", lpPrimaryDD); + ReleaseS_Type pReleaseS; + CreateSurface_Type pCreateSurface; + switch(iBakBufferVersion){ + case 1: pCreateSurface=(CreateSurface_Type)pCreateSurface1; pReleaseS=pReleaseS1; break; + case 2: pCreateSurface=(CreateSurface_Type)pCreateSurface2; pReleaseS=pReleaseS2; break; + case 3: pCreateSurface=(CreateSurface_Type)pCreateSurface3; pReleaseS=pReleaseS3; break; + case 4: pCreateSurface=(CreateSurface_Type)pCreateSurface4; pReleaseS=pReleaseS4; break; + case 7: pCreateSurface=(CreateSurface_Type)pCreateSurface7; pReleaseS=pReleaseS7; break; + } + if(lpDDSEmu_Back) while((*pReleaseS)(lpDDSEmu_Back)); lpDDSEmu_Back=0; + if(lpDDSEmu_Prim) while((*pReleaseS)(lpDDSEmu_Prim)); lpDDSEmu_Prim=0; + BuildRealSurfaces(lpPrimaryDD, pCreateSurface, iBakBufferVersion); + } +} + +static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildPrimaryEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // emulated primary surface + memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); + + // handle the surface attributes before the ddsd.dwFlags gets updated: + // if a surface desc is NOT specified, build one + if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); + // then save it + dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; + + OutTraceDW("DDSD_PIXELFORMAT: color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); + ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces + ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); + // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... + if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + + // create Primary surface + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res){ + OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + iBakBufferVersion=dxversion; // v2.03.01 + + OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); + HookDDSurface(lplpdds, dxversion, TRUE); + // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... + + // build a default System palette and apply it to primary surface + if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && + (dxw.dwFlags6 & SYNCPALETTE)){ + if(lpDDP == NULL){ + res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); + if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); + } + // this must be done after hooking - who knows why? + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; + } + + // set a global capability value for surfaces that have to blit to primary + // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces + // DDSCAPS_SYSTEMMEMORY makes operations faster, but it is not always good... + dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); + // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... + // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; + + if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; + + if(dxw.dwFlags5 & GDIMODE) return DD_OK; + + BuildRealSurfaces(lpdd, pCreateSurface, dxversion); + return DD_OK; +} + +static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildPrimaryFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // emulated primary surface + memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); + + // handle the surface attributes before the ddsd.dwFlags gets updated: + // if a surface desc is NOT specified, build one + if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); + // then save it + dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; + + OutTraceDW("DDSD_PIXELFORMAT: color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); + + // dwFlags + ddsd.dwFlags &= ~(DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT|DDSD_BACKBUFFERCOUNT); + + // dwBackBufferCount: set to at least 1 + if(!(lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) || (lpddsd->dwBackBufferCount == 0)) ddsd.dwBackBufferCount = 1; + + // dwCaps + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM|DDSCAPS_FRONTBUFFER); + ddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); + // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... + if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + + // dwWidth & dwHeight + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + + // create Primary surface + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res){ + OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + iBakBufferVersion=dxversion; // v2.03.01 + + OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); + HookDDSurface(lplpdds, dxversion, TRUE); + // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... + + // build a default System palette and apply it to primary surface + if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && + (dxw.dwFlags6 & SYNCPALETTE)){ + if(lpDDP == NULL){ + res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); + if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); + } + // this must be done after hooking - who knows why? + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; + } + + // set a global capability value for surfaces that have to blit to primary + dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); + // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... + // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; + + if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; + + if(dxw.dwFlags5 & GDIMODE) return DD_OK; + + BuildRealSurfaces(lpdd, pCreateSurface, dxversion); + return DD_OK; +} + +static HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildPrimaryFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // genuine primary surface + memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); + + // create Primary surface + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res){ + if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ + LPDIRECTDRAWSURFACE lpPrim; + GetGDISurface_Type pGetGDISurface; + switch(dxversion){ + default: + case 1: pGetGDISurface = pGetGDISurface1; break; + case 2: pGetGDISurface = pGetGDISurface2; break; + case 3: pGetGDISurface = pGetGDISurface3; break; + case 4: pGetGDISurface = pGetGDISurface4; break; + case 7: pGetGDISurface = pGetGDISurface7; break; + } + OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); + (*pGetGDISurface)(lpPrimaryDD, &lpPrim); + while ((*pReleaseSMethod(dxversion))(lpPrim)); + res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + } + /* fall through */ + if(res){ + OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + } + + OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); + + iBakBufferVersion=dxversion; + HookDDSurface(lplpdds, dxversion, TRUE); + if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); + + return DD_OK; +} + +static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildPrimaryDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // genuine primary surface + memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); + // v2.03.98 - when going to fullscreen mode and no emulation do not alter the capability masks, or in other words ... + // if doing emulation or in window mode, fix the capability masks (De Morgan docet) + ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX); + // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested + // this impact also on capabilities for temporary surfaces for AERO optimized handling + if ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + + // create Primary surface + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res){ + if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ + LPDIRECTDRAWSURFACE lpPrim; + GetGDISurface_Type pGetGDISurface; + switch(dxversion){ + default: + case 1: pGetGDISurface = pGetGDISurface1; break; + case 2: pGetGDISurface = pGetGDISurface2; break; + case 3: pGetGDISurface = pGetGDISurface3; break; + case 4: pGetGDISurface = pGetGDISurface4; break; + case 7: pGetGDISurface = pGetGDISurface7; break; + } + OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); + (*pGetGDISurface)(lpPrimaryDD, &lpPrim); + while ((*pReleaseSMethod(dxversion))(lpPrim)); + res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + } + /* fall through */ + if(res){ + OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + } + + OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); + + if(dxw.dwFlags1 & EMULATEBUFFER){ + lpDDSEmu_Prim = *lplpdds; + dxwss.PopSurface(lpDDSEmu_Prim); + + ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; + // warning: can't create zero sized backbuffer surface !!!! + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + ddsd.ddsCaps.dwCaps = 0; + if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res){ + OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); + return res; + } + OutTraceDW("CreateSurface: created FIX DDSPrim=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim(2)", __LINE__); + } + + iBakBufferVersion=dxversion; // v2.03.37 + HookDDSurface(lplpdds, dxversion, TRUE); + if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); + + return DD_OK; +} + +static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildBackBufferEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // create BackBuffer surface + memcpy(&ddsd, lpddsd, lpddsd->dwSize); + ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + + // v2.03.75: if a surface desc is NOT specified, build one. This will allow ZBUF attach. + if(!(lpddsd->dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); + + // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces + ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + if(ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; // necessary: Martian Gotic crashes otherwise + // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + GetPixFmt(&ddsd); + + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res) { + OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + + OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); + HookDDSurface(lplpdds, dxversion, FALSE); // added !!! + iBakBufferVersion=dxversion; // v2.02.31 + + if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && + (dxw.dwFlags6 & SYNCPALETTE)){ + if(lpDDP == NULL){ + res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); + if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); + } + // this must be done after hooking - who knows why? + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; + } + + // V2.1.85/V2.2.34: tricky !!!! + // When a real backbuffer is created, it has a reference to its frontbuffer. + // some games (Monopoly 3D) may depend on this setting - i.e. they could close + // the exceeding references - so this is better be replicated adding an initial + // reference to the zero count. But you don't have to do this if the backbuffer + // is created independently by the primary surface. + (*lplpdds)->AddRef(); // should it be repeated BBCount times???? + + return DD_OK; +} + +static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + //MessageBox(NULL, "BuildBackBufferFlippable", "DxWnd", MB_OK); + + // create BackBuffer surface + memcpy(&ddsd, lpddsd, lpddsd->dwSize); + + ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); + + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FRONTBUFFER|DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + GetPixFmt(&ddsd); + + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res) { + OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); + return res; + } + + OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); + HookDDSurface(lplpdds, dxversion, FALSE); // added !!! + iBakBufferVersion=dxversion; // v2.02.31 + + if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && + (dxw.dwFlags6 & SYNCPALETTE)){ + if(lpDDP == NULL){ + res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); + if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); + } + // this must be done after hooking - who knows why? + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; + } + + return DD_OK; +} + +static HRESULT AttachBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + HRESULT res; + LPDIRECTDRAWSURFACE lpDDSPrim; + OutTraceDW("DEBUG: AttachBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + + // retrieve the attached backbuffer surface and hook it + + if(lpddsd->dwBackBufferCount == 0) return DD_OK; // nothing to retrieve + + GetAttachedSurface_Type pGetAttachedSurface; + DDSCAPS2 caps; + switch(dxversion){ + case 1: pGetAttachedSurface = pGetAttachedSurface1; break; + case 2: pGetAttachedSurface = pGetAttachedSurface2; break; + case 3: pGetAttachedSurface = pGetAttachedSurface3; break; + case 4: pGetAttachedSurface = pGetAttachedSurface4; break; + case 7: pGetAttachedSurface = pGetAttachedSurface7; break; + } + memset(&caps, 0, sizeof(caps)); + caps.dwCaps = DDSCAPS_BACKBUFFER; + lpDDSPrim = dxwss.GetPrimarySurface(); + res = (*pGetAttachedSurface)(lpDDSPrim, (LPDDSCAPS)&caps, lplpdds); + if(res){ + OutTraceE("CreateSurface: GetAttachedSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + + OutTraceDW("CreateSurface: retrieved BACK DDSBack=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); + HookDDSurface(lplpdds, dxversion, FALSE); // added !!! + iBakBufferVersion=dxversion; // v2.02.31 + + return DD_OK; +} + +static HRESULT BuildBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + OutTraceDW("DEBUG: BuildBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + return DD_OK; +} + +static HRESULT AttachBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + OutTraceDW("DEBUG: AttachBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + return DD_OK; +} + +static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildBackBufferDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + // create BackBuffer surface + // ClearSurfaceDesc((void *)&ddsd, dxversion); + memcpy(&ddsd, lpddsd, lpddsd->dwSize); + if(dxw.IsEmulated || dxw.Windowize){ + ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); + ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH); + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX); + // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested + if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) { + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + } + else { + ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); + } + } + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + ddsd.dwWidth = dxw.GetScreenWidth(); + ddsd.dwHeight = dxw.GetScreenHeight(); + + if (dxw.dwFlags2 & BACKBUFATTACH) { + LPDIRECTDRAWSURFACE lpPrim; + DDSURFACEDESC2 prim; + GetGDISurface_Type pGetGDISurface; + switch(dxversion){ + default: + case 1: pGetGDISurface = pGetGDISurface1; break; + case 2: pGetGDISurface = pGetGDISurface2; break; + case 3: pGetGDISurface = pGetGDISurface3; break; + case 4: pGetGDISurface = pGetGDISurface4; break; + case 7: pGetGDISurface = pGetGDISurface7; break; + } + (*pGetGDISurface)(lpPrimaryDD, &lpPrim); + memset(&prim, 0, sizeof(DDSURFACEDESC2)); + prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); + res=lpPrim->GetSurfaceDesc((DDSURFACEDESC *)&prim); + (*pReleaseSMethod(dxversion))(lpPrim); + ddsd.dwWidth = prim.dwWidth; + ddsd.dwHeight = prim.dwHeight; + OutTraceDW("BMX FIX: res=%x(%s) wxh=(%dx%d)\n", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight); + } + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + if(res) { + if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){ + OutTraceDW("CreateSurface: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__); + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); + } + if(res){ + OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + } + + OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); + if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); + HookDDSurface(lplpdds, dxversion, FALSE); // added !!! + iBakBufferVersion=dxversion; // v2.02.31 + + return DD_OK; +} + +static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildGenericEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... + FixSurfaceCaps(&ddsd, dxversion); + // It looks that DDSCAPS_SYSTEMMEMORY surfaces can perfectly be DDSCAPS_3DDEVICE as well. + // For "Risk II" it is necessary that both the primary surface and the offscreen surfaces are generated + // with the same type, so that assuming an identical lPitch and memcopy-ing from one buffer to the + // other is a legitimate operation. + + if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode + if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && + (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) + ){ + DWORD dwWidth; + dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; + if(dwWidth != ddsd.dwWidth) OutTraceDW("CreateSurface: fixed surface width %d->%d\n", ddsd.dwWidth, dwWidth); + ddsd.dwWidth = dwWidth; + } + } + + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); + if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ + OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); + } + if (res) { + OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + + OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", + *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__)); + + // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. + // fixes "Virtua Fighter PC" palette bug + if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) + OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); + else { + OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); + iDDPExtraRefCounter++; + } + } + + // diagnostic hooks .... + HookDDSurface(lplpdds, dxversion, FALSE); + + return DD_OK; +} + +static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + DDSURFACEDESC2 ddsd; + HRESULT res; + + OutTraceDW("DEBUG: BuildGenericFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... + FixSurfaceCaps(&ddsd, dxversion); + + if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode + if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && + (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) + ){ + DWORD dwWidth; + dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; + if(dwWidth != ddsd.dwWidth) OutTraceDW("CreateSurface: fixed surface width %d->%d\n", ddsd.dwWidth, dwWidth); + ddsd.dwWidth = dwWidth; + } + } + + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); + if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ + OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); + } + if (res) { + OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + + OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", + *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__)); + + // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. + // fixes "Virtua Fighter PC" palette bug + if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ + res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); + if(res) + OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); + else { + OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); + iDDPExtraRefCounter++; + } + } + + // diagnostic hooks .... + HookDDSurface(lplpdds, dxversion, FALSE); + + return DD_OK; +} + +static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + HRESULT res; + + OutTraceDW("DEBUG: BuildGenericDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); + OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__)); + + res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); + if(res){ + // v2.02.60: Ref. game Incoming GOG release, post by Marek, error DDERR_UNSUPPORTED while trying to create ZBUFFER surface + if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){ + OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); + lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); + } + if(res){ + OutTraceE("CreateSurface: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + } + + OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", + *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__)); + + // hooks .... + HookDDSurface(lplpdds, dxversion, FALSE); + + return DD_OK; +} + +HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, + LPDIRECTDRAWSURFACE *lplpdds, void *pu) +{ + HRESULT res; + DDSURFACEDESC2 ddsd; + LPDIRECTDRAWSURFACE lpDDSPrim; + LPDIRECTDRAWSURFACE lpDDSBack = NULL; + DWORD CurFlags; + int TargetSize; + typedef HRESULT (*BuildSurface_Type)(LPDIRECTDRAW, CreateSurface_Type, LPDDSURFACEDESC2, int, LPDIRECTDRAWSURFACE *, void *); + static BuildSurface_Type BuildPrimary = 0; + static BuildSurface_Type BuildBackBuffer = 0; + static BuildSurface_Type AttachBackBuffer = 0; + static BuildSurface_Type BuildGeneric = 0; + static enum { + PRIMARY_FULLSCREEN = 0, + PRIMARY_DIRECT, + PRIMARY_FLIPPABLE, + PRIMARY_EMULATED + } SurfaceMode; + + OutTraceDDRAW("CreateSurface(%d): lpdd=%x %s\n", + dxversion, lpdd, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[CreateSurface]", __LINE__)); + + // v2.03.95.fx1 - deleted: some texture handling REQUIRES a proper FourCC codec. + // maybe it could be suppressed by a dedicated config. flag and on primary surfaces only? + //lpddsd->ddpfPixelFormat.dwFourCC = 0; + + // if not initialized yet .... + if(BuildPrimary == 0){ + char *sLabel; + SurfaceMode = PRIMARY_FULLSCREEN; + if(dxw.IsEmulated || dxw.Windowize){ + SurfaceMode = (dxw.dwFlags1 & EMULATESURFACE) ? + ((dxw.dwFlags6 & FLIPEMULATION) ? + PRIMARY_EMULATED : + PRIMARY_FLIPPABLE) : + PRIMARY_DIRECT; + } + + switch(SurfaceMode) { + case PRIMARY_FULLSCREEN: + BuildPrimary = BuildPrimaryFullscreen; + BuildBackBuffer = BuildBackBufferFullscreen; + AttachBackBuffer = AttachBackBufferFullscreen; + BuildGeneric = BuildGenericDir; + sLabel="FULLSCR"; + break; + case PRIMARY_DIRECT: + BuildPrimary = BuildPrimaryDir; + BuildBackBuffer = BuildBackBufferDir; + AttachBackBuffer = BuildBackBufferDir; + BuildGeneric = BuildGenericDir; + sLabel="DIRECT"; + break; + case PRIMARY_FLIPPABLE: + BuildPrimary = BuildPrimaryFlippable; + BuildBackBuffer = BuildBackBufferFlippable; + AttachBackBuffer = AttachBackBufferFlippable; + BuildGeneric = BuildGenericFlippable; + sLabel="FLIPPABLE"; + break; + case PRIMARY_EMULATED: + BuildPrimary = BuildPrimaryEmu; + BuildBackBuffer = BuildBackBufferEmu; + AttachBackBuffer = BuildBackBufferEmu; + BuildGeneric = BuildGenericEmu; + sLabel="EMULATED"; + break; + } + OutTraceDW("CreateSurface: MODE INITIALIZED mode=%d(%s)\n", SurfaceMode, sLabel); + } + + // check for lpddsd->dwSize value + TargetSize=(dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); + if(lpddsd->dwSize != TargetSize){ + char sMsg[81]; + sprintf_s(sMsg,80, "CreateSurface: ASSERT bad dwSize=%d dxversion=%d\n", + lpddsd->dwSize, dxversion); + OutTraceDW(sMsg); + if(IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); + return DDERR_INVALIDPARAMS; + } + + //GHO workaround (needed for WarWind, Rogue Spear): + if (lpddsd->dwFlags && !(lpddsd->dwFlags & 0x1)){ + OutTraceDW("CreateSurface: fixing illegal dwFlags value: %x -> %x\n", + lpddsd->dwFlags, (lpddsd->dwFlags | DDSD_CAPS)); + lpddsd->dwFlags |= DDSD_CAPS; + } + + memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy + + // v2.02.38: this is odd: in "Star Force Deluxe" there is no PRIMARY surface, but a surface with + // 0 flags and 0 capabilities serves for this purpose. Is it a side-effect of old ddraw releases? + if((dxversion == 1) && ((ddsd.dwFlags & ~DDSD_BACKBUFFERCOUNT) == 0)){ // Star Force Deluxe + ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + //if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) ddsd.ddsCaps.dwCaps |= DDSCAPS_PALETTE; + } + + // creation of the primary surface.... + if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){ + dxwss.ClearSurfaceList(); // v2.03.83: "Daytona USA" would saturate the list otherwise + SetVSyncDelays(dxversion, lpdd); + GetHookInfo()->Height=(short)dxw.GetScreenHeight(); + GetHookInfo()->Width=(short)dxw.GetScreenWidth(); + GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; + GetHookInfo()->DXVersion=dxversion; + lpPrimaryDD = lpdd; // v2.1.87 + memcpy(&DDSD_Prim, lpddsd, sizeof(DDSD_Prim)); // v2.02.37 + + // beware of the different behaviour between older and newer directdraw releases... + if(dxversion >= 4){ + if (lpDDSEmu_Back) while(lpDDSEmu_Back->Release()); + if (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release()); + if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) { // Praetorians !!!! + lpDDSBack = dxwss.GetBackBufferSurface(); + if (lpDDSBack) { + if(dxw.dwFlags6 & FLIPEMULATION) while(lpDDSBack->Release()); + dxwss.PopSurface(lpDDSBack); + lpDDSBack = NULL; + } + } + } + lpDDSEmu_Back=NULL; + lpDDSEmu_Prim=NULL; + + int BBCount=0; // or 1 ?? + if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount; + if ((BBCount > 0) && (iBakBufferVersion < 4)){ + lpDDSBack=NULL; + OutTraceDW("CreateSurface: backbuffer cleared - BackBufferCount=%d\n", BBCount); + } + + if (BBCount > MAXBACKBUFFERS){ + char sMsg[81]; + sprintf_s(sMsg, 80, "CreateSurface: BackBufferCount=%d\n", BBCount); + OutTraceDW(sMsg); + if (IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); + // recover ... + BBCount = MAXBACKBUFFERS; + } + + // build emulated primary surface, real primary and backbuffer surfaces + CurFlags=ddsd.dwFlags; + res=BuildPrimary(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); + if(res) return res; + lpDDSPrim = *lplpdds; + dxwss.PushPrimarySurface(lpDDSPrim, dxversion); + RegisterPixelFormat(dxversion, lpDDSPrim); + + if (BBCount){ + // build emulated backbuffer surface + res=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL); + if(res) return res; + dxwss.PushBackBufferSurface(lpDDSBack, dxversion); + } + + if(IsTraceDDRAW){ + char sInfo[256+1]; + sprintf(sInfo, "CreateSurface: created DDSPrim=%x DDSBack=%x", lpDDSPrim, lpDDSBack); + if(dxw.IsEmulated) sprintf(sInfo, "%s DDSEmu_Prim=%x", sInfo, lpDDSEmu_Prim); + if(dxw.dwFlags1 & EMULATESURFACE) sprintf(sInfo, "%s DDSEmu_Back=%x", sInfo, lpDDSEmu_Back); + strcat(sInfo, "\n"); + OutTrace(sInfo); + } + + // rebuild the clipper area + if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); + + // v2.2.64: added extra ref needed to preserve ddraw session for later use. Is it a ddraw1 legacy? + // seems to fix problems in "Warhammer 40K Rites Of War" that uses a ddraw session after reaching 0 refcount. + // v2.2.84: avoid the extra referenced in non windowed mode since it causes the window shift reported by gsky916 + // for Wind Fantasy SP. + // v2.3.59: same extra reference is needed by "Wahammer Chaos Gate" that uses ddraw interface release 2 + // v2.3.72: fixed previous fix: condition is <=2, not >=2 ! + // Be aware that it may perhaps become <=3, if we get the same problem elsewhere + // v2.3.96: deleted the if(Windowized) condition: AddRef is needed also in fullscreen mode. + if(dxw.dwDDVersion<=2) lpdd->AddRef(); + + return DD_OK; + } + + // a request for a separate (not complex) backbuffer to attach later on, maybe. + if ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)){ + if (lpDDSBack) { + OutTraceDW("CreateSurface: returning current DDSBack=%x\n", lpDDSBack); + *lplpdds = lpDDSBack; + return DD_OK; + } + + res=BuildBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); + if(res == DD_OK) { + dxwss.PushBackBufferSurface(*lplpdds, dxversion); + dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); + } + return res; + } + + // if nothing else, it's a generic/zbuffer surface + + res=BuildGeneric(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, pu); + if(!res) { + dxwss.PopSurface(*lplpdds); + if(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) { + // v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice + if(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); + OutTraceDW("CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); + } + } + + return res; +} \ No newline at end of file diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 44ccbe5..0e02daf 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -14,6 +14,7 @@ #include "syslibs.h" #define EMULATEZBUFFERATTACH FALSE +#define HANDLEFLIPPABLE #ifdef CHECKMETHODPOINTERS static void NullMethodPointer(char *s) @@ -35,6 +36,7 @@ ColorConversion_Type pColorConversion = NULL; HDC hFlippedDC = NULL; BOOL bFlippedDC = FALSE; DWORD dwBackBufferCaps = 0; +BOOL bVSyncDone; // DirectDraw API HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *); @@ -134,6 +136,11 @@ HRESULT WINAPI extGetCaps2D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps3D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps4D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps7D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); +HRESULT WINAPI extGetScanLine1(LPDIRECTDRAW, LPDWORD); +HRESULT WINAPI extGetScanLine2(LPDIRECTDRAW, LPDWORD); +HRESULT WINAPI extGetScanLine3(LPDIRECTDRAW, LPDWORD); +HRESULT WINAPI extGetScanLine4(LPDIRECTDRAW, LPDWORD); +HRESULT WINAPI extGetScanLine7(LPDIRECTDRAW, LPDWORD); // DirectDrawSurface HRESULT WINAPI extQueryInterfaceS1(void *, REFIID, LPVOID *); @@ -264,7 +271,7 @@ HRESULT WINAPI extAddOverlayDirtyRect3(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect4(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect7(LPDIRECTDRAWSURFACE, LPRECT); -HRESULT WINAPI extCreateSurface(int, CreateSurface_Type, LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); +extern HRESULT WINAPI extCreateSurface(int, CreateSurface_Type, LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extSetSurfaceDesc3(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); HRESULT WINAPI extSetSurfaceDesc4(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); HRESULT WINAPI extSetSurfaceDesc7(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); @@ -333,6 +340,7 @@ RestoreAllSurfaces_Type pRestoreAllSurfaces; TestCooperativeLevel_Type pTestCooperativeLevel4, pTestCooperativeLevel7; GetDeviceIdentifier_Type pGetDeviceIdentifier; RestoreDisplayMode_Type pRestoreDisplayMode1, pRestoreDisplayMode2, pRestoreDisplayMode3, pRestoreDisplayMode4, pRestoreDisplayMode7; +GetScanLine_Type pGetScanLine1, pGetScanLine2, pGetScanLine3, pGetScanLine4, pGetScanLine7; /* DirectDrawSurface hook pointers */ QueryInterface_Type pQueryInterfaceS1, pQueryInterfaceS2, pQueryInterfaceS3, pQueryInterfaceS4, pQueryInterfaceS7; @@ -405,8 +413,6 @@ GammaRamp_Type pDDSetGammaRamp; // ddraw global variables, constants & so on -#define MAXBACKBUFFERS 4 - extern PALETTEENTRY DefaultSystemPalette[256]; LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL; LPDIRECTDRAWSURFACE lpDDSEmu_Back=NULL; @@ -426,8 +432,8 @@ DWORD *Palette16BPP = NULL; void *EmuScreenBuffer = NULL; // to implement pitch bug fix DWORD rPitch = 0; LPVOID rSurface = NULL; -static void SetPixFmt(LPDDSURFACEDESC2); -static void GetPixFmt(LPDDSURFACEDESC2); +void SetPixFmt(LPDDSURFACEDESC2); +void GetPixFmt(LPDDSURFACEDESC2); static HookEntryEx_Type ddHooks[]={ {HOOK_HOT_CANDIDATE, 0x08, "DirectDrawCreate", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreate, (FARPROC)extDirectDrawCreate}, @@ -487,6 +493,32 @@ void SetVSyncDelays(int dxversion, LPDIRECTDRAW lpdd) dxw.SetVSyncDelays(ddsdRefreshRate.dwRefreshRate); } +static DWORD GetBltWaitFlags(DWORD dwBltFlags) +{ + if(dxw.dwFlags8 & FORCEWAIT) { + dwBltFlags |= DDBLT_WAIT; + dwBltFlags &= ~DDBLT_DONOTWAIT; + } + if(dxw.dwFlags8 & FORCENOWAIT){ + dwBltFlags |= DDBLT_DONOTWAIT; + dwBltFlags &= ~DDBLT_WAIT; + } + return dwBltFlags; +} + +static DWORD GetFlipWaitFlags(DWORD dwFlipFlags) +{ + if(dxw.dwFlags8 & FORCEWAIT) { + dwFlipFlags |= DDFLIP_WAIT; + dwFlipFlags &= ~DDFLIP_DONOTWAIT; + } + if(dxw.dwFlags8 & FORCENOWAIT){ + dwFlipFlags |= DDFLIP_DONOTWAIT; + dwFlipFlags &= ~DDFLIP_WAIT; + } + return dwFlipFlags; +} + static void Stopper(char *s, int line) { char sMsg[81]; @@ -501,12 +533,12 @@ static void Stopper(char *s, int line) #define STOPPER(s) #endif -static char *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd) +char *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd) { return ExplainPixelFormat(&(lpddsd->ddpfPixelFormat)); } -static CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) +CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) { static char sInfo[1024]; sprintf(sInfo, "SurfaceDesc: %s Flags=%x(%s)", @@ -544,7 +576,7 @@ static CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) return sInfo; } -static void DumpPixFmt(LPDDSURFACEDESC2 lpdds) +void DumpPixFmt(LPDDSURFACEDESC2 lpdds) { OutTrace("PixelFormat: lpdds=%x %s\n", DumpPixelFormat(lpdds)); } @@ -639,33 +671,6 @@ void InitDDScreenParameters(int dxversion, LPDIRECTDRAW lpdd) return; } -void InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds) -{ - HRESULT res; - DDPIXELFORMAT p; - DDSURFACEDESC2 ddsd; - GetPixelFormat_Type pGetPixelFormat; - switch(dxversion){ - case 1: pGetPixelFormat=pGetPixelFormat1; break; - case 2: pGetPixelFormat=pGetPixelFormat2; break; - case 3: pGetPixelFormat=pGetPixelFormat3; break; - case 4: pGetPixelFormat=pGetPixelFormat4; break; - case 7: pGetPixelFormat=pGetPixelFormat7; break; - } - //OutTrace("dxversion=%d pGetPixelFormat=%x\n", dxversion, pGetPixelFormat); - p.dwSize=sizeof(DDPIXELFORMAT); - if(res=(*pGetPixelFormat)(lpdds, &p)){ - OutTraceE("GetPixelFormat: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return; - } - - ddsd.ddpfPixelFormat = p; - OutTraceDW("InitDSScreenParameters: version=%d Actual %s\n", dxversion, DumpPixelFormat(&ddsd)); - dxw.ActualPixelFormat = p; - SetBltTransformations(dxversion); - return; -} - void InitScreenParameters(int dxversion) { extern void FixPixelFormat(int , DDPIXELFORMAT *); @@ -1085,7 +1090,7 @@ void RegisterPixelFormat(int dxversion, LPDIRECTDRAWSURFACE lpdds) // SetPixFmt: builds a pixel format descriptor when no one is specified, starting from the color depth, the current // desktop pixel format (when the color depth is the same) or the config flags -static void SetPixFmt(LPDDSURFACEDESC2 lpdd) +void SetPixFmt(LPDDSURFACEDESC2 lpdd) { OutTraceDW("SetPixFmt: BPP=%d Use565=%d NoAlpha=%d\n", dxw.VirtualPixelFormat.dwRGBBitCount, @@ -1116,7 +1121,7 @@ static void SetPixFmt(LPDDSURFACEDESC2 lpdd) // retrieves the stored pixel format -static void GetPixFmt(LPDDSURFACEDESC2 lpdd) +void GetPixFmt(LPDDSURFACEDESC2 lpdd) { lpdd->ddpfPixelFormat = dxw.VirtualPixelFormat; OutTraceDW("GetPixFmt: %s\n", DumpPixelFormat(lpdd)); @@ -1160,6 +1165,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, "GetGDISurface(D1)"); + SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine1, (void **)&pGetScanLine1, "GetScanLine(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize1, (void **)&pInitialize1, "Initialize(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode1, (void **)&pRestoreDisplayMode1, "RestoreDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)"); @@ -1177,6 +1183,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, "GetGDISurface(D2)"); + SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine2, (void **)&pGetScanLine2, "GetScanLine(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize2, (void **)&pInitialize2, "Initialize(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode2, (void **)&pRestoreDisplayMode2, "RestoreDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)"); @@ -1196,6 +1203,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps3D, (void **)&pGetCaps3D, "GetCaps(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode3, (void **)&pGetDisplayMode3, "GetDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface3, (void **)&pGetGDISurface3, "GetGDISurface(D3)"); + SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine3, (void **)&pGetScanLine3, "GetScanLine(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize3, (void **)&pInitialize3, "Initialize(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode3, (void **)&pRestoreDisplayMode3, "RestoreDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel3, (void **)&pSetCooperativeLevel3, "SetCooperativeLevel(D3)"); @@ -1215,6 +1223,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, "GetGDISurface(D4)"); + SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine4, (void **)&pGetScanLine4, "GetScanLine(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize4, (void **)&pInitialize4, "Initialize(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode4, (void **)&pRestoreDisplayMode4, "RestoreDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)"); @@ -1236,6 +1245,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, "GetGDISurface(D7)"); + SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine7, (void **)&pGetScanLine7, "GetScanLine(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize7, (void **)&pInitialize7, "Initialize(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode7, (void **)&pRestoreDisplayMode7, "RestoreDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)"); @@ -1267,9 +1277,9 @@ static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, "SetEntries(P)"); } -static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPrim) +void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPrim) { - BOOL bEmu = (dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)); + BOOL bEmu = dxw.IsEmulated; if(iBakBufferVersion==0) iBakBufferVersion=dxversion; // v2.03.60 OutTraceDW("Hooking surface dds=%x dxversion=%d prim=%x thread_id=%x\n", @@ -1378,7 +1388,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface7, (void **)&pAddAttachedSurface7, "AddAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect7, (void **)&pAddOverlayDirtyRect7, "AddOverlayDirtyRect(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast7, (void **)&pBltFast7, "BltFast(S7)"); - SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt7, (void **)&pBlt7, "Blt(S1)"); + SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt7, (void **)&pBlt7, "Blt(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface7, (void **)&pDeleteAttachedSurface7, "DeleteAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces7, (void **)&pEnumAttachedSurfaces7, "EnumAttachedSurfaces(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders7, (void **)&pEnumOverlayZOrders7, "EnumOverlayZOrders(S7)"); @@ -1841,7 +1851,7 @@ HRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) static HRESULT WINAPI extRestoreDisplayMode(int dxversion, RestoreDisplayMode_Type pRestoreDisplayMode, LPDIRECTDRAW lpdd) { OutTraceDW("RestoreDisplayMode(%d): lpdd=%x\n", dxversion, lpdd); - if((dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){ + if(dxw.IsEmulated){ OutTraceDW("RestoreDisplayMode: BYPASS\n"); return DD_OK; } @@ -1859,6 +1869,31 @@ HRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW lpdd) HRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(7, pRestoreDisplayMode7, lpdd); } +HRESULT WINAPI extGetScanLine(int dxversion, GetScanLine_Type pGetScanLine, LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ + HRESULT res; + res = pGetScanLine(lpdd, lpdwScanLine); + OutTraceB("GetScanLine(%d): lpdd=%x res=%x line=%d\n", dxversion, lpdd, res, *lpdwScanLine); + + if(!res && dxw.Windowize && dxw.dwRealScreenHeight){ + *lpdwScanLine = (*lpdwScanLine * dxw.GetScreenHeight()) / dxw.dwRealScreenHeight; + OutTraceB("GetScanLine(%d): FIXED line=%d\n", *lpdwScanLine); + } + + return res; +} + +HRESULT WINAPI extGetScanLine1(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ return extGetScanLine(1, pGetScanLine1, lpdd, lpdwScanLine); } +HRESULT WINAPI extGetScanLine2(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ return extGetScanLine(2, pGetScanLine2, lpdd, lpdwScanLine); } +HRESULT WINAPI extGetScanLine3(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ return extGetScanLine(3, pGetScanLine3, lpdd, lpdwScanLine); } +HRESULT WINAPI extGetScanLine4(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ return extGetScanLine(4, pGetScanLine4, lpdd, lpdwScanLine); } +HRESULT WINAPI extGetScanLine7(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) +{ return extGetScanLine(7, pGetScanLine7, lpdd, lpdwScanLine); } + static HRESULT WINAPI extQueryInterfaceD(int dxversion, QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp) { HRESULT res; @@ -2270,6 +2305,8 @@ HRESULT WINAPI extGetDisplayMode(int dxversion, GetDisplayMode_Type pGetDisplayM if(!lpddsd->ddpfPixelFormat.dwFlags) SetPixFmt((LPDDSURFACEDESC2)lpddsd); } + dxw.dwRealScreenWidth = lpddsd->dwWidth; + dxw.dwRealScreenHeight = lpddsd->dwHeight; if(dxw.Windowize){ lpddsd->dwWidth = dxw.GetScreenWidth(); lpddsd->dwHeight = dxw.GetScreenHeight(); @@ -2424,7 +2461,7 @@ HRESULT WINAPI extSetCooperativeLevel4(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwfla HRESULT WINAPI extSetCooperativeLevel7(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(7, pSetCooperativeLevel7, lpdd, hwnd, dwflags); } -static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) +void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) { // rules of thumb: // 1) textures should be left untouched (switching to SYSTEMMEMORY when forcing HEL may even fail!) @@ -2503,893 +2540,6 @@ static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) return; } -static void ClearSurfaceDesc(void *ddsd, int dxversion) -{ - int size; - size = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); - memset(ddsd, 0, size); // Clean all - ((LPDDSURFACEDESC)ddsd)->dwSize = size; -} - -static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, int dxversion) -{ - HRESULT res; - DDSURFACEDESC2 ddsd; - - OutTraceDW("DEBUG: BuildRealSurfaces: lpdd=%x pCreateSurface=%x version=%d\n", lpdd, pCreateSurface, dxversion); - if(lpDDSEmu_Prim==NULL){ - ClearSurfaceDesc((void *)&ddsd, dxversion); - ddsd.dwFlags = DDSD_CAPS; - // try DDSCAPS_SYSTEMMEMORY first, then suppress it if not supported - // no, DDSCAPS_SYSTEMMEMORY cause screen flickering while moving the window (and other troubles?) - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); - if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){ - OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n"); - if(dxw.Windowize){ - // in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled - res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); - } - else { - // in non-Windowized mode, the primary surface must be released and rebuilt with the proper properties - res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); - if (lpDDSEmu_Prim) while((*pReleaseSMethod(dxversion))(lpDDSEmu_Prim)); - res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); - } - } - if(res){ - OutTraceE("CreateSurface: ERROR on DDSEmu_Prim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return; - } - OutTraceDW("CreateSurface: created new DDSEmu_Prim=%x\n",lpDDSEmu_Prim); - if(IsDebug) DescribeSurface(lpDDSEmu_Prim, dxversion, "DDSEmu_Prim", __LINE__); - InitDSScreenParameters(dxversion, lpDDSEmu_Prim); - dxwss.PopSurface(lpDDSEmu_Prim); - - if (dxw.dwFlags3 & FORCECLIPPER){ - OutTraceDW("CreateSurface: FORCE SetClipper on primary hwnd=%x lpdds=%x\n", dxw.GethWnd(), lpDDSEmu_Prim); - res=lpdd->CreateClipper(0, &lpddC, NULL); - if (res) OutTraceE("CreateSurface: CreateClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); - res=lpddC->SetHWnd(0, dxw.GethWnd()); - if (res) OutTraceE("CreateSurface: SetHWnd ERROR res=%x(%s)\n", res, ExplainDDError(res)); - res=lpDDSEmu_Prim->SetClipper(lpddC); - if (res) OutTraceE("CreateSurface: SetClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); - } - // can't hook lpDDSEmu_Prim as generic, since the Flip method is unimplemented for a PRIMARY surface! - // better avoid it or hook just useful methods. - //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Prim, dxw.dwDDVersion); - } - - if(lpDDSEmu_Back==NULL){ - ClearSurfaceDesc((void *)&ddsd, dxversion); - ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; - ddsd.ddsCaps.dwCaps = dwBackBufferCaps; - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - if(dxw.dwFlags4 & BILINEAR2XFILTER){ - // double backbuffer size - ddsd.dwWidth = dxw.GetScreenWidth() << 1; - ddsd.dwHeight = dxw.GetScreenHeight() << 1; - } - - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); - if(res) { - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); - } - if(res){ - OutTraceE("CreateSurface: CreateSurface ERROR on DDSEmuBack : res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return; - } - OutTraceDW("CreateSurface: created new DDSEmu_Back=%x\n", lpDDSEmu_Back); - if(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, "DDSEmu_Back", __LINE__); - dxwss.PopSurface(lpDDSEmu_Back); - //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion); - } -} - -void RestoreDDrawSurfaces() -{ - // if it's a ddraw game .... - if(lpPrimaryDD){ - OutTraceDW("RestoreDDrawSurfaces: rebuilding surfaces for dd session %x\n", lpPrimaryDD); - ReleaseS_Type pReleaseS; - CreateSurface_Type pCreateSurface; - switch(iBakBufferVersion){ - case 1: pCreateSurface=(CreateSurface_Type)pCreateSurface1; pReleaseS=pReleaseS1; break; - case 2: pCreateSurface=(CreateSurface_Type)pCreateSurface2; pReleaseS=pReleaseS2; break; - case 3: pCreateSurface=(CreateSurface_Type)pCreateSurface3; pReleaseS=pReleaseS3; break; - case 4: pCreateSurface=(CreateSurface_Type)pCreateSurface4; pReleaseS=pReleaseS4; break; - case 7: pCreateSurface=(CreateSurface_Type)pCreateSurface7; pReleaseS=pReleaseS7; break; - } - if(lpDDSEmu_Back) while((*pReleaseS)(lpDDSEmu_Back)); lpDDSEmu_Back=0; - if(lpDDSEmu_Prim) while((*pReleaseS)(lpDDSEmu_Prim)); lpDDSEmu_Prim=0; - BuildRealSurfaces(lpPrimaryDD, pCreateSurface, iBakBufferVersion); - } -} - -static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildPrimaryEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - // emulated primary surface - memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); - - // handle the surface attributes before the ddsd.dwFlags gets updated: - // if a surface desc is NOT specified, build one - if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); - // then save it - dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; - - OutTraceDW("DDSD_PIXELFORMAT: color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); - ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); - ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT); - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); - // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces - ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - - // create Primary surface - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res){ - OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return res; - } - iBakBufferVersion=dxversion; // v2.03.01 - - OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); - HookDDSurface(lplpdds, dxversion, TRUE); - // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... - - // build a default System palette and apply it to primary surface - if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && - (dxw.dwFlags6 & SYNCPALETTE)){ - if(lpDDP == NULL){ - res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); - if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); - } - // this must be done after hooking - who knows why? - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) { - OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); - } - else iDDPExtraRefCounter++; - } - - // set a global capability value for surfaces that have to blit to primary - // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces - // DDSCAPS_SYSTEMMEMORY makes operations faster, but it is not always good... - dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem - if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; - - if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; - - if(dxw.dwFlags5 & GDIMODE) return DD_OK; - - BuildRealSurfaces(lpdd, pCreateSurface, dxversion); - return DD_OK; -} - -static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildPrimaryFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - // emulated primary surface - memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); - - // handle the surface attributes before the ddsd.dwFlags gets updated: - // if a surface desc is NOT specified, build one - if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); - // then save it - dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; - - OutTraceDW("DDSD_PIXELFORMAT: color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); - - // dwFlags - ddsd.dwFlags &= ~(DDSD_REFRESHRATE); - ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT|DDSD_BACKBUFFERCOUNT); - - // dwBackBufferCount: set to at least 1 - if(!(lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) || (lpddsd->dwBackBufferCount == 0)) ddsd.dwBackBufferCount = 1; - - // dwCaps - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM|DDSCAPS_FRONTBUFFER); - ddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - - // dwWidth & dwHeight - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - - // create Primary surface - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res){ - OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return res; - } - iBakBufferVersion=dxversion; // v2.03.01 - - OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); - HookDDSurface(lplpdds, dxversion, TRUE); - // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... - - // build a default System palette and apply it to primary surface - if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && - (dxw.dwFlags6 & SYNCPALETTE)){ - if(lpDDP == NULL){ - res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); - if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); - } - // this must be done after hooking - who knows why? - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) { - OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); - } - else iDDPExtraRefCounter++; - } - - // set a global capability value for surfaces that have to blit to primary - dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem - if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; - - if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; - - if(dxw.dwFlags5 & GDIMODE) return DD_OK; - - BuildRealSurfaces(lpdd, pCreateSurface, dxversion); - return DD_OK; -} - -static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildPrimaryDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - // genuine primary surface - memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); - ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX); - // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested - // this impact also on capabilities for temporary surfaces for AERO optimized handling - if ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - - // create Primary surface - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res){ - if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ - LPDIRECTDRAWSURFACE lpPrim; - GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } - OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); - (*pGetGDISurface)(lpPrimaryDD, &lpPrim); - while ((*pReleaseSMethod(dxversion))(lpPrim)); - res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - } - /* fall through */ - if(res){ - OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return res; - } - } - - OutTraceDW("CreateSurface: created PRIMARY DDSPrim=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); - - if(dxw.dwFlags1 & EMULATEBUFFER){ - lpDDSEmu_Prim = *lplpdds; - dxwss.PopSurface(lpDDSEmu_Prim); - - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; - // warning: can't create zero sized backbuffer surface !!!! - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - ddsd.ddsCaps.dwCaps = 0; - if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res){ - OutTraceE("CreateSurface: ERROR on DDSPrim res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); - return res; - } - OutTraceDW("CreateSurface: created FIX DDSPrim=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim(2)", __LINE__); - } - - iBakBufferVersion=dxversion; // v2.03.37 - HookDDSurface(lplpdds, dxversion, TRUE); - if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); - - return DD_OK; -} - -static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildBackBufferEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - // create BackBuffer surface - memcpy(&ddsd, lpddsd, lpddsd->dwSize); - ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); - ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); - - // v2.03.75: if a surface desc is NOT specified, build one. This will allow ZBUF attach. - if(!(lpddsd->dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); - - // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces - ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); - if(ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; // necessary: Martian Gotic crashes otherwise - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - GetPixFmt(&ddsd); - - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res) { - OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return res; - } - - OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); - HookDDSurface(lplpdds, dxversion, FALSE); // added !!! - iBakBufferVersion=dxversion; // v2.02.31 - - if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && - (dxw.dwFlags6 & SYNCPALETTE)){ - if(lpDDP == NULL){ - res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); - if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); - } - // this must be done after hooking - who knows why? - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) { - OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); - } - else iDDPExtraRefCounter++; - } - - // V2.1.85/V2.2.34: tricky !!!! - // When a real backbuffer is created, it has a reference to its frontbuffer. - // some games (Monopoly 3D) may depend on this setting - i.e. they could close - // the exceeding references - so this is better be replicated adding an initial - // reference to the zero count. But you don't have to do this if the backbuffer - // is created independently by the primary surface. - (*lplpdds)->AddRef(); // should it be repeated BBCount times???? - - return DD_OK; -} - -static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - //MessageBox(NULL, "BuildBackBufferFlippable", "DxWnd", MB_OK); - - // create BackBuffer surface - memcpy(&ddsd, lpddsd, lpddsd->dwSize); - - ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); - ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); - - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FRONTBUFFER|DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); - ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); - - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - GetPixFmt(&ddsd); - - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res) { - OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); - return res; - } - - OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); - HookDDSurface(lplpdds, dxversion, FALSE); // added !!! - iBakBufferVersion=dxversion; // v2.02.31 - - if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && - (dxw.dwFlags6 & SYNCPALETTE)){ - if(lpDDP == NULL){ - res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); - if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__); - } - // this must be done after hooking - who knows why? - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) { - OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); - } - else iDDPExtraRefCounter++; - } - - return DD_OK; -} - -static HRESULT AttachBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - HRESULT res; - LPDIRECTDRAWSURFACE lpDDSPrim; - OutTraceDW("DEBUG: AttachBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - - // retrieve the attached backbuffer surface and hook it - - if(lpddsd->dwBackBufferCount == 0) return DD_OK; // nothing to retrieve - - GetAttachedSurface_Type pGetAttachedSurface; - DDSCAPS2 caps; - switch(dxversion){ - case 1: pGetAttachedSurface = pGetAttachedSurface1; break; - case 2: pGetAttachedSurface = pGetAttachedSurface2; break; - case 3: pGetAttachedSurface = pGetAttachedSurface3; break; - case 4: pGetAttachedSurface = pGetAttachedSurface4; break; - case 7: pGetAttachedSurface = pGetAttachedSurface7; break; - } - memset(&caps, 0, sizeof(caps)); - caps.dwCaps = DDSCAPS_BACKBUFFER; - lpDDSPrim = dxwss.GetPrimarySurface(); - res = (*pGetAttachedSurface)(lpDDSPrim, (LPDDSCAPS)&caps, lplpdds); - if(res){ - OutTraceE("CreateSurface: GetAttachedSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - - OutTraceDW("CreateSurface: retrieved BACK DDSBack=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); - HookDDSurface(lplpdds, dxversion, FALSE); // added !!! - iBakBufferVersion=dxversion; // v2.02.31 - - return DD_OK; -} - -static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildBackBufferDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - // create BackBuffer surface - // ClearSurfaceDesc((void *)&ddsd, dxversion); - memcpy(&ddsd, lpddsd, lpddsd->dwSize); - ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); - ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH); - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX); - // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested - if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) { - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - } - else { - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); - } - if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; - ddsd.dwWidth = dxw.GetScreenWidth(); - ddsd.dwHeight = dxw.GetScreenHeight(); - - if (dxw.dwFlags2 & BACKBUFATTACH) { - LPDIRECTDRAWSURFACE lpPrim; - DDSURFACEDESC2 prim; - GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } - (*pGetGDISurface)(lpPrimaryDD, &lpPrim); - memset(&prim, 0, sizeof(DDSURFACEDESC2)); - prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); - res=lpPrim->GetSurfaceDesc((DDSURFACEDESC *)&prim); - (*pReleaseSMethod(dxversion))(lpPrim); - ddsd.dwWidth = prim.dwWidth; - ddsd.dwHeight = prim.dwHeight; - OutTraceDW("BMX FIX: res=%x(%s) wxh=(%dx%d)\n", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight); - } - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__)); - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - if(res) { - if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){ - OutTraceDW("CreateSurface: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__); - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); - } - if(res){ - OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - } - - OutTraceDW("CreateSurface: created BACK DDSBack=%x\n", *lplpdds); - if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); - HookDDSurface(lplpdds, dxversion, FALSE); // added !!! - iBakBufferVersion=dxversion; // v2.02.31 - - return DD_OK; -} - -static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildGenericEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... - FixSurfaceCaps(&ddsd, dxversion); - // It looks that DDSCAPS_SYSTEMMEMORY surfaces can perfectly be DDSCAPS_3DDEVICE as well. - // For "Risk II" it is necessary that both the primary surface and the offscreen surfaces are generated - // with the same type, so that assuming an identical lPitch and memcopy-ing from one buffer to the - // other is a legitimate operation. - - if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode - if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && - (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) - ){ - DWORD dwWidth; - dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; - if(dwWidth != ddsd.dwWidth) OutTraceDW("CreateSurface: fixed surface width %d->%d\n", ddsd.dwWidth, dwWidth); - ddsd.dwWidth = dwWidth; - } - } - - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); - if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ - OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); - } - if (res) { - OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - - OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", - *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__)); - - // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. - // fixes "Virtua Fighter PC" palette bug - if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) - OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); - else { - OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); - iDDPExtraRefCounter++; - } - } - - // diagnostic hooks .... - HookDDSurface(lplpdds, dxversion, FALSE); - - return DD_OK; -} - -static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - DDSURFACEDESC2 ddsd; - HRESULT res; - - OutTraceDW("DEBUG: BuildGenericFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... - FixSurfaceCaps(&ddsd, dxversion); - - if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode - if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && - (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) - ){ - DWORD dwWidth; - dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; - if(dwWidth != ddsd.dwWidth) OutTraceDW("CreateSurface: fixed surface width %d->%d\n", ddsd.dwWidth, dwWidth); - ddsd.dwWidth = dwWidth; - } - } - - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); - if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ - OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); - } - if (res) { - OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - - OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", - *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__)); - - // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. - // fixes "Virtua Fighter PC" palette bug - if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ - res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); - if(res) - OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); - else { - OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); - iDDPExtraRefCounter++; - } - } - - // diagnostic hooks .... - HookDDSurface(lplpdds, dxversion, FALSE); - - return DD_OK; -} - -static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - HRESULT res; - - OutTraceDW("DEBUG: BuildGenericDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); - OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__)); - - res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); - if(res){ - // v2.02.60: Ref. game Incoming GOG release, post by Marek, error DDERR_UNSUPPORTED while trying to create ZBUFFER surface - if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){ - OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); - lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; - res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); - } - if(res){ - OutTraceE("CreateSurface: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - } - - OutTraceDW("CreateSurface: CREATED lpddsd=%x version=%d %s\n", - *lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__)); - - // hooks .... - HookDDSurface(lplpdds, dxversion, FALSE); - - - return DD_OK; -} - -static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, - LPDIRECTDRAWSURFACE *lplpdds, void *pu) -{ - HRESULT res; - DDSURFACEDESC2 ddsd; - LPDIRECTDRAWSURFACE lpDDSPrim; - LPDIRECTDRAWSURFACE lpDDSBack = NULL; - DWORD CurFlags; - int TargetSize; - typedef HRESULT (*BuildSurface_Type)(LPDIRECTDRAW, CreateSurface_Type, LPDDSURFACEDESC2, int, LPDIRECTDRAWSURFACE *, void *); - BuildSurface_Type BuildPrimary; - BuildSurface_Type BuildBackBuffer; - BuildSurface_Type AttachBackBuffer; - BuildSurface_Type BuildGeneric; - enum { - PRIMARY_DIRECT = 0, - PRIMARY_FLIPPABLE, - PRIMARY_EMULATED - } SurfaceMode; - - OutTraceDDRAW("CreateSurface: Version=%d lpdd=%x %s\n", - dxversion, lpdd, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[CreateSurface]", __LINE__)); - - // v2.03.95.fx1 - deleted: some texture handling REQUIRES a proper FourCC codec. - // maybe it could be suppressed by a dedicated config. flag and on primary surfaces only? - //lpddsd->ddpfPixelFormat.dwFourCC = 0; - - SurfaceMode = (dxw.dwFlags1 & EMULATESURFACE) ? ((dxw.dwFlags6 & FLIPEMULATION) ? PRIMARY_EMULATED : PRIMARY_FLIPPABLE) : PRIMARY_DIRECT; - - switch(SurfaceMode) { - case PRIMARY_DIRECT: - BuildPrimary = BuildPrimaryDir; - BuildBackBuffer = BuildBackBufferDir; - AttachBackBuffer = BuildBackBufferDir; - BuildGeneric = BuildGenericDir; - break; - case PRIMARY_FLIPPABLE: - BuildPrimary = BuildPrimaryFlippable; - BuildBackBuffer = BuildBackBufferFlippable; - AttachBackBuffer = AttachBackBufferFlippable; - BuildGeneric = BuildGenericFlippable; - //BuildGeneric = BuildGenericEmu; - break; - case PRIMARY_EMULATED: - BuildPrimary = BuildPrimaryEmu; - BuildBackBuffer = BuildBackBufferEmu; - AttachBackBuffer = BuildBackBufferEmu; - BuildGeneric = BuildGenericEmu; - break; - } - - // check for lpddsd->dwSize value - TargetSize=(dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); - if(lpddsd->dwSize != TargetSize){ - char sMsg[81]; - sprintf_s(sMsg,80, "CreateSurface: ASSERT bad dwSize=%d dxversion=%d\n", - lpddsd->dwSize, dxversion); - OutTraceDW(sMsg); - if(IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); - return DDERR_INVALIDPARAMS; - } - - //GHO workaround (needed for WarWind, Rogue Spear): - if (lpddsd->dwFlags && !(lpddsd->dwFlags & 0x1)){ - OutTraceDW("CreateSurface: fixing illegal dwFlags value: %x -> %x\n", - lpddsd->dwFlags, (lpddsd->dwFlags | DDSD_CAPS)); - lpddsd->dwFlags |= DDSD_CAPS; - } - - memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy - - // v2.02.38: this is odd: in "Star Force Deluxe" there is no PRIMARY surface, but a surface with - // 0 flags and 0 capabilities serves for this purpose. Is it a side-effect of old ddraw releases? - if((dxversion == 1) && ((ddsd.dwFlags & ~DDSD_BACKBUFFERCOUNT) == 0)){ // Star Force Deluxe - ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - //if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) ddsd.ddsCaps.dwCaps |= DDSCAPS_PALETTE; - } - - // creation of the primary surface.... - if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){ - dxwss.ClearSurfaceList(); // v2.03.83: "Daytona USA" would saturate the list otherwise - SetVSyncDelays(dxversion, lpdd); - GetHookInfo()->Height=(short)dxw.GetScreenHeight(); - GetHookInfo()->Width=(short)dxw.GetScreenWidth(); - GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; - GetHookInfo()->DXVersion=dxversion; - lpPrimaryDD = lpdd; // v2.1.87 - memcpy(&DDSD_Prim, lpddsd, sizeof(DDSD_Prim)); // v2.02.37 - - // beware of the different behaviour between older and newer directdraw releases... - if(dxversion >= 4){ - if (lpDDSEmu_Back) while(lpDDSEmu_Back->Release()); - if (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release()); - if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) { // Praetorians !!!! - lpDDSBack = dxwss.GetBackBufferSurface(); - if (lpDDSBack) { - if(dxw.dwFlags6 & FLIPEMULATION) while(lpDDSBack->Release()); - dxwss.PopSurface(lpDDSBack); - lpDDSBack = NULL; - } - } - } - lpDDSEmu_Back=NULL; - lpDDSEmu_Prim=NULL; - - int BBCount=0; // or 1 ?? - if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount; - if ((BBCount > 0) && (iBakBufferVersion < 4)){ - lpDDSBack=NULL; - OutTraceDW("CreateSurface: backbuffer cleared - BackBufferCount=%d\n", BBCount); - } - - if (BBCount > MAXBACKBUFFERS){ - char sMsg[81]; - sprintf_s(sMsg, 80, "CreateSurface: BackBufferCount=%d\n", BBCount); - OutTraceDW(sMsg); - if (IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); - // recover ... - BBCount = MAXBACKBUFFERS; - } - - // build emulated primary surface, real primary and backbuffer surfaces - CurFlags=ddsd.dwFlags; - res=BuildPrimary(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); - if(res) return res; - lpDDSPrim = *lplpdds; - dxwss.PushPrimarySurface(lpDDSPrim, dxversion); - RegisterPixelFormat(dxversion, lpDDSPrim); - - if (BBCount){ - // build emulated backbuffer surface - res=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL); - if(res) return res; - dxwss.PushBackBufferSurface(lpDDSBack, dxversion); - } - - if(IsTraceDDRAW){ - char sInfo[256+1]; - sprintf(sInfo, "CreateSurface: created DDSPrim=%x DDSBack=%x", lpDDSPrim, lpDDSBack); - if(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)) sprintf(sInfo, "%s DDSEmu_Prim=%x", sInfo, lpDDSEmu_Prim); - if(dxw.dwFlags1 & EMULATESURFACE) sprintf(sInfo, "%s DDSEmu_Back=%x", sInfo, lpDDSEmu_Back); - strcat(sInfo, "\n"); - OutTrace(sInfo); - } - - // rebuild the clipper area - if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); - - // v2.2.64: added extra ref needed to preserve ddraw session for later use. Is it a ddraw1 legacy? - // seems to fix problems in "Warhammer 40K Rites Of War" that uses a ddraw session after reaching 0 refcount. - // v2.2.84: avoid the extra referenced in non windowed mode since it causes the window shift reported by gsky916 - // for Wind Fantasy SP. - // v2.3.59: same extra reference is needed by "Wahammer Chaos Gate" that uses ddraw interface release 2 - // v2.3.72: fixed previous fix: condition is <=2, not >=2 ! - // Be aware that it may perhaps become <=3, if we get the same problem elsewhere - // v2.3.96: deleted the if(Windowized) condition: AddRef is needed also in fullscreen mode. - if(dxw.dwDDVersion<=2) lpdd->AddRef(); - - return DD_OK; - } - - // a request for a separate (not complex) backbuffer to attach later on, maybe. - if ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)){ - if (lpDDSBack) { - OutTraceDW("CreateSurface: returning current DDSBack=%x\n", lpDDSBack); - *lplpdds = lpDDSBack; - return DD_OK; - } - - res=BuildBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); - if(res == DD_OK) { - dxwss.PushBackBufferSurface(*lplpdds, dxversion); - dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); - } - return res; - } - - // if nothing else, it's a generic/zbuffer surface - - res=BuildGeneric(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, pu); - if(!res) { - dxwss.PopSurface(*lplpdds); - if(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) { - // v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice - if(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); - OutTraceDW("CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); - } - } - - return res; -} - - HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) @@ -3541,12 +2691,23 @@ void BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line) return; } -HRESULT WINAPI PrimaryBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +HRESULT WINAPI PrimaryBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { - return (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0); + HRESULT res; + res = (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), lpddbltfx); + if(res == DDERR_SURFACELOST) { + if(lpdds->IsLost()) { + OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); + lpdds->Restore(); + if(res) { + OutTraceE("PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); + } + } + } + return res; } -HRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +HRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; RECT client; @@ -3555,12 +2716,12 @@ HRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE iXOffset = (client.right - dxw.GetScreenWidth()) >> 1; iYOffset = (client.bottom - dxw.GetScreenHeight()) >> 1; if(dxw.dwFlags3 & FORCECLIPPER){ - RECT destrect; - destrect.left = iXOffset + lpdestrect->left; - destrect.right = iXOffset + lpdestrect->right; - destrect.top = iYOffset + lpdestrect->top; - destrect.bottom = iYOffset + lpdestrect->bottom; - res = (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0); + RECT destrect; + destrect.left = iXOffset + lpdestrect->left; + destrect.right = iXOffset + lpdestrect->right; + destrect.top = iYOffset + lpdestrect->top; + destrect.bottom = iYOffset + lpdestrect->bottom; + res = (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), 0); } else { BltFast_Type pBltFast; @@ -3571,12 +2732,21 @@ HRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE case 4: pBltFast=pBltFast4; break; case 7: pBltFast=pBltFast7; break; } - res= (*pBltFast)(lpdds, iXOffset + lpdestrect->left, iYOffset + lpdestrect->top, lpddssrc, lpsrcrect, DDBLTFAST_WAIT); + res= (*pBltFast)(lpdds, iXOffset + lpdestrect->left, iYOffset + lpdestrect->top, lpddssrc, lpsrcrect, GetFlipWaitFlags(DDFLIP_WAIT)); + } + if(res == DDERR_SURFACELOST) { + if(lpdds->IsLost()) { + OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); + res = lpdds->Restore(); + if(res) { + OutTraceE("PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); + } + } } return res; } -HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; DDSURFACEDESC2 ddsd; @@ -3636,10 +2806,10 @@ HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFA else { while(TRUE) { if(bUseFastBlt){ - res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT); + res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, GetFlipWaitFlags(DDBLTFAST_WAIT)); } else{ - res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0); + res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0); } if(res == DDERR_INVALIDRECT){ OutTraceDW("PrimaryStretchBlt: adding clipper ddversion=%x at %d\n", iDirectDrawVersion, __LINE__); @@ -3668,17 +2838,20 @@ HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFA res=(*pSetClipper)(lpdds, lpddC); if(res) OutTraceE("SetClipper ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceDW("PrimaryStretchBlt: added clipper lpddc=%x at %d\n", lpddC, __LINE__); - res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0); + + res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0); } - if(res) OutTraceE("PrimaryStretchBlt: BltFast ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res) OutTraceE("PrimaryStretchBlt: %s ERROR %x(%s) at %d\n", bUseFastBlt?"BltFast":"Blt", res, ExplainDDError(res), __LINE__); if(res == DDERR_SURFACELOST){ if(lpdds->IsLost()) { + OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); res = lpdds->Restore(); if(res) { OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); } } if(lpddsTmp->IsLost()) { + OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpddsTmp); res = lpddsTmp->Restore(); if(res) { OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpddsTmp, res, ExplainDDError(res), __LINE__); @@ -3721,7 +2894,7 @@ void *LoadFilter(char *apiname) return (*pGetProcAddress)(filterlib, apiname); } -HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; typedef void (WINAPI *Resize_HQ_Type)( unsigned char*, RECT *, int, unsigned char*, RECT *, int); @@ -3856,7 +3029,7 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF return res; } -HRESULT WINAPI PrimaryNoBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +HRESULT WINAPI PrimaryNoBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { return DD_OK; } @@ -3937,10 +3110,14 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE lpddsTmp; LPDIRECTDRAWSURFACE lpDDSBack; + DWORD dwBltFlags; + BOOL bEmulatedFlip; + bEmulatedFlip = dxw.Windowize || dxw.IsEmulated; IsPrim=dxwss.IsAPrimarySurface(lpdds); - OutTraceDDRAW("Flip: lpdds=%x%s, src=%x, flags=%x(%s) version=%d\n", - lpdds, IsPrim?"(PRIM)":"", lpddssrc, dwflags, ExplainFlipFlags(dwflags), dxversion); + OutTraceDDRAW("Flip(%d): %s lpdds=%x%s, src=%x, flags=%x(%s) version=%d\n", + dxversion, bEmulatedFlip?"EMULATED":"GENUINE", + lpdds, IsPrim?"(PRIM)":"", lpddssrc, dwflags, ExplainFlipFlags(dwflags)); Blt_Type pBlt; switch (dxversion){ @@ -3982,13 +3159,35 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds return res; } +#ifdef HANDLEFLIPPABLE + if(!bEmulatedFlip){ + dwBltFlags = GetFlipWaitFlags(dwflags); + res=(*pFlip)(lpdds, lpddssrc, dwBltFlags); + if(res) OutTraceE("Flip: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } +#endif + // emulation to primary surface Flip - you can't flip to window surfaces, // so you have to replace it with Blt operations. - - if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0); + // v2.03.98: moved closer to actual video operations to avoid the risk of losing the end of vertical blank period + // while doing calculations + //if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0); lpDDSBack = dxwss.GetBackBufferSurface(); + // from ddraw.h: + // On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish + // to override the default and use time when the accelerator is busy (as denoted by + // the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT. + + if(dxversion >= 7) + dwBltFlags = (dwflags & DDFLIP_DONOTWAIT) ? DDBLT_DONOTWAIT : DDBLT_WAIT; + else + dwBltFlags = (dwflags & DDFLIP_WAIT) ? DDBLT_WAIT : 0; + + dwBltFlags = GetBltWaitFlags(dwBltFlags); + if(dxw.dwFlags4 & NOFLIPEMULATION){ HRESULT res2; // create a temporary working surface @@ -4034,7 +3233,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds if(lpddssrc){ //res=lpdds->Blt(0, lpddssrc, 0, DDBLT_WAIT, 0); - res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpddssrc, NULL, DDBLT_WAIT, 0, TRUE); + res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpddssrc, NULL, dwBltFlags, 0, TRUE); } else{ if(!lpDDSBack){ @@ -4046,10 +3245,10 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds NullArea.left=NullArea.top=0; NullArea.bottom=dxw.GetScreenHeight(); NullArea.right=dxw.GetScreenWidth(); - res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, &NullArea, DDBLT_WAIT, 0, TRUE); + res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, &NullArea, dwBltFlags, 0, TRUE); } else - res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, NULL, DDBLT_WAIT, 0, TRUE); + res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, NULL, dwBltFlags, 0, TRUE); lpddssrc = lpDDSBack; } @@ -4214,10 +3413,21 @@ HRESULT WINAPI extBltFast7(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDI HRESULT WINAPI extWaitForVerticalBlank(WaitForVerticalBlank_Type pWaitForVerticalBlank, LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { + // set a global to avoid double calls + bVSyncDone = TRUE; + + if(dxw.dwFlags8 & FORCENOVSYNC) return DD_OK; + if(dxw.dwFlags1 & SAVELOAD){ dxw.VSyncWait(); - return 0; + return DD_OK; } + + if(dxw.dwFlags8 & VSYNCSCANLINE){ + dxw.VSyncWaitLine(((DWORD)dxw.ScanLine * 100) / dxw.GetScreenHeight()); + return DD_OK; + } + return (*pWaitForVerticalBlank)(lpdd, dwflags, hevent); } @@ -4407,7 +3617,7 @@ static HRESULT WINAPI extSetClipper(SetClipper_Type pSetClipper, LPDIRECTDRAWSUR // Needed also to avoid "New Yourk Racer" intro movie clipping. if(dxw.dwFlags1 & SUPPRESSCLIPPING) return 0; - if(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)){ + if(dxw.IsEmulated){ if (dxw.dwFlags3 & FORCECLIPPER){ // v2.03.48: FORCECLIPPER ensures that a valid clipper is issued on the real primary surface // and on the main game window. Then, you won't be able to BltFast any longer.... @@ -5571,6 +4781,8 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI IsZBuf=(caps->dwCaps & DDSCAPS_ZBUFFER); if(IsZBuf) sLabel="(ZBUFFER)"; + if(!(dxw.IsEmulated || dxw.Windowize)) return res; + if (IsPrim) { IsFixed=TRUE; caps->dwCaps |= DDSD_Prim.ddsCaps.dwCaps; @@ -5657,6 +4869,8 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes(lpddsd, "GetSurfaceDesc", __LINE__)); + if(!(dxw.IsEmulated || dxw.Windowize)) return res; + if (IsPrim) { IsFixed=TRUE; if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 168596c..d9a679b 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -136,12 +136,12 @@ static char *Flag7Names[32]={ "SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES", "SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES", "MAXIMUMRES", "LOCKCOLORDEPTH", "FIXSMACKLOOP", "FIXFREELIBRARY", - "ANCHORED", "", "", "", + "ANCHORED", "CLEARTEXTUREFOURCC", "NODDEXCLUSIVEMODE", "COPYNOSHIMS", }; static char *Flag8Names[32]={ - "", "", "", "", - "", "", "", "", + "FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC", + "VSYNCSCANLINES", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -1398,9 +1398,9 @@ void HookInit(TARGETMAP *target, HWND hwnd) OSVERSIONINFO osinfo; strcpy(sInfo, ""); if(hwnd) sprintf(sInfo, " hWnd=%x ParentWnd=%x desktop=%x", hwnd, dxw.hParentWnd, GetDesktopWindow()); - OutTrace("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d) monitor=%d%s\n", + OutTrace("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d) init-max=(%d,%d) monitor=%d%s\n", target->path, target->module, dxversions[dxw.dwTargetDDVersion], - target->posx, target->posy, target->sizx, target->sizy, target->monitorid, sInfo); + target->posx, target->posy, target->sizx, target->sizy, target->resw, target->resh, target->monitorid, sInfo); osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx(&osinfo)){ OutTrace("OS=(%d.%d) build=%d platform=%d service pack=%s\n", @@ -1411,6 +1411,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) if (dxw.dwFlags7 & LIMITDDRAW) OutTrace("HookInit: max supported IDidrectDrawInterface=%d\n", dxw.MaxDdrawInterface); if (dxw.dwFlags7 & CPUSLOWDOWN) OutTrace("HookInit: CPU slowdown ratio 1:%d\n", dxw.SlowRatio); if (dxw.dwFlags7 & CPUMAXUSAGE) OutTrace("HookInit: CPU maxusage ratio 1:%d\n", dxw.SlowRatio); + if (dxw.dwFlags8 & VSYNCSCANLINE) OutTrace("HookInit: VSync Scanline=%d\n", dxw.ScanLine); } if (hwnd && IsDebug){ diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 4af2211..ba33cf4 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -94,6 +94,7 @@ void dxwCore::InitTarget(TARGETMAP *target) dwFlags8 = target->flags8; dwTFlags = target->tflags; Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE; + IsEmulated = (dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)) ? TRUE : FALSE; IsVisible = TRUE; if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE; gsModules = target->module; @@ -143,6 +144,7 @@ void dxwCore::InitTarget(TARGETMAP *target) dwScreenHeight = 600; SlowRatio = target->SlowRatio; + ScanLine = target->ScanLine; GDIEmulationMode = GDIMODE_NONE; // default if (dwFlags2 & GDISTRETCHED) GDIEmulationMode = GDIMODE_STRETCHED; @@ -693,6 +695,27 @@ void dxwCore::VSyncWait() if(step >= iRefreshDelayCount) step=0; } +void dxwCore::VSyncWaitLine(DWORD ScanLine) +{ + extern LPDIRECTDRAW lpPrimaryDD; + static DWORD iLastScanLine = 0; + DWORD iCurrentScanLine; + if (!lpPrimaryDD) return; + while(1){ + HRESULT res; + if(res=lpPrimaryDD->GetScanLine(&iCurrentScanLine)) { + OutTraceE("VSyncWaitLine: GetScanLine ERROR res=%x\n", res); + iLastScanLine = 0; + break; // error + } + if((iLastScanLine <= ScanLine) && (iCurrentScanLine > ScanLine)) { + OutTraceB("VSyncWaitLine: line=%d last=%d\n", iCurrentScanLine, iLastScanLine); + break; + } + iLastScanLine = iCurrentScanLine; + (*pSleep)(1); + } +} static float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F}; @@ -1194,12 +1217,12 @@ void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam) if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE); } - if ((dxw.dwFlags1 & PREVENTMAXIMIZE) && (hwnd==hWnd)){ // disable maximize settings + if ((dxw.dwFlags5 & UNLOCKZORDER) && (hwnd==hWnd)){ // disable maximize settings if (lpSS->styleNew & WS_EX_TOPMOST){ OutTraceDW("%s: prevent EXSTYLE topmost style\n", ApiName); lpSS->styleNew &= ~WS_EX_TOPMOST; } - } + } break; default: break; diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 9b41a0f..93cf00c 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -140,6 +140,7 @@ public: // methods void MapKeysInit(); void SetVSyncDelays(UINT); void VSyncWait(); + void VSyncWaitLine(DWORD); void DumpDesktopStatus(); void ToggleFreezedTime(); void GetMonitorWorkarea(LPRECT, BOOL); @@ -150,6 +151,7 @@ public: // simple data variables int MonitorId; BOOL Windowize; BOOL IsVisible; + BOOL IsEmulated; DDPIXELFORMAT ActualPixelFormat; DDPIXELFORMAT VirtualPixelFormat; DWORD dwDDVersion; @@ -191,6 +193,7 @@ public: // simple data variables short Coordinates; short MaxScreenRes; short SlowRatio; + short ScanLine; HDC RealHDC; HDC VirtualHDC; int GDIEmulationMode; @@ -198,6 +201,8 @@ public: // simple data variables RECT VirtualDesktop; BOOL bHintActive; BOOL bAutoScale; + DWORD dwRealScreenWidth; + DWORD dwRealScreenHeight; // Implementation protected: diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 4fbbfb8..c921ccc 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.97.fx2" +#define VERSION "2.03.98" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 764fc2f8620579549a68b853343e640eb00b3823..bafda671b99663b3a162ed6be94aa8f0d4a06201 100644 GIT binary patch literal 274432 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 z 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 Y@yG@ayMkLaiK>r_K?EjtwK*f<-(wL7xBvhE diff --git a/dll/dxwnd.vs2008.vcproj b/dll/dxwnd.vs2008.vcproj index da32afb..2b33143 100644 --- a/dll/dxwnd.vs2008.vcproj +++ b/dll/dxwnd.vs2008.vcproj @@ -257,6 +257,10 @@ RelativePath=".\ddblit.cpp" > + + diff --git a/dll/dxwnd.vs2008.vcproj.gho-PC.gho.user b/dll/dxwnd.vs2008.vcproj.gho-PC.gho.user deleted file mode 100644 index 38b5a45..0000000 --- a/dll/dxwnd.vs2008.vcproj.gho-PC.gho.user +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index 0575cf5..398644d 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -2101,6 +2101,12 @@ HRESULT WINAPI extD3DGetDeviceCaps(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceT pCaps->MaxPixelShader30InstructionSlots); } } + + if(dxw.dwFlags7 & SUPPRESSOVERLAY){ + if(pCaps->Caps & D3DCAPS_OVERLAY) OutTraceDW("GetDeviceCaps(%d): SUPPRESS OVERLAY CAP\n"); + pCaps->Caps &= ~D3DCAPS_OVERLAY; + } + return res; } diff --git a/dll/hddraw.h b/dll/hddraw.h index 6a2ccb2..d7d76dc 100644 --- a/dll/hddraw.h +++ b/dll/hddraw.h @@ -51,6 +51,7 @@ typedef HRESULT (WINAPI *GetSurfaceFromDC_Type)(LPDIRECTDRAW, HDC, LPDIRECTDRAWS typedef HRESULT (WINAPI *RestoreAllSurfaces_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *TestCooperativeLevel_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *GetDeviceIdentifier_Type)(LPDIRECTDRAW, LPDDDEVICEIDENTIFIER, DWORD); +typedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD); // STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE; // STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE; @@ -125,15 +126,15 @@ extern void HookTexture(LPVOID *, int); extern int Set_dwSize_From_Surface(); extern void SetBltTransformations(int); -extern HRESULT WINAPI PrimaryBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI PrimaryNoBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI PrimaryStretchBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI PrimaryFastBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); -extern HRESULT WINAPI PrimaryBilinearBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +extern HRESULT WINAPI PrimaryBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); +extern HRESULT WINAPI PrimaryNoBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); +extern HRESULT WINAPI PrimaryStretchBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); +extern HRESULT WINAPI PrimaryFastBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); +extern HRESULT WINAPI PrimaryBilinearBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); typedef HRESULT (WINAPI *EmuBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPVOID); typedef HRESULT (WINAPI *RevBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); -typedef HRESULT (WINAPI *PrimaryBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +typedef HRESULT (WINAPI *PrimaryBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern EmuBlt_Type pEmuBlt; extern RevBlt_Type pRevBlt; diff --git a/dll/imagehlp.cpp b/dll/imagehlp.cpp index e0cedd1..7d62798 100644 --- a/dll/imagehlp.cpp +++ b/dll/imagehlp.cpp @@ -9,14 +9,40 @@ typedef PIMAGE_DEBUG_INFORMATION (WINAPI *MapDebugInformation_Type)(HANDLE, PCSTR, PCSTR, ULONG); typedef BOOL (WINAPI *UnmapDebugInformation_Type)(PIMAGE_DEBUG_INFORMATION); +typedef BOOL (WINAPI *SymInitialize_Type)(HANDLE, PCTSTR, BOOL); +typedef BOOL (WINAPI *SymCleanup_Type)(HANDLE); +typedef BOOL (WINAPI *StackWalk_Type)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); +typedef LPVOID (WINAPI *SymFunctionTableAccess_Type)(HANDLE, DWORD); +typedef LPVOID (WINAPI *SymGetModuleBase_Type)(HANDLE, DWORD); +typedef BOOL (WINAPI *SymGetSymFromAddr_Type)(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL); + PIMAGE_DEBUG_INFORMATION WINAPI extMapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG); BOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); +BOOL WINAPI extSymInitialize(HANDLE, PCTSTR, BOOL); +BOOL WINAPI extSymCleanup(HANDLE); +BOOL WINAPI extStackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); +LPVOID WINAPI extSymFunctionTableAccess(HANDLE, DWORD); +LPVOID WINAPI extSymGetModuleBase(HANDLE, DWORD); +BOOL WINAPI extSymGetSymFromAddr(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL); + MapDebugInformation_Type pMapDebugInformation = NULL; UnmapDebugInformation_Type pUnmapDebugInformation = NULL; +SymInitialize_Type pSymInitialize; +SymCleanup_Type pSymCleanup; +StackWalk_Type pStackWalk; +SymFunctionTableAccess_Type pSymFunctionTableAccess; +SymGetModuleBase_Type pSymGetModuleBase; +SymGetSymFromAddr_Type pSymGetSymFromAddr; static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "MapDebugInformation", (FARPROC)NULL, (FARPROC *)&pMapDebugInformation, (FARPROC)extMapDebugInformation}, {HOOK_IAT_CANDIDATE, 0, "UnmapDebugInformation", (FARPROC)NULL, (FARPROC *)&pUnmapDebugInformation, (FARPROC)extUnmapDebugInformation}, + {HOOK_IAT_CANDIDATE, 0, "SymInitialize", (FARPROC)NULL, (FARPROC *)&pSymInitialize, (FARPROC)extSymInitialize}, + {HOOK_IAT_CANDIDATE, 0, "SymCleanup", (FARPROC)NULL, (FARPROC *)&pSymCleanup, (FARPROC)extSymCleanup}, + {HOOK_IAT_CANDIDATE, 0, "StackWalk", (FARPROC)NULL, (FARPROC *)&pStackWalk, (FARPROC)extStackWalk}, + {HOOK_IAT_CANDIDATE, 0, "SymFunctionTableAccess", (FARPROC)NULL, (FARPROC *)&pSymFunctionTableAccess, (FARPROC)extSymFunctionTableAccess}, + {HOOK_IAT_CANDIDATE, 0, "SymGetModuleBase", (FARPROC)NULL, (FARPROC *)&pSymGetModuleBase, (FARPROC)extSymGetModuleBase}, + {HOOK_IAT_CANDIDATE, 0, "SymGetSymFromAddr", (FARPROC)NULL, (FARPROC *)&pSymGetSymFromAddr, (FARPROC)extSymGetSymFromAddr}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -60,3 +86,44 @@ BOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo) return TRUE; } +BOOL WINAPI extSymInitialize(HANDLE hProcess, PCTSTR UserSearchPath, BOOL fInvadeProcess) +{ + OutTrace("SymInitialize: hprocess=%x usrsearchpath=\"%s\" invadeproc=%x\n", hProcess, UserSearchPath, fInvadeProcess); + return TRUE; +} + +BOOL WINAPI extSymCleanup(HANDLE hProcess) +{ + OutTrace("SymCleanup: hprocess=%x\n", hProcess); + return TRUE; +} + +BOOL WINAPI extStackWalk(DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, LPVOID ContextRecord, + PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, + PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress) +{ + OutTrace("SymCleanup: hprocess=%x\n", hProcess); + // too complex, pretend we have an error + return FALSE; +} + +LPVOID WINAPI extSymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase) +{ + OutTrace("SymFunctionTableAccess: hprocess=%x addrbase=%x\n", hProcess, AddrBase); + // too dangerous, pretend we have an error + return NULL; +} + +LPVOID WINAPI extSymGetModuleBase(HANDLE hProcess, DWORD AddrBase) +{ + OutTrace("SymGetModuleBase: hprocess=%x addrbase=%x\n", hProcess, AddrBase); + // too dangerous, pretend we have an error + return NULL; +} + +BOOL WINAPI extSymGetSymFromAddr(HANDLE hProcess, DWORD Address, LPDWORD Displacement, PIMAGEHLP_SYMBOL Symbol) +{ + OutTrace("SymGetSymFromAddr: hprocess=%x address=%x\n", hProcess, Address); + // too dangerous, pretend we have an error + return NULL; +} diff --git a/dll/user32.cpp b/dll/user32.cpp index 0e38d73..31b505a 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -238,7 +238,6 @@ static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "IsZoomed", (FARPROC)NULL, (FARPROC *)&pIsZoomed, (FARPROC)extIsZoomed}, //{HOOK_HOT_CANDIDATE, 0, "IsIconic", (FARPROC)IsIconic, (FARPROC *)&pIsIconic, (FARPROC)extIsIconic}, {HOOK_HOT_CANDIDATE, 0, "ScrollDC", (FARPROC)NULL, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC}, - //{HOOK_IAT_CANDIDATE, 0, "mouse_event", (FARPROC)NULL, (FARPROC *)&pmouse_event, (FARPROC)extmouse_event}, // both added to fix the Galapagos menu bar, but with no success !!!! {HOOK_HOT_CANDIDATE, 0, "ShowScrollBar", (FARPROC)ShowScrollBar, (FARPROC *)&pShowScrollBar, (FARPROC)extShowScrollBar}, @@ -874,8 +873,10 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon } // v2.02.32: disable topmost for main window only if(dxw.IsDesktop(hwnd) && (nIndex==GWL_EXSTYLE)){ - OutTraceDW("SetWindowLong: GWL_EXSTYLE %x suppress TOPMOST\n", dwNewLong); - dwNewLong = dwNewLong & ~(WS_EX_TOPMOST); + if(dxw.dwFlags5 & UNLOCKZORDER) { + OutTraceDW("SetWindowLong: GWL_EXSTYLE %x suppress TOPMOST\n", dwNewLong); + dwNewLong = dwNewLong & ~(WS_EX_TOPMOST); + } } } @@ -891,12 +892,11 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon // v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions // fixes "Nascar Racing 3" that was setting the WinProc while still in non fullscreen mode! - if (((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) && - dxw.Windowize && // v2.03.95 - replaced dxw.IsFullScreen() check - // dxw.IsFullScreen() && // v2.02.51 - see A10 Cuba.... - !(dxw.dwFlags6 & NOWINDOWHOOKS)){ // v2.03.41 - debug flag + if ((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) { WNDPROC lres; WNDPROC OldProc; + DWORD WinStyle; + BOOL bHooked = FALSE; // fix .... extern LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM); @@ -913,18 +913,47 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLon // end of GPL fix OldProc = (WNDPROC)(*pGetWindowLong)(hwnd, nIndex); - // v2.02.70 fix - if((OldProc==extWindowProc) || - (OldProc==extChildWindowProc)|| - (OldProc==extDialogWindowProc)) - OldProc=dxwws.GetProc(hwnd); - dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); - res=(LONG)OldProc; - SetLastError(0); - lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc); + WinStyle = (*pGetWindowLong)(hwnd, GWL_STYLE); + + // hook extWindowProc to main win .... + if(dxw.IsDesktop(hwnd) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){ + if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd); + dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); + res=(LONG)OldProc; + SetLastError(0); + lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc); + OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc); + bHooked = TRUE; + } + + // hook extChildWindowProc to child win .... + if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){ + if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd); + dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); + res=(LONG)OldProc; + SetLastError(0); + lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc); + OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc); + bHooked = TRUE; + } + + // hook extDlgWindowProc to dialog win .... + if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags1 & HOOKCHILDWIN) && !(dxw.dwFlags6 & NOWINDOWHOOKS)){ + if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd); + dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); + res=(LONG)OldProc; + SetLastError(0); + lres=(WNDPROC)(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc); + OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc); + bHooked = TRUE; + } + + // hook dwNewLong if not done otherwise + if(!bHooked) res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong); if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); } - else { + else{ + // through here for any message different from GWL_WNDPROC or DWL_DLGPROC res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong); } @@ -1125,13 +1154,19 @@ BOOL WINAPI extGetCursorPos(LPPOINT lppoint) res=1; } - prev=*lppoint; - *lppoint=dxw.ScreenToClient(*lppoint); - *lppoint=dxw.FixCursorPos(*lppoint); - + if(dxw.dwFlags1 & MODIFYMOUSE){ + dxw.UpdateDesktopCoordinates(); + prev=*lppoint; + *lppoint=dxw.ScreenToClient(*lppoint); + //OutTraceC("GetCursorPos: REMAPPED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y); + *lppoint=dxw.FixCursorPos(*lppoint); + OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y); + } + else { + OutTraceC("GetCursorPos: pos=(%d,%d)\n", lppoint->x, lppoint->y); + } GetHookInfo()->CursorX=(short)lppoint->x; GetHookInfo()->CursorY=(short)lppoint->y; - OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y); if((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0); if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0); @@ -1164,6 +1199,7 @@ BOOL WINAPI extSetCursorPos(int x, int y) if(dxw.dwFlags1 & MODIFYMOUSE){ // v2.03.41 POINT cur; + dxw.UpdateDesktopCoordinates(); cur.x = x; cur.y = y; dxw.MapWindow(&cur); @@ -1673,6 +1709,8 @@ static HWND WINAPI CreateWindowCommon( dxw.SetFullScreen(TRUE); } + if(dxw.dwFlags5 & UNLOCKZORDER) dwExStyle &= ~WS_EX_TOPMOST ; + if(!dxw.IsFullScreen()){ // v2.1.63: needed for "Monster Truck Madness" if(WideChar) hwnd= (*pCreateWindowExW)(dwExStyle, (LPCWSTR)lpClassName, (LPCWSTR)lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); @@ -2498,9 +2536,10 @@ HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpT lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy, hWndParent, lpDialogFunc, lParamInit); if(dxw.IsFullScreen() && hWndParent==NULL) hWndParent=dxw.GethWnd(); - dxw.SetFullScreen(FALSE); + // v2.03.98: commented out the temporary return to windowed mode to make Red Alert 2 dialog work again! + //dxw.SetFullScreen(FALSE); RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit); - dxw.SetFullScreen(FullScreen); + //dxw.SetFullScreen(FullScreen); // v2.02.73: redirect lpDialogFunc only when it is nor NULL if( lpDialogFunc && @@ -2522,9 +2561,9 @@ HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HW OutTraceDW("CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, sTemplateName(lpTemplateName), hWndParent, lpDialogFunc, lParamInit); if(hWndParent==NULL) hWndParent=dxw.GethWnd(); - dxw.SetFullScreen(FALSE); + //dxw.SetFullScreen(FALSE); RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit); - dxw.SetFullScreen(FullScreen); + //dxw.SetFullScreen(FullScreen); // v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for "LEGO Stunt Rally" if( lpDialogFunc && @@ -3922,9 +3961,17 @@ VOID WINAPI extmouse_event(DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULON return; } - if(dxw.Windowize){ - dxw.MapClient((int *)&dx, (int *)&dy); + if((dwFlags & MOUSEEVENTF_ABSOLUTE) && dxw.Windowize && (dxw.dwFlags1 & MODIFYMOUSE)){ + // ???? untested ...... + //dxw.MapClient((int *)&dx, (int *)&dy); + POINT cursor; + cursor.x = dx; + cursor.y = dy; + cursor = dxw.FixCursorPos(cursor); + dx = cursor.x; + dy = cursor.y; } + return (*pmouse_event)(dwFlags, dx, dy, dwData, dwExtraInfo); } diff --git a/dll/winmm.cpp b/dll/winmm.cpp index ec9499c..cf3a281 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -495,8 +495,14 @@ static void ShowJoystick(LONG, LONG, DWORD); MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc) { OutTraceDW("joyGetDevCaps: joyid=%d size=%d\n", uJoyID, cbjc); - if((uJoyID != -1) && (uJoyID != 0)) return MMSYSERR_NODRIVER; - if(cbjc != sizeof(JOYCAPS)) return MMSYSERR_INVALPARAM; + if((uJoyID != -1) && (uJoyID != 0)) { + OutTraceDW("joyGetDevCaps: ERROR joyid=%d ret=MMSYSERR_NODRIVER\n", uJoyID, cbjc); + return MMSYSERR_NODRIVER; + } + if(cbjc != sizeof(JOYCAPS)) { + OutTraceDW("joyGetDevCaps: ERROR joyid=%d size=%d ret=MMSYSERR_INVALPARAM\n", uJoyID, cbjc); + return MMSYSERR_INVALPARAM; + } uJoyID = 0; // always first (unique) one ... // set Joystick capability structure diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 3574fab..7a76d33 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -245,7 +245,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp if(IsTraceW) ExplainMsg("WindowProc", hwnd, message, wparam, lparam); - if(dxw.dwFlags3 & FILTERMESSAGES){ + if(dxw.dwFlags3 & (FILTERMESSAGES|DEFAULTMESSAGES)){ switch(message){ case WM_NCMOUSEMOVE: case WM_NCLBUTTONDOWN: @@ -257,8 +257,16 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp case WM_NCMBUTTONDOWN: case WM_NCMBUTTONUP: case WM_NCMBUTTONDBLCLK: - OutTraceDW("WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); - return 0; + case WM_MOVE: + case WM_MOVING: + if(dxw.dwFlags3 & FILTERMESSAGES){ + OutTraceDW("WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); + return 0; + } + else { + OutTraceDW("WindowProc[%x]: DEFAULT WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); + return (*pDefWindowProcA)(hwnd, message, wparam, lparam); + } } } diff --git a/host/MainFrm.cpp b/host/MainFrm.cpp index 08f41f8..fe0173a 100644 --- a/host/MainFrm.cpp +++ b/host/MainFrm.cpp @@ -178,9 +178,9 @@ void CMainFrame::OnClose() } if(gWarnOnExit){ - if(MessageBoxLang(DXW_STRING_EXIT_OK, DXW_STRING_WARNING, MB_OKCANCEL)==IDOK) - CFrameWnd::OnClose(); - } + if(MessageBoxLang(DXW_STRING_EXIT_OK, DXW_STRING_WARNING, MB_OKCANCEL)==IDOK) + CFrameWnd::OnClose(); +} else CFrameWnd::OnClose(); } diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp index bb1bbb2..6daa8ca 100644 --- a/host/TabDirectX.cpp +++ b/host/TabDirectX.cpp @@ -29,8 +29,6 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX) DDX_Radio(pDX, IDC_AUTO, cTarget->m_DXVersion); DDX_Radio(pDX, IDC_NOEMULATESURFACE, cTarget->m_DxEmulationMode); DDX_Radio(pDX, IDC_DDRAWFILTER, cTarget->m_DxFilterMode); - DDX_Check(pDX, IDC_SUPPRESSCLIPPING, cTarget->m_SuppressClipping); - DDX_Check(pDX, IDC_FORCECLIPPER, cTarget->m_ForceClipper); DDX_Check(pDX, IDC_BLITFROMBACKBUFFER, cTarget->m_BlitFromBackBuffer); DDX_Check(pDX, IDC_AUTOREFRESH, cTarget->m_AutoRefresh); DDX_Check(pDX, IDC_INDEPENDENTREFRESH, cTarget->m_IndependentRefresh); diff --git a/host/TabDirectX2.cpp b/host/TabDirectX2.cpp index bc9f3fa..2e38076 100644 --- a/host/TabDirectX2.cpp +++ b/host/TabDirectX2.cpp @@ -46,6 +46,23 @@ void CTabDirectX2::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach); DDX_Check(pDX, IDC_CLEARTEXTUREFOURCC, cTarget->m_ClearTextureFourCC); DDX_Check(pDX, IDC_NODDEXCLUSIVEMODE, cTarget->m_NoDDExclusiveMode); + + // Vsync + //DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); + //DDX_Check(pDX, IDC_FORCEVSYNC, cTarget->m_ForceVSync); + //DDX_Check(pDX, IDC_FORCENOVSYNC, cTarget->m_ForceNoVSync); + //DDX_Check(pDX, IDC_FORCEWAIT, cTarget->m_ForceWait); + //DDX_Check(pDX, IDC_FORCENOWAIT, cTarget->m_ForceNoWait); + DDX_Radio(pDX, IDC_VSYNCDEFAULT, cTarget->m_VSyncMode); + DDX_Radio(pDX, IDC_WAITDEFAULT, cTarget->m_WaitMode); + DDX_Radio(pDX, IDC_VSYNCHW, cTarget->m_VSyncImpl); + DDX_Text(pDX, IDC_SCANLINE, cTarget->m_ScanLine); + + // Clipper + //DDX_Check(pDX, IDC_SUPPRESSCLIPPING, cTarget->m_SuppressClipping); + //DDX_Check(pDX, IDC_FORCECLIPPER, cTarget->m_ForceClipper); + DDX_Radio(pDX, IDC_CLIPPERNONE, cTarget->m_ClipperMode); + } BEGIN_MESSAGE_MAP(CTabDirectX2, CDialog) diff --git a/host/TabHook.cpp b/host/TabHook.cpp index d150c20..1fd8d2b 100644 --- a/host/TabHook.cpp +++ b/host/TabHook.cpp @@ -35,6 +35,7 @@ void CTabHook::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); DDX_Check(pDX, IDC_ANSIWIDE, cTarget->m_AnsiWide); DDX_Check(pDX, IDC_HOOKNORUN, cTarget->m_HookNoRun); + DDX_Check(pDX, IDC_COPYNOSHIMS, cTarget->m_CopyNoShims); DDX_Check(pDX, IDC_HOOKNOUPDATE, cTarget->m_HookNoUpdate); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index bbdfd86..0997b11 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -106,7 +106,6 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_SHOWHINTS, cTarget->m_ShowHints); - DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio); DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); DDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 30f68fb..c949468 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -117,6 +117,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_HookDLLs = TRUE; // default true !! m_AnsiWide = FALSE; m_HookNoRun = FALSE; + m_CopyNoShims = FALSE; m_HookNoUpdate = FALSE; m_TerminateOnClose = FALSE; m_ConfirmOnClose = FALSE; @@ -135,13 +136,13 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_NoBanner = FALSE; m_FilePath = _T(""); m_Module = _T(""); - m_SaveLoad = FALSE; + //m_SaveLoad = FALSE; m_SlowDown = FALSE; m_BlitFromBackBuffer = FALSE; m_NoFlipEmulation = FALSE; m_LockColorDepth = FALSE; - m_SuppressClipping = FALSE; - m_ForceClipper = FALSE; + //m_SuppressClipping = FALSE; + //m_ForceClipper = FALSE; m_DisableGammaRamp = FALSE; m_AutoRefresh = FALSE; m_IndependentRefresh = FALSE; @@ -194,6 +195,13 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_BackBufAttach = FALSE; m_ClearTextureFourCC = FALSE; m_NoDDExclusiveMode = FALSE; + //m_ForceVSync = FALSE; + //m_ForceNoVSync = FALSE; + //m_ForceWait = FALSE; + //m_ForceNoWait = FALSE; + m_VSyncMode = 0; + m_VSyncImpl = 0; + m_WaitMode = 0; m_HandleAltF4 = FALSE; m_LimitFPS = FALSE; m_SkipFPS = FALSE; @@ -240,6 +248,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_AssertDialog = FALSE; m_InitialRes = FALSE; m_MaximumRes = FALSE; + m_ClipperMode = 0; m_PosX = 50; m_PosY = 50; m_SizX = 800; @@ -250,7 +259,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_InitTS = 8; m_SwapEffect = 0; m_InjectionMode = 0; - m_WinMovementType = 0; + m_WinMovementType = 1; // "Floating" position mode, better than "Free"! + m_ScanLine = 0; //}}AFX_DATA_INIT } @@ -413,4 +423,4 @@ void CTargetDlg::OnBnClickedKill() else{ MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } -} \ No newline at end of file +} diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 4778540..66784fa 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -71,6 +71,7 @@ public: BOOL m_HookDLLs; BOOL m_AnsiWide; BOOL m_HookNoRun; + BOOL m_CopyNoShims; BOOL m_HookNoUpdate; BOOL m_TerminateOnClose; BOOL m_ConfirmOnClose; @@ -97,13 +98,13 @@ public: CString m_OpenGLLib; CString m_Notes; CString m_Registry; - BOOL m_SaveLoad; + //BOOL m_SaveLoad; BOOL m_SlowDown; BOOL m_BlitFromBackBuffer; BOOL m_NoFlipEmulation; BOOL m_LockColorDepth; - BOOL m_SuppressClipping; - BOOL m_ForceClipper; + //BOOL m_SuppressClipping; + //BOOL m_ForceClipper; BOOL m_DisableGammaRamp; BOOL m_AutoRefresh; BOOL m_IndependentRefresh; @@ -155,6 +156,10 @@ public: BOOL m_BackBufAttach; BOOL m_ClearTextureFourCC; BOOL m_NoDDExclusiveMode; + //BOOL m_ForceVSync; + //BOOL m_ForceNoVSync; + //BOOL m_ForceWait; + //BOOL m_ForceNoWait; BOOL m_HandleAltF4; BOOL m_HandleExceptions; BOOL m_SkipFPS; @@ -258,6 +263,9 @@ public: BOOL m_LimitScreenRes; BOOL m_InitialRes; BOOL m_MaximumRes; + int m_VSyncMode; + int m_VSyncImpl; + int m_WaitMode; int m_PosX; int m_PosY; int m_SizX; @@ -270,6 +278,8 @@ public: int m_MaxScreenRes; int m_ResTypes; int m_SwapEffect; + int m_ClipperMode; + int m_ScanLine; //}}AFX_DATA diff --git a/host/dxTabCtrl.cpp b/host/dxTabCtrl.cpp index 13cd335..d34a24b 100644 --- a/host/dxTabCtrl.cpp +++ b/host/dxTabCtrl.cpp @@ -45,7 +45,6 @@ static char THIS_FILE[] = __FILE__; #endif extern BOOL gbDebug; -extern BOOL gWarnOnExit; ///////////////////////////////////////////////////////////////////////////// // CDXTabCtrl diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index e33272442dac98c418b39f0a8de799da1acecc68..3604fb64a23b9ed33d8ed772a76ab7d9a45b0462 100644 GIT binary patch delta 10609 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 delta 33230 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⁣H@^}fM~NI&rv=E=e$bnz2guxhSdE?$ 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 diff --git a/host/dxwndhost.vs2008.vcproj.gho-PC.gho.user b/host/dxwndhost.vs2008.vcproj.gho-PC.gho.user deleted file mode 100644 index d99ab4b..0000000 --- a/host/dxwndhost.vs2008.vcproj.gho-PC.gho.user +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 7f4f456..dd74b5a 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -207,6 +207,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; if(dlg->m_AnsiWide) t->flags5 |= ANSIWIDE; if(dlg->m_HookNoRun) t->flags7 |= HOOKNORUN; + if(dlg->m_CopyNoShims) t->flags7 |= COPYNOSHIMS; if(dlg->m_HookNoUpdate) t->flags7 |= HOOKNOUPDATE; if(dlg->m_TerminateOnClose) t->flags6 |= TERMINATEONCLOSE; if(dlg->m_ConfirmOnClose) t->flags6 |= CONFIRMONCLOSE; @@ -309,6 +310,29 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) case 3: t->flags |= LOCKWINPOS; t->flags7 |= ANCHORED; break; } + switch(dlg->m_VSyncMode){ + case 0: break; + case 1: t->flags8 |= FORCEVSYNC; break; + case 2: t->flags8 |= FORCENOVSYNC; break; + } + + switch(dlg->m_VSyncImpl){ + case 0: break; + case 1: t->flags8 |= VSYNCSCANLINE; break; + case 2: t->flags |= SAVELOAD; break; + } + switch(dlg->m_WaitMode){ + case 0: break; + case 1: t->flags8 |= FORCEWAIT; break; + case 2: t->flags8 |= FORCENOWAIT; break; + } + + switch(dlg->m_ClipperMode){ + case 0: break; + case 1: t->flags3 |= FORCECLIPPER; break; + case 2: t->flags |= SUPPRESSCLIPPING; break; + } + if(dlg->m_HookDI) t->flags |= HOOKDI; if(dlg->m_HookDI8) t->flags |= HOOKDI8; if(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE; @@ -389,13 +413,13 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_LimitScreenRes) t->flags4 |= LIMITSCREENRES; if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY; if(dlg->m_UseLastCore) t->flags5 |= USELASTCORE; - if(dlg->m_SaveLoad) t->flags |= SAVELOAD; + //if(dlg->m_SaveLoad) t->flags |= SAVELOAD; if(dlg->m_SlowDown) t->flags |= SLOWDOWN; if(dlg->m_BlitFromBackBuffer) t->flags |= BLITFROMBACKBUFFER; if(dlg->m_NoFlipEmulation) t->flags4 |= NOFLIPEMULATION; if(dlg->m_LockColorDepth) t->flags7 |= LOCKCOLORDEPTH; - if(dlg->m_SuppressClipping) t->flags |= SUPPRESSCLIPPING; - if(dlg->m_ForceClipper) t->flags3 |= FORCECLIPPER; + //if(dlg->m_SuppressClipping) t->flags |= SUPPRESSCLIPPING; + //if(dlg->m_ForceClipper) t->flags3 |= FORCECLIPPER; if(dlg->m_DisableGammaRamp) t->flags2 |= DISABLEGAMMARAMP; if(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH; if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH; @@ -492,10 +516,15 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS; if(dlg->m_InitialRes) t->flags7 |= INITIALRES; if(dlg->m_MaximumRes) t->flags7 |= MAXIMUMRES; + //if(dlg->m_ForceVSync) t->flags8 |= FORCEVSYNC; + //if(dlg->m_ForceNoVSync) t->flags8 |= FORCENOVSYNC; + //if(dlg->m_ForceWait) t->flags8 |= FORCEWAIT; + //if(dlg->m_ForceNoWait) t->flags8 |= FORCENOWAIT; t->posx = dlg->m_PosX; t->posy = dlg->m_PosY; t->sizx = dlg->m_SizX; t->sizy = dlg->m_SizY; + t->ScanLine = dlg->m_ScanLine; t->MaxFPS = dlg->m_MaxFPS; t->InitTS = dlg->m_InitTS-8; t->FakeVersionId = dlg->m_FakeVersionId; @@ -524,6 +553,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0; dlg->m_AnsiWide = t->flags5 & ANSIWIDE ? 1 : 0; dlg->m_HookNoRun = t->flags7 & HOOKNORUN ? 1 : 0; + dlg->m_CopyNoShims = t->flags7 & COPYNOSHIMS ? 1 : 0; dlg->m_HookNoUpdate = t->flags7 & HOOKNOUPDATE ? 1 : 0; dlg->m_TerminateOnClose = t->flags6 & TERMINATEONCLOSE ? 1 : 0; dlg->m_ConfirmOnClose = t->flags6 & CONFIRMONCLOSE ? 1 : 0; @@ -601,6 +631,22 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) if(t->flags2 & LOCKEDSIZE) dlg->m_WinMovementType = 2; if(t->flags7 & ANCHORED) dlg->m_WinMovementType = 3; + dlg->m_VSyncMode = 0; + if(t->flags8 & FORCEVSYNC) dlg->m_VSyncMode = 1; + if(t->flags8 & FORCENOVSYNC) dlg->m_VSyncMode = 2; + + dlg->m_VSyncImpl = 0; + if(t->flags8 & VSYNCSCANLINE) dlg->m_VSyncImpl = 1; + if(t->flags & SAVELOAD) dlg->m_VSyncImpl = 2; + + dlg->m_WaitMode = 0; + if(t->flags8 & FORCEWAIT) dlg->m_WaitMode = 1; + if(t->flags8 & FORCENOWAIT) dlg->m_WaitMode = 2; + + dlg->m_ClipperMode = 0; + if (t->flags3 & FORCECLIPPER) dlg->m_ClipperMode = 1; + if (t->flags & SUPPRESSCLIPPING) dlg->m_ClipperMode = 2; + dlg->m_HookDI = t->flags & HOOKDI ? 1 : 0; dlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0; dlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0; @@ -680,13 +726,13 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ClearTarget = t->flags5 & CLEARTARGET ? 1 : 0; dlg->m_FixPitch = t->flags6 & FIXPITCH ? 1 : 0; dlg->m_Power2Width = t->flags6 & POWER2WIDTH ? 1 : 0; - dlg->m_SaveLoad = t->flags & SAVELOAD ? 1 : 0; + //dlg->m_SaveLoad = t->flags & SAVELOAD ? 1 : 0; dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0; dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0; dlg->m_NoFlipEmulation = t->flags4 & NOFLIPEMULATION ? 1 : 0; dlg->m_LockColorDepth = t->flags7 & LOCKCOLORDEPTH ? 1 : 0; - dlg->m_SuppressClipping = t->flags & SUPPRESSCLIPPING ? 1 : 0; - dlg->m_ForceClipper = t->flags3 & FORCECLIPPER ? 1 : 0; +// dlg->m_SuppressClipping = t->flags & SUPPRESSCLIPPING ? 1 : 0; +// dlg->m_ForceClipper = t->flags3 & FORCECLIPPER ? 1 : 0; dlg->m_DisableGammaRamp = t->flags2 & DISABLEGAMMARAMP ? 1 : 0; dlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0; dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0; @@ -781,10 +827,15 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0; dlg->m_InitialRes = t->flags7 & INITIALRES ? 1 : 0; dlg->m_MaximumRes = t->flags7 & MAXIMUMRES ? 1 : 0; + //dlg->m_ForceVSync = t->flags8 & FORCEVSYNC ? 1 : 0; + //dlg->m_ForceNoVSync = t->flags8 & FORCENOVSYNC ? 1 : 0; + //dlg->m_ForceWait = t->flags8 & FORCEWAIT ? 1 : 0; + //dlg->m_ForceNoWait = t->flags8 & FORCENOWAIT ? 1 : 0; dlg->m_PosX = t->posx; dlg->m_PosY = t->posy; dlg->m_SizX = t->sizx; dlg->m_SizY = t->sizy; + dlg->m_ScanLine = t->ScanLine; dlg->m_MaxFPS = t->MaxFPS; dlg->m_InitTS = t->InitTS+8; dlg->m_FakeVersionId = t->FakeVersionId; @@ -866,14 +917,6 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, sprintf_s(val, sizeof(val), "%i", TargetMap->flags8); WritePrivateProfileString("target", key, val, InitPath); // ------- - sprintf_s(key, sizeof(key), "flagl%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->flags7); - WritePrivateProfileString("target", key, val, InitPath); - // ------- - sprintf_s(key, sizeof(key), "flagm%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->flags8); - WritePrivateProfileString("target", key, val, InitPath); - // ------- sprintf_s(key, sizeof(key), "tflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->tflags); WritePrivateProfileString("target", key, val, InitPath); @@ -926,6 +969,10 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, sprintf_s(val, sizeof(val), "%i", TargetMap->SlowRatio); WritePrivateProfileString("target", key, val, InitPath); // ------- + sprintf_s(key, sizeof(key), "scanline%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->ScanLine); + WritePrivateProfileString("target", key, val, InitPath); + // ------- sprintf_s(key, sizeof(key), "initresw%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->resw); WritePrivateProfileString("target", key, val, InitPath); @@ -1122,6 +1169,9 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c sprintf_s(key, sizeof(key), "slowratio%i", i); TargetMap->SlowRatio = GetPrivateProfileInt("target", key, 1, InitPath); // ------- + sprintf_s(key, sizeof(key), "scanline%i", i); + TargetMap->ScanLine = GetPrivateProfileInt("target", key, 1, InitPath); + // ------- sprintf_s(key, sizeof(key), "initresw%i", i); TargetMap->resw = GetPrivateProfileInt("target", key, 0, InitPath); // ------- @@ -1940,6 +1990,10 @@ void CDxwndhostView::OnProcessKill() lpProcName=FilePath; while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; + if(TargetMaps[i].flags7 & COPYNOSHIMS){ + strcat(lpProcName, ".noshim"); + } + if(!KillProcByName(lpProcName, FALSE)){ wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, PrivateMaps[i].title, _TRUNCATE); @@ -2666,7 +2720,7 @@ DWORD WINAPI StartDebug(void *p) ThInfo = (ThreadInfo_Type *)p; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); - sRunTargetPath = (strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path; + sRunTargetPath = ThInfo->ExePath; strcpy_s(path, sizeof(path), sRunTargetPath); PathRemoveFileSpec(path); if(!CreateProcess(NULL, @@ -3061,6 +3115,77 @@ static void CheckSafeDiscVersion(char *path) fclose(exe); } +#define FILECOPYBUFSIZE 1024 + +static void MakeHiddenFile(char *sTargetPath) +{ + HANDLE hFile = INVALID_HANDLE_VALUE; + HANDLE hTempFile = INVALID_HANDLE_VALUE; + BOOL fSuccess = FALSE; + DWORD dwRetVal = 0; + UINT uRetVal = 0; + DWORD dwBytesRead = 0; + DWORD dwBytesWritten = 0; + char chBuffer[FILECOPYBUFSIZE]; + + hFile = CreateFile(sTargetPath, // file name + GENERIC_READ, // open for reading + 0, // do not share + NULL, // default security + OPEN_EXISTING, // existing file only + FILE_ATTRIBUTE_NORMAL, // normal file + NULL); // no template + if (hFile == INVALID_HANDLE_VALUE) { + //PrintError(TEXT("First CreateFile failed")); + return; + } + + strcat(sTargetPath, ".noshim"); + + // Deletes last copy of the file, just in case it was updated (patched?) + // DeleteFile(sTargetPath); + + // Creates the new file to write to for the upper-case version. + hTempFile = CreateFile((LPTSTR) sTargetPath, // file name + GENERIC_WRITE, // open for write + 0, // do not share + NULL, // default security + CREATE_ALWAYS, // overwrite existing + //FILE_ATTRIBUTE_HIDDEN, // hidden file + FILE_ATTRIBUTE_NORMAL, // normal file + NULL); // no template + if (hTempFile == INVALID_HANDLE_VALUE) { + char msg[120]; + sprintf(msg, "Creation of hidden copy of target file with no SHIMs failed\nError=%d", GetLastError()); + MessageBox(0, msg, "Warning", 0); + //PrintError(TEXT("Second CreateFile failed")); + if (!CloseHandle(hFile)){ + sprintf(msg, "CloseHandle failed\nError=%d", GetLastError()); + MessageBox(0, msg, "Error", 0); + } + return; + } + // Reads BUFSIZE blocks to the buffer and copy to the temporary + // file. + do { + if (ReadFile(hFile, chBuffer, FILECOPYBUFSIZE, &dwBytesRead, NULL)) { + fSuccess = WriteFile(hTempFile, chBuffer, dwBytesRead, &dwBytesWritten, NULL); + if (!fSuccess) { + //PrintError(TEXT("WriteFile failed")); + break; + } + } + else { + //PrintError(TEXT("ReadFile failed")); + break; + } + // Continues until the whole file is processed. + } while (dwBytesRead == FILECOPYBUFSIZE); + + CloseHandle(hFile); + CloseHandle(hTempFile); +} + void CDxwndhostView::OnRun() { CListCtrl& listctrl = GetListCtrl(); @@ -3068,7 +3193,8 @@ void CDxwndhostView::OnRun() int i; STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; - char path[MAX_PATH]; + char folderpath[MAX_PATH+20]; // max + space for ".noshim" + char exepath[MAX_PATH+20]; // max + space for ".noshim" TARGETMAP RestrictedMaps[2]; char *sRunTargetPath; @@ -3088,10 +3214,16 @@ void CDxwndhostView::OnRun() memcpy(&RestrictedMaps[0], &TargetMaps[i], sizeof(TARGETMAP)); memset(&RestrictedMaps[1], 0, sizeof(TARGETMAP)); if(!(PrivateMaps[i].startfolder[0])){ - strcpy_s(path, sizeof(path), sRunTargetPath); - PathRemoveFileSpec(path); + strcpy_s(folderpath, sizeof(folderpath), sRunTargetPath); + strcpy_s(exepath, sizeof(exepath), sRunTargetPath); + PathRemoveFileSpec(folderpath); }else{ - strcpy_s(path, sizeof(path), PrivateMaps[i].startfolder); + strcpy_s(folderpath, sizeof(folderpath), PrivateMaps[i].startfolder); + strcpy_s(exepath, sizeof(exepath), sRunTargetPath); + } + if(TargetMaps[i].flags7 & COPYNOSHIMS){ + MakeHiddenFile(exepath); + strncpy(RestrictedMaps[0].path, exepath, MAX_PATH); } SetTarget(RestrictedMaps); OutTrace("OnRun idx=%d prog=\"%s\"\n", i, TargetMaps[i].path); @@ -3137,24 +3269,31 @@ void CDxwndhostView::OnRun() ThreadInfo_Type ThreadInfo; ThreadInfo.TM=&TargetMaps[i]; ThreadInfo.PM=&PrivateMaps[i]; + ThreadInfo.ExePath=exepath; CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); } else if(TargetMaps[i].flags7 & INJECTSUSPENDED){ OutTrace("injectsuspended mode\n"); - InjectSuspended(sRunTargetPath, path); + InjectSuspended(exepath, folderpath); } else{ OutTrace("setwindowshook mode\n"); CreateProcess(NULL, - sRunTargetPath, - 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo); + exepath, + 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, folderpath, &sinfo, &pinfo); CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage } + // wait & recover CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RecoverTargetMaps, (LPVOID)TargetMaps, 0, NULL); if(gAutoHideMode) this->OnGoToTrayIcon(); + + // not working: the file is opened, can't be deleted + //if(TargetMaps[i].flags7 & COPYNOSHIMS){ + // DeleteFile(exepath); + //} } void SwitchToColorDepth(int bpp) diff --git a/host/host.aps b/host/host.aps index 81ba4043baac46d14fab8cdad02afbc9a116452c..6a498d03e85fef7ab1de3ee32e169354191a7c48 100644 GIT binary patch delta 927 zcmZY6Pe>F|90&0C7Na1Eg*tQyW}j>2LCj5q{zy2mL2h}q(L3%W! z`PIX-K{989>aW>|Uro*h|M9Vw;`f5JaxFE@H~Kr~{50Y}n+ri@cj1J;Hn8ZX{9@2^ z?S4>sS4$TxcVE&PrW@8%f9Hp#<4ix7GXI`Sr3bNtGKTLfC*^YC=Ba({Qi$KspJ}oS z293a^DOj`uo8E;(Hy~Fv*$741Pdi}HJWR@d`UE!p1BbG|sL3Nxv>kd;QwPFA?CsU_ zyMK(YOtgl>b?&eC2?@~!lf8qmXeVrX8xDO4`COAZDEbOI-GV_^VbWb#^fGLE3=T~~ zmNdBrMaQAjbr_U4qusD5PfEAo&{oJb_Xdhqpwk~PXeUgXfkofLro0)w3i-l4o1&Z0 zX*~>@gh?l1(QVk2=b>rHvU>|fIXT)4gWiHk*I<=7oAzKf(f?+%%>i}5VQ(Drr6#AL zXc{{G1cT;a(l@YZKWv(YLz^Khnrwoi%h2gj81ySlZ{6~=X$B6BKvvzEscJMN^0-uO K;L9JVYJUN)zGrp- delta 881 zcmX}oF=!J}7zgmYpirn+9g2uZFKwy~!fCY`R2&owO5sGLphHTkrkEiYQKNQH%-~R= zM;rgrB(>VK722U!8>6uihawIRp0pxPD&i#KL8Xog{&U>B<;S1z``+F6-u?C9(0Xt* zBqF)iaL4jOAaL$D9 zd0+W7z0*rQGdx?lJafBIMDTl|LzHs2_HK-dK;RejC#pCCgEqsYXJOHK*fa}=zJao+ zifzy+=V>PldIu)uJe`0|*WggjmsQaKjYgoC)!^UFNS9mq8F--ac7Cj7`Zh=F4p;S~c2aVo@PM2X&UVxr}MY#}NfkWG&JgYCN(Rt|f z8w?tSNt3YXE7+75pxscO*LTzCJLoh3gZ9FtL$K&)*p&Ow1e9w178>OP(GU!pfl23J zRrv&6cwcSd%Q-9^fbv2W!_a5~I(-X+reM+~STqKkCg9KzlqFT{fJRHu=_VNTBTTn$ hx!N=dhc-j0)t^SIg@b=aaJtqO%#I;FwiUy*hX0klWp)4n diff --git a/host/resource b/host/resource index fec2a6dbc2e651c90dfd5365f643ee7b7293769b..9f5dff1c82b749f3ac2f5b8bb73153613aef75fc 100644 GIT binary patch delta 395 zcmaFV&fGVVc>|x!Ojg+}Hc5~JB+c!|;Lm`p z2vFJ(EWN3_hC2vomJ5R?&{V_8 zj4Jw*6?$1F3-rkG!VP2aUR@w~dTV%5^)WJoZQNYfo58^z0183| z|H<~Ex?tsU(_|*E>*Jezp@L=dhpBp#i-3W>VI|vUhiMABlW+A(Ox|}$WOC2pFaUvJ BZ@>Tm delta 83 zcmV-Z0IdIxkptp~1F#Mpvwj_DZ6h5^6fUT{yh>8`Tg(^ln0TH1kt-=f=8VI#R!NnwXm_I4Q%!CQJ+J$kaE?rp0@4N5b@_1$Dz4>Ws6VBw^`{v!BbMC$8 zeCOQv>&Bs*UtMp%B`!KGdu6lKB9A!UH{qGA=n0WMc;NrdQmJIW6v5*zJwQ8f8@fKE z&yZ*RFt{1~D7Xc@5BwOIXS`q6576>1v&$XIk_P3LV5~Mqq1r@_$=FGPZQ-oh5oF44imtaB3pi5lF*}w zwOcYFG3XMLw0h??-%-e?&u~7!@|}1&1xW>&mvNaxU6gYusf&4E@KB%&@`=OrUBB{) z+4OM|b#XG+V*axakBRU*3Ms9`Sa%fw=aL&z4G&==xH27RrGgIJ91T{8rPY&Tn};l zd*G0qlqkwonSu8wBmhpzGB^WN%A;*rUYGOIBYh}O$RNr^iQ`=qt;DcZphvW7RTz64 zL7e9jIH=ZPqgonz#biM&2?Jd+SW5xV-OzMU-jr9M?SxF@-4wLXp?y}ZBBJnT86)C& z@*?6N{oh!sSAVt>ugtnbkTEMuKwBGcXP|Krl0Q<~de3G-KF^SNL>;_G2r^rdR^8Dp ze*}A$gbwpK)g1PKF|iT`cSAmLlGx~1KG!~7Mn2;o_dO4}bI>4LQM$-WkZ<v5y)Or7GBu~DBt9Ye&w@&m_`69FaIJemlm0^JC-SHSwCZona(YL0(-vz zsmz0B^j_p-rR*uZ25YW%{|`aCPGNovmdQ+HNoixj4vKhAC|k6EdjTL|6n%myIkJelfI5y^UU_&oimcOB-RGm3HNAv()o$+e99JoZlxry6)Iq z?|Az11a>q7OPo{Q5>sBW1Ozu8EOJW49FZY;1N}diei?u-jiL;z@;LH{0krkYag@FA zu^v1PBTo0Ag{^&P>&0(Cm0@^U2qV{2p0eVSJE@|FQ!1k)J^60kLh$=I^k2}(;>5f& z3K!TJBwYmf-^BY7??rys&%0_?JIEwr+yz(=b2T@{PviW(i1`=y)5IXJ{%n5% z{Hg9}M;F>kGjfT>+UAhF)!-Qeau#;VOqRFiq_yNyFefUMPxA5y1u#IF@E*S z#CKnG{B@$b@%AjWm+xC59|8p$bNfmFClm0R0CqMG6turBIlfxor6}(X^-vcqjkl+H zASlsw9(KtbiU{5dJy=$v4>o8I_m6_`6Z%p?<$XzHx^5JztQ)^S5la~d{od@ zd2k-OF!N?MY)32RyOoLZiRb+0^nv*%JVN?_jTA z`Ofu^0R<9Db{1>SK$|eMA$D;W?!Ej;75g&KBC9y<*!d9NEb4tKS7HCFUVj%RGkKTW zd;Ffe(dS4F@{eI~x1PX!XEonnBZwWeL4Jc^R^W94wXC0U*4)3%I_jxS?DuPbPFeo} DI?L4K literal 0 HcmV?d00001 diff --git a/proxy/d3d9.suo b/proxy/d3d9.suo new file mode 100644 index 0000000000000000000000000000000000000000..56c8d13777c52d6d0db3021d6fe17d5f60389271 GIT binary patch literal 7168 zcmeHLO-x)>6h5^6fUT{yh>8`Tg(^ln0kJ|$T7?-#G!SZsf-#fSVg3Y$8Nv)djnWu5 z-PpvPD;Fl!g$qqLu9d`vD@>QJ+J$jr)TIl{_vD|$p^4<7h`t5_`BFGcXUOZU(Y+=8z6 z=`-Y6-w$pEKL~CC?*l&s<{9tT^*yw_T~$4H;GE>}D~Kf{l105F7jeq|sSOrmMC|n# z_R;U{@3xIzZ(_giXc@xr8cp8y4yTNDKCVQGF|1tDu?Q@s_z7*N=7bOWj z3Rt@(;}U}|F-fa;Uh^G=eEJOM^DEzpmy?i`mw6eJS=0qNkCM8W_jwNmx*(r8OyBh@ zpO{S_Cs7wCb1mjS`|z0P|HJ|M|HI$|;DcbUnSCGCwHeoj|Br*806z(C2R{Wq0)86Y z0cKwd^|Si9Q`cq=*1L4)cVPX(mDN9P?0^08SKX^WUW%Tde?kJ_q^y85K&3^rt;oxAL3*SQGCi=venwg&WwR;>zS zZzG8FTmlExI&4%+L$8=Dh$Ug5O9pGn5|5~Z_Xt5|E7Gbv zy5$dJ&yvt#9;cea9xx_W!r*SmCr%O@{mSRsr^?7@{NuhaLhdXy$X1jt@*L!wz4t4h zvBKcLd;PQ&+J6MHmz9NAwgJjFxuReB>>s8PfXd6i2+O5KX6%k-%39XX*kY!0%OA(y zFF-2uplQ7qIaw`x3NOK$tKI)Y5I(6D;CUAya|yd1!&pI%P%%7asw--2Z_6IoW;Sg?Zvo)gLzE#O`N2pC15AWDubpw6R?qZauDTrC3C zqXDrZgY!x$`9=@(|No+ot>xX{A9{8i`^EE2s`JuDSZAeOdB-gEyxTF6#~T-vJfa_MC*(NF zUierKo`w*od(gtxKD71X*RRSjyex!~>ncxKb;+Gj(ZeZ~(UG3~U)@6R`#AJp(8%J% zyt4`yX4T5dMWPhShm7dmKiu1f*|! z-sy(xvYk6rqX(^J2tG%<;{75Bz0*q5W@Sa?S2&1XZi-0PzFR{tUio44+Am*k9{zIr z;FuivsXg;gOXtL=#mj$hZd@JVm@)aS_1N`qJ3HU_?$?{^&(ACnh(Hk;NVRTkZFG!X z{XFr_XB~f@tZuwLOYP;`mdJZRfyUgv62QrX%2HOa!}h&w4$AR{P@2lOlOysnmLOQB$Vtd)|`PhVQ53_;x62I`4cMkWuQe?aoVx-A-q}A`&6#N{#U*J zE=*?fF1PpiJ$Iweks9P5!{BZ`f%(pAzQ0BgJ7|Oa2EnYr>jY|9KjW;qf17pGQ=8cD J*Z!Qc{spq2)hYl0 literal 0 HcmV?d00001 diff --git a/proxy/ddraw.suo b/proxy/ddraw.suo new file mode 100644 index 0000000000000000000000000000000000000000..4d655f35658e46b68f0d86721b69e70117704a22 GIT binary patch literal 7168 zcmeI0O-x)>6vq#(A7E>11+ikqu~5Zm30P}CNUP;bG!SZ`;DV&`F(5E}1O{lMbm68O zo49l3!lb%zq3Oo8lDKe%>C#oZFm8;xbYY9X|9$V4VI1bY0ZeVenVfsy+eu3F5oO2r)ez!9Cz!P&yQ?_U_+NFL|B>_k&M?72wn00q_~H5)@s6 z{<-kED(o}Yfn*#0V+|}`xVrHB&E0QY`Lbr=hs%AZIfjDZ&!*6k3wmqoh-J&00loh= z*lZ`QkM^SV;{8Kb3npzIOc9l)nVYv)?1I(V5!w@WoOZ?r8S7(KG3+AIqpx65lzX=V zw9aL)$?YSEY9q+iZxfcVR-#Laz0C4lgQUmpHG2_hJFJJXZls@Le!%Ub%f+90-WcR5 z3Kaho3(7#5Y81WZRX6&5H^XDV=7_dIyzNEeG@Rde(nhbAfWOYL6pYJX`A6~!viUcn zvm`Q%bE;G5KshmA46cE{_M(^=m%r$HKtVQtqd_4rK=5Lj! zef-bnFH4dAcfotkS$KXMfPay%6(vJ{&cUqcTV({m`us0pxw6PqK)6o3k^L*j_~o+s zccA+TxT+574RtYP3+tZ3%Nx-DKA3lh0_eQc@SH*G{p@wsQ+;KW#2(W4wQNC@Yc2BR z2KZ<0UtX^0H46^2egex>B{JuvNni(Qo`;+*CWw2rM8H01nrQWAntqmkklyTLu+Rv! z83`0CQk>VYCP)O!cBIeE3a8)Gh=HOiuemi+*Azj6y-NFm9kpZlQVVUXYY$UL9AoaN z9j2|v$Le@GL!PcP&1nOv2j<;nk+tr@=`ME;2| zvSh}*vo0=-x}B|;iRy^|iu<}BsHckrsK|cQeF4Tj5O`%$=XkX>Xe#ncj8Ynu)B`WCNPYv-_2RkFG@C+)*9M<2mMYRLkP?z~hz zHbON7_f^k3wdJy`)((ZpA!|8<&&jTIzi2}45hrP}v!eBP*Z@^FbXoPT+h<<7`hDB= zpTAlz{i1hoyY2b0BK3DkRp%!wSN>XFy4Iq1+U?h}LpQ#us(SO=Uv4eFFfgG&1a#T) z;j*PWOO@@{J{$V_)5rD`Ze@OoD*)#rNc?%2D_vWI&IP56m?Y1Y+!Ni>%oh4Ra$ z?@x+59`aKMvzhg$&ylKwr;$aKx2oYFTdCg751zmBt7OPe9n2o2n+^%jQxl16zpIIc z?&j