From 86d5454581b8bc1a03b6f77cbe4079130773eba2 Mon Sep 17 00:00:00 2001 From: kleuter Date: Sun, 22 Nov 2020 15:46:07 +0100 Subject: [PATCH] 5.15.2: original --- 5.15.1/bin/7z.exe | Bin 474624 -> 0 bytes .../qtbase/src/gui/text/qtextimagehandler.cpp | 278 - {5.15.1 => 5.15.2}/bin/7z.dll | Bin 5.15.2/bin/7z.exe | Bin 0 -> 454144 bytes {5.15.1 => 5.15.2}/bin/wget.exe | Bin {5.15.1 => 5.15.2}/compile_mac.sh | 4 +- 5.15.2/compile_mac_arm.sh | 23 + 5.15.2/compile_mac_dev.sh | 17 + {5.15.1 => 5.15.2}/compile_win.pl | 0 .../qtbase/mkspecs/common/msvc-desktop.conf | 4 +- .../platforms/cocoa/qnsview_drawing.mm | 288 + .../src/plugins/styles/mac/qmacstyle_mac.mm | 6670 +++++++++++++++++ 12 files changed, 7002 insertions(+), 282 deletions(-) delete mode 100644 5.15.1/bin/7z.exe delete mode 100644 5.15.1/qtbase/src/gui/text/qtextimagehandler.cpp rename {5.15.1 => 5.15.2}/bin/7z.dll (100%) create mode 100644 5.15.2/bin/7z.exe rename {5.15.1 => 5.15.2}/bin/wget.exe (100%) rename {5.15.1 => 5.15.2}/compile_mac.sh (79%) create mode 100644 5.15.2/compile_mac_arm.sh create mode 100644 5.15.2/compile_mac_dev.sh rename {5.15.1 => 5.15.2}/compile_win.pl (100%) rename {5.15.1 => 5.15.2}/qtbase/mkspecs/common/msvc-desktop.conf (97%) create mode 100644 5.15.2/qtbase/src/plugins/platforms/cocoa/qnsview_drawing.mm create mode 100644 5.15.2/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm diff --git a/5.15.1/bin/7z.exe b/5.15.1/bin/7z.exe deleted file mode 100644 index 3a8ee478adf2e62da9691a1867c32b57fc96f598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474624 zcmeFad3==B^*=tz49O4z6P7_Xal}!l1|c-*m? zuUF<-?!D)pd+s^so_p@O_bI<=xyfuYnJoC%b(3iouJq^S-?RS+Bo8?6^#P`T^xbg& zs;uCK^RJyZf1zVR)qQtW-S%V0+}rNG_r9>>_B$O_k$WBU?{)a5&vg9wzB}$5*S~+B z(*WIi+1&4bGPD0n$^Qcz7rgWso)2uSerXxM&wuGWexCc%dR)&d?fW;GUinf3o}b?M z3nTyi#x=s%AI_gUk6Wm`?A{b>DyY<|7`8{8Mr zt(Twq9!W$W`s-to`Ao}mQ!mY?%B4o3)FpMpuw>bcThp7Xa!iZp^@3bePY&JWnq0Tj z)%dH;HSOp3$ru0awU5c0MD{dA#)a=(6vq2$UmNYDwx5*WVKP;YtGeU1@NFj3sJ1NR z?qf1_;QDRvj9w6FoXlogH5S=617VQU^k#3wk*{go0+~^^5wyDl`PQ70&pWPaVbxqD zF-<@lhUdaHAv74-+*sy?RQev~{uH;6ms_hPH-M+?y+Og{Ug4*W+&2Lg{D<@b& z(G!kv4u1Pa`uIu@hRbj}CejzTitUNE#6_ClTH?=-0Kf)u!+9o?b{%fZO`+I?8G1`7 zHfl!fI;+;Aw+EtYvK7xm)~aU{w)pfcH9kZQXq&|QV@xK`G24?(YIKcDnWNmQ+@j2$ zbL%ZPx2|7b+|-bz#uRHzDTpaURIM5B)L77Ior%U2sqH?eZC8fj zy{<-^9pbkmOs3^(d}@*Sz(IFfD{3kt@cgG<2UrfY9!Pspz$&WeTTIB}xP`NvobC{z znk*xo>C1GTdt-sB9jV`;Y6ruYs?A@TRc(q@jqbBXTY=u#9JPLLcp#BQJYzGNh*ZDA zwSGtBBUPJ@jB8xf*29#^XKMhI|z`#8$T+XU{>o7g@NP%F`6;hD25USdZeq}Ph!n*RPhRW5Y!4fUE)u4 z8;tv$E;W9wQ4JlR32x5pkGIiEMO>wwYRc z^g6RC`k=GO6uyMA03xC9<(6nvSqzZSH$kT=9>#6=z1**qa$h>-j^wRd+=yF{Z60$< zx{u=JZqXJ=_K(rU>oe0;@u#zN!Q}kRIvk!$zTy5_|b8aoT;gPE7$f1wa--T zK=F=}o2<6Fb1}d`2t!f#rMCJ4JZP;3`F!!abuHoZtgF5s0vgcH(T=%Cga@l6I;!5} z9u_&QNkS{0;}4g_r(`J}pVM073TXLG@NKpjU^kgcTf+miwMmfL*NFn7P$Jj3(boo| z?ZZ4TI-f&Bs($J7Bpy0PjZbr^ar-R?EG98(n8|cmQ+G8+1SNhQ#B`!p)y66A*^vKp z-LsFI!pZCdDEr=XIQtZ2Z}S~DW%)HAx@_e4A6!dlsM&fOmeHgMg%s!sg z?mKQFK}GK139H^|t9t=h>7C&U+}Cfxy%O!ovemcaj@lWDPMq;b&8Ws9GXh%hM1j~e z&}51MhNtzx+?TVun~}|EO9|ChA!{R;0nOrs%Bhg7eZ{%pHp#+Y^h22>3wv52BFvv) z;a8DK)w)pPIE3gu@q?LW$)YZ?1BG7BN?c3WMJ^@Sz^vj@+Y?OquN%BN zo*F3CnHsy+S#UaDEh05quI=(``&F&m(4Osz3xop+6i1uM)ULRVr=k#bhdTFuXp<9A zDo{3GnWJq`HeZvn!T+dSwSEUFn||VzJc6)JJdbPrAyPJMD3K~uOIYIbVmEH8QOn4Veha$JSIfbqiooSq=bccBRzD(Ij%Z1gsWe{pB@NM2BD@o8JCz8{Q_ za<19{aZ~hW9GwC3`;+uAGzrl5IyKwszA zT9oG97A3mV1{Ij6#JyK2@rokbiVoX~7Te?wYOK=GFY|?%S4qsj9cAhqrYfhb^_fd&#|q z&BvmbY1JNu-JojkigO|VDoo{Os0|-Pr+5d5o?UgZs+|*xmX3*x4o!|eI2lH{9UY;^ zrof^fH5uH4BGo8bGRGReR4SyynB%E2pL3Rqk!}F1#t!i=h94T|NQZ3{6+yEJ>{&GD z)|81%T-QtfW{K?th!sm}j-f8y(}3!E&sBZVmaN~uu?0<)#xBXG*7qR%y=a7q4p^sQE?<0tuE0CRGH!Tc>OO8VMaC12 zyb|?67f9U3Ni53J<=kAZ9OeAlnv~7$6|2bfk-6>2(mk8Vqut|lcn_`3qA{DAa16zk zcawdJ`GgvK5C*&FYp4%s=zs9bF5)5=mrE0EEe}}Kb%Twr1Ib*UQ`cpXY;AZr4amQu zDr9YOuI=|mKUIqPcSHMN5Z|&7qhYW*U;B_6>lOE7JPx8?yhcYyrf8cyhi#7$+XXc6 zd#lg3(iHM}+QUOazF4;2tU?skXiK(dW7QXlJE+?8)71{;Y70@V_L1jswZB|zK@Oj7 zMIehLxp}8G#Yg;md{>LC~hLQCEH2{0Bk6CiJ^`dXcP(6epfLe+c-?VOe9!v!YW zR*uC4{CHmY`}pl2E-bm$IXg0dh*BZGz$}jP5-BS*Ot{BlfC$AV&Va2qD{(IMd_@5L z_B3o0bR_cmoE4#%o61nVZP^e8wd$!<#)Zhp&8iUJqCrLryXn@u67vD--}d=nyT*2P z=^CPa#*95vPsGbB#b^M_FhF|gk$AaRjF^`>M)%e;@p6|qde_<0x1Tk=LcE?zhwgXj z_IE#n%~0PI845FR=#x1tq3#A~EU|I31x5xY;xsPn7yb+xF+Q``1XiPV#C@YRVu6J| z6!wsA{}GZst?*iuwl++$!tSS%b4X*VGg*&2Fw1Ml7==G*ag6$8MrqpxsP0W}t)g zGv*WDN*vQOPF2IOu`N|~wlvn!YcBCK)PcD@DK;?YOeo{VE}z!t`oHCvR)JG#uBH2I zz9wa94=WlQ4G>)NFQZ|wg5kL6CJ`QP@P$ikfvRr=8?8~f^}YMwB}zld{$pFmQM=d* zN^A>{Vk$b(D0mGlXh(mw9oh(!$TBNtR>U$OCiNL-d~c`4RNU!lHV93Q83|9-;8oeS z8dCw2ZhsBAqIvL)peV%M>en;J+*wP&dt6=l?ul#3Lsks z!9WJL7z;A6Jh;U+jNOUCRL(DHXz^+7L?X8Y`4jd#K`PziMPx?Dvewn@LxCnkafx4W z0+Fxc%;PP|!8dm#=}0m{e`$M`d>&i>L;9uLsb2CI}+@}zs^|g!pLTP7* zFO5E6HC11%U1Nn;(GslKlSs?y^8!evk1d4 zN@qvzwclh`a8)WdJ6DtV^n%~-U}lN_sS-d*)dqDh2cdk8Su|7V=f}+32FI7L(c~*_ ziR@Pkn_E|b$~ut8FwdC=g#74rI}M&8pGG5pOJol+s#|(ec@sn8livwV8g8nAC%eTF ziVdWZ+_rLHsD5kY3*rm*kwYv%0l2_-fy+iYL)t@N#x*b=)@Fx1pN40IqQ`El8i?Nq zYWl<%?o7b)KK4jWpOAJik#AeMPPaGgAo}hPMfKaNM&tK^8VuQAI}(F%|423RY|`y_ zaGsu!=Wt|D2+rRpq^2|c-Oz#u)?>cZH*tv{4GaKH*z*$iK49x6M_hSl;_w=CZL`C+ zq7$ucj^sDyVKPzI8QJi17KQ`RCXr8+8%9$M0Dv_E(s;7asHX6j$bf8A#}tlGP9l0M7%aFpFBU0Vd@4 zG^3v8a1oI0d8FpD6!sFR1&O_(+Ez4&JROm~)Qyo>BRg~6QanwOf#_u=S2aEx}M#6z`{5%uK#1+6Wk7j~|B}mZ`zK~kR96?k?<7CUx&?W~m zb|6z{COizdlC+XnNP&j55%80#@v7{^ZNw^)O^$`j&)WTWvPY|jSqUrxRsxG8m_?2; zi-3(3&eIk09E%i$w9#ar5vTknl&I62c9>Su*&*9mJnlw0<0_UPRwuDe)V^2f-TDFMzwFL#y&-Ux@cAI&~V7tYqDOOF%R|=av zo2%`Ld2_FvVjEN)fq|VORZp_I)tI!J#57db4pRt!?Pd978KGuInv4aujgok7r*+YdP}X_6geb{flE+3uhFbxmf2v&TobYZe?of_d!nDw*6rF4(H%#G4y;fH zwhBwr>53)Srd-8`c+u>L*L@jP4MozVw{g{;`}3=Z$ERh9hHpvT!;I__&(m$}yjV>> zUc_pwjee7=uf_77-kgb+T=z@Wp?Y9`z-&7bc56Sfdgc?{@+?u5hC9Q6dmqESkC=*4 zPeMjv*cM{p!so!t5}H(NT6jI_6TLm8Wg#W9$MY~%I6X_e!{Zhl zCS77D-AV@4h8B0$>#>Ke;Sq4(X`6i7CTbRj4C(R?Y5W*LZAa(xeCo8nojpA1s3 zyEH|VE^T1Ohq6CGje z#JsR&B36dMWQo0n!^0z(@846+u*>`U3R@xJqO;Xv`re!r6wqMq3>bEO>%q7!;Zf7# zzC0bsW`KjkvLo7}N4lXw!g*TD-6{dKaADLSRZGAdyp@%RDa{4P29f?9ilo_klC zl)a?j%aTwvKSW-r8qzZ{bCUGyPti38A*+NR+w*7DHDrGhoaCIy0be(4c5QpeUjl|W z5H4VsG`yC2GnO_?k%Nk7i(;Fy4U1maL5n~ytL7a+a*BN05b1IJDPPOtO;#rc!j*4-^7O$mTTPv zd>()^WTUm17;F;f0I)Cahvy^T13n699|#Lx$qHO4--oo170qic*Q`FwTwu^byfI>V zQ4>}vVUaIl8jt|W_ybu6xr#eON{JOK$zGq<8Mb9~M~OA^EiW;bYaJ=5>%_QTkWLvx zXy6ceU!P_SF*q_gicp{N7+_nmo#%q21a5;8;8CC*-mHdI?VU-Au~(cyCf+B)q$+lpKj+8L1^P}8dZZe$;jv)oLoD+BIHW7;nO#PFbf_+7|vGdxeZ8jU*Kf zLohX_rN_z=W2_v7v63KXr5iCuHX@cWToP{+Nyane^kA8k8CEbJSTb4<5BLXC7(c&9 z>IRI8@6s*nH$P4AVmueY;1t=5_AF+`>)j;C2P$?zrnLZj_v~6TS%}sGcox`56s1@})n-CJ z^aG3;c_z%9a0PAf4#M%@%UBjx&$Vd)ltW?${iH(9h~#&Gd9!XsLP{!9at zLT(v!6#|f8Fu?JsH(diD1Yryy__Ujm(C*7h4c$pOA=xJ>Ii1Yj1F-cw448=V!c&azNH#P#fsew)^8#A+6h{#`ACT7dB6g z54px@%3lB=T4v>C0_J^|Tnx=r)`!L2xP{D3cmt|)@K!0@2BJW~`ci_g5Qq#>(Axn6 z+-!hLQ)c~o5arUOsYN8$wi7*3=tgOsQX5<+l}Yl_nPqqcY&0puZI(QT-h$su`Gx8s z-U{~-uh2j(ZLj~N7uxn`z|1=ZrZK11jw;$_h2nI!36s$ypuexMJ#M)IGzi3pED6N( z%g`?3b8=(`R>3g+&u#iWrc!CWF^spZ`sAAshxz}3tE@6-|Ff+zu zx2k2eE9@OmG{GjF4~}&xWi$hfVXJ!vh6!Bf+J@q-us~gS;)Qt!-RSnG*AkLgOLD?* z$@k$ZxJ_<(Ku&@xX{|my4UuW9UjyfO%JQr82-9`qYxek>eHe9uT2Ap+Z3C|jlX0ut zuVzRQa=;8e1=4*435!|e?J-01t3W8ahU0q>bJ7sZjG+u_A468WXk<|Pqw^V{>@Pm# zi`{SaH6X-gf|J?`YXqSMe$Pg3Za)}eXl{9IVGsWI`(q0QklTd&ow|JmTuX|lP1_$C zuiJkuA8d8Jejm5bUrcRY#h}JGTj{=t z%~v98v_093;1ws3k2pZpw-!lUYe5mDMEuVQa1F1nxtVSU0LwRKm zRqGIqa!TliJr9hmQnz@?zs9i}JTW5c9xsYejY(XG7SaO<4SM;Uix>{zk!Vwh-A3^P zg2^U_H)Am?wN9n^i=sQT;IHo=y|d^90st$;sB6-z8!8mFS&ilSi<=Ucg(j7lYA(lm z)USX2>)|zSjL{ua;+9$-ag}Iyk>A{;6gDHev}Tmw+)T3p9%_qB3)d#$C|Xl%F&yH_ zXM$VGa3=*;11$XwFZVRploIsmfUdSTkxGC|crz4Lps+be@XLF{e=7+OD(@uto$!Ze z!I``{+S9js6nT}SJ$=Zb?(IzU$M65rBl+2%53C}Z;%|R>eMcle(7ekM?AHNTSmI5f zoUVc6-O)E#twJ;yv`)~21*&g?+BW5tEL$CMJ-hcN)-D`cUcbXu_j|yEt2#%*b?3r7h5fS@Z=!VKetN=`#bj|L#!l>^C-N~`3KF9yen(H_gtS-_1rtx$ zqA}bntNPFzi*3bb70V$PHTH`yt;L&(SJjNrTCf@c|4+2Jws~icwx!=@CEBEia}yts zTYnlkPO?l3Z9p*G2bc|+iB*S0U}+09kxq#PriI_5#L+NImVTz2n?+veQj;sRbhpWg z{MXLR=Jt^PJ~4{~V>i-Si3&w^jjm^Y*Njo)j4gRR1CIir1 zSwS>ppl5A(5asM+a>`d0Dnk||k|J+-ZX)#GBk9~M z&^FI;I8AJI9|5HD%2mp%wYHU5uWip>dW33OnAbq7N!>5ue(4deaHQ6(jOlC^IZF1s zW4#U6WHs;%sCyZ*_~J_m5kC-_O(@@BTbY}};~J%TXC8s}^+P;C6R`j!vRMooThNfr zclpYgW+l6&VR9B8{bLYlnB&iG!AoDmWHS;Fw_|C5IquYult0$dkez`GvNc?jEpwTX z3-#OT$3uEC8Pe9pZnd^qq-sg+C4mlf)lS;=iySD;T=CSuuzcS~6n=>kWSzk-=k#Vy zx9au)yoJc{R4PL%cA7GVwBaGGl)N5Vck!X_S3nJ{=Ufs&kZgH2t)6cLD&EpITm1`^ z`#j~w5eh2@Q zs$re+)5veQUS6NV(h#qdYHrfqvqGLvZ1rTH0U5+qbl-kJmQ1h({uR=A!xo^TUUch1e-`}WDT zbhhnJ2X}lZy5z)ch&C?cBNlKl`t-l8?%I>9dxWb?&ud`#qaE8*g6?5EW|J@O#hk=U zvr6G)@lJY#)|0=rn3irZ_vjmnmRu4ZjNhxm{W0^waN}vI+AUX8G4K>`4S8C^u26Jw zc4_4NP{|BSWMpX4ZKkT6(4+@U)zD@Nf*r5|-G^OljV*E=fNe@}lLNCGEs$TX?JR*B z*&Vr(7(P25wq|J?RYbcBWrwauAECgRuJB-~UZ*HppunkvyMU8Dy(l z3vh6Yz&TpjY-?DFCz$EQTahp9bk7_V8RVW>5bopCIuh3UCR_be$l#tiFhUP?Gzw92 z0di}b!+mR)3^YZ|@d`aK_egN=?!;ZihY*T;Ls0vwcyFNj3v=y~!SK=MVAqHRUCePp z`7U4{?kBzvk07cnOpK_VwE3r`5Fqfg;1PttKl>S(=Mfu)KgW+n}i`85EEl zGl4ED-BvTcST9-Zs2)wrd}Tl-KSykXYQSQh9UGFOZC1|`N7WaS5H#k30*FOR@pRo* zHI5d??{}*<|9*r3H+Gji4C8ob^##=69AD$wfc8GXnnfF?KL9(7z_waF4_m7~HRvn% z0Rl4OB2GguYxU(sul|oSy>f_LLCumI(3o03fr|vxdLOaE6dIJImbGfbX{bf;iDhZl zj@E~70H?rW1l#*cFufa#tsj=E$>>BYKVt%>V55-zDhL63Rkx2oWndczGzxgltk5(k zAOC&D$C&Sd*~kpU_8z%xE@g#e#6?aHbUs;1xy4Q0BopwLlxukblzm2)&11u@`?p9_ z2*JpQh_A>BcLyLy(M5Rv^bNA*e27L~gm;A4-`Kwm#FoOfL9p4rOWX{~Bej83Rm@l+ z$a7?l%cBol&EYO&2x?wz4Yi6fvi4jy1`{*^xfbPw`4eu?-@uHp;95&=wc4(}6%Hz5 zKeD}eJ^?;J>oWI|fW?z5UB=Y4T|o#H6v6{m_>3_=ZenG3?T4huXq6preZ_}l;QE#P z*5{lDZyv=VmxJs>;4AMC`LJt(T35pCFWx~*rkXhz8`Z(Cs5YyrZ;HGvmpqNBW=4D! z%|L!LDLn(h1e@mA8T&!!iEln&am8NHG;gOv^m%LFHaOmC_iJ-E8QSXH#kfB#_h5c0 z_h9ZLta|SP{SCp@Hi)0&%6l;7TEC(_=!9V9lfyug!_OJ_^VTEi{xU0Ra*ieJ5D)!< zxUZimr#!LZlStN&-(n`uB;#Fz2FbR;sQGV5R+KWHPNGYt*#3TsF3J9;ea5}|9P@MX z>&qyLlluH7E9`jm`8w|NN`e;4jm^o&+quPivHf`UFc4Erp#=E4V6QBqW{eMT&yV^Z z8y6kor%)Zf#+wU#4Yw9FP94}VZD3>BpoXglHI@x-xOyQGNW-ZTkBTmJ^&W@x_F1@810t(mt>2* zcn4u~x`Lk1!vm>l z%y=fUZ+L1So$f=#_b_9Pi2KTg zQJFTZD2)PUBDmJy*nyCa;;rI)SbTu`&TGp-SaSCjFo@c6vV4sjVD7#O+i{bi{czq! z0RhdjJ$4S#S=OOiH;LgrSjhJ|9WY-SDE`UV9#JH^uyC`SqJfK4Z8&X}ghuNp9@|1x zS|=XnD-wN}GPr3j%`zXKVHJ=39=>wC)KS)fU39}}yJVx$nV>e{<#&j4d7KVUQRmJ^ z6sksx2-tmxJ(}2y&U-ZB$H9(pY|=D#gy(aO8-)c|xhEa9i$j}fLXf!nzXr1w1!$`I z7OrV9FX74CxR$zEdV4cM@1O zCDUCt_rs=UjX{3l^V2VHjsk|B~Ke!&)u?`+en9YDW(pFZG z)mAnTvF?M&B-jyvSQmgf#QQ_B_e%Sakh>5@p10xd0&l~Tfkp>6lnp}ly_B+nX0yYkrR!blqWVGfm|o) z>fdr<*3}D6r>j2)x&NQ)>Z=I>qkq`^NOz75Rgm3sa6|8IxtQIT9ioi!n}f0B=7Pp4 z0~^W)HclA?nm0}v+)zei3Cvc~U(^S*s&X;5Po0+jZ&L-Cd_w1MfL9#qTsme0r$mJB zB(;r63YIhj(LGiOWfj{M@pQViLXEL8Ba;I|$ND9jVcM0a9p;<1xDz`;v7QZFY+QP5L5$vHvJO)h#}! zSrFB-UET~6wh8Fg2P?ZwG@lX)`JXEAOoQhCl~n;wxp zlR(du^YBcHl7?qYy(YjvA11q#wlK%1xy8kd@-&wiEpLYL-Unbj%_>^gptLq%!H5MfCU2d$2hDgqT~%Kp4`I0Pwdh^>weG*@xv5er^8+L z!?<2~GTTP!!^EvbPnH{kadNs#{0-A~na;krGj=9stg-LM?zhJ7&xexpe3G^^dpZGu z?M(Q-9{U*&$ykz^?Od=L>rp1rMd=yl<_vP4&BFu_M;gH7?5D=$2opzFKLLjeC^Zu_ zoiqp&=d@_ou9A)birv2QdM8aDA?+2NaQ#c;-rx%lNOcYODw{q z>2xx!7KtmV6)8HNlFoee`(7|I;VB_r!ZfNvHGTy~7^cno!a22TSWn{x6 ze%T=}PP*VNuST|)@w!rb*#v$IqqDutE%SNh#m5O~N6Md{sn03=M0VN*9YnSCFzcl` zF0uRdR%Z7Ea6xBWPs~3|G-Jj4})%Exu1rDMh~t?PEoMr7flCi5U3H zq*tZb*nT#8S295^8=u){y~;DaZ^v9a-DfAKyTq%oGL!Vq^sz0V#S1pQ^anSQ?5L_bh(wcBm2)gMBiLsX7EU2e+OcCH!MB5&{h!kOT&7$Od zK}y}pwEcl3e{#atOD>bNeZ4SATb}b_r5!^dEqJGdNP)}vW1L;kMHGQBQ4Fw7Ype(S z#b5YKZnH*4sqsFq{sj@gv9d}y!QQzs#}tT9trSl`fo1n#><*{HhaVUHj3oj&unr>j zVo9Q{&gq79WzpV$-YTzZ5B{^qS8|s%;`BBAkrM-+?`YG#O*FKk%@D#`TwxDlPy(Te za_7MZviuz&1u@cn@%zltW9F*ybgGxHq|zEe=$ao+N!*RZT>%h$;W@)8S^q2rKCJQE ze8&~fzioB*0vW*IUElzXcx13faPCgO_HFb;R=7WAP<<88$JG{Je4(yr-}*eCFT8zP z{GNZA%4v^N-2Ti96!(lMmqI{BZk%Fd_n|g^cMiXcWNRn%wm@{P6`O@R>h(pV;$^z0 z2P**DK_9$Zvl0aaUEadgk2l4K{Pl-yb>#Z=HNNOnfu+B0Z+NKU`L+tW3dZh&FKOau ztB+D2kyD%rbIC_U5=?P@C9|CqBXDF8x!%Wwkl!-jDOxMmWR=+_1+htpSHBT;fV7Zr zGzd;QCVl@FN%}sx>gy2DAm`h3j@<^4{|lU7fX>j{6we{sqqifA_7A5ENCt6r;F>t! zc#*_Dm0(T2A+|vL5n?2|3A>#nkH2FPq&YkAULbsM`Cuqo=B&kg@h6g;)wAfftQpvm zG}5Gsy)_GHKK9+e{OJx3o=` zIUDH7f~r_v7lynrhV;(tQGc=!k7OeZ!)(`ShT?0)Ey6Z&hZ1T+gt4z(CT;h1%G2q)Y( z7@MIxHd85w_;aq|Mw%spD3cU6<+UvDWqL~F5>{{Hn@%qQORoOmsseKpu0gu8%o0qm zI0r*Ro6q^ftVW3d{6sUn4G&_VYq-Zb69WuZlvKD_po|Or*mrv)T5_MUm$+?AJV@(0F=%! z4r=AIMC03MPLG!_5Z_#Q=K4{d$I*?w@?^GemUy*S8nq#vuEmMhL~d^s(&=62auaL^JloC4jR_i$#W9bqLnP_twfHZ0L$mrYjB(W-r(qv6Xu?*-?6RgJR(4#NG5 zp-+l>X6RejL+92$g;Lrw=pNB#-0CLw&pRAWbr5d6R;)`?5t zUow1!OVCHoiAg1_K^Q)=&I+fzWU3&iCtEv2<(Fe8mFw22Ih0L5EZn+6lrYJbZNaFeP%A&&z^ z1AE9}iIL6PApUg~9|Su7tdMa=8m5JSq1!+B zwS-Mi!nB$+v95<5<=Xmk4XgAtH`MLVArqZ=gViBC4f>VE#Bm>$y(T|t@@44Pc)2Pr zgP|n#zah(BA`nkpc_)c@%?*-t5kUqU6;45gkUu(eXC^!5&|sGs2ZxGW<}g~qO;LuxQ_qf{{(PaI&tVX7(lLFkrCG~%={iRa-K(0_k8 z2N8)NXSW~y23^JxQXC_zXt+ zRxX)Bx@Ki2()01eNUIr~+8g(cqm#I&$0+7QKHU>RCbY$|oY37*`n`9mbQYB_kN{#p5@H-0>+ow;FbaX(6{FR^E@f_3y zY*SlZ8z@2zJbZbQs(b0KH&r=~gy^8?ADoq{m&3Va-yUv!%q^H>qt?x z__Y*OUARqCbwoPBhFhlUyi-T3=58*0i^`z%70`EP7$6?7M#p>xx`Z= zlkGyFm8)C-yIdnVMb@{8u>}|idi3z{=L#bB=d!{BqdQN?jS&~gSeg52RM}ljEI_IZ z8UaUo{0)ABlt$2#8bO6aWO-E2RAlQ!VJSB)sS(0lGS#p&arz~OGsKvS>#zd0v|dXKdaeB!ZufU_8hu> zA7;e-9=(XIpM%jyzWB|$vhfv$ z5y>`z7hsvS8nm^Ch?N8BdPw}zluksPsg$JJ|e8pcE1NtLb+NV5F zZxnS@UFlc0y2l_(e(i&xwn=$|Y^MKoX6xjJV7{Z=ys5nK)5v=`?s0O%gZYl|Mc8a# zay1`Pw^1y52hI<;)wKZ>=swP*m_Oo^2FcUTM)F3n4cwsH6F-Ajwkcb&`PzME0bu^d zugG^{Kgy=YM)4}L(UN89Iq1#O_Hh5zB>KAj_b8Z{K!;5hAX1$*+Xm5jKAbF6tM~)N zjE>?g#kn=hQAJNhIG2@1BwsOq8a;N0?NQnZfE57j%EcjvEFbP(lVGK>J+YhQAn5|k z@cmVgMNE+fWr$28LGSlmL6{B}$N9``JuVr`@|lYR(kB_O-n^8|(VgU_zxcMPVM}z2Y|n=SjeUqh?Wa!r~qCNh;gJ>1+#e zoA|M;`Yzn-_HB=I3nQ?9m+{fxVxfV|=bRk9je-F~C34v|Y9>>g020X}7-P~8Q%a?c=|e+c&O&bHNkg6y~( zZ>xJBci6e_^X#-mcj4ZH&a_2ocNO{I(cw#s!re~hSfXy-U!m+Cbh;m!OJ@RrF^XtY zxA^|WRNvwp@Pj*Hi9eW|MbTFvG?Izst|ONjy2l~FvoyQ35|9VqNZ^!3Vx~(0mg(*g zV{i-Rtp!3dZD2Yr2e;6yiI7Y={31$uFT+4Ukh}3ji2<3oof2irCfs5kUnCQn(+MkN z0^4y#;<fvOj%=99$^{nY$@#KHCOk29=S476-JO-l<3p@2mh4^PKl5n?3%z+;Tq{3Gd=>7eDA!>WQrE4QF z4k&r~U${p;2QT4y0mc4Xymf7nb63;$F5SL-nQ>a=B5|k8O3}d0-Fe=+jb7V|Pi%hp z{0Pt#qH%=Q(sp`Et6R^onuUD%(2 zgRNbtX#r(jB$2Fy<{+Q_0tEu89BL)YiLw6$L<2Cw7bjT%xJ2lXeBsNe=wVq=*qPQU*_J0CkEpcAL3TR z9+J-8jF+TJZDKH7p489e1#&bmFPs7=X90X?40ma1AqLg0afa2ZsafVenr^f7M---VVp(C)=je718 zU!p_NWJm#;*-HvC`^F)%2PFFjG+eregcsDK`2)ZJ(-(fiRHWmvslti$Iv6Ws{G5m> zcc}0j60&34%ABA{8SwNuC$yCTnONB{++%lVhZ^h0VIUPrtf(G3g925>?E_$1b=xs0 zru^Mt<}IWf(FZ_homdXS!cUu9{e8Lf0EKqJUIJ6A--;a=K3Nw|a zFe(+NsRzfl&|Zn9d!Fmv@B4XE&^ECe@ha5som6FX()VwM@J0r$UW7;89)8S1-|G1* z9*R44`<-|s&(8b{le_^7x|0{FNF~9Gc<`p26ocHZ+n3do4Sf;!@ZI1SKZ&D5{FR&o z8BGmZ+Jb~>W=q6%^%}5|FMTOu8dgns-P_K(f zvO)qS_ucRwL={4b$YN{-{RJc|k&kF^2(?xG7$Xj?O@wpXa} zLzU|AQs~Q5ydDLYF#WN}5B;XwSECq3)RVF+{{x2e*5nX*6`sJ)tiyXxZBH6UewUX) zYYI<|Q+Vn+@dCOZOj}ZB98LZxbWi$RkV{T`E{LQlA3aVw17N~=utCI?7%0f^I@5}{ zYcWiENf7P6Nj!(JAIuK6umW^p@Ie3lo5ni1_Y{4@ah0d^Mc1R$7lV5BMaFtmz$&i% zJ=%`$C-LfDjB4au5A4)HLX_04EMT-TRK)O+464Ugw~I31l*&2zu{qY*oFTC}1+h7! zVsnPY<~SPWI2-0%h~O8fvg@p36gnxsFw5IegLmat(R405-R}sM+>#%;)wa@)`DdN8 z2>?S_Qfa}pl<(HyZZ-}Ld)nECJ6hAgXD8~M9e5zdMI_oXE+syPz=013tJ*S|8neLw z?~eD8ZK&if#u6YPREko3UjPeg*@=Pf+0Oacl?y>wfQ2+~<0mqM9kV33bEi{jNORt3 zaN&OV^Ow~?E^t<7sAP7z$yPTXPe3Dr9};I9d?c`TxDvO>q9=Tk!3#?czf^}CpBhr#U5DLwGx=8LC+EELT+jYbwHT zR{byP0ufbl>lxrxF}%pjGJgZ|gVcn}Lq^d`@doA`{L(GvQF`|u0Dm?52+F^v)|eQm zBA70#q{=>$E<2Xe6F)+KRYZGotB1((s6X5f71UuWIuUIo#)g^}Tj5xw@0H97#?Ipz z4R{=fEmBiH|6K~nF5F7i8k(-CmC}jlklP_%!xMOJ2k{hMxWyln#U0|;R2+gqe6Qn= znDW^XV9JB5XSA`7V4QxNgj35KV|RyPHe zaUe-uv#qX_YCfGfOIeOhLGL}`Y(jn1dJ#ZJMIR~3uC}#LAqOU~o`R{$EDKYi+l*JC z=tHL2;eK=(Z>!%9wt~E8M{XoM1^^GA)|Eo#O{At!c?l1vMJ1(KVsnaQeZzcs7r*~N z_s^*e0A~%y1gh2c*xh(W@Lb&I2Ph15p^{;?y6ZU;_CdmvhDZmU z7ejn<_U9I_VxmazxKD8A2FFKn6U`rj6X?Ssz4AYLYW_=1>8uS>9QeRLLw`}Hib70d zATC${n}QJfq%_%wK!3xK*X>_DObdz;*wQRThSpn47)x%cej2ykalrC6{6qE7Q4fkHt~xEfW!HmM{2j6B4(577Km^kjAO9^XPT;U9I9WhQ zseZ-Hm==Mz_orTr#tZU9%a5RB8nc-;O{Ey|6xbVsk^G+M$@4jf7z(%fnbY0kQ1;o< z0biUAex>*X6gx9~RXlYz_;K#bm0$G&k=Z`CxIR@LkWx z#^NJ&eucR5H-=-sk^?k|;KpAj-Yzi!QH7E&{}1uLO?np$yca@Mo`g3ono7JM`}Kc^ z_x1nE!22X(lT`};3jQbHzX<;m@$bgJ5C0tDi`bwb{&|J1LXf{AP1pA@yO!%C72@!( zPC=(P{WgA)#={7w?X^0Ngk)ZvPdqb>ylw3S$( zcq`3oK3Gf(ALMcU2=6ei!yy6tsTL1dR~t-6oQ`G)*aT3=ufZr}TR%+&_fx?qkk`|0 z`^hp~Y1DFw4tNNb`-}G$>)6=?{hc74Zi@JE7|7i+M=81v@wQnqF7eG@0!M&vAPA_I zBQas`bcjZf(1=W=wP4$)*(N&5U~RVNMAZvE&pxm12`Cb(^N)Z5Vy_dw#SPpO3E0T+ z>El5zD@1Fy%PZ=ovy_Re=(98Bg-4Mb1xsogz7W-DA>-I zAMx29w$Zm;5b{N5A;hw=Y$NAmUc?92kdY2|c?6#>x(E-n{s{wrFvx&$r=4f$W*mXm zFJ=B4c0a+!aaZBN47)!9da@%p%zQ=xuLYs57Qfb^Huu12mi&y`UIV&RTNl-~O5&bT z8;+)s^tJ_*#v(=)HvH&>$A_7gEJX$y5N*1vPiM{D`PG6K=O#SZbfd8 z*ZRCo`L$N6sM3R}9acs+P+_uGsV@F5B&w>+8UP(K9H*V+spcbvh-_<)G#hlJ<3B*> zgQyGZyue(ye;qk_sW+L1k3@2Vb^E&0r-uv8Rt7bo+UL z0qiR3K?NDVXM6{S{2M@qwpY`P^(X?Nj5ZUvdC3FhHUREC0wtD$SQwM%Wew$aZl!h} zErj!>g+6n_J($r><6KNejhO@$91wqn-$c$G)e^+-GWTJ^4FF_u|eZ;UwP8G!#OlApYgx3FF0HzIecI^gn1OaeZvDNpc(9Igi}YX7 zI*O7_$N!~+_3<-vtNDsA0 zG@AL0NjB3(`9T7QZtuCD+xTP?;5U@@rP!HduxVLA_n#;uZNNMgFib%HgtP(L1kk+8 zNrL@9y}`nza7HKwfS@-!6F_AW0Fa_a;+R4V0^r!$s_mr?++Ryq{6pf@*wg}V>A%C@ zDLxyM2jUuI@?fl=5L+&gTh`GCY%IcL8l#>< zIcvpqFeN0Ru}f^}OGLpiv9aN5t5^t)$MGz3t1eWoTRGIFtTv+*Sjth0tA8ZEL%b7T zr|rlRKb4~#jsT_czSCZhBz*GxJxlNQ(-YbS-_x)1K*U$#|B6K=0G)0;O!8%KTU)f z46%Xh8X;3HYT-AwmH9a#jEr>7e<+46>rL7C9B7rGy+4x)F+QT&Q2TN`=5rhzfoKna zc9&B)7e<;R7@=JFxO~-kpO)>5;i~{Yw8SS{ap;=o-I|fg(jHLt8RZQG7d#Ul?nmt8 z5EQrs1=x^F2JeTWOK_gwo3?VIaPSDQiQESx>+sdg{oH{x+&$e=5K5pg?K$Lz# zw511-+NY5J!xR}9J!+|XMKecRzC)rVHpOzNIVq#692C z#0o!DJnvUMs%+^F#&NWpd7Ywd5zQyC(Q(Tjyun_~{9;9WU;GWP+Wk}k9cMCwSU~z) zDP{`CjKNDcei6KO)lV41XA$=5fsEMVUx;N^jD3Ad<~S0U@LLTV%8{bmN8QI$c?#8q zyAp3vMz`ni+e}BTVQbPV&I~L1yom51QJ6yBAP8pM{tApm(Sv~tL;po89Tn`&hMq$j z;qYgye$f00r)|lCqiMY%xs;OZPl~}-439Kg^{#?RyS82Ivr=In!p{17>#*T$4LFbo zrFGth7v%=13pfj87MmsruPadBp{@~~-Z2}zjol5)IG57ccBsog@{8h5CHjRWRML-v zV<02={)PN}%D3juDe;Ne8MM}CK0;ad`Yz~3m1XfE<0I%$3%mx0x<++nr3u9&O)1-#@SZ(?+=p~hmd1iWFOp-xD8VaH&2V_k3dcN zSs{((4(}shLv4Y-5z03eHPttj#Vzn8ZUKP{n*-)%6d8sZEd%lOK0a5Jzw)-X_D!a< zDSUx#CC*fC!I%2N!-9p)(;7!{g2J$=X3BDJnbABBr zK4BCGh^aTQ&v=~}K`@Qa`KqGlKytNw-YIKxs<Nv51@2Btq-xw&?~GBn8i;b@_T8{iPKH#G|ybI|0j5Vp$Gi2(1wvo#YdZCqZH03 zR(-?>6R=KXBQ9D%T%>?0WrYhwK1O+{O)P=ZF3-pJqeS;lftGxJ7|&F!f{NklAm)=p zF*ay`eHiTu@jwql=})C9gi25nSbm>P90hxjZ7e)VcJgT(%C$AG|IuKl3f=zOd90v~ z;(fWe@$lW(fc1CaYjlDM4S^Z4bPe_0NpbcxS;&|x$hfHXt-aVIBON=CO82E0!L~&~C z(b?f)_#KaPK%k>TS^?<|v5F|(YJ4n|>P_xx!zc)ib_I<+(FawWNjsLW$C?*l zbWE>^&OXhG==$|IE%r7X02?iNpc-HIC{e1;$L~!wBPCxUTyU|4kGoxL8IMnifJIGw zoH+2{kqem-&9sfa2~sjXGMP%r?AhZZ6R7aG$fdaC$d@_eBj*+Cp^_44Vkky@BPm*9 zihLW@b8yyhbV*)m_!>4$$n_D`2UUF&)rZ#Xg;u5kf5id}xz8`-A$Qv<*f1tfPxS~4 zfnyNKSX9-9-;$apIx)008@AMLjPn0L`(DQ?=Bn{n{}_m4z44utn{n`MHt;P`vLn+8 z!>b}HUghwsoXAAHvR+3A{4TaeBI9t$o5oLh_eLCe$}i)m{JHovYRQZNTxviDWypm< zL_q>kWn37awFEZdb8yZy>>x$#f~Aa*+}z1= zpDB4JCmjKOYM;@Wzc=9<#jFd`y_A8+_j=($y^D5J@1}d^wB;`8Rc;iQV*;RK32hY5 zqs#cP8ArlP{$Rh2cm!=M-dc+F4mOFNKx6RGk4PO!9xx1DoIKN-am5EfOU8%$iIG&c z6Q6tS!{&Emv&=}e#Wqs$9dtAXqPix3d{(yK=5O`KXC9vnn_5w{t%12sG}L3ZYEeSb zBc&01zi;sn*Z~OyJ{{qHIRf*Ba+>M0e=q~c1b82YFJVJw)d@+iSVZR!kI~jW}(SHN!G9FxqZ;06HpJr&by1(E`XK~MM zh3HI%TgBEuR!D{f^eg;CEyR9|?(D=)%7aJTr-CH~h}Ch_=-5$W^c-iCZurkQzEVK60sTrE&rg!araXiWr4U zI5WQ6Tw)^CfhJ)1fcOjwY03!z%f<)0faHtv{BP!K!=H2>phDk}acUJyz-{o0@u3xP zG%p3!QaIfm#Qd770k2JRm?BeghQDed@dC|KvUE8kay76nMBm`ZbthfMgVhyi_i@-b z3(O1fZV^T)I{I@Fj!r)(gl`b?R{$iMzvk~eB>J!lN$Q2v-iPR(%(G@-mThaFOsW$G zQ#S94wypeL2^lN5))*>zn~xjki9VA@JkLfHx|8T5k|aiZj<=* z=P(`cFbj?qu@w&tV3s)ePzo09ItLPS04t=tN$SG0$5ywEW#KsD{WsxGya8j6e4$-T zL0`}Jzo{4^%FN=!Z= zPh#A@2c{iiT?wpxo_o;Bfj&$ujAp{^F)yQ?hkusQ&fR!0+SxA+-6Ww?SP)dyT$}*X z0^lQs zW-&^S6hq+T;nPqeHT1q-7X1#Dh__G*d9ccMc^+D*yvcgB0$(gWADTjeJlg89$IXNn zw;^Z6UNVSur}Lz$H#{+ zDvRfjrJg}V%n()PnYWy*OYTxt+>8grAI4{9%S0QxP2OFHCM9`M6@P~kU=q8;bGXH_ z0rnSTT7QTpZ{*Jw&jXTQTTfnc=07HG0p^$}wwW^ckiqDsI{|`nsq}tq^1Uj`)3r>- zEx2?wc#SApEGwn83LtAC6y2hfTALEJJJ1Mmvv&2^q7>KyV z$GF8R)AeA#+d`84c0nA^E@MlOBPC<^vh*_CpQho~;g;v~i+ZnwX3iPh;>%rV&6(z- zI7_7Mtm)YQd)9R9TRLmHTZGP+z2S-Sdhj^X12d*Pn?%C2onX&Fg0~mtL19XniHiTWmNg{S|&m$g~hTM%} zy?p!uJ}Uv8Jfft`8p&~Et{ZXU5uA*3NH&RnsDP`Lti4Vgg?}Ygqw%FTvSZ|WAp2%G zMuh9c!5}#4w?nKYrwn`;cS8PY1PDj4(2H-{Bk2-W8$5LE%Od{XEJf}|GxzF>X_C#s^4%>OgwCvYzDNB9JmleB_}JP~(^ z3xQwaJel0NhGpGQeC;(X;4@RD>6_0KM+cp^PIMlW9U~l&Z64Y}^!n$r&}bAA?;<}` zUhW&L>ZU-YdB}*v1&Zw(h%j!KV9rCzjyjIA;YhkChu9t>$i^s^hn2a1-j0e(i*BJmVC7%+5T8IWf!?9Lyi!IfL zR&a?n+(Ii{$9sJSVyG=LsxTtnp}D|lo5VE?${2a?L_MtDP=6ZK65N7y@DYS{;ywlo zfj^yZYWqKvvS7FuGW`?Szx(=G)7|1XsdNqi-%{M!ee-czs!z_t+13t~3?~-AoFV;< zW0=}kNK;!Wja(}H`nT;s_oG2etL#zTtds0DhEQ4Vy!^*35CK_ zw|dnW4yuB?%4>UaEqROKCBl&m*eOBTCs6hxWH;8{g4c0`##l%JtvyYk6)mi)B0M89 z6wmmC$4kush}(&{H3J@_pE`!Y&_iD7*el+l+rPP%mVcol;xiqL^Zhf)0~NkaRYv{M7d+6XD5cQf$I?7=P+DU|?fy;$AjM-rTp_dA=H}(=Bni-pU zih+|84R)D3qDS%~&ZQ4J$NmKefm9EsyVs}SYgq;2X{^;i1Lm@A%^^Tb*HDG&*nb>L z-U*{RLNih9QuI+M294`Ix_yd)3eX24WLN?*Qb8??3-kM)d!Lz15P19l z{PX!_p69vix%ZxX?z!ilbM9TIq3?Jy8V0jHDD=)Q=f=6&Me*H-%pRI9?U44!E;_!u zbk_Fx?!gihhISosf-bSfN z@`nY%=2^A;7SBF`-`=yU`8{Oz;rx1LpTzIL*#r0;H2X+?2hZ-sZy;70Y%PNt>D6Sd zdVzfcH6wRraY0M#a0g)B)XcoYx{CBtca(%H)gJZ@$ZX0oCFwP7R)FINIVwTzE!$UG zjwdb3^m~7`L}$Jo)0+aWX*EZHq63tb`Kd!`HUfi_&NHn4X&AzBvAYu6CId?McvcV8<{@Oc%w!qp!lAJ<&Kk1RWTTU9trj;`WUTEJ4_B6=h71X) zPnVYKFs{}AZe-qhF^T7NS$YlFangDo|DRNhP%{M3Q z>RS3uzP)UzI-+1*vhYFD7qm5B^zFz_vIX+jG>`pGava-U^Zfym?j6}lx_J8g=CNtd zeQvN?GE}q|ctwaBU*79KtKkG{7`6YTriQs`si66fPzR~tL`rWj7)1pI|7Wh*G01bh z+>vo*d%?-L?DW$A!NpJmSEQiLYW>IPJ3fBnp_kvRwbw_IR}_bLZMBwuHrTppL*v7b zxa6L?^eShlw$jxt%jjgfHh%@3PL~I{ExWdv@ma=gOa46}&*-&5dxcf7xxIjsbI?2E z5MAgeD^{qv4``ByzGDBoFNuz?^<#eUdq4?t@piN-nC^^L@LCidLW+Xe1msTcNxL{% zZv0?xiFWF0&+~*_ME(I$uDR}vo+m%2 z%g^x?H!@mE-uBUXqdbea=zCeddg2ChRfrS{X|Bp=vZsd1>3-^C{re|*E%Yp+{CrYs za^FqE&`yG!B8uvVz2I2rO^5KKvZP?GXylO21--aC40Z$@anTMfE)vzIWDTsvCcNdU zamlgUfgs#bvsD*ie<>Eg()f}>9gW@|%1I2Hmt(HcpYo7OrXE5azYGtA-D#?QF(HU42< z0m#@H+XgR~(OO8CK1)lqE{EMIJ2*{Gt@JUs6D;QdT3+N;D_K*3D(G*E9v`Wu3!+D{ zRYJr{6++K4HG~S5Syb^E^9wscX$yL}(pMZkQubtQUS-{Euv(=vneHxHPW!w8c};Nn zpYTSdDcw#vV+}C|)Mr_q(ej%pFdU)qvrZe{7Iv;)Gp3q@_@mAn8#3o^4gf^E&ZURp!3Ke<;Boqxen5mB=cEMoV?o$W zxrt4#+uil#a`0rI6DryRQ@ z<(H;ah|t*Gfw2b%0(~c)Gmy*p1VO}Ay`-H+TG%2zIu&~V+j=R?2wh+q&Ip(tRm{({ zuewX5VR3VBj`aEe4>)(prnDn)GWM9K=MAzeZ0Zb)C` zYad8^!YMjO4xG#!x7I7pb}4A4^^Tx7sI=sz>q-`gvJao^U*waVT924v$!WiMx15B< zQ>OiT50$xRC1jWW&fCjX#g!=^)Xv>d+v2!ijGl)yvH9>`;$GUa50@Hh+^GVgE)3aV ztW>%8?ojpKPxV&rG>W-`V$5xaLA<$kqK^~3gnJS1Dw{q5uhmjYZHZ+M?-f0~rDnLe zTNztocZ3st*#_QQ-pD}P7kLx?Q^&Q`j9_O^(u+_sJ5zL@|+3`HnWE>m}%b06Y}StOqNt_V3!uG&(4b;b1KP?53Ehro>^V>!1eUR=&P z^b_4D$7F6%teCpR94Kc6bz#V^8$SSeYSQ){iCWgl)H~3X%>LGk`}6WCY;w`FYadhM zY9G_z)iGv}%m=&Q4u-{k+rQou7hZrnJ{hWahf6z7e-A$fc%e$26QAwPi~d-~3OfK| zR;BBhv8bozU<)!HfKQAWq_+eaMLf9@f@~Ag>l$a5lXFw_Ij0!Lq%(aX#f*c|?nb)A zRjw3QefO+MD`;iVGI2!ev2iFw{bJ;18j}}9>QOeW1;E2hYDyinDLSq3j^Qp((^TfE zJ-W=^$bK!xJ-U6%BgvxvFNxOHT8-nC)HC3m{D7-5ddNBb^9mb1a|3#ApU1J@nY=~p z)npm}59syA)S)yklAPcsWCG8KdACIq|Q`X@xv-t>uD-g zF6YfuxrGZKdsZ3Ft+Jx)5t16702E}|-x0F=9Sh3AWpl49hkPx&xve~UawJ*m8HV3{ z)V!+eOJV~9O=+2amY#kxfU)z_%edj2D@oT+-7J@UpUSFMT~jvw_;GekNf?!~>LIcI zlC7v^;_y^K%ft~)8)8G!ZQ*zunQF?WZh3*`r#X}E18q7ym>iUsLg5QOL*J3sfhbAy z2nbw!kt~Kh< zOvrHc@N%@!{i*2i>Z>ZILyBs>mR%Cz+Tr0co>ApARc)e+Y#9!*xCw1>LJUFX7UjlPzw)!l|41sJ7$=Bd)&+o7+pqxz*(w_|@t{o}|XlZ(>Fn9=e*GjnqfcXAKP$z2hAStwDY`Ycb=LbwT8>KfG5x6ldA(ekML#LV({9}{|ksB7A= zMGtA4k91v`y@`8Mgv85Q{^Ea;q^pWzg7$l%>c8nko_P{5N$y7p=-<(DX^Le^67C@Y zCnsa)wYO82XRes`%HkU+Mfxc5YQn#8n|1=hTDB+n41*;RXA+@rUy+E0P;+H&sdh(h zsdztSuZ1vU(m8mTMtCg;O1iP{(%4if2b=Ag`rhA0eJ@D2kYGwst2>C)#-lzE&c=ZG z3Gt!C5^eMnN#3iU!PX)|P15JPlfEHIt4&gva1HvM)RDSODu^1j9h0kqV^XIAIn9#z zSg=)gcP8H59seAGdP9#jZ;2{qe(U3afbvo_DCB?4^#47LP^+$IbZY6eJfay$8L&PL zyxQ+|HD)6}`aB!C?HV14V>Au$%I=trPE5qaJlh?!*oisK#5~*`^SBdJW@2V_$ILY` z0#SpS$%nnXYmOdl0r5tOHE~z+DhprOzsA#al}^C|P=>Q00OYQfn@Ab7nMVKe%;RFV z{ox#|reRq%(!D82CkSi~6?!7w+bIVLvPf59KwnCPAe~PlDmBvO6bshn6e|Xp`@_0Q zb>oj2{{b579E`Y$a#Im=TVL(f4wY)scohaWAr-Rw5WZRT*N|kZDq5T>2-_%ya6&u5 zt6Kg$A8%iJxQ0<$uwWM#pxpB{S4AzL}46dWcIg0uVA>07T zK|o@LyLyC=jF|CFX9*GF!20;R0lm0#rOmPn^DR37Usxz&ZI;NQzNDS{wk&nW%2IbE z1lz23@Ir%N2?nS&zsG=+_5MnYyW&c z)$ca?mMF_)x@3xUwPg1$6OKDtl)Q#RTYDF4T&pR9HoBz%)CX3pHIiOu=VOS@JkF&) z!h0xcC>bAVCtcxSx22BCyjG~eyz0XebFL=1mW#&~YWA{&;VFJi4jS)M=Vs&0-2=iQ z=5QjLL6d)SfTE=fMJuk5H+JC3qGxoV+^=4Aoe5>ehwIfdUXs{jCkvm>88eE&7fpe; zVsytM>yo=EE0^nSdrmvpCn5&J$MePXQ#UUn`z3wm4a#f|cQ8mU*FQ@5LE?YbE5atD zF~3HgJW`+U6oL7v8AQGITsCT;j*5Ov=)>Ki-=Cl}aL4*Z?$nvY{kS{sgYLKz#Bs^e zbGzeSHF1P;pCHnrU7M_7E3BheS_x0O#tT1N)SA!sAZIFQUC?;Yo3?}A7=nW-}K815f9k4`SlGf1*!|j!Tzbz^A`m1YgB36#-$Yzh_ZfKWy+CNgwo# zUv6)=#aFYr&@dx|7a1sf1vtNHM^7l>^P^|WJ@&&yxH&+6Ke_?oT(3m-cw|h(FC7u>8;#2}n!`@NY#q zx;zwR{A1Fk5BTKhPy_zrzJPDhfN#=LJH1VC&T!&Oz4~4xZ39dhSII7X000N*^N_JwXG9K_i>g?zL*3-@h@OXR3cAWD~729}=) z2qIh$08d0q*Oz|a&D`mT42~!cWNX|!>moo>&}lRbF@bEnJL2-xhJd!lOSCsp!)8ZA zkHIT1KwhKiF3{Ha3~YG@w#nwa)9B)h&hAw&vjB_DHU0hWng7|CIsL8WkesA5#RV;d z5R|B&fELojR^C`7CKfmHYyp7@dg1))JP4v)WFDS zBy{RI>_4oB+ix9tJ9y)@lD9KTU+Tq1H%E*}*D`U{vX``Mrnpt(@oA1?*+*@9{Wwhc z`+$gI>qG^i7eJxBfzOehTZXmmT6c`(5yI%;gsw^YsXv8g`u&D8{y+75M&46d1;yDB zu|JIXS=+m!1;Io$#+cJ5zvybjcn7f|3X97PExO}$hZfPGu>CsQW-*rn9aj)R?@h7t z#$hP8E1I8oD0WdG!#X1T9eM)4yzc~lUr*rOw)p?d+?S0~vb!sdB9p9h@_tQ;-nHuY zzo0f{!b`eD_bK!4&!#Eqva@N*x)x>AlywcxrYY-^yDTNIk%8;uYn9%ePK!%huwbqF z-9@s#3tWOlj%*CsgW#%n+}stAXzocu(7?Qm7CUlm4Cg#eE1>UP-Asg!g)=sD(;#REpUEks8s=+nAk5zq5 zou>&S9anhn+SpO!=6(?y0l_X<8lH=h)gOh593!cz!82cYc*}o{71dtw1PN#A6OoPT zyd|39&~8>_hR@{0+G@P}RF?E>>R5mZU1B9S#%GNjV<8=3`LW`6*Slha+1g=z^0zVw zlRoCI_cVPZwb+-kv7JzXoU1`le3~vl>Jy+nO~O>!V;ZcyF;>@cV3ECj658r?5Vm;UxNy)ye3Yg`#^FSRE$1ds0UFP%1RWT(B3jnwEJR>7t9I1u1M zD*HX<^#W7gH35SywRKu z5_Sn;<9-58hn;SSUagDdP4FUOj1{(zsmPOMu^^N^F_Q9)y@Z}rtO3XZH)m&5L@&bO ziim&3R8h^jHav2L9BliSawJfRW0R#Q#O7K4i@YIZEOlbUKNcT17a0Kaz*vwSl$1F2f(WS#CGB0|U>p`*uBw<*6kC@O4@ zVn&8PtjKf_BxnB}M0MK5Y^IMoO&^WceIyr!tQ0sJtdV1x+ZS0=tB8k5>zr|dxat|X zG{Wli88(1V2Qq|!2>3?B6T)YQ;kZBr-A#e)Fa?}pVtHkdtH+j2E5wn5449_Ta=t&eEdp)%0aH2( zTrbnO&IoL{-C;`04YHSLWH*&wC@KO}94@#}92tQ;QaY@7utKJVBtkN56|4)V8!7~M zWjTlk-EjAAAQxpzGsv0g$075j|jrDYS88Zt zdP9?0#c8PXm%CSOP?vv8gXoH@GUv}m0Zi)y#DTI%{iNu7)}WL zJ^x7(c_)zriF}AiIl~{W&u0^!^Kl51LSg>xgI>+IQ?#oKEGT49Hz&Bf@Bx=JP$Z9f^WeFI}%}FG{86Y$bScSM;9@ ziQ#h`od6~un4`BE0o8{#M(koyhoqU|k!>_nIGxAAy`+^_J;Cjn|1;jJQGPo%{!PFW zpUYQpv6o-eru^%J$%!9KyJ6#p(qTW}jA-wAmP{RuIaS|4GWhbObB4HP6ix~jpdqz1 zzWdtf>+#(;%2?eTJw$e~XQ7Po$JC+0);^S(>J@A~oM-Jwvy}<9tk}2}3hG~%dekzt zTtO`~wkUJnEsX;oGy1PG@wDG|z1nb&ny9uCx4RR!mn3c*gu=+u5AszsEbDDSvhQ?c zX`-T|uGJwzK^dkK5{QpxiWp?Z`;ssu?t%MV$~$bu3uS;OY~)ukObfad;xf7`Kb#wK z4s)`U@5~LME4XXZ%Fdhp!9i0IIh5Y;UJ-&1#GL{@e4|S(9ilb=7^`(b+m$GMK+fQj zoVF(Wf}SYWCHr=&quyeKajb4AkTj+1FK;;fuhcWi-yaN(Vl4ViX-q6>2gXjp#kQ#O z4@6%sRYk-h8K1rX^PR@9qg%9I_$u`Pg`zg_D1kN5WL-V|PAKRPF z#-ta{0g;v3B;;|69|6RyVVDZSO`-3sPPl@;u!}>eT^GiXRHF^zDhCI z_Ek?mM4!0jV=^$cOXp-q@|xOyxz5SjRnOWbjW)*dT?2{GI3R7-%S>O#c`<&V8|{|_Z()Z%!86pcVKoeKr!9&P1Y+E!PyURY+ltij_L7pya%zs zcz(XDAm}bwC*xM3?))AJU)8o?^)2P@>4;Q}hs8mTzD5yZZ@FE4IR~XAnEHXp8OCzY zaY*a2SVo-%&IGT( zGH#2u^QudMv=w(xu2esJbjf0QV@Ebdvvb|DK33T-L;vjE_Lr)6EkN0up!NPu(f-Xf=zZhs zB~jA{u?t?igaHtF{c3gPy`m92)@{GlUQ?KtsG=pBdFndvb&cDs$z4}U4`g|ah8!M) z6+@%v7F0GK)O#7$aiq|1kJT$|iI(M;#J@dk>c?z}XyBIH`)C5%wG(24_~2J*4kSmxIoyIcJ1VC^ZS!tON01lr_BTBueM*Z!Kxl zg}f(){Dwm8Yut0UuunJT4U8cO&Xl)S^+g8VgzW z5#8BWsgpQaw(NUNwIf$q>-YF4xP?SIlwh%xgd&nt(!){`JeKo0pHGnmS)N6DVpph% zNGxdH0MooL)@GWQnrK4aB}Ai?dU3SICJXOyM!MJ*9U%*MqM!vz0(NDN<1F<#z2v9~ z2vzgXe z`Wn1MeA9>|7AogxAb`I+*vTZOY)VY|s4AV9xfSm;o$84T=?=Tr4eLV>3)T5B$QXaY zzy_BHeH2vtB~Lju+f9N>IYRO*Ivv*`dq>5_O5>Zzk=tjSj%honPIVz161~*sjGa%t z(VQ=ow~_*(lp!<*J9v{~QzNU7&tQ)#|Nmn=2vo`Br+Z zXYQ>`HUR;ZlLLUTmIn3!;X*)IV4AuM9VEzaz_K~vt=c9Rz&;B&5&M&{J-pluW_+Tv z4pgX_@+!Dhq1jGZu&)BuyF)}z9zoo49_0JZ-N z{hbWGoeWqi%gN6-=W%GvAyE9416^>Oi>p30`cdR-2V6fY)M^xu!bld)GCW9L%yI5*mF^4>F6#9wB0apxRoSaEM z1mfvsANy~4%?>U``>&~=?#vl(LRM?LQCVbUq@O(38EK#THLs{PL@8dV!bw-1Sm;XL ziAdl_aBh9e)o)q1ph+d7{PU__I6m5E;ix7nM5Lh2O7zCw%HR=a9EZ*TiCW zcMs?K7Ps6=C)N%z;bJN=6j8|XYSPMrbz5~X4)eZo$l9za8cw=T!vwq-b4S)35ix>is zyPwo66#FP`S@3L@;Ku5fprW?vKV+9Y&EXf%I%F9cdDR@1EkLYf6YSE-OpFdrH|eazl<=2^RPwdfj8Q>=PlTJ5ta`hp=CYy2DUriD|q&;F96x_?24g*;kDZ6e;m2^M zkBz0s;S&>)iHVpGE82-7@k2Z|(bpafFwTGay>!8vV5_hj>eqer zLGchGwsKRh36()_(h)H@`yv6DqTBarEsVl!GGN>8~S z>-on%N8%_7`Q12SbSz5Lo1bPTZl*m5lu$RtZbKx9y^I}^2!a_UIRu~Wwft+RjTEW( z$UT;Sx8)hL8%^&Lkq@)!69*Q*>_zkQW;0}4kkb0K*vhm>%Gux9gZDo=dl3BDN4{Di zXptjd-F4Oh-*edwa8u>ODcL=_HiYO(v(zML+x0hX`;Z*_DzO1Zj8#T_|60yHzjgAJ{AeSUh zAGsb4jq+z@w|s#;XshMF!#%CgelKiub?vttR2#8Z0AH0&P7gkrVEXU1e)5z7_ z;<{8DZ1h#HNN&emY%Xs#ZYcmcB73u05+^2{2$%s5qHu@??oIW4AxFHjN6)o=z@D`? zCOQ`&CjoasP`Awa9{8(@H2F=AEm7aH&4)1=3$1nDD%GdXTR^=lZ|ya8vd67gYn^cJ ze9~`vLCl(%>?0cxJCo_Z&d|HePUVNVe_@X_`^J0KX$Ot3R09qgA5dRDmJ7qa<=3kX z*?5OG>f?^d>a;WHb(>ZnZ(h)eH7}KFuzB&SL(NNxD$*}vbj8JKyH6*lp|iTInd%b> zLH|m*gh(R+*PdwamPD)nfBfqMp?+PNBc&LwEus^A=S42Hy($?!Li7hy&{1 zY$F`Ow_I=Z5KFKYA-`tl#oN9|KZyI~mm?LN)h}M1k7avxpBScR`nF9eSD*Q@o^QbL zfVHRAzY+o@qL&rof?=gPww?`0%equS@UMBWPE%@IRcdP>p z-ihqmm$O-Xn-xy|93B;ny9i>1&hdQb%gdKn-R^u<@>QvBcD@391=LmY)lyT}Jf@D^ za>!k;!cL0Gd`(t<{bh@efYAWSU>)tt@=~_=#$@LyW3@k-74cf#<%J$;dgLeGtA2UV z_)2xhLE{7J@`J|Lt5Mnbu9v?l5G#QkoYDu%{nMqd_Se*@I72!F|GIS}dh|X5Ug0nB zq|Lr>Y1b!0pRSWD;J#vkI73VZa2RJy23W{W#Oh~T6fxYm5>;`UU@u(a5&C7d8q5>Q zySBqPSPtT;#qGbQ@ANa-x{98wT6wDE*dD(dmTMs5MK@Yda4i^TbgF#R7KHuUAZZe3 zp%Y8}^;O#(GMZI!y~CaaIkOP$(cUIJ=^d8t$@%!^mGnU@l^$h^4JGx}w<`U6io{86XF z0k_Xx0r&{T-OlU?0+|t_bHRNO7b2qdBaEIaIlLfzZzdge%{r3LR zwEZX`)0$o8m{*jTSEWmD(V%RX!hd4<-<88=LZ9iU54mzcxgZ~Z4f}x7$+rMy0C-_n z29&xiC?|J=aEYyssL`2va@umXC$YDFlqU{dwTo~C<*r~rAr`uZf@2s&$-h9wKy z!2N>ub3$`_>7*W@9gzj?@Bhy9($7o_G8*0!n5cuJg}!@Cx@DEky|3x)N<=JD=B!hN_~z1j+xXz8MFv_$fSf% zG9ymBxcqt}POMkIW9w>)q|NMp6K7-4mepo&kejT+>DOXEx1f-fRomDyQ-uGG+>Tmx zVy2@W?JI+p?WoTV+20u6LZaM`Dx~AO$8e`~k4C3^zs_{jk4**AQP=QFN7WrkM{U#% zlc5S{AsE~fg30@ZK;X)S;2tt{LlDhE&?gIl8kt4tcX?%tby<&TBDnd`KBb=6qtwH* zrT*=!OuHWJE_FVyw5wk9&dim9Kd?9HruicCd+$L;^#C+KIc~E01ET!{$5*PUV8?;u z1L}^i4;EjquFlr)>{nQ+yM^jnWU3d1L)UzJ{{cA^cXxie!glJf&jm zZWp&SuY*W5k7ZZLJBvQ=uodKMuwYG_#ls8{7DTOiY=gX8Gn>c$mr2nO>l^Z2R~+lb zZ(*!Bl=!`v6-rQ4J|5viCtN6}Dbc=m1S3Y)A3&o)*avY za;D?|#v1#Y-K29SbZJg~G&?#h)+*1bO98S@fRsDD{*1VTp~rPt zPK*A4>@lZB=@FS09cfzh%uAUTeaM3K8U$4OLcIkv{!P<|sGt6;z@>rw$1s4bAh@~c z+O6b~0be+UUi35#rz7d%nYz=<@Q=!sPU0QMbX_GZC5s+vM1sNhRk7EozP`LtF1E^a zyhN;k!{@xnvduLIA>WbFesV_`*iUq*`AD5hMur3Y(!owUeCo2p^vHbj57Q2x8Y=A| z$?Np0KF1Z&Da79=8}7I_`>|S$CMI2aWwE5|L{OM6-HK#|E{u&zm(C>^Mj%-_%PD6N zsl|{^1lh0LtlP9s%5P<*pnVd&`B-VgYSk|jg#SMYk^_?~o$HLU8<$+Vh5g%o^w$CD zmQVG{#%K2m>R3ci##NLkemMKQy6mPb*s=*n*~!9y*jG26-R6q9(RJ)X^BBasxD7k& zP#bgg;&qzWt59zt+hO;HlNsIR>gF9HMU4){x7$paEYnI%_*ci!5vVg`ej-Do{sN6g zaehnupL^rWi$o7uq#Ma|HV&4KWoICX?qDfGBzsyKnMOy6|Et)?!b(-pzwdxprdRL7 z?EwM9mSl!<0_@6b92}b>?v#2(P+w>C^0WIsIm`Lv-c0{x_Pg1B&}y!G77ImDhfs#Y z-=V?R#_mYCtxmNCK@4rbqy%Y5i5f!7t)$&d4lDVvJc6ymCA*h3O12~-?g5>EMNDD3 zPQAsk^_Icy9#_#bYA@I0e}MfcdPq5N!;`aGR3K~As#2DH_I8m9O+XwxQ{5#6p%AU2 z=A};EY+eHDTJut=E;BD)RcBts_bARD{;ShhznCf85kd&!4atVjARMMp^cfYZTqg0kM5hjetJIgVzm^S` zxs}1tUpk>a^?84dp|>y2VCeq{LI_I!aDMNL3;5kU3cwC9$8B)vkX}X^* zeOl}obZK{pC{4e8F8fHwD6~OMpQI`1IukcpPeq7EgGwAJgU|tuGDn6D>YpWg0Cq1j z5H_e2fpCFoM|_Z}s6o}5R2#CXdPzG(>@fp&-4eqSr|lE6dHS0?zscs=u!B5RJLQyg z4sEMqr(y20lubh*)O>xpH)I>beh{S?A~gs$XtnC(s43o_FJw+C^M5sUO{%6UE$@g! zs;hPeTAtRX_qv>b>`*f0)V91L_P%mNdH(0DO^CbN-MWx(r>?iIlPiNyvX*{o#5rG3 zqioddoI8W-WqIS|qmCz11q65;VyMv)dcgBd?xDLK&iep(nM9`6GXG$B*`R)$jgKTm zk3Uzo;OOlIM6iI~o?In&-P?%kIak26vHCK1Yyvl1DLR;IhC#;hvKoUUmfDWEVgYB^ zUi@6$t2<2JAjF#M+=_m5N~4XWZGc^l*bkMrQOrx!ly!JC9ymKZ#?i{+R=ju4G$kN@3i)e-#sbHpErof77(6O7+Zxik%P{#oS}d<(b9 zw>S8|d10>hV7z|JsHZL*2a25$j_*y!itVq)*dW1pd4FaUYQ?Qmt!o@OjE)I=qF{WsJKu9p z194&dFwdes-TKN%X1NApYOF5!4`Rvlac#18FKU4Kch4Bma$&xe>{p7+RIP)`ikT2s z8M797(kr5cRq0fpm-X5M2lO4mGY>WX@F@hTHy0ZwYx9HE=es@kXf>wfIEIxCfDuE{ zPa-TKWYXyP*$qd=PGDu)3J4+_4`FV|=Q=)xBwAVQoU0h7nL0-x<^yL0#|4MFGgpW; zU#KNZLnODs;i?sC2q=>B>HJ5>ZtKo;;2MvHWC(AAAP}}jrbT!-xY8bucewpAcLupU z_avB%sZ*@vi1h;tUE=y-M5nx9&m)-zktx-mz@HIlg7OHWgy;z}SP{E$yC9NTc z*-7zl@19W)hFzTQ@ZSZo5epLm2KOO{=2v>|k=r8l`{|yzOaXlR9hx8Ss(NTB(Zu4D5RjN@v5DvGFVPP$RMUyJq=e)cwZ!%6|x$5CnYMYd5@iBT6`2m zgzfX$`nat*OPd`e4LA+GP!+hk%#l#j8_hu+Yh z>wGjy%&GcA8hIRVx(`>`%lz=FuggH2d!(4p zcuUL;f0)G?`TUnVz})rdK_9H@Fbr z|5;jc+!QtS|A^o4A-!6!i{zpZT%G z5*-h{9ed#80#{0-oJ16avk@~Tg2Pjj&> z|K6%!jSDMN0!C;Fbk4ClON`dI%TsVSF}h69woVr|SN4qdVT~_TKv7)LLDrmQmAr{M zjaT^OBfpjSUX87f(Dg1MrHu<^uGuBRdx+TiemGF>oVy;R!sn0qsybfhYH3CV)zy6e zYh-O&L0_;s+06?Gv$*v$dH*^=lVY9r@WvMd0)eMV41-u}pR40@`kkV}8MkzfzHGZ6 zD);Hyd#lMTr)={%gLA@AzZg!L^#aYMSK)SsE&Ho(zb z#OW77P-of(%9NMg^JK^j1;qZF#dvD$ak0+)Y3z}XF_nF!bMDa99TxIE)yh1^tzHuQ z_&Lkk_)t^N7ElnYKe?%ZxS^ruMN4&8NYG}2L^MCY%>>oj-xIoB5}phlLSX6&YW~== z5#Qd7;ieoKCrkgq(GBOC9QOca?3`MAuc_h@4r`-_QpBUYAmpCYPFLCjSiJytp51aK z&!B&G^c2|d%Aoyjijz~3+g>V%LDEO+w=Ug5CqJ1Pg=;^ggYXQ97BHDP6L_jk;93m+ zrGuX5{}uGqZo|0o=-L*Bb`6KI7pvav02$HXV!81zn5;WeB8q;+>4^FldnW;jORS~Q zl=dvB0YcP8NAk-oL&b8=vQ`2^_A1H@HUCYg)Eja&@++n#iA}3INfkXJC)+wFTUDD$ z{@s_lwptsPi&6Zq`<^PH4Y2|7yDN*Meff1qd-2;lR#4mWZ+k*zGALR*Gx~&@%{r4R ziSOwpu*$|V*zzhjMz$>Dij8Kovj}<~dbMgBC)}~3(5P+Ez5(B@y=pzr?+kfr{~ho> z^`s2sQFhDIJn3(}<>4ypK7u7K+21Tn%x@EjNBuh*4ROkO6m1I59#Up%;)cU<(w1GKqH~J<_RUb!eWz`T1eKU&^W{i60E` z!YXGDEe5ESIx+S?_sdEPX6WT_cr`^NfAK7pidf~{JtAgcH}NZ*A6Gf$09P2;pvByO-~gi3I7{C)X7jfSg4C?oLD}nnYh`5^?0IOA^-FDT&ivlV~Sl zKIg2vX(<4E7HLqRRFe|(w-QT$RL7U71BHBl5rAUF?fR2zFXu}=#C~LA1rmvsPl=TZ zi2cyS3J4M_pVCZ?0WHmw0jK$X+1Kh;HR{hU`4si9`a0=5UfxIRKYn*vo_OREm!u}_w6cElH&EHC&@GM0{bB7=bw-_sa)SjfJPA#c|BA{1%&J~>?UmdOF-$jMPnj#?(jP;isoh^_#AjKAiY0uL8s0~5;D zaTZN-zSQZXgpld<>g(~y9+;elLrdPjP@uFIY@$xV$QzE3Xfw+_O|3+dxHvl6p1+V3 zctVbH@Oo=u^i+O}q9Y-?x|>FcpPJ0-bvWUvsYYolilq-W^8!rk zboB$&w!<~J@~MuW2Mme72tUTCLBqY0smyLH*LnK=`uhTxT{tH(Us9w>fTVY{e~11e zfvbJ~a(?q5W(8P_-(87HHQ#c>?W@6fIzKW075O}>LqDNMWLPE{SoeF%14x}0>jDzV zklGAU)IM(4c<#Mg`eIN1?A{PS&s^bNHK5OC#=dkay0O{*xa=F>`lZ9W`}&w&UAt{OHe5Bav1=0&!*GN zm&|+SN2U34=F;ir%b7c8@}=j6jBRk#n&$g=P+~Mh7~lw6f*DWhL<7`Vr0AjQMS`5u z8Nm4x4WGf?x=z}v4ej&46o^zSl&WP+ar6A`e720~)ja=gT^8i=NnTk94Y|+Vr zquQJAuO{5n^jjbg`4(wdWDfp2Kc_SM?vYL^eRN@_GgrS&XOcVmlaOylp~l9~zsteK zE%Y)OCTBA|CK=){OPlke1L7|~qF;K)UzVf#JiTDtoLj&zO##Pc3%EiG06=L}W*W)J z=S-u+5l4Y~AjcormB(N95uN90dQ`UP=uhP3G{|p??|eMdpzq*?UW@N3j@`gAQx8JO z2yl`8l^t+}^iTXEDFv=t*gCr}&)(|V*X0ZyH?U{vIL+@}lBtDl(57)PeCr{S)P8lg zrUy+;ypn8xj%0oTFi3!U~4q8r;PSaz28*eR| zq&Lr>%6r$JzoY4U+@7Z2@j}Ia|FtyHh{ik2VmkkhsyuawfML#z#iqbU_`Vb&yuKpd zM~hwRiow!iIauAte?UOQZeFt$=N`gMA<;8Mv)}keLBn6OX6< z3GSkv_Fl#rN?_lU#qK?koC!{PjKMp=o=W1+&&Fr<2I%5STIf=rFz{GDvEM%%ejlOa zM15tlJWq-BVQL!_S|GT26pwGhm1EQb1L59k-ap@Ch@xH|Q>TL9hZxoqEv4UQU6B;`=P z%!sZ+{S|h1eOu_*{c|6Qz8RZqs!x%nFWtty<02N7%S=8FCGwWH1aToUv1I3_mf(%umP4OwX&qKuEjLD%OT1-Fn5MWneK! zIDTkA|K%g-x$HWzJA&{<4@;MZ*{kXxe~0C%T`Olg4I;>Dc%gz3qpQ=U&$C;@Gs{>B z#+0t~T$kM9C#WTZ%JXc96r0DFbUIyF^k_-UGS5whQa3hVoPVTCf2Nbf24#SV;+3<5 zF#HRRNSA)!4U72h^{dM(G-j9j6RH?3EzP^9J4#pxOs4$^~e%YT7eZcl8B zZ{3UOB42XFy7o`g!+;_2faGbP)5dRJ5RFs3yL(Qd|OsDxCPJ12=q9 zO81||j;JJqZ|E$(0Vt^~hH-Z0m~5J(`l>CF>dUN{xDi`IRUzM_Ql+O!j?pc9j;weQ z+o}}fy1KA`qo=9Sq!Rd|Gq{LcD{4mUIRbV>_DGiffNXIEjEdk3q;3rRH%uR3t^Z61 zh1V;cEY*c4ISE#}gzn&=c9uKNzkHl0w9J&~`OC7Z4dGqeBL$rr5F_oBK9TP5c6WtE zSM1w70NIR~m+37st7zDaO5#uBf99*^4WS zNL_54<%(L6UUpteLRW<*W^F|UOM24nXCBVbZDaS-ZOxm}5tRk(^Zr_jSK8{ZOz6*P z(Wh2Jt5E0Yj|nmyq9XzLKH*#>=Xe%p4TCd7a`3bpM_C`9xsg%ORM5!auSK)Ss9RKTB)vWR^OH%Lc4S(b8}C!?*?31ktOwrcKHp(L zm|0@_Jd}k{(&>~|87@g?$S{V{%j@Gsfxz~2Ka_Qi|CyW!L>sn(B^ zl@_YLENEX?CIg*rsLbg4G3U9WnqkSf>jtnSyK-a|j&1CmwFMZ4$l*!p6F-vUkrL*D zh%zSY2rL8=2epmWy=1(1fe0*DiG>sZISup^pYmGz4<^1$M?Uo;f)U9<$QVR z9Z4p9yohtUU`4?9tn8L0v{`S2#RVTpkIv+&b@I%S^)5wh8?i@aVnaICNoo1e|NkyB~kbC=1tZR=qB_KN6PR`rW@giSwLQh`zGOnkvLwKc~jWvnccj7x_w zl9!9o1pLkgaQ@=?$&``Mx!dFQq|Q@o{u>RTw%8HGO6z42V>L4-=W*R1lw}M|wKgSq z2t5s6++&r}3_pyB9&{K67T+NO-;2jkV8HY94$2GJ9r}_b7JDKZiHO#7J~TzDw5)Nq&*j(tnMHZxkx?#Rd@K5+_>%HQ!tWH55LNRG5tui^<4NRK^rrLE95V4zd@r;ODN-mAFGb4$NS8N2ME1f`Z$+xLofLFhL zIxmwddK}567v)ABo!rWcyXkuFB+q`k%uq--<53_TR}`0$QPUYEWVeJA^Rk^6BBT>z z<-AA-Mu+h-MqUQkKMU}5z*Tvph0Kk$7;#bv3dk&`H`ytr>jLcvTezktvUQb zrJ1iAGV6JEzV2&Nis#46EGzEEB{C!D6J%lmNR|%8Q*XKi?1uFap(Fx%SefDnA)@=huw7HWtxc;-T$tzLFwhP82hYtwa-_-gy3!mnl5ysmk;ZEeApa3Zp9 zH>FK~QS_EmRJ|-6PJ}vl#~z%Jys~q5n0xhXw)>&kVfyv0+?NS?v9Gi>Dzd<8I$ZgENE}4^>^YFjvhXJDcu{T zXD%dY+Rz}Y)6x$M!v(mRxS&LR_Lb1T*>uZNiGjKBI?-yaj=FsqW#n@UX)TuA1#Ptj zD?e=q;(@`0O4Xt2~ zRoC2?- zFUJ(3I|gVNEJ!&j7$9K*lL0qev)xmZ!Z4#f)9qtC=PVio>1Hjp+n3%dL0NKdKop<3 zT|(b2eXzx$K2LVf`pkZzVf+U4jCuY(gr=0eP_cDtD|G zR|QQ>)j$k4vx>;Il-U2g$(DRMnkC87zVBoLAJ&1fe*UkbR|X4qN};K~>301rl;5m( zvEOi;%XPb`Q7@r_e8Gaf#%i3JHTF@d!M^R>2Q0eIil_hE*qf<4tm`NXwB=@ppB_B# z-<-TpXY!uwXQKV$6GRAj2^l(KzrxjlkANcCU0aYjhu=Ne^&M9H_6As@Xr$kCgbp(kNr`~yrNK~h3P*3PIB%h)l<+Z)3 ze2zr&6z0i=?D<|Eg25v035fqC+&vw;Di3oiwjyXPNKHFYZ(YzOIR*U#5?G;Xk+4PV zt2HOqMpUp>e1O_-g_(nS3!DP_nF9VU1;`AL(w^iaHFVMoM{5`>R6uBe!)qZf_#p0E9vTUQHE6T820CsjdLPH*078?yto>ScUxlj# z@M!vvEc;aZTL?wT`Y*VaLdJWI^6%z!q9YyqmqpalPr0IKFUzfm|MN?5rJzMkq$53x zcrpJl{qZkKRDtCCHgCoTsWZb1WY)`E-wY?3)p1|n3__l~YT_5BonfAsL2SY)1?6c0 zXxABpnKe;wc5Y?Y_%G{@%lkERi=v ziLYQT7#+mVUD(O)P8FhslIMRbwmQXUTk0HhU*FIFCGcpk0u5nFkGf`}z)JoI<%+Rx zbv3g^F6w&+_SSUY*J%3ass2M3@B84I*qB`_#XI!OvAqBry5%@fH?g=#J}OEn&XOv8 zhGl=j;t8Meae;OlxsAoHriA;Ax&GjzD1NGOJJ^e|MPY33Hp6Fh)RZwdSaE7A8e0#A zu%H-#46}u|i0u_0%6*aCJMK_ZM`|2oyY-~b^BPxi;T?4Dm851jB!N|MX=ZbV4js8g zuOnoiSdl6S*=&$p)#|5R0%Fu1Tnvn^)DgmiayS$_tk(a} zXdmW4;mNWyI0cqntc3JUx$Pw(|3&VpPjay=`Vm)@O{+G(r!N1Tv86i&c+v1W+q|q! z7pI_BEKJFwq54fMq#n!`%G!dc8kw^#0d-dz{33)logl$jx7e^@iZOdU;2- zi}#Ip%ecNjA=?G}#!r^`F~2xqe!*~c+=1hpCH~f6wh8-|ukq^B?6Jl^_%UZ`r{q6n z_W|pdX`&_^xP5wpq{knyeKKcMYRrD&t5@fKnjv&K`|qAif99^su_)|0cU_Kd)oed% zfu*rPHuOXt8bgi8xzI9kUN)|zJI-8aIj%eI>qSypjHBWI^g>I04;xw|dY>KdD(N~e z`(D;nm3?=2o$}928h6*voOcB2?yPV6Ts~*Bb=_j2Etb72xP(FwAmFc1@4LP;8@{-7 zX0E`&t-k-54rI&sZ=P(G(T=cnkAJMgZ9O`h<^8(ngsxfkURHBT{giFw*YI}m7ICjB zHHRbpqf_eRQtD1!sw7hPn^HAS#7(I}Q}6yeYlpY@3UB$lfdOg_nK(-6^jo0+rBQ}{1f0aFVg=eRHw;;_a z2d;mz#Q);JsA4$7+(fh z%U+^cYKoI`WSbHOBCcTNmL&GVTnOR|;tLa($u|d@Yeuy+l|KSLw8z_MNnUe&ArHa? zN1Eeu+G(+$Y2%B-tY_sj5pU%oycm<-xf0BhPRUHJ#GMv0TXZ|JM_rM`opo};5=qw7 zvEU4<76DXVntsq>4SW#1jo@t9WD~ZTdtx(Tae>JM|IP{4^g}8NhZ0M4J9PX*`V|?7 zeXo8C`a6)qt_}LvCQN|bu$Il+J(#8fTi8u)k^hz|<*+eg|4K8U_Cw{Gg5f@e1hvg~ z2GyI$Swk(4887W+5{Ni;G$V#CC;?$XPcV>U-%8`X)}oyt}qBth)>_cd|M%4yjj=W1Li zvqi2w?W2(I+8WF)+9EdB87(VOpY%sf3n2Wi%$Z3ZDxC8H=z<6@ztoo%!DZsu@Xr4qm6UR!tBq7Ah*(qOT z=F4lo>daTYdB}->DDk|-Bk@uRzm}~}32{}Jc**E@&l8S|Z-{Y4#IBAovnxp0GEe4C z^E?;7av*(-Jx}IUVqPJ?w)UKe+8#9$g~zBQ*_Ek=0(&v9K=s zm|bsxS1E=TtPVl62%>JLJhgRPhGYdmQzcHm*2&lPPRhsl5N|>PfKVv;wpcyP>fjg&-^%7k z(D)+VJ3_tC*>~cWM>NB{E;D4s$g&p5X;8hY+q^eD#{h#h$3o9TXq5xIK$R!PbWR^T z5FJHoi$$=FXjRIGE@h_b!>j4g=uan!TKJ?FPN7u>L4GSsQL^+f&VQKf8fPv+#Z-VD zlEJ7KMD;L}p;-&xP0GhE5jB=*Stg-SeG_vnsZyJqVQk8$Z$hKK@XVFDS^d%iK8^XY zOv9PmuWWh0=sXU*p1usnh7^wy;aFK zoaJ@Iyy@kM$8@$-M_^PsR$@Oaxdq*4ss*32u9|wJn~#CwFt8eObp6y^J8un4wOu4;SpYPv|DJtB!}kTnpq^HzZ7=zmO>4n|)@iB;b2#H+>Zqnf0SO z>+_w`clP*z(CU%6dlL*6LGrVdrB>~7mJajH=xTBI)w;l!gw#f@Aot|>*Ls?|r1G~6 zjg9XvjP=V@R%owJ^~2s%$Zlb*AUTm%u2G>+WNmq(ypwEQ&{~M@`ECY4VAR?>0^`4j zQKpRJLZGtmTfi?>-8-7(Xim(&S!@o*#P<|>=3YurrozMQO)waeC0jv&XsCJ9u{@LY z(*Hf8MfFFbzbDUrq6H7BT@umIH6)VxIGT&Xiy@(-^HO*Dm&T5#dST|GnO=?!HjxcP zV6`SDggS9u$o`Zj$v}kse~?nA`Lq*@Ui-()>AM6oG1Jny@mv3jc*T_Lsh2^~DC&Zy z8$`Ob!_%+c=l~T_6_ArlTMu0tx@-W#A!`7 z%&LBAA%J+AYN(SB;eBHlF81PhJ9OT8PQ7F-d_&gy+D@f%I*m=U=W z+xs;43@&Cj3ct}I_I*0FeLiaQ$lL9C@(H5T}11y=OOWO17rOke1wZ=@Ra+l_Me z+T|W1rO+`;j7R4tJvW30Ij&3>EaU2#JJftE`5z#EB>7B;fJpKs2r3(&TgtuT?6u|sUO_$?V{MSMM)g{+ zSB|2tEffUl)eF7mW+B6pto0DUbrNr0=OlhcC!QyYu3DQ6is{pd`*tUOI+J*g2GK10 zn8CqB->ZpXu(dRk+O4Ke5z-nh>bgi$J5;r-C%RQ+(CrBGQs8-LX{hBsAqC^?_Lheq z;YB@ql;}5Vs_bbxQvmG7uXGDU(SZhym%X}Yi&dE+&4+c2L zjxyo&IoTez`!f1q+&Y=M2?P+CxzO7IE_R__gqP?-Q?(AHv9l%p_vrO;v>Q9c)UjsW ze(L!7K6M;J9kL?eE-YeS-?^LRJ6h9nzHjHI+M(NmjUOKqYU~~K z0vyI|?iF;ZGb`~61wn`&mkXe*zvirWD8)$)19%4G=eyIA*wZvj4~h)IpI~tG{dNF? z+tfA6^)~F8neeQCjLPCl8Poq>3tZf>o--b}ld!yMG6kdxBKD_Xu1vhJ{kr=4uza4y z;Y1-is4syHu4uoY?=IG8L3^~P?T%oxc$Ty034)_5SdM1xOIj0KRvMWB`=lKbWOW)! z9JJ6CJ)0M;;*EvTJVARYq9n*_GBhuBgkX5U*Se0X#Kfwxlb4(XVJ5j(_r3ZfBQ4!? z#7fO~N{6U5Uad@6R8$B2J}C{rR5IS{9vS{cG>)S8KCDenMwWEf=@s zm_aw`f>VDp2L?j68`Nj3kwN%B_1rrL$TZ2(Wn1>3b;wS@SZUL3bO`jm4!08*8|V78 z^Bof=#mLoixr>bUr<7e`>Q#{D!DC8qp9?1Hp)e(%$7<#DR)av&vMbQMr2JRFLdR(i z>c1p4J$;{aiu#n20zNYoh-8qgTDiz) zZY!fB73;jsuQ^S$)LrJ)f#_EKwJ$^+{WEBID}BQ??(CuUra%T__i|887+WdXvCOGg zmopT)6KASnlnEnjMQpv(7b4J;X3%rcUESf-K$wqeg`QSM_>E_i7! zo)hUxMI^Jalx~r_WtvG})MM9C@&DL+^YEyO>~B1w14OotNJ~`IR-#5=G#VTeTE=eZ zklWIM;6@x7!3{wa5jre`OF|MRol9#R8Fdzwaa_j*#&K9(5|$)@$mSBnB`!EOL?Flj zLB)PQpHugC-wp)7^L*d;`Tg_D^Q7;+wVpb4>eQ)Ir%ow-fkuoM8BcCBG2VnE#>481 zaF<&V9Aw5!`BDw<%dWT@N2}L1Z%P9q)f$o#>STZxUGFTXP|PR$pU=f8f=|voII??{ zs`^~3h9=g~CtmeQR)kdj!v;c_fO92c7NT-hQlliXdT)dJVk6$MBBZ2$9H*odZ&FEf z7nD>l^nhh+Qu8zTQJ)|Rvx;J?q$UIzcf_k0XGKUAqmHctB>Oz<=@g_FS*fKMcf1&v z6(PlRJ#I1MQH+8Mcr^?BbUntjfDYXf$e0lkHhtXPir6dufFP6gxgK1{W%GMR6#P$b z1@YqqvPts`QIJriW`xzNN%M2%E1~Q4y5{Y@2!WZmD4w?^^9vZbF^Lz42luS`kuAk*%17X1*#VQF}s`YqX}BO;{pL zKoC0y6N;;Djp~>W+qL7TdV4!s)fbD}Wkm=8AIVqyc3d25$1*FmwBx0CF;7_$QcSh2 zn1puhg21W}dpD9a(;Ek5_(rs%)<}5~P9UDct7_wIPP2_Yk;tOE7gnq0IqQ$1yMA$C zPEG*EVFSiwIiR~61rn3)n(AUS`+<5jX|`Uz5_krN;n`*@G~@Gu3dr(FBsb}sCwiN3 zUq`0pI{G|(vSVT>rwC&;Bgt%rR(DJ@u8V_mRRSni*g%OlV0&z@eyiR{i_?UoJ8<%`2=q34D@xSUXSPGr4FU;U1g)&)IMGA>uIX1864FH<@Y@Qk&9%n}it6+x{0EKS_mQ01}m7ts{s zuOF}hRnXH?y8nf#G*aB*4=~Iz+7RI9IQ2A)3ePgq+st`M$|n-pBl{a9myiCdEz@U~WU9CcnHvy_&Q)Qoa(#BB#n{&?bTPqWf`0+;&D1TD?q+L1wZNo5R6;D|n=*$2or+sLp05Nw_rhpf95A&?zi%?2C;*|mTSs>Ms4<-0(IRLjDM z5q=fCIoPe>MxrP?6lqNVr2?>gF_J=5=NyU0n|P1{YKVXl&}3kqF*VaU{6Z3nR+f%D zh{1vpV-5zEVFU)7Eq_?j$rcVM=N6Mo{HZq9?9&M(C}#_^4M3ClQNxcjrG3Ciklox*4x!kOA}0{$qN>Lzl&ijK$uS`gBgpEe4R5M$ znr^|1qa+rr51@t^toK@Q!0yg^oo(ExUQJjFtO(5*W<^Lx4wkQDVAUat$7)MMnpkZP ztE3{Mt;R$E?*CJ-W^JG2%UVUaI)ejpALo^fKcRKGZ$l%1Mci_r-dfRBP?Nq%y7sn3gy z!J2TPl-aUE`DpZ0G5t2$JkeUEL$H>JD41)b$rgTb~y1FZUl+Ftdh)EjkgEA<9YbDGjNroDypR$TIK;QY$t!#Yl&vsyaJ25W4cxUTs*(zYJ2wC@Fq z^kUWZLQk@~y&(M)R=4L(J7PbVuLQ)xBVIFo!1;$94&81J{NizbnISA$2xm8-=c)GV zOR2Bn7=eWIkQeX94VwUfN5YHy(F(-Wt@LOBwxC-9?HDfT*`%K*7&id`6ZfGBRttF( z{d%}20O~nzv739sCY_$pq#nm_(yb_n9ndXK$*4}mSLlz-O$$&yLlV>BWXW+t;h{%1 zKum(-DHx2GRv`{Dhl*8pJkP=x1pWpT-U8QnWKxA11TM9ht7opD$^40+TR=jWOy!RaNV8xT1xpuLYX#83=~OPd zlk4V}prmA03QH>Ny~egSC`#239{3fvg9Npbb&S1qEdh=jFeRR)kJ%DN3W|(d3dP## zxOYr3e%Q~%pL@di*+$hlfK(aP9AkGAiBJL|NgB7tliBQcB;NS*8wnuV;sM`)c*bMP z$5p%E_r{p)sD9+%?LGl~$iLx4@ez`maq*-Rz}IPXLS%xiEAe~h3Ch$@ga5zo*1chd?ZUU&k0X8BikSU&FG`1=X+v;3-`iNEti@v8rq zITBE4hkv#);6(XRf485B-+flc?I-*jP81)>!7wxWb_k#9zuzSmVTT|6pBR~d{|M;s zsuRY8{!bJiA774mGF$x$zn*_|gx?574`cN09mNAbXC-DP{4|RrkMSzs8Iy5&f%r1> zTE2CxGpF{m?mKYaI8&VmWTkLk7Y@OHb0}l5E|$i4%Yt=bCT_P`{4b0LD;9Q&a<}+Y z2Ew5YHOJthgYlo0y)F0AEhube5$>-K>UF+wAxTVbBsMY6ZvS>^-WjO6B zcS7=5aGB2?)qQR{Kyn(pAXm^t_7_&&bXXzhOrU#+oioAm-F#1PMn%fcgU|ycTsO@k z;ou>=W+JL;14{zjHnpA}Y|e$Rsu~0*6{kQDz;TNs3H z;Ti=L=nBJoJMHh`tC8THjVN9x3(NY(SRiD~ld)L^7Xt&(k{4M3uE4_{H}-v6`qq^# zLI`rHjBXqDm4{3FdCLgAmp(AwY9H9O{I#ctRqg4)=644Ej=WXk@938{e@Dii#c^Lp z&bY5541k+*VCGF-1j+PgQ3`x1*ELN98Z~;OjZd_=6bQTN#$cGrSVZumecY^9yAMgT%v#H%e)ZtYv&UgWVb6H#I<|MdJ1^P#|nR($(i`%%ekj*jv5YJnMSGaFpiHtZPy@(He zY?iU+KgmhTAZI8N*bm1$xhw{#4Mul#ot&po$H!@$x&YZw4AJ*`va$C^+%Y?RHqPI- zY2j5R2uwJu6Js?oE4)=iR3O|>bXGaW-dAEx{0gsN*SJ)I#PtEbgbw0Exae44XtwoR zrZJ!oTGoO59x2E%x}6~2yccIYYPA&+=Y^37+h&Z0Cz<2M>&g$n+3oVTo69b3&r5VT zk~{BDI^0^ntJQN1qibq;2Q}pl(KyiCa~30v#n_az`^Hj!TiqDrX~=a1KCse*xZ&RK zseyYhXMSUF;MRb?Utbf{H^5b`&zb)*XbeP>pGE`bNFUCY#$$8fkaUffoDV0*heDmg zXNeqTx(u=T_i(Ek+&*4eJRU3e{XF9~aEIpkRCDHkN)r4<$%C1=YhH7VPK5&w;|i2q z^5BI@p_BE|gAhO)rOaYSQaFE*mOS2VR;La8R6D%$jGFU0gMSmVF*n_of0U9rJs_g) zN1Fgbs29xdS^8%omXwB)jt4lfmlJhusB%C#48JyNeu44_JP3jjwL=iI;4(QCDKO;w zgW|kUt@|-JgIaA9U7WeK?zITkwC-Cq$Lbbm)HMU$1b@(zYtk+dI)mS0)lZz>P)%0U zRTFk3t;E%E!uW7f2_6#COJJV|@6YgDsKIkq)b%XVpiby%(6KEDI75{SHd8-5O?rAL z$OIfFhxibEMOaqU`A|X)HTvpu$Kj|M(Y6Zz^-6nMl*y>ZD4+m za4u7F3W%ixs5=1^UU0rG>bf59IxbjS8@nMMQY ziNXM9JJ1wN0EV=8{aB3slqCIo+y?B~B3E`fhqaaDCh5MEP(kGSuKEVQ{uw)A`&W^x z+TciMdy~(x#?v-)sNYfND{V^x$CLbmCmRUW=rJwOS)h z>pYS4>|BgaQ?T`_{W8_(*wV5cxRVC2pLI~R>q9Ipor@a+dM#Q+uS3$LZTgrVl0OrT z#$ejAoCrk-hD1vj3u`sA4hp+hC2c`D^qH*#Nx%)Rn$6Q2aR1Vn9{#W|)$~Oj8i#RI zl)cS&cz?wzgs=hav z-$D5->D^j-DkMPQ?AkT zoOnQr1tEv>Ejd+O2to$m{}uo*5x+p|$hO5rlHWOO4V|+#XpSSAXXC7skh3%RIy@ng zNx=JI%-5p$d2*M`>4!nLLsnMTR^qNVZmleu3ihxkcS^e6HWN2<)4QR5axju{D$k=( zlt0zD`)(0*#7y^OzDJ$@w&*&ow9Wt(dZwgLUtc%8Uy{ycL~Ig3iz4Ni9P`T23G0<- z^0w=$Z6WG`ZGD?T*-?z(DfM zPFsygWip5#-k?WDQoLXTzC#~tk%bUVvXV4x9qH@OOG=sm*P~kyUxJ}94CIP=nbZ04 zZf2g8y^V4?_^{g_8Rjj}n~kBE>Vi0=y9HIkh8bqiIN4X$=Jo4s&fnD`FnbTKaE`)5 zl(Sq``AFMnOPgMxpT%Qc7~;UUIt+|LVDAT;_Opbgs?SWiRf5XpEMH`-i0|&&-JPPV zeYI=4`yHpDdr~y$1X_8ec9%TQZ<30GoO*ftwiNBaw7NzcxK1N(ywlUfwc~r5-U5D$ zqqe=YXnnx*qjTPE;OinAB;IMQL^K05SFsHSD(Fgmwa?Mu%WnApfB(P20CH=e%8G_3!R#KxnsC`Ts0oajmHt~X`Pueu+D*NvAbeCK$9A|HpT6OHllRxBBZf==&>p)Wl=mOQjU1% z(rtNqjS*xW@KPY6kiNOj-_K2DhPopdjM_Xiue#zp+__eH3OPfgwtVCb^K(92clTi5 za+n+-sF|=I{!**m-JJ_XSf&5j{nxHZfj4&!Ui#6z&(0Vg(ATc&f}{WwqI}@+S4i5M zK17l9NlB`&l|zb~tvJ|DMN42wgZ;dSWE=-;9~>M{^GAmFc->7cjvF<#%mAM|pe=X3 zmjA_X`@EK~Akq$hqo$sL-)UR-YL4%;+Pz&grymlLrmuqnR)Y|w#3ap8OWYmC6tKm( z1(h<%8eWnyWzTJ9X%1vTk^@X~C6d?}ejG)pothmZx! zjSI0@hx7+MN3GG#xBMh&))r&WQ8c5cI`i|o+qjAqa3A_0pC1rdz0Jr`Wk5;JQJ^;U z;i(`9X&KtLOk5>jBE@}FiT*_;3Qllg&?l4x+d>(^nG zA2b{EoCI+@Rm<%fDuy2J=I2Pt8;w_A;)-*0sldm9xY^PrFTxT4{*$i+`eRO!?|2@n6mg2|t-PXJbah=yH~K?vfiEh0UxmhG@*h+g z_}FONg)#u=B$3l(O!VRJ_a4+9m6}QvJf+{NvcLlfQmcUUy@2GbSchu7<%gW*qPfFzI0(&Y zkmFSEE7f7lW`x%(N6{INj2GrG=OIT&NV>}ZM% z|FNm}sZ!Nq$(+N2`X>Mpxa(9uEESDU!dQdYABYTxi19^1WaRq=k>Ohck!!M6AhIM7 z9$w?CAD+dO#{Rn;NpQQs$p(zB1g2D2r{4f~sWp*@LE9x%YOw>bjFo4Qimf2ET>e;h zxX}k*DRvDB{E>#3$YHGlAluUYl+r-j^6hYgX^9p=hM9nOZZSldwa8y9=;5A{#VZ)xedFYhLnKi)#X5nK7!aTWR~bRj-ZlF!C-@QDe+^)~nFknegSB`Cl*8Xw^mG0&PY zSK!mRY_w?1GL5qyR$zn9F&C(mGtHE}RmzLltW4uSW&pXu$>AZf}U*?awvKs$&M015TB0yl5}$Wr=dNKB*x83qGM@COl^XfKpuKm4?Ro zP}n*%$s9?Na(Fc-{)$|9`z*;oVhtwW!G}gl#1wcMDU$v?Z$y!n; z!mhvp|JpG&Q3z(!{1lRMhKc{hfOd}aggZXoe?vq6j7_12KoTp@RWv@wW1p!f=xY6*U zMJ8oN9!29QB)n^iY>iJ7DdboaZfw3oH7~JEUxH~{Z8H5}i%%zgGG@jLVG0RP=y{Qw z;mEnwuYbR4*L8n#z4I?m@3Zst_w)2moaHmY`kl)**0!WgUe6VsV~2Cu=GuK}`u5r{ z5hP2xBaV-J*&phwx9;}!U+XN-LKa`?5wbhyJRV8bH$aO4XBK5&INfB$XHWgh`v3wm7f(q-~C0sDJtgTU_hd^l?Z zZ)g#vqi_3{zUT&I#Vs$>GmqbTtLeakl+dF4-b7QA@*MBu)@SIq2G(Np#_!Cp2{@ql zTaAmt@*EA?z%7`|Lg`hV0*?19lLL--3kI$&-rv%7cx9gp^BnJz<9XIO=T(78$IToq zy`4Evu5N$5*=s+L_8ZLW&7QeMDd#k~#SA-coxHLeL*tj&-or6v+?i0uP4+T)i;%61 zs4pFwc<8LJBh$u)?p+ifd>TfJR#pS2@=dMAxZ9{O^W|s*o2qQ z?8sG$NRWxMv-%kDAlxu|*SFk#^g_aj+@5;lZ`PYfsb6j(Wa1l4&Y=7}_ zK--7se{;+@K+$m-8n***jm96?S3wCIJ^~TirQ=t^Bz9#INDgs#OWYld!xjtt({yfb zLf^w~0+&pJ3Mx}FA-`awZu&tV&MQz{-t4RDaiQ-ywh{g$j+eL8fY^8ddeey zTpbs!E%0oZ{;}`y7U=S4Ea-e8+(>Xo#OTH1lduwCIC^ z-|wiU95KjORpYNLA3#_zbI`mTgK;{D@G#uW1S5kk!pU@cy!&wv)`E?EyYmL9O>j{i z9Le~~esoX&jB-WkPfg6Xv87Xs!@CRu_6LA{S{o5F9lzcxDtI-!b2{KZj(5uM1Da!a zkL`(S^}ZZ5Es6UcLeuYXsOVR7~s%#~Ed-Q;H2<~vZm{@9Di=kt6}JPBU5fDTH$zLi4XD-?Y{ zCKc#Uv9tnx9RQg*8Wg_4BKh5*@U3bLkcFFLfSwEea7?QCF0F-DF+C8i31aNkwcu_t zsR-u>SfX)677tPh?DHjP`t{g*79UwSO~4SeMX-}QwJ3DErax80F#WMgJWRZZ<0KO= zQw|DVsu2skFcDVVf|medP?pLkc#(X-3xh1Yj0Qt_Ckwa;MlO42A;Yq3ZPxFT-r3b@Vyc*+EcuV438}NLZ=q-sQ1U#Fpg9k{)5VVD~MN?K@u!1~;O*orCeN;?H|4z83ykB1S4{bi(G7fR6(3H&gBFn3a_1^pwSF+jWs z!3yFUOk6($@e@dV48$xU5n_e_Vx}gwm^)Aib%f+ZfX-T#JykX@_|M zsD@(r73|-@WnmVD+Q>sokkM#`xu)LcLl=$Jba*6^f;Z6~fp&G(vQXyX3|I{90t3Pw zApYFfmLuoP3orm!1e6s1oJlF6G)xmXu;6)&vD2Gdy1p|OCP^)m*qj=I0&WaAnz`>+JR%b?;=QC*8BB!F&KP=!AzV0gAFbdhGXGsrYjwIzNbt8Q%2)b%#)fv3e>SF zbe?E}z`sWo5sgrvLuN0;4y;vS^CifUwQj)=vTxLng*g zS)z%gu*Y*C85egP&lVfbj^jyf#y*@tR!gt;rsRvZ*|{D3=jwLdIg)4)^Gj4h)a*c@*}ieeZMj{cJfHiVqt-OPO3^_d;r8d`g!;gz!ISbmYJ!*teDE>F*@+VhC@J#? zu5Iwf9}IS~&Cf$F{+wj>2~?WnGICl#MdX>sL8_}g%w=f_fuOik=ls3mvHnUNu0<%Flap8rJcpg-Yrq!+QEYlW zq_I#OEgTqtIyXxjxLS7nlcz(BI0YkF)|sK!)D{GGk%br(|aIU zCT&Ftc+Wv+(sbDCthflnxcOV;N~B`jba)K8VJhz_@SA-7n6z9Sn-;oA`vnS5V73Wl zY)h*Ql3)Mtl9&Bgpi31vv4Z(0!Nvarg(R}XAbi@#^)aoq4Zx0B{&D#3uW@kP#+2Lf z-5g`c3F8Zm(_`_8e7W@7N}>)+vPopk-0*HzT@?MD&v#cT5?O9x3)sP54yKve+eK2q+9JIzf}OlZ zTr)m0IdCvnMHgSJ=@n0)2nf((_i543@!&WMaIA2nP-EExY;>zwVp38$#gtU$O0&CE zj_N@UevrrAW(UwLh&`ZLm{p}#kJ3X&F}qB~BxMjU(c8gb>tp<5`? zT(N+^Rx|;DWWvyvMJRQ%IXT9AIaFi_&?3IG6cZ>B-~X3zSHp~ga5lx^lvnIezaPV5 z3>D7uu%uI+t)JxAy>4*FR9|$Ah1n^@9E-36$uJw>BDMW50sknKfG2kRkT}SyC!FP+ z+0pr0ZE>GnWQt7R-H>j43n+^5Or3h1c;%YctTahr+95AS;5?wie_)X)8L%H85)FOZUrT$(BJ@!1L9H> z)^RwlCBy{b2_uqb)*eU?`4qUA6s17FUBTI0hOxf_>#IEH(k8B!ll)G96P<%L;=O)E z8YQ1#ctkpC6AVERtx#f+V2FbX6;>jr@inhz(<4kKk{e_!GtD0uZ$=qMwo}Nj$s5w- zET4h!#8f(j{67zeOf@2{`3l7PD<{H}r&LKP4zKJOEezBCaK1Yj&W8dC-1I7a!BNf) zsMzAJmu;olh!8I(RZl|*_9Mx%C8EX^%%?p~&WgWDE{rZFF)7?C?JC`WG%lHu%@JWr zJgcJu8=@I7oW0Gn+F9|Q6qFC?EFaRD3)se0vq5-2J05V$x5R)8c-{?V%h1R1j|9*> zD8p(nTnQIBD;|;%0E?oT&xDtD5V*T!1nT_;DdP6aqkJMW#av zRk9qYK_N7dJOT?IkQY?_Y@=86h{+7{_N~m|1yj zvP_J%s*bJQIZwK6&7@2X%44Op8dOsR1LNSguR&2 z|8G&&GFgqU|EK+OoaW7wv1SpWo$p)ow>_+V=Wyi2=h0KRNVltogbg;s894@@RfV0R zEec2^;P#c^umNsmJ(dDA&rde;R(1Uo6l?JumWt)PIi^O1%Z0DSCoJKwOoXMQnJ5?* z-fX2Q@HB;bapNi;-zaV0eSnqT`pAY`k!gW>*tGZxxLr1JGsMf(~(027f>PRjmjUzI8 zpI&;maB9_6DV17^a{3KjN;2+o!|B_o*y%g8@D&YFoIozCgA0vK#Y;>hrr3c=)#P^V z#vO@9?;Qz9O~8v@Fv+-+APL@N|NJ_2uvB*GVak`6s`Q3OuoYO1hQ>DRU-m-~8Q5ez z+=8`hD^$rX7>4(I^s#?*7SS8egAaaw6du4AkzRRU`1oWZBLqRB6 z2o9aCUz2Hkww{#Zst0~>Bvp(-HyQ_X9B_Gu;3X;;bsD7zqdGOFG_BZ4rKwPyWnY1F zVk09dH(nLF0*6WeQriSf^A2+@+&vf`ndYw?-lJ?zRuXIy#|(l_HOskpOq4iTs98vs?(g#je z913{WhE5a1jwMiWL|w1rS8Yx2!csya9+!we;#bO&QpLwY&-*227JfO@p{l{fJ5*}V zZt1qF7Zm5s5tISd&ji58XA$?b@f^opZJ&-Kk6-&_+VVO54Y)@TM*uXvj<-G%9fuF$ z^YDH!kbu(?sr>>>2Cl~ZcauxS z?@$~N&Iv{)aHHwPFwDZN*Z^JRsY>x}JJfWo1x6scRost#ChK&?2@S5AMN zfk=o-iv@CLjsrs)ea7ReKbERfo0OvPwyq~i5I3@-asl2iQ5vjLM3 zf*eqd%X(uHhLvlb66voc``m_`rqJdWkqSjYMWWs*I*<;GMQ}@~%HDx!oT(7mnU3DHhmoqDk0{)C@4$Anu_8Yz_VSA42alz zJQ(*HQ{h*kx_PqfqL{I3;<1H{T_wakLXvb;-NW%b{iMXcOpd;3B``y4Vb*ep{k8y~ zpneTqxdja=yB{mwb9gt&CZi3`e!<(o;edS)c5*m&orB5cRM-V(*q^gO>t&v#kW(GQ zb$l;$*V0)&p_=G{lS5@|3O$FXKi$&bxva5tqvgV)Q8juFY#6JXL!eQ~!c&bG0xH<+ znf#=;aXu>n0PkIjllFiVHLfYt27XukDaeKFB`JG78ghPT02P-l#5Ob$_qGb zP~H3tv0`!w>a;RBl!z+DVRUQ}OA5us#)=+8UT8Cc@`O>vHNc!_@kC|X4Ho-kX#*7qb2JNUjir3YhvtLcL z#843cZL+`e-8k~Sgd%M5kYSg)5+W1pkB~x)M-!9S^A{O=xe5>&SSnA<4_nadW0}o8 zoa3zvJX?#=wYAM31J&BCbMSr`ENoE1Ex=GwK#Y<*fFlK|#>a9K^Csh)+r_b+B|rJV zd{RAgd(8Z$wV?PT5@2_PXEU%fg3}d&+9s5RWp#tGRhVLT{>nsTY}(H@ZZdY< zCbt?l;;;?M5-$YJ>kt-`Q8T$wx}zh}w9_v*M{F|wJ_v+N(KJ&;Q_LZjbZQe#YjL!3 zWhOcd@~NSjvr7>wvucLv<-1gVrYG1^mVVpFPUfV8IULYH8r_kXeaIia7wXb`)BU;k zrWSX_5)qUKU~;wEeO-O;;2oOf=*%woJd5tIqhiKN&QXIn7}%E`O?J+I0GWc==JMw0 zd;Q!4hy-6vs{O(tGF$bn>|`bAVfQ~YFpQh!L}ojb1wc%h?X_i;xYtR`D72l0mbEwv z^lwDa_37{Vb7!Q^JeyM_RJ_yL{9$OUXT!{Bc8_Q+=E_XZ$kgfIkV#boFyoXJQ8^Yg zb0%bEa_=mFSeBC%Iv4kdk_5NCX-Ww&XmW+g4A2411C^A(uwpZ;7-5>o7uY6RC#{2M z;PmlG(z;B)XGSWdgS15Hpye81HqWznCeGZV_5vt1-@_8*bQXnbRu5p2>oNma6@TFe z-ZZOygQR_Wn$PoLanE?W_O_gY!(QNhUgPgjy5h>jv(OwBz%#ThV`2?IeL3;i`KwcD zd~LuPdBF42%!}b&9`$wuGo`7?A!?FL#gq^B7!_N9GGuxUnF7&wi?=3EahJ|@&%SK@FUk)}EGhT|H?fL_PK(c%7#%t{WVudwsb8i{&+J%qMil35|U;|yi{#m7>6fVY$86Ux$K4; zQe!9Ma3i>}jW4&(g)WqzwbI%pz^YL!qga=T(Jo8qk5&q8^n7JKr^VOs3!&rD*(&gH3H+l9)Hziqib%S< zeNaSCLl9O~Db8s0?Np%D9~psD*&iAkFJjS=k<$?Q?_MA~GyIozEAF zS=W5zil=BFUuc|*MsyrsWOO=VJkijE(~7Dg0+;b3IlDPaC)QV5Yohhlc3FyTS>lZ+ zJ;ZG1&{|Ldd&;;6xy=gN$Fp;d(H+N=B8+=5a68CPGBQTn;@iz9ZA3hVc?q7JQlRF@ zBggqJs2|DRsUP6lY!b@QB10d+Q5)ZKsvUU}nA7eH5SBGq6H~~;qeeZ}G6h(81D;0f z9kRGwAbVEE`B1)8Pejs1h~x7arp5C`K2a*NG0N!qEk>3#4YWdE00Of#D_a=BDvcM; zp|Gw&vK0Q6{u@r<&IeI`9I%yS3#j!LVuxhzDmch*o^n+^_kd{!u`6vKB zN)_W|*B-+-4;inAlRx#nqx4x&wy8cewrGJF@UU zIC9gG@c5kYcrOAA@m~bxFBTh}e>y2%*!Qo+nch^E;}5^U9>wDcJSv~2C1mB(+_l#t z4|BYufVXS~tgsdE3l{)(7U7{q zo?gNSb$P*Xe}DMaRQ&hg7J{(=awA!|+o-#fZ#vHuX~(#&jPo9#&=h_co-k!DS4x!IW5EjQ3vBF3Svbz74>VCXaDIp5V72q(HT@~r=CKLJQ!G^mxwV&Z62%6$sfa%e9wWtZ zwe#!q(LKroK_$NZ$>NoL@KPtK|~_%eXOpy+=^@2yoD?|cn) zf)=?ZjjXX1gVor7vkZ%C0L6lgB;s1>Zosk0dCcajndvP=;~pU_8K4EhD;FLw>ontzWVzkU!arkqu<74Ek^6;dJ zlLeC<$h%H|xv2vxOG9n~Cqxh~OUI`_JQoYL89!3AgR-awLB8c~RBF`sht|dcrP)c2 z8qe?^GdhLgRa9-AAX@s5^Bey-UoPQO5!=X2-;!h$MkEvGe+AB!J@iolKpk`8z8c7h z3VGOFa(3j!l{aP7YU3 z-?t)LVk?7=yHsFVn|u2H6?0YS0te0L;;Aun<*_%K5voOAZsG&@Bwh z3S($)sJ$t>Fg*9yNc=;I2uqWXxEXQi3=D7sTkE$5B2R8%m+9a5v7OPxbdixwWSdO@ z&bSV{@(5_P_^6QrnVcU<(xdQ$0$Bx2q%jzt3rTHmr52vMC_JUaqy*|M7HbiR<;FFr zvKoX>QH+1eP{?2TY{mk7L2B19F3imrJd2nHq2rRO)Vxr>Q(Yp(4O1S6``hW_$KsYm zC+5DY_ZjUqs$VAHOt?Fp(;Z=my5?u`U2jJQnb^sX^^}gyP2%&<(8yIc&xZvzSTN*F zOvB`HUVr6n8RN3|aCmd)s37t$wkQ~JZR_3{+Y^e{`1C*ulq#E-ry&luikfp+19x7r zu}Hkhma9)jO~C127YJkX?*p%M>AE~UWnNwwdcEDL&ZVn;dXIU~*U<}RxR($12tI5I z1|km_d6D~*S4=?B#`@9d4lJ3#tNYh`QxOC#dcE?DbgnN#TgbbI3p%lm*r|obx6<#O z%_bk}(fA05?*_JY0+c>jp4X=q3_M!Akh?BhP^Lvv6?=-|ll6M6)U5esSP|SNhlhD% zofR6Cu$_q}Vm}z2jF%?@I1~-mVZ8qtRyQ~-Q+$ph2A|{Gfa%C}FA!SVtuy$?OI$Bq z10x&h))g;V-Fiyjc(*QAx{Y?-I%cn}Ti-ZSb?e$u?AFD=l!m^N*$|DNpr#4}6S_7= zL%~>O&z~BvY}j!t`x>jm7!Bo{m5r6khM_W2Z#lYN5zg1ZB?ew50(@@^47zThoyJ3` z2l#O59;l!0AwC?RdG=0kYF>^U9Z>r7FIp%`vO)P5C@kWXjy@F&ieD)xv7$Bp)=wei zp9Mt7Q`mBjwfovwiLbfh?Y`=`C4T#@w3{W4F-yEzN({0@X+NeAtG8#&a7PPakz2DJ0Xw)6TpRI9*uIG#5K+0Lafm*95S zIgqv5_4ZA%@|X9CxBA+I@~tW95ZGd@w{I|Om@GA1iyC4Lvk_DDc?!FGT6#;nJ4_%(aOow5BsqN3Mq?R zm{+Jm<+23x|t zgU993;LbJRggDqUa z@44UR!GY}f>^-zun3|{mh-R|AXh#b6`d}?nGa?cknv^$reIbDNm3~1}5&9$DZ2Yjp zWTv+h5k80E!TN>xm|i1DvpTTld`?80jb-aqdS^vB(A$DzP^yDlx+sA198EEC?i=Sk z`03(RkL-%(=ka4P9$afQ^qYEk?R(3`Iq+!myEBXh@*22(foy>(zf=nEASJ?xOPl5vv7O$wl zR)?A+LsxsN;H-u+NRL=UCZ@%4(r++8rD*?w^ZQuvRvgTJzg`^$lDdISSb8#G(HGj1lce<@{OQCy+6NS~d zqHkijd<#7`CWxk9APr4L9L*hA*XS4`uZ`99TCX@FuR3mB-|mXlHO8## zX4cgbFRpW}xbe2)emL)Vpg$Qeu9I0@Zx#o|kHuJeBMCHurE7}-|1tVts+QtfPCzd)%G+*}eCH~6) zoH+jMpNWsc*uVyYz5FLw{{>I3wu=5y=7T7m(4(WTTFXJSDjhu$O_(l%h6pox=eEN5i<#_DG-lhUsxL@ji|{mhQflRw^v&>V@imdV$o%;&^Ohi$I79@O zgI;qRkdL=XMmm$yZf!PQTcQ9~Vr=UQdTrHorWi3CJ35D)6`x57O33i$ydjcGagXIm zIBu9b>p#$2HE>s^j1|cXrzrS~gzp3puAD@8sk-{mK zoub?Y%@&A_wUPV}x;`7S2L78m(|Ecx6Di4#sYj5xqXsX^8yg%?aMxMGvxZL)62Fbo z4}OAgGoA)e0k~)+lxB=XsNM)EaS;k?>1CAJznPZ>8?^|nESD?gAsDmb?46Z=$tb}K z;5G1A1cw-SO-Jfe@fpNcDN?%eiF9-rfv*yPfk!zXSi7i4H6Bbl0ZH+gq#k$S!P=+c zX{@@+q?ZzY?Wblz(_5Iy%Vc;8DdS?K^0lZ5XFzd+Fx5H#Ieg%hhd(kGw``?k1oc7C zHqk})N{!PRJZ9r~FKcN;LZc_nGe9W}wP%_bU8n=F67?QD(2sCE3gWH zkvmJMCS)5QJzfbCwSXl!KBr2+=NSj!=G_UZr$V3=ou0kZmy1AZ6_f=_s{Vt7IOmt} zEV$l6?b0GZsg63~QU_Ci{vsi7Q5abu+s4KoKN*T^YLFnBVe9kYk8b^tT4(w705o@G zy0cuvLW{(<1pxpBY7n(oz;9#I;-7FaptC&4L|7Veu4FSMvhfA0u-gz#VkjXul{B74 zXW0Q}^6YSy@0OQl9ANgSE(%?*i6_EuUZ53+fnSI%pgqNjOzuPde$Ta%;%)rWQ6rK_ zPjiWT0SmRd+^m*HzYPFUu3L~E6+rKKksghe{woL&2%)p$OcVe`j^{w=7pgOJMw*>z zDvqTgu)xWL*cP+EQJd6K>?_X;0h*|Nedtfo=1e6LX5c^(L?AO24ruWn0s>ZrMcInhkgO0A@l=on>tzXf0kxE^)4&{`^^kX*d?fuC%fo5PJXY3S~Jk z0ZT}DM=3$-WK0gsHMzzBcS47#BFvqnKd!f<m3$YpJ;v$hwv;{<&WVS{CJPm}# zG@wcb#jy4bPE3J~nhx$6QeFiU^6#W?x3E52vnhQavBnY zcoEVY52J7zqU=Dg0D(;HL6JYQlgt}SfJirs#;6>mM&)nw%~6SsD&~;E`JVCUACDQ7 zLIiyinsX+bqp`q<>uxNj+3FWba3x;VoZZAcN@gHV`oZz0$-|>+u5mpoI}T=GmC997 ziqyG(k+Uhq{U?^aDfE|GoQ_&T&8ztf*%o|Aj!%$n|hg4#o*NUaT`OgY8f_%2J?How=7T%&4+g z)69gFvlj|dWgTD_^FUsL>>b%G(EP~x6{!PXA`uL*zG^@iMnCms3V2qU=}$+aKvWib zy7(l#G$3hcCc$PAv4RgEv&g83_FL)CA#g04v@SJHO@Wv1HKAX|l6rXeR>YO%wV}TZ ziwssEIW5RnA`lA*X#0JUyE2k_1pMLNviI8q7ABg$4mVf^9fsr6pktTk^XZ?*AUh4S zJ8D?zvDI*nSp&O)`#{NqRE_+OW&9CM%HD~#$f6p0T`w9OI^$<>PN0q3FExjxG?y%@6N-q{!-(Vctzl1YYaIn$m{Ni9K7>x@)w>psnMbXGGr0N7B!{)4oX9$@rFqTRC=8+2x$ z*P!^Q>wM_P5lqic%1oFS1^*GfLK*xcZSpp`o3(a#SDatiy9<}gZZ!Ho6pao&rT4Y_ zao3bALEm)?;PCnboGd}{QP*au$)#9M&J1cfDe4-AV*Pq+aNvOgeXpF<4m$nKs<8mZ z9rPGMXMQtFStO;DqLl3QP?3WJcxr>rJY|X!fc=?saXpVT9K@D+(6hf7M^CvJ{tHJo zQJB_pvU$54oxs0m{QF@VFQU+-JREyoupTd3X*4MntFT9F1GQhL6nMU!4j)b|WTYx2 znr3FGYK0&Cj1pw=RW;y{PL{P7@V__Rm23m8{M0! zIl6C=7T4W3IC4$0<}l}3EBTX14rL4{hZ(1U=J-O@GxPc@ z2je(pys1)N7A9h8DwoTorUpErN{YC?%u&ddWGAU)q5g8rOl5%=g0Pq{D@=kH#{ z2gikQx14iXPd%L>^BZz;v<4q3{3t$9S1vC@@T8jwx3}`m6gdLS>BX`Jh053O`L}ca zolW_Ka$_6?`QkgKUi&uhSwNb@DZYCEPNHh*A?(PFK2a=F6 ztdf%$JOMCCat`JUwjYO2v0J1?RhQ^fLpnjT$*W)lvczWGt?Ieeaj;x^lkX9hFC->nlHoj#5@HFd9IA- z`HSRvO7eW(+y%*lp2M_9OBf!{54MH}dVgk)rvD&3jnvr{E@m*n$8OgY!R4ag0Vhz^ z2VuSUu_f5qnhx%|5$F8u?RZ&zu^p)bQ#TW)>A1ZPBXl^n-Ptk1*>AcCLVs1ODd0e% z^8^~pR0rkgvzaOfsj{~XSsgkJ*O}v{3zaM{E*V+2Ci-d+94Ww$-eXtO`8ctkvrtq; z#og$$@%x^bmq+AbKg8;r)uGGD9-Q+&M-qv}NUY&&oL8;h^dMg)-jS!$n#h}L5I6Uw*L4DnZ2gk%DJX!fP^BFS3)68eO`E;Al zO!Jv#K6A{c*L-U7d?TX}PtWR^u7qA!Yzp}M7=AB-3tv?oy^QYkm906=r|$%6{)Es_ z-aFu?FuDGGrspl;n~{6=@w&1PwttydRp*1HPv=q)12|R*dWoAOq!*jaF~bH zfm5U61tpAbp#K&Mj4xe6ghMHdhX2XW4>@K=3N zxgg`usH5dn-*Spov6#wdCESlE`_8%a2yzSOapqA<;Ao5#or!y@y+e*T^BTc6$$$Jq zz6kwFT@E@Cjp6=F#AT2&0NE$Hf-K@X6)H}IV0uz1mYOM6B1Npz(8S*}JmM;v4fYfQS`@fqFmtRas?}tyJ#>Uglhndc?g^jICmD5=;rfFpub$+|ng`ryLq+zoNMb;9(zhICNx9 zC=55AL|j)3k2KX=54LuKx=-|mvS1lS*^c#!z=$>(%K#tjK`vv*2tWhQHpLNXTt9q? zfaZ662}vdsQ#WjDeiR9=#fK}EF(v$na`gNjcth{wjk0fwP_VyhU##41XW7eLi!Tc8 zEUw&vSofXVSlphR(0|V?NoiJ_WQo!#q zmUC)`B4;_afMnF9qC%&?Q6<2Y0W;k`k>W9X_X6*Yh0oe+F;@hAk81`!N1eZuQ*Rh( zHLPi)u^SR8+>GmuIZDb6rNNbW(6M7!PI*5jDLyc)PQ48oR$1P!7C~yx47;Fp%Dz80O;96nOLzKLtloThN08UP^?Llj42|!BDBN|#b#@gaUm2pNb5RNW)c{7 zF)$|s5W;99G<70yn1-NJ#JB(oJ#NLO}AICdH0bh zMBXzZbEDC!zleB5ZSIgyLj9CL=RH@LAC{DQy-IoulE&tJro7FX{LxX9FHpR)bRKvm z&`0iE0B4eFsZ+I`b^YdkOJw>=*cC-4rp;1mRiYd-k&+5r`tQCd7I)r=zSq!7Yo=4!<&LFE(8QlLie zQ|(cpBEuq}R%v*B4xUZmcUhYQNGAiZw7fufDL+khr4RQ3JLjE^1K`b5B5ArX&8lQ?Qc25HQXxmBarg5w)=e%^245stPMVP19xq|_Jho^peyjD* zmB$Mi$yX<27#z>=h-7$FWngU+fCr;LlEVeYHL)r>#dD0895*vZEd2qvtjeyT!4c6q zR8m}-kYX!REa#3sY^Z6mc#Pqt-ELA~nDtK#i?WzY==SkqcX{B!Seo|n#(31&L4GgW z_~7&o<7H}mJYF^pKkemLGyklP<6lJo8e=<--@^Q7^oC;U`0XPt8V|qPVZ6Y1_<;`L zm&yF2j^nBC!JR!F<|ivN9`87Q5#wid95478+i|?Wclpo6_w6`d;6Dt8)&c%%i2si| zju-qb`p!vHjmDQ~h#kN59*))!qfuAnKqtVd z*8r_rboewhmWx_kj1bgeYm7TxP6pk{{qoFIwt@+ zea*!B6yG?tz2|rAoH(pL1pElD0Z($4Kf(s<8;mAc1Hk}VEdB^? zjQciIS2*L{Z1ms@r?ykLcR1{ckchR z-g9jA?g9>C^)BRxs&|vZ&Htp{zt4)b*WyKRXy`S%rLnY;Sw^yYaT94bHXpz$fw0?; zVg%uX8!q^L^(JyNxo5Mpd>5XYM`z*A`ETJ@KiIq!kErXz zeVrf`|5k5xR;)z;<=_%LgPy-J@vN>$_z%2bWV31w_lfo}2B0BYcohSJo`2(wNki~6 z@UHPyFKi@-C9f7P6KHj*HmJ)Nfff}Ja&X_DO6I8Rr9IF=2+%GQXcO2_pXRGE-lMLI z0j3$Hw^E;XI(#y!;%njcVzzPWN7&d5cZEEefoo9xup3dVD0#{>0^Jil1)i0l(t=XF zO{glToiu6rua&!VO*Zo#s5N_M&JA8?`6!4lKHPU#YjlfDN%oenbC!D$6oBj0fW?dQ zsK78aG;&Px`Ybg%mzOD9;K$HxaG4zZU%|2IH69Y32VM(}GQM(MQ%%I`yg3T_5tU;s zdQh}D=d-jz|F9cEc`~T0}yN^K7j~|;m_s-0jGiPSboH=vmOn7xua@tDgHC{D7=!`9A z*r&()AjrGanHgy^;?*@c%cgmi?VrnImcN8i6Rb0FbBk%6W0uc#1<^d>E-PP622y4h z7EM4K{+PNdTnq+JAuAfhxX3*0Qs&Y%3o1OY23-h_6wKE->2VhD2#<355N5@#R&~Dh zS=l&O=zMDh%zC0XyRxnI*u~CK&kZ~v&UJBMNV|5{Zk@4TZvJF06J}L-AQXBhxig1XJl4plzVSV+!yrz_SR?BFwblN-I3- zxD(iex++Sf=3Ny&d0Mym$Qw_hqM$%9sVEVl<5EzpTTLXAky*Goq{46KGwpn4GT)W~ ztU-le=kqh)u{s}40oK83iB)wm4(wZ1^^uBtt7=N5VoG~eLt90ICa5s|RGZRgC-MDp z#saKoe2F?b8BYy&L5kO!*a%CXjo{9#8pe0l*YIf8<*(Q1uT=*i>p=z9hIfo^48zA{ z92nM>E~~S3&zxhctsywxRhdN#rM$Jd_3+A@*9L!KyUMT1pFIF4iqK&Si%@mz7;7Em zjIkK;S0PcQ%N*8S6CF9W62aPB9BjMrEcGGOZz7*koUAsf~`j zFn}PELMUa*ZLj43pDV$IM*gOC&)g06gn@+q7swT{v*&_Vd!YQw8~ zoIHY9M#2kvMZQ&0R9-POI9fx1Vu28H)OZb{i095Y$oL%~ECGQ-QkM%1jEh+Xk&2;K zg}1z7_(4GWYam_#@uUH{Py_L(LIL6h5Kp9HxK-gRuQ-o&fsv41k*FO8>&oE5yZtR=%2ww}p7rW1JbU_EJ|5rF+GM!a!X8vLL|>UW>(upgDEjgucjmgaFNs7@*CP}=3nih@ zi?f~hiOKjX#=8;Exy!>c>y$Ouo@_np=4Jtl;aXD+9*V?^bqVeygg%6@9!e`_o}>PB zG}6cd@_sQYV_PlyM%4Bf^AxsAExm{^-S+k7Tl!tr(&k)dUs^8ksn@>YG`~oF(dV2b^C`aDsDGzzKR( znGdr6a~fApLA#VM@@)M5D&_>|s5hOUN4@L> zn^ZS~x|HV-iY-DZ0b(5(CR>b-nIEfo8Frc$+hPnUNA}hjo^KqO5}YK@vx4K)90zoX zy2T0l)iq9Vj=IzddQ^=QY*Ge-8jW)iiY1_LR>v;HDBX<(q3AhTnmW$OQKH;V(692G z;2gCtH`#QbIKd|ME`l2RR)k`|19V5WqFGD|{?ksL67@e$(61hKf^*cboS;Yj)Co4J zFoGKXT!dl<;iK8Tx1}IAIH^n2B~H+<#yY_{>H;U|Q6rsTlR5)I4f!O5Vjp7QarcSK z6!trhTKzQ>*v*8#{c$mSg8KpK+f1fD$dSICLgf{FknUZg);dAIdfo}5|2skSe~4v}fmlRVN(qxVQEwH1St?CL>e;Xj6#NGL07 z0nB>g1aOIgtDjgU2Q1U7Eg|6pH?!l(2e-z|hMVoYNjLdCJ6S{J1pR8e6P%+qJ3)`? za)M3j83c6=pFk*nM>QynL56#)h{1_p+Dd(STdcF$#V>T;r1+qI9D28bMurDME=gJe*fP9X=&1zJ~O$V6_4khZI0kvRPDQH>imqnJ@d~|Cmt?7+D%gJzdpVAjPm{J&CJLi_?4*V4i`^z@GSM4 z%p_^}N0%~wUhnbJcvqz2Z5;swD-Y$Ok07I#-R_z#_exe~nby$0&GQPfLZfgyOm=9b zfk_Oy!V{b44bBP`HP1UTi#JZ>Vp75KMlC&6`Y2W{N69IiBUK~(z{ou*uJSuvGyhJq z+X7@-xxCLNV7&vO;XAHlpm`wAvWeuKb?Da{}^!fLx2S&a5TadDeoc|(oRf=}4; zXXk>&51nsTLmCmKUY(i<-O_TRpr(I|S_1+LH8I~p=_$8Lb*t^4!V;Eh)Mzbc|4nK| zARD$fQ(%U(BA#dLS(OdXyNOCOeu~jNzqmLHE89e6z2Kc)*@SDc5|y|B5Q~!R$_BE4 z8LEUuA=IEwvqN=iC_@WYFG1;tT83ndGu-J4e}BD=b1TX!sCC}}pk@X3+C5!|h*p6f z0k?f(ry&Y=pztg2v0hdS5nNut>m2j|TRF59&?DJcTt^Hz>M;titd1B%5%NR~Z^RgmP)Wq_MU3;> z41b$p;N8Rz#@7ZGLq-FBP58~gZ%$-EGjNYAV3V7X1=8el`)Xu??E6L*kVQlmERnyD z>Qqbh<8eIN7QnEIIXm!B6TgBFmGD#iBFYIa(=z_0coT=s=8LhG(ge3tWyA}qpM#-c zDoxLLk9y>=@g-^m1kc{{&ry>&CO3f5GWr;2cRgJ{?9qBdcC>>s*A<#+S&=%R=_&$ zW^UWqk~{PY9=V%s6<7Nk)NkR$SL?RwmHX>&6XkdK;ISD+jQLFFW|XeJ+V?GVULe36 z(RZcj$Gg(5xjMb>nf)+YTd&3><8A&-zf<5>JBTnu6(UX=R9dl0>exA5kW*oK55Pd% zF9I5uA;X}|ktLL=hOm;XJeEqhkDfK3p@v<;$-><-4Z+!25H;O<)l*OyVzY-B_-G!# zUXAq%{HdD5tls-AP@Oh~IX{OV+#kxdYPdoS_W@~G)_J&C%~}5f1fxe&6Pad# zA?St>j9mvbaXVif9$BG~Q@YU(&ER^q?sS-R1G7^G(LZah=PXA2A|e$Q7Z z{sT5xREwmzang9oiw`QdGsj`L~b900*=IUI&EmMqYlo1gGKtG1EE#wI3+`VQ#n+ zl-}h~dT2koA}-)mJ{+mJiBybd>mG;FM?2t5HINCU?f(hQz(HNCTd#9lAI1QziS{|6 zFKv~aK5DOgOPEoZwT=6|?{c&f`EHVI=^h(-Q$5UJ9Qu9s$;Eu(&4%pjVZ0EJ8EVCN zYMe1i?Lg*qeOdZAoS{yvIGhYRL%oBpoZ?|U$Em4)edS@sv6ew^%S@79zE6#v&^sTF z!av=p%*;R_Ex(pQ?>3Ss2A~`E1TYKsyvU9-3E6}2%^E5|KQ*HhMXYF214#Km`(t7r z8GuzZNyheZ*&`gf6Yf*!x%P`MKw?TU^m4RHOCC*_eAOywKjM(nR{lVNv4A494OzV^9$JlQd7O77KtTTLa}JvIY8Rfw$Uf*u zO1yzj&#_v8_IGW9q|u@tzAj0O5s>0JeHEY?NEAv+0c!)~LfWzV9_IA#Zei2bMlbZT z!Kl9`>F20_V3CetXgd(12((_!#()Y?|IGxK0fhi?t@+;6IUPAj;gjt85Kg@sj5jpu z_LwCKn|pL80@gc#mlg8SWZXj?$6mfWXD`>QxnFSdnkr(c*p>%cwp6;8?Zi%}a{6GP zeTVN#!`;FSu7j(%PFC7Ha2sg5RxAG?V_~;R*db5ZvPc$9!ojyb73%-kn?{36KKuXD z;8f%w4UWgt>1Flm2)qdm?#9%JBmMWRWL=@GuPiaGk=;Ck&6a`PqHH*?S1r0FFnqp0 z`ImmGi(Z0fs_6UhCPn9SRxX?B3s!&c2Aym}9G?NvPlz#gR=Z~|%?^Ekm^n7guXm?o z`7z#b(=~f1JolkR$XUwjU7;V6Jv6bi{}5_RoB|(Wbyr(eMI@V(E{?&ab8x462itVi zyP@&$nDYO?>qcO}hPx&MuZsn*mjE)!vo67A5J8t!TVH90my1MPYq8`^j`tF@Bbgj; z5{`bdH$tO-GrOcX#DxBhHITsx#_6ezj`tokA~vYwq1NH>?1fuluz_2hk>Ys2+@-5@ zFP^Cmu>f!E5FDLNY8KvP79^MGvH6`jm%xYQhRKJS%OI0J0#n`I=0XcHZC@1DTRdgn zsfWoQ#opBT!n5Bxe}XbuW)~`8?p3Ia_Tnv5qG!#okv4qX54}AM))q+ z`m~;gB?17zBOn5$dyKN#C9_ADZmYJ)s`GN2=M*4OHsZo_T-ol{uW(M;wD8}hR>CNU z)ZmHS$DOT`{{W#hJq{)6u_mth{3f&4PtAj%~8D+s@SLi5z`zMW0 zPmu|wP8|z1Pkf>%pT;58kyPQN^OOeSlJjEIT7t5#{G&dx6{P9i^7N*$f%o%o!rm9QGKzMN9Q_&C!o2=Hn`wt zl#}*6A~ueuPj&nzz-q<{LbyvE>;?J^tjhoe=YMc<>j>`ffFnymlRid4f|@cBjB)dZ zhdWr1v0_)A(fna{&?WVC#U~1N##JXOXH;9!4&Y(pj#}O*4!4a_%%3oqkLF;l*hinJ4 z2?Q;ixj-JZ^&D`XQ3tdv!o3l>5@9}%qZ#K_@I|H0d#DRNTc~#N1{0NYYy=U0`9{WLh^D zH%Rx12DfMNc5hjlpPyWmXA?Vgn|(?e6Z4R!Ck4>=@r|ldA1GD{-YU+53-F@WA;unu z9SFuM@sa#_F{_P#2yzDFKLj7rA+iDX@Xw&;W5d9p0*tYI)m_I}`-kmKbUC*mjPPMz zOKc3`)EQPlo$z%9{s<9c=$818tF1RRRZl>%Nvh%|CiM4iwHx}5Bti8~lA3W=Hm^SN zWs|U&;%%cTAuDBFZcDRHJvtkg&t*`;<6MDz-ynUt?@~heMy8 zZ+AFqD9)wLQGsa*;xh`T)x}eq+nbNSmI! z@+M+hLWDr>OUNL1bP`Znudd#lAh44$6gL5d0{kS(LFq3jH%8<*E6+%xy=;sq+pgnK z*Z`#@j5JPW50GlS@E&VOEYx!dvIoX4Qkir13_WL;Zlf33;&k96Q^3z~fUjh|dgIV!48n227?R8ud_uSa z>v;&SaB7TP!S3t_YdxW@10Og$$zYeftNFl#c%mDM*0Vvi^KGZQwVBvCv&GW2-+7( zvX+7Jcijt*#|kO-dlJFvS;wa`6i5)P+Jxg966JrGklJL2mkM>@93Ph?Y0cR79qhvE z)hl?S3%?q_i-#h*@FvQC4ainWX8=j##=jC68`RGD|4!mT+mcR1{^q(hA^g^)5hE8z3dg4Wg z3%-X$J-Yxo4X#D+AEeNCL8jiw=mFQJ7ZVjdU*d%R^bDx5_+w|{irQh zsiR3EjokKix(rUtHW@y96ENb{$@h2gjtkYD=$9GIHzDvEys>mrUS*w2voVPl^GbO;<-j`{ zmjC>Z4^#e`hszK6_XQ3^pQ!Y}x3JZhR)tLb$7B|sfqxYAKjpCT4eH46F8``t%a2Nj zJF55gk@(ljdc$AWFM+*8yMAeVwoo^PKbG?)viDMLZLP&=7VcZepmVtu_lVHZ9yYlQ*lHK9I+ zwK@)ufH*`Lgp0fl$+Uk#+Qrq;+5#>EQPvc$0J;CmZEXSCVOalFYvo?X9i=a*^R|7P z;JtQ7Q~lKCDi67gXiYIr$v2|3xRe8HqjjnTf*_w?yv$?WsC?6*2UL1nn`-h%r=vN0 z`k1`-;XL3{cEgU>$pj|MQRf0E0wwALEWAx?f=B(4QPzY4^$-KoZgaJQbH53f{wv;v zI;5W&j=Q*pX${Aj4QH;oRr0J?H{gk_%Pr~FK$qa#i=rn?of#1Ipb6F>G9GnRs8&=AQ!f`%YB5Y6)kidn> zrevy)Y6Hs3XjO^Y{b%}-d@FdY2KF|JUW}&r=T?!Eim`++thbEk3P2<3FYqwRUvn>N zMWEV3r5zPcem~2o(_-&s;tvaLtU(UgL^|%~lKCt^C59cquo?#I*h|Hxakol9;}XxU zwqTCGiJ9uu0`z@w=o(mfo<>x3(G;T4FJ7N{H}nC}OJ7Un8)ABg*Q&mvp+oYmz*pRe?Bhl#UGP@YLIg_b_3q9zSWto)f$sr_Erd|E_K@v z4nSACK~3M1iNDxCAw{1g4eWFr=JN+bU97N-%nqSFd(OOy);CdD`7SwKP=Z^1nsL_s5W zyJJ}3$JS22YIspB;Ntz|S3w=L=Q=!*It0>C5_<-(fVHMNdfsXycc;#KQZ>LK*Fg2K zCZ z;-Mo3Dr(m&>~x2k_c5=HJ#6_NHR`+J-`hL<67}_Y--+LZ-tyb{pOuQ&HgVcUvz`nR zN_)VU|_`rS&DwuS?^e7a}m|6oce-{4+EE-UVb?NgZ8>E~36 zIi;$o#>&IZa)DwGE{qC)h=QUO^tUR2qm>wA%Ek(t##+T_T6L~!_y|zNm>htKyCs5b z9H9^LiAoAHg#OH{w!_>%Ee5p)r$dZSt&$k2ZwfN>_^4yIdJZd7)`6= zYG}QQRSq$bOibB8tY}37*9t9s4{gRaxtfHMHW}*G$|kstA^`Afueyb6d9kdsrvjh4 z^EsK{U;x*xusWsSPJ=5qY9K+c%0rMM15mroGxPW8_4UcKo*ZB4a)4J&9o2i^jMn
Zg2x1pAJOvRA8CyJSflk5jTHtZAITr+_{Gm_>=T^-zcfE8`K)_E^SqrJO?@16 zl{XXR+#%(qoa^Zwk2v+kJ=t-Wob@&ClC!=B!ENB;UY(A4pTochHTUmX2`To`KBuuo zaL>b9Zr<;3SnR7rKl4$oze{jJ(3B(iStp-7esjTXAmuFAq)SfC9WFWNmxl)&d+s0S zfZIUY^M3Z=UPoRDp8qJO9XQYHJw&tm>)tokah%ngTVY^!%6_5VzjW+R*~b*oDlSXn zx7?qSGFZnOi(Hv7`3a%UO6-4OoKp+qyo?L-kL;?!O|JE1FofRKci{%0CC-B(Gu12Ac!8|ErLHLC(}{LR#sOrAFK4s#FSliYhx;5T|RY(DK0DV zXp>Y}_x)^L+%LXEV~23RV5wk%;LMq+JFZpb*$b69?pNIsiEfjoL6qEYsgphZ?U~j} zTw`y+_QPiUt&mVq?-O!ywi*kHx}9+rLams7y>Xwuzb^d68CE{hY5DvNs{yFDFm)xe z@YLt=T=gZVAMS-iAor`+zQYpJ10@i=bc7+{aNWyjZX{8N_N|>ilQA;S~Kr zH>J7~W^+r=Fb3-4cZzt`-(9*J)Em?ISCvC}k5>}!rO|zlWno~sGk_DWa;tF)+;+(e zzUZR%{>E+G^x1qt!8mwFBbv~Ev z4WUrX#yxUc;A~OCeZ>>$^5Y^O@6pF&zo79^aLXbrzg%G#tX&i(lr0Kx3v5?0wTrgk zkxDMhTw#|Lv@cTk26KT|;tFnDgm-hl+qUpO)$e*;>9hZD1c%s~S&1E~IF=6eT0OVd z;8_0dAJ%cBp`f~cGxgi@Ri_;ElMh}5H1dNkIqM-N^2uMb_Ho{w&}a*m3dTHqQh3p; zS|1m2&U+j228cGfHRbwHq#Z*i2kCI?S^Tm!73Ek`47A6q0`2l(%T8U-DiioxUt3vI zx%MWjwz6)$A5Wz6g&wPZy&Y&J-+WMiWGdSH|2kt+^{_PtF=U zbM%a1Uo5j>x_=rf^f1;i_&13E3}l#zH68ZPTp;5!@Ismy%cl7a&Yd^SnprcWsQGu9 z)^Mgz>EuI~p@Oz&`m8foI{t^m&rd|B_$=+e9LVFL4aoMrPxzxE9|SUdNBFbC{~b70 zzD)iM&OHnHc*@BK^E)Q_oe*DH*vMyD3xLc^6)=bo{lA?r6++E~yPR<#dJvwXn%ve^#8U7ilU#4sMbUhswAIE_?c(DxqyvmpVBFw{!Wyp5{nO?te zQyznVFP(l#XHsl)u%5RVANs8XvWyWR{dWKv?iIQ5@5Q<2_^jED>E#)gbe8iF1v($+^I>v?LLl>H(wjRs)5@yJj7@Ktrux>Hq)`pMpy=)v z+b;|Ms__3M{IKw!3m+H$J0Q!Pd!g=YAs~4S$Z$81dFc}QS4IA9kv}8y=SBXS$p1s+ z8E@D2Gl1;N=K<;eN+82^A}^Qt5Rh%rC;T%&hJ8Th<8hJC!36{Tg z6?v1$BO*_Tyi?>41JMg{ZrA=Qfee0I`!j9uRyY@TF6Cs*wcI0!>fbYT|4zam!){xr zvtRJA;Bg}R$4cNC)2%aBPLFX6%E&_7FVk&5zChw4i);56`ig?|F*PSd1qQ1#UhIeoQM@^C=xj|!dy zzEycEF41WPfDGG#%-b&E9~HSt+u+Vvqv5k=ShJQn zX9DlIo#BfTjZa=5{?bdhycI%tGy5;WQ-tx~r z!DJ7ZGh#j- z(?)LU*>HD0Ox#e_xJMX)iwTg9&q->yA$4{>*!G+!;3(UNt427+%Wa{IMrNXQ0g%k zHVn&w)nY%RTE{H}y2snOxfq*joUw`H{HXY;hHg;wKPL7+05X5m*Jyv|0p0#mZG8S2 z*4)NZ=Vz1Rd%4)x0mI_sClY6`)oEM}WVj2+bH>BMKLMO7%~aawVEni@ef(g#a?a4_ z&I97-sNhLp-a75`lR$U};W4lM6zvof`w80A==8P&8NMRi$v^6(@zgr$6(3{JKOr^?YPApCLZ4R8 z-g)Do*tS3~V~S%Y4-YQ0PL{|6%kFDLnkSEJH>7{kbQ1Y_%}sv{1}{@ zJKdVqct*@z3rvd7!(w+Fn6qBzX%UctFRZ2Su<-YZ-1sy&)$x{-rTbIA*bW1aiv3?D z?t+`N|3yId;j4kuft5hkjq!gvoXfGY#u+P%B+ZSmXXpen|9gP+e*ky{ALaXIYT$Wr zAaw#j>O_Ie!#zOGRdp_Uru%y!!^~TBzVm?0_oYDEEC(_a1OJhHdi!lm@>VZ?I)JR7 zJ|NQ>0v^VPzVEt~DWQ&l)cFE%sx;^3;hgb8`Zjh(cIy)VsjgE{BzW`?5Nbs{6?LJ5+L)mQLq!pI@lxp0FY%rD*PmnWu4!o?MjH= zd4hKiWX|i}^Syg+a3*e9$yjCaoF5G7dXdK!O#k=0*L!l{i*+{+-Rx$qUjSq<^)~n1 z>DJqxa>l!2u_?g{a~L1m{~E}!q$RyARDXTq)c)EaK02YlTWpR18K&WBD*8;N&vk^j zb8Xfow)xQWi|)ffhJW$edaf<|#dZvOCq(zQJG5;pkZt&=@IfH+@onMH2simMsOC0L zq|a@JC7lVe&DvsFHa_&XAIR_>Ak+Jc@EKt(&jm7EB;2H9a4zQ^Pn~*>9g{Rm#l8X9 zAwCXC+@$c7FHijx&D8xNuMOilKFsfDfDF$FKb@^#Y>z=NHIJR;vu2?`rsmqnqkAoJ zJfhR^sXK8j>s%nyJY57dg%N+wa@K9hEE9Z7yca}+hJ~8k6+b5 z@(schKpx8v2;VL8&r1B4B>rC|{y%{n_hu!upYws_mkG~Ef*@oAS=I}M7YM&v_)6h* z!fzMeCcH!V1HwNj+|=D$pGq74LHAD^Acb^J}kq7K!#5V z|BCQug#TFhuZ3rA)jmpr^mzl2bsPnT`XX&juW$)ER)T_UYF?UDwB5_h>%{fDA7SPvzA! zMsJgdZ0^txL;S0ogWnK=w=feY%Z{fb5s=0`fe* zRrpTfpA-H#kamZF8Nh!7viv^;((V-?{rnb4y=nJqz1cwO%>h#H1|aor0!{;N0cHTV z0;%_)@P8KmMIh%?RrhIm4Uqg_g+DEP#tuF27y?rMG?4yAB>s;Q|EBPz_iMcpAoZ>j zUL)MJ(SH~9aW^-u&-6?Cc1Rk1K$d+7I1PA2@B}auJnsRWw_+g6R1b_v+$fM?Qn<=}(<{PUrYsDrGA80Lq}}&ZB1h z&X_a9nv-#Es$Z!!KG};>`D~PO|2=f&^OU){yN*n~on}Aw#7A@)mwi;1aTAbj*eLuV zAp7@I!oM%_A4vQ;ecJ9K;8blt)xKzl)J?J2)&rAbzhB~B6Fw>2_c85%CXgWy$b4NY ze3|fa;qMV165au1pWP+=qd?|&kMOSmr$hdN@SlqO=Mq2n;}9au2h#5C!WRiQed2UD z_d=`%W}I(1GjY8}&?j|KC;pOxy9M_H#i!m&@virq{`_A>cmEOFyhn7|27wGu3x7fQ z%Rtuo?}Wc0@>!qN@$UjMtOBx*b^xI_< zRlX$t(-Qv$i9cPN|5xMH`1s1H*G`ktM@Eny!-S-p^_b3Y0g(Bt0%k(qBD@H6N|%I(Yj+l;fPL$~h#$!{LF?sLUTl+UC&E7O`~%EGv~XK#>Yc}nzgzIWG4>A&c< zxC6*=x9}d}j|n$z;@ubTmiixs-h}9$HKctl1hQ?G3cpeK>3r=KUmeiv72VH??bp4w zuJ!W~lLzQbwH80+UY>Vd%U!=ytmj+b)@4})WVl6msw|%SN+u*vG3a%RuKzpQb_0;d zQ9}58fvl(dB>qt#kC*QY|FQ6Q4Qspi04e{p@GlB~LwNp^5F%Uwq~EK6Os`Dht0mqq z@f#$*S>o@I_;!i!lK34G|FFb=T;e|^@t>FY{SyB@;V%e33FP>C9{M83t5P8OI^mBC z|CaCg)^;O+-KsQ$#EW+^)@}Ow7@q*H!uUZ zSJD~*P6wX=vMgB#A@_`{qljbuXMGn62=jpSaW8NhFyoNs*+7PKfz&@;{-+xM3M8LJ z;=?aKW590l_l(GXCEWOTuenx|DQm+}GQbxCp8T%#A$6nO! za?@emP6I%;)8oRwD?C-NQ|wocN&Oy$Zdy4^TJH4!f!{4J={$S|$nZ1asXTbrr^j-1 ze?9@dRQ;MZ@s5QOzwbvnjn{z;*Zf%b*V}*$JwW#3FAM)6@bC8D)2tC&b9LV4|3ta9 zN(46oQ*G)ww){tRTBAUQzX_lIQ_ar@@>r`Delw7H3rPGsex~)V0y6$u;TwT0QQp%SR_DSU(QULf=FIpOoh^mwxfNd2pU49#PD z{J9gzv2u^_$AApq8q@L-Aj6AeI(=_B-ipt?Aj>*yianE3DeK0Um3ylb$o%aQJRtE$ zfgC4K0&`!{c~}o*XaHsa9}xaQk^6q3>)=ix$J$=uj{@0dj|o2@{AuAwfGREFS>yk; zGM{cf-XLYohd+i2@f!qA1K%My02~(C^j|7fs~X5WZx9|5Zt7i)?f06M0)36xCF%7; zcS!W-{Yv{Q0@7c~-gCV7i)|J3P8sXWaqk)%vnRB_#XyD<;VJ)IE5iB;&y5qN&7qTa zU19us$CD}MQzO68>5T&!UI(%doB*;er@f}zJR6t^em>9#%m=#5ZSwb4=swr=o~_55 zV)$aH2QuvrAk*#xP6rMFnf4LNP1y{($7t8wvGlh(e+@u}2#~%zf%N?#kiPqX^t}(r za(xr{-zt~qzK=mE+bH}oOahsH&g(k;A|TWE1DSpdXv%f~znO>k{|*9#ejshXEc^-J zRC!d#%M|z5j7naPiv3CY^NiyrZR_{i_c9f{%(%F8nd!Z`H4jeC~poRvzZE-X{ZiyiS@v zA-*SpOgra4bY6;ps!sr0@L@jM|E#iQt$su6t_L!-04X==8l37p*o%AmsoO2Kd+AG# zpCjVu?SIjJ-vy-Z4Z^=FJmsI`+lQR}cK^BB_XzaHMEA^-+SmC&maj~BC6K<2FN5BD zV|vABgV=S^kEg#b{;T$N8;~IkWLjOqcZmFXAltd-Z&Rn8$^++$A9CinY_CDdM;NvY zyTr#n;6eHQrpVgf)aic|$n+i+{vwcJ2)Uc8?5XrQC!1pJ$;#99o0-AVVcZ4sR|Rk* zKJ@t|kv%Uw<&)2-Jmu|)a&MIQEt#HS)!{=w#h3##{1QlhsZaAlAbHAf!I{=YuUs&B z-q^XLXAjSdoz*bcpCk8N^^4yfu-PMaMKi?D89MLp0;k2i$>P2@9YPo1tw-=I47J$<-K z@=+~5!a%0E3&=G0k#le274OwI`m>A?HlBoKzVA>^#9G$-gx@Fp7sAgyU;BP1kox7q zKPlYg)1b<4JpGvSU#Qz>SZv1VL-Mil0`2!MAVbQJ=l;YF@o@}##x?`%K&RZBEzgx? zy2`V3g`X+Ym2~cxbao5>m~eNx*4xv|OKyTm z_k<_iz3?+tx+9X#Y+IM_5+Lj1GU2ttQ|;=ROWR1B`W?{g72U_hcFb$*xi6qpY^?HltezZ`*|D#WucsB6%jhrCO4 z9+mY9BI#mye-puTMJ(C#Wj9&En?P?Jad&( z{OIejv^BH3#kyWU2xPdRQ1cG~8Ty2$`VjB+jh}k&WEINGc03M!cRQxmZ(P?)BTIA| znOEpE76AEc1#lX$63Fw>9YD^pyMPQkflQ-U;-8fG=Oq4l;d6?#p2_oD;oLm#%ctLG z)i32KhA)PCAb)iLna4hfA7Z@sde?Pb?QMh1Wjb&F1Z4PxaFa)MZmLN?Hw{Z(4np^+ z=znv$w*Nkmb&|5@eC`qVs;G?H;^QRr^WLd#b^{sufc&)w$g=eVS^on-*8i7*?9KlQ zoB@0a$bH3UfLXww0nY?Z0A~XK0GtJ!c~yq`o2cgkXMe2Da1L+{FbB8+I2RZJ zo(0?uoCo|2Fc-KVcsB4!;5on_3ZHXzdf81K{J({vDj?gX1;}>kmiWEEZ152v+hqdCcFDR%w@U$#?NS9~ zyR-n=F5N)3%U&ScWdz7}nE-nG`NRs{Hq+mw(>SX{r@0Bpz7Yd5Pxk?t$6g@w{7E4D z)*z5&dK$T9s!>2{R=0{ zbiE{3>U!D*25Rk`pzwrIF`uKhxNclx|TK{q&{TBln)&MDQ2XcJ=tnkNyO#c9o`p*Ixeh#GG zUxDWW=dI7M&I5iB$oM@#`uhTq_Fn_i{%Ih?kAT$AzDet!3#9%fK(k-seRVWu)Y_acybF9R9=45Z(pTO=JI^;ZL_Uk9XqBamSmkbdt4Qm+?Cy-xtC z_jw@0lR)atxmD|32&7&Cka|}E8Ez2yEg}z!JTCJ01L^07K&Ceiq@Ujb>F2LNhO;(k zxecWJ9YD&j0Wz!w($D*W7XXKV^MS7l|4)%m+o=6i0WX9+2z)!RUHJDz{_jAhGX`Wj zuLBt}H)*>$z>C0R!tVw$|2;t3?FQ2B5g@}5koq%k)AnZrslO0N{Ut!^mjD@RfYfgW z+Q82O7XTjzUJT5*UB}M{QtvV#%d-qfzokI>y#YwSw*VQUK-zx^Xah%pw0{vu`=0@6 ze+)?b{{+(B*P!h$0NUVJ0clqTq+KjsrLeqdOrnH z?=>JpMo{Z51yZjJNWE$x^=<_+#DMhoVPHORRCs1c+vNgjcM*_wg+PXKAnmpQ>HqUU z>g@+o@85w8KNtRRv*w=xa!&L);p*BouCL#77Wm9sRqEYK|5J0O|G%em-r_SYJ7bA; z-sHJsXOGSso*T<)m{X*$r&w_ z-$@|D`@`vT)2Y^P_o6*$KLFjd`)g#4q_|D{cn^?a1CYNih-khDNc$zi-RnCeu4BZ# z*2Q=Rdf5ssVJAIasHWQN0pCp|{Q7J!=!JTf_#p&sin_$x2;Yqg`ex^#dUefuPr1O2@W-M^; z)Au1A=JyD6+-;f{le_{M%7FY85&oFS_X&5GWe7e^THZA~${6U&wCBbjr`P8Z_;iO+cp50%YhE`GX?=n8*i2{xy-m1Y|A!R(NSr`?&$ga0ifW z78UNU`y;NpH*Ih_RO`8qq_5}Fo`K&S8=2zCpQN|X|7P!9;H(_mzwb5ERMXZ>O|;ck zDq*A)!jvL}QAvoVt)k7S$vsg_sYJ6^ zW6f%X`~Uo(_j%v{=RH23HQ#ld=dnA_YrC#>t!vs$-hcVb^ct5#E!U0C9Z++UfRAeC zZLn^nR=S4yXV>=P5ko`%2ewtHg(N=i`3g4@Ku{RD=6v8A zO)fsDs7_|>j9Te6IR;g(PrqkQ2?f`_<7y^^YQ`OA@uTBO?-x;%t{F$%)0uz0&BfC& zVm{Kt&lkD(kKfz3Xm8tQ#!QyK#vFB@=jvG&=kVDUCk<+jgXJCTey0qNIS?_qAxjg*1 zyL^$wOuF4_=nwVoMc3bhs_9E_ufN#z#!z;xptjkITptf5GobtydjArr{oTi|{{UrK z?GCeV3}xRO%I;REZU1wq{Yml?)0;x|w}r}k0#t-^pkx?SoGYRHr$X7^3}t@@l;y)v z@&c57u&n+rlmFy5hDk@*I<>=dB;08^+d$RO3#z6OP&LkkOL?h|o=dH+)1lsNhVrR* zm+7sbq$8AlFR1?M%dCF^l-vo`zsB32_4Zf1{bO(c%G-bR_B#0%ry-QIf{N4K+xvR^ zKyM!hm4A`<-{<`gd;fvv^Uvll)#q=U$J*zyo8A)_>dZ^^EQFFJQ12e{_7`3M4XUp8 z_nO_YP=04Ywa@S6~p9qy_DwO3yC|L?+e>ar<<52dmK-vEj%JNGn`5wwX z@gb|L36$T_P=2RE`JD~rF%(L!fbts$HJ%(OzdR_v6;OU_pgdlNl42;oFQM#zgR(zp zwb?gxa?cT-%CJb%w6UZcj<4y)JN zpVXXc*O1g6hvq<=3~~gz#`67 z^&MM*k5RGG*O=WVDEZR$(Br0`0F}3w>jh9f#Zb#FzR>iJP|I%&)V{ds6Q&;tWj_c? zhC{_0?d?~2`*d%g3l(Rn_pkE)C%pe@Z$JA^h03(BK8lyrddI~vOV zawz|6pz_RyvRncs_e0sQg0g!C%I;+-i=|JQ-GfkeE1_C8di$H+{$Jgu1Ha_ASH}ys^(({FzYi*1CShbJjl&N}h8)$RE(|S8WpWe$}Lo zc8*!Q$YOMa(RCHjraE4MI<|fRb&c{jsP!S~1)G!BP;+z~)b=zGY7WQ4@UZ|Y%X}zV z3>7!1^S_J!jLeMS8JVd*#v;#K=5-`(u)0#A>P&~KI|qiBH4HCnsBwl~v~jn9X}nbX zgHZAW)Vmj<#`+;t%wM2l*57FQ%TWC#Q2sx=UiBr@t3&lSaQ*MjNpcJQ#L&3w1BUL9f_#>_$-cGPH)8hrc_{|6RLe?zyi!qh^skZPc#uXZrkfrxwXrsCV@y{96UT z9-?KJ>$T0n&TUdl+~?5OEJiBSyPi<>UJW&;GhM&g_1j%PakDRPsPP=X#p=HRYMi0h zZ5*?p>b?)EeHYZY|LuCcH!R;tQ2Ba7tpgcQ_G7*OcJIFjYF?i3{#U)f-1~olny*9N zH2>C6<2eT^{vdDv7HZvTRczmZoC~F229QM%I*>=NEFyQ87(Iz!oQhO+w%%I-U; zc#YpRyXH`K>)tcFH=*o4gtDu))$D3P#c2iAe-u>zh2DQDRGhb=?7oJw`x(lv#rqcL zFetm8P<9tV*^Pp-y9KKLJSe;7ADCTND7#ak?8ZXbT?u737b@O;Pcg`@s8u z@cw^$|KT56f3R)-KgHyZHA5}pj)-~QQsDc80n{eR@*4A?##9J3#u8__Gi95#cXkeN zW;yemh0YSFIV%@GvU#`(N)|)CdjKluI;foggxa6%bp6qft^aALdEV;!XRd$ldYS8g zcYf_NTceoAx?-Q7rk_}?-Jx<1hN^WcRIN*4q4#YoHQQZK@Ag93*80?J)1k(7iR%lY z_Jhk@uesg!duKu&2d?f7&M3--XJ%1Iq44@BhvFYwWcCL!kQGLd7}T+b{O^JgE7>iy4p z|7P#s=KWuIf4TR^e`Wslq5PXc)pZ0^-s8RhOz$7y{lmOJ)BC4;|6K3C!}}lf{&n8J z!TXE7|6}j}&il)~KYo|xPl6g>OQ`zVLeFv{@?)&cd zjl~%Ubx*=IQ1>L<2z7tr%io$_0@c4AD(}Cb?io1hJJY9sZ*?q$s^fMjyS-5NF;@M- z^oc*3-Stp*bD-?*hPr>bR=MeopvKh!%C0k1|20teLfi;-FGS8yrq74!f5i3muD=Nt z|0Ae)-$KRP>-~%NaK1Q5e|G`lG?V*Y|}NJ?$< z>kPH-4S?DvvY;>b)B@gXy{ccw=Aspp-Vf?LW2o!V>q)Hd%oiVJ*J%per&uv!Ttf}+ z&7WG=axI0Dx_noy+(EAJ|NHXa@@@6lO|j|hc2l6_Ca78$yMCYdKkDtp-u|Jt2k`@j zpCh;ZkN>Z>*K?J-UrJJZs3R}cmJTIZu2;l}`u%OgqirtcVYl3EH@WZbzwqtmz6r?@ z^OsU1loI3F?WH`YS9P`Hdw0pjP;)T~s%56P-vMQ}%G-;)y-|v_9}Xp_x*m)xn&IWX zA-Idgu1yT`dNVvmjx!%tx;G^1+F@P;%l#pg)IZp29|KkEez~LOINS4PVK2#p1@8Ny zw*@hhoAdv%`c?k_Sh{wx*kcqN;&aV?8DSssZ{FY0qOsL`1C%U;S_aR0`@61xPg35Otl>Jhu&lJzN{sNT$7AXJsp!~N(`F{iD zU#*$>B}2t&4&~PY%C8HQUmBF(Sx|l>pz>V_<#!#F-%U_{w?g^lL-{=f<+l;aZ!?tN z`%r#6p!~jr^7|Fauj--ZcPNzKKq$WvP<|7j{H})bn+4^U3zcsrl-~xZbSOr$NO%4=V0psJNFw#hnNhcMepXJE7vPgo?8kD$Yw#af+ehdRl_r`{~N}dljK9Hhw5@aTlJ#K`@F3_rfzL4-XNI8 zOEC()ZKLbK{6;_HWv|EBf!#j0ZFZQ&I~=OMW1w12gqovUp!NlKLCw( z-qwbxcC6Y$EXi)D+_l?U?v7Bo`$FX&3+M4t-lw3X49chZ;ih+mvFZvRKekt%%Wj^( zultULGu?l!x4i}x{~f3dHQSlq2ukk=Raa90|H}Kzy}w&~>pvaJ zKND)*d)f68sQ8~iiil?>UOm8HG^t7&h`FKK?{9pZ`L%SAoxJ@dZ|~{t>E3>^w`X|!cyFKL z?bkv@e%AXpd;h!M|FQQUaiZ06Je2f;s^cuz=R+N{S3+Gc9oF6SOenb?s(p#KukiL~ zy!~fyuX>W%H-xf32I{)%6|O%Cm1iRi%gLtKg_1^4bv5z!_TJvv+mG}1UfzDLx7Ru) zK73vF1gPt-IZ)SCKXLsV?@vmz{zIXzDk7vjs|iay^*8KfAZJ$j8&?G{zBiKDL84#cg-G#XS~kyPoWN4pjeqZ+{2M@^h#; z_|^5qKIYdEN;0ALU$da*=6a35$91T&=eb@8HMSCGIZWzn;|QH& zzV)GEHg~-Pj5W^i|6jeg^8ep$c#NGtrn_&ZVnu#-uEsLx^v5%Tvd{Hp3zhvVsNBCm zNsaW_xr4cmJa_Hpx!d6*=>rvOG@R*i)_Px)^D4)Ub)RCk$Lox3r7_gz|G##!J2Ij_ zdyMX9ai>GcTGuP;<=K;dmtuNwzt3XNvkBW$x3ALQ{OdrCp*2*?K&W*-1IAh=L7sro z&vIGkxiayW%S0cT$e$`oeUM}dZ@Vbp`-*VZm>T7 z-=cjl5&OQ0y}mspWLV8@pvKS(s$~S!7-vFlgUemt2sH;gpyoPZsId*yI@t?qogCrq zGo8zw8=>ZS2Mi6fd71_##ZWaIHQe;RPe>;@qLoJ8< zy+3}WZKs(~W4In_3=5#P%f+K?3|pY|kD>Z^L)o{w%=}ZK=Hx;syAfl|ZX%T38mRq2 z5tLnn%dM{FP|^;nt|Ou1p9tl5C6wQFP<}VV@OYpkAIfhPl;1iizwe>^euwg_bA|aG z0wpb={MteJ9S7w%0m^S0l;2z^k6WSSZYaM8p!^D<{Jw$m`whyk##r;K4<${Z{MtbI zb%OF64dr(gl;2D!kNHq?JCxr&PcA2O|zowpQu4W-V|c&ojI zGYzWd45&HCfttH~sJSeHTIWh($^cHS&C>)NAUCO%^ZBS#Gp_ zjALo&SQ|^iM82!yCBMW;mZve)HhYZgr$F^L%(8KIfZBFXa{Uab{-C}CF?{YnWB+I7 z>U)(IUe7#YNmhHzEuLdHjH^Ok{q8t{dzX4f{N5t!vqJRwRvg#B4&5I835s+4Y^(bn zC}}*U@;JihuEQ#yyJmZx9kK1@_E$s6OsIK#*4v}!A#%Ab_BbW(TQ1*ftS36}jrc9< zysNFIbx`suRF3zcT0Zyoui&38gYb3KsNbKIdJVO&vDh7rFM= zHc;N(Tt5v;#z3tjS3_+J%b~V~HBj3^5!AM@WSaHA31y#rt@$^G%6AEr-BnQAOwa2~ zKN~9UI4HjYD0vFXZ=d&f$g$%=7pP;}HBjeSg|2@Mb>8zc)OkzXbknOs*-wNzCQgIO z_q6LTx&A&>{-ha}zX??S!BGBlq5N-y@?QmI|0$I0hO$5Mdb8^WW!D$V?s_Ph4`ug} zx2Mds_U2IS(d*j(Y2D6Cn#8^xn z_Wm;0tIsj}x=_*xs@7E3hkE}gZ@|0mwR!}}9&vhAuq)ZASIwY}uJ{sq(=mb>11uFd5YQ1(-xw#%7N_1x+0E9Y5z zAyoTrDEnW%z3R=@o&r^WGblL+YJSg$ikkuDKLN@v8%kC}*%d(9Jp*O;8kF7JP?9j; z>}o;T9Smi67?j;nP%;E6-Y6)$E1~RipzLmhlBc2UUVyUO0%i9hl-&*}X>g0#HG=Bz z0M&mil#KBH|5MwW{RZarnD+&D^X)9pYbk_U$4guJ>a*O)lb5JecKyAZy7Mb1>s=o`ATnM%7X1l%sD&BqGUhM53diyut zUO&(L4~4Qn5-LuAZ@<*r$GJYs^#hGPx;;6CXN0_E&j``EP*NA$f989V? zR;wo+j^?GBmU`RMuCI6fJ=Z^W{U_Ih8lr!jlkT}2-WDH9<)zqHK*>Va^IU(-^@>7~-eEO$fRdA4PjkJG>*uN81u+7KukTH?Ymwpg>o{A#8oGTSn88cSBgflr zbA7Sv`L5sV`h%`l<5d;bQgI)XgWOm58o&mLB% z_>U(m+xPCdUc*+8v)AJ`yqj%~mttN9C3iyA@Tu!Rd;fm9xR<7WjQiCJJXg{(iK*-lC`cs<$BwDD~~(YGwo8l+B((;+x_zCT7N%(CQ{VrjD7d{ z_?KJm;@%0p>hVX0>=7m zx6b2^b>De#h5PUDwjZEsK4#?s;zs>{wyhqs5B8GLaHjk2^tNwZ|Cj5>t+E_vL&`OQXjS)=};}^7e617TGXd%NncY zj>m1@9*3%}2&(^8DEks9`2;F%)k4#gp!CL2Er)q~s<(IX_B3xl%iGhv{bFw)h`mpvIC7HK&VVAur8W`?a>bj)#&{q1vPCN!I^4=~t`L|4Pwuzrb^6xqluk^ce4X z+jgjRC1IV_(*>%YKCWK@)qfRK?rhhucRjk6XgxVa&-<$vvc10@50j3!ZJ^L&lz7Z? zsF9{T#WhM^%6HV$HuemtIa@4wOYe5lV(54*nJ`=4|Dh-WQc^!Wc%-PWZhG1sM3pSQu}l1zn~lclb& z_ZqfAjd7o|>2s!chXZ(N+*wd^EmVv-P%Q=Cf1tV}uW4qSV9Rl%$J*hs5}qffe})TR z+niy?zsUC+i>!`4P*VK`(`!IU8`qC;eX#36UD2Ooa=ex-?26p>TlY=cV6p2#$&s$7 zxjx$U1I5nw*tyv4cW&e77rkDz99yBJ%=Ng9rq_d-_amX^`*ha_xqg}JGoU<{y8f{1 zZ@d02)b^S9lErHTrJv&Z?NH19G1s4U{e9PWx!(L`^AE=SR}3H14sb2M$meId$K2@L z;Y@hNayw9p};p_Uk?j5;q^tAP)#j9pN07|ZbnzI{SU+?{!Tz|*)PhJ1o^`Bk; z#r5bhhR>t!t$eR>ixX{~E_=;#Cv7Ho#Jwtu(X|}kfRb(Mhd)5IoU!H4=hdI>dZ;U~$4inkaRdaT;7TVG?S+`%}aV`X@(HrVaAo>sGKDur)YjDJGOJ5c%Fhidr< zYJEz2)7GQLQ0Gc#L+u|gfZ7j^fV$pzCDe7sCtzf4L5=^rthiT&J7aWAOYQFa9P&wa zK-Hg6Z1uN+s=t?W1XTSqoy(!>-w0Lz4w&#ytGzLl^mhGB*CU@RmQMcYXECcS5Y?jB z&SR^E(t<`ffLJk~DHgGAMXqPv-?Ew>gOb->f7A5_Z&#l0=>1`V&r^5o2Dt4ED0$HJ zm9B4e{XN%zcRg5k(Xop?cAJv;Pm1f_eT=8NF{QW-hgy z7ZYEy4ywMbP%V3*>TCF+)z=NGzClp+Wy4Lp6r=Gri*Y1WjOkGA(KS|V`x&|9}GyW4B_t{Wm zxByCq!dPR89$U1YeDMDF02X;YQ$6-l&$S*Z+cv0L_CeLww3J$WKcCHe)v*jpUUmID z*CV%^Qu0La)6^D-#;4c%Zk4y4y~K*S?L;pVuc_O1tEn%PTmluh)@L@JWl(zO9oF9y zY7D2l9$9nlDStd0KbXr#x`rHaU0pU3MbkVfcFysY$FP{#kz>FlG>A6YW_y0Mt@HOk zLdo3E&1M;tJP!3P?h9Kc!=aYR$52(&{?eBbR4qq9*`EL<=}>m(Lv1gQx?Thorx?ob z6DW^wp(J6a*|&%CKgRU|u8)NBpA6+c6UuWDl&plx*X}FxKOV~d3@H0SP?ncL$uubY zr=jv~hO&Pb%KmdG%W^2Gxy$TNhq508Wj`Fsej=3RbSTM#vU>{3?o}wetxy(ULdh>s z>&Cxb53d{ke_jh>tQ)~Pav(P9R3p@$&#BGJnw2&wZd7zg=D`^aQtk7q;z=}a?PIlW zY&x;>dbIWH_)7nq6_Zdy+9che-VK5pOE%Ql7DGi|2Q?PnhW7gVs=Lj%4OCxy*CV%q zV(N%Y6+uFSTxfl#r7`~hQK3r$V4I%c}h za=6~#e+eb!uAlzB#UBb4f1>L*xV{3)V}t8&yS~%)DnHmVZ3gAv-1UoHAMg4s*Yly4 z{nM^*c740+!MOg4v95!s`?y#CXtiu{?snELxAu;3zk8;l_u0{UHMV2Elil%?#i+N( z=CM1}de-0dOQ7Z?gy3zf1h(DWePbfLx^&nQPWnJcRao2Y+{A&8aP}0)%Ab&KInyEMV{QBeI8pyFgh z#hDHz^Pu7^fbzQ&D$adS7OSEBo`CXu4oY5y@+*Pz`?jk2?SZoR9m+4Un)xL|NmD4l zmQa3|aLq&cMnhSwNi@G_pz>{mk~d*EA5_aXQ1SOb+5HYBHEWpNK~ODyppH|6YjSM` z=0WL8UEdA$xwly@>%Rr6ztHu5wN3vAl>aexOdklPk8*vk>$$E!=K5!@XViH4Mejk*5Rlfh1Bth9XgtG4l)zbya{$wco)1jmvl>G%z%Vzq^%_-2?b6)P0w{c#>D&hN5H$v&Jx?ZP|=^df&TfNNn>s?;}^&5?{#@2sW z6SMCD)jkc%Z;iMA4wbiNQ>(uLRQ=7N>Q9BL^mwTHdqUNJ7L*Kxs{dlBIHREE;Yz4D z*FeRY2jy`qRGhn^;yef?YoOw+g&OZ>sCe%}#rqU0-q%p^_Ca}8ZD#T6Ld81-N?Jk1 zI~*$BiBR!QgNk<^RJ@C!;*Ev!oD5apwNUYHfRcq!@otBT_YhRPC!ylK02OaDRJ?6a zo}WX-`xYwR&rlM7sKu)ewLH2*#q9?b_Y$bMqoLwXgo-;ID#A@raTh_wT?!=+Le;q% zYI*+)Dt@Qt7XLJ;_~${z9}E?L6jc1lP?4^Mihl!C{9Gux6Doc_RNQx<>i!xk?jESP zaV;!vEvUGSp(3<~irWz?ZWky?gNoZ5Do#37oQY7s=b8@nTjM@0tAv05{SPQT2daNA zl>Hr0lD1HJkAQkUZr=jw_ z1eNb?sC?U@^8E-Ec^_21s@*JKeJD8;Dqm};d`Cj%OM}XH22{QQQ28!_$~PJ+-&Iig zWY< zmG?5J44F`Qr$FVs0ZJA^<-H3k?~oHL?*ypvUI&$T4piPnPnI~^)tKd5{eQ28c6<+~Ot@(ob= za-s6w4J9j~@@<5Q^CncBkD%i0hKlnWlt)5$i&FYoTz z|20tc&xWf17O1>Spz^MO%DWaS?5_D*vre`R|6xzY;3{ z8mRowLgn8KmHz{%{9i$3`T;8cZ&3Mb^sxLXQ2Cof!I>*hRXi|RHo0M^6!Sq|0|SK?P>XILghaND*r&J{3D_AUkR1}YN-6P zpz_a$%6|t`{s*D*KM9rpC8$hqK;?fAD*xwDQU*2tpP-I&qfWIt?u4pi4OAU3K-KX& zR2}a^)$u7*9lN0F_z9|xD!r_ZdQf$=gv!_fs*Yo!>gWL_eWB_&4{9D}L*-urm478v z{wJXFKL?fnRjB-LLFNAlD*x9|^YANF{u;e4e?6%DO`!6(hmy`v`Gf03|6is3o^5)} z-?L@<^{&xA<~cqGE1>3N6Vz<%gu0fKc$(?$pysd-)MxS0uFrv*;}uYIz6t7FcPG?2 zbmHlDPTdZwzYo+h8V$9~=0GjO6;R7`6Vx)^3AM}<``9|r4r-m~14r=Ea(eI#TW)Kh zmgAvk+8EkH^_&7VhO=BB=>0>X?3Y1Zw|dC+C!yp8_+MEMk`Lj3-Tv^$(-On?Df)cx z@Yo4wS?)Ga^W6(7>j-b3377Ix{%4_NqxUuIYd*(7)qfR~-5l5Ng_6g-{Xpw)`1*Rk z%5@fdom)J{ZjV{}Y;r~1$B~b&oIjmoxz0M*Y8eS7S3>pQ12w)qt|zA3I8TOJCZk~Z z8YR?v^)=Lb)#yCaPk_3X*Bfg6O6_Os&zVsAK&bu^Q2rC3;!T5!KOd^1Wl;6J043@D zea@ilZ-cUb5Xxem_rK-+rQZL&_s0(~|E5rN+zVAl0aP8&K*fC(D(*I@xZgn4QR95G zKLpCY6_kA{lzk5<`+iXNW1-?-4P`$I%6<`){c7jw|H|9{?Rw3DW_O@< z7ct z^B3M0*HqpXlX}{BEOR{O3eT|#D(6n98WJzEn%cq0-`QuPtCoWCm6H5BS@VvR6>-|BTfZ=!(?Vhl7kGI-=w!m(g7WYLc z`N{PP{}}fiW_p}OZs#n~*o9jMB*zI(m_=$h+Q{X9*{{cLzqrx&8${I7d5Yz^7)oZj{*ddD z_rzq9Bl=!8wFRQ}ORqUYs)f>mMp#I!Sog)0c&=|e*N?7Oj4{T2d$~T&URTE$XY_ts z`ouquZROY4SQ}5ZvG#^qu4lS_K2-g~U7rTEogX~S>|4Uf^&qG-VE7)2sQY#bf_gp1 z2)MVqGZqoO|7`;dNC)oq4JDv!P^>>lHC# z%ypT^S&r>`xBtcc>*Q3Pi|87X&b9TiJ9Y!yb~cnO`3v7v_btJ0x7&7`Zoa2N&B-}X z%cji?+XtTjrB8q?SJ+=s(hcH!NitKg<2jHWXEUh5{C$22Gz05#q#ynT|l7kT@8u2-9Db}gW!lk0t5zZj}# zG*qoK=Gk)j9_sTzjhjs$2c^H{`c?Dov*gWCd&fOc{%N;ZyxCB)0IJRvQ2kFpeXdB& zHGRbbv;P)Keu1)2T4?>Ppgw<`?)ng@YaACYvTGnip{{{UgZf@^F4Xsz%Uplo`%Cid znn<-kFd)wQ$LfLg# zY}azSLg~w(>VE{P{%4`;+60xU?j4q|5mdfZD8F-|u2+t5eF|)d{;2EEL&bdqD(**6 zad$#R?6}0@c7=+2E|mX;Q2$eEE7bpCYjCIOEui|3fXaU&RQxkxc)3Hx9|0A41(ZAv z6@N2S+#jIg#4WWrwV~oPfr`@sDoz)u2veYBCRCiIP;p*_it`p!Js&~E*$oxvH>fz( z?y@*%Ldp41amGQ#nGF@^R;W1nP;nlGit`*)oL8YD)VbT@G=z$i3Kgd>RGf>U;*5fd zGZ`w*OsF`wKt*^PNN4|h1ogkXGN9s2fQoZ1RGb^3BD@JDA3(+V9?CB{ z-~3uY`5g`AcLJ104wTG=^1Bzx@8)|f|5B*D4?+1q4dwq5lxK~5%|8Xozay0Y5UBBw zhw`5WDF4uX=D%{e`LBcWe+A0_T`2!gp*#<}-~3ad{10@z_@B~l z$GsC{URx^i<6f4}NuIONSpqd%Z!Cw}H>RvGzs}A9&Mc^HAP;JrD)jaeSjJ1sxxp%1?yaGY z%jr<(F{7Y*vR$9%{i~q-3SHj@HP$ky<7TUeEY3wxc8@|`i{0gVx$Cu7+wrkI)N!w? z>z_l-QSXPXzdw}!rBLxkL-pV8{r7u+f%iY*{m*;<>)yZB`?q_4(?=|R2dMa6pyHnZ z6@LKKG8*H09@O#tUMTyAq3qXs|Lai8uIZz;EIU9QpYvUR1gd{MRQ%te;?*gzcnzWA zHG}dS26ddzgz~!<%I^gzzc-=k_yEf96DYs>kC|UfD8Hkj{3b&A zzZ;*=9iG}8O7L?zGP<|tz{KiAsPld9-2`bNLQ1*vBVcS{< zD7`zB|LIWv=Xv`T-hP$0=Xm=fsPCStKWXPzW1!BfHb8Bo+g$&~` zI#mA^P~VBoggOuU9BSWj_cONd*Z_6@vfK59_151Ss{I(KUjpLzE`2f`90J)e}@`p&F5^K2SLR-3^s?OTrY%* zy8*U<#ZYlShKjozDsIa27Pl2t+#{jpuM}w=PuNDXodp&5ZK$}P!o%TrP;vhSRd21AEbg&TaeF|;?F$t*11j#@upQhD+r#EB zn|>rzzT=?s&4kLg5O#q1Q28E#%C{bB96O-${Q#BkUr_n#y<+hP!Xs!O=lZQs`R{|u zw;C$nuTc3CH*vid9t@SQ4OG5PQ28!`$~PJ+-z2DfH$cU`6>6NT;8E~juGf0i@})rK z8wQmx6CMq(g~~S%D&G>Qd>f$h6+`9w5Gr3ORQ&F*S-vx&#?v1v{yk9fABCy#S*ZA% zq2j*}6+dpX#Xkrteq*Tk&7tCVgU7&;uoIjFkA?TaF7R2`-|+rzQ14 zL(TUDsJsuu)8TinAN`Ky?FyAQ4Jz*$P`45VyL`(q4HLH*YYMq z_&_Dt7vp*~j^xLypkO_o7zt4SZ)wwns|xjG%{ z95~b4bD_?C3!wapy}iu!q;0kjNQK%bq{CM7hqBLg7C4KYWl;7K&36)WD*IHZbD?zC zGhtvS7I=HHvkdAOk@T@0Gg6_BvFT9pGNF#qx!zykEQVcaFN57+(kFH-N`*Rhr9&MH zGog-!xvm#L9s7!5_}B^4(3487&Qz#vxO4fJWvJF`3dA{*H`&^IPZgoWF zZ4s4MdLTjG(6q{VlZX>5Zz}Do;Uv$~*Y)#UkIb7El~;NoLEh}Bycxual{Y-!6XR2- zerEY^gp$Rs-{pE_{*0*n(gO+d?~Tg8nmDoYZ}B|ud!C)Hf8%;&-khks(gO+dW?ox) zzV{I)R^FyNY`pEEq?_v}xgMD}KPs>EK!UtGqw@A8POQ9RJ&8~wfZ#?Nj1pFzoxFH9c+C6RTMs*d_qLp6t0D~f!srP>1t>M4t= zCyRJ7>(RYn!`L?Uz3i|*o~x0$)9QE}N?wJEeZg0z=R<8LUqiL;f${LhU8d(j$wyFj z2Ra@mH>%EO`u)F44h^vH$Wy*`5Yf(|J%)7C{{c zH$lzVyHM9y6Th+J;K5LOOQ`;%q3q9u@;@J{hRdPk8rO@Vj)xz+zQ_Bke{1$lq2x%{ zPyWvIbD`p;mf1DilcDs1P%;8)oMT*%To>9gKL?uA|FpeP^BST0aR-NLm(?syEUvt6 zDUU?glyy#^`ufhOysoeKzVf<-NobCbWrcGS)Tnks&1oV&irfxr&ig>c9_^e1HFlap zoBaK5D5>&;*&YkEe0#WlCzPy(de{6%(^H||UFiB{uCI0dC8%7lxgI&seg0&g8#SsH zN{UMk1v92|H`z;+Pvg{>re0rpzPgp~KVMtPE!(|bLqlwW@elI%S3}8MDBH!ZuXcT( z>vevz{_aq6rt9-uUjh|-nd_0`&5RgtqeH5P>TchEosf-0HE90DjG2|kxRuzE`x{I` z>pZXC@Adab@39)MgsLf6cVj(sC6~OiS%GbMe--f@wZT7|{|+em397EDdu<(Q2-R~K z)N<(rHH!10*1u<9Wd5Lzzsu<7))jcITZk*!4OLI=U#y;vP(6L2>KO}F&pa4?k4)ij zR@>`PHl2$D-)A}cLdih*Ul~)ZXTl8{Xmg+CvGY7vAyn=XsI28swWa)v z>qWeje>jx<8)^>v{M&p6Lh08-NuKNPL$&vuxM>l$x%J)z_@sBxX;dU*TsXMklhPk(ov zIgnkWHZ?*`;!;8>W%Wvvit85D&a9PD(?1(3zC`2GK3Vg(?S{(R-iRvfhiF%gAS@%O zRkkyo%f0rE&K=GKd^IO+pvK+{261Nk`z27a7Aj^b)H?8wgoN;NTMDH=0M-8(lsxbK z8@&B>Z~qV~N2%+P`=iBwGN0l5EjQS+d$sSCtwd{yGAj4pIhE&TK-Gl(_DkhnPYQji zyE6>NoaOJALrKSK*4GtE&T~Cjma%@nvyQqHZv?h(x8MJX*z0kcR=2nn@sc<ivayT&?N6omQTN#G;GS0H?^45J_kx<6Nl@c`yrwO;51}l+fttyxwM;)4YEBm) zWcHsx`R|01@1f#{lFV)xlpc)X?=tzgnxPJHO=A8}%v>M$OkzuxL)EYmY79GIc)4@$ zuPoZYN^_#$GR&xao*7p?j^{wLo>a4Ej8(cPIrxo)_if>SCuvMA8d(1RFmjBso{Ls? zu`R3B*oI>V&zz39$2hJw*H(J+KXcf=E9H-{8Qaiuv~1a4fMZYl0(5K z4%MA>iPhbvNkXVQFV&d^C9_?h>-vzU)_((()M^$rF5RO#tVY=%cR1U%wG7YE5&K^5 za}AVS);uc40sg;1vB#K+{ZjXN4NA7T{;BI3Euvz^_p%=bGlDsN-89(n$l<9M@5&O8>38C8k?0;2NnuqG_Z+qJQw%y?te;|~6(9Y&!7nC$@e}MVd zXY{D~FYw%b@R5v$Iqv_Gw_V<$a=h?4aKt&TwvjTAlY{MIw?E@3i+Lf8Tpz;E=$jGy z8GV^UY@J(yPq6GO?SF!OVvKd9!oDWgiF;PdtQxiNNw z9a7w&sD5U>jO6qrjYH$+`Ge8dX~OG>ug^Y?)CxwdGZk|a{dzpkS>XCI z*Au!&jY<3IiFVaT>p_dleP4-PS-3g29z{)y;A(B?W!mk54M%|2NCOkUJr}=29#`t8s~1PaqfZPPbfX@9Hb`H zUau?EIdu=HbLvaspN&7L^RF2FnKS7MTPLzSejZePg;4dCK-E_cHG-5=t-j9A0WkWr z=U?gbdf8Y`KF#K2Jk;3IPq*Bkof&(q$sKBjTE?9iivDleS}#+59AnQi-+6GkzhB+g z^85@V=PxM(>$bYmV1C+GEXeuJ9b2V5RjlYQIv}&uVDY z-^O$t)H-m9>qB9z8l!)slseYdr5yLmhwI(=b@$7V+E8@V>|6 zuXo>VaIgEfJm2DVgsS~1sQGU*(Dd#wR-Rzq!~2iz!I`C<|73c;(e69PW37Ni-WIyR z^7ep{@x#xYj@n=32J?gMVz+&b(y|5&K&2i-PNug(yQa|~2}m0=0t?}wYfy6Ekp?zhVw$%O@*?%3CgYz%5DRc-DW7e zx1i>!>E$-=4p4sGp!|kG`DH@+O@Z>e7RqlE)O@`Q<+lUMukID**A&X{Fetwxq5S>< z1w<<##ib-( z{ANS>&4=MSVYp5ht`mmqoZxlBaGg+oC%|x>FkB}L*9pUQ!f>51Tql&@4k*8)GR?0$ zl;4?9epyg{GobwDLisK7_Tg7r`&g*foa0BH_a~C4lbu(D=UJa2)aK_J(dSWFS6Tggp``ggOb?b(_;?&~zQ6Mt zJ05q&F0L-$%kV!VB0m$k-+s@ah|U{#5TA`YRepB-em22pzliaLrdfR#LdiJSE9%uT zKH~S}I>r}VYc&^OyUFe6U1$DZLoLr=Tt6nK^7t#_>N?K7m9N_=_D+vI2tP?Sj2=gs z$E-2kY*L}toiwQ2XL|dkP}@zAGn%o!56QjG#+KSK#%H^;q*f_G+kHTck%U-{=~n^`zNW%NQuR4QdYGgNnBU zYAm&G_?tDS@Oz+$XId0{y)E274Jv*HRQw$2(eoNyqm39xuNy7@C@5J373XVj59Taj z^k=Bz99ymlH<^DM*o&8z!xV3O)b)xO_2WY|`}zNha{rCkczFq(xfRWEIDV=V$?R4M7dHc^vE^Vr{#?2PLK2-dcQ1f^q)N;B6%Hlex{pLKV{btSi z<{#w$PZ>R*p&3?l3*t)BV0gL0@N$K!Cm+h92&$e^7`nx3IT1?6yB^dOovVfC%E4~G zbtQV;@qOIBT+7j5f#v89Ro`i@Uj#LuLC%1&wz(Caf2{k?Q>>`GNeeCBkx=8lXOYdr zXHa>+fs&tLth_<~fCu{D@0+}q^gN4~2^BvVYTgUr7GBCx<5sh&4`tH~%I0vW8qbEZ zxCm<5jDuQNzJ>bSaqMk&j2#N~Ibu2dJGBR6_`CGwoe}&G%bh;P_2iRmgQ|ZYRQ*kF zxB9z7Sqz4%e=1b{OQGst4|R^P4esNm+D}|;G5bNq9PN6_9o9b-N+v+%ng%sjbD?@J zUt;aEpkxtL+?`M@1$SC4FG1;vORc7>p=xSym(`RGrO$(!+s~oSU+Ug%=P!9sdZFuE zUEi2*pWQya*ZL=~NC@8_e;?F6wslt~gzvF^59)VjvsanE9jd>{L*_RU>fYPOpnhjo ze|19m_hh4?^o>ycZ$Z^@-NSYsbt}|)R3X%7z&Bj~7V3N|@e%7k1?s%&JE(hxkA2ki zX;A*pLjCUV9oKim@be1_62iZ`TlrW*_@36aQ1=oKdeZb;pnjKk7nJ=&Q1MP(XZ0&8r|<+2cJ`92IK&p<85zq`)KM!i1TJ8E%Q1kV&>tDIP$Mr@<)_)q5T<-eyuFrG* z9@kg7z6EL@wZrvqz5m1)eEC4hQ?7sQdd&^ip9UqDyMCAJue!e1^~Nun{V*uG(e>M0 zkNnOse-`(&*5X{SXLbJ5u3f7Ox7FmFs+0W=<$yMS$FDZ~!A^Y7=l{o7v4U;#Z{>}y zBTBD`)gV4p`v?18C7gqCYnf}lbuA$0p=#lEIaI7QoomS~OMTa=^*i%jYugslw&I;? zp)~qxvy1|}Bc ziE8VH-5|K0HrY$sVb=!MX8Fl3jaML3X_KAS-+8`%27RK|wY}>~JP&4%i)N%Y7s5PtvYMwua%C{40EI&ZWKB)SFW%Zvj@*KRF^+&NWi{+XHBgYZzo|8?pt-ca$ zce{PF*Ui5>tmGf#y7W%>AB=65+dt?2-$(l=|FMk1`~Mp(cgh=#HR3Z_Wo!WWK+QkW>HoR2-HBj<^>lMCH^<=v5M(m=`!`&w}?=6e@6qM|9 z{Xj8GgE79nf6T!p7VAbRxySWNvHJb-9qynxHec(pD+z4hG2f$MrDdhDMfhgBZ!hcy zyX|f6TlQ|0?*Z;(S?n=tzsFdD?b1IN?WRrn)3;hZ&%sLd#CVovvB%qnZTQ-k*IV?y z`EG-flRq&1R49o&9wgov`!^114@BFWUL^&#j||$=i5KjP)TVmHOwTvl^S$Nzd#*?3 zZ>Rja=WbZUIv68&`eT)Iml7*h?uvPB!2e6^8U2kP_x^uub1@uBCPIzv2G<|={$L#n z80$X6KGdl(7rSp6O#H;+p9m#qLd75A`dsf1;s%Trf3(M6;l7&`%h#LT9_Qpz%d;7( zmWp_qQ@^JpeErU2b^MeV(f3MZCx@~J)Co=MTsJgoW6jXetXiP~BWi~lmRAqe-;o%q zTT&yGu-)&~=)`r_Fvb~ToJqSlXXZ7ckU4B$E!3X& zgJ`eXxmKmVa9-vj$ZyM_MyM3uuXyFlpM9B@S5=l*WP9LK!`G>tA8cLi^>sq%EM8h~ z&lRKgRdLn%AM|nUE6(d`@C@2k8*7A`W$``xh+3ig%wb*TFo>7WXO;E5N}UzU_V5~^ z!#7qBwaQ8iH5*YQ)R5&`|K30RE-On2-M}lKm!!h)uv($RN*EWu&G2o6Zv%XjBYdlU zpAhQAE1j35C9fRbui#bi1io4>%t>Thc)cEx$a-Df*6U#0A|IB+`TNDE*Qi@HR5$CO zPz|=1govC+{>W$ha&qz#!{Xc-=8$Jlj9f)?teO=u`oi-N)gIWFMzt%W?DhFU64Y~`<(9N=|9O#L zw*$26vx?-e;*LIme{NKJ*)xCS&wjRAXkC2OQ0n?W+VW`IOIx?6{%AY-IlZqMN{g`T z`+T)fVwI|)oCv$RFY9yAALke0!Xy3^6I;?D9FJ$wIIB5-@cw+~I_C~&5bBYaEY8c$ zcb(gv|8~ArWOjGEKF4{r^K$1P=V{JP&KAyi=dO(w?+xdAXTEc`bG&n)^JHfm=fTbd zXZed3x71neeA0QhbGGv;=U`_~X9s6PXM(eAgT;T#xxx9QbCq+k^Co8}pTC~YLC*2c zsm}S%yPbv3B4?@dTjxG!y%(&mw$4t@Ud}a@{>a(vs*v1YCbN3FkwY&()w&ZW+U&Y8}! z&Oy%3&Q{Kb&brQc=U(5QzIEQXI{P}` z@VqYv`JKC*dz>|Wy*Sv}!WqotxqW;0IDf#gosJqYb}V;;hE5$lbmIA$nIk7&z<0d; zd-n@^nudCexP0=YtN|0Q7&$(D;+U((j2(H|$Vs8}xV{r6TroMbqG{mJv6Dw$5Lz8~ zZl(+;3?DgZQrL-mb>jMsyzJDm6DEy3Yvh#BUTNn|9yxJJ*rj(i8NX4R95GPC(eeF9 zW}QZ={v(G^o;W6J3O3(|PT#MsN3VfB($5HLT^2uXJ}#3dXvF_x_@wZ=eR@YTpT1=`X=E1HX=OKdBzd#rhGb5jIC40}h3*cIK;C=E zIcaEC)|Ak-p&`RYUN&ZY*64{NhmIJTt)<22hD^#FIeg5hF~f(9_5p^*O}c9M#4KB) zM}|(x8aZ*?nDIliMy91**kjP3i@5H5$|=WWP01WNWX$+c6VlSo@7<$E8tvy0kJVtp z_>tLTvO?qIhWNYVLPG`(&(v}t)cWCsImMrl_b`sMwg| z5#61VQgV*W!DPuc-0mqVCKV+mB^4E)q`bG?+wN^_qZ1V=B^48yl|*hwg`DmY4?>t2f72ZrZfb>#kdR@s@`8x_8|eudCd6 z#k$(MFqNY(EIXW)8=v`n^i*`dYh1DJ>P@RR-RMeJY+PM?=%dAX`0nQ}G3Q#szAoNa zyQQHn%*IPhCrhiW<#L5hMNdZOZw%*fvFX10n()~(q7`BK9GrI1+m;=g$(8HY*G2D* zR=9}q#f@DNz2)%d&Wp!4t-E?lyl%7Ce|zbrbzv%%tura&8#jfyzkcb(mV`sNBH9*? zDcoS^)z)sZSO34zvqyPwuU_%)LwkDeR&I;R>Kf_}@BKAl?<=-!+Elk8{@k_7!q#43 z`FL1fS+~A1=8DXe&iO ziq2oRp>}cHqVdH(f8D0di%$T1np|9RNnO*S1s@FCICxbKp6_|?-mokT(DTOf#;~+v z<2CDCt}+j=y2}johHDJ-Cyd4Q>(l;^ZTHMFt+!;0s4Rs+aH(qw*=6K!u#l_M6 z&slzOULIO4+8(xhXoKgiT^sJc8!ukH`C7kmEPUqRM#51>M=iaeVdK@S8!k5UHr;qx ze6?G1r6?&3~Io_&4z_`J=B4=uW9@iXz-!{>X;((qUhpT5{FZ0udn z+NJvPb#*r!8nPRfy=TMv=PkKu@l`9YH#Mza97gyB&!hFwj9%etglp`}#p1*KPCrlS zqW$gS=;Eanb*rzh`@7|LEnWPA6sy~`c*!=bsau?`E_>qdKI6h&x20~wnj3wsdv<)o zFl>&BmtMH}(1C8;biO;?gFWUZbso{5!q+sDZS%&4x)q-N2S;dA^p3EVL(4B)V^(Z< z*Os+w>ozT382|mi;%C>d_mHnxx4~?A^Wm9!UgJ7nVOOoZ*iTu9Wrw!m#xO(Ac+OT2 zF1c;lZer0ehz-{ya{#Lp{LE^EB2T$4Q{Ky9r&4Wl$Y0S+Uy<)58#Vd zUV6#Oio;*e4}Y)nlK=lZ0xh?%eBQ~ObnbbVuehY{*>B8BOBX-?ck6}!)6YMDw>-A; zys8&jUbgs((#3xt{@3BZ3z&TE!Q+_Bdj9boUT@+>mXE#2^3fMrKJp^VhhJp*(4pmr z{(N-!aH7FO%Mbpx3jcrqp^wMkc<}iDcKO(gEFV3z{Fx2E6fcdyOC#`q-3a{MbJTPA zJqN#AUVH+-z~|qy;?N&@!XF5p`Gd5z!{6Zs7XMj&@OktCufL*b<;o3P)|Xzg(jPll z_^u`F=mpk$&x(WJsXliXf4`pR{#CwLe1X?re%}B3JT6}mz8!m)KZ{)Z>@F@j{GD3( zv)tkc96X(8&gj?NiCBB8W+mDFG_)UH|ZdB)SDTZ|!*I-Zwe-*R3pQm5r zZ&2EgSakTI%toEgxv1CqT#6c9&TCMmYxzDuXg96Lcm|Vtj*s?(cjG#fe{+n#5&Fat z(Ja3r+wY0enS3HjbpbzsK|R9L=+`rx?g#aHbq41nrGvkOS)Jh1{1D%~&h!JXpA0|r z`pF}r9xnC6eEGV9Ymuvi8*}~L(H%!bac;+u?&KZ}=sq4npC02G^yoRxc#EHd*1=~W zv%~)n!JCk+<2;2t9o%@Va}Ue89pyUsUNq=I{yE}$f)~)NgL{wjvk-b97$adFp2JXB zhqLk=vktx#(Wj1xD)~c5*BNj1-|rzym+>xC={_DoOpoyl%60JT-)27O9Iil%4!#L( zx|w^>q4SRS-&>+f$KLLDX&|L1`1%uEN8QAaU|3J`X(u`#UBp*mGOWW%%;?~UF{dZ^ zO@3kWg3jeiq<`8u^4E~1`#E#DG1tMLLXqy|M^L6G`AsJ|U!BXVP_1M9S=8$>KF^y3 z#B~{WqeTb*0PT8;!|#*m(!uMI(2e{x^yq$m*(uIlXK(|Cb?_H4p%eTlrt~zwEIiYry~@eF!&@SDzbzPgjAF{ty49UDe;Gk*o+x{sHh<+|%M zJ_9qlm~X(mZsK-Co$eQY0O@*!U*VT1XX*@Ig&ZB@UC7fZo&c~rm=kW)S(yhD)2|aYKV=Q$K>fl??^Ssq9{PGp9ug>5TFry3j zBFyOuE-o{lb?_&V@!2Dy4*m0RsSe(NQr#H(0{3ia?nZT3pPxdl zF7W5OM#RH9`~$S;5q|rH?%%Kue*p>I&GCP7zB>3d7dd{N#RZtsMO=Xi9ehEBasHg< zS`_Huw_oh~=_0N`tFGh*H0$7hy~H*ByyqK_A<`54B<8KNz{jleoY&d>*_d;*P8av0 zQU{;@?(pAynCD!DP8~cE(9;}UY9BiIr^xB@OyGHB>EP9uxi54*x1dS~zpm0T>ujz< zuMUnQrGtkN{SVI&p2583bDa4e$FGAwg=*_0xF3~zkS9=~gJYLFPF>A$jOb?W!jSIf zehlaV9!H-JzV`~x?Jpb=4f7-#^)!bc{H@pNoQE2n&t<66n`p?r2Bac^IjXg=}O~fd7Rr3*PYyp1|9spYUiLwc^ad7mNWj@ap>Tq zulBiaUyry5le&Z}F|MmQj#1srofy{L+=oFuz+>pw6FiSzy}(&(Tt}V5XCk3XxDs7D z_`9h3qI;j;Q)@hR6@Lg#x|P3&7Cp>QqeDk^<`uei_&ddiF{r2b}&ft@;F;8>} zUyEtoz#Hq`Q(tmk+=)EB=yk4#&f^l)>llxtM^ExRk~(xA+T!}^94w5k&I&~la4hcQYN8Rcibvj@75!Ys?Ilvt#(_P$)65Y?EDAMCRivm5*nIAO= zbT$_vM;G&D$kJ8ZhzuRP^fqImGdUjvI{0oZ=wY73oDROQ&3<>8|6Gp(9sG@t8D~Ar zzeT5>=IG zvyiJx_(RCot^6Al>M4HPCu~>e^BX_uUI@*lsMU+U!}04{-v24{K=<-f=+g`QwojYK zI-koitb-dcs)Ij+aox#7nAE{<`iy6e&gHyLW2=KdiL~9$ksn85$!c5+>Ue|+>cBh{Fb|%i_YU8AXks@Lc;aZwOjpc*fw)a zXY+S=nv*@|6;Gm1Pjj@(Ip}oGMN;Q;DY|tz*Pv6^a|_ya8z<1JQ#^=fJ)?M( z+3r5qh(Cn_-N|EnjDrrI!GxaUjJ-amv$y~wx`dO++V2^{*Ywz?uIIm^P)GZWGfH$b z--j|i%z67=V;x+ADjob~)aX9`Pc-N`{>KBZqt4|zwCH+nMVk)36CJvn{|jAuo-gTj ztUAUYL~mH1_hCTy^1~R`6a4ZoJ71l_tG{CGbSss@N@3vpv%4-K)7hTV9`KI}#^Z2i*(9ySiNk@xroKMqxeX&acn(Eh zaeX=Key`WTKSzb0;HOZn7r0~CGf)SYf8RCG!5>G9Zs#}tz&>;ie+`|wpZ|=6Uf}mV z;8Crs`8(*-Lwxdx^VfyE2_rhr89#LVx``8*(!qax(6!U$qyFv!X?^A`{}~y2fjfWX zd7^{g@MGhwb2#lMuA>evL#Yl~MYK;~Cni{No{PX}L%0^P*FLXn>2bw78{>jv&Yg${n* z!;VAea1pw730I<1S92WgI?0b>Tu<}L33E=zc*n2I+poC?c^Hj)l&4XzXZaP6xW9A; z$9}E9Zu=ZZm2T!v#B?`*9p!p}A3~{~;5iiQ1!O2?n{rrtM@Y*>dg{^(PBwIuF7;Mq8}lp)BkZvRDmg7#al3@oA`=1JI?P~&RbBSoA@q_=@fqt zLwcASbFDLE9qvGx4t@e{+An5}veBZ0@5h85=1Gj{X^xIH4q<)%DDu8%JDfs}9^$ti zwHHy#=vLnL zcE_ocTynw^{~fsb!&hTY*YYh`&@KEp((ZT9^2H}E@%@E+lP@iBF1nH*TfQW!*K?e4 z(h~ojw`VM`N4sw1JJ6*&_&y}`FfT839K)WU97B<=;zktcChkO@?&3b==zbnWmJUAq z6yv5#c|Y29FE2aQesvmu6~lUnCorgkXZ<&S>EHKE<6}-YwmO^NaHjqJz;)p=^yqS~ zMN-#uE4p=CScXoW;vux_VV**(p5~*99j8v`;}O^Sd;uDCIoF_8*K;eXbsHy9sZ)GE zD)cZviZVUTN1bInbvhr9BAw3{pg@=NHOSNTd>e9f8}CAvPVxQ7(8K&F()2X@@xW-o z_yq4k%LA5k(b;;$b>vDk=_-z+Q8#fX>U9_Qp+@)f7^?I*&mpGg`IvK-c<*J`g3m;$ zF6JvxtgHA26zV4aJo0rHe;v8HpC3ZD9_J^Kspt8>&vV^>=(_Xn6^=po@DO5pgdat@ zp5|p`u7^(JyVp9;pP5TMfeJmv3n<#guO4yD*`Xd@siIP*{c$J;hIBNT;oH zEEv#vT!KDb#?|Q2wR|g*x|O>FI>`g*)I&Uhc0I)lXw_-&cl>D9d3-M7x{RyQpli7q zwYrtNQLU5wT~z8JegqYIil0WAPP^9eqeSQNc_`3j+}&V&9o9T?(l2Z zn=`tYPv2nPhUOS*bQNz2AL}L_!n7Xd-(g%&bJ0fY|J-Z&J&5Tl9>=f_p2eUJ&TjPe zLkIVv=ojWNkD@@2^PiBT=Xv#Yz8>jXzA0|Khm93?V^}A70E2pnA3?vK;-}H8)3&%4 zNa;L24_&&NKY;QHUkmuxi0LW*m+M^%UBh2MgYM>KH@Nq88m~i(Zs6~rO%L&1P3DGf zxzXIe$^6k%eA~^AM|bn@(XVHCO|x^+bNtE=7(1Q1)%OpW)om?HqW{D~SceNg=sNz= z_mf=tA!Dk8mw(vvAuQ(vigj>Rt81id_@k)OZG7@a%)hWc_n=KL`lF6hw{sFH-OFd+ zX8d(2pV4OC>tenU)4G|%e``9Yhxs2q=6U)n*P3trxaX2?;qM_=5Az?|jlZ7f%ujd* z>fj4et1I~XXxAe=g;pKB^$y3UlRS-n9bC|1zUm_G#HbFw9}9YnXE3LO&;PV>e8j%E z78SaQe~uv0t7;x?bR{t;SR5a1rKz?Hu`*edg`I+YWc5Tqk(|rFw`TL9w3V1r+ME z{q8g5>pVUexw?$6Lbk5uW@PGC?nb&!@&Fy( z%&|@_e+*T+oqvRWJ;vo2Rg?8{SDXq558XC?Rb%=bGaBfx|FX( zmagHOk)d0-3u!vR_h8}ozK7>=%;`y<$BYh68*rakKb>=t)WMrEqT~E~Oz0V2Ht0G% z=6glXLxC>f3&O{`ocEzt_wv`iZTXC2;6ETo&vM3h9KX)w0%Yhyu0WcO@dvPAJ1zWW z%;`aX1T%V)pT?AqzH5GBLg(_i7}KR(@;&4DADXX3rmo>zk*-_#PDDDv_h8;J4D!R6 z)e~HJzq$8E-+S{~6zc|VL!oZx6!LWs4*SOP zoqPZzx-S?*dW;{(fS%){C)^J@i%&+6F5*>4>Pp^-ZXM@4(5XB50NQmQKZsU6#xrQv zbDZ%@-(%?DV;(U#<~%F-Oe{QM4EajT>1w_KGrE~OF{Qh?4--1LBYkPq`jlhf18CNL z{1e3W7(b2%J;z7CY-v=hv-o6G>mpu-N?pktQK92}2g-COA3%xj;|Ecs$M|s+=s7;x z?_SH(S$r~bbP=yYmagQD$k1`V18KUG4`AWXw$Be@PLJ{9n9*~5^edJ|Q#y-J#)K~7 zRT$Hiyb&Wh&Uau)ck%%Y=stcBeR_-^M~|N4qcfI9Nu9-~p<5U6Ds<{f-iUS`=R44< zJNN*S3!W9cEIiYtDE_a-V3N)=Wr29b?^*& z^&DqpE{#$;iwls@!M9>gw{sFRI`~Nx{?*r)SGzvQ*TE}Mq09MKuQ4C=Bv)rSeqF;& z7}G7>jS-#Tehlg0M87WNi_oiMd@WMCfu~Tr?8rs0Kh{|2M*b;U^*Eo9 zXFPQ=$1tR;crylcoPUPwG~3|?Wa{8=z17(15uQS~p5gSj8Bd+T`DoV#T#i;vq z^VIoVimI><*CM9txfSI)`0ej@pXws6Ktcz99K*VuUv;VD(V1M2NgaGYGBb~ihQl(X z>)>lITN<_KMs7os?%*CY>Rui}y&mNm)ac*?mB#kft~HM#Lr?HL()0pnzsJ~GKZlDk zr%SjJGdlRmt6ZFr;hw!x+%5d>8t3lJ7;29^yxk)KmO4x^;B5>%QLHI>vS9 zhtaAh`6)E(XoIhni0fQ_CmM7qUx`{>!#AT^xA2{))CulKg&yRGQKl#PDU|31Zr*5o zbnt5%UF&Sui%YNb^;B2zCgkflFWKap>NGw9Rl0z0jr&@n+c}9z-NW}|T#xV+M)eFI zwZ%Nt+5A1^dr$jeeiVgznqPIjd7v}-Ur?%R_yA(Mm+x+JJbHjnxY09F7jPLmbntzc z)?+-2Nj=AzH#s&PyaMTOus*jVQwRSQwL0Tw&kR)S0xmDo~2xXIbFo7 zFrzDZBc^nm+cBX#`2farA3ul@J;sk?NYC^4KV_TtHO^09M$dERr)^Vbb0H>l@G9iK z#q*ZG(7DwAN911Me#~1w$TOJLvz+r;b3^BH1t!C5xgO&>_%)w1=C+f~g^26mA7WUK z@-zl@@Mk`6+>Sdk>f&Bx=-?~6%vD{(O{mhr(-_dfeuYicr-K`imFIcOZOG8U*<%L|1D&57$e9>|1 zZ2mFE^*GOBRL^tfmyAhRhYK;NgI{)+IrcX98t0=#7jij@bns`2K_oXeY@+WgZE%o_wb*wpcnY}N&7n9Gl$c5*q09eII49!Poq``m+ds}VL2bQ z%YCIYI1lYQco$}LACF*4kA-EJ(7|g{OQX_!-&=Akigi1uP^g37x!dzfmvb#TbUnAC zO$X2IF-QI0%ixT?=7Y}SlaZl|coougj8EKWOmrcaV>~S9dW`BuZo{zd;1mXRFF$~O zJ<5-vSI_X=e#d-*W8mTg#z+T0*=L(4y6*hiuiB>0=0XhWVveC-S8*eHbrW|WrMvhm zNa#LZ_jRu+@T}lFP_8@qD=5`{ytCg}hvpGX>9Md36MBv_zTw%Tv$y~wI{4CW8qbqF zKRJ#p-OQcH(B0gJG(Er%VPU!FC(i}+0%v{8{&Wr(VM>>9B_?$6H!xs3Lp+H-J;l+z zz82^-&P7rOUy3O`!1;r=ud8?n^E!Cbw~hbF#)sQcq6hio-!X=|gH!0z!B1d7&-04! z8V6m*U%b!p6#8C;2hgL3cmhd1#S7@xY4;m5bm}}VLAwrq01JAYZya_{o?<*X_xr|3 z2T%XNoYS+M{($>hXL3H8bnxfUtGoEJ5!=*N9LJn);!ezjb+`{xIymo#=E$_dQr zBoAUn5Akm?rKfn=kL*vU@ue8Fol3qAy*kc6MMjbFg-|H}fAbrDynk)bQ6CbwR)J_C(N@m?Th=6tNVEj**f?GzcdcIjT5NWL!p0VzdFeSXx71- z9&t>?&X>E8p}V;sX?lRiv0(iPehPDXf!{c3Zs;6-C#G}>Z$Y)!Hu00_)bsqhUpoe! z%{wru7kK$^Tw`6#u_<4p&oU0&h?s8T4wUOI{wj)fKfmTN+kdBRav|DvF~`uVtGE%( zx`{gw*IoP-H0XXFMXes^KcQ03^T{*Dv&1&}Jt)yt{NR6>GkTn7F`$Dl{-bfwF+SyS zpVLMB!CBim+x^AeDAP$EK#30SdBXB@eBI|El;{zjLXn=~v^n>?&fvU&F5oic=-?e_ z)hRyxPsS%K=N(9f<@_7;=_&r!f4Qc5h$k=;mh;n?($SMkqgzmXu0NM?7YcRoyZ-DR z)8$-)L0!)+=+|wWK(7vd?_Z5WsqcBX31vF?Atd!U&!Jn-bJo+2Uk9(mkS^!;mI_IKN=kp3w=yG0zGF{IfMu~3Y?I_YI z{w@miFi#>+Pjhs^vM5KV^Kr=1`Md%dx}4V_P1kb^7B01Y-i|q);z7*lVg4o0)-#-T@v^8>XK)_cb?{vn(+R%(a${6=WK_d9WBv;Bin}nY6Wot! zJ;)DZQcvL&K;Q4o!oAIbh@R!$74-aA9_Jdcgw{Od1{C#xm8NPCZbI{fNWen&( z{uPGxB)@#4an_k!fN354MU?)teen>A^$1U)P!~5k{_EVUI-g6?q=UbLem%(lj$S>@ zS8j5D>3aSorgR6Nve`KNi`Vj6Wb1nV3`%q-7jH2xx{Rv>VIBSj+Vuqg)Ai=GuHel` z>NwA!M+d+C2IHU$_-;(=0UpDo4nDrgeS4Mj;{Smx-OWWeI%ggH71ZcH{t;q&jNfsS zxuVOs8bdmGJ7#o}|AGY_-MlP%0vR>_T*L3U#l5G?xEgU?8FoJZIi&UpkwMFr|aHqj(RgQG3Tj+H|(&T_q*=gj!NCh2T-B=_(7EEF`hw*p5u(2wxhGSAfSu50(rWUHzG&J zxgA-$lMf(6_wj>B(_{QN7S`E5AHBntw7j4t8|OzBE)z=V!-JH~V;_h3Z#@q-xB zWBfP<^c=r7<$CEXJ`Fv(h%1oPmAnz%I?nCr)SY}Fe60I;1g(0EA4jvEzz7`8jw$Ha?PIvHL%;;Wz08@ID zAH#&6gFT#+H@wFJxjeI-$bO-N6kM89Mkkq66IJ)&Lzhc5Q(wTfR z+I1mcgjOBnYtgJ5`F6y02OmI#?&Swjt4H~9RO?wj`j^IEXYz@t(1pATWje;!qC_|H z9VpTrydQbGmmffm9_7c8rDyr*Um0_q$tNOB7xG0|xWV@MTFmK2z5_G5gZE-e_woan z(4+hq#`G+|;t^x6Gxy%`t{eGwH0TcAi(1{w529L+@?)sfvwZZgjk(U`lToG%c@;`@j6Z>b zX4~YiqgD^{FHxx{`KaF*ADzj|F`^6k3RK>5WK_eqpiH;$S-%ZmOFVCRJH~Vme;-47 zgr7jg2Rvi>^;3>V=kN*)=?Y$lKHb3kP;#qhHUAt1I^%cCqHm*B5Anu-_gWq2PoYnD z@`;a{GcCS$aO1SOq=O3|b1igmIofrM>(Lt4;Wjku;9F*W|L`Hr31sRN4_u)K>d_B&8LbjggFaDP~tW!LQqz=CFN!MLh^Y`Y> zw~x4vJdH{{!|DI+n(7SBN0~0*i%_B~_*xX{2EH8yx}EnTPxtU2{_M{Sy6-7p-xqA_ zqpm4;AXj&CFS2zXk0Mi#@e@ebbNt%BxCT0lPs6-z7V%X}y^qmtzW?E7By=lxqf00G zUUcXoofd zxB!E?h*zOsSMqg8={Q#(nHJT4%r?0h)jD`PTJ=0%dsJG~r<=F~Jv#W+-kWk%XK@=Q zbntI6t*7||1Z{eX7to^9UhVzK(4_PDTr}!Zz8|xCm`{DJ z*XSy~9htYg)?pd4b#_)-REb<2d;H#y>sQ zwbSGL1Sa)7XCCKVbnunP{G@x9Z$gf4=AWQJPw*US^#Z>>&v@z_egcDfj_-b}ed!^7 z0+V4m$KGa4?(odyt;p6%e(Ukx`%>rgId69_=yI+J=z4BJl@7k;1n(&pn!AwF!FQfy z{^%4BVp@-K>B;6vhdIWdM}bcA$%W>LF666Fs%!XjDA!&5GsN^1Uwn$Wq+|T*Q_UHj z%f)EX!R<)t;O(cmzjTtv(E7v%S*TtMLPKEbDg`caBCne=OmhS@XCu_GhN9I7z^w3qe%O#>%v#R+g#H1+!D}j zoIsOK@gN%YFi)ah2XDO8IOs;6#h4D>e3|?AbLIedAxkHC02w;CztZ+Y^B5ZS1ka;h z2fz1n^H$e$D<*XtCory4Jcv;py!i_E!{_anyHKcuPph&oUCc2w>fpPsGv?injqgF5 z9^^;Rq9^%jH0fxQuc2tvx%^Jl>r%cFHM)jxMwM>iI}y_fz6a%ckRL&*p5&)ctfS4| zM-YWNm*0teUCLJ?SJ&{Z$kr`<7czB%??JjA(Hp{dGqz=m5%c%H<o1K>q-iLhM%YQ|oj&5-ep*k$*VN~kii(5QHbQL$EM>lZ?k~;X0nAEep z;e*EfF7uY#P^ddNg?!!1BgoakZ~l-m(Yf4=CLP@HVPma>TQREJIfY@}6O2JU!qe#2 z!B@Asb_vfb{tj~V5FhXA+--QO9;EFc;)z$nF zjOqzq@iE7&%lJ>o+Ui<--2RcF^LPc)bQ$-fN)PcQVmdhcc4MuB>(Hd@`4{NZ)121s zTIh5>9!Z_gcVJ9+aMmY%z1Zd)xfs>DG#Hh-hMQ5LTlg-N=>*@45h(9^?Gr6ME zdFdE8U_>`^JBD-z_h3Nx@(B8L@cz%aUP;eG9!I~P;Cb}w1K?uy)p~>8v614b454b2nOb@SDG9+;lllp-TsU;y&Bd9sJt+&EtLU{a_U8Qm#h6uHk0n z>K5)swodQ>GW8%of^-_-1QjGU|0voerWsq zjS0t*u7i*GH=om4T!3;N{CPC!F3x$-{iTDC9JMczCQA+e&Sl|EG`J>;P;I=9$n3SXwd^4-t)dm2fyp5#!DZ5Kl{G0zGW|e$n!;q z_o&aqtPb9foL<}E$B?JPd)7ZRZm#O^9`ti4)4|{TxpUXyz34Cbg=drw?-#!wT{^r+ z{3FQ!vTMYDLAH(_whhE}aCpD=W*z)}jOg%w>(dz0hu?F3K!^8UPom&oeILk!$kX9{ z(?!jhEay*RTz7CkruB2*?|jIz zzaZ@^M=tthzcYr`3GZ|MXOvkU-m5$tB|5xkdC8-m+d90@con*I3wL8gC-^apg>|NV zpMVM7$d6%4&+>`CH(zxjmt#)H_|wSk^Yw+7{lS>)=f1yqc%ShrQEqwgE)<6K`4Kee z=e}=vcwh0?Kjwb7Jh%jLUCQr8N;mRnFsu`N)PER5oykoY59>Vc?*TBa!+V3jdDeB( zxg6f}JNK(z%RfN29_8?U-c>sI7R2;(-@`k+zxU74ZF%rt(XKQ9GcCFdgSvxP&N&7h z-mAL-qq>*>ieVl7$+beZ`TO5zSE%27RP;%IrF{6Gp`}Ig^60YYD*s;TSFm3eT^Owj@0rS% zMCa@9&o|Q^_uI(A(Pb@ueAwq6`p6xy_}N1rE-KG{m)KrB+7zveHbmFh+PbJAsvE3C6VYK&G}|3*i%+DCPZ+rH4&Hrj5k(OMl{ zZ>t;q+wbs;UgdR%_fux=&C#00{Wm&}b=KOj`1&)W<E*M(G;cid*aNm*qzJ&gAX(d5Vz=|63k~BMIc%>kE&^8PQSpwd&Be!&L}J zeE8hLM+ZkV9NS5bs0rbpg6K%Ei+SC~s5aVS&++Gt|Fh%g_xdeftLLx#x1;uAV^(Hg zemjNZ*!0X%J!f_pDHA!W^w}^6Haqs!&%2H?Z?0Q^b;FIhP3s#rY(D$g zEt@vHWAmE&y7j9!FJHfI&8Cf;H?EB@_YS=8SiO1uN!OopY_7MQT(`Dv^WpbrJp0&F zPAWY1oL9d5nN3|->wPV~r)ci=2j9VQagCD-t(Dt&@C~3hZaQz%ntJb)x+c66=Gn)d zaBS`d@1cA4v1i_NY;Jfv-?NXsVcmw)PCfRVl9LY~;Nh)?J;gV9>*?@DnEx-2+J?Mp z^PxA5KBr{ytvbC`YV9*`Q@!~)3s*K-F}z=BMcwsv4Y>{B-)A4Ydh>-FuJ>-&n~u%h zvhKV!;eD*nK6dTuhRt=08$bD(Z9f0y&fuBPJa=y=KYKJMKXW?aC=GR^H;27?T|*ec z|Ls+I-s<7{oKxZrRU5qPX*h$h!M7}5o_qPa&GFT_xw*@ipOag%c}rvC#!b$C)n&OC z)}DRr&2^_1o^ndj>1QrK<@BO6mKUA2=Je&OPhVTNys)siwyv)3wA$0w7T$8~$%i*~ z#kvi-XTIphPCNaS(~7S?YxVNeYtOQ=wO7|JFRnYacKPa4i;4mPc4H@<@*<~s z%Gxu|JY&t7XDlx+tUG0S(W$4MwfwBpufBSD@oBY%YtN`HtX+NP-)`)b!WSE};=01M zXRbcw)a6&Nz4|n#Sy#N=NuR#FsCaGd>4mFLIeqn6hfnk5=U$MKlb?6R!k9iY#m@cvOd|EY)ZBy+map0-egTrf6rh~DK>vZ^1LFs#5BP1| znSNK0eWWL{6ZwhaM0uhrF}!tj>-g5mt&Q87wzX_)+t#ryu`RW&cU%9q(QV_~Cbvy* zo830QE!v*Gy>NT!_Sp8C?Ty=8womSz-aET@es9#1-jmsr-BY-)cwgzh@_mPoDA#cm zI+9Yy(dbB897~6zvGZKN4CUR1jXT?RCU*Ak9Njs-b8_eO&e@&wJEL9cyE1oW@5oPi#-so|--Ndm8sN?P=LFx@UaPA8uvBrYuVSfuVY`=zQn%NzTSQP`v&)A?$6$z zyFY(_;r`n_(?CrVR^UbVcSFzk!)o*Xw-nPAKd&+nX8>{K<^R8-kGCx_IEO%||-4kue zE?2leIh-6%PP@+OJF<7=?vuM} z{#`p$X27r+@a&lN_WbR5Ja5*<{H`wNIBJiR_Bm^>(T?;Tnf9D(--Y&GYX31uP~#XH z9Yu@d=x`*79jP6?j%UyjjXI`DM>V@6+L^vH(~;#mwn9f&>iA-Z=49`#$z9XCW_M+$ za#Q)K!c=jpG*zC8rK(ajsrpo7swvfyYD;ybx>AW$D%G3nPYtGqQ=_Tz)MRQpHJh4G zMZ42?XYS74J$zu)oj>W`pFI%O_+43Hx^6ArTDrA-Yi#S`8QZkAWoz5kj;&o=6I)YT zd$;y)9o#y6=&3Nhb$09g)@WP$w#;qW+j6)4ukOU>&iw!VwSM-_X!1O1a|d^APq^;A z&$&}3UH@4#AWEhuGtGir^Ptd7C^Z*ii?gB4Oc-`Wp1p4}_muB@cIJnP>GyI{Y;V=x zn!SyCoA$o&ofYj%-

BdtdIp{C$Ooo@UQ(=Y{T|(S76lCihM6o833RFWR5J|8Hl| z3*AxS`8XS%#QrdLL^McIB0Z7md7S%y@I1`in!Po5YyQ^%lWSS}f=|zI&7M1#=l^DA zw(aiN-MIMVYunSYr)y7QPs+2eWv}BN^>;Xn$Di*RUbXntPI+37CuS4rj;?rdj)iC9 m;{0+KgqfdduE#uu!wX;f=cN&NX#`#xftN<$r4e{(1pX&nlEO*= diff --git a/5.15.1/qtbase/src/gui/text/qtextimagehandler.cpp b/5.15.1/qtbase/src/gui/text/qtextimagehandler.cpp deleted file mode 100644 index cbbf6c5..0000000 --- a/5.15.1/qtbase/src/gui/text/qtextimagehandler.cpp +++ /dev/null @@ -1,278 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qtextimagehandler_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -extern QString qt_findAtNxFile(const QString &baseFileName, qreal targetDevicePixelRatio, - qreal *sourceDevicePixelRatio); -static QString resolveFileName(QString fileName, QUrl *url, qreal targetDevicePixelRatio, - qreal *sourceDevicePixelRatio) -{ - // We might use the fileName for loading if url loading fails - // try to make sure it is a valid file path. - // Also, QFile{Info}::exists works only on filepaths (not urls) - - if (url->isValid()) { - if (url->scheme() == QLatin1String("qrc")) { - fileName = fileName.right(fileName.length() - 3); - } - else if (url->scheme() == QLatin1String("file")) { - fileName = url->toLocalFile(); - } - } - - if (targetDevicePixelRatio <= 1.0) - return fileName; - - // try to find a Nx version - return qt_findAtNxFile(fileName, targetDevicePixelRatio, sourceDevicePixelRatio); -} - - -static QPixmap getPixmap(QTextDocument *doc, const QTextImageFormat &format, const qreal devicePixelRatio = 1.0) -{ - QPixmap pm; - - QString name = format.name(); - if (name.startsWith(QLatin1String(":/"))) // auto-detect resources and convert them to url - name.prepend(QLatin1String("qrc")); - QUrl url = QUrl(name); - qreal sourcePixelRatio = 1.0; - name = resolveFileName(name, &url, devicePixelRatio, &sourcePixelRatio); - - if (name.contains(QLatin1String("@2x"))) - url = QUrl(name); // url must be updated! (QTBUG-52697) - - const QVariant data = doc->resource(QTextDocument::ImageResource, url); - if (data.userType() == QMetaType::QPixmap || data.userType() == QMetaType::QImage) { - pm = qvariant_cast(data); - } else if (data.userType() == QMetaType::QByteArray) { - pm.loadFromData(data.toByteArray()); - } - - if (pm.isNull()) { -#if 0 - QString context; - // ### Qt5 - QTextBrowser *browser = qobject_cast(doc->parent()); - if (browser) - context = browser->source().toString(); -#endif - // try direct loading - QImage img; - if (name.isEmpty() || !img.load(name)) - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); - - pm = QPixmap::fromImage(img); - doc->addResource(QTextDocument::ImageResource, url, pm); - } - - if (name.contains(QLatin1String("@2x"))) - pm.setDevicePixelRatio(sourcePixelRatio); - - return pm; -} - -static QSize getPixmapSize(QTextDocument *doc, const QTextImageFormat &format) -{ - QPixmap pm; - - const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth); - const int width = qRound(format.width()); - const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight); - const int height = qRound(format.height()); - - QPaintDevice *pdev = doc->documentLayout()->paintDevice(); - - QSize size(width, height); - if (!hasWidth || !hasHeight) { - pm = getPixmap(doc, format, pdev ? pdev->devicePixelRatioF() : 1.0); - const int pmWidth = pm.width() / pm.devicePixelRatio(); - const int pmHeight = pm.height() / pm.devicePixelRatio(); - - if (!hasWidth) { - if (!hasHeight) - size.setWidth(pmWidth); - else - size.setWidth(qRound(height * (pmWidth / (qreal) pmHeight))); - } - if (!hasHeight) { - if (!hasWidth) - size.setHeight(pmHeight); - else - size.setHeight(qRound(width * (pmHeight / (qreal) pmWidth))); - } - } - - qreal scale = 1.0; - - if (pdev) { - if (pm.isNull()) - pm = getPixmap(doc, format); - if (!pm.isNull()) - scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi()); - } - size *= scale; - - return size; -} - -static QImage getImage(QTextDocument *doc, const QTextImageFormat &format, const qreal devicePixelRatio = 1.0) -{ - QImage image; - - QString name = format.name(); - if (name.startsWith(QLatin1String(":/"))) // auto-detect resources - name.prepend(QLatin1String("qrc")); - QUrl url = QUrl(name); - qreal sourcePixelRatio = 1.0; - name = resolveFileName(name, &url, devicePixelRatio, &sourcePixelRatio); - - if (name.contains(QLatin1String("@2x"))) - url = QUrl(name); // url must be updated! (QTBUG-52697) - - const QVariant data = doc->resource(QTextDocument::ImageResource, url); - if (data.userType() == QMetaType::QImage) { - image = qvariant_cast(data); - } else if (data.userType() == QMetaType::QByteArray) { - image.loadFromData(data.toByteArray()); - } - - if (image.isNull()) { -#if 0 - QString context; - // ### Qt5 - QTextBrowser *browser = qobject_cast(doc->parent()); - if (browser) - context = browser->source().toString(); -#endif - // try direct loading - - if (name.isEmpty() || !image.load(name)) - return QImage(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); - - doc->addResource(QTextDocument::ImageResource, url, image); - } - - if (sourcePixelRatio != 1.0) - image.setDevicePixelRatio(sourcePixelRatio); - - return image; -} - -static QSize getImageSize(QTextDocument *doc, const QTextImageFormat &format) -{ - QImage image; - - const bool hasWidth = format.hasProperty(QTextFormat::ImageWidth); - const int width = qRound(format.width()); - const bool hasHeight = format.hasProperty(QTextFormat::ImageHeight); - const int height = qRound(format.height()); - - QSize size(width, height); - if (!hasWidth || !hasHeight) { - image = getImage(doc, format); - if (!hasWidth) - size.setWidth(image.width() / image.devicePixelRatio()); - if (!hasHeight) - size.setHeight(image.height() / image.devicePixelRatio()); - } - - qreal scale = 1.0; - QPaintDevice *pdev = doc->documentLayout()->paintDevice(); - if (pdev) { - if (image.isNull()) - image = getImage(doc, format); - if (!image.isNull()) - scale = qreal(pdev->logicalDpiY()) / qreal(qt_defaultDpi()); - } - size *= scale; - - return size; -} - -QTextImageHandler::QTextImageHandler(QObject *parent) - : QObject(parent) -{ -} - -QSizeF QTextImageHandler::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) -{ - Q_UNUSED(posInDocument) - const QTextImageFormat imageFormat = format.toImageFormat(); - - if (QCoreApplication::instance()->thread() != QThread::currentThread()) - return getImageSize(doc, imageFormat); - return getPixmapSize(doc, imageFormat); -} - -QImage QTextImageHandler::image(QTextDocument *doc, const QTextImageFormat &imageFormat) -{ - Q_ASSERT(doc != nullptr); - - return getImage(doc, imageFormat); -} - -void QTextImageHandler::drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) -{ - Q_UNUSED(posInDocument) - const QTextImageFormat imageFormat = format.toImageFormat(); - - if (QCoreApplication::instance()->thread() != QThread::currentThread()) { - const QImage image = getImage(doc, imageFormat, p->device()->devicePixelRatioF()); - p->drawImage(rect, image, image.rect()); - } else { - const QPixmap pixmap = getPixmap(doc, imageFormat, p->device()->devicePixelRatioF()); - p->drawPixmap(rect, pixmap, pixmap.rect()); - } -} - -QT_END_NAMESPACE diff --git a/5.15.1/bin/7z.dll b/5.15.2/bin/7z.dll similarity index 100% rename from 5.15.1/bin/7z.dll rename to 5.15.2/bin/7z.dll diff --git a/5.15.2/bin/7z.exe b/5.15.2/bin/7z.exe new file mode 100644 index 0000000000000000000000000000000000000000..d3fe53274c28e85e1364fb6232f417094d0a00e6 GIT binary patch literal 454144 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 +} + +- (BOOL)isFlipped +{ + return YES; +} + +// ----------------------- Layer setup ----------------------- + +- (void)updateLayerBacking +{ + self.wantsLayer = [self layerEnabledByMacOS] + || [self layerExplicitlyRequested] + || [self shouldUseMetalLayer]; +} + +- (BOOL)layerEnabledByMacOS +{ + // AppKit has its own logic for this, but if we rely on that, our layers are created + // by AppKit at a point where we've already set up other parts of the platform plugin + // based on the presence of layers or not. Once we've rewritten these parts to support + // dynamically picking up layer enablement we can let AppKit do its thing. + return QMacVersion::buildSDK() >= QOperatingSystemVersion::MacOSMojave + && QMacVersion::currentRuntime() >= QOperatingSystemVersion::MacOSMojave; +} + +- (BOOL)layerExplicitlyRequested +{ + static bool wantsLayer = [&]() { + int wantsLayer = qt_mac_resolveOption(-1, m_platformWindow->window(), + "_q_mac_wantsLayer", "QT_MAC_WANTS_LAYER"); + + if (wantsLayer != -1 && [self layerEnabledByMacOS]) { + qCWarning(lcQpaDrawing) << "Layer-backing cannot be explicitly controlled on 10.14 when built against the 10.14 SDK"; + return true; + } + + return wantsLayer == 1; + }(); + + return wantsLayer; +} + +- (BOOL)shouldUseMetalLayer +{ + // MetalSurface needs a layer, and so does VulkanSurface (via MoltenVK) + QSurface::SurfaceType surfaceType = m_platformWindow->window()->surfaceType(); + return surfaceType == QWindow::MetalSurface || surfaceType == QWindow::VulkanSurface; +} + +/* + This method is called by AppKit when layer-backing is requested by + setting wantsLayer too YES (via -[NSView _updateLayerBackedness]), + or in cases where AppKit itself decides that a view should be + layer-backed. + + Note however that some code paths in AppKit will not go via this + method for creating the backing layer, and will instead create the + layer manually, and just call setLayer. An example of this is when + an NSOpenGLContext is attached to a view, in which case AppKit will + create a new layer in NSOpenGLContextSetLayerOnViewIfNecessary. + + For this reason we leave the implementation of this override as + minimal as possible, only focusing on creating the appropriate + layer type, and then leave it up to setLayer to do the work of + making sure the layer is set up correctly. +*/ +- (CALayer *)makeBackingLayer +{ + if ([self shouldUseMetalLayer]) { + // Check if Metal is supported. If it isn't then it's most likely + // too late at this point and the QWindow will be non-functional, + // but we can at least print a warning. + if ([MTLCreateSystemDefaultDevice() autorelease]) { + return [CAMetalLayer layer]; + } else { + qCWarning(lcQpaDrawing) << "Failed to create QWindow::MetalSurface." + << "Metal is not supported by any of the GPUs in this system."; + } + } + + return [super makeBackingLayer]; +} + +/* + This method is called by AppKit whenever the view is asked to change + its layer, which can happen both as a result of enabling layer-backing, + or when a layer is set explicitly. The latter can happen both when a + view is layer-hosting, or when AppKit internals are switching out the + layer-backed view, as described above for makeBackingLayer. +*/ +- (void)setLayer:(CALayer *)layer +{ + qCDebug(lcQpaDrawing) << "Making" << self + << (self.wantsLayer ? "layer-backed" : "layer-hosted") + << "with" << layer << "due to being" << ([self layerExplicitlyRequested] ? "explicitly requested" + : [self shouldUseMetalLayer] ? "needed by surface type" : "enabled by macOS"); + + if (layer.delegate && layer.delegate != self) { + qCWarning(lcQpaDrawing) << "Layer already has delegate" << layer.delegate + << "This delegate is responsible for all view updates for" << self; + } else { + layer.delegate = self; + } + + [super setLayer:layer]; + + // When adding a view to a view hierarchy the backing properties will change + // which results in updating the contents scale, but in case of switching the + // layer on a view that's already in a view hierarchy we need to manually ensure + // the scale is up to date. + if (self.superview) + [self updateLayerContentsScale]; + + if (self.opaque && lcQpaDrawing().isDebugEnabled()) { + // If the view claims to be opaque we expect it to fill the entire + // layer with content, in which case we want to detect any areas + // where it doesn't. + layer.backgroundColor = NSColor.magentaColor.CGColor; + } + +} + +// ----------------------- Layer updates ----------------------- + +- (NSViewLayerContentsRedrawPolicy)layerContentsRedrawPolicy +{ + // We need to set this explicitly since the super implementation + // returns LayerContentsRedrawNever for custom layers like CAMetalLayer. + return NSViewLayerContentsRedrawDuringViewResize; +} + +- (NSViewLayerContentsPlacement)layerContentsPlacement +{ + // Always place the layer at top left without any automatic scaling. + // This will highlight situations where we're missing content for the + // layer by not responding to the displayLayer: request synchronously. + // It also allows us to re-use larger layers when resizing a window down. + return NSViewLayerContentsPlacementTopLeft; +} + +- (void)viewDidChangeBackingProperties +{ + qCDebug(lcQpaDrawing) << "Backing properties changed for" << self; + + if (self.layer) + [self updateLayerContentsScale]; + + // Ideally we would plumb this situation through QPA in a way that lets + // clients invalidate their own caches, recreate QBackingStore, etc. + // For now we trigger an expose, and let QCocoaBackingStore deal with + // buffer invalidation internally. + [self setNeedsDisplay:YES]; +} + +- (void)updateLayerContentsScale +{ + // We expect clients to fill the layer with retina aware content, + // based on the devicePixelRatio of the QWindow, so we set the + // layer's content scale to match that. By going via devicePixelRatio + // instead of applying the NSWindow's backingScaleFactor, we also take + // into account OpenGL views with wantsBestResolutionOpenGLSurface set + // to NO. In this case the window will have a backingScaleFactor of 2, + // but the QWindow will have a devicePixelRatio of 1. + auto devicePixelRatio = m_platformWindow->devicePixelRatio(); + qCDebug(lcQpaDrawing) << "Updating" << self.layer << "content scale to" << devicePixelRatio; + self.layer.contentsScale = devicePixelRatio; +} + +/* + This method is called by AppKit to determine whether it should update + the contentScale of the layer to match the window backing scale. + + We always return NO since we're updating the contents scale manually. +*/ +- (BOOL)layer:(CALayer *)layer shouldInheritContentsScale:(CGFloat)scale fromWindow:(NSWindow *)window +{ + Q_UNUSED(layer); Q_UNUSED(scale); Q_UNUSED(window); + return NO; +} + +// ----------------------- Draw callbacks ----------------------- + +/* + This method is called by AppKit for the non-layer case, where we are + drawing into the NSWindow's surface. +*/ +- (void)drawRect:(NSRect)dirtyBoundingRect +{ + Q_ASSERT_X(!self.layer, "QNSView", + "The drawRect code path should not be hit when we are layer backed"); + + if (!m_platformWindow) + return; + + QRegion exposedRegion; + const NSRect *dirtyRects; + NSInteger numDirtyRects; + [self getRectsBeingDrawn:&dirtyRects count:&numDirtyRects]; + for (int i = 0; i < numDirtyRects; ++i) + exposedRegion += QRectF::fromCGRect(dirtyRects[i]).toRect(); + + if (exposedRegion.isEmpty()) + exposedRegion = QRectF::fromCGRect(dirtyBoundingRect).toRect(); + + qCDebug(lcQpaDrawing) << "[QNSView drawRect:]" << m_platformWindow->window() << exposedRegion; + m_platformWindow->handleExposeEvent(exposedRegion); +} + +/* + This method is called by AppKit when we are layer-backed, where + we are drawing into the layer. +*/ +- (void)displayLayer:(CALayer *)layer +{ + Q_ASSERT_X(self.layer && layer == self.layer, "QNSView", + "The displayLayer code path should only be hit for our own layer"); + + if (!m_platformWindow) + return; + + if (!NSThread.isMainThread) { + // Qt is calling AppKit APIs such as -[NSOpenGLContext setView:] on secondary threads, + // which we shouldn't do. This may result in AppKit (wrongly) triggering a display on + // the thread where we made the call, so block it here and defer to the main thread. + qCWarning(lcQpaDrawing) << "Display non non-main thread! Deferring to main thread"; + dispatch_async(dispatch_get_main_queue(), ^{ self.needsDisplay = YES; }); + return; + } + + qCDebug(lcQpaDrawing) << "[QNSView displayLayer]" << m_platformWindow->window(); + m_platformWindow->handleExposeEvent(QRectF::fromCGRect(self.bounds).toRect()); +} + +@end diff --git a/5.15.2/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm b/5.15.2/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm new file mode 100644 index 0000000..d1febd8 --- /dev/null +++ b/5.15.2/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm @@ -0,0 +1,6670 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + Note: The qdoc comments for QMacStyle are contained in + .../doc/src/qstyles.qdoc. +*/ + +#include + +#include "qmacstyle_mac_p.h" +#include "qmacstyle_mac_p_p.h" + +#define QMAC_QAQUASTYLE_SIZE_CONSTRAIN +//#define DEBUG_SIZE_CONSTRAINT + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include + +#if QT_CONFIG(mdiarea) +#include +#endif +#if QT_CONFIG(scrollbar) +#include +#endif +#if QT_CONFIG(tabbar) +#include +#endif +#if QT_CONFIG(wizard) +#include +#endif + +#include + +QT_USE_NAMESPACE + +static QWindow *qt_getWindow(const QWidget *widget) +{ + return widget ? widget->window()->windowHandle() : 0; +} + +@interface QT_MANGLE_NAMESPACE(QIndeterminateProgressIndicator) : NSProgressIndicator + +@property (readonly, nonatomic) NSInteger animators; + +- (instancetype)init; + +- (void)startAnimation; +- (void)stopAnimation; + +- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view; + +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QIndeterminateProgressIndicator); + +@implementation QIndeterminateProgressIndicator + +- (instancetype)init +{ + if ((self = [super init])) { + _animators = 0; + self.indeterminate = YES; + self.usesThreadedAnimation = NO; + self.alphaValue = 0.0; + } + + return self; +} + +- (void)startAnimation +{ + if (_animators == 0) { + self.hidden = NO; + [super startAnimation:self]; + } + ++_animators; +} + +- (void)stopAnimation +{ + --_animators; + if (_animators == 0) { + [super stopAnimation:self]; + self.hidden = YES; + [self removeFromSuperviewWithoutNeedingDisplay]; + } +} + +- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view +{ + // The alphaValue change is not strictly necessary, but feels safer. + self.alphaValue = 1.0; + if (self.superview != view) + [view addSubview:self]; + if (!CGRectEqualToRect(self.frame, rect)) + self.frame = rect; + [self drawRect:rect]; + self.alphaValue = 0.0; +} + +@end + +@interface QT_MANGLE_NAMESPACE(QVerticalSplitView) : NSSplitView +- (BOOL)isVertical; +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QVerticalSplitView); + +@implementation QVerticalSplitView +- (BOOL)isVertical +{ + return YES; +} +@end + +// See render code in drawPrimitive(PE_FrameTabWidget) +@interface QT_MANGLE_NAMESPACE(QDarkNSBox) : NSBox +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QDarkNSBox); + +@implementation QDarkNSBox +- (instancetype)init +{ + if ((self = [super init])) { + self.title = @""; + self.titlePosition = NSNoTitle; + self.boxType = NSBoxCustom; + self.cornerRadius = 3; + self.borderColor = [NSColor.controlColor colorWithAlphaComponent:0.1]; + self.fillColor = [NSColor.darkGrayColor colorWithAlphaComponent:0.2]; + } + + return self; +} + +- (void)drawRect:(NSRect)rect +{ + [super drawRect:rect]; +} +@end + +QT_BEGIN_NAMESPACE + +// The following constants are used for adjusting the size +// of push buttons so that they are drawn inside their bounds. +const int QMacStylePrivate::PushButtonLeftOffset = 6; +const int QMacStylePrivate::PushButtonRightOffset = 12; +const int QMacStylePrivate::PushButtonContentPadding = 6; + +QVector > QMacStylePrivate::scrollBars; + +// Title bar gradient colors for Lion were determined by inspecting PSDs exported +// using CoreUI's CoreThemeDocument; there is no public API to retrieve them + +static QLinearGradient titlebarGradientActive() +{ + static QLinearGradient darkGradient = [](){ + QLinearGradient gradient; + // FIXME: colors are chosen somewhat arbitrarily and could be fine-tuned, + // or ideally determined by calling a native API. + gradient.setColorAt(0, QColor(47, 47, 47)); + return gradient; + }(); + static QLinearGradient lightGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(0, QColor(235, 235, 235)); + gradient.setColorAt(0.5, QColor(210, 210, 210)); + gradient.setColorAt(0.75, QColor(195, 195, 195)); + gradient.setColorAt(1, QColor(180, 180, 180)); + return gradient; + }(); + return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; +} + +static QLinearGradient titlebarGradientInactive() +{ + static QLinearGradient darkGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(1, QColor(42, 42, 42)); + return gradient; + }(); + static QLinearGradient lightGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(0, QColor(250, 250, 250)); + gradient.setColorAt(1, QColor(225, 225, 225)); + return gradient; + }(); + return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; +} + +#if QT_CONFIG(tabwidget) +/* + Since macOS 10.14 AppKit is using transparency more extensively, especially for the + dark theme. Inactive buttons, for example, are semi-transparent. And we use them to + draw tab widget's tab bar. The combination of NSBox (also a part of tab widget) + and these transparent buttons gives us an undesired side-effect: an outline of + NSBox is visible through transparent buttons. To avoid this, we have this hack below: + we clip the area where the line would be visible through the buttons. The area we + want to clip away can be described as an intersection of the option's rect and + the tab widget's tab bar rect. But some adjustments are required, since those rects + are anyway adjusted during the rendering and they are not exactly what you'll see on + the screen. Thus this switch-statement inside. +*/ +static void clipTabBarFrame(const QStyleOption *option, const QMacStyle *style, CGContextRef ctx) +{ + Q_ASSERT(option); + Q_ASSERT(style); + Q_ASSERT(ctx); + + if (qt_mac_applicationIsInDarkMode()) { + QTabWidget *tabWidget = qobject_cast(option->styleObject); + Q_ASSERT(tabWidget); + + QRect tabBarRect = style->subElementRect(QStyle::SE_TabWidgetTabBar, option, tabWidget).adjusted(2, 0, -3, 0); + switch (tabWidget->tabPosition()) { + case QTabWidget::South: + tabBarRect.setY(tabBarRect.y() + tabBarRect.height() / 2); + break; + case QTabWidget::North: + case QTabWidget::West: + tabBarRect = tabBarRect.adjusted(0, 2, 0, -2); + break; + case QTabWidget::East: + tabBarRect = tabBarRect.adjusted(tabBarRect.width() / 2, 2, tabBarRect.width() / 2, -2); + } + + const QRegion clipPath = QRegion(option->rect) - tabBarRect; + QVarLengthArray cgRects; + for (const QRect &qtRect : clipPath) + cgRects.push_back(qtRect.toCGRect()); + if (cgRects.size()) + CGContextClipToRects(ctx, &cgRects[0], size_t(cgRects.size())); + } +} +#endif + +static const QColor titlebarSeparatorLineActive(111, 111, 111); +static const QColor titlebarSeparatorLineInactive(131, 131, 131); +static const QColor darkModeSeparatorLine(88, 88, 88); + +// Gradient colors used for the dock widget title bar and +// non-unifed tool bar bacground. +static const QColor lightMainWindowGradientBegin(240, 240, 240); +static const QColor lightMainWindowGradientEnd(200, 200, 200); +static const QColor darkMainWindowGradientBegin(47, 47, 47); +static const QColor darkMainWindowGradientEnd(47, 47, 47); + +static const int DisclosureOffset = 4; + +static const qreal titleBarIconTitleSpacing = 5; +static const qreal titleBarTitleRightMargin = 12; +static const qreal titleBarButtonSpacing = 8; + +// Tab bar colors +// active: window is active +// selected: tab is selected +// hovered: tab is hovered +bool isDarkMode() { return qt_mac_applicationIsInDarkMode(); } + +#if QT_CONFIG(tabbar) +static const QColor lightTabBarTabBackgroundActive(190, 190, 190); +static const QColor darkTabBarTabBackgroundActive(38, 38, 38); +static const QColor tabBarTabBackgroundActive() { return isDarkMode() ? darkTabBarTabBackgroundActive : lightTabBarTabBackgroundActive; } + +static const QColor lightTabBarTabBackgroundActiveHovered(178, 178, 178); +static const QColor darkTabBarTabBackgroundActiveHovered(32, 32, 32); +static const QColor tabBarTabBackgroundActiveHovered() { return isDarkMode() ? darkTabBarTabBackgroundActiveHovered : lightTabBarTabBackgroundActiveHovered; } + +static const QColor lightTabBarTabBackgroundActiveSelected(211, 211, 211); +static const QColor darkTabBarTabBackgroundActiveSelected(52, 52, 52); +static const QColor tabBarTabBackgroundActiveSelected() { return isDarkMode() ? darkTabBarTabBackgroundActiveSelected : lightTabBarTabBackgroundActiveSelected; } + +static const QColor lightTabBarTabBackground(227, 227, 227); +static const QColor darkTabBarTabBackground(38, 38, 38); +static const QColor tabBarTabBackground() { return isDarkMode() ? darkTabBarTabBackground : lightTabBarTabBackground; } + +static const QColor lightTabBarTabBackgroundSelected(246, 246, 246); +static const QColor darkTabBarTabBackgroundSelected(52, 52, 52); +static const QColor tabBarTabBackgroundSelected() { return isDarkMode() ? darkTabBarTabBackgroundSelected : lightTabBarTabBackgroundSelected; } + +static const QColor lightTabBarTabLineActive(160, 160, 160); +static const QColor darkTabBarTabLineActive(90, 90, 90); +static const QColor tabBarTabLineActive() { return isDarkMode() ? darkTabBarTabLineActive : lightTabBarTabLineActive; } + +static const QColor lightTabBarTabLineActiveHovered(150, 150, 150); +static const QColor darkTabBarTabLineActiveHovered(90, 90, 90); +static const QColor tabBarTabLineActiveHovered() { return isDarkMode() ? darkTabBarTabLineActiveHovered : lightTabBarTabLineActiveHovered; } + +static const QColor lightTabBarTabLine(210, 210, 210); +static const QColor darkTabBarTabLine(90, 90, 90); +static const QColor tabBarTabLine() { return isDarkMode() ? darkTabBarTabLine : lightTabBarTabLine; } + +static const QColor lightTabBarTabLineSelected(189, 189, 189); +static const QColor darkTabBarTabLineSelected(90, 90, 90); +static const QColor tabBarTabLineSelected() { return isDarkMode() ? darkTabBarTabLineSelected : lightTabBarTabLineSelected; } + +static const QColor tabBarCloseButtonBackgroundHovered(162, 162, 162); +static const QColor tabBarCloseButtonBackgroundPressed(153, 153, 153); +static const QColor tabBarCloseButtonBackgroundSelectedHovered(192, 192, 192); +static const QColor tabBarCloseButtonBackgroundSelectedPressed(181, 181, 181); +static const QColor tabBarCloseButtonCross(100, 100, 100); +static const QColor tabBarCloseButtonCrossSelected(115, 115, 115); + +static const int closeButtonSize = 14; +static const qreal closeButtonCornerRadius = 2.0; +#endif // QT_CONFIG(tabbar) + +#ifndef QT_NO_ACCESSIBILITY // This ifdef to avoid "unused function" warning. +QBrush brushForToolButton(bool isOnKeyWindow) +{ + // When a toolbutton in a toolbar is in the 'ON' state, we draw a + // partially transparent background. The colors must be different + // for 'Aqua' and 'DarkAqua' appearances though. + if (isDarkMode()) + return isOnKeyWindow ? QColor(73, 73, 73, 100) : QColor(56, 56, 56, 100); + + return isOnKeyWindow ? QColor(0, 0, 0, 28) : QColor(0, 0, 0, 21); +} +#endif // QT_NO_ACCESSIBILITY + + +static const int headerSectionArrowHeight = 6; +static const int headerSectionSeparatorInset = 2; + +// One for each of QStyleHelper::WidgetSizePolicy +static const QMarginsF comboBoxFocusRingMargins[3] = { + { 0.5, 2, 3.5, 4 }, + { 0.5, 1, 2.5, 4 }, + { 0.5, 1.5, 2.5, 3.5 } +}; + +static const QMarginsF pullDownButtonShadowMargins[3] = { + { 0.5, -1, 0.5, 2 }, + { 0.5, -1.5, 0.5, 2.5 }, + { 0.5, 0, 0.5, 1 } +}; + +static const QMarginsF pushButtonShadowMargins[3] = { + { 1.5, -1.5, 1.5, 4.5 }, + { 1.5, -1, 1.5, 4 }, + { 1.5, 0.5, 1.5, 2.5 } +}; + +// These are frame heights as reported by Xcode 9's Interface Builder. +// Alignemnet rectangle's heights match for push and popup buttons +// with respective values 21, 18 and 15. + +static const qreal comboBoxDefaultHeight[3] = { + 26, 22, 19 +}; + +static const qreal pushButtonDefaultHeight[3] = { + 32, 28, 16 +}; + +static const qreal popupButtonDefaultHeight[3] = { + 26, 22, 15 +}; + +static const int toolButtonArrowSize = 7; +static const int toolButtonArrowMargin = 2; + +static const qreal focusRingWidth = 3.5; + +// An application can force 'Aqua' theme while the system theme is one of +// the 'Dark' variants. Since in Qt we sometimes use NSControls and even +// NSCells directly without attaching them to any view hierarchy, we have +// to set NSAppearance.currentAppearance to 'Aqua' manually, to make sure +// the correct rendering path is triggered. Apple recommends us to un-set +// the current appearance back after we finished with drawing. This is what +// AppearanceSync is for. + +class AppearanceSync { +public: + AppearanceSync() + { +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave + && !qt_mac_applicationIsInDarkMode()) { + auto requiredAppearanceName = NSApplication.sharedApplication.effectiveAppearance.name; + if (![NSAppearance.currentAppearance.name isEqualToString:requiredAppearanceName]) { + previous = NSAppearance.currentAppearance; + NSAppearance.currentAppearance = [NSAppearance appearanceNamed:requiredAppearanceName]; + } + } +#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + } + + ~AppearanceSync() + { + if (previous) + NSAppearance.currentAppearance = previous; + } + +private: + NSAppearance *previous = nil; + + Q_DISABLE_COPY(AppearanceSync) +}; + +static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb) +{ + const qreal length = sb->maximum - sb->minimum + sb->pageStep; + if (qFuzzyIsNull(length)) + return false; + const qreal proportion = sb->pageStep / length; + const qreal range = qreal(sb->maximum - sb->minimum); + qreal value = range ? qreal(sb->sliderValue - sb->minimum) / range : 0; + if (sb->orientation == Qt::Horizontal && sb->direction == Qt::RightToLeft) + value = 1.0 - value; + + scroller.frame = sb->rect.toCGRect(); + scroller.floatValue = value; + scroller.knobProportion = proportion; + return true; +} + +static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) +{ + if (sl->minimum >= sl->maximum) + return false; + + slider.frame = sl->rect.toCGRect(); + slider.minValue = sl->minimum; + slider.maxValue = sl->maximum; + slider.intValue = sl->sliderPosition; + slider.enabled = sl->state & QStyle::State_Enabled; + if (sl->tickPosition != QSlider::NoTicks) { + // Set numberOfTickMarks, but TicksBothSides will be treated differently + int interval = sl->tickInterval; + if (interval == 0) { + interval = sl->pageStep; + if (interval == 0) + interval = sl->singleStep; + if (interval == 0) + interval = 1; // return false? + } + slider.numberOfTickMarks = 1 + ((sl->maximum - sl->minimum) / interval); + + const bool ticksAbove = sl->tickPosition == QSlider::TicksAbove; + if (sl->orientation == Qt::Horizontal) + slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionAbove : NSTickMarkPositionBelow; + else + slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionLeading : NSTickMarkPositionTrailing; + } else { + slider.numberOfTickMarks = 0; + } + + // Ensure the values set above are reflected when asking + // the cell for its metrics and to draw itself. + [slider layoutSubtreeIfNeeded]; + + return true; +} + +static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY) +{ + QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface(); + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = + nativeInterface->nativeResourceFunctionForIntegration("testContentBorderPosition"); + if (!function) + return false; // Not Cocoa platform plugin. + + typedef bool (*TestContentBorderPositionFunction)(QWindow *, int); + return (reinterpret_cast(function))(window, windowY); +} + + +#if QT_CONFIG(tabbar) +static void drawTabCloseButton(QPainter *p, bool hover, bool selected, bool pressed, bool documentMode) +{ + p->setRenderHints(QPainter::Antialiasing); + QRect rect(0, 0, closeButtonSize, closeButtonSize); + const int width = rect.width(); + const int height = rect.height(); + + if (hover) { + // draw background circle + QColor background; + if (selected) { + if (documentMode) + background = pressed ? tabBarCloseButtonBackgroundSelectedPressed : tabBarCloseButtonBackgroundSelectedHovered; + else + background = QColor(255, 255, 255, pressed ? 150 : 100); // Translucent white + } else { + background = pressed ? tabBarCloseButtonBackgroundPressed : tabBarCloseButtonBackgroundHovered; + if (!documentMode) + background = background.lighter(pressed ? 135 : 140); // Lighter tab background, lighter color + } + + p->setPen(Qt::transparent); + p->setBrush(background); + p->drawRoundedRect(rect, closeButtonCornerRadius, closeButtonCornerRadius); + } + + // draw cross + const int margin = 3; + QPen crossPen; + crossPen.setColor(selected ? (documentMode ? tabBarCloseButtonCrossSelected : Qt::white) : tabBarCloseButtonCross); + crossPen.setWidthF(1.1); + crossPen.setCapStyle(Qt::FlatCap); + p->setPen(crossPen); + p->drawLine(margin, margin, width - margin, height - margin); + p->drawLine(margin, height - margin, width - margin, margin); +} + +QRect rotateTabPainter(QPainter *p, QTabBar::Shape shape, QRect tabRect) +{ + const auto tabDirection = QMacStylePrivate::tabDirection(shape); + if (QMacStylePrivate::verticalTabs(tabDirection)) { + int newX, newY, newRot; + if (tabDirection == QMacStylePrivate::East) { + newX = tabRect.width(); + newY = tabRect.y(); + newRot = 90; + } else { + newX = 0; + newY = tabRect.y() + tabRect.height(); + newRot = -90; + } + tabRect.setRect(0, 0, tabRect.height(), tabRect.width()); + QTransform transform; + transform.translate(newX, newY); + transform.rotate(newRot); + p->setTransform(transform, true); + } + return tabRect; +} + +void drawTabShape(QPainter *p, const QStyleOptionTab *tabOpt, bool isUnified, int tabOverlap) +{ + QRect rect = tabOpt->rect; + if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tabOpt->shape))) + rect = rect.adjusted(-tabOverlap, 0, 0, 0); + else + rect = rect.adjusted(0, -tabOverlap, 0, 0); + + p->translate(rect.x(), rect.y()); + rect.moveLeft(0); + rect.moveTop(0); + const QRect tabRect = rotateTabPainter(p, tabOpt->shape, rect); + + const int width = tabRect.width(); + const int height = tabRect.height(); + const bool active = (tabOpt->state & QStyle::State_Active); + const bool selected = (tabOpt->state & QStyle::State_Selected); + + const QRect bodyRect(1, 2, width - 2, height - 3); + const QRect topLineRect(1, 0, width - 2, 1); + const QRect bottomLineRect(1, height - 1, width - 2, 1); + if (selected) { + // fill body + if (tabOpt->documentMode && isUnified) { + p->save(); + p->setCompositionMode(QPainter::CompositionMode_Source); + p->fillRect(tabRect, QColor(Qt::transparent)); + p->restore(); + } else if (active) { + p->fillRect(bodyRect, tabBarTabBackgroundActiveSelected()); + // top line + p->fillRect(topLineRect, tabBarTabLineSelected()); + } else { + p->fillRect(bodyRect, tabBarTabBackgroundSelected()); + } + } else { + // when the mouse is over non selected tabs they get a new color + const bool hover = (tabOpt->state & QStyle::State_MouseOver); + if (hover) { + // fill body + p->fillRect(bodyRect, tabBarTabBackgroundActiveHovered()); + // bottom line + p->fillRect(bottomLineRect, isDarkMode() ? QColor(Qt::black) : tabBarTabLineActiveHovered()); + } + } + + // separator lines between tabs + const QRect leftLineRect(0, 1, 1, height - 2); + const QRect rightLineRect(width - 1, 1, 1, height - 2); + const QColor separatorLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(leftLineRect, separatorLineColor); + p->fillRect(rightLineRect, separatorLineColor); +} + +void drawTabBase(QPainter *p, const QStyleOptionTabBarBase *tbb, const QWidget *w) +{ + QRect r = tbb->rect; + if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tbb->shape))) + r.setWidth(w->width()); + else + r.setHeight(w->height()); + + const QRect tabRect = rotateTabPainter(p, tbb->shape, r); + const int width = tabRect.width(); + const int height = tabRect.height(); + const bool active = (tbb->state & QStyle::State_Active); + + // fill body + const QRect bodyRect(0, 1, width, height - 1); + const QColor bodyColor = active ? tabBarTabBackgroundActive() : tabBarTabBackground(); + p->fillRect(bodyRect, bodyColor); + + // top line + const QRect topLineRect(0, 0, width, 1); + const QColor topLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(topLineRect, topLineColor); + + // bottom line + const QRect bottomLineRect(0, height - 1, width, 1); + bool isDocument = false; + if (const QTabBar *tabBar = qobject_cast(w)) + isDocument = tabBar->documentMode(); + const QColor bottomLineColor = isDocument && isDarkMode() ? QColor(Qt::black) : active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(bottomLineRect, bottomLineColor); +} +#endif + +static QStyleHelper::WidgetSizePolicy getControlSize(const QStyleOption *option, const QWidget *widget) +{ + const auto wsp = QStyleHelper::widgetSizePolicy(widget, option); + if (wsp == QStyleHelper::SizeDefault) + return QStyleHelper::SizeLarge; + + return wsp; +} + +#if QT_CONFIG(treeview) +static inline bool isTreeView(const QWidget *widget) +{ + return (widget && widget->parentWidget() && + qobject_cast(widget->parentWidget())); +} +#endif + +static QString qt_mac_removeMnemonics(const QString &original) +{ + QString returnText(original.size(), 0); + int finalDest = 0; + int currPos = 0; + int l = original.length(); + while (l) { + if (original.at(currPos) == QLatin1Char('&')) { + ++currPos; + --l; + if (l == 0) + break; + } else if (original.at(currPos) == QLatin1Char('(') && l >= 4 && + original.at(currPos + 1) == QLatin1Char('&') && + original.at(currPos + 2) != QLatin1Char('&') && + original.at(currPos + 3) == QLatin1Char(')')) { + /* remove mnemonics its format is "\s*(&X)" */ + int n = 0; + while (finalDest > n && returnText.at(finalDest - n - 1).isSpace()) + ++n; + finalDest -= n; + currPos += 4; + l -= 4; + continue; + } + returnText[finalDest] = original.at(currPos); + ++currPos; + ++finalDest; + --l; + } + returnText.truncate(finalDest); + return returnText; +} + +static bool qt_macWindowMainWindow(const QWidget *window) +{ + if (QWindow *w = window->windowHandle()) { + if (w->handle()) { + if (NSWindow *nswindow = static_cast(QGuiApplication::platformNativeInterface()->nativeResourceForWindow(QByteArrayLiteral("nswindow"), w))) { + return [nswindow isMainWindow]; + } + } + } + return false; +} + +/***************************************************************************** + QMacCGStyle globals + *****************************************************************************/ +const int macItemFrame = 2; // menu item frame width +const int macItemHMargin = 3; // menu item hor text margin +const int macRightBorder = 12; // right border on mac + +/***************************************************************************** + QMacCGStyle utility functions + *****************************************************************************/ + +enum QAquaMetric { + // Prepend kThemeMetric to get the HIToolBox constant. + // Represents the values already used in QMacStyle. + CheckBoxHeight = 0, + CheckBoxWidth, + EditTextFrameOutset, + FocusRectOutset, + HSliderHeight, + HSliderTickHeight, + LargeProgressBarThickness, + ListHeaderHeight, + MenuSeparatorHeight, // GetThemeMenuSeparatorHeight + MiniCheckBoxHeight, + MiniCheckBoxWidth, + MiniHSliderHeight, + MiniHSliderTickHeight, + MiniPopupButtonHeight, + MiniPushButtonHeight, + MiniRadioButtonHeight, + MiniRadioButtonWidth, + MiniVSliderTickWidth, + MiniVSliderWidth, + NormalProgressBarThickness, + PopupButtonHeight, + ProgressBarShadowOutset, + PushButtonHeight, + RadioButtonHeight, + RadioButtonWidth, + SeparatorSize, + SmallCheckBoxHeight, + SmallCheckBoxWidth, + SmallHSliderHeight, + SmallHSliderTickHeight, + SmallPopupButtonHeight, + SmallProgressBarShadowOutset, + SmallPushButtonHeight, + SmallRadioButtonHeight, + SmallRadioButtonWidth, + SmallVSliderTickWidth, + SmallVSliderWidth, + VSliderTickWidth, + VSliderWidth +}; + +static const int qt_mac_aqua_metrics[] = { + // Values as of macOS 10.12.4 and Xcode 8.3.1 + 18 /* CheckBoxHeight */, + 18 /* CheckBoxWidth */, + 1 /* EditTextFrameOutset */, + 4 /* FocusRectOutset */, + 22 /* HSliderHeight */, + 5 /* HSliderTickHeight */, + 16 /* LargeProgressBarThickness */, + 17 /* ListHeaderHeight */, + 12 /* MenuSeparatorHeight, aka GetThemeMenuSeparatorHeight */, + 11 /* MiniCheckBoxHeight */, + 10 /* MiniCheckBoxWidth */, + 12 /* MiniHSliderHeight */, + 4 /* MiniHSliderTickHeight */, + 15 /* MiniPopupButtonHeight */, + 16 /* MiniPushButtonHeight */, + 11 /* MiniRadioButtonHeight */, + 10 /* MiniRadioButtonWidth */, + 4 /* MiniVSliderTickWidth */, + 12 /* MiniVSliderWidth */, + 12 /* NormalProgressBarThickness */, + 20 /* PopupButtonHeight */, + 4 /* ProgressBarShadowOutset */, + 20 /* PushButtonHeight */, + 18 /* RadioButtonHeight */, + 18 /* RadioButtonWidth */, + 1 /* SeparatorSize */, + 16 /* SmallCheckBoxHeight */, + 14 /* SmallCheckBoxWidth */, + 15 /* SmallHSliderHeight */, + 4 /* SmallHSliderTickHeight */, + 17 /* SmallPopupButtonHeight */, + 2 /* SmallProgressBarShadowOutset */, + 17 /* SmallPushButtonHeight */, + 15 /* SmallRadioButtonHeight */, + 14 /* SmallRadioButtonWidth */, + 4 /* SmallVSliderTickWidth */, + 15 /* SmallVSliderWidth */, + 5 /* VSliderTickWidth */, + 22 /* VSliderWidth */ +}; + +static inline int qt_mac_aqua_get_metric(QAquaMetric m) +{ + return qt_mac_aqua_metrics[m]; +} + +static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg, QSize szHint, + QStyleHelper::WidgetSizePolicy sz) +{ + QSize ret(-1, -1); + if (sz != QStyleHelper::SizeSmall && sz != QStyleHelper::SizeLarge && sz != QStyleHelper::SizeMini) { + qDebug("Not sure how to return this..."); + return ret; + } + if ((widg && widg->testAttribute(Qt::WA_SetFont)) || !QApplication::desktopSettingsAware()) { + // If you're using a custom font and it's bigger than the default font, + // then no constraints for you. If you are smaller, we can try to help you out + QFont font = qt_app_fonts_hash()->value(widg->metaObject()->className(), QFont()); + if (widg->font().pointSize() > font.pointSize()) + return ret; + } + + if (ct == QStyle::CT_CustomBase && widg) { +#if QT_CONFIG(pushbutton) + if (qobject_cast(widg)) + ct = QStyle::CT_PushButton; +#endif + else if (qobject_cast(widg)) + ct = QStyle::CT_RadioButton; +#if QT_CONFIG(checkbox) + else if (qobject_cast(widg)) + ct = QStyle::CT_CheckBox; +#endif +#if QT_CONFIG(combobox) + else if (qobject_cast(widg)) + ct = QStyle::CT_ComboBox; +#endif +#if QT_CONFIG(toolbutton) + else if (qobject_cast(widg)) + ct = QStyle::CT_ToolButton; +#endif + else if (qobject_cast(widg)) + ct = QStyle::CT_Slider; +#if QT_CONFIG(progressbar) + else if (qobject_cast(widg)) + ct = QStyle::CT_ProgressBar; +#endif +#if QT_CONFIG(lineedit) + else if (qobject_cast(widg)) + ct = QStyle::CT_LineEdit; +#endif +#if QT_CONFIG(itemviews) + else if (qobject_cast(widg)) + ct = QStyle::CT_HeaderSection; +#endif +#if QT_CONFIG(menubar) + else if (qobject_cast(widg)) + ct = QStyle::CT_MenuBar; +#endif +#if QT_CONFIG(sizegrip) + else if (qobject_cast(widg)) + ct = QStyle::CT_SizeGrip; +#endif + else + return ret; + } + + switch (ct) { +#if QT_CONFIG(pushbutton) + case QStyle::CT_PushButton: { + const QPushButton *psh = qobject_cast(widg); + // If this comparison is false, then the widget was not a push button. + // This is bad and there's very little we can do since we were requested to find a + // sensible size for a widget that pretends to be a QPushButton but is not. + if(psh) { + QString buttonText = qt_mac_removeMnemonics(psh->text()); + if (buttonText.contains(QLatin1Char('\n'))) + ret = QSize(-1, -1); + else if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); + + if (!psh->icon().isNull()){ + // If the button got an icon, and the icon is larger than the + // button, we can't decide on a default size + ret.setWidth(-1); + if (ret.height() < psh->iconSize().height()) + ret.setHeight(-1); + } + else if (buttonText == QLatin1String("OK") || buttonText == QLatin1String("Cancel")){ + // Aqua Style guidelines restrict the size of OK and Cancel buttons to 68 pixels. + // However, this doesn't work for German, therefore only do it for English, + // I suppose it would be better to do some sort of lookups for languages + // that like to have really long words. + // FIXME This is not exactly true. Out of context, OK buttons have their + // implicit size calculated the same way as any other button. Inside a + // QDialogButtonBox, their size should be calculated such that the action + // or accept button (i.e., rightmost) and cancel button have the same width. + ret.setWidth(69); + } + } else { + // The only sensible thing to do is to return whatever the style suggests... + if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); + else + // Since there's no default size we return the large size... + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + } +#endif +#if 0 //Not sure we are applying the rules correctly for RadioButtons/CheckBoxes --Sam + } else if (ct == QStyle::CT_RadioButton) { + QRadioButton *rdo = static_cast(widg); + // Exception for case where multiline radio button text requires no size constrainment + if (rdo->text().find('\n') != -1) + return ret; + if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(RadioButtonHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallRadioButtonHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniRadioButtonHeight)); + } else if (ct == QStyle::CT_CheckBox) { + if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(CheckBoxHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallCheckBoxHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniCheckBoxHeight)); +#endif + break; + } + case QStyle::CT_SizeGrip: + // Not HIG kosher: mimic what we were doing earlier until we support 4-edge resizing in MDI subwindows + if (sz == QStyleHelper::SizeLarge || sz == QStyleHelper::SizeSmall) { + int s = sz == QStyleHelper::SizeSmall ? 16 : 22; // large: pixel measured from HITheme, small: from my hat + int width = 0; +#if QT_CONFIG(mdiarea) + if (widg && qobject_cast(widg->parentWidget())) + width = s; +#endif + ret = QSize(width, s); + } + break; + case QStyle::CT_ComboBox: + switch (sz) { + case QStyleHelper::SizeLarge: + ret = QSize(-1, qt_mac_aqua_get_metric(PopupButtonHeight)); + break; + case QStyleHelper::SizeSmall: + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPopupButtonHeight)); + break; + case QStyleHelper::SizeMini: + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPopupButtonHeight)); + break; + default: + break; + } + break; + case QStyle::CT_ToolButton: + if (sz == QStyleHelper::SizeSmall) { + int width = 0, height = 0; + if (szHint == QSize(-1, -1)) { //just 'guess'.. +#if QT_CONFIG(toolbutton) + const QToolButton *bt = qobject_cast(widg); + // If this conversion fails then the widget was not what it claimed to be. + if(bt) { + if (!bt->icon().isNull()) { + QSize iconSize = bt->iconSize(); + QSize pmSize = bt->icon().actualSize(QSize(32, 32), QIcon::Normal); + width = qMax(width, qMax(iconSize.width(), pmSize.width())); + height = qMax(height, qMax(iconSize.height(), pmSize.height())); + } + if (!bt->text().isNull() && bt->toolButtonStyle() != Qt::ToolButtonIconOnly) { + int text_width = bt->fontMetrics().horizontalAdvance(bt->text()), + text_height = bt->fontMetrics().height(); + if (bt->toolButtonStyle() == Qt::ToolButtonTextUnderIcon) { + width = qMax(width, text_width); + height += text_height; + } else { + width += text_width; + width = qMax(height, text_height); + } + } + } else +#endif + { + // Let's return the size hint... + width = szHint.width(); + height = szHint.height(); + } + } else { + width = szHint.width(); + height = szHint.height(); + } + width = qMax(20, width + 5); //border + height = qMax(20, height + 5); //border + ret = QSize(width, height); + } + break; + case QStyle::CT_Slider: { + int w = -1; + const QSlider *sld = qobject_cast(widg); + // If this conversion fails then the widget was not what it claimed to be. + if(sld) { + if (sz == QStyleHelper::SizeLarge) { + if (sld->orientation() == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(HSliderHeight); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(HSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(VSliderWidth); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(VSliderTickWidth); + } + } else if (sz == QStyleHelper::SizeSmall) { + if (sld->orientation() == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(SmallHSliderHeight); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(SmallHSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(SmallVSliderWidth); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(SmallVSliderTickWidth); + } + } else if (sz == QStyleHelper::SizeMini) { + if (sld->orientation() == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(MiniHSliderHeight); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(MiniHSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(MiniVSliderWidth); + if (sld->tickPosition() != QSlider::NoTicks) + w += qt_mac_aqua_get_metric(MiniVSliderTickWidth); + } + } + } else { + // This is tricky, we were requested to find a size for a slider which is not + // a slider. We don't know if this is vertical or horizontal or if we need to + // have tick marks or not. + // For this case we will return an horizontal slider without tick marks. + w = qt_mac_aqua_get_metric(HSliderHeight); + w += qt_mac_aqua_get_metric(HSliderTickHeight); + } + if (sld->orientation() == Qt::Horizontal) + ret.setHeight(w); + else + ret.setWidth(w); + break; + } +#if QT_CONFIG(progressbar) + case QStyle::CT_ProgressBar: { + int finalValue = -1; + Qt::Orientation orient = Qt::Horizontal; + if (const QProgressBar *pb = qobject_cast(widg)) + orient = pb->orientation(); + + if (sz == QStyleHelper::SizeLarge) + finalValue = qt_mac_aqua_get_metric(LargeProgressBarThickness) + + qt_mac_aqua_get_metric(ProgressBarShadowOutset); + else + finalValue = qt_mac_aqua_get_metric(NormalProgressBarThickness) + + qt_mac_aqua_get_metric(SmallProgressBarShadowOutset); + if (orient == Qt::Horizontal) + ret.setHeight(finalValue); + else + ret.setWidth(finalValue); + break; + } +#endif +#if QT_CONFIG(combobox) + case QStyle::CT_LineEdit: + if (!widg || !qobject_cast(widg->parentWidget())) { + //should I take into account the font dimentions of the lineedit? -Sam + if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, 21); + else + ret = QSize(-1, 19); + } + break; +#endif + case QStyle::CT_HeaderSection: +#if QT_CONFIG(treeview) + if (isTreeView(widg)) + ret = QSize(-1, qt_mac_aqua_get_metric(ListHeaderHeight)); +#endif + break; + case QStyle::CT_MenuBar: + if (sz == QStyleHelper::SizeLarge) { + ret = QSize(-1, [[NSApp mainMenu] menuBarHeight]); + // In the qt_mac_set_native_menubar(false) case, + // we come it here with a zero-height main menu, + // preventing the in-window menu from displaying. + // Use 22 pixels for the height, by observation. + if (ret.height() <= 0) + ret.setHeight(22); + } + break; + default: + break; + } + return ret; +} + + +#if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) +static QStyleHelper::WidgetSizePolicy qt_aqua_guess_size(const QWidget *widg, QSize large, QSize small, QSize mini) +{ + Q_UNUSED(widg); + + if (large == QSize(-1, -1)) { + if (small != QSize(-1, -1)) + return QStyleHelper::SizeSmall; + if (mini != QSize(-1, -1)) + return QStyleHelper::SizeMini; + return QStyleHelper::SizeDefault; + } else if (small == QSize(-1, -1)) { + if (mini != QSize(-1, -1)) + return QStyleHelper::SizeMini; + return QStyleHelper::SizeLarge; + } else if (mini == QSize(-1, -1)) { + return QStyleHelper::SizeLarge; + } + + if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) + return QStyleHelper::SizeSmall; + else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) + return QStyleHelper::SizeMini; + + return QStyleHelper::SizeLarge; +} +#endif + +void QMacStylePrivate::drawFocusRing(QPainter *p, const QRectF &targetRect, int hMargin, int vMargin, const CocoaControl &cw) const +{ + QPainterPath focusRingPath; + focusRingPath.setFillRule(Qt::OddEvenFill); + + qreal hOffset = 0.0; + qreal vOffset = 0.0; + switch (cw.type) { + case Box: + case Button_SquareButton: + case SegmentedControl_Middle: + case TextField: { + auto innerRect = targetRect; + if (cw.type == TextField) + innerRect = innerRect.adjusted(hMargin, vMargin, -hMargin, -vMargin).adjusted(0.5, 0.5, -0.5, -0.5); + const auto outerRect = innerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth); + const auto outerRadius = focusRingWidth; + focusRingPath.addRect(innerRect); + focusRingPath.addRoundedRect(outerRect, outerRadius, outerRadius); + break; + } + case Button_CheckBox: { + const auto cbInnerRadius = (cw.size == QStyleHelper::SizeMini ? 2.0 : 3.0); + const auto cbSize = cw.size == QStyleHelper::SizeLarge ? 13 : + cw.size == QStyleHelper::SizeSmall ? 11 : 9; // As measured + hOffset = hMargin + (cw.size == QStyleHelper::SizeLarge ? 2.5 : + cw.size == QStyleHelper::SizeSmall ? 2.0 : 1.0); // As measured + vOffset = 0.5 * qreal(targetRect.height() - cbSize); + const auto cbInnerRect = QRectF(0, 0, cbSize, cbSize); + const auto cbOuterRadius = cbInnerRadius + focusRingWidth; + const auto cbOuterRect = cbInnerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth); + focusRingPath.addRoundedRect(cbOuterRect, cbOuterRadius, cbOuterRadius); + focusRingPath.addRoundedRect(cbInnerRect, cbInnerRadius, cbInnerRadius); + break; + } + case Button_RadioButton: { + const auto rbSize = cw.size == QStyleHelper::SizeLarge ? 15 : + cw.size == QStyleHelper::SizeSmall ? 13 : 9; // As measured + hOffset = hMargin + (cw.size == QStyleHelper::SizeLarge ? 1.5 : + cw.size == QStyleHelper::SizeSmall ? 1.0 : 1.0); // As measured + vOffset = 0.5 * qreal(targetRect.height() - rbSize); + const auto rbInnerRect = QRectF(0, 0, rbSize, rbSize); + const auto rbOuterRect = rbInnerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth); + focusRingPath.addEllipse(rbInnerRect); + focusRingPath.addEllipse(rbOuterRect); + break; + } + case Button_PopupButton: + case Button_PullDown: + case Button_PushButton: + case SegmentedControl_Single: { + const qreal innerRadius = cw.type == Button_PushButton ? 3 : 4; + const qreal outerRadius = innerRadius + focusRingWidth; + hOffset = targetRect.left(); + vOffset = targetRect.top(); + const auto innerRect = targetRect.translated(-targetRect.topLeft()); + const auto outerRect = innerRect.adjusted(-hMargin, -vMargin, hMargin, vMargin); + focusRingPath.addRoundedRect(innerRect, innerRadius, innerRadius); + focusRingPath.addRoundedRect(outerRect, outerRadius, outerRadius); + break; + } + case ComboBox: + case SegmentedControl_First: + case SegmentedControl_Last: { + hOffset = targetRect.left(); + vOffset = targetRect.top(); + const qreal innerRadius = 8; + const qreal outerRadius = innerRadius + focusRingWidth; + const auto innerRect = targetRect.translated(-targetRect.topLeft()); + const auto outerRect = innerRect.adjusted(-hMargin, -vMargin, hMargin, vMargin); + + const auto cbFocusFramePath = [](const QRectF &rect, qreal tRadius, qreal bRadius) { + QPainterPath path; + + if (tRadius > 0) { + const auto topLeftCorner = QRectF(rect.topLeft(), QSizeF(tRadius, tRadius)); + path.arcMoveTo(topLeftCorner, 180); + path.arcTo(topLeftCorner, 180, -90); + } else { + path.moveTo(rect.topLeft()); + } + const auto rightEdge = rect.right() - bRadius; + path.arcTo(rightEdge, rect.top(), bRadius, bRadius, 90, -90); + path.arcTo(rightEdge, rect.bottom() - bRadius, bRadius, bRadius, 0, -90); + if (tRadius > 0) + path.arcTo(rect.left(), rect.bottom() - tRadius, tRadius, tRadius, 270, -90); + else + path.lineTo(rect.bottomLeft()); + path.closeSubpath(); + + return path; + }; + + const auto innerPath = cbFocusFramePath(innerRect, 0, innerRadius); + focusRingPath.addPath(innerPath); + const auto outerPath = cbFocusFramePath(outerRect, 2 * focusRingWidth, outerRadius); + focusRingPath.addPath(outerPath); + break; + } + default: + Q_UNREACHABLE(); + } + + auto focusRingColor = qt_mac_toQColor(NSColor.keyboardFocusIndicatorColor.CGColor); + if (!qt_mac_applicationIsInDarkMode()) { + // This color already has alpha ~ 0.25, this value is too small - the ring is + // very pale and nothing like the native one. 0.39 makes it better (not ideal + // anyway). The color seems to be correct in dark more without any modification. + focusRingColor.setAlphaF(0.39); + } + + p->save(); + p->setRenderHint(QPainter::Antialiasing); + + if (cw.type == SegmentedControl_First) { + // TODO Flip left-right + } + p->translate(hOffset, vOffset); + p->fillPath(focusRingPath, focusRingColor); + p->restore(); +} + +QPainterPath QMacStylePrivate::windowPanelPath(const QRectF &r) const +{ + static const qreal CornerPointOffset = 5.5; + static const qreal CornerControlOffset = 2.1; + + QPainterPath path; + // Top-left corner + path.moveTo(r.left(), r.top() + CornerPointOffset); + path.cubicTo(r.left(), r.top() + CornerControlOffset, + r.left() + CornerControlOffset, r.top(), + r.left() + CornerPointOffset, r.top()); + // Top-right corner + path.lineTo(r.right() - CornerPointOffset, r.top()); + path.cubicTo(r.right() - CornerControlOffset, r.top(), + r.right(), r.top() + CornerControlOffset, + r.right(), r.top() + CornerPointOffset); + // Bottom-right corner + path.lineTo(r.right(), r.bottom() - CornerPointOffset); + path.cubicTo(r.right(), r.bottom() - CornerControlOffset, + r.right() - CornerControlOffset, r.bottom(), + r.right() - CornerPointOffset, r.bottom()); + // Bottom-right corner + path.lineTo(r.left() + CornerPointOffset, r.bottom()); + path.cubicTo(r.left() + CornerControlOffset, r.bottom(), + r.left(), r.bottom() - CornerControlOffset, + r.left(), r.bottom() - CornerPointOffset); + path.lineTo(r.left(), r.top() + CornerPointOffset); + + return path; +} + +QMacStylePrivate::CocoaControlType QMacStylePrivate::windowButtonCocoaControl(QStyle::SubControl sc) const +{ + struct WindowButtons { + QStyle::SubControl sc; + QMacStylePrivate::CocoaControlType ct; + }; + + static const WindowButtons buttons[] = { + { QStyle::SC_TitleBarCloseButton, QMacStylePrivate::Button_WindowClose }, + { QStyle::SC_TitleBarMinButton, QMacStylePrivate::Button_WindowMiniaturize }, + { QStyle::SC_TitleBarMaxButton, QMacStylePrivate::Button_WindowZoom } + }; + + for (const auto &wb : buttons) + if (wb.sc == sc) + return wb.ct; + + return NoControl; +} + + +#if QT_CONFIG(tabbar) +void QMacStylePrivate::tabLayout(const QStyleOptionTab *opt, const QWidget *widget, QRect *textRect, QRect *iconRect) const +{ + Q_ASSERT(textRect); + Q_ASSERT(iconRect); + QRect tr = opt->rect; + const bool verticalTabs = opt->shape == QTabBar::RoundedEast + || opt->shape == QTabBar::RoundedWest + || opt->shape == QTabBar::TriangularEast + || opt->shape == QTabBar::TriangularWest; + if (verticalTabs) + tr.setRect(0, 0, tr.height(), tr.width()); // 0, 0 as we will have a translate transform + + int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt, widget); + int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt, widget); + const int hpadding = 4; + const int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; + if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth) + verticalShift = -verticalShift; + tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); + + // left widget + if (!opt->leftButtonSize.isEmpty()) { + const int buttonSize = verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width(); + tr.setLeft(tr.left() + 4 + buttonSize); + // make text aligned to center + if (opt->rightButtonSize.isEmpty()) + tr.setRight(tr.right() - 4 - buttonSize); + } + // right widget + if (!opt->rightButtonSize.isEmpty()) { + const int buttonSize = verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width(); + tr.setRight(tr.right() - 4 - buttonSize); + // make text aligned to center + if (opt->leftButtonSize.isEmpty()) + tr.setLeft(tr.left() + 4 + buttonSize); + } + + // icon + if (!opt->icon.isNull()) { + QSize iconSize = opt->iconSize; + if (!iconSize.isValid()) { + int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); + iconSize = QSize(iconExtent, iconExtent); + } + QSize tabIconSize = opt->icon.actualSize(iconSize, + (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, + (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off); + // High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize + tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); + + const int stylePadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2 - hpadding; + + if (opt->documentMode) { + // documents show the icon as part of the the text + const int textWidth = + opt->fontMetrics.boundingRect(tr, Qt::AlignCenter | Qt::TextShowMnemonic, opt->text).width(); + *iconRect = QRect(tr.center().x() - textWidth / 2 - stylePadding - tabIconSize.width(), + tr.center().y() - tabIconSize.height() / 2, + tabIconSize.width(), tabIconSize.height()); + } else { + *iconRect = QRect(tr.left() + stylePadding, tr.center().y() - tabIconSize.height() / 2, + tabIconSize.width(), tabIconSize.height()); + } + if (!verticalTabs) + *iconRect = proxyStyle->visualRect(opt->direction, opt->rect, *iconRect); + + tr.setLeft(tr.left() + stylePadding + tabIconSize.width() + 4); + tr.setRight(tr.right() - stylePadding - tabIconSize.width() - 4); + } + + if (!verticalTabs) + tr = proxyStyle->visualRect(opt->direction, opt->rect, tr); + + *textRect = tr; +} + +QMacStylePrivate::Direction QMacStylePrivate::tabDirection(QTabBar::Shape shape) +{ + switch (shape) { + case QTabBar::RoundedSouth: + case QTabBar::TriangularSouth: + return South; + case QTabBar::RoundedNorth: + case QTabBar::TriangularNorth: + return North; + case QTabBar::RoundedWest: + case QTabBar::TriangularWest: + return West; + case QTabBar::RoundedEast: + case QTabBar::TriangularEast: + return East; + } +} + +bool QMacStylePrivate::verticalTabs(QMacStylePrivate::Direction direction) +{ + return (direction == QMacStylePrivate::East + || direction == QMacStylePrivate::West); +} + +#endif // QT_CONFIG(tabbar) + +QStyleHelper::WidgetSizePolicy QMacStylePrivate::effectiveAquaSizeConstrain(const QStyleOption *option, + const QWidget *widg, + QStyle::ContentsType ct, + QSize szHint, QSize *insz) const +{ + QStyleHelper::WidgetSizePolicy sz = aquaSizeConstrain(option, widg, ct, szHint, insz); + if (sz == QStyleHelper::SizeDefault) + return QStyleHelper::SizeLarge; + return sz; +} + +QStyleHelper::WidgetSizePolicy QMacStylePrivate::aquaSizeConstrain(const QStyleOption *option, const QWidget *widg, + QStyle::ContentsType ct, QSize szHint, QSize *insz) const +{ +#if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) + if (option) { + if (option->state & QStyle::State_Small) + return QStyleHelper::SizeSmall; + if (option->state & QStyle::State_Mini) + return QStyleHelper::SizeMini; + } + + if (!widg) { + if (insz) + *insz = QSize(); + if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) + return QStyleHelper::SizeSmall; + if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) + return QStyleHelper::SizeMini; + return QStyleHelper::SizeDefault; + } + + QSize large = qt_aqua_get_known_size(ct, widg, szHint, QStyleHelper::SizeLarge), + small = qt_aqua_get_known_size(ct, widg, szHint, QStyleHelper::SizeSmall), + mini = qt_aqua_get_known_size(ct, widg, szHint, QStyleHelper::SizeMini); + bool guess_size = false; + QStyleHelper::WidgetSizePolicy ret = QStyleHelper::SizeDefault; + QStyleHelper::WidgetSizePolicy wsp = QStyleHelper::widgetSizePolicy(widg); + if (wsp == QStyleHelper::SizeDefault) + guess_size = true; + else if (wsp == QStyleHelper::SizeMini) + ret = QStyleHelper::SizeMini; + else if (wsp == QStyleHelper::SizeSmall) + ret = QStyleHelper::SizeSmall; + else if (wsp == QStyleHelper::SizeLarge) + ret = QStyleHelper::SizeLarge; + if (guess_size) + ret = qt_aqua_guess_size(widg, large, small, mini); + + QSize *sz = 0; + if (ret == QStyleHelper::SizeSmall) + sz = &small; + else if (ret == QStyleHelper::SizeLarge) + sz = &large; + else if (ret == QStyleHelper::SizeMini) + sz = &mini; + if (insz) + *insz = sz ? *sz : QSize(-1, -1); +#ifdef DEBUG_SIZE_CONSTRAINT + if (sz) { + const char *size_desc = "Unknown"; + if (sz == &small) + size_desc = "Small"; + else if (sz == &large) + size_desc = "Large"; + else if (sz == &mini) + size_desc = "Mini"; + qDebug("%s - %s: %s taken (%d, %d) [%d, %d]", + widg ? widg->objectName().toLatin1().constData() : "*Unknown*", + widg ? widg->metaObject()->className() : "*Unknown*", size_desc, widg->width(), widg->height(), + sz->width(), sz->height()); + } +#endif + return ret; +#else + if (insz) + *insz = QSize(); + Q_UNUSED(widg); + Q_UNUSED(ct); + Q_UNUSED(szHint); + return QStyleHelper::SizeDefault; +#endif +} + +uint qHash(const QMacStylePrivate::CocoaControl &cw, uint seed = 0) +{ + return ((cw.type << 2) | cw.size) ^ seed; +} + +QMacStylePrivate::CocoaControl::CocoaControl() + : type(NoControl), size(QStyleHelper::SizeDefault) +{ +} + +QMacStylePrivate::CocoaControl::CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s) + : type(t), size(s) +{ +} + +bool QMacStylePrivate::CocoaControl::operator==(const CocoaControl &other) const +{ + return other.type == type && other.size == size; +} + +QSizeF QMacStylePrivate::CocoaControl::defaultFrameSize() const +{ + // We need this because things like NSView.alignmentRectInsets + // or -[NSCell titleRectForBounds:] won't work unless the control + // has a reasonable frame set. IOW, it's a chicken and egg problem. + // These values are as observed in Xcode 9's Interface Builder. + + if (type == Button_PushButton) + return QSizeF(-1, pushButtonDefaultHeight[size]); + + if (type == Button_PopupButton + || type == Button_PullDown) + return QSizeF(-1, popupButtonDefaultHeight[size]); + + if (type == ComboBox) + return QSizeF(-1, comboBoxDefaultHeight[size]); + + return QSizeF(); +} + +QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) const +{ + QRectF frameRect; + const auto frameSize = defaultFrameSize(); + if (type == QMacStylePrivate::Button_SquareButton) { + frameRect = rect.adjusted(3, 1, -3, -1) + .adjusted(focusRingWidth, focusRingWidth, -focusRingWidth, -focusRingWidth); + } else if (type == QMacStylePrivate::Button_PushButton) { + // Start from the style option's top-left corner. + frameRect = QRectF(rect.topLeft(), + QSizeF(rect.width(), frameSize.height())); + if (size == QStyleHelper::SizeSmall) + frameRect = frameRect.translated(0, 1.5); + else if (size == QStyleHelper::SizeMini) + frameRect = frameRect.adjusted(0, 0, -8, 0).translated(4, 4); + } else { + // Center in the style option's rect. + frameRect = QRectF(QPointF(0, (rect.height() - frameSize.height()) / 2.0), + QSizeF(rect.width(), frameSize.height())); + frameRect = frameRect.translated(rect.topLeft()); + if (type == QMacStylePrivate::Button_PullDown || type == QMacStylePrivate::Button_PopupButton) { + if (size == QStyleHelper::SizeLarge) + frameRect = frameRect.adjusted(0, 0, -6, 0).translated(3, 0); + else if (size == QStyleHelper::SizeSmall) + frameRect = frameRect.adjusted(0, 0, -4, 0).translated(2, 1); + else if (size == QStyleHelper::SizeMini) + frameRect = frameRect.adjusted(0, 0, -9, 0).translated(5, 0); + } else if (type == QMacStylePrivate::ComboBox) { + frameRect = frameRect.adjusted(0, 0, -6, 0).translated(4, 0); + } + } + + return frameRect; +} + +QMarginsF QMacStylePrivate::CocoaControl::titleMargins() const +{ + if (type == QMacStylePrivate::Button_PushButton) { + if (size == QStyleHelper::SizeLarge) + return QMarginsF(12, 5, 12, 9); + if (size == QStyleHelper::SizeSmall) + return QMarginsF(12, 4, 12, 9); + if (size == QStyleHelper::SizeMini) + return QMarginsF(10, 1, 10, 2); + } + + if (type == QMacStylePrivate::Button_PullDown) { + if (size == QStyleHelper::SizeLarge) + return QMarginsF(7.5, 2.5, 22.5, 5.5); + if (size == QStyleHelper::SizeSmall) + return QMarginsF(7.5, 2, 20.5, 4); + if (size == QStyleHelper::SizeMini) + return QMarginsF(4.5, 0, 16.5, 2); + } + + if (type == QMacStylePrivate::Button_SquareButton) + return QMarginsF(6, 1, 6, 2); + + return QMarginsF(); +} + +bool QMacStylePrivate::CocoaControl::getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle) const +{ + switch (type) { + case Button_CheckBox: + *buttonType = NSSwitchButton; + *bezelStyle = NSRegularSquareBezelStyle; + break; + case Button_Disclosure: + *buttonType = NSOnOffButton; + *bezelStyle = NSDisclosureBezelStyle; + break; + case Button_RadioButton: + *buttonType = NSRadioButton; + *bezelStyle = NSRegularSquareBezelStyle; + break; + case Button_SquareButton: + *buttonType = NSPushOnPushOffButton; + *bezelStyle = NSShadowlessSquareBezelStyle; + break; + case Button_PushButton: + *buttonType = NSPushOnPushOffButton; + *bezelStyle = NSRoundedBezelStyle; + break; + default: + return false; + } + + return true; +} + +QMacStylePrivate::CocoaControlType cocoaControlType(const QStyleOption *opt, const QWidget *w) +{ + if (const auto *btn = qstyleoption_cast(opt)) { + const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; + // When the contents won't fit in a large sized button, + // and WA_MacNormalSize is not set, make the button square. + // Threshold used to be at 34, not 32. + const auto maxNonSquareHeight = pushButtonDefaultHeight[QStyleHelper::SizeLarge]; + const bool isSquare = (btn->features & QStyleOptionButton::Flat) + || (btn->rect.height() > maxNonSquareHeight + && !(w && w->testAttribute(Qt::WA_MacNormalSize))); + return (isSquare? QMacStylePrivate::Button_SquareButton : + hasMenu ? QMacStylePrivate::Button_PullDown : + QMacStylePrivate::Button_PushButton); + } + + if (const auto *combo = qstyleoption_cast(opt)) { + if (combo->editable) + return QMacStylePrivate::ComboBox; + // TODO Me may support square, non-editable combo boxes, but not more than that + return QMacStylePrivate::Button_PopupButton; + } + + return QMacStylePrivate::NoControl; +} + +/** + Carbon draws comboboxes (and other views) outside the rect given as argument. Use this function to obtain + the corresponding inner rect for drawing the same combobox so that it stays inside the given outerBounds. +*/ +CGRect QMacStylePrivate::comboboxInnerBounds(const CGRect &outerBounds, const CocoaControl &cocoaWidget) +{ + CGRect innerBounds = outerBounds; + // Carbon draw parts of the view outside the rect. + // So make the rect a bit smaller to compensate + // (I wish HIThemeGetButtonBackgroundBounds worked) + if (cocoaWidget.type == Button_PopupButton) { + switch (cocoaWidget.size) { + case QStyleHelper::SizeSmall: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 6; + innerBounds.size.height -= 7; + break; + case QStyleHelper::SizeMini: + innerBounds.origin.x += 2; + innerBounds.origin.y += 2; + innerBounds.size.width -= 5; + innerBounds.size.height -= 6; + break; + case QStyleHelper::SizeLarge: + case QStyleHelper::SizeDefault: + innerBounds.origin.x += 2; + innerBounds.origin.y += 2; + innerBounds.size.width -= 5; + innerBounds.size.height -= 6; + } + } else if (cocoaWidget.type == ComboBox) { + switch (cocoaWidget.size) { + case QStyleHelper::SizeSmall: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 7; + innerBounds.size.height -= 8; + break; + case QStyleHelper::SizeMini: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 4; + innerBounds.size.height -= 8; + break; + case QStyleHelper::SizeLarge: + case QStyleHelper::SizeDefault: + innerBounds.origin.x += 3; + innerBounds.origin.y += 2; + innerBounds.size.width -= 6; + innerBounds.size.height -= 8; + } + } + + return innerBounds; +} + +/** + Inside a combobox Qt places a line edit widget. The size of this widget should depend on the kind + of combobox we choose to draw. This function calculates and returns this size. +*/ +QRectF QMacStylePrivate::comboboxEditBounds(const QRectF &outerBounds, const CocoaControl &cw) +{ + QRectF ret = outerBounds; + if (cw.type == ComboBox) { + switch (cw.size) { + case QStyleHelper::SizeLarge: + ret = ret.adjusted(0, 0, -25, 0).translated(2, 4.5); + ret.setHeight(16); + break; + case QStyleHelper::SizeSmall: + ret = ret.adjusted(0, 0, -22, 0).translated(2, 3); + ret.setHeight(14); + break; + case QStyleHelper::SizeMini: + ret = ret.adjusted(0, 0, -19, 0).translated(2, 2.5); + ret.setHeight(10.5); + break; + default: + break; + } + } else if (cw.type == Button_PopupButton) { + switch (cw.size) { + case QStyleHelper::SizeLarge: + ret.adjust(10, 1, -23, -4); + break; + case QStyleHelper::SizeSmall: + ret.adjust(10, 4, -20, -3); + break; + case QStyleHelper::SizeMini: + ret.adjust(9, 0, -19, 0); + ret.setHeight(13); + break; + default: + break; + } + } + return ret; +} + +QMacStylePrivate::QMacStylePrivate() + : backingStoreNSView(nil) +{ + if (auto *ssf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::SmallFont)) + smallSystemFont = *ssf; + if (auto *msf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::MiniFont)) + miniSystemFont = *msf; +} + +QMacStylePrivate::~QMacStylePrivate() +{ + QMacAutoReleasePool pool; + for (NSView *b : cocoaControls) + [b release]; + for (NSCell *cell : cocoaCells) + [cell release]; +} + +NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const +{ + if (widget.type == QMacStylePrivate::NoControl + || widget.size == QStyleHelper::SizeDefault) + return nil; + + if (widget.type == Box) { + if (__builtin_available(macOS 10.14, *)) { + if (qt_mac_applicationIsInDarkMode()) { + // See render code in drawPrimitive(PE_FrameTabWidget) + widget.type = Box_Dark; + } + } + } + + NSView *bv = cocoaControls.value(widget, nil); + if (!bv) { + switch (widget.type) { + case Box: { + NSBox *box = [[NSBox alloc] init]; + bv = box; + box.title = @""; + box.titlePosition = NSNoTitle; + break; + } + case Box_Dark: + bv = [[QDarkNSBox alloc] init]; + break; + case Button_CheckBox: + case Button_Disclosure: + case Button_PushButton: + case Button_RadioButton: + case Button_SquareButton: { + NSButton *bc = [[NSButton alloc] init]; + bc.title = @""; + // See below for style and bezel setting. + bv = bc; + break; + } + case Button_PopupButton: + case Button_PullDown: { + NSPopUpButton *bc = [[NSPopUpButton alloc] init]; + bc.title = @""; + if (widget.type == Button_PullDown) + bc.pullsDown = YES; + bv = bc; + break; + } + case Button_WindowClose: + case Button_WindowMiniaturize: + case Button_WindowZoom: { + const NSWindowButton button = [=] { + switch (widget.type) { + case Button_WindowClose: + return NSWindowCloseButton; + case Button_WindowMiniaturize: + return NSWindowMiniaturizeButton; + case Button_WindowZoom: + return NSWindowZoomButton; + default: + break; + } + Q_UNREACHABLE(); + } (); + const auto styleMask = NSWindowStyleMaskTitled + | NSWindowStyleMaskClosable + | NSWindowStyleMaskMiniaturizable + | NSWindowStyleMaskResizable; + bv = [NSWindow standardWindowButton:button forStyleMask:styleMask]; + [bv retain]; + break; + } + case ComboBox: + bv = [[NSComboBox alloc] init]; + break; + case ProgressIndicator_Determinate: + bv = [[NSProgressIndicator alloc] init]; + break; + case ProgressIndicator_Indeterminate: + bv = [[QIndeterminateProgressIndicator alloc] init]; + break; + case Scroller_Horizontal: + bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; + break; + case Scroller_Vertical: + // Cocoa sets the orientation from the view's frame + // at construction time, and it cannot be changed later. + bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; + break; + case Slider_Horizontal: + bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; + break; + case Slider_Vertical: + // Cocoa sets the orientation from the view's frame + // at construction time, and it cannot be changed later. + bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; + break; + case SplitView_Horizontal: + bv = [[NSSplitView alloc] init]; + break; + case SplitView_Vertical: + bv = [[QVerticalSplitView alloc] init]; + break; + case TextField: + bv = [[NSTextField alloc] init]; + break; + default: + break; + } + + if ([bv isKindOfClass:[NSControl class]]) { + auto *ctrl = static_cast(bv); + switch (widget.size) { + case QStyleHelper::SizeSmall: + ctrl.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + ctrl.controlSize = NSControlSizeMini; + break; + default: + break; + } + } else if (widget.type == ProgressIndicator_Determinate || + widget.type == ProgressIndicator_Indeterminate) { + auto *pi = static_cast(bv); + pi.indeterminate = (widget.type == ProgressIndicator_Indeterminate); + switch (widget.size) { + case QStyleHelper::SizeSmall: + pi.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + pi.controlSize = NSControlSizeMini; + break; + default: + break; + } + } + + cocoaControls.insert(widget, bv); + } + + NSButtonType buttonType; + NSBezelStyle bezelStyle; + if (widget.getCocoaButtonTypeAndBezelStyle(&buttonType, &bezelStyle)) { + // FIXME We need to reset the button's type and + // bezel style properties, even when cached. + auto *button = static_cast(bv); + button.buttonType = buttonType; + button.bezelStyle = bezelStyle; + if (widget.type == Button_CheckBox) + button.allowsMixedState = YES; + } + + return bv; +} + +NSCell *QMacStylePrivate::cocoaCell(CocoaControl widget) const +{ + NSCell *cell = cocoaCells[widget]; + if (!cell) { + switch (widget.type) { + case Stepper: + cell = [[NSStepperCell alloc] init]; + break; + case Button_Disclosure: { + NSButtonCell *bc = [[NSButtonCell alloc] init]; + bc.buttonType = NSOnOffButton; + bc.bezelStyle = NSDisclosureBezelStyle; + cell = bc; + break; + } + default: + break; + } + + switch (widget.size) { + case QStyleHelper::SizeSmall: + cell.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + cell.controlSize = NSControlSizeMini; + break; + default: + break; + } + + cocoaCells.insert(widget, cell); + } + + return cell; +} + +void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p, + __attribute__((noescape)) DrawRectBlock drawRectBlock) const +{ + QMacCGContext ctx(p); + setupNSGraphicsContext(ctx, YES); + + // FIXME: The rect that we get in is relative to the widget that we're drawing + // style on behalf of, and doesn't take into account the offset of that widget + // to the widget that owns the backingstore, which we are placing the native + // view into below. This means most of the views are placed in the upper left + // corner of backingStoreNSView, which does not map to where the actual widget + // is, and which may cause problems such as triggering a setNeedsDisplay of the + // backingStoreNSView for the wrong rect. We work around this by making the view + // layer-backed, which prevents triggering display of the backingStoreNSView, but + // but there may be other issues lurking here due to the wrong position. QTBUG-68023 + view.wantsLayer = YES; + + // FIXME: We are also setting the frame of the incoming view a lot at the call + // sites of this function, making it unclear who's actually responsible for + // maintaining the size and position of the view. In theory the call sites + // should ensure the _size_ of the view is correct, and then let this code + // take care of _positioning_ the view at the right place inside backingStoreNSView. + // For now we pass on the rect as is, to prevent any regressions until this + // can be investigated properly. + view.frame = rect.toCGRect(); + + [backingStoreNSView addSubview:view]; + + // FIXME: Based on the code below, this method isn't drawing an NSView into + // a rect, it's drawing _part of the NSView_, defined by the incoming clip + // or dirty rect, into the current graphics context. We're doing some manual + // translations at the call sites that would indicate that this relationship + // is a bit fuzzy. + const CGRect dirtyRect = rect.toCGRect(); + + if (drawRectBlock) + drawRectBlock(ctx, dirtyRect); + else + [view drawRect:dirtyRect]; + + [view removeFromSuperviewWithoutNeedingDisplay]; + + restoreNSGraphicsContext(ctx); +} + +void QMacStylePrivate::resolveCurrentNSView(QWindow *window) const +{ + backingStoreNSView = window ? (NSView *)window->winId() : nil; +} + +QMacStyle::QMacStyle() + : QCommonStyle(*new QMacStylePrivate) +{ + QMacAutoReleasePool pool; + + static QMacNotificationObserver scrollbarStyleObserver(nil, + NSPreferredScrollerStyleDidChangeNotification, []() { + // Purge destroyed scroll bars + QMacStylePrivate::scrollBars.removeAll(QPointer()); + + QEvent event(QEvent::StyleChange); + for (const auto &o : QMacStylePrivate::scrollBars) + QCoreApplication::sendEvent(o, &event); + }); + +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + Q_D(QMacStyle); + // FIXME: Tie this logic into theme change, or even polish/unpolish + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) { + d->appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [this] { + Q_D(QMacStyle); + for (NSView *b : d->cocoaControls) + [b release]; + d->cocoaControls.clear(); + }); + } +#endif +} + +QMacStyle::~QMacStyle() +{ +} + +void QMacStyle::polish(QPalette &) +{ +} + +void QMacStyle::polish(QApplication *) +{ +} + +void QMacStyle::unpolish(QApplication *) +{ +} + +void QMacStyle::polish(QWidget* w) +{ + if (false +#if QT_CONFIG(menu) + || qobject_cast(w) +# if QT_CONFIG(combobox) + || qobject_cast(w) +# endif +#endif +#if QT_CONFIG(mdiarea) + || qobject_cast(w) +#endif + ) { + w->setAttribute(Qt::WA_TranslucentBackground, true); + w->setAutoFillBackground(false); + } + +#if QT_CONFIG(tabbar) + if (QTabBar *tb = qobject_cast(w)) { + if (tb->documentMode()) { + w->setAttribute(Qt::WA_Hover); + w->setFont(qt_app_fonts_hash()->value("QSmallFont", QFont())); + QPalette p = w->palette(); + p.setColor(QPalette::WindowText, QColor(17, 17, 17)); + w->setPalette(p); + w->setAttribute(Qt::WA_SetPalette, false); + w->setAttribute(Qt::WA_SetFont, false); + } + } +#endif + + QCommonStyle::polish(w); + + if (QRubberBand *rubber = qobject_cast(w)) { + rubber->setWindowOpacity(0.25); + rubber->setAttribute(Qt::WA_PaintOnScreen, false); + rubber->setAttribute(Qt::WA_NoSystemBackground, false); + } + + if (qobject_cast(w)) { + w->setAttribute(Qt::WA_OpaquePaintEvent, false); + w->setAttribute(Qt::WA_Hover, true); + w->setMouseTracking(true); + } +} + +void QMacStyle::unpolish(QWidget* w) +{ + if ( +#if QT_CONFIG(menu) + qobject_cast(w) && +#endif + !w->testAttribute(Qt::WA_SetPalette)) + { + w->setPalette(QPalette()); + w->setWindowOpacity(1.0); + } + +#if QT_CONFIG(combobox) + if (QComboBox *combo = qobject_cast(w)) { + if (!combo->isEditable()) { + if (QWidget *widget = combo->findChild()) + widget->setWindowOpacity(1.0); + } + } +#endif + +#if QT_CONFIG(tabbar) + if (qobject_cast(w)) { + if (!w->testAttribute(Qt::WA_SetFont)) + w->setFont(QFont()); + if (!w->testAttribute(Qt::WA_SetPalette)) + w->setPalette(QPalette()); + } +#endif + + if (QRubberBand *rubber = qobject_cast(w)) { + rubber->setWindowOpacity(1.0); + rubber->setAttribute(Qt::WA_PaintOnScreen, true); + rubber->setAttribute(Qt::WA_NoSystemBackground, true); + } + + if (QFocusFrame *frame = qobject_cast(w)) + frame->setAttribute(Qt::WA_NoSystemBackground, true); + + QCommonStyle::unpolish(w); + + if (qobject_cast(w)) { + w->setAttribute(Qt::WA_OpaquePaintEvent, true); + w->setAttribute(Qt::WA_Hover, false); + w->setMouseTracking(false); + } +} + +int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *widget) const +{ + Q_D(const QMacStyle); + const int controlSize = getControlSize(opt, widget); + int ret = 0; + + switch (metric) { +#if QT_CONFIG(tabbar) + case PM_TabCloseIndicatorWidth: + case PM_TabCloseIndicatorHeight: + ret = closeButtonSize; + break; +#endif + case PM_ToolBarIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize); + break; + case PM_FocusFrameVMargin: + case PM_FocusFrameHMargin: + ret = qt_mac_aqua_get_metric(FocusRectOutset); + break; + case PM_DialogButtonsSeparator: + ret = -5; + break; + case PM_DialogButtonsButtonHeight: { + QSize sz; + ret = d->aquaSizeConstrain(opt, 0, QStyle::CT_PushButton, QSize(-1, -1), &sz); + if (sz == QSize(-1, -1)) + ret = 32; + else + ret = sz.height(); + break; } + case PM_DialogButtonsButtonWidth: { + QSize sz; + ret = d->aquaSizeConstrain(opt, 0, QStyle::CT_PushButton, QSize(-1, -1), &sz); + if (sz == QSize(-1, -1)) + ret = 70; + else + ret = sz.width(); + break; } + + case PM_MenuBarHMargin: + ret = 8; + break; + + case PM_MenuBarVMargin: + ret = 0; + break; + + case PM_MenuBarPanelWidth: + ret = 0; + break; + + case PM_MenuButtonIndicator: + ret = toolButtonArrowSize; + break; + + case QStyle::PM_MenuDesktopFrameWidth: + ret = 5; + break; + + case PM_CheckBoxLabelSpacing: + case PM_RadioButtonLabelSpacing: + ret = [=] { + if (opt) { + if (opt->state & State_Mini) + return 4; + if (opt->state & State_Small) + return 3; + } + return 2; + } (); + break; + case PM_MenuScrollerHeight: + ret = 15; // I hate having magic numbers in here... + break; + case PM_DefaultFrameWidth: +#if QT_CONFIG(mainwindow) + if (widget && (widget->isWindow() || !widget->parentWidget() + || (qobject_cast(widget->parentWidget()) + && static_cast(widget->parentWidget())->centralWidget() == widget)) + && qobject_cast(widget)) + ret = 0; + else +#endif + // The combo box popup has no frame. + if (qstyleoption_cast(opt) != 0) + ret = 0; + else + ret = 1; + break; + case PM_MaximumDragDistance: + ret = -1; + break; + case PM_ScrollBarSliderMin: + ret = 24; + break; + case PM_SpinBoxFrameWidth: + ret = qt_mac_aqua_get_metric(EditTextFrameOutset); + break; + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + ret = 0; + break; + case PM_SliderLength: + ret = 17; + break; + // Returns the number of pixels to use for the business part of the + // slider (i.e., the non-tickmark portion). The remaining space is shared + // equally between the tickmark regions. + case PM_SliderControlThickness: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); + int ticks = sl->tickPosition; + int n = 0; + if (ticks & QSlider::TicksAbove) + ++n; + if (ticks & QSlider::TicksBelow) + ++n; + if (!n) { + ret = space; + break; + } + + int thick = 6; // Magic constant to get 5 + 16 + 5 + if (ticks != QSlider::TicksBothSides && ticks != QSlider::NoTicks) + thick += proxy()->pixelMetric(PM_SliderLength, sl, widget) / 4; + + space -= thick; + if (space > 0) + thick += (space * 2) / (n + 2); + ret = thick; + } else { + ret = 0; + } + break; + case PM_SmallIconSize: + ret = int(QStyleHelper::dpiScaled(16., opt)); + break; + + case PM_LargeIconSize: + ret = int(QStyleHelper::dpiScaled(32., opt)); + break; + + case PM_IconViewIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize, opt, widget); + break; + + case PM_ButtonDefaultIndicator: + ret = 0; + break; + case PM_TitleBarHeight: { + NSUInteger style = NSWindowStyleMaskTitled; + if (widget && ((widget->windowFlags() & Qt::Tool) == Qt::Tool)) + style |= NSWindowStyleMaskUtilityWindow; + ret = int([NSWindow frameRectForContentRect:NSZeroRect + styleMask:style].size.height); + break; } + case QStyle::PM_TabBarTabHSpace: + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeLarge: + ret = QCommonStyle::pixelMetric(metric, opt, widget); + break; + case QStyleHelper::SizeSmall: + ret = 20; + break; + case QStyleHelper::SizeMini: + ret = 16; + break; + case QStyleHelper::SizeDefault: +#if QT_CONFIG(tabbar) + const QStyleOptionTab *tb = qstyleoption_cast(opt); + if (tb && tb->documentMode) + ret = 30; + else +#endif + ret = QCommonStyle::pixelMetric(metric, opt, widget); + break; + } + break; + case PM_TabBarTabVSpace: + ret = 4; + break; + case PM_TabBarTabShiftHorizontal: + case PM_TabBarTabShiftVertical: + ret = 0; + break; + case PM_TabBarBaseHeight: + ret = 0; + break; + case PM_TabBarTabOverlap: + ret = 1; + break; + case PM_TabBarBaseOverlap: + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = 11; + break; + case QStyleHelper::SizeSmall: + ret = 8; + break; + case QStyleHelper::SizeMini: + ret = 7; + break; + } + break; + case PM_ScrollBarExtent: { + const QStyleHelper::WidgetSizePolicy size = d->effectiveAquaSizeConstrain(opt, widget); + ret = static_cast([NSScroller + scrollerWidthForControlSize:static_cast(size) + scrollerStyle:[NSScroller preferredScrollerStyle]]); + break; } + case PM_IndicatorHeight: { + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(CheckBoxHeight); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniCheckBoxHeight); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallCheckBoxHeight); + break; + } + break; } + case PM_IndicatorWidth: { + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(CheckBoxWidth); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniCheckBoxWidth); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallCheckBoxWidth); + break; + } + ++ret; + break; } + case PM_ExclusiveIndicatorHeight: { + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(RadioButtonHeight); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniRadioButtonHeight); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallRadioButtonHeight); + break; + } + break; } + case PM_ExclusiveIndicatorWidth: { + switch (d->aquaSizeConstrain(opt, widget)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(RadioButtonWidth); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniRadioButtonWidth); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallRadioButtonWidth); + break; + } + ++ret; + break; } + case PM_MenuVMargin: + ret = 4; + break; + case PM_MenuPanelWidth: + ret = 0; + break; + case PM_ToolTipLabelFrameWidth: + ret = 0; + break; + case PM_SizeGripSize: { + QStyleHelper::WidgetSizePolicy aSize; + if (widget && widget->window()->windowType() == Qt::Tool) + aSize = QStyleHelper::SizeSmall; + else + aSize = QStyleHelper::SizeLarge; + const QSize size = qt_aqua_get_known_size(CT_SizeGrip, widget, QSize(), aSize); + ret = size.width(); + break; } + case PM_MdiSubWindowFrameWidth: + ret = 1; + break; + case PM_DockWidgetFrameWidth: + ret = 0; + break; + case PM_DockWidgetTitleMargin: + ret = 0; + break; + case PM_DockWidgetSeparatorExtent: + ret = 1; + break; + case PM_ToolBarHandleExtent: + ret = 11; + break; + case PM_ToolBarItemMargin: + ret = 0; + break; + case PM_ToolBarItemSpacing: + ret = 4; + break; + case PM_SplitterWidth: + ret = qMax(7, QApplication::globalStrut().width()); + break; + case PM_LayoutLeftMargin: + case PM_LayoutTopMargin: + case PM_LayoutRightMargin: + case PM_LayoutBottomMargin: + { + bool isWindow = false; + if (opt) { + isWindow = (opt->state & State_Window); + } else if (widget) { + isWindow = widget->isWindow(); + } + + if (isWindow) { + /* + AHIG would have (20, 8, 10) here but that makes + no sense. It would also have 14 for the top margin + but this contradicts both Builder and most + applications. + */ + return_SIZE(20, 10, 10); // AHIG + } else { + // hack to detect QTabWidget + if (widget && widget->parentWidget() + && widget->parentWidget()->sizePolicy().controlType() == QSizePolicy::TabWidget) { + if (metric == PM_LayoutTopMargin) { + /* + Builder would have 14 (= 20 - 6) instead of 12, + but that makes the tab look disproportionate. + */ + return_SIZE(12, 6, 6); // guess + } else { + return_SIZE(20 /* Builder */, 8 /* guess */, 8 /* guess */); + } + } else { + /* + Child margins are highly inconsistent in AHIG and Builder. + */ + return_SIZE(12, 8, 6); // guess + } + } + } + case PM_LayoutHorizontalSpacing: + case PM_LayoutVerticalSpacing: + return -1; + case PM_MenuHMargin: + ret = 0; + break; + case PM_ToolBarExtensionExtent: + ret = 21; + break; + case PM_ToolBarFrameWidth: + ret = 1; + break; + case PM_ScrollView_ScrollBarOverlap: + ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay ? + pixelMetric(PM_ScrollBarExtent, opt, widget) : 0; + break; + default: + ret = QCommonStyle::pixelMetric(metric, opt, widget); + break; + } + return ret; +} + +QPalette QMacStyle::standardPalette() const +{ + auto platformTheme = QGuiApplicationPrivate::platformTheme(); + auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames); + if (styleNames.toStringList().contains("macintosh")) + return QPalette(); // Inherit everything from theme + else + return QStyle::standardPalette(); +} + +int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w, + QStyleHintReturn *hret) const +{ + QMacAutoReleasePool pool; + + int ret = 0; + switch (sh) { + case SH_Slider_SnapToValue: + case SH_PrintDialog_RightAlignButtons: + case SH_FontDialog_SelectAssociatedText: + case SH_MenuBar_MouseTracking: + case SH_Menu_MouseTracking: + case SH_ComboBox_ListMouseTracking: + case SH_MainWindow_SpaceBelowMenuBar: + case SH_ItemView_ChangeHighlightOnFocus: + ret = 1; + break; + case SH_ToolBox_SelectedPageTitleBold: + ret = 0; + break; + case SH_DialogButtonBox_ButtonsHaveIcons: + ret = 0; + break; + case SH_Menu_SelectionWrap: + ret = false; + break; + case SH_Menu_KeyboardSearch: + ret = true; + break; + case SH_Menu_SpaceActivatesItem: + ret = true; + break; + case SH_Slider_AbsoluteSetButtons: + ret = Qt::LeftButton|Qt::MiddleButton; + break; + case SH_Slider_PageSetButtons: + ret = 0; + break; + case SH_ScrollBar_ContextMenu: + ret = false; + break; + case SH_TitleBar_AutoRaise: + ret = true; + break; + case SH_Menu_AllowActiveAndDisabled: + ret = false; + break; + case SH_Menu_SubMenuPopupDelay: + ret = 100; + break; + case SH_Menu_SubMenuUniDirection: + ret = true; + break; + case SH_Menu_SubMenuSloppySelectOtherActions: + ret = false; + break; + case SH_Menu_SubMenuResetWhenReenteringParent: + ret = true; + break; + case SH_Menu_SubMenuDontStartSloppyOnLeave: + ret = true; + break; + + case SH_ScrollBar_LeftClickAbsolutePosition: { + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; + bool result = [defaults boolForKey:@"AppleScrollerPagingBehavior"]; + if(QApplication::keyboardModifiers() & Qt::AltModifier) + ret = !result; + else + ret = result; + break; } + case SH_TabBar_PreferNoArrows: + ret = true; + break; + /* + case SH_DialogButtons_DefaultButton: + ret = QDialogButtons::Reject; + break; + */ + case SH_GroupBox_TextLabelVerticalAlignment: + ret = Qt::AlignTop; + break; + case SH_ScrollView_FrameOnlyAroundContents: + ret = QCommonStyle::styleHint(sh, opt, w, hret); + break; + case SH_Menu_FillScreenWithScroll: + ret = false; + break; + case SH_Menu_Scrollable: + ret = true; + break; + case SH_RichText_FullWidthSelection: + ret = true; + break; + case SH_BlinkCursorWhenTextSelected: + ret = false; + break; + case SH_ScrollBar_StopMouseOverSlider: + ret = true; + break; + case SH_ListViewExpand_SelectMouseType: + ret = QEvent::MouseButtonRelease; + break; + case SH_TabBar_SelectMouseType: +#if QT_CONFIG(tabbar) + if (const QStyleOptionTabBarBase *opt2 = qstyleoption_cast(opt)) { + ret = opt2->documentMode ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + } else +#endif + { + ret = QEvent::MouseButtonRelease; + } + break; + case SH_ComboBox_Popup: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) + ret = !cmb->editable; + else + ret = 0; + break; + case SH_Workspace_FillSpaceOnMaximize: + ret = true; + break; + case SH_Widget_ShareActivation: + ret = true; + break; + case SH_Header_ArrowAlignment: + ret = Qt::AlignRight; + break; + case SH_TabBar_Alignment: { +#if QT_CONFIG(tabwidget) + if (const QTabWidget *tab = qobject_cast(w)) { + if (tab->documentMode()) { + ret = Qt::AlignLeft; + break; + } + } +#endif +#if QT_CONFIG(tabbar) + if (const QTabBar *tab = qobject_cast(w)) { + if (tab->documentMode()) { + ret = Qt::AlignLeft; + break; + } + } +#endif + ret = Qt::AlignCenter; + } break; + case SH_UnderlineShortcut: + ret = false; + break; + case SH_ToolTipLabel_Opacity: + ret = 242; // About 95% + break; + case SH_Button_FocusPolicy: + ret = Qt::TabFocus; + break; + case SH_EtchDisabledText: + ret = false; + break; + case SH_FocusFrame_Mask: { + ret = true; + if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { + const uchar fillR = 192, fillG = 191, fillB = 190; + QImage img; + + QSize pixmapSize = opt->rect.size(); + if (!pixmapSize.isEmpty()) { + QPixmap pix(pixmapSize); + pix.fill(QColor(fillR, fillG, fillB)); + QPainter pix_paint(&pix); + proxy()->drawControl(CE_FocusFrame, opt, &pix_paint, w); + pix_paint.end(); + img = pix.toImage(); + } + + const QRgb *sptr = (QRgb*)img.bits(), *srow; + const int sbpl = img.bytesPerLine(); + const int w = sbpl/4, h = img.height(); + + QImage img_mask(img.width(), img.height(), QImage::Format_ARGB32); + QRgb *dptr = (QRgb*)img_mask.bits(), *drow; + const int dbpl = img_mask.bytesPerLine(); + + for (int y = 0; y < h; ++y) { + srow = sptr+((y*sbpl)/4); + drow = dptr+((y*dbpl)/4); + for (int x = 0; x < w; ++x) { + const int redDiff = qRed(*srow) - fillR; + const int greenDiff = qGreen(*srow) - fillG; + const int blueDiff = qBlue(*srow) - fillB; + const int diff = (redDiff * redDiff) + (greenDiff * greenDiff) + (blueDiff * blueDiff); + (*drow++) = (diff < 10) ? 0xffffffff : 0xff000000; + ++srow; + } + } + QBitmap qmask = QBitmap::fromImage(img_mask); + mask->region = QRegion(qmask); + } + break; } + case SH_TitleBar_NoBorder: + ret = 1; + break; + case SH_RubberBand_Mask: + ret = 0; + break; + case SH_ComboBox_LayoutDirection: + ret = Qt::LeftToRight; + break; + case SH_ItemView_EllipsisLocation: + ret = Qt::AlignHCenter; + break; + case SH_ItemView_ShowDecorationSelected: + ret = true; + break; + case SH_TitleBar_ModifyNotification: + ret = false; + break; + case SH_ScrollBar_RollBetweenButtons: + ret = true; + break; + case SH_WindowFrame_Mask: + ret = false; + break; + case SH_TabBar_ElideMode: + ret = Qt::ElideRight; + break; +#if QT_CONFIG(dialogbuttonbox) + case SH_DialogButtonLayout: + ret = QDialogButtonBox::MacLayout; + break; +#endif + case SH_FormLayoutWrapPolicy: + ret = QFormLayout::DontWrapRows; + break; + case SH_FormLayoutFieldGrowthPolicy: + ret = QFormLayout::FieldsStayAtSizeHint; + break; + case SH_FormLayoutFormAlignment: + ret = Qt::AlignHCenter | Qt::AlignTop; + break; + case SH_FormLayoutLabelAlignment: + ret = Qt::AlignRight; + break; + case SH_ComboBox_PopupFrameStyle: + ret = QFrame::NoFrame; + break; + case SH_MessageBox_TextInteractionFlags: + ret = Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard; + break; + case SH_SpellCheckUnderlineStyle: + ret = QTextCharFormat::DashUnderline; + break; + case SH_MessageBox_CenterButtons: + ret = false; + break; + case SH_MenuBar_AltKeyNavigation: + ret = false; + break; + case SH_ItemView_MovementWithoutUpdatingSelection: + ret = false; + break; + case SH_FocusFrame_AboveWidget: + ret = true; + break; +#if QT_CONFIG(wizard) + case SH_WizardStyle: + ret = QWizard::MacStyle; + break; +#endif + case SH_ItemView_ArrowKeysNavigateIntoChildren: + ret = false; + break; + case SH_Menu_FlashTriggeredItem: + ret = true; + break; + case SH_Menu_FadeOutOnHide: + ret = true; + break; + case SH_ItemView_PaintAlternatingRowColorsForEmptyArea: + ret = true; + break; +#if QT_CONFIG(tabbar) + case SH_TabBar_CloseButtonPosition: + ret = QTabBar::LeftSide; + break; +#endif + case SH_DockWidget_ButtonsHaveFrame: + ret = false; + break; + case SH_ScrollBar_Transient: + if ((qobject_cast(w) && w->parent() && + qobject_cast(w->parent()->parent())) +#ifndef QT_NO_ACCESSIBILITY + || (opt && QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ScrollBar)) +#endif + ) { + ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay; + } + break; +#if QT_CONFIG(itemviews) + case SH_ItemView_ScrollMode: + ret = QAbstractItemView::ScrollPerPixel; + break; +#endif + case SH_TitleBar_ShowToolTipsOnButtons: + // min/max/close buttons on windows don't show tool tips + ret = false; + break; + case SH_ComboBox_AllowWheelScrolling: + ret = false; + break; + case SH_SpinBox_ButtonsInsideFrame: + ret = false; + break; + case SH_Table_GridLineColor: + ret = int(qt_mac_toQColor(NSColor.gridColor).rgba()); + break; + default: + ret = QCommonStyle::styleHint(sh, opt, w, hret); + break; + } + return ret; +} + +QPixmap QMacStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, + const QStyleOption *opt) const +{ + switch (iconMode) { + case QIcon::Disabled: { + QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + int imgh = img.height(); + int imgw = img.width(); + QRgb pixel; + for (int y = 0; y < imgh; ++y) { + for (int x = 0; x < imgw; ++x) { + pixel = img.pixel(x, y); + img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), + qAlpha(pixel) / 2)); + } + } + return QPixmap::fromImage(img); + } + default: + ; + } + return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt); +} + + +QPixmap QMacStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, + const QWidget *widget) const +{ + // The default implementation of QStyle::standardIconImplementation() is to call standardPixmap() + // I don't want infinite recursion so if we do get in that situation, just return the Window's + // standard pixmap instead (since there is no mac-specific icon then). This should be fine until + // someone changes how Windows standard + // pixmap works. + static bool recursionGuard = false; + + if (recursionGuard) + return QCommonStyle::standardPixmap(standardPixmap, opt, widget); + + recursionGuard = true; + QIcon icon = proxy()->standardIcon(standardPixmap, opt, widget); + recursionGuard = false; + int size; + switch (standardPixmap) { + default: + size = 32; + break; + case SP_MessageBoxCritical: + case SP_MessageBoxQuestion: + case SP_MessageBoxInformation: + case SP_MessageBoxWarning: + size = 64; + break; + } + return icon.pixmap(qt_getWindow(widget), QSize(size, size)); +} + +void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, + const QWidget *w) const +{ + Q_D(const QMacStyle); + const AppearanceSync appSync; + QMacCGContext cg(p); + QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr; + d->resolveCurrentNSView(window); + switch (pe) { + case PE_IndicatorArrowUp: + case PE_IndicatorArrowDown: + case PE_IndicatorArrowRight: + case PE_IndicatorArrowLeft: { + p->save(); + p->setRenderHint(QPainter::Antialiasing); + const int xOffset = 1; // FIXME: opt->direction == Qt::LeftToRight ? 2 : -1; + qreal halfSize = 0.5 * qMin(opt->rect.width(), opt->rect.height()); + const qreal penWidth = qMax(halfSize / 3.0, 1.25); +#if QT_CONFIG(toolbutton) + if (const QToolButton *tb = qobject_cast(w)) { + // When stroking the arrow, make sure it fits in the tool button + if (tb->arrowType() != Qt::NoArrow + || tb->popupMode() == QToolButton::MenuButtonPopup) + halfSize -= penWidth; + } +#endif + + QTransform transform; + transform.translate(opt->rect.center().x() + xOffset, opt->rect.center().y() + 2); + QPainterPath path; + switch(pe) { + default: + case PE_IndicatorArrowDown: + break; + case PE_IndicatorArrowUp: + transform.rotate(180); + break; + case PE_IndicatorArrowLeft: + transform.rotate(90); + break; + case PE_IndicatorArrowRight: + transform.rotate(-90); + break; + } + p->setTransform(transform); + + path.moveTo(-halfSize, -halfSize * 0.5); + path.lineTo(0.0, halfSize * 0.5); + path.lineTo(halfSize, -halfSize * 0.5); + + const QPen arrowPen(opt->palette.text(), penWidth, + Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + p->strokePath(path, arrowPen); + p->restore(); + break; } +#if QT_CONFIG(tabbar) + case PE_FrameTabBarBase: + if (const QStyleOptionTabBarBase *tbb + = qstyleoption_cast(opt)) { + if (tbb->documentMode) { + p->save(); + drawTabBase(p, tbb, w); + p->restore(); + return; + } +#if QT_CONFIG(tabwidget) + QRegion region(tbb->rect); + region -= tbb->tabBarRect; + p->save(); + p->setClipRegion(region); + QStyleOptionTabWidgetFrame twf; + twf.QStyleOption::operator=(*tbb); + twf.shape = tbb->shape; + switch (QMacStylePrivate::tabDirection(twf.shape)) { + case QMacStylePrivate::North: + twf.rect = twf.rect.adjusted(0, 0, 0, 10); + break; + case QMacStylePrivate::South: + twf.rect = twf.rect.adjusted(0, -10, 0, 0); + break; + case QMacStylePrivate::West: + twf.rect = twf.rect.adjusted(0, 0, 10, 0); + break; + case QMacStylePrivate::East: + twf.rect = twf.rect.adjusted(0, -10, 0, 0); + break; + } + proxy()->drawPrimitive(PE_FrameTabWidget, &twf, p, w); + p->restore(); +#endif + } + break; +#endif + case PE_PanelTipLabel: + p->fillRect(opt->rect, opt->palette.brush(QPalette::ToolTipBase)); + break; + case PE_FrameGroupBox: + if (const auto *groupBox = qstyleoption_cast(opt)) + if (groupBox->features & QStyleOptionFrame::Flat) { + QCommonStyle::drawPrimitive(pe, groupBox, p, w); + break; + } +#if QT_CONFIG(tabwidget) + Q_FALLTHROUGH(); + case PE_FrameTabWidget: +#endif + { + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Box, QStyleHelper::SizeLarge); + auto *box = static_cast(d->cocoaControl(cw)); + // FIXME Since macOS 10.14, simply calling drawRect: won't display anything anymore. + // The AppKit team is aware of this and has proposed a couple of solutions. + // The first solution was to call displayRectIgnoringOpacity:inContext: instead. + // However, it doesn't seem to work on 10.13. More importantly, dark mode on 10.14 + // is extremely slow. Light mode works fine. + // The second solution is to subclass NSBox and reimplement a trivial drawRect: which + // would only call super. This works without any issue on 10.13, but a double border + // shows on 10.14 in both light and dark modes. + // The code below picks what works on each version and mode. On 10.13 and earlier, we + // simply call drawRect: on a regular NSBox. On 10.14, we call displayRectIgnoringOpacity: + // inContext:, but only in light mode. In dark mode, we use a custom NSBox subclass, + // QDarkNSBox, of type NSBoxCustom. Its appearance is close enough to the real thing so + // we can use this for now. + auto adjustedRect = opt->rect; + bool needTranslation = false; + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave + && !qt_mac_applicationIsInDarkMode()) { + // In Aqua theme we have to use the 'default' NSBox (as opposite + // to the 'custom' QDarkNSBox we use in dark theme). Since -drawRect: + // does nothing in default NSBox, we call -displayRectIgnoringOpaticty:. + // Unfortunately, the resulting box is smaller then the actual rect we + // wanted. This can be seen, e.g. because tabs (buttons) are misaligned + // vertically and even worse, if QTabWidget has autoFillBackground + // set, this background overpaints NSBox making it to disappear. + // We trick our NSBox to render in a larger rectangle, so that + // the actuall result (which is again smaller than requested), + // more or less is what we really want. We'll have to adjust CTM + // and translate accordingly. + adjustedRect.adjust(0, 0, 6, 6); + needTranslation = true; + } + d->drawNSViewInRect(box, adjustedRect, p, ^(CGContextRef ctx, const CGRect &rect) { +#if QT_CONFIG(tabwidget) + if (QTabWidget *tabWidget = qobject_cast(opt->styleObject)) + clipTabBarFrame(opt, this, ctx); +#endif + CGContextTranslateCTM(ctx, 0, rect.origin.y + rect.size.height); + CGContextScaleCTM(ctx, 1, -1); + if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSMojave + || [box isMemberOfClass:QDarkNSBox.class]) { + [box drawRect:rect]; + } else { + if (needTranslation) + CGContextTranslateCTM(ctx, -3.0, 5.0); + [box displayRectIgnoringOpacity:box.bounds inContext:NSGraphicsContext.currentContext]; + } + }); + break; + } + case PE_IndicatorToolBarSeparator: { + QPainterPath path; + if (opt->state & State_Horizontal) { + int xpoint = opt->rect.center().x(); + path.moveTo(xpoint + 0.5, opt->rect.top() + 1); + path.lineTo(xpoint + 0.5, opt->rect.bottom()); + } else { + int ypoint = opt->rect.center().y(); + path.moveTo(opt->rect.left() + 2 , ypoint + 0.5); + path.lineTo(opt->rect.right() + 1, ypoint + 0.5); + } + QPainterPathStroker theStroker; + theStroker.setCapStyle(Qt::FlatCap); + theStroker.setDashPattern(QVector() << 1 << 2); + path = theStroker.createStroke(path); + const auto dark = qt_mac_applicationIsInDarkMode() ? opt->palette.dark().color().darker() + : QColor(0, 0, 0, 119); + p->fillPath(path, dark); + } + break; + case PE_FrameWindow: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (w && w->inherits("QMdiSubWindow")) { + p->save(); + p->setPen(QPen(frame->palette.dark().color(), frame->lineWidth)); + p->setBrush(frame->palette.window()); + p->drawRect(frame->rect); + p->restore(); + } + } + break; + case PE_IndicatorDockWidgetResizeHandle: { + // The docwidget resize handle is drawn as a one-pixel wide line. + p->save(); + if (opt->state & State_Horizontal) { + p->setPen(QColor(160, 160, 160)); + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + } else { + p->setPen(QColor(145, 145, 145)); + p->drawLine(opt->rect.topRight(), opt->rect.bottomRight()); + } + p->restore(); + } break; + case PE_IndicatorToolBarHandle: { + p->save(); + QPainterPath path; + int x = opt->rect.x() + 6; + int y = opt->rect.y() + 7; + static const int RectHeight = 2; + if (opt->state & State_Horizontal) { + while (y < opt->rect.height() - RectHeight - 5) { + path.moveTo(x, y); + path.addEllipse(x, y, RectHeight, RectHeight); + y += 6; + } + } else { + while (x < opt->rect.width() - RectHeight - 5) { + path.moveTo(x, y); + path.addEllipse(x, y, RectHeight, RectHeight); + x += 6; + } + } + p->setPen(Qt::NoPen); + QColor dark = opt->palette.dark().color().darker(); + dark.setAlphaF(0.50); + p->fillPath(path, dark); + p->restore(); + + break; + } + case PE_IndicatorHeaderArrow: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // In HITheme, up is down, down is up and hamburgers eat people. + if (header->sortIndicator != QStyleOptionHeader::None) + proxy()->drawPrimitive( + (header->sortIndicator == QStyleOptionHeader::SortDown) ? + PE_IndicatorArrowUp : PE_IndicatorArrowDown, header, p, w); + } + break; + case PE_IndicatorMenuCheckMark: { + QColor pc; + if (opt->state & State_On) + pc = opt->palette.highlightedText().color(); + else + pc = opt->palette.text().color(); + + QCFType checkmarkColor = CGColorCreateGenericRGB(static_cast(pc.redF()), + static_cast(pc.greenF()), + static_cast(pc.blueF()), + static_cast(pc.alphaF())); + // kCTFontUIFontSystem and others give the same result + // as kCTFontUIFontMenuItemMark. However, the latter is + // more reminiscent to HITheme's kThemeMenuItemMarkFont. + // See also the font for small- and mini-sized widgets, + // where we end up using the generic system font type. + const CTFontUIFontType fontType = (opt->state & State_Mini) ? kCTFontUIFontMiniSystem : + (opt->state & State_Small) ? kCTFontUIFontSmallSystem : + kCTFontUIFontMenuItemMark; + // Similarly for the font size, where there is a small difference + // between regular combobox and item view items, and and menu items. + // However, we ignore any difference for small- and mini-sized widgets. + const CGFloat fontSize = fontType == kCTFontUIFontMenuItemMark ? opt->fontMetrics.height() : 0.0; + QCFType checkmarkFont = CTFontCreateUIFontForLanguage(fontType, fontSize, NULL); + + CGContextSaveGState(cg); + CGContextSetShouldSmoothFonts(cg, NO); // Same as HITheme and Cocoa menu checkmarks + + // Baseline alignment tweaks for QComboBox and QMenu + const CGFloat vOffset = (opt->state & State_Mini) ? 0.0 : + (opt->state & State_Small) ? 1.0 : + 0.75; + + CGContextTranslateCTM(cg, 0, opt->rect.bottom()); + CGContextScaleCTM(cg, 1, -1); + // Translate back to the original position and add rect origin and offset + CGContextTranslateCTM(cg, opt->rect.x(), vOffset); + + // CTFont has severe difficulties finding the checkmark character among its + // glyphs. Fortunately, CTLine knows its ways inside the Cocoa labyrinth. + static const CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName }; + static const int numValues = sizeof(keys) / sizeof(keys[0]); + const CFTypeRef values[] = { (CFTypeRef)checkmarkFont, (CFTypeRef)checkmarkColor }; + Q_STATIC_ASSERT((sizeof(values) / sizeof(values[0])) == numValues); + QCFType attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, + numValues, NULL, NULL); + // U+2713: CHECK MARK + QCFType checkmarkString = CFAttributedStringCreate(kCFAllocatorDefault, (CFStringRef)@"\u2713", attributes); + QCFType line = CTLineCreateWithAttributedString(checkmarkString); + + CTLineDraw((CTLineRef)line, cg); + CGContextFlush(cg); // CTLineDraw's documentation says it doesn't flush + + CGContextRestoreGState(cg); + break; } + case PE_IndicatorViewItemCheck: + case PE_IndicatorRadioButton: + case PE_IndicatorCheckBox: { + const bool isEnabled = opt->state & State_Enabled; + const bool isPressed = opt->state & State_Sunken; + const bool isRadioButton = (pe == PE_IndicatorRadioButton); + const auto ct = isRadioButton ? QMacStylePrivate::Button_RadioButton : QMacStylePrivate::Button_CheckBox; + const auto cs = d->effectiveAquaSizeConstrain(opt, w); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *tb = static_cast(d->cocoaControl(cw)); + tb.enabled = isEnabled; + tb.state = (opt->state & State_NoChange) ? NSMixedState : + (opt->state & State_On) ? NSOnState : NSOffState; + [tb highlight:isPressed]; + const auto vOffset = [=] { + // As measured + if (cs == QStyleHelper::SizeMini) + return ct == QMacStylePrivate::Button_CheckBox ? -0.5 : 0.5; + + return cs == QStyleHelper::SizeSmall ? 0.5 : 0.0; + } (); + d->drawNSViewInRect(tb, opt->rect, p, ^(CGContextRef ctx, const CGRect &rect) { + CGContextTranslateCTM(ctx, 0, vOffset); + [tb.cell drawInteriorWithFrame:rect inView:tb]; + }); + break; } + case PE_FrameFocusRect: + // Use the our own focus widget stuff. + break; + case PE_IndicatorBranch: { + if (!(opt->state & State_Children)) + break; + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Button_Disclosure, QStyleHelper::SizeLarge); + NSButtonCell *triangleCell = static_cast(d->cocoaCell(cw)); + [triangleCell setState:(opt->state & State_Open) ? NSOnState : NSOffState]; + bool viewHasFocus = (w && w->hasFocus()) || (opt->state & State_HasFocus); + [triangleCell setBackgroundStyle:((opt->state & State_Selected) && viewHasFocus) ? NSBackgroundStyleDark : NSBackgroundStyleLight]; + + d->setupNSGraphicsContext(cg, NO); + + QRect qtRect = opt->rect.adjusted(DisclosureOffset, 0, -DisclosureOffset, 0); + CGRect rect = CGRectMake(qtRect.x() + 1, qtRect.y(), qtRect.width(), qtRect.height()); + CGContextTranslateCTM(cg, rect.origin.x, rect.origin.y + rect.size.height); + CGContextScaleCTM(cg, 1, -1); + CGContextTranslateCTM(cg, -rect.origin.x, -rect.origin.y); + + [triangleCell drawBezelWithFrame:NSRectFromCGRect(rect) inView:[triangleCell controlView]]; + + d->restoreNSGraphicsContext(cg); + break; } + + case PE_Frame: { + QPen oldPen = p->pen(); + p->setPen(opt->palette.base().color().darker(140)); + p->drawRect(opt->rect.adjusted(0, 0, -1, -1)); + p->setPen(opt->palette.base().color().darker(180)); + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + p->setPen(oldPen); + break; } + + case PE_FrameLineEdit: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (frame->state & State_Sunken) { + const bool isEnabled = opt->state & State_Enabled; + const bool isReadOnly = opt->state & State_ReadOnly; + const bool isRounded = frame->features & QStyleOptionFrame::Rounded; + const auto cs = d->effectiveAquaSizeConstrain(opt, w, CT_LineEdit); + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::TextField, cs); + auto *tf = static_cast(d->cocoaControl(cw)); + tf.enabled = isEnabled; + tf.editable = !isReadOnly; + tf.bezeled = YES; + static_cast(tf.cell).bezelStyle = isRounded ? NSTextFieldRoundedBezel : NSTextFieldSquareBezel; + tf.frame = opt->rect.toCGRect(); + d->drawNSViewInRect(tf, opt->rect, p, ^(CGContextRef, const CGRect &rect) { + if (!qt_mac_applicationIsInDarkMode()) { + // In 'Dark' mode controls are transparent, so we do not + // over-paint the (potentially custom) color in the background. + // In 'Light' mode we have to care about the correct + // background color. See the comments below for PE_PanelLineEdit. + CGContextRef cgContext = NSGraphicsContext.currentContext.CGContext; + // See QMacCGContext, here we expect bitmap context created with + // color space 'kCGColorSpaceSRGB', if it's something else - we + // give up. + if (cgContext ? bool(CGBitmapContextGetColorSpace(cgContext)) : false) { + tf.drawsBackground = YES; + const QColor bgColor = frame->palette.brush(QPalette::Base).color(); + tf.backgroundColor = [NSColor colorWithSRGBRed:bgColor.redF() + green:bgColor.greenF() + blue:bgColor.blueF() + alpha:bgColor.alphaF()]; + if (bgColor.alpha() != 255) { + // No way we can have it bezeled and transparent ... + tf.bordered = YES; + } + } + } + + [tf.cell drawWithFrame:rect inView:tf]; + }); + } else { + QCommonStyle::drawPrimitive(pe, opt, p, w); + } + } + break; + case PE_PanelLineEdit: + { + const QStyleOptionFrame *panel = qstyleoption_cast(opt); + if (qt_mac_applicationIsInDarkMode() || (panel && panel->lineWidth <= 0)) { + // QCommonStyle::drawPrimitive(PE_PanelLineEdit) fill the background with + // a proper color, defined in opt->palette and then, if lineWidth > 0, it + // calls QMacStyle::drawPrimitive(PE_FrameLineEdit). We use NSTextFieldCell + // to handle PE_FrameLineEdit, which will use system-default background. + // In 'Dark' mode it's transparent and thus it's not over-painted. + QCommonStyle::drawPrimitive(pe, opt, p, w); + } else { + // In 'Light' mode, if panel->lineWidth > 0, we have to use the correct + // background color when drawing PE_FrameLineEdit, so let's call it + // directly and set the proper color there. + drawPrimitive(PE_FrameLineEdit, opt, p, w); + } + + // Draw the focus frame for widgets other than QLineEdit (e.g. for line edits in Webkit). + // Focus frame is drawn outside the rectangle passed in the option-rect. + if (panel) { +#if QT_CONFIG(lineedit) + if ((opt->state & State_HasFocus) && !qobject_cast(w)) { + int vmargin = pixelMetric(QStyle::PM_FocusFrameVMargin); + int hmargin = pixelMetric(QStyle::PM_FocusFrameHMargin); + QStyleOptionFrame focusFrame = *panel; + focusFrame.rect = panel->rect.adjusted(-hmargin, -vmargin, hmargin, vmargin); + drawControl(CE_FocusFrame, &focusFrame, p, w); + } +#endif + } + } + break; + case PE_PanelScrollAreaCorner: { + const QBrush brush(opt->palette.brush(QPalette::Base)); + p->fillRect(opt->rect, brush); + p->setPen(QPen(QColor(217, 217, 217))); + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); + } break; + case PE_FrameStatusBarItem: + break; +#if QT_CONFIG(tabbar) + case PE_IndicatorTabClose: { + // Make close button visible only on the hovered tab. + QTabBar *tabBar = qobject_cast(w->parentWidget()); + const QWidget *closeBtn = w; + if (!tabBar) { + // QStyleSheetStyle instead of CloseButton (which has + // a QTabBar as a parent widget) uses the QTabBar itself: + tabBar = qobject_cast(const_cast(w)); + closeBtn = decltype(closeBtn)(property("_q_styleSheetRealCloseButton").value()); + } + if (tabBar) { + const bool documentMode = tabBar->documentMode(); + const QTabBarPrivate *tabBarPrivate = static_cast(QObjectPrivate::get(tabBar)); + const int hoveredTabIndex = tabBarPrivate->hoveredTabIndex(); + if (!documentMode || + (hoveredTabIndex != -1 && ((closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::LeftSide)) || + (closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::RightSide))))) { + const bool hover = (opt->state & State_MouseOver); + const bool selected = (opt->state & State_Selected); + const bool pressed = (opt->state & State_Sunken); + drawTabCloseButton(p, hover, selected, pressed, documentMode); + } + } + } break; +#endif // QT_CONFIG(tabbar) + case PE_PanelStatusBar: { + // Fill the status bar with the titlebar gradient. + QLinearGradient linearGrad; + if (w ? qt_macWindowMainWindow(w->window()) : (opt->state & QStyle::State_Active)) { + linearGrad = titlebarGradientActive(); + } else { + linearGrad = titlebarGradientInactive(); + } + + linearGrad.setStart(0, opt->rect.top()); + linearGrad.setFinalStop(0, opt->rect.bottom()); + p->fillRect(opt->rect, linearGrad); + + // Draw the black separator line at the top of the status bar. + if (w ? qt_macWindowMainWindow(w->window()) : (opt->state & QStyle::State_Active)) + p->setPen(titlebarSeparatorLineActive); + else + p->setPen(titlebarSeparatorLineInactive); + p->drawLine(opt->rect.left(), opt->rect.top(), opt->rect.right(), opt->rect.top()); + + break; + } + case PE_PanelMenu: { + p->save(); + p->fillRect(opt->rect, Qt::transparent); + p->setPen(Qt::transparent); + p->setBrush(opt->palette.window()); + p->setRenderHint(QPainter::Antialiasing, true); + const QPainterPath path = d->windowPanelPath(opt->rect); + p->drawPath(path); + p->restore(); + } break; + + default: + QCommonStyle::drawPrimitive(pe, opt, p, w); + break; + } +} + +static QPixmap darkenPixmap(const QPixmap &pixmap) +{ + QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + int imgh = img.height(); + int imgw = img.width(); + int h, s, v, a; + QRgb pixel; + for (int y = 0; y < imgh; ++y) { + for (int x = 0; x < imgw; ++x) { + pixel = img.pixel(x, y); + a = qAlpha(pixel); + QColor hsvColor(pixel); + hsvColor.getHsv(&h, &s, &v); + s = qMin(100, s * 2); + v = v / 2; + hsvColor.setHsv(h, s, v); + pixel = hsvColor.rgb(); + img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), a)); + } + } + return QPixmap::fromImage(img); +} + +void QMacStylePrivate::setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const +{ + if (vertical) { + CGContextTranslateCTM(cg, rect.size.height, 0); + CGContextRotateCTM(cg, M_PI_2); + } + if (vertical != reverse) { + CGContextTranslateCTM(cg, rect.size.width, 0); + CGContextScaleCTM(cg, -1, 1); + } +} + +void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p, + const QWidget *w) const +{ + Q_D(const QMacStyle); + const AppearanceSync sync; + const QMacAutoReleasePool pool; + QMacCGContext cg(p); + QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr; + d->resolveCurrentNSView(window); + switch (ce) { + case CE_HeaderSection: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + State flags = header->state; + QRect ir = header->rect; + + +#if 0 // FIXME: What's this solving exactly? + bool noVerticalHeader = true; +#if QT_CONFIG(tableview) + if (w) + if (const QTableView *table = qobject_cast(w->parentWidget())) + noVerticalHeader = !table->verticalHeader()->isVisible(); +#endif + + const bool drawLeftBorder = header->orientation == Qt::Vertical + || header->position == QStyleOptionHeader::OnlyOneSection + || (header->position == QStyleOptionHeader::Beginning && noVerticalHeader); +#endif + + const bool pressed = (flags & State_Sunken) && !(flags & State_On); + p->fillRect(ir, pressed ? header->palette.dark() : header->palette.button()); + p->setPen(QPen(header->palette.dark(), 1.0)); + if (header->orientation == Qt::Horizontal) + p->drawLine(QLineF(ir.right() + 0.5, ir.top() + headerSectionSeparatorInset, + ir.right() + 0.5, ir.bottom() - headerSectionSeparatorInset)); + else + p->drawLine(QLineF(ir.left() + headerSectionSeparatorInset, ir.bottom(), + ir.right() - headerSectionSeparatorInset, ir.bottom())); + } + + break; + case CE_HeaderLabel: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + p->save(); + QRect textr = header->rect; + if (!header->icon.isNull()) { + QIcon::Mode mode = QIcon::Disabled; + if (opt->state & State_Enabled) + mode = QIcon::Normal; + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + QPixmap pixmap = header->icon.pixmap(window, QSize(iconExtent, iconExtent), mode); + + QRect pixr = header->rect; + pixr.setY(header->rect.center().y() - (pixmap.height() / pixmap.devicePixelRatio() - 1) / 2); + proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); + textr.translate(pixmap.width() / pixmap.devicePixelRatio() + 2, 0); + } + + proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, + header->state & State_Enabled, header->text, QPalette::ButtonText); + p->restore(); + } + break; + case CE_ToolButtonLabel: + if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { + QStyleOptionToolButton myTb = *tb; + myTb.state &= ~State_AutoRaise; +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { + QRect cr = tb->rect; + int shiftX = 0; + int shiftY = 0; + bool needText = false; + int alignment = 0; + bool down = tb->state & (State_Sunken | State_On); + if (down) { + shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, w); + shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, tb, w); + } + // The down state is special for QToolButtons in a toolbar on the Mac + // The text is a bit bolder and gets a drop shadow and the icons are also darkened. + // This doesn't really fit into any particular case in QIcon, so we + // do the majority of the work ourselves. + if (!(tb->features & QStyleOptionToolButton::Arrow)) { + Qt::ToolButtonStyle tbstyle = tb->toolButtonStyle; + if (tb->icon.isNull() && !tb->text.isEmpty()) + tbstyle = Qt::ToolButtonTextOnly; + + switch (tbstyle) { + case Qt::ToolButtonTextOnly: { + needText = true; + alignment = Qt::AlignCenter; + break; } + case Qt::ToolButtonIconOnly: + case Qt::ToolButtonTextBesideIcon: + case Qt::ToolButtonTextUnderIcon: { + QRect pr = cr; + QIcon::Mode iconMode = (tb->state & State_Enabled) ? QIcon::Normal + : QIcon::Disabled; + QIcon::State iconState = (tb->state & State_On) ? QIcon::On + : QIcon::Off; + QPixmap pixmap = tb->icon.pixmap(window, + tb->rect.size().boundedTo(tb->iconSize), + iconMode, iconState); + + // Draw the text if it's needed. + if (tb->toolButtonStyle != Qt::ToolButtonIconOnly) { + needText = true; + if (tb->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { + pr.setHeight(pixmap.size().height() / pixmap.devicePixelRatio() + 6); + cr.adjust(0, pr.bottom(), 0, -3); + alignment |= Qt::AlignCenter; + } else { + pr.setWidth(pixmap.width() / pixmap.devicePixelRatio() + 8); + cr.adjust(pr.right(), 0, 0, 0); + alignment |= Qt::AlignLeft | Qt::AlignVCenter; + } + } + if (opt->state & State_Sunken) { + pr.translate(shiftX, shiftY); + pixmap = darkenPixmap(pixmap); + } + proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); + break; } + default: + Q_ASSERT(false); + break; + } + + if (needText) { + QPalette pal = tb->palette; + QPalette::ColorRole role = QPalette::NoRole; + if (!proxy()->styleHint(SH_UnderlineShortcut, tb, w)) + alignment |= Qt::TextHideMnemonic; + if (down) + cr.translate(shiftX, shiftY); + if (tbstyle == Qt::ToolButtonTextOnly + || (tbstyle != Qt::ToolButtonTextOnly && !down)) { + QPen pen = p->pen(); + QColor light = down || isDarkMode() ? Qt::black : Qt::white; + light.setAlphaF(0.375f); + p->setPen(light); + p->drawText(cr.adjusted(0, 1, 0, 1), alignment, tb->text); + p->setPen(pen); + if (down && tbstyle == Qt::ToolButtonTextOnly) { + pal = QApplication::palette("QMenu"); + pal.setCurrentColorGroup(tb->palette.currentColorGroup()); + role = QPalette::HighlightedText; + } + } + proxy()->drawItemText(p, cr, alignment, pal, + tb->state & State_Enabled, tb->text, role); + } + } else { + QCommonStyle::drawControl(ce, &myTb, p, w); + } + } else +#endif // QT_NO_ACCESSIBILITY + { + QCommonStyle::drawControl(ce, &myTb, p, w); + } + } + break; + case CE_ToolBoxTabShape: + QCommonStyle::drawControl(ce, opt, p, w); + break; + case CE_PushButtonBevel: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + if (!(btn->state & (State_Raised | State_Sunken | State_On))) + break; + + if (btn->features & QStyleOptionButton::CommandLinkButton) { + QCommonStyle::drawControl(ce, opt, p, w); + break; + } + + const bool hasFocus = btn->state & State_HasFocus; + const bool isActive = btn->state & State_Active; + + // a focused auto-default button within an active window + // takes precedence over a normal default button + if ((btn->features & QStyleOptionButton::AutoDefaultButton) + && isActive && hasFocus) + d->autoDefaultButton = btn->styleObject; + else if (d->autoDefaultButton == btn->styleObject) + d->autoDefaultButton = nullptr; + + const bool isEnabled = btn->state & State_Enabled; + const bool isPressed = btn->state & State_Sunken; + const bool isHighlighted = isActive && + ((btn->state & State_On) + || (btn->features & QStyleOptionButton::DefaultButton) + || (btn->features & QStyleOptionButton::AutoDefaultButton + && d->autoDefaultButton == btn->styleObject)); + const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; + const auto ct = cocoaControlType(btn, w); + const auto cs = d->effectiveAquaSizeConstrain(btn, w); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + // Ensure same size and location as we used to have with HITheme. + // This is more convoluted than we initialy thought. See for example + // differences between plain and menu button frames. + const QRectF frameRect = cw.adjustedControlFrame(btn->rect); + pb.frame = frameRect.toCGRect(); + + pb.enabled = isEnabled; + [pb highlight:isPressed]; + pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { + [pb.cell drawBezelWithFrame:r inView:pb.superview]; + }); + [pb highlight:NO]; + + if (hasMenu && cw.type == QMacStylePrivate::Button_SquareButton) { + // Using -[NSPopuButtonCell drawWithFrame:inView:] above won't do + // it right because we don't set the text in the native button. + const int mbi = proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, btn, w); + const auto ir = frameRect.toRect(); + int arrowYOffset = 0; +#if 0 + // FIXME What's this for again? + if (!w) { + // adjustment for Qt Quick Controls + arrowYOffset -= ir.top(); + if (cw.second == QStyleHelper::SizeSmall) + arrowYOffset += 1; + } +#endif + const auto ar = visualRect(btn->direction, ir, QRect(ir.right() - mbi - 6, ir.height() / 2 - arrowYOffset, mbi, mbi)); + + QStyleOption arrowOpt = *opt; + arrowOpt.rect = ar; + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, w); + } + + + if (btn->state & State_HasFocus) { + // TODO Remove and use QFocusFrame instead. + const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, btn, w); + const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, btn, w); + QRectF focusRect; + if (cw.type == QMacStylePrivate::Button_SquareButton) { + focusRect = frameRect; + } else { + focusRect = QRectF::fromCGRect([pb alignmentRectForFrame:pb.frame]); + if (cw.type == QMacStylePrivate::Button_PushButton) + focusRect -= pushButtonShadowMargins[cw.size]; + else if (cw.type == QMacStylePrivate::Button_PullDown) + focusRect -= pullDownButtonShadowMargins[cw.size]; + } + d->drawFocusRing(p, focusRect, hMargin, vMargin, cw); + } + } + break; + case CE_PushButtonLabel: + if (const QStyleOptionButton *b = qstyleoption_cast(opt)) { + QStyleOptionButton btn(*b); + // We really don't want the label to be drawn the same as on + // windows style if it has an icon and text, then it should be more like a + // tab. So, cheat a little here. However, if it *is* only an icon + // the windows style works great, so just use that implementation. + const bool isEnabled = btn.state & State_Enabled; + const bool hasMenu = btn.features & QStyleOptionButton::HasMenu; + const bool hasIcon = !btn.icon.isNull(); + const bool hasText = !btn.text.isEmpty(); + const bool isActive = btn.state & State_Active; + const bool isPressed = btn.state & State_Sunken; + + const auto ct = cocoaControlType(&btn, w); + + if (!hasMenu && ct != QMacStylePrivate::Button_SquareButton) { + if (isPressed + || (isActive && isEnabled + && ((btn.state & State_On) + || ((btn.features & QStyleOptionButton::DefaultButton) && !d->autoDefaultButton) + || d->autoDefaultButton == btn.styleObject))) + btn.palette.setColor(QPalette::ButtonText, Qt::white); + } + + if ((!hasIcon && !hasMenu) || (hasIcon && !hasText)) { + QCommonStyle::drawControl(ce, &btn, p, w); + } else { + QRect freeContentRect = btn.rect; + QRect textRect = itemTextRect( + btn.fontMetrics, freeContentRect, Qt::AlignCenter, isEnabled, btn.text); + if (hasMenu) { + textRect.moveTo(w ? 15 : 11, textRect.top()); // Supports Qt Quick Controls + } + // Draw the icon: + if (hasIcon) { + int contentW = textRect.width(); + if (hasMenu) + contentW += proxy()->pixelMetric(PM_MenuButtonIndicator) + 4; + QIcon::Mode mode = isEnabled ? QIcon::Normal : QIcon::Disabled; + if (mode == QIcon::Normal && btn.state & State_HasFocus) + mode = QIcon::Active; + // Decide if the icon is should be on or off: + QIcon::State state = QIcon::Off; + if (btn.state & State_On) + state = QIcon::On; + QPixmap pixmap = btn.icon.pixmap(window, btn.iconSize, mode, state); + int pixmapWidth = pixmap.width() / pixmap.devicePixelRatio(); + int pixmapHeight = pixmap.height() / pixmap.devicePixelRatio(); + contentW += pixmapWidth + QMacStylePrivate::PushButtonContentPadding; + int iconLeftOffset = freeContentRect.x() + (freeContentRect.width() - contentW) / 2; + int iconTopOffset = freeContentRect.y() + (freeContentRect.height() - pixmapHeight) / 2; + QRect iconDestRect(iconLeftOffset, iconTopOffset, pixmapWidth, pixmapHeight); + QRect visualIconDestRect = visualRect(btn.direction, freeContentRect, iconDestRect); + proxy()->drawItemPixmap(p, visualIconDestRect, Qt::AlignLeft | Qt::AlignVCenter, pixmap); + int newOffset = iconDestRect.x() + iconDestRect.width() + + QMacStylePrivate::PushButtonContentPadding - textRect.x(); + textRect.adjust(newOffset, 0, newOffset, 0); + } + // Draw the text: + if (hasText) { + textRect = visualRect(btn.direction, freeContentRect, textRect); + proxy()->drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, btn.palette, + isEnabled, btn.text, QPalette::ButtonText); + } + } + } + break; +#if QT_CONFIG(combobox) + case CE_ComboBoxLabel: + if (const auto *cb = qstyleoption_cast(opt)) { + auto comboCopy = *cb; + comboCopy.direction = Qt::LeftToRight; + // The rectangle will be adjusted to SC_ComboBoxEditField with comboboxEditBounds() + QCommonStyle::drawControl(CE_ComboBoxLabel, &comboCopy, p, w); + } + break; +#endif // #if QT_CONFIG(combobox) +#if QT_CONFIG(tabbar) + case CE_TabBarTabShape: + if (const auto *tabOpt = qstyleoption_cast(opt)) { + if (tabOpt->documentMode) { + p->save(); + bool isUnified = false; + if (w) { + QRect tabRect = tabOpt->rect; + QPoint windowTabStart = w->mapTo(w->window(), tabRect.topLeft()); + isUnified = isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowTabStart.y()); + } + + const int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, opt, w); + drawTabShape(p, tabOpt, isUnified, tabOverlap); + + p->restore(); + return; + } + + const bool isActive = tabOpt->state & State_Active; + const bool isEnabled = tabOpt->state & State_Enabled; + const bool isPressed = tabOpt->state & State_Sunken; + const bool isSelected = tabOpt->state & State_Selected; + const auto tabDirection = QMacStylePrivate::tabDirection(tabOpt->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + + QStyleOptionTab::TabPosition tp = tabOpt->position; + QStyleOptionTab::SelectedPosition sp = tabOpt->selectedPosition; + if (tabOpt->direction == Qt::RightToLeft && !verticalTabs) { + if (tp == QStyleOptionTab::Beginning) + tp = QStyleOptionTab::End; + else if (tp == QStyleOptionTab::End) + tp = QStyleOptionTab::Beginning; + + if (sp == QStyleOptionTab::NextIsSelected) + sp = QStyleOptionTab::PreviousIsSelected; + else if (sp == QStyleOptionTab::PreviousIsSelected) + sp = QStyleOptionTab::NextIsSelected; + } + + // Alas, NSSegmentedControl and NSSegmentedCell are letting us down. + // We're not able to draw it at will, either calling -[drawSegment: + // inFrame:withView:], -[drawRect:] or anything in between. Besides, + // there's no public API do draw the pressed state, AFAICS. We'll use + // a push NSButton instead and clip the CGContext. + // NOTE/TODO: this is not true. On 10.13 NSSegmentedControl works with + // some (black?) magic/magic dances, on 10.14 it simply works (was + // it fixed in AppKit?). But, indeed, we cannot make a tab 'pressed' + // with NSSegmentedControl (only selected), so we stay with buttons + // (mixing buttons and NSSegmentedControl for such a simple thing + // is too much work). + + const auto cs = d->effectiveAquaSizeConstrain(opt, w); + // Extra hacks to get the proper pressed appreance when not selected or selected and inactive + const bool needsInactiveHack = (!isActive && isSelected); + const auto ct = !needsInactiveHack && (isSelected || tp == QStyleOptionTab::OnlyOneTab) ? + QMacStylePrivate::Button_PushButton : + QMacStylePrivate::Button_PopupButton; + const bool isPopupButton = ct == QMacStylePrivate::Button_PopupButton; + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + + auto vOffset = isPopupButton ? 1 : 2; + if (tabDirection == QMacStylePrivate::East) + vOffset -= 1; + const auto outerAdjust = isPopupButton ? 1 : 4; + const auto innerAdjust = isPopupButton ? 20 : 10; + QRectF frameRect = tabOpt->rect; + if (verticalTabs) + frameRect = QRectF(frameRect.y(), frameRect.x(), frameRect.height(), frameRect.width()); + // Adjust before clipping + frameRect = frameRect.translated(0, vOffset); + switch (tp) { + case QStyleOptionTab::Beginning: + // Pressed state hack: tweak adjustments in preparation for flip below + if (!isSelected && tabDirection == QMacStylePrivate::West) + frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); + else + frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::Middle: + frameRect = frameRect.adjusted(-innerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::End: + // Pressed state hack: tweak adjustments in preparation for flip below + if (isSelected || tabDirection == QMacStylePrivate::West) + frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); + else + frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::OnlyOneTab: + frameRect = frameRect.adjusted(-outerAdjust, 0, outerAdjust, 0); + break; + } + pb.frame = frameRect.toCGRect(); + + pb.enabled = isEnabled; + [pb highlight:isPressed]; + // Set off state when inactive. See needsInactiveHack for when it's selected + pb.state = (isActive && isSelected && !isPressed) ? NSOnState : NSOffState; + + const auto drawBezelBlock = ^(CGContextRef ctx, const CGRect &r) { + CGContextClipToRect(ctx, opt->rect.toCGRect()); + if (!isSelected || needsInactiveHack) { + // Final stage of the pressed state hack: flip NSPopupButton rendering + if (!verticalTabs && tp == QStyleOptionTab::End) { + CGContextTranslateCTM(ctx, opt->rect.right(), 0); + CGContextScaleCTM(ctx, -1, 1); + CGContextTranslateCTM(ctx, -frameRect.left(), 0); + } else if (tabDirection == QMacStylePrivate::West && tp == QStyleOptionTab::Beginning) { + CGContextTranslateCTM(ctx, 0, opt->rect.top()); + CGContextScaleCTM(ctx, 1, -1); + CGContextTranslateCTM(ctx, 0, -frameRect.right()); + } else if (tabDirection == QMacStylePrivate::East && tp == QStyleOptionTab::End) { + CGContextTranslateCTM(ctx, 0, opt->rect.bottom()); + CGContextScaleCTM(ctx, 1, -1); + CGContextTranslateCTM(ctx, 0, -frameRect.left()); + } + } + + // Rotate and translate CTM when vertical + // On macOS: positive angle is CW, negative is CCW + if (tabDirection == QMacStylePrivate::West) { + CGContextTranslateCTM(ctx, 0, frameRect.right()); + CGContextRotateCTM(ctx, -M_PI_2); + CGContextTranslateCTM(ctx, -frameRect.left(), 0); + } else if (tabDirection == QMacStylePrivate::East) { + CGContextTranslateCTM(ctx, opt->rect.right(), 0); + CGContextRotateCTM(ctx, M_PI_2); + } + + // Now, if it's a trick with a popup button, it has an arrow + // which makes no sense on tabs. + NSPopUpArrowPosition oldPosition = NSPopUpArrowAtCenter; + NSPopUpButtonCell *pbCell = nil; + auto rAdjusted = r; + if (isPopupButton && tp == QStyleOptionTab::OnlyOneTab) { + pbCell = static_cast(pb.cell); + oldPosition = pbCell.arrowPosition; + pbCell.arrowPosition = NSPopUpNoArrow; + if (pb.state == NSControlStateValueOff) { + // NSPopUpButton in this state is smaller. + rAdjusted.origin.x -= 3; + rAdjusted.size.width += 6; + } + } + + [pb.cell drawBezelWithFrame:rAdjusted inView:pb.superview]; + + if (pbCell) // Restore, we may reuse it for a ComboBox. + pbCell.arrowPosition = oldPosition; + }; + + if (needsInactiveHack) { + // First, render tab as non-selected tab on a pixamp + const qreal pixelRatio = p->device()->devicePixelRatioF(); + QImage tabPixmap(opt->rect.size() * pixelRatio, QImage::Format_ARGB32_Premultiplied); + tabPixmap.setDevicePixelRatio(pixelRatio); + tabPixmap.fill(Qt::transparent); + QPainter tabPainter(&tabPixmap); + d->drawNSViewInRect(pb, frameRect, &tabPainter, ^(CGContextRef ctx, const CGRect &r) { + CGContextTranslateCTM(ctx, -opt->rect.left(), -opt->rect.top()); + drawBezelBlock(ctx, r); + }); + tabPainter.end(); + + // Then, darken it with the proper shade of gray + const qreal inactiveGray = 0.898; // As measured + const int inactiveGray8 = qRound(inactiveGray * 255.0); + const QRgb inactiveGrayRGB = qRgb(inactiveGray8, inactiveGray8, inactiveGray8); + for (int l = 0; l < tabPixmap.height(); ++l) { + auto *line = reinterpret_cast(tabPixmap.scanLine(l)); + for (int i = 0; i < tabPixmap.width(); ++i) { + if (qAlpha(line[i]) == 255) { + line[i] = inactiveGrayRGB; + } else if (qAlpha(line[i]) > 128) { + const int g = qRound(inactiveGray * qRed(line[i])); + line[i] = qRgba(g, g, g, qAlpha(line[i])); + } + } + } + + // Finally, draw the tab pixmap on the current painter + p->drawImage(opt->rect, tabPixmap); + } else { + d->drawNSViewInRect(pb, frameRect, p, drawBezelBlock); + } + + if (!isSelected && sp != QStyleOptionTab::NextIsSelected + && tp != QStyleOptionTab::End + && tp != QStyleOptionTab::OnlyOneTab) { + static const QPen separatorPen(Qt::black, 1.0); + p->save(); + p->setOpacity(isEnabled ? 0.105 : 0.06); // As measured + p->setPen(separatorPen); + if (tabDirection == QMacStylePrivate::West) { + p->drawLine(QLineF(opt->rect.left() + 1.5, opt->rect.bottom(), + opt->rect.right() - 0.5, opt->rect.bottom())); + } else if (tabDirection == QMacStylePrivate::East) { + p->drawLine(QLineF(opt->rect.left(), opt->rect.bottom(), + opt->rect.right() - 0.5, opt->rect.bottom())); + } else { + p->drawLine(QLineF(opt->rect.right(), opt->rect.top() + 1.0, + opt->rect.right(), opt->rect.bottom() - 0.5)); + } + p->restore(); + } + + // TODO Needs size adjustment to fit the focus ring + if (tabOpt->state & State_HasFocus) { + QMacStylePrivate::CocoaControlType focusRingType; + switch (tp) { + case QStyleOptionTab::Beginning: + focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_Last + : QMacStylePrivate::SegmentedControl_First; + break; + case QStyleOptionTab::Middle: + focusRingType = QMacStylePrivate::SegmentedControl_Middle; + break; + case QStyleOptionTab::End: + focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_First + : QMacStylePrivate::SegmentedControl_Last; + break; + case QStyleOptionTab::OnlyOneTab: + focusRingType = QMacStylePrivate::SegmentedControl_Single; + break; + } + } + } + break; + case CE_TabBarTabLabel: + if (const auto *tab = qstyleoption_cast(opt)) { + QStyleOptionTab myTab = *tab; + const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + + // Check to see if we use have the same as the system font + // (QComboMenuItem is internal and should never be seen by the + // outside world, unless they read the source, in which case, it's + // their own fault). + const bool nonDefaultFont = p->font() != qt_app_fonts_hash()->value("QComboMenuItem"); + + if (!myTab.documentMode && (myTab.state & State_Selected) && (myTab.state & State_Active)) + if (const auto *tabBar = qobject_cast(w)) + if (!tabBar->tabTextColor(tabBar->currentIndex()).isValid()) + myTab.palette.setColor(QPalette::WindowText, Qt::white); + + if (myTab.documentMode && isDarkMode()) { + bool active = (myTab.state & State_Selected) && (myTab.state & State_Active); + myTab.palette.setColor(QPalette::WindowText, active ? Qt::white : Qt::gray); + } + + int heightOffset = 0; + if (verticalTabs) { + heightOffset = -1; + } else if (nonDefaultFont) { + if (p->fontMetrics().height() == myTab.rect.height()) + heightOffset = 2; + } + myTab.rect.setHeight(myTab.rect.height() + heightOffset); + + QCommonStyle::drawControl(ce, &myTab, p, w); + } + break; +#endif +#if QT_CONFIG(dockwidget) + case CE_DockWidgetTitle: + if (const auto *dwOpt = qstyleoption_cast(opt)) { + const bool isVertical = dwOpt->verticalTitleBar; + const auto effectiveRect = isVertical ? opt->rect.transposed() : opt->rect; + p->save(); + if (isVertical) { + p->translate(effectiveRect.left(), effectiveRect.top() + effectiveRect.width()); + p->rotate(-90); + p->translate(-effectiveRect.left(), -effectiveRect.top()); + } + + // fill title bar background + QLinearGradient linearGrad; + linearGrad.setStart(QPointF(0, 0)); + linearGrad.setFinalStop(QPointF(0, 2 * effectiveRect.height())); + linearGrad.setColorAt(0, opt->palette.button().color()); + linearGrad.setColorAt(1, opt->palette.dark().color()); + p->fillRect(effectiveRect, linearGrad); + + // draw horizontal line at bottom + p->setPen(opt->palette.dark().color()); + p->drawLine(effectiveRect.bottomLeft(), effectiveRect.bottomRight()); + + if (!dwOpt->title.isEmpty()) { + auto titleRect = proxy()->subElementRect(SE_DockWidgetTitleBarText, opt, w); + if (isVertical) + titleRect = QRect(effectiveRect.left() + opt->rect.bottom() - titleRect.bottom(), + effectiveRect.top() + titleRect.left() - opt->rect.left(), + titleRect.height(), + titleRect.width()); + + const auto text = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); + proxy()->drawItemText(p, titleRect, Qt::AlignCenter, dwOpt->palette, + dwOpt->state & State_Enabled, text, QPalette::WindowText); + } + p->restore(); + } + break; +#endif + case CE_FocusFrame: { + const auto *ff = qobject_cast(w); + const auto *ffw = ff ? ff->widget() : nullptr; + const auto ct = [=] { + if (ffw) { + if (ffw->inherits("QCheckBox")) + return QMacStylePrivate::Button_CheckBox; + if (ffw->inherits("QRadioButton")) + return QMacStylePrivate::Button_RadioButton; + if (ffw->inherits("QLineEdit") || ffw->inherits("QTextEdit")) + return QMacStylePrivate::TextField; + } + + return QMacStylePrivate::Box; // Not really, just make it the default + } (); + const auto cs = ffw ? (ffw->testAttribute(Qt::WA_MacMiniSize) ? QStyleHelper::SizeMini : + ffw->testAttribute(Qt::WA_MacSmallSize) ? QStyleHelper::SizeSmall : + QStyleHelper::SizeLarge) : + QStyleHelper::SizeLarge; + const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, w); + const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, opt, w); + d->drawFocusRing(p, opt->rect, hMargin, vMargin, QMacStylePrivate::CocoaControl(ct, cs)); + break; } + case CE_MenuEmptyArea: + // Skip: PE_PanelMenu fills in everything + break; + case CE_MenuItem: + case CE_MenuHMargin: + case CE_MenuVMargin: + case CE_MenuTearoff: + case CE_MenuScroller: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + const bool active = mi->state & State_Selected; + if (active) + p->fillRect(mi->rect, mi->palette.highlight()); + + const QStyleHelper::WidgetSizePolicy widgetSize = d->aquaSizeConstrain(opt, w); + + if (ce == CE_MenuTearoff) { + p->setPen(QPen(mi->palette.dark().color(), 1, Qt::DashLine)); + p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2 - 1, + mi->rect.x() + mi->rect.width() - 4, + mi->rect.y() + mi->rect.height() / 2 - 1); + p->setPen(QPen(mi->palette.light().color(), 1, Qt::DashLine)); + p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2, + mi->rect.x() + mi->rect.width() - 4, + mi->rect.y() + mi->rect.height() / 2); + } else if (ce == CE_MenuScroller) { + const QSize scrollerSize = QSize(10, 8); + const int scrollerVOffset = 5; + const int left = mi->rect.x() + (mi->rect.width() - scrollerSize.width()) / 2; + const int right = left + scrollerSize.width(); + int top; + int bottom; + if (opt->state & State_DownArrow) { + bottom = mi->rect.y() + scrollerVOffset; + top = bottom + scrollerSize.height(); + } else { + bottom = mi->rect.bottom() - scrollerVOffset; + top = bottom - scrollerSize.height(); + } + p->save(); + p->setRenderHint(QPainter::Antialiasing); + QPainterPath path; + path.moveTo(left, bottom); + path.lineTo(right, bottom); + path.lineTo((left + right) / 2, top); + p->fillPath(path, opt->palette.buttonText()); + p->restore(); + } else if (ce != CE_MenuItem) { + break; + } + + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + CGColorRef separatorColor = [NSColor quaternaryLabelColor].CGColor; + const QRect separatorRect = QRect(mi->rect.left(), mi->rect.center().y(), mi->rect.width(), 2); + p->fillRect(separatorRect, qt_mac_toQColor(separatorColor)); + break; + } + + const int maxpmw = mi->maxIconWidth; + const bool enabled = mi->state & State_Enabled; + + int xpos = mi->rect.x() + 18; + int checkcol = maxpmw; + if (!enabled) + p->setPen(mi->palette.text().color()); + else if (active) + p->setPen(mi->palette.highlightedText().color()); + else + p->setPen(mi->palette.buttonText().color()); + + if (mi->checked) { + QStyleOption checkmarkOpt; + checkmarkOpt.initFrom(w); + + const int mw = checkcol + macItemFrame; + const int mh = mi->rect.height() + macItemFrame; + const int xp = mi->rect.x() + macItemFrame; + checkmarkOpt.rect = QRect(xp, mi->rect.y() - checkmarkOpt.fontMetrics.descent(), mw, mh); + + checkmarkOpt.state.setFlag(State_On, active); + checkmarkOpt.state.setFlag(State_Enabled, enabled); + if (widgetSize == QStyleHelper::SizeMini) + checkmarkOpt.state |= State_Mini; + else if (widgetSize == QStyleHelper::SizeSmall) + checkmarkOpt.state |= State_Small; + + // We let drawPrimitive(PE_IndicatorMenuCheckMark) pick the right color + checkmarkOpt.palette.setColor(QPalette::HighlightedText, p->pen().color()); + checkmarkOpt.palette.setColor(QPalette::Text, p->pen().color()); + + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &checkmarkOpt, p, w); + } + if (!mi->icon.isNull()) { + QIcon::Mode mode = (mi->state & State_Enabled) ? QIcon::Normal + : QIcon::Disabled; + // Always be normal or disabled to follow the Mac style. + int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize); + QSize iconSize(smallIconSize, smallIconSize); +#if QT_CONFIG(combobox) + if (const QComboBox *comboBox = qobject_cast(w)) { + iconSize = comboBox->iconSize(); + } +#endif + QPixmap pixmap = mi->icon.pixmap(window, iconSize, mode); + int pixw = pixmap.width() / pixmap.devicePixelRatio(); + int pixh = pixmap.height() / pixmap.devicePixelRatio(); + QRect cr(xpos, mi->rect.y(), checkcol, mi->rect.height()); + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter(cr.center()); + p->drawPixmap(pmr.topLeft(), pixmap); + xpos += pixw + 6; + } + + QString s = mi->text; + const auto text_flags = Qt::AlignVCenter | Qt::TextHideMnemonic + | Qt::TextSingleLine | Qt::AlignAbsolute; + int yPos = mi->rect.y(); + if (widgetSize == QStyleHelper::SizeMini) + yPos += 1; + + const bool isSubMenu = mi->menuItemType == QStyleOptionMenuItem::SubMenu; + const int tabwidth = isSubMenu ? 9 : mi->tabWidth; + + QString rightMarginText; + if (isSubMenu) + rightMarginText = QStringLiteral("\u25b6\ufe0e"); // U+25B6 U+FE0E: BLACK RIGHT-POINTING TRIANGLE + + // If present, save and remove embedded shorcut from text + const int tabIndex = s.indexOf(QLatin1Char('\t')); + if (tabIndex >= 0) { + if (!isSubMenu) // ... but ignore it if it's a submenu. + rightMarginText = s.mid(tabIndex + 1); + s = s.left(tabIndex); + } + + p->save(); + if (!rightMarginText.isEmpty()) { + p->setFont(qt_app_fonts_hash()->value("QMenuItem", p->font())); + int xp = mi->rect.right() - tabwidth - macRightBorder + 2; + if (!isSubMenu) + xp -= macItemHMargin + macItemFrame + 3; // Adjust for shortcut + p->drawText(xp, yPos, tabwidth, mi->rect.height(), text_flags | Qt::AlignRight, rightMarginText); + } + + if (!s.isEmpty()) { + const int xm = macItemFrame + maxpmw + macItemHMargin; + QFont myFont = mi->font; + // myFont may not have any "hard" flags set. We override + // the point size so that when it is resolved against the device, this font will win. + // This is mainly to handle cases where someone sets the font on the window + // and then the combo inherits it and passes it onward. At that point the resolve mask + // is very, very weak. This makes it stonger. + myFont.setPointSizeF(QFontInfo(mi->font).pointSizeF()); + + // QTBUG-65653: Our own text rendering doesn't look good enough, especially on non-retina + // displays. Worked around here while waiting for a proper fix in QCoreTextFontEngine. + // Only if we're not using QCoreTextFontEngine we do fallback to our own text rendering. + const auto *fontEngine = QFontPrivate::get(myFont)->engineForScript(QChar::Script_Common); + Q_ASSERT(fontEngine); + if (fontEngine->type() == QFontEngine::Multi) { + fontEngine = static_cast(fontEngine)->engine(0); + Q_ASSERT(fontEngine); + } + if (fontEngine->type() == QFontEngine::Mac) { + NSFont *f = (NSFont *)(CTFontRef)fontEngine->handle(); + + // Respect the menu item palette as set in the style option. + const auto pc = p->pen().color(); + NSColor *c = [NSColor colorWithSRGBRed:pc.redF() + green:pc.greenF() + blue:pc.blueF() + alpha:pc.alphaF()]; + + s = qt_mac_removeMnemonics(s); + + QMacCGContext cgCtx(p); + d->setupNSGraphicsContext(cgCtx, YES); + + // Draw at point instead of in rect, as the rect we've computed for the menu item + // is based on the font metrics we got from HarfBuzz, so we may risk having CoreText + // line-break the string if it doesn't fit the given rect. It's better to draw outside + // the rect and possibly overlap something than to have part of the text disappear. + [s.toNSString() drawAtPoint:CGPointMake(xpos, yPos) + withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c, + NSObliquenessAttributeName: [NSNumber numberWithDouble: myFont.italic() ? 0.3 : 0.0]}]; + + d->restoreNSGraphicsContext(cgCtx); + } else { + p->setFont(myFont); + p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1, + mi->rect.height(), text_flags, s); + } + } + p->restore(); + } + break; + case CE_MenuBarItem: + case CE_MenuBarEmptyArea: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + const bool selected = (opt->state & State_Selected) && (opt->state & State_Enabled) && (opt->state & State_Sunken); + const QBrush bg = selected ? mi->palette.highlight() : mi->palette.window(); + p->fillRect(mi->rect, bg); + + if (ce != CE_MenuBarItem) + break; + + if (!mi->icon.isNull()) { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + drawItemPixmap(p, mi->rect, + Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip + | Qt::TextSingleLine, + mi->icon.pixmap(window, QSize(iconExtent, iconExtent), + (mi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled)); + } else { + drawItemText(p, mi->rect, + Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip + | Qt::TextSingleLine, + mi->palette, mi->state & State_Enabled, + mi->text, selected ? QPalette::HighlightedText : QPalette::ButtonText); + } + } + break; + case CE_ProgressBarLabel: + case CE_ProgressBarGroove: + // Do nothing. All done in CE_ProgressBarContents. Only keep these for proxy style overrides. + break; + case CE_ProgressBarContents: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + const bool isIndeterminate = (pb->minimum == 0 && pb->maximum == 0); + const bool vertical = pb->orientation == Qt::Vertical; + const bool inverted = pb->invertedAppearance; + bool reverse = (!vertical && (pb->direction == Qt::RightToLeft)); + if (inverted) + reverse = !reverse; + + QRect rect = pb->rect; + if (vertical) + rect = rect.transposed(); + const CGRect cgRect = rect.toCGRect(); + + const auto aquaSize = d->effectiveAquaSizeConstrain(opt, w); + const QProgressStyleAnimation *animation = qobject_cast(d->animation(opt->styleObject)); + QIndeterminateProgressIndicator *ipi = nil; + if (isIndeterminate || animation) + ipi = static_cast(d->cocoaControl({ QMacStylePrivate::ProgressIndicator_Indeterminate, aquaSize })); + if (isIndeterminate) { + // QIndeterminateProgressIndicator derives from NSProgressIndicator. We use a single + // instance that we start animating as soon as one of the progress bars is indeterminate. + // Since they will be in sync (as it's the case in Cocoa), we just need to draw it with + // the right geometry when the animation triggers an update. However, we can't hide it + // entirely between frames since that would stop the animation, so we just set its alpha + // value to 0. Same if we remove it from its superview. See QIndeterminateProgressIndicator + // implementation for details. + if (!animation && opt->styleObject) { + auto *animation = new QProgressStyleAnimation(d->animateSpeed(QMacStylePrivate::AquaProgressBar), opt->styleObject); + // NSProgressIndicator is heavier to draw than the HITheme API, so we reduce the frame rate a couple notches. + animation->setFrameRate(QStyleAnimation::FifteenFps); + d->startAnimation(animation); + [ipi startAnimation]; + } + + d->setupNSGraphicsContext(cg, NO); + d->setupVerticalInvertedXform(cg, reverse, vertical, cgRect); + [ipi drawWithFrame:cgRect inView:d->backingStoreNSView]; + d->restoreNSGraphicsContext(cg); + } else { + if (animation) { + d->stopAnimation(opt->styleObject); + [ipi stopAnimation]; + } + + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::ProgressIndicator_Determinate, aquaSize); + auto *pi = static_cast(d->cocoaControl(cw)); + d->drawNSViewInRect(pi, rect, p, ^(CGContextRef ctx, const CGRect &rect) { + d->setupVerticalInvertedXform(ctx, reverse, vertical, rect); + pi.minValue = pb->minimum; + pi.maxValue = pb->maximum; + pi.doubleValue = pb->progress; + [pi drawRect:rect]; + }); + } + } + break; + case CE_SizeGrip: { + // This is not HIG kosher: Fall back to the old stuff until we decide what to do. +#ifndef QT_NO_MDIAREA + if (!w || !qobject_cast(w->parentWidget())) +#endif + break; + + if (w->testAttribute(Qt::WA_MacOpaqueSizeGrip)) + p->fillRect(opt->rect, opt->palette.window()); + + QPen lineColor = QColor(82, 82, 82, 192); + lineColor.setWidth(1); + p->save(); + p->setRenderHint(QPainter::Antialiasing); + p->setPen(lineColor); + const Qt::LayoutDirection layoutDirection = w ? w->layoutDirection() : qApp->layoutDirection(); + const int NumLines = 3; + for (int l = 0; l < NumLines; ++l) { + const int offset = (l * 4 + 3); + QPoint start, end; + if (layoutDirection == Qt::LeftToRight) { + start = QPoint(opt->rect.width() - offset, opt->rect.height() - 1); + end = QPoint(opt->rect.width() - 1, opt->rect.height() - offset); + } else { + start = QPoint(offset, opt->rect.height() - 1); + end = QPoint(1, opt->rect.height() - offset); + } + p->drawLine(start, end); + } + p->restore(); + break; + } + case CE_Splitter: + if (opt->rect.width() > 1 && opt->rect.height() > 1) { + const bool isVertical = !(opt->state & QStyle::State_Horizontal); + // Qt refers to the layout orientation, while Cocoa refers to the divider's. + const auto ct = isVertical ? QMacStylePrivate::SplitView_Horizontal : QMacStylePrivate::SplitView_Vertical; + const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); + auto *sv = static_cast(d->cocoaControl(cw)); + sv.frame = opt->rect.toCGRect(); + d->drawNSViewInRect(sv, opt->rect, p, ^(CGContextRef, const CGRect &rect) { + [sv drawDividerInRect:rect]; + }); + } else { + QPen oldPen = p->pen(); + p->setPen(opt->palette.dark().color()); + if (opt->state & QStyle::State_Horizontal) + p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); + else + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + p->setPen(oldPen); + } + break; + case CE_RubberBand: + if (const QStyleOptionRubberBand *rubber = qstyleoption_cast(opt)) { + QColor fillColor(opt->palette.color(QPalette::Disabled, QPalette::Highlight)); + if (!rubber->opaque) { + QColor strokeColor; + // I retrieved these colors from the Carbon-Dev mailing list + strokeColor.setHsvF(0, 0, 0.86, 1.0); + fillColor.setHsvF(0, 0, 0.53, 0.25); + if (opt->rect.width() * opt->rect.height() <= 3) { + p->fillRect(opt->rect, strokeColor); + } else { + QPen oldPen = p->pen(); + QBrush oldBrush = p->brush(); + QPen pen(strokeColor); + p->setPen(pen); + p->setBrush(fillColor); + QRect adjusted = opt->rect.adjusted(1, 1, -1, -1); + if (adjusted.isValid()) + p->drawRect(adjusted); + p->setPen(oldPen); + p->setBrush(oldBrush); + } + } else { + p->fillRect(opt->rect, fillColor); + } + } + break; +#ifndef QT_NO_TOOLBAR + case CE_ToolBar: { + const QStyleOptionToolBar *toolBar = qstyleoption_cast(opt); + const bool isDarkMode = qt_mac_applicationIsInDarkMode(); + + // Unified title and toolbar drawing. In this mode the cocoa platform plugin will + // fill the top toolbar area part with a background gradient that "unifies" with + // the title bar. The following code fills the toolBar area with transparent pixels + // to make that gradient visible. + if (w) { +#if QT_CONFIG(mainwindow) + if (QMainWindow * mainWindow = qobject_cast(w->window())) { + if (toolBar && toolBar->toolBarArea == Qt::TopToolBarArea && mainWindow->unifiedTitleAndToolBarOnMac()) { + // fill with transparent pixels. + p->save(); + p->setCompositionMode(QPainter::CompositionMode_Source); + p->fillRect(opt->rect, Qt::transparent); + p->restore(); + + // Draw a horizontal separator line at the toolBar bottom if the "unified" area ends here. + // There might be additional toolbars or other widgets such as tab bars in document + // mode below. Determine this by making a unified toolbar area test for the row below + // this toolbar. + const QPoint windowToolbarEnd = w->mapTo(w->window(), opt->rect.bottomLeft()); + const bool isEndOfUnifiedArea = !isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowToolbarEnd.y() + 1); + if (isEndOfUnifiedArea) { + const int margin = qt_mac_aqua_get_metric(SeparatorSize); + const auto separatorRect = QRect(opt->rect.left(), opt->rect.bottom(), opt->rect.width(), margin); + p->fillRect(separatorRect, isDarkMode ? darkModeSeparatorLine : opt->palette.dark().color()); + } + break; + } + } +#endif + } + + // draw background gradient + QLinearGradient linearGrad; + if (opt->state & State_Horizontal) + linearGrad = QLinearGradient(0, opt->rect.top(), 0, opt->rect.bottom()); + else + linearGrad = QLinearGradient(opt->rect.left(), 0, opt->rect.right(), 0); + + QColor mainWindowGradientBegin = isDarkMode ? darkMainWindowGradientBegin : lightMainWindowGradientBegin; + QColor mainWindowGradientEnd = isDarkMode ? darkMainWindowGradientEnd : lightMainWindowGradientEnd; + + linearGrad.setColorAt(0, mainWindowGradientBegin); + linearGrad.setColorAt(1, mainWindowGradientEnd); + p->fillRect(opt->rect, linearGrad); + + p->save(); + QRect toolbarRect = isDarkMode ? opt->rect.adjusted(0, 0, 0, 1) : opt->rect; + if (opt->state & State_Horizontal) { + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); + p->drawLine(toolbarRect.topLeft(), toolbarRect.topRight()); + p->setPen(isDarkMode ? darkModeSeparatorLine :mainWindowGradientEnd.darker(114)); + p->drawLine(toolbarRect.bottomLeft(), toolbarRect.bottomRight()); + } else { + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); + p->drawLine(toolbarRect.topLeft(), toolbarRect.bottomLeft()); + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientEnd.darker(114)); + p->drawLine(toolbarRect.topRight(), toolbarRect.bottomRight()); + } + p->restore(); + + + } break; +#endif + default: + QCommonStyle::drawControl(ce, opt, p, w); + break; + } +} + +static void setLayoutItemMargins(int left, int top, int right, int bottom, QRect *rect, Qt::LayoutDirection dir) +{ + if (dir == Qt::RightToLeft) { + rect->adjust(-right, top, -left, bottom); + } else { + rect->adjust(left, top, right, bottom); + } +} + +QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt, + const QWidget *widget) const +{ + Q_D(const QMacStyle); + QRect rect; + const int controlSize = getControlSize(opt, widget); + + switch (sr) { +#if QT_CONFIG(itemviews) + case SE_ItemViewItemText: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + int fw = proxy()->pixelMetric(PM_FocusFrameHMargin, opt, widget); + // We add the focusframeargin between icon and text in commonstyle + rect = QCommonStyle::subElementRect(sr, opt, widget); + if (vopt->features & QStyleOptionViewItem::HasDecoration) + rect.adjust(-fw, 0, 0, 0); + } + break; +#endif + case SE_ToolBoxTabContents: + rect = QCommonStyle::subElementRect(sr, opt, widget); + break; + case SE_PushButtonBevel: + case SE_PushButtonContents: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + // Comment from the old HITheme days: + // "Unlike Carbon, we want the button to always be drawn inside its bounds. + // Therefore, the button is a bit smaller, so that even if it got focus, + // the focus 'shadow' will be inside. Adjust the content rect likewise." + // In the future, we should consider using -[NSCell titleRectForBounds:]. + // Since it requires configuring the NSButton fully, i.e. frame, image, + // title and font, we keep things more manual until we are more familiar + // with side effects when changing NSButton state. + const auto ct = cocoaControlType(btn, widget); + const auto cs = d->effectiveAquaSizeConstrain(btn, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto frameRect = cw.adjustedControlFrame(btn->rect); + if (sr == SE_PushButtonContents) { + frameRect -= cw.titleMargins(); + } else if (cw.type != QMacStylePrivate::Button_SquareButton) { + auto *pb = static_cast(d->cocoaControl(cw)); + frameRect = QRectF::fromCGRect([pb alignmentRectForFrame:frameRect.toCGRect()]); + if (cw.type == QMacStylePrivate::Button_PushButton) + frameRect -= pushButtonShadowMargins[cw.size]; + else if (cw.type == QMacStylePrivate::Button_PullDown) + frameRect -= pullDownButtonShadowMargins[cw.size]; + } + rect = frameRect.toRect(); + } + break; + case SE_HeaderLabel: { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); + rect.setRect(opt->rect.x() + margin, opt->rect.y(), + opt->rect.width() - margin * 2, opt->rect.height() - 2); + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // Subtract width needed for arrow, if there is one + if (header->sortIndicator != QStyleOptionHeader::None) { + if (opt->state & State_Horizontal) + rect.setWidth(rect.width() - (headerSectionArrowHeight) - (margin * 2)); + else + rect.setHeight(rect.height() - (headerSectionArrowHeight) - (margin * 2)); + } + } + rect = visualRect(opt->direction, opt->rect, rect); + break; + } + case SE_HeaderArrow: { + int h = opt->rect.height(); + int w = opt->rect.width(); + int x = opt->rect.x(); + int y = opt->rect.y(); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); + + if (opt->state & State_Horizontal) { + rect.setRect(x + w - margin * 2 - headerSectionArrowHeight, y + 5, + headerSectionArrowHeight, h - margin * 2 - 5); + } else { + rect.setRect(x + 5, y + h - margin * 2 - headerSectionArrowHeight, + w - margin * 2 - 5, headerSectionArrowHeight); + } + rect = visualRect(opt->direction, opt->rect, rect); + break; + } + case SE_ProgressBarGroove: + // Wrong in the secondary dimension, but accurate enough in the main dimension. + rect = opt->rect; + break; + case SE_ProgressBarLabel: + break; + case SE_ProgressBarContents: + rect = opt->rect; + break; + case SE_TreeViewDisclosureItem: { + rect = opt->rect; + // As previously returned by HIThemeGetButtonContentBounds + rect.setLeft(rect.left() + 2 + DisclosureOffset); + break; + } +#if QT_CONFIG(tabwidget) + case SE_TabWidgetLeftCorner: + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + switch (twf->shape) { + case QTabBar::RoundedNorth: + case QTabBar::TriangularNorth: + rect = QRect(QPoint(0, 0), twf->leftCornerWidgetSize); + break; + case QTabBar::RoundedSouth: + case QTabBar::TriangularSouth: + rect = QRect(QPoint(0, twf->rect.height() - twf->leftCornerWidgetSize.height()), + twf->leftCornerWidgetSize); + break; + default: + break; + } + rect = visualRect(twf->direction, twf->rect, rect); + } + break; + case SE_TabWidgetRightCorner: + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + switch (twf->shape) { + case QTabBar::RoundedNorth: + case QTabBar::TriangularNorth: + rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), 0), + twf->rightCornerWidgetSize); + break; + case QTabBar::RoundedSouth: + case QTabBar::TriangularSouth: + rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), + twf->rect.height() - twf->rightCornerWidgetSize.height()), + twf->rightCornerWidgetSize); + break; + default: + break; + } + rect = visualRect(twf->direction, twf->rect, rect); + } + break; + case SE_TabWidgetTabContents: + rect = QCommonStyle::subElementRect(sr, opt, widget); + if (const auto *twf = qstyleoption_cast(opt)) { + if (twf->lineWidth != 0) { + switch (QMacStylePrivate::tabDirection(twf->shape)) { + case QMacStylePrivate::North: + rect.adjust(+1, +14, -1, -1); + break; + case QMacStylePrivate::South: + rect.adjust(+1, +1, -1, -14); + break; + case QMacStylePrivate::West: + rect.adjust(+14, +1, -1, -1); + break; + case QMacStylePrivate::East: + rect.adjust(+1, +1, -14, -1); + } + } + } + break; + case SE_TabBarTabText: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + QRect dummyIconRect; + d->tabLayout(tab, widget, &rect, &dummyIconRect); + } + break; + case SE_TabBarTabLeftButton: + case SE_TabBarTabRightButton: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + bool selected = tab->state & State_Selected; + int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget); + int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget); + int hpadding = 5; + + bool verticalTabs = tab->shape == QTabBar::RoundedEast + || tab->shape == QTabBar::RoundedWest + || tab->shape == QTabBar::TriangularEast + || tab->shape == QTabBar::TriangularWest; + + QRect tr = tab->rect; + if (tab->shape == QTabBar::RoundedSouth || tab->shape == QTabBar::TriangularSouth) + verticalShift = -verticalShift; + if (verticalTabs) { + qSwap(horizontalShift, verticalShift); + horizontalShift *= -1; + verticalShift *= -1; + } + if (tab->shape == QTabBar::RoundedWest || tab->shape == QTabBar::TriangularWest) + horizontalShift = -horizontalShift; + + tr.adjust(0, 0, horizontalShift, verticalShift); + if (selected) + { + tr.setBottom(tr.bottom() - verticalShift); + tr.setRight(tr.right() - horizontalShift); + } + + QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; + int w = size.width(); + int h = size.height(); + int midHeight = static_cast(qCeil(float(tr.height() - h) / 2)); + int midWidth = ((tr.width() - w) / 2); + + bool atTheTop = true; + switch (tab->shape) { + case QTabBar::RoundedWest: + case QTabBar::TriangularWest: + atTheTop = (sr == SE_TabBarTabLeftButton); + break; + case QTabBar::RoundedEast: + case QTabBar::TriangularEast: + atTheTop = (sr == SE_TabBarTabRightButton); + break; + default: + if (sr == SE_TabBarTabLeftButton) + rect = QRect(tab->rect.x() + hpadding, midHeight, w, h); + else + rect = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); + rect = visualRect(tab->direction, tab->rect, rect); + } + if (verticalTabs) { + if (atTheTop) + rect = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); + else + rect = QRect(midWidth, tr.y() + hpadding, w, h); + } + } + break; +#endif + case SE_LineEditContents: + rect = QCommonStyle::subElementRect(sr, opt, widget); +#if QT_CONFIG(combobox) + if (widget && qobject_cast(widget->parentWidget())) + rect.adjust(-1, -2, 0, 0); + else +#endif + rect.adjust(-1, -1, 0, +1); + break; + case SE_CheckBoxLayoutItem: + rect = opt->rect; + if (controlSize == QStyleHelper::SizeLarge) { + setLayoutItemMargins(+2, +3, -9, -4, &rect, opt->direction); + } else if (controlSize == QStyleHelper::SizeSmall) { + setLayoutItemMargins(+1, +5, 0 /* fix */, -6, &rect, opt->direction); + } else { + setLayoutItemMargins(0, +7, 0 /* fix */, -6, &rect, opt->direction); + } + break; + case SE_ComboBoxLayoutItem: +#ifndef QT_NO_TOOLBAR + if (widget && qobject_cast(widget->parentWidget())) { + // Do nothing, because QToolbar needs the entire widget rect. + // Otherwise it will be clipped. Equivalent to + // widget->setAttribute(Qt::WA_LayoutUsesWidgetRect), but without + // all the hassle. + } else +#endif + { + rect = opt->rect; + if (controlSize == QStyleHelper::SizeLarge) { + rect.adjust(+3, +2, -3, -4); + } else if (controlSize == QStyleHelper::SizeSmall) { + setLayoutItemMargins(+2, +1, -3, -4, &rect, opt->direction); + } else { + setLayoutItemMargins(+1, 0, -2, 0, &rect, opt->direction); + } + } + break; + case SE_LabelLayoutItem: + rect = opt->rect; + setLayoutItemMargins(+1, 0 /* SHOULD be -1, done for alignment */, 0, 0 /* SHOULD be -1, done for alignment */, &rect, opt->direction); + break; + case SE_ProgressBarLayoutItem: { + rect = opt->rect; + int bottom = SIZE(3, 8, 8); + if (opt->state & State_Horizontal) { + rect.adjust(0, +1, 0, -bottom); + } else { + setLayoutItemMargins(+1, 0, -bottom, 0, &rect, opt->direction); + } + break; + } + case SE_PushButtonLayoutItem: + if (const QStyleOptionButton *buttonOpt + = qstyleoption_cast(opt)) { + if ((buttonOpt->features & QStyleOptionButton::Flat)) + break; // leave rect alone + } + rect = opt->rect; + if (controlSize == QStyleHelper::SizeLarge) { + rect.adjust(+6, +4, -6, -8); + } else if (controlSize == QStyleHelper::SizeSmall) { + rect.adjust(+5, +4, -5, -6); + } else { + rect.adjust(+1, 0, -1, -2); + } + break; + case SE_RadioButtonLayoutItem: + rect = opt->rect; + if (controlSize == QStyleHelper::SizeLarge) { + setLayoutItemMargins(+2, +2 /* SHOULD BE +3, done for alignment */, + 0, -4 /* SHOULD BE -3, done for alignment */, &rect, opt->direction); + } else if (controlSize == QStyleHelper::SizeSmall) { + rect.adjust(0, +6, 0 /* fix */, -5); + } else { + rect.adjust(0, +6, 0 /* fix */, -7); + } + break; + case SE_SliderLayoutItem: + if (const QStyleOptionSlider *sliderOpt + = qstyleoption_cast(opt)) { + rect = opt->rect; + if (sliderOpt->tickPosition == QSlider::NoTicks) { + int above = SIZE(3, 0, 2); + int below = SIZE(4, 3, 0); + if (sliderOpt->orientation == Qt::Horizontal) { + rect.adjust(0, +above, 0, -below); + } else { + rect.adjust(+above, 0, -below, 0); //### Seems that QSlider flip the position of the ticks in reverse mode. + } + } else if (sliderOpt->tickPosition == QSlider::TicksAbove) { + int below = SIZE(3, 2, 0); + if (sliderOpt->orientation == Qt::Horizontal) { + rect.setHeight(rect.height() - below); + } else { + rect.setWidth(rect.width() - below); + } + } else if (sliderOpt->tickPosition == QSlider::TicksBelow) { + int above = SIZE(3, 2, 0); + if (sliderOpt->orientation == Qt::Horizontal) { + rect.setTop(rect.top() + above); + } else { + rect.setLeft(rect.left() + above); + } + } + } + break; + case SE_FrameLayoutItem: + // hack because QStyleOptionFrame doesn't have a frameStyle member + if (const QFrame *frame = qobject_cast(widget)) { + rect = opt->rect; + switch (frame->frameStyle() & QFrame::Shape_Mask) { + case QFrame::HLine: + rect.adjust(0, +1, 0, -1); + break; + case QFrame::VLine: + rect.adjust(+1, 0, -1, 0); + break; + default: + ; + } + } + break; + case SE_GroupBoxLayoutItem: + rect = opt->rect; + if (const QStyleOptionGroupBox *groupBoxOpt = + qstyleoption_cast(opt)) { + /* + AHIG is very inconsistent when it comes to group boxes. + Basically, we make sure that (non-checkable) group boxes + and tab widgets look good when laid out side by side. + */ + if (groupBoxOpt->subControls & (QStyle::SC_GroupBoxCheckBox + | QStyle::SC_GroupBoxLabel)) { + int delta; + if (groupBoxOpt->subControls & QStyle::SC_GroupBoxCheckBox) { + delta = SIZE(8, 4, 4); // guess + } else { + delta = SIZE(15, 12, 12); // guess + } + rect.setTop(rect.top() + delta); + } + } + rect.setBottom(rect.bottom() - 1); + break; +#if QT_CONFIG(tabwidget) + case SE_TabWidgetLayoutItem: + if (const QStyleOptionTabWidgetFrame *tabWidgetOpt = + qstyleoption_cast(opt)) { + /* + AHIG specifies "12 or 14" as the distance from the window + edge. We choose 14 and since the default top margin is 20, + the overlap is 6. + */ + rect = tabWidgetOpt->rect; + if (tabWidgetOpt->shape == QTabBar::RoundedNorth) + rect.setTop(rect.top() + SIZE(6 /* AHIG */, 3 /* guess */, 2 /* AHIG */)); + } + break; +#endif +#if QT_CONFIG(dockwidget) + case SE_DockWidgetCloseButton: + case SE_DockWidgetFloatButton: + case SE_DockWidgetTitleBarText: + case SE_DockWidgetIcon: { + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); + int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt, widget); + QRect srect = opt->rect; + + const QStyleOptionDockWidget *dwOpt + = qstyleoption_cast(opt); + bool canClose = dwOpt == 0 ? true : dwOpt->closable; + bool canFloat = dwOpt == 0 ? false : dwOpt->floatable; + + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + // If this is a vertical titlebar, we transpose and work as if it was + // horizontal, then transpose again. + if (verticalTitleBar) + srect = srect.transposed(); + + do { + int right = srect.right(); + int left = srect.left(); + + QRect closeRect; + if (canClose) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, + opt, widget).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + closeRect = QRect(left, + srect.center().y() - sz.height()/2, + sz.width(), sz.height()); + left = closeRect.right() + 1; + } + if (sr == SE_DockWidgetCloseButton) { + rect = closeRect; + break; + } + + QRect floatRect; + if (canFloat) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarNormalButton, + opt, widget).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + floatRect = QRect(left, + srect.center().y() - sz.height()/2, + sz.width(), sz.height()); + left = floatRect.right() + 1; + } + if (sr == SE_DockWidgetFloatButton) { + rect = floatRect; + break; + } + + QRect iconRect; + if (const QDockWidget *dw = qobject_cast(widget)) { + QIcon icon; + if (dw->isFloating()) + icon = dw->windowIcon(); + if (!icon.isNull() + && icon.cacheKey() != QApplication::windowIcon().cacheKey()) { + QSize sz = icon.actualSize(QSize(rect.height(), rect.height())); + if (verticalTitleBar) + sz = sz.transposed(); + iconRect = QRect(right - sz.width(), srect.center().y() - sz.height()/2, + sz.width(), sz.height()); + right = iconRect.left() - 1; + } + } + if (sr == SE_DockWidgetIcon) { + rect = iconRect; + break; + } + + QRect textRect = QRect(left, srect.top(), + right - left, srect.height()); + if (sr == SE_DockWidgetTitleBarText) { + rect = textRect; + break; + } + } while (false); + + if (verticalTitleBar) { + rect = QRect(srect.left() + rect.top() - srect.top(), + srect.top() + srect.right() - rect.right(), + rect.height(), rect.width()); + } else { + rect = visualRect(opt->direction, srect, rect); + } + break; + } +#endif + default: + rect = QCommonStyle::subElementRect(sr, opt, widget); + break; + } + return rect; +} + +void QMacStylePrivate::drawToolbarButtonArrow(const QStyleOption *opt, QPainter *p) const +{ + Q_Q(const QMacStyle); + QStyleOption arrowOpt = *opt; + arrowOpt.rect = QRect(opt->rect.right() - (toolButtonArrowSize + toolButtonArrowMargin), + opt->rect.bottom() - (toolButtonArrowSize + toolButtonArrowMargin), + toolButtonArrowSize, + toolButtonArrowSize); + q->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &arrowOpt, p); +} + +void QMacStylePrivate::setupNSGraphicsContext(CGContextRef cg, bool flipped) const +{ + CGContextSaveGState(cg); + [NSGraphicsContext saveGraphicsState]; + + [NSGraphicsContext setCurrentContext: + [NSGraphicsContext graphicsContextWithCGContext:cg flipped:flipped]]; +} + +void QMacStylePrivate::restoreNSGraphicsContext(CGContextRef cg) const +{ + [NSGraphicsContext restoreGraphicsState]; + CGContextRestoreGState(cg); +} + +void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, + const QWidget *widget) const +{ + Q_D(const QMacStyle); + const AppearanceSync sync; + QMacCGContext cg(p); + QWindow *window = widget && widget->window() ? widget->window()->windowHandle() : nullptr; + d->resolveCurrentNSView(window); + switch (cc) { + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + + const bool drawTrack = sb->subControls & SC_ScrollBarGroove; + const bool drawKnob = sb->subControls & SC_ScrollBarSlider; + if (!drawTrack && !drawKnob) + break; + + const bool isHorizontal = sb->orientation == Qt::Horizontal; + + if (opt && opt->styleObject && !QMacStylePrivate::scrollBars.contains(opt->styleObject)) + QMacStylePrivate::scrollBars.append(QPointer(opt->styleObject)); + + static const CGFloat knobWidths[] = { 7.0, 5.0, 5.0 }; + static const CGFloat expandedKnobWidths[] = { 11.0, 9.0, 9.0 }; + const auto cocoaSize = d->effectiveAquaSizeConstrain(opt, widget); + const CGFloat maxExpandScale = expandedKnobWidths[cocoaSize] / knobWidths[cocoaSize]; + + const bool isTransient = proxy()->styleHint(SH_ScrollBar_Transient, opt, widget); + if (!isTransient) + d->stopAnimation(opt->styleObject); + bool wasActive = false; + CGFloat opacity = 0.0; + CGFloat expandScale = 1.0; + CGFloat expandOffset = 0.0; + bool shouldExpand = false; + + if (QObject *styleObject = opt->styleObject) { + const int oldPos = styleObject->property("_q_stylepos").toInt(); + const int oldMin = styleObject->property("_q_stylemin").toInt(); + const int oldMax = styleObject->property("_q_stylemax").toInt(); + const QRect oldRect = styleObject->property("_q_stylerect").toRect(); + const QStyle::State oldState = static_cast(styleObject->property("_q_stylestate").value()); + const uint oldActiveControls = styleObject->property("_q_stylecontrols").toUInt(); + + // a scrollbar is transient when the scrollbar itself and + // its sibling are both inactive (ie. not pressed/hovered/moved) + const bool transient = isTransient && !opt->activeSubControls && !(sb->state & State_On); + + if (!transient || + oldPos != sb->sliderPosition || + oldMin != sb->minimum || + oldMax != sb->maximum || + oldRect != sb->rect || + oldState != sb->state || + oldActiveControls != sb->activeSubControls) { + + // if the scrollbar is transient or its attributes, geometry or + // state has changed, the opacity is reset back to 100% opaque + opacity = 1.0; + + styleObject->setProperty("_q_stylepos", sb->sliderPosition); + styleObject->setProperty("_q_stylemin", sb->minimum); + styleObject->setProperty("_q_stylemax", sb->maximum); + styleObject->setProperty("_q_stylerect", sb->rect); + styleObject->setProperty("_q_stylestate", static_cast(sb->state)); + styleObject->setProperty("_q_stylecontrols", static_cast(sb->activeSubControls)); + + QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); + if (transient) { + if (!anim) { + anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Deactivating, styleObject); + d->startAnimation(anim); + } else if (anim->mode() == QScrollbarStyleAnimation::Deactivating) { + // the scrollbar was already fading out while the + // state changed -> restart the fade out animation + anim->setCurrentTime(0); + } + } else if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { + d->stopAnimation(styleObject); + } + } + + QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); + if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { + // once a scrollbar was active (hovered/pressed), it retains + // the active look even if it's no longer active while fading out + if (oldActiveControls) + anim->setActive(true); + + wasActive = anim->wasActive(); + opacity = anim->currentValue(); + } + + shouldExpand = isTransient && (opt->activeSubControls || wasActive); + if (shouldExpand) { + if (!anim && !oldActiveControls) { + // Start expand animation only once and when entering + anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Activating, styleObject); + d->startAnimation(anim); + } + if (anim && anim->mode() == QScrollbarStyleAnimation::Activating) { + expandScale = 1.0 + (maxExpandScale - 1.0) * anim->currentValue(); + expandOffset = 5.5 * (1.0 - anim->currentValue()); + } else { + // Keep expanded state after the animation ends, and when fading out + expandScale = maxExpandScale; + expandOffset = 0.0; + } + } + } + + d->setupNSGraphicsContext(cg, NO /* flipped */); + + const auto controlType = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cw = QMacStylePrivate::CocoaControl(controlType, cocoaSize); + NSScroller *scroller = static_cast(d->cocoaControl(cw)); + + const QColor bgColor = QStyleHelper::backgroundColor(opt->palette, widget); + const bool hasDarkBg = bgColor.red() < 128 && bgColor.green() < 128 && bgColor.blue() < 128; + if (isTransient) { + // macOS behavior: as soon as one color channel is >= 128, + // the background is considered bright, scroller is dark. + scroller.knobStyle = hasDarkBg? NSScrollerKnobStyleLight : NSScrollerKnobStyleDark; + } else { + scroller.knobStyle = NSScrollerKnobStyleDefault; + } + + scroller.scrollerStyle = isTransient ? NSScrollerStyleOverlay : NSScrollerStyleLegacy; + + if (!setupScroller(scroller, sb)) + break; + + if (isTransient) { + CGContextBeginTransparencyLayerWithRect(cg, scroller.frame, nullptr); + CGContextSetAlpha(cg, opacity); + } + + if (drawTrack) { + // Draw the track when hovering. Expand by shifting the track rect. + if (!isTransient || opt->activeSubControls || wasActive) { + CGRect trackRect = scroller.bounds; + if (isHorizontal) + trackRect.origin.y += expandOffset; + else + trackRect.origin.x += expandOffset; + [scroller drawKnobSlotInRect:trackRect highlight:NO]; + } + } + + if (drawKnob) { + if (shouldExpand) { + // -[NSScroller drawKnob] is not useful here because any scaling applied + // will only be used to draw the hi-DPI artwork. And even if did scale, + // the stretched knob would look wrong, actually. So we need to draw the + // scroller manually when it's being hovered. + const CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:scroller.controlSize scrollerStyle:scroller.scrollerStyle]; + const CGFloat knobWidth = knobWidths[cocoaSize] * expandScale; + // Cocoa can help get the exact knob length in the current orientation + const CGRect scrollerKnobRect = CGRectInset([scroller rectForPart:NSScrollerKnob], 1, 1); + const CGFloat knobLength = isHorizontal ? scrollerKnobRect.size.width : scrollerKnobRect.size.height; + const CGFloat knobPos = isHorizontal ? scrollerKnobRect.origin.x : scrollerKnobRect.origin.y; + const CGFloat knobOffset = qRound((scrollerWidth + expandOffset - knobWidth) / 2.0); + const CGFloat knobRadius = knobWidth / 2.0; + CGRect knobRect; + if (isHorizontal) + knobRect = CGRectMake(knobPos, knobOffset, knobLength, knobWidth); + else + knobRect = CGRectMake(knobOffset, knobPos, knobWidth, knobLength); + QCFType knobPath = CGPathCreateWithRoundedRect(knobRect, knobRadius, knobRadius, nullptr); + CGContextAddPath(cg, knobPath); + CGContextSetAlpha(cg, 0.5); + CGColorRef knobColor = hasDarkBg ? NSColor.whiteColor.CGColor : NSColor.blackColor.CGColor; + CGContextSetFillColorWithColor(cg, knobColor); + CGContextFillPath(cg); + } else { + [scroller drawKnob]; + + if (!isTransient && opt->activeSubControls) { + // The knob should appear darker (going from 0.76 down to 0.49). + // But no blending mode can help darken enough in a single pass, + // so we resort to drawing the knob twice with a small help from + // blending. This brings the gray level to a close enough 0.53. + CGContextSetBlendMode(cg, kCGBlendModePlusDarker); + [scroller drawKnob]; + } + } + } + + if (isTransient) + CGContextEndTransparencyLayer(cg); + + d->restoreNSGraphicsContext(cg); + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + const bool hasTicks = sl->tickPosition != QSlider::NoTicks; + const bool hasDoubleTicks = sl->tickPosition == QSlider::TicksBothSides; + const bool drawKnob = sl->subControls & SC_SliderHandle; + const bool drawBar = sl->subControls & SC_SliderGroove; + const bool drawTicks = sl->subControls & SC_SliderTickmarks; + const bool isPressed = sl->state & State_Sunken; + + CGPoint pressPoint; + if (isPressed) { + const CGRect knobRect = [slider.cell knobRectFlipped:slider.isFlipped]; + pressPoint.x = CGRectGetMidX(knobRect); + pressPoint.y = CGRectGetMidY(knobRect); + [slider.cell startTrackingAt:pressPoint inView:slider]; + } + + d->drawNSViewInRect(slider, opt->rect, p, ^(CGContextRef ctx, const CGRect &rect) { + + // Since the GC is flipped, upsideDown means *not* inverted when vertical. + const bool verticalFlip = !isHorizontal && !sl->upsideDown; // FIXME: && !isSierraOrLater + + if (isHorizontal) { + if (sl->upsideDown) { + CGContextTranslateCTM(ctx, rect.size.width, rect.origin.y); + CGContextScaleCTM(ctx, -1, 1); + } else { + CGContextTranslateCTM(ctx, 0, rect.origin.y); + } + } else if (verticalFlip) { + CGContextTranslateCTM(ctx, rect.origin.x, rect.size.height); + CGContextScaleCTM(ctx, 1, -1); + } + + if (hasDoubleTicks) { + // This ain't HIG kosher: eye-proved constants + if (isHorizontal) + CGContextTranslateCTM(ctx, 0, 4); + else + CGContextTranslateCTM(ctx, 1, 0); + } + +#if 0 + // FIXME: Sadly, this part doesn't work. It seems to somehow polute the + // NSSlider's internal state and, when we need to use the "else" part, + // the slider's frame is not in sync with its cell dimensions. + const bool drawAllParts = drawKnob && drawBar && (!hasTicks || drawTicks); + if (drawAllParts && !hasDoubleTicks && (!verticalFlip || drawTicks)) { + // Draw eveything at once if we're going to, except for inverted vertical + // sliders which need to be drawn part by part because of the shadow below + // the knob. Same for two-sided tickmarks. + if (verticalFlip && drawTicks) { + // Since tickmarks are always rendered symmetrically, a vertically + // flipped slider with tickmarks only needs to get its value flipped. + slider.intValue = slider.maxValue - slider.intValue + slider.minValue; + } + [slider drawRect:CGRectZero]; + } else +#endif + { + NSSliderCell *cell = slider.cell; + + const int numberOfTickMarks = slider.numberOfTickMarks; + // This ain't HIG kosher: force tick-less bar position. + if (hasDoubleTicks) + slider.numberOfTickMarks = 0; + + const CGRect barRect = [cell barRectFlipped:slider.isFlipped]; + if (drawBar) { + if (!isHorizontal && !sl->upsideDown && (hasDoubleTicks || !hasTicks)) { + // The logic behind verticalFlip and upsideDown is the twisted one. + // Bar is the only part of the cell affected by this 'flipped' + // parameter in the call below, all other parts (knob, etc.) 'fixed' + // by scaling/translating. With ticks on one side it's not a problem + // at all - the bar is gray anyway. Without ticks or with ticks on + // the both sides, for inverted appearance and vertical orientation - + // we must flip so that knob and blue filling work in accordance. + [cell drawBarInside:barRect flipped:true]; + } else { + [cell drawBarInside:barRect flipped:!verticalFlip]; + } + // This ain't HIG kosher: force unfilled bar look. + if (hasDoubleTicks) + slider.numberOfTickMarks = numberOfTickMarks; + } + + if (hasTicks && drawTicks) { + if (!drawBar && hasDoubleTicks) + slider.numberOfTickMarks = numberOfTickMarks; + + [cell drawTickMarks]; + + if (hasDoubleTicks) { + // This ain't HIG kosher: just slap a set of tickmarks on each side, like we used to. + CGAffineTransform tickMarksFlip; + const CGRect tickMarkRect = [cell rectOfTickMarkAtIndex:0]; + if (isHorizontal) { + tickMarksFlip = CGAffineTransformMakeTranslation(0, rect.size.height - tickMarkRect.size.height - 3); + tickMarksFlip = CGAffineTransformScale(tickMarksFlip, 1, -1); + } else { + tickMarksFlip = CGAffineTransformMakeTranslation(rect.size.width - tickMarkRect.size.width / 2, 0); + tickMarksFlip = CGAffineTransformScale(tickMarksFlip, -1, 1); + } + CGContextConcatCTM(ctx, tickMarksFlip); + [cell drawTickMarks]; + CGContextConcatCTM(ctx, CGAffineTransformInvert(tickMarksFlip)); + } + } + + if (drawKnob) { + // This ain't HIG kosher: force round knob look. + if (hasDoubleTicks) + slider.numberOfTickMarks = 0; + [cell drawKnob]; + } + } + }); + + if (isPressed) + [slider.cell stopTracking:pressPoint at:pressPoint inView:slider mouseIsUp:NO]; + } + break; +#if QT_CONFIG(spinbox) + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { + if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { + const auto lineEditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget); + QStyleOptionFrame frame; + static_cast(frame) = *opt; + frame.rect = lineEditRect; + frame.state |= State_Sunken; + frame.lineWidth = 1; + frame.midLineWidth = 0; + frame.features = QStyleOptionFrame::None; + frame.frameShape = QFrame::Box; + drawPrimitive(PE_FrameLineEdit, &frame, p, widget); + } + if (sb->subControls & (SC_SpinBoxUp | SC_SpinBoxDown)) { + const QRect updown = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget) + | proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); + + d->setupNSGraphicsContext(cg, NO); + + const auto aquaSize = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); + NSStepperCell *cell = static_cast(d->cocoaCell(cw)); + cell.enabled = (sb->state & State_Enabled); + + const CGRect newRect = [cell drawingRectForBounds:updown.toCGRect()]; + + const bool upPressed = sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken); + const bool downPressed = sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken); + const CGFloat x = CGRectGetMidX(newRect); + const CGFloat y = upPressed ? -3 : 3; // Weird coordinate shift going on. Verified with Hopper + const CGPoint pressPoint = CGPointMake(x, y); + // Pretend we're pressing the mouse on the right button. Unfortunately, NSStepperCell has no + // API to highlight a specific button. The highlighted property works only on the down button. + if (upPressed || downPressed) + [cell startTrackingAt:pressPoint inView:d->backingStoreNSView]; + + [cell drawWithFrame:newRect inView:d->backingStoreNSView]; + + if (upPressed || downPressed) + [cell stopTracking:pressPoint at:pressPoint inView:d->backingStoreNSView mouseIsUp:NO]; + + d->restoreNSGraphicsContext(cg); + } + } + break; +#endif +#if QT_CONFIG(combobox) + case CC_ComboBox: + if (const auto *combo = qstyleoption_cast(opt)) { + const bool isEnabled = combo->state & State_Enabled; + const bool isPressed = combo->state & State_Sunken; + + const auto ct = cocoaControlType(combo, widget); + const auto cs = d->effectiveAquaSizeConstrain(combo, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *cc = static_cast(d->cocoaControl(cw)); + cc.enabled = isEnabled; + QRectF frameRect = cw.adjustedControlFrame(combo->rect);; + if (cw.type == QMacStylePrivate::Button_PopupButton) { + // Non-editable QComboBox + auto *pb = static_cast(cc); + // FIXME Old offsets. Try to move to adjustedControlFrame() + if (cw.size == QStyleHelper::SizeSmall) { + frameRect = frameRect.translated(0, 1); + } else if (cw.size == QStyleHelper::SizeMini) { + // Same 0.5 pt misalignment as AppKit and fit the focus ring + frameRect = frameRect.translated(2, -0.5); + } + pb.frame = frameRect.toCGRect(); + [pb highlight:isPressed]; + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { + [pb.cell drawBezelWithFrame:r inView:pb.superview]; + }); + } else if (cw.type == QMacStylePrivate::ComboBox) { + // Editable QComboBox + auto *cb = static_cast(cc); + const auto frameRect = cw.adjustedControlFrame(combo->rect); + cb.frame = frameRect.toCGRect(); + + // This API was requested to Apple in rdar #36197888. We know it's safe to use up to macOS 10.13.3 + if (NSButtonCell *cell = static_cast([cc.cell qt_valueForPrivateKey:@"_buttonCell"])) { + cell.highlighted = isPressed; + } else { + // TODO Render to pixmap and darken the button manually + } + + d->drawNSViewInRect(cb, frameRect, p, ^(CGContextRef, const CGRect &r) { + // FIXME This is usually drawn in the control's superview, but we wouldn't get inactive look in this case + [cb.cell drawWithFrame:r inView:cb]; + }); + } + + if (combo->state & State_HasFocus) { + // TODO Remove and use QFocusFrame instead. + const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, combo, widget); + const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, combo, widget); + QRectF focusRect; + if (cw.type == QMacStylePrivate::Button_PopupButton) { + focusRect = QRectF::fromCGRect([cc alignmentRectForFrame:cc.frame]); + focusRect -= pullDownButtonShadowMargins[cw.size]; + if (cw.size == QStyleHelper::SizeSmall) + focusRect = focusRect.translated(0, 1); + else if (cw.size == QStyleHelper::SizeMini) + focusRect = focusRect.translated(2, -1); + } else if (cw.type == QMacStylePrivate::ComboBox) { + focusRect = frameRect - comboBoxFocusRingMargins[cw.size]; + } + d->drawFocusRing(p, focusRect, hMargin, vMargin, cw); + } + } + break; +#endif // QT_CONFIG(combobox) + case CC_TitleBar: + if (const auto *titlebar = qstyleoption_cast(opt)) { + const bool isActive = (titlebar->state & State_Active) + && (titlebar->titleBarState & State_Active); + + p->fillRect(opt->rect, Qt::transparent); + p->setRenderHint(QPainter::Antialiasing); + p->setClipRect(opt->rect, Qt::IntersectClip); + + // FIXME A single drawPath() with 0-sized pen + // doesn't look as good as this double fillPath(). + const auto outerFrameRect = QRectF(opt->rect.adjusted(0, 0, 0, opt->rect.height())); + QPainterPath outerFramePath = d->windowPanelPath(outerFrameRect); + p->fillPath(outerFramePath, opt->palette.dark()); + + const auto frameAdjust = 1.0 / p->device()->devicePixelRatioF(); + const auto innerFrameRect = outerFrameRect.adjusted(frameAdjust, frameAdjust, -frameAdjust, 0); + QPainterPath innerFramePath = d->windowPanelPath(innerFrameRect); + if (isActive) { + QLinearGradient g; + g.setStart(QPointF(0, 0)); + g.setFinalStop(QPointF(0, 2 * opt->rect.height())); + g.setColorAt(0, opt->palette.button().color()); + g.setColorAt(1, opt->palette.dark().color()); + p->fillPath(innerFramePath, g); + } else { + p->fillPath(innerFramePath, opt->palette.button()); + } + + if (titlebar->subControls & (SC_TitleBarCloseButton + | SC_TitleBarMaxButton + | SC_TitleBarMinButton + | SC_TitleBarNormalButton)) { + const bool isHovered = (titlebar->state & State_MouseOver); + static const SubControl buttons[] = { + SC_TitleBarCloseButton, SC_TitleBarMinButton, SC_TitleBarMaxButton + }; + for (const auto sc : buttons) { + const auto ct = d->windowButtonCocoaControl(sc); + const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); + auto *wb = static_cast(d->cocoaControl(cw)); + wb.enabled = (sc & titlebar->subControls) && isActive; + [wb highlight:(titlebar->state & State_Sunken) && (sc & titlebar->activeSubControls)]; + Q_UNUSED(isHovered); // FIXME No public API for this + + const auto buttonRect = proxy()->subControlRect(CC_TitleBar, titlebar, sc, widget); + d->drawNSViewInRect(wb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { + auto *wbCell = static_cast(wb.cell); + [wbCell drawWithFrame:rect inView:wb]; + }); + } + } + + if (titlebar->subControls & SC_TitleBarLabel) { + const auto tr = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarLabel, widget); + if (!titlebar->icon.isNull()) { + const auto iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + const auto iconSize = QSize(iconExtent, iconExtent); + const auto iconPos = tr.x() - titlebar->icon.actualSize(iconSize).width() - qRound(titleBarIconTitleSpacing); + // Only render the icon if it'll be fully visible + if (iconPos < tr.right() - titleBarIconTitleSpacing) + p->drawPixmap(iconPos, tr.y(), titlebar->icon.pixmap(window, iconSize, QIcon::Normal)); + } + + if (!titlebar->text.isEmpty()) + drawItemText(p, tr, Qt::AlignCenter, opt->palette, isActive, titlebar->text, QPalette::Text); + } + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *gb + = qstyleoption_cast(opt)) { + + QStyleOptionGroupBox groupBox(*gb); + const bool flat = groupBox.features & QStyleOptionFrame::Flat; + if (!flat) + groupBox.state |= QStyle::State_Mini; // Force mini-sized checkbox to go with small-sized label + else + groupBox.subControls = groupBox.subControls & ~SC_GroupBoxFrame; // We don't like frames and ugly lines + + const bool didSetFont = widget && widget->testAttribute(Qt::WA_SetFont); + const bool didModifySubControls = !didSetFont && QApplication::desktopSettingsAware(); + if (didModifySubControls) + groupBox.subControls = groupBox.subControls & ~SC_GroupBoxLabel; + QCommonStyle::drawComplexControl(cc, &groupBox, p, widget); + if (didModifySubControls) { + const QRect rect = proxy()->subControlRect(CC_GroupBox, &groupBox, SC_GroupBoxLabel, widget); + const bool rtl = groupBox.direction == Qt::RightToLeft; + const int alignment = Qt::TextHideMnemonic | (rtl ? Qt::AlignRight : Qt::AlignLeft); + const QFont savedFont = p->font(); + if (!flat) + p->setFont(d->smallSystemFont); + proxy()->drawItemText(p, rect, alignment, groupBox.palette, groupBox.state & State_Enabled, groupBox.text, QPalette::WindowText); + if (!flat) + p->setFont(savedFont); + } + } + break; + case CC_ToolButton: + if (const QStyleOptionToolButton *tb + = qstyleoption_cast(opt)) { +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { + if (tb->subControls & SC_ToolButtonMenu) { + QStyleOption arrowOpt = *tb; + arrowOpt.rect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu, widget); + arrowOpt.rect.setY(arrowOpt.rect.y() + arrowOpt.rect.height() / 2); + arrowOpt.rect.setHeight(arrowOpt.rect.height() / 2); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + } else if ((tb->features & QStyleOptionToolButton::HasMenu) + && (tb->toolButtonStyle != Qt::ToolButtonTextOnly && !tb->icon.isNull())) { + d->drawToolbarButtonArrow(tb, p); + } + if (tb->state & State_On) { + NSView *view = window ? (NSView *)window->winId() : nil; + bool isKey = false; + if (view) + isKey = [view.window isKeyWindow]; + + QBrush brush(brushForToolButton(isKey)); + QPainterPath path; + path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4); + p->setRenderHint(QPainter::Antialiasing); + p->fillPath(path, brush); + } + proxy()->drawControl(CE_ToolButtonLabel, opt, p, widget); + } else +#endif // QT_NO_ACCESSIBILITY + { + auto bflags = tb->state; + if (tb->subControls & SC_ToolButton) + bflags |= State_Sunken; + auto mflags = tb->state; + if (tb->subControls & SC_ToolButtonMenu) + mflags |= State_Sunken; + + if (tb->subControls & SC_ToolButton) { + if (bflags & (State_Sunken | State_On | State_Raised)) { + const bool isEnabled = tb->state & State_Enabled; + const bool isPressed = tb->state & State_Sunken; + const bool isHighlighted = (tb->state & State_Active) && (tb->state & State_On); + const auto ct = QMacStylePrivate::Button_PushButton; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + pb.bezelStyle = NSShadowlessSquareBezelStyle; // TODO Use NSTexturedRoundedBezelStyle in the future. + pb.frame = opt->rect.toCGRect(); + pb.buttonType = NSPushOnPushOffButton; + pb.enabled = isEnabled; + [pb highlight:isPressed]; + pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + const auto buttonRect = proxy()->subControlRect(cc, tb, SC_ToolButton, widget); + d->drawNSViewInRect(pb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { + [pb.cell drawBezelWithFrame:rect inView:pb]; + }); + } + } + + if (tb->subControls & SC_ToolButtonMenu) { + const auto menuRect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu, widget); + QStyleOption arrowOpt = *tb; + arrowOpt.rect = QRect(menuRect.x() + ((menuRect.width() - toolButtonArrowSize) / 2), + menuRect.height() - (toolButtonArrowSize + toolButtonArrowMargin), + toolButtonArrowSize, + toolButtonArrowSize); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + } else if (tb->features & QStyleOptionToolButton::HasMenu) { + d->drawToolbarButtonArrow(tb, p); + } + QRect buttonRect = proxy()->subControlRect(CC_ToolButton, tb, SC_ToolButton, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); + QStyleOptionToolButton label = *tb; + label.rect = buttonRect.adjusted(fw, fw, -fw, -fw); + proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget); + } + } + break; +#if QT_CONFIG(dial) + case CC_Dial: + if (const QStyleOptionSlider *dial = qstyleoption_cast(opt)) + QStyleHelper::drawDial(dial, p); + break; +#endif + default: + QCommonStyle::drawComplexControl(cc, opt, p, widget); + break; + } +} + +QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc, + const QStyleOptionComplex *opt, + const QPoint &pt, const QWidget *widget) const +{ + Q_D(const QMacStyle); + SubControl sc = QStyle::SC_None; + switch (cc) { + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { + sc = QCommonStyle::hitTestComplexControl(cc, cmb, pt, widget); + if (!cmb->editable && sc != QStyle::SC_None) + sc = SC_ComboBoxArrow; // A bit of a lie, but what we want + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + if (!sl->rect.contains(pt)) + break; + + const bool hasTicks = sl->tickPosition != QSlider::NoTicks; + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + NSSliderCell *cell = slider.cell; + const auto barRect = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]); + const auto knobRect = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]); + if (knobRect.contains(pt)) { + sc = SC_SliderHandle; + } else if (barRect.contains(pt)) { + sc = SC_SliderGroove; + } else if (hasTicks) { + sc = SC_SliderTickmarks; + } + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + if (!sb->rect.contains(pt)) { + sc = SC_None; + break; + } + + const bool isHorizontal = sb->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *scroller = static_cast(d->cocoaControl(cw)); + if (!setupScroller(scroller, sb)) { + sc = SC_None; + break; + } + + // Since -[NSScroller testPart:] doesn't want to cooperate, we do it the + // straightforward way. In any case, macOS doesn't return line-sized changes + // with NSScroller since 10.7, according to the aforementioned method's doc. + const auto knobRect = QRectF::fromCGRect([scroller rectForPart:NSScrollerKnob]); + if (isHorizontal) { + const bool isReverse = sb->direction == Qt::RightToLeft; + if (pt.x() < knobRect.left()) + sc = isReverse ? SC_ScrollBarAddPage : SC_ScrollBarSubPage; + else if (pt.x() > knobRect.right()) + sc = isReverse ? SC_ScrollBarSubPage : SC_ScrollBarAddPage; + else + sc = SC_ScrollBarSlider; + } else { + if (pt.y() < knobRect.top()) + sc = SC_ScrollBarSubPage; + else if (pt.y() > knobRect.bottom()) + sc = SC_ScrollBarAddPage; + else + sc = SC_ScrollBarSlider; + } + } + break; + default: + sc = QCommonStyle::hitTestComplexControl(cc, opt, pt, widget); + break; + } + return sc; +} + +QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, + const QWidget *widget) const +{ + Q_D(const QMacStyle); + QRect ret; + switch (cc) { + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + const bool isHorizontal = sb->orientation == Qt::Horizontal; + const bool isReverseHorizontal = isHorizontal && (sb->direction == Qt::RightToLeft); + + NSScrollerPart part = NSScrollerNoPart; + if (sc == SC_ScrollBarSlider) { + part = NSScrollerKnob; + } else if (sc == SC_ScrollBarGroove) { + part = NSScrollerKnobSlot; + } else if (sc == SC_ScrollBarSubPage || sc == SC_ScrollBarAddPage) { + if ((!isReverseHorizontal && sc == SC_ScrollBarSubPage) + || (isReverseHorizontal && sc == SC_ScrollBarAddPage)) + part = NSScrollerDecrementPage; + else + part = NSScrollerIncrementPage; + } + // And nothing else since 10.7 + + if (part != NSScrollerNoPart) { + const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *scroller = static_cast(d->cocoaControl(cw)); + if (setupScroller(scroller, sb)) + ret = QRectF::fromCGRect([scroller rectForPart:part]).toRect(); + } + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + const bool hasTicks = sl->tickPosition != QSlider::NoTicks; + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + NSSliderCell *cell = slider.cell; + if (sc == SC_SliderHandle) { + ret = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]).toRect(); + if (isHorizontal) { + ret.setTop(sl->rect.top()); + ret.setBottom(sl->rect.bottom()); + } else { + ret.setLeft(sl->rect.left()); + ret.setRight(sl->rect.right()); + } + } else if (sc == SC_SliderGroove) { + ret = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]).toRect(); + } else if (hasTicks && sc == SC_SliderTickmarks) { + const auto tickMarkRect = QRectF::fromCGRect([cell rectOfTickMarkAtIndex:0]); + if (isHorizontal) + ret = QRect(sl->rect.left(), tickMarkRect.top(), sl->rect.width(), tickMarkRect.height()); + else + ret = QRect(tickMarkRect.left(), sl->rect.top(), tickMarkRect.width(), sl->rect.height()); + } + + // Invert if needed and extend to the actual bounds of the slider + if (isHorizontal) { + if (sl->upsideDown) { + ret = QRect(sl->rect.right() - ret.right(), sl->rect.top(), ret.width(), sl->rect.height()); + } else { + ret.setTop(sl->rect.top()); + ret.setBottom(sl->rect.bottom()); + } + } else { + if (!sl->upsideDown) { + ret = QRect(sl->rect.left(), sl->rect.bottom() - ret.bottom(), sl->rect.width(), ret.height()); + } else { + ret.setLeft(sl->rect.left()); + ret.setRight(sl->rect.right()); + } + } + } + break; + case CC_TitleBar: + if (const auto *titlebar = qstyleoption_cast(opt)) { + // The title bar layout is as follows: close, min, zoom, icon, title + // [ x _ + @ Window Title ] + // Center the icon and title until it starts to overlap with the buttons. + // The icon doesn't count towards SC_TitleBarLabel, but it's still rendered + // next to the title text. See drawComplexControl(). + if (sc == SC_TitleBarLabel) { + qreal labelWidth = titlebar->fontMetrics.horizontalAdvance(titlebar->text) + 1; // FIXME Rounding error? + qreal labelHeight = titlebar->fontMetrics.height(); + + const auto lastButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMaxButton, widget); + qreal controlsSpacing = lastButtonRect.right() + titleBarButtonSpacing; + if (!titlebar->icon.isNull()) { + const auto iconSize = proxy()->pixelMetric(PM_SmallIconSize); + const auto actualIconSize = titlebar->icon.actualSize(QSize(iconSize, iconSize)).width();; + controlsSpacing += actualIconSize + titleBarIconTitleSpacing; + } + + const qreal labelPos = qMax(controlsSpacing, (opt->rect.width() - labelWidth) / 2.0); + labelWidth = qMin(labelWidth, opt->rect.width() - (labelPos + titleBarTitleRightMargin)); + ret = QRect(labelPos, (opt->rect.height() - labelHeight) / 2, + labelWidth, labelHeight); + } else { + const auto currentButton = d->windowButtonCocoaControl(sc); + if (currentButton == QMacStylePrivate::NoControl) + break; + + QPointF buttonPos = titlebar->rect.topLeft() + QPointF(titleBarButtonSpacing, 0); + QSizeF buttonSize; + for (int ct = QMacStylePrivate::Button_WindowClose; ct <= currentButton; ct++) { + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::CocoaControlType(ct), + QStyleHelper::SizeLarge); + auto *wb = static_cast(d->cocoaControl(cw)); + if (ct == currentButton) + buttonSize = QSizeF::fromCGSize(wb.frame.size); + else + buttonPos.rx() += wb.frame.size.width + titleBarButtonSpacing; + } + + const auto vOffset = (opt->rect.height() - buttonSize.height()) / 2.0; + ret = QRectF(buttonPos, buttonSize).translated(0, vOffset).toRect(); + } + } + break; + case CC_ComboBox: + if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)) { + const auto ct = cocoaControlType(combo, widget); + const auto cs = d->effectiveAquaSizeConstrain(combo, widget); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + const auto editRect = QMacStylePrivate::comboboxEditBounds(cw.adjustedControlFrame(combo->rect), cw); + + switch (sc) { + case SC_ComboBoxEditField:{ + ret = editRect.toAlignedRect(); + break; } + case SC_ComboBoxArrow:{ + ret = editRect.toAlignedRect(); + ret.setX(ret.x() + ret.width()); + ret.setWidth(combo->rect.right() - ret.right()); + break; } + case SC_ComboBoxListBoxPopup:{ + if (combo->editable) { + const CGRect inner = QMacStylePrivate::comboboxInnerBounds(combo->rect.toCGRect(), cw); + const int comboTop = combo->rect.top(); + ret = QRect(qRound(inner.origin.x), + comboTop, + qRound(inner.origin.x - combo->rect.left() + inner.size.width), + editRect.bottom() - comboTop + 2); + } else { + ret = QRect(combo->rect.x() + 4 - 11, + combo->rect.y() + 1, + editRect.width() + 10 + 11, + 1); + } + break; } + default: + break; + } + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { + bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; + const bool flat = groupBox->features & QStyleOptionFrame::Flat; + bool hasNoText = !checkable && groupBox->text.isEmpty(); + switch (sc) { + case SC_GroupBoxLabel: + case SC_GroupBoxCheckBox: { + // Cheat and use the smaller font if we need to + const bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; + const bool fontIsSet = (widget && widget->testAttribute(Qt::WA_SetFont)) + || !QApplication::desktopSettingsAware(); + const int margin = flat || hasNoText ? 0 : 9; + ret = groupBox->rect.adjusted(margin, 0, -margin, 0); + + const QFontMetricsF fm = flat || fontIsSet ? QFontMetricsF(groupBox->fontMetrics) : QFontMetricsF(d->smallSystemFont); + const QSizeF s = fm.size(Qt::AlignHCenter | Qt::AlignVCenter, qt_mac_removeMnemonics(groupBox->text), 0, nullptr); + const int tw = qCeil(s.width()); + const int h = qCeil(fm.height()); + ret.setHeight(h); + + QRect labelRect = alignedRect(groupBox->direction, groupBox->textAlignment, + QSize(tw, h), ret); + if (flat && checkable) + labelRect.moveLeft(labelRect.left() + 4); + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt, widget); + bool rtl = groupBox->direction == Qt::RightToLeft; + if (sc == SC_GroupBoxLabel) { + if (checkable) { + int newSum = indicatorWidth + 1; + int newLeft = labelRect.left() + (rtl ? -newSum : newSum); + labelRect.moveLeft(newLeft); + if (flat) + labelRect.moveTop(labelRect.top() + 3); + else + labelRect.moveTop(labelRect.top() + 4); + } else if (flat) { + int newLeft = labelRect.left() - (rtl ? 3 : -3); + labelRect.moveLeft(newLeft); + labelRect.moveTop(labelRect.top() + 3); + } else { + int newLeft = labelRect.left() - (rtl ? 3 : 2); + labelRect.moveLeft(newLeft); + labelRect.moveTop(labelRect.top() + 4); + } + ret = labelRect; + } + + if (sc == SC_GroupBoxCheckBox) { + int left = rtl ? labelRect.right() - indicatorWidth : labelRect.left() - 1; + int top = flat ? ret.top() + 1 : ret.top() + 5; + ret.setRect(left, top, + indicatorWidth, proxy()->pixelMetric(PM_IndicatorHeight, opt, widget)); + } + break; + } + case SC_GroupBoxContents: + case SC_GroupBoxFrame: { + QFontMetrics fm = groupBox->fontMetrics; + int yOffset = 3; + if (!flat) { + if (widget && !widget->testAttribute(Qt::WA_SetFont) + && QApplication::desktopSettingsAware()) + fm = QFontMetrics(qt_app_fonts_hash()->value("QSmallFont", QFont())); + yOffset = 5; + } + + if (hasNoText) + yOffset = -qCeil(QFontMetricsF(fm).height()); + ret = opt->rect.adjusted(0, qCeil(QFontMetricsF(fm).height()) + yOffset, 0, 0); + if (sc == SC_GroupBoxContents) { + if (flat) + ret.adjust(3, -5, -3, -4); // guess too + else + ret.adjust(3, 3, -3, -4); // guess + } + } + break; + default: + ret = QCommonStyle::subControlRect(cc, groupBox, sc, widget); + break; + } + } + break; +#if QT_CONFIG(spinbox) + case CC_SpinBox: + if (const QStyleOptionSpinBox *spin = qstyleoption_cast(opt)) { + QStyleHelper::WidgetSizePolicy aquaSize = d->effectiveAquaSizeConstrain(spin, widget); + const auto fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin, widget); + int spinner_w; + int spinBoxSep; + switch (aquaSize) { + case QStyleHelper::SizeLarge: + spinner_w = 14; + spinBoxSep = 2; + break; + case QStyleHelper::SizeSmall: + spinner_w = 12; + spinBoxSep = 2; + break; + case QStyleHelper::SizeMini: + spinner_w = 10; + spinBoxSep = 1; + break; + default: + Q_UNREACHABLE(); + } + + switch (sc) { + case SC_SpinBoxUp: + case SC_SpinBoxDown: { + if (spin->buttonSymbols == QAbstractSpinBox::NoButtons) + break; + + const int y = fw; + const int x = spin->rect.width() - spinner_w; + ret.setRect(x + spin->rect.x(), y + spin->rect.y(), spinner_w, spin->rect.height() - y * 2); + int hackTranslateX; + switch (aquaSize) { + case QStyleHelper::SizeLarge: + hackTranslateX = 0; + break; + case QStyleHelper::SizeSmall: + hackTranslateX = -2; + break; + case QStyleHelper::SizeMini: + hackTranslateX = -1; + break; + default: + Q_UNREACHABLE(); + } + + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); + NSStepperCell *cell = static_cast(d->cocoaCell(cw)); + const CGRect outRect = [cell drawingRectForBounds:ret.toCGRect()]; + ret = QRectF::fromCGRect(outRect).toRect(); + + switch (sc) { + case SC_SpinBoxUp: + ret.setHeight(ret.height() / 2); + break; + case SC_SpinBoxDown: + ret.setY(ret.y() + ret.height() / 2); + break; + default: + Q_ASSERT(0); + break; + } + ret.translate(hackTranslateX, 0); // hack: position the buttons correctly (weird that we need this) + ret = visualRect(spin->direction, spin->rect, ret); + break; + } + case SC_SpinBoxEditField: + ret = spin->rect.adjusted(fw, fw, -fw, -fw); + if (spin->buttonSymbols != QAbstractSpinBox::NoButtons) { + ret.setWidth(spin->rect.width() - spinBoxSep - spinner_w); + ret = visualRect(spin->direction, spin->rect, ret); + } + break; + default: + ret = QCommonStyle::subControlRect(cc, spin, sc, widget); + break; + } + } + break; +#endif + case CC_ToolButton: + ret = QCommonStyle::subControlRect(cc, opt, sc, widget); + if (sc == SC_ToolButtonMenu) { +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) + ret.adjust(-toolButtonArrowMargin, 0, 0, 0); +#endif + ret.adjust(-1, 0, 0, 0); + } + break; + default: + ret = QCommonStyle::subControlRect(cc, opt, sc, widget); + break; + } + return ret; +} + +QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, + const QSize &csz, const QWidget *widget) const +{ + Q_D(const QMacStyle); + QSize sz(csz); + bool useAquaGuideline = true; + + switch (ct) { +#if QT_CONFIG(spinbox) + case CT_SpinBox: + if (const QStyleOptionSpinBox *vopt = qstyleoption_cast(opt)) { + const bool hasButtons = (vopt->buttonSymbols != QAbstractSpinBox::NoButtons); + const int buttonWidth = hasButtons ? proxy()->subControlRect(CC_SpinBox, vopt, SC_SpinBoxUp, widget).width() : 0; + sz += QSize(buttonWidth, 0); + } + break; +#endif + case QStyle::CT_TabWidget: + // the size between the pane and the "contentsRect" (+4,+4) + // (the "contentsRect" is on the inside of the pane) + sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); + /** + This is supposed to show the relationship between the tabBar and + the stack widget of a QTabWidget. + Unfortunately ascii is not a good way of representing graphics..... + PS: The '=' line is the painted frame. + + top ---+ + | + | + | + | vvv just outside the painted frame is the "pane" + - -|- - - - - - - - - - <-+ + TAB BAR +=====^============ | +2 pixels + - - -|- - -|- - - - - - - <-+ + | | ^ ^^^ just inside the painted frame is the "contentsRect" + | | | + | overlap | + | | | + bottom ------+ <-+ +14 pixels + | + v + ------------------------------ <- top of stack widget + + + To summarize: + * 2 is the distance between the pane and the contentsRect + * The 14 and the 1's are the distance from the contentsRect to the stack widget. + (same value as used in SE_TabWidgetTabContents) + * overlap is how much the pane should overlap the tab bar + */ + // then add the size between the stackwidget and the "contentsRect" +#if QT_CONFIG(tabwidget) + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + QSize extra(0,0); + const int overlap = pixelMetric(PM_TabBarBaseOverlap, opt, widget); + const int gapBetweenTabbarAndStackWidget = 2 + 14 - overlap; + + const auto tabDirection = QMacStylePrivate::tabDirection(twf->shape); + if (tabDirection == QMacStylePrivate::North + || tabDirection == QMacStylePrivate::South) { + extra = QSize(2, gapBetweenTabbarAndStackWidget + 1); + } else { + extra = QSize(gapBetweenTabbarAndStackWidget + 1, 2); + } + sz+= extra; + } +#endif + break; +#if QT_CONFIG(tabbar) + case QStyle::CT_TabBarTab: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + const bool differentFont = (widget && widget->testAttribute(Qt::WA_SetFont)) + || !QApplication::desktopSettingsAware(); + const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + if (verticalTabs) + sz = sz.transposed(); + + int defaultTabHeight; + const auto cs = d->effectiveAquaSizeConstrain(opt, widget); + switch (cs) { + case QStyleHelper::SizeLarge: + if (tab->documentMode) + defaultTabHeight = 24; + else + defaultTabHeight = 21; + break; + case QStyleHelper::SizeSmall: + defaultTabHeight = 18; + break; + case QStyleHelper::SizeMini: + defaultTabHeight = 16; + break; + default: + break; + } + + const bool widthSet = !differentFont && tab->icon.isNull(); + if (widthSet) { + const auto textSize = opt->fontMetrics.size(Qt::TextShowMnemonic, tab->text); + sz.rwidth() = textSize.width(); + sz.rheight() = qMax(defaultTabHeight, textSize.height()); + } else { + sz.rheight() = qMax(defaultTabHeight, sz.height()); + } + sz.rwidth() += proxy()->pixelMetric(PM_TabBarTabHSpace, tab, widget); + + if (verticalTabs) + sz = sz.transposed(); + + int maxWidgetHeight = qMax(tab->leftButtonSize.height(), tab->rightButtonSize.height()); + int maxWidgetWidth = qMax(tab->leftButtonSize.width(), tab->rightButtonSize.width()); + + int widgetWidth = 0; + int widgetHeight = 0; + int padding = 0; + if (tab->leftButtonSize.isValid()) { + padding += 8; + widgetWidth += tab->leftButtonSize.width(); + widgetHeight += tab->leftButtonSize.height(); + } + if (tab->rightButtonSize.isValid()) { + padding += 8; + widgetWidth += tab->rightButtonSize.width(); + widgetHeight += tab->rightButtonSize.height(); + } + + if (verticalTabs) { + sz.setWidth(qMax(sz.width(), maxWidgetWidth)); + sz.setHeight(sz.height() + widgetHeight + padding); + } else { + if (widthSet) + sz.setWidth(sz.width() + widgetWidth + padding); + sz.setHeight(qMax(sz.height(), maxWidgetHeight)); + } + } + break; +#endif + case QStyle::CT_PushButton: { + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) + if (btn->features & QStyleOptionButton::CommandLinkButton) + return QCommonStyle::sizeFromContents(ct, opt, sz, widget); + + // By default, we fit the contents inside a normal rounded push button. + // Do this by add enough space around the contents so that rounded + // borders (including highlighting when active) will show. + // TODO Use QFocusFrame and get rid of these horrors. + QSize macsz; + const auto controlSize = d->effectiveAquaSizeConstrain(opt, widget, CT_PushButton, sz, &macsz); + // FIXME See comment in CT_PushButton case in qt_aqua_get_known_size(). + if (macsz.width() != -1) + sz.setWidth(macsz.width()); + else + sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset + 12; + // All values as measured from HIThemeGetButtonBackgroundBounds() + if (controlSize != QStyleHelper::SizeMini) + sz.rwidth() += 12; // We like 12 over here. + if (controlSize == QStyleHelper::SizeLarge && sz.height() > 16) + sz.rheight() += pushButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; + else if (controlSize == QStyleHelper::SizeMini) + sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this. + else + sz.setHeight(pushButtonDefaultHeight[controlSize]); + break; + } + case QStyle::CT_MenuItem: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + int maxpmw = mi->maxIconWidth; +#if QT_CONFIG(combobox) + const QComboBox *comboBox = qobject_cast(widget); +#endif + int w = sz.width(), + h = sz.height(); + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + w = 10; + h = qt_mac_aqua_get_metric(MenuSeparatorHeight); + } else { + h = mi->fontMetrics.height() + 2; + if (!mi->icon.isNull()) { +#if QT_CONFIG(combobox) + if (comboBox) { + const QSize &iconSize = comboBox->iconSize(); + h = qMax(h, iconSize.height() + 4); + maxpmw = qMax(maxpmw, iconSize.width()); + } else +#endif + { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); + } + } + } + if (mi->text.contains(QLatin1Char('\t'))) + w += 12; + else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu) + w += 35; // Not quite exactly as it seems to depend on other factors + if (maxpmw) + w += maxpmw + 6; + // add space for a check. All items have place for a check too. + w += 20; +#if QT_CONFIG(combobox) + if (comboBox && comboBox->isVisible()) { + QStyleOptionComboBox cmb; + cmb.initFrom(comboBox); + cmb.editable = false; + cmb.subControls = QStyle::SC_ComboBoxEditField; + cmb.activeSubControls = QStyle::SC_None; + w = qMax(w, subControlRect(QStyle::CC_ComboBox, &cmb, + QStyle::SC_ComboBoxEditField, + comboBox).width()); + } else +#endif + { + w += 12; + } + sz = QSize(w, h); + } + break; + case CT_MenuBarItem: + if (!sz.isEmpty()) + sz += QSize(12, 4); // Constants from QWindowsStyle + break; + case CT_ToolButton: + sz.rwidth() += 10; + sz.rheight() += 10; + if (const auto *tb = qstyleoption_cast(opt)) + if (tb->features & QStyleOptionToolButton::Menu) + sz.rwidth() += toolButtonArrowMargin; + return sz; + case CT_ComboBox: + if (const auto *cb = qstyleoption_cast(opt)) { + const auto controlSize = d->effectiveAquaSizeConstrain(opt, widget); + if (!cb->editable) { + // Same as CT_PushButton, because we have to fit the focus + // ring and a non-editable combo box is a NSPopUpButton. + sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset + 12; + // All values as measured from HIThemeGetButtonBackgroundBounds() + if (controlSize != QStyleHelper::SizeMini) + sz.rwidth() += 12; // We like 12 over here. +#if 0 + // TODO Maybe support square combo boxes + if (controlSize == QStyleHelper::SizeLarge && sz.height() > 16) + sz.rheight() += popupButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; + else +#endif + } else { + sz.rwidth() += 50; // FIXME Double check this + } + + // This should be enough to fit the focus ring + if (controlSize == QStyleHelper::SizeMini) + sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this for CT_PushButton. + else + sz.setHeight(pushButtonDefaultHeight[controlSize]); + + return sz; + } + break; + case CT_Menu: { + if (proxy() == this) { + sz = csz; + } else { + QStyleHintReturnMask menuMask; + QStyleOption myOption = *opt; + myOption.rect.setSize(sz); + if (proxy()->styleHint(SH_Menu_Mask, &myOption, widget, &menuMask)) + sz = menuMask.region.boundingRect().size(); + } + break; } + case CT_HeaderSection:{ + const QStyleOptionHeader *header = qstyleoption_cast(opt); + sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); + if (header->text.contains(QLatin1Char('\n'))) + useAquaGuideline = false; + break; } + case CT_ScrollBar : + // Make sure that the scroll bar is large enough to display the thumb indicator. + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + const int minimumSize = 24; // Smallest knob size, but Cocoa doesn't seem to care + if (slider->orientation == Qt::Horizontal) + sz = sz.expandedTo(QSize(minimumSize, sz.height())); + else + sz = sz.expandedTo(QSize(sz.width(), minimumSize)); + } + break; +#if QT_CONFIG(itemviews) + case CT_ItemViewItem: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + sz = QCommonStyle::sizeFromContents(ct, vopt, csz, widget); + sz.setHeight(sz.height() + 2); + } + break; +#endif + + default: + sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); + } + + if (useAquaGuideline && ct != CT_PushButton) { + // TODO Probably going away at some point + QSize macsz; + if (d->aquaSizeConstrain(opt, widget, ct, sz, &macsz) != QStyleHelper::SizeDefault) { + if (macsz.width() != -1) + sz.setWidth(macsz.width()); + if (macsz.height() != -1) + sz.setHeight(macsz.height()); + } + } + + // The sizes that Carbon and the guidelines gives us excludes the focus frame. + // We compensate for this by adding some extra space here to make room for the frame when drawing: + if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)){ + if (combo->editable) { + const auto widgetSize = d->aquaSizeConstrain(opt, widget); + QMacStylePrivate::CocoaControl cw; + cw.type = combo->editable ? QMacStylePrivate::ComboBox : QMacStylePrivate::Button_PopupButton; + cw.size = widgetSize; + const CGRect diffRect = QMacStylePrivate::comboboxInnerBounds(CGRectZero, cw); + sz.rwidth() -= qRound(diffRect.size.width); + sz.rheight() -= qRound(diffRect.size.height); + } + } + return sz; +} + +void QMacStyle::drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, + bool enabled, const QString &text, QPalette::ColorRole textRole) const +{ + if(flags & Qt::TextShowMnemonic) + flags |= Qt::TextHideMnemonic; + QCommonStyle::drawItemText(p, r, flags, pal, enabled, text, textRole); +} + +bool QMacStyle::event(QEvent *e) +{ + Q_D(QMacStyle); + if(e->type() == QEvent::FocusIn) { + QWidget *f = 0; + QWidget *focusWidget = QApplication::focusWidget(); +#if QT_CONFIG(graphicsview) + if (QGraphicsView *graphicsView = qobject_cast(focusWidget)) { + QGraphicsItem *focusItem = graphicsView->scene() ? graphicsView->scene()->focusItem() : 0; + if (focusItem && focusItem->type() == QGraphicsProxyWidget::Type) { + QGraphicsProxyWidget *proxy = static_cast(focusItem); + if (proxy->widget()) + focusWidget = proxy->widget()->focusWidget(); + } + } +#endif + + if (focusWidget && focusWidget->testAttribute(Qt::WA_MacShowFocusRect)) { +#if QT_CONFIG(spinbox) + if (const auto sb = qobject_cast(focusWidget)) + f = sb->property("_q_spinbox_lineedit").value(); + else +#endif + f = focusWidget; + } + if (f) { + if(!d->focusWidget) + d->focusWidget = new QFocusFrame(f); + d->focusWidget->setWidget(f); + } else if(d->focusWidget) { + d->focusWidget->setWidget(0); + } + } else if(e->type() == QEvent::FocusOut) { + if(d->focusWidget) + d->focusWidget->setWidget(0); + } + return false; +} + +QIcon QMacStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *opt, + const QWidget *widget) const +{ + switch (standardIcon) { + default: + return QCommonStyle::standardIcon(standardIcon, opt, widget); + case SP_ToolBarHorizontalExtensionButton: + case SP_ToolBarVerticalExtensionButton: { + QPixmap pixmap(QLatin1String(":/qt-project.org/styles/macstyle/images/toolbar-ext.png")); + if (standardIcon == SP_ToolBarVerticalExtensionButton) { + QPixmap pix2(pixmap.height(), pixmap.width()); + pix2.setDevicePixelRatio(pixmap.devicePixelRatio()); + pix2.fill(Qt::transparent); + QPainter p(&pix2); + p.translate(pix2.width(), 0); + p.rotate(90); + p.drawPixmap(0, 0, pixmap); + return pix2; + } + return pixmap; + } + } +} + +int QMacStyle::layoutSpacing(QSizePolicy::ControlType control1, + QSizePolicy::ControlType control2, + Qt::Orientation orientation, + const QStyleOption *option, + const QWidget *widget) const +{ + const int ButtonMask = QSizePolicy::ButtonBox | QSizePolicy::PushButton; + const int controlSize = getControlSize(option, widget); + + if (control2 == QSizePolicy::ButtonBox) { + /* + AHIG seems to prefer a 12-pixel margin between group + boxes and the row of buttons. The 20 pixel comes from + Builder. + */ + if (control1 & (QSizePolicy::Frame // guess + | QSizePolicy::GroupBox // (AHIG, guess, guess) + | QSizePolicy::TabWidget // guess + | ButtonMask)) { // AHIG + return_SIZE(14, 8, 8); + } else if (control1 == QSizePolicy::LineEdit) { + return_SIZE(8, 8, 8); // Interface Builder + } else { + return_SIZE(20, 7, 7); // Interface Builder + } + } + + if ((control1 | control2) & ButtonMask) { + if (control1 == QSizePolicy::LineEdit) + return_SIZE(8, 8, 8); // Interface Builder + else if (control2 == QSizePolicy::LineEdit) { + if (orientation == Qt::Vertical) + return_SIZE(20, 7, 7); // Interface Builder + else + return_SIZE(20, 8, 8); + } + return_SIZE(14, 8, 8); // Interface Builder + } + + switch (CT2(control1, control2)) { + case CT1(QSizePolicy::Label): // guess + case CT2(QSizePolicy::Label, QSizePolicy::DefaultType): // guess + case CT2(QSizePolicy::Label, QSizePolicy::CheckBox): // AHIG + case CT2(QSizePolicy::Label, QSizePolicy::ComboBox): // AHIG + case CT2(QSizePolicy::Label, QSizePolicy::LineEdit): // guess + case CT2(QSizePolicy::Label, QSizePolicy::RadioButton): // AHIG + case CT2(QSizePolicy::Label, QSizePolicy::Slider): // guess + case CT2(QSizePolicy::Label, QSizePolicy::SpinBox): // guess + case CT2(QSizePolicy::Label, QSizePolicy::ToolButton): // guess + return_SIZE(8, 6, 5); + case CT1(QSizePolicy::ToolButton): + return 8; // AHIG + case CT1(QSizePolicy::CheckBox): + case CT2(QSizePolicy::CheckBox, QSizePolicy::RadioButton): + case CT2(QSizePolicy::RadioButton, QSizePolicy::CheckBox): + if (orientation == Qt::Vertical) + return_SIZE(8, 8, 7); // AHIG and Builder + break; + case CT1(QSizePolicy::RadioButton): + if (orientation == Qt::Vertical) + return 5; // (Builder, guess, AHIG) + } + + if (orientation == Qt::Horizontal + && (control2 & (QSizePolicy::CheckBox | QSizePolicy::RadioButton))) + return_SIZE(12, 10, 8); // guess + + if ((control1 | control2) & (QSizePolicy::Frame + | QSizePolicy::GroupBox + | QSizePolicy::TabWidget)) { + /* + These values were chosen so that nested container widgets + look good side by side. Builder uses 8, which looks way + too small, and AHIG doesn't say anything. + */ + return_SIZE(16, 10, 10); // guess + } + + if ((control1 | control2) & (QSizePolicy::Line | QSizePolicy::Slider)) + return_SIZE(12, 10, 8); // AHIG + + if ((control1 | control2) & QSizePolicy::LineEdit) + return_SIZE(10, 8, 8); // AHIG + + /* + AHIG and Builder differ by up to 4 pixels for stacked editable + comboboxes. We use some values that work fairly well in all + cases. + */ + if ((control1 | control2) & QSizePolicy::ComboBox) + return_SIZE(10, 8, 7); // guess + + /* + Builder defaults to 8, 6, 5 in lots of cases, but most of the time the + result looks too cramped. + */ + return_SIZE(10, 8, 6); // guess +} + +QT_END_NAMESPACE

`vp@>^9@LHskm{M`5* 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 z