From 6978640e5c8dd131882ce543da89724b2b03f810 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Wed, 3 May 2023 18:05:14 +0200
Subject: [PATCH] wip - calendar

---
 .gitignore                                    |   1 +
 lectures/templates/lectures/view_groups.html  |   2 +-
 .../lectures/view_lecture_index.html          |   4 ++-
 lectures/views.py                             |   5 +++-
 .../364D1F51-B67A-4FA5-83E6-1F32D62B6A78.gif  | Bin 19263 -> 0 bytes
 package-lock.json                             |  18 +++++++++++++
 package.json                                  |   1 +
 shared/static/shared/style.css                |  24 +++++++++++++++---
 shared/templates/shared/includes/base.html    |   2 +-
 9 files changed, 49 insertions(+), 8 deletions(-)
 delete mode 100644 media/364D1F51-B67A-4FA5-83E6-1F32D62B6A78.gif

diff --git a/.gitignore b/.gitignore
index 33687b8..e06f8db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ webpack-stats.json
 staticfiles
 node_modules
 shared/static/shared/*.{js,css,txt}
+media/*
diff --git a/lectures/templates/lectures/view_groups.html b/lectures/templates/lectures/view_groups.html
index f8daac4..c6f8da3 100644
--- a/lectures/templates/lectures/view_groups.html
+++ b/lectures/templates/lectures/view_groups.html
@@ -11,7 +11,7 @@
     <ul class="grid grid-cols-2 gap-3">
         {% for group in lecture_groups %}
             <li>
-                <a href="{% url "lectures:view_lectures" group.id %}" class="hover:no-underline">
+                <a href="{% url "lectures:view_lecture_index" group.id %}" class="hover:no-underline">
                     <div class="card elevation-6">
                         <div class="card__body hover:bg-gray-100 duration-100">
                             <h2 class="head-alt-sm">{{ group.name }}</h2>
diff --git a/lectures/templates/lectures/view_lecture_index.html b/lectures/templates/lectures/view_lecture_index.html
index cc1f928..113837f 100644
--- a/lectures/templates/lectures/view_lecture_index.html
+++ b/lectures/templates/lectures/view_lecture_index.html
@@ -60,7 +60,9 @@
                     </ul>
                 </template>
                 <template v-if="isCurrentView('calendar')">
-                    b
+                    <div class="__js-root">
+                        <ui-person-calendar events='[]'></ui-person-calendar>
+                    </div>
                 </template>
                 <template v-if="isCurrentView('recordings')">
                     c
diff --git a/lectures/views.py b/lectures/views.py
index 8f1e8b6..2ae4f25 100644
--- a/lectures/views.py
+++ b/lectures/views.py
@@ -16,7 +16,10 @@ def get_base_context(request) -> dict:
 def view_avilable_groups(request):
     lecture_groups = (
         get_objects_for_user(request.user, "lectures.view_lecturegroup")
-        .filter(user_groups__in=request.user.groups.all())
+        .filter(
+            models.Q(user_groups__in=request.user.groups.all())
+            | models.Q(user_groups=None)
+        )
         .distinct()
         .all()
     )
diff --git a/media/364D1F51-B67A-4FA5-83E6-1F32D62B6A78.gif b/media/364D1F51-B67A-4FA5-83E6-1F32D62B6A78.gif
deleted file mode 100644
index 676aff60c51e1b4301828c99f241174cf3b7ab71..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19263
zcmZ?wbhEHb3}U>@@SOn!xH&n+goI7BbW~*Jf+P$h)T}&Ata3E0)1*zJ%{{^mozk^k
z(#^ff&Al>hf-0;-%5_{L+`Tj1!^+(wvqGYay+f;flFB2}^1_oVQ*vsui>uR1D)WkS
zlVZJ`?Apw|+igN8So%+}Pi%LKoaP?g85FbBJEp@sdAd(ZM|j5c@XVRf#oaN5%fhpk
z#}sb}%bAvv)1F>BBfVlqNp)9d{)+U<ZRu6ZN@_ObmUkw^9Z#>kom+Xku;y5P^~0RX
z$3-=VVhdWd?3Ogu&MI%2o!hh`yLo#~^NNc09pxQ6YbLL*oph|c>qc4oiJHkbYNwpZ
zZGKwWIj5y#c}w^9mhM#@Q+9Mr-!WzOnkiFu%~-OtZ_%D5tF|qkbE195oz~fRy60SL
zn{j;VtUHtEUYk1icx&&Yp1IH3Xa4P*`mb;1*PiK*CeQmjaoV3rv%gN7{l2;9WY3~I
zy^F4PFFrnF`JE|?@6K9$ckbG&(^uS`yYcGmO{eE>depn<RnL+~Qx-p-z4XzXHLvHa
zc`<dx_vy<X&fD~A&gO4(H-GJ0d}8V9I}6v{Sib7iiY<2+Z@RN~^R<;bPH)+HXY-aT
zTld`AvggXKy?1x+yRm)iwasf@EnoI@)zTL$mOWXr`t{N^PgkvexoY*(WlNuLUh{bI
zmN$zxKU%%z&Falh*6e<<V)y4ITmCHB`e*5`FROR|S+nQcs%?)p?|HFp$Cu4}{%+p;
zZRhUKOV(XjGUxA^z2A=Pd3Sv8?ZbQSY&~>$*P&}W58qgS=+D}NkGCFvz2)$u-G`s-
zKK*9T=~p|B|J`!v%kCq8_Z<1W_w>KLr@n4I@@D&)+ec2^Id$pTv6FufANzau@Rvhp
z{~bN`_tfbxCyxESboB4lQ-5!t{dVQli<6hX9J&1a=;gm>uKhoI<J-v_uddzvbLH~i
zyO;i4yz}SI?Jw7FzP^0=-{Y%)pWgcW>h`baH-105`0wn)Z)YFAx&7$hrN@8nJpOk3
z>8I;2zC3>V=gE`5Z=QU8`s&ZqSKnU0`u*nh*H_Q}e0=uj<C||E-~4_1>DQ~z|2}>C
z_vP2$pFiI{c?wGU3=E3@x&2&2f}I@$T#fV$m>C%u7!-f9Fp4nzV^I93;9QiNSdyBe
zP@Y+mp^#dYo|&eXoS&=U?&+qGo0y$i#GnH*1(cN-IQ}#I<&^Q*u;5@bhp<-6i46-6
zw+kqH&GFc{=xDcuan_v^8y6q%S8(o<@!YiJ<YbNDRWT<wEj>NmAo<iB&&|uu&bBCi
zb?4;f<>%)+G;_&%ZCP<~vBzYs*i&0pdNTMe_L}=kpdoa1$mXo6Ra;kIUz>3F-xsfK
zZ$dX_T;61IT8x2_Gk4*tx!&f<cQ!HJ6Y>mMJG+gseB(7)pBV`Wn_28Kb_A`?-+p{T
zrSC+C2L%sLNAo|f)qc#Se|&;-_q#A%LEcld3|HH&x|w~CSz?LAC(~Wq-d?yWA?P@_
zYU}%1Yfp1o1T=a~JGOnYHh*pJbWt957MB0Me=|R<V{8jwF!AZ<PwyYNPyeqLl-Tg)
z+SSYPd-`k**_4X*w9oh7zfIrSM2&~TAa?KnrZ<(U2N;A-1h^`Fy1M*9)3&?Q@7G=b
zyF98P{OQ+&)gK#=J!q3rE1xg&bnf+OEv11R2eNO+9^}ZC-S#4>VxK{fD{JaRj%l4?
z3nLCUa_)Qaxc{_dP-M87TWfM3i$HpU(!LCiCzAtig|XJBi%MRZn3n3kfGzlp*wg6=
zYUZjFl{bEso|eJ2UA5*!>&s`e7o|EbO;Fl+J!DqJv8m#Xau*U<oBR%GYRs9?p%Ff}
z^4yf?i*i^e$TG6<d~jryx?tcc*1)&w<+4Sg#SAk$!ZPF*FPT;~cX7X4)d6;SkAQ=#
zB@+HGXyh@y;J_jn98%~iR%F1$sqb5)^=8A?lMGoN>mnVc^gAOQTi8Tv67J1e7FIoD
zG1H1ytJtNlD6opf1U%x<J$dF6k8)T@v2Vu5BhGJjf4DTAV{2-eYJ<$_Q07jV&<hQX
zEbIab4U4a_b>wbiUZcgheQT3NYoUva60f;Pv9Pbj<CHlYEgrR8-e__uXECeF;<JnW
z_Gm1(xn(&&tTQK^MP*Z>>0XCPCq#oUC@`}LYX}%DVdC+58@poJs#S;NGA_IoxL>r9
zRdve+CO(V%6=w>MKWvcU)%SK_;#3ZAQ8qg&o}FWM{9%X<x2WGL<Ni|x%WaNsl&^GU
zP>y#>ay7Z^@!$CDm6I0=SXEnu-<^2)c#^fLg+jQl*|9Wty`4|OyVq`24q36tTl8d#
z??;n6K6ZS!?)d1mpINl?bJ?9W+^<hhD7nUKd@}x2A;;1F?#Vnt7hRZ*PVDSf{`KLA
ze_Z7)F=ydp((&<uRwvGT7~8zOV>5YO#;YBde|?)J^?K8ra6yOP)4k6q`M!G`Bk1;i
z|MYXc$B!QO|8w<<`hOmw3Wp}<#|o#7&i;{IETQ~KVOB*&vdQa5^O)+7a69kSsd?NT
zWIEwP&-c#WWQzip-)e2vCr-X^p14^4+6lJaR2?SH?hQ?fTb_0O_s!3_GvnA-h2%|n
zDg})ee+1cH924CAP}gVIjpz^m_X#$q=WJ*`#Jo_*T+Qi;C$p65k|r6E#^!W~LUFw-
zH>}TzIdla+5?FZf_{qE(hmDF>h<#z2ANuZ_n%jv)Y4Il!MoAZ}?-yRk@;;L+tohAF
zBa4Z1(Fp|+XGPo1xf8ojOjgWzw9%?`&Y7MGAs6`eUw5AI_kwR!1dF+gMyKSDbA4hh
z@p4~1Y$rGtN_rk>7CjVjD4^xsg!U^D$M+a+bk<Qa`Fx<=u4Lt2k6)jx_jn|`*J!Nx
z6!|u*Z-Jw1WBb0qNkutP+7A_{G_b4aI7_aZ5@YLh!?hshU|YYZyNyg|fBdXq%X{5-
z-8wjzbJ{(gAydpExI~aQ!{Bq%xtg?Fi+29+`K`&sx%<E}cHYht8;_=&{CM%yQoKw0
zhHTc{&C((I(>Cx5b~(@6yZQN%Su_0w7Uj<WqVv$`P(!<lPLt?Di516Q33~skY?j`v
zkdSdD(68;*7sKMkOJa3aYPtm^PWF5<LuJa&gU35RHGipo_StDyPpZWt?pO|IjUcUE
zxu-s5iA`>9yHj>~_BNln5`qG+*i_pMDg<)(d{D7<6g#DI>ii<Pzb}Gb-@K9<;mDW5
zaa6BE{Pe}%3xYic?7J^ryxMB?NPFs;i{|F3t<D{XWu?7u>)1qw^c_3DC{Op^$7foX
zCZ1B{oIQax-q~VX`iX}!#<eMl^(z_W)-BgI5fBqn_;};Q|2AbQV*_~&UF*I5#|$^`
zm0fu4#V($wCl%ReRj?KCW`^Dl^5N5I>d6Y{KAB}<vN3FB!-jQ+%yC!BN|FyB)HAEF
ztBJd|y`m=jsYP^n#2!ZW8552cC02%>{^+#q($aPMn;Rl}OHvswUJWsgFz8-T*CQR$
zaMZ}WD&(w`Y2T}(x8A?HdDFS1k#*Jt*XFI2+cvs7b2nbnS5bd(t1IF8q}i+71e>`o
z8I&yS+dX&v#|h$lIO@+#S)QXMJE4Ku_syePBe~<&QMX(zS2!Jc_NA5iFL!j(*Ce)c
z3+4;IJz%YI?8n;V(?-XY_W0j-+;~Vwp;;|v=Dm|&rzVROv+SGj=Ct+~^Z#qYe>!xq
zs<I0kIG;+1cHx=D<(igv^Pp_YhsujS{#?$=VjCme<{k~`42a1&JW;vm)`7qlhRv4k
zD%VzaYPTerPyA@;n!%{QhV4>DixS&z4Ly?@_7t7n{N?r6*0e0vyyT*NkY&z>7PUo;
zPa?jX<=*aS+@u%l_Ig@`QryJGWip+!B_kSzBzA8!nI_mJBja?ntR;Se=`>TmZB-Yh
zacB0;wrUnnStK-VMZ$V__3XTyW;WdoCL6b_x0^?^q!s@Y3Ri4y*OXD_S;)N7WJ4ya
z_J_#D&vfIqYqMpZsx3M6c;7P485=mgBb>xG?2FpH)3CMaymb58t6yC97_s_Y{a_gS
zKjVmvgkdj3mao|C1<ZUi7G~M!TPNS$_xS8zt88a;(Tlqa9K?0<I^_?~y1VIK+y2Z8
z-Tm4E21@SVLfIzd8=PG{{rQYWvk!`Var&ZCyKk_lbw%8fc>ibHy*vwZdH2^*#}DzT
zENDJ@e9h;%&DX2mX1JW3dv8~QoV8Ny%0tU88TMZ-JuGhA;QsJ_;_-XB&cd@fT-i>a
zyJp0HJ}Gnm&V29ZpLb~`vw0nGQFYtTdH?E-gIf%a*gSA-iTW_NG<1Wx>xaE7%Uad=
zLp5ydo;miq+ALm~c>jpn2?4hBHM>6T6T2&X^Vi$><}at`#<t0ZG;|jC?-M$mu;JED
zjrNp1$#UBj4*h@q*vxaoxqn)Z*8eS;eu1M}q)zT_!2A!2@|9L92PID%RR4K(^3Pl2
zi=A!PB6m+<%HP0w-Mng3f&WQ&%aaAH?>^LibYPilR`;H%^qG2Tm?FccZ))$DB%eF5
zym(O8z1=#bfpeBa{p<whbp<ujTN@??`>(lHv&h*h_j~cC24=H_TJ{^9H`OwXXRw}B
zu(@B(Z5&W4qM=bIUMg@=RPKQ088*qi4lM7@Q{E}?P1?X>X23R4yz<&Jp0w?`4--<Y
zo+re9ODz@UPM*M2GJ(^|qH5NJ+7sJz?<;W17^i#|XcVq!nSCg}K3p_Bk;6|zDq%5y
zw|nb@1!=|&EF}h^UJ0ym|0UXQALC7`DEa)k=CK&}!VOHZ1x>RKv`sC@oAZF{?dRx4
z!tP}j{Kp-b-Bz?GIx*M25ZJO^^YT^Rs0($iFZkXq;M=o-qg#N@YXZyZX6EZ3T8|j#
zu0B?9`&zM}IJe~oCiRRaHjAp~+c*n4T)1x-hA+0-slp#Tp?wX9dcne$x(rb%1s$%|
z;9CZ*&Soi_4|I1kaJ37tg#@@9v1q;=7Q@5t@X#%>)HKNO1Cv@sQ*KAYZc&@O)Ik0p
zb;li8R($Q9oz%#`H8YH{W6q_<{y^T~1r?t+^f{aH-G9LG?nL*3368(aZNGEyPRX$0
zKOR!b%BAywJ8S~WRrMNnkE);L?ri@vC&)~m(0aW0-irzGkGK!1Ow8NZ6|jg;>?ZHl
z2G$=5{ND~tj8@^>!!YUH3l1*@_L<XrR7-k{c9fmp&eJKzy=emz%M)&`3#?WiCDRP5
z<_46NnHZi-;MkMk_$Z*l=|^qra{dzy%)Fdaa#gA&I2eQ!bRLUHEnm$4?Ld%>rPbyK
z918>{c?qyZ{&b3dS(>!Cf9d10{Nqf#o$P7`Y}coAns`<%RNxN##?xoO8mz#%P=xRO
z2L8_qDHWFdyF*y*Uru*;l(znaK&&F`p`s#<cAk#Nj@KG|y+3Ctb+Tx;^f+EKoO;vo
zT)0*Gj0}$jtZkl5u?bBVG8#m~In_D1!x~t^{y*U0-<JAq0sreCb-P=5f)l3fxT)yE
zFr%Sdbo)=$j|=#pTd=-x=#b`|`p$rRLBpK)GaO69ZSEXMpSCin<4EP@l{|(5j?V>{
z4I7xfKCqQJuuE96#ZF++7hv{&z;VB!H^SNe{Q>?Lma~5a%>Mdwo~}@l_>PuvMTYs`
z)OMT4UJYQ~^`tJ~C*Q8a-3pwOTn})UUZ10G*`~$md(mL-?h8zQi@0?S9KsV=qXG)T
zKCl%9urCNmn4#+QJhT0NI{%Lb{^J{1bhy->iceH77iCW<+I)f|vSEf2$J9p--0v$a
z_C&byJZsuCWr_LBNpYE8_R}-k4VbqsWHowV+Odjj(S{X_|6g%O|4MiIQTP7&l+OXI
zf+5T7os=Kl5QuGLoHMDru!y^0)nXaVsof10eF+?48+a?Z+M+urpH@wcbdKpr3-?Np
zwrF7P*tPoIi&!ajD`&N)$yM{-+?+n+m9m_|{Kp&&)!TD6?_l|@xu&RVRl6`-dqCwh
zai>cS^=ry}_}rW4hORb#(0et2#XEp|_bXGzR~)+L@jEnT2V1O}%Ej4Ky2dVu`4m@o
zy@bAmCja4^^JRWcoZDcr%7JxvLh<Lz?rUe&yq;>qdyC08U0Tb`=w;OM#mkm&`dM4{
zqRuaq|M-P9-(D$w+&P=;qUdxk_02E1EpBZ*VwrNez#{H3$Aku!XU@|<|DSAgm&-ry
zr_IIfJgWqlL!WaSE?|AZ#o4}?tBZ^C)KtUTt&3l3uH2cjQt`J^&5o7afr`>E)N+3<
z`@d^(yT)d>Y7XxU%?S}1%bu@2uyxXr(C|cuWv3o;>lCnd?pj^k+3i=oeNxptdF!ou
zlUnpwt#{q2xj;%PTwzr#_tcXP8zvYmeK)xv`@1!F^^&{CmjCTw*1pBNOMv<K#C2}g
z-24^W16D5nq_wr?wBj+hO&o@$$GFsgI7BQoWW6<E(G;!alNdI~CGXr|)qLq%*e>hr
zi{jkp1(+kPr7~67=e#z(|AB8l_pXDpwkQ1BXdJcc%fgjmvjwuWx;;ImTpp~K-Mv_z
zb93K+1uo+U+&it4YnId+mDx1h>hB9+S^ZkkSb_b87H8)v?$f9DZ2q}aDP#7f-HN*+
z_pZzq&EA!>cp-Q2ghihnR>^eEGFZ*k9>8)nVF_Qm&9xi5_1wcduZ83%%>5j=?vpmB
z0uSdZ2F?cz8-93qyuYyVxhJp3hkbv!<-De?56>2r7tl9X-p#eAuk-eSkPWMZ&iFnG
zFf5t5ujpuq<Q^W21>9c)c`X#SPjJ{Dr_6b>d;dYLCM_HOyFU(b3-vMN2!tEX_z={+
zYsvv>&JAH57IDJN-3M0H?OM>dZ29c3F81s-78?|VUABDTJ~U|p&)bAU3$l-LzL|33
zz=Wt6`LAk+uVsrS{Qsl(@7wxUKltt^Y%!S4uJwWEc7w|<?}N^FcE@*SH0?^`3gY!n
zU=3Vz{GR(!%`+RddieiDpOEF5n8CH9+egPkph;)-MrlsI-KRLTHmsWVvgvqoh{W!=
zFDA!3#n`;gC|pfo4PL;#?ZX*`IeogXw`kqj_-g^Lz!}Ahzvn4;?`m^A{Gn-LqtD9j
z?GsOKSnc|t<95Nx*WcFiPg~2n)byAR_u*}d&kI<e|2p&Q5AUlN$EBmsYF4o>*mL$&
zA+NDj_nIG89W?@lZ2FEaD>rAir|WE9{H8VM&bduTiX#q3*J~aBTfy;TtK#(utg(l=
ztIlx$(OL5}ro%6i|JoY<7Y;0aju%e;PrSgog`Z<>`^zgwnF{y5PclAixjS_YuNyaK
zhydH!2dz$P$~L`fHvTsCZwBjOZn@WgB-$3N-o|ifTf?PPo~^AG=bq18^do^o=8clc
z)PNl~9k_WFn0WMy6y_}UI`_HYoLg+oG4bXPHKFofS3Bs$Wbfu#7jRy06UVMsXMV?2
zXuVyUFn5vWEj|~4jXaOcUQgglDrtYe^K$*^3t@%~ABtFicOIVfif<bOr|ff{^1Jml
zcdvUMbrEY_q8hTg%PdTPk$umC^U-I|$IYE5`})$R)%@ETHk}mY-(B9m^9Ap{4b{7s
z+kPzQ<C8pm?+t(OcfIEuShsW@zAJsw!-4fw!Q{W{Ub6o^Q~JB&GA9=oy*cUY${KuD
zVOIll(aQ738*Uffy{dKQ#=Gf9?@#3GThhDd3h%b#_iw(QaQDv9Ro*&11w1{n*WXR&
zadlu_cGLR)hX?ha%}-9?2^8iOljA&Y@GwMpk(BtE=iECb-kdalG4Ja`ZVLhV3pG5o
zI@kSI?*H67<CXyP$vaAi=3cIf;N8Hpxbd{+RR#9QfV<aXD_%_K=uY5BJaERMKzqj`
z?dSxK&I=ska-7=@o|-S#ZWG{C<cbqz-YLL7ZJrGG?go~4rBm}B-g|vuQylMwo?H%z
z1)+LIejb)P?*G`&AY-TUPU-dsiCqVnf-mr~^DTccoz*3PIdTK5e;v=Q{|k6uH1NGu
z;E((JqV+o8ivphL0M^h6tlK~EdT$Mr6fN}K%8{q-Xq$7pCg<+Qzn3^_xOEROeR{33
zZnuKR&O5E?kB=NXdR2OH`8%cS3hY`59G@CqC0VgX6!5%QF!8-Q|A~2TPTKLGy7%VP
zzq%I}I6@s*=3RVw;reD@RrV%c)zdkwTNj+K*>hXh_t*-(-ESvwxF|5|8ZaAQD2$xI
zUO9oI=YjUt3*37zs9b$;=*D8c*8wv`R&cioou0+ZAZ4K;Y{GnnVR?@&|1E>J$1hAi
z!T0gpxi{zHKAwN~;<LcpU;~yS1Mcg6Z_B2#<}YFm{qXj@%)9Uy{*Jd(>gyi-*uZzo
zf%nA!0v?lk?uipPq9?FM1h57xux<}xvDm;8b%0~<g7*x5VsmCGzx=D*5zhMI!=tww
zSX=t|B=)}%$^R%;|25+Mi%$!9o9bA1C$#<Ln0C5>Me(oda|QO`0PZ~npWZGwbx!)4
z?)}>(@!t>Y^1ofcd*TAeR6Ax9hS=07UipSE#yO&U7}TA-?^?`RbY+6}#0I{A?vFzA
zzn)q5HCq0o$bJ50hO8^i=5C$EJpH#)(S-AP@n;!yzq9B4(&?X3FL!MPKmW-9)<e@?
z9|_ZFnSUazaFcz|dZ*P@^?LlB1}tp}-1ik;8tQ*Gna^`&!JjJ=Ui>xq_;JFUFALs$
zxxm+3_p@R?hjGG&xc~1?p8CLK{7<d2;i~%oFC6=Rt?|GAy#ANY{eQase31dnn|P;K
zUTu#x{C~%exvT!ctqI!w3<CW*s+&u-C(hAwNjovaG3At~b8p|m$>A3l?WvS}xHY@o
zPkL+0@jlhx*WN8US}A@px3ke@vQFg2l-8t&t8e?xu`GS}<Yw`5MWvn`Uf*ke^KF-S
zzLmXt{mRRrrGZQRVqb;K-=-Cs^Xtj2tFOa1BpwZ82)MS!eoN-nS*!}~Z=&Zsmpiw4
z)%&nso&GO&UQ?Ey5>fKrq$0I~SJu5p)BjZV_g<+@3%7r>Yx?ryn#*L3=SPEk1m}v1
zhB&oea(V7*x?^Rz5tmg-g7uQpnQ}}2&oW6qwqpD9tH;{c2VTg#9>T94cW3o_#+=iu
zQqO(sDqJ76?84TrzK(_N6ThSxy3ClBctlda>-Y%?S<~p6r!haRQ@upr^=QSr9hXeq
zGx_t1vl5F>UXoB*5X?JCsYQv)?B={xXXo9O*s@%XL%HR{!K$pw>~l5OIQTm7S=V$6
zGEQM`*tzA#tV4&drWtt6ubp+M-TIW!%|{Zs*B)}nRhW2tns?v2_-uyTrX7#EbT-{M
zG(mTg$R=BDp`Ay?vTiBr%l+}QQe*Qm3v}WZIU1D0#vJdxVdYArs^_wIFU@&=#`t<k
zvH6`zP3nS5B^Nz+=zae3p^L#q<)ZwyjE1~<_nrl+FaMvFW^rt#*jLN6t|+;aiv+v0
zJ_RmGp5W;=d(xeUYc_XX_~>z^?1ATIrQR(&kLth4`157kpH(lCCX0W#AiTz=tKrDj
zMJraX_AxHa{%mG;T_$Y%iVu!yTyA-#Vy;RqG80`kvzYSDcP?L*#9ebDCu^Q2k6}ue
zo6oFt<u7WtPfweeb!OutfAPuT#wATADw8zcGK(r_MOmn@#?AY>ic332`0^^&Ue{pX
z#Je#w67PJ;WZzfJvTcV2?~<k4)=06PHB<NKXi(p_N@}8F_ku-tJfx$gJYDX%<y97G
z`1CJ)W>C3ePI>xNCCN84^1r!ua;Qe!_>eSjmF9&9i-e|l-6+44=_CDr)&9cgb2&xb
zKHspII7z)*v(K&S&H7b}r_XOaHR-^PiZ4HZEOQZ0<<hK(QgC8(lQV4D`<-p~n`fmt
zPcjPn_!hU@%nO|KeRgunGLILPN;?m5Y^rWzX^-OB_H?#ke)03!`CB~GO5#*Dx(azH
zOmvx)a$uv>Ba?|)1@m;%ZmcT0Q@zTKsn=U4o8i%wg|FY{U5Y#(ZuD?xLz8M(Mq`_{
z+{%kF5#qvDg_X^|Idby(>o&Q+Gc3?9pSwjP;`8i>oyX^vu3%GNvM@wGtMpg+bJed`
zxucKE-bn9%J5j=<yN3D5$#+%kD>kt-Sj<+8Gp|~>XjKHOoR)x(*dmpAXA=CIS4jE)
zuUs?TqAEd!`>}F@`Km_dLp##Kw>@BW<Z-h<dsV-FRq)+cLFNM2Kjvqj@bU_tVAyOk
zWkSQ%0EhQCigs^bp)6;s7~b?@W9tHsWnv~#?t4Vc^^c?$R`Z;`_cfq&My0}HE~h=5
zjYi8YO<o-mTUF5eGNoge)GdS3Vjo%kq8$b%H<xKiToRBhPIs{1sLH+a<1wMiLmgTQ
z@1wV8G|FsBU{yJzz-F<*DQ=P@ua6qDr1C+Pt1HyB0)luaD@}}4_Q^aI9dJ10`s*`&
z$0mDK9&pyKn{rO_;*Udr9tO1)PI)Zz^n}%F-7}7YbKJ!yG`QF+@lH7PGC0zNLA-Q_
zbGgd}x7a8D3%j*q8dx+74szEpw5nG;<n;M)P%y86S$a<ct6qU4*PWS7qH7vhKQB?Y
zzWI}>X4z*}gN)^zT?yT?q50LHt&S-hByk8$GYAX|c&vNz1b2tkmudNH=Kt|nbeJua
zReqv^lkTpT<te|GNXbo@7RkpTW~2F0?GR(8`Hsc?d8Vwg#vTXx<~?XL+u*p|`e~*=
z^T9TgEsDI(vajTtZm}&<3SDmhSJVId2Nvm=gE6xb&+PuRnAbU=MasfsnSRuU76Z#K
zJ$ojsc$wr8cx7p6>DtMc-ppCVt9fE!lI$+GSm#rsl2b$&7(Zx4T>5CZ`_W19&<6L?
zqz6qJa}s&86AnvO-3tDH%xD_##8MsqiwlB}>V<8xy1FLq=7lzC1xM*mi=@8lUFy^6
z*(PiJ!qsSXVyjY!Bj2Z$uDRKaoNiAJas@ja5?ZsM^`_IIX_FLQM_$x&kE?ww8@iIq
z=1<d^-FDtwXGH`B4?ODKezSCGq(fWit-u!HF9&#MxgJhET^%`3&x|)MgGuDfgtk-L
z9<Fq+ILP<y!i}TzuJ6flXim33-J;a<P34w{%M_c8iISe2++jPiO{*qyywrJU>-}M^
zjLsVmT^&Yt?oP*qEfd;B?L^kD5?EJ|y)i6z%T>+KJ6HvU1Y?(+Y-G43bs%QvqCU1~
zE&7J7D@FYdFe@x+-1GbHoAmhw%o2D0D{$%;q)$o=XcAiTfYoaQBWK=(%cdb^%U`_B
zlwNRvDeKK^i8cd+6-rHfV%r^Z6m8v2@5Jy*zh828-wIc`Ee*^z=_dpxG-MPOckcRm
z^HGmk2&;aOkMzv6)U&Gslll^SgyU))qS{_?_3eDrt#jhA)^QI;{t5xsg;G;D&%b+E
z?oI-md`kn1=YeLW5JR4{H;4Ev92$lAHgbn+I7==_*d%^o!PDb@(>6YBb>cZxv!m-w
zr{G>Cf8`T4{JAj){Q9qT>WS@@Qc+nfwabD<Wuigr&1;L!A9Yp!8{+tAVax>0&p&z@
zBxU>aJSX3>o9R?^W7D>IE12cmuFRELbyKNk&0)6x0S!(9w{D&-zPDhnK|~{WP64yB
z%0aH!7fqs57PJ_=StNP(hO5Ms1a`XwC5dwxZL(e)noU@oR=D_P`CojHn!NpS^@|hS
zrg5hI$uS4T<N_OaKVRFW$}&;=>IQ?X8b$WS&Q5&6D-4v4+~0{iIf?SBdUfsIDpDfA
zvn&3gkIl8l{>t*DQjrrFN;S_4``0#Wx9vC@{A?ks_?!k7?EoiPzk^*#6^Gb#HZW^M
zDDuSS$9$0HKc={A!pAfXXNff&tZD`ydyaHBo&4RxXn(VkNnGV8r<0z(^a2Cs+?ESU
z$4@w^Y+0zk!|stp=Z*u{-oNVBR#9GPb5r!vOhGo?En<PC_x`WVnOk?Qc(Gu{?w{B4
z*93HDe|D+(=;3a@Lgd?~*hFTD1OxwB=SAHlnvQ?C!Nd}Fp*4WRS>lL7n?ct{HcJ-g
zKMmJQ9|*7SIe7XP?}CDQgQkmhVFrpUmJ2M7p8U{eP|>WS!6+`UX|5HMf%V$yJ6UsY
z2$n2hJf+cO&at~Vp+)<_l;;n)EEljXF=laN5T3Y-)pCJ>t_O>qG*{dO)>W71u&wEH
zyTSDR!_J!D5;Y&#UQ~;D>}Z;Jk-Z{=MarScnW61#^!@;e<`3ES-)~!_zi7)<*m-bs
zTf&59y#@PwlkH=ZTg?+1m1i_t{$TkkyeH|!vbk2xCIyX}83*(aHM!l``G3lfHioEO
zPd+OzEpEvdXwQEjG~a^V@(0_J-AyhP%{*_o;uBarHZ|EcYZP{Cd<j(POkA>HGBbbA
z;k*mx(t8fttZcJU(3w#sqAk#>DB~1n!SdDlkjkAMxfSgB1x~TTZ3z->u@%jld-jLs
zv<A#zwy;n){K2B)vnN)gQT@hBlZHmk13gC$EIS>+UU{KSazb<RtnEH)oC^!ur$6M}
zt+Xp|LUYs(CS8kNrrDZvSFm~PFm~qI7|msT^FVv@h6b04gIWwq^F7+{Z8)NLkyYhH
z)1g`I+6Nc|H1_+4*nCtz`c2yA;B7W%Mav)2doCul#x7_!-@tr)akHfWv)&wLwH=KA
z4J}x;@9Z!yVEh-wZ0^y>n<HP`$gZ@rb<qMgDUGJhi_KIRX5~L%^Za-$|IXoe7j)A+
zWOuA!b8>0Y@?eQ>+O=#Ycg=(*-GZ)}vux*9*j1|ZO<Tn#mBCVzFu^6DDM7)$?$7bB
z%qPBQv!xdtYAj(tVeRoTxz%m~vyVWlRRWXr2}ZRSP5J`NhCi6p3YzSG>^>0OmJrbx
zZ_}(6!RRKjwm(BVOQGov2dByc23LXB*bl8)6Fe20TncVTD@||_=4#I8aChTij%R59
zxU$V<hS~8uoabYjBv&+TDB_KKAk(t2P3i^vodCD%yE_}Ay%-<1YC5zp-O;KVV82?W
zE!4&7e^>%*qs+O3#cjDC+P*Wpc06J3T*JK6rb&52W7}({XKTC<c<-6y-DpzKEPH^_
zV?jq*M@w?XYTXr0UpiW}0vfGXG+XarcJ(+DE75jLMLB*0Q{DqMyCbc0EZS`(CK>E7
z(0b99a)2?ef+g+-+u546ItLD4c*7ZYp-Doc$tJ+%dW7Jujycf{lPe8cUcK%toxy&q
zrB7=`gU$x_)H|$e_V^`L*vFo3@p<6YsA4H8dSX}9QAHkB!wbynGj_LEH;Q^NN+&c~
zI<$uTX!-Ej_t5H<Y7LCK9V{lz+jMSN9-F`<T*IQ>!RWezS@&*`t}Tnd0P8WGg*ppb
zf6r-EouPeuO3VNJ3i$~QECm7qq8@DV4K2ARboo<QBt^J=dKx7TxHT_qn=xr_<%@Q9
zN3N0p<M|JI1XTO7BA9qDFlc75OIfsh3br|V+u}#_{xk(|pN7CkD(8H1+x$h^d}cJu
zEMVX^U=(iHB(Q@~jiK3I!0DrN(2w6u!VOFlrZl@$%$zZEib(dxQzx1vKCtNNUehf#
zO_NZF-NBSMfi2UZMYVxNdj_ND4*$XlEG?6oofoiZZ#bWC(31Os)oT^oS(84S4n_~f
z?V=OAo^E2VSkajIxU(lB<m!qxtqF{L4;WrVHZ|wiCm!%S7~HnK=HjC-UIC(^fwA_A
zF0GaojbaZPxHuR!UNrufwO};((PX5+njqkGKWD#Bg^^G|qv#Aql^X_JuRJv>IhH0j
zelxk2WZUBGaV9Y%AiZ*JT4|W`3`S=L_PiNwnF8#E1ubq9S|Tgh=1*;lbZE-B(Pp=n
zO*cVv*4HlKNz6s7)ovwBxVu7tjj^w$+1z<y_{Is$lP5Ovu4oWTXuZ#K;t@-${sZQw
zzaaskd$I#;5<FUiZ`|<dXcW_k=9qCqj)O_!Lz7X)ZT}tC+GkqycQESdupLZh3+!mT
zWWth@+gOlt^J_`u8P?X=1wMR*cT&ExYIU?_6kN-l(UkF^tzbr*>jSn0bJ<#c`Fm;H
zik#4vyMZbG0qgb^t5<yGvOK`}f0?4l?Gv}EZuDvk>{^%0RmXhWdoxpo!foCe47w44
zVxiFzTbnz0S{qzXT>KH<_~m*FYg_P#=8%lmkP1d#joa)6jQ)=s6?Qc0SKQw|r`hgD
zv%g2{rkYSIfpZ7B+juuOX*aY;{?HX$!EAry(ziV^-%P@0gto+bgxT(Fi#>5Eb_bg_
zM{`C4+r_zT+6C8sx3oqw+$xyC8pY6_x#Pj*r)=k*u>IuVdn?t)ud+R50r$!dfocPm
z$DwhLFI?5x(7=0xfxDtP@~Gd|P`31nHuHuP!8djsTg<HXt~ubsl?GR*R#vv42h2eh
zt;!bnxmGX;J!q8skt9*UsNZn^M`&|L&*}eq3z~f%#2w^jQ_*0u+`;O+gF!o@(b6Ey
zdIGccgG<bI3A&*y{x?{&UrdU<aLM||CCMAC84)QNGgvJP!qTs{7;vzAElcs7vDUSL
zb;edEj|Xhp7xv!$%H@{8C^7BfiUkjKcO=TF@o7t3<h<}mm7#6Fw@uiAmH>z7gST7t
zIy@ehv~Egy<e%{P;N+x42fsvywy+<}wm+EF4lwYYVBnp>Ao1goT*M`z6?>|yEME99
zsr_iOG&udCJ4u^iwfh7{k%R_;4x{R<<ton0^$eca`6cN7y)^T!K;VaDn*)vM5o~pF
zZLtAQF7~$hEnsqA@#Oas7Uu;mt_3Zz6>Un#7_VeJ{QoeZMdC-SQD>LgN+z2f`$FaV
zif`!htYF}oVJGv0Ww(mA+O_+=hnvlRJgetr?KsjB*%vJ>dbO98E#yJ75d(AjyG-#L
zjOI7aePg<Fs<}~tqe*s0qxgq3<<!>S-ASo8bS*D1u_-Xh|4@^^!KjhZwBXkolY-ES
zzI46X^K9RaWzD#3vtffx!7hWhorxALx>K1|JKE~{S|c7jca3ZFTfnU4aJL{M>|$$M
zT^(Df0~1>-pUn^TxXjtzVO^C!+Qd4p_l5NqM>M%zVBoQc=RUybBjMdKr&(QYkKTrR
zb__N?3z`esZr`_gmb@=h>t3el1BNs67!5Wws_j@~!oZ~Ppz*)_55{}n-l{1uD$i&>
z*Y-$*uT3SPQAUB0oq<uJp-H2l*|=cMzoa$m-!<tRjj{W8>Fm{$nMXIP?6A=CU{X=Y
zm+@fI;$XIkXj$2;VZ+hP5Yr?vqxHbC*Qo-rkrK>)9L=c>DVZH?=@BOkG$LgJn9lJ=
zt8932%&#lo^~%Y*?rE!-vJT|v9&7xdeA@0q^A$B4qZiE+f^BAAyRz<$mrv?N#h8l;
zJ6@)+F^gVc;M>rk@}tRqM`L`BjyXfqy>o?f9~wn3G^uQ0p3HadB1fzL2^OCZ&6YQw
zT2Anm_GlE|!Du{V%`vC-wiZpc*Df)cg*j&2wBEq1lE5hAk?ga9#rFow|Kq18`95g5
zyp7rH{A2Fl=X2NgXmd1YPGHNJ(CQb#q8W26c0%jL)|5DboBf-&1=MkW{uwN{J0oLr
ztDR{(yLk7sU2G~78Yh%J<MLqIvpe;pv|m61lU2c^Bgx6lM?;dt_U9Q)NzQ8xb7<Ai
zXmnr7VDO+>X=&j<r{=eN3hzH-lyGQ@y3i!^;hAMevwp)-y@aNnODyuwwIngL9oo$(
z^n!8jCH)1v8k5czG3T8(zp-0o0kiROmj4G@d@it<K4<Y;!D4FuJ)od9^}qw+Who0p
z*$Wz;q~B-_C}3$TYb#Cvo>9Oex`C1HUZ>N4u7eJ~+_hb03)t@THZs?j%wf=s)oA)J
zxr5bmMg!*o2JQ__A74j2+R|*Yj5%DwFZ{xn#BbLX_q3%I<R<)RkvQ;1;zN_Y0&9o@
zYwPN-@rMiV>oMk>IVf4tD7k^r=JndV&?bq3CjEfsgf#oa1I+>-m}b4-qwc|^cecp>
z9g|o`quz(I{~K7=Zf7yM-{QN1Wy5+Fao%$87c7wxDVZN$dzroXFZQPH-0R#5whJ$g
zWOG++oXvPhVYQfxM2SL2)C@+CgbI%RY`PhY&L1W!1vIkFU|>B^@hSOYVi;5YyAYx9
zB&!J?>U?a9+b$}W<c8+6id8hQ{U|k6Xbn|wRsPUurm^1mK%ra%lhBFTR}x!XCj7m!
zacxvY(|?r*%%&%feiRN(deJ0uVg0{Ln%d$my6c&(E0|RqRD>KFwI{Sxp8vIWdyChH
zsyE`lH<n-Yy6`LZMSf;P^~e0*sT*GJ?rTdw(JVHD(fUT~ybaZkZ!8xXOkI9~y~=`3
z>{Zyoc5dwnjRwpeWnsHYHX1Bs;!8Zzq8WVcO`>u7*(s_sjnl=Cq#bhly3p92XTD{L
z6X)z36K*&q9*Sbj=Il}3pdw*#<j1AuqJBX&GwygCR^t_rvrjnFkRmckH~M&=>g6`R
zx!aN_N}T<1NIiJIk5;Id^2Zk5SsM~A&d_XRa^(_MOY_<J$gDfM;L#4-+gDEt-Se8Q
z_44i(P2q%nO+VWviT?MM+FtPJkRji3-&rOZr`3)ZiKMypm@k@9`ufdJ;};hextCW9
zE3aIe|Lx7o?7P3BgWNn;O<b4z+w9$)U4_nB3v=VFEyE(t1}YwA5^Cj9Ps@3x#V%`g
zP=V{PNn83P6|Y@A3!6I^8ntT9&3%3CjjE5OacGTa>t@ka%H}inR7_gN&M&9FM#6Sm
zUaa+pBgXuVpUx=rTWvd$cvxm7M=_UnwBY0;yg5Coic&d09F9qp-B{RV@otZ?Qs?6t
z8A`FcGm<(JX8u@uGQOF2TW8{g!s5rh6Fh~_8ZRhmWahSPQS8!R5F5;E?8#@`qwj0A
zQ^ojN%;lS=p;48+rq@CaKhY~v_<yiNWm|yp`K)z&r(F^1ezQ$&cJ40CTb8bOjLuty
z@7Z`s-6A1?QBK43iGYhx>!ianbqrFcq`f929@o?AOk$Ue?f7`tQ!{q4pUq2-$3h14
zViq*A#_nOiudaE3;V`E;$5Cg_N`+RwMpmhc1vXo=lD!4Jeryz7UwWWGvCZCbVyEhE
zkHt4SPtJPLXK}X8xL0TPh8N;nt50goP+jLxJfrWDO)-b4$CC-oLS+@3P8*!ni9DmX
zsDr6X>EpdZciFGEs@E&cd$IfdzMrpFbI5srVDD5pxyAWe)|#!;6ja<aluqf**=uQd
zRJ3~936T#0!L2g7Yo|1`id}I$<IHRN{EVJx;{Qu$j7xhMy$l-IR-I9dtynJPrNtQB
zb53`oN*C9HM+RCo@hlfzgaf~PU|!v0Q^aGl)ywwll@}^OSJefXHisJ8woY9bk?nBM
zQ=?r~t#6aszGS6aXU~~-t6n`;p}TFJjxo3D!>EmSrOU27<kWcACA41YyHp(e-gfPG
z?T@~e88(Z#%YNoP#JRg{b-}zVzc*-Hi}+*tVu#>F53!JnOI})a4kwt{7B;096(5{n
zc**7R+&L4CrN2Hrel5E2m5|?oBL<C3W&*tTd96P*$Y0iU5IUL9e#z_Wm0KYbn<ZN3
zHF2Gb-C=l5GI8z3HtATMWaUk#*3DgWyZGRXMe#<*)`zPl1^i#wB2@c0@rUAfxuOoG
zU*YSIn67L1Cd9(@_Gzbi!m&`+-)+_$Q#NqEYL?m-&?Lhlu|Bb7U9;R0A(emtJ^w!s
zxo=v!%IaNU;8sbr<V|$dh*-#z?s0^_B*C><&dFKo*#yxU7r54&eYH-Qlf)*G(ZK8R
zQEvXnhb%uUlen@zcBC9x9JXoJtS?zpdn6Pda*I7|mbYu<va5N@lO}Wj$0Y{V)Pioq
z4DZ{W*Pd-FXlcr8y2v8;@&c>$o(0@>#tZg7Q}uAX)>!!U6SESp<cZ3w-U1aB&f;4x
zx0>%c$YJ<^U%%#KZ~2i`lZCb%w^<R$EiDru&@OOvirtD+oj;ZM!wwwe`Ja=}BEBJk
zO{b$#<Ie+@W*-O60|h7CY=YVYWLEL7JCW#8(XqReqghl?>!fqbi;ZDl64{Ja9AJI+
zz<B<`CQgHhxX(*6y2}F2cU{SLSLteK5`EIZnegL~_?`z%YCl?dGh&#f7cg+is;bo%
z$h2>kc+BN@;jI3g7fyU}6IiS@ni?8h?kI5n4CuJ@ny<)#QD{v<tJ0PSOolt0j8-`I
z`krf^Jg?_!*0Y7Y&KnrwcSorD+`r=WFeZV!cZaJIPb0HXT_daLiU!sd0X(TJ$|5rk
z98ptZnHcirV3{DN2*2tgpI0lENDA8UFaH<7mi<nXeMN<*cR(Xo&<=;npPr4E7li*m
zxAoLwS<Xp^g$f#)MGOvdC+s-Ly>EM)@dIOC>laMh1s2aRU)F1A`KV2sC0X~t8AVQg
zi$l^HRu^53gckkTJe}da>Iw4|5A5Im&}s0~x;3dxNdC%(Lp(z4T%AX^Y|Tw-5ows*
z<05j9f60%gd1*qcV*hxiNhTg$H({r93X_&i=v9v8PKs=X5y8yHE18!+XzsF{!qDYc
zEoFJL%QZ6dv0zWYLF@et?D<ZNyy*qam&zuzq`NHcZO)yaBym|clV^(loC`-B<3BK|
z{|TJfF+1lW$MN+Cc4mvS*%j=*r)m*!;~~=qDcu&%lpv<Hhs7)m4#|pa<i53I+u`g@
zPGXNH_PG6juz+v*gJvPU21dS&1x#ffH{Yr(n&_Y6A}TQZT*&Ol0_i1-rKBdR2_Cd)
z7dw%_EOo)5sHRPLqtQba-v^FdLLWP#Z62B5nmTLEvyZ(VHcqTQ4eIhg7})-rEo4u-
zcaV3>R^5Yq+YEaz239W=<Z6m~&Zg7wre6IuyJL=C{GtHXU8@wAYA-D^343*H%BqV^
zE;Y<es(;tC+`ZW6<{ofJx$CO6iXyw1#zEnO9}HHMH@CP1C=05xv1!>fGI6IoI3XHv
zq)6ctkF3)Y3DwO`e3LG;8ptrESxwpKDPzQ6duFke10SpAGVdq62?usAayUQ9v#?A0
zzyeOq3Ct=>DtelI-~T`Lx#PH%%Eu1LJq&zdmPZwS6toCAFxp#NIB6_Ue4o3ud|yFc
z{v2mVcB2gqmw99pWEoy?mRBmp^;Sn5;reU&Rb}x*-tDaV2R`z~e{d4&Yhcmer`VTo
za!33@!4AbO1&lTY23OSf^9pU6z@hB0UDaWB16xlHW8jQ4?u%APx)oWlsor^`xcdOJ
zTn*!!1ntGrzi+VHZM(QR%;p96v4;+<QOj8tEqufs`-5d`_<~kV=SPCcyNs@GIrCI?
z3B$bjAIz(Q8QWfcOJKLVam47!-k$U$d+%8vGQYQ+u}fyf1J;Rm@5r+C>1mc8lRA8(
zwbyZD#{t%=sm~RdcmtR@-Bvu(nD&3ag^Gc{fu~24cxc8!9*de!7yH%LxjmTc?YFRn
zGv~kw@r)3IdlOpTu`KqU*AQ!Lu#lxY;m~&b>4&qtzb#KIIVOG2VV$?fLl%(}4`$id
zGRoiiEEn|VJHI<eqo~}%zwQp}Z-@7_o9)nP7qU3WU;p5+X4Cg3g)a&mJ{Mf3Pikl}
zeDg^1+=1VBmm2cM+2pZu>&D1xFlngB<Y~nCgdP?;(I6_(By;3|hyjzz6GpiZIpq_K
zEMfB$C76O<G|AXFaEoxhY)#0BILKAOq}Agkf5PQ;VgpyjA(<No-gP#X__%1?aMZAI
z(J*NAICJpSg;_2v%yI?n8V)UmhAiuMw8*dc|A0-Vh4oHDsK&)fXBlHn!+0c^re?-x
z#ROVj?CL0#R9<pG@Wa7~zm6YN9Jd~1(A{{TRgqEXgeac^qi9Q`qD+%w3!~5x2kr+4
z?&qFM>qy85Ic!<u#`3IDMx{yS#MA={k3^4z3Z`5U5;-U&;3#;a@x@QYmouHsPaIPh
z@YSk0$aO?!b7~uRNux&#3!iU`w$3TN35#4mC@gp*z;D~E{>E4008a(WM6WG}xT6{-
z`ZBO;FiNysm!GpBLe`OG$^k(YMs63s>xt999O-I|5NzDy+<Lc3*WeKMjs|g!i4hxH
zB%@~Yx=d5zXmYvfxJaUr_ejt`g+4`Ine51<^d-#7Fa9?%*14G$M3^=_u>8`b7s9Oe
zi-{#n$)+#P^hDgRKw0@a4V)Pa>^=@Wdk#n>H0}H7D1Sl1C80@nLz4D41tUin1C2w{
z5sacGjWTnDv{{@DRvb}3bCApDz&xLZx{U|ammK=ZtGseY1NV{!<~0qRM;ch~9n#IY
zozAOj>eOncayaP5p($6Hly^7?++mP+Q1pJ{uyv;cgICC-H#hgc;GTb%@o~lshhGm(
zUpS?|a1xxbls)vML(?t2C;sL_yar1S$&?)Aif~{)!*I6MUA~3IUCUXc;J8dn<cyz;
z+B=v`1QXq2n$2sRO*;-LPiz!QVgGlhfp<Xz*M<f`mo(Q2P3M>VciPl>Renc<(=H)*
z!A8Xl`G7@kDr=s7+p2bb??FkYgW`Lbd~O`z{c(W%O5=SMzc$vmgQ?f{&fzw`vRK}4
zUb=x3w-2LA%hMw=x1!`0$fz{RcZ8aEh5p*hqIt&A|7^or(-!S7j^DmG7H(t`?rBWm
zTITVC(R0BgO{W&~Ep9duhx>On8MiuVwKQqy2(;EnCc252PID4&ZJ1IjtL!l|Tkfc`
z!isMT#gr42MV_$p$Q-=6@d)pdhSpctxo<Ey&*iq0i)-SYqhBCV*rlLY*QS5MQP5$L
z*a=5DhXmaZPWmRCJ+GMbUo`cG9qw55wD`~zr590~W*&-|c<ATHg9bu@YBm24avLz7
z*I?KF(kPX3-k8%_OQ0noN>(^SC9#cN@(IJ@H!~KmbT+;cH)Y>(^%)atLRhqasB2AO
znqAk(oDgliYuTJ_X-XL)+YYAH{c+%*!zJ<Opr%2iwWybd$l+ysMKV`B?KqTd>cgno
z<YxMXNkxT8@f73IFs*JWCYEo>i{5GYymU(W<*51Rp!^F*$tjKE6^(K#vnNE|)%eEe
zCE%>p(I|CB%SLpP+(ab_m4nk=C-J^m;4#6)K!cGlKug)e>G{h;N;eWEOuWt)aA|im
z$-R6f({gCiTFu$BnuKp0DD}NL=hRA>5Jx2mSGgSrR;@Y3cYs0UgQIwZqh!oc&78B+
z5B@V0OK~p0l`N;zDD&lU#u8`q583<gwe?+l&HmC!T;rg;z#;h=2Uj*V3adEI=h9qR
z$0$4@$cruT?~2A5jf}!F2L%O=$gOP<-m<9d)&Y$umPDh&+rJ&MI^t}zgW1%;Ni0QS
zsUFjLo{8Qf&FUqNM#m2J&uY@#peg*|z_+8B+tru^6&l4dLipx1eEP$1*+!6mkM!<o
zj5AW1v_+bQA{x`@IBUQ4m19|SpzWBYLz7I#!LDsDigtM(XnXs71(V8AN0o<Hxz{*w
zO>p3_IQVm>ti%lmp*c;a4KD?omP<7p6x5kscF%$D!^E<b<I^KqgqJwDcDR_HIc(_T
zC>G#s{es!<!GGuM2h27l*JZj6X|^2NeW+z~os;+(cKJU#vnM%SFgm0w;kw<3i7$YG
z^#}t?i^Hc64#F0?0t}5aZ3BgO91ym7sLsH4{t3UbiX+d013W2jb-x~py7xGJ4s-CL
zr`Mh-+vjOb?KpO8lkU-sgFH`WiSB8XdEnUW)Fis$fV4+WnM@=14F{PDCgTT(ZT`&g
zYB}WIaZs?~U{NQdV*-=5fvonHZthQw!WN9eYYuSNG)l-gnI2)b%3$P^Xfiv%{Cpc*
zLB`?0XN_eZ@>+A4G$%Nz)g02^!=(A+;5{qF+0&X{pL0<12+WpZRj!#Qc!KfKiN@AL
z2ZGrSuAJk*Ifa4$J%dQce>Iz0rsW*YhANCt$_|#>95K#l<Z@_|4`Y72je#xYpk;`&
zoWw-d7zaUvLwi=~{;2EId%~#SvQ*FHy>wI~>#0UTgGTu;jT#lrRwZo}A;*gZ--%l^
z`p$9E+vTDW@wWLx<5j~#u7*a}3+qj<I11@7DrY#`Xq;(0;A~XjW4Pc}grt$p&8fl;
zjBz)g@lJ8%p6n#9qr6ngNl8M9ZwABfYmVXf8f9-V=&C0(Jw7kErs3`+21k{~P>T+4
z4(3;NEmy5toF5z%nap;h&TpaNVYfgnF=G`rABWGTx99zt!g{1ZVtS!u{9#3vrhQQx
zg&ycKeLi@N!P!`*(>jOQpvA@M-hYSx-xw8`4>K_P%bzIr{?q8%Bgy$<fy9H)@&bDG
z0e;yT%%(19l}{XWocBPpC$jC_ap5_y<fkwxhHT+x&fr?$V0G*Om%#_=4>R}w@UH7J
zIe4`D*^TZpmSrpMeRl7d?)t@1!(yt&g9fdfwfY)NtmhpBpB$9vXA|FD*wMrm`Xi9X
zpn=uoHkTj6nOq09KOw9>2bgUdt`!;oc&Dta!X>0}P+VXgx52^ioi3&V(Z)4S-`2!F
z-lttQ>z(%!CPn7MUO{VxcQokRD;i8-k}+8$qjK0vz$4@jn<)=xX<d_DwvMpHK{=V6
z6|)*8Wxj0{YD(VA$iVi1f$#a$C&`m})TjRVf9Qe4Il(7VscA0+H5j=|7=5fKzt?OG
z+`}kzVv^{UgXhm4;7Q0&k0{h_S*oA1RYv0=&jSYk?=!^qG^lT3(bhP~EW^TPaNB=p
z6sw5?bBr3x0tV#()7xRpH_tV2E;+!p;{ex`hVcJ=7gsVHd||XX%Wl)^^l2yihlWsZ
zn<MH4o5U|{60dQTRQT9AGaxS5+2+AvLlq~Zns=fdf#wG{ud`|tpVD+bXp6Xsqs#2Z
z6+(wJ&oJtiG9F3zmKSr_AZMGBfuBmM`+bFT(k2E=ZA4vKnvw$@Q#ubNvN4OUVGu26
zHqLNN+m^Vvj7@*ajB^{DWHlItj%4#Km{(wa!_g(S$p3#a^Og|9EAwO(4ho&vR^qR(
zEO6wI8e=mH|A!^T#wAJehYyIqU=-4ioH$F*`$dnz9YgIo@>dV#yHqnuE^^{Dbo8@j
zvON06(4kc<hhJ01(Ph4@;ueG1{|@p_X~-}-C@iwxb&e5tM59uL-)w_strUw#ECPye
zB`57WDD2F_lh`EJ%jlDTcK!+%*$nNsMhEp4v}kA?<UY};|Kbo&1=EDBM>K01d1Vfk
z^i7S}Y04+j!ea1{Wrl<Jl9k69nl(xqoiv^Nze{{KvwWfB<aY4wv3KE{0xh>ZY^kU}
zsNuGBQYzD}N*{v-Qr<H01~JTbCC-K$EahJ?3hy`|c;vgmrk~;({~3EuA2eUXESS-#
z>*6Xtr%AJhQDn)_r0%Td=}Zz!99Skea7Jj9ZD!DIP2PB$&G^akG+Cj?Cl2zI98@$3
z*0?djwW34(tYesqM@37!{DV-L4NhJfE`~FdcM7EWO*o`(^Lw@RL5^n0^hHdC|EDnh
zcqFsp>$N8e!Up-=3${6gG3&eVZQ4CeFN5)U3F9u|m(iPAI2Iqztv$$F(y0E!s!Cwx
z`6b2LJq89V4%<XH8&uR9x<or1Zs2ZcoOOCBZ$qPy%3@I!=5-p5D)yF&GY-j%nBC(4
zwXgbM5<8RPfrEk{a>eg7YTU@^kh9JUIjlEl%cC2PkKC3C_H+yCyyM#AxbV;a3CE=u
z$_um<SYNg@pUhe7$PuhNaTojU)7$0#9NfH^Nqd9CnT<D?e_S$SJU{Un1LuSTJQ0j?
zE(^pI8o9POl!))m4lEZxvT?<<gS&(u|MZO4no}tr(rg}bby>+Hd5(*wJDLr8E~>YD
zwRz)YaKzbof|FLj@(J^H^RM`+c|iY<n3>R(L(&$EDL)TMf5}`Cq;@>-4ey-;3qIGr
zy8o4%p@qxlE{B*&g+QWH^Yt>*5)H3F+0Oh)A#akFpOfv4jWGBavSx<CL}mYvKaJYX
z$xNN$*U7?mhF`+2CS_9ARjsL>>OTKwIJLe?)eh6q^4Sn@kg3J$K-69qwKJLqA@ldC
zZ2Xw?|0oxSK*5ioAEG%C8<S5?3ynBCT|cnmo<<?l^YilhKBuPq>g<|w(%(FA=AMHo
z5nB@uZCfdPjqB=kpX(i4Z!KFdz1ly?W#{ehZx<T`#e3X6y83wsw?^tenVl2Aa!gh!
z>N^w4w31swy~eJzF#Bt3w}@WeogK5BJ7qksuFJihCbsinY?s4Zsbe`aG#rJDv$lLb
z)Fx|xd*|<&pP!zVF--cirQ~K;$b5ajNd^0UKIfhxt(o>;(N#-tzPXr`!rTiCP5J?u
zTB{ZWc&ZB9J*#SDk!jn!Y!-*&9<`lZx_dUP$(Got#Ho63#$*1;dnyjGpR4nF+HbV)
z0kcNPgWs?Feg0)UmHJ<MC9zf0&Z%&@WJ1;)^%-IRW*nYg@l11Be@MW~MSAB0ET48u
z$0R)BR;vkqq$L(saERMr(u+s@YC$_1d%pIaILM(K5unIv{U%_E6wlKo9~LAy1U{M2
z@v1|kQ)EiP=We}87LPcj!(KS`SpMO7Dv}W4S+G~UkE6d|V0FsEZoQz4v)y`gcQmr_
zxEyt0<koqys6T9hQ;)-uI-}MJUO!(PVpDzh!DV8M=*Lz+%i6zR4`r1cbmmsodi9on
zx0mO};F$r2Px*h&k(gwhu;=FTS(4Eolc!hCVN9D*`K&R^*skm4vYGxrPQ2_ivMM&(
zC>_`EsKfXDipAY``U;qMq~{ns<^IpVc7xJo^MYDsHsw7`(-NCjNwOuSt-5)1vO%1K
zVykG@(HDK@aS4e*Q-1_##*6W={_NC?Rd~qT`RqhutB6tC0>(h~4V6t?Arn>xCU|^Q
zUMKKXV{wn|mmkU#c1*IkA{<!Lx%uIWrE06C0v{<Hos#<XMTwrem!b>5dS3<8zMBn2
z?y~+zGF}OXJ*r$bHR)34^QFQ2J}YY&?EAsOrN7VPTjYm-9#5xaaQiO2W`1YMi?%CO
zznuCy*6wUOmnCtM`PIs$eSG{j?*f)&`mflW{8A#%po~?hXT{?L=>UU97BK^%Bf>Fn
zD<1QT<=s<g<}^F7K!aB&An~Z3hvidYwHXY}um7vhslV54WKz30{OsE4RkL5YKIFM(
zd#1vvQsQgHBMyy}rpFuxIiDs<e8{tEotoF>$tsb(i}TbHeW_g4O1m{Ii!<sKj+{^V
z+{*Z9xt7L^M$uOV9ac9EdimU7*1V_CwLaxt74L4hs2Pqs^A@=3&fCE(w=1D#jRYhA
zqJlnCjbqcMndVANPCix?Wx&XrlfW!`-~gLRfCx{)0VcyAhbkUCVE^ygRT=X-<W$hJ
z77-qm=D<0(zHJcGeR|SSuq<Mta6$pIS`{Og--W{sFW7tZI65?aZ(j3W@M+SY)I*`K
ze>U^x6f_&W>g8{iV3D{aF77m?Nvo`Y@2JwHRv80Ff!K%{|3xG#r*(unCtX!OVY=wD
z%x}phQpPJ7*b7cL%X|xHx0%zxx$A@Mhnj=jU!xrJf*5uSy?MswSHQ$wanU0>DMLKg
zf>ratfflYXX0zCYCSJ3nHX0W1S>t{%$4$G*rFHSW+5wAJy=Yb**1x$9{z-=}PWr&+
zX!?#LzKL08(ue8lYfkVN6gY`LdBB~vLP^PMhvTxmNdJV$!yLjB7}@h~c*=z_ERdSe
z$R^d$WOeBx>y1PKZjNc1-wyP!XeO+%)wG(HRgx%B|KsxI4+aL7A*!77iyAZMebCe|
zY2z&Zaq?4+(Ai)W#y+2uffA7=)93PdaxRjdn>*<Mi|U%90CSHf(I@{8aI6R{5-;^|
z;`<a3xLnDdk9WfX7P$)zvkO1X53Y4!HEC$%E@3QB+}is(?Eput$r15`9LMxN9bghk
z_^{G{@3D5Ht=*n{hs7r>=*aAu%Hk?<T6nD{t9)L-WtE17Gv8Y`dF40F(7(aJb$ZWf
z@ntTesys#Fi&n(0`=G$C5|Jn_^!t?Qs)_BAFO=4;{CmnW>Hw2W1Y@~Z#=#X@1&uA5
zjGTr$8ki?N=zMozg5<7-BTigJe3n<7wic=;ii<ovm>1D37^QGy_LU|UZYL)8MHWty
zJ|8t1CqB~G$<oo{<32unf>VzBgg5@r944w%xO4U-uoZF^@x>nas@-{^NoDftTmP3o
zU1hm1VYN_K0;^5H@=Sri7L9AG4*mQleuz`@*z^GDY1t76n^+Q$==CtP1zR|Bo>F01
z=<{UN+$&r3ZF|?G>n-ZoR-?&j;lT9l$r7$VZWikn>2eq=JUrlhK%m+D*vARCH+gLM
z;UvhB=py8Ck=4fMHUDdtV6)Z|=F~+=0zNOCe$_S2_us=fiAn4z^V1J(Qpp|ro%=qp
zg&x#4-7l%L_eIwnyIZX>uY5UoWt`vr;gM@<)k#jKQ%AjPt#~Ztr7m{nEh(t`dfn!S
z6K6tzlj*$!!n^-0;SQ^7;;s0!#PUu9tLKUhi#%hqg4wgL?7P$|){?sBcUuU5+0OnY
zW~uWvo<4oB)yeMby2`uRuMHP-hgr1i7a8d8nUKUcTPnok^#*R`-%__OPBSaIRC7PC
zBguR2Mt=7<4>~U_tGxA4?E8+n-2w^54_SR2<Rtz)U}^1@zW1@se23yfmJNM7xl1!*
zWbP%fSiXq5$0%O0QrCP#>|2TWNtcR*CR{kzXfN}q^O>RYyjX$LCmlt~H#Ezzg`MuG
zmwBQn{_})qT+!tDGEX(bf1ZlGS2TUU%rnF3KhI>w70<pe^W5_K&vTXcis%2AdEqGj
u>q2K-$zplgm!9FjF3r4GvfN(wRp9hrS60TAu8x;|9eMrNwYgFP4Auar>IFyu

diff --git a/package-lock.json b/package-lock.json
index 08fec91..84a39cd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
       "version": "0.0.1",
       "license": "AGPL-3.0-or-later",
       "dependencies": {
+        "@fullcalendar/core": "^6.1.6",
         "@tailwindcss/typography": "^0.5.9",
         "css-loader": "^6.7.3",
         "jquery": "^3.6.3",
@@ -40,6 +41,14 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/@fullcalendar/core": {
+      "version": "6.1.6",
+      "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.6.tgz",
+      "integrity": "sha512-Q/3pWgOv7qr/eVpuDz+05jxJZSg7Fdwh4XgQP8DlJFLp5aLlOiiKdkTUIO1BX7clQtYTm8P0v7FqMKbsFiQInw==",
+      "dependencies": {
+        "preact": "~10.12.1"
+      }
+    },
     "node_modules/@jridgewell/gen-mapping": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
@@ -1591,6 +1600,15 @@
       "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
       "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
     },
+    "node_modules/preact": {
+      "version": "10.12.1",
+      "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz",
+      "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/preact"
+      }
+    },
     "node_modules/punycode": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
diff --git a/package.json b/package.json
index 5b48e98..4ec38d1 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
   "author": "Tomáš Valenta",
   "license": "AGPL-3.0-or-later",
   "dependencies": {
+    "@fullcalendar/core": "^6.1.6",
     "@tailwindcss/typography": "^0.5.9",
     "css-loader": "^6.7.3",
     "jquery": "^3.6.3",
diff --git a/shared/static/shared/style.css b/shared/static/shared/style.css
index 65506ea..ab1bdd1 100644
--- a/shared/static/shared/style.css
+++ b/shared/static/shared/style.css
@@ -1025,10 +1025,6 @@ html {
   margin-bottom: 2.5rem;
 }
 
-.mb-12 {
-  margin-bottom: 3rem;
-}
-
 .mb-4 {
   margin-bottom: 1rem;
 }
@@ -1037,6 +1033,10 @@ html {
   margin-bottom: 1.5rem;
 }
 
+.mr-1 {
+  margin-right: 0.25rem;
+}
+
 .mt-4 {
   margin-top: 1rem;
 }
@@ -1073,6 +1073,10 @@ html {
   cursor: pointer;
 }
 
+.grid-cols-1 {
+  grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+
 .grid-cols-2 {
   grid-template-columns: repeat(2, minmax(0, 1fr));
 }
@@ -1101,6 +1105,10 @@ html {
   gap: 0.75rem;
 }
 
+.gap-4 {
+  gap: 1rem;
+}
+
 .space-x-2 > :not([hidden]) ~ :not([hidden]) {
   --tw-space-x-reverse: 0;
   margin-right: calc(0.5rem * var(--tw-space-x-reverse));
@@ -1123,6 +1131,10 @@ html {
   align-self: flex-start;
 }
 
+.p-5 {
+  padding: 1.25rem;
+}
+
 .py-4 {
   padding-top: 1rem;
   padding-bottom: 1rem;
@@ -1231,6 +1243,10 @@ html {
     width: 10rem;
   }
 
+  .md\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
   .md\:flex-row {
     flex-direction: row;
   }
diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html
index 01e2704..18663db 100644
--- a/shared/templates/shared/includes/base.html
+++ b/shared/templates/shared/includes/base.html
@@ -192,7 +192,7 @@
         </footer>
 
         <script
-            src="https://styleguide.pirati.cz/2.11.x/js/main.bundle.js"
+            src="https://styleguide.pirati.cz/2.12.x/js/main.bundle.js"
         ></script>
     </body>
 </html>
-- 
GitLab