From f5b7837f8384dd50a15173fd67886bfdaef70f36 Mon Sep 17 00:00:00 2001 From: yangning wu Date: Wed, 11 Dec 2024 15:41:26 +0800 Subject: [PATCH] Update mujoco to version 3.2.7 for cpp simulate --- doc/fun.dio | 8 +- doc/func.png | Bin 161261 -> 158672 bytes readme.md | 5 +- readme_zh.md | 5 +- simulate/CMakeLists.txt | 14 +- simulate/config.yaml | 2 +- simulate/src/mujoco/array_safety.h | 151 ++++--- simulate/src/mujoco/glfw_adapter.cc | 429 ++++++++++--------- simulate/src/mujoco/glfw_adapter.h | 82 ++-- simulate/src/mujoco/glfw_corevideo.h | 39 +- simulate/src/mujoco/glfw_dispatch.cc | 182 ++++---- simulate/src/mujoco/glfw_dispatch.h | 92 ++-- simulate/src/mujoco/platform_ui_adapter.cc | 463 +++++++++++---------- simulate/src/mujoco/platform_ui_adapter.h | 3 - simulate/src/mujoco/simulate.cc | 357 ++++++++++------ simulate/src/mujoco/simulate.h | 19 +- 16 files changed, 1016 insertions(+), 835 deletions(-) diff --git a/doc/fun.dio b/doc/fun.dio index c7bd992..8d68acb 100644 --- a/doc/fun.dio +++ b/doc/fun.dio @@ -1,6 +1,6 @@ - + @@ -22,10 +22,10 @@ - + - + @@ -53,7 +53,7 @@ - + diff --git a/doc/func.png b/doc/func.png index 11ac6d25aa606988a752ea4a8089085a39d64207..c2a2505a32d6e6dbee6f35e412aa2f13915afc7a 100644 GIT binary patch literal 158672 zcmeFZ1z6NuyEhDoiWne@sDL1fNK1D}H&W6d(m60NLx(6*0@4jiH%d1u(j_fJiF6D| zH+*Y|z2!Okd7ty1v%l{<@AW>{rQ^&!Yu10QyVmcHrS}sV(aYGkvC+`bE{lr^$)llN zz(qqllYn&&P%spY&x3!^t>r}p&~n;{X3)@XP}vBp*qGZH7@O&%kuwP%y(4FQWUZ@X zrccf!M9#>_0{#NZa|l#VA9_T3gd#BsgCFP_>li|H%)$4@dPm~K+KMJeLR_^j^XhGeW1q!V@1hnVZzK<&Z8kH2MRVx?ne zKbq)R+ZZ{Hd2IWq@E91`>DZ2K#OQa~F&z_ij&;WHk0$``9CI7IITpuXi-v*u==r~~ zPG8SZU*VXOhgxuobNY71HY&$lM7>u9?;p{z0FIzO38A+3=;Q-xQ>YLB$nAg1J8K9G zdMGh4g5j7GHabv4{bRj2)>YIB!PKZhsHy%VgQ5CnIyT1e-v=>1`fsu6crpJgl{+*Z zeU$m2_WZ9D@E;V8MW0=d8T{-&C>%TEb0$`livClk{pS^q;nA_i{I9f)`L9%s{cljU z|7f)^3u7CozP`4#p6T(Izp3H>7CZkA<}jRQ4inQ~nc`nChxvHie@DNLt?)PX`kgo0 zmi9JA5R0Qt{!d~NJ0r0CL)UxCU;PD>nAlE6{&(1PJn>(!2@0|PpQl31|5+9KJ3RR@ zZuyNj<}ee8E(Dx6x|WvUm7I~)4ERxj=TPv@5cSU5*c=8Nk*h3=9kyb^j8a>9Ia%W%--V%D(_-%qM30J5w1s=$MWf@OSIv z$$|8nVg8QIAW(297(y&`%!L0$Y`=rtzXPhBK826u_!pq}ci?sm(tgKn49C9t?*nd! znC~$Zs)NGQCr64U#Mt6U*^VLM6BGdqI04)z7I0!E>_=AfM`ZG^#6R7lF{@ALEvPE#T7<`7NgTuZSB&Tu^%yoIk|us1K^B4@Y<& z_3=+YfA|T-xc@Su{|m)9ww(XN^@5q@2$=j`dU4FC-yNzo$c+4>uAJ6{e-Uu}Q`7y= zhYyS=QRs>Ju>9o_jY1m0-XHz$4q5*OjLdKnVE-QWA05i5024g%Pe;jW1w&;c4kJ%m z>%%0?V=#b$)e^V@5K5hVe}aVmJg^==5kCP+z@m>PK0-_Xf&U=PM?K>=6FeQg9S6_9 zA795L9W!G?3t&pR!2VDvF9DPgj6oLX@$nbt#(H|FRK{P1k*DSUHwc!2fr0J>FdWPF zFB1_=f5`iH*`Az=Ctmo!l!iElFTbh$i4^`u*`5I6Bc=JjM!bLEmj6#=3)uQ+D)8t~ z{4>#dax9)?bx%GYr-hk>4Yh7^qM?zZi3>eew9}d&Iva9bbZ38$%e`FEQr4Z0W?^AL z#xnc|x_h~)rR_!V2^S0Zt^lTh+j%_F#+}}ASr;0`_EoXP^%j@8n3$NU$l3A?zMg!V zNYjkr+ZE|Od;)@K=$N?t$1m~Nm(rN$Xyb1r-Ne8mbwm5@sfs&)q+su^EeoPFAhX_~6a&+sE3>Mv*l+ANZe;RUZ5Z zMw9dVArmJ3_V;IFMtwpk1do)EV+g${Y8u2jwe@G(=$dY6b_+H^9GZALGEtGgJy_~l zM@rZ7kB%TeCEYvJg)_!|if|8yIS>@AVUKOz4j0EGQK`Ic)Z6n@foDE(bshFYI& z>rhMFkbvCp;vGSHvgBv!K#e5rDgV$Suq_TS-DJ$P$BAMc8QwELFw#^b-RFe7=?e(1 zs+5!7ClpfLZ(zk34)&!SC)+wSY*sBKg?qBV4~lMRfyouuMgO$+PcdLRYnfGn zKS`)}A4I@NmK;Ul6Y{PwAXH~vUlBT?;9?np6{A;H3=*Ae%MG=pXO4heq)qm~>tul{ zR6xh%wS4|CRWL{fOvgdta9S&{RPKS1x0N%<4rc-{`(%Ki{nW?)4+<7$0UCOOo0gWv zm6L59n(>E9u#o}!tJnTmAPqjyF-rQ{KQtQ?_YumO#9XU9treJASHVa>YNbC$x&p#D zJ#{Vj9~4XsH8(UletLQ~&y#H(3h28Q*a$M*>%t!k48sOG783sRHx>A|+5X#X|82Ja zHrs!nw%};^_i6j@)Arw|?Y}|t{|-pb#dg~1DVC?xwx^XyxbLmESjyve1RZfL0JioR zNS>p4e zmaD%21P<(bb^Q=;|M~JufVASQR}n;wI##Wh;rhkQu{^l>04XxM=TS`G=X`DOfW`_H zV@K^K&y9605(7{EcNc##J^ZE|v13gR@OUV0?hY!f-k~K1FWDEE^0a=mEHQPKm|P1# zvqsdd5LI9?pBJCY>14HaF91U%33hm2%7OHM?PFs8 z+Pg-YH}Vq?yhJ^^H+R;d07i>(RskUZwxn~N$RDxNA-8}|EZ+hztcw?TD{u&HMTF5_xSrj-^)(oG z7^TG<6r^s8@o0g2H#WlKT>@pxR=Z?qEGkMEp|e=U6nnLyb9sgXakzb<57jjo_1nhb zv~>KR`Y<+JE9q-rN;Iq(wo8X*o7wdJEm9 zcP-%Glitf0%Jlp~|D=gfd)C%n%BVAq*=0?mon7%Jk^y1k3gJZ1@+U0_Bl(#vTT-P&`L^0DpvUpp5 zq@tfZ!LFRV#3>z738Fp+6_#j&p6JHL#8iP03Vyv%R@l(h&8c|TB#mJxbSiprxJ2r# zzD+q^`hhFTf+)0zY+o;@jA8}7zO z0Xqm<4+HbF>H%Bd2?c}s* z@`yqwnkVuW=ZLXzOQq}1vf_d0H?j5^)o&3isT)5#%7;NaF5sT6i{?l2Cc*DI6ka98 zep5I>cNji9p)yAsDT)Q&U?b5quROXoe>TC=<$ktmN`SnOmyB^2262>4h%?uEWd|R8 z@O$3DE-&R(Mfrt2hef|Wg%oj0b$>JX{8wH5d`5mfW(YnNq5|&Qa+6PRVQ+b|vf4rO z=LTN$q+s-YiSCCM47j9FU*9%XR0b^ntPbZtEEbTjLqDSyOGvu0b7A5$WJ7T95_-ZX z74?N9cfNsA1BirhH0oq%6i{LJ>+w}?{&eT%@XZ%!fgaN#tmN+mXp&zxdm+f@)}AK1 zz;1E7e7H2rq4JbgEjgPF(yGy@@F*btBRBH;4fKR?YiG-Y7nf#PRNxkf8JlfnS#j|C z&_F577t?F-XF`4}NM7}uJ&w3?$_3%J0kVgNCCD5doZFo3y-ca_<0YHLE409aTw2>h z-8sqln4AIU5335MZ|b*PNmteC=X->SVC6UCmg&x>yosZV_dAdpfb{yP%D*#m;c%HQ zVb1Ll7)Ujn$YZqVRS6%n>$*#GM#yCNV0R^8)u>Cb$o#v79pT5HUxS7W;o{wCa?&GI z=ww}rHU;m2014@^6;9`Xz61h)_|{k2t>J)Ve=YNdWUfr>aLHA$^6H{Nbkwd+GI1G~ zQG0!Ml_pML;)~LFub(>PjeuLjbGs%ke7mKe9wALiYA#hfD};ML>wKwq=of;)5mf(? zOYY-*ZK0@rCE=)MzoSLKS6`BLM&ySpxaowB`}3vUl*-CE+NBnD@rfyZAwDcrQE(vo zC?9`TpqP3!!a5TFpaMXRuR}jxz}-5i;Y+g>RV{l~N5}@&anKjWb?6FCl3Il?P#dOk z_fW9go&Gr99HG6xzq80Da+hE4E_bpf_WWRlWLeR422wfKSaXIgZ^SkC@*I~&SgU#p zavy#Ew4)2i1XRwc5-ebmC|KKhuC0zi>$%w#U=CUH5k{Ba4R}B%gnMqf>%C zJN<4YwVjK%MES0}y7q9GC=Q7?_JoifoBP){#0t;rd?>|($phy<_me-geLLO|Tl3M> zhYi^u-#(6*Fh$^9y(bc~kzWBR+x_^mK1moEhS-lg=M^&LXUbN<68u1t>H;3Q-B{t` zq7(gGSaz^Ny-ahlwlg)3tLsBZ^U z=rn^#7IsPb4p#HiN~`Sl1;EKnBbOi&_{#g5gpVTS{k@$Ta@!Y!LFA$a-ne(&m318* zK0?{8HeYE}SqfXY+N-H;w2C9gHJ7$k=XF&xC|Qb*vMcHBd}$unWXwZx zGFi`p9@uQDVtZ;1ZGV9Z6mx2GF0M`SF}0wqJY~rrs70A0smem@Sr@MiX0U~x$oL5uh2U34co^9Qe_KdtqP_Y zV)oe%AXR0Q<;CW2n+e*R{7l0qig&7;#_Dm1xiag0@I?XlX_u}&2%CRwfB&JaOJi)c zmr#JkZt1K3;?5q)sqy}NzQQ5Ch8RII5g)ybZW7sei6`6a3Gg?rmG;+2%WU=wcGvo% zS#;}s?iqLLJLzWC2i$2w;9ne{{>%g2Ly&Ln74IzX)>?ZL(!WTOiGFNAhae416k>qM zmdVUY_J-5PgelZt;pm+m$b~cxkyKq{S%`PtzZ*!F-j18VQ70Kl<(DKLF7Cd9AM~Tb z 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 z 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 z zXbO>Hdl#!w)MAs8CK$M|htARc()IZxVjkLqBb)nlQ6i_s8aTx8<*|RB5NQy7iHVJa zLx>r0#qY}Tm(G~SsYK4cr@V_#bllJU{!1#3JA$U6dq2Q%L=I`}fcd1fD2-98)V!KPsWu$POqdYOUo@3alO5>EXI4{26RVvsL zD|xO*bTOBm0IoC;Iq%1#dVlLtv(3*>bn2hJ(5D`~%0GJ3ezW@cPnnqYe#Tt;l5j85 zZsyd@i{~*Tu&~{6@wd3IaN`%1ec~{Wf$JwV=sRpkl$|d3B+6Y=T%>&T{Z*;L1|5oU&k}$DKf6ntQp5lE(>}=j zJUg&my00ICA)~)LvTQs6tgqXatJ{1`-XVi2s(E8AW2K|B`6n|SChm3@=tS(Sb+V?l zHij{K?rip7^IIQkGs_ngucF}}ZP;4-^rYphrB9(Iu;)&h>7-Kv3W3)RcQswbcZnAE zsewB>pTLdOZppb(KGBN72JM$qu%o|uPcoQ~*QF+>N3o^ci&m7kHL^N`KUKgY7<1Qq zcY6cq<$Ds$R*5??KO|Vsb!Q19S16MZdU70-KG%`{-c3xyW(bE)KH&jnRrO4kUc)C} z*l3ntMWryP=5C&1F;F1E(=`YnFTPVhIL#g?(Ghj`UQQ`o0%zf1vL;siF{1RNc(bAG zSWUnOxJys`1C69a{vL1wr|z~{POs_TDt8^Y05{>zC3&|O*_xL&o(FQ$(^t!1L3^l- zQkN~=A)(`Tsltbo8;o{DQIn>fl+E%4Q{?lMK=<85;jy`VA4~9a?^}4Y*s{b}zexzJ z5a<3^#}9cJ&3qFb9(&|P!B%rUmdcy`jmvvYjZbQGi!Z$~Z24udHNAqVt8uQS1lzqY zfAGbGz(r26tcrbOZ1;P1WVXR@h6}7?Q|pxof7)0}4NY&Z@dp_3&sZRICvszH`b;G5 zK}1h;hPT=w?^d2bnqp7-BiE+`Mcrd@rA!^^Zb#p+=m*fr#o^Cs&8Bf!&3=43Skg~) zrNCw>N+0)%sNa>;e8Z+>!MA5Kj+T5;`tkbYc{M4xGmij|SiRIyo#kVkxk$kE07AHu zkmd2clWP0|PYbOVtn#NRibI$zr`uBbNKVnKWb1!XJaKfda(}()gc{1ExItP#LdABr zC&wt&S+*rcRNX#V!Og;SZ9ncZz9?8Fl|h~|{bAWEK?SOssv5&Bk%~%O$5z8tP}9R* z!+5>4XxfU5;HIlB5oTGfM_hs=Zm-5<3!$hCAt0{$rUPo!f*isiUBcaT8qNScA@MVk=6U~ z_dT=SxChwoQ62bMDw1uTp{z;QH645SQiBYCZUT3GRl>J)!eIL9v0A78T`Ei}aqo++ zA0cZLbgurf^!blO@Grrl51CD*{55%8N-ZPg!|sw3RLc$+X&v?wtA<(cvESn2u`@) z)it;{daU36jJS&*UVqnd{MW;T%idkTO?&vW7TEvlmx2FBRt9$L3`%R4^s?gkdUx#CkA3TFntHIw~6K71m+W@;bIi20 zjuh2Q%WX#vo6WCAU(6>MYv6bqz3AC%ei9d3#RmG6)qyH|SFMcEGqyZ9>-=b^WZ`IA z@XGV`KAe2JwSp^RtIkFgS$g%9LMJDDAOG}I+Nz1HJn_U?9OggN>BI3wn^ zYM|!Gk)`K{eSFwyvd-(4!;$ld>d-FA37q*8V(UP$zZYQ^T{^7Av$UYaFA9nEiJ}sM z4c|}F6HL)l9UIn0VY?6CYrmw^L&u*z-$}k~Q_*3PK33!ZUcs}n(80Lfhg2x-q$+Ax z1-2|gHQ1;e3RqfFC3$Rf)Tu?oYW6YsU;6vJbu)^}tH=@-ZNDDdUlN!m=%D!Pa#J9? z8CCvrm5-ar#uY|75_}IslJR_7$Nqk&J+pdUgF)N(vwaRtDW-K3+MzxVbAx&96JPLH z=kF9*CHDr1g`*6fMLk@LSM!dUPHTg+SPFoC)CbeVh0q=GS1Z_rn%suO%)d6^ikjkq&%s_7+Q#OUW}Nyj3kXXGydK;gJyBv~ zM53FdnH;q`*`fj$MqgS~)3$1A^b0RtP&9q7Q?6`2&ky-sMd5+U)c(O{PS#WD-lJ|_`9V1 z?`~$~CssKwUvdY+F#snL*7Mz`-Lte(_%=haA$BPK7_s4f) z-B-`~Iy}7Tis2g&vQAPfg-L}MKxiBFmh{BQ7D^#Ti_o?>49xJDI{CK`Qw z?S>$Mm{lF0&2~mL%&03W9L2G+rF&(dtL011jCpxJzs9_6wXPXR?J#w*{-^p?q7O@*PkZ#)a0&5QCE_8 zsrn83n{6r&ut$66_~sc>LOWOO)eQ$`c9(9OP46fju^u?uhM_ouQh3atrg%lQ zb>qqF^hA)p1@Dpv;8p1(H0T#?M}-0>QLEh4Pj+I7F}2Qu{loz!=G zS~xDsh2y?H&quW-#`0{W25{7DFSqb&L1s-3*Voj76LCC?WxJV=+ON>bQwBB851qh| zZBY4X`A%uo3bpvWlW&|(L%JcNbkuCV1ROzZqH+Ajm?z`;O|`0!&Rb>iP8GXj{!=JRW>YhSf>2HN)eakboQaUh|tM6GgU!d zcM--c#ZUsuOf9yjoUg*L1mB#d2>RsnRWY#Hs9I`P{RS(krIorlVf*U&Ur)kmuXktZ zz9;rTZ*el?!zIn=l}=l3^(iyW)@Kg;D|9QPvEB=wj+eA^1>epGU88Uk45w8P zyd?FZML~IT=XGrqAD3cU_YKuN`=X%Lzs`Ke_nES{H$;$K`SA z%Nv7ir_3cjF7hg8{L(31Z()3VDHF&!sjvidxw0iLU}E2+Zi|@G#t_?u0G(-gWTf=F<8;xL)+$k4HoA!*el1|99iLJ7QYwk}_pxmnmv;yI> zybG*)s~K|6lbdh(uA1-Z_5aElt}h!%6WeY$qOK_&!jgfwehu5i&sW3)f250|JeQZw zO;nSb`m8D?mPahUF2#(RWE{+xaVB)^+eNYN?on(9i4~KmbpX_-5(dDh>pwnfA z=_0D2o4aEq)H-f&VimGT{1~M>_T6}IY6c8??_TC9$X(j>9yn4dUV67OT{e|0_{r$6 zRM`|UgJveTc&q7Ej*HydeqI-t>z~!j7i1?sS*Yy3v_UzpWcNC-=f@ZBm<8i~?IX4m z^%FX*Ei=6Zt7Mn$*U4{5$R&4M*cS(AmgrKPuyjrUn3$S8pqs(X9!?w{9*)ta$R?yB2Xpe5>XN%Inn;@*EA2<4zH`Gn2zfO(W89@v}1_eQV!?oR}BgXEUFTzgdQTx=m)UI@L|r zHq+*MrUs+A(1Lp+B_Z*YUa619N53IBxul@5#A$0;Q?}4Rv6)|VHSV%UKdG)*oR`5a zNmZS|=TrCwA8#r)7r52jB0+U$G;A!Gb6Qi(XBY;!J>|7kAScf@nxXbZ=r!ZW_q?x!|_jb^T#8T&K96)sXPXY1K%ZJ)Lm zwpH_bL@l6j$C&iayuVlu=T~0w=Fo@FTPV*nEdNeMJc{HRJqY;AfU7~!@zxSPEGBS# z%Y6K0%Wyc4>{5mgce;3zlktT#17NxO^Ly&jJYcnkt3Kma-Iyh$l|iBus-x zV7xaa-fZN$V@wj>omsz29i<>{W!yv-zCoM{jO*HKkN3Yto1C-X{45_8;Ea{{@GPry zJjR=cms*Va+L+(R1-KV%Sfyo0UG~}yoe)`nda?L)tRiE;jlq`1-6e{3|6Jo~oZC1Y z_VX{fWeb8oZSMN3@}-n5cV8%;x@Dr800%7gw$s{-_TpZw%v~>k$ve3pQq(+^uXH|1 z>f*{nwpTu4fwZ(niV~|TW;Lym16b^Kk{!+JgC611ruD5`o_4tg<$8~M^cJ>@AEEM* zYENI$*5IOyJpFDLb*j;iBG%&d2NMKY227@t+m&fmcP{f-Z(TB`B%$#b@ZgD3cv0eI z$)JlR7@nGGKmBufxqSGzx;LX##*pw(;Ra)XvVp zgyz1ZJ$xA(9~VgDqL{v|s2q;x=~?jMW|qCUP>dLvl<6&&>H_ z`0izDI!#fC%MR}sPEYo9gPelqZ3|M~^ehX<*!<3+A{_U#R|_=P zjYG~oYftE4-0&4`EwQwZ*y~?f;_e5+I^@fk>{Zh|>PM9pu_ zaw&$+EwfkyljvLm-W#)f<&ss;n9PVnoj!%RWLv)`W4lE-pY0f%2ALHsL5qTV8Zg zd%gm{QRjPCH}a^w7q*!{=QUZ)FQ}~$hSRECNlU)%A8)lbZ7CX-;-^nbV;9P6=FF11 zZ}H$mQ-*~EIhWn`c=97h%{Rnto@*!a+1#o>9@iu-*f%#xxgzpwFz5NefWykTWbj)3 ziK+c>6Pf0DOG!89HUOMMPR9_@%D7{rQ*Np0L)b8q#7*?HR^w~nWTW3?y&@5rDP|P$ zyX0DbX%r4OQ43`^JNhg@aY?E+-bjF6gqNeR##4nVrtpXJHSgn9niLmoLn8Ac;)@GP zuQ=G}t`yKPL+8i#y8ui9K5NoK$2pJNMm6u9@ur;l5ugucH^DzO*IYPk^SF>f=lfv^ z<2%CFh6Y_HnVVWj8(-;*6>ON#s~L|IBL$);a`!iBh=|K+NH~vY&jA2G5oq{$GFPYn z)bG$bGz_3}aed2=!N|=yP_yW%d3RC!F6xfvyWZrjpIiV19N zc{;xDkt`^1*mXHJACx8hu-f&ET^h!i(WRVF3*RlzhlM;HL$PkRb-Pqc3PMmNc@U$k z;sR2z4D2MkE5sE?`?kcPg2Jnu6JHbS`qAdK24LE8}2I0*N6+<9H2s4_Wz$h9ytZ8Ws&rXqz``~`k)yRdUu zf+VM#-t$M!0gUy_(ZUnRL!cH^4n{4%ZW2<~`0_-P^>H#r#u^2L$6O5e3uQCSU)#28 zp)^p+d(N*Tu`Q&ArQGQ0GYhFeRuahx3Blwr#hbEGk3zW%zVmer>Ew z^1Ry~siJhiun>=C{}>&A%-!UZRS%DsQu8AHpb`^bH(z*rjk`-ERUfTbboED7Xd$i7jx4VwXYUpMDj7m59-1~U8a-1c7T}-L*Vs{IC3Li8uwzTT) z*01%jV=>j|D)9%i8wY~o@OaL5ufWmf-28gUH8f52Ua>2Ce`@+{)1$Dw#bb%BZM)Oy z&PQ<E zf7<)Xuqd}STtLA96eW}pkc}YSosx=l=OEIpgyawgAc{y!O9&DJ(h>tG(n!NFwA6r< z(#=_e3>&}m`}{fA_7^_a%$j%A6Zd_u_4-30>w?BA*mOpdG07X3J)!VX8pdV9gI-w8 z!T#^>tMdeXZcZdwY=NN(kGx8iUg@uZ*mS4HSj6TQE$lo=5nC*eKDuscEclKWI-lZTsdBB%Id{U~tMN{QFoyi65Qr8wl8al@`*0Xx`Sjd?-s=7@`qJAlJFPs$#|SOU z?-bfmKzM?P#7;~EZzc%B3gc1c&cR@GK|pX#qBivXAqKTW*KV~GAdd743Y$kd%BC;p z$%YID2N{rqD4~p;7(o00Zz*`c$8!vdr3RxNh%CjbWJKsDtOkrT69A@Z$H=m=& zwhcti7f}#%(roQC8$G>W>*wp{)y>#Bu5myv^zqV{vZUv}d#;5|m)JT3^GY|{)=o7^ zomI+zuU{}e`943%Gh->I(4}6#jO!Ii3!4GL+dPieBg4sQuG`pQve>u4|MiX0k;wso z&Llz{=x8o+K@O*vrviM}KDaDei`r&h=7{0V()dj1>>I~8)ez!4Ty3$jujZvwmHT_J zl-!sgQf@ul-7r`SJN4t2O#nI)Gqgup^TaeYOLXkCqCDAk-n4aR${SdZe%6=VcOUQo zdHZ=Hp=He?y5qI>s0yscMn^7u84L$@z zQJy188Qy(_JRUjDEabgqrU`AIJol9g-H{X^yzeALoU4Ad4h3&NXdT_JDJRDzrrq&w z5%u^HwMo!lv$&^SXr_FP(QC=NlNC293gG50yV0aNcVF0Hb3x1i6%*()xfq77h3lLe z2)ynKSM_p!G#4Kl=hG`*vn;Cye9GIz`I<{MRkMk?A0^jpD&@F$o{h6$dE`jCtal{S ztEHYB?tdp}M1F(?AbPc+--{n<(*_Fx#hF7-v{+tp*^cE%z6e1IucNKKYG(MnaQX8K z%RF^=j4AQa4&Q8YvbFbkG1006eoOXedy&KGttnZ{g+npLl_49nx9RH)G1U<8{8KHve*WfB%Y&!T? zh5W)`R9GD7QL%3=J1(62jDBMyKrH5ssRn$ z)N2NPVJdPp#A`C6i-!ekG%K+NzVJ8mGuy5KTr}-!vdYOq%Ny(3-))+%P41lC_gVb> zvoS>d2l7b(SF{h0T(+in+vI?@4(&>*-+jR3Whe8utVGS5*I%YILnKKTG$cc?b0GL>bYVGKm3j69In#ZOI?knLq zT%4uhwjI4lzB{KVJ<-$OQ^&AAgf1r^O;w#Qw4hpV5bTW<5ChBf%FShQM(-78X1ZVmX|nUfM&9> zn{=Nid_d)3%`mGn)&-vL~fO606y`h$?|qIlcYLfmieYK9=*in?mA#Ms?N zbr?H&nRchYG}4KkBQ-nVcO(tbW~btqZjJuscD>G7BZDI{+TM$@y4rG*wK-lSzVWdb zZcwp)=XM&)nY>(*^`{Tb<66NdMn-kYEO292Km1OB_t{1gkP9Ifk-(Wn+-LN83wXQh z#V<0GGv~T9q9rzbQLb%|&IP41Y#f|RZWdW4XYso+vJNwAk7TzZ79P|%O60tf3@t*A z6S*sB*+Xhsa{cMD0So5|S*O!gEmnvhUf|4Vmf)1mquW3CkC4!KLIKkab?feoOp|_C zT;E%chV=qFz8H?fTS7Eh|73O~xKZ)|I)6G8I`%T)+(TQi^zezaa>njOvl>h`B=X2J z2z`<*3QVz{_Zhhvs$*yGj-0vxoi1nS2(Y+HR(&fEM@G0_g%SD>hwFmlJNxO2o>55M z8lA^W!?GT?emC#9W+RoJo6~PgTx=81ry}lqKhj%I7 zYIegg;wQI}AnkLtPS6%aj5#`FR)3U$p{MfJLj?Q$%lnm7y-Y!FNDourv#` zseWI}>K1@sUA)BI+F1)7iwWY60>n+&d7?Sg z+%HGQDsAr-H!)lV{z#xbsT33UZFrQWx5(rhI4%_Ur}BE6*2aygyu#6ySGPlv_WuUr zR$2Ou%D6p)Y`j2=5wIS8EMNKVFN@3i-InA$C!Y6(nsDoz-HVG;k;ySW49(&7kQ+_c zni0;?_j*uc{F>t6mI*Jzn;-T(igqca60Xw<7q}Ie-93EUQ8IsKTS504Em{I%)_$04 zHB0NsLp+K^WAcDVx020TF;}>|o|#N?gTt%zH3YG_V^B9$7h2=ATYUf>t5~ji8-DBJ z&h*vQl#iTpfW|R$?v(Hpi;1<(+Katwh!?cB4|tidR26<=STQji2nltcuB-Qw* z!JEm*^ED?c(?E*|4~jiT4pu?ga12%y>IehS3!s24Nye6~(9K)F0{54AlCo*%^hANG zhh90MX;K%11wmC`_t(Yd?+1C4MNB)7TDXWnU>^deIL+*H*Y6qDqX%G6z1fzr9eQY4w=pm!9WqsIR|?eJh~%B|_0+j8EroEF8fMVQ>}B zBKc!~8-%9T!iL&Y|Ms^c__|uq*?AGtKtpG1NO5VT6t8a>9W0c>OBaA7>CsRNTIXAz1DS;Mxu*zuRRna}UGBO;x zr{4f-D0&Xm;kjx_jKQk4@{m$_{m;6z^W0ycrqNmU*tx$UaopG3A0fPjG<_GXX3cM?*n}_ z^k!duB8$vvb%w3XC*-GA7|8KoyXH2)yn+H))5`E%nVUgoXu7zmov+4iHf2_3sV|Vv z1SAwUI)~G!H`Y9Q-=e^^j0$nROiw8yls5ne3WR0VnK7})UR?4U&^ZJTz$}0K<)QqH zaM9d5aRfsB#`4Q12V&Ff6<28s)qAQl7s|I~{GcF2ZuR6|B0|HT3Zm-? zv!qYDhR$3b=D@cgh-o3^U7oGn2dY!+jjuxi(Ef|uLkQ(fj}PiV9%DGFIu;l zJ$pK8XOgSe$gg_;?%SLyYF-`Qu>chNn+08>`Q0*yF_iFSuA#S^!p-sdC2O`zYM1A< z9JJ+uWz_QV?c-AhzaC6uL=PqBAuM&t0p*KCS`huOBbMFFD5N!&UhlK`PI z-5x6ovJ}Rj6mT?jLNxISB-6`1^L1+!1@Dy3kN|?88K5Z}`W_0;EIju$Hb-eZat-@d zLr~NEkQ?4h%OCFRq~D#(2w>(P@Ke6L3X!xNpuI$D$<+4K0JnfcB;0`L z!n!9Vzm?v?D`SPY(5&4mxiT|_21Z4~%+fMC9J{8ECTajTU~QSSPUm-&H~697pCj~uSPusSgdf?7gm7$Sztx0OAM$mL zce-5Zs=PZvFGwP*;&I)5_z_Yq6`;yINUW?^u(>TGp#1lzsTm0 zd)Rp1>IdpIXIxnCy*lbfUx{021?M`YnR6Dx(h>ld~PIUvZt9(VF?GtfJK2C%?BYyTz>U(qv8-1jCH(2&*XNC-s)2 z+LD?{pI1oyfI3Yk$EWHbZ;1J*_wQFo9|(Fhn2w?1G-H~HcebUQcrJm63B0p^W8AHq z#|xnc;0;31Ks}nj7Q*;-{}sAIZofW7xU&|r8Vl6t;1yu+=ctArf3JXbXFw%Fqs-e_ zD}W3#FBq(XTNm7~R|5Hvaw12E+pp!A-^=hG$mkr|CN|y3b3lEdyycx3 zu;P$pjM_+mSZ8935)$k6#Q`}rapOibsB(&I?lu&F*9C!!nO~$(@fxOLCJLR_aZ4ID z5s5=mzCJWp&5t8K=y-x}^7XHXhlMkGb}viZWnMyHL$Olh@$949OhEgrJ|w=}ZTkig z5Ui8p$%`dYFKTkKbo0{ZnQ35FSM7?t{O(HQs31JFv~%^BBWNQ5@YZZa8l4A3K>E$! z5a~UD$-vw2kOg6RZncHp(RAPAXRgblkb1^lB5eAv5A$Jfq3beDCFf#$JgQs zwL`a|`*3~IeUITq^8Iqv5{P^#X;iAjEFh%DB;1x#T^2U{z4=xv{n{QX^8)UA3hoAp z=4Z3P-50v#{@W!e<_JElZ++IBew>$M`461^DEV#sfAI-_N%JduWUZonf@{;h)noE9 zQWR9dam3hklnJSv%4#gVZN|m=866O2&%WM*$)x<2m*VyG_oySo>+$cFGrqbXfv0kR zbQr0aU%P}&hx_@-Vnx*`^s~3Pc@pBipZ4B$p^rIe^fX@2(9nd;S;Jv?tFfd*!;&?e z#%GXzr=x%mwgLDzy6$W}LTlB^@cC>Omcb;byxAVg*{uEP@-(0c#RGdkslww(r(Z;u zq^tTHiYJG@ItP@K-F&@PTNRB8Vtv_>(Xu`eb29USlLRhJvmetLNaEJe>U| z&>1?pAf)og5Y; zaY=gK9k8t5y8f>js_mdtA8Zw694XIUcp!+l<99n@XTz%u&!f~~jKi`W@^2P%e7o<*EsrnSIcKov_e5?i`p@cbH&M2PL5DA*l3z7LK!7Hi={DX&=bS> zBiZe3Jc@Pw-v%i1x|dncQzI)61%TRy((lj+3yZ}2p3EK1RF;8g2G@&->TB$8?>o&j znT<@CzE1b2g3~G9SnH@c3~s%1Xx1F598A`1I@eKQQ0CAapj2tt7YkCO*=(G2OQUDf z^)$_lvD_K!UNB+f#KRx|)Km`VK`NID?5wqweK`{G}b$4@fhye4s&EZs^+;<#$f78zBrJ|BP?k-m5*xu_k} z5%$J*nLPr7y)~h+H{@=|&%bIxe|Ppz5Sh}TAiTggji~agw80&fb;Bo~r1Osgdyu$s z2xG%W-}0yD*F=Qr_3?;2zWG*NCj4cS<72MReWsvL(U1In@}1qIcFe|lTHB6)p7tRc z#$V_!dW7liG1-9+?0P}Xs+i{ez5@fmShlZN>>S&OUV^crdyLTI`Fmje`hY!`%v==H zWNr1)pdvTdxSfw}LAqexu2inGQek4#pIulh1?*%Gxk)fhKKL`ic0SKz#gA<=sQ@v* zJM7y3mlOghdP+dV%aJ9&jA`;y{!s|r5QDd2euhpP)C=Dn#PE-6^OKLN0;c-KJA#vi zHDGuI`^D3kWB|qNQIEsW=R~f$CG!0Z`<>SX6@QbBT7&fQ(4AdiIhuB;3J1>#1b~*@ z78rDV{cGB>&$5C<$LuD9^l_Ghg~NYzYNcsL{@om=E~Q7;rQeJ!zhma&_<6JeDf8d- z%KSII|LxxYUv}>b*wM>RPQ0WftrPAOkgr$PcZ_njaH1f5jC;w8WM7~Ej~7A5nWpHW zhIEYGU+_pjc3b%p*|XzH8Ve@{9eQjYj|O6b=bw=Kzzw+ECu4VJFn;d5F1VZqXbD_1 zUxr~qhd(E9LKpuL&p(c1Cw}t-aIppsl$iJiq~bvH1Jq}NLb?ROm>&XHm1C)WtoQi4 zcJuQa0Wk#$Jr^r+;_d$&W9Uz0kdwlA)30c^`+BR20`r^4ks=xd6}xhK#S?oFv47BI zqWYK2|91I2?Ra4A0%00~%6hiYkHfv$mVf@oiJpH4M#U`dEjFg7*o^>UcWTovB*KI* zEbL0O3}xsIm+`+Q@K>!Kc!GqIRMCEh8QphauFd2^t1)c> zJNnqH8BS>4DHD3KGr)MqGMHgux&hewvq4lvQLO*U`fDA4X`$4#?WAZt8tzBns(L!h zMaG;vm}zMP!^E8?e|kt1(I$U+9Zd7bAMF7xDiU*J9+!3;yscE`4N`&ZcBP#j5(c!XHtpnmFz6@vwx2a$LE?!?fN!X4SK>{GJn)G&?ZBCX159mSLY}e@_K_8J;9Pj$; zI5b!i#h}HW=LCPA0X&GH9O!{*Y50qi9-JRg0;Z8CueVP&=22(c0h>LQyKlyanKM6f z&;yIL*;7N}cLA6fe$Ae2tm7RFwpW<76yBeW0eVb@UWZ%;%~B^lIJ*E|`P1Ye(%}8~ zLbL=c+o|8DkODJjwdi5u@mxDKB(=|hiP-($v*3SP3v1{M^Xr-o7T9i-+x z{^)kmpQ0r~r!ej3F#iQM6SV4=!To=pLgqcdOwJFxM4wIEQanD9P{``{@Uz!y!PqDub#4ElR#(ZEHml4Uc-EQy74 d04{o=>4iTqYx1Vc#{&QE$tug_Nj-S_e*hh|&pQAB literal 161261 zcmeFZ1zc3y*EbH>sDKD4AQCbl4MT&JbW1k~%+N5@&}C3c$WYSKJt*C%s5D3pAt2I2 zNjJP_6n?b5?}|c*9w3xsgAyCJkP3)K^PD$Veh^4W)qp>aU+!FHhnWjBN%vl%AFQcXn zQ8eR_H&s`&|2cx4vF*u_AW2@3m^kJyn4JUo2a@CmiE)7L|Cs8>xVCQ6j>h&DiZBS& z2Iv5B`#CrtAFve6Y9Q`E8+bW+em0mpo-P0w5Yq$Gpl0du`$w3=Eg?{+pRbNDy_*@#=H#nS2D3LdKbi2C2DLwE`Ae&oCB)g{`#(gx-~p|R^9%;Ny_vGShm5sP1W$9d9dd?GXE|C#|H&7WpEsM-l7e@MY^l!LliI%}U$5p%5rT(h%s0~EpBNnk#W{qzR&QJ9-QQ~Tegof8c1 z_=96W4~`Q`I2${fLr>)5L{>2?1ct_R!VL9q3G4{9F?P0e`Lz?6{eMKJlg0c;BKKqS zKr!0~^UeR60RBnfxS@OyF5tC)BXE3R6HXqCi2l1o`>zWe2m6V{{72Hp^;e?C_cw^z zzumQPJ4n)O`a3lF z2~7EgHnwmpQQSTVFjOj z!HII>eB7)&oIiKsDfv!e^{+eg|0&{~fS6y1 zr}0y@15&37Gl4lf{m*pQpWvC9nHkvhFX0)4$ApLbZ?cwu0nfNjH|noM1@p6Vo)F;g z7RpnT^vllt6`jEx0kdEZvop4l`~$Q73UmJsu=cwh{>evs<9`Ete}!%*Fzr|5#&M#Z z|32vU1NDhHIvQgT^{G*@hgsVF6t)vk_yE%YbU20Fr#s+um+<}EHUIKW{f(g|IU$LyqfR{|$`g z;NW0A1q>&={mW1U=fC*o7jXGM z!d!r?e?$X+TE#zNt*3VJG_ZSme-atyl>90h14NOjuw*5~)ZGjhN6%HNYm9HNHi)^( zy5>=hj#BiDj#9CV0)MDSf!ka^Y`IGp89(hKSKlRQdzvXPI&HP@A{W-GQ<`*kb@tn_ zXL+sbP`=*1zE2-x;asHhJNY3@JZIpt=PA7OqLV-r3;XOZKiCN@gsf1`?kjb4Sk$Ne zFH(J%`)d-5{{;TJsyP|$~30$MO|M;YxBrI&2h7mAb$gh;SxKoH}9u=SqJ8jmc`x=R* zl38HOl0fzA+yoXl`C*~H=CWslaBO3B@PDE2MXHBJ*am(%56X!UJd*nRO7U^OOsw$m zXm4_DXZ|_w-W|~?PD6qFr(Z}Q`Zf`m-btzNmnO`^*HXZDaw9jMoi1wUInd8{h+!u9 zw1tY`GY+s44^N$2zpum-8%LsioQ5vww5K*BKpj;>fqxP9pJ{(c?LS2RN2LDQK>w(V zf0W}t7U&;)`wzPK2TT2f9RI<||Hqt>N2qglzD{~_Gt8Ni!4$mZivnfW*?+pG_Y1JF z(+FxdnQ#5(tG@OJoFF}$C*z7VuumTxSDIGJ*2jG2ifNVN->(dOczR9rt?yYk{I!%i zldL0Z!08d$3f7?^Ai(%ZCgeJ2F@BPtByh+4I8*OeCm3)C)PQCM4wZQpY~kA32vMv@ zUx~g7-R0XP6(l%!k>K1nWHH@Y8;m2BMc!EY!X2uI0zi8^L}k;InJ#GS2*o8f<45Z&M8y`$U)8s&?4>zk?eLY;{;?YCMq(SReLW z(+j@N_UMM7=}MND8*Js!*yZBcYOEEpNA-;bY&jTmmGMoUivxH_mChqXfKAh@u6~8; z(e*%OnNi$LePoV&1FLG0jzR3Em&U}}ZkuYZ4Acldt0|ItKM=vpUo5kmH=SWIpGL@| zuU#=Ln6Kd1Y#!xIbOl)JW9%gA)8N91Y#d=?4nvIq)!%&CU-e`$wD+&RHzKP`?dKL60?Z;fMg4-XBFvTX z3IP}U2C!VOR2j;P2g(4~mBrrz?-h>^9C@vn?-qM2FMUXB3St$f$8+%PiDlD|NJ?<6 z??&1O-$&5dl2z=dVdK=3xVast61A#p8y>CpsH2>;x*`gyisSPZY(X_=gA5Dr=(J{l zExu6gGWVJrvV>wqXnAqrnE^`tT`l&N@Kg8yM-=F(Jv8SDxksjufe$*cgBr2P^K$-H#P`o*<(HPdZ4WMiw7=!Zn$s5joEV#E4D)YxpM|Z!*1W(`qXeolnA^v zww!-3o8p@R2}3x}4!Eu;XqP$A{evp9dGWEKL?2t?Rc)>Gks~WZs5uv(iiL}F)Dq*ke+2> zw9vPI+46JoqiK0(VygIZx4bEasHSxH9Q(drdgbY%Uh}m^SCMA_k{iY@%PXJ4G>Mh%w`J};+ydUXmNFzEWXzKAZu=f^FhBV3H zf5?PK`3lH72I+2|3hXD}m8JUkmm29?`?}T2dK2rNtEX6B$m6XDGKc1I4Gb`-AfJZB z3-|Ou&zl3Xx|rg76w%os*fvw9cLhZX(j^*lFsXTpPdQe4?uV)^O$8<+x5HKYJ*as9 z1<>5ZlK?0vyJ}7A7`7KkTk_g;Y-&MzykC~$g&%&lz>jjp}BK*^^>&-gO+#TH``zPR_@8l|PE zn;fRv<$YiA2y*@F4kk0znRE=0`jsY?oyL&?a&dA{1wjHTu%e_SIYu*1WU+&O*8^uU zy4t4X5`p_nmUVxT9=Q&eYpWpJHLA5F4xyj%)vpQ|VU<1+Rygw_ut^Y{aMs=Zm4_!5XdQu%OEOA-)6|o8hZXK+Yi3y!=`!@8v3@*5Zz8k8`U20S1a*-hS zrsw){KHzjz5d?M9bTb6YIi_)sIpaMMVJ zK`JZI=vTc>%7Vg`TGWrpQFg7sZl_31d_Wn1XjZu+KXo?(WcaueL2Z4$C5j~y(jL?8 zVD*f5I(+>2h5Rg=Wz9tjfl{x;Wz*hK%3)6#GA-M*!WBzD8F#}vXN?i_+Ow;)nv2>i zwOfZtE6~kv{f>*D9jXpHY~9z|uDc%}Zi8l|IY34eUOlD{Tzjp1G!70c#-|70nL6%$ zAgyvg-gF{60ske#K!1+(9zB${_fI8rzHs*iIAy{ zhVJpbnd-&CTFuTBAqFkBq*!VEm9`Rd>sG93;1>TDdaHtWY8ih#m~4A{+&7ZlxX*Vz{Oe6N6$AvqEJ@Z9&shZNh|r>u zdbYS)ImYF+^R@ogaD`fDvM{R_YjQMYL&KeI-}>$GlDrvm;rkN7DO7K06%Y!-Z7(E? zXIZHj)O^t$uf+y5mx9+&(XWjgNrfBHI-?~{CAS7k#5+^?sYSee^^%2lKd!F7@-a-8 z2xVdijPSjdU2J!#DblC9^ z@ZMFDU<-55(8PQ!}GkEQVyz!bN?TZAv zlSmG8H5_Vc(Y|zBe4QGvQNi1c_V!!*oMA?qMK?B|oA#$^fUUpTsJy%3D);`wr3|sQ z^K0&#T_ER|pO?7~i;%c6QSCZ%BbxrwebI{5V2`gi&Z^>C`zzORsCDrcSTNwjm2^ zDBh8~%JlZi?(wXlm5Xn_cG07T?{ZhWzOcCCOq*qk+#(Sb*_i9o z_5^`0`=pU@+eo)dlW~p!M0pl0#{)nmNN=dI?w_E_H4Idd+6RkfJZ2gl;T=$dyhA62 z;VX}`qMx8v@9eeYPVTXBlNHK&v+I=@I_08D3qOQR@5TzQn<+4F`}Fyay*~U5l}+UO zD5y4AW1Y{1)EVZqSIobCC@p)KwN!dItw64P`^)is63TIgg?3%j#&dEU5M7DAZ40J` zdp;1pib<_y&yCdY6}&|)2=`vdXx_)+-OBe5#0pF@g=2NE>dMU6R2gV&@4+{xH(3_6 zT8sTTr*|g2hexRNucqN>X;^b3tl$ZIv;{L(_mqtqoc75X5?M0K-4m4RBoEg;R8q=V zk_9ER!pPAVRpVGJd(C55>jGuNzMRwN87gsl9zrpo=SdT*GHJnKBG;>#l&Se7=62wh zfUO0ZlI)NHyzVq_{Q1v?4Q*8kg%1RLJ*r%$AD8dtu>^t)0+_R^*QSJ;)tibmRE^*J zm(aKEX*{3aT{jxFLf$vzUf^{-NI!xxwQe%qfR43aDz=@pa^Lv=NLu`Z@=NVjFGF!F zUK@rtlP~x0eM)~MA#v`_K%wCxd!6%9>B#65!vl3Pt_3Rh%Op-Ug>mP74~}XI49a9Q znd4c^m2P+Y%*^Id!keG$38|$UIx(mhgg^t&RmKO>7XiRiB9zC6nt%{T;!MreD3DXE z)%Ij_StB8b>W5>)8i(lsXPZ6$2?k0tUX61wy3PbDhsm0hSnWSYkuKc4|#q@#D z4AU;(qD<9^7h9pjZDERgZ+n^Km2o7{XERdk0{E4_uS#Ab7KrMz(N@!SwFFHx25w8n z!ZuQmUKQL|=ls-RpJ+1u9I+Rv-eddFwIzlrpRM|Gk8t8SV_jD}5KFzqYNwZ(a{Qh2 z^C3N*CE7zKV6%WD{Dm>rb|vgIz)_PMIltHNH6PxoBh<994)_Bj^iQ_lF#t{o5HKMB z&GLu>iCpt8KejUx38=y-7sY&QdN6d1j6uJ4(YHuwclwR9^?0)b`UNk=E{gB8767EX zaT9Dj6^uAz4?K0RP zpaAT3U?ZE{dT^B&d0vBBdGlzyw~o?4gZr>rAUdb(#VUf^T)5ZvaS07}+SfjF8~Jnh z0XIxXTP$g29W9r0ScA`p!-gJaG9rQtp$dpOL6T_K2L7)FzBLzumXE!R*0Ou)8?3o< zsD%Q(=C#M7y49fHz6Y~1j9w*RdHLpn6#gw1bRMr!ENx3HX^@0m*#h{D2;$r(VjTSnF)0SH3uWR6kY0e|ojCY2`}hK*{DDNpK4L zkzi5oEYkiH&2VHvUo=cmdHKc5Hzs>tdoH*HN&F5{RxwCu<)`jmY1viBkBX!KGX5w5 zO28oF`A_UDza!(P7cs~<-J6tZxXktmSCO8WU_?aZjC_?GH$_n{zTtu&-MO4q^IOSIh zA5!i0-|vH)osm*lwde}r(J{D#s?f96scYXUb*rF!fg+n?)9+bL%>5jn)Cxc)klHhg zVTRo6QRlUgY`n7YdO4G{ zCtT8erIW?$=qT;6j=}zw*x{?X9^A^rV`|BQ70B&8O7l?iibYx@FaGAO6i-5`;>ByP zCclzkkoTJ>O)Vj-oTYt$e@Z}1#_v9r!IeAKmu~$!amn}_B$xu_|i_XJJ-Fz8woH}M(=IhE@60^Tym;CC(tqeEuNpqpZJY%ghb9ODJI zx`!$my?P4FoT`p{y^R!=N5TajneSv6rzxoxd#a!=e zv(FwB5>-#N(5!M>?h}-MMlO=N$iEtThf5v#fUYq=YRt}pM|7kAng1HJi7pL^Q&ODM z>(Ix*KNiyzep{|YV0yG3w`+>-CyX)?7QXyz+j=fm4 zYLyq^vWk-@;AKE3&`Ai8v|*EaijeoWi}bnq#aCJ07-PlFlaOBy(xS#*0r-I`gmg-GRnn!SZ?O49HsRlH zS<-Wz`aag^xHc!NLch(&1Z9eiPQ4yjxp8S3x2&}Lyp z0lQ3t`;R3qLE0iZghht?0SQb%*~tynPG6~bu+-pz*G_~ZVHTBRss)Ii%P8rL|L<|d zE10$fI7~mrB)VUgUF2H@nH7Xjbu}D0 zAMpCZty+g7rOQxmbwXj)pA`JbzA(7p6KF6+YLPz+CghI4RdZ01^C}z{_a%!Nj)dMo z5n`*uDrj%*bxE4iPP5vp97ua&<2Bj`*|@o{S|_FPr+Rid9qq@Jq<300M9@!f!BxYu zC6n%D2;UQNS_|rB?UU80S|cWbKbFf2@0H!S$wA?yhAPd?j|#i}$cW5 zDIF#x=zZ|I)@}96{94px&!#5@T%atE360LEkVgaaW!Y5G4oExDdOZzFL$V$mbyheo zeiz=Is2O41je&h(BLy!s@D*7r_{m7r;q&Gh_CR-(lQK4SJ{1t&F|$!wX+R5Y1D@&h z+Q$;d-S?!i^zk6s7*$O>VcLjv33yd_k(Txww{owcH@R&*jI?o_%G6Ek=`-0rhQ|l% z%1vFf%C5dI06$V-0F8c{dGXqv76jb$o^Y^C=um+Y|4@ZzLN9-Q!adG=C)mQLm&3;alpSc$sRkc2Z$6vb|H@xJ0mYQ_J$X;aVX5`p?22!yxS&sr<1`Dc zEFv3W(QPXCAt>UONF-WlzxAUNz!BCe`>m&K+lyWK{n5sgW;NVhuL>0W?%pjUWs>=^ z`SvR3!FJ7Vg$s}2mm!@~{KeL7$YaCfuTStZWeyF&**q=qr&sSlzz5nx5R7Q~&B4`Da-#*V+9aX(trYHGRXd$?I~<(A;v zd8Y;-N;r?oZ0HsE*hUhYwUiK#d$>4KrA&7v1CjDe)#tY?{t9(xX~MJ#fdhPixROYJPK5-D;}Y`V@`RiZ2BX zaii}-tag9otXi@#F^_5vh0DJo&x_PQVjdPi%tPt6;2fWUjFy1&0^7uUY5PQhRgadW zhM>~{Wwcnvj;U+C{XmqBDO z&?>xqy>_r$l%_OS<+GWl5MR=|n)*hi%6TG0oh3=n=Xj~3>zZLvkuWU`m6-xSi}%wv zq>GHI?oLW?T_=_UGcq<8LzZq!zkC@C0Ce4(X zbTh|+?Sk%PJXG&vxD`2jv#2E!?$$fg`*fo8(KX_iR>RfL`-*fA8kYM@(vg(;hS|Bs zJL2bp>B1?PowC9l1XzfvRJ3Bt3XE1mJwCRnN8yd0=X)^B_LF-wqA;EWUtx!s3 znv{8foxd>m?mHc|U&=LPP087Qkd9y#Cz=0Zoio*J@D|#DF3H6>kgtynl7ywv{Q7lE zIXTyZzp$WP2foZtUP+J)za}4FzRaB2ss;BbOu+3_BIA_V_c_XQf+NO;Dd-cAzSIgu zlq=@(d;4CcpbG(@w+@=yl1U|9(zWVfW!a1Ax-_1>yT-_??%qtfjsVvE%VD@cLQOo0 z&Sn{8yic z#PLf#i)OI0QWm;OFfXvuR}g7qSR*Nj6hu+fjf(9(C7tSu^{wxPm46wMNV=b)blF3r zk3s2BY9m@7Op*AqMidYbwHOHm5|?{nb9XYCVqEflH!u6jbfp$UItd$H z`q3KEV~rj){Y7~N@0A!gAnI#Gt#_U@;S&rduR zOEwiGF=s`azp?g3HPMAp3K(XECLs;R@~^-4s&WxL7gSy_LSw|W1gWfz9?@!Uniu9N z^TLtHdYJ=J1I!uE=*_G@SvdlXm9s4ctQ`96OUBF%BiaJ}^hY*^4XQrgTYVfV#3na+ z?82g$wT3o6^apmL8+!~!cy5;Gj=qlGxNUP_yfSiC=n}#Fc_T0^eq%mQBy%*OmyArE ziTc9UqMNx4eE4Iv0ez;;yW>&0S4y>W-1Y@gMXDnXAERm{{mmI;nl zz_26`T34`SdS;U;ZSP=fhP#ojB*q3&doC1T(yjl2_m)<@y;+sVZmqEqI!b`JT>XMv zrJDNJLdnBtjtAd`vsVm~JgZ#wnyY%7D721AlhU&8D@~d)Ux&v>#-;7Wae2H_xM}Id z{sgy|b>v}f7^+D{s~>Km*=uhB2Y=Z(XFWYxO4_cl5-NbM>vy=C{Ej;Y4ar^#WEE5j zEY_nIg;Y=&3kzSzcmq0-W^HrW=?3v2WkGsv7?Aa|5XMMD{otKw+W;}7` zvBfO?TrIkn5=SBq0U0pNjpmm&+uc7tb`*v$jx*&I&$h6dnulJ4E5>GLDjt@@5(zdv zM2z1DM8vh3x!qDy^}f0ycz;GQDLW~7udO?NG+#0)8B(6}R(3i~5j-oX=$BUH2(!-L;}2l5j}g z%Ddl)%q4M<^^Hl>+E6tn!q#W{nmPG!d9}dm4Vn!dSach4@mdFHt2m4#hWv3EQXIIFsNKMZcnY(+P5Z606MvJ zJ9dd3%0o7sWQp0u&q0L3qL_0k3gnzZItjggQ0N?svZRZ-^ds_G9F z4MJVeJJh!8e5-`bz~N;XbxxvUc02D;etxaG zpVi1Cc{`zF^pF-cje!d4QHN30=(PZNMb7m|Gew@GTKmpomNcbVC(XY7NRMMqfp_u- zPF2o_!m`QW(3;-;qN7%jQ-*XPUBHrcpEccKfZ|%EZ$25|t;)stJTbs1<33{Ooqa)k z^`}>FXlgELGsq(7SKX9>+zw6P7W&vPmIjWiQ!~q?=DjcOch{+hc{sncFIWJd@}Bck z!Ef{-Z27K*h@glK>9qKFd_S`&jjydzCh9V+3|0`^jQzU#3bu_4?Q&5})ahB|l>2*I zQ}HM(YV=!INC<+JBOp6XE-f*1bDu7To>DAHsxtVVZb>< zJZD)B(||KbBfd23dUNg7Ndq9S#7NR*=VtO?GA1cQekC<483dmmT+lkM8@sDt`Mua- zMMw6<=aMdD|7^-Mt~mnmaV=-lkb#MBns+jU`Yndu$Mxh#u6lOOFNpna;exf27_vTfcL%MlL<4=MSag5@)+H9X%1l_in|T%_QMroq*Pl#p*sX z*w55aoD|96w$L#W*yO1nTU;u;Mg=~s{7({ri?8qqh#57dvO0OUGY!*;M=M=)aGfOoO=Y-Tw+_oKk ztvk%cBkcTe=36MD=z)Wp=VG2}wk8}p%6NEVGF|F9>xE7q7-L3`lDt}W*1TNrfI)^@ z*E?j^w~fuK)-iHTBzsha0vzbCRVztH_o5kIy!$Rtxe-^~_Dt~;imjT{p=>sDEtB&K zwCehICv$xm8Yt_L3NJ4QDurkXF=YvG$Lt)npjw6syD@}nl^nUto5MjKm5K9OAOavX zh`}mjQJ8{@M_0~GPgAm$jkX&INf*zwqB{s+r5f}Ux!1#;Gxy)xsn)z%faUSk;IZf- z3&7@^w^BM>SHkLg(p=t8@h+6%4o}*GOEBwM`6+FbV$#c7}!$`p}iLM%C`Y8EqCvdaM8_{?=lC zB_B{kIw1LmKgHV2faW+Aj|!y+7lQPY)Qw$;-NCfr+G;DHGAT_-oI~wENHhcaWW*I6 zBN0M0)b4n7!OM_2L7y)l|2@Xv>JzDFY}|K^jEmf?xSYcjqaM_(G4vyfo8J(|pgMJT zZF4mt?Fe;ay1VfLLd1!%k?Fm?P6*BAYyzxAds9(2Zo9Zsg1ym6^4H4ex- z8@W){P^0BUVb7``GfNLw24pAj3yRI5r`OW};0ZklfvTnz>^5TS7p5C;B8ra}mWHj& zie5W$2e26d6;twxd&SWJ*oX*VA#c7>C)A+4-5+ptxIK>GaG={=pH3MTGAxJYW^_C} zu=Upp#i17EvfI*TP;K35pklR@^Am++@5FExzw+y^kLD ze92{Hxm>GVb z>->DtzHWJus(aKKdNoqT9z*wRDaQ;^84DZFW8jcOt3%&~!*6Y3JwWiYq^%+&xdcn) z;At=v)xBUiN;a{`MN;;vs;xo}>E$nEIPyqHFhh*{aF%Nx42jmz!;3=;0%`>ph~>N5 zjrNhnU21>%&RghZx>BKdu{Y2`4LyF?{k#U}+|w_;RLv!rrhz{gw9G+wDN4v%Mj?+l234 zn+6i3Va3zeY1}jS2y9n*~Ae+2b&hsQ$}M<`aKNZfP6sQQAV z;;O?P9!xnistvyr$fy*#9(=w8I^&oRYZi`c ze1JSOw53|eaI?sIaq)}~cQP3&Cx>lyM(&0Ykl~iq`#8e>9I0kb`6~Zw2pK2e^AfBG zHlTd&!|Da)k~PO3MnIX`DoN!#RO9ko zSC;V+yy7&C)x9JI(T^oVVK`v!AbchOu~5?)49QagZm0U|$>#n>Lb`%k->+`o(o7^s zS}oSOl^L#m>IOgp`pQhu9vm?FcUSzUvTOE4UUq5o7&uOMO)n9wl(I#nXMEY!^o?Du zu3MmW&w~V*3JAWtYdUbH*uL(l^cIZdjnA~l{6KY0`DOTUguv$A%C^K7CkW(NW!RDy z@EHe|`Y*g{Z?BQcjSoP1lr4Xe)AdSikRMSPFG8Qy@|$aZln(Z3cH{RxDD9mmVb#(8 z)I~bmiMR#7L{OzDb%q=$ZY%CKV<-MSvv(Fq_^sLWJ^_nz!KPhW;+l4zKwLH1bF`%6 zc*T8(-6Me-0H-4Atm^eyER~n9ji+~}_W@&(@NLmKX=bTfzG-h zKyyLRIW0%+X~?sZ>mhxy+R6sL%*KuG+mh&trg|WtgX<#Ks{vnS<$KzS>aL@3}^m0MRY^6E&Tu7Fl`1+2i^;M`cB=hKpHMe~Lm zS#0|B=blBa?Iw1(%vHka-PIefCwbuCrY|E$7oFh}3_uz_Vs4oVT(PsRu^5_=w;V4^ z;T_#CWx=LNaqNjpI(y&4Z?1PErFE^a&8r;LiE}lQL;-;#X)u0>UcpY2DkPU}N~Wj< zd)psBnv%D+Dcj#*#gwfXhNfD7sdu~7M+sWTE-;b z5HV99{H-%BG3k9IdQ!dEtl|i%<@)J+7IH5@YW@p!YM?`J*sgkGiFq>~weEJ&JhhN- zb+WlUT~G2*vNM5@2%9E4#}_Ey*5~t7=}Zxz7vxzYf~Q626Ve;r(kU~|lnA}uuhH*n z2v|iP(yKPKfX$Ffc&Gl;loX;Xa!+dkP7c^VA^?uGHdo$kEf;TJJc7)wC<9F!fv;ueEnf3epZev8eWVl(sh~^)-#tPq1hx4* z5gRMrN+SSb58x@(qh3lt&qmSe$PKwXXdr>zh&YTKT$`IXW6O&k=7ujluqQUhPWx!x z5W_sQ?#5llA@120_2x;LcT|zSyp%$p5xu#~=M>*+rYaHnSA|IA!x8VrfL!E#6F&=? z6eX~E{E-~1(PAir8-27u1(M!ci?wF}lfY>=tR5Pn9<%hFSd`tZ)#hpR;q~&?Rn3&m z_dXmd$wn|pay6C<;u%Fq$Zlu}?|D(jd*z)xiU)`rQjY$+vkz21OhM>x? z4*NWh&AofwjCFhWWwMKmU$Ywj@Q@)!O{@`j(yNguZVd_dvua5zQ3z!&v1ObM+6!A` z(y-FnYTcN7XWH}1!$*bh>75`ZLcaf=lD)!#M7(;pgR@(H6T5v#r%|9Z#uF1lRHY39!a zssP9yOve!(i)uL9lkcI!Wy4IIho8Q^_=QH%D!Mx?juS>5S7DMcQA`)I$cCmgc*FSO z)u%jtaBQLwTwM^!c3)s@F}(zXwNmd>B3>T zCC8wf_jqg5DLY&~laRl(2&lpLbUfN}xpMXZg+obA(Tm0|{Q z8P&YYVSR?>urH~FdIdHdq@1Ruxju;+=>F8$0>fe{J;|h<%=;2!L|WK1u)VF)LIHP~ zbCmrIYRM!(sJOMe6Av))i?1)YWB;C%srr$W*?)yg@DV6w+)C<630iJxzeEtcLv!ov zq7`cy8=8v}o)=!!#>E4j9uCGRz)z`&6PNS!JAp^s2ByERYo8@jz zW8cY^D;wTpiuAJ0Ug*;CvlyQrArw@)SClouEZUc6s%(k+Sd(!3B7t|&XbKPtmH(E} zc}C)+qc<~JSHxgm2vXZ;_qiv(ZoAx}vvhUp-C;`UsPjCxI#~sJYKdTYD^67^)?9fr zRl}ThL5uAgyf7Up@%)-vn0}>oi&uwBwcE1#{77M0d3Di~>LUC!r7G2IgQ5QEO?SW# z-{(^4TKT~rk3*{-YYVoNC31j2{WY4hXyuUbGR`MLPT!bGC!vTh?R?99Dyesg!@!Jj zk!BI&h6giBu`wuv*Dm#t*5sBo2j?>f&fD}1@tH4k7OI?~!w5@6_Cvd(S(m*X%Uq4D z@^VVJ_s~GP94UXE0Rz2a( z{nwZXD33@Erh<$JPWY?{7n{Z*aW75DcQq@K-(4avYVD}uf+uHS#Yo<?oj4Npl>(o2{F-l215R%8g`mW9P$^}dyHMex+xp>| zIU~1)WeEmW8>%t+pj_?3WY9WO6t};Z>#UybxUIk@$!0i`?{X`xVzONM?Me#_iP4MZ z-ATRG?P1$_WAV`SOzWC}VY8Kn<9hwdbsBA$p}V&Ua6Vzw0KFe7Dg(F_77xTd@K#4D z%K?~dBV4OP2$G%a?|S=E%oI9vcJg(YR+8r+pTQ^RV&`>2+XWGyV{tGYUh=E3lIfq$ zap%IsvpQ=Y_bEsmm#VMO!!KtYpd;OdX+A^yX;EE9Vo0MZXnXTLSrms5K9990_6LjL3(;5fmbY?^mAxRx&{K^~YJMCj{!)X;HZ%(V?E5 zZalJzOgIuWPo$J%8M!wp=i>dxfSfc}o=U6DCRM)cRzfy#7L0Gn4Je$B=%vTIFr?pp zr7uIn97vx9#pT8HIgn5Zz$f2G1QB%SJ0$s&RBzp;3)S_R&^QKM27ChVTOuJ7#7}!~ zAR}=kAFs^rucikgmL|imq=W*sMe-4Z)3qKhA!M;^2uUEaQs`Z!ls?d7{aJg-I#LQh z%As+S-YOF)l-9JpG`5|LZB!n6u7u8N_Q+xQO0i3mgZw>L8y$KedB?T5KbM(8YgIZI z6S8EN4KRf`y?z`}+rUwfmd1F%NVu;a_?OS4%w6OQ2H)J9-)i7#^uUkY?X9a(8_K_A zK}IhhtuU}+kiE1u4>;#{G?a|+=i$ETS>aKH({gU3;WZRFo(0dLEUb(fX-q7FWl@?* zUapDLwU+Bpx0H!tAQ2GCG7=73=Zmi`kANnrfC!Raw#a=3H&{r_7zlYcFo3o-4Xvae%y1_R1*~b8~ z71ga<_cI=LI2y%`G(0U^eT*BI^Ex;V!J9t2BGz!cm5?ECatkk^#OC=_r_qOYF6LaP zQ=g#ToMng>s68!#*uab91&kH7^7<`lfO56&dLGAz_;JE2$5onH1yzvwy}Foolub5} zDvO=Iym>(gs6rP9>Mda9Ocm%{weh}rm=yFlPH;`drVB>lU=3zv1PW9$>AZ*JfP*F2 zG|IPS0O)ggV@tO5X7>+%ovFV10w{EL?++{@ZwkI4?UMW@b!qF};ROVnt)Ui#un$wYs@LxmmLxV5mu*jWbc+E>z(IuukM zD|Oqn3WMyJGmlMWkX6DDkx`baGSvzxvRn6tXdR=PZ+DDn+`*ARK6M-I#MqWv!S<`a z+ZL}MwKyDrDif*oHMqxzBQa^t97zaeaxY&!Mp^Y%6Zh0xUM<>towf?(RA^NYQ^QF4 z8F_kMq+zj%cKANCQB_RHOTMnjtuY>2(T$>qGM5R2Ja$BjeF;atuf{c41!7XwBTa3S zTdsD#cl=8-uf**37d&_nMmd&EF`|=G;v4Q#Y`;ZoTT{Tl-jc>$b8qXrWaCdK79hSh ze*+K!k*{l&yc+v@VGu6+f<2fmW)4pI^9*VY?jX15l#O9y0m`mw3CB7Lh%V2p)}H=%z%&I=W@I=VcK#idpkd1t8#q#OpPpXWK+m) z#j-JrJHF-7=!JW>%j+(?xU-QA&o@xHRb=fNeip;uauL}t4!6eot1l8%5q^UU0_P5k z*O%FOe+O9KfpCL+c@w4r3COOK@{GCem467k-laY}t3(+q2XeGnaP*H`QKnjx^s`t9 z=tn;$#itiv)*Eh97>pOYln5?~jaTfb6v$57C1ZTLp5!jV`n{0ZmEjWFz ztC3MNpI*GFqsN8gwfTiO5vRvnWg$9_t;JXO9w72}chH;2C9+n)Vw8#J|xi*t85TyU6)98*l&?v60TM*6m$7MFKjwt{Z36OMz-xB)H^yLLn_>f{n)*o_B|s&s3U$IO){{eR zH}O2bq0a;p@juJ8yhepP%+&66jY<`jo@?C`BDX?4338re&)OP~jeZurr=KSE9J!?G z-`7`?#l*<0l4b)nQu?TFgq{l3-^ESHvz7#6Hph7ZrC8lYzK0;nCf=jn#Cxt~L=46U z>$V?Dc05ut6+e4o$uyiSey@z`XC{;1_hzSCtLAgxd?yQeS&{YYnxcWuX`$;?u>reH!HKk-n> z#G9xoDN|cB7Apc;>U`@9j_HN)NYcqo7#3PC>H7HDF7l}ABN>Ay8BC-l&?x_fji#)5 zG@!;Bu)057i-fe^J*<1xq6&)K^hBN84(}wN%on+rsr=#{I~S+bo($%6Vd0ETKST=u zCQAvO`xeWM{F#hB+p*NR()r;}OVq&T0OA#AnQs7xH268r{Ogy>{fvwAU3=|$QgynC z2w>8#+I{5})4kL7LeuuB7C?3nioya$jSiN1cfU8{D_&LhYd*%olnS!InTR>QjEm3u zzPQOD0xmli)5sl|^`9C{ts9=O8i28S2P$33%N;bk1(4rP63|4s+`chfh=Z+f{#!b? zfCAH~-CB>=LV!cz&a9)_#C6LkX*g49r8q5$<)sQzUm$y_+Nam0r}1k*B59;la}f4u z*%E?I8Kj4=UusgFwXfb#)W2eDppspl+dEQlcZ3HSF%X(}(`89%aPZk~-55PKO}_uU z$l%$m@C4S$fVpw3z6?AgA=(HUY23A44OU$MD)f%C=;cUI$FZZ_I$_E&SP{qPf=Ie_ zXr5FrL{47Q(+MO1w6|UTOW_MtqoX7MRCiH#H&3#t+L}h;KS+?K3S%)!w^pAWzr7LrxgXTT z1B`={0>6%(PGaMg&BvjjK;$#8B)oeqDRW3pacM>z)QxM8-`(5b%S3EU^wj2bG29h6&w95$+0NzPY(#QVd2(em>h^zanftAbhjP?MNwignTRcOs~R6JJ*tPz3GHXK zhn6b`Xuf?271)g4?FpEn*I<>fgT_|5-jh#xh6)J5aKf$oM1#XpAazD3>{xa6d6`4h zx^9}&nyl9|Mb}iiuWvzpvTAPf_uGuobAjm~B@@Wt$Q=<4dRq^$ag7GE)woy}KM#+Y z{`%Uu5`h>)ljO(0E}#DFr$veNPI%#zR7DkN^#ABPRq%rAOUHy8ggC(<&G-v*Vc4Vk z7E-z=;zUl(PkJw$xx-=R#D)4Tu`z&P;X5Ok#gBI5|I%a5Ww zak~=DS~_xVdKDJ3W1t~oJ%-%+cH-web{PfML58JqU(E0;uQk=hmxxCzxvvgL7qmb! zWI!DYpN6uNa9}R!9Al^fjPp#KQ`lQ(fgq~KcR=4Q&cL48)KuLdntvX-+?w@pqUP3_ zr0Cmew45p$^`vJLZB-2TK$4ZYvs$JzK|e!yfYL;{NN|87Bi2z8L#x#h`Bcyy6JbE2 zA=#khC(K5B0uDbopGDveNd#xnY9`aO^HQM;?GuvAMnuqPTiR}}f3S|} z*5jL%C*uz8m#c4h_KqD?+-N3j6E6`AyEGWiNzgQf zZI|&_u{U;++fn6J{fDVFn)SsF*^t(l%mogR*UB~g$`|81qvw8f(v^n}8&^!n$}|<1lqpmB#fDoT>-6~kOye!#=u=d4I2210%+)b_`o2D(r>K2>L0IB+9TWp z9>)DL-{Iw0kGV|XC{nS};j^aqS^T__I#~R1&SyXCJdn~$xDc9PmDWg}xZ$bSMx{-J z8s`^uWHLz~TD=P4;*?MvaXN71wA#x7Ljy)29A`GTfJhW|f>gCkGh>3m(o4SnEuFS# z@g)5AOGqq`BHg~ar!`8wNAsA7dCG5scnhi35^WuqSs|M|IV}!)cv0;L(bh(Nt=&t7 zyi}F`#VdIFg9j`1WC0Is@ojfj6E`=MB-q79-qt$s>Ew~X<`%nBrG&LX|6u^HA~bI} zEK@PdTn5#sS_qxEd0A`u6HyW}xAe|$qwySrmN4T^XzR>UoA)((&v{N{L5e-bySNmS zJ3-BgQpV~?VQy8>Y^iS#>jC44A7`fJUT^ak6vET{V)-7M-MLlWY*r5byK7HWy) z*NC(Y5IiutXWk0J;ooH{PSV*aK3j$pKxq-8TMs;)fO);KTK5^vcZt=*3=N~<+L$IVN7A`O5{q{!qoJ?@@eG=ePC+ z2Xzt}WX8XBUy!P&3tnPD)fN{@rTOqCg7!APsI0Q6)WEZ3{B|iuJ*iVK^g#7*nHpC{ z7Bjk1=eGc=DxRL6xe=2DR^6VFWKFwHB9O*g*EO(rX+JC6oGzAkd5Y6=6qiP&#LzEY zbE_~b(Q3HIP1Dw#0A%(7w{9#9NrQx9tmAd&*Dd7Oy^NOvbUNnA`Qb<n+~e zouJc4^>x`=nq6BAf9Ts8?8dz0w*0kBnX1zDTLUZ&J>&Pkz#D^Lwe5bdpv{XwhCjm%0=z{{+gzwe2w5y)G75QzUhTor1+ zA~iiO!m;NC}4>LQcjF80*U>|k~@`gYGD4u;XRA%oFRu09MaTCtq8)!-c4oG z4Uy-TG7NpVGFrTG|G8R;YUQe1o5{pLa3Z|nrzEyY0hC}})`c-XSHE6dERg*phL>al2}S!o*@o<{r)LiRo{-^beM7p& zM4_#Bb{{x$bm>xLvdOqJo{aCvg2l&iH=sK5z>`Rr^aBTfsEYQ1ncqi8M2i~~DI;Xe z$=(cA`>=x=M93cDT_w-1CGU8ttVVzKOddN^4ekpX7xuddv^e=bQnW?SntXlM+m|{w zA4y;}5sn~9rJLPacVU5xb?LTOuv=}Ghh#pJtb3}KK%)62{R8t)iM*+`u|ji4c@=zi9hnlS8%LE@sj8o$Z|=xx|B zi5b#W)Ff|mD&6yqOgF*hIejEany*(t=YMrlezftpn+tq{4E(5Amh~n1?Y3D1M@5s8(_$iu@Cw zuA%SalFO!M9q*u4t0KW zQ{S%C=Y82NyAbZXB8%w88#6HTHmQ~gFx=^h+FX*yl1a(c z^mXYdH{vjPNMh8z^sAz*P# zn1u=pCLc%KRWRJzuQp+QKu|{$79Ygpu)O3LP0JI+rl=soM5W>H5I`=29%@huW~a~u zH*Yh3vx?{r&fIgbp-RCTO8q&U7C^0cr`}=hdMj1Gxpwf6mx5)HYX_Q3Qa>{zH>-RP zS|7QdZ#kPN_PXVXn;=cXGpgX*X3U{?n1!juL}lJTOGpsHqPeN(mlTM9^Qm6Qq$y9^ z7S}Xcp0J*5=gv@xu_d%TPX^=cI@7A6Qo4g7e?kfl#wsq2I8^a?v$H6Tq zPp{zRoxj``UHZ!{O}XD&Pfm4-WVhqFftlE}=aTyQON8am_`j+<^|qQoKZG)TRkv3| zVjH!3OGg^uf8$Ji&D+_|{jsg;hg6yx|L8-+tAky)`u;ZlOq+_$pl~b6+de`VE7zTN zT-DlF=ig}(Fe){*8k+-6lhV8q3`vEg+ z=)J(l-=SQ9x#t)XiqVObUs5bmNL!rQ+#KhWv9fV=_j>wLrAQ%36$5Gc#YW+?z&w1z zXnRLw>PGvs+liv~8w1uY3u{W9YEz0E#dwCR-ier)+KmF&V+ZI=B+cHo&2(MFP3+WX z3QfQq>RY)Nv8FeTlTYEpQxi?P9~9*XT_jTX%87C3FL^UaTY8j3b0O^ddyr9mdW24(%pWF-f5AHHJUdaapM9_%+(-s4!+I>2gV zfZSZf4$pi0IL3jqTRfN{7&pQ+YRCzBmfdV#s8?b=?14r9rB0`{(uMwt`kOI5-_|vX ztoMw12T5?&JsxI=+Ar6(GxjM>xgIE@UA-Xo1*2+zH7!abS+BuA#^IM(*>nfC921M1 z5P2@(#Rg$jm%mSm{CH5j7*M@Db-u5B1^iyF=4+^2@PsN&2eb;azF^prqL{D#-^!j#@BS zc+?25zT%~gO+`;Z1fF!N_L3yFBWuu-WY%S;9>m5KNBs83zBoB_-0)jVmPQAaj@Gto zZkr1*f=owH_W#Df`sG}4{fFeUAUD<7x#FkOeQ6ITXe{Fv3-r5zwaHck96n*?EZPRu z%R_8#m~Y`3d0yvkx+jI~@JW5nnPjvHMl3y_OR|!T!82YcFq6w@@1JsAD3kPJG297o z&Fs}x4}5(;hr;*%t?$%!+v5%uF$jA&8ttu%ecV_DN_qV@Vs=_(wLP|H~ zGU`6G#t>fHnF=btx9h}#M=t*Uj$=YawOb7P^SOJW1B+^9k6R%oQV^LLGYuQL8+W1$ z&AtlDZU6LATEuLLtn?ybH|+Bdv{yHSF?YHvS2nAvQ(GC?@#94q}T z|Gg~%dB=DShWUD_;4`epwVmj6JKLL9(=Xizg4(DC+X;Mq^e>W3B#z|?CfY(C%(UQ) zc$D%NJ>u9aZOk;b`nb3L4ylx9lx3*t7(I*E?J!oNTW`WWUp_EZ=Ju(}WH4<&ImTrX z;yg;kF<@^GZy&7ljs9t83lg422*u7jP@k*ho(d6jxDDLENZabPi2f7%d_mu#5m*N) zE9Ek;w)}(pYWUVPZH7Z#=P%i|h=XlB$)Dwbx-^{CbCmV%tdEfSOgy!O^AYb?^tBvWHOmT&8S^xk_Om=v3)BV>o`=mH(IGJ32KDZ>_l zqjNwtQ6F}dyh%-rWFcXe!B{dlKB-krkE^HIp!2E|j4$7QE7PN>a_twP45UL=M5mXJ zeVlZE+{XPFoD#ZG%_!75qwcUkG4r#zG2n^4U+m|C)y1RB#xV}^IR zJ(A$+!qNMNVp64TUCyvjZaCv-N}HVa;)w zP4R-np=v+KwWuZD@$iq57+A|p>tJm#E%}le@tRcJ8_$D<2g10X=wq?FAuQheq}v;G z+~-~y5BD#{+_8gSSTfxo!iCxHl>69TdoU#GOnsi!xG@G@j!LqC+qjrzlx(q?Om2kB zdQsOXvwX;tWP%>E(tJmpnD>hTjb| zA1`JZm{j&G+NC5X?-4Q-C;C|48o+yuRLQU_;Mqv?B4kuGv>Ex)iC=ADAab3r<6hey z`Ad;9*ND$Bciwhx%Zox71JXWpPB-le>;5QW39JfT+u5a7Ak1{fQ74z51Dt;UfEbJ`&_5*V|6?2DV6yzmG5{itX67Nbd;*ve$cCo9WXF)GDPgI zc1$|)bv}T6YRI5T=$nf@lcX=y&bqNSY4A0D=`62c^uAo4)Z?j71-dZA^fVVq|8;#R z7FiV!;;fuD2czU3@9@$Ydo$7LB_ar=SXFOaSaN6%o*Dg_I3el|k;o1p=tKB8LNj>|W@Z>-iyKGNW4zeTP(TfAvNC)z)IafjgO5F`c9Oc@I_> zGm~;noUKb5jY+d+kojnlr2^rPZ64cRLT#HX390OsKc69YM7EsRKAS}gHXf9OA8lUA8`waqtMY{>yPx6~g|Tm^URStYMXw4&Nz8)rcyFI@-v$zg{V@Ej(|K&DE2ZR>OfaW4DY~~`9 ztE7AeMK;Mp)9RfXRSn?_g@Bj!=1nTqC*|u0ifl|8blS~Cd6$-SLJP|7y<)?Qy7<|V zPwOYe%Xbgm38-IaQnj#S+$v{>tUi0G{~Fk6&5qvMDnRH&;;nMIQdcT(ms}=Y z&USn-#ZonAY1!Qhx9R&yH7p%@1Np_U^G18V(0LDe*W`^ItFMcLqm<%Y^_uF?C&_-n zpX9%Y{p##>=Qn_@6TsLivI{OdvLTitp!)|^F$`s&EB6W=RT}u_x=ggTc$t}CXdyiU zE|D+W*7GXtx8Bd^jTLb8f8C4mdd>MZ({?+0&~V*=QE1npqy$-!L@RCV5)P{SnqNPS zc*V%i|KmFSC*oX2f~6ZA6Bg1j@Ai;GMig$YeBv2Dez_0Q^DY(vWkL_57|oxGahR{n zj_KuUlC58#*;3|WM;DqYru|NnicS&j)E#ZNo|@ouHPeEGcw@TL_j#IAfv5cy6hoWs z`S!%U+-A%`d74NI7lG?Z!OO4qj3Hop#RBndR^a$*~rd^+&`a9-w(xX4Emr;e4Y z^_FEXT8a$j!zH-;H#2@6X#4u0r`y=^rgeTUBvILTPUVoSv0G-dRG1M_G%yh2c*y_I2X#Osk+?btV6%!(?r@N*nOw{9ruNif==kZUPT7NuB0V~`zwCK zhb{!~T0p_V56%wl%&ev1y!uSzPFBOVPA7R)nN1E3j=|^BXgxe>a;$TAd}Si^x#c^ zMNn9c{jYFzFREzSL0I?0FP_(VoAwcF(u0+bX^wfXQZsgpA>ZhgE9%5Hdyp)=WEYb4 zjX2ag2P}DB6e|Ev)LLQewY7eRokFfWk({YnZ)ViyU|~k#CK8e~E8tbNd&jU(W{+Eh z(P!re7CtrZO4ty?vuZgcjp{PhR3+#G8Ej1M&M_zO$$5)`&3QXd1G@hugkF8xfk9Z` zmyh#%W^t)RLi4V=qUbhalTdhQNrY6XFX!Rd{90t&+%-xG&MJ5O$$?zkc={dlXiXTd za)Kk?QoCO?DU+KQCT^{B9sQ2R&%nmc`7fk61Fdihr@p(Zdd(1O9WG_+kg=$tN&l8J zcWhPrS7}vNC$6&AuU%ddy%rB@&F6zukJfAND&y5ulOYCQ5KIT>=~Xk@^vlk zTt}vt(cn$4iCfYKm0Rpp2_+j&i)M7sm&A>hNcLH+;~pb@!)q<@P-zbfNIMG85lis+< zC_qr`kWqjM;!EmM+=NFO$eU?@N9LsqrFLxAr9EEow;%S+wA+i4p7+jc{Ro>A0;Q5$ zOMU*SM2elpYl;Ueh^O5=I#=Zzrh^PJQz6k3twV_WOrD+-N3It(U)jh>_ z(SYvOB6ydJ9XE5F`pdPRN+q&n6(>bml@&$I`77u6ge{zj3+sG6K(9DF8^$<{F2srR z*^^m%lStQT|EijpY8H-qiLy5F?(B;+g?L!6idq(YdF}ih)DZ{S7Vu+=v!2Cogo9&f zq}I3$Sy+59A(g+@muu^F82z&8IzBO&+cJdfmPsJ2xay?qcS;IIDZK`Dy!hE5Z_N!* z#+T>+XnZ*Z?w)r%lcE_dT*>-yMgyi_&O*#lFtT^Pj5L*CE>{awWQ=81^*x!2oRyDS z9_RqZdWUh_A<3#LC*FYIdRE(%wd1clPZmCW$x_b4R-uaHp8EFA-ELSPudXuMZ-0oZ zT}D?L$NnqpmZd(ZKu{d}x&_aPE>e%mZtD~ePU~;5;p4n+z)=r2h+wItR2qGI*r?B)dyOAnZ!(*3h) zwhJxROBB+zsyWdR6uXa`_d~7SN_czh~$zq_JxQ;lx?bTH6_3 zsH?pfL-OlZd~he<{)@L(dp6v?#xZ0oK5QT@lj8PN!CCa3$ zzYq297QM}YWD$JsR{bZBB-767`o)43O?9s~rMCF30seKQjU_#P-@1GWL%U8rXjG<@HYm>(Me-f z(PR(1)Ja!!_sqz5ZDTm2XKs-dq1i5&JYNK8SJM%+8B=ZZOspwRDRU+_=>|n6t4QCZ@{Xw<|ZqQOpa`2C}GWz zQTN9X`)>Z1f(RHJY#>2tsh&khcCljndr0A;{T6>imx(-FJz^O)2aYoWa&K9B3aEm@ zozc;;*Z-*GhZxM10zqH1^~TOe@R+5ide*H{Vvk{&$Y(&y*~*q>4Y~{CEp}ydZ=Q)e zXoNCr$MKr>N)|fKg@B$CHi4iuGz7Cm zQ-6IRRbQX~SEDb4d9Umarh{D0>qKfAaak5(tL)Le41W45$IBAuOxzDakQd8W)VQH# z^3kE)dSRFMS|WT7Rv4$5ID{S=(-v;rTWFER%=)6iK*qf#fQY=w_7kPoWd9uF<(yQx zkpliJx0ba&{|G|A8)Y(YTq_Z@ZfTNFNcRwlka)N76$rBY12K#TQv7ouwK{W;yK09r zY0H>7g7&+4)(jJ?3T#MKrkQGAXMs|-H~&QQ*2s?^x4Fxs9_9LzQILggek zm*6G`JmWD6*)JZ^$)anb7|1T{g#~v0j+$4XXwMGrXWTG2uv|2P>Q$xW_0%t zOD!eZ@S6MKYpb=*MtcKf^Pw@&9Jmv5c>O-s3_kVqYM=WK33!>@rK9cELzvweQt!AF zw$@9N^u_YaulD8Yd3_|=v2OUnpx4O^FPB~w_LjjFtpursabgzqziuaR7SMHhijBL& zm+JEkVZMJ$C1;)vxfwyQxhBouSEu1rs8+R9oG>TuE6d%^f zyZ(9~D4l0_xh*$$!uR#ucusYu8n;o+r(VNN9XX>7j)RhHR!XK6r7Cs4~j<$jfM^Fw-(KM z#(G7CT4mnBd~PIbB}D5?N7Zxq?2JJENFf z)6*Ko9qFi4Y$`)1lbcUsQ`2az-%{GMUejZ37(9DhC)2O4r-fKeqj$eI+B0e5i8Hkh zY1Ptp%Vb;BOYEtZ!lf!Ty}4ef2~ft9w_q#s#x=Fe zgAJ1Wep%PQ7i3+B8qYmQbo#fg6tg2nDGMfcUJ{&fUg|t->MOF-3gKi^TuJbvg zIS@QP-)AIEOKbfx1G!n(9~xxx^G|QJS60|Z@^jrf;^B1G0&}X?2k&9mve!US63xdK#Sfe0F*(!JSBReUW>ZIhDa4*LJ3! z6*IeyzVjUXf=`_%>G@0fMyZLj^M@W@d&@f>~6Wgbk32pXPi>!bqL`O1t+ z&YUi5Yy%7M1e%@whl|mHDW${>%se!vt3u#+(M&9&*FhI;Q(Wz&%*i%76v4kCGB30I zzRu*Rj3W0Dc+8&8+=jXqS1SaF%6Dby=zFNjV%e(m-;Z8HEl(lv?cU%0LAauc;0N-v zEbJ(#1n#3>mS)fyEHXB$utMy1qr#>f%Vyq-THr3>xO6o;(vxee$fLlx2-IN@;otZ` zg2&qM@U?HK^`L|g3(Q{*R++@iX?|Bi#Di25UlsqIH4$=Yu~Se>46+;m=vorObFvYpG%_Y0ii$MxlNrs>n@2Nu^;Rb=Dcg zcn0qjOx50KS3#WrH%)?3ypY<~clae^bYKKV)JYLR!3=V(SLmKq7aEUftxdINgFMvr z>+`Pucnjs&%5T99&7^=xw&%voPpuXJ?gpbKg025EX$u#{Ai9agS5RLj&pH>vxYIF^ z|8Tg|v|c{lkgR2I00g%`XZRSv-BK(dkV8MUWQPD?;G6gVZC%Sn$>4QHK3|j!CZr17 zKNF{;e#?lk$T&0!oW9_SngE*5RPcR2{N~}7$t6(C*C@F5>2I8d1DuL?x*m?<7r2i7 z<}&V|b6)uU>tpR#J-{_qG7iw8kEf_32v(we?=SU_i~9<7>o>)%qC>X5D@i_pCW8t$ zGB1!8U5PS&I-ojz!^IGEfdySo`_6K5mv=%1Ku^BLsjI6G3v0DNNmQJ-x;iOp3k{*@ z29+w>9O}aZ(Bb941$fcYPZoR{WiZO>zEQnG>gy>r(+>r@{dM9&v{8&P{$dnUG{bB*aVR|7VW z_?OKSQEcAS_VbAN0!^ru956qf{=zwrzOzR!{CS=V1UpFCN%;60aanr61A)JwJ~`72ctcoct$29>}Tq z4$-j@`fmyl1@*s-QGmkkT-)>!IR#)SsO>Orke%Aze>09Kt=5HL;W~yIWoJ^=&(s~W z3NBDy|M|iHAZG$fnRyaA|2kq7@L|8|ZP$12$n7+kcgdztcKQ1+Kh!0AtAb$IsSJQ(weoLKiYT zt@*)DT!K)#nTG$}u^yrU?KnZJlrK*22tbPSFQf_pQvE$5k|Pp|763@)v(UzlSGq|4 z0tnx^Q|e zPR(-uXm5U%fXW>W>j}SmU zfs(+=b5Bo8CV=#ac7K@5r3(dV27mksq$o`}OYql4ivLaZ|4$PBUq1LBB=mcQ0$m-= z?U<2q1q9H?2(MguJMGxG?DYBFU!n#ypgQp5ny|I&js@hu_~{LIz^Y35eLS?sbVe=X zhq}|N!&K(ewWG&=?kKUxjfg#>GQiM9Fm}tM;#krDmV^JzEc-BN{)gQBFG{o;WcM&n zfq>eZEVv$$I&t^XaY&S)3b?r`)EV=XWCBQe|78Ycu=msr9m`{8=teO^1-kdCi#-3U zx>q2t!th|wwTuJB14jDoH;zU9;_c;?p{xw?f}1-{?r1WV$_)2TI`REd56NYhKN5QB zKqQHevF((A9AaG^g>?hoPnZ8-eH`UU^3C-oL5p@P!oQQAaOHoKG1L;cpv&At@|Yxd zL4fJ+O9|>9jPC!r7ZJti4XC!|u&O$q+ehR*M2#P+$+^SU>J#zN_c>7CrxSLjt}@b? zJhhX5U9UgVbDEFI&A?&~_c3uPjWyd(YA*yPQ31y;+a%^Gg9EgP<@JX5XzegaTDtJZ zn={|P5B(uB`B@Af{{1&96?O&iKyZHc3y7UdS+vN>MT?^0K)oikcRcuOFU|t^;QMg` zqsLKk^%KAq3{Cu`VU}OvF2d(L-oQ`s2QJE-OlK5dJHavPFY*|%st!ZoKI6lemF|PrY*sLFwO5E;L{457^#-tid)RT}Z6E$X0GKq7R~BOo zM?iwr7D+*&#Zn zSpE=HD+jzbR0~EV)S8?lJ$ae@0g5(bqKyB54ip5rXUoU3V>N*;RALXDp`{B)hybvT zqT(eg@}gsf{(F&cK&4SL@EQNPY1rjHO3jyT18;TvWA%ylzj#*|?C;gB8H{5NINU!u z@Wh33O3Vn4co9V~99;6zy;HhJAQHemdT!kM6gU7@mtqjv)z;Rx{Mn8l%2zWdi~){R z)zvr0N(#;88!A5crl>fDN!02fgW^oh&arqb8GvAm0Gx8NV?+R!0&{0&BAthhb>;6x za6WpHaJ>(q`Z0SLwm zG||@SoRS%^p`LhtgMSG=pag1U2_YHBA4-5Q81RZ37!I$rEBx~~f;n^U8U@(j1E2M` zf285hw{StU71uXZe0&oFieMMOovP4dy9dNr3dK_B=G;eg`Av?0j|v)4HnzkIR9kt$ zFY+8a*Ukd3P(gQ{zxpXmqE-iifB=33vCVOG0tmJx04}GwoGU^@ z`|}((9S>OPSisKYI!y!AXf+Nl$ia)Ag10W+8ij8)(od-a?n_R&i;A8hj*^jxzWgBH*Ohk{_^AFB|4m%Y& zp;UI075MES>FBY!LURFZLoSYXN9`Z5wNSP?9gdFn=eYoCwx{_o@SWlh#U}$=$f1DP zE5seAb976FiBACmgUZ6e8G)Y8+WjNe72pH9E2!h*iU#{ow* z;O9HOFI1zMP(l?1WS}r(`r@$!R;Ph~&U&SK%4HtNm{us2%gp;TK%;QPE^bb4`LQ%KfRuu3ofMZoGI^l^Xfid01SH2w_~IK7@{dEj=T4NzZ%Mca)XTR_0rKacZPzB*9TApQgmxRV z+K$LgS71E??lS4L-ily18u&6|zd5hxicRRF&x$T2^T15z8sNl6IvgoiG#RdREDI0d z`co@MPAebz@}Fz@D%50o4Xr#PiFixQ-0iE)~KtYChFs+RAFK_`~He=Op2NW?wHCSSi+$r4{K$)SC zp=`a{NEI;%hYJncx~Xl0j);MdL8^8q`~u!?F3O8m;KkGT4M5>th#=~P~^g+yqz&${##X9 zRr>?|cmou6{JM;!HbZ6#$x#1TK zUNKf~$2sn<)W3{*e8%mbWcb6^gz9fz4*g2&&(j&C%PM~r14X3bJ@@F6;#mL0N1j0W->)uB7uI#tx^S2H1*s{Kkx72}dxAo+xPr7tx=mnnR~l~6sqF_3Do+;(jq zNXpBsUQ&ae^f0TLj#`G&>A2!LpNZF;Gke$iQ1uxYSoo&U^y=>E_IRV^pI-`1e+f<< zkieo$YcQ?XS~$2v+)3?p8|JhU=FlS$iYas>)_WVhgC18Yc1vYMMO?miN^!RUdQ8}Q zJd3$tH(9;!c8Ta!(XjR4mk0O>_M;!D=A&#z%xaip!_j#G^f`Qvh)-`NS6DI3>%56H z$Lc;>@cDlIm}Z8r#XaWDGT%g(l|KhW`zJz#+g%q*n8Midq`povimMwx1q{UqWi$ck zjvq^Tc9kBL=gb7tMn`U+XbT#YC^Flf|5v?{15FT?^9e?sz&P$00n;5n=TNybNo+7& zS|F!=XCMi!9jN4m?5|h2-*{DS_sTp5!?0}ghd)*J9Zbjj&i85hetaW+55r@BE#~0i znJXB!ptzmF4q!qumNZK;7=n)`$3z~IB+ia?b=U^(C>0$2JX{b@nr|mzV_~q@Vp{_8 zi4?m1vJ7mEM-f97cQiFQ+Pn_bQmEXQvw8dG?Dp) z*WB3k?GLX77|-0nNWh26*iVM(%#YYFvAO2P8DW{s@KyL~>W$U=7F{5HQ@y@JEFt$K z70|c=^V*ZaJ9`Yzily#hvDxZj6-$0%`f`&^e|(}ay*LC28Z%Jcp7d>xk3EDLRGxyj z*H!7n)*ku{N2Xn{MIo4D-L>4LQ-%lYk|W^F*3e3r`Dg)+Xq@@&2!jV4?|(I|RF)g*4fw-4I32`i|N`pk#i^FRv(n zoCf;OqJ{xhjxQ}okOD^6GR}@g;(I^q{-oELRLhcXkpzOFG~VNfPKwSIUbV!yFE;dEoLg78ty+8i|!#V{CdIcMZB>kRN_nozrXN zjOaq~!XM2?aDWPP$2;d)&?piM(~annyUmBueyv@eNW#Kn@>7Lr6}J4I=n@?XH<3iA zP5?|U%DjmtXDB*n3s@U9Wnfy$T5Oq)YzO%s@Prc&Za#Q?^yH6OUq>aq_YLq{F7>7> zX#yzL%H&1b(lx3^Zn7Kd!o&kRrFb{wsh)m*;X&(5{pqu&$&gQuOv+1OLs~=kux{@_ zSJL+(iBAsp*4p@^oZBNgEd&*yG7ut2=fz&;+X4wcnkPavjJam%vm50gFMaqBx^yye z?-xcY205+8Adlq>sIpTLoyess6JQ%WiZ5Hr2faOSJVtvl4%gF1m{u;yTW&!(_+?Lq z%G7%a{6)|-AKMbe-D^27&no$a5(D4TS4Hm0%?19JN4KLs5_53b>o^s09MF)v1BSdTBM#S73*VNSDzi!HF_vqkP0}fzLV`^mBQV|=t0h`zn zJeXxN9Mjl|gN#7xyt)ub3dw*h-p}(>{zoyI%kCW@TUF`!YyXTP0n;!+H9gYmu9rEZ{e7AzAOJ!9+_IjJ0Q`_>b4U>Q$i_;{z;NNnQA>bpXfCz^tdetdo; zW#wO86(fTy;NlLD12Zn@!8V zzP@AV_BZ4z6nDw1-cbBG^A3m4bh5;HVc@epa(zYrvi-^J zB}LuQndBJj&GfgXm6E@Fh*(}fT#C}-a4kpgl@7LGCFND^m3{Q7SKYp4 zv3yO63Lmde{)0#?c~R07_9aJ}@i+mA`;thF;6SapK|$Am{3?R`*oK@U#ZOo+6ruT# zNUzGic#4!l3fa?inR#->r5W^QN|DoLqgo%*AHfTVYZ|w2z!l2hm`zD&xt>`^B*#E+t~{r6e6VocEev$E_Av=V zad6d4zhFEPv6*SMbA5)t{GkiwIwX5Od(pWf=2HK3LN)$}iw`mOr332S)!DSHfo??& z620eBRvB4u*_Gp~lPLP-AKX)wLwj=OHVJ%ukhOC1>dZDJLQ#H2gP)sT``7i(Y1aE#-FJ*YXT>@< zb0fVvBpuCP@F~`)?o$klp-r)$s+RNdu=f~lG59~^pA?w}+sM00*4tw!yp`RS4$dE{ zi7<}lnv^8SgYIo8R)rEUcNzrKLa<6M#RA{LGXRD~gN6V@r&K=PWV^$Vh_2DAY9aZ< z3hUJjuOt%O$`>~j1(G5*CwZ1r1y>l$ujh|z0gi$Ml+VeGI_`dbKdDl;M+WeYhAy4_ zXL8|$>$KHz$n}W=A8srj+LjFI77>@E>aqN2$4#Z=4#|{|n6pA$m6BgRRwrq?59I6N zec1mwhp6Gpmi0!*g^i3WxQdEgD**0%iWB64%mxXgWUwDT6Xqr9>0-)-SW`)nPz;4^ zS>0JL#>$IIW|Z0d5Lw`vhoGAHmJ&_d;%0>_MdoINT?_H^Q-Bi@TF(L5ZO_qmF&h2$ zp{LZ!K-$r^qS*9TO{>4PvE<9kuIzC}F!V(IXD$ncgT{HcAG@8~Qzg*B|AECLzPOKE zDyk>7zd!I2M?HD0P-}8fzF!A;kC~2?bOJ#veGw*=dR(&f14*+ypt2RGR8=I?6{eox z1-ad{z{>%wYwwnB@y>J~R}pWrxSFv&YjPH_o`6@(Lb#e32a>ib(Jd<_gDWcc5p%j_ z4cl|5(}oA21_{2%Lw=O+{4a;nhvA~YKI#y{sfTvx=~qWR9;;b-;QcDe2YWaea ztfT}&RXQFZ5lK<)5aGisM@i! zz}`y|n1LTU!5z1v<`%eSpVfcIC{3G{N|=?Y+)5b@qdlMw8XpXySDCbX8kQ;c+FA5= zWHpoAU4BR7nKioXRC8aLcS*ss+xHZws79<>*+L8*6LiJZJO#yeW z?D9?4hPC3-M-YX46Z8ndCyt19vjsVRoX7~;fph1d$A$U%Tx;fJkc_=qGP?uur(C|l z0x7TsPR4F&aM)W@Y{BDfJ8hTc_ZG#GI6(?u{E!MW{}b{S>}D*DS+) zrp?m?;@dFyc$kXWwVUwEmTRynF54_`pezoT&EmXGg->7vhlzRvAE?Ji?5?#fc(b&6 z*zK1-BgoF5bh%C;?0wO$Fw)0yD`V*eqTFk8nzabCRB4vW)zk7@mmX6ZcX-<8`q?0y;~GWMnu=Q zlsppgok^j9qjELCv1wC9c0FI4YTL5UkV}?ILVMqvwCq;Hg?0G}mo=FD(h|YJks*>! zA2j1l#FB0{R+nQ7s8apfxz};2Y`IE}_S&|~bQ4Xt(kBanKhMvlayT9)X^qJtoid+FT0;rb?!Z9fBOsjSbBZV?hj-iO_x%= z8m%XZlyi(>0ig_ouw!0ZvRr+U39bZ- zQ>w}K+~30{(+~CcnZ{c?d~aNGQ;?H8Gsbfu-kqqE6_)A))`@HmkbW^s7FXTNrT*VYZ6 z8gZAgP%}fl1h})>Z6|u&(Ka6;+G*Bn=*D)nTQ&25K}#4#U1ehG^X|O&kuq*8gR zBD(R$=XrjShKkTftt{;^=gckjcyDF7STsz+4eK^&Am{4_0MoX zH^3l^S^7xph9#v=4=nu}IrS`M=?D;vv|tH2ZL5j>Eq9TcRKQWIWOOI)Pri~HAzpp$ zm+MK_QkQ@byH{-4v(9^fIOu+J4Bk1IeQvs!o*O~;l8KL%j!<-E>-Ct-4^%PkPJHB_ z(#^KMt<9?M6lPZcM({zB0jBSsWQ6DDWCYf9&HCj<>8 zWEP4yD}1O6Jew81J=MdY$f~b>HS3Fo&4DD~AN$~<7`l}Zn{Da(SHynJk4PR)gv$8@ z)vHs}`#w5X?9eP!f4?Pe-np;NmpmH^?j2iYEibdTUI#Ee2F|ikC9|`Jgfh5Br%p9F z;q9Idg60vPW=irro+(QQT60a#ku7GllVS2SiXMoBVR(KCGk1*8FlI;?Pxu| zD-6Zd+IJdDJ<*Zvp=fWpb~rg(ioa4sm#<|@9Up06r{c?U(qd9o9oK0>TZlKr#?l!Jnkpc=rn1fd(`xBg>Y zkbM|-8&C6}z!a2kp_oay^0>d z!(~$=qHwM~Y7M<_(-JlUr$UKSzj+$5Xn)y*ai#DjUbI@f>CM{^X0NpDf*-qNR*&I^ z-~E54j6Mgy^k;Vl7|oS39_aWy)ONPNIP(bOHNgxzC2IMj^n#-T*Gp}Ne1fhm3zMNa z9*7*Wn(NK)22@zPFvzZq_kkl)_u26aRYw`t)^Gt%0MUpIYOM$OISi{FcJ7uL^a74{ z1Df7S&}3h*zb3Q z4hd4(G1S23!ZI(|_XGM_&^Lnm?BCI}c;Fnv)FkGbcGWD4AX=?rJV?anuz<~=*}bo? z$hKfKwg14SFI2$Gq&*f3ZUw;<3;QnEg#F{C*io5#u-y2IgsRI5lPxsQIF( zWAdKZcC={-`>;nUcfDGl>l+vNaH(|gE^g=e%@uWTv!6f4Fyk)-4joBj&IZnC`XQEb zeHe)B_Jx}5g#=4YGMpp6{lSaqFVy~2t8H6;mco8Ya%XZ3tNRxVRORdu_D`$Y)v4C9 zntm(-9xypASJ9y(r-?#qpw(N?_1xvisg@@O*U9q4eUKF!p~N-_Jn|u%M7ld@ztPU(v^DeUBJ*DFQ>saa;ob}t|JP{3Gyq|CY&Vy|G$*&Jy3;-I6 z7IMHEoxxq^ab6fK+dAT0s7IU>VdT-51K{*cy%nM(MDaB&dWa5~#=Fzxw?ISQkB}3! zvz_tl*KfPc<=4->BRR9Wy#$2Z98|&Qfi5##t|R?-agQP0YsvILgesox zNW0nEu)VQZN=S?%+KoZUJa|y=$OG>@%n7+-eb(k5V-JP=6Q~<7H;3e(#rg}Pmmt=S z=M2BzdFs*f8C>R$p=MVcs29El4;e;MjAI_@{j=E-0LTxzNNrCu>_gB!b=3uWfu){# z!u@FABdw9unMXe)^~Y;gnniM6YlL&^+~u?EUY*?rWLZGYU3J;43K1@JOk=5guGI}) z^VoR^qJ?$q1>7MG_>8hoqLZ&QtUd-%d${Yn;#1dwbNkd~TNVw;eqqK1006-*jk?7a zeIR)4F4*=J+-uFhZ*y>(RS+ElG{VTch_#LU+3xH@P|!Aql72j2T(V(_byN>ADtn47 zB16wDoMuLXoaXB+puj&>c~mSx*Gi6K#WJ6O|NBBe92R9|#uebyQxko%W)#7SetHpuSv$*tp)9n2F2%67ol$|T@H>`k+z7WvJ(`f zSM@NzD?_7xG0HT~j8De=ICtPMJ}$j*;q#x6wYAEzSKw6lX1%|T{Q z28v*#!AVpArW|wf|1iEtoP)w}K`K=2kE5c%0M_RIoR<=&`qHs_~GmKb-795}ddF(BSVd3U!9swpC0E6H@}$KJKgtd02!wwx5SvnrMeU z=qm!`fM(+EI@N#J>pmd*BFsqp!{aCce+)}y^$eCuIYzLJ3-rGPS=bc8Fw<)+j#g1l z2hmy=YhXqLRwdQ~Ai%Mx5zvCo;E#V?vn3V~+n(d8-FCEUgK|5u!NZW@1SpMUEf?7(=J2#+v7<4%GQOv$E4kD`%&?kLPpr+LMUOK4I9EF|r4d@xFV8)Gqc+kJ=)enUB zjLbg)x%^c?;QgCZ@n?!yg}jNmGgAqafS~hX?>x^eQRKX6$N`FRYyK_N&S5(K#)hI; z%b}nkP&NatmM6Y=xFcFO)m21--tibtRivd8dsH^{!09pJEtDZKzb~`n^9a3v&SN)) z*U8js4VY_oyb)Of=*JW6GW8dav|bk2)KqClgUebzHe`19q$bmvt)w2`hn}M>p|`@uyzuTl!<> z`8L&ST6DsWX04)MNGZ%iEOW{~fu(v zb9wJ~w$$&@qd${bT=9>FqiI`YQrY53oCKz}?tLSreLwZFGftMV~(vLRx7 z%^9pR#7zwwgoH9}bKxHhrD2nU{pjunP4ΜUVPKCJqED{?Xo2kRrKKo|5ZWB7ev8 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�+%GMb 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 ajxo(i>EL;-qM{h!pOl!KXwH)tZ~qTF6&s!a diff --git a/readme.md b/readme.md index f31bab6..0010e76 100644 --- a/readme.md +++ b/readme.md @@ -11,6 +11,7 @@ - `example`: Example programs ## Supported Unitree sdk2 Messages: +**Current version only supports low-level development, mainly used for sim to real verification of controller** - `LowCmd`: Motor control commands - `LowState`: Motor state information - `SportModeState`: Robot position and velocity data @@ -35,6 +36,7 @@ Note: ## C++ Simulator (simulate) ### 1. Dependencies #### unitree_sdk2 +It is recommended to install `unitree_sdk2` in `/opt/unitree_robotics` path. ```bash git clone https://github.com/unitreerobotics/unitree_sdk2.git cd unitree_sdk2/ @@ -44,7 +46,8 @@ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/unitree_robotics sudo make install ``` For more details, see: https://github.com/unitreerobotics/unitree_sdk2 -#### mujoco >= 3.0.0 +#### mujoco +Current version is tested in mujoco-3.2.7 ```bash sudo apt install libglfw3-dev libxinerama-dev libxcursor-dev libxi-dev ``` diff --git a/readme_zh.md b/readme_zh.md index e8ea566..c7b5729 100644 --- a/readme_zh.md +++ b/readme_zh.md @@ -13,6 +13,7 @@ - `example`: 例程 ## 支持的 Unitree sdk2 消息: +**当前版本仅支持底层开发,主要用于控制器的 sim to real 验证** - `LowCmd`: 电机控制指令 - `LowState`:电机状态 - `SportModeState`:机器人位置和速度 @@ -36,6 +37,7 @@ ## c++ 仿真器 (simulate) ### 1. 依赖 #### unitree_sdk2 +推荐将 `unitree_sdk2` 安装在 `/opt/unitree_robotics` 路径下。 ```bash git clone https://github.com/unitreerobotics/unitree_sdk2.git cd unitree_sdk2/ @@ -45,7 +47,8 @@ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/unitree_robotics sudo make install ``` 详细见:https://github.com/unitreerobotics/unitree_sdk2 -#### mujoco >= 3.0.0 +#### mujoco +当前版本基于 mujoco-3.2.7 测试 ```bash sudo apt install libglfw3-dev libxinerama-dev libxcursor-dev libxi-dev ``` diff --git a/simulate/CMakeLists.txt b/simulate/CMakeLists.txt index 1436e19..4f124e0 100644 --- a/simulate/CMakeLists.txt +++ b/simulate/CMakeLists.txt @@ -11,12 +11,12 @@ find_package(mujoco REQUIRED) find_package(unitree_sdk2 REQUIRED) -FILE (GLOB SIM_SRC - src/joystick/joystick.cc - src/mujoco/*.cc - src/unitree_sdk2_bridge/*.cc) +file(GLOB SIM_SRC + src/joystick/joystick.cc + src/mujoco/*.cc + src/unitree_sdk2_bridge/*.cc) -set(SIM_DEPENDENCIES +set(SIM_DEPENDENCIES pthread mujoco::mujoco glfw @@ -25,11 +25,11 @@ set(SIM_DEPENDENCIES add_executable(unitree_mujoco ${SIM_SRC} src/main.cc) -target_link_libraries(unitree_mujoco ${SIM_DEPENDENCIES}) +target_link_libraries(unitree_mujoco ${SIM_DEPENDENCIES}) add_executable(test test/test_unitree_sdk2.cpp) target_link_libraries(test unitree_sdk2) add_executable(jstest src/joystick/jstest.cc src/joystick/joystick.cc) -SET(CMAKE_BUILD_TYPE Release) \ No newline at end of file +set(CMAKE_BUILD_TYPE Release) diff --git a/simulate/config.yaml b/simulate/config.yaml index b50a705..d2131bc 100644 --- a/simulate/config.yaml +++ b/simulate/config.yaml @@ -4,7 +4,7 @@ robot_scene: "scene.xml" # Robot scene, /unitree_robots/[robot]/scene.xml domain_id: 1 # Domain id interface: "lo" # Interface -use_joystick: 1 # Simulate Unitree WirelessController using a gamepad +use_joystick: 0 # Simulate Unitree WirelessController using a gamepad joystick_type: "xbox" # support "xbox" and "switch" gamepad layout joystick_device: "/dev/input/js0" # Device path joystick_bits: 16 # Some game controllers may only have 8-bit accuracy diff --git a/simulate/src/mujoco/array_safety.h b/simulate/src/mujoco/array_safety.h index e8dd0d7..4207a9d 100644 --- a/simulate/src/mujoco/array_safety.h +++ b/simulate/src/mujoco/array_safety.h @@ -30,76 +30,89 @@ // // They do not perform runtime bound checks. -namespace mujoco { -namespace sample_util { - -// returns sizeof(arr) -// use instead of sizeof() to avoid unintended array-to-pointer decay -template -static constexpr std::size_t sizeof_arr(const T(&arr)[N]) { - return sizeof(arr); -} - -// like std::strcmp but it will not read beyond the bound of either lhs or rhs -template -static inline int strcmp_arr(const char (&lhs)[N1], const char (&rhs)[N2]) { - return std::strncmp(lhs, rhs, std::min(N1, N2)); -} - -// like std::strlen but it will not read beyond the bound of str -// if str is not null-terminated, returns sizeof(str) -template -static inline std::size_t strlen_arr(const char (&str)[N]) { - for (std::size_t i = 0; i < N; ++i) { - if (str[i] == '\0') { - return i; - } - } - return N; -} - -// like std::sprintf but will not write beyond the bound of dest -// dest is guaranteed to be null-terminated -template -static inline int sprintf_arr(char (&dest)[N], const char* format, ...) { - std::va_list vargs; - va_start(vargs, format); - int retval = std::vsnprintf(dest, N, format, vargs); - va_end(vargs); - return retval; -} - -// like std::strcat but will not write beyond the bound of dest -// dest is guaranteed to be null-terminated -template -static inline char* strcat_arr(char (&dest)[N], const char* src) { - const std::size_t dest_len = strlen_arr(dest); - const std::size_t dest_size = sizeof_arr(dest); - for (std::size_t i = dest_len; i < dest_size; ++i) { - dest[i] = src[i - dest_len]; - if (!dest[i]) { - break; - } - } - dest[dest_size - 1] = '\0'; - return dest; -} - -// like std::strcpy but won't write beyond the bound of dest -// dest is guaranteed to be null-terminated -template -static inline char* strcpy_arr(char (&dest)[N], const char* src) { +namespace mujoco +{ + namespace sample_util { - std::size_t i = 0; - for (; src[i] && i < N - 1; ++i) { - dest[i] = src[i]; + + // returns sizeof(arr) + // use instead of sizeof() to avoid unintended array-to-pointer decay + template + static constexpr std::size_t sizeof_arr(const T (&arr)[N]) + { + return sizeof(arr); } - dest[i] = '\0'; - } - return &dest[0]; -} -} // namespace sample_util -} // namespace mujoco + // like std::strcmp but it will not read beyond the bound of either lhs or rhs + template + static inline int strcmp_arr(const char (&lhs)[N1], const char (&rhs)[N2]) + { + return std::strncmp(lhs, rhs, std::min(N1, N2)); + } -#endif // MUJOCO_SAMPLE_ARRAY_SAFETY_H_ + // like std::strlen but it will not read beyond the bound of str + // if str is not null-terminated, returns sizeof(str) + template + static inline std::size_t strlen_arr(const char (&str)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + if (str[i] == '\0') + { + return i; + } + } + return N; + } + + // like std::sprintf but will not write beyond the bound of dest + // dest is guaranteed to be null-terminated + template + static inline int sprintf_arr(char (&dest)[N], const char *format, ...) + { + std::va_list vargs; + va_start(vargs, format); + int retval = std::vsnprintf(dest, N, format, vargs); + va_end(vargs); + return retval; + } + + // like std::strcat but will not write beyond the bound of dest + // dest is guaranteed to be null-terminated + template + static inline char *strcat_arr(char (&dest)[N], const char *src) + { + const std::size_t dest_len = strlen_arr(dest); + const std::size_t dest_size = sizeof_arr(dest); + for (std::size_t i = dest_len; i < dest_size; ++i) + { + dest[i] = src[i - dest_len]; + if (!dest[i]) + { + break; + } + } + dest[dest_size - 1] = '\0'; + return dest; + } + + // like std::strcpy but won't write beyond the bound of dest + // dest is guaranteed to be null-terminated + template + static inline char *strcpy_arr(char (&dest)[N], const char *src) + { + { + std::size_t i = 0; + for (; src[i] && i < N - 1; ++i) + { + dest[i] = src[i]; + } + dest[i] = '\0'; + } + return &dest[0]; + } + + } // namespace sample_util +} // namespace mujoco + +#endif // MUJOCO_SAMPLE_ARRAY_SAFETY_H_ diff --git a/simulate/src/mujoco/glfw_adapter.cc b/simulate/src/mujoco/glfw_adapter.cc index 53da6c0..61080d6 100644 --- a/simulate/src/mujoco/glfw_adapter.cc +++ b/simulate/src/mujoco/glfw_adapter.cc @@ -26,231 +26,262 @@ #include "glfw_corevideo.h" #endif -namespace mujoco { -namespace { -int MaybeGlfwInit() { - static const int is_initialized = []() { - auto success = Glfw().glfwInit(); - if (success == GLFW_TRUE) { - std::atexit(Glfw().glfwTerminate); +namespace mujoco +{ + namespace + { + int MaybeGlfwInit() + { + static const int is_initialized = []() + { + auto success = Glfw().glfwInit(); + if (success == GLFW_TRUE) + { + std::atexit(Glfw().glfwTerminate); + } + return success; + }(); + return is_initialized; } - return success; - }(); - return is_initialized; -} -GlfwAdapter& GlfwAdapterFromWindow(GLFWwindow* window) { - return *static_cast(Glfw().glfwGetWindowUserPointer(window)); -} -} // namespace + GlfwAdapter &GlfwAdapterFromWindow(GLFWwindow *window) + { + return *static_cast(Glfw().glfwGetWindowUserPointer(window)); + } + } // namespace -GlfwAdapter::GlfwAdapter() { - if (MaybeGlfwInit() != GLFW_TRUE) { - mju_error("could not initialize GLFW"); - } + GlfwAdapter::GlfwAdapter() + { + if (MaybeGlfwInit() != GLFW_TRUE) + { + mju_error("could not initialize GLFW"); + } - // multisampling - Glfw().glfwWindowHint(GLFW_SAMPLES, 4); - Glfw().glfwWindowHint(GLFW_VISIBLE, 1); + // multisampling + Glfw().glfwWindowHint(GLFW_SAMPLES, 4); + Glfw().glfwWindowHint(GLFW_VISIBLE, 1); - // get video mode and save - vidmode_ = *Glfw().glfwGetVideoMode(Glfw().glfwGetPrimaryMonitor()); + // get video mode and save + vidmode_ = *Glfw().glfwGetVideoMode(Glfw().glfwGetPrimaryMonitor()); - // create window - window_ = Glfw().glfwCreateWindow((2 * vidmode_.width) / 3, - (2 * vidmode_.height) / 3, - "MuJoCo", nullptr, nullptr); - if (!window_) { - mju_error("could not create window"); - } + // create window + window_ = Glfw().glfwCreateWindow((2 * vidmode_.width) / 3, + (2 * vidmode_.height) / 3, + "MuJoCo", nullptr, nullptr); + if (!window_) + { + mju_error("could not create window"); + } - // save window position and size - Glfw().glfwGetWindowPos(window_, &window_pos_.first, &window_pos_.second); - Glfw().glfwGetWindowSize(window_, &window_size_.first, &window_size_.second); + // save window position and size + Glfw().glfwGetWindowPos(window_, &window_pos_.first, &window_pos_.second); + Glfw().glfwGetWindowSize(window_, &window_size_.first, &window_size_.second); - // set callbacks - Glfw().glfwSetWindowUserPointer(window_, this); - Glfw().glfwSetDropCallback( - window_, +[](GLFWwindow* window, int count, const char** paths) { - GlfwAdapterFromWindow(window).OnFilesDrop(count, paths); - }); - Glfw().glfwSetKeyCallback( - window_, +[](GLFWwindow* window, int key, int scancode, int act, int mods) { - GlfwAdapterFromWindow(window).OnKey(key, scancode, act); - }); - Glfw().glfwSetMouseButtonCallback( - window_, +[](GLFWwindow* window, int button, int act, int mods) { - GlfwAdapterFromWindow(window).OnMouseButton(button, act); - }); - Glfw().glfwSetCursorPosCallback( - window_, +[](GLFWwindow* window, double x, double y) { - GlfwAdapterFromWindow(window).OnMouseMove(x, y); - }); - Glfw().glfwSetScrollCallback( - window_, +[](GLFWwindow* window, double xoffset, double yoffset) { - GlfwAdapterFromWindow(window).OnScroll(xoffset, yoffset); - }); - Glfw().glfwSetWindowRefreshCallback( - window_, +[](GLFWwindow* window) { + // set callbacks + Glfw().glfwSetWindowUserPointer(window_, this); + Glfw().glfwSetDropCallback( + window_, +[](GLFWwindow *window, int count, const char **paths) + { GlfwAdapterFromWindow(window).OnFilesDrop(count, paths); }); + Glfw().glfwSetKeyCallback( + window_, +[](GLFWwindow *window, int key, int scancode, int act, int mods) + { GlfwAdapterFromWindow(window).OnKey(key, scancode, act); }); + Glfw().glfwSetMouseButtonCallback( + window_, +[](GLFWwindow *window, int button, int act, int mods) + { GlfwAdapterFromWindow(window).OnMouseButton(button, act); }); + Glfw().glfwSetCursorPosCallback( + window_, +[](GLFWwindow *window, double x, double y) + { GlfwAdapterFromWindow(window).OnMouseMove(x, y); }); + Glfw().glfwSetScrollCallback( + window_, +[](GLFWwindow *window, double xoffset, double yoffset) + { GlfwAdapterFromWindow(window).OnScroll(xoffset, yoffset); }); + Glfw().glfwSetWindowRefreshCallback( + window_, +[](GLFWwindow *window) + { #ifdef __APPLE__ auto& core_video = GlfwAdapterFromWindow(window).core_video_; if (core_video.has_value()) { core_video->UpdateDisplayLink(); } #endif - GlfwAdapterFromWindow(window).OnWindowRefresh(); - }); - Glfw().glfwSetWindowSizeCallback( - window_, +[](GLFWwindow* window, int width, int height) { - GlfwAdapterFromWindow(window).OnWindowResize(width, height); - }); + GlfwAdapterFromWindow(window).OnWindowRefresh(); }); + Glfw().glfwSetWindowSizeCallback( + window_, +[](GLFWwindow *window, int width, int height) + { GlfwAdapterFromWindow(window).OnWindowResize(width, height); }); - // make context current - Glfw().glfwMakeContextCurrent(window_); -} - -GlfwAdapter::~GlfwAdapter() { - FreeMjrContext(); - Glfw().glfwMakeContextCurrent(nullptr); - Glfw().glfwDestroyWindow(window_); -} - -std::pair GlfwAdapter::GetCursorPosition() const { - double x, y; - Glfw().glfwGetCursorPos(window_, &x, &y); - return {x, y}; -} - -double GlfwAdapter::GetDisplayPixelsPerInch() const { - int width_mm, height_mm; - Glfw().glfwGetMonitorPhysicalSize( - Glfw().glfwGetPrimaryMonitor(), &width_mm, &height_mm); - return 25.4 * vidmode_.width / width_mm; -} - -std::pair GlfwAdapter::GetFramebufferSize() const { - int width, height; - Glfw().glfwGetFramebufferSize(window_, &width, &height); - return {width, height}; -} - -std::pair GlfwAdapter::GetWindowSize() const { - int width, height; - Glfw().glfwGetWindowSize(window_, &width, &height); - return {width, height}; -} - -bool GlfwAdapter::IsGPUAccelerated() const { - return true; -} - -void GlfwAdapter::PollEvents() { - Glfw().glfwPollEvents(); -} - -void GlfwAdapter::SetClipboardString(const char* text) { - Glfw().glfwSetClipboardString(window_, text); -} - -void GlfwAdapter::SetVSync(bool enabled){ -#ifdef __APPLE__ - Glfw().glfwSwapInterval(0); - if (enabled && !core_video_.has_value()) { - core_video_.emplace(window_); - } else if (!enabled && core_video_.has_value()) { - core_video_.reset(); + // make context current + Glfw().glfwMakeContextCurrent(window_); } + + GlfwAdapter::~GlfwAdapter() + { + FreeMjrContext(); + Glfw().glfwMakeContextCurrent(nullptr); + Glfw().glfwDestroyWindow(window_); + } + + std::pair GlfwAdapter::GetCursorPosition() const + { + double x, y; + Glfw().glfwGetCursorPos(window_, &x, &y); + return {x, y}; + } + + double GlfwAdapter::GetDisplayPixelsPerInch() const + { + int width_mm, height_mm; + Glfw().glfwGetMonitorPhysicalSize( + Glfw().glfwGetPrimaryMonitor(), &width_mm, &height_mm); + return 25.4 * vidmode_.width / width_mm; + } + + std::pair GlfwAdapter::GetFramebufferSize() const + { + int width, height; + Glfw().glfwGetFramebufferSize(window_, &width, &height); + return {width, height}; + } + + std::pair GlfwAdapter::GetWindowSize() const + { + int width, height; + Glfw().glfwGetWindowSize(window_, &width, &height); + return {width, height}; + } + + bool GlfwAdapter::IsGPUAccelerated() const + { + return true; + } + + void GlfwAdapter::PollEvents() + { + Glfw().glfwPollEvents(); + } + + void GlfwAdapter::SetClipboardString(const char *text) + { + Glfw().glfwSetClipboardString(window_, text); + } + + void GlfwAdapter::SetVSync(bool enabled) + { +#ifdef __APPLE__ + Glfw().glfwSwapInterval(0); + if (enabled && !core_video_.has_value()) + { + core_video_.emplace(window_); + } + else if (!enabled && core_video_.has_value()) + { + core_video_.reset(); + } #else - Glfw().glfwSwapInterval(enabled); + Glfw().glfwSwapInterval(enabled); #endif -} + } -void GlfwAdapter::SetWindowTitle(const char* title) { - Glfw().glfwSetWindowTitle(window_, title); -} + void GlfwAdapter::SetWindowTitle(const char *title) + { + Glfw().glfwSetWindowTitle(window_, title); + } -bool GlfwAdapter::ShouldCloseWindow() const { - return Glfw().glfwWindowShouldClose(window_); -} + bool GlfwAdapter::ShouldCloseWindow() const + { + return Glfw().glfwWindowShouldClose(window_); + } -void GlfwAdapter::SwapBuffers() { + void GlfwAdapter::SwapBuffers() + { #ifdef __APPLE__ - if (core_video_.has_value()) { - core_video_->WaitForDisplayRefresh(); - } + if (core_video_.has_value()) + { + core_video_->WaitForDisplayRefresh(); + } #endif - Glfw().glfwSwapBuffers(window_); -} - -void GlfwAdapter::ToggleFullscreen() { - // currently full screen: switch to windowed - if (Glfw().glfwGetWindowMonitor(window_)) { - // restore window from saved data - Glfw().glfwSetWindowMonitor(window_, nullptr, window_pos_.first, window_pos_.second, - window_size_.first, window_size_.second, 0); + Glfw().glfwSwapBuffers(window_); } - // currently windowed: switch to full screen - else { - // save window data - Glfw().glfwGetWindowPos(window_, &window_pos_.first, &window_pos_.second); - Glfw().glfwGetWindowSize(window_, &window_size_.first, - &window_size_.second); + void GlfwAdapter::ToggleFullscreen() + { + // currently full screen: switch to windowed + if (Glfw().glfwGetWindowMonitor(window_)) + { + // restore window from saved data + Glfw().glfwSetWindowMonitor(window_, nullptr, window_pos_.first, window_pos_.second, + window_size_.first, window_size_.second, 0); + } - // switch - Glfw().glfwSetWindowMonitor(window_, Glfw().glfwGetPrimaryMonitor(), 0, - 0, vidmode_.width, vidmode_.height, - vidmode_.refreshRate); + // currently windowed: switch to full screen + else + { + // save window data + Glfw().glfwGetWindowPos(window_, &window_pos_.first, &window_pos_.second); + Glfw().glfwGetWindowSize(window_, &window_size_.first, + &window_size_.second); + + // switch + Glfw().glfwSetWindowMonitor(window_, Glfw().glfwGetPrimaryMonitor(), 0, + 0, vidmode_.width, vidmode_.height, + vidmode_.refreshRate); + } } -} -bool GlfwAdapter::IsLeftMouseButtonPressed() const { - return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS; -} - -bool GlfwAdapter::IsMiddleMouseButtonPressed() const { - return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS; -} - -bool GlfwAdapter::IsRightMouseButtonPressed() const { - return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS; -} - -bool GlfwAdapter::IsAltKeyPressed() const { - return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_ALT) == GLFW_PRESS || - Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_ALT) == GLFW_PRESS; -} - -bool GlfwAdapter::IsCtrlKeyPressed() const { - return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || - Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS; -} - -bool GlfwAdapter::IsShiftKeyPressed() const { - return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS || - Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS; -} - -bool GlfwAdapter::IsKeyPressed(int key) const { - return Glfw().glfwGetKey(window_, key) == GLFW_PRESS; -} - -bool GlfwAdapter::IsMouseButtonDownEvent(int act) const { - return act == GLFW_PRESS; -} - -bool GlfwAdapter::IsKeyDownEvent(int act) const { return act == GLFW_PRESS; } - -int GlfwAdapter::TranslateKeyCode(int key) const { return key; } - -mjtButton GlfwAdapter::TranslateMouseButton(int button) const { - if (button == GLFW_MOUSE_BUTTON_LEFT) { - return mjBUTTON_LEFT; - } else if (button == GLFW_MOUSE_BUTTON_RIGHT) { - return mjBUTTON_RIGHT; - } else if (button == GLFW_MOUSE_BUTTON_MIDDLE) { - return mjBUTTON_MIDDLE; + bool GlfwAdapter::IsLeftMouseButtonPressed() const + { + return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS; } - return mjBUTTON_NONE; -} -} // namespace mujoco + + bool GlfwAdapter::IsMiddleMouseButtonPressed() const + { + return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS; + } + + bool GlfwAdapter::IsRightMouseButtonPressed() const + { + return Glfw().glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS; + } + + bool GlfwAdapter::IsAltKeyPressed() const + { + return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_ALT) == GLFW_PRESS || + Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_ALT) == GLFW_PRESS; + } + + bool GlfwAdapter::IsCtrlKeyPressed() const + { + return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || + Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS; + } + + bool GlfwAdapter::IsShiftKeyPressed() const + { + return Glfw().glfwGetKey(window_, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS || + Glfw().glfwGetKey(window_, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS; + } + + bool GlfwAdapter::IsMouseButtonDownEvent(int act) const + { + return act == GLFW_PRESS; + } + + bool GlfwAdapter::IsKeyDownEvent(int act) const { return act == GLFW_PRESS; } + + int GlfwAdapter::TranslateKeyCode(int key) const { return key; } + + mjtButton GlfwAdapter::TranslateMouseButton(int button) const + { + if (button == GLFW_MOUSE_BUTTON_LEFT) + { + return mjBUTTON_LEFT; + } + else if (button == GLFW_MOUSE_BUTTON_RIGHT) + { + return mjBUTTON_RIGHT; + } + else if (button == GLFW_MOUSE_BUTTON_MIDDLE) + { + return mjBUTTON_MIDDLE; + } + return mjBUTTON_NONE; + } +} // namespace mujoco diff --git a/simulate/src/mujoco/glfw_adapter.h b/simulate/src/mujoco/glfw_adapter.h index f47e897..6e17a76 100644 --- a/simulate/src/mujoco/glfw_adapter.h +++ b/simulate/src/mujoco/glfw_adapter.h @@ -26,55 +26,55 @@ #include "glfw_corevideo.h" #endif -namespace mujoco { -class GlfwAdapter : public PlatformUIAdapter { - public: - GlfwAdapter(); - ~GlfwAdapter() override; +namespace mujoco +{ + class GlfwAdapter : public PlatformUIAdapter + { + public: + GlfwAdapter(); + ~GlfwAdapter() override; - std::pair GetCursorPosition() const override; - double GetDisplayPixelsPerInch() const override; - std::pair GetFramebufferSize() const override; - std::pair GetWindowSize() const override; - bool IsGPUAccelerated() const override; - void PollEvents() override; - void SetClipboardString(const char* text) override; - void SetVSync(bool enabled) override; - void SetWindowTitle(const char* title) override; - bool ShouldCloseWindow() const override; - void SwapBuffers() override; - void ToggleFullscreen() override; + std::pair GetCursorPosition() const override; + double GetDisplayPixelsPerInch() const override; + std::pair GetFramebufferSize() const override; + std::pair GetWindowSize() const override; + bool IsGPUAccelerated() const override; + void PollEvents() override; + void SetClipboardString(const char *text) override; + void SetVSync(bool enabled) override; + void SetWindowTitle(const char *title) override; + bool ShouldCloseWindow() const override; + void SwapBuffers() override; + void ToggleFullscreen() override; - bool IsLeftMouseButtonPressed() const override; - bool IsMiddleMouseButtonPressed() const override; - bool IsRightMouseButtonPressed() const override; + bool IsLeftMouseButtonPressed() const override; + bool IsMiddleMouseButtonPressed() const override; + bool IsRightMouseButtonPressed() const override; - bool IsAltKeyPressed() const override; - bool IsCtrlKeyPressed() const override; - bool IsShiftKeyPressed() const override; + bool IsAltKeyPressed() const override; + bool IsCtrlKeyPressed() const override; + bool IsShiftKeyPressed() const override; - bool IsKeyPressed(int key) const override; + bool IsMouseButtonDownEvent(int act) const override; + bool IsKeyDownEvent(int act) const override; - bool IsMouseButtonDownEvent(int act) const override; - bool IsKeyDownEvent(int act) const override; + int TranslateKeyCode(int key) const override; + mjtButton TranslateMouseButton(int button) const override; - int TranslateKeyCode(int key) const override; - mjtButton TranslateMouseButton(int button) const override; + private: + GLFWvidmode vidmode_; + GLFWwindow *window_; - private: - GLFWvidmode vidmode_; - GLFWwindow* window_; - - // store last window information when going to full screen - std::pair window_pos_; - std::pair window_size_; + // store last window information when going to full screen + std::pair window_pos_; + std::pair window_size_; #ifdef __APPLE__ - // Workaround for perpertually broken OpenGL VSync on macOS, - // most recently https://github.com/glfw/glfw/issues/2249. - std::optional core_video_; + // Workaround for perpertually broken OpenGL VSync on macOS, + // most recently https://github.com/glfw/glfw/issues/2249. + std::optional core_video_; #endif -}; -} // namespace mujoco + }; +} // namespace mujoco -#endif // MUJOCO_SIMULATE_GLFW_ADAPTER_H_ +#endif // MUJOCO_SIMULATE_GLFW_ADAPTER_H_ diff --git a/simulate/src/mujoco/glfw_corevideo.h b/simulate/src/mujoco/glfw_corevideo.h index d855ff3..269eecd 100644 --- a/simulate/src/mujoco/glfw_corevideo.h +++ b/simulate/src/mujoco/glfw_corevideo.h @@ -28,30 +28,31 @@ #ifdef __OBJC__ #import #else -typedef void* CVDisplayLinkRef; +typedef void *CVDisplayLinkRef; #endif // Workaround for perpertually broken OpenGL VSync on macOS, // most recently https://github.com/glfw/glfw/issues/2249. -namespace mujoco { -class GlfwCoreVideo { - public: - GlfwCoreVideo(GLFWwindow* window); - ~GlfwCoreVideo(); +namespace mujoco +{ + class GlfwCoreVideo + { + public: + GlfwCoreVideo(GLFWwindow *window); + ~GlfwCoreVideo(); - void WaitForDisplayRefresh(); - int DisplayLinkCallback(); - void UpdateDisplayLink(); + void WaitForDisplayRefresh(); + int DisplayLinkCallback(); + void UpdateDisplayLink(); - private: - GLFWwindow* window_; - CVDisplayLinkRef display_link_; + private: + GLFWwindow *window_; + CVDisplayLinkRef display_link_; - std::atomic_bool waiting_; - std::mutex mu_; - std::condition_variable cond_; -}; -} // namespace mujoco + std::atomic_bool waiting_; + std::mutex mu_; + std::condition_variable cond_; + }; +} // namespace mujoco - -#endif // MUJOCO_SIMULATE_GLFW_COREVIDEO_H_ +#endif // MUJOCO_SIMULATE_GLFW_COREVIDEO_H_ diff --git a/simulate/src/mujoco/glfw_dispatch.cc b/simulate/src/mujoco/glfw_dispatch.cc index cc408e3..359440d 100644 --- a/simulate/src/mujoco/glfw_dispatch.cc +++ b/simulate/src/mujoco/glfw_dispatch.cc @@ -15,113 +15,121 @@ #include "glfw_dispatch.h" #ifdef mjGLFW_DYNAMIC_SYMBOLS - #ifdef _MSC_VER - #include - #include - #else - #include - #endif +#ifdef _MSC_VER +#include +#include +#else +#include +#endif #endif #include #include -namespace mujoco { +namespace mujoco +{ -// return dispatch table for glfw functions -const struct Glfw& Glfw(void* dlhandle) { + // return dispatch table for glfw functions + const struct Glfw &Glfw(void *dlhandle) { - // set static init_dlhandle - static const void* init_dlhandle = dlhandle; + { + // set static init_dlhandle + static const void *init_dlhandle = dlhandle; - // check that not already initialized - if (dlhandle && dlhandle != init_dlhandle) { - std::cerr << "dlhandle is specified when GLFW dispatch table is already " - "initialized\n"; - abort(); + // check that not already initialized + if (dlhandle && dlhandle != init_dlhandle) + { + std::cerr << "dlhandle is specified when GLFW dispatch table is already " + "initialized\n"; + abort(); + } } - } - // make and intialize dispatch table - static const struct Glfw glfw = [&]() { // create and call constructor - // allocate - struct Glfw glfw; + // make and intialize dispatch table + static const struct Glfw glfw = [&]() { // create and call constructor + // allocate + struct Glfw glfw; - // load glfw dynamically + // load glfw dynamically #ifdef mjGLFW_DYNAMIC_SYMBOLS - #ifdef _MSC_VER - if (!dlhandle) dlhandle = LoadLibraryA("glfw3.dll"); - if (!dlhandle) { - std::cerr << "cannot obtain a shared object handle\n"; - abort(); - } - #define mjGLFW_RESOLVE_SYMBOL(func) \ - glfw.func = reinterpret_cast( \ - GetProcAddress(reinterpret_cast(dlhandle), #func)) - #else - if (!dlhandle) dlhandle = dlopen("nullptr", RTLD_GLOBAL | RTLD_NOW); - if (!dlhandle) { - std::cerr << "cannot obtain a shared object handle\n"; - abort(); - } - #define mjGLFW_RESOLVE_SYMBOL(func) \ - glfw.func = reinterpret_cast(dlsym(dlhandle, #func)) - #endif +#ifdef _MSC_VER + if (!dlhandle) + dlhandle = LoadLibraryA("glfw3.dll"); + if (!dlhandle) + { + std::cerr << "cannot obtain a shared object handle\n"; + abort(); + } +#define mjGLFW_RESOLVE_SYMBOL(func) \ + glfw.func = reinterpret_cast( \ + GetProcAddress(reinterpret_cast(dlhandle), #func)) #else - #define mjGLFW_RESOLVE_SYMBOL(func) glfw.func = &::func + if (!dlhandle) + dlhandle = dlopen("nullptr", RTLD_GLOBAL | RTLD_NOW); + if (!dlhandle) + { + std::cerr << "cannot obtain a shared object handle\n"; + abort(); + } +#define mjGLFW_RESOLVE_SYMBOL(func) \ + glfw.func = reinterpret_cast(dlsym(dlhandle, #func)) +#endif +#else +#define mjGLFW_RESOLVE_SYMBOL(func) glfw.func = &::func #endif - // set pointers in dispatch table -#define mjGLFW_INITIALIZE_SYMBOL(func) \ - if (!(mjGLFW_RESOLVE_SYMBOL(func))) { \ - std::cerr << "cannot dlsym " #func "\n"; \ - abort(); \ - } + // set pointers in dispatch table +#define mjGLFW_INITIALIZE_SYMBOL(func) \ + if (!(mjGLFW_RESOLVE_SYMBOL(func))) \ + { \ + std::cerr << "cannot dlsym " #func "\n"; \ + abort(); \ + } - // go/keep-sorted start - mjGLFW_INITIALIZE_SYMBOL(glfwCreateWindow); - mjGLFW_INITIALIZE_SYMBOL(glfwDestroyWindow); - mjGLFW_INITIALIZE_SYMBOL(glfwGetCursorPos); - mjGLFW_INITIALIZE_SYMBOL(glfwGetFramebufferSize); - mjGLFW_INITIALIZE_SYMBOL(glfwGetKey); - mjGLFW_INITIALIZE_SYMBOL(glfwGetMonitorPhysicalSize); - mjGLFW_INITIALIZE_SYMBOL(glfwGetMouseButton); - mjGLFW_INITIALIZE_SYMBOL(glfwGetPrimaryMonitor); - mjGLFW_INITIALIZE_SYMBOL(glfwGetTime); - mjGLFW_INITIALIZE_SYMBOL(glfwGetVideoMode); - mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowMonitor); - mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowPos); - mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowSize); - mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowUserPointer); - mjGLFW_INITIALIZE_SYMBOL(glfwInit); - mjGLFW_INITIALIZE_SYMBOL(glfwMakeContextCurrent); - mjGLFW_INITIALIZE_SYMBOL(glfwPollEvents); - mjGLFW_INITIALIZE_SYMBOL(glfwSetClipboardString); - mjGLFW_INITIALIZE_SYMBOL(glfwSetCursorPosCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetDropCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetKeyCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetMouseButtonCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetScrollCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowMonitor); - mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowRefreshCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowSizeCallback); - mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowTitle); - mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowUserPointer); - mjGLFW_INITIALIZE_SYMBOL(glfwSwapBuffers); - mjGLFW_INITIALIZE_SYMBOL(glfwSwapInterval); - mjGLFW_INITIALIZE_SYMBOL(glfwTerminate); - mjGLFW_INITIALIZE_SYMBOL(glfwWindowHint); - mjGLFW_INITIALIZE_SYMBOL(glfwWindowShouldClose); - // go/keep-sorted end + // go/keep-sorted start + mjGLFW_INITIALIZE_SYMBOL(glfwCreateWindow); + mjGLFW_INITIALIZE_SYMBOL(glfwDestroyWindow); + mjGLFW_INITIALIZE_SYMBOL(glfwGetCursorPos); + mjGLFW_INITIALIZE_SYMBOL(glfwGetFramebufferSize); + mjGLFW_INITIALIZE_SYMBOL(glfwGetKey); + mjGLFW_INITIALIZE_SYMBOL(glfwGetMonitorPhysicalSize); + mjGLFW_INITIALIZE_SYMBOL(glfwGetMouseButton); + mjGLFW_INITIALIZE_SYMBOL(glfwGetPrimaryMonitor); + mjGLFW_INITIALIZE_SYMBOL(glfwGetTime); + mjGLFW_INITIALIZE_SYMBOL(glfwGetVideoMode); + mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowMonitor); + mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowPos); + mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowSize); + mjGLFW_INITIALIZE_SYMBOL(glfwGetWindowUserPointer); + mjGLFW_INITIALIZE_SYMBOL(glfwInit); + mjGLFW_INITIALIZE_SYMBOL(glfwMakeContextCurrent); + mjGLFW_INITIALIZE_SYMBOL(glfwPollEvents); + mjGLFW_INITIALIZE_SYMBOL(glfwSetClipboardString); + mjGLFW_INITIALIZE_SYMBOL(glfwSetCursorPosCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetDropCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetKeyCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetMouseButtonCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetScrollCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowMonitor); + mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowRefreshCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowSizeCallback); + mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowTitle); + mjGLFW_INITIALIZE_SYMBOL(glfwSetWindowUserPointer); + mjGLFW_INITIALIZE_SYMBOL(glfwSwapBuffers); + mjGLFW_INITIALIZE_SYMBOL(glfwSwapInterval); + mjGLFW_INITIALIZE_SYMBOL(glfwTerminate); + mjGLFW_INITIALIZE_SYMBOL(glfwWindowHint); + mjGLFW_INITIALIZE_SYMBOL(glfwWindowShouldClose); + // go/keep-sorted end #ifdef __APPLE__ - mjGLFW_INITIALIZE_SYMBOL(glfwGetNSGLContext); + mjGLFW_INITIALIZE_SYMBOL(glfwGetNSGLContext); #endif #undef mjGLFW_INITIALIZE_SYMBOL + return glfw; + }(); return glfw; - }(); - return glfw; -} -} // namespace mujoco + } +} // namespace mujoco diff --git a/simulate/src/mujoco/glfw_dispatch.h b/simulate/src/mujoco/glfw_dispatch.h index f3bec97..051ef98 100644 --- a/simulate/src/mujoco/glfw_dispatch.h +++ b/simulate/src/mujoco/glfw_dispatch.h @@ -22,56 +22,58 @@ #include #endif -namespace mujoco { -// Dynamic dispatch table for GLFW functions required by Simulate. -// This allows us to use GLFW without introducing a link-time dependency on the -// library, which is useful e.g. when using GLFW via Python. -struct Glfw { +namespace mujoco +{ + // Dynamic dispatch table for GLFW functions required by Simulate. + // This allows us to use GLFW without introducing a link-time dependency on the + // library, which is useful e.g. when using GLFW via Python. + struct Glfw + { #define mjGLFW_DECLARE_SYMBOL(func) decltype(&::func) func - // go/keep-sorted start - mjGLFW_DECLARE_SYMBOL(glfwCreateWindow); - mjGLFW_DECLARE_SYMBOL(glfwDestroyWindow); - mjGLFW_DECLARE_SYMBOL(glfwGetCursorPos); - mjGLFW_DECLARE_SYMBOL(glfwGetFramebufferSize); - mjGLFW_DECLARE_SYMBOL(glfwGetKey); - mjGLFW_DECLARE_SYMBOL(glfwGetMonitorPhysicalSize); - mjGLFW_DECLARE_SYMBOL(glfwGetMouseButton); - mjGLFW_DECLARE_SYMBOL(glfwGetPrimaryMonitor); - mjGLFW_DECLARE_SYMBOL(glfwGetTime); - mjGLFW_DECLARE_SYMBOL(glfwGetVideoMode); - mjGLFW_DECLARE_SYMBOL(glfwGetWindowMonitor); - mjGLFW_DECLARE_SYMBOL(glfwGetWindowPos); - mjGLFW_DECLARE_SYMBOL(glfwGetWindowSize); - mjGLFW_DECLARE_SYMBOL(glfwGetWindowUserPointer); - mjGLFW_DECLARE_SYMBOL(glfwInit); - mjGLFW_DECLARE_SYMBOL(glfwMakeContextCurrent); - mjGLFW_DECLARE_SYMBOL(glfwPollEvents); - mjGLFW_DECLARE_SYMBOL(glfwSetClipboardString); - mjGLFW_DECLARE_SYMBOL(glfwSetCursorPosCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetDropCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetKeyCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetMouseButtonCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetScrollCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetWindowMonitor); - mjGLFW_DECLARE_SYMBOL(glfwSetWindowRefreshCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetWindowSizeCallback); - mjGLFW_DECLARE_SYMBOL(glfwSetWindowTitle); - mjGLFW_DECLARE_SYMBOL(glfwSetWindowUserPointer); - mjGLFW_DECLARE_SYMBOL(glfwSwapBuffers); - mjGLFW_DECLARE_SYMBOL(glfwSwapInterval); - mjGLFW_DECLARE_SYMBOL(glfwTerminate); - mjGLFW_DECLARE_SYMBOL(glfwWindowHint); - mjGLFW_DECLARE_SYMBOL(glfwWindowShouldClose); - // go/keep-sorted end + // go/keep-sorted start + mjGLFW_DECLARE_SYMBOL(glfwCreateWindow); + mjGLFW_DECLARE_SYMBOL(glfwDestroyWindow); + mjGLFW_DECLARE_SYMBOL(glfwGetCursorPos); + mjGLFW_DECLARE_SYMBOL(glfwGetFramebufferSize); + mjGLFW_DECLARE_SYMBOL(glfwGetKey); + mjGLFW_DECLARE_SYMBOL(glfwGetMonitorPhysicalSize); + mjGLFW_DECLARE_SYMBOL(glfwGetMouseButton); + mjGLFW_DECLARE_SYMBOL(glfwGetPrimaryMonitor); + mjGLFW_DECLARE_SYMBOL(glfwGetTime); + mjGLFW_DECLARE_SYMBOL(glfwGetVideoMode); + mjGLFW_DECLARE_SYMBOL(glfwGetWindowMonitor); + mjGLFW_DECLARE_SYMBOL(glfwGetWindowPos); + mjGLFW_DECLARE_SYMBOL(glfwGetWindowSize); + mjGLFW_DECLARE_SYMBOL(glfwGetWindowUserPointer); + mjGLFW_DECLARE_SYMBOL(glfwInit); + mjGLFW_DECLARE_SYMBOL(glfwMakeContextCurrent); + mjGLFW_DECLARE_SYMBOL(glfwPollEvents); + mjGLFW_DECLARE_SYMBOL(glfwSetClipboardString); + mjGLFW_DECLARE_SYMBOL(glfwSetCursorPosCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetDropCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetKeyCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetMouseButtonCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetScrollCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetWindowMonitor); + mjGLFW_DECLARE_SYMBOL(glfwSetWindowRefreshCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetWindowSizeCallback); + mjGLFW_DECLARE_SYMBOL(glfwSetWindowTitle); + mjGLFW_DECLARE_SYMBOL(glfwSetWindowUserPointer); + mjGLFW_DECLARE_SYMBOL(glfwSwapBuffers); + mjGLFW_DECLARE_SYMBOL(glfwSwapInterval); + mjGLFW_DECLARE_SYMBOL(glfwTerminate); + mjGLFW_DECLARE_SYMBOL(glfwWindowHint); + mjGLFW_DECLARE_SYMBOL(glfwWindowShouldClose); + // go/keep-sorted end #ifdef __APPLE__ - mjGLFW_DECLARE_SYMBOL(glfwGetNSGLContext); + mjGLFW_DECLARE_SYMBOL(glfwGetNSGLContext); #endif #undef mjGLFW_DECLARE_SYMBOL -}; + }; -const struct Glfw& Glfw(void* dlhandle = nullptr); -} // namespace mujoco + const struct Glfw &Glfw(void *dlhandle = nullptr); +} // namespace mujoco -#endif // MUJOCO_SIMULATE_GLFW_DISPATCH_H_ +#endif // MUJOCO_SIMULATE_GLFW_DISPATCH_H_ diff --git a/simulate/src/mujoco/platform_ui_adapter.cc b/simulate/src/mujoco/platform_ui_adapter.cc index e1b5673..11a6b34 100644 --- a/simulate/src/mujoco/platform_ui_adapter.cc +++ b/simulate/src/mujoco/platform_ui_adapter.cc @@ -16,244 +16,285 @@ #include -namespace mujoco { -PlatformUIAdapter::PlatformUIAdapter() { - mjr_defaultContext(&con_); -} - -void PlatformUIAdapter::FreeMjrContext() { - mjr_freeContext(&con_); -} - -bool PlatformUIAdapter::RefreshMjrContext(const mjModel* m, int fontscale) { - if (m != last_model_ || fontscale != last_fontscale_) { - mjr_makeContext(m, &con_, fontscale); - last_model_ = m; - last_fontscale_ = fontscale; - return true; - } - return false; -} - -bool PlatformUIAdapter::EnsureContextSize() { - return false; -} - -void PlatformUIAdapter::OnFilesDrop(int count, const char** paths) { - state_.type = mjEVENT_FILESDROP; - state_.dropcount = count; - state_.droppaths = paths; - - // application-specific processing - if (event_callback_) { - event_callback_(&state_); - } - - // remove paths pointer from mjuiState since we don't own it - state_.dropcount = 0; - state_.droppaths = nullptr; -} - -void PlatformUIAdapter::OnKey(int key, int scancode, int act) { - // translate API-specific key code - int mj_key = TranslateKeyCode(key); - if(act==GLFW_PRESS) +namespace mujoco +{ + PlatformUIAdapter::PlatformUIAdapter() { - key_7_pressed_=(key==GLFW_KEY_7); - key_8_pressed_=(key==GLFW_KEY_8); - key_9_pressed_=(key==GLFW_KEY_9); + mjr_defaultContext(&con_); } - else + + void PlatformUIAdapter::FreeMjrContext() { - key_7_pressed_=false; - key_8_pressed_=false; - key_9_pressed_=false; - } - // release: nothing to do - if (!IsKeyDownEvent(act)) { - return; + mjr_freeContext(&con_); } - // update state - UpdateMjuiState(); - - // set key info - state_.type = mjEVENT_KEY; - state_.key = mj_key; - state_.keytime = std::chrono::duration( - std::chrono::steady_clock::now().time_since_epoch()).count(); - - // application-specific processing - if (event_callback_) { - event_callback_(&state_); + bool PlatformUIAdapter::RefreshMjrContext(const mjModel *m, int fontscale) + { + if (m != last_model_ || fontscale != last_fontscale_) + { + mjr_makeContext(m, &con_, fontscale); + last_model_ = m; + last_fontscale_ = fontscale; + return true; + } + return false; } - last_key_ = mj_key; -} + bool PlatformUIAdapter::EnsureContextSize() + { + return false; + } -void PlatformUIAdapter::OnMouseButton(int button, int act) { - // translate API-specific mouse button code - mjtButton mj_button = TranslateMouseButton(button); + void PlatformUIAdapter::OnFilesDrop(int count, const char **paths) + { + state_.type = mjEVENT_FILESDROP; + state_.dropcount = count; + state_.droppaths = paths; - // update state - UpdateMjuiState(); + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } - // swap left and right if Alt - if (state_.alt) { - if (mj_button == mjBUTTON_LEFT) { - mj_button = mjBUTTON_RIGHT; - } else if (mj_button == mjBUTTON_RIGHT) { - mj_button = mjBUTTON_LEFT; + // remove paths pointer from mjuiState since we don't own it + state_.dropcount = 0; + state_.droppaths = nullptr; + } + + void PlatformUIAdapter::OnKey(int key, int scancode, int act) + { + // translate API-specific key code + int mj_key = TranslateKeyCode(key); + + if (act == GLFW_PRESS) + { + key_7_pressed_ = (key == GLFW_KEY_7); + key_8_pressed_ = (key == GLFW_KEY_8); + key_9_pressed_ = (key == GLFW_KEY_9); + } + else + { + key_7_pressed_ = false; + key_8_pressed_ = false; + key_9_pressed_ = false; + } + + // release: nothing to do + if (!IsKeyDownEvent(act)) + { + return; + } + + // update state + UpdateMjuiState(); + + // set key info + state_.type = mjEVENT_KEY; + state_.key = mj_key; + state_.keytime = std::chrono::duration( + std::chrono::steady_clock::now().time_since_epoch()) + .count(); + + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } + + last_key_ = mj_key; + } + + void PlatformUIAdapter::OnMouseButton(int button, int act) + { + // translate API-specific mouse button code + mjtButton mj_button = TranslateMouseButton(button); + + // update state + UpdateMjuiState(); + + // swap left and right if Alt + if (state_.alt) + { + if (mj_button == mjBUTTON_LEFT) + { + mj_button = mjBUTTON_RIGHT; + } + else if (mj_button == mjBUTTON_RIGHT) + { + mj_button = mjBUTTON_LEFT; + } + } + + // press + if (IsMouseButtonDownEvent(act)) + { + double now = std::chrono::duration( + std::chrono::steady_clock::now().time_since_epoch()) + .count(); + + // detect doubleclick: 250 ms + if (mj_button == state_.button && now - state_.buttontime < 0.25) + { + state_.doubleclick = 1; + } + else + { + state_.doubleclick = 0; + } + + // set info + state_.type = mjEVENT_PRESS; + state_.button = mj_button; + state_.buttontime = now; + + // start dragging + if (state_.mouserect) + { + state_.dragbutton = state_.button; + state_.dragrect = state_.mouserect; + } + } + + // release + else + { + state_.type = mjEVENT_RELEASE; + } + + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } + + // stop dragging after application processing + if (state_.type == mjEVENT_RELEASE) + { + state_.dragrect = 0; + state_.dragbutton = 0; } } - // press - if (IsMouseButtonDownEvent(act)) { - double now = std::chrono::duration( - std::chrono::steady_clock::now().time_since_epoch()).count(); - - // detect doubleclick: 250 ms - if (mj_button == state_.button && now - state_.buttontime < 0.25) { - state_.doubleclick = 1; - } else { - state_.doubleclick = 0; + void PlatformUIAdapter::OnMouseMove(double x, double y) + { + // no buttons down: nothing to do + if (!state_.left && !state_.right && !state_.middle) + { + return; } - // set info - state_.type = mjEVENT_PRESS; - state_.button = mj_button; - state_.buttontime = now; + // update state + UpdateMjuiState(); - // start dragging - if (state_.mouserect) { - state_.dragbutton = state_.button; - state_.dragrect = state_.mouserect; + // set move info + state_.type = mjEVENT_MOVE; + + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); } } - // release - else { - state_.type = mjEVENT_RELEASE; + void PlatformUIAdapter::OnScroll(double xoffset, double yoffset) + { + // update state + UpdateMjuiState(); + + // set scroll info, scale by buffer-to-window ratio + const double buffer_window_ratio = + static_cast(GetFramebufferSize().first) / GetWindowSize().first; + state_.type = mjEVENT_SCROLL; + state_.sx = xoffset * buffer_window_ratio; + state_.sy = yoffset * buffer_window_ratio; + + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } } - // application-specific processing - if (event_callback_) { - event_callback_(&state_); + void PlatformUIAdapter::OnWindowRefresh() + { + state_.type = mjEVENT_REDRAW; + + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } } - // stop dragging after application processing - if (state_.type == mjEVENT_RELEASE) { - state_.dragrect = 0; + void PlatformUIAdapter::OnWindowResize(int width, int height) + { + auto [buf_width, buf_height] = GetFramebufferSize(); + state_.rect[0].width = buf_width; + state_.rect[0].height = buf_height; + if (state_.nrect < 1) + state_.nrect = 1; + + // update window layout + if (layout_callback_) + { + layout_callback_(&state_); + } + + // update state + UpdateMjuiState(); + + // set resize info + state_.type = mjEVENT_RESIZE; + + // stop dragging state_.dragbutton = 0; - } -} + state_.dragrect = 0; -void PlatformUIAdapter::OnMouseMove(double x, double y) { - // no buttons down: nothing to do - if (!state_.left && !state_.right && !state_.middle) { - return; + // application-specific processing + if (event_callback_) + { + event_callback_(&state_); + } } - // update state - UpdateMjuiState(); + void PlatformUIAdapter::UpdateMjuiState() + { + // mouse buttons + state_.left = IsLeftMouseButtonPressed(); + state_.right = IsRightMouseButtonPressed(); + state_.middle = IsMiddleMouseButtonPressed(); - // set move info - state_.type = mjEVENT_MOVE; + // keyboard modifiers + state_.control = IsCtrlKeyPressed(); + state_.shift = IsShiftKeyPressed(); + state_.alt = IsAltKeyPressed(); - // application-specific processing - if (event_callback_) { - event_callback_(&state_); + // swap left and right if Alt + if (state_.alt) + { + int tmp = state_.left; + state_.left = state_.right; + state_.right = tmp; + } + + // get mouse position, scale by buffer-to-window ratio + auto [x, y] = GetCursorPosition(); + const double buffer_window_ratio = + static_cast(GetFramebufferSize().first) / GetWindowSize().first; + x *= buffer_window_ratio; + y *= buffer_window_ratio; + + // invert y to match OpenGL convention + y = state_.rect[0].height - y; + + // save + state_.dx = x - state_.x; + state_.dy = y - state_.y; + state_.x = x; + state_.y = y; + + // find mouse rectangle + state_.mouserect = mjr_findRect(mju_round(x), mju_round(y), state_.nrect - 1, state_.rect + 1) + 1; } -} - -void PlatformUIAdapter::OnScroll(double xoffset, double yoffset) { - // update state - UpdateMjuiState(); - - // set scroll info, scale by buffer-to-window ratio - const double buffer_window_ratio = - static_cast(GetFramebufferSize().first) / GetWindowSize().first; - state_.type = mjEVENT_SCROLL; - state_.sx = xoffset * buffer_window_ratio; - state_.sy = yoffset * buffer_window_ratio; - - // application-specific processing - if (event_callback_) { - event_callback_(&state_); - } -} - -void PlatformUIAdapter::OnWindowRefresh() { - state_.type = mjEVENT_REDRAW; - - // application-specific processing - if (event_callback_) { - event_callback_(&state_); - } -} - -void PlatformUIAdapter::OnWindowResize(int width, int height) { - auto [buf_width, buf_height] = GetFramebufferSize(); - state_.rect[0].width = buf_width; - state_.rect[0].height = buf_height; - if (state_.nrect < 1) state_.nrect = 1; - - // update window layout - if (layout_callback_) { - layout_callback_(&state_); - } - - // update state - UpdateMjuiState(); - - // set resize info - state_.type = mjEVENT_RESIZE; - - // stop dragging - state_.dragbutton = 0; - state_.dragrect = 0; - - // application-specific processing - if (event_callback_) { - event_callback_(&state_); - } -} - -void PlatformUIAdapter::UpdateMjuiState() { - // mouse buttons - state_.left = IsLeftMouseButtonPressed(); - state_.right = IsRightMouseButtonPressed(); - state_.middle = IsMiddleMouseButtonPressed(); - - // keyboard modifiers - state_.control = IsCtrlKeyPressed(); - state_.shift = IsShiftKeyPressed(); - state_.alt = IsAltKeyPressed(); - - // swap left and right if Alt - if (state_.alt) { - int tmp = state_.left; - state_.left = state_.right; - state_.right = tmp; - } - - // get mouse position, scale by buffer-to-window ratio - auto [x, y] = GetCursorPosition(); - const double buffer_window_ratio = - static_cast(GetFramebufferSize().first) / GetWindowSize().first; - x *= buffer_window_ratio; - y *= buffer_window_ratio; - - // invert y to match OpenGL convention - y = state_.rect[0].height - y; - - // save - state_.dx = x - state_.x; - state_.dy = y - state_.y; - state_.x = x; - state_.y = y; - - // find mouse rectangle - state_.mouserect = mjr_findRect(mju_round(x), mju_round(y), state_.nrect-1, state_.rect+1) + 1; -} -} // namespace mujoco +} // namespace mujoco diff --git a/simulate/src/mujoco/platform_ui_adapter.h b/simulate/src/mujoco/platform_ui_adapter.h index 82d77ea..325690c 100644 --- a/simulate/src/mujoco/platform_ui_adapter.h +++ b/simulate/src/mujoco/platform_ui_adapter.h @@ -18,7 +18,6 @@ #include #include #include - #include namespace mujoco @@ -71,8 +70,6 @@ namespace mujoco virtual bool IsCtrlKeyPressed() const = 0; virtual bool IsShiftKeyPressed() const = 0; - virtual bool IsKeyPressed(int key) const = 0; - virtual bool IsMouseButtonDownEvent(int act) const = 0; virtual bool IsKeyDownEvent(int act) const = 0; diff --git a/simulate/src/mujoco/simulate.cc b/simulate/src/mujoco/simulate.cc index b88843c..1cc179a 100644 --- a/simulate/src/mujoco/simulate.cc +++ b/simulate/src/mujoco/simulate.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -26,7 +27,7 @@ #include #include -// #include "lodepng.h" +//#include "lodepng.h" #include #include #include @@ -132,7 +133,7 @@ namespace // file section of UI const mjuiDef defFile[] = { - {mjITEM_SECTION, "File", 1, nullptr, "AF"}, + {mjITEM_SECTION, "File", mjPRESERVE, nullptr, "AF"}, {mjITEM_BUTTON, "Save xml", 2, nullptr, ""}, {mjITEM_BUTTON, "Save mjb", 2, nullptr, ""}, {mjITEM_BUTTON, "Print model", 2, nullptr, "CM"}, @@ -651,13 +652,13 @@ namespace // prepare info text mju::strcpy_arr(title, "Time\nSize\nCPU\nSolver \nFPS\nMemory"); mju::sprintf_arr(content, - "%-9.3f\n%d (%d con)\n%.3f\n%.1f (%d it)\n%s\n%.2g of %s", + "%-9.3f\n%d (%d con)\n%.3f\n%.1f (%d it)\n%s\n%.1f%% of %s", d->time, d->nefc, d->ncon, sim->run ? d->timer[mjTIMER_STEP].duration / mjMAX(1, d->timer[mjTIMER_STEP].number) : d->timer[mjTIMER_FORWARD].duration / mjMAX(1, d->timer[mjTIMER_FORWARD].number), solerr, solver_niter, fps, - d->maxuse_arena / (double)(d->narena), + 100 * d->maxuse_arena / (double)(d->narena), mju_writeNumBytes(d->narena)); // add Energy if enabled @@ -728,16 +729,16 @@ namespace //---------------------------------- UI construction ----------------------------------------------- // make physics section of UI - void MakePhysicsSection(mj::Simulate *sim, int oldstate) + void MakePhysicsSection(mj::Simulate *sim) { mjOption *opt = sim->is_passive_ ? &sim->scnstate_.model.opt : &sim->m_->opt; mjuiDef defPhysics[] = { - {mjITEM_SECTION, "Physics", oldstate, nullptr, "AP"}, + {mjITEM_SECTION, "Physics", mjPRESERVE, nullptr, "AP"}, {mjITEM_SELECT, "Integrator", 2, &(opt->integrator), "Euler\nRK4\nimplicit\nimplicitfast"}, {mjITEM_SELECT, "Cone", 2, &(opt->cone), "Pyramidal\nElliptic"}, {mjITEM_SELECT, "Jacobian", 2, &(opt->jacobian), "Dense\nSparse\nAuto"}, {mjITEM_SELECT, "Solver", 2, &(opt->solver), "PGS\nCG\nNewton"}, - {mjITEM_SEPARATOR, "Algorithmic Parameters", 1}, + {mjITEM_SEPARATOR, "Algorithmic Parameters", mjPRESERVE}, {mjITEM_EDITNUM, "Timestep", 2, &(opt->timestep), "1 0 1"}, {mjITEM_EDITINT, "Iterations", 2, &(opt->iterations), "1 0 1000"}, {mjITEM_EDITNUM, "Tolerance", 2, &(opt->tolerance), "1 0 1"}, @@ -745,38 +746,38 @@ namespace {mjITEM_EDITNUM, "LS Tol", 2, &(opt->ls_tolerance), "1 0 0.1"}, {mjITEM_EDITINT, "Noslip Iter", 2, &(opt->noslip_iterations), "1 0 1000"}, {mjITEM_EDITNUM, "Noslip Tol", 2, &(opt->noslip_tolerance), "1 0 1"}, - {mjITEM_EDITINT, "MPR Iter", 2, &(opt->mpr_iterations), "1 0 1000"}, - {mjITEM_EDITNUM, "MPR Tol", 2, &(opt->mpr_tolerance), "1 0 1"}, + {mjITEM_EDITINT, "CCD Iter", 2, &(opt->ccd_iterations), "1 0 1000"}, + {mjITEM_EDITNUM, "CCD Tol", 2, &(opt->ccd_tolerance), "1 0 1"}, {mjITEM_EDITNUM, "API Rate", 2, &(opt->apirate), "1 0 1000"}, {mjITEM_EDITINT, "SDF Iter", 2, &(opt->sdf_iterations), "1 1 20"}, {mjITEM_EDITINT, "SDF Init", 2, &(opt->sdf_initpoints), "1 1 100"}, - {mjITEM_SEPARATOR, "Physical Parameters", 1}, + {mjITEM_SEPARATOR, "Physical Parameters", mjPRESERVE}, {mjITEM_EDITNUM, "Gravity", 2, opt->gravity, "3"}, {mjITEM_EDITNUM, "Wind", 2, opt->wind, "3"}, {mjITEM_EDITNUM, "Magnetic", 2, opt->magnetic, "3"}, {mjITEM_EDITNUM, "Density", 2, &(opt->density), "1"}, {mjITEM_EDITNUM, "Viscosity", 2, &(opt->viscosity), "1"}, {mjITEM_EDITNUM, "Imp Ratio", 2, &(opt->impratio), "1"}, - {mjITEM_SEPARATOR, "Disable Flags", 1}, + {mjITEM_SEPARATOR, "Disable Flags", mjPRESERVE}, {mjITEM_END}}; mjuiDef defEnableFlags[] = { - {mjITEM_SEPARATOR, "Enable Flags", 1}, + {mjITEM_SEPARATOR, "Enable Flags", mjPRESERVE}, {mjITEM_END}}; mjuiDef defOverride[] = { - {mjITEM_SEPARATOR, "Contact Override", 1}, + {mjITEM_SEPARATOR, "Contact Override", mjPRESERVE}, {mjITEM_EDITNUM, "Margin", 2, &(opt->o_margin), "1"}, {mjITEM_EDITNUM, "Sol Imp", 2, &(opt->o_solimp), "5"}, {mjITEM_EDITNUM, "Sol Ref", 2, &(opt->o_solref), "2"}, {mjITEM_EDITNUM, "Friction", 2, &(opt->o_friction), "5"}, {mjITEM_END}}; mjuiDef defDisableActuator[] = { - {mjITEM_SEPARATOR, "Actuator Group Enable", 1}, - {mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator + 0, " 0"}, - {mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator + 1, " 1"}, - {mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator + 2, " 2"}, - {mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator + 3, " 3"}, - {mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator + 4, " 4"}, - {mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator + 5, " 5"}, + {mjITEM_SEPARATOR, "Actuator Group Enable", mjPRESERVE}, + {mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator + 0, ""}, + {mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator + 1, ""}, + {mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator + 2, ""}, + {mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator + 3, ""}, + {mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator + 4, ""}, + {mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator + 5, ""}, {mjITEM_END}}; // add physics @@ -804,41 +805,38 @@ namespace // add actuator group enable/disable mjui_add(&sim->ui0, defDisableActuator); + + // make some subsections closed by default + for (int i = 0; i < sim->ui0.sect[SECT_PHYSICS].nitem; i++) + { + mjuiItem *it = sim->ui0.sect[SECT_PHYSICS].item + i; + + // close less useful subsections + if (it->type == mjITEM_SEPARATOR) + { + if (mju::strcmp_arr(it->name, "Actuator Group Enable") && + mju::strcmp_arr(it->name, "Contact Override") && + mju::strcmp_arr(it->name, "Physical Parameters")) + { + it->state = mjSEPCLOSED + 1; + } + } + } } // make rendering section of UI - void MakeRenderingSection(mj::Simulate *sim, const mjModel *m, int oldstate) + void MakeRenderingSection(mj::Simulate *sim, const mjModel *m) { mjuiDef defRendering[] = { - {mjITEM_SECTION, - "Rendering", - oldstate, - nullptr, - "AR"}, - {mjITEM_SELECT, - "Camera", - 2, - &(sim->camera), - "Free\nTracking"}, - {mjITEM_SELECT, - "Label", - 2, - &(sim->opt.label), + {mjITEM_SECTION, "Rendering", mjPRESERVE, nullptr, "AR"}, + {mjITEM_SELECT, "Camera", 2, &(sim->camera), "Free\nTracking"}, + {mjITEM_SELECT, "Label", 2, &(sim->opt.label), "None\nBody\nJoint\nGeom\nSite\nCamera\nLight\nTendon\n" "Actuator\nConstraint\nFlex\nSkin\nSelection\nSel Pnt\nContact\nForce\nIsland"}, - {mjITEM_SELECT, - "Frame", - 2, - &(sim->opt.frame), + {mjITEM_SELECT, "Frame", 2, &(sim->opt.frame), "None\nBody\nGeom\nSite\nCamera\nLight\nContact\nWorld"}, - {mjITEM_BUTTON, - "Copy camera", - 2, - nullptr, - ""}, - {mjITEM_SEPARATOR, - "Model Elements", - 1}, + {mjITEM_BUTTON, "Copy camera", 2, nullptr, ""}, + {mjITEM_SEPARATOR, "Model Elements", 1}, {mjITEM_END}}; mjuiDef defOpenGL[] = { {mjITEM_SEPARATOR, "OpenGL Effects", 1}, @@ -877,17 +875,8 @@ namespace {mjITEM_END}}; for (int i = 0; i < mjNVISFLAG; i++) { - // set name, remove "&" + // set name mju::strcpy_arr(defFlag[0].name, mjVISSTRING[i][0]); - for (int j = 0; j < strlen(mjVISSTRING[i][0]); j++) - { - if (mjVISSTRING[i][0][j] == '&') - { - mju_strncpy( - defFlag[0].name + j, mjVISSTRING[i][0] + j + 1, mju::sizeof_arr(defFlag[0].name) - j); - break; - } - } // set shortcut and data if (mjVISSTRING[i][2][0]) @@ -913,7 +902,10 @@ namespace mjui_add(&sim->ui0, defOpenGL); for (int i = 0; i < mjNRNDFLAG; i++) { + // set name mju::strcpy_arr(defFlag[0].name, mjRNDSTRING[i][0]); + + // set shortcut and data if (mjRNDSTRING[i][2][0]) { mju::sprintf_arr(defFlag[0].other, " %s", mjRNDSTRING[i][2]); @@ -928,27 +920,29 @@ namespace } // make visualization section of UI - void MakeVisualizationSection(mj::Simulate *sim, const mjModel *m, int oldstate) + void MakeVisualizationSection(mj::Simulate *sim, const mjModel *m) { mjStatistic *stat = sim->is_passive_ ? &sim->scnstate_.model.stat : &sim->m_->stat; mjVisual *vis = sim->is_passive_ ? &sim->scnstate_.model.vis : &sim->m_->vis; mjuiDef defVisualization[] = { - {mjITEM_SECTION, "Visualization", oldstate, nullptr, "AV"}, + {mjITEM_SECTION, "Visualization", mjPRESERVE, nullptr, "AV"}, {mjITEM_SEPARATOR, "Headlight", 1}, {mjITEM_RADIO, "Active", 5, &(vis->headlight.active), "Off\nOn"}, {mjITEM_EDITFLOAT, "Ambient", 2, &(vis->headlight.ambient), "3"}, {mjITEM_EDITFLOAT, "Diffuse", 2, &(vis->headlight.diffuse), "3"}, {mjITEM_EDITFLOAT, "Specular", 2, &(vis->headlight.specular), "3"}, - {mjITEM_SEPARATOR, "Initial Free Camera", 1}, + {mjITEM_SEPARATOR, "Free Camera", 1}, + {mjITEM_RADIO, "Orthographic", 2, &(vis->global.orthographic), "No\nYes"}, + {mjITEM_EDITFLOAT, "Field of view", 2, &(vis->global.fovy), "1"}, {mjITEM_EDITNUM, "Center", 2, &(stat->center), "3"}, {mjITEM_EDITFLOAT, "Azimuth", 2, &(vis->global.azimuth), "1"}, {mjITEM_EDITFLOAT, "Elevation", 2, &(vis->global.elevation), "1"}, {mjITEM_BUTTON, "Align", 2, nullptr, "CA"}, {mjITEM_SEPARATOR, "Global", 1}, {mjITEM_EDITNUM, "Extent", 2, &(stat->extent), "1"}, - {mjITEM_EDITFLOAT, "Field of view", 2, &(vis->global.fovy), "1"}, {mjITEM_RADIO, "Inertia", 5, &(vis->global.ellipsoidinertia), "Box\nEllipsoid"}, + {mjITEM_RADIO, "BVH active", 5, &(vis->global.bvactive), "False\nTrue"}, {mjITEM_SEPARATOR, "Map", 1}, {mjITEM_EDITFLOAT, "Stiffness", 2, &(vis->map.stiffness), "1"}, {mjITEM_EDITFLOAT, "Rot stiffness", 2, &(vis->map.stiffnessrot), "1"}, @@ -962,8 +956,8 @@ namespace {mjITEM_EDITFLOAT, "Haze", 2, &(vis->map.haze), "1"}, {mjITEM_EDITFLOAT, "Shadow clip", 2, &(vis->map.shadowclip), "1"}, {mjITEM_EDITFLOAT, "Shadow scale", 2, &(vis->map.shadowscale), "1"}, - {mjITEM_SEPARATOR, "Scale", 1}, - {mjITEM_EDITNUM, "All [meansize]", 2, &(stat->meansize), "1"}, + {mjITEM_SEPARATOR, "Scale", mjPRESERVE}, + {mjITEM_EDITNUM, "All (meansize)", 2, &(stat->meansize), "1"}, {mjITEM_EDITFLOAT, "Force width", 2, &(vis->scale.forcewidth), "1"}, {mjITEM_EDITFLOAT, "Contact width", 2, &(vis->scale.contactwidth), "1"}, {mjITEM_EDITFLOAT, "Contact height", 2, &(vis->scale.contactheight), "1"}, @@ -980,17 +974,43 @@ namespace {mjITEM_EDITFLOAT, "Frame width", 2, &(vis->scale.framewidth), "1"}, {mjITEM_EDITFLOAT, "Constraint", 2, &(vis->scale.constraint), "1"}, {mjITEM_EDITFLOAT, "Slider-crank", 2, &(vis->scale.slidercrank), "1"}, + {mjITEM_SEPARATOR, "RGBA", mjPRESERVE}, + {mjITEM_EDITFLOAT, "fog", 2, &(vis->rgba.fog), "4"}, + {mjITEM_EDITFLOAT, "haze", 2, &(vis->rgba.haze), "4"}, + {mjITEM_EDITFLOAT, "force", 2, &(vis->rgba.force), "4"}, + {mjITEM_EDITFLOAT, "inertia", 2, &(vis->rgba.inertia), "4"}, + {mjITEM_EDITFLOAT, "joint", 2, &(vis->rgba.joint), "4"}, + {mjITEM_EDITFLOAT, "actuator", 2, &(vis->rgba.actuator), "4"}, + {mjITEM_EDITFLOAT, "actnegative", 2, &(vis->rgba.actuatornegative), "4"}, + {mjITEM_EDITFLOAT, "actpositive", 2, &(vis->rgba.actuatorpositive), "4"}, + {mjITEM_EDITFLOAT, "com", 2, &(vis->rgba.com), "4"}, + {mjITEM_EDITFLOAT, "camera", 2, &(vis->rgba.camera), "4"}, + {mjITEM_EDITFLOAT, "light", 2, &(vis->rgba.light), "4"}, + {mjITEM_EDITFLOAT, "selectpoint", 2, &(vis->rgba.selectpoint), "4"}, + {mjITEM_EDITFLOAT, "connect", 2, &(vis->rgba.connect), "4"}, + {mjITEM_EDITFLOAT, "contactpoint", 2, &(vis->rgba.contactpoint), "4"}, + {mjITEM_EDITFLOAT, "contactforce", 2, &(vis->rgba.contactforce), "4"}, + {mjITEM_EDITFLOAT, "contactfriction", 2, &(vis->rgba.contactfriction), "4"}, + {mjITEM_EDITFLOAT, "contacttorque", 2, &(vis->rgba.contacttorque), "4"}, + {mjITEM_EDITFLOAT, "contactgap", 2, &(vis->rgba.contactgap), "4"}, + {mjITEM_EDITFLOAT, "rangefinder", 2, &(vis->rgba.rangefinder), "4"}, + {mjITEM_EDITFLOAT, "constraint", 2, &(vis->rgba.constraint), "4"}, + {mjITEM_EDITFLOAT, "slidercrank", 2, &(vis->rgba.slidercrank), "4"}, + {mjITEM_EDITFLOAT, "crankbroken", 2, &(vis->rgba.crankbroken), "4"}, + {mjITEM_EDITFLOAT, "frustum", 2, &(vis->rgba.frustum), "4"}, + {mjITEM_EDITFLOAT, "bv", 2, &(vis->rgba.bv), "4"}, + {mjITEM_EDITFLOAT, "bvactive", 2, &(vis->rgba.bvactive), "4"}, {mjITEM_END}}; - // add rendering standard + // add visualization section mjui_add(&sim->ui0, defVisualization); } // make group section of UI - void MakeGroupSection(mj::Simulate *sim, int oldstate) + void MakeGroupSection(mj::Simulate *sim) { mjuiDef defGroup[] = { - {mjITEM_SECTION, "Group enable", oldstate, nullptr, "AG"}, + {mjITEM_SECTION, "Group enable", mjPRESERVE, nullptr, "AG"}, {mjITEM_SEPARATOR, "Geom groups", 1}, {mjITEM_CHECKBYTE, "Geom 0", 2, sim->opt.geomgroup, " 0"}, {mjITEM_CHECKBYTE, "Geom 1", 2, sim->opt.geomgroup + 1, " 1"}, @@ -1047,10 +1067,10 @@ namespace } // make joint section of UI - void MakeJointSection(mj::Simulate *sim, int oldstate) + void MakeJointSection(mj::Simulate *sim) { mjuiDef defJoint[] = { - {mjITEM_SECTION, "Joint", oldstate, nullptr, "AJ"}, + {mjITEM_SECTION, "Joint", mjPRESERVE, nullptr, "AJ"}, {mjITEM_END}}; mjuiDef defSlider[] = { {mjITEM_SLIDERNUM, "", 2, nullptr, "0 1"}, @@ -1111,10 +1131,10 @@ namespace } // make control section of UI - void MakeControlSection(mj::Simulate *sim, int oldstate) + void MakeControlSection(mj::Simulate *sim) { mjuiDef defControl[] = { - {mjITEM_SECTION, "Control", oldstate, nullptr, "AC"}, + {mjITEM_SECTION, "Control", mjPRESERVE, nullptr, "AC"}, {mjITEM_BUTTON, "Clear all", 2}, {mjITEM_END}}; mjuiDef defSlider[] = { @@ -1180,39 +1200,17 @@ namespace // make model-dependent UI sections void MakeUiSections(mj::Simulate *sim, const mjModel *m, const mjData *d) { - // get section open-close state, UI 0 - int oldstate0[NSECT0]; - for (int i = 0; i < NSECT0; i++) - { - oldstate0[i] = 0; - if (sim->ui0.nsect > i) - { - oldstate0[i] = sim->ui0.sect[i].state; - } - } - - // get section open-close state, UI 1 - int oldstate1[NSECT1]; - for (int i = 0; i < NSECT1; i++) - { - oldstate1[i] = 0; - if (sim->ui1.nsect > i) - { - oldstate1[i] = sim->ui1.sect[i].state; - } - } - // clear model-dependent sections of UI sim->ui0.nsect = SECT_PHYSICS; sim->ui1.nsect = 0; // make - MakePhysicsSection(sim, oldstate0[SECT_PHYSICS]); - MakeRenderingSection(sim, m, oldstate0[SECT_RENDERING]); - MakeVisualizationSection(sim, m, oldstate0[SECT_VISUALIZATION]); - MakeGroupSection(sim, oldstate0[SECT_GROUP]); - MakeJointSection(sim, oldstate1[SECT_JOINT]); - MakeControlSection(sim, oldstate1[SECT_CONTROL]); + MakePhysicsSection(sim); + MakeRenderingSection(sim, m); + MakeVisualizationSection(sim, m); + MakeGroupSection(sim); + MakeJointSection(sim); + MakeControlSection(sim); } //---------------------------------- utility functions --------------------------------------------- @@ -1245,7 +1243,9 @@ namespace // millisecond timer, for MuJoCo built-in profiler mjtNum Timer() { - return Milliseconds(mj::Simulate::Clock::now().time_since_epoch()).count(); + static auto start = mj::Simulate::Clock::now(); + auto elapsed = Milliseconds(mj::Simulate::Clock::now() - start); + return elapsed.count(); } // clear all times @@ -1383,7 +1383,7 @@ namespace return sim->m_ || sim->is_passive_; case 3: // require model and nkey - return !sim->is_passive_ && sim->nkey_; + return (sim->m_ || sim->is_passive_) && sim->nkey_; case 4: // require model and paused return sim->m_ && !sim->run; @@ -1424,10 +1424,24 @@ namespace rect[3].height = rect[0].height; } + // modify UI void UiModify(mjUI *ui, mjuiState *state, mjrContext *con) { mjui_resize(ui, con); - mjr_addAux(ui->auxid, ui->width, ui->maxheight, ui->spacing.samples, con); + + // remake aux buffer only if missing or different + int id = ui->auxid; + if (con->auxFBO[id] == 0 || + con->auxFBO_r[id] == 0 || + con->auxColor[id] == 0 || + con->auxColor_r[id] == 0 || + con->auxWidth[id] != ui->width || + con->auxHeight[id] != ui->maxheight || + con->auxSamples[id] != ui->spacing.samples) + { + mjr_addAux(id, ui->width, ui->maxheight, ui->spacing.samples, con); + } + UiLayout(state); mjui_update(-1, -1, ui, state, con); } @@ -1648,7 +1662,7 @@ namespace if (it->name[0] == 'J' && it->name[1] == 'o') { sim->ui1.nsect = SECT_JOINT; - MakeJointSection(sim, sim->ui1.sect[SECT_JOINT].state); + MakeJointSection(sim); sim->ui1.nsect = NSECT1; UiModify(&sim->ui1, state, &sim->platform_ui->mjr_context()); } @@ -1723,10 +1737,11 @@ namespace mjui0_update_section(sim, SECT_SIMULATION); } - // not in scrubber: step + // not in scrubber: step, add to history buffer else { mj_step(sim->m_, sim->d_); + sim->AddToHistory(); } UpdateProfiler(sim, sim->m_, sim->d_); @@ -2027,6 +2042,10 @@ namespace mujoco { return; } + if (this->exitrequest.load()) + { + return; + } bool update_profiler = this->profiler && (this->pause_update || this->run); bool update_sensor = this->sensor && (this->pause_update || this->run); @@ -2108,7 +2127,7 @@ namespace mujoco X(impratio); X(tolerance); X(noslip_tolerance); - X(mpr_tolerance); + X(ccd_tolerance); X(gravity); X(wind); X(magnetic); @@ -2124,7 +2143,7 @@ namespace mujoco X(solver); X(iterations); X(noslip_iterations); - X(mpr_iterations); + X(ccd_iterations); X(disableflags); X(enableflags); X(disableactuator); @@ -2182,6 +2201,7 @@ namespace mujoco { mj_resetData(m_, d_); mj_forward(m_, d_); + load_error[0] = '\0'; update_profiler = true; update_sensor = true; scrub_index = 0; @@ -2211,14 +2231,7 @@ namespace mujoco if (pending_.load_key) { - int i = this->key; - d_->time = m_->key_time[i]; - mju_copy(d_->qpos, m_->key_qpos + i * m_->nq, m_->nq); - mju_copy(d_->qvel, m_->key_qvel + i * m_->nv, m_->nv); - mju_copy(d_->act, m_->key_act + i * m_->na, m_->na); - mju_copy(d_->mocap_pos, m_->key_mpos + i * 3 * m_->nmocap, 3 * m_->nmocap); - mju_copy(d_->mocap_quat, m_->key_mquat + i * 4 * m_->nmocap, 4 * m_->nmocap); - mju_copy(d_->ctrl, m_->key_ctrl + i * m_->nu, m_->nu); + mj_resetDataKeyframe(m_, d_, this->key); mj_forward(m_, d_); update_profiler = true; update_sensor = true; @@ -2227,14 +2240,7 @@ namespace mujoco if (pending_.save_key) { - int i = this->key; - m_->key_time[i] = d_->time; - mju_copy(m_->key_qpos + i * m_->nq, d_->qpos, m_->nq); - mju_copy(m_->key_qvel + i * m_->nv, d_->qvel, m_->nv); - mju_copy(m_->key_act + i * m_->na, d_->act, m_->na); - mju_copy(m_->key_mpos + i * 3 * m_->nmocap, d_->mocap_pos, 3 * m_->nmocap); - mju_copy(m_->key_mquat + i * 4 * m_->nmocap, d_->mocap_quat, 4 * m_->nmocap); - mju_copy(m_->key_ctrl + i * m_->nu, d_->ctrl, m_->nu); + mj_setKeyframe(m_, d_, this->key); pending_.save_key = false; } @@ -2355,6 +2361,21 @@ namespace mujoco } } + // pick up rendering flags changed via user_scn + if (user_scn) + { + for (int i = 0; i < mjNRNDFLAG; ++i) + { + if (user_scn->flags[i] != user_scn_flags_prev_[i]) + { + scn.flags[i] = user_scn->flags[i]; + pending_.ui_update_rendering = true; + } + } + Copy(user_scn->flags, scn.flags); + Copy(user_scn_flags_prev_, user_scn->flags); + } + mjopt_prev_ = scnstate_.model.opt; warn_vgeomfull_prev_ = scnstate_.data.warning[mjWARN_VGEOMFULL].number; } @@ -2518,13 +2539,13 @@ namespace mujoco // allocate history buffer: smaller of {2000 states, 100 MB} if (!this->is_passive_) { - constexpr int kHistoryLength = 2000; constexpr int kMaxHistoryBytes = 1e8; // get state size, size of history buffer state_size_ = mj_stateSize(this->m_, mjSTATE_INTEGRATION); int state_bytes = state_size_ * sizeof(mjtNum); - int history_bytes = mjMIN(state_bytes * kHistoryLength, kMaxHistoryBytes); + int history_length = mjMIN(INT_MAX / state_bytes, 2000); + int history_bytes = mjMIN(state_bytes * history_length, kMaxHistoryBytes); nhistory_ = history_bytes / state_bytes; // allocate history buffer, reset cursor and UI slider @@ -2562,6 +2583,12 @@ namespace mujoco this->scn.flags[mjRND_REFLECTION] = 0; } + if (this->user_scn) + { + Copy(this->user_scn->flags, this->scn.flags); + Copy(this->user_scn_flags_prev_, this->scn.flags); + } + // clear perturbation state this->pert.active = 0; this->pert.select = 0; @@ -2773,7 +2800,7 @@ namespace mujoco if (this->ui1_enable && this->ui1.sect[SECT_CONTROL].state) { this->ui1.nsect = SECT_CONTROL; - MakeControlSection(this, this->ui1.sect[SECT_CONTROL].state); + MakeControlSection(this); this->ui1.nsect = NSECT1; UiModify(&this->ui1, &this->uistate, &this->platform_ui->mjr_context()); } @@ -2802,7 +2829,19 @@ namespace mujoco // show pause/loading label if (!this->run || this->loadrequest) { - const char *label = this->loadrequest ? "LOADING..." : "PAUSE"; + char label[30] = {'\0'}; + if (this->loadrequest) + { + std::snprintf(label, sizeof(label), "LOADING..."); + } + else if (this->scrub_index == 0) + { + std::snprintf(label, sizeof(label), "PAUSE"); + } + else + { + std::snprintf(label, sizeof(label), "PAUSE (%d)", this->scrub_index); + } mjr_overlay(mjFONT_BIG, mjGRID_TOP, smallrect, label, nullptr, &this->platform_ui->mjr_context()); } @@ -2900,10 +2939,14 @@ namespace mujoco // file dialog does not automatically open that location. Thus, we defer to a default // "screenshot.png" for now. // const std::string path = GetSavePath("screenshot.png"); - // if (!path.empty()) { - // if (lodepng::encode(path, rgb.get(), w, h, LCT_RGB)) { + // if (!path.empty()) + // { + // if (lodepng::encode(path, rgb.get(), w, h, LCT_RGB)) + // { // mju_error("could not save screenshot"); - // } else { + // } + // else + // { // std::printf("saved screenshot: %s\n", path.c_str()); // } // } @@ -2971,12 +3014,15 @@ namespace mujoco this->platform_ui->SetEventCallback(UiEvent); this->platform_ui->SetLayoutCallback(UiLayout); - // populate uis with standard sections + // populate uis with standard sections, open some sections initially this->ui0.userdata = this; this->ui1.userdata = this; mjui_add(&this->ui0, defFile); mjui_add(&this->ui0, this->def_option); mjui_add(&this->ui0, this->def_simulation); + this->ui0.sect[0].state = 1; + this->ui0.sect[1].state = 1; + this->ui0.sect[2].state = 1; mjui_add(&this->ui0, this->def_watch); UiModify(&this->ui0, &this->uistate, &this->platform_ui->mjr_context()); UiModify(&this->ui1, &this->uistate, &this->platform_ui->mjr_context()); @@ -3061,7 +3107,7 @@ namespace mujoco this->platform_ui->key_9_pressed_ = false; } } - + // render while simulation is running this->Render(); @@ -3077,11 +3123,9 @@ namespace mujoco } } - if (!is_passive_) - { - mjv_freeScene(&this->scn); - } - else + const MutexLock lock(this->mtx); + mjv_freeScene(&this->scn); + if (is_passive_) { mjv_freeSceneState(&scnstate_); } @@ -3105,6 +3149,44 @@ namespace mujoco mj_getState(m_, d_, state, mjSTATE_INTEGRATION); } + // inject Brownian noise + void Simulate::InjectNoise() + { + // no noise, return + if (ctrl_noise_std <= 0) + { + return; + } + + // convert rate and scale to discrete time (Ornstein–Uhlenbeck) + mjtNum rate = mju_exp(-m_->opt.timestep / ctrl_noise_rate); + mjtNum scale = ctrl_noise_std * mju_sqrt(1 - rate * rate); + + for (int i = 0; i < m_->nu; i++) + { + mjtNum bottom = 0, top = 0, midpoint = 0, halfrange = 1; + if (m_->actuator_ctrllimited[i]) + { + bottom = m_->actuator_ctrlrange[2 * i]; + top = m_->actuator_ctrlrange[2 * i + 1]; + midpoint = 0.5 * (top + bottom); // target of exponential decay + halfrange = 0.5 * (top - bottom); // scales noise + } + + // exponential convergence to midpoint at ctrl_noise_rate + d_->ctrl[i] = rate * d_->ctrl[i] + (1 - rate) * midpoint; + + // add noise + d_->ctrl[i] += scale * halfrange * mju_standardNormal(nullptr); + + // clip to range if limited + if (m_->actuator_ctrllimited[i]) + { + d_->ctrl[i] = mju_clip(d_->ctrl[i], bottom, top); + } + } + } + void Simulate::UpdateHField(int hfieldid) { MutexLock lock(this->mtx); @@ -3140,9 +3222,8 @@ namespace mujoco cond_upload_.wait(lock, [this]() { return texture_upload_ == -1; }); } - - ElasticBand::ElasticBand(){}; - ElasticBand::~ElasticBand(){}; + ElasticBand::ElasticBand() {}; + ElasticBand::~ElasticBand() {}; void ElasticBand::Advance(std::vector x, std::vector dx) { diff --git a/simulate/src/mujoco/simulate.h b/simulate/src/mujoco/simulate.h index 08eda38..f0df39d 100644 --- a/simulate/src/mujoco/simulate.h +++ b/simulate/src/mujoco/simulate.h @@ -25,8 +25,6 @@ #include #include #include -#include -#include #include #include @@ -48,7 +46,6 @@ namespace mujoco bool enable_ = true; std::vector f_ = {0, 0, 0}; }; - // The viewer itself doesn't require a reentrant mutex, however we use it in // order to provide a Python sync API that doesn't require separate locking // (since sync is by far the most common operation), but that also won't @@ -106,6 +103,9 @@ namespace mujoco // add state to history buffer void AddToHistory(); + // inject control noise + void InjectNoise(); + // constants static constexpr int kMaxFilenameLength = 1000; @@ -150,6 +150,7 @@ namespace mujoco mjOption mjopt_prev_; mjvOption opt_prev_; mjvCamera cam_prev_; + int warn_vgeomfull_prev_; // pending GUI-driven actions, to be applied at the next call to Sync @@ -267,6 +268,7 @@ namespace mujoco // additional user-defined visualization geoms (used in passive mode) mjvScene *user_scn = nullptr; + mjtByte user_scn_flags_prev_[mjNRNDFLAG]; // OpenGL rendering and UI int refresh_rate = 60; @@ -280,7 +282,7 @@ namespace mujoco // Constant arrays needed for the option section of UI and the UI interface // TODO setting the size here is not ideal const mjuiDef def_option[13] = { - {mjITEM_SECTION, "Option", 1, nullptr, "AO"}, + {mjITEM_SECTION, "Option", mjPRESERVE, nullptr, "AO"}, {mjITEM_CHECKINT, "Help", 2, &this->help, " #290"}, {mjITEM_CHECKINT, "Info", 2, &this->info, " #291"}, {mjITEM_CHECKINT, "Profiler", 2, &this->profiler, " #292"}, @@ -300,7 +302,7 @@ namespace mujoco // simulation section of UI const mjuiDef def_simulation[14] = { - {mjITEM_SECTION, "Simulation", 1, nullptr, "AS"}, + {mjITEM_SECTION, "Simulation", mjPRESERVE, nullptr, "AS"}, {mjITEM_RADIO, "", 5, &this->run, "Pause\nRun"}, {mjITEM_BUTTON, "Reset", 2, nullptr, " #259"}, {mjITEM_BUTTON, "Reload", 5, nullptr, "CL"}, @@ -309,15 +311,15 @@ namespace mujoco {mjITEM_SLIDERINT, "Key", 3, &this->key, "0 0"}, {mjITEM_BUTTON, "Load key", 3}, {mjITEM_BUTTON, "Save key", 3}, - {mjITEM_SLIDERNUM, "Noise scale", 5, &this->ctrl_noise_std, "0 2"}, - {mjITEM_SLIDERNUM, "Noise rate", 5, &this->ctrl_noise_rate, "0 2"}, + {mjITEM_SLIDERNUM, "Noise scale", 5, &this->ctrl_noise_std, "0 1"}, + {mjITEM_SLIDERNUM, "Noise rate", 5, &this->ctrl_noise_rate, "0 4"}, {mjITEM_SEPARATOR, "History", 1}, {mjITEM_SLIDERINT, "", 5, &this->scrub_index, "0 0"}, {mjITEM_END}}; // watch section of UI const mjuiDef def_watch[5] = { - {mjITEM_SECTION, "Watch", 0, nullptr, "AW"}, + {mjITEM_SECTION, "Watch", mjPRESERVE, nullptr, "AW"}, {mjITEM_EDITTXT, "Field", 2, this->field, "qpos"}, {mjITEM_EDITINT, "Index", 2, &this->index, "1"}, {mjITEM_STATIC, "Value", 2, nullptr, " "}, @@ -336,7 +338,6 @@ namespace mujoco ElasticBand elastic_band_; int use_elastic_band_ = 0; }; - } // namespace mujoco #endif