From d99c5a1725f236876962b7d2501d9c26b97038d8 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Thu, 12 Mar 2026 00:23:27 +0100 Subject: [PATCH] Better profile support, only 1 web server per context, multiple windows per context --- private/lib/linux/x86_64/librktwebview_qt.so | Bin 202120 -> 212296 bytes private/racket-webview-qt.rkt | 29 ++- private/racket-webview.rkt | 252 +++++++++++-------- rktwebview_qt/command.h | 1 - rktwebview_qt/main.cpp | 6 +- rktwebview_qt/rktwebview.cpp | 11 +- rktwebview_qt/rktwebview.h | 7 +- rktwebview_qt/rktwebview_qt.cpp | 137 ++++++++-- rktwebview_qt/rktwebview_qt.h | 9 +- rktwebview_qt/webviewqt.cpp | 1 + rktwebview_qt/webviewqt.h | 1 - rktwebview_qt/webviewwindow.cpp | 26 +- rktwebview_qt/webviewwindow.h | 2 +- 13 files changed, 314 insertions(+), 168 deletions(-) diff --git a/private/lib/linux/x86_64/librktwebview_qt.so b/private/lib/linux/x86_64/librktwebview_qt.so index e0ff9e76a821884da61419319fa2834c0c43110f..ebaf2ae39d474cc9fc15919e84b447004d8c8512 100755 GIT binary patch literal 212296 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 X`Dz?}o75?Nv_xU`_cb-WJ^lXy+;Xk5 literal 202120 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 z zk5B`RADbaFG35lBR-gbF@Hx%nAl3>gPl2XK$PsBC3=6H#i}b?wo(S3b8zI}F?uF;A zkRBBo!aG8t=}F`D9XZhr;kGutNCdq6$+mD~vLkw~D14Z6GDFIVzEd5a)DfBLmW^&6 zI#80soj(N?C!RM@n%mRTJ=&^sH->dJeP)%>7cxxTFYAgAUg7xl(&7S56KK@E8TM#D zk8fhu#^vME>$i*AXNq%LH|~aQ7)F4biL9dqa7p4=e|-W4>sk%bfTheya_X5$Vj&MA zW*W52x@y;up+?7u629+jHu=I)c|Kz(5zwt)BjP#nugtzzu zXX>+M1fa=Z@PimnD;5ks%CQ;3@w0QnZ6kQ7nl$5`jT9c?pYhH{3XjOlcpp^;rjO7( zP;F+{A`wG=!KA?ZExegKqJYdrs*SY7Oyq#UA;6PkEz^OfLwTyY1V%2aJFn$=W-H;pr zyxue-IppL%)%f<@z~ZWdawL)Gt7BkiA@azBfaEW>E1x`~0Tizf+?AIac|;hd$DMg! zG*C3U2Yo&Y(c8k2hk46{EBP~EOAI;19Y*w~_d5~2tss(+KChL&>lKSZtW6X`30fQ% zCQgb=#R|-?2HDKkA5=DOD~TRB0?9Gxu?7wayMvj#DjzE$(}>bdiBlhIVE5QP#5}Cw zVdbNGmDr28uEFrsWSN`CD^WzqiT|;ISK+B^$|SBHnaXp39;%9Mtt$Qy8Q=IuuV`@? zx^Qw^ovEwKN-=V7PWO+{Qxyw_mU4SJlhcRw9o5C#!j0QLpLL8g^*NPjJ~wwk-{y07 zS#U;K^SQkioKXjRONe=&DJx;J7*`PxF7SxyO^=RB zBU87C^@kbO{~j&F`oqNftz!L0s&lu6F?~NK>{Slznt!(_FBw9RT{=4<3Sk#_pRtjyEk67%! zn-~?bz-pJOVKIGtDvv?-Uk$Q#MKH+zyv*I-zD=Y0Z)H+@o=3)2#onkYekT%hh2?LC zr#@2_$^A5iWta6a;$}f!8oeJ>7rz~D{KBAjrLrz;t`UA~41Q}Yep~Vu%*#UW^7_B~ z(A(Rcjckm>48E%t{K_J>QD6|WO>Hf!)OAQ!0-d^`&v8yKLj!5qnXM0>a~7tLZI2aE z+&zU6q0`Cgdjb+y{69b}5Z{$mSfFVUc{(bSdk5zKh;LF~?&Ph~tLRbtJRY`j3jpF# zLMkwKc)tFywKd#m$&YF6=RS2AZFm;G7>5&E^PRQ^jY0n=wKXiXUzkQIT%j5&3iL4TWZrAxsg`)#@_pP#yXP&m+wP+0uNQapoPJnG`FkbKfg{B?91z5}|7Dzh?bf zKrAcVJhr)gL{b?UvIyGDJJ^#S8zeW>LPeyPNx{J6(5U92gG9_u?)#?(7T;>VpL)`* zgG3|sC2;r~m5ra52r*^RqeskttG?2*`3%H^71L zMmHiMv3E6#HaLA-nLCJg66+qa&AF_3U_+nreDmZ}A%+GI!P z*k3zsMJ#6`x$Rt*7MZ%V4Dby`2RU&;zXQg^@3O;*2S%GU;JNvuV`H`UJ2$8=7%U0% zcM7v(M>4nlL{j$;aE)2uZE#15XJMqDkN4~1Mt*1bsU||CN<>GX>1{wAZvHl=yVI=p z`6v%k3%Kgs&53Vj^rvv!$PV73e;PHjx_on>NuJ%|#<^&p?cp|K-b?gN@rTwdjh}n^ z=Mf$up?^;AaL_-|%m--)Ba-{Ry9)pd$EybAXd+sviD+3k_uX*(I=}0E^Ciqgzsb@+ z=lb-|y}zBMeqlZCn|mtP+Olgp@(`zS9W(X^PI0T#`f2Y-uWN%W{+5I^pct#l7Wdod z)9C!wfu_GAx13lnCw5kT`<>?d24hm&>b@d6VJ=rNj_Y^lTwb6lP6l)3z3#JLWolzB zv*nb?p4AnyJqH z!uYB9>&K>_i%D*q+lpd~yc6DNd3n5UJcViHc2xfi+!?AP7s1*aM6F@mlWK${5GDTT) zUr0v6c4hQ8*y6SeMGBdCZme=bjNFFrI|_V2C%7r3ww~N^JaW(CPukII#UwIO(=doC zGj`FF^{=amJ%jC$EedV=#P^fO2*E^7rO&7HnH6Mhi}L9NPTv;E-5hB?^^h=>6tQIF zD0Vj6zAs>7$8m$vXq+tgcBIEGLriN)aI18 zRtD~D!EWapPK4E%6UQt7bS{&nwYKq#-1?zT{0!5PNbV-5n9UzKHlD&wkIwV#c0%ve ziVnCx{)@c@zHlxb1;VTA2P6*Fa|X0O1Az;!feSWtIK|tX+>ZDRw&O}S#ja$Hu_v=T zGqGp9OwaO)hL(X?D!!e^fMv!c{h8);h~a1lop2w5+^-bAv;D+>1K*SX=gJ*PR8-*3+^5u8#b%L zP2twJh`;+{C5t0g%+bShDjK$-N=X$G#xN{|)A3}5@9Ma9Xk(sRV=uhy(>HorIQe+k zTN&*|HG>DLmiiYGM~1D>7nT>Nn67Qh!@$zvlyAd2^9DCEWb)oyu{dd(zI7>J2sFJ! z2jbN^ji2r^vq;aQ`|eL zj_?)`vN0@GmHCaIGQ2;Vmz?YQ9bYWJYE8e0Ukk<-;tJx;6j~;VjhVMDB+NxK^M%$_ z-oz0-+bqYM2ef45KdV8RBcdmT<8uy{q>jGpP9BF~XsbHdOeBeanhut}YescaIQE*w zbG$5a)TJSoHWBqFgZEs>3V}{%+N9e=K4Qp6*-}@DyCElXC?uGsUvZ zJGx*MmRW6CX1T{QbHp-g@F|p%2rOGr8OPj-rT5X4!yeG6j;*lvscOy&HPAJT9!bo_ zmF4});5Lf-SSScv426Y~x-WK)-le!`gM)OG!7_0FHX>=mMe8gVdD(x_E(3xVe;=Q% zbhA5$akKnu-y5K$eOH3+Cq~4qbuT|RTcBt3120CZS$DNvAc17oU02z4mwe#94@st$ zUT1+4yYve44Rafs7Bl-`{XpGD)v7AA$U7j7yn!u=y%&b(J#O*EC1W}4kq-3mHJJX7 zZmSyT;j6oK8+N`5rWSAYR{5yFnmESTLET}2`Ook(9QbRSXG*O!zDVI0a5m6R{QKBb z|EL_u!D`9L4O$&B6Jj=%{FU(+vnlJKq<5Mlh4u79*PT<~pycX&ZUMlJWGu@-Yn zNg>nBysVLe#iaWXNJ}psf9hrb6#!#BZ}yL@{lQx_?;)McBJXO8Ja@yz8O(hG5G>{r zd`n|)jecZf?k_yDYzO8rz%=k1z1YLw&-mfPU-YaU;xC0cyY4+tebPGICJr*SLv z$pXSy7gF@emJ`NF=yNenUYPoqcBaqj7)0Ir4)l2kIYghblgaMOM3Xk{7lKufM*XIJ z(dSoW&v(jSsQ-O9hSxK^%NQ$+=82(Jc<-`KcUq?v=A$d50`ZqVA^Sooaj+5384XC{ zwZL1y=SP>M>JCXEE^wOrJb}WV7isQ;I~PXic}vw;>AMl$mPF8yixM@RvUl;TNM~Ha-wfk z#}BMzCLBE>?=VzObS)MHsnap&E@)WKBizxjp63^O*t1sOdRF==i`9_Rd>$s~k67$j z4QntO)_OFoHH~l1)q3|hGwn~&1Yy>v;kc1oOb46DSDtrbwAyEm*b8&S;Dc49eobO9 zdmszxqkfOZrM$_yX9#(nb&;gE+~M zb|-rSE+;!-ze|aXY}4KHUEur}NO)E1S#@lEmi4a4%;^(ly@TG^+mrQfSFvhhT4%%E zS3F-Cd0_4BT||Io`TU;jbBL2ONXB(egX{ zL*ZWREnONqof^aQTE#5rU$+i6UrxGpu!y660c~xyEW<&b=mFxEqb#@F&Ps7_=+9N?U0dDgycdG|(H+#M@`z2{`r}s+`PuRpH zo<23;PVcX4{{;D@4U~1w+CV`*v4N6n#nbZowOKnS!$t|pe`#P`U3N}lE71XfagSRk z+5QLHu`i4hoqcUz_J;DpUu0icY3BB??F;`N_Jxz6?#}jwZ|RwjOMLc)J$bbq z`$7xk^zUk4s2U=k`O@}<-@@;{*=nI9s9x$?fWkFh3blbEBnH0 z<%076#J-R^qG!+01)APMe|H+^%CrCP`YIQNkvs3ApmV||^wfv!VYA6F5}V*v9IaWS zqigK9I?er7JJ@QR+@+O`>*r#t@3UWJ!>4Q*%e9MI6gjM2@5x#f2~Ls+39=n&V5CnS>( zfY|Wy9rebzuBi3_VVP#IA zFyP?o(x<9pudyFRB%9X=8nd~Y!<4OfRF;0kueH8+hpw=%@GBVbN>~=w++`Yixcrr9 zC~<@gYH9nJ4>bq!zJB*``5JC(#=IUb|ET`;aQULN<4Bf96+UK8Mqig718Mn&pBR%HzcIz z9e+}ph===t1~b*C&&M`yEchRJukMoaUd>~;p7-jaW9WyxS3l>OB)Gg+*P8Ds@6~rp z1y}s?jQ1)|hE{m$1d^_p7*0*N#^Sm9X*l<3C%&g#oc4(0=DMlA7ZZf?9Adm_!6o<@ zx?oguzq@H6$30BL%th&T{#DMRz8j)7XzTtt5Y`0tgwn7_X59;T;GUzW-3Hdkl>88U z$i#Q#aefud=MValJpz;M56aoz_*Gf{poA{*`-ASXv;LrC{QjWwKKA*8W_mePIQ9HN zCkh)E%OCUv>koQWFp|5i2Y=B0;FyO-@kx7v8rN1lL9hC6dV(7IHGzFhxPY(qrvZ2c z`t_$rB)E2@KfMI6e62r8Y;Ybtt=j${(VvbyTJro~r9bsSa&@CWeS)ykH3t z3kJrnE4QY4hkpPaf8{AeF zJ<eUMfknreM=I+!5$oX$H`@YgP@zQU3317N_MO0tijk*U^KF@|N1qA>L6W zzJE1`9P%sUyKv;^`h6q#Gc=~-619IKg+Qv2)KLzp3~Jn#8<@XNu#S(+uWla2iH_Gf zaImbp_^EK~XT8JaF9dFq4}bfOLUsIn`KJ>J0w=k~rR05syeq1U*RYoBT^(CnUHn{i z@#b*(O9A}35NfOeZ@LDpaCGy4aCPo0k@8mp&6n}pSOwnbtw9yPP|a*!6fR#HJxqr^ z4i0nDhs747B&c2__M{dbH-F184i08a{njVkiQ}w(F3}cN1-`q%^k43l>w7!7A3Ehr z12??Dv+!otx$Aqkw{CZQX813&_N$JcX@*rDTT@;9Y<2N#rtgpPMtzR}hUVWZTk(_O z;?>oJ8)2Tk`qTkF6 zYQ}!XkdhwIRlDjSON>|n7vm?EMkr^&niyQlp1c$Md@cO!z^AWM8#)tykK5qqO-^|o z{M=4W(sAKu@}>ECOJM$6ynz4}K=l_=#dd;e+l92RoM{^i|C>yE{t?|Utt1&kdX~A& z@Y!p~h;@4Mh@Pa`4?B=yzx`AP?6-~7&wk$dDW8Aw8YhPHD0kaN;=@>D)bGW4pvm9V z@xFAJAxbVpwx*WbH1*97(ykUTe&!w z9IW_f9_u{+F2BO%)AMJ3t6j%GO?8h6s?iI~xfdb=cn5MWm(yFY(uVpPjIaD|W(BA= zdx(5}ScygXXV9Hoq4P&HZHnHVs=D)u9UV*ePV8J00(;$^*x^v%b`I;D?;X;43_ZaH zp@{G8a8!q=RZgr%DTpMD4X5XDXDv|Vzg#oPR6tA>a>39sNH0pqu@2#J?1`TIM1JXN zEol*`M@_<-$vL9V$9XiOig4_N>ewUT3EdGb(E`>v7rY?i{4L--dbBZp1X&CFTU8_wP6oxrI&+=TSlf|wOCF;y$((3Lvm zVd8sqC083@32yPobpxGgY6;B$6IJ*~c5nPZ^9B;-V@dl@^(J)+XPr|_R|v1vDaOYZ zi1lrI9>)}GY@bLmLp>RK3pD-#7vlC&yh)$O$#>6&N(7dF(i6XcF!o@@l3-@DF%X8J zd>~bj4N;7AYt3EtAG-C32uq=XChnHgiH<;E{%0VTxzGLaAOSn+PA6BpoF=2Rg3s5XCr7lZs4KsQ}bD;TJgh$|+zIp6E_J0Op;84P0HU)=iv&&fdwB z{w3#W%A{u5SPP!fK6P^Ddcd4^#kd4QlVNEJP)XbKGUvtRzwN}n=ycvAWgOh$xeupp zg#X+}dFNnHO9MB)u$>bikr-Asa{}by9!`LK6GG_5L&LbMW=QBOJ`du=s^Kq5+?_fP zg8b#UVo`#yK%Tx~In>5)$d5jmswH}X{Ygpb3Zrn z95^sg;GUvsHco@SRq@SgLZJroO1#tfZ`dg(zPk-CbT;uLCg##!6~UC~1wW_dGL;gI zY`wdefE>S$;Z_q~XnMENg*a@S9b8D(Z83uOUpmJZ>KyNkWt}_uke!V$G?;K_@MAZk zhs}*lc%koQ@Shc5sJ@gvhu6)X!*SYkIL$_;co}6fb=c#r#Q9nFX~%|#YJZtA+3*y< zHo1KZX~I)XQ+SFm%G{fI=fqf0rGgIG;1nZ~YEC?_5Z~%dY>LA>$EGm)Mc4Qgc0=Mz z#T)vfbG)JD?pp)IEvRT-yrJI+Ngi-CWfnL@9b*CcgfsP1MaU|%y9o>W92JTGs)4)? zK?-AiI7m(;$k^DSW>VD`O?ZK(dStpHQ(R6e&PPWfJ~J~pqFP5_?)DVGFAnM?-y4&= zM2|@YWp)%WdANcyKTdZE`x10|ol|gMZj{#cfR1yi?xiFu6HAzIzBA-B?#kh~bPG4; zI77x11a583Zw)jp5E_&gZT|q@Thz<~~mDs`E?) z@$`Ni@jh#ae%+fB(u%r7%VyE=?PZVE0R;E2$V?3>e*Bw@$zfvRyDxu3Gd2NH*Ls=T zSC~261h@H&my)u*7&+_BwEe(D6J=j5-uox2$wXMHKgPClt|{I|*zoI8t*m!vP*HVk zDB%Z_?j&W14=s$nXJ>HFdVNv*UtuK!@}&D+@@q={9-z$dgW129(W3V^GtCaN&90N? zg{l)jdDm34+uY9%RI?{)2pxJKKPC2>nN`}KKiF%F`+dE(4pv)P{Nvff(dx}uf2*j? zcC22bQ`3!pU+)CbZSD=3Mz8f6eUCe6J@67!pgm74W$z3637Iv}U(gBfKJ%JXdnb2k z?=v7|2YG0wz5O!n?YW)y_Di={?6p_gO?%Hg*m->MbbG(oJ3GF64oCy_r+N=iJB{zI z%=jKAv&Pp-yPd~(QJ404lT^7Khjd@ zuyl(PGcBH%X>kni-K(`+d^E-I;mttS$M8#?39mT0FC-3NO0Ghte~cdIE>;ov$=yp8 zl<8NOV&(ssvDy-#FSzPv_Z!|&4r3@j{*Jv6`=k;>LA>{pKcwO2vG;650qa=?c&FY8 zZtLA2?4M!p8^>C0{b_pVX!OEpVxA z|KLpf`}*47Z9DCsVzhMAexcX?z)tOF=w<2e)8qD7y}`6A`ErlmS$g>?jOEeGLcRCV z%RXtATWq**t@|jgcBPlIj66HDOMAg|dnaVtJ1Wy&D7(GBW=MuUPxIOv(?ff2JkWW3 ziy&~z4=eP}j_)u1)8l(U?|tJ-VRN&)hD^fdYqYz)@y+PcUP-#Wb29CX&a_vN-Ck+m zG(0DH?OoABd%JXLuLXf%$G4uFAH4Cs(l0%}ReGNpU!?(}f#)VNX?)vgcYEWzMRjIP z4K?ZZuFAAGHPhbs?DjrDvUyX&4PJXU_t4%qyR^3sgxK-znrZK|ebeLX(0kwbGW5Bh z*WSTBwD$+x5VFTtmu~MzdS~e+o@uWkyS>s(d-sq@@cbR^X2Y}7e0y@2Mn8jL?H~`$ zG`e4=(LKFJJIzN`hGGmdi@nB6Y1}(+hy668&ph$l^gumcL~jRmUjyHz?}aSE=R=eFq+2jF1^S#y;vTJ4>}^%i}&0C zrWduC2{yPv(~IkJq*W>KX*d24heazlocQ&|(dEGfm-Pwu${PDj!L*+_@3vS@_ z=f`>{sJ!Ri1d~?BY=0V*fp}=!@6Yd2EVjY@f#L48?oa7g=l%#bR{t85>4hhh6I5a8 zp>L`e+uU7EFO1UnnchS6o#>${BTNqPT0WGP7oHX0zj14?Xs~hXF3~+3x8~L#d_ntt z>ZQW-Ag6Ih`ibc@H%=@x&wF3;8w;7{`;U3y#n-5LEF``AZbX@Pc;#Uk zUi2YSBcaxNZ#|ubOy7$9^Gtj`nrAw6joXIqrCUV!8OOw~XaG^J)V!5P#zfhug__f5 zE@t2xAvlN6)_{j|K72w2XME=9slAfq7~sZMU!du9#uV>gfEJ%z8tWgFHs5^w$2B(J zcmmZuF6wPtk>p>t{Aidn_!2T-m0SObwk^2GXS}{r# z>}7jf?B7eY#fuorQ73M>fdvaE05+=+&cUW z5w)u4ZeM-FI8vf+W$v)^Ux>IjS@2n^-#1a>E@e^6@>w0RZcMSY_IfW*Uw#x@RgT$y zbvGax5q7ihlligGY_F;Vc$5w*G|#3Lj@K^6WIeP5J`oUk1l~O8+~XN+Y%&`g#5vEp z^Xc$B%B%b1g__B_^NCz+Lz_FF#+o~ycGtMrWmUFu?zKRd>^&LaTXFCV9Vyny)St2`D97-mX&k4%7on5 zo+@nuEV~DZ(@>xPM)fM_xKHUD4Sys!(eMTQ_Q_9s|A!3+_Zim?$%8`G1|Qv(0lB}W zF?%N|yn*4MN>t3H8_L3lVU+t*4>VFvZ?nkEe|_h@v>l&Wr$Tk^?Sf--|MBUDBy1O58^@Pt%Q{jC@3z*xvmZ{_9AzkEKCm-PSrjpb>qQx3$_D)!`bq zw{X%k@7*HA7>K+K`r|XB_Q$oNfad-~k@{xrmIn_9f@wVT0G^*oQTz7?&-&eW2%ec@ zD+8W~$;?GTMeIG7xO0Smd;Qwx*b4VLBY6=LBEBAW>*@s;xS(1M&s#2fXC7R}Wot#K zUujIGu8+#*I2UBvivUf3im4+}>J>9of3z62Sp4Rv`rnHNXtP~y(g=m~-H2G7hcEI_ z_T$d{H@G^5clkKFgMdOB@7?p??V9R9c@O+|1U-q*oNU2)prO0|t0Jj}4F4@BOS+*R z2yCd=+P^vf&EL%erH8q1A5ZAkx#P$jpE=Ef=QClgx&I$WXMyK#GVcs{4)W&Qe{=9m z+I5HE`6yp-kiae{bDIA?*8ns8_l2Yt#J3~<`@|?0Yu#shlmE-|-({_oTAT36>VI?p zTTe?-$3DDrZ=|I(b<_zSOkOq)q~UtaUv=&WQWpO(p$_c1W!*->6hB^jni6ZP@--dkh^ypOIWpt>}eIk#1PRm?^UBI!(7BnAx4(uiH z%@c`cd5l06db9x4**4x~s4^g=_aE>)h?FY;^$p*pbeghKtA1nQFsuH3w{1(}?D+{* zJ7iWuOMr?!ZagL;L+&G2PW{p5mlIzg zNofx~atzLWknYn{1Ps24?m1A5-A__;-{?qI=hXMlz}dklu}m^k_laAC1e#WF)0R2T zqfhWfk4wN)py_t=>q5rRx{h0_2Ue86o7g`CUu+r$;c`qoGfcj`qlDadq+h>{q2s7b zo9>x3m{_HX4UI&UXQc7JQnLcRTPmw*XoP^wI&~4(l#L*sK8QRP&5B#)wi`t<#Pl^|4z_3{JR{QWz zJhc9p=bVM35?6q*r9HRAy^iNtGr??Zm{?`QqhmpvyQ_dNk9DSvkU#>p3E(MXh!Y!7 z$UWab-&bW6p|QF5oBP}EoKn-RRxz#=;XWNn22&iU?`8aYw;3u;8bJ5JY0IG(tRu26 zA~M_D7h}|9WeX(wB`cey$^gy%qIW90k;*)Ksn$!zaqF{&xwGLI_J9!_{a2l=M9Vf~ zw%9}knnz0n5NO!A{s=SzvIZP(nX_kwcZnuPx)eY@n%8xH^(2i8(7y>!W@jlJ55&dN*vx{r-(Nq4m)3 zGJn5Et4A4yJ+hPYVU@rG3I?eEjp7DfXynIei5QOS%aE8%lJ4A3`4LN66U}!8spkIUhFD4rJ$j&;m_{w4#E?0M0wI=& z0bx3-kUe;)Awz3A_8s8N0CcLlWG&fnZGURdf?va&U2`EMW6$Q&@RPj8-H$2OQ@eK= zI_RO@kIZoBr5)WwGxhZT?JYFG074QiMGP>MB8>++uz^X?VVavGvl|{%rhF5 z*UUKg6q><~T}Lxnc5Ir?>)Lck_`Cx+qzC%gHw6u+iyd2C7-zeXZNRo;b$p$uahE{+ zbfVYyyLRGqo^^t@>BRp2PTbx@Cs;QM+}(9z8MK>%gySAhCk#!xPub2*P8}GAWmr zyf*rS*^o-}zc@L>!raV$bCt)g%gn(sC-yqLizdag_y>k{#adlw8xVehnU#h$_Bboi z%b{kRZEinursT<4+}6AfZO`t$nx1^}i3Y`_-T!Z8!qEmJ0^REwb$9b{^YK4XHsBFj z!n~W~z76yP9B(`Ki9p|cO;Q!+K8ndER{dWu}=&3LAKAH+W9VZpkj-vm3jq@B!7*eEh2?DtV-E zkxFaj>*jYZ-NMt(rB~@$^YM3irIlq#K7ZUN1;Y$znhMwPv~%eWJ!?LGx>s6Rmhe5t zy{U6)ZKZZD9n`btCx+z^_OXqu~ zm1PO4T#mb1lc0axvD8w~xpYf6rB|6}P?AzubbzD=H$y`>Jn?A|*L)0X=>$@jjC$hBc!rm8 ze3y)R;>%d%Wvu9uQBQmslONfpLtQfJi7(?CFJn%ZjC$hB_**aIIxw6)YCZ8~Z1OU; zbjheEzKj=m85ecQs3*RR$9fqXx@6Q7U&h@{Ms4bWmW(Dm-j`)P(!^@fSy?K4S(bTO zdRQYYQkK+`Bobq@wz>C!J^%)VLQ9f`d)x15M-LXZ2(+;`G;`!bU)x=kG})Y46s5Ah zt`(`>dCS-F)L3!NRB+sNJx&D>py`2@tmB#1pw__rbNM2Q)tmMq`oZGlojG1b8QMNn zv^}63+P?Dx=D=QN?#vK)CU--2zw7+D$Ma4I%H-A)-zZP@=dS3ITTgts`}uQ+y5!aq zU+(oCzJBL)$*m{8+zTfqJ>bvR179p4pXj{h-EB$ZUut!p&+LJ) zBcWb%I@D8i-ho{?lvQRfi+1~%x84%Qea#i8T+3OyP40J@jm*mPp%8YaafVuDD`EAU z@BYbq=|0Vv%^K%08kf^7x?TZaS=QiF?m->znlamITj% z((QULrIhuT_vl6*W$Xhr##nM1CXkUhkj%pCXtQ0ztV6fc591O&oPj5Y&!JUr)%FJ{%y`n$oOLFtD`oqdj6lC1e7#;WbhPAt)8>F>ot=XGCVS0{mZ_soJ2=z%dRJes3Y=!ym z_n=VVb8{6L*!E&y^C8M};d1jtwKR?UKqyg@ILw~!qKY#29?iJix?FyT$;^q-KvQ12 z0s4D9$khnwJO`H5E;4Jq``+8zlE#8319@}*;RDf&kED;H1G6VqBRwFblH)PHO3eKf z@uP<|+1g8uPYxFe$Y{$81w;B;=B|J$eC@n)6zwb}SGt`#uN}K?GUj^B>0{Z&9pbfz zRq;zYAa&j@jTBmsp|5nWG*zh)nw#D0L>EA(E*m;^KIrTrdi0>`FI=~eiGD?Hg~`<9ov2hiScn8@1{ z{O~PGGBGYo?5~oHy~G{nv2B?f)eOk9eD_Jg!$78D-A+Pgq}o9^%mv1s!{*Bic6uRiu87K`+@X(+1WZZ$P}n! ziSco4KFux(EG~B6vzkk61%VSakzUk36fU9*Y5Psr`ks7~`p&Yo*_zyYQ`KD1zLBr~ z^2XnJ-o^*OP%0eJDT>$Q&ZHXbE)oHb;MCmz4~1fHq08*6eF$vD&o${i07Qln9*7q0 z0Q|y04XtVo=A*lia^h%6=Lv1}>|T#^VU}q-_PDzi_!6ZczUP9z%* z19j-1zRT#1KqZz^O(+l?$41A65+`FBZeOPafANqVJ0XmC%-L%T1;7(@C&PPcdAxWK z&QssAIZsb~oVNiI5MQy2;a?$^`S@wMvKadP-apNFR#a3FlxBnbQw?w4av=~s>mt@( zW{L>fyIY9h_`_Sh0e;6)?ciJk-078zB*^Iq& zHv!dd)LZ3WM+4^)ZZa7yM04S~?+v{&{3N`ULHg`nvVYlT_AiHIb}x<6+&Vq9Z81&)$y)DM)x${#k{xU z_0B7$WS2q4PJ~kHl@6sQ#_2xv(tW&vo)wkoDv|b1gkE}-ex*V$VSB@V-`f};YV9@dGkT(S%;Tp$KE71NVeQ9W18iy1v-{t6KW|6z%kF-a8Wg|mznJ3T zJR864AA(SK@ymLd_+`)Yy8T)T^ccU4_|t2B@ykY&f4lL^i1un7K9En{1u*N?Ie^(S zf0rmGe6tN;_KxXrCV-h800GRJ``PGaPY73=Uu$2o-I1BdWx#Pek;|6zCLOu#&&swl zk;`yo>F64@tjlPUFZ)Il4f&#$^)pe+>?p3)^H5?jZ*!Yq8RS2urS2*|HEDJE`!l#SzL#3oHk1>?C8RG? zsR=C2h3se}@as%Iv?Vv0Bf{|$2*%{Z1{ZSaJ&`ZQpz~D~62$j3PLC<9l&U925RyME z$zLT6-xf6sW6#4T&9q|U+r*4M|C+4xNk26&*^nb3@kNzHNnGZxzZZYF*H;mLSR`c~#2#5gPveA$0YLw)_`_RZhAm%R{Ne4y z8#x=!{7T}Dr0tX0yg5Zv)I{cg{9K|J#&<(|x&CZCsOPe5K)+}nd5DPs8vDR0<{r&Y zdpQsN=GXQgk>FY_r?xFAu)Kw7(Ea!YIxKx^9|s-n^WgOm+0LPnZu;i=c5&UuhnEl@mY7 zX_K;z$Qat;#IL~wda6i(-*Y-(!D~?Nyx^rg@YpQLvRUlbxU|42e{#m+#3i(K{e@lH zNgU+Yw}_DDFE(>vq&ZI=7!@1Z5{Zw>9}|nT;7~Cts4t8&8GWWh0qbZff&TR`V*SZt z{RvjqKHb#Ftg^q41c&s0I4+|kc=}aWd4QMWsfe-b`4ErX5?)|T2LZt| z@yOcYHF$RP@x-^nX@Vu7bz6j6cX9eI?@+~o(^qafH7}P4 zP0waWDbEb;N2^7uR!WHEqL(U4`LLaiQa*I9gOorkGwD|)E#%)Id2w7SK2b!AmXTVt z9R8v@%%UY7p9lw!s$F?@B@@KX#V9iR+ji=I-0<#KP`}S!+PHDHr)HaV<1VZlncXy` zy%XccU7f{$<8)Q!;;PI2VwYK*4% z<4j|jZvEZTJmq=&qUy0k_f8JqPgM#pSP;%#iwzQ6hcuMfbJDU*__AS|CpB8B1kYMT)iv6Q3`YzhZ3r!ATvPxZO(g~jbEBBlDJm@{w^B)=_ zFu^t{pbhPe$xPfSMtuIpD0YrmL%p-%Yr-N#bNTXP>vnYND_ zmlye1!L5PaCa2ifL#TjTM*QB?0m%4v8 zN-+?OpA~XqeF`JZQ@Hah6`vSMh(vsw_{73+?%x#Vm9WEAgG`v$1*)}mVBv07{|YQd z?YX-_52wCdR$V@4K(L4B1Icd;ie)ZHWQrKV{jkbE0~ zm7yig_Z16f^;t%P9|aEHD&Jg{)bFqVeGP%HA@DT>zJ|cp5cnDb|2_~1qDqbCQ_1Hv zK12ERX4N-=&uBj9@;QaiUY)uur2==_9sa{$X8s+>UzL#?yq;+bUH`tpN6%&MQi`XH z`HTBz3XXfP0j83mJ52j6@Ugwol9jSln%Z|pOJo>1A>W5Mt1JpD1m$5XY-skaK|BCqR z&gWP@8uQ6~^iQt%`W@z@dd{u=&N&R=4Ele`rL~dimrSgk=zDr(&h)8ftYl69>&>?v z^;wxy{l?45v?UnpnaV50Q!xEp_|SX(Q=ip0^;3B@4*ffhkDe=^#;^DKhr@pQxt5kG zm$8>)Ct(+OPS9YSsnK{uJQ!c%< zcE*{tGpAfroBCBf{i@oW(&MtJxI9A;rN?CtB-5&IFt(En+WXh}Rp&yfe5o{rN8wff zvU_vY^eO()cCI{U!X;NssGSBxW<~|riBkaJL%_hE6{DsCub4S~TJ6!(re9ig#98E?a>b<~)A&iDBSJ@o zly!*7>8sV(xufgqXHGU14%y?nA^xT>t@TDR)8BNe-D$Pa(3QOCzSf>vq!7b2T~Z~N z&76M4#j0u4S*MRVdM2a<&)lOk?PMU|iC8i(ii#nWQ0=stwUARM z$X#%eUgk`g2BA(A4bykNo{}TFoaN0ZmIRFO0N^>@qtQc^@8#F@*bO~~LL%fzKr79m zVv`*4Cx2io{zhk9oqA@n!gm;l(9gbDl8al4;XWx6T}W;u&Wdu~c*7@adOd&U|Z2w11XN zZsPMfpZw30$pSt_d=BBmu`KgX`i1^!-qt_O=lZ94N&iysQ@Tm%v8g6Bf1t;Fqt}rC zBJ+#n9sj3o$(4K$wrxvxsDhQ-lKCheA<_Y)6{IDk3rQ!Ec91S4ZFyo_vV}DGxl66AZZKfTckmPu@&{FAH?#Dk}e`R;zOkC zh~)V>X^^<%HT%)u0m>cM<8({b`4L1n%N@1?fYiHKb3IjwfA5 zT1WaZX#?p3@^>7@d(xVsWHQ7y&8k7PPg-*v;~=d&9y&x(9DhPG+3x_}pO{Pz;P*Px zar|C%68#}vIFx!xLnqTu-Um-fCI_OBc2p#jH|aN)?)yk9NSBk=kWS`(-Ei6iZV!-l z0IyY~>-b$)l}zT*&lb{gq@fYXw~4YFWb6lOg94vtPHC-S>4LVrkCjiKK>Uo{rIz(}EUlF2PR51tD?P@KnOB))^^ zbsRgH!|#@hzz4rOzRfuJy>J3>If(Jp(ofPwlak3Y6!2A-0bkON%jqX+4M$n-;C;u; zWO5_v1NDsKVEQ?W@+k5p*U~T2n(Ltp(g)@O57OW~`mqo7eHS>9zpjaPNlR`(9vs5+ z8!5;8js?l&BGQ`g(H?2=CS3h_|3EYCk~aJY?Eu$???Z3=&iMiO2{GOuCzB1N3vZ)c z(wv_G2l9<4%|Ddq`c2wFdIxFUo#2P`|7-7C;NvQ)|7Rb0&^BpW+R`FO5Uiy@*v-3& zlBU_V>2uSh51@3jO*YL+UL@O)B1+{^P(aG7RzNL^wLpRL14~8F@~TyNR2~Hcp(^qc zH3}Bg{@DNb%$&J<@9e$l1O5E}pU;~|cjnB@nKNh3oSA!f59pXrp}g;=(@mh; zL9YW1ZAhn|1>FET<~Y>jX6$Q#?gG6GH2OX08{LBz9S?o@emY$Tx&?FqwD^{EdNb%+ z&^@5y2jKH*lnXi&bPwqHpwW%^Icm`Dpo5?_KTM~~CxS2N#h}fbP!GBXEk=EdZ$*C4 zDCqdlpnjlrpj$wffNlqUbTaTepcf}1{oNS9pd0Q*Jx@ZpKTfBYg4R5UazUd%Mg2gF zx1&FiKLkn(*c#9=pi$6Cpv|DCg7$zGos4vkVti0K(EJjV3mO6qJ&{g#fc89z{>1lN zK(7GZ4!QwUJcWM4_eHzF{}iPEHTZ?lpU+`DqTX9TL!e?e+5=hx+KTVDzkq(j{UGQT z(Bc;{PEg;~pc_DoeuHrV{ym@{P&qH5e&Ap8GURgt%6SF$1^3ZCpt$e(9r_P+7w8MX zn_q(*aKGV?&`&D=b@Vf6Gw8i2KlB#L0j&Ye52HSRLj6FC{tP*ThCm+xtpVKy+5`Fl z=vvS*rQnAP=22e0^A-r-K#}hgBl7a;v3XJtTHCI@6Z8Ejd?+lMUO0Z%$l>SauNJ2r z`MJqu$3qiU{yNa{+cC!wz*iCIQv4qT4pS;G!g}z3A266jc~PE=@jw5e57Wd))D{*^ zEgV0!u=t|DH~eSQr=r@z{77MOz5Xm?8QYNbc;soMJTi^U6Z}SCjo&}JaJ*!bF9g&` zyoUcvkam|NZCzpXB9;7+!eSJua*#a6p#2{peJ!Q0D-3@abPvT4zw<$lEROE zLY`mHXR9tOn1{4fgs8^XCn2rCf!aEhL;X}sUl-RFPMTU6x+wRGoGT&DtNeiyU*RN) zlSt8b0#lu6N8T}yeVB&%l;vFHpM!6pH~4=sz8mlI9kp`xv9fr?zQTls1J*F(? z)oAhB#p#z>-}#r&mz3`veAf(KZJFAT}`pC15UeAiCjNmbA~=wGT8kJ5#ZZXeS1 zWT$J@>8RdIkgjeA{25Azi?9x0HNbRR2wM&8R3qJWz^aXOn}C%Y=^g+U0+vGs;39sz zfIR?z(_Zdtz_tOim-_**dyRA>g0OW4Rt#)2Ft`u$qB6>XZ8ET#z-}?}E(Nv$n64k$ z6S{ooMdwIslXv5Ug$TK7n?qycc>M2xeCcPlgRf$eQGJ0?NcNyfix?WG#Z&p{bq zq4YnurEjM6{wp#Wnx);i80l|r~JbX_VrKca%Gx9WpXEW|eE*O7gCuIfI`kkv*0cCz@?9n$XHg70^pl1{&okrnLA)WS(*GIOp_0(%x#2hxx>Nm?B>=Jz1) z(lYoZ7Via8o^-zt-!(TrC0J-^&tDl z_3(E)tAVfPI}y0g$UXpGLA3d!@}j2yOzE*ZPLR}U;e86z#_c|P*(=}N2jDO&a| z?OyO&|Fv{_F+S5pKKo8!?_rMkECGuPi<*!&ijOG_uAAV?FT;8#_!JiR*<*f2;o5+G z&{f@m z!X8Hz%Kh$D=%F^v#JHw+MC~PhpK#?jqi~PYR?PEYxCi|~ZMq3O??nuj`YLz~cpCo2 z3a!R)FKUqHaio71>E|JTFpZ#xCD*AmFT>iirS}iodR01D(vDL(MHs_-{skV?jyLQ) z)EJmixZOwV3bvYe`e-U~%okIU0yYl3mXdwh2Y-rqJ!9vEEHetXSoH~Pv#XS>&=%&g zf$9UFtcrO2YA7CCU3pO7yapaG3-~h7mEa?G9&)Oqxo}3|E@$6d;L$g`xL(y{Ujoo= zs@FYso@U#A>{&0eHTUMg4Q@6^J>WGsES+9XyjIwGL2h;(4fwO(UkZN7&CGsrwC<~s>7X}JcN@4<6}-_aMJ3c4GF4d_p* z=Th)&g8wafF8=5|sV}yG=jtQV=?SDWF@q=iLJq4;U)<)_7kX^%1FyQH)9EDjg+q>J zUmWJz7c}S96rw(#Os9WL^*PO|4<=Sw6RZQ^Smycl`o|jE6qUEG zu=yf?0AsmGCT*s<@fM_8dSW_VM(JprSay(1v|4KYNSA;KX=-7QJa6(c@?D3x{~GWJ z{sHrhEg!Gx{Pm7}HPQzdgN4=0$EVZ3rSg8_%m;T*t!*y!IdZN>+FMXg6nXbdOs9_~ zdE8^=l@2xeo76rlEHk}CG?$2ZC8DcDEG!Y{m53E3SZ}t+3wvq{2WsIo))ykdtP(M| zL_|u&>=LoGM4Tzp#GGkPciLeoh307`;;a%evqa#vR>+PI_@{L91JrZo$?0?@wef6w zJ!RipYq);fOaZ2m!l?f~Cp5K?biD@u=M+H(n1h>%XO+QI*?V3XR@wDQ)|GT}4tT5u zkL{s!dLhX#4?L_n%o^JyLc2*k(Zf_Xp9Fq;z^@qVr9pfS{t6or&;hKO$QPto#4{Pc zpjeLCBE(hqApKODEAByhxALI`whH*)cQ*s167n1x?Q^{Ig><@>+H|g}gS8fuIuXt2 zL|}y9r7NQ(o6X>Jd~G^?E!n-<9(8m2EUP`tUQZ49?E}Bm^mO_`>aSz6>t(Cd*U(|s zqEL2NNcDLQf`@}Mu=hed-bds>jWJ8#Z9G2h#)H~*F?eil;C4L)9&R!}h;}^-e)|@3 zyS_hUojlt$9(zIqi@9B28j^=+yOx4SQ!Do6NH&eG?K0N3f%813_nJEDfAG5n>oxNA zgP+K*6Gf^l+Y-3SF#WREYEA{8_rT|<73uUk;`0Y={#kt{$9|2Dn*?aph>>E&Z%|w6 zuW~r|4`5v;+jSrEXZP1Zwd-Q=8-X>~BUGOY41SsM!7k?%qg`^Ih?0CB2cPTCNvC^> z&y4-?`J^kKDEN%Q{`2F#SjW;hJHp_jV<%1<5cr3O5h5dip(5JBb3N8~E2wU79I0ha zc1X=9pF{9Q_5-G`Vr8RmLY`-_wrin!JcT^ja?XlBoZ_KCR1b(pECrh=)_lj|Gx3XK zO?Es!rhsp{6u;@pxQe?K79om{s2{D|RQ{Wgj`m>5wo?8t;v4b83pQA&*rq#sQV9OPysK23#uTr}GEz>HL=- zeE##1|M)L+`HK%e{{zV1r1O8~;PR8q_96ep$S-B~{`douSqRCtBhP~*vuCV4=oBq8 zHO2dHu*r-kj2h(WL6(}YVDFUj{}4Bp%rU<^`+BZhUlWgek?nlVqwnB(P}@I1wr$`c z+kP5u_MuJ)P$h2bQN9c|sRx8AIR)P!63h>CkzeIj}rCk!O?6bJv08*@rx@ z={%PoSe_7uXYp!o&x!-f(~3Mxb)ISa&qHHtJ@Twa9yvCTK^{v_w4Sj=a2cC5$o~TJ z??irSQ~rv9ZspI?Ggq5J^W0G|{lTx|_p0zY_!EPNng@(|4*Qy}5%e1A+jf9oo#ywY zkH(MM_yG7_41Q8ZpR@DZzl@Mw?k98SVOvICgsla36tEFC z>=s}z+?e4ikGwX~VJ?BX|(s`nzkdEX^7v+5q*mz){Bfycj&&o@3 zJ?c}ip9dk=IY{60ACN2c(R%QD?|*Rq$EWJ3)-YPvREN04iyZ+lOa;|oR^#K%fy;V-sQjs?#J09s+%>|b=}x?q*D;kZspHr^tuOmm)@REPefL_s6Q?y ze!%JoSd!_>HU1XaACwz2fY^+58<4J?(_Q3;lHxPfb0@w#{wL}5ne-hl!d?c}V_<{8 zj=D2bKBc2q;#C8~SMu6}znc;Ip!w&y0KPvHiyW(+*4lVR;c7>W3K4@A8DT(dAzmW- zWWXU-BJdAk2SgRlFAaa@I(;2 z54;($Aya`UKfUf)*o`aE&s68z!7IC8vi$VNhgdJrIA0H*m#u{jLm9zKtv1o_I>jw+ z%}60CDE&^PZ@-$?P+zj8muD^l=U{aqYlYQC^Lx~Oq+fC^{5Yy}pVfY4b5$Hx4QObP zQi=sqWmF6a-H3llsYfeIM63J&C6XVY9P52C1g>ifH{t&l1hLloWQrIm&U)XHtnZ+g zGV-zP>y4^wG0t3G7_BW_Qd`(uUszKj<~T~LLG%!5(LeYrb%4&9j@f|o z5u`KUSLI?3qIenU%sn<0kZs(D^zR}4Cn){pX8KvSj5uEq`F=RkR)3o|=e#k@&XbyOfPDCBf(!BNpHp#|1C>#rwYSi+-`mACq{IxDSoI&zHn`#tr^u5-Svo zv9(?HBcJ%X?{v=pzX9=lK;ZvzYg@(Fg2(;7MQjf4fZYFn!f~&(i0dc6iiW&*%Gd|u z;vb=sx0Z=b;js_K#6QA0cgDoO!Uf-riAzgIUlbFYO3!#EE-oz_yDcW3Ez7wzCSEK% z;)a+QEGzoUGO@b+DwJ|n)#4}P;!jnJe-RgtRxf@uE^eH%4*1=tj=d!&K0LMf`k2`L z`GSj=i9dXP)V{OCd!HZm-dW<3FP!*xv-s^7M!$2G`0E!&y>^yZecFk4G>aEb8~gHE z;?JiY`SY{HH){&Mb(XlbrsTC{;&)RE?v9JUOdYp5E-tPed0(^GT08EpX0fNX{N=cK zXxiu>G>d1Zjr(@9_}^*ezln=i>PBDREC%bwUD+&dh?Kt&7ypioy`&jWF&sG<6ZcOq zcsM40K7FPOzQ zOx#yL?sin9zIrmrxuU8_$;w!@rh3_6Wf-I-nUfza>=OomWr2_oVb0Nxaah- z?<^HNPe1bQrQ+|W7rePtq)&epJIzur#)&7OD^K_ep9+d!1m->w6zhU3~QqSNK)G z_^Ph}AHV6#`-xwC$45p17t)rA(}Xx}^7{dCt*_vjfY|Aq{ANJx^9@@U6l?rNI|5>z zzW|@__vft-iiiAHqHM}nO%L2pD|jg&&Y%4EfOyO|c`zXU=^OUdpt#6i^d#8%3-I|i zf8IqwvCW_VctC9T{}aV#^1euUkqdeMBJ-vLlou(H7oU+A9FX^yl=pp=_cYNcMC0(M zbHru7$#3O|r+ky&$Pr)l58Im~F83EbmLqQT7vMAM`$3NQi@)HJ9Pw{|!Hq~CpkuqX z@?WO%-<9S6O_qP5tou{4e0)av7t8XWpz{Bv%AX=?VEZQH6z?Uz$-fVXU-%~P35b8o zhF{_@dL$sOmkqy9HvBPv{zC!rg#TBTygzFG6KTS!p8U99bPW5GU-TE<#SeVLuJwz%eD`qr*&>49 zC7=A8Jn?Bt#vndI?z>6u`8W8*9li%x?w_H9s53`iPI^5K^o^r@dAIvt^gR(I*H&I= z+h~FK<%Hqbr9XSvOFpskOY{ZsQSzaJcl`Nx=8E_H7`2R#6VHS1^Zxw1g5vwZoI8SI zQxH)?ndfNnS7_>AgE=4Oi@S4%@5>iA<Eb%}fXIH*>DDXWR z&9b}^0zT!$(X&Lgn#V@a;^w5$E#eEXd8p3_ahwpxjh-(mPUibbi0zGDDn5((PJVx| z_fCF=0_A>s^ld&-wMI5X@`SH=;^?^ed=-~r-aC0@*YUsoz1e0{W~F#%%jjNFHyt`Ce`ohyD881rF{xGQJO8@Vv& zKSmD7_+ZnYCYrHU82R*J;u>Gk6NicK`Nm)#+36dHdF1cDF|Xu{+k!Q#hlzc`algnH z8*|3ooG*TmcNCC^^4^DPt1_WOCl{>G6`y?$wYbWE+>Tta)nBwOSNy?WcxkTK6Bzc# z9PxJGZ!{KeJk~csEEi&V5$yH(1^4=Vzwi}&)$iL4|A~hm+HpL+z~>7iKlF=%d3OfH z4qr%!y}ptA{9=oL%;tc2)PI32doCSPDlhzXuBbglh;s@y<%zG1`%WHa@Pao<%%fh< z72ow2yq1d@WhB1*n}0rL-&X@OZ^2v}T<|@7&RMV_Pu!h*g%mmJcQh6+G~kLBh^m5F zzF0xZ*MXIe`WoM#<7<}_`?!aT#ChXxD8h_i@b{78cfJXajzn1#){PXu^-p-S5VQM) z`wPX3feBX>if;xdyiy>Z3r@hbqT^}fd|8jZG=s)I(Z|B?+Q2Zy-=EtOQuLi|}f?I>)TRw7b zH~Pl>6W!x0_;o=1+IKT0r7}m!H#e>JjfRoE#`j&8b=o&h+ybSz#h(u+_1!=YmVF-t z^n6kz-hvF?3g)~U6n_bhmwYM&9iY6>H|B#N*cV-ygZ1U`YjRNM1# zS-_oqkI0(5p5glud@r`E4+VU`L_ScDy$Qb0=XvoH`ktu_7U6Rde}9zm{Xh8iQq8Oe zDngEPr-*aYh5c=LVJA&qa`PFV-sSoYSFk(>K_6v63-ryHVyLyNhbuCM)9bUZNAUfm zo74x5Z@XCC=kxbHoRF(wmG_}Knk)t`QVC(ryXlk8hw&@#A4fctu7C19Lb4xU{}&|i zg5mG!DpYP)pQbZi#I%iRKhrf#*D>A5bSu*xOm{PVo#|etxep0>jbl2IX(iL?Ocyb2 zW7^Mj4byc@H!|JIbO+PjOkZcZmuc?9Tt3r@Oe>jAXS#@K8`FNKYnZNMx{>KtraPGK zX8JnQy-af-;qsYIWLn8|I@3i=+nDw=^Cc%m~LdcmFW(qyP3YubT8A~$GCi^6PZ>roz8R-(>A94OxG}7$8;mp ztxR_?-OcoMrhA#@?%?v7PGnlibUM>TOxu|DGhM@U9n+0Ww=&(qbT`x2neJtp`*SXz z=|rZLOs6wl#I%iRKhrf#*D>A5bSu*xOm{PVo#|etxjVUhrW2V~GM&zJ5z{uN{Y=*| zUB`4I)2&Q*Fx}1cb*6in=Kg}qXF8E-CDZ9l7cp&P+Rt}wru|IUFkQ!VBh#%+cQD<}^mV3tndbhA%V#=~X(iL?Ocyb2 zW7^Mj4byc@H!|JIbO+PjOkZcZmuc?fTt3r@Oe>jAXS#@K8`FNKYnZNMx{>KtraPGK zX8JnQy-ahT;PRPHWLn8|I@3i=+nDw=^Cc%m~LdcmFW(qyP3YubT8A~r?`Bk6PZ>roz8R-(>A94OxG}7$8;mp ztxR_?-OcoMrhA#@?&9*9PGnlibUM>TOxu|DGhM@U9n+0Ww=&(qbT`x2neJtp`)e+r z=|rZLOs6wl#I%iRKhrf#*D>A5bSu*xOm}hI&L{HayKe*ARk`|a(SFu-#V_fU2S=&A z8e}ocn|+vnNJcdup}c%>9zlO>*TVgjXG?lOADg*;)V@u~VYaV%Kjjtu_JE4XN<`%q zQF-h?=>%O|UWobDFpV;8KFIQVJktAz<;o&wOq=%E;z#EDo2Il$C@|u3RZ^ zOTSWDUJ@!V37^1U2u{}05yx-L^e1}z@LM#+;p&obNm=ovu*wxaK{v&f`hen)K-&Cr z1OUIlUn9<3$au)Wk7ZoPvo${)+Yvtex>E7kN-wEAx~Ad3PaJNoS0#u)U&MbZSI5US z-j5GHFo|Kc<8Lvpf}%FFDCg!4g5^a-@v;V-)`VIJ}&tT8o1Vz8hSC0?YfTB z-(=wOFf;1&fq~!8>8qzX`QX$)u2G`h!1pkIoq^;0k4#@}^t;yEO-B0M9F=~XflmNV z<1s`p0>t%M`4>kuIsH3E`db*EW0ZRz;~fV6OU73l_-`4%&cFv5-)!IkX+B4ZM-6-& z<9iJJ1jd6Ar<_k^yx73!Gk&UpFK4{jz*jPUzJXuH_<94sk?}1Cj&sMjMv3hP{t)BO z8u+t}zhmGy94YziGw^>gK4!X84h4BCeYJrXGu~w2Wx(C+a4o0rFw!?Me!hXXF@A-C zYddz6fzx}INj{qmT-&z?4E*by{&54>cJE~a*LLq61HXy+h#5|~X?s{?;MyJ*8@RTI zAp_U;u*Sf(J&YQ-wuj9IuI*uufoprX+Q9GPcC9sVZ6`Mv_`{rji-AAK_;v$-lkr^! z{%^+j7&tuu@1|Gu?rJx@1UUH{)$DIbGYAdQ^W&hwU+Y`>OlLo8eQPyvt#8*ExYnN+ z41782L-uo!&$>_L3hiRNW{5_QK0-!y)ReFcr9=@J=gkNXVhQo=V}Aj`nlG?=X>y{ zUUe(?Oj*w&@uuMqQ+3_aCuREaBL8gFUZ}miE&=Wr1w!v{F)S{Z=?jHk$3o5I^`J~Y z0>2%m?(v2idF4WsG`_YEDm^@t@#}#5#1Yp16vN^+POsNt(w)GUMI$NwSYhs4OaLy& zFP~58W=6{y*Xu&vuGb`=LZR1A;OV+I|EF1Fduy`OY<2vR`FT8K=mWcn!Jt$ zPQNC&oyWC8@k|D%*Kq@#{>O|r8+tnfiY?{9{iyZoVaB73Yd$luUrKV;aTtxC2YfWz zyZT;LPkPS_T^l5>KHLA&``}Q++};D!s0M z8RJEFC_KewOxHNQ2pAW=SDCJJB(6T&|8DWXpZCE3?15Kce;h+2>uT}9*LmQN0w?)w z_>E$v_49Wg>2qO-+{!&p;^^O%r$_Jj3h8 z|1^nXyi8DhW-_0oNBXNh@Y_7_p94P@e)uGwceEdV#4+ymsRJ(MvryHC&5*c8rbqui zt14K_^}O4I&!3r(cu(=UfbGv+#ftwP_CK}Ub^&*j&pr?Q*khT`&5A$0gO#oXaA|Mx zs3%?8PZ$7B?OMz8;~K8dF5o1e;|=*7`6>7M%#=9#%do?}jBmhG(R7{3cK$x#RIYec z!r~8#h`)O9KMD@Hn;fDZc*+CcBJmNT$Cwu$Vmvxp)l<*czxUvC*KSq7as`V?jPIGD@HaU9 zLf~-WvaS^}eHJV(^T2Oq{({e+m2g)22{t$WZ+q|=^%>RPnj2IFnVslheDF<$)4QAK zdIGqc9{$AxA2!K7{bUdP^By?;uBcnN-N4=2yTJqhvBV3-+JI`1_Q&XVLf!bEaDqD? z1x|Xh&^ESo*{D9)0l(_nA|9hbae!T~NKl2~_rQ)B%%wF+GA2`un zo)dt(^<#ra`qjWm{=4YK=D5}?B7P;)W8P=GO20cq*9VO6I#MO1-@Kvgn3I&;290^4 zjPYGOzyCrd7ahRe>Un`o&xve=eoxm;ub%S2eJ8u8pW=a^DRIod@{JyN|5d&!{A-Ly z*Xsk`uqdNce0*qdw#Fv!-d(%a~}A=J@C<|DE;aAx~h*JzjeT= zT{X`s=9{>T0g2lRM={`OL;Rc5ufAL1{hWSux#GX)X$9zYM>*p~ zUr^~MaQ$Nv=gc;8p$GmW5BwR;|1*j|{f-q~fA>gVSV4L_MqI|{-L>5~1vs_0`5eXP zSf1}Xfsa-!9e=;c>3d#M@TDr7c-kX;Cv)yGKOAp&`m^uWKxd^T)x^7$W+^ndig3(-NcU)YW<<0^a_ zxR#Z@R@EMOyTqZ-zfkqjc4nPN`dZ{Icb>k)NmG=31P=%nn}{-A#N(oyE7b;^ z_-yC;w=w=@nciM=_4!A@M`gp}cQQTd!}AoYr`%X~lSAESiO-QDWW>+s0C!8@EOFRp zqrV1#OF8gD;T>-9OPqf2SyfqW-~Q#n|7;i>w{q8c;Ezchc5H$wklj=9C*V>aniSs3 z^{F~l^-D4P4_f|FiDwJ+d=LCi5Bx74_-8)v-ma*`M~LWMs)BkPC4js2?~R;(@FbOf zBv<)oz>Bl1FJ6@Cv%eVo1tp&v*0%|q558ReYXES-vhq`IPot!Pw}~y2S%{Qy^trU7zGIocWBGIN#XF=RNSH9{9B$_>VmBUje6f75`Qhs_p7$r>S}tv)_pD zj=W|`oNsKT(*wWN1Aj>3h^JL6Iq10kJB;^meCf-6Rmc%AXl~mu>s$KNEmUKM@yjXs6{`r#!|9#A- zndOYKbdc`CC;WOOpQ!a7%fe|H#KPe&>c%;9` z1HT_Q+1qMfKlX52p7cn6%uK2e=J)?m1zy7GD}a-})!d};Uarq7##i$=`U>OsGoKB$ z3c%YS<@K_}nW>#%q3x#UM+2vFLu}u^&UtEOdg%XV#XrS(Bc~rU?0ib6H`?`eiQ6lp zKHu$u|C#yhs#oRWjhpfsHp{*KWxy$ZyO!g(dObMZBmJ2k_=Uiwy=qhiR&u#JffuVP zIQ~BG!6$#Vdp$qrfu9MS$}M6A)bZYJ9_gRw^jij01!G*#v2&DO?cq4sVO-mCi94z; zZ#q5jbsqTB9{8u`y0^F71OJl55jT@><;%$Sa*y=404MouVa0!t+xwPBdjCB4`h3y@ zuL4f|dsZvPbC~~^JkoFTz#sR(Kk&ehneSfDTHsWlwcN3FT%Xk*>A&lN|4!nVe~(rS zrm%eoMBU3h2{@Iz{i`ayUKgLuc+G1H|2nJEMT`%wRXB%1#j_s#{SAtLXt7Gq?x{!s zce6`ZN*w*dag2N}_co98J3R2i77%}&L->g*SI3`Elz8^INO|DbdElEp@LvKac}97? zpTkAH=8--Z0U4_27WRw!IsF92_wah>B*ssccy|5g0v`oGb~W!W6mgQcNBW0>Q$35W zSMvF(B4T)xd%sNbz?TB2a&I)s?eR#z)&sxa1Aoy2{|9iYf9NV_{eQGj$+MW((IZ$6 zuSz^yZi629uto0v#<9RhXR{Ht9{3kM@M}Hr{{cSAh5sWS>Hp|~k6Ntcu=WlmpXJQ+ zIL3Ez;E;Y>o~}BHtIzho1DrlOL-AR|U*6%7{#PFO8_cK3*zec}oceJO$BoNa5075r zF6SA*DgE|utAvNMANyU8^iO->pE=!~|3Zmp&r=DH^j86Q>#tvWq<_r=e;+utYgb&g zYid9Vy8I0HdY%bf%3*;@k6U?tRi?*26wkBT{(Otm_i&)4nA6`1oc!2L?8lC0{6Wcw zZ*1gwncfEQ$KhwH`h;Fofc8U<1MW6nDmeWX4ovEG{pG;j+KELz8-(&toUsLkY z{!-aest?Xb-Ky|zuKx^)XSb`B)A#WHrk3Y_HJGXG*@-{*DURL{^$sti5QkG&rF&A^Gz+Lfx} zhqFGv;*oxQ%$@%f5BwV7q_=|gwwgtPpRtksYo1To4P3UXP1Q#~UUf<{%lS!#>;A0= zPU%;(UBa!rPR9q*pJvtvHb0^hIHe!F#M$24IlXyqByQ+xs)cxtawuOX6A87X!fE#>Gt@>3`~h z|4!lexn$)GoQ#D>}ND$2(%JsqWssSbXJxXzA|k=}4p! zttBD%6tT8sS27mw?TxRBCAw0*t3+FGyfYDNUD?^W3R!G-F{Dg6l6H2t^u?%%WJf%O zXOv4?dU{0cjCtX*1!t$uO)T$ECeDqWlPW7cCl%{UAxX>JL@GXi`4++Yu8h$zNXwmSz<5GLMpS6?EagQl_ng{hDx)c zvTP{32H}eARN1u(XX{WnyQZbtO)kymRhrGKG`o#u*}TfK+gO&}pt9@+m1S3=999iR zpdl6QP4>rAiEu^3w0K7c4IyP^>a&c|v~VOEZ4AdEWyi-t^BQC2b6`p9XThHIN6M41 zmXTx>FgP`Kbf*-T+IU|g60K@bchP8nba|Gzagf4Por>(nS7bN7BD;etvRhh_E$)hJ zaaU%mRAqLFmDwd$X0xx%){M&R605TNsVcknRoU#Tv#VO2UDfJrsa9u~Se;#Bb(P4B zZP$UFU4C})*@DV0JiBS(?0yetORm(V0@*bv&8|Xexj0u%O6R0x%lPhGIYsdtOnUDy zc%=7@vE|`VL+z?mVk%Aek#MM|x4SLbk%)Em(m-lVg{xxIS9Z0~WFBjeceQpTdh4h6 zFPL53uqfV}jCZ9XS&YLKVA7K4>zmaV>Bn4-zjACvro`sLW$5odI}uqhyD>E-HnnS2 ztTmpBH9JBDRhe$b}n08H8;RVw@u%-x}CM`a7_F*IYr?5c*wR4+V`Xw|gtPIOf3 ze^E>JTk4S7GVMR5E#XpVT3217zp1;sLywD0Cs;Ge{xzhrBIZ8rlx7>GvTR#Zo^5N& zv+Y*-6pV)^Ib}NZ%WH&ZPk0sX4EEO@l&kT84U2o~{g#30U}Y-V(I*Wg7A>TL%2>vx zFPJ(v5{t~Mi^UK~E$L0PmBeBz1_olV6MfxX@s4C_RjePr1}&CQyxrrdY@jtw)2g1t z^zL3F^%=_$DeuBsN-k6k8xgLyymYw)p;40YFy@8BlB@DJ%E_gHR}$?viq3L&<{CDi zEO%*T13EL(wIbP-n3m{GCEJo%2_z!Dz1_W$j4n2o$M&y_|;Z^{P5YXOkycZD~k77Q4M|@fJ9fj^2cEg7@3khT2D{ck2+HI5hdhTKl@$Eir~dwy+GP$PC5(^s<@n zBi6WS?ld+m81VcmHyPAe*_Uv(p|m1fPZsyadtig=hwS-kieZrDQ4tYqF*FoIvz1;v zvKLg@Hs&L0(9p)zR3JAsAF84K5l7SZ)A=^9E^@$@$j)=9s@Ud*gQ=4(+eg#I1FffB z2#$){qHTw4V{N@Xl&s8dx7Py^PrMf~MpI@C_OvtEh4~Dj${F((#v(I$GM`zu;G@n& zA=s*E-94)g$ec%KyIAzbYSXB@8DxjAg(5 zDf=T$&L2_#>6<} zyv4fimX)1Y2iJuo{WT4#Sf%`~v|(nvubsnG<#kvE*VDW^ue&u-uUAHyMRp`o-3p`L z(w=C=s=Y#LkufB~m2haIy@@^)rGnFuB!xU;=W^V=M}4Pi=9u)uA*5?eq-Lf%$*-K< zf;3I_Mk6U76fxNfxrfW+2nkStjZ3mMtg1oA5~xMd?j$)lR(m4hQjAdwJSS%KcAra8 zfN*SJ9zqaSmT)BQd&hL?8 zwD?$E7?v9gDXv7gw4sTjr0PC9bya6K929IDBq;PrVVy{n7A1r_t8Wh|RVKUou*8TA zgv&EgCX$>kpsBqpTp2SR_PS6+E^Uy@TB=Yk8fUux%puk?5RWa#!k`QGKh@G+Gi}L| zskQYnyct(1y2F^dELNscteHO67Gepq93wECXz@gp9ALCa7RaWxTHs>JWkG5M5K4 zUEmnPitV&g3jgVTm^ZsZ+9PYIT1ptH=#O`-lo7j7OmrqXJ7IHcX3VLtofa!CDJ`KD z{=8C@w!AOZ3#%ZNp)T3iL%osc#fV?ty)xC*U5jylwr&fp(L&NVs)28}j6+#{C_qMF z#=zA|qZOp0H=ZQjw3-MN_cpmn1nnHEg2itIf`Z^M5B9dQc4f=i7#vP*IXkh646X`u zA_CYjJF&_+7-kz>!yz&kx?_o3*u`GbUPE7peQ{n_sz$_+tM_naOJ+Sktv#OXvbDav zVPS8Fa|&`=%5b=+yAS@23dLDLIax+!U5KF!e6K!IY<}{JkvH}aKt+z zmQr}CeYiYjvlY~09>UetNz7|;TDQ(`48`ht<~J$F4k|>Wts#X- zIs(sgy5p_NGB1~Mv`uu?+JMvUQ*2~l_{$jTEJqwC`++CQck@QnX^0$X*EuX;UBf0Ti~tS+BAhj)O836=vhYg zr*mLwIfTnn-3wD~)!a)C&B7UiAx6CBkP)5fWOX{+r{0xau`l9Sh5L}z+#s;b+&s0b zRr)zYdpHBM`v|^ZY>N!FvYoECd7yKW)e%_s{SN^>5W`{R=V(!uHY|{Sk5iV0Aq`I< zZx9pVyzbu4c!%XnQp=q-GF+v$gzT1T=l~;{8Lm1<2lD1(;L1@yl+CvsQspXO+kk!0 zP;a6&*^84SG{Pzyq_b&_Yb#ZGYj1qToJ73e@>(hy>Ku@j2gX{?N$?j}!qsW3PIYTb zZKWYw1;eU@LUX7tsIp;tM|?$J{k&2d{OWsZTZCAq!kwE!Mw+`*j~DGhCNs4(ClE}W3ufCrvw7t-#e~ZvT`k?M*n~l> zx-*{2*hNz(%29vSC_1N;fHw_w$oMtka(x16rnHt3L^^F@N1I+-5l>xNEHp~>tV1JS z3C1xOo7*O`Y|GT57qVt=H|bWhvhoba)+MWK-JxOS48{ktok649T-|wD1DCly>9Pn4 z9mpcc=#lEyZap%S)fnXnGsjX6gC!?nH$jwQ+ieByib@eAGdpoe+yoC$DZTEWd6^Lx zPWHJu$9ml8g>FS$ZYJA3FM9{eQNsXLkLT-frFkMOqmA${(cNm#BC2+%YgZ;aaPH0N z(YVMvW8TAMY6*RyRyjHw6D!;119a04-S`_)cG0@b`k*4!jg5myG_yF=eHIS4VuhAU z%)t;v_v$Wejboi5UG^nQVr3=e0(^w4at%3OR zWPcb311Rp+*B4W+S65qi#8`akIk7SZS1Ps2>dvOdObC+{V7By4VQm}belP|I`KnFl zcC$r=|274HGEsD9jn}kr>`E)3NIf|3*pvn3mBFXBO?SqzHEC25NUI8J*rA zl_3#%IDw89;x0k!o_e^1^~p$N`GVQX;WGv$El}aj$w8;qH*zi^jh8`{gZD^~6@F($ zOs*r%(!f@g*0ji&nPm-}lQmVsIPc+-3jUNb4%$(mG}ai3H#!`w)(%6js58w)do=}G zW+D)j(Z?)5qU>CGRAm}mCz{RG;@>{gdaXFDnmO#iQ0~N#W(Kxjo0+UYYh}EJ&STnJ z;dCz>d*WT07@mt3L61sFi>CK>cT!@UN~wxA1Y$FRpsZbOgg&ODW@UM5~wk>za*{Xx1&M<6SZvv;O5yy1PY1$^2 z5jurbNH;Qs2pr$JB(1=j#c|X|rm>H!p+mEc zs8ldOX;nCcOTo?q2K4ZX~~WgDB=r|IseaDoio&F|@}x5N>t;+RSOEG%iU z`0pRELL>HRA&M>!mv$gHG95+s(WXYmmtl9%*4u>|@U(_Yz9o;L!71*w!tqg+Z(cvR&#hUT^8_Q$(7e!pl zTE#ZTD%s0&xKSC#rL_MR8NgX-IAnEl9ZsS$Y+ z(d0~{NNyr#bZdd~?lT%}J8!JR!5J6asJ}F4G{Gg4GT@N0yp=G#I74Y08X24GGO5Y_ zI#{tgeDBPF50jaULOE%T6|HXIkC_(Qq8$ej#gkPuEFr_T7^CL(8`#hRMz4gnd|40kh(TsC`0J%NqHpo3dL*|I&D&s)3R18$ztIhg!=xyTj?S^2|8poZ5J++zrljtL~6+ z8Fm23yPDUHQ=qFTLa0W(a-^*)n1(UL+dIn74mV6wyFIuy#ZERM?48^y!RB66WlWAf zKWmhaEgyOMM`@LQI)NgN9%n0Mtqf(tCJ2wEj&AzkFskU4Sc+_+$_b6`M?;jEv_?(V z8Ukhqds{fTAeXR^Mqg$vWDCt29qnSQEU_33m!AK$Zv0{_uaIq~lp_6dM~P;Wh;gRE z>o@>E&>{MIa1KA!=2+m_)tH>sSeM)lkP>m3eY0Gc$VUpd*^GH+TFtmPmIjAegDEfr z4Zwzaw4csvl*OX<_;c2?TQW*to>^STNPToRras4{XZ3{TdA4EgPWw%?!ESl}q~=!A zAx~@JSOEE$b{lIbCRsTs9I;g6N=|$Su}!HwZ?8>CN4G-FyI00i6g8lJ9m>?m4TQ|5 zZDx^DM*Ayvi&!qVS1iPmi`~LWyHJU~OJT!fZlY_Yp5v;pFn5Ah{@FtcHjKkr`edB! zOuM;L8%ACWXH|k-FrB=Dl0xx5+Au`G+VEp!M1U4~nKfB`)7+TeGr^f)dS+W5z>x#Y zW+SAii9%dWgE*%`IWxN(|4_KgsVmD-@k1ex7% zG>#vo?t&t;CTt4^qa9Pof7e|dYM>B_ytA0woU9&luvEm~Hd?F&epZN9uLMoW)2TQ; zo@96t{;ipr9bU_-gj(9Mxu7eG3C_B;YHGOz71AY$Vy&Q$fsh5sJ{IL&^Kb>8vXAg# z1A5@Je!=V{J%2h6i?VQKll3LVJ33MkoHd|THBRHuS|Tf^77k(hTHM{+(OTac`J$?@ zL%I2Qlgu5K8=h(=O%A{V(4DFq+SKTD8Y!1;w$2U)WKRT{pnyI>VG9dbatz^QnHASE zkHonhl1WB%munv7DyX8XZm*}SSFykzv^zAf!tOfb_>Ez^q(AIw(Ch|L`lnMeCX5gF zV(mZl>0jN}Dqcg&$a!WIRp2aivU6o;qe}=rOK}|Dq%{^Y)9()`sisRjRabTlPkkVPo3twlpfTzJ!9LjGJ(V3$}QAGSg)>2;U>oW zk}c%6sJI@@DfM%fhxFM5vLnvLvALIFc%m>)Sz8&{qmo-0Lv>cTN^PRp4~(#gak8+b zXO-oGhRdaWvP~dzh*ZF~Vf`l`pCrI>h7mzd(l{BHgfX*Lk~}A7hQP@{X!JFl|>6oe+Cn4m%Srg)yEcqc(_|>0TBw@&_{SadCJAv}0fihEH4? zTyYvePFI!+=rb}{J=utZ#ph)eJhU5DwzAg|lR2PgkD~Tx zaxA$Gebf;f-D->?Tx%btX2inuTMfDK4v7wV>6s)P#v>$2Jsmku&fsMamS$OQaA{b& z0d?Ig5g4C_!#XOY=^7xQJrbiDuDV`EyEpOvxY{bS&COrLJesO*W<)xVhPx>1698#!#Fw~UI`+N%YFH>RrjGyuA z5A1N7p)nL0ZIFAGRKC{R{lyERcrNFil>0|5w4|pQ;!yx>aqf7>vwNhHLKj^7gKV`uu2^`@ngzd3EK+483BioEhC~fh% z2W{01lBt#RY@|F1!sAc6c$tLuSrF=P?Fd<$KprO~(e?HLBIkQg8+ZUFFm?u>5;7*~ zd9%HTD#D?1fvDr=nZ;0c2wT6hf}B{=*-V$xK}%bl#OO?Oug6@8!m+YH=!N4UazyZY zr~;kYg|TSKnjK3eL`Juodk=p4sT(=xz{8=)O_TH01VpC;C)BC9EMC=Hq6Pr$AaOc50I7KTjqoYSN{ zmz_u<{$lOXIaehWtiatpD|=K_EyK#`-yeV;s@*TvK=bJXz4UgolQ`jeC}-eRJj0S{ zm<|+?Zzm@nbQC!Oe1BlAa_hfvDg4^j`Mve>xwLxhcvG0A0&n+H2uk26i*>@!FqjDP z%O1$u*K}^bRAGHaE`qeW73a`{N9e1}@~cy~!Cagi%78MQ6`V>@XZTbQmd2~yuu9LP zRH+KbBOTu>!;4u&eJP`~7_;gi#1z_ZnUmcwTPaqb zSps6__Y5OL91cH%#GzwC>L^RLH)vKOoQWN&tsAS|T1#ZCa#6C69zk*(0g}TW76`HB za;E~aP?Potpt8?Q{J;AYlp$9s0ex~aqupY8OJ`5kn%^F+#n9vNgU5kv?-7wQF2Nh; z&|y>L<4=u=L@S<_mv4fl&pMxB7UZxG)1fRp;n6GiFm->KHi{mNh~w!SeF!2mkgd6r zEQ2vtDMVrhcC}T2@1-Jg%1GF%m{AqABf#@PSa};#PgFJSrl6mm_?G6wIjHGr@CEWr zq+anirYc+7d%L^3%VLX4!=-(zFplLbbX(3Y>!L$>b_cQqZ|x(gIho>dUE_I*tTRl= zlsUSRIq05|o8{6}wIaGjj}7s6_Ey2<#M<$QzN~|BOv`w$vGkdp@4o9bm8=#)L(7qJ!*@aH5n2h$0> zO%)AQiR9uh<8E3SRN96&G4$12J_XLn5g;>ZRi9^h_IRpD3L489>kt%n8RafG;$p3` zmk^`1a%N)KL%qmkx$XTkR#rU>Dp&S(BoaLl_73_|y>4b;C|6ETkJdnh)2ci<_0kAS z7}Zi3^RWMly{mq;!en=hh zdTi^-07a$kn7V>hUOak9XmaK;NxbvHvm)}WBk#?s%Ik+Lt(O_QY>j35=TJ7n ztiWNoOqzrFcwF9^U|ozO9#FPo3fR}|OW`Tma4Bp%eD7339>~NaMwuo$mDO}_4Ohsp zROX1nd7=Y6X`&w}q;Oy(4kdIXaP%T&^DnUy!+dBzAx%4O1bx&K(oUz@Wmrhl=P;Wz zCiJ8uzjZlXWogr)Ev@wyqQj#v@3(@2x_CXhW@ogjl-{wRDm}!r^sa_S2M{QCh9R1p z<*rNq_OKxxrAtkN+tN$VpVJ$MGGW9+*DiZxO+8U(4tBf)!}ZunmeHVaje5NUdkIFz z^K3&bH^|o zO7`_(dakD@TIJcM#+C91DkNYv&@@k8PxM$BY=bKMEiihn3zxUxc~-2g^!qHL=yANt zrFVelO*ykwOpEs=8WUageyo0)@2nCs4rthArm($7;!vgv9x8^-rob{32(K8y>O#GE z&#_{X%H`BiuR~yzG&56{R_McVDz2(MZk%nWzO?xi_F%iy%_Mz6G!I$z^8;GUj^|iK zN#CkYybKF8)vIW`{?yf-N|dbVT3NE39ydQ3i%NM%uXYk8cnukHDw^t5-{^>wOs1FR z_^vn65vL6Nsiz|)O6WNPQG$;pE4uN4&O(Y3`9|TAUN|#&La-#!&Of-)-U=rA4n?)J zIDQ{QF;lr>I~cvY2yHR=t<^^@$QFA-%EA{&O>j`uP*c zNWWF&X9m^$LDS<6#zEu01owN>>296BnLlXS%0Gk@;C%Y`tu!0@9jW2?uk-KZA2QRl zh<}KY%B5f4(fRf7rquu=-a7va6}Z8r>AU!yTl>X7^J76X@hNSq|Kk^^uQc7v71#CG zEX->*?;Y4ST>vA>2D~n(e=q^XvZ0 z^rS+5Hq6PuEdNF$|Mp=jpQf9wj!}Hf@^3Zr_l#2cH9h}CXZc!g8okHJ|IVo@zoy#? zbxK9e@*e|CNi6;3ADqqC)S2DVKV1*%?vb|qMVwDloldjS_nQ6|Ur-P0^2c+2O}88J z)A=;NxAB3J==?A6?^|m+sKg=1DCN=lbw6GR%wGP^Wh#TF#ZL9J@@qct8u{Ohsr(kz z38`>g`c~6@!0hGkYFGI+tx>l!uRXs8{K#z2Uv#$0U{RfrsV-N;1;|X8mR~XFx2R6& zk$*IoZ;o@FA3rTX8hVZTPS2uk9yIH@faBrTW|aL&bF# be&5Z0>2ftj=FKhtZ6g$_e^*YYH}n4=Xq}Yj diff --git a/private/racket-webview-qt.rkt b/private/racket-webview-qt.rkt index ac7418d..1da7a2e 100644 --- a/private/racket-webview-qt.rkt +++ b/private/racket-webview-qt.rkt @@ -15,7 +15,8 @@ (provide rkt-wv rkt-wv-win - + + rkt-webview-new-context rkt-webview-create rkt-webview-close rkt-webview-set-ou-token @@ -256,6 +257,11 @@ (define-rktwebview rkt_webview_init (_fun -> _void)) +;RKTWEBVIEW_QT_EXPORT rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, +; const char *optional_server_cert_pem); +(define-rktwebview rkt_webview_new_context + (_fun _string/utf-8 _bytes -> _int)) + ;RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms); (define-rktwebview rkt_webview_process_events (_fun _int -> _void)) @@ -268,14 +274,13 @@ (define-rktwebview rkt_webview_version (_fun -> _rkt_data_t-pointer)) -;RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, -; event_cb_t js_event_cb, -; const char *optional_server_cert_pem); +; RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rkt_wv_context_t context, +; rktwebview_t parent, +; event_cb_t js_event_cb); (define-rktwebview rkt_webview_create - (_fun _int + (_fun _int _int (_fun #:keep callback-box #:async-apply applier _rkt_data_t-pointer -> _void) - _bytes -> _int)) ;RKTWEBVIEW_QT_EXPORT void rkt_webview_close(int wv); @@ -415,14 +420,18 @@ ) 'done)) -(define (rkt-webview-create parent evt-callback close-callback server-cert) + +(define (rkt-webview-new-context boilerplate-js server-cert) + (rkt_webview_new_context boilerplate-js server-cert)) + + +(define (rkt-webview-create context parent evt-callback close-callback) (let* ((evt-queue (make-queue)) (parent-win (if (eq? parent #f) 0 (rkt-wv-win parent))) ) - (let ((wv (rkt_webview_create parent-win + (let ((wv (rkt_webview_create context parent-win (λ (rkt-evt) - (enqueue! evt-queue rkt-evt)) - server-cert))) + (enqueue! evt-queue rkt-evt))))) (let ((handle (make-rkt-wv wv evt-queue evt-callback #t close-callback))) (thread (λ () (sleep 1) diff --git a/private/racket-webview.rkt b/private/racket-webview.rkt index d9b35e6..4fa2fa2 100644 --- a/private/racket-webview.rkt +++ b/private/racket-webview.rkt @@ -5,6 +5,7 @@ "utils.rkt" "mimetypes.rkt" "rgba.rkt" + finalizer racket/async-channel web-server/http web-server/servlet-dispatch @@ -28,7 +29,8 @@ racket-self-signed-cert ) -(provide webview-create +(provide webview-new-context + webview-create webview-devtools webview-close @@ -102,8 +104,8 @@ webview-version - wv-base-url - wv-window-nr + wv-context-base-url + wv-win-window-nr test ) @@ -118,32 +120,38 @@ (let ((file (build-path js-path "boilerplate.js"))) (file->string file))) -(define-struct wv - ([handle #:mutable] +(define-struct wv-context + ([context #:mutable] [port #:mutable] - [window-nr #:mutable] [file-getter #:mutable] - [boilerplate-js #:mutable] [webserver-thread #:mutable] [base-url #:mutable] [request-count #:mutable] [sec-token-cache #:mutable] [cert-ou-token #:mutable] + ) + #:transparent + ) + +(define-struct wv-win + ([handle #:mutable] [context #:mutable] + [window-nr #:mutable] ) #:transparent) -(define (process-html wv-handle path out) - (let ((html (file->string path)) - (boilerplate-js ((wv-boilerplate-js wv-handle)))) - (set! html (string-replace html "" - (string-append "" "\n" - "" "\n"))) +(define (process-html context path out) + (let ((html (file->string path))) (display html out))) +; (boilerplate-js ((wv-context-boilerplate-js wv-win-handle)))) +; (set! html (string-replace html "" +; (string-append "" "\n" +; "" "\n"))) +; (display html out))) -(define (process-file wv-handle ext path out) +(define (process-file context ext path out) (let ((content (file->bytes path))) (display content out))) @@ -185,11 +193,11 @@ ) ) -(define (web-serve wv-handle req) +(define (web-serve context req) (let* ((path (url->string (request-uri req))) - (file-getter (wv-file-getter wv-handle)) + (file-getter (wv-context-file-getter context)) (token (get-security-token req)) - (sec-cache (wv-sec-token-cache wv-handle)) + (sec-cache (wv-context-sec-token-cache context)) (cache-empty? (lru-empty? sec-cache)) (token-in-cache? (not (or (eq? token #f) (eq? (lru-has? sec-cache token) #f)))) @@ -212,8 +220,8 @@ #:headers (list (make-sec-header sec-cache)) (λ (out) (if (or (eq? ext 'html) (eq? ext 'htm)) - (process-html wv-handle file-to-serve out) - (process-file wv-handle ext file-to-serve out)) + (process-html context file-to-serve out) + (process-file context ext file-to-serve out)) )) (response/output #:code 404 @@ -238,12 +246,16 @@ ) ) ) - (let* ((cert-path (let ((p (build-path (find-system-path 'pref-dir) "racket-webview" (wv-context h)))) + (let* ((cert-path (let* ((context-nr (wv-context-context h)) + (p (build-path (find-system-path 'pref-dir) + "racket-webview" + (format "context-~a" context-nr))) + ) (make-directory* p) p)) - (window-nr (wv-window-nr h)) - (f1 (build-path cert-path (format "self-signed-~a.cert" window-nr))) - (f2 (build-path cert-path (format "self-signed-~a.key" window-nr))) + (context-nr (wv-context-context h)) + (f1 (build-path cert-path (format "self-signed-~a.cert" context-nr))) + (f2 (build-path cert-path (format "self-signed-~a.key" context-nr))) (fh1 (open-output-file f1 #:exists 'replace #:permissions #o600)) (fh2 (open-output-file f2 #:exists 'replace #:permissions #o600))) (display (certificate cert) fh1) @@ -266,12 +278,12 @@ ) (define (remove-cert-files h) - (let* ((cert-path (build-path (find-system-path 'pref-dir) + (let* ((context-nr (wv-context-context h)) + (cert-path (build-path (find-system-path 'pref-dir) "racket-webview" - (wv-context h))) - (window-nr (wv-window-nr h)) - (f1 (build-path cert-path (format "self-signed-~a.cert" window-nr))) - (f2 (build-path cert-path (format "self-signed-~a.key" window-nr))) + (format "context-~a" context-nr))) + (f1 (build-path cert-path (format "self-signed-~a.cert" context-nr))) + (f2 (build-path cert-path (format "self-signed-~a.key" context-nr))) ) (when (file-exists? f1) (delete-file f1)) @@ -387,68 +399,96 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Webview functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(define/contract (webview-create context file-getter event-callback - #:boilerplate-js [bj (λ () (default-boilerplate-js))] - #:parent [p #f]) - (->* ((or/c symbol? string?) procedure? procedure?) - (#:boilerplate-js procedure? #:parent (or/c wv? #f)) - wv?) - (let* ((h (make-wv #f 0 -1 file-getter bj #f #f 0 (make-lru 250 #:cmp eq?) - (symbol->string (make-security-token)) (symbol->string context))) + +(define/contract (webview-new-context file-getter + #:boilerplate-js [bj (default-boilerplate-js)]) + (->* (procedure?) (#:boilerplate-js string?) wv-context?) + (let* ((h (make-wv-context 0 0 file-getter #f #f 0 + (make-lru 250 #:cmp eq?) + (symbol->string (make-security-token)) + )) (cert (generate-self-signed-cert 2048 365 '("127.0.0.1" "localhost") "NL" "Dijkema" - #:ou (wv-cert-ou-token h))) + #:ou (wv-context-cert-ou-token h))) (server-cert (certificate cert)) - (event-processor (λ (wv evt) - (event-callback h (util-parse-event evt)))) - (close-callback (λ () - (remove-cert-files h))) - (ph (if (wv? p) (wv-handle p) #f)) - (wv (let ((internal-handle (rkt-webview-create ph event-processor close-callback server-cert))) - (set-wv-handle! h internal-handle) - (set-wv-window-nr! h (rkt-wv-win internal-handle)) - internal-handle)) (channel (make-async-channel)) (server (let ((s (start-web-server h channel cert))) - (sleep 1) ;;; TODO: Check if web server is up. + (sleep 1) ;;; ToDO Check if server is up s)) (port-nr (let ((pn (async-channel-get channel))) - (set-wv-port! h pn) + (set-wv-context-port! h pn) pn)) - (base-req (format "https://127.0.0.1:~a" (wv-port h))) + (base-req (format "https://127.0.0.1:~a" (wv-context-port h))) ) - (set-wv-webserver-thread! h server) - (set-wv-base-url! h base-req) - (rkt-webview-set-ou-token (wv-handle h) (wv-cert-ou-token h)) - (rkt-webview-set-url! (wv-handle h) base-req) + (set-wv-context-context! h (rkt-webview-new-context bj server-cert)) + (set-wv-context-webserver-thread! h server) + (set-wv-context-base-url! h base-req) + (register-finalizer h (λ (h) (remove-cert-files h))) + h)) + +;([context #:mutable] +; [port #:mutable] +; [file-getter #:mutable] +; [webserver-thread #:mutable] +; [base-url #:mutable] +; [request-count #:mutable] +; [sec-token-cache #:mutable] +; [cert-ou-token #:mutable] + + +;(define-struct wv +; ([handle #:mutable] +; [context #:mutable] +; [window-nr #:mutable] +; ) +; #:transparent) + +(define/contract (webview-create context url-path event-callback + #:parent [p #f]) + (->* (wv-context? string? procedure?) + (#:parent (or/c wv-win? #f)) + wv-win?) + (let* ((h (make-wv-win #f context -1)) + (event-processor (λ (wv evt) + (event-callback h (util-parse-event evt)))) + (close-callback (λ () #t)) + (ph (if (wv-win? p) (wv-win-handle p) #f)) + (context-nr (wv-context-context context)) + (wv (let ((internal-handle (rkt-webview-create context-nr ph event-processor close-callback))) + (set-wv-win-handle! h internal-handle) + (set-wv-win-window-nr! h (rkt-wv-win internal-handle)) + internal-handle)) + ) + (rkt-webview-set-ou-token (wv-win-handle h) (wv-context-cert-ou-token context)) + (webview-set-url! h url-path) h) ) (define/contract (webview-devtools wv) - (-> wv? symbol?) - (rkt-webview-open-devtools (wv-handle wv))) + (-> wv-win? symbol?) + (rkt-webview-open-devtools (wv-win-handle wv))) (define/contract (webview-move wv x y) - (-> wv? number? number? symbol?) - (rkt-webview-move (wv-handle wv) x y)) + (-> wv-win? number? number? symbol?) + (rkt-webview-move (wv-win-handle wv) x y)) (define/contract (webview-resize wv w h) - (-> wv? number? number? symbol?) - (rkt-webview-resize (wv-handle wv) w h)) + (-> wv-win? number? number? symbol?) + (rkt-webview-resize (wv-win-handle wv) w h)) (define/contract (webview-set-html! wv html) - (-> wv? (or/c string? xexpr?) symbol?) + (-> wv-win? (or/c string? xexpr?) symbol?) (if (string? html) - (rkt-webview-set-html! (wv-handle wv) html) - (rkt-webview-set-html! (wv-handle wv) (xexpr->string html)) + (rkt-webview-set-html! (wv-win-handle wv) html) + (rkt-webview-set-html! (wv-win-handle wv) (xexpr->string html)) ) ) (define/contract (webview-set-url! wv url) - (-> wv? (or/c string? url?) symbol?) - (let ((u (if (string? url) (string->url url) url)) - (bu (string->url (wv-base-url wv)))) + (-> wv-win? (or/c string? url?) symbol?) + (let* ((u (if (string? url) (string->url url) url)) + (c (wv-win-context wv)) + (bu (string->url (wv-context-base-url c)))) (when (or (eq? (url-scheme u) #f) (eq? (url-host u) #f)) (set-url-host! u (url-host bu)) (set-url-port! u (url-port bu)) @@ -457,27 +497,27 @@ ) (when (eq? (url-scheme u) #f) (set-url-scheme! (url-scheme bu))) - (rkt-webview-set-url! (wv-handle wv) (url->string u)) + (rkt-webview-set-url! (wv-win-handle wv) (url->string u)) ) ) (define/contract (webview-navigate! wv place) - (-> wv? string? symbol?) + (-> wv-win? string? symbol?) (webview-run-js wv (format "window.location = '~a';" (esc-quote place)))) (define/contract (webview-base-url wv) - (-> wv? url?) - (string->url (wv-base-url wv))) + (-> wv-win? url?) + (string->url (wv-context-base-url (wv-win-context wv)))) (define-syntax def-win-func (syntax-rules () ((_ name name-to-wrap) (define/contract (name wv) - (-> wv? symbol?) - (name-to-wrap (wv-handle wv)))))) + (-> wv-win? symbol?) + (name-to-wrap (wv-win-handle wv)))))) (def-win-func webview-show rkt-webview-show) (def-win-func webview-hide rkt-webview-hide) @@ -488,9 +528,9 @@ (def-win-func webview-window-state rkt-webview-window-state) (define/contract (webview-choose-dir wv title base-dir) - (-> wv? string? (or/c path? string?) (or/c hash? boolean?)) + (-> wv-win? string? (or/c path? string?) (or/c hash? boolean?)) (let ((bd (if (path? base-dir) (path->string base-dir) base-dir))) - (let ((res (rkt-webview-choose-dir (wv-handle wv) title bd))) + (let ((res (rkt-webview-choose-dir (wv-win-handle wv) title bd))) (if (eq? res #f) #f (cond ((eq? (car res) 'oke) @@ -506,7 +546,7 @@ (define (file-open-save wv title base-dir permitted-exts open-save-f) (let* ((bd (if (path? base-dir) (path->string base-dir) base-dir)) (ext-filter (make-exts-filter permitted-exts))) - (let ((res (open-save-f (wv-handle wv) title bd ext-filter))) + (let ((res (open-save-f (wv-win-handle wv) title bd ext-filter))) (if (eq? res #f) #f (cond ((eq? (car res) 'oke) @@ -522,30 +562,29 @@ (define/contract (webview-file-open wv title base-dir permitted-exts) - (-> wv? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) + (-> wv-win? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) (or/c hash? boolean?)) (file-open-save wv title base-dir permitted-exts rkt-webview-file-open)) (define/contract (webview-file-save wv title base-dir permitted-exts) - (-> wv? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) + (-> wv-win? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) (or/c hash? boolean?)) (file-open-save wv title base-dir permitted-exts rkt-webview-file-save)) (define/contract (webview-set-title! wv title) - (-> wv? string? symbol?) - (rkt-webview-set-title! (wv-handle wv) title)) + (-> wv-win? string? symbol?) + (rkt-webview-set-title! (wv-win-handle wv) title)) (define/contract (webview-close wv) - (-> wv? symbol?) + (-> wv-win? symbol?) (begin - (rkt-webview-close (wv-handle wv)) - (kill-thread (wv-webserver-thread wv)) + (rkt-webview-close (wv-win-handle wv)) 'oke)) (define/contract (webview-bind! wv selector event) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) (let* ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -555,13 +594,13 @@ ) (let ((r (webview-call-js wv (format "return window.rkt_bind_evt_ids(~a, '~a', ~a)" - (wv-window-nr wv) sel evt)))) + (wv-win-window-nr wv) sel evt)))) (map (λ (el) (list (string->symbol (car el)) (cadr el) (caddr el))) r)))) (define/contract (webview-unbind! wv selector event) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) (let* ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -571,14 +610,14 @@ ) (let ((r (webview-call-js wv (format "return window.rkt_unbind_evt_ids(~a, '~a', ~a)" - (wv-window-nr wv) sel evt)))) + (wv-win-window-nr wv) sel evt)))) (map (λ (el) (list (string->symbol (car el)) (cadr el) (caddr el))) r)))) (define/contract (webview-run-js wv js) - (-> wv? string? symbol?) - (rkt-webview-run-js (wv-handle wv) js)) + (-> wv-win? string? symbol?) + (rkt-webview-run-js (wv-win-handle wv) js)) (define (webview-standard-file-getter base-path #:not-exist [on-not-exist (λ (file base-path path) path)] @@ -594,8 +633,8 @@ (define (webview-call-js wv js) - (-> wv? string? (or/c string? list? boolean? hash?)) - (let ((result (rkt-webview-call-js (wv-handle wv) js))) + (-> wv-win? string? (or/c string? list? boolean? hash?)) + (let ((result (rkt-webview-call-js (wv-win-handle wv) js))) (if (webview-call-js-result? result) (if (eq? (car result) 'oke) (hash-ref (fromJson (cadr result)) 'result #f) @@ -614,7 +653,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define/contract (webview-set-innerHTML! wv id html) - (-> wv? symbol? (or/c string? xexpr?) symbol?) + (-> wv-win? symbol? (or/c string? xexpr?) symbol?) (if (string? html) (webview-run-js wv (with-id id el @@ -624,7 +663,7 @@ ) (define/contract (webview-set-value! wv id val) - (-> wv? symbol? (or/c symbol? string? number? boolean? g:date? g:time? g:datetime? rgba?) symbol?) + (-> wv-win? symbol? (or/c symbol? string? number? boolean? g:date? g:time? g:datetime? rgba?) symbol?) (webview-run-js wv (with-id id el ((string-append @@ -651,7 +690,7 @@ ) (define/contract (webview-value wv id) - (-> wv? symbol? (or/c string? boolean?)) + (-> wv-win? symbol? (or/c string? boolean?)) (let ((v (webview-call-js wv (with-id id el ((string-append "let f = function() {\n" @@ -670,7 +709,7 @@ (syntax-rules () ((_ name type-pred? convert) (define/contract (name wv id) - (-> wv? symbol? (or/c type-pred? boolean?)) + (-> wv-win? symbol? (or/c type-pred? boolean?)) (let ((v (webview-value wv id))) (if (eq? v #f) #f @@ -689,7 +728,7 @@ (define/contract (webview-add-class! wv id-or-selector class) - (-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? string? list?) hash?) (let ((sel (if (symbol? id-or-selector) (format "#~a" id-or-selector) id-or-selector)) @@ -709,7 +748,7 @@ ) (define/contract (webview-remove-class! wv id-or-selector class) - (-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? string? list?) hash?) (let ((sel (if (symbol? id-or-selector) (format "#~a" id-or-selector) id-or-selector)) @@ -731,7 +770,7 @@ ) (define/contract (webview-set-style! wv selector style-entries) - (-> wv? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -755,7 +794,7 @@ ) (define/contract (webview-get-style wv selector styles) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) (or/c list? hash?)) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) (or/c list? hash?)) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -788,7 +827,7 @@ (define/contract (webview-unset-style! wv selector style-entries) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) hash?) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -813,7 +852,7 @@ ) (define/contract (webview-set-attr! wv selector attr-entries) - (-> wv? (or/c symbol? string?) + (-> wv-win? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) (let* ((sel (if (symbol? selector) (format "#~a" selector) @@ -847,7 +886,7 @@ ) (define/contract (webview-attr wv id attr) - (-> wv? symbol? (or/c symbol? string?) (or/c string? boolean?)) + (-> wv-win? symbol? (or/c symbol? string?) (or/c string? boolean?)) (let ((v (webview-call-js wv (with-id id el -> (format "el.getAttribute('~a');" attr)) @@ -862,7 +901,7 @@ (syntax-rules () ((_ name type-pred? convert) (define/contract (name wv id attr) - (-> wv? symbol? (or/c symbol? string?) (or/c type-pred? boolean?)) + (-> wv-win? symbol? (or/c symbol? string?) (or/c type-pred? boolean?)) (let ((v (webview-attr wv id attr))) (if (eq? v #f) #f @@ -891,11 +930,14 @@ (define file-getter (webview-standard-file-getter example-path)) +(define test-context (webview-new-context file-getter)) + (define (test) (let* ((cb (λ (handle evt) (displayln evt))) - (h (webview-create 'test file-getter cb)) + (h (webview-create test-context "index.html" cb)) ) + (displayln h) (webview-set-title! h "This is a test window") (webview-resize h 800 600) (webview-move h 350 220) diff --git a/rktwebview_qt/command.h b/rktwebview_qt/command.h index ca484de..fea5d76 100644 --- a/rktwebview_qt/command.h +++ b/rktwebview_qt/command.h @@ -26,7 +26,6 @@ #define COMMAND_FILE_OPEN 20 #define COMMAND_FILE_SAVE 21 #define COMMAND_SET_OU_TOKEN 22 -#define COMMAND_SET_CERTIFICATE 23 class Command { diff --git a/rktwebview_qt/main.cpp b/rktwebview_qt/main.cpp index 66a0e89..759d260 100644 --- a/rktwebview_qt/main.cpp +++ b/rktwebview_qt/main.cpp @@ -22,7 +22,9 @@ int main(int argc, char *argv[]) rkt_webview_init(); - wv1 = rkt_webview_create(0, eventCb, nullptr); + int context = rkt_webview_new_context("console.log('boilerplate!');", nullptr); + + wv1 = rkt_webview_create(context, 0, eventCb); rkt_webview_move(wv1, 200, 300); rkt_webview_resize(wv1, 800, 600); @@ -57,7 +59,7 @@ int main(int argc, char *argv[]) if (i == 10) { - wv2 = rkt_webview_create(wv1, eventCb, nullptr); + wv2 = rkt_webview_create(context, wv1, eventCb); rkt_webview_move(wv2, 400, 200); rkt_webview_resize(wv2, 800, 600); rkt_webview_set_url(wv2, "https://127.0.0.1"); diff --git a/rktwebview_qt/rktwebview.cpp b/rktwebview_qt/rktwebview.cpp index d8a4cc6..6934420 100644 --- a/rktwebview_qt/rktwebview.cpp +++ b/rktwebview_qt/rktwebview.cpp @@ -32,10 +32,17 @@ void rkt_webview_init() } } -int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb, const char *optional_server_cert_pem) + +rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, const char *optional_server_cert_pem) { rkt_webview_init(); - return handler->rktWebViewCreate(parent, js_event_cb, optional_server_cert_pem); + return handler->newContext(boilerplate_js, optional_server_cert_pem); +} + +int rkt_webview_create(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_event_cb) +{ + rkt_webview_init(); + return handler->rktWebViewCreate(context, parent, js_event_cb); } void rkt_webview_close(rktwebview_t wv) diff --git a/rktwebview_qt/rktwebview.h b/rktwebview_qt/rktwebview.h index 6c19a44..1fad84f 100644 --- a/rktwebview_qt/rktwebview.h +++ b/rktwebview_qt/rktwebview.h @@ -10,6 +10,7 @@ extern "C" { typedef int rktwebview_t; +typedef int rkt_wv_context_t; typedef struct { rktwebview_t wv; @@ -81,12 +82,12 @@ typedef void (*event_cb_t)(rkt_data_t *); RKTWEBVIEW_QT_EXPORT void rkt_webview_init(); RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms); - RKTWEBVIEW_QT_EXPORT void rkt_webview_free_data(rkt_data_t *d); - RKTWEBVIEW_QT_EXPORT rkt_data_t *rkt_webview_version(); -RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb, const char *optional_server_cert_pem); +RKTWEBVIEW_QT_EXPORT rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, const char *optional_server_cert_pem); + +RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_event_cb); RKTWEBVIEW_QT_EXPORT void rkt_webview_close(rktwebview_t wv); RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv); RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title); diff --git a/rktwebview_qt/rktwebview_qt.cpp b/rktwebview_qt/rktwebview_qt.cpp index 0dc6ded..f7f0cbe 100644 --- a/rktwebview_qt/rktwebview_qt.cpp +++ b/rktwebview_qt/rktwebview_qt.cpp @@ -9,6 +9,10 @@ #include #include #include +#include +#include +#include +#include #include "command.h" #include @@ -29,14 +33,12 @@ void Rktwebview_qt::processCommand(Command *cmd) } break; case COMMAND_CREATE: { - int parent = cmd->args[0].toInt(); + rkt_wv_context_t context = cmd->args[0].toInt(); + rktwebview_t parent = cmd->args[1].toInt(); - void *f = cmd->args[1].value(); + void *f = cmd->args[2].value(); event_cb_t js_event_cb = reinterpret_cast (f); - bool has_scp = cmd->args[2].toBool(); - QByteArray scp_pem = cmd->args[3].toByteArray(); - WebviewWindow *p; if (_views.contains(parent)) { p = _views[parent]; @@ -44,22 +46,28 @@ void Rktwebview_qt::processCommand(Command *cmd) p = nullptr; } - WebviewWindow *w = new WebviewWindow(p, has_scp, scp_pem); - WebViewQt *view = new WebViewQt(nextHandle(), w); - w->addView(view, this); + if (!_contexts.contains(context)) { + cmd->result = -1; + cmd->done = true; + } else { + QWebEngineProfile *profile = _contexts[context]; + WebviewWindow *w = new WebviewWindow(profile, p); + WebViewQt *view = new WebViewQt(nextHandle(), w); + w->addView(view, this); - int id = view->id(); + int id = view->id(); - _views[id] = w; - _view_js_callbacks[id] = js_event_cb; + _views[id] = w; + _view_js_callbacks[id] = js_event_cb; - w->show(); - while(!w->windowCreated()) { - doEvents(); + w->show(); + while(!w->windowCreated()) { + doEvents(); + } + + cmd->result = id; + cmd->done = true; } - - cmd->result = id; - cmd->done = true; } break; case COMMAND_CLOSE: { @@ -370,17 +378,68 @@ int Rktwebview_qt::nextHandle() return h; } -int Rktwebview_qt::rktWebViewCreate(int parent, event_cb_t js_evt_cb, const char *optional_server_cert_pem) +rkt_wv_context_t Rktwebview_qt::newContext(const char *boilerplate_js, const char *optional_server_cert_pem) +{ + QWebEngineProfileBuilder b; + if (optional_server_cert_pem != nullptr) { + QByteArray scp = QByteArray(optional_server_cert_pem); + QList certs; + QSslCertificate cert(scp); + certs.append(cert); + b.setAdditionalTrustedCertificates(certs); + } + _context_counter += 1; + QString name = QString::asprintf("profile-%d", _context_counter); + + QString code = "if (window.rkt_event_queue === undefined) { window.rkt_event_queue = []; }\n" + "window.rkt_send_event = function(obj) {\n" + " console.log('Sending event: ' + obj);\n" + " window.rkt_event_queue.push(obj);\n" + "};\n" + "window.rkt_get_events = function() {\n" + " let q = window.rkt_event_queue;\n" + " window.rkt_event_queue = [];\n" + " let json_q = JSON.stringify(q);\n" + " return json_q;\n" + "};\n" + ""; + + QList scripts; + QWebEngineProfile *p = b.createProfile(name); + QWebEngineScriptCollection *col = p->scripts(); + QWebEngineScript s1; + s1.setInjectionPoint(QWebEngineScript::InjectionPoint::DocumentReady); + s1.setName("eventing"); + s1.setSourceCode(code); + s1.setWorldId(QWebEngineScript::MainWorld); + scripts.append(s1); + + QWebEngineScript s2; + s2.setInjectionPoint(QWebEngineScript::InjectionPoint::DocumentReady); + s2.setName("boilerplate"); + s2.setSourceCode(boilerplate_js); + s2.setWorldId(QWebEngineScript::MainWorld); + scripts.append(s2); + + col->insert(scripts); + + QWebEngineScriptCollection *c = p->scripts(); + QList l = c->toList(); + printf("%d\n", l.size()); + + _contexts[_context_counter] = p; + + return _context_counter; +} + +int Rktwebview_qt::rktWebViewCreate(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_evt_cb) { Command c(COMMAND_CREATE); + c.args.push_back(context); c.args.push_back(parent); void *function = reinterpret_cast(js_evt_cb); QVariant f(QVariant::fromValue(function)); c.args.push_back(f); - bool has_scp = (optional_server_cert_pem != nullptr); - c.args.push_back(has_scp); - QByteArray scp = (optional_server_cert_pem == nullptr) ? QByteArray("") : QByteArray(optional_server_cert_pem); - c.args.push_back(scp); postCommand(&c); @@ -659,7 +718,7 @@ void Rktwebview_qt::onPageLoad(rktwebview_t w) void Rktwebview_qt::pageLoaded(rktwebview_t w, bool ok) { - runJs(w, + /*runJs(w, "if (window.rkt_event_queue === undefined) { window.rkt_event_queue = []; }\n" "window.rkt_send_event = function(obj) {\n" " console.log('Sending event: ' + obj);\n" @@ -672,6 +731,20 @@ void Rktwebview_qt::pageLoaded(rktwebview_t w, bool ok) " return json_q;\n" "};\n" ); + */ + + if (!ok) { + // Inject code of the profile to this page + WebviewWindow *win = _views[w]; + QWebEngineProfile *p = win->profile(); + QWebEngineScriptCollection *col = p->scripts(); + QList l = col->toList(); + int i; + for(i = 0; i < l.size(); i++) { + runJs(w, l[i].sourceCode().toUtf8().constData()); + } + } + // trigger page loaded. EventContainer e("page-loaded"); @@ -775,6 +848,8 @@ Rktwebview_qt::Rktwebview_qt(Rktwebview_qt **handler) : _argc = 1; _argv[0] = const_cast("Rktwebview_qt"); + _context_counter = 0; + _current_handle = 0; _handler = handler; @@ -800,3 +875,19 @@ Rktwebview_qt::Rktwebview_qt(Rktwebview_qt **handler) : *_handler = nullptr; } + +Rktwebview_qt::~Rktwebview_qt() +{ + QList win_keys = _views.keys(); + int i, N; + for(i = 0, N = win_keys.size(); i < N; i++) { + WebviewWindow *w = _views[win_keys[i]]; + delete w; + } + + QList c_keys = _contexts.keys(); + for(i = 0, N = c_keys.size(); i < N; i++) { + QWebEngineProfile *p = _contexts[c_keys[i]]; + delete p; + } +} diff --git a/rktwebview_qt/rktwebview_qt.h b/rktwebview_qt/rktwebview_qt.h index dcb7f72..9c0ded7 100644 --- a/rktwebview_qt/rktwebview_qt.h +++ b/rktwebview_qt/rktwebview_qt.h @@ -26,8 +26,11 @@ class RKTWEBVIEW_QT_EXPORT Rktwebview_qt : public QObject private: QApplication *_app; rktwebview_t _current_handle; + + int _context_counter; + QHash _contexts; QHash _views; - QHash _view_js_callbacks; + QHash _view_js_callbacks; QTimer _process_events; @@ -64,7 +67,8 @@ public: public: int nextHandle(); public: - int rktWebViewCreate(int parent, event_cb_t js_evt_cb, const char *optional_server_cert_pem); + rkt_wv_context_t newContext(const char *boilerplate_js, const char *optional_server_cert_pem); + int rktWebViewCreate(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_evt_cb); void rktWebViewClose(int wv); void rktSetOUToken(rktwebview_t wv, const char *ou_token); void rktQuit(); @@ -110,6 +114,7 @@ public: public: Rktwebview_qt(Rktwebview_qt **handler); + ~Rktwebview_qt(); }; diff --git a/rktwebview_qt/webviewqt.cpp b/rktwebview_qt/webviewqt.cpp index 0d575ea..d9bace7 100644 --- a/rktwebview_qt/webviewqt.cpp +++ b/rktwebview_qt/webviewqt.cpp @@ -10,6 +10,7 @@ WebViewQt::WebViewQt(int id, WebviewWindow *window) _window = window; } + int WebViewQt::id() const { return _id; diff --git a/rktwebview_qt/webviewqt.h b/rktwebview_qt/webviewqt.h index 396b06c..6589585 100644 --- a/rktwebview_qt/webviewqt.h +++ b/rktwebview_qt/webviewqt.h @@ -23,7 +23,6 @@ signals: public: WebViewQt(int id, WebviewWindow *window); - }; #endif // WEBVIEWQT_H diff --git a/rktwebview_qt/webviewwindow.cpp b/rktwebview_qt/webviewwindow.cpp index 8bcd6ea..815ccc3 100644 --- a/rktwebview_qt/webviewwindow.cpp +++ b/rktwebview_qt/webviewwindow.cpp @@ -36,7 +36,7 @@ static void displ1(QSslCertificate &cert, QList l }; */ -WebviewWindow::WebviewWindow(WebviewWindow *parent, bool has_scp, QByteArray scp_pem) +WebviewWindow::WebviewWindow(QWebEngineProfile *profile, WebviewWindow *parent) : QMainWindow{parent} { static int profile_nr = 0; @@ -51,21 +51,7 @@ WebviewWindow::WebviewWindow(WebviewWindow *parent, bool has_scp, QByteArray scp _moved = 0; _resized = 0; - QWebEngineProfileBuilder b; - if (has_scp) { - profile_nr += 1; - char buf[100]; - sprintf(buf, "profile-%d", profile_nr); - QString name(buf); - QSslCertificate cert(scp_pem); - - QList certs; - certs.append(cert); - b.setAdditionalTrustedCertificates(certs); - _profile = b.createProfile(name); - } else { - _profile = QWebEngineProfile::defaultProfile(); - } + _profile = profile; if (parent != nullptr) { setWindowModality(Qt::WindowModality::WindowModal); @@ -78,7 +64,9 @@ WebviewWindow::WebviewWindow(WebviewWindow *parent, bool has_scp, QByteArray scp void WebviewWindow::navigationRequested(QWebEngineNavigationRequest &req) { - if (req.navigationType() == QWebEngineNavigationRequest::NavigationType::TypedNavigation) { + QWebEngineNavigationRequest::NavigationType t = req.navigationType(); + if (t == QWebEngineNavigationRequest::NavigationType::TypedNavigation || + t == QWebEngineNavigationRequest::RedirectNavigation) { req.accept(); } else { EventContainer e("navigation-request"); @@ -226,8 +214,9 @@ void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c) _view = v; this->setCentralWidget(v); - QWebEnginePage *page; + QWebEnginePage *page = _view->page(); + /* if (_profile == nullptr) { page = _view->page(); } else { @@ -255,6 +244,7 @@ void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c) ); evt_script.setWorldId(QWebEngineScript::ApplicationWorld); //col.insert(evt_script); + */ connect(page, &QWebEnginePage::loadFinished, this, [this](bool ok) { _container->pageLoaded(_view->id(), ok); diff --git a/rktwebview_qt/webviewwindow.h b/rktwebview_qt/webviewwindow.h index d86a8af..cd87103 100644 --- a/rktwebview_qt/webviewwindow.h +++ b/rktwebview_qt/webviewwindow.h @@ -65,7 +65,7 @@ public: void openDevTools(); public: - explicit WebviewWindow(WebviewWindow *parent, bool has_scp, QByteArray scp_pem); + explicit WebviewWindow(QWebEngineProfile *profile, WebviewWindow *parent); private slots: void triggerResize();