From c83ce50468bb48bb5024cda1d33ac484676f2748 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sun, 13 Nov 2016 21:59:22 +0900 Subject: [PATCH] improve log. --- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 55296 -> 67072 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 1 + Assets/uDesktopDuplication/Scripts/Monitor.cs | 9 +- .../uDesktopDuplication/Debug.cpp | 67 ++------------ .../uDesktopDuplication/Debug.h | 87 +++++++++++++++++- .../uDesktopDuplication/Monitor.cpp | 11 ++- .../uDesktopDuplication/MonitorManager.cpp | 28 ++++++ .../uDesktopDuplication/MonitorManager.h | 1 + .../uDesktopDuplication/main.cpp | 17 ++-- 9 files changed, 142 insertions(+), 79 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index caaf1debeb9245bc3d29ca19308fe95ca0975ae6..25811110e91d148bd9badd3fd8ee2f458b4756a0 100644 GIT binary patch literal 67072 zcmdqK4R}<=^*??$*-e&&xC^ond689uM57o8YA_(XNmlN{Mj|g76(pDhf*=XWE(Aph zZX#K(Td}oDty)_9LanV>Ek$fKA((_0A%J4=HCAiy607kI16uF@b7to5ZZ?79w|$;} zpWo)m&YhVvXU?2CbLPyMxw8c~Z<69ANiyPJ(jdyVnl?DdJy#b9BUyS$Jr~V=R1a#E)3mKB6AsjGN9Mz6s$YzkY4_ zxd=~w^Y(}bS@`;hhgo>Za2~$F;gdya#(T?ZsHvm%c2e6# zJM2e1X5l>;>_SkgRC^O;z(CaTNvb&SAhk6FeOp)P2>$z?m~jnCfauK z&SX(fRN1}37$d+1RyEo6Z)(f>ib92~e=uHWNLRuTdRK+I=Z^V2fjTBEFZ)3QAQ zlT2yg!op^BwD{~|y{O0bqyLBx>9R643D7UnfRXDp`2}hXJ{H;HdXE~B(JK3U3{?rT z{~L4l5Ls!GGn(a`X3M=NP(+S@tLsfUusqEnXT0YLl%^HB|H8{_qdnktkw>}WxkQ8H zZu%q+gy(>8pE2v7T}AGk{j1QMmY-3Jg9ABd)}JJuYPt6*q9y1YC+9S+2GH>*7+c!Z z1$PpSObou`1~89e zS6>N85^`nb)vf}yWepWpL7AoAN3FLNbLytNLp8Dro?sQ29-#`9S7i|3$vEYS?_pJ} zM<(!J4#=#->Qdl_bS(#{M*-#3sWSC=DH?YxQr$VbiFe_2I)M*L+K_n#a`i2lfd+tkU_5W}cbCaM{I=|Rm!a^SM} zksvG7$*EP#Xxda#9W$ls9F66R=(etS6cc z-jtoG#17@4dKW1T>LZMe*ug;ff+i=U&p-%dZEV+Lk;YKI|Kn`AH9yV%9ePw&+-B;6 z^JT@L6<-_;aVLG9jD=-`p2=v_%=Ccs~Ja9@+hndbckmA2_80) z?oU_mq1J-C4hxZmhirsWOMY6qnHyc=7jGH?-aGPpa1)>zwaWIgvEq))`kabwIIetPJ9t_{C{pwvlijWlecNZ>f zj*@4^AO~M)AVx5zn_i$15~!P8Ly{MqRVynS*kef{y2Nw~IFlc|ms0Wrbys@{C@{TN zO+Fu`0Ik^$ZDvmmnr#>(;9z77K+c~;F63Juug+8&v&5tMvNC|!Bsla_^p?&cU9W6l zX%YUcX7LDrmaw?s&&?dTO?}@BdRp^Rd0*$zlrG8sySR*wXo*Lpw=MvA``P%(>@|KI zG~|`_Mbu)>i_x4@Nh~Rn1NKk~*poDufP+6NW`U^!V_Xiz%l;Q@i3soIvNAJO4(3(L zlMTKLJ&J!5k*55Jbw*&2tmI|O0c(E7E<6?H2c%jk74HBVXaysfeC^Y0C66%qe4w1F zK>s?>n#_e@^rOh2mhg|`23;SdGmS#}fYb}oAqTH`940VXCz zM6be(-$d}Faa>t@*eDrQK_JQzOjw$2AEQGt&7m|dND@P2oB-jR%2ErBVb{Wl7Mkrt&^=P&Yz+BhpJr`0^&QXVzHfojwca`@N;VoF(2>JEDP|FJ( z^Fjd{{ChR6FclK)9WE;hWofocAn^5#YXV!;MZ7gG_YD+%Eyk zCjuxX-iiXH+pRdvvht=|0Sx9hbhvk|>KMw{Q!OhGFuI@s?V4>kCt`tIf5MAF%(6Ho zM>X45;3z0`^e&?D)JxpTbyhhr%S-d*b2cKHo`F>kVCHUR%S$;h)7muxluiVoOw~LUHk>|_0}rRY)^1yrBeyH zm2O!%1qI}poawVV{U;5+B-y{FT=K=s+5w#{mb!XWsa_32AtY4ZL-?h-8{4z@}uL>cS9CrD`q|<69r?VtmiUNXLMmiD8buoT;@J5 zYBgiW7_5Q>J1lbRbit14U2Pyy~II)0RIkK{Qo*XRyxxD^kres=OiChm9 zp(kq4f2Q2e1&>_QnHlBGMl~dZm&(eVLQhHDjG)ng^+@$dXV9Sq;y@)J2Fbx(0}LU{ z_P9`P997G8o6ih+4`m|7gNBoib5E9hb~K*rIE8eaI{;xL9cRusL@F*|geuX3^iP3sGb;F%yhqNv`0Zg6!Y-_NVY?X!rwPvfwv#iV;XW8x=-IYYh zEZZeOflXcWC_``GUd45lGovxSNiONBZ@lMH%V@I1P*^*dYk6s4qEI24Z4P0q*X~Im zI=ebK@&%*205NYIxGpQMX>6We5H(4k_+ey{o_fMHj#)A9vqU8q*8eWD{tvNuM!W1k z#jO7(7WbcG*8lSyxSdpT_8pQ$gSuck3Gv?Lke%RTX(TUh<(5>pa+lq$e6WCPbX{MP zltP~~L4_3O70M-6IsTBGv$uMHWjl;(n%ZRr)+qG&+O$lqFk9(?MEO#Z8)d9-m~GA= zls9OWDYVl#3a9JSC$s-kx&06QfjUWVuv)LAku6U)S6}8o#RS!<M-Xof z$_sf|Q|J>kmd1kd=w5HNU(>uRxaeCPmhG@rUx8Q=l`}DVAc%7?daPbVW~MqCu6Dy> z%h?5`8}QR8;;lBjd}mPBXuQvHc$7GIP=?k>ayDctEg@SUy%GO^(;MeIEH51hOZ0ES3kWWp1+I5P z&p;D68hnUEbmvCS_r1STGE#WE`ncjG|$XQPK)c4YC>IU>H=w<%=z&^C`1n znA?BS>bB%zX)$jY!ge_xqdDk;{Y%;+0H=~1ptV8JmB_S&Cs<&GcEPCEwZ#)bt}XtE z>Yyzw53CpU>XnHq8fE2fP0r{67o+O+aQ%jLI@4#G?avR8dM&`p9hB$v_!hV1t%Na; z8YjCFeQ6lZmij!>DE_<0*{fyP4na&Pz^IN&fwCEnEalyzll{WRVr9u^4MXKQC@?NSS)2&ozLlt167uta2H*7N{!uWk1jMhy* zHil#Je;=FA^a+$flR0b^D{rbp2a`;bMU@%tEC9xQ^f`uwC(X<)Dk`NL*0gFUM8`sC zu9$lQ0Ss#g4C~Dp)bJfTDJht;3xQ_yD%`Lp*Kx$KzKB4CVO<5U=q3!lBueA!j$x2& zIbfWK)Gxo{srkW;d`afvhIJ7sGuuZSnPHvsYgQoTAOW|UE(Ip~w3;r#lMzp{!c1nF z8p=&($D9JCkW9gXc&i5n5(cwkX3ljO*R9Nf9?vV6GvYis?Uo1bMVc}=V;Is3o$-e+wz|ov zDA^?&48RfREiX{=P%qQ7^8r)@?T#RuG`wPl`H*plQUlhmYZ&|$ZhtnGRj989MrL$f z>xL_X3DlWk)hlxFin`)G3b29ftVU0O)&Qgo&=6)~>fKKEGhDaI8fdRKS%JhDWd{ftGW_=Di(H!R+ zL|G!)?1BLX0^_g*ur#~@q$q=OxhQAwM=s}NZkUq;h?BYCWavHsprp4-RxD)x-44&>AK(=1m+aw;?187DxaQ*C z)UG>Ep~e+u4AUvq`(Ox~*kwT@Azq4U8mfbPi(HTB6q=_}3j*_nndMQgFLam0$??17oc3xXOw;BQ&Pt;XGqn@lCs8$*cye~FPLL;GU%qOz zhY7TY3AD4^nPG5}b<6Bum=H8oHbcK))xe8R#dE4BM_M(BCj5cUs|z)60xF2}jX@5Z z^iftbvs{5k+0`(pIqR^pi(@1I$2_dW(iLZ=avU@1);MnxP09Y<=`h%7ULC*|a1`5W z_GX}Y=t0&z7?RF%HySn+xY3Q~0<0Kdwld*vV-~eTm?oK+Z7~OjEq8m^atDNNxhtFEZ;j-*uqFE(fa1w-%s4>AVL2`$BfRCmS!IsQO?#vZ5Eq?cjcgtZ=_!#0ZUXZK=`rFN^2 zV}1sTBL7UvCOd1eRV~Rav z9|Q|r$B9;QUt=={6(3OlQbr-EG@2T)uY(?p-q7jKKgO2QnCBX33jsnY+zQ^yAhB2i zI`t*sgP4tgJkWpuI-Id8vILAcxyqr4H?eu_9xPfmF$&Mw33mz#?^B0^Lgd1b)}3C_ z6MmGxC-?%*jPTUM+hFR_H14NY8JdIYky1j(Ok=hd5Naj5ylDv%~npWs%wPLK}ptZvw;rnIagNVnEy=i43bIzVgbgT z{=JNlDEgE&R%j4+PS5JA$ zncvPXE4i5YPQq>FVa$V7T}_R91LIe-4T3eb-<{Fu$!U`<)3N&AYpG{LENIMz&1Pkw zPczVuusXy0}yvcH57-z(U9Gh#YMU+L-2ecHdwC&-&O01vt&AStAq5LGwd#= z`I!uRyNnskY1yuF5AozIbmg$|44*X4K`H|pADXW)=PE3ow%&CK2sDjho)vhpAa znnzhrn%x~3#I`J81d;2(Njn$71^=V+F<4rO^>$;#_gIN}w8jpjZ`V7Zg*g|x$@lDs z8`e@+i|MF#%}PA2ViQxu!|qF**cd87qQ0V6TU_mYMcPN0hQL=Sh3dz5BM(w~j5`Ria4F>F{ONu3IT#v0wj|rT#Wd zRr*6Vwi0#c?aoaHM6?D@&{3;}Qg7ecVxj(MjjwN0?_sNmI zLQi_r>|}2^(4U{bCHfQ25ht7-Elx0vnFyAL8XKHzHCxeIoW?mpYVtY{9m!$EJ;8jq zP=E-26t*Kkn^H90p1KG4u%l|117v%_7DNP)u(JYWypf|e0RLYAMyq1l{SQC~^1O23 z#afaCvK!$Z&!%Qn77-@4A?{^c1`fU-YNcw0lP|Kd<4efWl&`zSsFTqX!o{4W)iuh> z7qTV)Yt42O2&-?zk%6zFfLij_O7Ox!E!=q*)sm7!gm4?mAqU{t*9qdAO1fRe>?udD z{l-GlG=dIGJ?V*^aEoELC-)lYp5LLLa2^RPq;=>T=MD@7RMZX{)CvqQeRmvo%AL%x zXj8W`%cY0y%0C3^u$z&jZ+Uf{!?(HMG-%@R)FCiGVCs_jL6umdjvP2O979kb9ejOO z2&DrqMwA5i&tg>s;W=ih;}$nL2ib~YAlbH9%VQmnieZ@3Gg-{>6r>Uqb_B2tqP_A5 z(Z>Dq`cu7*n5<=q5t&}j;t`pi&*DO+XK~;*_2>=6qr6md{9*ba(V+m&QG7$NC_pb! z08`&zQu!Uaj5d{eofV;03VDa&F4S5fgih-KdZxm9vLGsND%V#A?ruM^E6!4nolVqC z%TIFw`2*lKfxaXciql?@(}bbkQDDi12C;gu-P`Kw=6=e%RY$|!9qLOb(4qPkHf%9R zLk`^X-K5*9FNOC{b^99)-ix8sI?(@`?GNZe3|f@|VIvLuYN?@T83_d)GWO9ZPfw@y z(TQC~A5cPND>Q@A&a@MIK16b=2kU5%cN)^hfV3{`Q1zy`53x`nP*&BW!o&^_6Kmka zcGFga3)I1eaDlo!P)$ohOdSP1G;Cj(OO1l|q3Ny$ol+R~{-HnUFd4Q=68W+jE;}wf zm#&Eto-5?w3>@p)OUJs-r3^K|aJE6Z>2%*XPy$Si*gfg&lml`PDoIEEd(}k*2cRc$ zo`rx|eK0PWfOZoq_xc_opu3pTeT!8b*#+6h;*njD7g=2Fg8YF4x1%bmGBh65MaB}7 zx8CQ0ur}|#NNBN~9IS^uLE}|0mCJotaiGfrlM!HO zA)p1gl2^Gk&ga^SzJ$4*XIBooEw1*Az3~TRwsyyWv+@ClZ|K8p$p=u<@!2ea%uecg z;L4`;Fm-<>2?DbDsWAJk%^vQLolA}Mq?zZ4&ELowDr|0(KE(v&KWJg5C=8-gU02ZB z6dq^tYwY;lQ~V=;{SW!jaR|z)p>k_0vsGZmXEed#w%Q0I4>R*D19y|0=(-t#t*uIc z-dqJLg$EoK06##8^xslC92ui#a~Xo5y|kJHEm#Rb`v`(|ZBN$_^}Fi{tXqiUV}RJy z1%6_hA_oAvXf5U{Jk=Cn!+mtvraPBx?jw|zTtL&z0rk8RLInQtQ#Ew*C|N&M<6;%} zKCL%_rA1Wf1uPy>rGr>ps8S;bZc`N^S64~BmJ4A+lh&SrEX*sZo|`u2z33~S zmv|QeAyWm01ufEFG=hlGZhR^E6H>=EV!rkFIJ}d^{t&E~OGHV__PG;^2(_%)9;+rW zxbyt`j6`{t2|KS{hw9(*jd%Ok@kP!wQLaGQ4R4qzI0lrsb9Q?ZS-n`?oTh>tQGp2+ zaOAI3Jpv^RiV5i;S)yqcQUq}V^T@d3jf7(gwx)7KvwctnfzxcS0Ufp0O=o&urZhK) zoI&l0aFS+!NE`1O^rgeO(0QwKK2Bb6y`}HZ()9nwBx1Q7kBR9Dpto#qXOq-qJhKOh zJliwj}!XXx%QqbL&E0(2ulqwAm1tA3C2HVuPfIKA6R0l5RWSlxl@R9G25X-7e_GO)`; zBjT_-II|PyjHt7aeV7qSCl8gBPgatVxDDSp=OioFn&q6D)M~hxWUH)q-1nfae zVFCOZc~lV6{d`(2=tjpCbE{LAH)#0q`Ck&NzUO}lXVBzjWTIXncHd9`WDob5Tv;c& z2D|+SG`2tN)>?A2M^5x%4Pao>uB@G)tEKPmfm-^GtEG?l(x&%d`nPK7U2-3tNi97O zX7o}^S)>yCQ%K1`)xScT6IMel5jFG}z}-15(Q2q)w9muWLTJB_8Y=Ba4b2B0sG$N> z%hk|+&6Z7RZpD~JjD;S$;4Jl!T;lvz&S(pDtFWHM^M@fm${_+5ldcaKxWdY6>}@d# zd4fE%8Q~ZJPwX;ylXj9{Onu@y>W^rR#m`Uh*^9Y3ieVDBG1DPHN37uHP)zUbM=`!W z@C4VG-Ec^M373~E>qAeVtP=(?{!{LR*lM;Zl`zAUFP#cj8U-CLNti;-;=i32GS-fl76H)-&V7PN=h=~(iFh~^3UoTyzX=m^C@{m}zuCr4V3Dht9K z>C~IVmkK|Sxuc>OjtXoGRy*jl0H2_u&kto{a#B*(>k zG08NbPiPaN{Tpm2q~xL)CYfr0MJ5>nrAfvHWlW&I0w`H-a@HPoX*)gdQxB0JfqWZe z;ZWbG@9jg1ztvz@qur06|NTbWMm-N7P~oyw=o{{^DBQGRNg@%bs#KK$yzgYG-iyhJwyq66rC9^s=Y$Va;TK% zI^|lcI|GwdQ;#vH*;^JJ$86&8Pkm(%NbrsY6TW;6w6IeVDIq-i*CwF{2BHVvg3?eg zIz_CeiHT+*PcS8jE@UJEB7kSrYXOH^uAKxs1=SN(1EUxM8KbF(3m!2{G}8ljE9Rqd z*G9w)rslFt{a^}2E!r6Zvx4c9%!q$Sc@wWt)Ht!ew#pe!)>L;1e1YxNm&r|kgRyiy zJMkKibudmMYQDva?Ot4>&Ke zOt&HCwS{G;7%#Bl6*w>{>jWgLjXmS#kfVrn%F0c^43B%xd*16wZX*33ugK*PC_8u4 zk^fGe4ig!pTahb!WytDy%J4T68Xr0u$6-9mTyj}6aX7+Wop9%Lz}Xa>X>{kbc?T(R zlMS-P11C@uCHOwgSB4XqjMb=zIt5M>?+6?tL+&2$;7y8Qa$E#{kMC3EYG=kb@?RlN z^qEG?TUwCO?ru7TqbIMEUup8~utRXDmDafW8%$H3CmPxEeI#Y#G_-zlX&}X;PA+}B zl=8*NrB5m1;U|}>^GO>*6E2Z6zL1-~!{N8DsJ49sBL|ItimGkOiDp*WGb~TZgM+r2 zj!FHD#WOnCOK*rjz~cUI*fFVlIWXpceQE+KqYWkxUh9B7K9a}f5hE7Xq5@5!kdO8Q z$l|||2N$i?xGwn*mKTwS2Ut8J59?T5$U_weX7X^t*-IWaAgcT8 zW8@*qUZ!(F-gWR8Smm93v}n`lBu7&ZWOoG zaWhWIO13Q6`($VxWzrtrlNi{V?O&y=J9o)A z(TH}tu&4r_L#ijEtstij8<~>Zl6x2g$d+6j7Tc%(g*2LiJsR5XdyLT(uMFIQHx2!H zW+PW@emXHh^buhzVhFnxjff%)RDv#$7fo9tqixamrOnQ0n+e+Xc#TRToy6!(6Y&?d zu@hn5bHWE$4CFl2*YCvpsQC)r;b4;iv+)jUN^9848zl@n>n0@KHPEm1vhnyr55`UJ z39-NPBjlcxX?=uw_A^;oikWA!obxa5Oq?&0m4#@}Ti(l}?Mr*O=F=FMvcDB`&cA$U zYl0lO*4%|NLTiAQHHIp~R8&ZoS8w8IzV5I6APq%ukmMwLBa_7O1=jUAeS5^R;rH~M zfzyH0t(Z#D=jGu(H!^uEf-s_wjp2T`#0cY1Xc^5`c^eHWtqD5;5Jq^ogd~y}LK-20 zN5hhMP`x)EwfaBkmg7fbvywX9QrAe71SZIVl`tO2HaIt8JgA?Uppin410+IeWY};@ z@e<3he@E<6Xa&vIyy*K7`+6J=8%8DGW<4E+vxq|3KizBblLsG#xYmSS$3~<&5D?oyM5=n1`|Sh;B<{@rZ8wnzdc% zw&N@UKkv#Z|3G(R)e3JJD^UzxR@gNqmq_f3)~sJ}vjSezmg`|8&TK z-2W%tFNL)~Hd5rQw@3z*eGn2e?MczN)NFH$iJRczYHZPc#_SssxWkOecngW~6`HtZ z)k@9w27uAhqcn#+xsc=}IFMUg!cC41necn|_c8$R@2jg(1>cZ)m=MUpBKXNa=!BKq z6Qb7~)guIXP zref6$J?&P87Qin@=bI{AVOjDH)`)+bm71-NafutSg|`xS6sVN< zjrztzG)FUeew+H_J5e%^Jn26`y6h2Jw1*;^&%@0^y zaPz26!2-hH^bwTHKcJ|-kmJ8`2UcM*au0+YtZ)bLYJ2$gy<4$HXa2aTclfYYW-qR? zgHI>3{)wr={z50QswJC9@1_-AWvheEFG{VBffT^Ua|cGO97vFZx55WQjzdf#mpgHH zMLhN{jMUK9ynz%@ZaG#T=n1DDHz3Nx+N39EkI?4Y`p>VWwT z%|tsH;!QiQk!bE6h~*+b^AVX>d+DpF`IU?ucRH2ATYY)yzzo#<+@Erboyg9_rWylC zP)9?9No!m=VCR5#!Jqy2>i zbTl{937@7@X~ASZoq2JtkrnLB9@MPe`Ie^D1D$kGX@E$B&o)qv{|wqx0EOXAIp!YV z22cRY+rXf%cW}U(Jscw*FnSmjN=gqVQFg4YgH*|{&<>Ac8}SNSK;+;h3Jady%oUS~ z)jf7?4yc~vd#RaX^`wIRQ`hgny+=M5OyI2mQtx_)9Xo4Jgx5K(7;L_QW;{x^(7sbI=Ys0Htd zdT}fa=K@d{qDo30r3P$MD1g+O)JI29x;SNGQWc6~A4a!7=ke2G;JRt+pOHn2Q&$fV zog&&uP-b8>k{A_ZrV5PufF}d76PVcTJ_|b8H8*l#feNRFs~r#B>LZh=INR>eMo&Tz zk%5C&`ZYcT2BidVB<{Uwq8d_)Sbz-BjU|IgW^s6oC<&*+s5lDwr;Z1qNKUz&0N7au zQyPElgf|u|w3Jb-sA(uqRgv0>R0~fv^VDvnsz^2P)KiT_1kO(cM!n1)M{Psk%T{mt zJ25`xIAZG5xA2Tsf#;?}NWi8Z^&j;a2xjHt+i>pe2H>JoWtW{t6yjlb7CnH8h_O=^ zb10$r*$R> zWO{21wJTF!B81l_(8>f)%9ZwA#F?=96F~;xX!gqEtkYm!7$!9KMC&RgKMV=$Jy`OTl|tZ8-x^Gn`?SG*2FM_7wt17% z(&fOg;$sFVCa{G+A7JpmM-4FU5nx+9y@nX~PqKrTUys*0g88!;k{3BL*w6XLa7hlTp(IS z=LEwI>Zd(LWX@3kc7TrFLU~bCb1Zd#=(lfo{v)<;3;ZvTH_YI$JcOOHev}|iE9*+| zOnr=3&Re=*<((M=+qARxkrJjxCpJ=P*2m{wMm#1(+N+Px#E-UTV)-%jMWl%CJ(Ilu znrsi$9GM&-?~t2*T7sR&v*E>mRo)XX?Uxs%2+qWh9T0%t@{zDJmLI?FS4JKtlOUEK zmH#0>`j?C-ex6A(Ff?_^IC;rwxp8KGY=vX3H$P6mcI_=6{qy6#5BuTA^8XQjgf9L+ z@?$ebeQ$nzL>6+d@zOs(R(;S9Kk$yje>7hHTk>%XtKNPz2cI_2G+r8h7t4>M+hh3w zTcV%&a`E3{`Ej$w`r!S5U2Lh?yVz2F%)Hog&jI|mXLSFEZ2Ip_qua*yWz?DYQ~p#e zf3}ku-b-Gv!tRGZ*S;UipJIzO!1yCu?t#&%+BuUDJ0LfGV*elF(nfOO^qq)=6?P_m zW&bvoU-!W_?#-|M$Jfx#SbkwXTKgXg&VOrstr>d;hMb8X=`c2X>zh?%R`-&h{_W9( z_xj-ncE|oBee>TNNK4XA%aJqjBlS12{8&sD`&sbg1e`3?`d;=5ybb>&{J3$<|A`-F z42ItFaRZs{f*+PTsONrk%kj5kc`*ZCE~{mGW&aHM|HGKQ_QKOK^UGL%TuT;z zFZsX}-VaZXk{hR&d`u^vD3$*^Yq+cn`en(P_@O=-%a1F`;y(+1w7hv5e!%PTKQd;< z*uOVFI(`w$kBi9SKMQ_rKXw{^WdG0bKvHY0D z$IBFd%_M^_?$9UyGkp1GRKI)?=Exb>gIl-6^5+CuyuJ9-zdpI|jadE&ed73^;mZfK zY0%e9JCi=y{Ighod_)%RS@2^O-m##TN9JF_k4gVC{5Zn4Mb5^5QVds8@QDa3!p^Y{ zvR?%^yes-T$0}csq8-A`*KdC+rdM$cMK>M7^ruGCU)GoY zZLh`Bk7GSI+5cS^p22*tz%Db@=CjRn0Wuo zztnEC;tsi$l%KC z=Xe%m{m`!nF6D0&&;?z1O*+?%vWU&lkFA9p5Rtd=eb>7G^<>rw^rJm^UADTB?W=UK z?Iw~lI!T?`8lS|F(!Mrh6SmB8;66~D-kO(5X9XJapf2{Q0}fE*=`=`dUj>Hqby3{p z@&i1y^&Wo15wGylH7+OR;PvUWTV04*{DE4kJNQTgg4Q@0-1Y%s(CGn-)%1%;DPmH{D5Y&$%OLEnX;#hZQO@xM zr>C+z0}eQ~2gy4=^+I}uFl)|36I!~8iZQ^ zfu^Z9Q_F8cqLRYy!4Hm-fe*PLiQX9TfSxP+5R%6Fa-X`K5%TV4BFkoBgkVciCxX3W zVsLPpodCt_B}q>Z=})7Cauv{5qud)$MiI{5lYC_=FO$O1ujA;q0SqOa5%k3WT~HXr zlE1YP-nksKo`VjJfF|>|k8E=$!$8}k);*3NZ?SG57m>xS8rE|~;vk7%@)J#@G^gF9d9moKK z*P{j{<%@?YW=jJY3dVHxc+nR(0Q3bmu0}pab0E760k4G9&J(@g6w%=9yg$F|8?S&g z(6JJ{KBT`obOTjJ+oE-8wV;&dGQ~~$!%|lX^z22DZO|YE!I|3%f_Xc%LIZhLn5>}H_Tvx>X)?TKO6Htm`rXec z8vyj8D^2F$VlsoqeRl`s}!0=KHm(f{n>N9cMyK&=9x5?o6`o3Eob??KBLayg8K+DB-V`_pQv z-FS!N$RLv5@U_=?eWN;^zrqoo+vuU6^IVx(|77Q;Ptn=9U_p`kG*IC;xge|Q`9W6^ zyR@N0ZMc94#370nN5e8qadfG^I0CmUl^u6mmL6D^Np~w0%KTg&$fPR>ah@zJVElZO zVw>_1VLOH^LvF(Hg~jLuc2@+3HTK)aG8a8kbs+)F0;B9dzi6U75L+POr zP+VmJWAvc96kv2ZFq26<87Q}e#{NVc1EBLwIREt{Hd^TY@UADQYW{vW{r*ryLyf8PEdM%w>4YS7zH&*8a(wO=5$vHCZl z7_}c@ecOMh-u_*E+y6+U{iurnl$nx}4Rn$7dxs&&IFok^qlcg0n}z4dX*za(?|xuc zQoehT!CuY?vD5)i6r6sB@8m?9LyvG!Bd2*;1RX{iy>6&p%`iUA!QOd{H7!2^hPMw^;E;pk+|rq|YsbX5#)v z@qXq8*jnISF;2nCxPK0pi_Bxjcd&d1eg}h2^Wr6Ky440fAzsqvchOz>0J4awE-(i# zdzk8ByDEiHiiRAkrT!)8c*QvhuMjzLK}bGs2r2aU81dYqT%V2B6e}yI(5ueyKPgTJ z85#M?seI)VbPS#oC@kO}GK}9v}c^ zaPk}Jg7da$g*c|S2A3A6{NYO2K}}!dM#IY(pld6JSc6>R+QNRVk{Az(O|QkP)-VMx z0vY)^A6bH*aBI9GP|NTT4y{3J5 zO`0n|MAd08epm~tp>#NEZg2?n)L|j`AEGHn z=}h{u6|%5ALDRp$xt$WVJ9t0)#US;r6X2ok@eN?!Veee{4fmn}xCMr|{xTjTTz@|k z8Q}WKKU0ZiC;{ll0D^)es00VaV(%e_nqXfAEMJKK=zg*gQ7Kgpi8`0fqe3v&?DEl9x$ytN7|eupL=3*Ya09Ay%v5g=9cUhdSB$W3!>e#_pG%1-jJp}<(@HbE4C9Z; z62F$lvZEGge0}i5eIz^V{;Yj4cJ=ka%k->^67vhab2(K6|JQbsyd@|G$)n#ZLFpJ@ z#NPzyUVsu+QR|}(O4u&u^`9T9e`Zwu)B4oEKp^$8`u|bS>QC*r{$B{t8GY+djII9( zAky2v2{^_2=w*8D-F|k47w!KOYd^1lGr;<`|8~9o0F7<`#@O~p>Yo`^|Fk~!FA(+n zSpEN~(M*czV2)@|}z-j^j z=TYVt7#Eww&B+AeIPr?Xdk(vXiB^3>Oss7Gn+8~%iTALSW9(HR6^>mw zwo)4ISgiz#K%(geijkwCSsObz4GM4U5cWNkeW$YT;p}@P`#zt2+u8Sp_|{j0dbl`p zUrtWS`}a!H=f1&mQqBrgT|e@1nVATT~H<~#<7{yWJNaPazMP4H6*LCTedu# zQiqZ0`vm8<;aX_kX6X7_FPp*3CaO13ednp?A`VToiV=g0ryIKx)e1y#D>N0Q`r!6; zLe16DNqd&4<5~weEJdi$V6}=z64j-6==wOSym}*2)Y5 zdwTyqq}C-f<_zjxR#USkDQ9=+=Zbh&x!CV zhavJpyQkF9uqRi`&ylYle@?^d+h@-U4K87Vo_|@at+P4VDeRM(?SQpexXy8Mu89 zKRA}sUWc^LU|AuJczY+(UZb>kSQ?h3T}vR^D{EoX;N2T#*9#6{@pn$kXxnCRA8GSs z?eYX%o%mNRRu*<+1zpf>8D#PSP2aphDR&@Uhgr&=2c@h;NbIEx6dVhhU%*I|)E=}L z-A8hm>QS0@6x@unw3AKmRA`!Stz2TVRzhn8ZLcDZm%**;Cl|UPh_~%X#(H4!WM``H zM!aio`LlBfHpNoq_;x(Pt{7PB2@c#V2Zp4%a}Ie^l^Fv)_+{}V_$}h;Qr0T7?BA8% zg*78tLBx__U+1QQoLa`8B*=FH662V-r{cFkL7jc$F?AY<#X7Umn_TynFHzoLTj6J2 zjq%T6YN!4PDbmJcUSr*1-#HuisZV1#AovvmCam-#m#$-M+C9XPV|XDe%a(zH{`aTJ zM{uJre$FR}#_TMV>VhZc2s$ho`RYU@WbMH#mzMl}w3K10hmYakkXPdCjuDMtci`3pbCUA40$3A&pbmGn47Zz0>JyD1PDFo5a^> zgk7!r78g02)I0?E#Y|Qs-TX`A0V9+B+QW~D!t~IkWa{woiT!Z$_uBQ}r=a)VA=)1S z2}B;3F^5#5Z83=0*a1I@!|`W>f9iMZk?2i&A(8T0@ZD-skp#4o`a6KaU$sO%hZJ2f zWex)MIHnQxPv|WqyhLN_7$vl^1l!6BSo&=URE>=k-^FSsM`MSqIeC5(lqxGDs1Hj}5PF7fz0xJA zM>LZc=*0Ew;q7#~^9{^mKPeIB6<1@9jh`td2g+o)56@QaW(Wb-db+}c zR}ynF<~X}2;7AQ%!yzD>#SO_0T#QT}$+Cw_>4GTV8m$&oP#`|?!4xkDON1Mx;=!t)@CW8GxzP^aJs< z1HB{3%Nl8{-bW={jRvYYlCGp2T|;f^o``}e=Yv9tRG^>VW$wU@-e{5o z>J|5)ormJeb3MSCMZc9HR=RlK|8B}bV<*f0(lq=^5f-oIWD69-aY1a!q}v;iSV<8W zF4XmQ&GrO}X{~-OZtb%q7UEXwFz?x&vMCRaBBGP=Yo2B*n1o{|W;rOERodQ!|3AR; zamq;7!61x&Vkc-?$8vD{LC{pn9?@JJ4~fA);dJ<)#>|SM*Pj;u^a%b-qwu55J0po^ zm}*Vt&_bZ$vQC_|Bll&>g?~F>fN;`zo+$v~KaWLI3Yk^UpF|&EdxFV02`K3jysJ!1 zw5!9Zhk~|8t|tO1VJxd7oPRUVelyH|M2mgg&bo$Ehax}waTuN-zIw<$-~e?Glzg)d*}$WPwO)Gs;X*MC;xEXZH~ zh12IPcdq}uY=w8JGx^QrW60Z;wTDpe!PTa4kmm;qdh!+1BxqfwEwJFrz`Sq0vt@tE zY*ec`{cXmv-P1Hne!w&s5K|iy43al}YH>oG!>06gQw`M=iPH4|~spgUr%x!JRjjVrebq8j-sbxjQg4rNBIRunRuS&*@m3MkLbJ ztDvW#2PEO@0?W=11~8OyC{&L^PRq{shg7dU>??5E^AuClmy>I#Z-dm=>b5L1eEg z`(C}+KeiES1R_(=opso`quoea3Oa%kG~2T{gD5MHli?r-f82pg=sb*a+>1y#Kr%%i z-N81QG|rxzypfcN4OReCX1irO5S?IJv4 z=1V&9)`-RnOn)Kmh%40F!6teAZsHc>EmKPR_>lc&sgnHS#9zF3*-tVE-t-eMf}Cbw z1)7$s**+gasV+E|T)3U24l&#ZGJ&3J`E#(q&f_%{$8VbBXNlo7x64_0&cY5?R+9{e zBYl8r3?f;2WjW2TOyQO_jrCF`^I_9`4N)?kPf=(C__bhH(xis#NT$vrrQyRZ`qNQS z#InR)3Mud0jRM-(Ymfo`5lnd%@eqD-42&@y!ZX98{+V9K^P7z-UhAcYIMe~V7ceQc z1QWJ7g#sJ(he?Ftir*mU!f#{c&?Ppov=6F(?E!{2aK$7p4Scui?=h1s>99VysyMD? zeQ>S(cerT1qm7-2zSYL2vG1Ym+swXs`o}{k_g(hg&c1iC@8{X~QTCk~1wV;BU&Fo~ z>^qlzuRTqAK1;urear0o(ZR&)ZMff>`lx{YwhJy9Jfvcg7~MPMBXKD(Z{KwKKj`r& zd+__jM*PC9_gtsqFc;u%-LE@5_`ThdHqV$t?vmyi$`ELhJS$uZ_+38p31_^;JJ7P- z8Sn4xmN$FivAjezdu|C0_!O25w>x1|aQ6@W))!wZxRsl*B>$ZKEJp}r!4$&!9^1)A zbvgPjU%AD|caZXxc}AzwjGYtE7w4?~+v0pneuoPNA$~OWAnZK4k6w9I{UHpee26~H zR89)RYyN0kTpRl+e5%xA^ojUqv`(I)f6Kv*>EKgn?i!lm__G}KJSFNmlb*G)6QU6B zci^YoKDOg(B@8%!rvXaK<}b5d41DXpw?`g2ZcwGvXQxI=t>`LY$v5F8yx^b z>|VrZ%xo-1JhZ!pnTOH%3&Z#e3BLpQ8vu%X)1&b_ki@PG(#Fp6j|r2`9E7xch&i0M5gSG2m|)6fZI@cT83h6^Y+RbA{S=Q(OK@=hleg@; zsRhLlp;TOoXswzr_xgpBC#j~Gd-xt;X_14@>sUN;(7A%e#X;xWIB=U9qMKv-{e=?P zXe02Ojai4WRISERbra(+>+gq%e7(QPwI9>YO8tj-;`chY8FpeK0i%C|1@a~|_$QA= z8mx`IfY_{!9j^0N=KS7h75&NTON*+n1Mcgys_!aM-?lB$^*sy3sP8EqKkLsSPXi>l zF`N3<%%4fpLf`(5r4vmdE2V2=SF(blk5Q(O@?MLAYva!jO8*OiJ zI6pklQp7+jR<9z0xd4X2#BuY2O!e3&dM*YV5znmTCx4IBaNHjH;wjb$w2$#>H==lU z5P3WJGvn>k987O6@nZ+UJj7wP(Q^ZTZlve6ec@?5hDwnhdgdf+H~Gp9S$o!J!!T&H zJk+E#!8`~zWFtm8wJmfRU5yh?R&VHnucd%nYN0{lyi7Lk3^=7jRuQBc+h!>rAsfHQ zRY~JlDJWL&J5ER1v5mwxJ;SZR_`n>3d3zMBW3|&uJV>G61p;h3`t$(&SW&=uWble< z9$>INcO8N9`^0X+aF`J=Vg+Q%j-;9}XoC+z_h`9+xrT3neGFv=Od}Df&pgN~wBlK_ zRiQ5AC$q?(cw`j;b5im+DT3a|eJJk0L47j7GS$Vnf?r*E2fmi$3v151DZdey#o%_N zJMc^&LKN~KKe|PLT@N!CyPlT%PT+$H!P-ba(IhVU3z&vg0NZ!$PLdS*oeegx8Aj5)lp+VVnp*6y@7QxKpG*FXBf3Tf`Gi@qCX6?-$`~ zA{_Y*&%a%SPl>QcgcHBz`S*!%uLw_waLB)S{+&9VB2>TR>03ltBf@J%m?^?@MELO+ z9Daug9~0rdA}ki+wIXa3{Nbe}DP5%N@h#u+r;Q>k7vZ%c952GBL^x1{UyAm;DZ(}p zz9hm^qF+-5yk6gItWD^XD?%QVq)$Zrln9M%8LsC_(m)YEUxe8rTqVLEits5B?hxTF z5griX?E?SJBL23Z@1hub9ux5&im*Y1_lVFd!eS8~7GazSlSFvF2#1Jps|fX$wZz2h z1poB>(wMk?uvAMUvhfKX>Tp8_iMW-AxL}jP6^pP^ggX5HHN4RDqw}bKS&d*Iw?iS~ zc9Dc>PTKJbufOy`L6^v@9b#Z~*=;;5Zsqx%LwMLI!ps&P-}*@J^xGDd+7~TfUQx2h zyR>2jHgC=ZS5>uWjeSMgYWwoC6-&J3L_%rVN?+NOx!2ge6&3d76)Tnqy5_A|wxVM7 z3VT^iNm(UF&2p%|l10^C0VetK%c_@oD=PDSmCKiMBE~PTSR&2wE~+A+Imjc}YH!uj z6-y$uEM2i`(ekCGc9C9LQN5Jaa*HoN|LUtf6-yS_shE^4_^~CIx4UBx54$sXxFwB; zwIXc1fX6%SJbe3p9#)F@mQg&eiu6xJxM?I$-!g)S4iR<_7wIBw5cE7G=&9Mu^JDvq zXy1zeEh4}DQV!QH>N_gJ%!@_&bRO#T){6Mw1Y9h=ofipwV|nhHHxrSz-7+ka8^CMk;iqo*=0*tpa;>X zcb27J4B4N0jh*T)s6cW>m3@Wpj@!zr>?P%kRxBwiy_)4w{;IMPWcL+7QSR!i-BD-> z>8zRKshk}jcRqb{T&PmI)XvlAfCfrW7jXH7ZU#s3)8cgtfm~Fz#CHeWtJSQU)5AMU zO3JFM?WJWamX?){KRw*M71h4V%8Dv)S*g8rX?5lDMQaH2Y3a!GRaK$-gyg08~dw#flYRE0GncXLi|&(z2@bi;0K&;C5A2RaC{aGa4?x zXu5l$Yxe9}vllw^@?3M~EcDEpGnW+z(|;Ox_jNZoJ?{L4c}|aq3iJ!_S}4Grv!`=1 z`iGlcw!Canb=kF5i|&AM*%yN+tZ~50^#yAP(-@yWWvehB4qW%>^YV|cI5O+8<$wBi zZ}aT|`Q_=r6>HPQQ%NJGKtM9;E2sN{MX{oo|e!0E8 zZ0VA6@A#zYtR|3|KDP8y``FTp?RG(GR2r+2=5yL{7l%XK0od{)5OW8lc?^88W0_wgD+Gvb+mkA)M(!hr!##emo0 z$lf6OXm`?xbp1p4Q={OhoZgPDuj^2}9orBm-vNE1;T}57)99Ppn+`ZTMexz^82IOLG`ML)BHf6Xne8l z*aA2^gNn45_-c*9HvsX>C^#LTC>9PVz57sKd|?3bKydBv^o65(E0L~$NX|APem3pc z_I3oHP9MojG1B!9@ujjKID(JmOJ)?DE(bauJ*0Bxe&DFy%C~eV&et}?W82XmTx~ya z{n3{VIJ>BV@=5MV4m#cxi3n)ZvK#T(@k{L)7zKy3Hj)GJX!_(gHr&~B&vQ?$e)iME zbq}w4IsZ@Z{PMA+ooff(_3VltzIOBddVT7LC@emNSNeNzJoIaVGD^{M1`hklBT&zAz?FX(ue4X$1 zrLRA@t^L4}UYU<^t$#?b)F5sb34})2Q?3`y-KvfaaG@#5ap1 zf{XqA0ioC;ZVL9fs02qf7_# z;S)OThh(ceD&N`)e*xnC(LhKDC(%rwXga8#=nv7+fPW+YD{*Cp8Et|ur_U#v-iC7x z(&jxFv!{XED)6-rGDzEq&VJzZ3QTyYjN)TEXwd75rn`8rUV?|&h;NB1*E^TnCY$z0 zQn!E>`j|x$wbz0F%qSSjqPFRu==!O>(VsTdzYS@r`ygBRx1WI)DrcwbNW>=^?+%oW z{!kwfZS;wTqkie{Lw(#G#osnO_a_svY2Sx-s+Z)iGKyC<;HTcAXgV8W+CydOL$LNJ z9y-8h!bzX#@|7{=^*RWy9Ww1eK75OPKC!Z(_csAX{!k5_(F2Yk3g{K>BjqM{H2ZgLHQT(t*JyU+PyiuI$b>Kf%-lE$Z z&6m@)m+EbgqEnX}Gt#5W$I6WvJUJ6@+R(q>XN+ybc<8S`3tTW^ME=$DnLllQKbscw3zz$rEL~CEZ(hxnljaK_WPkbND@$+F2^xb3`cJ_B zDEv>)o9mIR&{1f}cye{6l`ciHWXExVO+h{Fjun))?FpnK#pP5;*cnLrdC)pdHHydw|1|+vWQVVX@u13ElIC`@ zI?{Wk-OTF9j82=&;j(+BaX1Ikic(Qe4X0&u2yufRPpctXx{piJFNu~i4)f3_u&t3U z`f4JeES-Mtjw7Tf$|pq%;Zox)8y5j$SH6yq)T!IM`ty0vi;K z9)DYPHG{Vsqy`KI$SmWZlxdI%`S>M^mzGwitzj?@%r}%)Rb5q*mN|jaijh`JZR2T- zZc6`mAA==9vXmxDmPrUFCRZ8~Qr`irStyC`QB<*q?U^c0Ht7E$g)fhS=&&(B3jx>`X< zcm*E|&qLp(OiGbbW)J90tV}3=40WUf?!4g%Qu6G?PE)0^IKD70Gn{@|qBPn&R2qQ; zz!t+`$q1n(zHS9w_o5u(E(R^wpJmT==OYoH_eb;i1*SO3|cP`L%Rb?LE=_4d*OVbxkcwQ@*DukvFus}<0+O(w7mP<)%LCVcda&L2O zl6$@PrcFf0jEELQjfhys3V}9(8677ws2xQN48uajnaD!|6eb90VbF<>nbjqancx5H zeUg)smXMb=AS zWcZG39)xaE`soE`I?qHA&z7DaOcKY&Yn4OXq2Y&)wF>IWcXqG5g=g9NG=M69>2%6N z`)F(xAQvjP;TM5&_0FF+r@+j~LCgVjc<$ybnlY4DFv%1wvg5;+e~KBPE@q)IwU4X* z>esPhrR4>TpIPRl#+hdBk{M>oBaj`eqgas#0H`HwEV zG?Z^<=BAsOOO7`)Z=4cQel^4g=bSEd*PUnec;#RYbmge?$9p&N&q7VVu;U`=FMZc! zQ&K;BXl8mwT`}#azG!mgRhd*?p~@xaqxISOMq#g^TVqqCIY?o}e0K_iz8j|AYOk;# z0G`%u>l6qwo#)$pe+$ZOyukXEUhZ{J`X_hW{APf1<=r;#(xM4^b|ZdWN~cUTQ&t=o z$q&@8bY6j(x1`w2$V?laGE~^F`A70$SNDE&sqPPhew}?(c=2s^oj(^mwBCO_q~3$* zP`!N@US@UQ3CcYSO7|HT8T>t{ya&7S;9l&u^_@T&8Dx%t! z{~S=^VNh~WP%aB9e>*P}nm+tLfet=u$3@Uzx}eB}8fTf4YiF7g=E|ve6%6MO*}fnA z(P&);Tv_*n%Ig5AYYUXmb)ei|gNl0rRJqPvZT4mkN6FR|(SK*cSI*z#@w<)3j%zBvVbC9DmL zHspJ2!+!KtTx#QMLAjmIpEphGHP+gTy!Bed8%NZmkND@HhxWU1G{!%Hb@f;otH-VT z>hi6g+*A(w@!J3@e#Yt<>qpNaGBZkeA8%mxP8ZZ^cGvv9%e6-b?I2eHs*l!zXfT(9 zky=~7R#5KKpk!_WC36R;=jmw|A6%!T)jk_-`n=f%X14l+ckXQ7{j(Ppr@c0LA>VW( z^B^?n>N3_(E{Dk2HRo~On$xyxzNy&6oCBTytZk2=KW{2)`+3Ycb0?U>8z+pc4ZO6h zPa>O**#TYY(gywZcgYmHKDmXp*8|4rRa?virEzh!CMw+boZtH$@k#RXe$R}i8~R6^ zuJcNp?w>)qqAk{6I$z^;Ds3~GW}izVxe6z@8Ijg zyP(|fefe?nZ3^UD9JP8oLAiUJ|9(*UzTy1il|LNN6RNX%ZUE&Ts4K=J%8i;oh2c_p@p!9s-`Nz{Uc;9G$4LP}WAGUg~1EuE+p!EFI`Nz}K7tk~85&(44z(`?hFLAh@_e;+74zjglc^wb6P6t`GCouJ%3&fgD8&l}D^o}Q%v zJ)u^sXBQ~Fx*Ro&gp2A~*p&=;HHc6_{C# z)6Fb?@6O6hAD%WeC0)v%&q3+H&cciT^YjUIppMj_8F`1qMfeaynW&+?0*z#U1-;0{I>17&X^v^ z?~gHl*Ve_?8*>Ka%Z%|mnJ(gc0y1O#zMjvb2O7~6^!s`U>j}to1^lHa>$go2zisR~ zzhDEuZN6@dzFDZv)>8keH(0(LluJ6l#(tspeCP37gf#Nc?IJJeQql>%Jww_xZ`vf* z@l&=O#Von3cWa$OZCqy<#$%DkacJQzqgJvrIfLB(VQX0%iZ)9i~C-( z82n#jc7X8ymxH0Klkw^-jhy;KSOPtEv$(O&*I#mo4oOXfmJ&W*9=;Zxm5~ePv&5Cz zmr*%)q36(YDqi ze`B8;sv%szNwn51zLN3HyIAj6y&Lu3*E>$@5v?V(-qKo0>p=b12-OkyA>^+j{0izA zLuUfqLKx#Ef=mUZ^=H=ynJ<#)WKAC?%@FeaLTCWeyD^RI(BL(?H)wH@jBAweIMp~YyJGYJ_D*gVQ!F19+I^nyUo zKbp5K*4lU?CplNvm8rH?&%YkaAB9_MqgB|AvUMRk}revhfFTo_%OYS@;{*~m**RaJ#a+d@pm zn`3H}>hZkFC?(q3oT|6x@y+qDtmFYN_mx$VRaKjmIN6d8FI*&jr%tZqof2!~eG(n9 zd-ux|U5~^UR9dF%XetrS$dcKQ-Rzh4X7XK8Rej0o)i!Ez^aCr5`SHZcWMjDU^akDy z4cl|!>gtWrb@f@jq;lb~m0Yx`!WD2)xXOG3J*$(cbiCEig7R*RCR6ooiEvoC)p+%M zZc=47-Ii-bd3`LKY=~k|ACI+2s(K?CHpMd0Tqc&xWy950ll@<982y0sL_eVRicP9S z&4`wiRrA(5s%S-8&+Dmg+cxJGfVZgXWmVCOsSdesl4WYn@0mra*rp|m!Ya{{$(5LK zQh&c@$rN=sa-C>-uO!dfR%sYXdkn2o<7rr+vE}D{l&ROaaoInya%((CXC8a@E2=81 zHjNAeM%;hUrdpXCt16X6&sQ}g_L6L(eI)%+_pDNv>50fTB@=JeqnEB)QB}iO2o7s{ zxOyRBLOS%H=#zNP8}lQDIf^c&8a2`Nq@Nn>k+)3f_r)2(R7YKR#$nZ_qwoENVXuUL z;wjf~J8So>?zrPRAv@6n2d;mEl@=K{i4s5DIzD-+Fa*`|@Y9g|+Wy7~Hq%2@M`SVuP6n&O6# z?O``fMOinvb&Mt_Z=JJ{I;>#D;+n);F?lP7i`CNqMccgX8hWdib(d{g8Ckfb!mbV{ z8hcxYt{Yh$(|s@<3pseuzBOs%IYsa79IQ@d+`a(om2|SaC0o8D*;<}$YDi_`ajuD`x$T2|n%T37Mpw4CdpCyE#9AA1rsECC1Zy!ayHNyRCkW@R z?|4f*m+6SM#FDL1Exe|2QHHfmnbeL|qn9#Ws2cKK zWp@h=UJco$L3<+Q*C*PX)O}5xR&Ln1zIM&JRU_?wo>3`u4O287)7>gG4uiu>+e(uv zd;V&INibJ5m>nkJjY0OwOroJVm1Re--6WWg8aTCeSWWC$Mccf|H=5wu7QWb-sHS4) zyWS*rWRi4;TAd#Nt?VOqcv`s<3JX`Nww)QqeBHFM+$Jlm3KIk>c7ch)#vT83z7V& zc%!DBRPRT2$+^Zrpj8V^20q%6;{*T!y?eSqwv8FZbvTL}E__f{HG zJYG5ZsS;SM*n*5FS9yALO)6U-t{GKlg%6|GFK;SAiP=0k@-D-ODvudI|6|&U8Kdw> z`n2d{<~(vCkI<&dXgvKIU%JyV*j(eu`R(+UKN$lxI+C8FTEseCPDZ(E2n0q|*X52U<=KZ14=E_?#o4L=0l`!31| z-w$@2&U#He_&g+g2HDU(e1_pr24w<$yEx$kP#xjIr=T1>ccJn}jQDmBAGCv$J=}ZV zM;Qqh)||=re0bqsLXW|Bfxm{-cd~W6_AJh#DIEMMq&DR4Rx`KU^0ISlf=V8zzTm90 zT{yUIfz=ZMAF6;yCTQ0t`?ilmb%YDQ1m)m`&pF<+Ut3JO5zbEp(+@oaFRVO=y28u$ zEdN}}3ttTW5>lHFgFBXTF69^WG5GJ0#_ce;;XKRB-t3D|1eu^MnQY9`=OaV7PEkgsVjV^5R!i3jVp{XPof8W6;ilaY0NjO`36mR(EdesF`-rT;Zqhbg5L`-+m=}u zF$NS4UJuQG8aeRRHN?ZqPUP<{=IjT2AGmt0t0VZg>ug`k7UcBxv@0^Q_qY!#-cKC3 zHNyCU?*!*vYSUJLJ?4lbh#e`sY#qJ|^}`2k7-ZWpc@udNE<6!3&suypd@;Q6EEgWMU64(~ zAD{|kgp)X;>%@WZ!V#<(#`gM))Yy39oZJg;!X4 z*);qM)J3??_AG)t{ouV&KjAu4G;a&x@H#_u-c`&Y@H$^q6b1j4vVo`6F|Oft{^-3i z<~?|wJ$ipVx`&VhFXFd;4ZO}ZeXx;y;dKs4XO{-yg}n)MJV!r*-`mPu0IxGnKjw^6 zAH2>wJ;|A+gYY`L^fKq5!oQ?m;OpCXuHkhqYFZ1j@H#JbN-Oip^XLW7VgI8JUgxRS zr5T6tI#;#jBj|wF*(#lTTKa;;C*YglhrkE3q@(?H_O~v_cq3frcaLu)O!DB)4#xb8 zgoE{0v(o^d248~u;DcvkbyoID=mElo+n_#=;nUCo!i6tEuSpN+pOF=Q2%7pU ziwXD;eDF-{wS+wlRS+(G395ze;C0YJ=>h%orNURCf&&%{Z{S{9c%32rGISRFE^q+S za}oL+XWO7A!mGhfNZ~ud`yjmw9smzIUO4UZ?pXtuI$pTW@e%ObP&Yd7248UD!h?<% zR(-+dRSiz-;vIo}G5AfW8D2O5sXW409se45@fU6QTCf39IUB(*xbSXp*o6yE`VwV9 z=gHtL&=7n#_=B5htCv_$fW=?7Wfrc3^jvHPZ-7(=;g*}JGxBxd&!I59&VkPQij~n> z&8*|Oci+4WX+7`?ICYnue}rc_Uih1@8nYHXlm3eLq#C{+HZh@?8YYg3g83 zKx?7(P{iQ}9c}@qK<~K!uPu=0ofR)(SdXoty$h{kobbX)JXZ+o{+y5JjZG!rvdZ?B z=Fs+dMwj<5FI#waMOi4`%BMLtdX|@MtX*Bcv@FD-iPpv#f1M+~ysRUhEvvk6TG6st zHXCoL=kEldpf$U^jE^h)w2Xf^S@# zg1Mn86k3+cv}JQTx8=0Wdkbxg=XvQ!ndMUiA8|uxD^j&ECk~y1h+%(|gDvcxKX`k1 S&(1x4dk!$;zT=Ly1^yfFW-=N8 literal 55296 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 Invalid.", id, name); break; case MonitorState.AccessDenied: - Debug.LogErrorFormat("[uDD] {0}:{1} => Access Denied.", id, name); + Debug.LogWarningFormat("[uDD] {0}:{1} => Access Denied.", id, name); break; case MonitorState.Unsupported: - Debug.LogErrorFormat("[uDD] {0}:{1} => Unsupported.", id, name); + Debug.LogWarningFormat("[uDD] {0}:{1} => Unsupported.", id, name); break; case MonitorState.SessionDisconnected: - Debug.LogErrorFormat("[uDD] {0}:{1} => Disconnected.", id, name); + Debug.LogWarningFormat("[uDD] {0}:{1} => Disconnected.", id, name); break; case MonitorState.NotSet: Debug.LogErrorFormat("[uDD] {0}:{1} => Something wrong.", id, name); break; default: + Debug.LogErrorFormat("[uDD] {0}:{1} => Unknown error.", id, name); break; } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp index f2e6be0..bf003ea 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp @@ -4,81 +4,28 @@ #include "Debug.h" -decltype(Debug::mode_) Debug::mode_ = Debug::Mode::kFile; +decltype(Debug::mode_) Debug::mode_ = Debug::Mode::File; decltype(Debug::logFunc_) Debug::logFunc_ = nullptr; decltype(Debug::errFunc_) Debug::errFunc_ = nullptr; decltype(Debug::fs_) Debug::fs_; +decltype(Debug::ss_) Debug::ss_; void Debug::Initialize() { - if (mode_ == Mode::kFile) + if (mode_ == Mode::File) { fs_.open("uDesktopDuplication.log"); + Debug::Log("Start"); } } void Debug::Finalize() { - fs_.close(); -} - - -void Debug::Log(const char* msg) -{ - switch (mode_) + if (mode_ == Mode::File) { - case Mode::kNone: - { - break; - } - case Mode::kFile: - { - if (fs_.good()) - { - fs_ << "[uDD::Log] " << msg << std::endl; - } - break; - } - case Mode::kUnityLog: - { - if (logFunc_ == nullptr) - { - char buf[256]; - sprintf_s(buf, 256, "[uDD::Log] %s", msg); - logFunc_(buf); - break; - } - } - } -} - - -void Debug::Error(const char* msg) -{ - switch (mode_) - { - case Mode::kNone: - { - break; - } - case Mode::kFile: - { - if (fs_.good()) - { - fs_ << "[uDD::Err] " << msg << std::endl; - } - break; - } - case Mode::kUnityLog: - { - if (logFunc_ == nullptr) - { - char buf[256]; - sprintf_s(buf, 256, "[uDD::Err] %s", msg); - errFunc_(buf); - } - } + Debug::Log("Stop"); + fs_.close(); } } \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h index 13863df..9871df6 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include "IUnityInterface.h" // Logging @@ -8,9 +9,9 @@ class Debug public: enum class Mode { - kNone = 0, - kFile = 1, - kUnityLog = 2, + None = 0, + File = 1, + UnityLog = 2, }; using DebugLogFuncPtr = void(UNITY_INTERFACE_API *)(const char*); @@ -21,13 +22,89 @@ public: static void SetLogFunc(DebugLogFuncPtr func) { logFunc_ = func; } static void SetErrorFunc(DebugLogFuncPtr func) { errFunc_ = func; } +private: + enum class Level + { + Log, + Error + }; + + template + static void Output(T&& arg) + { + if (mode_ == Mode::None) return; + if (ss_.good()) + { + ss_ << std::forward(arg); + } + } + + static void Flush(Level level) + { + switch (mode_) + { + case Mode::None: + { + return; + } + case Mode::File: + { + if (fs_.good() && ss_.good()) + { + const auto str = ss_.str(); + fs_ << str << std::endl; + fs_.flush(); + } + break; + } + case Mode::UnityLog: + { + if (ss_.good()) + { + switch (level) + { + case Level::Log : logFunc_(ss_.str().c_str()); break; + case Level::Error : errFunc_(ss_.str().c_str()); break; + } + } + break; + } + } + ss_.str(""); + ss_.clear(std::stringstream::goodbit); + } + + template + static void _Log(Level level, Arg&& arg, RestArgs&&... restArgs) + { + Output(std::forward(arg)); + _Log(level, std::forward(restArgs)...); + } + + static void _Log(Level level) + { + Flush(level); + } + public: - static void Log(const char* msg); - static void Error(const char* msg); + template + static void Log(Arg&& arg, RestArgs&&... restArgs) + { + Output("[uDD::Log] "); + _Log(Level::Log, std::forward(arg), std::forward(restArgs)...); + } + + template + static void Error(Arg&& arg, RestArgs&&... restArgs) + { + Output("[uDD::Error] "); + _Log(Level::Error, std::forward(arg), std::forward(restArgs)...); + } private: static Mode mode_; static std::ofstream fs_; + static std::ostringstream ss_; static DebugLogFuncPtr logFunc_; static DebugLogFuncPtr errFunc_; }; \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 78043e1..84acb7a 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -38,6 +38,9 @@ void Monitor::Initialize(IDXGIOutput* output) case S_OK: state_ = State::Available; Debug::Log("Monitor::Initialize() => OK."); + Debug::Log(" ID : ", GetId()); + Debug::Log(" Size : (", GetWidth(), ", ", GetHeight(), ")"); + Debug::Log(" DPI : (", GetDpiX(), ", ", GetDpiY(), ")"); break; case E_INVALIDARG: state_ = State::InvalidArg; @@ -186,25 +189,25 @@ bool Monitor::IsPrimary() const int Monitor::GetLeft() const { - return outputDesc_.DesktopCoordinates.left; + return static_cast(outputDesc_.DesktopCoordinates.left); } int Monitor::GetRight() const { - return outputDesc_.DesktopCoordinates.right; + return static_cast(outputDesc_.DesktopCoordinates.right); } int Monitor::GetTop() const { - return outputDesc_.DesktopCoordinates.top; + return static_cast(outputDesc_.DesktopCoordinates.top); } int Monitor::GetBottom() const { - return outputDesc_.DesktopCoordinates.bottom; + return static_cast(outputDesc_.DesktopCoordinates.bottom); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 960205c..4022fb5 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -9,6 +9,7 @@ #include "IUnityGraphicsD3D11.h" #include "Common.h" +#include "Debug.h" #include "Monitor.h" #include "Cursor.h" #include "MonitorManager.h" @@ -67,11 +68,36 @@ void MonitorManager::RequireReinitilization() void MonitorManager::Reinitialize() { + Debug::Log("Reinitialize()"); Initialize(); SendMessageToUnity(Message::Reinitialized); } +void MonitorManager::CheckMonitorNumbers() +{ + ComPtr factory; + CreateDXGIFactory1(IID_PPV_ARGS(&factory)); + + int id = 0; + ComPtr adapter; + for (int i = 0; (factory->EnumAdapters1(i, &adapter) != DXGI_ERROR_NOT_FOUND); ++i) + { + ComPtr output; + for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); ++j) + { + id++; + } + } + + if (GetMonitorCount() != id) + { + Debug::Log("Monitor number changed: ", GetMonitorCount(), " => ", id); + RequireReinitilization(); + } +} + + std::shared_ptr MonitorManager::GetMonitor(int id) const { if (id >= 0 && id < monitors_.size()) @@ -84,6 +110,8 @@ std::shared_ptr MonitorManager::GetMonitor(int id) const void MonitorManager::Update() { + CheckMonitorNumbers(); + if (isReinitializationRequired_) { Reinitialize(); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h index 92fc877..e4bc07c 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h @@ -16,6 +16,7 @@ public: explicit MonitorManager(); ~MonitorManager(); void Reinitialize(); + void CheckMonitorNumbers(); void RequireReinitilization(); void SetCursorMonitorId(int id) { cursorMonitorId_ = id; } int GetCursorMonitorId() const { return cursorMonitorId_; } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 88a6e7b..56a73f5 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -29,21 +29,24 @@ extern "C" { if (g_unity && !g_manager) { - g_manager = std::make_unique(); Debug::Initialize(); + g_manager = std::make_unique(); } } UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API FinalizeUDD() { - g_manager.reset(); + if (g_manager) + { + g_manager.reset(); - std::queue empty; - g_messages.swap(empty); + std::queue empty; + g_messages.swap(empty); - Debug::SetLogFunc(nullptr); - Debug::SetErrorFunc(nullptr); - Debug::Finalize(); + Debug::SetLogFunc(nullptr); + Debug::SetErrorFunc(nullptr); + Debug::Finalize(); + } } UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)