From e010de6a30f7cc259bc749f9e4d89ef1999ae2e4 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Sun, 7 Jul 2024 14:02:01 +0200 Subject: [PATCH] handle disconnection on frontend --- README.md | 9 +++++---- static/dist/favicon.ico | Bin 4490 -> 0 bytes static/dist/icon.png | Bin 38854 -> 34179 bytes static/dist/index.html | 3 ++- static/dist/index.js | 20 +++++++++++++++++++- static/dist/manifest.json | 2 +- static/dist/styles.css | 9 ++++++++- static/src/index.tsx | 16 ++++++++++++++++ static/src/model.tsx | 14 +++++++++++++- static/src/translations.tsx | 6 ++++++ 10 files changed, 70 insertions(+), 9 deletions(-) delete mode 100644 static/dist/favicon.ico diff --git a/README.md b/README.md index 8d0b0b6..8ed42cd 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,11 @@ For TypeScript-based apps, you can use the [udn-frontend](https://github.com/mar The web interface of the server itself is based on my other two projects, [carbon-mini](https://github.com/marlon-erler/carbon-mini) and [bloatless-react](https://github.com/marlon-erler/bloatless-react). Both of these projects are very minimal, bloat-free, and quick to get started with. I'd suggest you to build your app based on the same foundation for a consistent user experience. -1. Download [carbon-mini](https://github.com/marlon-erler/carbon-mini) from the releases page -2. Install [bloatless-react](https://github.com/marlon-erler/bloatless-react) -3. Install [udn-frontend](https://github.com/marlon-erler/udn-frontend) -4. Start developing +1. Download [carbon-mini](https://github.com/marlon-erler/carbon-mini) from the releases page and read the docs +2. Install [bloatless-react](https://github.com/marlon-erler/bloatless-react) and read the docs +3. Install [udn-frontend](https://github.com/marlon-erler/udn-frontend) and read the docs +4. Generate your app icon [here](https://icongen.onrender.com/), move it to the `dist` directory +5. Start developing ## Manual way diff --git a/static/dist/favicon.ico b/static/dist/favicon.ico deleted file mode 100644 index a4323fe163bd35fc29b4c399391750d337372613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4490 zcmcgw_dnE+AAjGSv(6^tN)$>)WJT85d#@vO=gc^}v$--7DZ-IGq9P-E<`6xb9tmnQ&#{^@@L0=NNRMgU;_hhG@#YtT}|ssBM* zElpM9|Em8Pijh2iW*S0 ziwuEmP_lFcOTAOm*juHa)oP}|<0d`|4z@9S0iwHgQ7xBdg6ooikZZxvmr9w6#-4P4q9xT`;jje|*Ht0X!zp2WpSq{h_{DfF z_PHc|(spYTL!Ingz(x?1-q-@AsABS^(5_u(y%Yfva$aVe=FXvJ%ruK>dXSB9mZ*3#EO3X2&zyOV2@|vV-fqELh;+;SJ&^2g2zNQiC z!vO?b%L6Vjq5XwR_Yh+@5}KQAMq zPFGXaX+R%EZXiOga-kAh+1k0*VlTGAIkng6{7f#7)cXPO<+ByRQE_k_2bs8{D%GgI zQ}DqBmc8-Fr|O1L67Y>=<=-bxN*UQ;p+-HyZ`LtL6gxI5ot5F-`1z5S50Lrnj&f{} z^SV6R^8S2f&) z<>V|Fyf`fw*k)i(eOlSg?Vhwo$DI3MR37+yjEMf}qg(b|GV)qNjRrf}XWNI8CdV6$ zn;Rmh0&6&?mo7CYK7>X{R`cKv96ukH!`ORaeT~KkFJ(b8htaRcZ2h3WLhXi!j<<_T z`D8_1s*uiBIov_06ZYN9L~pGMog6#`*@~9z4&#C1NTPh^M`!j=krJd5<+p2%>EbEC zpng}|ishMo%*l?&Gcet(+YXa!jqSu`L&jtAAPY^u)V<>C62rP2(8YyTUM67e>MQNh z*o!`FFJ373i&D9+a+mpwv$79n7}cg4P``zY_{MAc9ldGruBv2RkmHg=eItTH9Lgy$ zv5W$qY=l5@sK06pJCAHLd#Kj@C&Y@ld}xWhp2kP%;wA^InpWnD?jG=fLUXUC$G0in zQ=?rNE0vM47Ypx46qexlwKQi|-jJS~>`tff84mp4w=-pY;R5J|`sT@g@0##hnLbHC zTxnx2)gr<;Dm)Qa#ataUKq2V_Oo7fmXf;G>C>>@5EN42Xm}`c02m`+Q(q6@3E_4AV zS%w)izQ+DWPsnp@H=Q8UG&sV?=Y4M z1RX_GN4!I9<*#&0HA}y|+*hu>mOHWxpdu$3c}-dagg*~#++j|R9*HTJ8u4pX3}9F6rBsXjVxW_4MG<5mI~Kk8BnL3V;jvPdFb z&;x0Q3OE)1^b;pSDk-OESmv_`1yKCMI)$iR$;k9OzvlLw0=XPh01Z2u3$oAcYnZ*v zTTTrK89brFdnibtnukpF3Msf@A-aV+e+c+fLHCFM^Q znuAsMd1RC;p#~gCs@{PWGV$J@#T_^KSgzoQ&?yG8_DBA|`<~~#9+*s556bc$!3V0x zEAtJ2GgTb#C)7l~ACX&z<8v3jJ`ennF^HLT&e)-Ff zTlfSj`Ia7|vC*)kiC}-6OV&dfrAJoxkgIG;K0mFLNO@(GqZ*~@C1X-fF+Ba7XO1{VGL?%@S=A~<93)K-F!A1Vr&}L5i!m!jHrCEyjxube= zZfM`1^X3eN>}OZx5BYKxE@H8>@ha8y0oT76il+ss?))kGrlcgaG|@eXo)O=k~V2!yr8^=uQKgFz?g&9w>R6Y{*xssvIz zf#$!ak%ur}FsszLqYiB%`U8IIedoNG(z2*sY(#=-AK71v6=h!2d*AxtHwdo}VFlLU zq-v?h=Y)6S?`073Kla9WiiYKgKW1A6KK~e-9;p55Fd4ozT?J%w37DDcjNT=9MUL#T z_?QyY4i4-_hz2FX%SW#<_2mVWaWo(gt4rRVIF%vunAt~nOQ#C3+U1z%+c$$5T=-FP zt;-${WvJG?0Hx%r+(jda2BdT#AjIW8Hs!%d(*BabzVAHe3FEEH@N`&<#wozEdNEI$pp^uejh@S=wh}PoxtZJUTPOW5EjJ zpy_i#67Mp-WsP6;$7707yWw+n@;}s~DY~9Mcd#}Fh|8zhpx|HV)PNDi{5fg%@RCZ8 zg{v2{i^s!3>+_x$$0x$n<<7*NN`}GE`gE&XSzLpFf=ACZ1)_0rjYD$y)5FZzSC4}) zEql2V#v450cbwgt&xhpV#~24+(Nwv2WjV5cSGhhRv;GG zF^K>3fMUzkj&eRxS0s~n853|duKhqt28*#1){b-gFxl#)_cGjBI}`VHI9-b4;_?J% zkjZE6mzKtO{@8WDql72C$4srxEyj#ttXZk>Z!N!6+eU?kJTA@pH{YxK58ey)p)E{+ zFcNet5G*NbaDG5Wo>b06fl0L0jsv%KH~O+aMnn3D%J2g8S5< z8NVOPbN9S^TECc0ze>TfHQ#(su3UsbAvpZSLTXs{aPAxTb8x^0!F%i%?A$ZO5Q0F+ zN(vDuSUV4#u~LgKSI+--BQV88`}E|*)tAXE&!IblWL1AKc9Xx@xk|UWf^2=(TL$iT zS%R9#SESz}H|$E>?C=3>08H1`X#N*;dBG~-Z{&p`w31vqqbJL`HD(nPZ0Gv&vIWrb zIWX)Fi2`Rak1D51%-7w>a475`5j#^aV`*29`dTgbRqq?k=-%haNgIyNKBfj%ok6c> zSB{YjY-x77B|G0SFCJU80r4QD{6{$v1ycalCba6nO94dnQml8oM^N3h`$0_Casqv- z&&9{da45AVCtx!A>MLb*#DKz6^x^Rny78UPlg$gQ3QN38esqznwYprUH0^XeKXh|2 zncVvHm8uK35}>&Nt-b+_z#@6;h30AXTm}o86HHl&-nARFkQ|Qz2Q4x@3*qBGOyJXm zP*vb3X-yF`tZlp%0HIOOgC7WaXeSZR0H_ORR??#mp(7Qcya7Vkf~W*f z?TJ1{-D;i%MKtBKw0X@w;u}x>t$TUU;;C~UlIsu2$&^aj{M3TeYZ(htkJy>8tf*&h zp5=?5y;e3aIhPoF{O-{)20sveuo(0@h54rKm;V!)p!sSeY*b3o8k@*i`5&F4rKYc1 Is*HN}KOoW-!T&wns=u76i7!En4dd{njgjfY4x+2nU0y6nPqzNBO?b16G?py zcwms}*Ox)37in8+s!2pWD9^>zy4^;u4ewT8(=IPMk7(azdim|0?VK?TFLu;-cy-)O z33(mWN4Xx%1|vR$$ACXXiJ1HD*?%9CkBIFbu^RH~KX>B~hoJi9zn%dOUJW?2l%oXtf9^&U z4xVo6|85_4TmE$Lh`ITVlrR44QT^fYt^ex@L`9Q;Gpo&G|M#!~!^8FO*Z}|hZ+QMU zJb%xJ|IMC%*Vq3R*Z*qIKa=5qrTO3H^}o*bzsCOeWcVNM`4<`f{|XigP%gVPeHO13 zy@5;z;J^^7hU9mlb9VN7w_Y8u4^jumY{(O60PwtEAAe;og?RsLgy!n2Van{fra>gA zj>^;h72dO0=okmUy~f)9-;t274^$|jOG@`o!~&1c z#pqH{ko`sZ5En_jQ?jw1^|SJ(I+4&MjgyY}i!NY`!s+m+M+c-xe76?}nSb=#_``9P z_X{T|MFJc6{Q>t{_4tMb_4P-3kt;=Zo}qF>-dB9c-Y`VXgo5p!DmrS0-Sp|OXtehz z2_;aKi4YquAeQQD?XvT)T5s}+Y#-t@-Ivcmz?0$uz}OTHK@nu(!pryRXzN+dkn6xR zv28n?6?p7YMuZj&;S7sL-BPwaN%n@SGDhK7Ovv8&z)-v+bWs7#*U}OoJ!IIU?Q3(R zA?BGDbbbPy7KN@nZiW0}g6=9pqPSiC`q*PUrL`HG0xUsMUFl=s@(?fmDQbs5_lFV#_H`f9)re^F{+{4~YUMy6iETVpxJ_=W|h zgi4bW29EY_k76UTD}k(zXE-gK&unV8yc6vE?$S2lw!}aTz{S-1^7I=}j+x!eM@8r? zI2v~yLCBTFl>Bf3ia4d**EYm9hdo}rD%;Z>T&}!m2#x@SA|{kOPozh%%P~w`IvM=q zEsae~BL5K)p^OGw3%E@0J;zeXd@WCj=b!^7Vgkq?juWMPn`08Ob(k=IdaeAAk0ds+ z0Qe&^LKzjd+p#t=DQ!7)%O`zsy13Zti^B`V1RCHF%g${P2;#j@>`b=BqYxx!^&_^J zMJDHOLgd0wQK}#2c01f_J)PCazQ+ zSsbq?a#&0>Q#Aj_R!hNK;^{;oA10zq+~%J9s2fkR3p0*JvUh z>+p`7^~Dw`4JQvnZ*IN&M;;N0@+uYxc>w~VN)#~Ko7%A2#r=%Y`qkBVIe1LZCCFTJ zUZ_9>dlbguHSe)wGyFS_-c^14=rzBfIiGVfh01VDjd0qaIsXy^pxlvoa^ z&_f+E_W9{DHd}NY+KSKs(Mnh)VdMyRRQ)p=6Y;tjPut6)$cVFjkU;6Dqg3K_-7UN$ zP#bnpf`S{o(@tBs5c^IB2^;1PA?7vW(U5~3%#-!e~xQm;VZtz zX6165%0-Po95J*X=9(G2#GQfD)L|oMP;~b&kr%Udq-v&~4*1G8)%%U^KI;|(vA_m{ zD%`gY_ZX|)e?D7eV)xn2(Q(6FpGoUYoqaw^bvK+TBMHtug zDCR?&iw7G=WURaDbj_l(r-Nc`9FB=FUDZoPX>;oLsdQO!d- zClaKH-6-x^!YT$wIbnN;*cxSNX5_KptXng<{hUP$90w4y6n%>=yx6$RN1N5b{~8*Q)ZkLRK^-(tM&BSWT%< zN;kADW5rlTfY{Ooth|ob9bG%KnP0P8g1?kh|Mf#@2=KbBw(}~v5t^ZkL(GvLX!|C5 zh@%Y%Aan$J(0B9EEXt>%+zXua%$2h(j+idZR+`(m${66N-Rr#i7YJelcI)Uly>4($ z#1qNw(_bwP%|~3t3=TW!Um+P zQM!pyX%hIOW!8l0Gb`I$UgshVp&&63P+bi~XpVAOElz$Tlh%}AuA$nDSpN>CLzbij z-X$tm-ERqhXfv_Q(CV8}44rdGZ~;PzaNhUHd@MC!PM+h^=|^d7@L%m$_Q*MpGXZTv zJd#^d41@}65v6(2FA;|Qz340ifNwo?`8N72*cUy-VudwecdH_5xMX1~aVpH3YmDgr1@2;p#L zI^OSlNj-12*Q4uW>uvF07yZ9pXa(Svw#-%u*71B>JAJvEonHw!_$_;|J_;tPda-h<-IfCV@%C~zFz8RDvUVnH5U%&aW&Jd1nlj&sphQ;#GN zD2FpNxu*mzUA(5GNCjhNcG*go`{RYCc}NHZKy%c=VG(3f5;ZStxlgD*3wZP@3`G|L zMwpm#nc|qp39CbMz~c05Bo8Q$e?7+rtoC413l;?X%bSBqi?^O}LLWPl49}^V*Fxw3 z@Nb)irg#mFa#C|G&xH=|9ciD9RrAHIxmXEb{ zHuQb1LoUgV{)Xg2_+q)5D5VRT-~>-)O;*d0mSEJxTRabYxqfl9{~Vj-pH{NkJ9Gat z_fzQ?+*(b2g{l6%ZWl^qpkB`*wpJ~z+mIU)QkWdhh=3o{D8lx{u@PNm;NZ6pkyn;_ zfFi(3Rs9RH+AO^`klF3QR-)(BUH{j?Yls@cA1->*IlRJ%k9P5kqeZ!~)V8r1flf2( zM7Ki3hoFgOMcNiewoc zA=_;V#C`z1)Y)jbvpFKnF8Vrc#L;*4d3(96N+{}pECdoVAKkEtn#jP&;)%sEk83o? z9m{76+0SD4Jw>_F*8>&6bzf`Ce(1Ua~yCIXuR=a;Y)T6#dz-#g6f&PDjmg5J9=+H~1qdP;H0I#aMACgI*!;N5SOk zXbtS+W<5oNE5;t5Zz%?HQ_Z?PE^GMcB$oxNzhkjaMiz(yM;CB9JNBr)wk+57v94vM z_GWts67@tk>qSdVi(Df(c|EeFwD%t(+KUZH2O}lY0!7T@r|KV!fKeNe`Jg!J0eAkF zi8K|j-Cmp2@--Xy-JufCXF64s$jqtu*@;xDcE?Sxk$tTB2+XnuQKq2sO|LpIbH-U> zJ}VnVep);7A{1I>hAICCfiOCNbpS)BPKzT);dgmVefur)_ zD>sG68pPg*$l^RB)Lz51eaH)idJ3&e?{je0(OYR9v#wB5;>TFvhh zAf&K9eu+lCQp=u6(=rOgyl<iJ&|i(U<)>pm3n1&LJ(#UW z3wVZDh*GK`)AKg+W-^$b#@3<6M4 z&4DZ~#WtNBCV4!A$SLwvn>2UqPII$+tyj0@9XO~|%if2kY@PvBIGYhenl>zeUVKxa z8-%_*Gu%L}qd1ZYIZOX+rYF9V-PWMRkK0Ne3F54pkq}AvQIfAeyR!`Sly;QZTuyZj zk!Fo}h`Op0O#*8(^YS=Od0>p%^8ysVdg}^1>tFc-=V85p(P^4f3wXhrRo05X!7R`SY5uOx8YD#<$2@P z&&IxF@Vb;JHYp}j=jeh|%tG+&U2NMnP=Vg*GWtqS?e1}e3R`&4@x3k%zqPG=#L#B+ zWhqC2fxQSWkUVIeWWM|~zHozEx$wTVmYVv*?^6Nahuu{Pa|1ZBnO`GC%>q_+Lc@7%&`TW zq6v?DD=~zKSm-SwidPT-SDtbTw?pzU=(?=?ZDOaNR@N6M99U3;gimwcdE{NJDc6uC z1($wsGmvy;Fg?&GaL&$`Lo%)YiGMn&2<)t>fH}4Wwt&X3ox@WnU2;ITw=^yf6W!yM(#(Z)YFxJhV8Q_2RA z#3ETTeN7q6$A-g=JgehibZ<~NI1IY_9)!&k0Mx?u^E>tVg_MPylVJso&+MN?qH4~} z3<>t=Oflk{qk3~Pf`56MH0U|bM8abg16^QLLs8;DVCC{!_$I4^iF*`~Fw`H@jv{w@ zDA&<%SPlPdQ^;r$T;(OG&T**pn-rBsAVt2IMRpJM{nT3ZRHC$`^N3e7b+4S^i*Hmt z&DF~2WRO%GKf6w7IJmX>L{P>|9PqDBBTX|}+TP=gsY=hN$R9C568q(|yjH>3l*L;= z5_8m73P0yYtl~p0d~h7@o}vK}pGIwHy8I)JJr-kv!WdJpIV{*!CSyn*;3$b_aME{h3ugS5p-?^MUOZ(fH zY2gRn_b;1sE!x}T_O)qEpJUw*!c1|Zti~^mmBXH89EM;syG-%R*4o1L@+mcF;N-!3 zM|Ja+MsfUMpNPcJ_jvHhTc;Mv;H8LKh{aa`%!3bm{47*sXz2AR+SyEzg(>ot2y~L= zfVP~Ld;E?Q;Sh%>p`$|&Vf#LDDHmwGGR~TfkU#kx1Tw?#Avd0h^ zXlMw)HEpg2X>1}9n5ex9vzEa*$Ks8g@A4xkvMl7D>Nkw5m$#Q{kc}x&GXs{_(4dCt z$nR06I1an#v^gxjydyUc#5CuFiiaxD5qsI>xkPRkVa=?>-~dr#$Kvlq~s(%INizmmMmYwmwmC#1E^8 zF|;B(c@?cG3>`&D8-#|PC`nKB)LO|gDG3?gVguRyfrHR#jST_fPon#X6LUgU2rs$! zDZHjz_Sh77Rv$1+&gP7pByXFNr@_9HE-eyaenZ2!75pz;j*qo=(bMkxUwzpvCK52ukNM86WNJ4^l_twt*!KboC?{c18OP*xm zo|W31yanme$vD(;-j#dZdnB|M2-=|c2WtH7c(Y!So*90-8A$*GR~srd{s)|?WoS)c zZizB>28S{NT2dXtJNG(41f$v*4N{?w*3b{`42(_p_sThIp2H%MM%^23d5^i}B460B zdvW2P{6`$dF07^WHH$0{%DSYu3L?rla(9_Z!&XR3kvBc@#o%;eYqO6(Kg8s`0cJm* zrU%sP$ku9E;#B+V>h^Pd?mf_E`HCH-*O(}KE3=~vU^U34;M_@j;Vu-}UV6)MP{&KN45XX1)YLedxdO17o+&MBW8n#*=c46m~h zpN6G=mSdI3r^-Ast((~rPP2k*Vxs8kQ|&pPun9l&!;mxLC$~rKdC{LFk#a>h0aCA* zNguGESKdikljcD*V=hYbR!A*^P^1$l01TL(URH`BGvDPa_ZVOviT-n*Eqwnb2M0Dp zr(aS|IiQF3NrtzTR(e$f4J+geO{gPpy{lrLy0)E7Ja1KBW)eTLh$oyu=|9-{JTDW9T|1!i!D(Y3P(m5ZB9R2N75yI`>8WU zKY`FVm`Se&rBbu?;W0_iln~Pu6~MeF!)R2_ai%!Qsa!S!Q6sNnn4f1e_D##{;3*AXtxgR+ct-=1{Vsp(xR*DPm=e9!V@SvUb*ZU|P(4UiLAD|G?ZW zP2r?*vXF&e{?%!KylNE%24MYhOozu#96YF>3S?z8#^9>zre0=_OV#B^1l|9t;WeY= z;mLPZQxkArGpX6~Y0l?%IbnN>zXSk(t3(Hj4l)Q;w_eD;vNZC=+nxRz+lpm9A8C@ zGVcdM_0RUnN!@q1T!tCam-8y&7LeDgE)OCGYfGiYku`Ixq!u%!$M1=NHIxF661$%* zNRy39;*8FO4Vq^eM18~$HO}p~?#r>Xa82#ArMwUsfyk3kRa@Zo>CBxmayL7~l53C(%Sp37 z3tfRw(?M|L`<+-9C2ptGW15){Fk5BzHND2zCK|kb4@>&IGpzllo62}*dg5!l z>E0<+gCbeOie}^uA0hhg*q3Cx5QYEpTvO>e6%l;Jjdvwm?KkB$Jb zwH2hWUAb?zWWNXXT&&s_E zf;O_-(oRRb4aFIfiFchM+}4MROinM}H(g*IJ4PymUke%t>AbTTn4!*IJ|g0aUjfkm zo3m&s*bU3uKi)ktTb)JBYFpdCu}&K$^p6ni>e7AMLxsC&H2juCY=))8`v4A#| z$oMY$B~f$z{V$WsCNW9Iny|@)z0T^0`PPJxO~%-`w&Pa$^kr@AYgvF9ePc7GR3+`& zQA14dsyOEiF579J*>_~oh;`1F|NPBXzwF#hpE&32V~8+A$}OX9)KDd3U$%#Mc}Em= z&*0IuTvgN?XM9S=8<)u<8JC;4mK@M3DzDw+Leo({GMFxnl$d#rEit}{ueg_xLVr=s zVzj=M#hgz7>E5}bZBKFmPizv@1Iq8O@PX>eQYBl#!HXX^L*}EdlD6oyt8@)WGUX;F zK3PwYUn~)8DJMfmAz|zN_9(L)SJ9vc+s~EI%tH#Z{q~kI|^fbzCX%*M<(qb;SXjlV6LKI3X$qr z(>&9mdn3Hbl(cbvMK-{*Vy}`JjQchFkwtstL0b}y>L0hb@=x#l-)ap`Tj%u zFim`%tew9>F{L;WTDfJn0Xpw59r}%lC=V1oV@eIB?<+ju9|jKY^eG^^0|EK6*%8pcX=r8 zbw8LXaeAKHM5Pli$;)b0(2ULyM=?3i8_e2~MbM|ji4Z^oo8K?XX;cNx=sS{UTXub2 zrvpwdYc)PoC0c)UYxkb$h}?Yo2z3ZfA>WtwnfJw#um{2}49#hs!iA@=cRbL+s!3pTand8Mf}$6T-eO;Ib`wM?hCiV*>W4(h4cC1(DK& zp##JIExZKdrG;gwx2#3R@&|TF$OvH?FpiiEx7X$|TFy%Q%uf>W6aRS?W=F}S2D2F? zQM(hcBv%#Spt7=-)5ijt%63ajmRGM8FahO2u_^U2nL73L-7b1-YM@Vul%1hn7Zbiu zoMMlO3Yl2>D+Kg^?Zjk&_$jX~ixw;D&wgULIyQ{=^B-&~?X3G<*#CB_IXQwfYSq~d z<8Ja+b&bq$&C^O%w=jUjzJq>Wi5*QQU?jI9>X{|iZw*Dg81>{0z=P8O-atWuL<=r_ z^`7ZEnP(Gnw4j!^+T5{aJynhr+Kr;lswV%_jF4j*C$hUf3r)3v-JEn9n)S@2No5mPW`sK@xscYK7aL9mGFlHwH=M+n=xn?w3N*fj_8o2en{e&)WWw#{F#$gc~`nOf?l2$gtV?qMT}( z)P;oBfIx|4xyH157rhBH-0MOlDK5#L&$Er%!Yyw%P^*#tZ*yZIugvZaNF0dV#8x4^6R#DiH zo*{x+d%D5;^Xi5=Rx?0cDS^W{y%&4j7jIGMRAv3h4ZO;vLG&Ji`RWCN8ZcR+`2^1c)0oOXh~L&wp1~X&E;LXWgnpWOZPX|3gR{7PQ1K#`Q zK2Bfi4p-)MDcj1|QoDRI?8CB5fV7)02e(z0~2-7U0%3BEG6V$h?l^xMls5ZfbN?T0YrgNS6c(hauw$dEHMIrcyGm#NpPSe4?^wc^VeK|Qjttl-TZbzdgBg&wTXgm0 zw+AYl%+(oE_q8Q4>y_lgeCgte>#Co*Bch-wC2`_{EPOJH@&F0{HBRK|K@l*|hz0gt zA+%13SdRxm;AJ5Q@&)1KC_2X;?1ny^(XW=(U%(X3?{A7GrJnq2dxi99D4mVQ)J$5t z_+->AYDjN6LJ8GnDalhOFx*}6$X|*C=u|I|aUXT3!f$nB9lrLggQW+f6Q$}H2;$e{ z482hdBks+MSXMp$+3|&)<_~a(%)>RA_&KeyugCA)09`1V6US>x;5u^sqE$yyMc-F7 z6=XH3!401bf&1$UC=|0^&itHd&;(1CU-bO}<7*q>baK|mCD8dR9$;-a;#C$rwo0&2 zSI(S6gdA^pDbZi4 z^!U>!sSlSKyJlYo=#_6HGAy1UxIc^F!p`zH>51;_LQ24C{+*@tm72F3Nehw$4nSn` zMcBQPc_5!G50=i3pgksh1+U;N#jb|Q=qnG@6;$j{NoL&dB%?Z+ki55Yn)9+}Q?=7O zf~TH_uf>IiNLS%<8LZ1tb-!Mtyc#xRP~0Z?>#Yw$i&wu5NVdxTbt)A@sVQe@7+a|9 z0n9)1a%SMB>R3zDb6lII@+@l)dZX=O0=5N+Q%t55;G#=SX|#pEnwwHHI?YWdbN%z> z8G+0|A>9D$4Y8Klofm_4gp>OziQfG3p@x&c`VP#(e{fFH!J;0=no*Z=ATCZWGr_47 z3D5KeC(Ddw#4yD4Ife*Ji&b>3ZKL{l`}@n26pkTHmOp21iRUnm=sn(-GF*=^!HTee zFyPkh_mdWD!fM@(lwt9_XBri0JgH=X2CNh9?#Mx%WhFa&d;=R^H=TwJ>cV+#%4Np+ z88s716D;z5dKCMyC{eKuujD5EeO@qhe}5$8{ZF|EUnsdVf>hD_GR@#*!57Zx|lM+bm8&0gCh5 zF-$V_b{uj-xg=5^7EQBt^qTtBNHue>QGS z+{-@-inXlu^6j$1s%ERu8X(p)g-^VU{>#A?H9;_n9M&M^<8Zo@CobpV*~L&MX0~yK zGxYsTyQ%|JUhf;R&4Z9$e_;^rzCb#VS=o)N@=)^n(WJ+H@-3aLWNGE2)7_)8iFdHv zGvIm9sC1GeuE~Udkop?Jn!=oVNc_#^uB`2EWEg3{kfg!pt}9sm+yh&GY#ryiz?8Cw zEkN$Uqn;hZY@FYB>}$}IH2jXxEryaYssM&2q_ zvX{-U4&+1diIho(Fu-)M}3#u z2#go}nXrl5SC&c2dm#)1fS_`!QTNr`^4ZimULX?GU)@|a|Enj*T5yG$s!LIi=j!w! z$#1o@+vOu_iUFy8}1iz}-3Fi^0JNO5g18v!agIvZ+yI47uw$9K7^t*5ehVnd^Jd9S@ z7g<9IDCCpKdo9n(#=>{+OZbt}H5oB;!~u0R!EMAVl9+riy){NU_^XkKFw$+1G?tYL z|4=aLYQ8=xS7_&E*6OZZ$-^uA%G}Pn`0zbR0@W>%$<)TeAqS`fXi>+l%!n%yQMf{SV~%<$Knb3cCn2CYr|Fu}u&h-SIzlH=`H>xJ+P^iy zKX;AFr6@>Mf7rA7Ilka0optsEz89_^*6EspnPu)msT4MMzLPH>Xc-{rbezG3QE zx6X{zDqaOAoyaEFLQu9LRG$C2#vHl76UIjfn$Uk#7^*9ZIwH~G?hbCZv+gzqnvaP-=hZxXya+j9V?mXtR)x>2+l zOPM?7-PrQu{{PH^p#x_jzvCQAN-0YgzY;jk7~MXUi7VMmDWO7RtH5`p+yNu6u9Pz^ znNeT$M9;B?2N^J99{GH53K9G+6A&ZsomqYxUmlpGiIzdpE2Fg;(Wu307$o(6stl0v z`LnJYLk|9?F2q`HE&IQ+y=c;^l?Z-EP_3eS#62OC6BSuX*+#+iZ_M&iB~6NyFGpDr zX@Rr3zx?{%3F+yfs*^^p%-BYcRXYHso-~}%!{#;eC6UQa3`g;IMYO6ylA z;0p=mfN4Bt#SB?7w@BXU^IfJ4_}U5`T`r?f3Ch^}$#YxKd+v9e`APgJuqN@{xJVdPqq%^tH^+m|)gcC9gD57cyvM!5QD9RLMExD@4J=QPUrMray zRqEcuyCUqRq*WqN3uZI5zNtO;!dTBZzKYx~dLV(i^%kwW+%=#_CZ*CuX|Vex=Q}r`#DOdC?U?B-eB~G-)W)xP@iJhWuNTFnol6ry?6296!TU*sh9xzZOboY z5F?SnF7yRxR1&t4TpWVf+1ai^+EQ39+;5vX#~XfnCaiwAwmNciph5#(8lq~xaD4`0 zXlm$Pr)Dy4{}#5NhCuiXk6fl{q2<}(GH&LFexKIzEe!9&qBlm?CPdLidV~Hi z3xMlb4H)P|_9Be=&*Nud(4Tt?@=>E_ZCcG@Hr%=#OW-0eRTJ%Mzh|x|cA$~aU1NE! zaaYhn=-prW{F`2}Ds3TjX!+anIt7LYu>NNw@Y=WCQ$w`)m05KeKuZXQsb6LN9}8;| z1UpStZfO6bk{p0Qn%r*>C_Mj?*PPi5u(inmi=uCyQ(ck~gQ~o}zT6pOjt{iB+#-fM)fnkUH>=Zo$G%me_u^b zDnicyR>w;Hz%>4$bn2$g9!*Q2UB5ncu*JIl_SFp9u#yum^xKngI`J2iXU3F$ zyXWRQFPy$`687`f#)vMx&wE$lr!W&85<8BYA@%yvkq0M&E# z=m+7QSC|N@WE0k^<9xS9ixDE?CMLlrLUQ`evK7z0$fX&$l9S4Ka(9(1+R{DI$`?bX z63dv~>MsncUpDYZMM!M;{z4u9JG#tF7OTEd>i^a%&{-_;DkyC;N{W#VvSsv46OKnt4QD5|}x zhJtZBrN@YG=B1t>!Wg700|Tt!Fj5F%`+3pB0gp6)X4&0~{wPDa6?pa)MRo zVD~!b^1a+puk+m1V>$43-#l+JV`3(KajF@xnQ=%jZEu~k<=r=Xn8!3Xg2rH{6^Q|4 zeWZXqW;n)BHh<<`M>Xzv#k*cBvFKk_>rp0VJxT?fsxxpC-zWf20k$Qq9`U!Y0I<1_ zVIhc+-Rm&Tq@5cg%bczlZ(kGv*+=nVh&qxAfl{Z}a*Z)?l9cksuzolmNw47_asB#% zWk`^Vyz6X0EHwxwe5Y?cqb{VfzP6P~6j&baJz%sgWw1-r-4NbmyucbUhsEso2O+yc z%rWUofE*)vU#IyHv6uSuRj*OQ7>7$ynAim;m73S+q0r-_u%J2@~GhWF?mKfGr+Ipea?#U zV+Ay4m)RnHi0GaIb+)%q3Sd&pHPtza9GKTBlt3Ba;MBHsgVfM?Yqp0ANKoYELJYr^ z4TyLU0min1BCC=(SIfg9V$(2mrAw&!tZBE;SYg=P2Y#k@%qQiYsW)AW?vRW!6AlZI zOPcaQWy2YDp#pq-Wf~ph&qiIo8l-1IK^k&h**>U1J~Dhq3MZi*qq=`>Mm^+P#ZIL* zS?~uw+rUd&CzfvAeh<#tkw1~cv_KX-?V^MDR}pKf>B^EP9-Jwo1BpZ=os*mFtyyMdJP!`%em0FKb z-{><|KZTz?=q42L@bJlvz*>!td~-{W<8Z5|BKC_z(qjGZNUl^}IgT2S#-tL2exUQ_ zPos7aAVB;&8JgE=d3Y34wIX@^UFG67JpET0zMg4J9a6sIFeFpC3_MSDb9phZBsLdM zrB@T@r;UgxX$-SUxs$eKaa3<^CQRSpto4gvthJojIfJMOA>Bs~#7#c-VL(o)rEa<^ zhO<&c*$q8-liR6RG%SvkhX2sY`t-%ICp$wn43z3m=9X6- zt$P^!O!E-*%eT;meg4X}N4!HR8bfDwss`I=^%hgJj4D&1mm?N-|!sn z9<%Q;bHdt|Vs}-kH#Je3$L)RyzwRZX)2$E!tPr{mNgA*$?m}K-QqJPd=nHC_Yu#gatPyl~jI#Em4oR?0ff>6r=nj$Ss z<{FbUq(%U;If-7MRgu(TN(J;3THS}sLrB;6B1T+5)9oJ1$bQs^XeA4 z-n5UjowN3{zMM~anFA4?&02~ih3GRc$ty1WX^2s<#{_Dfbg9PeX9bYLyTh9~`lksV z>cU(#8Q4(%Hc`OfviKdG8P8F;PB#LDID1=j9c=!i0l27V#WE|3q;OgDuv)A&Lh^O% zl<-Pf${h?q;K|hPXx3#Q@$+S8?ikn`c3SjvBrJc3wJp$T&kk=gii*Z(NBN+zl#JjN zayQJA1GW=SV;tkg9O4IOit0)wTQq_3}-XIWQwYFUk%2Z8{4ZisIV{c zA)5&F0~B>cK{wwW@VWOyE%xV zzAEkLkKJ52aQo!Pkm&pRViDeaK2ATvmV*OGZV5ly?g_%ysRXx*zKR-h2|eVc*ROF}6$2 z6+nB*E#MC&-a4MtRi9WGQ(Cetkkx1Et+}})m$37@$#^J&n#Q^o6(3yDgjkU*^4S$x zw4IU}GHm`;@M{FKikPnez)|SSDyalP&ln^;U-VGZ;4c3RI7p{gWF++-JqHetwZ3K0K!A(A$O8Tm&>t;(uSthSlTN=ZBpNm3T*kJ=Dct(X1b$rRcKfm^TOlKx z@~{KY8%&_= zr|IQ^mDGh@$I<=gP#}>AH2R-bp;{hyQTAO5=7a96%LjyKni|7;5@=8UDv4g#E>8We zRm3#Mgty<5$AiH7Fu7W5oLS^uGKJdnJaEciq}8ONM1zCd{QCkB{nJ(=#F;wM3MfkgIbt7?m_IV!3^>PA~ zt9`j1qgZDi>3V(0yl};q*kqHjOZ&T7z-C%GxH@yC-y`*4Ea~MlnB`(gymng*c}j1z zg9J7Y`=n%I0{hby&FtJlH5rFJ?&`KLy(){Y%dIN&9jSm(r3oa+YESk5_&v^V_lfSR z^`4}rwD!=^$31qhd++OD7ShIcA--5YFP~uKr&;-~CU8 z7yqBzm6cJlGfF7Ch$viSgiy9?Wbd8qaVsPwMKUiTE1P@mYlM(Jvu^g@+jaRI^?rZ8 z-^cfd?_cotqkHc;uk$*u@jS0};V@fsG-JBT&0x0OPC>KZeNCgnE)PdWXZb!)k@k{C zcHF^jLVJvkkfAmFEDdP!vcar}B#Y0oY=GCo7XB-lCqSBG>!3e@O|>@fgY&YW-9W() z{X=EuUK+b22ZilDToMgB7bX3RZmi$H)t%E_RcoZbhuR&=K?dx2$k>E;CtI%Q>C&8! zHa}0!;qwbv1?hx(Qw=y7-RSpc(l_sbJ)?S3O*o)$TOKqK3`)ibXD|I~NI!{tl=sxT zv0k)tpu^GdD`by1kw`06u;1dM4UZMBrj^TKbVFcF?vP91qr65@a?a-3MZecPiZtAg zObV|+1^-r5P{8+|7)92Iu=!`-hXobk)sN`TLsGv3DERmypZEzIV(N3y7bnSokY`*x zF?ycz(4mEJ#8=x1wk@PK#|tU2+cvRk7(ro;nY(CEk~)_tLDi9~>8=@%EpU_AXf6}$zZk7;;z3BmU5%B+Z-)hHS^&y4XV8$cAjvVU3(yB3ENQsPDKfb4%{uHBjV}WXPlYFu^SEh(EtR*h(?Yr29R2tg&ErbbX5^ z|DWoqsOlGgn}I_6QStJi0AglzBUYzRPQ`(o|FQS^YynMi5T5?HB9^)Q{MrYUkn06P zKJ%{j5jV+4OYI;6_HUaOGju1>Mrpk%Jc%y?ba)wXCA*2+DwdxZA)iJS!k71O8OIm! z6N;Gn%BOZ27EBYXcp=pkqhG&%DW-S~C|X=lH-<3{wM@8wU|uSB)*10<#l8y3I3=_C zVBh26eI`0x2K_-?-1xVZ;WunR#-Nl@_m!7?K#Whs93VT$ZOLb8F8{-aePl5XUn3E-IKH(*Gw=sPU}jV z{C+riCZe%Y@R)qy9w&lX;aaRu7;~SN=G@3rb)&2aKh8gT2l?AlQY`vo`gh*Do7rhf zy_Q{)5g?A9VUeoSat2U0XO+wyRugAUK_+mUZ2V6 zy7@V?Ec#Z5Kxi#~LRf1AHK|qcC`QGgWRX;6AolTYhEUkt-XWikJT5(Jx%s}p6Oivd z>q-TNPxt&3RHl#9YUT2;XmLc#E|SRk!>)Z2p~gpQ)WT1vhb&xecc~L{OQFaSl&hGH zSEDDz(cwiCt*@6uS*r|`T@aQ1KhYW0DB8=JB2WH9<+`up~$tm?93 zu0$a{*#4udgV7V4po^jpQ+mPa~f8=gDyDbh>k!FEuq z9*e!CBjh}R4OlxPRMv@z0F7mBbvnKMsxt9PW(MDZrdeMMLEWFu zhE2{Ik0b1(`r5SV#Ny(kHqe3U)EH3p%_@UM={m8Nbf$#Em9xP3-EdEL&Dn2H+?oVN zb9tnR0I;qb@-ih`{@7blFUSBg86k<&Fq(qkC|X>0Br zcdgpq7o~r?T^0Fv>a3DE9B>RKCtIxEABwvn2xg#WrneV3p6U8B*j&n1e)Ivf>M8A2 z3vqBv4@|Yg&)%xtjs`RSeT=?21Qj&_ZD?#)!~;|oc}K)YFGEe%;ehB`q2K&ZIcPKZ zI%pho$YtD?S=ro|B^;bQdE(5pZYyOleH5|V-38Dyu9SD@Z&utJR58}d811jWy&rA7 zA=XwSZe$?JUk@e^@h`r1xS%~|5&uf9W^_Gva}Q@ov(1}{cn7)IR#58LD0(}L@pXKH zrE};PpV!l*%8n9zn*B6gsHYy&W^a;Dn*$+)?FaHT~?= zp_NpA_1lJaE~C##JFhn5>m2xK(67v`$q@&O#}3@AceZ^utto=YabZ8w9<0*w8*N&8ToSeGx$Wk+Tcos!<5~o>#xAm5xeCUwXx^Z7r5it7?Ak0!)@l5 zc2;>GTQquf0OiAX(#F&cXB(d{+0%@#*f&)`f6I7-EuwmX*R zyQX&XSveZvf0KB&?h$jOI$dP3qjYX@U7`>i8-q)yo5-7G!}Uz)g}?3Am*9t-wZ0`_-|~q z=istSUwyN06pdI8kha!UDocOLZ-G5{6Uv=gmB~%PX1}yLA1$5U*$tlFx`*@xghLiYH;?mCaCGXdHu1c12vjWH|dGf z&n6v}{)8S6OV_QtUaJ_#aH-x{cAsiOH1RI%9$j+6AX(iCs@6Mw9T?|79`~=YhHsL9 zK0UF+gAIBg-U6QG3b-fJNzN8av&QD--vR>>2J436;|4ZVIY*<>*N*qLn><@yPry=0 zfv?C74Eag|!jYTh!iK{ufv=%2CLI3edk=r>_@-o2_XC;8cG}v*t$ulUd|s-3bOS>* zplPZ%8catNosyEjV`{7TPuv2k5RxyQ;tE#fu?nVzKv77uYCYKE`O7A-y>B1wrer=m zs9tyr&~lI?Cg6Se#OTJak>JSMoZh}Wzill#+4%G8IG$&KQVMm%w*QCyPo=^;uxGJn z<`9woDNtwzb7iH8HL<}`xK?GazsKAY{yJt^r*qZo?jcdYldG`o#OXw}x69npTJl;J zeD6i7XX!XQ;pSq50WHX=$`s>=GXW!)kc;(){s`7Ut`0p((^Tn zPWXQ!)d+EMr8Ewcd?@`)=Zsvx^!PxZ?~fA;YX+nYu-e)PiFVAa?)PO_U^C}I4YgAvE8m*z z+OLGe;_>|^_vJ@|VYN24_(w}ebm`Q zX-l6uvAX}2z-~Mk>2=x4M>h-Mx2nAKKscvqn?G+=aR%TG{f za9`JbzZ?VxLEQtiqi~!woNld;_uW%3$zFhd0ihJe2qt|Swv=T`cblwgLgTZ_PKPc# zdaqTbr4fHM4O_-Y^rVD+L1KwN{FNZ8_(ekS!U}D4SnXT{({*9%8m~5YK zWw@OraO0PL7Ck)qy3br_IzLx^&I_Co*}t^_peS~&WptfV3;U!=Vq*_C?We4T=zRwI zRJh+6{>-;7C+}MR zxs!XLN&kqsbNwimRR6|l*3jZMXgc^f6C|1Pta|%$tjz-@1N0zN>x);6vr%UDcJ-2h zz{USFvvG}$s#H7??Z`UE+@46wor5Zth`|b{o0I8~z2=sCHK<^Zlyy-C*tBnB*Rc^< zH@czrrt4uIaWJ>e=0@v716PgM>}lzsxR$i3sC<$@#~VPe*-d2G$DyFk?Dx#9aqpb` z;-c4|=@~OchBP6da&x@s5MtS2>+TYs=h3j>=>Q{Ku3@G#zj#o|D%*9e|Ip_T@MXU+)FYP!6heQVjIF&)B`0S>(f_OUMg^GUKZAJd00ap6r)fF#zQ2R z6h!YkhpRCp%s(~R%f7uwAE47zzppWD`Rtf^{i}lAD!DlyuBhBmn{WWG1_qgAGDt_g z>bjlYM%V~r3j?RObQ%1;O#vBoTbF1?Px&mQHO#|69w_Q?$?VAY$NOT`>V9Uyb>MlP zK5qLnai|s9@?FIDu)P7hPwyI886j%)bBl>%!`y$7CK}%24|FB%Y}w~izxPgw|4eH1 zz0Q>-VBPoyRksCR?VK2kSF4GzTd(TXnGxQVXl%lp#qnU)79a$shifkbx#N~7szdte zjFZmFuCkvygZBBe(3xJc#6j(=zj@Ai9xwq*WyyecC5^;$yx>Mbd()KX&yMYK znV+|&DxW};>Q5&}H_m@KOF4k-qHmns$z@F~RWcEZ{S`SdF4LN?Bs(~_7xRmIvKlSt zyz?G{H~_{t0(r~3|6v^fgM|nu7+aO~@rt?SfE!k|3WFs9N<5$T z10u!F3az6HR9`zBBndnLSZkQ`iHZz8cE#q@=GgT^vEIRg8DdndyFWer;@x&G^axp z*(<297;|ye4}}zR8aA%_SkC*^kMuVz95A|>nA&iWD`g^3{Ct1JbHD63CF!gjl`oD4 zxX~TiN1;Rj_yhaH0Xh{5y0}1{?sxaxOV5LkV_()BfhbEl>QABIRA$u3pgDUkhf|f* zkJzhKHmu2qM-8hjiuX3bBplnbDt!IVa^aJHU;tjMi+^olxQ%6J}$m94S?YgCp;ag2gw zG}mokP$g(yT_LPoKD8gC!JDnA%su zrT11`z=+fSwU1?M0_J@9cQ2%#i~n}ViFkz=aId{QJc3O4OX(SiQb>n584&p}(}1x! zyC!+H$-pIQKS|K{xkt_+lJNOD)+#TLKRh!O)MR`MiswjK?`;o>8u^oQ{26aiQ-z>W z==fTAC|%{lyBE+kwdX?(1p!>&(0oBJ=M}f87>ZYZ!BIjR6Po1-KAT2u0#T<^pWfCt zhQ@-$=R!@Vn(%0fkGgiqD<$o_cKR?3uo*w8-XsTR`&9&cqc;-W9)uE}*Q?v)x z+8uSH{^VF3*i5gn-c>%|bKI|J_t|s& za&_G&NleUJW7CFKE$ipPMT3rhQvY3iXP(1krC~ht`HCQG^o`f5s;_(6DYpv`O=^pF zP%5x0$x3A4Ce7V=~o<*r4}!w;d@c;R14XG=SDP)=+;FMgKqdGw^~EqTu~>b%aXB3&*Ig6 zIj-QS1hqxRSImZHa$ID{_FR?xn#c6m?U(uY)n;Ed7UEBwkv8bbFxG}Kv^DpP-qpTbD*ejk zw}RRaaysCB#pMyghdKlV{dw;*V19#{vTl8`&+|Mcw?m^Nrf!QwOu2{@NzG<#H!N_R z(pTB5Ef36{czo8i3P~Q+?P=m^nr`H7GW+h!LbLFKnD6v(ZpvRG%hTXH{xgX=2V0=! zUB?c|>*|aoWrqG#oP+Dfh|z}mx9hp!DH{{S72Nh=a@apW7j=93%~Zi2Y7#elT3<;c zqde_FJGp%>6225$udkp$PYJx(`Q1Qi9Xo_#V$IeA~e^)gBkj~KJ zK;*pkkon{lMtt@oreU~efM^gsX0(x zF!!=AV`-Sr3DtL!u=P6?YOGKB`7 zTVi3`$g2B(!6#&7rSC1#fR1+Cb>IAxcQz89wY%qzhLKynhfRApL{YnZo=$?#iz0H2 zUw?d_X&zB8nnh*3#1%0R(%q__NfM8KieJW}?_H7L!imRI# zsZj;j?>e!UI4``HS-ilW>bgy578{{oP}GzlYnDLyFz*-lpf~Npa1-uf!F_8&9U7V3 z?MQy3BCn&AGV>a!H|I05TB}n22U(Dg2uku@X1MfR51NAnsgVHE$=PCMKG6;bFJ`Bb z&|j$Z4V~@jD`w%Fw5gX71XMuqpDBK#H%_TI%$4!0Qsd>}^;I3m6wTg$ySi`o)n6v| z9WU0$j~?GdU|6XiVEh%;B4#qRp3LAE71P8;1I*MrBM&MvNs-suP7fr*kLP$^4F}() z{#P$q%@NIgSVm6e0d>BK3)4b(5t|a7d@HYq8)S&F+ob4QnTys4*5kajPms< z!k;8B;6JSysvlc8o-Vj+&|bw(&o>#zqr+-nw@sWpnpx(Eh-7k-=UZDj@(-hwq9!pkoOQ05D=gVzy8B>i*A%$$S2YIS0b7u|Wn)VL>pY%eajD~N)hKg>TOe=59v{+2>*LAvVdXl#Fk#do&z@bwCd<~i}(iotmh`C`kV}Wh=hOw zHQR;`qB)#h)@+U_%_n*du4#{1r>=37qPq(0vni8*!h-Udoyg)96Z1ACB%z}B1*hAv z$~q5u1hsYR;znVu}Rre>Kb?tH&l=FBW6b%PUar`C59uQMFZ?y~kK-~Z0RPVE{N6SK4yYhTc@9MmK z!F^&d>aE&%Gv*ER7lAV0t}>II*sh2_thoROtXVnKlRzv$ZlSShqPf4Lq0OC0W+lpF z6QvgMH|Gc-e8A=S!2;__q47c#l)G^)YRgxNDA6$Y$&iL09|XufK31~BQgXos>4+JI z*KLpi5^Rd_wS60+IgPi-qSq_F4hIKJL`Qmn<3pk9`(RBC+CsdfMa~LEDLHcd$6b{a zb|4b$l3dh3lvBi}AA^&Vc-_q#y+xu)m#l8z7~u5}Es!jqz;lROV2k@gD&O|M-C|v@ z^M$r~oN|X7c{@vzFGrt4yn{l!-yI~Xu(2Xqi^v-f{D)@y3RN@t1YfLuQ)k4Ojm(Q7 z&LNJ$w~j6I%^(gW!pOa5b?lz3L(+2k189yY3#+{UcFcqL0S*EPGqCi`n__V=Nl4ka z|5JNRS7)Y4k}5pKcYmNsrO(;DYz)Z=*zGv_`QTxU*y--8Gf z>?GTH3+f8Cbc;tBk(6HR_FP()on~NloL0%4;a0Dhe3iO2S};3OTT4Rq`6Up2!W$t} zKlGmY4hc2P9CdZZ!Pfh(+#Gk8qpw;a?0e8Y366FH98K7v=JMySXGeP}c3c2KO^%ZS zan%QaE`*A$@F}8M!&t{26Y!b}VMC_rcmOLRKi#!K&O;&4E#L&UKbP>6lyaz#u7*!d zZlkcH4eiJ2TZXZ8m|!VkH^NnFw!%9=#%iPk>qtShNY!m|>OyjC9I}MuUx>$yKoK$~ zU^s0+;-_o0aw`$F>B8pJ7%q!8#Q>O%Zl@Iro|!@-(&B_m=Ia3#d-T_s!hU4&&3-UyAK zxT{7-np*k0#$@J`Q`#9F?0}90AgHrvJERQzBb9?-L(sN>%5*@-e7<2<5b^(Ig$%(C z6L*#9^i}Ibs?W%uC4{PbKnWm`#KNKh7T_3?)1~tRa zAx>zhU^ovEZF#nwI)H}pbXU5PSwr>FTJ|ebelm--ay`p)`h}=IoyPC-L@f>h#SG2< zwMikpEm}GeFf4Gge)k#4*r{|<4x@Em9|@_wg_mY&SDwxZzKCL#XnO7B=xd#|?&@mlGEJIxJP$|=y?lY~&3ON!Uu+k%>l<*uN%#}k!T+!tcXKGoQ|7i&i7 z4~qC|IyMpSlmP@kG+lHL;sSl@h>0|EeRfkIi8b?y7R#lqF0s49qGM9|ZyXNFCvq+= zm;n#l_4*enC z^RYzu`FoAU$Y?SI}H3F}?mSEeMHttt?C{Sfl#q^VKF_lpgWath|`wDBPWRB!mZ z$5t$WWyB~Hz!@>@;Yn4pPdx5;I}oy7R@|L=wRG$Oun6|<1qk#GEfq|NrFM{{6l!}v z06pxF47AKmw)lGW4k*Wg&+Ykl)nf zOl9(GMKFgU)}YW`kBF+bzzIgUp-56)0>&zHF0uVDye9rmXYIJxYl_2b^pM3a?Y}N^ zL-B#|Zsfbu@|O`E#!QT(e!@q0asZ}8O{zuyaXUxABdPI4!(!STn{|h34ysaPo_$4 zA1s7r8}082x-Reky~Q2i!j2ep2>?;MNvG_>qMoWdBkX8@Da`^OIJm`pgJ-TCj~fqa zb>z4hE4HiEYqpI4pI;t8NYL0^otiu0W1HIt61n9{h>@|9#_!^zEn3CotV8g-5I+v0T%FHjXK2_sMqZM09-PtshiPh_OY~9VFAe zZY>LAeIs{Vdcs({5?9Eg#QMbW7Gx0s(;cBg2;>Q2d;;z0ddX!63{pZU`mKW}^5jaE z(_v@#*pgun-O$k!{pA)LN#H=(fddh;OS-Jfsg88B1;8NSdBmWxBs_p%chMLzXelSl z4P5VL1GT?G2_&^+wZvj$xo51 z$!iZF&@#9$e8N?2;1RF+ zb4|RU##T4J1-L0_E}UJwx@||TpwmYgEZMk-T(}5mQ3bS=N9hS7_ReV0v&XRZPqZ>8 zYSnHx2zt*d-!FfuVMcZ)-2E?bk5-CPeQ|ogoY?&py#v4kUpE?(hjgEL3oh9b@u_ZY z94_s)ypF;q(biZI-oJD+XcIpd1fbCUiXWw24tQOM(%l^GuD403Bx>S|@c;!_Qhh-URYd0*A9ZM}r8FH6<>w!l%RmsoKb^^?`*>EFL!-j1b~p^617U`m2Iv$Z z(O(*P1*JsO$lN=B@f`aj2f6!nSyJ0z%32$bIHp_pOc&mORl;qOXPp6m9|8WR+vxEi zM1VQ;<5RKUsRl<}iQXF50gnXA#g*%ws@#G_^%JS6?ZuuU_1e`;lb!e>g+F+G6WAQj zLGDX$_}{zYYAQEm&mv!6_P;%&BUECatUpg1q+b1BoU zjTSqVR!T+Bwya;K@HJ=PLQ;V%d4kjWhJ)`A}HOcScp!&;99ZZk*hoPZN!ouAd9Wg&ZYnq-3StJ!B$4VBHAjMks&0B)%Gp|;o=jP>C3;R(H2P`Um93(rD zz(Y!v6kdiH(pWn_R|NMTlW*jfL&sEQ?RaxMU|W;Y!vIOv@9{uPSX5H@h&y+v8azBA zPnEhCBDfXVWWlD5sdi$N2<-#=pzdL0uU}XL2qk>y&o!bX)Hj~C_Df>l%cPNnU+WJ! zhnS=Wz{lyU`1L}S6c9=h6x$N*x!bn?lk5y|0M8_GgO`t!9D-HkZ<^R@j#d@IM^<m>-g*nf8e0{&QnVE12Q;(#}bBR8n}cej3U zmL-xbwSS2D0nAZ{{qGTue|Ad;4qQVG=Jzi#{~i6mTmMhs|Npvv0ZAcn?i?ZGqleO( u|LOgIChtFM|JN7&=ji_P@n`Vngtg~Jfy6r;Ir%y8_ef6lVZO|>m;VDRjS&|B literal 38854 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 H(`Ww!z)7hP diff --git a/static/dist/index.html b/static/dist/index.html index d7950a8..b112b2e 100644 --- a/static/dist/index.html +++ b/static/dist/index.html @@ -1,6 +1,6 @@ - UDN Server + My App + diff --git a/static/dist/index.js b/static/dist/index.js index bf55f32..ca506c1 100644 --- a/static/dist/index.js +++ b/static/dist/index.js @@ -245,6 +245,8 @@ var staticTextEnglish = { channel: "Channel", channel_placeholder: "my-channel", + disconnected: "Server disconnected", + reconnecting: "Reconnecting...", info: "Info", message: "Message", messages: "Messages", @@ -265,6 +267,8 @@ es: { channel: "Canal", channel_placeholder: "mi-canal", + disconnected: "Sin conneci\xF3n", + reconnecting: "Conectando...", info: "Info", message: "Mensaje", messages: "Mensajes", @@ -283,6 +287,8 @@ de: { channel: "Kanal", channel_placeholder: "mein-kanal", + disconnected: "Verbindung getrennt", + reconnecting: "Verbindung wird hergestellt...", info: "Daten", message: "Nachricht", messages: "Nachrichten", @@ -316,6 +322,7 @@ }; var UDN = new UDNFrontend(); UDN.onconnect = () => { + isDisconnected.value = false; updateStats(); }; UDN.onmessage = (data) => { @@ -326,7 +333,15 @@ if (messageBody) messages.add(messageObject); } }; - UDN.connect(`ws://${window.location.host}`); + UDN.ondisconnect = () => { + isDisconnected.value = true; + setTimeout(connect, 2e3); + }; + function connect() { + UDN.connect(`ws://${window.location.host}`); + } + connect(); + var isDisconnected = new State(true); var messages = new ListState(); var lastReceivedMessage = new State( getText("noMessagesReceived") @@ -438,4 +453,7 @@ /* @__PURE__ */ createElement("menu", null, /* @__PURE__ */ createElement("a", { class: "tab-link", href: "#info-screen", active: true }, /* @__PURE__ */ createElement("span", { class: "icon" }, "info"), getText("info")), /* @__PURE__ */ createElement("a", { class: "tab-link", href: "#main-screen" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "settings"), getText("settings")), /* @__PURE__ */ createElement("a", { class: "tab-link", href: "#message-screen" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "chat"), getText("messages"))) ); document.querySelector("main").append(InfoScreen(), MainScreen(), MessageScreen()); + document.body.append( + /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isDisconnected }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("div", { class: "flex-column align-center justify-center width-100 height-100", style: "gap: 1rem" }, /* @__PURE__ */ createElement("span", { class: "icon error", style: "font-size: 3rem" }, "signal_disconnected"), /* @__PURE__ */ createElement("h1", { class: "error" }, getText("disconnected")), /* @__PURE__ */ createElement("p", { class: "secondary" }, getText("reconnecting")))))) + ); })(); diff --git a/static/dist/manifest.json b/static/dist/manifest.json index ec84f7f..1ed9dea 100644 --- a/static/dist/manifest.json +++ b/static/dist/manifest.json @@ -3,7 +3,7 @@ "display": "standalone", "icons": [ { - "src": "favicon.ico", + "src": "icon.png", "sizes": "any" } ] diff --git a/static/dist/styles.css b/static/dist/styles.css index c5a98a1..05382cf 100644 --- a/static/dist/styles.css +++ b/static/dist/styles.css @@ -279,6 +279,7 @@ select { header, menu { backdrop-filter: blur(70px); + -webkit-backdrop-filter: blur(70px); } /* border, outline, etc */ @@ -604,6 +605,7 @@ select + .icon, article, main, select + .icon, +.height-100, .modal > div, .modal main { height: 100%; @@ -757,12 +759,17 @@ body { height: 100%; } -body { +body, +.modal { padding-left: var(--safe-area-left); padding-right: var(--safe-area-right); padding-top: var(--safe-area-top); } +.modal { + padding-bottom: var(--safe-area-bottom); +} + menu { width: 100%; height: var(--menu-height-mobile); diff --git a/static/src/index.tsx b/static/src/index.tsx index 1dc3e33..2e33016 100644 --- a/static/src/index.tsx +++ b/static/src/index.tsx @@ -4,6 +4,7 @@ import { InfoScreen } from "./infoScreen"; import { MainScreen } from "./mainScreen"; import { MessageScreen } from "./messageScreen"; import { getText } from "./translations"; +import { isDisconnected } from "./model"; // WS document.body.prepend( @@ -25,3 +26,18 @@ document.body.prepend( document .querySelector("main")! .append(InfoScreen(), MainScreen(), MessageScreen()); +document.body.append( + +); diff --git a/static/src/model.tsx b/static/src/model.tsx index 78bc064..4259e42 100644 --- a/static/src/model.tsx +++ b/static/src/model.tsx @@ -13,6 +13,7 @@ export class Message implements React.Identifiable { const UDN = new UDNFrontend(); UDN.onconnect = () => { + isDisconnected.value = false; updateStats(); }; @@ -26,9 +27,20 @@ UDN.onmessage = (data) => { } }; -UDN.connect(`ws://${window.location.host}`) +UDN.ondisconnect = () => { + isDisconnected.value = true; + setTimeout(connect, 2000); +}; + +function connect() { + UDN.connect(`ws://${window.location.host}`); +} +connect(); // STATE +// connection +export const isDisconnected = new React.State(true); + // messages export const messages = new React.ListState(); export const lastReceivedMessage = new React.State( diff --git a/static/src/translations.tsx b/static/src/translations.tsx index c776f34..db2e8e0 100644 --- a/static/src/translations.tsx +++ b/static/src/translations.tsx @@ -2,6 +2,8 @@ export const staticTextEnglish = { channel: "Channel", channel_placeholder: "my-channel", + disconnected: "Server disconnected", + reconnecting: "Reconnecting...", info: "Info", message: "Message", messages: "Messages", @@ -23,6 +25,8 @@ export const translations: { [key: string]: typeof staticTextEnglish } = { es: { channel: "Canal", channel_placeholder: "mi-canal", + disconnected: "Sin conneción", + reconnecting: "Conectando...", info: "Info", message: "Mensaje", messages: "Mensajes", @@ -41,6 +45,8 @@ export const translations: { [key: string]: typeof staticTextEnglish } = { de: { channel: "Kanal", channel_placeholder: "mein-kanal", + disconnected: "Verbindung getrennt", + reconnecting: "Verbindung wird hergestellt...", info: "Daten", message: "Nachricht", messages: "Nachrichten",