From 8b663aa7f4915e5aa6ea7b1c8397fa18bf6a5d01 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 4 Jun 2025 07:27:39 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9A=20Improved=20documentation=20and?= =?UTF-8?q?=20log=20file=20maintenance=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IHK_Projektdokumentation/Dokumentation.docx | Bin 184337 -> 184690 bytes backend/database/myp.db | Bin 135168 -> 135168 bytes backend/database/myp.db-shm | Bin 32768 -> 32768 bytes backend/database/myp.db-wal | Bin 12392 -> 0 bytes backend/logs/analytics/analytics.log | 1 + backend/logs/app/app.log | 22 +++ backend/logs/backup/backup.log | 1 + backend/logs/dashboard/dashboard.log | 4 + backend/logs/database/database.log | 1 + .../database_cleanup/database_cleanup.log | 3 + backend/logs/debug.log | 16 +-- .../email_notification/email_notification.log | 1 + .../logs/error_recovery/error_recovery.log | 4 + backend/logs/errors.log | 2 +- backend/logs/install.log | 128 +++++++++++++++--- backend/logs/maintenance/maintenance.log | 2 + .../logs/multi_location/multi_location.log | 2 + backend/logs/permissions/permissions.log | 1 + .../logs/printer_monitor/printer_monitor.log | 13 ++ backend/logs/queue_manager/queue_manager.log | 14 ++ backend/logs/scheduler/scheduler.log | 67 +++++++++ backend/logs/security/security.log | 1 + .../shutdown_manager/shutdown_manager.log | 1 + backend/logs/startup/startup.log | 7 + .../logs/system_control/system_control.log | 1 + backend/logs/warnings.log | 2 +- 26 files changed, 268 insertions(+), 26 deletions(-) delete mode 100644 backend/database/myp.db-wal diff --git a/IHK_Projektdokumentation/Dokumentation.docx b/IHK_Projektdokumentation/Dokumentation.docx index 657819c1f43e1d0f54aeb5d09d1b95194a5f9bcc..ffad3f26ec153e2c66e62f67c98d40b14d11421d 100644 GIT binary patch delta 39902 zcmV(uK%roO9!2!e^;~Jwy~sN1t*)EoFi&T@lU!w<8w%nv^B9D zj^$j>^{yc{A%q~n+W^d1tGvT(W>((#8NBk2Z;~gO`l`AC@JBY2v12+>7LFu>K%=|r ztFL~#8WEq`)y#y8>>iD1S?+0$Mg9k&f24oU z)16xSu`Bm}@df{zPBO-YSmv32P?3&)C+2I>Nf1-E^N(tVr zWc5yOaMI!P4Jsnh=y$rU!P#g{Bt|FoUJq@UtA^(Tn#ccrL{8RufX|IsOgPPKNz49< z8L2dTMw&*VFd3^r_l;IFnX-qCV{aJ7(aw_-oWc!bOr)rrJY{FCPj4{ncANNhvC0}(=#E_ zKj1?zPOHCPr|y^C!oBl7KG}n4MRqfuL8!gwnkhN?p5%|3e445}^}`6=Cesu>-!koe z`@G-#j$PJEZO9Jkv_`(`t=D_xskwIr2Aq(*_1V;WuQVD31ev#bPcrQhMBSubb5I+Y z{F=BoK9^2RI;P(qf75T=sL6QWj!mAbBc@vw8Crmf3=Jc;(4Pfe&mwMDO>;>GJh~5iLKV&>tna+1@ z5OI@IjyHz+e}(~Ey^UuwW*Xm3h+ESaJU>h$MeonkHcJvS3F8nS(cptHQ)Ea<)R!va zW4Yna@|6=svw$B-viV4piI#RtXit){5+s98zc)t zZ6y6ge+4rHH)7A|Ku7b{+tr&ez{v1?yokOrfEy?&>E$f}inVYXn*1s;(!}nE!4SWG;-Cv;V4y%{Bp;^6Iz0IdI1P~Ycah_pHN#y9A@;F|-1Ax!HA+ebt z)O3+=6upXIkbzO9*9JJDGl>pYZ;DB&l{iITe6QgZw~7H)(6q_vjOLqM?A8X9*FZ?MYNp8d$M|mE)%JWQ3k&%6cqr*r8X!QvKq|vH;#rXx=f07H9nmGtW41wIrg|S!$IZm?|&vZ&`1PTF# zR`3{z0tBgJK~sGb(Y1jh$AqpV!w&_DSoJ?f8c}Th$MRXUo<&>R?ZShdgZuJ?wohUL z2>>O;BG``L54_|CGz(Zy98~)}-;fTs?mDiCd0`9X0t<{F9BQb_VaiP|Nj6IEe@k*3 z6YMkhjwy79>6H*jCbsOtb$Yh4ydZ}V7NbFDnw zC{3n_D>#FHx#mJ}XL`ax-w+D0e`%4&j1;111V8v&IDwW;!&{a=@*CpV9&w2K&lrN@ zB!hs#EdJngh7U%UOgxDUjm&yC@c~MXoxl(7y+2UNfj+_oBZ)DdpI|*}Ot2QD!x<@T znqb<+O$G)`qdZ_+11%;Ic@By=F>ncaIpd7vAZ5rf-ep33j@R*lM|O;!fAe>6-&sf| z21bHK#e1S59`p@0&DNPnWnwTbjbZcTw9nIW*Zb`Gb>Hx`XAhtBuAUE{J|2#qd;jK* zM^7%!AKTyephS)HMyq>vwn2#+^|O=H-ta37QS+C!L)10{WQ83EboG22;AbOY#h-M0 z%ZP5ron7U?E{1t_(rKUefA(o*((bprElw%z<*%<_esKQ!uC?G^McZp(b8BA;FPS(`M3~)NFD!$&42v8H#6iN5n&9)$&Ceg@M%?oKt05AfkJ8o zM{)YV&rEZ`Y{`itM!OwqH~>RHo+#P5Wk?h)0?U#egI|XwNRtSVf6ON|FbP_aj~T=Y z4u|&?EZ+O(@}FZe50@&&$)NvCa_By@rf=F1*|vmiEo+{Wap>67{Ks$JgWe_>^32Y?jfGzcRA}jIy!s&=9yG1~Z@M zaX1rVi+DJEdMi?#8VC&J9v(Em(&h;&qGQ$2&5<`Jyp@mve>q#Ei80-s_}dYot(G5& zv~e&3JpHjU6GVJ!rGyuNMV5zLdE^8haTpIVtuT-Pk?_Qfev;5U9>hLE%Ic3dzk(KX zpYfDwe}udMyaSqFo=lGPBLX5`ppbq$H}tna)BG+q=>G)a#RY+bq8npsaQp%k7eT#{ zeNZjuFbMmYf8^|drujV3KHe$7ie~sGw45JQ>60$cpQs|ePJ>Ko4Q_c>=@~Ov9QIW* zy^ng=d+lL+Fhu3ky?TFQlZpu25)Ktvsw1lb9PrJU1Y_BtE5%xZLqKNj86C^j+Z#jT zoE9diOmye5^63U~5C(ABI8sgogKms~ySS(8X*Ol%e?@{WB9#}Pg>So+UI$Bpz}a{n z-3`i^(tYrIN><26YS=~$MJAaLktZ)DUPct!u+#i=d1D~V+EyKBO1reB4pzSc=>#f zN-K8a?wFHiW7uuC5thG)uTKnLgVI0F=Tk&Ue!lIj=+e<0!62h@Zs8$dm77G zY)Cnx08K{f>m?`#U@1q5ip_&n7|}CFhVdw388G&+zyx*K0}e^U!$aMOyQt*-TsNS- ze-RBW4EQVVeK0Lz*1r2u25q-MsB|*C3z^CL!rT|ax zMS>ykg%l^Jr@h8#pA*9Fwc@uM^^eiwYKat>YxQg{UQhlM`zCDh3oasWKO-uKwANBG zpjL?K<~o1?vRTEpFAnlo)RO+n3^Yn0e?P(n91)M##C?O5Z+ZaEMFcg$;N<=WW?Yy2 z`!XTZW#3uD5w>JO?4o3gLBN@ka&mVW8XQ1Pe8bUHqT?B<1hL(v7NgA;5@^BMH{|*) zrIs=?b~hCA%bXvNa;URq9tkQ601knHO(i_wFB%yD!aht+0)5NX2=?vvQKVMCf72eE zv^NXko5RjvBqx)UCil0M;r!(l>F#pU%>(O*$5p*HX4JTdgh6wih?gVNOc*J?<&^Ln zup8(F5nUmP@G<`ZN%ti;l!{1zXre?6Oqz7$6*h4j@43kX8xADtwuN%SA&gQe|2^Br1lb4g0)7fqc=#;A=F25`t)xM6nl;C%g6m( zuG2+pg>n#dMzG_q&PC_gc%`C9_Ny&~DF7ukwI3B`e8}A>D)ge|4L#q#-dl zCi9|J!s0z4Uzk14eeZ`}p4~W6g5Qv%Dw6PBk?_vxS_PJq!|vELC3Cf+zJ^E;a;n4H zr3xdQH!{;Vus&o1V7vnIA451w7voxQV)$rVj2NQ`O#pKeqOR)^hkEEngQr(6u!9?M z>?8z_3N(s!G>V8q(GA$fe*={HmpY!S#aANk-yYxuKD|_n+M_)DI;QYDn}i`+GZCJ2 zfK%#Bn~H6~@GB8dsohBvs5+_zC1~@2;9$-k%>q6i!)MPA$PhEOq*Cf5(PMn}eG=ai zfCXmtZuLe2S&X>bMc9Ozhz+44k~lcSQ|yh9K9Ra28-RIaEitgte_}sw3tKPX>k7$x zZoVx;tcF%~HAW1sF?Cs>HS&uQI0k@-&_YQhwkT8)ua3q&30ChTfF+rc1!B`#!Asc{ z$R_LzS|5PXo5-Fb#4bGJGWsnKM?G6HAZz?8!Kf&ismP6v9o&K$Nt9ho8}p)!4C}3A zy*T_$bG&*R;1MbKe|Z4vPRxj=Z66lh?w!>8buP55)*5vCXZ`+p*&E;>16RB9+f3-U z^V@B!fB5Ia+YDP32Tn(m4gKB@fN|!0_uST-t<#eMZ}P3oZM)GNoS%-?=l0KEc)%wI zY%fgb4})&RoLyo@Gs5k4U{lRFXK&d`#w>#&(KeJ%}A!52-x}8dzv6M__!<1hMEQzO!x@qxL zII@yV*%M*EfBE9^_qDRDMxtSbvusN=eNFa*EVuPfBv&+*5tO#mZAP#*eOKwYuX5PR zVd}9A!)=k892W1~<#}M0E8aT;Yc0!hIo-Cb!7(?e~AMLndH=X--p1#BlaTUcS0{L z6Cn=77FuE;Vra{N#g%q@%tjG((A5N&moDfdRh0UA-3pE_P@ZPd$<(3*8|nMu^9rbA7oa=sjn<3zBYgyJ;B6=1j8{KP%JI8zJgabxWr2V2Ea` z=Oey>M?i^f#>f`-3+<(kWnZgoFOiIkM+RCVf5#ZD)crovlRQFvM)tZ920^jM*n1+o zbN37|H=6BMyU#}+Rdc$n?y%DtGMzbGYHY>6aoomUFcZ2B#Oq0hkCI!a&AVr()g86Y zhW*W5u=jbaPlQ%wyADITTrS~OqKK?KVHnFe3@R5H>7U6cJ<`(%n#?(xUbQ5}s!OGI ze+l?7HsO5r))Y8Y)@V3AEw`c~bSrQauCY^G^}OGM&dqtVC?Wx}g@|qc-PK%39BCBY z2vDuPBq!n4Kw{JGx+2aL)xb96JyF;@ri+ozs;$v@0{G)`VzSzZPzqTvsVNcjuYcxh zEzDLG0?AzDX1Zqu*RXqfKI-q&jPG7ae}0FOxNU`NrXv3CMGX&g#Ihom#I^L;!ok#?ZYdp}p`U0Pf8*x1 z&$padqFQgU*sj>J zWu)lp5u!>XOp}PML+MAQI^dEP>+8V~S;|^*pYXVi4h^{DZ4Tu@XD#PGt!+yYt5j}$ z*|G11gPxf}nwVWS8(8+vf1@Oy*ai<-k=}%*+o*hW>B=AHyy>Yd#UVnyR7AD|t-~P3 zE{J>X^C=8YVGFs6*)G40+Hso(T2Z%GtEkvU0~y)cLSBd3FWJ-RoOTEGv(4_ZCnx=G z^Ay#W_de|JT-pyLqVKN2M44IH^a85Op`4tf+V(FNZiwdQX|}dQf2MSVU0;_wJWPQ! zjlK)$)+4y)lzaxN%;YO2w4s~Nl{1_rlnM~7MYx%w9H8F&*XH%&;95^UEO0mV#x&te zLi9sK&BrRe3BQ_3sH#K3Jt$+h`%PK`n1md>v<%9W0xf%4IEsUmyR<<<#XqVsxw&WT zBO_~(80n>SLB!U)fA+>92sm$A@djjP!$^*Zxu~cn6ogY7WP?|4IFCvCwlS;4wEfAw zo89AxaXLq!xo05F{_2h0sAJ1FzNf`R_?t*ZEEQ5acj#m5zqVBr64mD2oLI2~)UFX> z?d;X zoN)Z*Rp`h&H{@awW6E^x>KZ5VKsq^%fAwrs>tz}D{cw1&NhTg=e)21>dtIQXjWkd#=9e=^tTXpC(1hOBJ|={O8{hpjsA z^+zYeeFCBNR%0|Mr|@I8YW?!BB1p%n!R;X3*_WmAFN(I;+{+^l1B9(Ybe!SRB`Np| z&{vjA{tgfoxy19=U;cMT9^+8`Cs#tv)sCAQ$I(mPSSQ7p=-P@EvbnkGG)IOFZWgvZ z0Q~4*e`XgPFvMq;!^`Kqw51z`Iuyi9Q3Zn5B@#?6cZ(1ap&tn^IWD${6xy~hvHyW& zS+>b76W8Gfbt(WAbyM~stl~M&<>HUq-e+&|gv4&&E6gxezNk3`KLorWB{0fNt zagp#$EmA1OdVAeU!-r~~2&~o*u3P z{|~i_3>5^*zFbbN!1zPW{L7_r<-5isFA6MAMTQlJC&tVQ4L1%$W3Iwzp_Z0|PY9Lm z8L>AruI*rEg!Cqc?HVst;8^io87}=pzpZBjHM8D#n0snLT>wnTejO$wS!P*L}N3&nwRvh{F?&GO}ydoI;UKG-Etnkvdf4OG{w&mb8OVbPUzh8#Q zFZX2&@Oo^5exI%1Mc*{0R%ojrQY061 z0|)Gq7%W`nMf|Ww@)%mt#&GS(f4EXXc)7IIOnLN&mru-RBtSRs1Cp62`IAF3pp4&C zaPuxwE5`~$<((Q>M`KtS2Jz*JKKR-Sl!%RMc?(5?oGfyF^KNM`R*F6ifA;9zB7>xI zW~)#clVtTaec&R%3hBM+4X27^o&;HoopEl3YkDkrYn<6e)A)(64x}?&e`8$%Umjld z%%<-e+P;T3qq}phY+5njf>|8UE3hXX-lj!=4QZK?K?|MXy7>64e;ISSeR>b+T{j9h zjc)CkV@1*24_w(JT)C(Jbyk_YrA4~CT#Qb$Hmvvhz2n9BIv2zAEaxprl?oQtlyzdr zr)?|(I(|nj6sb3o%y{K{e;c)qNJ#kFm?Rc92{!~$1$4snAjBSGEu#M9=C2SM94eN? zf`r$wNm}%cdhEMvpM(lOZ(@DvR{rwlT_6vNh~T=x6e#b+@Rzi#nKe~5zu6RmzQpqA z$+&RAlEgm@a9iknYO(GSme*o*fc~6(dn7CFD zRSE)1M-%w|d=%hlqPJ^0{cufJZ4%K_wG4dyLpyWgMYz+tM&9hMR%N_#9lk5{+3SF` zRB)y4{mPr0Xd_V}iX_V7^MwEezH5`bZLV$7oAg+uE|(tv92ie6Hs7oTp@`OjwTk#} zuJJ6!iIOY?KZ~%Ae`xvi7aK0a37@AZ%}tEMhrOSR??L9M#0=#@`*#OUzlgl zD_UcFsX;g;m!bGVk|5G#OP1kB1!J-#O-CY5S3neTSa?rTiw<8KX!1mFCmTf1T|mn~ z!IQg#mDAVpXyf>+)924Ec45fx!KaWgpUG-G+6n!sYO3gIe-3G1(+>7ga(}bdYc<<9 z(fzeTX7}0;R-r+rJAj!wNqj~K#*E}mCE_L8=0#@dPqd)PGf5SaTS|unrw~7p(D;kM za$QSA7czsxw^)zj#OR|ST$z-F#zQM!N2^pnk~oq0k~v*Kp4mTTsV^=gHSTx^`hY9? zF0|UbCz@L8f1MoCu{rFH*god$ZmT+IcSa_xab|bN^{Q!_TTLwgr(j~ogKDE&FtO`N z^p-q@>jzhs^UJ*{f2F{lM>Uavoh@+AbmAZ6bw%emuRzVttcB`R7_s7ajDD@-{;&hT zb}WxnKuIX4zP}>jSMr$}4bxX2# z06yNf?XR&E+}?kE9ln(W?n zvDa`}f8h~)z@-uOPN5=xpihL#-&jkBGaYP}$hTc+pNW2lC17vZUSu(ywgBv*|E5CA zjdaRnW|9937Xy)+H#c7S{H8zETBn9dzK>%}?a-)KPsua0>EHF%zl`gc+wiW(0fB&7W8ANEo(ey($RuW9m*VZ8@w&V|s z|7FFr1vmeLsFrqnDbEpii_D-C?PA$laFHDJMRNAIJNBtM|%}_p#KnhM#_r0q~X}==1<9+tpZyjSmUXJqeovgNl1sOt*14xqk=Ev z==B++$eJSQmq^uP-*saz`R)=od&hL!mymclc$~o5+cP@H}^L2b|&742w)!rWfB!)E2^O6}}Q)s3I(_0vkd z{fVv=2Zr0vr)hTD)rQ$Fo=>OUZ?x*2VrrsvKF8w8#}vaO*VwRU;U!*+V`;nTui}tX z&d42_@qB8<{D;1Exq>|{#K48_}=+n^uaCZEw&AfxP%#@oacDlRM!Zljo~km~?%)+#^&l=c+n=#@?D zUD6#pAwvsAd8k`gu+-rij`qrT9G1_cz5W76in=Ffd7PW~VW^xe`*Wxw_sowdikJ!b zA)ob%CEX=RiKR8i#T}BKf5o*;z37A0ab<5$s`eAUwLt2Fy4v+ z8Q9?qKLBQ7X1NG1;H|_Sea#Spsgbc7Tqvnojge&(BLEefm|RDEkU`7zW~avM7;nAu z0fISLuZK?lK)?F-b&PCJ2wyJllh6pCtV*v&9gA9GKOPyasL zQ~n~i-P6{$f4%iD0&*a3-g{CQVEF#?b!59aJsT|O$xGA|{?2~YMifn=*8a5>>e>o* z9|w#E`4#%sAORRYV7u@*0176wqYZ4!bhB_!-`evO-<@va3m0x5>Vkr3rBilnX#)Vx zK8htK0T>7d0Un(hhnc+=r}s!o1XrmZ+6#)e{3&yH~}iWaM4M_8GqDKKbXGy zdMlCIE-d*BO-U37Y_93>fwf;GkmUjpO~(*$$R48~1hE2(12;|~4%pbJfg59#ooz%s z450_)oz`?kuOIj`QoWUlV!;SCh79lc8#+$r`h^ssMHEQv!-4%>bHf?{J6^qsnz(Ku z;S4!Ne~YV`kFau0zn;B~mcGYO3cgzBF*jXB=y!2H-#fii!5uqRxY}u{w_VmdU1%lA zmK^oY$Cd^uzI(-E=YqDqxZ}V6yf306{UotBRnU`B(lK>nSO9lq>hZL&;QQON!2NFB z?6yld$J*HJj;f_5j$`cgfhgzi`bZ|?U$%^&e`*a1%Q~MFmT~rZ`?=Kz&3eB(EXB;t zCIv|ST&n(K7i7y}7N7ooghwsB@OF6AzN_$v6ZLc3LqD@VaWeRT3ozP4EgePP?@~=+ z`r#f)>uMNTQ(N-P^ap`?#D$n@q0mafQ2jXMu0oy2om?(s&>7H=bMmKTwd{tBF3o%uB4Nbp2ia+^tl6A z96X2He~tTa@ad~CF2!bNF190b=0c>qrPY~K{phGwrm1UBzu*|-DHEC9xB(JY<2(<~(Dw+{Fg z-WRo&zD0k$B-0aZYnMjjRk>|u8qXGr;|scI3L;4tb;W-dW%SSrW+0)cm}n5Se>h;* z*EIBl#r)=-gVrIb^3bJ(CdoyHx*;b_TIzSXlb!Z>TpyPKqX!^)T(Fvs$fsMCE>o zo#aRd>IEj~A!!hbaNbjlh43eJnKZf4sqt@xo=43(ZC5=6}khmtAiU_wQ z^yxx*3;HYh!URUAr#z(*|$tD>bDE*>V+l z&GvFvC%->2e;qn<_w9GHwbjgtVlLt-DRyg$o=mRDN#_6eCjd7KE3tk~C|svd{G{A- zcY-wTwY79KCuQJ}7sfe1sQ`L(&0cucbV-+Mq1j-sd}fqO9V9Oy*@SNu`a(p^9CqAC zARuq}hU7Sc1>pI74sBJ*B?}9hInnQcrU0K^qLrI)e>p(R(=PhDHf)cY-EJwUZq(b& z9v$3KUw?5aMYgZ6=&;o^6tNSWeKEyXOy6bc*;!eDa-a zAqB|iR_wASI&S4Z+R6~rph?4!5UtI?Mvkn(RVjy1`bz1VvEm=O^(Hat2)9NylNWBT z)#ZxJf9%b>8A2T9L_am2fJd03EH2zjYQQ1s&6%smW9CFmwjuB0<XTk)DMSQ(b^&wi{VG=e@rD3 z(RuhC&;stwUupLoD9T?Mtl z$6WAIbKn>zMPY4hdT4|f2jB7zfAo56UkC02!#FgPOm0}*17m0zXMPYF&1OT?xDB3b zu&sKitChaOJ|KAyHgEfZbv#wUCGdE=9MvA==TVv?|G>R@ck?HCu2aXqTp_+RNK5NR zu7hR+#cixe2bq(wLFF5V1xSP})$4c>*z-9L`F-ez393o5R=@>p|PMXfx8JRyoCewE<#Es*&blRgN>$-WR}69?$!1gtfz&A z+}~bG=?(h*aiio!9&vqN;#5p>WL|i7#1VXDG(~AKX%U9AnCr&P!$*@zy`&Z(`bq;= zQ&5w?R!Jy(BGXD}2d$~Pf1)4_l>%rKMw^lbN;nI+Q~+uq$f!IgyaGYJBO_-}r=|~` zqbQo2a3Z1JMtK%WIH$nOGSW$bTHjT{DzsciM=j`$a^&RbIj9sk%ug}|SLQ9_-O=hu zKc)@LWxQ+13%mJKMr7#h5^(m(#BT22=J&vtzOY^8Q&^R}!SjkX$Woy_Yg4NovoU3?vrpdn~jli*~iDV-q`_}{Vr<`Y)+0n1hH z5t%c=g5~iA1MZ#f<22O)w@h;C3?|uMNiU@XcqMTJTP^r}Fz`Y(X$3ap+0fhW{Zw6} zf0aI-l^n?kj(qJ$f130Pc$=Gd3=pBeJ@VFZB!J49x?JH+!Qp@<=L{vY_d*rNb3L{i zeVIWrjc0-O0LPae8pRq(rm63wPwK5+t!~zi&DLMT*Q%y_ z&UGuUH}k?ph&69dF^@V$tP64r;cYYeccEB5++bEXaVc^1O~&7%eUJmK%o&_A54oxw8^W;MOIp26D zj=4^?e`=-B7*@2gL=x6@p{=gCg(phhN#g|`YHN!E0DMN=f2UiXS9mn+Unl}D4K3kwM0*fj4IAD0 zFsHg(SRB73Ih?`dbIRIyk(422keMcb6SHnImR`ftk8$xoSCxghm^756D1PIs7fSVm z{R^(@M}dW>=!k+Vo?1Z`$I@smDE!Tw7qeaZw(z}@N&z`ANE$xC?e|@fD=`fr$x%{4 ze+aCZy@HeVl6%eP1oZ=CfxatTK-%Vl(S%6ZCPXeTGB z*63A-)x)#=cce!0v#E6RKU;()N0N#0v-49<^RD}hOkoH{zYXHPsx^T zGF;}<|2j*`i%bD7jAoiY%vzz_z+&$JA5B-rW;U}x_tN^;{?f^(fTr+TI0pn{ijLik z;}?m9Jgpz;QoioEQwUymx(q|JRqr)Rli)gIv)QIlqHr1ZH)3ezHzHgpJp$L%e;w4= z*_;2NPt+rH6L;+6@dG!gd?0>k)O!8asJwC8v`E9GSR-qg`j{3eKK=WMADAurR{T(_ z-kGV!UH#a3>+F(i-Tb)_rXbz@2nCV5b5`kAg%pFk(Wx;mfbOM=Ke>W3lQ)s+qjpF!hIv-wKoZZJiCdHB!2OW~4285`yNxvhpy?vq( zrK3~)DXaP*hDxk2u3*Y@nsvjLzD2rBEb>RjVw3|t@;^iYU6^OjD+y`ae-yPVVKj}l8$(RKkFcW3{u;CnNT9$+2OW>6&U=o{8`0ZuektL zs>mX}FN5XL67e=<92Hvc4t4)h*21(_hFW3l#V(lMIG~ohEMa{t(KgB}N#un%M=gVc z-N7{YBazeT-*gsJR=1Lze}trtotyU|d0A1(Rv+pHvWxPTynXg_nG;ZZo_cIo<*|CZ z69rVK-lz@x^-{ZcyVq>?x`W~z@}q0{iKp}w=?a^y6#Wf|lVTe#pmk6V>~BKUT?0|G zLc6G(r5;K4)St!9p-MVNW7}%3%{l066H|}u4eC4zO>W}0U-`k(f5I?C`dK?t9D^O| z4hqA~LQ%k-Ag)piRx!0n7jA!4fuOC}t^;e^n|iY!5o#m>Vks+H#k*-C=qHqf{*>(v(<+$+{w>BHXnfAQU>( z8*0YU5@*IlX6%?$2EM;SDbwZ}$<#)Vl1_}}gU5h1UTPzDL`ZeW-E0i1!yUt{t#7UWRxf5O?@Gt7EGrEj6gCGyZ{ zmlPl|s3Ex~33f)8*ad|7n;kujr-!Bi$f$bova;!L)}5# z(c7R583j@->NCjuSf2Rjhb-ubLlrndNmv;{)h_nC(P_5&^+9R&ZL41$w8o1?(D6&R?yeaD*p{;=Pwmih*3jb?2$ZWgCJ|M)J1K@iGA-w$$wdWI zk|gd$_m~0H91oXCLC*}%^n*D9WH{O2fQCm#z8bG9fBndtzmOeIxYF=}R>6Bms*7ZD zjg`SUVGM==mnMBQ>73;T+r*hkss2oFV=Wy4{bii=xo%%W0~ImP0KaC_Zw^$6ZeNGz zM`$p!HHhS{SM_%oavW`eJ0cb2(3+wZQf>mzkl^WQ2b(!f?u@>?=y=%JAu7sqP1mk3 z5tm8Le|V1mRJu0Y6$d(I1L7|sO1BI^PNyfFp3to& ziQ9wpn(k%aWntgmw@zVtxG(>nJbzZ<#zhGOgA(XUP#Fxc(>UW2Y3&s~Y4H4fvX>E$ zPZrt!IIY#51U=>P<=aUWFu$&h%gph{q%(^!f0ZFWyPPS6t+duuf^RG16@m>=US~K? zKG$LgsI*EXgOad}{kx4H0<3-?*OMDzv9V=87PYH5Inp%6m0d_Vpc1T}$IR;%(HyQm zQLKmRLS!Ps7DZ?WNUj4F%cv42#sT_o2S=eXGHd-|69zr!C^Va`Ua!|cv;EOg__6}i zfBz7ZQK4Ceoe4FIfuSq771C(OIu*Ppsl!c?-I5&gSvfPBzKtdkp>UD3tuJIK$WuJD z;x)yLnz{md8x}Mvt;&UF;)Xr6k>|9x--&(P!`&NTz6Zx>-^m_w58{x79GsaU8c?su zItC%eh-%N^B?eoIB*VFrJ5iCzFl0r3e~(qHLROpV4I>E9(Y1$X^8~D*w}ut%>%kP5 zJIXNh1d5g$SY;@lR}~$u4bKg5*u_dWM|HDV<9@81l_q1^s0})q^~GxUH$UDf`Rd|4uHXT|H>eztv|T8*kXs&{uGl{|o~I8(#i&Wh`!{8rk6GbP!{eZe<3_dFG&U3oWJ4%i12egI;)tofZyqe()?1&Yzjby@U(1A z9q!@w+Cnn*{czXiV8@Gq!hAr`z{(p1KJJ5NO(3Z*HL>ra{HlXtqcQH43Rg$v_ay|4 zqrS68xddItR?Zyvm6u?{*Yh==#}OVHd6zzhOtZT-n4FJ~KG#3Le?%HBmqIOd+=0$p z;oy7z%AA}T7yjC)RSjz@nH;u0pq&>IsVv6=dONy(F|)ew;qeUB_vI1iCyp_bJ^OYu zKwKH$Yo>EGlQ3pYL1iQpEc$9@1@nS+Pdf*9(SV(HuhnTXGiAOgFlzTZBgy@y8t^L> z1vI|;^NRuvGQHqxf1BUDU#8=O$n^rnTR2r#FqIK-C2`nN6yT+NaG$zneXt8N=-w4i zw&wNuRk!o{4SgAst*xa!2oo#=BPy`HFENdM$xQWj_;I$xIxl|v&Nf<&YO^)mWoHkd z+`@gPw~wWHciNNeLGe0)Ac%zE54ECqmhm#BQY^szZ`MkHe*hfeBhfEtJ^I@#@rbqd zS_O(H3wj9xFSNXnl-njLzsEti4sPBHVNo`?9w!3VuPA!PHJ$`mGwE`@E{uJYk2pa? zA4Whd6vbN{f-y5Ysuk&5?4l-Xt>LgSY?q?snrT)Wtuf~0eD&+EFXrc}$-e{M(=Dfa z&J)_KDYHUIe}qUI55tvkKl z_mYFXr@IV8@;(qy(cyr-K|6)V1i`1Q>I1%A3NBXhdZ}DH)YNr-J?kK4bNx*SfuzAH z9a@orT}Vf+gZOe8qCdqC|1(YEhRvxvNO*c`_Ho~hz-8_A*cN=EgZ8qBCP2?Tn zUaM8>_t|Xypr-N;&S6M<9M6|_!i$wO(jt|!jY2eIB4eNQP{o&`=*&)SBMQyx;mi-5 z(q{gMf4;+ye%M8V)3o_2yp7!n*U7aJp0p$NDLjlsu@w0UWi(j1Fq8lgF8mcaCs!_CuxFWkIJELUzzBv2&rW2$`qE9*R2z&kC`6>m zJd^VHq{1@qZ*_*71C#zcERVDw_WQMg$s;L`&hY1+SxOWe-Mm|H+h4-A3*W6c-24OF z(1#n*mBL|&w-CyWm$opCKc2= zooe6YaaTtW(OqQKw}G{}t2bZ4O2aV$hzToF8OdV23as^71(nC*#qkxw|AF|Y;8%Dj z@ZLq0wX)XCJ%75F4ecrlzLUPP%2Rc@v^+bclYcxS!~fB`a>#J71Hy!I%yRBe<1k|Q z9YX3Pfv4-@NzL8VwOquYTiofz4NRxkqqA^(0U$IRr`)6?Z|V(E9$ zY#z+~w2NY(102>y=HW^I*B9jvdu|Eu8s>x`TxL3zlyWW9a99bP;dPPN_~f9+bbr2( zK?cAk<55x4qUusI; zYr*Np^2TaO_F^ZE+30mg_2w;%LVvf}9rcGlGGq81h&GgC>ft3Zt@fwI!7emIG5v)K zL(XZ8Y!9jS6-xr7=vhqey0-}3ScZd{p6^-?=rQ4b!&3($_xk3qrN=4yrH=v}#Sp%m z`R;hC%w54}uPpjWi><4inJUd1N%(%8KGZ>4?Y{>gOxO%U8;HMS3``j^cC$IDM$w_Bw`B zJTG&I2G?*Fm>`ih6xW1kwyA~1p*%FI=4nh;?C{f^x;O4KJKO>~(63L>sa(|1a6}1Xd^8A4? zuCK_mBZn{NIOfqFSc!OvS5Sbq1G}!RYrrE`eaD`07?w8Y>~gv5^>(e%9vurHUqQxR z6g(*{Sg`9HActIk<}58TDrb)p@5zxsdB%R3WKdi~y+Qv02ykHf(uo2IP{^gY8b^xL z&r=sMe8anWzn-U+*nb@J^o#`O z^bd;P!&6;DzhBap`w)QcCn?gulH*Pj{GnRp%406~6^o+DV|3_H==1_xdyRQpb%NM% zmM7*DG7+7I1iK=%S3y$v>{B%YZ(h=Ib7^bN6%`<^nGj_q1%EQHv4&P~2=drRC@fWk zLU6K+Vyd>gtwz05njv3n44eJ-pvZW7R7{_0{KSlK&?a-A5WG4RZi@ApJgK~%ALLIU^JIC_3XXaroxB2hpAE?!r(yIvH7+&BNxee}nH zt$WD|^C?1P3V#shOK47)jV?W1LEJ#h*AQZdg9m;-Q94t>mB-7atAfqanqwS2Qem1R zLnbZ+9it;TBw(p7$o{RNOzj=T8oAMECV z1WZSIq~9WPsc7eTI*0_NFc4&&X=7&=+U7F+Ae^zOnu$YssQae{FZF7&fIHzKWoumY zPVR3nsfo3c2h-3=+#EoiJ3>c(EW!s%Qu@y5c-*0HWqQ=A*tSIDNC^4>4>%zXBY~&eV1zeM!(n=5xr(=1yGMj`0fUR zYzw|~{mpR5z;n`&kPfyjj$<sL~k;ax*i>bA5k)O9P3S0q6 zMNR{151Lo3G+!DsO)9S#m+5HiGwD0%c>zZ0VJX}WG`lsr;$U{|1@s##7>ZPzBD<}J z5a%rdfWqlKZ!rGvqk|dwJ1y!i0W=kC6}ylJdndh>6NdnjKfJg&n^X!N?|-L-_1xbc zNH$u%s(FCu)H^tw9A+zIA5XgFapkkNNz#p%D=um1=5FA%Bz2&hFD3{<#kdO=%i=K! zY>p_LLH2$R)y1PQjK7GN^t^wx~W?F)7|p7 zwcfZ!p2^Yde(@vzo1UNDiHQWgx`#LGiO=QweY;k_Cdl4fjRi51vltYE5=YV$S?-5E z(WJ4Gu$AA^=2zV;y-w)8aNQ&&M4M4bND$>oNRFZ+PjNig?K6DCg@5lmC*)CuQzfW% zsqKVoKd@#ptN~sXrVQYgC%1k#AG%2~M!n3((&(6@QM1Ogfzr#ozoph@`4XIz5=+o< zkG!eO`=Gmrmzp_&+)K6?hi^$0*6|+ zaBpS05J0&+t-0}_+iT)Fn=qsc`DZBugR_fSjsomi~{ z`&KXVp1MCt(ZUF$AVy~oemOC&txy>FRy@7+B2b1I0Za13D?SYuzw&R*Z2C+_s;44br&Pn z={LwaHIImbyHt-kHm-sm6y!F~GXmu^yp>0y12gQ&-1b1rn`+o1$t5R{7Amyds6^cx zqJeXjk!h70Vbo)fcoXx`Yt4r;p--_dRd}NRTF953 z7;8FgwTd#{x99UY;+cvG9&JI4pB6Uq{`SahP^+5_6N$upuVH)G9alTx?>R0-BeKEGj}rmA1^8_rX|`H#)|*50}z z$4X+mal=Db++2jT_uA|Ft#75Y1VY{K4N=)BuYUm=j>J!tMj(h+8-fA?%@I!Qq=4xn zqfcrU6gy#Q&b1%p*_r(%z0+U&)0La0=Ufe8&+p2a#(^8%(kHK7=SENvO-Ka&6>g0gpWcJw9u}TC^pi1*XNnCo?|=Cb zJP231r8qwW9=>RM(^{h!4NdP3`eq4G(ov13-fkA#eNO`S7_kMX@2@T!McW7=69cQ5 zkytdb<@l8Z>nB7j-EoTfVNKWP%KHjs!=FDux9rl1UQCRBfXg@Zrorv@h17>-c>8|K zpmL653M_#lWdYHrAj6|Wp`b>~RexkQqId_iL?DV>JJ;Yh_exKmJ{lhEFHJFGz6+HH zbC-Wc?k%4Dk28HK5^1iXC53-@fQ$K#-0{PUSbs{nKhKnS!wz?@4KCa!NY~?KPonkN zfInAixqjf^(9JYH+W~yNEIpeMt0^;o6{k&c$GUD~;QMG%n4=}L4PoOV&wm#iZ{X25 zf~QWjvdHZG{7dDFf&=Vp}Tlg!!1^<1D3QaHaHK2?~cBt4uD z&c=@%Bq7iV878%*70kHLv&w zYuq3mg?`|pC5cS9NF>Ho6gEc`&fVn1u`r<`U)#)zso}Az=<55(PAq8V0LT}^wzFQW z(v2Pfwv26mgn~_-d;9a%(?LsQyk^Urh;}o+Ou6~u$$TJwQZNTp>X(QN*i5z zz|M#wH4r!cJQCG8ynjIAyNckT)p061{f^lm@DT8VQ_)d}*7J;se}oEqM;QhrTAU)q zisb-8PC9Dr0x!az_+BWq=8}wYX^Sfg>D&cYy?BN>G7Lj4%>Zk5G_$X&#VX~nV;JoW zvG9;bR{Z$!hLTlVCQH@VJ|@b|aUf`ip`TNt(E#$`uNUFmUVlYCFh)z8j?_Am^-9Y@ zb&0f3hGrAj6owVja+UsEI0;-tL+IRO{{N(oS?9S#yTfWyN#p9CwuMAN>C7JHQ7VwDZ>f(93$B@ zz+CO95em{j!ASdGXVNbzyqu}hI%=>vG>ulPRR*W^Mt@pUAF@h1slgwzsg+b6A8ZPJ zF5L}UAVQS6NQH=WV?T)Lt&ty00lXHxPUp%y%*B|4VV7Ba+3{T4C|i4=m2mlRW2i_{ z^ARpsny?g-(QYblT`vZ#gRZcpa8(RxV@4*rSiImuTk^9??A^EljJ7@J>3bRH_nESa zgI(@BYky}!61WjF;Qq7AveyWmWgf~!(O{vr^ojso8Ky%SFb+3 zZ)BjYf=4zE+-rM!dx!>Na(ifo;U1C#;q<0d+~>-ePAK5)6KCf$DFAnHWN;LZ)B(fv z0U(_&=K=EiUKzvBUvhri0@Rn$`^%YubgJPA%YXKf1KhoX6b7kI$m&ZLMk6VbeLdBueEfa=5v_it<;|RaBKLf4y#8 zgntpt{bCKpqWmqJ-F}uI`ToV~ME&gx7VD5Ai_?I>Cbg!n<%b_+Eq#Kt^$|9dy=u%zCA4{m=zIEmZpM zdM4YyC>GDq9zrvUX%gh^fz2ad{SIaKVt)c&WyR;_57R&O-uoCwCAV$af{cc`*v4gqS3ZL47g@pJ{^Mc4id zp&6^COw+p^v)4Ml#><0H9sVQ^_mGn(LsokM`wqx?FjTTs)_WmKis0f9l?zT?@ICH9 zwUW_IwLP?Sl*nGC+I01sDhn%Zp{>Y#mm?B36?X`)VbfI1rBX+PNG zg+F-@^|uzKER4#16eHIf8SSPuJiZYnhp?4H&j}W;v++F_p394J01xnF0DnZmOjX=_ z7P+g3=VU#6Ksx$5)NwUFg5r4TE0z93i#-_C`vu9aqsps>wX^*jKX$AO~?IN(b>bpU= zoW|#k{?O}eP`B4IyC*I96dMExDFz))l3aX}-lJDz(9bd6Y0hBOh6MC%mv*VI@gD1C zb#$%UKfbcy~Be`h=jnIOA5;(b$>*t?0NAib8o?E zk>K70e3A}VD)hb1oXB>?^gBlxx*pgASIl&nIJX<*-o?Ny`NQbY5A0Y{Sl`I$dkIi7 zxiRjwnwAUNgSUm(n{OWop|ny8A;c^okC0$bf#(i+Vr|15veu5B1tz&mBH~ zXhPvOKYK#HaU5j~kPP?-SM9HkOP4{mTWAD&`I4KtJzR=2;J{0A8kNsE1b__3Tr?!n zPq>)qG_nDzqzlOYh+T}NP(qKAtbb$ZMK`2FV2G5p4KMxfcYi0Kk50seLWZlY{LL0q zF?Vv(8whwIc>=KJ0YwM?UAo9W#6XLShDmn=sP(Qis{-@S0}$_uX`B4k|$TBmO|)lLhr)sx{zMFKGyD4mD8N0es1QvKk`h*oGZ7_~C zpJzVK9KZPV5lw5Km0s#LYjIip8HUYXuP3C=UdYC#XMfBbUz{nSe*6? zq<0faom6my<2w_SCSw6hld^GuvLG5*XD>q(8fbcTr%nTLfm`N5C92Ie&UH!5jlUmJS_|dypwXG0)2pJV*ImW-H9IwqPHNY&c-$$mYG~9bVq^)T@CXzXXjc(`JWBUO;GB*SmH?$?fp= z?vJGyp#fS&c-4}-k8b7f`5Cctf`&o|S_uS3Pk-bIB;!^%51d%EtvDh^VF~=tn8JgG zP2Twdo_Wg+qJwK){kc&Z$4k1D4HjwCpxzvZc2_m6c8NZqIkdVR^Uz!IbAvbhk5R#JiWwHkkqk}v}QcCCM1}R`lia-#n ztnU8hr4zJ22DS&CEf|_)7;2No^zo(7z<;t$d^?zhvP~`_(+QR7E&YBYB{oagGs(3T z#ZI_P$Pm##edK8sT8nF1RlLZLAq@mh=lvMtOBy%sqaXmRnwwN#7R zYN~CMDWZ?-L_N{*DEkBX>5^iKI;ceeW1yHOKY>+{yyY4*#Cdp>){LikxF08)et&|y zy2rIn@}!gC?hj-Z&m<3K#)A23jdwz(WT~3Yn`9;z0bC*;!W*LG!frSY?Nt=`8;}?J z0mk1+@2xnL7rM;lX$v^KQWFWGh&?+2#B#k|3ITKr1;x-X@Fs<%1WM8^3{_g^kn38j zJF=`2-dXGEy}mh0U4qjge>90JMt=gz@V6Zw@m+ybdFQx`NQfX)nbWRwIgi|QE-Na% zb0k;D<%f0%?HI2m^YYl)50vq3wDi5kfFwlbJ>q?+{8{4PDiN7i+#5(-PiyTezu1p-g=W?V4k1v@-y`7$KLdYe-5+WY65W3<2{&-+!?#pBxP^ z4(#73ytU($rd;xK3&(7I_a&Z3lGGkfXfRWt@2{D1i(IK=T|Q`qr5&+lBIS_L8mChf zGM2+4tpxb@)@0afnI)~=8;wSN7=xTyYHLPQvqtFiIGLsIchAUMps0G&s4o-hC@j|uYjs+|)*l5<3Jh_4KsbF2$DM9JQZIEa@(1#T;Y zDnBFV1uhU$qMS>BTRdaGDCc_}?aJliPJtAO0tcxC0THn$j;k#FC4cg{l5+@s5Z;V4 z8x-vXw1P)#|7f)s^AaIcOthyM>_!52gMiLma3Y7ypdSeSSR`W@6N6B`9#4IZdMY4C_0Dd*uTgO@HumhbR|k>7X$t_kI(=-3`EhA z6_Fgqg+>8PjmkF%LoelmSG0I%2^5?ufP`}Ou{_KtNa3+knbGID**KT4Nw7fhRP*&X zO!_EGD`{`{<}<&u*S`N3_m7<~#D*8<9#)WGGJUOCuB7fDtJy?*pMj(3u@&1oCuhEx&QmVqdh zO%^%!M5I@Mmw#WPazeKuL2IrM=K$;EZVE6a(oqiG8a)w-QBX@IXf1uzYii%k zKXg(F-zb}JN#vY$q7=Bk7h%|mi^K(4D9kK`i;@)Yf@0}KxOybsm_G1|heJAul@rqw zIFeT`F%ClV(SRYf4s!Shs9)aGc^wDzC@)0CaN*-Rp?_o*bzNE91bl*zwPbC(qg-9u-Xc*B(vjt)IW{+MKoAGI zXr9RYQh!f*Ym#8Gmw#Ll(5~Nop_r%0t}JatX(iG}#e@Ep zvnhp$PYy=Rorgj{W7&t3aon*kT|tT5{WA+(?G5)~2}F4v8)N95VSB_J_&FQX8JMG< zVPzv-@F0f^A=DIeg3i0LJX9o>7z9_n6uQ~dR8=np=pD;wc6(X|ZNAssn(cO%!}~hs zR)4;fzso{ihd;fa*Xc-gD4yKxzcXLI9gaV||M>pR`^(F+AoA4%DLePPQuz$o0cFJ7 zI;}t0Vx4mnvo=cWT=|dKbCp)JrRRnUl5(85Yk0jOd1-Q1Z=ihao5B!|g^iNfS7Aw$ zbm}E}T@6bD1H}hyM!4iT@d19w8c}kv3V+LSwharHkVPh;t>LK$c!7PwH>jV~Wu~_} zy}__m9!B18nN4$8!x8&l$#`gUDwgRQ0kJbzqQH-Kg&JLuTcV(*;`~01SGdo8uzRlJ zRVcepXj$l>vd85C&?x#^-OcmeY@udNCVdve;L|<-8gmuo3}b3-ZcSRU?oB&Sk$>ff zNbYC1pYV1WHYia0+<>)Sr$VqJ+sXX_;;_@m=)Q`m%S*LlT4I~e!X62Y6s`pqZp6_0Z zbQeJx6)oyy@&wh<$@)mu2fcEQtbcy)>TRP2A+AT*>_aYWW9V`N}e^_+xAGrH6 zk3#Ym1m4A@Ma6VR*rhr$*-?jTcf_L&b28Z)4Et8E3F^N;$xrwI5c9@iXAG-_RHkS+ zkOLzp4y<0}F7O%_vl1c4sDH0077RCihd$?}K;>Nw&x2HVh}vFCN|R*GhhVAzE;&hp zen`|7{6n(op2!#L=-_UoTWd3{9Md3s`J_~&__^T`G|h&qnz);>_VjI zz-{in1gHn}1?@$FzlrWUnA6I@Zlpt(p3zAtjK`h%D;9mMo@nY5MSn~>6@2tzfx$#2 z+-s5B#%GJt|D^W|j}W=&oxA0AB;kl$FLu*P&nF<2!%$AJ4oTIK^a`l-Gr9^XAj@6* zp-=xfaJy`8RTF#P(lt85+IN$QJcX`+l@ZDzk4clUHH*uICyAcKOGs?F&fV|AoFo`R z5i=_GM7Z}kbO3fsx_^EvXktOJ%1u#Y;ccVD$NgFI3@u2L%Vg`GAPlcTjYFa;GpkVG zHn2B%1-sJPcNdX;nXBz5{XNL`#1rr1kl3_!HYc;LUOgjucYH!V6qA%#t4f zjLmitq${L}(4SNr?EeTi3;L(E^P5xA;VzN)Ra8(IjmY#7X-fPV?>KGoBnc>F=aX1j zK@zKkXnMuzSAX(zQ-+i0yW@OT0*b0_zFW-#T zHuTD(V(}fJiCWE3x660_Ko?Cnupnq!SM9dU5=KYwcTH_DD7H|)3_-xb+!q8f5Iz-z zj}&o}BNF+miY}xIF<>#OUO>_YO~b5(fjne=U>MfO(o2@1(>6z1%PMC6UW6F14^$xr z(oK_Ma5W7a#|xK!B#2%sQeF?rhQ^Xry{esI+kb2uwOTz6SThgx+ylwa^R0$6z$;}2rX(j11J#5CTF!Ru-@-Ggb%6{|CcZ9-BWp-0 z3;sPGjn-_9ntF+a>xraPz9jb3nMPwg;kR7>ioS$bb5ZHs_bFKX;LK4=nL>WVlFh`O z{C}Gg@EQacGgbB#Z5LNN`q&LUyxME>wU_jFrz;FTKJeD&wfDDJAXO{_$f2_To%m7Y zZ*U3G#k6+jxp$Y2O)7_DRy9?~;nJ%|C0d(6}RgV0mT9Z zaj))v;g_`(0Uv+MZlf?1hW8`QJ0SL{xg||dlP;2W)Lqqf9>6swpyG>c6Oy+doBNbZ z1#~r81Y`UEe0+}2F?aW8l36D#WXkB)c5fWp!W6M6rN^!P`|WYDwk@e3jbO$o-r5%| z?fc!&A9qC%%uA?bD=$sdx|^GJi^M1}{PaZL4K%mjf-zltLuP<-Tk zp}`!g^gVygQgzWxXVqX}Ng6^7pH(JRqZMO(SIG|ywsgJXKGzI@@%@ihagx!Rtr80^N<`Oy?Z?g#tQ3O z$T5N}HSzF*_T?ov?tr;sHrU;PR$eihJyk=Zno#~X`@iZ7#HdPXUS40XpZ(%obIal2 zxc>g|f4Jr9_P%ma??vwZlK})31^>d8cH@`F7XcoB$!^;)5Qgss`VNBb4z+p_Vh2Uy z6uAXS`v43@Swh4GBxTueUs9_Zxq+md>Vrj*{67w7I78juok(sSv5*;~Tid;HYztGw z;*1`)_U~Vhi?wY@1!)X(M)B4@V`<;*zJI$dBTQq;6qc4oP#KjRZS7Pk9swXxiV2iA zBtwFKNtUP^#0X$Xk|7LACSu?@u2Z$RUP}0}KF4p-}kL zGu+9L5NyDD2=Zot^bS3Di1H_+mcUpw00px^+NuF5oJYE{x#c{PHzcj*k^CWPJ&!av zPGoq%8OKx)CQJ~h^s6`k0>yj57aGi=%HFbnJX2@Qbe1g!X7qiAMOxJnh#yZTtN>v# z&i%Nhu&rGP8a4Vwr#GfYwZ3_D3Y?EyRxh^!_@r{FTCEu4yITIhP(d(NmDhm4x%MNY zGR=5b9mrgo9!y)v@iPY;N#4#YxjQn|{#Du@>M-=cG3Gb1BYAE4=S0^T5lw^W6k|+( z_GZX923l1F%)dU!=212Asp>c9r)ea)X~czPN}|2%KLV{XQfID#5_2e^V#3y4CY=^; zHIHjy5Sg(j-MI|?z2oeCyXw_ftTMf;=4Yh(gEW5G+KzMYhkmf>x*l)>i(Cy}N1jcW zw-18wv0m_5n1|#L>CNj&Fi}`vLXHvSnF)s%bT2Q3@dhjuv%&5bbn=?f?x`LU^@Qrb z+5R<8AVyV2i|X!r{pc0vic|bmxPILKFgE=MPPw|hPaM>@AZnRQ)v&`voAhLza0B#eEv8N@1y90r6h~LQ=g#626A?#^$PDLtkT8z4IOL-dHC*d6e4z<|P9oLDE2$QZ}U^K_ye?cO|bw%(v z^V0}5$_q^3a^?jkxGyKrZ=Ct>uKZZ^M!|o6TseUIv1QS6A_el;jp7S0{D|%fb~P{( z5BM?B8U=xi^ceV&?S$9p;C&Sh4cZrw^nXVRNImy5FAJFu9<}#En_8IR8So?GpKa&4 zh2%d*WatlA6GL1%J|e=)H7}BQ$b+93{*r2Ll*@cD_*?+kR{&K5d@xyDFzROv%6LBA z7{~eGvAW3&VvtpSK#=!4|xdAYfPeHKUMGpMH>^E4E8JqU!;4U_zFs~MCwtp5~ z4^4q+eJ~JQ5cwO#!ol3YxW+S#2|lMZ;R<;4ZfqECf9{~RVUUE+XwJ`}JwAu*4A)Jc zz&aoJ+aMJEoG?>c3sEHZjK<^E51^*INFsE6OXviahz0OBa%B7FDzLP~jc-QCk|RhS)A;BjnH#BwoUs>#)(JQ+C{uV47ISpc(Uk~2 zsWX+jBEXl6(<)a}IkLo=-48}E2&^0CtZ|OYs2Mgi->?H%GMy-%A%rq%$$!^YA8noC zIr`k4Ja;3<3tcb@A~Ltga4F~jXKSO~vI0{TM7GM8OFFO}-$W@4@s>;Y%m9<{xY{vD z;zwTru1m%=*A22KRK&YlNC?#q(IXDe>uHv>}fPd03DtERh9TfU-ovr@>@h*_YE`8FxvcCXZdxm!5s{{S%|l124SzMu*_SSS#xQN; zoj67dqH*jzT7&HEOz9(IMwf!_3-v&eh5bOWHGd1FC`8-Bh9}!+ zCu}*ci}#P)CD;I-j(<-iI%4<;X$?2=N;)|K_vIRjDaf&mz>lF8A;Mijq3}fHtNkcG zw+apZFI$&rT4d!rMWB^Co~||TB$2Nnwq}i|`8uO8%HQxZ=l~}X_8`qwL+4`7kCtLL zmje3iMkIz3$tWVw8RjboSs8`9E3@aI8`4_T{|j`;3+iEs@~NB)|`;J4Eq=6}o^*Oc*F>O|*Punp35!Eas^+~FX0 zM_?M!A<^KOij{d60*IZYK@*xyRPh~=u;V0#HUsWlV8snFjNcfFgYZojQXsy=qX%&u zcxSfD9`BIOoD*_6&3)ePI}`3M_HGoWemM{2#Mm+3g}DqrgWy~IC)GnHz9q$Z`gcR+ zl7B@!^RC8zCk1)S$7oa{ONEzC3S6sw|Hsc`H3i=<_&M z*zL)gQd`t{YRc$)hUrUsnCkw-MSs?!<7S)H(CqtmtaqoA@w}!EWV!X{|IDS|M0#gr z*5k4}uhz!W)~&94^psYDPFvp3@?L+_&VPkj+fH}F6WgYzljSftQMJ0Ch?$Y^TZ8s+ zTRkM>L%%wa2p}B^>#75VG!|Wz>1ML}m^}@;y-wJ1Ls%7imf6`I^Qi}&skJ^;=2L$; zTGyn+8a`@fuR3UU2e~MPDix>%@X4LQ0NN|oZ8aU&GoILqIgEFTkgF{*RFc_oEq}{` z?o{mo-0r}L-7D)Uc*3b%eI?#}Y3Xlylm zkF%QUsnfZl^4$E3WJ6ok807yDkCLJ5T%lpmoSj(!fqC zYPudxtW{gfa%VSlDm%KJhMh=VJKjKB((5B@L3Y58jf80pHXW`_#^POKeX}ofSHRXl)-{C4XxRF6V0?lB;}lk2N(|rfD&xAwX!VMmCX`8;1D)-zg~S=@cAMJAK5rb_ za|%E%G}26YPtOGKaV&2a+8sPEXSHQQ-CEF`C!oggr^) zRJMXquGDkk(dbHa^LX-`Q$;LJN}HPH()cLE(k_!XJx1tL=^oD9L}i)k<7(uap2@HJ zrzbfcs=D4tb~QUiU1^uAA%9QlVp8Y!fN^T{ zaxZVEN_S^*d--(mgi+!-tE`z-`aPh_d~ZQ#{ih~dlcNdyIEyAb3lhK>GHKTaO_dka zUB{^&1e0D;jw^Som8rb9n=@t%6?QS$%<|!y8k*6lYAxl;VwBI3!aKcfK5K=8WT7U@ zV#}lbhLOejB<*a2aDN!)8z%I-)81HYOB#gi@U*ffiDqlf)+uns$Vn?B*RNMbLvOWJ zH-k~CPf~swtwUWVfP(D9M{bZ;YtC9;4V;ctr??@@p)#X-j707-M(vuJe=~7Rh>`LbWSvl+>&^&|er5P37(J!PTgGJ5}V~#(%qfw zLe@KU=cm3iY7<1H8zZKVs!-A<*`H28_RxMTI!n)S)XwU*rfU!1tWt{_&bw$@7j>M-7Z2izRwNaeqx^r!4a1w#m$t4FT+}R{hnM?wjM0BQ))K9*vO7Z~rUw>M$ilQmKSqk)unFvOEaav7r z)XB%wtf}!&6276!xZh-FQx{K=U(tmR-!~M@?C_BG6`NoC#)mVz(%^`9L-`vinGr7c- zf`3pmP-TpNpyBztRW9uU$3M^ToESiIU1w-==Pwn7JH8whMH{~16m>nh3>1Yvz6m^+ z|G4-1ebTGF^V_)b=7;b%+ka@*e6vE&Hq6p0}6KL3_W~}M%neS)J`ebjU zrC-C;5BPd+9CZLg`xrTqVgDlLi68I<*az_mg{nW`y#E^?%u+A#yu^3*MZj(FGVbAa9m_70W)L^3TjP2=;*&20p+E_7Bcdf0Vbq5DS+Jw9m`icTK!H{|@)aA> z7i?o2R{KEv8vA6MnKl%3br^0fFD&o!bT4(#L?Bk+j8wq3&_ zvLG@EnxshF3ZuZV;utQ~()?75t0kO~zYoofv##%mz@ z8-SpMH1!&){$VJNKwP~7V!jCoa`g&{{Whep2*-bY8xs8*iT^gF`fH@dw;{bUC-1d^ z2chM|hjtKoS^~S#mhiM_e+(ZWaHu7&?gBSCK}?dnz-X?&{|1iWtSf?7H$RNP6JB6i zpl)7Jg2(DH@|)%ShwFUAdb5~c-mWt&@V;f?aspxH35b)++~_^JE2hhVar7)d!CE6C z3qXH827c_g;WavV---qwIv0@iw-k_i;4&@?sdu{CTcJ%Zw&4ZvJ?xiz=YfLr-$ta! zckCvDxXySF3-@bYIPstbzbyPss<}}v_0HgP0ia(2aEA5H!{UO`C@~1*#k&!X`%bsI z;1s)paNHNgQtym`U0roh-7)fqhr4UB7I$}d_u}qu#R?R@xc5<@@NkM#++9j>eYo^t zEl>)@-T85MGk5p9{U@`@W@a~;O(vVqCKf#22$ocmh|)`(AHKW-vO*$=vg7tXU>-Fn zB4$<6XB7<^lriHT`Xh&9yz!1OBqc>nbPqY7;8sJ0aMPJYSN9Z^C*OPj=bSr zV&n5@h0hdt2J1z&@sDdp&!~+?ytfaM&mTLKrMtFXc}?y(Sw$cU>PtheznpVr0*;yV!(r>xfgtQCl^j1@9 zs^Lu&t?O=!fTM$wSDoglRm!+q_3{d-#%AMdBGVmC>A!@)Uu98d*oQCGGa5F-m=uid zXXZ8fxc6?^F=#R?h_FIwUiBAZIlg9~fv^b=Xbg{=X76O4h1qp1ll=A7u`Cvevc9vv?eJrTVw51A^g_FI^UwtO$H`~0e-IZ`NHX6y~QxnKB#v4U}T6+ z?}$nvWxaXEnWoPJ6=ALpqO*`PXZY)gnN*W%;m148|6P@*8gF5zbt18WPbWqqZhMua z7gq906(p=W!Wrmq&o0`i;&3tk0Np;bYu) zxhS??46o_?5IC?CkUv|3w~7}N`(^k;rr+@aE^*p~w&0RXZk}72U)gBo1pWH*(CE6w zfGX!6b)=lYp601^F7J*}z@B0SMkiYR0k-)9SwFF|w5m5}3sa8{5 z&=oiNeBX{a(~~u8)B;_5-WD&;dhPJ{%7aqrR>PK(RR_Tjx1HnehRJTa7V5S~`D*Su zue&V0?2i)1_exOe%)8Z{kLGY_;owC+10D+~oj2321rF0nuk)8ZkFZsaSW)OpgEOnX z+`H(_+hzS$Zt$%|k1nOpbL!qk^k4|I!1cKBe%{`?yL}=LNb6ZUxkmBOS!@bJlckm6 zG}&j4EKqE1fzbX;m^g$wtXyu<=_Jc)3}|%f+$I6Fv2_$-!vxOQutp6NGH7%m5dXUi z^NBV7Ec(g@<5oGmGP###Y1CoAy6cIvQfFLHvUu{iLehukd%r9%jm_&S;wq*nVX3I{ z4{xiV36p;&#UT|9;zmW>`p2R?v*B&t--$hHTITqho7+;w?!k&N8QtwVkWB(D^DMtp zBgu24{IyyRr9UBSATJmblAvfF0m6}dpfU0hQrwso51uhr0pvuXt(q4wMtOd$!7e@% zv{}98cbG+mK8n74Dn0Usj?3=h0ln|^{5-8>SM@YngXvHv3aqbPC)rNy+drmo(i*kf z|N6jycfww9V8M0tdV{S6Bk~vf0K2_%JBrz_klS#0kMYY%RIgwl+@geu9DwVvKbVn- zseuohwNFIvMm*x4BI&(K2Q4fWxpUmP;bjOtfIRrEJmWL1^v``|!h`BD4yl=~$n~IKfuKy|A9C`?c#hoe22~Lj zZ(SsR;%}*h^H-ud5mkg+0E}jPr!$ogDtcVhX@x%RF>+OUoBG)td=^#FmPza^q1eCg z)01hM#q>YgCp6$}1qNIQ9AyO!xP^7Tf#S>!L^j9!04C+J-p9`g`H1fvZ2deIEIc3H zu7cbj<)%jUrw^5a_yKZP5#dU|9G_wE9=33PwL)L!=Bp>|k;D(Rn4(4O{z4i!2<{Bl zQatucIj`!S-T-i!`wl6q<3s&Vx`GGcT)!e2VFyPVx2p-O?cEYf#NGhE(fO|#s!P7} zxK}Or{ie9GnW(myLded9a#OrmpIb1*Y}B9=+6^xC?Nz8&f6Mb0QwH`q$}}@?2rvGc zSn<5|XMB#3~yu0eS zO{%VXPZ*u4b$KUEi96mPTYyi+Wxn`ADI-#Ne(xzuyn|qE5BGk+AyL*r+E81ZZ?@_( zJ&)VcgXM6wUBrX-hb<@VvlNct+EaiOr-q2I>Jnr6j6vCZPKx0Rq1{)WqC*gPHAf|`*(yK-)(Iq=(`{!1z8^xI422uNL-p zDELQ$Ej8Y{AO=Q6{AE@?mSWIe;@h(2N1*6bC2U9L$@Vf$M{BKevijy(2absd$@O;m z*|>4!*H2@EILf$lI~SKVrpmPf`y9yNf9UA-Ca4`3=Z;z0l_5mXMknkT6Z?{qmVlPO zCJDYZA<)3B1iITMnhU)=_#@G*VInS)94C~bncGdxJq>xS2yYJDyd!_fVW18`8GZxn zq~%)ZsV{WV5>RBU4vYY>_bqd4i=mojnW~)dybqU(KcHc1P2ev5#4tgj4z! z?qV80MbZqYWlc3&ncxkAncOin!;&bptK>QU{1}nluEMHiN>mQ&r!LI~Yb{wh@|bP2 z-)gyqawn=KH1UtxS<&(aiD$AXPMdfRX3iebyKzy5)rSBRW^MzAE_{=QAklTPznxQA zIp@VhlW8^98ZB$hd%s^2`!2>3mQ58ZvAPjcgYZEj!O%NNeLHby>1Agl$HO-PMM2FNmKQL-doh|QC@R|!Q?{(j}u z5TD-V?z0BWy))2taBCRCqpb}p#qL68>R0opN)`#5L>UXQb=n1&Hrm9^?;~8YPg1GnBDbZ5?r2Mi&s5?T*5<9|iF7H=^ z?UX9X&I6CS_+-%z?;5Q~9h`^Ab9Zh7z=Fs}uAKmXMm&bLX#zW6%L4H*K?80k?qX~M zZrMrv#Lp+lo4Z5lVt+*oBvan|V6SP>Scb+oh^h5-{=Kv*N4|BBB9K82@8PnjI3Icq zT){I|juHeBUW{oY=h*|N^DYTvN|xwAz2a~*$F4b0T^L-4OG(DVO>Epkp%m-501OGP zR}%;|YF9SNQZM*Sp=ZbC-|CgDug`X4H<(n*wW9*@z#i=UL~UVZ&UXeTF$Crr9&gak zA@ff!t&%<8ANEY2UidB6iE8LGaEtDpU8_y^rTi6>No zl4q`mv=*J!Qvv{ej`?ePq~pLEk;n5VBNTVYTS2VJfCLgapr6WAk?=Cw9rO? z3c1{i;?*wNFwX2gBc*bq5Vq#4z@OctDZ33m4I#n7O+m60K;*!N2TTArgu3pz@8sMx z0sqol9o;BpiFi_Eo(%cmW4dE@EFC%_%(g2Fy1vd;GW#Hxm0_0+~g%eNM-jctPoHs%;$CA&_lFeG`y8oHb` z`)f;sv=zk%tE}5M**BC*@J}bBcbcBb_y)WW{8*Tw*F@DNEkYzsh}7@bjtu9pT^C$d z;8wBdt~X2ug7vV^u}1=j-r<-MGJf1`DAkB$a$EvJ!&Oa!>Ef zqNSKll^b-_llUz}W^?D_ryYeflpAHzn@Ybcaai=U&dVnGTEt-rHU2Sy$<^UR_L1q5 zx2EOO;E|n=Y~pVfh*AUXAv3M$koql;!iS+{dc)E4PH&C726b=E$YJM1tNVF&S$+R$ z#uj2Z9|u4oe^!qwczMzElP}tll(Qy{DB};&OOo)akc&?ej_p5SA$80Pa4k>d;HKIf zgH+jhtz=m<3v~n+5rcP33_V85Z^F2oUm2(0eV9;H`S$es2f9w*sDM(FhP0rq#h6Kh zx$^qA;vmrYMfH~m|6zMYm*A%dEXEgv6zuTigCZg@N>5Z7y=}?%3 zJQ865)G&4d%*S_#*}CKrFwY`=tSs7|^ar6To>=Ys*Y&!>H(FsWJNtH1>Vz?l{q0rl z#X#&i=ZUP|8m4axbsS2Ms+lo~rUccgsR~LK#^BLDsbb|3IVdgbE$(wd!$ z<#Pf+kNJOTH96vC(44o2h zT;Yg^{|zboTnXN(b}T-xHDjCRnWB<4`}gVCVsO5Q0-blmdn*~O-^+c1xSVSDx>xx1 zx?Od_yuU;Ok9*s*>WTd^^l@&oWC&ED$qOOkp^Zi;O+?J&0KKU& z!k65d!tiD+KAS+(b=-Q&fP1pIql#vMgy(-})7>020W4;$S=~i!JKJ$}QYZ2ReafBmM$Y6NJ9&BQV}jE5 zi0K?Tv&?q7Ll>SiRMZh6x*)~lz0ny0`+Cw1fp#le2Rq=FzYgUXO+MZkG>!T?I!PZ9 zh!Ng_y%5!)ajMu;9-}%%LuoMVEZ!p+vPZ#bgrTmBph++~82VVj9a$8@J#j<#Z zG%$?~yF(YD{Z5(I*8<7wSw;|JcD8UBS+7<1aoB=mbwXxu0teqCdW$bNN+W$jZ0TG( zQRaXn2e^Mj`Gn{DNc~R;Zm1e43=OR(KZNV`OSD+N6{;9PL;$Yp_bwHVTkY2U=a-U=NSt;gu;3EU|W5=sJtf6wE~D_4d> zoMa#}o(~5%NGdIGDeWT2XTY9}dCASUVqF)(I@4*HXrk%(2kp}7%)@?@Fg!vKakeONrIOu7J!y1F z%Vfdd&7z_$zusLIn1QIU$F;jYOgO>&Fq^-OEzMXuI;C!+y=V-vVbX-$tZO`}ji$T? zwT0~fQ}3#7esrHo;gBul@X~i9alle7jp#UpcZ0$xjHfl&hF?WZH28$ zK6Q7$0Z40YcxBfp>1^ZhZRHKF#GktX2!50K=*{)$-zFA z1v*x{v&(E3D z4?tk^A?sRHrM=tuzH>cE!lj4))mGOgL$utK-RkVUCImdR& z^mIzE+jI1E{?s+>Iq&+H`CTtwUHsZUQ_$%(kP(z*U%HHe-OcX%xdanWu`DQjb-r}1 zpu!2QbT|~heSZ~X$eKWu;(D+4c0bbJhPd)j=xS1}M5N-cozoTbS24M{h-?2dE(jetdpehk5T& z);}@!DZ|)^(uBaff)+iusRwuF2DT`FKJ%YDido~q(^kE;=S}J%6g;hr6@q@;PUGiF zy4o!K`>>a)HvhE_m9>fgi@~On77qu}rPz-^i?Yum^+=OzOt=hm$863=vazp>0dMUy ztm(*lvW3m|?Yub+t{RlVKTOPnG)97kmmnRja;b<@Fj&#%ZX{6Zkc0RlvsbD5p(i@w z53}&}wFZ_Ytfk0rwy5tpBg7=+VYQWa&ARvH30f+0J47!_#d7TRR$MstJt7 zsDP(WT>+(H%dGJU{`)RQvv!^VFvk3C$Tb$TKbP$nl0YG1qGTAtD&;#4wZHH=7?G}8 zuA`#Rr3I}Rxr3$9OTXi{tyr=WhSjf%RF3+;D?6rGW^92`M5DWQnM}Z1#%3{Y{vO?f zsr6IEQk(16=7#K4?{C8iD=J2K{RZ={512P7mC)`N3w;66E(p3r|ql#L_5C-iu%dO|_I; z)mnggnJu?RgY15NMXVAaoL5A7*2@_@sIZ*l3kaxrk1wRQ|1doEuS^F~4^WyBXb1x` zI|9;0WFvrwgWTi6Q$X6FAY6)nCP0AT;67l&!QsRGH=PneyhcHE6#qnxzexDKNZ|dq z033)6Qa=i!rT7oj77p%ZA^$HTq=1}^g2X^6tPqYd&>M>X+zkG&B(EsMbqpkiaHt9o zsZn{+Zg>pD0{W!}IUfT_BLvsOLnP|pi6QFaFSQvXkbrTJH0b*ir0XB$4=Kp=IEazr z-)DsvL;k;}8;TH_36MBwUL6uP0g?nAXh6PCfaE}eS`gI97hX~O<(r5XK1K(UH2Grl zzxSjJIJg%K@qdw?0R%b;5=AI-06{G5K}3+KQ4lVKX9`3PvUi4POucmehmYOD!@-px z{I443ZV>R)iyB~0$mG<^unc)aFrXkw#3nxw9K_2PL;nc-v5gwgw#Mme4uZE QkZmZ45xHpeWftK64{~;A=>Px# delta 39634 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 diff --git a/backend/database/myp.db b/backend/database/myp.db index 8cc2224d14d289bde8d2faaa6bb53b40c3784173..e523a12b99d5b734d031343d39030843f2243d95 100644 GIT binary patch delta 153 zcmZozz|pXPV}djz>qHr6R#pbRWX6pt?E0qWg$1b*`j&~IMj_tG2FW=d-p<~YdagO% zk&z}vg<%HedSRBOKAx41`4Mh`nZ}7lDd9$ylNaa*@tIp08Cn^b=vkPW8X6gHGB}_O z5i+sRGqKU4v8JQSwGB}_O y6f!meB0VD`3o~=W&F7*ynS{Y&h9EIZ149dAqecVf$rqzloB89m^T#oM+z0@F+bq-o diff --git a/backend/database/myp.db-shm b/backend/database/myp.db-shm index 6a79d40068ea748c4a91cf796809b0a3a2a74598..61ae6a0fe9be159a5649fe3cd673c0468a9a759f 100644 GIT binary patch delta 87 zcmZo@U}|V!;+1%$%K!t66DNvEF+L7kDQ>|o!7lNtMG0M23`G{Ek6~h_{Kf@wP8%0U G*#ZDLxD&Jh delta 165 zcmZo@U}|V!s+V}A%K!q*K+MR%AONBjf!Hs3zg)^l4)yUWfR zlJxuosU&nvQt&XmY%xBMLexG>7O!^-lu8)rjAAOYl!c$u&!VgRkQNf<-Rg&M|S#HR+ zrYtsVm)B)6$tij*^Max8ULbQy&rgo!giE$L!MyW=WPO77KYp z7uV`d`KsIy>zhrnetUiWf>_8~Y6ppTYK`U9TBBGgmrD#6byUNQ*;2Vg=D0}3wk0;@ z&zs~?@4BjI*p|{UtneLade=iZ${e>1+Vys9nD0a@SA9vy8eQDGk8Q(53ImN)ty0-3$5FkV#8UoR zn(Y{@kdA9>2$SVodr9GAdP;oN0oFs+R4kj|6$0#{dq|@Qr;zVDdOsBXWqPIZ*XgB4 zDu66>o_dh$4*6Q-uJ2Nenj9qu5vV}LE%7EV8pF`%Tm z1Q$w+Lk%ONrdlMJyPiUgEFp%4kPiM3IB-%xGAA&jo>`3W!Hav`BBUpMg3x@61%qfF z&k1MGW}n)A&e_8r>L{k&#yI|3VB}6PhM0n9bRf^D9Vd#>3>YSQh~nfRrOW}QVznKc z3*?sc2wU%(%m6BS3V&iFhNGyu4gn`l4M6~>gW)xn*AtH!Z2Lr;H^KV!S}rG?KAnC3 zh{8$~PCj`CNI%vbF1t!;0Ca>k*KkN=@7a9{1qS#yPKH^9VfzM}N-fChNw%uybs^Uf z4$*X^WP*7AL_ENy{cIH$5mgYAECEFwat(L^h@y)t>zg%NEeuYe_9Kf4J!Fw&ZIP@Y z7=hnT)8sX8n}x!y4~|l+qd7qkvipILLY;#N#`rj6PLwpvBVoGfXIEcmK}kns@FWe9v?l2h#c@+tryZ zGOP9XG4M*`Az~6p|5}-hd`1ZnX60a)_B0PhPZ zyf46%)sRG?ag~bkye}{)grvi9Tx~EhCp;VV4f?z0=zGf`u|Se7jU7! z)YBI@n(PaF_Cl*~{c@*qf;0>!W-{=PUmO9B07rl$z!BgGa0EC490861M}Q;15#R{K z2t2u#J(c-HcrtQc$k%E$pP}mTL+wi)qT;iy=xrC$-L1q;oSf8~5+c zv@6Ekt@~SZ)#fJNU01t17w_EIaCUbW+|KrN+u2&Y*}P&em#>#wcg>bPT_fun*n?k# z+b&&ADofR=a&<~t6e|l$v(=>;X?k{kaej8*=gdu&XT@@PsVXg%7pE)LYISig#hF`@ MW~a+D)yn+Bzf)voSO5S3 diff --git a/backend/logs/analytics/analytics.log b/backend/logs/analytics/analytics.log index 19e68958..7afe42b3 100644 --- a/backend/logs/analytics/analytics.log +++ b/backend/logs/analytics/analytics.log @@ -145,3 +145,4 @@ 2025-06-04 00:50:42 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-04 00:56:10 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-04 00:56:22 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert +2025-06-04 07:21:03 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index 803c4e08..2387f7e4 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -3846,3 +3846,25 @@ WHERE jobs.status = ?) AS anon_1] 2025-06-04 01:00:01 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True 2025-06-04 01:00:31 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_error_recovery_status: User authenticated: True, User ID: 1, Is Admin: True 2025-06-04 01:00:31 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-04 07:21:03 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: /mnt/database/myp.db +2025-06-04 07:21:04 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 📋 Standard-Konfiguration verwendet +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Error-Recovery-Monitoring gestartet +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ System-Control-Manager initialisiert +2025-06-04 07:21:04 - [app] app - [WARNING] WARNING - ⚠️ Kiosk-Service nicht gefunden - Kiosk-Funktionen eventuell eingeschränkt +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen... +2025-06-04 07:21:04 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden +2025-06-04 07:21:04 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 📋 Standard-Konfiguration aktiv (keine Optimierungen) +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung... +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Printer Queue Manager erfolgreich gestartet +2025-06-04 07:21:04 - [app] app - [INFO] INFO - Job-Scheduler gestartet +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 🚀 Starte Production Server (Waitress) auf 127.0.0.1:5000 +2025-06-04 07:21:04 - [app] app - [INFO] INFO - 💡 Kiosk-Browser sollte http://127.0.0.1:5000 verwenden +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ IPv6-Probleme behoben durch IPv4-only Binding +2025-06-04 07:21:04 - [app] app - [INFO] INFO - ✅ Performance optimiert für Kiosk-Betrieb diff --git a/backend/logs/backup/backup.log b/backend/logs/backup/backup.log index ec2ea71c..b1525005 100644 --- a/backend/logs/backup/backup.log +++ b/backend/logs/backup/backup.log @@ -150,3 +150,4 @@ 2025-06-04 00:50:42 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-04 00:56:09 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-04 00:56:22 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) +2025-06-04 07:21:03 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) diff --git a/backend/logs/dashboard/dashboard.log b/backend/logs/dashboard/dashboard.log index 05c83a21..cdf2452c 100644 --- a/backend/logs/dashboard/dashboard.log +++ b/backend/logs/dashboard/dashboard.log @@ -614,3 +614,7 @@ 2025-06-04 00:56:23 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet 2025-06-04 00:56:23 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback) 2025-06-04 00:56:23 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading) +2025-06-04 07:21:04 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-04 07:21:04 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-04 07:21:04 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit eventlet initialisiert +2025-06-04 07:21:04 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: eventlet) diff --git a/backend/logs/database/database.log b/backend/logs/database/database.log index c30f7b95..e8bbc43e 100644 --- a/backend/logs/database/database.log +++ b/backend/logs/database/database.log @@ -146,3 +146,4 @@ 2025-06-04 00:50:42 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-04 00:56:09 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-04 00:56:22 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet +2025-06-04 07:21:03 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet diff --git a/backend/logs/database_cleanup/database_cleanup.log b/backend/logs/database_cleanup/database_cleanup.log index 9e00e626..5590667f 100644 --- a/backend/logs/database_cleanup/database_cleanup.log +++ b/backend/logs/database_cleanup/database_cleanup.log @@ -94,3 +94,6 @@ 2025-06-04 00:56:23 - [database_cleanup] database_cleanup - [INFO] INFO - 🧹 Starte umfassendes Datenbank-Cleanup... 2025-06-04 00:56:23 - [database_cleanup] database_cleanup - [INFO] INFO - 📝 Schritt 1: Schließe alle Datenbankverbindungen... 2025-06-04 00:56:23 - [database_cleanup] database_cleanup - [INFO] INFO - 🔄 Schließe alle aktiven Datenbankverbindungen... +2025-06-04 07:21:04 - [database_cleanup] database_cleanup - [INFO] INFO - 🧹 Starte umfassendes Datenbank-Cleanup... +2025-06-04 07:21:04 - [database_cleanup] database_cleanup - [INFO] INFO - 📝 Schritt 1: Schließe alle Datenbankverbindungen... +2025-06-04 07:21:04 - [database_cleanup] database_cleanup - [INFO] INFO - 🔄 Schließe alle aktiven Datenbankverbindungen... diff --git a/backend/logs/debug.log b/backend/logs/debug.log index 605b89a2..180f6780 100644 --- a/backend/logs/debug.log +++ b/backend/logs/debug.log @@ -1,32 +1,32 @@ ================================================================= -MYP Installation DEBUG Log - 2025-06-04 07:18:35 +MYP Installation DEBUG Log - 2025-06-04 07:22:23 ================================================================= -[2025-06-04 07:18:35] DEBUG von setup.sh:464 +[2025-06-04 07:22:23] DEBUG von setup.sh:464 Debian erkannt über /etc/debian_version: 12.11 --- -[2025-06-04 07:18:35] DEBUG von setup.sh:532 +[2025-06-04 07:22:23] DEBUG von setup.sh:532 Kein Raspberry Pi erkannt. Hardware-Info: --- -[2025-06-04 07:18:35] DEBUG von setup.sh:533 +[2025-06-04 07:22:23] DEBUG von setup.sh:533 - Device Tree: nicht verfügbar --- -[2025-06-04 07:18:35] DEBUG von setup.sh:534 +[2025-06-04 07:22:23] DEBUG von setup.sh:534 - CPU Hardware: nicht verfügbar --- -[2025-06-04 07:18:35] DEBUG von setup.sh:574 +[2025-06-04 07:22:23] DEBUG von setup.sh:574 Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux --- -[2025-06-04 07:18:35] DEBUG von setup.sh:630 +[2025-06-04 07:22:23] DEBUG von setup.sh:630 DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup. --- -[2025-06-04 07:18:35] DEBUG von setup.sh:731 +[2025-06-04 07:22:23] DEBUG von setup.sh:731 Externe IP ermittelt über ifconfig.me: 163.116.178.114 --- diff --git a/backend/logs/email_notification/email_notification.log b/backend/logs/email_notification/email_notification.log index d7387b94..806da9e8 100644 --- a/backend/logs/email_notification/email_notification.log +++ b/backend/logs/email_notification/email_notification.log @@ -142,3 +142,4 @@ 2025-06-04 00:50:43 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-04 00:56:10 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-04 00:56:23 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) +2025-06-04 07:21:04 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) diff --git a/backend/logs/error_recovery/error_recovery.log b/backend/logs/error_recovery/error_recovery.log index 129f2e0c..bae367d1 100644 --- a/backend/logs/error_recovery/error_recovery.log +++ b/backend/logs/error_recovery/error_recovery.log @@ -107,3 +107,7 @@ 2025-06-04 00:56:23 - [error_recovery] error_recovery - [INFO] INFO - 🔍 Error-Monitoring gestartet 2025-06-04 00:56:23 - [error_recovery] error_recovery - [WARNING] WARNING - 🚨 Fehler erkannt: database_lock - 2025-06-01 00:29:13 - myp.app - ERROR - ❌ Fehler beim Datenbank-Cleanup: (sqlite3.OperationalError) database is locked 2025-06-04 00:56:23 - [error_recovery] error_recovery - [INFO] INFO - 🔧 Führe Recovery-Aktion aus: reset_database +2025-06-04 07:21:04 - [error_recovery] error_recovery - [INFO] INFO - 🛡️ Error-Recovery-Manager initialisiert +2025-06-04 07:21:04 - [error_recovery] error_recovery - [INFO] INFO - 🔍 Error-Monitoring gestartet +2025-06-04 07:21:04 - [error_recovery] error_recovery - [WARNING] WARNING - 🚨 Fehler erkannt: database_lock - 2025-06-01 00:29:13 - myp.app - ERROR - ❌ Fehler beim Datenbank-Cleanup: (sqlite3.OperationalError) database is locked +2025-06-04 07:21:04 - [error_recovery] error_recovery - [INFO] INFO - 🔧 Führe Recovery-Aktion aus: reset_database diff --git a/backend/logs/errors.log b/backend/logs/errors.log index 786dddf3..469254b7 100644 --- a/backend/logs/errors.log +++ b/backend/logs/errors.log @@ -1,4 +1,4 @@ ================================================================= -MYP Installation FEHLER Log - 2025-06-04 07:18:35 +MYP Installation FEHLER Log - 2025-06-04 07:22:23 ================================================================= diff --git a/backend/logs/install.log b/backend/logs/install.log index c5540ebe..f1dbf428 100644 --- a/backend/logs/install.log +++ b/backend/logs/install.log @@ -1,27 +1,27 @@ ================================================================= -MYP Installation Log - 2025-06-04 07:18:35 +MYP Installation Log - 2025-06-04 07:22:23 Script Version: 4.1.0 System: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux Arbeitsverzeichnis: /mnt Log-Verzeichnis: /mnt/logs ================================================================= -[2025-06-04 07:18:35] === MODUS: ROBUSTE ABHÄNGIGKEITEN-INSTALLATION FÜR MANUELLES TESTEN === -[2025-06-04 07:18:35] ✅ Root-Berechtigung bestätigt -[2025-06-04 07:18:35] === SYSTEM-RESSOURCEN PRÜFUNG === +[2025-06-04 07:22:23] === MODUS: VOLLSTÄNDIGE ROBUSTE KIOSK-INSTALLATION MIT REMOTE-ZUGANG === +[2025-06-04 07:22:23] ✅ Root-Berechtigung bestätigt +[2025-06-04 07:22:23] === SYSTEM-RESSOURCEN PRÜFUNG === [FORTSCHRITT] Prüfe RAM... [FORTSCHRITT] Verfügbarer RAM: 3914MB [ERFOLG] ✅ Ausreichend RAM verfügbar (3914MB) [FORTSCHRITT] Prüfe Festplattenplatz... -[FORTSCHRITT] Verfügbarer Festplattenplatz: 12,0GB (12324MB) +[FORTSCHRITT] Verfügbarer Festplattenplatz: 12,0GB (12322MB) [ERFOLG] ✅ Ausreichend Festplattenplatz verfügbar (12,0GB) [FORTSCHRITT] Prüfe CPU... [FORTSCHRITT] CPU: 4 Kern(e) - 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz [ERFOLG] ✅ CPU-Information erfolgreich ermittelt -[2025-06-04 07:18:35] ✅ System-Ressourcen-Prüfung abgeschlossen +[2025-06-04 07:22:23] ✅ System-Ressourcen-Prüfung abgeschlossen [FORTSCHRITT] Prüfe Debian/Raspbian-System... [DEBUG] Debian erkannt über /etc/debian_version: 12.11 -[2025-06-04 07:18:35] ✅ Debian/Raspbian-basiertes System erkannt (Version: 12.11) +[2025-06-04 07:22:23] ✅ Debian/Raspbian-basiertes System erkannt (Version: 12.11) [FORTSCHRITT] Prüfe Raspberry Pi Hardware... [INFO] 💻 Standard-PC/Server System (kein Raspberry Pi) [DEBUG] Kein Raspberry Pi erkannt. Hardware-Info: @@ -33,7 +33,7 @@ Log-Verzeichnis: /mnt/logs [FORTSCHRITT] Prüfe Kernel-Version... [INFO] 🐧 Kernel-Version: 6.1.0-37-amd64 [DEBUG] Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux -[2025-06-04 07:18:35] ✅ System-Analyse abgeschlossen +[2025-06-04 07:22:23] ✅ System-Analyse abgeschlossen [FORTSCHRITT] Prüfe Internetverbindung (erweiterte Methoden)... [FORTSCHRITT] Teste DNS-Auflösung... [DEBUG] DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup.  @@ -42,11 +42,107 @@ Log-Verzeichnis: /mnt/logs [FORTSCHRITT] Ermittle externe IP-Adresse... [INFO] 🌐 Externe IP: 163.116.178.114 [DEBUG] Externe IP ermittelt über ifconfig.me: 163.116.178.114 -[2025-06-04 07:18:35] === KONFIGURIERE HOSTNAME === -[2025-06-04 07:18:35] ✅ Hostname bereits korrekt: 'raspberrypi' -[2025-06-04 07:18:36] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1 -[2025-06-04 07:18:36] === ANTI-HÄNGE SYSTEM-UPDATE MIT TIMEOUTS === -[FORTSCHRITT] Konfiguriere APT für bessere Zuverlässigkeit (timeout-gesichert)... -[FORTSCHRITT] Validiere APT-Repositories (timeout-gesichert)... -[FORTSCHRITT] Bereinige APT-Lock-Dateien... -[FORTSCHRITT] Aktualisiere Paketlisten (max 60s timeout)... +[2025-06-04 07:22:23] === KONFIGURIERE HOSTNAME === +[2025-06-04 07:22:23] ✅ Hostname bereits korrekt: 'raspberrypi' +[2025-06-04 07:22:23] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1 +[INFO] Anwendung bereits deployed - überspringe Basis-Installation +[2025-06-04 07:22:23] === SIMPLE NETZWERK-SICHERHEIT (ANTI-HÄNGE VERSION) === +[INFO] 🚀 Netzwerk-Sicherheit übersprungen für schnellere Installation +[INFO] 📝 Kann später manuell aktiviert werden mit: SKIP_NETWORK_SECURITY=0 +[2025-06-04 07:22:23] === ENTFERNE DESKTOP ENVIRONMENTS FÜR KIOSK-MODUS === +[FORTSCHRITT] Stoppe alle Desktop-Services... +[FORTSCHRITT] Entferne Desktop-Pakete vollständig... +[2025-06-04 07:22:48] ✅ Desktop Environments vollständig entfernt +[2025-06-04 07:22:48] === INSTALLIERE MINIMALE X11-UMGEBUNG FÜR KIOSK === +[FORTSCHRITT] Installiere minimale X11-Pakete... +[FORTSCHRITT] Installiere Browser für Kiosk-Modus... +[2025-06-04 07:23:05] ✅ Chromium erfolgreich installiert +[2025-06-04 07:23:05] ✅ Minimale X11-Umgebung installiert +[2025-06-04 07:23:05] === WEBAPP PERFORMANCE-OPTIMIERUNG FÜR RASPBERRY PI === +[FORTSCHRITT] Konfiguriere Python-Performance-Optimierungen... +[FORTSCHRITT] Optimiere Systemd-Services für bessere Performance... +[2025-06-04 07:23:05] ✅ Service deaktiviert: bluetooth.service +[2025-06-04 07:23:06] ✅ Service deaktiviert: avahi-daemon.service +[2025-06-04 07:23:06] ✅ Service deaktiviert: cups.service +[2025-06-04 07:23:06] ✅ Service deaktiviert: cups-browsed.service +[2025-06-04 07:23:07] ✅ Service deaktiviert: wpa_supplicant.service +[FORTSCHRITT] Konfiguriere tmpfs für bessere I/O Performance... +[FORTSCHRITT] Optimiere systemd Journal für bessere Performance... +[FORTSCHRITT] Installiere automatische Cache-Bereinigung... +[FORTSCHRITT] Konfiguriere System-Limits... +[FORTSCHRITT] Entferne konfliktbehaftete Webserver... +[2025-06-04 07:23:07] ✅ Webapp Performance-Optimierung abgeschlossen: +[2025-06-04 07:23:07] 🚀 Python Bytecode-Optimierung aktiviert +[2025-06-04 07:23:07] 💾 tmpfs für temporäre Dateien konfiguriert +[2025-06-04 07:23:07] 📝 Journal-Logging optimiert +[2025-06-04 07:23:07] 🧹 Automatische Cache-Bereinigung installiert +[2025-06-04 07:23:07] ⚡ Unnötige Services deaktiviert +[2025-06-04 07:23:07] 📊 System-Limits für bessere Performance gesetzt +[2025-06-04 07:23:07] === STATISCHE DATEIEN OPTIMIERUNG === +[FORTSCHRITT] Analysiere und optimiere CSS/JS Dateien... +[FORTSCHRITT] Erstelle optimierte CSS-Kombination... +[FORTSCHRITT] Erstelle optimierten JavaScript-Loader... +[FORTSCHRITT] Erstelle optimierten Service Worker... +[FORTSCHRITT] Komprimiere statische Dateien... +[2025-06-04 07:23:07] ✅ Statische Dateien optimiert: +[2025-06-04 07:23:07] 📦 Kritische CSS-Styles kombiniert +[2025-06-04 07:23:07] ⚡ Asynchroner Asset-Loader erstellt +[2025-06-04 07:23:07] 🗜️ Gzip-Kompression angewendet +[2025-06-04 07:23:07] 🔄 Service Worker für Caching installiert +[2025-06-04 07:23:07] === INSTALLIERE REMOTE-ZUGANG (RDP & SSH) === +[FORTSCHRITT] Installiere und konfiguriere SSH-Server... +[INFO] SSH-Benutzer 'user' existiert bereits +[FORTSCHRITT] Installiere RDP-Server (xrdp) - vereinfachte Installation... +[FORTSCHRITT] Entferne vorherige xrdp-Installationen... +[FORTSCHRITT] Installiere minimale XFCE-Umgebung... +[FORTSCHRITT] Installiere xrdp neu... +[FORTSCHRITT] Erstelle minimale xrdp-Konfiguration... +[FORTSCHRITT] Konfiguriere XFCE-Sessions... +[FORTSCHRITT] Setze Root-Passwort für RDP... +[FORTSCHRITT] Erstelle Log-Verzeichnisse... +[FORTSCHRITT] Starte xrdp-Services... +[ERFOLG] ✅ xrdp-sesman erfolgreich gestartet +[ERFOLG] ✅ xrdp erfolgreich gestartet +[2025-06-04 07:23:37] ✅ Remote-Zugang vollständig konfiguriert: +[2025-06-04 07:23:37] 📡 SSH: user:raspberry (Port 22) +[2025-06-04 07:23:37] 🖥️ RDP: root:744563017196A (Port 3389) +[2025-06-04 07:23:37] 🖥️ RDP: user:raspberry (Port 3389) +[2025-06-04 07:23:37] === KONFIGURIERE FIREWALL (firewalld) === +[FORTSCHRITT] Installiere firewalld... +[FORTSCHRITT] Konfiguriere firewalld-Zonen und -Regeln... +[FORTSCHRITT] Entferne bestehende myp-backend Zone falls vorhanden... +[FORTSCHRITT] Erstelle neue myp-backend Zone... +[FORTSCHRITT] Füge Netzwerk-Quellen hinzu... +[FORTSCHRITT] Füge lokalen Hostname hinzu: raspberrypi +[2025-06-04 07:23:52] ✅ Lokaler Hostname raspberrypi hinzugefügt: 127.0.1.1 +[FORTSCHRITT] Füge Frontend-Server hinzu: m040tbaraspi001 +[2025-06-04 07:23:52] ✅ Frontend-Server m040tbaraspi001 hinzugefügt: 53.37.211.254 +[FORTSCHRITT] Konfiguriere Ports und Services... +[FORTSCHRITT] Deaktiviere IPv6 in firewalld... +[FORTSCHRITT] Setze Default-Zone... +[FORTSCHRITT] Lade Firewall-Konfiguration neu... +[FORTSCHRITT] Firewall-Konfiguration: +[2025-06-04 07:23:57] ✅ Firewall-Konfiguration erfolgreich angezeigt +[FORTSCHRITT] Validiere Firewall-Konfiguration... +[2025-06-04 07:23:58] ✅ Firewall konfiguriert und validiert: +[2025-06-04 07:23:58] 🔒 Zone: myp-backend (als Default gesetzt) +[2025-06-04 07:23:58] 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4) +[2025-06-04 07:23:58] 🏠 Localhost: 127.0.0.1 +[2025-06-04 07:23:58] 🖥️ Lokaler Host: raspberrypi +[2025-06-04 07:23:58] 📡 Frontend-Server: m040tbaraspi001 +[2025-06-04 07:23:58] 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP) +[2025-06-04 07:23:58] 🚫 IPv6 vollständig blockiert +[2025-06-04 07:23:58] === KIOSK-BENUTZER SETUP === +[FORTSCHRITT] Erstelle Kiosk-Benutzer: kiosk +[2025-06-04 07:23:58] ✅ Kiosk-Benutzer konfiguriert: kiosk +[2025-06-04 07:23:58] === KONFIGURIERE AUTOLOGIN FÜR KIOSK-BENUTZER === +[FORTSCHRITT] Konfiguriere automatischen Login auf tty1... +[2025-06-04 07:23:59] ✅ Autologin für kiosk konfiguriert +[2025-06-04 07:23:59] === KONFIGURIERE AUTOMATISCHEN KIOSK-START === +[FORTSCHRITT] Konfiguriere automatischen Kiosk-Start für kiosk... +[2025-06-04 07:23:59] ✅ Automatischer Kiosk-Start konfiguriert +[INFO] Der Kiosk-Modus startet automatisch beim Login des kiosk +[2025-06-04 07:23:59] === ROBUSTE SYSTEMD-SERVICES INSTALLATION === +[FORTSCHRITT] Validiere und kopiere Service-Dateien... +[FORTSCHRITT] Kopiere essenziellen Service: myp-https.service +[ERFOLG] ✅ myp-https.service erfolgreich installiert diff --git a/backend/logs/maintenance/maintenance.log b/backend/logs/maintenance/maintenance.log index 50e4c50d..1690d19f 100644 --- a/backend/logs/maintenance/maintenance.log +++ b/backend/logs/maintenance/maintenance.log @@ -290,3 +290,5 @@ 2025-06-04 00:56:10 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-04 00:56:23 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-04 00:56:23 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-04 07:21:04 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-04 07:21:04 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet diff --git a/backend/logs/multi_location/multi_location.log b/backend/logs/multi_location/multi_location.log index aad5d1c4..d0132feb 100644 --- a/backend/logs/multi_location/multi_location.log +++ b/backend/logs/multi_location/multi_location.log @@ -288,3 +288,5 @@ 2025-06-04 00:56:10 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-04 00:56:23 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-04 00:56:23 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-04 07:21:04 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-04 07:21:04 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index 9bf5d2cb..6f44c5a1 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -144,3 +144,4 @@ 2025-06-04 00:50:43 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-04 00:56:10 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-04 00:56:23 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-04 07:21:04 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index 950f6f53..f23f160b 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -3921,3 +3921,16 @@ 2025-06-04 01:00:45 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden 2025-06-04 01:00:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... 2025-06-04 01:00:45 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-04 07:21:03 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-04 07:21:03 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-04 07:21:04 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-04 07:21:04 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden +2025-06-04 07:21:05 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-04 07:21:05 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-04 07:21:05 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-04 07:21:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-04 07:21:21 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-04 07:21:29 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-04 07:21:35 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 +2025-06-04 07:21:41 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 +2025-06-04 07:21:47 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 42.2s diff --git a/backend/logs/queue_manager/queue_manager.log b/backend/logs/queue_manager/queue_manager.log index 2dc2a2af..6bb4f8fe 100644 --- a/backend/logs/queue_manager/queue_manager.log +++ b/backend/logs/queue_manager/queue_manager.log @@ -227,3 +227,17 @@ (Background on this error at: https://sqlalche.me/e/20/f405) 2025-06-04 00:36:05 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop 2025-06-04 00:36:05 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Initialisiere neuen Queue-Manager... +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Zentrale Shutdown-Verwaltung erkannt - deaktiviere lokale Signal-Handler +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Starte Printer Queue Manager... +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Queue-Überwachung gestartet (Intervall: 120 Sekunden) +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - ✅ Printer Queue Manager gestartet +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet +2025-06-04 07:21:04 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-04 07:21:11 - [queue_manager] queue_manager - [WARNING] WARNING - ⏱️ Ping-Timeout für Drucker 192.168.0.104 nach 5 Sekunden +2025-06-04 07:21:32 - [queue_manager] queue_manager - [WARNING] WARNING - ⏱️ Ping-Timeout für Drucker 192.168.0.103 nach 5 Sekunden +2025-06-04 07:21:56 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Stoppe Queue-Manager... +2025-06-04 07:21:56 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread... +2025-06-04 07:21:56 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop +2025-06-04 07:21:56 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet +2025-06-04 07:21:56 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index baee6f8c..2d81bb95 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -40197,3 +40197,70 @@ 2025-06-04 01:01:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) 2025-06-04 01:01:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten 2025-06-04 01:01:19 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 07:21:03 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-04 07:21:04 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-04 07:21:04 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-04 07:21:04 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 07:21:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-04 07:21:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 07:21:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-04 07:21:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 07:21:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-04 07:21:11 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 07:21:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-04 07:21:13 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 07:21:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-04 07:21:15 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 07:21:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-04 07:21:17 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 07:21:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-04 07:21:19 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 07:21:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-04 07:21:21 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 07:21:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 07:21:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-04 07:21:25 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 07:21:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 07:21:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten +2025-06-04 07:21:27 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 07:21:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 07:21:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten +2025-06-04 07:21:29 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 07:21:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 07:21:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten +2025-06-04 07:21:31 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 07:21:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten +2025-06-04 07:21:33 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 07:21:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten +2025-06-04 07:21:35 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 07:21:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten +2025-06-04 07:21:37 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 07:21:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten +2025-06-04 07:21:41 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 07:21:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-04 07:21:43 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 07:21:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-04 07:21:46 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 07:21:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-04 07:21:48 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 07:21:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-04 07:21:52 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 07:21:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 07:21:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-04 07:21:54 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test diff --git a/backend/logs/security/security.log b/backend/logs/security/security.log index eb41952c..07e85d53 100644 --- a/backend/logs/security/security.log +++ b/backend/logs/security/security.log @@ -144,3 +144,4 @@ 2025-06-04 00:50:43 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-04 00:56:10 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-04 00:56:23 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-04 07:21:04 - [security] security - [INFO] INFO - 🔒 Security System initialisiert diff --git a/backend/logs/shutdown_manager/shutdown_manager.log b/backend/logs/shutdown_manager/shutdown_manager.log index 3e75fe1c..b6711f1d 100644 --- a/backend/logs/shutdown_manager/shutdown_manager.log +++ b/backend/logs/shutdown_manager/shutdown_manager.log @@ -245,3 +245,4 @@ 2025-06-04 00:50:43 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-04 00:56:10 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-04 00:56:23 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-04 07:21:04 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index 042c32aa..48d7bc65 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -1294,3 +1294,10 @@ 2025-06-04 00:56:23 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-04 00:56:23 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-04 00:56:23 - [startup] startup - [INFO] INFO - ================================================== +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - ================================================== +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0] +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: posix (linux) +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /mnt +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-04T07:21:04.322209 +2025-06-04 07:21:04 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/system_control/system_control.log b/backend/logs/system_control/system_control.log index 56612f4f..dde4e7e5 100644 --- a/backend/logs/system_control/system_control.log +++ b/backend/logs/system_control/system_control.log @@ -25,3 +25,4 @@ 2025-06-04 00:50:43 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-04 00:56:11 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-04 00:56:23 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert +2025-06-04 07:21:04 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert diff --git a/backend/logs/warnings.log b/backend/logs/warnings.log index 8e1394e0..541f0f41 100644 --- a/backend/logs/warnings.log +++ b/backend/logs/warnings.log @@ -1,4 +1,4 @@ ================================================================= -MYP Installation WARNUNGEN Log - 2025-06-04 07:18:35 +MYP Installation WARNUNGEN Log - 2025-06-04 07:22:23 =================================================================