From 87557ed5ff5a724005bf34c8f8b53e67d88bb9cc Mon Sep 17 00:00:00 2001 From: hecomi Date: Mon, 28 Nov 2016 02:30:09 +0900 Subject: [PATCH] refactoring. --- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 76800 -> 75776 bytes .../uDesktopDuplication/Cursor.cpp | 403 +++++++++--------- .../uDesktopDuplication/Cursor.h | 2 +- 3 files changed, 192 insertions(+), 213 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index b61f7b19b595b5d5c054e3c4496395b0c629dc35..bbf2c8c0d60d4d17a7f75d71fae425ae9cc99af2 100644 GIT binary patch literal 75776 zcmdqK3w%>W+CQE&2?W}ZfJ6$4L@7(%q82JrER}>Nasmkyp^7WFm5Zo|NE5kZYg+AL zh@j$a7cc92!PQ;wETF3`McPt?0$vL2O4U_Qj2FZe3trCu`^=n^q!)4bT|e*t{rt*@ z%$b>IW}bQGnP;BonK^TUzgcfE84Lz9{;R6NumvIgx%uy@f2>A>p~rx2Jq#~(d-Loq z#=x6rPnmyhscX^V8?RaX+Z$Z7f4gwujUm_7b6tzW3tiVPba^LEcHMB}oVn-QY~8c8 zs_*On(!v8P4;AYF51IXi|3F+h=isP)JbZ6dGY=1sdY6YsMpYy15$Rd@7QzE74;Pjo z^qzBI)Z08fG-^LW&pCq%DfFJx%;T3`J9|F0@l!o2_8AOwZtH4D&n%d#!yGl7<4RBK zVKDp!DXT^5%0DA?@aHmgUp%K73|)9qGBhkgE)f-fX@*&dh(dbMF)mWdOh!W%%01TA zXfRU)#YRI5g}FvUQ##eA{h`WcJi7mGFf7v3Itiac{)W`_YK$=r_)q+uADX)~guDy% zep27He&|J92E(lL7ti@^=(h&Lt<#WNjsG+7{{{R{`Evuk^97ipDFYcUbc6`ypbjPf z+^FIFMFNob5q&if{OKLw+~;32@7g(~2E&C^+>LzD-f&JQaEnV9&qh`YWr2nqE~_)R zxeIOtAkmT!6V>;t4sc^A`~Ss1De_r%-hL@+i}W)ZJX>f=E4Mz5p9q)@$-AFM5ZRF( zd-ef?VfXIcN%%7eUI9&%%Q*b$ZQ*ax;G;JA8G|9VNJMwLC!+>eUbPhM-xoDVtWlCJ zc6yR64iWSeK`#-UhCtbTjln==0$I8CE2;tdIk5fOev9R8gou7Df=>`AYXG~ICY$mv zFg`M$r_9RgkPSucJ<+7)VM>YG9-+R;ndqMDs@UH9MgO9<&ygIf7Eyt(8)Z(jqYOJJ z$=eb7v601c^?yG7+#pIvF zY9!W8s%!}Lkm{%`8Zk=hEQbar$o@fR3aFR2Xy+4eXR$4AdJ5|UIL z>C95bAxFK*v5Ji9Y6uS$g#G>9gr;p4<;!L}nz(@;nPmbG%v~cNnxtsP{nV{9SQi-` zvW(|h(}-4~tbC&R%vy;d?pLdMQb4v0CK#TRAkcO`Dv2n@gXjR_7k-*)G`vC+RjO2_ zt<)R**(JO02z4T-PKvY|7k7~&-&sq06P0snrGi@ft<5MRnGVMfN%Dd$x0G`vAkWDv z_P;91s{;a{_0#|xemAQ3*L;zNeiWb|VRPQ+@yq-LyKnBQI`4x}+>H!Dner1P)EECs zih2f11vN_ma5D#B^~z0mp|$Az!BXU-7D@KC#;wW>N@5Cnkc}ol#=aCpNBzLbjMk-q zyfVu*Av)?CO7TZ8yucsrZI^ORN~RMM+Y?}Qs&f?@keKtmJ}7GXmQoA8Uh=CTWnGP| z0IT&!Ge!h+cINH(*R+_FXa8U@AXj2<#)qS=e^AZ5q6>LNmV2lo_NEl=-8GPNGGJ=u zRrNt8>bU@rdHa>?Q3uey4xj-B3~AIP8sa$^`DsY?7wjPFJb+T5j`9~BuI>g5fWxin>y#sKh1#!150&Q@J19wY}Z^rTNLHCZI+T6gwfwMs`Sw)S%WkfXMM$ zW5~8GlZe6gDo>M8qLHAf(3aN;W7P5$x{WHR0!bYdNpyvG2+W@^k(~Jv3@b6emCrHA z47J#?o&*kNqhTAL7OdW*A}z8bKLuqs;aZ%m0qD=d@cqyYl+4>f!c6kA8sVonrXi41ABWR9%t>oC|Wk08|tEH3dDY`0hL zBbZ2G*WReaUQtW2=oFHijY<}#3~*bT=~!%%7;36loh_#s4eMi=9#rTMA}Dl6YN0Rf z9Sglkh2qqQ8axpyQnYY09wRG9It<}S$Y@6U((Gd3*bgbA6F5A=s}mUQRUZ8nb*Ns7 zI_GB-5B2*K#rLYtzIa&AMZVGlniJ8^jgtH!AE991sI*)79sG9(;S6m<_$kCwF$^Y*LGy_+Z_fZ3e4Tlrm-BE%Mv9mO+K zSV!<*`DXy8YIZ?G5g)lY9aLv8BnF5i+uQ&PL@h6aqbaXg zb#_4>b3TWfh}YKgif!i-e)7hwM<^QY-;bl~!RTdT^v(p4S5gJwq36z}(u)ZXX8XDq zRT3(aX6vB+2$f<2yqyF31>i0L*e?laN1a2oI;R0tVp`*DE$@j&7|Yq&X8>_HD+aTrqMf&D7|`GKt;JAHj*3<)wc$7`)M2Da9*STpS`Gd2E@I za~4VgT6KD!w0vlB_50o%3}{1u>FD#wO+Jjte$LDvW>YV*Jmk;aaQxlkOZgeGgCIz(z1<`qPDA`o2t$?A44ky5B>lPG;k@^|6u}Q2cR~n&KC&+ zY!RU}!MK}VqHdUnBJ~EIT5L{`#yjkLVtLRMeHhKlMxEcjNClh{fOlH{hF=6vQ^29l z1(Z~0d4dv%K+HCRSWvdDMG7*)iHw~Ixidp&v()*8HGG#cK8vb=dfJM4fto9-L#Kf& z=8LKmiz-@{*`=z*nUPjC)K6lJvQ+0uj6-Gh zvTl)jRd5+5Pd~$h>c8vqD?G#oP@OGP(m*q@P-8I>y$G_Se&)7H?2w-U2KomEJhW0d z>g41pmDoCt7fEK-`5S@6bgA-q2$Pm)2~6Hmox??@yKNB_bVgTx?Pn8U*GvqN9y1%2 zON^emyoY90hs6ESql#nT7AKg$?{MkC)?uI763L3QH6ArhNh9GIOpE^0Qy z9xOf66LqU{8n6UJPboUa2rbjTIW0CEJ`Y{Cg{|QC*g&KN&~cJ+{*i{T3!N7-j**P> z%V0K=an_uDB;sU;6j=f4gGSoq`2oG9>14HUZjK$m#E&$pu||>zb-vL;dGd`Q+U)cV z1_x-R>O?7f1vz%S_RZBok&OliEC1|?ve6P4QmaOj{!}tJ5cLfX*o*MPf+GT^T~gH7 zhd3X)l+Q&Ekcqwl^pK4QJD(I%bTUS0{Cw5<_eY4O?N#pp2N;U0osm|Py|NxLv@pV0 zIxIGi%YNU007GG*AdU3(2~R^+2^`RLPPKB<26w?oF2yzU77r$40|H=Rm2ZIR9Qp@? zq0RvJ2!u+1JWH%(uzj;{K)gFuX5VZ86vz}Wp$xr$yO?i;C#Tv}Bh7BDtX@6DKA-{> zps>1kjQzEYu9^r@ohzuuN_BM?!ZY3?DxW?e4v3P$pt{6-qxrgAoLrO(kNXC5bL@*p z_^Lbx=Gb;J$KK=doF*x9lAB|Dcsz2Fn`1QsxQV3j+YzWZ9bO>?X{vxh~{N{`at}QB-W;-O)KB-_=X*c_37(29%OAO08P0k@rIFUs^CBlXV|vtr z?Znwd#VW=G?5sjqMc_m5p=Plla~}nl)fmoDDKbL~1*_ZL_RX*jet4Mkd3Zc#3m9)Q zW{V?)$oNcm)x~~jgaz9nWaS9W8qsU3-vrsfXg2xfp6D$K=In~p+ysq*AY?0bEYUoz zKFJvLJ;(!E4cdr=Z#9vCmKLEymJ7Z|YqUuCMzCX`J31WB$g3{c5A!uPhGskSxXCev zPMweEse##sanTHTjrNtE<%vov&F{(X088^nB}j?xo~m57GiIfdnhqr7#Bt2i|ACx1 z%WZ#cPlAKXAL8Nx&Kci(u}4v(yDDto#)X7ja=}htAJ`U>9P9(pF_^?AW=$V3C`o~u zD#;4I?*kEV!94o_FJ%V%_#-DAetQv2xspBzniEf)24Eh%v*;!m3utkquWL99)7M^EL=q&jYOt$Rg02w70)iTq&odxg`XP(G7te!; z3JJw{C*$JFn`r~cO)G4-J~wE7FGY3hGS zamX`&q?J$o13W*{%BTKLp2@2HaA_U7MVtB~XzDLOEM@BF`dMi{rasnkn*GGD37x1b zl-tiiSY5T_bGBXn8}0MC{J`X|u_m-$c1U@LRs+Z%td*(G8r0~;7-Jd)vaCX5qEfoz zOjbcL1`(0>v3qim6_ctLG&urLfH0B$aG${C(p?(qnO|y_WY2uG|0-I5;0qM&vsb)I zH9@F4JjZK{p@opn@V|~WgysZcbywYsTtAx(pzrg@KGA)d5i~%XeffUw&sU|*vYnMHb z*QSMgQkIr%^+CY`f@x6k?N#rh5|lx?F(_vY6ja;S)gq1c%sCxtAYl`caGXX$RA#UE zEAoSE9H>a%e|rVYdDJmRP;yLylHG`sV?fCmbVIlj(?W|SW+(OTI-vc|eLsPAKaO?= zigt$a(sSEldrMzNotv7|N5@njgWl+3+>TCyy_n@1Gza%0IesxHv@T@^Ws_eU89zqG z&uZJci~`ILdC-$qnu!56sn|a|O)_nl3YtpIP(5ppdls3)SeZQ-J_9xL>p;QwC0(SE zljh$%AixHKT(-I8F2Nd$i4{Ep@ zH_#}y$r{Q*_b`IIdr%ZT^Zn@9>8KmSXbr+5fLh9#yPj*zZcP=*#p;SRH=&uk5}G+6 zbj_T-;ja3%)-cW9VhlQVA=Eg`4VrLZVdyhC;1qZ__DcI=@S(d(yKZ%XPvU%L_OlN# zY{A-bi3m5>zlz) zZVVC%vzfAr>tMrRp@TI@?YSWK{5d-%BLosvNIPhh;Lmvn0!T8U`64&lle5cX+AFlC zsj`(CBI_MA5zVz}EDo1V5qJ!e6HUob&5Bf<3lDVgji~<ZPbg{Kr~vurft09gsaDt6&g-I4 z(DaFfTEGsf&PS+M71i(|uyoaVD>j?Z+tVbL#{FR|&{HCL3xi5*vb0e;Qt)HTz^4cO z1+7ailEOx?B+G);5X-;*G6{tpYLHk6kk16}de%6Y;V=~1ckbi^CE$n`ubS$<2 z!#G;S7U|K&KmtjGgJc@-kP7zPJX8lV37{N^gS`RLP2fX>1w-7(*%MaW%-B}marMWW zdqA673j;}Y&Hzn!OCwigmbzdrfJ|h=DUYP1QxGa)-m}GCkUu_#M9P=RuJ%P&-Bp;f zT2B+rAf6;(YHA}@N%IxX9i=b#sOWSbJgCg2)VbGTxv0)7F^zUhkXHq*l6@@n>G$lF<)DE-YR-pF=HQ?kIOzEtRQ5QM zVMu2#VbG-&BG9*t7YkM;_34No|pAvE1sdR(4_pI4WV^ZW*cI~b|QNIK6P3Q6qa=AIp-F%N2t$$20+4ps>X+j zq*`~?ko5Rj?Pvgt_ib#cVA3c9p#*wBma%HElNm%4fXrTpb1J)^D6Nw1TB8OY32{x!=AK*q- zNfQ~N$l3=RyD0#p9eFLnVOOtt<*tBNZX&#LJ+R9LG1xVt7{g2A=AC125_M}8Y863@ zPOq18nnOdWVLdS*T-gCut8ag+&dV|Qgb86J6*Px)%Wk>J0As!Ku)XqXEJkE$)0u!^ zlLFmNjg3KCL`l<&gv`SZ$J1Ukaw~d5TPwPWThV`x5_cufGd#%S$!)DDk89gnWdgWf zxo;7+wl~+t)1Jdh7CcIJbQY2V(P>$Wg#WD61uHFE^P%Z;gF=!|7|BqUixyQk#&gW4 z+IYgb;eoSarw2siDu8`Mb(LqO>f8iPE$=wZ)Csf^%dH{kcwV?bP!aqf+=EY>NVJ@O zN;{p{fp$qU=~B?`5CJ6gCYh8ma;(bm-^oxynPtIoK+8oTNq(h_IDzy)xU=)APsKM< zP5gjCh`adRIPydG8a1mq>5>~U;VyY9`!+sM8Hth5T*7&3MYY7fmh9edRcAS84jjSw z7IJ52(MkinC=dg?WNO9s;WrduNg|tGh9h1_NNfUWCyvDapu5ffU@=J+4G()I$=q#e z`0+-^Tmo5h23QE^Qn<2P9a`quf~kOpnrH#L5z~vPmyL+(90^3$lV-e$YbLFDRGt4s zBDScy>swUu9%5Sx@I3`Q4G7c=sIH`5bb5q?fmMXPRSeMsDkeEX_*Y@&fRhe}mV*`D znvszKRhO(u*yLywN;W-{_G_Xblc3_=o}w3I)*ABeNI%h!LVapSF9qDf|s1L=$7hV6vH?pnfj0 zTJyjfhuEY=@~Woe+tcio@E4(JG9Rr$GNT#dWQZZn6)dR1)NT&i$3S8@0@#kN^Bom_ z#Z`*CYE`rH-f;||zQ2rx%Ux9fxA{?$Wu-<yBDwYGdeJ2(e~9#9c6Cn6U~6!bX=Q zPtJ@z&rt|AOW5b4JUyN4o8#NfVN^*rD~5JI?HqfsCqpP_24DvRy`Mm>2&l!egVYw| z4#+}!K)ROpPaum^4;r#pVyz(YLR$eoUOE-?YJ#d$iHP|X6upE`wvb|A|-S=*dV z(iEG|BtNm>ME2Ub#tDt)WPCW;ns67BUt-JCe-eMvx1UJ+J_XO*e7aOu$8{5^={YrU zm@P4ni;jX%e4Agh>@?>=QQVPF z8{EQx-?2$}p$_TKm7sJB)>PX@Fe~HZTTeyUl*K(u$d^uI}zH z`2J>#Kj(X_DQbWn=Q@C&1*|Dnu64b{x=8$3-%uR7g1s3ST1=}{I?TZk#=(Lezf=%X zHJ})f5&a4|u4AxS49q(;b5J$b%Sfv`RG{t8Knoe7m9%f3GIT0cEve26p%l}0Upg;N zxW`9euQR^4@^JWkf8-Wnos8B>2H6hyr?jG5QPf|sBh-}_g;jzke%(nE`^rTVmPn&H zZlTKGrgk()s02f^fwX}ZOYjbu2;?L6NKgW_ z@rb}LpyOB60Y4e`9944A2>dp@OZeT3QW}1zb--_~2LBY`neBRj0>95b?F_%0$uLFL zs{yLxckC^~FTnmz(`Xi)*i9sm{PI-}zg(IL3dY_;A<{aq3q&(&zdt&@1^%HjuI5>m z6GF&yL;1WEX{ytJU&wNaU22sImS&d1g(PA6oq2-W8=$5EQ|@rt(kw%$x9S{5&;(|a z7>1Zw$8C8G%ABPpA-Td$|Q~8KI9P|m>Vx; z0Zo!ZvxL^E^D892exBNMD*!s2r>>T_i?ttDL#+KM#M;Ngv}rpPe^#uWzZ%%4NWKnY?I{qW zjad6NiB!xtE-h09+U!+a+Jta~cW?X<#&ePegcT<#yM6$azhGyWgw|>(haIXpQ&fYK zOAuP!xzI{TNDaJm$u*}F$@N$Gks-OBL!Cl$?N*(4Q<|Tdvxu4yU1$G$q6?>Izn60A zV?$!lptWZQoVt0{DaJ`szC|r}!}ujdK{g)WZVYwb<^Uy?hvrgZszej#8^r3y-59f= z0@t^3V=&9a!zd=~fk1Sb)ep7lt!}hU`_F(pw*?9?{@Xr)xu`mKU_^0>ue)+L8jPKd z`R`%>@-x`c!Db)(*Lt`TT1ZxRN6BW*1Y;(6Dw;jC&4Jl6t1!*5yvkm&4+x8bO&<1r z;yezU-mI5zN-f{SeVjPP!i$HN(99+E+jmqBSF1aLWHq#ZMR^){0gDn8M(iKM(6eZX zLS6a;xC>F@qA}z1F7pdKJFUU{j2rUM0_m);|qD z4_arz=9m%UjvgpGJ=uLU8BCC*MemX@6;{s_UW!@pQea!J)J*Xfii+60e`gCLw;}ya1~gT z??UBs#ZJFIgz0LX%4KA3yn#ezZu?^D8Cc z%b;yGAlp;D3~y+lP_hg8A{Fi-N_Ueuw$30txq-HzjZ7{k+NXL0I@#Yigx4{adSGul zq#O^>X*K(2!xz?6dY)AC0hEnN{Dh_nb|FsEjKR{-i#8%GM?ET?C~Z_;A^wcht|z28 zfW&l79J}D_L2lBY!VVE+nk0`wbsltalB;cf*9(59IZu^n>+d4)%5$CY%3N%%YisZ< zyuOE5{xB?g$FV}!^Jl!Q@(vgddljehIT*A#o{x4-LR8-6s zCM{}{At~omMx>Ui31cwfN(!(kSP=44ZyK#u~9?q}gSbd@Acr~|`hfrq9F`hFio^p&QgXe3i>$Cso_+jJ{jL=WD^WAHJlB#t)|7 zbj}Zr1oIR8@GQ?u^25VCp5%vhJg)J>tpb?y!@XCw;fKM9{scdy=$rg4*<0YVa7f$4 zY*9zk$%dL%@a}fv-2uFbs2SD>2DI%9C??T7yi(%L!>_~CucZ0@A&+b3`#U^>S@QW* z7z_!~N4~RE;|ux?`HQso|HQUCy)RgB(jIvlCw=nzttXhK0k}_$}D-L~Mbvi>dd^ru0ilQgd@J0vKvroYY zOD6bHYB1XZ_M-Yg!7iM9+^0OqB^|an=>4kSb2LmWV+&qHUW?ku=LR*x`JnsB`9=y3L zk$ztcvrJ;wLh_H43VsNU$9Wft%|wldL+7RHOD;@q(gYmqe?noBB6aBf4`Gn6izHua zjpNM9GE_^p6Z~NkEd|B2Vzpgte+s|0oKVfl-c2G-c!{2KPS7SejtYgZ)dm@>G9TzG zCAj2kPMZCR_nG}-ICL)fsGPXKzLZyjfF$FF`C(bEZ0;va_?v*bv{t_Sv=ksT37U{q!3hqGLV7}W*|{X+^2@BrubG@i zH7(|LvJ2aw81LjR;|Ly4%C5mYuF0-`0=QloI^}0%7oiL;4Bbc`kQ5ybBF#j9*07R$4Km1{fBo~o?_+v_9SbqADj0CUKh7cqP zUPHYA_0p+Ib|d!0Vp7cyX(W{9OAN2)@BvDLjZO%>CJ^X!fq9hYB?sv)9#0O^tvs#` zQdj`jD{DET<`=Oe;J_;TG>MyHM68kwD{mTfPl#v!W|UwsPA~oj0Dm9sBn+s8@`z)h zf?new%Lv^su`dU{*(=q&Z|;m-dqsY|vTITYa{ZN(ShJs94n@A!kK?l7h*`=;3t7RZ z2jSx)?#MZYHbV=Pm$7FH7(csIqZnBF4MJfpACZnM9TFpzSdQoLc#>LEcwD2_SOHwG z%pjy{K7p|O7?SKe$@H~fUJbkQX7DJm^UG%u&1h$l-X`PkpCp{*iT5X=&ch7>J0MS` z!;aC3vy@%Ms22{j{5m(CyED|eGbq5a`x4wEv~wAyt=avdzId%esvBb_4wdBP4tY7Y zRF=Es<=K*402jWMyzx{NS`~@jRa}f=brmDoX6u#@sE`+t!l!rf_WBQbNAuqf!~?lx z_>1-2e`_REQ0Laqa3nCao&2LWqZBxm{I_4fP4K!?mR^(gEf?@I;F)baKmoQJU?_pN zpLJ03-_8I#Qq?m6x|R2w)STGf*U3fN=8wxyzJH!VPvQ)5ekmSXn^kSDJztDtwjZxmsB`4jFQl6iE%HbBzn@%n_xeeF9H= z2R>#G+lj?~EcdcqA~Eco?^PW~z4n?V86G+))=f);4;>sQ$v6Pc&&?z@P7$R=jx=id zCIFlp|A+o?kZ7Xm2T@Cek4DlTItzVQ?jSkT#vhu1pWF_zIVxd-6bkAQ`n?hYYy2LO7L%V+sHw)NNBJRdxm`z<5}cr_ZEx&0A(sHc~W_yhgxX zB2KG8mA5Q?19`%&i<-KND(n@LAdqO;o0WGM8yR2kLyXrv303jipr*HMbx`Z_bOlZ! zUlSgVD&LNy6huIX?)uG7h~lglKZ$~XS?)zQCE2!)2LwykFhwo5@VF7@C3x|!TA}>@ z6ZQh0*{-2{ex|}QO+2=cKN&eCyrgA2f?GEl1Sm> zI}8S6RsT=+faLi~^*@Q^wyzLVb{xVp-oXa7EzL;4UL;8?y0`%d??eht7pl&;=TL|G zKSXi4|2hijaN9-w@BmM+(x0e;#b_2{{P4#!ek7zE`Jg$(-=~gU4R>7ZbFAxa7=)jv zU=}A3mDoP9>BKBOC@R}V@b<{p263OQ_5$+HknF}DHmyXg+NFYsG;(CU z^lW*9(i4SmB*~Apq0VyfP0nD1YU*t^ntjOEqr_`oSl=z@Q9Z;;SkrNz4XFJJ4IO&7 zh|GClM?bmz@Rm{!DMu_yV#$6_HI8dRHd)r70COk>=a3}Q8F*MkGZ8#oL<}Ta=IVAr z!c2fbB!(yXMq5tWaX60z4B9IK7(9A+I6-4=zO(-69N)vC0gC?wq1ULq|1mp4;0BYG;bfG3NX^>L>FkTYw z_lko45Gi3R3}}pjgsYZtXi%Bam%2nIJnhpp&?{Szkj3!n!QG4lIcmLB6QkS2A|IHL z2HB%vR+;OWd3`{(<`01~&^F&PRMa0zldZL#okt}8y`dU?Xv4qX?WSHegeG_7U#p_3 zoXz-x_}{STLq0UphDDS5UdsFu`ktl!_4Y_!E|BDG659k8?TGAEAb8u!R>W??nH_C~ z_zCQ>mENfK>M+5ue_~zFcE;V9mWe8cavNSu&_Qh`s4(vNZdsctDqPe2%<4w3PJvXd zF*$;r&;xd&iEE$G-~0Fgt!b7k#-8QF|UNw>FqDCehx$vuSclP z`rrOiqGxB3=oMK;ZEcWF`ZJYVdgzq$w`8Y8cgWr#AzAU4PRI6^kJ^uIFtYU-fEwNQ z4cK(-WQ=jpTNk3I8e_a|zcUVn?9?@wh)WzDxP*)0VbxTckMWiY;q!W5T+5E5g4EJL{^Gq& zA^QWf!#u1y?iZ%~4ZOFwb!@0m{9yp+=q5YP&OzJ6<$LWEO&px#DKI5S&7^|Gq#4rI zOIu~RbA2d*&r}T`3$(%bSb@;r$#27~>?Uoqy&XbOQBH{vog6MPvij?ApY;lr-VJ9nbHYi&p$yH3r3jRui(B;{54PG zHIBAD`3;j>0Gj$**ZZ_{U-QM!F0-fVAI#ccO6_=em`z%k?SwyW+)uQi_rq}#h;J-RU}DGG#CNg(uW-qe7yKka`1wXsxWxBI zaE$KUP7Ap0;A+91+=3((!FR>XISb8<%KRGrQonTeog_5y; zTRxW)dz1$ttxy@)^xW-_8)EJ0Mryx2#(~F=U!=!0diSbsj1}eEUZ&VaKkaZn<3t`m zml2(iuN*oL_24WN?Sau0rjz|H{Ku|XQEr{7JLhHE-{$1P1tjBL$_p^8*4Gu~(w>~V zsucPf&Ijx!I?zca9PXwSsl$ZAancm(g1-EE=j5xax!7gI;f{@2Rh$}!=t>g2q8*)- zO}^aXeE7!YdnhZ~zb876{pcqV<8L?`i5P88$Q+qU-D*_sYru(!%O0j<4pRV5;`^A9 zvYc4N4=AF6zJHSfT4RpXp>uhi5C$so0NZd4!z>Et_pp!S6qkR^6xB$u4VQL z`1|pE1)f7$<=>eJs&X;%>&DUnO|)$LeGm<6f{DB(#=QqC-0HEh;#&`APxzW_Zw37Rh64|5iKv5Ge+@86G#$2uSr7qPJ! z2$n_)dnY<@H!06;q|L$0L?~!l~aGC!9N6ee3uNM z;Eng6>5MlbgbFydl!Fczpqm9~DsPBQSS0{3@WvbW;x?AkFb6F_8gtM_W8>;VRcT8X zj7a`A-i(yXQ)oTLdM8B}WNpO-{zs{7oo}7KQ`n?pz{v1Tp42GSc^~z4BJH$9x}-^t~8fj*dNyvq`rr zzgtf_1j|Pg57XL&Z*n0=dyf-GuSyWvtFCv0SO5#&uEX4}!=M-l#DE!_>{8b+)c~n7 zaj{vl!q^-ldDM0r5#hIHdM@1dCz6{v4+A%@R{RNZG0{hA7bjE|69M)rZkz#Cz5^#P z+Yb+M-XgiVoWm10<^!JAs@)R=yn~+^-49TJO$Hcxr^!tMrNwGE=f=ItM>xKTd9v6C zSRo36FXB^4w^AGwRldOj8!5aERS6_59gzHRqGOTVju~w0!IMpSDN@> zk0=;xy?F%Av*X6BXz)JenQq7|Xbs^;J!s;&bn0I2Lqlp&?i@_b1n(2E2#+-?EBGX7 zR7~Kp$f`U;C=BJinC%#@*G zrZ|(+WB6Dw!c14cPU~g5!2>I+=j#tD3LyqLEQJG&V4i+=x7=Xj;1#n=bl3? zZscdb@tG)^=`*<`=)}IB1*D@J0k56!fjLn$ zkKcZR$g~WO*r~k@r*gZH4a(h0kDg7{($T@|EI=9e7QpqJq?f@YhKuFY`9aE?jJv_{X3?43`sYogR;B(UU5Qc@v z$tOh*2^)g&@v`z3qywRUBG9nIVMO5M$!P+1LDQ`X%y1H{bIke*%)0S*=62B<%z&r_ zuHWbgU^`D>a<|Cv>KOyIj09%FhNN3lA$KZwWC`1h+s{`3YgeSO?srrsS|~k%0JpWB z4MrG6&-~kT7i%J+AJjXNHv92ON+o(1Nt<;jh$#Z+k~4$Dr%Ia{;{^PpfM>Qj00r1b zkMk1Rf=1E?ljZY1NH@2E$^4CdvMzB*EfwEB8ou|VG9BNw^xOvD{eIE@IfU;& z?j$6RJdnV58i!BC_b(d!u~!K6C4d57{@tMlNCj?erQ+KNuspowNZwtJ?8QlBX?^A2 zbHe>Ms0Xy||Jh@jg!~W>ZS}PpPAJ@egBq0!IieQ{L`jU(cd(MGA&GGdM-=D(Iil$T z(X{|eit$Ws%r<+d7r6fhpeg6&*WHnztKg0#zOURb@ExV&o7Vx~o*KRl+kkHcR!L^N z4W-aJ;cM!EZwX&Z8kGkC&umu#6kvbTGYoG zH-d+@^lhN20V4DzeBZ(-F&o`aui-nH!>1~3k8AL;tpxfsK!NX&PVv?0`x-#O4B&&S zV#7GHI)2xqI3NE<_3_6;Tl{J?`Yb~w%7q-ii<0=g$l+7*vuOCy%b2+TNZ_{?U>(Q* z34QzlnnKTYYk!iSuiUGRzm9KS2Yh>K_%`6RV5I`Agz-lyef&G%TXLzO{{w)>_yd&2 z{|}wvdt4uXfTrMkg#9GG=^DOkQJ)xpJhY{6gHN>Im+*ZHql58>>qZ}c4xdWj$2Iua zUkUVSfYSH_tRsC-A0w)M4WNnf=g20;AI16jKcbI69@^qpqtRy>Dp4-v_+6C5??n!u ziXYc&z|Ve;U%J3=Ex>*nzq0_ELeF(;ev+QAY%p+qN1;AW&ph6K>ib?jHGCU3)A)mx zF#af|k3WY`#ka&Oi1Yy9G5!Fh@rPd95#QCL1?WP6rr>)-?tm|?2bqaiXP|E#q&M6Q z_@ndP?3nUle|m&-w>mTsw;1AE;&^S|eJ&;96&T!onX-M2*QdqCIn?kgjW1K@XP_it zk8lOpUU3(SCgCz^yB~M9U3npt2V0&1eM#ub*QbDS9czy=j@OtWz@h@on*_sK!u)=) zJmXXiOEJ*rS|k{(!C zsg>^@Ow!{^JSSVrWW9Jlm*r7E#|xx(0|fjqF9nP%278pNffBQ239!cn*yt26dT$m~ z%i*>Ca3^nkwE%11#bO$XUV0Y=gJGbxUM{;mrI+;n1L%~{qWFE20lJ2RJ_HE83D*oA zB?Ee?c)?Ix#++szK}Phs<$XFv(C8`K-C>MXzzL>g51jU~E$G#_fXes>}*X>MNW zd}vtYDM)3mpU+Ik{DLT_}b0KS@dvo}^Q-A&**z*fyVE)t*-e@*m z!sl(!h()=hAH_9g-lE)sXn>h;Ks+>EViVwppF(eD=SJmUwTw!<*$kW_RFj8hg*NxyS51C%T2+kA|m`F>}8Y zSVVTrrz;BSJ}!RUWC_33DY_|>=wJRBUF%4f(+Xe4)J*%ii?-O$UAhT$dVU?U$hN60 zqwdKi)%22bWVy=_?ymfuJjI_|alJD8?S)=>?j|prB#v5`Jo`TN$|Y6IGfMVtVT)JF z;il-NKR$&wkW~AIS|2-EaoA_~e(#l6J>p?IJa+GP*|*WdwtMW)?x<-=3q-GV1>_qP zPl3;R^Q9iyCrr+IW#o4_XkVa&aL`7lxt|5`;%N!(WrFINeSszm){9to9xJK#vXUx) zWEFYD3xO|g$j1k+D~55@$7HbO4lmowF{<~dD!!?m~(=j(e;q#q7y>i&E-6xG&0+vn$>MWvn8OyxnR; zUbXCdM)o}>m#me8>o1L-d9hcXzJY}|dZWFEf@b$u?q7DAk9~*KN7(jnn*p7-AHcqX zgDagL7;HJUUQ;U(&KJEB-?yEUU4`?+cE0Jm>}03!*0MR3r7rQDH_R4 zHiE57(Fm#+_Pq(UBhr}kK(((N-+-&eRRJ!v>j=;{U`q07j=K33ta!v88)QK?{=2j< z@UoIjk9yZ4^m;uN(%PJ^w<%Ajx~Q9Q`MF?;+{$>{Mvu6UJX&H< zi^c*Zra-<13m?mIfF#)5!bBm&9 zo)+&{6zzQ)p3aUtJnStzoEz`zVQ+h)XXbiYqu2f{DmCp2vdbMowi=>j6|MlBkc*1! z6`2?+sxg31gxM=k2Ri=QH9ls(6?0_}T2(^>q8TIbN@yADUFFGZD&Iwk((Iicx%cg{ z+fmw6UauwjWb^H@5R$YK_|B=h3P01T@G;hDRcZFkE2~Unq8U-Z8~mnS_RW)w$o3<{ zW144Q*kr$I|JU{z@7S}Cd~Kh0C@}jSd<+Ze_4cb8zP4YvYo5oxu-bkV?n=9|_G|mp zdfc8rq^79Kd>>$TrNGp7gz?^Iq|yyKlzm~RKxsu)EAKP0Rj^?pW7yxi-v)sGf%Wk;e%cegE22yu=nQsI0z2q@foA8X)q@WI51$kcbn0@UlSZ};+ z?j{yo4*?6-1vBCj#ukrSOAOAtvfgW|hOpnDak01Hy;Y~jE<-^~zVRb4`MP|8$@d~? z5MVbbBpLQPpkA_s0y z5?f-I;v6)Pl*zHvC>piRfRd;fQ5!rmzqy-S*NwLWQEuprL%gkFmOYZhS)jUf3q+!X#0`|_M&j$kL}EUkuh9T<0f3_qAUhHd zX^BMrwQz|aqj=OgnaI!`tE0rC96cyk1#sBX2Qx{5!Y!J`9(#7_QT(iE(eKinPM1UL zyGVThsQj}>h_0}_Bz^Cwi4vH_cN+rIwJNgK^Az0ujgMI@!@f-=3|1h~{}A-tNa1(@ z3i|INy|>Lq<|d7xvo?YLXJ9d8w*CMoql-T93M=wnUMAJpREASVqcQ|#nC**74t68J zs1#QYxm^YanZ5FPswC=s0GfI1L3+mVpYF;qEE6%_FFNnR?V`Q3S2X!T=%LfRq>OqC zcG=f%2I9D~KC*%z$5n8VCi$QYd7tykdq}NzE0^EQ88?@7XDox9SLq%dZB})m`Vrfc zSj6dOO&!cFz*y0RxR%SstH9*aZjpnfk(^ul^8IddW{LLf74H(U={6xzS*)%t*5H#| z`sOSdHsFurV2o`BPL{R&tI3M_Yd%@dTTg@aPz6f!$z+f$0Nz`8i zaC9b!f%<$M!KV(?Xi%L7DgtKJv2=)rVa;r^w6T*s)j&SAz z_pXBaLHit>{mOUH@FjVb+gF-D_Hcv<674??E%BaA=9s1WH->6Gi9L>e3X;Q#d$v|51*H?=z^6 z6usw4V-4>f_~`!ycg;=50ymyAjkFUR-NB)+vAJ{4c5hVPYtXSOp0z8e9C5ot%? zA2oc>Z;S84OFGb(%wTAa`uV{~;r4Ql`0yfB49^a%dXD~u3H0fM1GMYdi=)3s+4V=D zUkN^Bw%bvb4zA^0m@k-J2QAX7zn+7h zCqVxqKns(gnVQ?Oe!;U2DSk5b=Oq9DM3V7zaqCt<`s&mQG& zfYJ5sydqYS^T%bLtZjYdsGuw9}p&vdR#r zj&myLedScp`^u^Chz7=~z*z)kT#B8NK?S&3UE)`&@&Qgu9dhpts1lS}2*4|kP z`s`6YdWdE#eYy<9D&v?2==&pla!x@9(O&>g({50VSpdQputa}d%r+nGB>Vd~uf=&7 znzZgO-;3vDfAu*ssXz54M!ip*vfV3h(awac2IH1XR0v4T@(h5&2d zWz2>>$}ya(aooM3K1rmpe9OnegGR(7CHhH z>#bBmd60_n$qIi7J{IF7xk2Ask_kmiKZ?-~Wvx2swlm-c7*xf7*YMx9{Pzz2yPp5v z#eX;O-+S@Phqc|$yySiL1-41c4TfXkUQ$hsW8SwoVstE=cC1#aX>h~_qo1kx#&N=+ zQF$HH1m}@^;g)VS+*P@?J5IY;l&cU>?vu!+&6~Fc&anp(M;&y|LK&MuB|~S=m6&-@ zE~l1c#iw)N5bB**eN?hPZ}UQ0gufV8jndh*&l%(2>SfbK*{;ekYOk;IH5|X#85+lt z!G{&A<6V^^MDPhjDoX9)oSg@&R7Ex1?mSViYck;Q!3rwWOSx1;x+;Zuh<}z+Udcg< z@+j+=xqKh%P4!*AVZ)6I z%)MMXoDbnd(-Z?dGq$8hl2&K%ibBw%ZTXNMgnulIeC5-PDt05n7Nr!i)V{9L;;|4O z1drJ_TXImivf&lb!C?2+R$0zKT=@b6s{{e2QK7fu77=`wO&N~I_@`^=MtyM;6z{Wk zubP`3gcrWH9htkGZV8VdH5;+vP~xKxxnOG<^Ideht|B{UwkZ zc%_wX-|9v!k(SXp_0Jjo2kHZP+XJ$%1^*ShgNH}4uMj+H?`auMVxmJ{PuqD&*I~}( z&pmBJ5t3-*FXBzF-Ab}eY3?Rw0{9{mM~=1xe}jYbBQ3!zR5iRznr$h=0~EeO9%MMm zM;80Qh%>jOrxBbdGdu;?yW0Qi>5W$jG9^Z+3z6?vtvU@B~91|^!YrO z{=Ma6*fIiZe~e1N@?G<)`Jpjo9*|hmj4zG3-G4Pk3SV1>3Patub|t)@z;B&p6Ow4| zC{F_vH@RJ-e1X9Mo$}BxJquBgTZ zUTYBfcTxVIkzZ#iKx5!HgL{~Yv8225+!d<5aso)M+(@m!zQL#WLRqvYJ`CAFC{to* z&=`(JLC6{Yb_abz?0{;y5Y-7n3Sq;)PrXvyCrMvQPS8qxJJr4BD`qjEOy1$j>RZft z)$wArUbcL(6!;aM1TJe@L8<&m;eAL+)5&xT5o6}qM>^-D?ptWw zUI2ZfV^myVzU0>m_vJKW?aZZ}QkZW<0`@NYuly0MGA%1~b0T>MMpY!!{o6SZr1*F> zq%#%SguFy#Hp(X=6HqhWL9;|uQ~1}3y4#&7Pg}5_8Kmp0X}(=YCF{&a zYB`zCY}egH6$i{NJrOqt+NSG?DEK`3t{6zXMZ~3$ZhW1RI1!>#bq?%_;_Ss%)S5@% zc_tU&ENFZ9?k?q^vm>R*oUDAH5Fn!$xdB#BWXT0*P~swrKq;Z2cd5=_qnKJ3QPWmF zPmG~`l2Mo0IJdtYI1L9*621eAuS!!vY*&uM&c9?;92ibGiqGTuIFGB#S0F~8gO6GU z@*I4jCu*_sM|2mj&b6!mZP>}3*8dzjx@*BV2%ZJ9KPP??%fkS1RzxRewlk`uT$l8ES1`q2nQ zov%zH1Sz3EZzGZa8{b5NY){bZWxKp=zo-1GxeG(rddiPoyKt`GQ+{+|Xzl`EdXtwO_A<*@2u)A<*Pd`_ zzAybCJK#+}Sbl8m+=XF$!(z%cBlkh%Zo%Bd{(1`#`Da1v%B;Kwjv8SU zYz0!d_SU}b!*0CBG?cj(Wjyw6@AocUSZB!vrZltaEWgGRn2=|kQ979*&MXa}GGi0I z1m%*_nOjM8U# zw1ww#pyVvaC8kk@GH9Mto%G-$A$kd~y0V@!!L!AZTuIG9FO2d;&zAeCRW1lCtMI5y zAheh$LAE;fYKk$9-3X`9n5)ih(9y68k_bh8Bq^i#w(|y11KT>(=vDwwYi`xK8IM@% zx*tD$M)ld2jU*w-=?*f%H%8Rr+e2J1>C;1s%*`}NuMB(i$axRs5WMBw1qcdi!#AR9 znfPucRnL5x5>Bb8&fbXOiu$4S>=4gUYzgwXmEv^pAn1^4T3k{dp7XG=mRBQf#bm`F zY8r@0p59nNEi}&>i2j$ar$)$4@h#ZN@)wG7PJlefriIOcE2Y0AJur-~$R2^sl++yY zWe3~e!YH5)+Jg+pkf`m?h{sxq)=|szc;!W3oXg9gnp_C#QwcRUFjX_ zy5Z;Q!jipP9YlPf4tj?FKE!{k`7e!+Iw-_{=kedE{C6?`-OYbrPyYKc z|5f`6B4p$E7*y6n zp2&x-0oLF-ZZHSfz7P%xxvfFG2k>okz_d@AT^|^@&p*3%9P14UQsiK`bJsN9dfa2O z{%PqL(896}n>`RM zGAj!(Ud(6Cns>aJa}M_YJ>NFdetcz-In*=2_VO<}lh&ndf|{g_Xu@uXY?6p0NuO2+ zUBdZ{#-;6F(%+)Cw9S#CYqCM3n0Yqp)}C9hPCkE@^4x-F+;2|nDEkx>D$-(vP;y4* zx_-p|d9GAmvk6tHPKitfF-zDQ?q;Fu+0{Yoxe2kx4IspZAx3jz%`C)Y6{wpqOR2v& zQGYSj??(M3npCG^O{w3FB!2z7Iw)7vKb2C{LHhy4>nDgXd?@s(|S*OopM zGMiYk-FI&$^0eed52JZJdC|iKJg!~zaE<`Rc|SULP*;>mQU)RU?9k&C^aW|yUOP*_cxpR`xc?Ejc0S1y3)3vi}Vl2n|67gGj7Ae0K#5_m3cin+*q0HaCD7C z?Wu#V*6GRX52e(<^xv(&t5*LYoFmr>8eQWie0Oli$C`Y4-Xflfb7IekXTl-oxR3XV z!)y@g9G9vT_?380<#5n|*HeKPkMPXvS&C;JCWYTLezxiStUPjW0!~4)srosvKckwuC0S;xoAE^=IOlzHkr0VD;N+>U2 zRvas^&BU=Iya>C9rX>r`QdC@QzaF*b>ZeISPnwBQTOo92rD+EB!!{Jp0Lli>z6QS5 zDJMcPb1nA(2Im&;AW)ng0ndMZn!zwmHp7arEKR09*c;aVo!GWk$H-HR-=p@~lqp-L zAy6i+;0+ezS#@5`l`GqL9(i0uHWRQwB~PHD;rlt1S7i~j4^ohFl_y?-hvoee{QMn1 zunXU$e0L1bb(X*3nf|Dv*sI7-?Ga#~r$(@iT*F5ag$;<$ob`-q8bx#Aksw)_)b z^LRW1I^06l)ry+`ANn<)0glFBrWRVy6!BwPyjcr(XyGO;+@OVJT6nbq7>T?<>a@QWTIe@jmhX7m!_7%eQ*!dJEM zdo8?#PO9OrLJN0jVMcF}K1B;3)xr<7FxM&auhYWUv@q>-k$%1w2DI=FEqp=4bB-3e zw6NJG$~~urtF>^x7GA1_Sz36Mf0)W(cuNbnY2p1^xLOP6X!PKn#Lp}(U5~%hN3>h5 zg`2eSE-h@)!i8EmMGMDhVZIhF)yDHSEw0!9M5d_!UMLTf)!|NqzC*Fd*boN15z7uimT91^f0ft%nEQ;4HDCS*f` z<-g!SeuV9$h6W^Ay0S%NNtNWpW}%qEmQY&irFiSCxgBkMgsdi(^ zzmgG7Ef9UosrHyeQ_fMM!VZa8oMOm%6~+{r@+XSR@;__j=vG9Bo zO)txI-@0GfqpppX+YEbR%O#G#BCop^Nz@dMsQ3$q)A{YbfaVK_qkdm96h%kxQt`9O z#pAwSEu!z$!g{15*+~-u`bWF<4Xqbx$!JsyMo+49@`Xd!=oRN^8!yu86d6Ul%!QR#22YsQi9;nO~zgZ7iG)(B9 zs(3SXZtqUUx|8eIU#ur#uiv6N)2{kX-M?Eg>!Xo~?q^}l&c<^l^EuTHB(2nLjs&9? z3xqgNo56mX91Cqi(a93D#GEm`?Ux$mronA);Q#eV1@{YF3rd|~4h)$#^^o7--i-f} zzr_~`B>cXZu4LTNcrxw_8SQ}b6W6thU^o49?$U8bCcZRp<-NyK!2C>YWMh8)vt zjwX%tpw4U`Q_F30WDlAN8hyN@y9;xgiAq7cRcTC>ul4)&L_!Pb5hPVPy&Mecj>V8G zJ)i|biCEaz%L1ELZ+&+>j^x9*pcdur?J8(UgDTei2fTJMwf>#ce%@|(BqtlhG? z!BbzmWlLIqt@4c?C05&fF@)0cXO+vaH?3Z*a&bKo?T-8P%G!jb`J&`3wPm*WK_fn#GjIVwsqDeT~3Syb6bwQ5q}BI?{D{5sA~_yW z*Q*+)D4ao0Qubcyo!t!biSBsN=hs(WwAB|ok#x+v#cy;CTC$f9>)E8UBhob`B{Loh zA+1o_JL0}IRkFN!SE=q~BArb6)=pjP2<_1$nkoisBviw6=}e8+=}TydE{t{cxVASG zNOo$gv`#(L(V46)y4Xkobyl%FaGth2aE_)a6D>TW(wknq`I=)N`^E!%zxMi^>p!>W zJBegG6zP~8{f5-=Lh)nK1jeNpSbwCup<(^{Ezu4PbTw!?tj5_54RSo*`Adl-D<$@w zEzzrR_$(P7T_&;fUUglCQ)kL>Qt_`**nfuPrf`%UyF$mgGCcAji4*p!a74*v+B;Gq<%d^D>{D`|P>A!AjC5$n zKG4vsGVE=W=u()vT!wKLr6IoukH2Vq>Whl37YvZp3rNqyMSG)fKCyM^oaGyC{P8z# z?)kNhKb)aImZ3kT(}T#xz0iTffQx*Toy)nFA+J@d}@Mt*(HdqaM#uLk1di|_(9 zARX(&e7`h~P&2sl)AQ)K5S+-SGv%mn>~$G-;5zlWfEtj_l*3G-c=ZqRJ9r-C?Ff5; z8j#MElcCA~Wm|M!XsU_1xpT#7Z5Tnh0rQm7sfc){_P1Q$!X1dO|v&+5o)`U92`gTAr zTRt-7jv`(*xy*F;K~7Ui%#@E#i=0_5nfV~U!Xjtt%amjN9Q)&Bx~4wnuMK?Dkw1)Z zWTMQs)Thl-?x^KCW8UZNPlx`Bf6DQBcL-rkg-to8 zlL{+w zQCxaq8(GW`)@X@me+_z(9E{1-H7q+43qc!x13JPhlh@|K{}Lj*am}4^?Ic5T^4}ek z-v3dbU6bD-csutz#XDS0*o)!hhr!lVQ_GU8Zhp`qXcArVM$95T_IR@J(h~ z$2Qq#xt@Z5Ivc2jIt`oQx7xvUtd4f<1Mwc}$Dt(qkte*fPH|Ryht9HzieF-^IE~zp z(l@@;CS1^mcg|@Y?+tten{eZ>!A#3)_c+qCy2A)N$E=)mKlN&_PVz=z3mxxaI_B2} z8u>T;vpD9>bk_8lU#n~T72<<81dKt)@CHjDI0d1qR%CTOuIo5HX zLW{^3gXoB?*JU^4@Q`mS!L7j_nk4DpQ{evjaUY}!@dk!g1IF_#$$Ww=}d=+;Gk1SG|7Hwg*pNQyaYg=_fCTM8o=B#`myYSr#ema)-M+LXkw)YdveL zcQxx_-Ivg_U9XG<+D!w>;URG@?hMey_4wsBhY+}}MJ1=e%L5^>g@!@q_`N2tD?*;* zG4O#>t}9aRbP6YUBY7sTM~puyM9qY*-T>o?5sV9RArr#4KwtU!WMQ1fWJRUZ=?`|` z*^e;Wer0_#j+UygrOaqLZwq-xz|(+AZU=eC(&eroPdsbYx7pBVPv;qOjx?UzkSk5+ z8FE@0uho#NNaq=HPVjg>X=R*wm1D|lkue!Aj~k|;J%n>7c-LHWO`sh`Ae@*3Gs+;I z^p|h0HPTp@#=F8u!)4{QO1Y*qo|JQgccc{Q^hjGOa%`f_W`@gqXiHzNO_b+>r%Rc^ zIe3tB@|^Bh8|!f>;^W4CdiZ-S;SN znHQwx!;9qepzN$Xv9NlsD7ZZ*cI`LuT*CEBAi_S6_aJeD!X|~Sz;PA-x>IDI`j0@$ zejSM7691&awo_$#6+m9U3Wz2u?oi<}%%ab+LD@I)yaa!#JxAE97YZlZ*PWmq%=0qO z*03!P`Kc4448NGRu-YyPnsZ{zTMV`{jTro+r%C^^(`EV}1M*sl5y!}{mvNd@9PeXN z?lvIpPpNQ9#d}rhDOfD8*8%w~xfMvgs@&aWsMC4X^TfR7!m&BA0x$Db0lBi%3Pf@9 zoU!~^o;TNx+Bf+t=ZG_tr-;+57m4|{1tQNa1nWVAT^~n0>K=wI_)cc{Z_>bo`y~p6 z*Ounzi2P)M@GcYLv!KI98-ZmRJlP)XvOQqK$Fe|~IHS5$EI^uuRVv+MKauI;yPcu` z>2f1E@r&g$Y~-^!$62x@Pb{e}6!V*ljdC1CJlZp&%Iy!T9K|6SfAnm5eaQ+Lt^u-~ z{~icy#XUgAx1ldF?hPYfIRf9)#8J>be2-u|u!e2t=8JO!xX-F{ML`Vu=EEM8 z58GBBKG#iG9oX@PFS_noCI zsbo5@Y^5FT=VWnuV1YQbxmVZgEtFR^`Y!Za^1dlzpJv=^PUxp@4Z4ZE=jg`Q%CP$a8SVqJo(F-H zE7Jb!-mn9Gqq4(mws*&cLR<>k{|DJFtl_ey z`J%La;n;#$iPwR)z`7WFUh1P&w1Y^y=uDI$**}qY-s`e$vVF48BF_b$3urng^3U>e znGB!@Jm$&jv<))d+kkXGR$<1c+X$roMj+F>O!2#bOuMWohxe}A%u88ut|+dX<1Vn| zuWXrJEUR{ilK8yw;<3UJ_CJ(AWaj;GX~SHgnP(GOCago;0fI;yNM^pv$J6sz3LWck z-E_knrS8&;Bxf6tx_1GoXF-h&uLClTEx>$W0LZkdk8U}TY1XN*HQ&rf*@^;D8gQWB zpD*lR&oiD`{opqv4)wTIJW(sd7XazrQ{m~#s8f}Z7xAel45a;ZCXzo>88zXXlgo%9 z|MftJSw^ussrPjt-ST>=cMXu`^CK006Ug!@XprS|CXne;7u`PqbAbm`*jhf!Lz%M( zefvW6?I()`UoRfVQ)mRw9HUP-{4YXqphtbfD*jVI=I=0&cD$g_yr01`T)(p8CqTM) zfsA*4qm1_nAni&4^MF59{4pTq{syEwd6P`PY*mraP>+jS=ZjMG1#@q=j~9%|`b@!2 z78C6pQ+B?l>^!EzZl&iIAl;)trt=n%`MBU>8SVno-3X+<5=;NwgLFm}KUdwbX9F|k z+>moAezTI>qrzq9+Qnk@y``-sXp;_Me_rOH0&&`rE_FGcFia4Ofqg386H3o>K-&F@ z%~Iw)AmdD@S17&x7^G3|2OO-yy$Gb9&s}N+#YuRpG4z~a7iR>DL|JQL+F0qxPo-RH zo0J;`(iLo%VcFkLj;)53yh~kw7f83vE#>b8(*00{GoP9JRQz#uy#zlWumsQGQjFh< znhT6)ikC9Dk!g21Z)mtS6}H`I7dN&RVQhu*a+Mrg*{-*X>jQJG<1M$eyLjR`wGKL| z&#CHQtW}2p45TZ;YLqhQSO~r5v(14x&YedgDO4yHwb=&@L7t zUkmZfT8L-o!YW71cxJs?AjTk5a56CQQ>TQVirApO76ER-dVe)o)thkU4^shX|m|)S8{(=@z#W;o(q6<-6|~mpj571L?jrgZwDuc@_)rlXsN-s>t;Eham4(*FOoQ z`_2sVeUKkh*Ox`5{D*-|FPr^skdLYB4=DLx%pmWCyogDC>w$FKWo76$-t#BR(oR{p zes%r(O8z|+&g?J8UX*Rz@lmNS0;GFDg|pTBAr*&mqe^aDoFSa?2c%uMsqha}IGdh+ zi=J^M_u+)p^I0JE>{sCzR5+WSPKzFql<~TNboZ<9Ln{0`70#x|Wzpm4mU^xO(mk%i z-&WywRJd%KaYre1(K+@?Jr@G$Vk(^Nc|86vQr7!~l)VmUgZIjb_Qo3VG{`p?1?^ltfUN5f=0_m>nllI*Vqne%dZ-{$kM zM?F)S&KUF(IY##?`TKx$-vcuLwwt7ke2*{2`*RWJYGQI8XpS)tWQ->Q1)~2`7(auK z{#A}k(!!jFflTVt&{hn#0;WDMiHp%cE7E{7kyD)x6RALIQe8T@6CdkF~^E`me`jth6IiM zP1c1qEZfO^QS^1l8*ShukxB{iU62DQEJYgDu#}%Cif%XM=Zet*A>IJFl)N=8S#Q92DZ$AhR7>!)1&4E>?thG5M}zZ_bl*RnKCcXi%2J<3PH% zRhVT}$ob@DLfnS?iQ)T(gs8e7^YAENqA@3l`(2hH-a+C8ZaL1!7{3)`e9Yf*oL^$h z=@q8U>6tp8d;sJAub{oCx+^ih3vgabeitz1egzrvAlj3XE5y9{D&|eg&a}M%erlaHc{A)Fy|8EMo;CmE#RD+9dmAT#Dc0~w{1~A<{Y08i)@EP z!9>0a@m_^|A$eOF-WQXFcrUW!y>X5xgN ziDMv+%Q&{-_>W^cKJWRg<~WvPP>!$p4#)SI(W~V6gkuZ7U-jV~knblPJ8NF>bm)Vu z6U6cTIOH8jmt#>*YG?@eBTfo90vhIZjCW#;gZIlAXcX5Yuy-%$2GAX#`$69Vje=eU zy$upLE3p`~1avNF4d_BpBj{343&;;jf^Goa0=f%yFX(HaCqUl?je=eQ{TB2ds1V;9 z%Rpy=DnS>5nm{{1UQh(o3%UjLMG#s&`tw|YFK&1~%)$3k^i9}Fg4qRel9-P^uLM7X zbuzwJE)u7RQ_*(I#A)Jmu~;m@_wF-=h8}U5I1Asvmy5H-3Vic9M|>#jsQ`g+SZoSK zj6MGX+s5jm$z-&PKDj4M?PS~>m}D7y`I?M9Ul~kyDCzIa;I(oC+=MzK?uWT=Y?7yT zwoNkHCcT%_JF)MuKH42grg0KRC>AoJU`M_oKWUpZdy5`4VyV1LXfZeRPGJ~Yw_(dK zwacxrjo3Vw+|(WM8!Ya3Gd$6xJn;c?I9nlUL}!}N(h5IGjyF0c<13Cl7 zu64t31h8|?^r}*KC*zcA4Rz_*nk$Tz8FCTEmZ&da4eyAA4UVzZ87;KGi0xFmIKGJ= z{Vw`2^!KJ4#n~WzBe-WRXS}=x-q17XGc3FXr(#_scqxlMfpbTWLEpOKNqy^aR!aZV z=zlD{T|7SpaW#v+Yr*RQ4}%ud6mb`LZHViz$UO~SC*(>ka<76HV;cDGZ@Q~_mduD5 zO2-e*DU#*%!8t{;96mUwNS4F@_H&B%*w8_nk2W0qQY&_}G&ZlPs^sHP+?rG4X~Pja z9^*(KS0Wj3xh}75Yr8_+#w+sJ9*@rBKqfA_8|xZe7?s>BYHC({wnY8ALrHn@vc}q4 z7vgr|igW6fCdT@yt;Pe3I>OO*d5ln4ckwhKfRTEAt-G;yCnJZtVy@Ly)OSXH4IW3n zZaj)S6Xye&_IS2I;xn`sy}BnF^cdS;&8uyuwVy+}b+rxKH*J!a)_5+d6XN^1HKBm3 zrreK5h<{Jg)zGlRv$Z|J=UdX{l9E+Boyx!}SFQL8^lS=6V|v6)0`~6kgre=;L6?iE zH5vK*WnN7JNB%^hyxo@w`90X+t^2wt)vyBzcKYHT<3O8)t3hg#|5=8fOQ^?l3Cqiu zR|7Q@TB1_T@paUq6j6FcO?^$4IZj79PF7oLJ(nUoNPQ-9zl3UZECsCOvo_t+x zP3_K!W`Gv=Hp-NvmlIV*TX=sppv7)a1bZgp&$?zAdj;=^L}w^?yc)f%v97iWZNb{C zQNsES<-()*}U%@8lx8R-zlTbERn4(JL}!6 ztDSOunJcEAtBAE{Jslx=9s3nBju*s;Cl*@Sl~}nq6j_<*^he|RN}K~2#-TYY!>d=~ zPsZFRy7aCtoKuFm9}fms0T0ez>caF6W+s*?&cs;J6Tr!A@n|pRilpr16@N5_FHLKO zCx!#xkWLu0P99HvPtPVEgw}*p2yy<;8m{99*Q3r5^m{OW!3&(dqHt?xJi51W^61Ko zXdRxaSZ}6MM``vo$-2fYvW zJ$s~C;%?E6`5q*SJ)%Kerravwfmh!hT3aoUXIxfeWDnxvbS+Oz9;lVTGYZ!GW4+AX zd|95MsK*~g{YN}|5;2^plnmk`>WDRn14lbCOUR>}qDZk+1mikvtr4Dt-pMSmK>7Mp z3i)Ux80tXPdm=u(Rm`$64+u3c>5)C5cr?O8ATbI~lZZz2o>0=0)8Ls!mc;+I`Jmsz>@hEv)qS4*mG0x+$>>49U%m#|5cx5M!i@cSO)l zUmMv(9 zO;9H;ZEW7wxW#<)-@qOU_f+~U-v^=p+a+LrqcVRt=%26Do)5l&b%8J>2ee8{w@A)9 z@wp>i=J|3BkG?#3SJ4yKmi+zKBDcSA#izQ}cWzUQ_gQ(Kf*G#Fd+o%t$>kE+u4haT z8BwQ|<9TErbip1uc_e2w%+&BbEKB<4po|^NaVJP7RZVM$sZVxAGib!Cr16mO;ixxE zm0*6u7*SDiHaqc3W*L-8L$b-$lzTQu6YZ|1Np(_q8oj2y(I70wB+<;XDHEy;Pxkar zXv!%~;Y|8CxJBPSvyn5DDHF=3pY4lhd|Qhvo19rr$9*-n6vl^@`UD@p_e((EU$oK3U5H?PoGZwEb$=PWfrfoROTa9H+)p6TjAoma_T4`@f(B973!F zJ&46@PT-Zw9|O)Sk^2g{cRK;%{@)bv&IMT81;2IwsdaBE_oy~5#CJ=`5dRr81V8cT zphNI;J;W(kZ^39uBFEsj?gQoi(8XmK%fn`3HRvw* zUBGXFsAmLNb(+kV3-~<{)8hV6{>u6zkmnxH&o9QBBKmD8<4jV4 z^GQY1?T%@N>WAuCsA& z9sDWaGoXssAOn1G1@aBQb?+nhL=ILUeej7-fCk|o0k(b!`GViN_mO)b3(kW+@QD>G zvE2ZEq7Rh!A6T~mI(SH z3-CP}{t@5}>tucP15aI#nGx_cU=qZ(-3R=s@^g>jybHmDjCKDY_Z80FfVK)gaWUvA z>H$8m5p@SY_q$zNgMFp1BR=qP5Zl!V@G6(|dx7sMzo^9;#5(94M_mHBAB^(E3mVY& zz{i=Z;#Ls(+;4U1Cive#nE;=?7_x7oe1YqmAP+zHBwY`3{1G+)KXVD{1Ague`qCC4 z{3+nttx~58_{D9i9)YX3W1j_NxTojmZs>Un(!35j2L3qkwhv2wKX7%M^m~B^K-$~T3FO`w zrb{&U%n%zvyC6fn0u+Ov=m+(|PYf$Q&bk#}1W^yp)fGQfey(Ne1sUxDcpr#+X^6)@ zf_4Z$v1k|C9{gO>6b2oJpKF^QQGV{Fx#migC-__s^&E(4aqUwH)updU{9IpU$85nc{9LQGFaTR94_t$Bb=$4i!!G!_=K87|5$~_?1IuoLE%0l=ArR|*7+CiY((eTpeggVXUk>0mm45{2 zyIIy_3|O*H)hY1X%0B}1-J)cGC7)C>z;7%62+(({k^z={O345}2|5DXtZS~h7Q64$ z*vkk$@gG6<_mFR(xdxl)zYTQ_K5;MTJox*8zX5H4-@3M%Yp#p?Q6AtE&jcmm=ep-F zd>(BAey%0nbQj9=Zzx~j8z8n}Oq+=T5dFiz%kGhWFEIQiSufVL!(3DRYtU=ZL%cf$ z9m1BjUiiD1oBb_Xs#0`_8&xF3_kHmP(S?E zb-}*|@5Vvo4}9XCphw{6n&74PqHl%29Eh{PWgdY)1|0+c1)$^0l3xnE48-=+3f!ms z#JiP01w5?$#Fv$S3|M;~@@TV(24E6IJ;Z&=Py8{6<@^Hh?jiIMkWT^s?tbjKg*_X9 zUJzx7w<`aqfInCMmwIaAHsTR z_$z?df@m}GaS+D_&jOEuXan*455o_c9|1Rh755SRT-SR&h%#Jz`wQjA?=y*=Al_?j zz#b6$M&f?uCtme+jQyY|34Ht;XiM-v1?+qT!hvP5s&&66_?J@L$AUphCAkPAE{T}@hkmp&@&;9z`-=BJ2;(PE9 z!(aM1?itYjapVQa{ndxwfcz84FNkryK<-_kpKHsx7JM=CLgadH@`+s2O+WE>pb^OM z{G$a=Df@wUD}M_3s`BT33-dG}=J7<`YD92?P6n+7T@1Pev<>7|_+f=t0*gT(xc^^E zz=m%U{9+;c(sL-!-a|W?!Y|CjdjN!aUea~8^jHjSsOjknYkTxKe*|jdiq)0Q6`CHw zCq_)N+rhy;B2H8y?Yie5djqUNG`MH_sHgx=MT-ki2u>)N;?=nE(G722u^JsVa{pUQ?+X*O+GHIX?)->}LoHw30u z$5hUUy#Eg!96308@W{cjgGUdJA8Z@+4#oz12Kxs04fYT2A50An4UP;R9vmGMqkQJ# z{W0ZCtxLI5O(}P(E#*yhredj{R9|Xesz0?ql}ZhzhEs=9BdNow(bSRD(bRbASV|1o z2OI;X1KL2vfOBBofNP*>z&+45;2nq!^bGV3>>KDG7#%n=Fg9>>V0_@%fH+`3;5blv z!2Xc-5T8jr`|CVF3~3yKM%Tdpfe}c$4)h-wKTvwmdvFMO5QFRReE-1Bt_1!Iudy9G literal 76800 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 F@Sh+$0(Sra diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index a8452cb..3cbc983 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -40,8 +40,8 @@ void Cursor::UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frame return; } - apiBuffer_.ExpandIfNeeded(frameInfo.PointerShapeBufferSize); - if (!apiBuffer_) + buffer_.ExpandIfNeeded(frameInfo.PointerShapeBufferSize); + if (!buffer_) { return; } @@ -50,15 +50,15 @@ void Cursor::UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frame UINT bufferSize; DXGI_OUTDUPL_POINTER_SHAPE_INFO shapeInfo; const auto hr = monitor->GetDeskDupl()->GetFramePointerShape( - apiBuffer_.Size(), - apiBuffer_.Get(), + buffer_.Size(), + buffer_.Get(), &bufferSize, &shapeInfo); if (FAILED(hr)) { Debug::Error("Cursor::UpdateBuffer() => GetFramePointerShape() failed."); - apiBuffer_.Reset(); + buffer_.Reset(); return; } @@ -76,137 +76,143 @@ void Cursor::Draw(Monitor* monitor) } // Cursor information - const auto cursorImageWidth = GetWidth(); + const auto cursorImageWidth = GetWidth(); const auto cursorImageHeight = GetHeight(); - const auto cursorImagePitch = GetPitch(); + const auto cursorImagePitch = GetPitch(); - // Captured size - auto capturedImageWidth = cursorImageWidth; - auto capturedImageHeight = cursorImageHeight; + // Monitor orientation + const auto monitorRot = static_cast(monitor->GetRotation()); + const auto isMonitorPortrait = + monitorRot == DXGI_MODE_ROTATION_ROTATE90 || + monitorRot == DXGI_MODE_ROTATION_ROTATE270; + + // Captured size (desktop cooridinates). + auto capturedImageWidth = !isMonitorPortrait ? cursorImageWidth : cursorImageHeight; + auto capturedImageHeight = !isMonitorPortrait ? cursorImageHeight : cursorImageWidth; // Convert the buffer given by API into BGRA32 const UINT bgraBufferSize = cursorImageWidth * cursorImageHeight * 4; bgraBuffer_.ExpandIfNeeded(bgraBufferSize); // Check buffers - if (!bgraBuffer_ || !apiBuffer_) + if (!bgraBuffer_ || !buffer_) { return; } - // Calculate information to capture desktop image under cursor. - D3D11_BOX box; - const auto monitorRot = static_cast(monitor->GetRotation()); - auto colMin = 0; - auto colMax = cursorImageWidth; - auto rowMin = 0; - auto rowMax = cursorImageHeight; + // Desktop size + const int monitorWidth = monitor->GetWidth(); + const int monitorHeight = monitor->GetHeight(); + const int desktopImageWidth = !isMonitorPortrait ? monitorWidth : monitorHeight; + const int desktopImageHeight = !isMonitorPortrait ? monitorHeight : monitorWidth; + // x_, y_ are cooridinates in rotated monitor. + // desktopX, desktopY are coordinates in captured desktop image (always landscape). + int desktopX, desktopY; + switch (monitorRot) { - const auto monitorWidth = monitor->GetWidth(); - const auto monitorHeight = monitor->GetHeight(); - const auto isVertical = - monitorRot == DXGI_MODE_ROTATION_ROTATE90 || - monitorRot == DXGI_MODE_ROTATION_ROTATE270; - const auto desktopImageWidth = !isVertical ? monitorWidth : monitorHeight; - const auto desktopImageHeight = !isVertical ? monitorHeight : monitorWidth; - - auto x = x_; - auto y = y_; - - if (x < 0) + case DXGI_MODE_ROTATION_ROTATE90: { - x = 0; - capturedImageWidth = cursorImageWidth + x_; - colMin = cursorImageWidth - capturedImageWidth; + desktopX = y_; + desktopY = (desktopImageHeight - 1) - x_ - cursorImageWidth; + break; } - if (x + capturedImageWidth >= monitorWidth) + case DXGI_MODE_ROTATION_ROTATE180: { - capturedImageWidth = monitorWidth - x_; - colMax = capturedImageWidth; + desktopX = (desktopImageWidth - 1) - x_ - cursorImageWidth; + desktopY = (desktopImageHeight - 1) - y_ - cursorImageHeight; + break; } - if (y < 0) + case DXGI_MODE_ROTATION_ROTATE270: { - y = 0; - capturedImageHeight = cursorImageHeight + y_; - rowMin = cursorImageHeight - capturedImageHeight; + desktopX = (desktopImageWidth - 1) - y_ - cursorImageHeight; + desktopY = x_; + break; } - if (y + capturedImageHeight >= monitorHeight) + case DXGI_MODE_ROTATION_IDENTITY: + case DXGI_MODE_ROTATION_UNSPECIFIED: + default: { - capturedImageHeight = monitorHeight - y_; - rowMax = capturedImageHeight; - } - - box.front = 0; - box.back = 1; - - switch (monitorRot) - { - case DXGI_MODE_ROTATION_ROTATE90: - { - box.left = y; - box.top = monitorWidth - x - capturedImageWidth; - box.right = y + capturedImageWidth; - box.bottom = monitorWidth - x; - break; - } - case DXGI_MODE_ROTATION_ROTATE180: - { - box.left = monitorWidth - x - capturedImageWidth; - box.top = monitorHeight - y - capturedImageHeight; - box.right = monitorWidth - x; - box.bottom = monitorHeight - y; - break; - } - case DXGI_MODE_ROTATION_ROTATE270: - { - box.left = monitorHeight - y - capturedImageHeight; - box.top = x; - box.right = monitorHeight - y; - box.bottom = x + capturedImageWidth; - break; - } - case DXGI_MODE_ROTATION_IDENTITY: - case DXGI_MODE_ROTATION_UNSPECIFIED: - { - box.left = x; - box.top = y; - box.right = x + capturedImageWidth; - box.bottom = y + capturedImageHeight; - break; - } - } - - if (box.left < 0 || - box.top < 0 || - box.right > static_cast(desktopImageWidth) || - box.bottom > static_cast(desktopImageHeight)) - { - Debug::Error("Cursor::UpdateTexture() => box is out of area."); - Debug::Error( - " ", - "(", box.left, ", ", box.top, ")", - " ~ (", box.right, ", ", box.bottom, ") > ", - "(", desktopImageWidth, ", ", desktopImageHeight, ")"); - return; + desktopX = x_; + desktopY = y_; + break; } } - // Create texture + // Calculate information to capture desktop image under cursor. + int cursorOffsetX = 0; + int cursorOffsetY = 0; + int capturedImageLeft = desktopX; + int capturedImageTop = desktopY; + int capturedImageRight = desktopX + capturedImageWidth; + int capturedImageBottom = desktopY + capturedImageHeight; + + if (capturedImageLeft < 0) + { + capturedImageWidth -= -desktopX; + cursorOffsetX = -desktopX; + capturedImageLeft = 0; + } + + if (capturedImageRight >= desktopImageWidth) + { + capturedImageWidth -= capturedImageRight - desktopImageWidth; + capturedImageRight = desktopImageWidth - 1; + } + + if (capturedImageTop < 0) + { + capturedImageHeight -= -desktopY; + cursorOffsetY = -desktopY; + capturedImageTop = 0; + } + + if (capturedImageBottom >= monitorHeight) + { + capturedImageHeight -= capturedImageBottom - desktopImageHeight; + capturedImageBottom = desktopImageHeight - 1; + } + + // Check if box is inner desktop area + if (capturedImageLeft < 0 || + capturedImageTop < 0 || + capturedImageRight > desktopImageWidth || + capturedImageBottom > desktopImageHeight) + { + Debug::Error("Cursor::UpdateTexture() => box is out of area."); + Debug::Error( + " ", + "(", capturedImageLeft, ", ", capturedImageTop, ")", + " ~ (", capturedImageRight, ", ", capturedImageBottom, ") > ", + "(", desktopImageWidth, ", ", desktopImageHeight, ")"); + return; + } + + D3D11_BOX capturedImageArea + { + static_cast(capturedImageLeft), + static_cast(capturedImageTop), + 0, + static_cast(capturedImageRight), + static_cast(capturedImageBottom), + 1 + }; + + // Create texture for capturing desktop image ComPtr texture; { D3D11_TEXTURE2D_DESC desc; - desc.Width = capturedImageWidth; - desc.Height = capturedImageHeight; - desc.MipLevels = 1; - desc.ArraySize = 1; - desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; - desc.SampleDesc.Count = 1; + desc.Width = capturedImageWidth; + desc.Height = capturedImageHeight; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; - desc.Usage = D3D11_USAGE_STAGING; - desc.BindFlags = 0; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; - desc.MiscFlags = 0; + desc.Usage = D3D11_USAGE_STAGING; + desc.BindFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.MiscFlags = 0; if (FAILED(GetDevice()->CreateTexture2D(&desc, nullptr, &texture))) { @@ -219,14 +225,14 @@ void Cursor::Draw(Monitor* monitor) { ComPtr context; GetDevice()->GetImmediateContext(&context); - context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, monitor->GetUnityTexture(), 0, &box); + context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, monitor->GetUnityTexture(), 0, &capturedImageArea); } - // Get mapped surface + // Get mapped surface to access pixels in CPU ComPtr surface; if (FAILED(texture.As(&surface))) { - Debug::Error("Cursor::UpdateTexture() => texture->QueryInterface() failed."); + Debug::Error("Cursor::UpdateTexture() => texture.As() failed."); return; } @@ -241,135 +247,108 @@ void Cursor::Draw(Monitor* monitor) const auto desktop32 = reinterpret_cast(mappedSurface.pBits); const UINT desktopPitch = mappedSurface.Pitch / sizeof(UINT); - // Take the monitor orientation into consideration. - const auto getDesktop32 = [&](int col, int row) + // Rotate cursor image to match the monitor orientation + Buffer rotatedBuffer_; + rotatedBuffer_.ExpandIfNeeded(buffer_.Size()); + + for (int y = 0; y < capturedImageHeight; ++y) { - switch (monitorRot) + for (int x = 0; x < capturedImageWidth; ++x) { - case DXGI_MODE_ROTATION_ROTATE90: - return desktop32[(capturedImageWidth - 1 - col) * desktopPitch + row]; - case DXGI_MODE_ROTATION_ROTATE180: - return desktop32[(capturedImageHeight - 1 - row) * desktopPitch + (capturedImageWidth - 1 - col)]; - case DXGI_MODE_ROTATION_ROTATE270: - return desktop32[col * desktopPitch + (capturedImageHeight - 1 - row)]; - case DXGI_MODE_ROTATION_IDENTITY: - case DXGI_MODE_ROTATION_UNSPECIFIED: - default: - return desktop32[row * desktopPitch + col]; - } - }; + // Cursor coordinates + int cursorX, cursorY; - Buffer output; - output.ExpandIfNeeded(bgraBuffer_.Size()); - - // Access RGBA values at the same time - auto output32 = output.As(); - - switch (GetType()) - { - case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME: - { - for (int row = rowMin, y = 0; row < rowMax; ++row, ++y) + switch (monitorRot) { - for (int col = colMin, x = 0; col < colMax; ++col, ++x) + case DXGI_MODE_ROTATION_ROTATE90: { - const int i = col + row * cursorImageWidth; - - BYTE mask = 0b10000000 >> (col % 8); - const BYTE andMask = apiBuffer_[col / 8 + row * cursorImagePitch] & mask; - const BYTE xorMask = apiBuffer_[col / 8 + (row + cursorImageHeight) * cursorImagePitch] & mask; - const UINT andMask32 = andMask ? 0xFFFFFFFF : 0x00000000; - const UINT xorMask32 = xorMask ? 0xFFFFFFFF : 0x00000000; - - output32[i] = (getDesktop32(x, y) & andMask32) ^ xorMask32; + cursorX = (cursorImageWidth - 1) - (y + cursorOffsetY); + cursorY = (x + cursorOffsetX); + break; + } + case DXGI_MODE_ROTATION_ROTATE180: + { + cursorX = (cursorImageWidth - 1) - (x + cursorOffsetX); + cursorY = (cursorImageHeight - 1) - (y + cursorOffsetY); + break; + } + case DXGI_MODE_ROTATION_ROTATE270: + { + cursorX = (y + cursorOffsetY); + cursorY = (cursorImageHeight - 1) - (x + cursorOffsetX); + break; + } + case DXGI_MODE_ROTATION_IDENTITY: + case DXGI_MODE_ROTATION_UNSPECIFIED: + default: + { + cursorX = (x + cursorOffsetX); + cursorY = (y + cursorOffsetY); + break; } } - break; - } - case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR: - { - const auto buffer32 = apiBuffer_.As(); - for (int row = rowMin, y = 0; row < rowMax; ++row, ++y) + const auto outputIndex = y * capturedImageWidth + x; + const auto desktopIndex = y * desktopPitch + x; + const auto cursorIndex = cursorY * cursorImageWidth + cursorX; + const auto buffer32 = buffer_.As(); + auto output32 = bgraBuffer_.As(); + + switch (GetType()) { - for (int col = colMin, x = 0; col < colMax; ++col, ++x) + case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME: { - const int i = col + row * cursorImageWidth; - const int j = col + row * cursorImagePitch / sizeof(UINT); - - UINT mask = 0xFF000000 & buffer32[j]; + BYTE mask = 0b10000000 >> (cursorX % 8); + const BYTE andMask = buffer_[cursorX / 8 + cursorY * cursorImagePitch] & mask; + const BYTE xorMask = buffer_[cursorX / 8 + (cursorY + cursorImageHeight) * cursorImagePitch] & mask; + const UINT andMask32 = andMask ? 0xFFFFFFFF : 0x00000000; + const UINT xorMask32 = xorMask ? 0xFFFFFFFF : 0x00000000; + output32[outputIndex] = (desktop32[desktopIndex] & andMask32) ^ xorMask32; + break; + } + case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR: + { + UINT mask = 0xFF000000 & buffer32[cursorIndex]; if (mask) { - output32[i] = (getDesktop32(x, y) ^ buffer32[j]) | 0xFF000000; + output32[outputIndex] = (desktop32[desktopIndex] ^ buffer32[cursorIndex]) | 0xFF000000; } else { - output32[i] = buffer32[j] | 0xFF000000; + output32[outputIndex] = buffer32[cursorIndex] | 0xFF000000; } + break; } - } - break; - } - case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR: - { - for (int row = rowMin, y = 0; row < rowMax; ++row, ++y) - { - for (int col = colMin, x = 0; col < colMax; ++col, ++x) + case DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR: { - const int i = 4 * (col + row * cursorImageWidth); - - const auto desktop32 = getDesktop32(x, y); - const auto desktop = (BYTE*)(&desktop32); + const auto desktop = reinterpret_cast(&desktop32[desktopIndex]); const auto desktopB = desktop[0]; const auto desktopG = desktop[1]; const auto desktopR = desktop[2]; const auto desktopA = desktop[3]; - const auto cursorB = apiBuffer_[i + 0]; - const auto cursorG = apiBuffer_[i + 1]; - const auto cursorR = apiBuffer_[i + 2]; - const auto cursorA = apiBuffer_[i + 3]; + const auto cursor = buffer_.Get(cursorIndex * 4); + const auto cursorB = cursor[0]; + const auto cursorG = cursor[1]; + const auto cursorR = cursor[2]; + const auto cursorA = cursor[3]; const auto a0 = cursorA / 255.f; const auto a1 = 1.f - a0; - output[i + 0] = static_cast(cursorB * a0 + desktopB * a1); - output[i + 1] = static_cast(cursorG * a0 + desktopG * a1); - output[i + 2] = static_cast(cursorR * a0 + desktopR * a1); - output[i + 3] = desktopA; - } - } - break; - } - default: - { - Debug::Error("Cursor::UpdateTexture() => Unknown cursor type"); - break; - } - } + auto output = reinterpret_cast(&output32[outputIndex]); + output[0] = static_cast(cursorB * a0 + desktopB * a1); + output[1] = static_cast(cursorG * a0 + desktopG * a1); + output[2] = static_cast(cursorR * a0 + desktopR * a1); + output[3] = desktopA; - // Rotation - auto bgraBuffer32 = bgraBuffer_.As(); - for (int row = rowMin, y = 0; row < rowMax; ++row, ++y) - { - for (int col = colMin, x = 0; col < colMax; ++col, ++x) - { - const auto i = col + row * cursorImageWidth; - switch (monitorRot) - { - case DXGI_MODE_ROTATION_ROTATE90: - bgraBuffer32[i] = output32[col * cursorImageHeight + (cursorImageHeight - 1 - row)]; - break; - case DXGI_MODE_ROTATION_ROTATE180: - bgraBuffer32[i] = output32[(cursorImageHeight - 1 - row) * cursorImageWidth + (cursorImageWidth - 1 - col)]; - break; - case DXGI_MODE_ROTATION_ROTATE270: - bgraBuffer32[i] = output32[(cursorImageWidth - 1 - col) * cursorImageHeight + row]; - break; - case DXGI_MODE_ROTATION_IDENTITY: - case DXGI_MODE_ROTATION_UNSPECIFIED: - bgraBuffer32[i] = output32[i]; break; + } + default: + { + Debug::Error("Cursor::UpdateTexture() => Unknown cursor type"); + return; + } } } } @@ -377,7 +356,7 @@ void Cursor::Draw(Monitor* monitor) { ComPtr context; GetDevice()->GetImmediateContext(&context); - context->UpdateSubresource(monitor->GetUnityTexture(), 0, &box, bgraBuffer_.Get(), GetWidth() * 4, 0); + context->UpdateSubresource(monitor->GetUnityTexture(), 0, &capturedImageArea, bgraBuffer_.Get(), capturedImageWidth * 4, 0); } if (FAILED(surface->Unmap())) diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h index 2ab9dbe..c996f08 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h @@ -28,7 +28,7 @@ private: bool isVisible_ = false; int x_ = -1; int y_ = -1; - Buffer apiBuffer_; + Buffer buffer_; Buffer bgraBuffer_; DXGI_OUTDUPL_POINTER_SHAPE_INFO shapeInfo_; LARGE_INTEGER timestamp_;