final lessons

This commit is contained in:
2026-06-07 10:44:05 +02:00
parent ceea2f206a
commit 39ec1bac72
105 changed files with 7789 additions and 1515 deletions

View File

@@ -0,0 +1,149 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R /F5 6 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/PageMode /UseNone /Pages 13 0 R /Type /Catalog
>>
endobj
12 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
13 0 obj
<<
/Count 4 /Kids [ 7 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
>>
endobj
14 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1891
>>
stream
Gb!;d>>s9G'RnZ;36`-$Pg*M[m>@eG&e[f/#e8*c_olLB7Tbrj=b?;'pT3es@:Nt`MENk\G0bWpflQu?$n/hlq)OrH*"Lo_0a#F(E!sl9/e#J0a+<j<+l)8/omd<:7DOHW_YuhZG%0rgiWhSRTVs,.]&5&-PR8+DS0oVHO;YS,fjR.A:Si)_.-C?J?^`X(cT*WF'$p<)`VDATA`3g2YL+N;lA`f&"KP,%<eX0po:uVD.I<UR]fL_jak4glG=`F`+*hIQG<&oL0&ca8HnZ'X8lCkdKu#n\I^TXVN4M1t^8,f+kiX.[4dp1b=ZP*o0\4$c(;?IM)\YE=EVY1u)0c3gs.k,b+6Q?==*g-1.7ACm&5IZNUuuQ$$/Stb0Qc"V`WW!,a6_ULSkk#M!OUDp$`[(k@dT_[dsE&poj[;/g0(3,@RGnpN!MZ6nb&6^M]q9=3Ol,C.E)I2k85)2N"Ld#GWkJ"TLg;,T0&Bm.dF!n3tLURm:,H'bItT&\[QcrB8q(m]pQDhjq3Y/`B%H\i>r@\24BK0Y:B&!*TJ'Pbmb(4?7/5rFto\Y'O6/VLm6&TN86.!#.t;u-B.+T^T7^BX9dfWZN1@lZN/A;Q,uKBK;luOCMMk(A7RTq!ud?2H=/f+#IJdCq6V13h4`rjL,m,D,t-UUXCaX"TrKPt^3\*A$4J/;ft+@F;V&Op.m5n["5QH^@+8;agY-92[^"7#(\($l9q:N_[WWMs!P/s>UEZ0BZd&9S28>*"<M`q%^RO8IBPc[jJ]MZF?mc"6lpVZ_el>9GLO'^GQZqHD_Qn$kH6.5WKt4f,YMB1[ZicUUho-tUq,h7>JgiUDTLs/S0Q=SB+I7Z"i:ds3.r(V:HS0l_%n;VS0K,1`4+HV5<J'Q^l]8HfmN=2Y,W;d4Ug<5o".k_dF7B,d%a*YRX$-<JN\YI@1HU,nckMO[SgF,CR)=Q:odsDY1S#'Fi-LGO;.S9s2rf*F[g-ib$e[!GT#=G/-/=n-\2Reh$o_daCE8HYXg&UL4uP?f#tG-D$5i)@AF9/(GP:$Z;E\l2=/L:qF8?')CdF-.H(S*n?Mn-%Kl3;%Wq?:%Y#FZ^hmK&?pa`un7O-#=l6d/M/DlWd,pL2S[Ot7-p:H3>ZI-9iCU<tG0!m^p\uD7Qh<LFlTe;W/4/s1I;ZRq_FiGiuWrPp-b4,u\j'GOmC([gscr>3$3N1bul92#81"ra@7=aY_cjjhS^LPak>AJlehN%QBg`/r9EY!%kYJAF93*0Z%Nmf((b`'ilIVaJoq`7H$NUU\K__f#epWNLlqo`3S_D"K8=XdYq*fch1TJ$f7F:)/ZPNcM>-kJ_QiUcCSIi;drhLtV]CD#Vac(AYsXj#]?$JgkLb7)pb!o"I'e]mQO8\#T^$G/n@mO1.$J#<LOAsh]cn>BDB4&eulr;1#Je0"i67ZS]nhP89;NHG.e2S09q1kgj`aA'+3b$#\";24]ujQ.\[+2C_dhhL/81FV4OmXoh(2T_-s&F&=&@`mR[M-TQh42oeF8se*6pMQg?D3X\uD!;FVoR%*/Hj`"5"a'0,e'N#sB_6tPa!16rI)HeJG,'+m,%NDE[srPKb?`2%meI7%X*t,JiA?3d:-:MU/3nnL7]@9N<_1HBM9.mQ\qqjGi%RG#2@\\cWc_iXKM=%TnI0-kbu0M6UmHNs8R$i]30,nr;X;qF$9<RTq4l'Yf>#+0&OrPpZPu;Ji[n[kj7F51k(DpSYr@_#NYd@lZ_rR#^Uuf.FE-m+klH1E(*8BL<<.9""VgKjT=08Bq<h!/V)53L*:352KQ3==NBDasHPFp@*\dqb5G=Ic-E$f>Add]u$^^&U5k7/'Nou[Sn20^54cXp0""iqFRf_\S.8%SdfX$Ha#fi=;k09?J"m6uP$mr.~>endstream
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1477
>>
stream
Gb!Sm>?BfT&:X@TeG,iG)Uk8&"lIg8#C"2B%dOc]9i?_cONr#1G\2F'FqP@>!J03S:6aKnL/`SDq<HB>Yg%f"n)4i9]E9OJ":0_,,7nHAk^8#t3d^no=k'31F2;kugM'Nh>#+ku.c*h7odm:8>6G#^[fW0&$]#N#XT5<1chE8,$K:OH*WaIYCd2<8"iU'8DrH/cngHAqRH8a$C]=;f^7^/2ZFhnQ"1*Fp@HJM>Ct+ABLKQNTI2=q334QMI\:V/J0b=.Z-Le3>)"oh/.J;Zd$N@sU-8Ir2#b;!<5*lUgKJJTjSo=M0KshAO5GNP)V;1TCU`ATWKR;ar"^GBWZNA`j`qAK"?!XU-W.JDY6(fkSR+rd6'@aLm#g*Qd)d!F;jH<8K<ae/T'&S0BE>G?;/=2HKbijZT\O8E&/c8Ac@A\UI_Z#2+(_BU_b+;-8qL$pG</_0=Qkl>@!p;"##]8W7Wr8ce9Kq.uBDGNY2O6GEnnZOC.a-SF,ifeW+cRF;6f2"7L_R[1lkN^I1gatj4'K=_dATEJ62(8I%Za?th[a<3Io1SFFDAT"(rJ466ngmI.R3+C'8')Gl7&Y6p_ur9)*e-h&8>T%Xc0$e#<rC/D&+R,17iY"(GRRPp$<QtDn0H)jU\;q6l9J@Tg:2-9Jr]FCM7j&4_0[9cL[\"+Ij5ZA-N1A`l'pKiM.Gq9=;MK-J.2.W\D!?q^(N,f1)2)9u_2Wdi)%d9b^%?[7Oq.6([XZ=3HNIfsh#?\bob5ZEnZab*`7YkYq4prSm#rHY:j+<o&)9f<+4Qjti'H=Q[*54h',2s'G?)d)daf)F/Xi9IFmWPBhXY[WWB9R7;quZ/Um"*?O8dnAcSZ&rAI%K_p_UST3Pli2aX5\rKG+f/dCHUMTg9k;Fi;db-'S,1hNOfIj[kQA9[qSp;E%%D!=S(il48(kjKRd0S<0Kebdm;gpD\JmPuR.kqm/*!`f'<sCRNbl;'g-M1Q%&7Qq$9j,VBLBYH9Re'JA@'7IFVLg12OG:41O&$Z$H6&n?Jii^\e9D*FkJJNhPZgD>n.>IPM/`8_ec=E/95,"uf0@Jq'sCCOlI4W:c,D-e.1qm=Vo*j37\V>IaHkk'"'FSK2KjiFNG:FW`ZmlX23u[^-8VGLidP?C)AIpHBQh9!2eXiin?s/@Ve34A8l0F:RV0DEDi227efk9)KPhU>[mrgVC.d7MbjN\WXE',A=ru;3aBh!640SVocTHsf<$<U($S@-=$SuB[N))4PbWp$]9i3#"%1j_Wc-DkLjgS]T,c5>sk`rn7ltXOPgk+gQ\+ZPQD^KP!V>B_*/IJK^m^+mT7EjFR_NX)a@eTSpNN&e7o)/s";_&Wp?h>n5nuLET'5QeMf$Nfcq3m*ef`,G'`[T*n$3t^e\RZagJc-O8Sk4c=#Q-Z'K!U1FS@A8dI`:1`1UWa=e/_,[Wl9/@%;/#cTbsTGWPIL2O#&'e)!WCn%efl,^:$d^~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2024
>>
stream
Gb!#\>?BQ=&:Vs/R,s1u*/#WqA7"to/M+S4g8=LNf`rl?NY:+;au4'Cp:'M3:2D9YP-D`)&dXVr\^*2jU0ur<epk^h_!qsG:FT*E_eYnTEFAPR:54D9#)%9GG?c7K\*SVG$#K283Z_hiHGg1n5_3-'iP#C(VhFYl"2f2o:OURkY$V\f&DsgAmJu4qoshJShBj:RaP%f?k67pLkONU;?9l06F=:bm7Uil[cBW.Dg((BdlaniE@K68sjZ>G#YpdU*V%WQ0C,)<EE5e1TDr/<7E?c*]$iLEe;]*5,%!k;^NtTdJr+2U8Pq6g,Si'J"_H:CnfKBRKd"H1Tq:$VD[2_"d5.9asN=*',XP*u^Fi!'">1IMN4Q)Hqa;-a)aMUrbTNSmLh]YVop-j))\T/'Qlf8s.*Ds]9D]Qap75[]u\0g+4Z4CB2h8jCZZ?mI1GS8Q^/Q?L'[;t.rR4_G;ON8=+rME"c$4P'^'s^g8kM@,l0.VE52YXf'H-bf02L;KSY"E35HIBM87g(HE@KKI/@hjiI[I1R%rKu>:q;5b/<fNbO.P!es7B*>-.7HP\;@*et1oj*3>cXh@QYDg/D'>(]Li6)l73^6UJVPr,IQ$UQ0JPgt+j@pu!7HGYq[LKNCWXBNQ9!SL[5d4ZbH_!E$=E-;&)&nm79H9"X%=no33a>"^k0'8bVupBZn"\IqiV@9Wl9=GXcAe!nJYp"o1fOkPBD>ge#*"d4I?Ol4>j;GB%R[Ec9`&f6)3VlJ-:fd%r@a12IjD>XVa3u7B/&-_^GS_,pF.!atbW1%M/*oU`,B#8e9g/rr1s9qmVcmkANPT*2[bF*Fr&I\)Lf`C4_rD7a)$GL'BMChD-/:0H3gGi"Mo[bT8s\pfs?6:!at]$].pjg_j]VGM4b**;M+8o(a2%;8PErhMPcCWX!"FKm8qe4f1;+]^mC.8@QB#kA`b3.MDi(KQi_(>qsr8_>a6DG_8le;2rHr^:)\i5V[MP6H=6tF?<[bRn,7."bPVEl90?>Z_+A6eWh(p9Af30HRkR!Y^V=D=kPhFSQZN[(q'ioE0&q0b&`]4c2fPO*fFQMcInf`\=B>FM^;YieSZ*]KIdNhgsibdcjX"QM2G$`m/ZG:eH5in?S&,MIqc.r;OiYL6HJ$O0XGuNUuH])f%IldYtXd2B8=0EBs)RFdiM[VUsd^+NG[g07i%(1\83(>)JPeV"Dfk*4L,*[l7`s^9$`MO?N2Y"[(qn7X&>d&.<3F^=@Am"e;bTobU:ffHfi`=XiM0`bIh=H]EcJ=%[,uur'MWm=]L_WC\-V6!OlNkGp,EgON8C2bN<f^[]RTn1R.^H(amF!^l:rqO[X+_A1nuWg=<T@(c,"qX-$km/#)p3f]b\AC>cO9oXJrEj/h(@I8kK/<7SH/Cu53SOUfVn#s3_p<CJ6a&S';&/DsW*[kKo8XI_71Rf->6@2<W=SZQ,2(8mDG87VltYQg+%_Fb"6IhOgoE'[7X"ri@P8a7Y)Q9(2G-kVB"Y2l\>_ViX@[c^Bf`2-@X,X`9][F4:-/`pN4GDI4-s1qs!h$S.<S+c#SC:V9(YRW4?;p0);[1]hsAhIu9Zu^6!@WfVjNn4Zb`Mf-j,3+!fU]g\,^l\F,qiE@&IMSek74+.d^&g!s7cjme6h2-Ll*")"iKiUqUoJMY+7EV""iPC?B/MK"b`43A7*+ao(s_Ef4VOM4L^d[n16IiEGDD0L_O/V\Kb5F8De+gJ@7hrFB!HoblP$`cXPmmfG[;j3f/tEh3i[:\Cf?Hr:b%*4$GWPP%XT/946SubDlshF]/A"D$8e>R9s5INF71eK78Y@>1l?F3Bo0tNW"Bq,AC1Ui9@k'LW`J5`&2:-,;B[q8IEW[^mP;'fTeg6u8o6P_>ZDQuQOW;I/ht#Ne3"IS=_U_iWestYXLFm`$Ibf/>"uP!Xo<_R[_SC#2Q4T!W7VuVIc*JbdU+pD<kQ6nHh[F&VeBnLW:/UoUJ6S<.An2eSQ_M,)14i=fasVQ_5:1@-.[2B_7ES#e*Om.?i?A@Jc~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1152
>>
stream
Gb!krgMYb*&:O:Sbe?*V/gEt&7HJ+.1eeu5kQS$S^A(.*)4?U\WY4]nrVDO,[cKLB>%nRbYeJ25.*e>=B.g"<i1&<LklTcuK(Eabe:m)r-mK.p>Bh(r^'oh@h15;d4Q1OY$RGAE(DOtVK?ji7h2m5-![7[M9Mcp$.)<fM5sPN#,i$'O:`od_!l9Bml>sf9p3VJ)0"PZ5k<+.%^VqQMGTl#t3eZ16cknr4>>cE@*[;0f"!=6@%,ZR0HikUWaDs=#-A0'M+fBAhA(M1JoaP0JQ-;oSM_g1W+aR-KkSRm$&fs$KY0kWpQ!\*b2HE#]M:+,_NeL7G_ED-)7TfEq_pIGL;_L'DC(Zt>"Eu*,H9XmLBsnunV$#BO<e3BJG1SWf=bgK*"?R1,+?`>E8d4VWK'%-i38HIkO+`?@o0T<P_q\WrAHmEg(:c$U?G]rB/0o76/6-EqU-Pa)aRi%lheFih%3l7'%O=Nh)La$R1s7[d9?aTuf^ihMeSQ9+P727IVrP*HE1\2%jDLGC4QN''fuM^;g.%aQ#)64%<a+!l[6hMuK9_Ol3ec'@Lb6C#n$%W.!koW/3fEBoA%L/*ZIknSh\BJE`iQICrcU!6>P*LZO)_p$s7c[iC`YQAFhU_dmL4!.b`-Ls_+MZXa`p[W$7fTn\<S@bO+_p'O3;b:oLb+(VQ<-i]=p8gCsroBiHCaakm-(KW"M]46=`jGm+.bS-JklQ.Hi7N50ICbZ\PN7\mT\mC*g-<-De$=Lc>Hb$!m9.\j+C3S[,$PjDhV^bRH<b`OA&(mrS3pKY5/O<[G[e<NU58RlZ'FN]"fs;H)MbS70ZMd:BLW:<Haq5:pY6nU/#ul`4+&/nM'NWsSKBh>cc>KmiLdd/*4WkKEnEE5%K<.pbB'X7;/?Y.[h0^s`[PM=+p>f+H<3rEW[o=o0<U&?5S:Y?Qt0E`T0fSf6mXCK72L96m9"Z('Yk`cEYFp_n+JR$a/gj"pJ*.dHCMCo2$P@EekG#j*0Lf$"L\&,bdu*\F]<[$doSc[TjnT&4\GUZM:Kq(d-ZX&mHXREK;JM=_sXqMi<U1G`;hUpdO.ncI.%;GZg@M:FVhPfLf)951VI:-tAJ)?+<5@#*!e;0r<ap+M=-\LQU73@!.2^mEhL:ZBj1:Dj!0aZdNa~>endstream
endobj
xref
0 18
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000456 00000 n
0000000533 00000 n
0000000616 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001507 00000 n
0000001793 00000 n
0000001872 00000 n
0000003855 00000 n
0000005424 00000 n
0000007540 00000 n
trailer
<<
/ID
[<6c12062d6887b7f1fec7c33b3fc62987><6c12062d6887b7f1fec7c33b3fc62987>]
% ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R
/Root 11 0 R
/Size 18
>>
startxref
8784
%%EOF

View File

@@ -0,0 +1,168 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R /F5 6 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/PageMode /UseNone /Pages 14 0 R /Type /Catalog
>>
endobj
13 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>>
endobj
14 0 obj
<<
/Count 5 /Kids [ 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R ] /Type /Pages
>>
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1699
>>
stream
GauHL>Beg[%"?g3^gl)h0YE2Xq5n@s[QE;ko=C:$W",<<Q6fV!p9_S`THmIA>pYAt/^CUqM?H+n^dl0K.)&gT^/tK-cf+5R!TPm6$nNYIb[89VoAE8,\DfQ65_PgTi]n^Hrh-b-16@BlLdqj^e\pY_6GnU6OTCL>Zt:3`$_O$q%#@q`Rh1Ba;AjV]?P(1:WXakb.b`e;iA1sM6r\pO@CH1a$s0[Y-neSRKJKMQbh$h)f:.i)i+7@IbJe=iVsnn1fYq\2=.F&Np'NG==.A=k><IK4'';u\Jq;9F;BeQ.GD3c>A\P]-@P?q^I$8(qY^qm[kf'Y<`B.a*0VTd@d//$u3)I,'*J@V)I\i.c+<m=*pLN3#AH_JB$5S170I@'jP.A:)S0C;+#eW"6U3;f'k%>IGi,KZWb5;\8V9rW&,+o2d`V47upYf^=l@Raj&!enZ\3Se/#)?m/`1T%1cZUp;UsN^e44f-(.SXhCO1J=tR@eK-qgl64cd5u:m?RXUm7s#oOtjk#_a;3dM_I6$8`a8qm%7RX%cu+@",hC!0aM.1Br2%MTFiBE3nf<An2>4jOh@.`%54r?(W;l-,8,"Y0VDgtVs!l`KkFtbPZ=5R,pXAd`28>l<O,lcRia%Z4%@'a(bY<g/J[pd^'(fg]QFC0U((MuBl(DRJhZR-[&*`Y,nGqbB7]Ye-`#_<PE56K[KCi3.`*l[VGEK%G%IGX0'hjb?JDQ=drJCs`WSF3r:@KJlgfN&;oKj<ru$/)J3V?LH$WsV%%YmCZ/@#4>TS\Z&"K]k!m]g]=WF$O]03Pc?DYRZb@!*o`G<42'RmmWD>=)6:4@!,hS:$r't"p?Mut.k"QDkGnHp/a(e2Lu\FUd!EKKaHcs4#lFjNQpdo##s)R\;Hpn0G<1QGOED$F-PlYjiYm7iJFZ*a"c,'2g<];T+S.n:k'2E#>!k/*Fb.c8%Jc%a"U/kg(YN<b=gOH9q-1RUMP+N^O,o]KY2`O$ZiM&bAMs,i!*O"FDraZE`bWnIkPi4lbi8A]YA`b:o!$*?=nPOuF,h:PLlSY54kRJ/pLGMM.'b9%&15-c6$hBpL^j-Qr@$o^`]S%?8'c:T7T=BnBSaq6sqI_i4.`&q1/hp2nO&Z+*(k`44#]u(*#K+fJ<SRcln*H:JY'=^)sd7hte7V>E3D`Brp3+DZ3oje+TZ0R4$SClMkfKI'!FPSc3#PAThK*L=L")n;qNfAX+KZ9%6)sJ1:l4JKDiXN+0]^<6&FhWan'J>8&:+usW:0;Q;;]NrV*l;A<N;_)mC^V3&RC7K7o?=d]TWjou9WGc#4op2d!V!=fj3=GnY^2"%R+hZoNmmM;`G<DV-Wmi9=\fmR8f]R2s4Nu6e(98$-1BP,]iX%%:5-9=rD_\/&/nG0S2&bUK;JlhNG-)c$PgK19tPSC'<\r94bE(F_El[X#"G7?K?(>87XJFDk:sXZ[)]c6n#bihG-0,/.hb8!S-:5$Yi"*A)425[rC50+)ibgQ9pFF6eY\k-S`.e0rJ<)rp";+(^R`rP/MaE3gJM$G&7"o"G(6Q(f[MIT@CZ-I(5=9s_r8Z:4N@GLO]4"":YWL.6=GMC0WNq5rW<Ls:cubJaN,dJOENjZoU6hC1L;E-KoTC!hM'1M)I_Hf4l5'l*U^t"a7')$huS:s#<pcS,7c<[h4jZSP9.[e0u9UE$u-8bUnE:s?Y"Y@W;~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1486
>>
stream
Gb"/'D,]1Y&H8h>Z/q15[)]lE,l()fP'Y!,f;[5B3rU>i!t3;8.g]ndlaqA(:,9gsJgX8S_&ajBGIu2h55QN@;#E$EHb'@TE=@UI#)pIp*1.ua`c'e5Z1j#D\Di)3JV]DFL]`Keq17PBbJ71I76G#jdX["%";rs-L/A3rcNO=WT[7ZWgg`SN7>"D<$(7t`[;fLa`Asra`)eG"ID3N6)L)ik%6B/FIo.'N@#\#YWfVlh5O`*oKYb:p^RW+*r'Hb!H(Lr'W@IO^?GV<d!00h4Q+kg`^='tV(gk/T\P^]e.Xap:+bOp2DfhDNAju%hI>BP>/-arEne&Rf8l<6P('mZ%T1\aiEAFScHMb9k(BnN;*fc2OCnO,TLquY`<cORC?,0.;F>hV$1stD'KKDJ-*/G\j('J'171/)9Y'%BOS3.32iBFD7Yk2H;e1l,^W@(&J%X(L*#`;GMKDnKqm[8B=9lMVYI6oXs\_'Lh$Ck#,a)gC+HAhu8BU>YZ6]J1H7lrRW4ua8$OUc#J48%a-V5j@@Sj+2dLodL'#oh=c!YUWO1ToN`0Hs^Q+fPS7&-nFA3qkk("$]k,;.95OLR1'&T[^sR)O\'sJ8ld/o"U;p^Eb511)#_(8Dm"d\_g@jW4uQ2Ni6VsU2AE;A%':fW`I$T__e"*kr^W"TqIXe%reN,mmL7>HDAg/Use-`bQ^:.4ZJoBC;lKf(.\ri%$'Ls\le&c<Xl1.%dsCd"gMr1G&(Hk%):AD!D@3u<067#3)4Z_Y65.X\*3;;^]V()hVP\Q\T0-3)\A?Qb,p1)_$&^VT5!X7jeBn!E3rfbA:Ok9PAKgV@FR&iqOjEZ#:q+NZ"sU%qP4h"#CtMm\(l1iiGKoScXR09a#UHCglF?<>9QVm1ttdSUCs@TMg%U'X%Jmfp0nco_(,G0<nSU*>-Eh];GX@b4IopLT+"1\WnTr5f8iV8YI<M\Pr>p'mU7VHfR8!5m,4/T%(/jX(M3q>cWnrM3?.6IDG<L`mk"u10Gd/_-)DJ5QcQu0267a#7J'qY`pN/Eh:3QQ'j$<ZT!E2Aa&S89p^Q(t1lTNVh,dWRDtkAcE<^@M-0SF&\#23N_h"jX^[(7Es,_.(Vo^]F;bh]W'j>P0Zo-qJA,AnZ>O&i#L]g=d.nm5VI?n6ri,,:um)a7Y93:7>^644X_,r5lM5]mLrbsD'@8$jK9uf#&2K];Z'f.;N#<+<J("rthSZXV.4EImQ]^XhM$FRX2RgZujm(YO>p8>lAb^BN$LA2]n/2fTBVEnH0,oPGup9HAk)tl&\MBR@>Wj>#>1E7I%\i4+n"t4f<ad;g#+4l_IIh\4ffFX&s^],dk*JcnTVJ.0QS\U%=0TW8hQ5A2KC^%\e@l9a9O7-JR'KqHqaY_>kJ_OtL"!%_8\PW3.RJPoSW[$4+6elc(!j?ZNkH3u37=J6Fs*;/%*Aba&EP-g4!?-#09D$aD2RWD]MTDlCqTk%(Q7pk"!T$&V/D1g~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1760
>>
stream
Gb!SlbBDVu&DcY&VE6(u@/pErd&SL5S>L:rUfOhML8GN=&g&Sp.>bgR"$Ri"Q7?(_EI)BaQm)g[>R^%*%`!VSLK4Al"Q76)c7Ttg%\q@c";*?!Jle_`?N\.kpOipm;:P+r&Do3lOA?*1\<9CTq[=23M"1ZS`J@F+!fl;'O*Qh&q##6LJ9[6'8cV`4PtKmPmh!T$\e`5Ldbc)&i)9iO:Lo(f@FedBL-8Wp.;RHGKJM/#@?eRsqYd<Nn67g$76&Jr)#c(-*R77oF7-m92fPJB3mO$PIfcB*N1Lpm*M^KJ`-$aBD=gF:flE5\f$K1[)PmHo*?uX\MQIW8)ebh\M/oT2kaN^$3iK[Bm<MP?`p)0QM,UfYaol0u)&+"a3P5`O"_aGn)X5cg%Ef[5Gkb__`=mK_:%\5&(9mba=;T\>s/[D772K]8&Dhg+.1@m#eH.3BB:#@W0H:8*9iF,c#[%4C&EHYt9+W$DD0e3:YM.GZh&5!)O.S\:@2]7t3BenVMf-0dO:MN)j67\Zm;>:9n`oE8p$4j!r;QC0?B#tlV6J1MA6Au^$;+QpT6_XQj9(M3`8kMJ7qD^B%:=4kJ8>Nh$B&"VWJ7,UQ:mb]\;kY;5of4-4>f+1=Sk@*e]GWI^2NT(+C>dM(F#"neS2#3*cN*E67t86*U<n@K*:N\hF>'`@u[Gm#54.?m&XCPCpOW;+GGZde$scO4ukjkh$T]'Bu`<;*nRPV^:;_cG.[lH[=AdfI#fQo1XA,gdUC(*9JPl!YbLW8MXp['>F"sDitlsT`gk3"in+n&]8/Z-,[4UdSE,[Tf28K)4nH=BFBW&noU+ed:@k8a^<G"\#koo_oAn7<59<EYf2:Eap"S*^`6(qSk,Y^kXn(Kri,X.T/q0bV'^TeM><`0r&[&;e5D2nr9<>>`[9duS?Oa4^,M^7]+-M3E]Xg#-D=Kk>C'JREC]Pmi("DQXW4#J]Y\alRN3meBL7uo"<ZMLt.K7>,jq81AnW^&BW#\6bXUqm5D:$Z>MIsp6kN6D:Qjp&.dsP?L'Aurs`<BsdYHn?qnN#XX?;2_ii+7!G)#;"r,l8!_7?aQUDShjJ=G<+YQ5Ore'N"mNn-qmL@g/NEKjDUb_Hc7D5%T&oI<@lEkoOY]A/E?ZXQ;TIMfM4=T`1!bX`0(l?'f]E.jSOsHH_ORGYP(FK!rW0g"oglgD7@T7Q8%&RG/_EA[YDM\LV,+MU$=86(pZI.h"E\W(N&8jdcISN(P+C+gouVjjAGrV,O[LCU>ac?L-?n'eNf-7.HTlS\WF<)d$`UNdCORhQaJ\0)2KDbGhjjqToj*2l?QVXSi*3WMQ*385u<9j0EcYFW5A(U>gEBMprr\OUDd-K7$QZK1T;:`6l4GT,FnNZkg,$a&p6-frjI];,u#BC)X1KC!]Q532sEc3\X=gY3<]-k2QeilMc&!8rn3j\tVi+BfP'OVa@e2O#<IZ!o%2ZCi:l*D%#/:UDmR$9QB#(l$05&poh2o5"!$5Ub'7ZZRe-InJoj)G&!ZS/ujT':-j%\pk[@9M>N"0N?oJ-p0E>UlW[li/t/\MJ)@+AVU8'BR!^9[ppL*)P'I(0`fD]*N_28dd*hOERt[7?(X"@%bO^'"L'O7_RIcG675ra'Q?jkT>XpAM_CS?e=iqf]ekj[dBR^8Bfadt)@aaO,Fhl,.p#eXpj6U!pP>=4Mn\%%+iXD#!m;nf<W7-ImY>-!CAk<W#eaZNo^Pae;dln!nb%VO_"?@Id*+p2.]5e10^B*m!2.Z~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1590
>>
stream
Gb!Sl>>s<8'Roe[38pPu1/f@<nr8t_,c,#u$"UVAB0*[BYOIFW/_;o-ksKrIO4Lc+"W#mIP-fSBXjst3kNGGF.)+C"2ou(1B!?L#J8psI!u")<li[/FF+/<=pN[lD+Dsa+L]`K=o7AH7$LiH&7m(5ldX["%!"gt!L/A3rl%4Eh:e<WrjY.g.:P2ID$(9t3r[iG_pme*m5s4%cDUNb*Kgrb3pmlT,B)=l+3.l?C=g"nMP^.fbZQ+-Q*Ii>F7lloXZHtXb?^aS6MZup:&)b]ZGUK\*VFt(*K\6OQ?5WbgVS]+HF%*=YoRj5f3Nlo8kTio'&VCoTq2AYH\bNg9%:)4#j09kR#brsAd7*c_]%X[86(\eXiHPL9,D)S2Y8te+&Q1tU%+uKmKF/WV8&B^Min-!3_iQRp=028'OALrjka?cp2p#fB8!)9jO?!`o$:fTpJJfJ=,n:r[amd.3g<gG^%(D)"E)p'rml'6RLB=1bAgn$J</cDEObbg]KBn]9jZHee/6*.to/VoE"5VFFoS(,SV+Gd#j5p.XG2=?e,O7h\\kmBI6S4Kkl!ih)QMn5S=C0R:#D(li(+:LKU&D&;St_^9l/!Rq&8b@u3+M^X*.Cf1dH)7?]3[D,gg:^R(2/oO$cPXZ?2`S@S+Z-YXUdQX_ThIjgfQ9XW6E=P'a<t[Dif(U2qU1Whire)&JqF:_n!p#%@J]3ogX4__C%'p:G>@VB@>,JU/Dfj4Z7@af5W;/Z%tW$7IC;:pi[FdD(THYjKU3&Z/eIb&JGT+cAiR^D:"P?mkEbm%8f%:4jP2t4)7R$H/3;*==FfiNa0Y9$"%5.aR%le(D5IUl^oLmVI]Xk.<8\9!\S$H$(/d+i_7DCr*N6_.;?P.P*ekMF)\+a\LLKDa:?]ogg&];b+:3R\$P9s%"C"Q<O!'IEiC[W-=iOUP#/2K^6kKY,2a[ghj3'?)_;rmg#Yo,<RJ/]je1`gF9CsBhSkJ"h(\c,0)d]<T-F&2B'AfZ>T?H,.H-ud)&)G0^kJ=54f#e$l)Ka*h$VTK-$]<+,ca?RB.r1b(G3HgSA(Md.HP?&r1f@ge'c<73JrMWVf:pIb^9f.m_&kh^2d4Fb<j=olco423k:s:?Df%$^g(B;:c2:2`di"\iC[aNS?#W+[B>hYRD-\+<`X9uS!,/t'M,""9^B!PcsXDKNYMCU2-;Hod5MN%Wr#iCmqYA+q;uFH*Bn"[M>7"G3i^FnNSRaeg5bI1gY7_f<'tfT/dnPD:1"J"97e;?>Y7"o8c&gT/Yt7'DI.l!M*)VJHrQ1$)Eu<\CclK(j]Q`*Q?%&iCc,ULZoW%!l:2B%,n]f42ElEu5%2YGQp#a,5rWN)TH>mY&,*g\4kL?-0Va9%B0LWD4%=I#=32NOeOj+Th!.%-F>[dt5GfMAI#R*^=csOU2SC3.Q#:,DQH9U:+O,=gs.Y1%%MtL?4VAeD`KMi*+P3[E;HIg;iBD>b(*emM!N"c,#G\nS!p1[G`eFRLf,sL;pBGnfZ'`FUC2'X*ouo*/@Dqf:CD=3K]tnD!Nj&[k@b_MQZ"_,p-#;:^b:>/=iu4DKWf$okgb72BX@3em^B$0Vk`l~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1324
>>
stream
Gb!;c;/b2I&:W67\@9!P`fLm';L@(8Cr$1Kh26LB_m0MN523@hd?EXekc`l8Z=UYISN%&[,W6j9(@U\'n+b^1!2l/ss!KhBq%1h(":,=O#meKa%'STu@IRX>Um=J=^d?5^=9=Dujq#UK:dChENb'cWEl4tUTWDPP`YKie1I`30&LMDu!R,4pX9*!&UohA?5@dqiEiiH>Fo:q3FaUV(04oMN*JN1[aV`hWet@>iTjh7p-A#Y9K+EH:?c)8\MH)G'5(gW9&sHH-2c:Q=G6u%D/S9HgjVo&^@JI9NY[^X$S40,,qaRcno#l%;H:*1nBj*KPG)UgE/8hP&\IQl;P1bXAb'oObd3\JOlTQp2Wc<?.dH%8Qau5(nS?L@W%(RH)gj3=Z9Bm5c!r-@5_ubj+gP3KH(U5<QqJ4,p_brb,1)\Jc%!eM)knrj?Z9VRLCtpZ9AY9oBh!D2rbrnYFYD'8>ZM?t%"BFI$C8dhM8tTg)F3+L"N4&$cn+Z=k<YFo(RuG)R;676Cj4o)WJm$G9C@g`]IWhD-DY))??'j=V*ANJKOLi38e:d]\#"?_Q4\Gmep,Ib_)rlun!Nnt78#/H<&Y(A%W19N]=&f-T/'$1-jeO-UF8<N2oN/^u(-`nBTDiq$7dg'4mE_9?;%e.i;YEG_fhY$KY/<@Q/I0/ZCpr=[&F<e\MQ`*)ee</o"/a&Oktd*M<(fp58W!m,JLHs3/5)Tgl[rNCY+>faHiu.r1gnp;hPKfN$Kk$K@1E""_uaA#<UC.A&6eql#XJ2:!5h;,PYVC+Nf/"nBT<UhV/M3kZ-5e&ZQl]G"dOB:W[G)Q3]@5\!Z%3)VHA(MK:atKa$.?!IS"uNV"p.MmM-C)MW<GM8DE%kpl+E#,Ai4%?/1c87Qn/tio+2XEP:Q/V#7kM_/,#i/XdI-a_-@Y:Ch6.&ou%]#o[F*F4AEn0]lc)TjWuo<p]TB.4tS8^[MP"<D!Ld7MM3?OSOSlH4hG#Ej3!d:58Eb`RPt8E]7f3_jk3(gk'.B_'kl31,s>"^T)5/*'<fdje-L>SIG0@/Jd920_7:;?L5&2fM0.9_<*BUEpN%%ORLY1!-/sucS3?"WhOLE`CULh_.*X!?P),D:LQ<aOqL\=h=)_](QbK&pBU>CU93Y<.#PQ!.,(@Qr=.X7g?61P<HO7+<])ZDFW@,a6qugb@HurRg>,"hOOI:*471DO1ue?AESLp5:$o,kB\nr'[b(q24!Mr`)KpNp`4&ZR7P_?B)dSbHOT/.jIdLi0*P6@>4[I\K3mI-p8md;;>is3<F!;1[$)YjZBUhARPWm:ekKWnrFWpt)s1Rq3lM~>endstream
endobj
xref
0 20
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000434 00000 n
0000000539 00000 n
0000000616 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001713 00000 n
0000002002 00000 n
0000002088 00000 n
0000003879 00000 n
0000005457 00000 n
0000007309 00000 n
0000008991 00000 n
trailer
<<
/ID
[<ee21ac0bb53ebd0c0824ba6f4e8a65c8><ee21ac0bb53ebd0c0824ba6f4e8a65c8>]
% ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R
/Root 12 0 R
/Size 20
>>
startxref
10407
%%EOF

View File

@@ -0,0 +1,332 @@
# Les 2 — Lesstof
## OpenCode — AI Code Assistants in de terminal
**Vak:** AI Fundamentals
**Opleiding:** NOVI Hogeschool Utrecht
**Vorige les:** Les 1 — Introductie AI + LLMs
**Volgende les:** Les 3 — Cursor Basics
---
## Inhoud
1. [Het idee — AI als pair-programmer](#1-het-idee--ai-als-pair-programmer)
2. [Wat is OpenCode](#2-wat-is-opencode)
3. [OpenCode vs Cursor vs Claude Code](#3-opencode-vs-cursor-vs-claude-code)
4. [Installatie + setup](#4-installatie--setup)
5. [Basis-workflow in OpenCode](#5-basis-workflow-in-opencode)
6. [AGENTS.md — context geven](#6-agentsmd--context-geven)
7. [Plan mode vs Act mode](#7-plan-mode-vs-act-mode)
8. [Slim werken — context-management](#8-slim-werken--context-management)
9. [Limitaties + valkuilen](#9-limitaties--valkuilen)
10. [Productie-workflow tips](#10-productie-workflow-tips)
---
## 1. Het idee — AI als pair-programmer
In Les 1 zag je hoe AI je kan helpen prototypes maken (v0.dev → website in 10 minuten). Vandaag een ander gebruik van AI: **in je terminal, naast je code, als pair-programmer**.
Dit type AI-tool noemt men een **coding agent**. Verschil met chat-AI:
- Chat-AI (ChatGPT): typ prompt → antwoord in browser. Jij implementeert handmatig.
- Coding agent: typ prompt → AI **bewerkt direct je files**, runt commando's, ziet errors, fixt zelf.
OpenCode is zo'n coding agent — open-source, in je terminal, werkt met elk model (OpenAI, Anthropic, Gemini, lokale modellen).
---
## 2. Wat is OpenCode
**OpenCode** is een open-source CLI coding agent. Geïnstalleerd via npm, je runt 'm in je project-folder en chat met AI die direct in je codebase werkt.
### Kernfeatures
- **Multi-model** — kies OpenAI, Anthropic, Google, OpenRouter, Ollama (local)
- **Tool calling** — AI kan files lezen/schrijven, terminal commands runnen, tests draaien
- **AGENTS.md** — een markdown-file in je repo die AI als project-context gebruikt
- **Plan mode** — AI maakt eerst een plan voor je akkoord geeft (veiliger)
- **Open-source** — gratis, audit-baar, geen vendor lock-in
### Wat krijg je niet (vs. paid tools)
- Geen visuele editor zoals Cursor
- Geen IDE-integratie (werkt in terminal)
- Geen background agents zoals Cursor's cloud agents
Voor: developers die in terminal werken, willen experimenteren met models, of geen subscription willen.
---
## 3. OpenCode vs Cursor vs Claude Code
Drie populaire coding-agents in 2025. Allemaal anders.
| | OpenCode | Cursor | Claude Code |
|---|----------|--------|-------------|
| **Type** | CLI (terminal) | Full IDE (VS Code fork) | CLI (terminal) |
| **Cost** | Gratis (API-cost zelf) | $20/mnd Pro | $20/mnd Pro |
| **Model** | Elk (provider keuze) | Cursor's models + own keys | Alleen Claude |
| **Best voor** | Backend, scripts, experimenteren | Frontend, IDE-flow, leerlingen | Diepere code-tasks, agents |
| **Curve** | Steiler — terminal | Vlakker — IDE | Steiler — terminal |
**In deze leerlijn:**
- Les 2: OpenCode (begrijpen wat een coding agent doet, terminal-flow)
- Les 3: Cursor (full IDE-ervaring)
- Later: combineer beide naar smaak
Veel pro-devs gebruiken **beide** — Cursor voor IDE-werk, OpenCode/Claude Code voor swift terminal-tasks.
---
## 4. Installatie + setup
### Installeren
Eén command:
```bash
npm install -g opencode-ai
```
Of via brew:
```bash
brew install opencode-ai/tap/opencode
```
### API key
OpenCode heeft een model nodig. Twee opties:
**Optie A — OpenRouter** (aanbevolen voor leerlingen)
- Account op openrouter.ai
- $5 credit toevoegen — werkt met alle modellen, prepaid
- Eén key voor OpenAI, Anthropic, Google, etc.
**Optie B — Direct provider**
- OpenAI key, Anthropic key, etc. — directe billing
### Configureren
```bash
opencode auth login
# kies provider, plak key
```
Of via env:
```bash
export OPENROUTER_API_KEY=sk-or-v1-...
```
### Starten
In je project-folder:
```bash
cd ~/projects/mijn-app
opencode
```
Terminal opent een chat-interface. Type je vraag.
---
## 5. Basis-workflow in OpenCode
### Workflow 1 — Quick file edit
```
[opencode] > Voeg een README.md toe met basic install instructions
AI: [maakt README.md aan]
Je accepteert.
```
### Workflow 2 — Multi-file feature
```
[opencode] > Voeg een /about pagina toe in Next.js. Match de styling
van de homepage.
AI: [leest app/page.tsx voor stijl, maakt app/about/page.tsx]
Diff getoond. Je accepteert per file.
```
### Workflow 3 — Bug fix
```
[opencode] > De Send button werkt niet. Console toont een TypeError.
AI: [leest console output, vindt de bug, fixt 'm]
```
### Slash commands
- `/init` — genereer AGENTS.md voor dit project
- `/clear` — clear conversation history
- `/model` — switch tussen models
- `/plan` — toggle plan mode
### Approval-flow
OpenCode vraagt approval voor:
- File-edits (per file, diff zichtbaar)
- Terminal commands (per command)
Goeie gewoonte: lees diff voordat je accepteert.
---
## 6. AGENTS.md — context geven
**AGENTS.md** = een markdown file in je project-root die AI gebruikt als "project context". Vergelijkbaar met `.cursorrules` (Cursor) of `CLAUDE.md` (Claude Code).
### Wat zet je erin?
```markdown
# AGENTS.md
## Project
- Naam: QuickPoll
- Stack: Next.js 16, TypeScript, Tailwind, Supabase
- Hosting: Vercel
## Conventies
- Use Tailwind classes, geen CSS-files
- Server Components by default, "use client" alleen waar nodig
- Maak geen comments tenzij gevraagd
- Run `pnpm lint` na elke file-edit
## Belangrijke files
- `app/` — Next.js App Router pages
- `lib/supabase.ts` — DB client
- `types/database.ts` — generated DB types
```
### Effect
AI gebruikt deze context bij elke prompt. Geen "ik gebruik Next.js met App Router" herhalen — AI weet het al.
### Best practice
Genereer eerst met `/init`, edit daarna handmatig. Hou 'm tussen 50-200 regels.
---
## 7. Plan mode vs Act mode
OpenCode heeft twee werkmodes.
### Act mode (default)
AI doet direct wat je vraagt. Snelle iteratie. Voor: kleine taken, je weet wat je wilt.
### Plan mode
AI maakt eerst een **plan** in tekst — welke files, welke wijzigingen, welke risk. Jij keurt af/goed. Pas daarna doet AI de wijzigingen.
```
[opencode] > /plan
[plan-mode] > Refactor /lib/auth.ts naar gebruik van Supabase auth
AI Plan:
1. Lees lib/auth.ts huidige logic (~80 regels)
2. Vervang door @supabase/ssr client
3. Update import in 3 files: app/login, app/api, middleware
4. Genereer types via supabase gen types
Akkoord? (y/n)
```
Voor: complexe refactors, onbekend gebied, code je niet wilt breken.
**Vuistregel:** plan mode bij twijfel. Kost je 30 seconden extra, voorkomt uren herstelwerk.
---
## 8. Slim werken — context-management
AI heeft een **context window** — wat het tegelijk kan onthouden. Bij OpenCode meestal 128k-200k tokens. Voelt veel, maar in een groot project ben je er snel doorheen.
### Tips
**Start nieuwe sessie per feature**`/clear` na elke voltooide feature voorkomt context-pollution.
**Geef expliciet de juiste files** — AI hoeft niet je hele repo te lezen. "Werk in app/auth/login.tsx" is beter dan "fix de login".
**Houd AGENTS.md compact** — meer is niet beter. AI leest dit bij elke prompt.
**Skip large generated files** — node_modules, .next/, dist/. OpenCode doet dit by default maar check.
### Wanneer crasht context
- Mega-files (>5000 regels)
- Veel back-and-forth in één sessie (>50 berichten)
- Veel terminal-output (test-failures, log-dumps)
Symptoom: AI vergeet eerdere instructies, hallucineert files die niet bestaan. → `/clear`, herstart, kleinere scope.
---
## 9. Limitaties + valkuilen
### AI maakt fouten
- Verzint imports die niet bestaan
- Gebruikt verouderde APIs (Next.js 14 syntax in een Next.js 16 project)
- Hallucineert function-signatures
**Maatregel:** lint na elke change, draai tests, lees diff.
### AI is overtuigd van fout
Een fout antwoord klinkt soms net zo overtuigend als een goed. AI presenteert beide met evenveel zelfvertrouwen.
**Maatregel:** vraag "weet je dit zeker?", "geef bronnen", "test dit met de runtime".
### Over-engineering
AI maakt soms te veel — wrapper-classes, abstracties, type-gymnastics. Voor productie OK, voor leren niet.
**Maatregel:** "houd het simpel, kortste werkende versie".
### Onveilige commands
AI kan `rm -rf` voorstellen, of `git push --force`. Standaard moet je goedkeuren — maar dat is jouw veiligheidsmechanisme.
**Maatregel:** lees commands voor accepteren. Bij twijfel: weiger.
---
## 10. Productie-workflow tips
### Tip 1 — Klein per commit
AI kan een uur aan code in 10 minuten schrijven. Verleidelijk om alles tegelijk te doen. **Commit per logische eenheid** — kleinere PRs, makkelijker review, makkelijker rollback.
### Tip 2 — Test direct
"AI heeft het gemaakt, maar werkt het?" — runnen. Lint, build, unit tests. AI ziet eigen fouten via test-output en kan ze fixen — als je 'm de output geeft.
### Tip 3 — Lees diffs
Sla geen diffs over door snelheid. Aandachtig lezen voorkomt dat verkeerde wijzigingen in main belanden.
### Tip 4 — AGENTS.md als living doc
Update AGENTS.md als project evolueert. Nieuwe afspraken, nieuwe libraries, nieuwe gotchas → erin. AI-output verbetert.
### Tip 5 — Combineer met handmatig denken
AI is sneller, maar jij snapt de business. Architectuurkeuzes, productdecisies, security-tradeoffs — daar ben jij verantwoordelijk. AI is een hulp, geen vervanger.
---
## Bronnen
- **OpenCode docs:** https://opencode.ai/docs
- **OpenCode GitHub:** https://github.com/sst/opencode
- **OpenRouter:** https://openrouter.ai
- **AGENTS.md spec:** https://github.com/openai/agents.md
- **Cursor rules vs AGENTS.md:** https://docs.cursor.com/context/rules
- **Anthropic — Building effective agents:** https://www.anthropic.com/research/building-effective-agents

View File

@@ -0,0 +1,200 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 7 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/PageMode /UseNone /Pages 15 0 R /Type /Catalog
>>
endobj
14 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
15 0 obj
<<
/Count 7 /Kids [ 5 0 R 6 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Type /Pages
>>
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2096
>>
stream
GauHL>BcPr&:XAWQuhtpBcBnp5X=5ToThYn?FJ_W_e'tr<c#`[>TkK,q=QfN%+l%"EI>4:8O48Sk54eq8:lGQ5IC>-VZ?2*nE(r!b$]T+e?rNuT>QHSki^#rSGB;mQ4qnGaM8-'o+0>mP_$k,*jUko@/F!_]ANnC$A'r3L?!ZRqOdsr^D]tRHuAh4$W]MU*q6<%Nl;mRWEm^-4PUo``tt-46AsIC@@5Ru3^X9YK5/%[Y%:PXpL'N.d?h$QBCIpRMB\YRGliJ/-/t>I9?)?=3J7(c<[@K-W0]3PJak6H6-#tJ",+JgFf4Ds.!0oD3VaFbAJP=63;ALBXupZ(LW(9Kq4Zsoo/l1WE?(=*>i2SA[3<AQcseml4WU\Ni3;pG6Tf*i.!7)qo;EP][W0L\BaB\W9#JfORB1+Z8"K'Y<);)PfW@*ESLbi8(e0+,C]!rmdu'#%bso4A((C?-+EiLVE(YriaN!2C1C%2HIaH'ZI*3"905.VsYdS9nCK_/?k,#oN[+MK>]:J<AfSq]5ngFr\$d?#G7mkLZ<C3+G9)!6fiZ-aL"q$:=\^?NljtlZNk(&L9g9r*+U^O7:DQVo@iKs4fQM&&Hkr#h77a:kpo]nhSVti_;=]N2+'SS)[Pj&6[#2#T&8hj>/7l(;rnP*<*9^*HP)=DLV1&*c7bO-)o(nt;jc^J=O)K16A<'q4"ot+Ns:gjQh@CC>W<lCbkB`<0,k\a?C$H`o7e2L\-NGO#JAs4VXR?!H)G8aG9]iX^$93!O$a5\9,IQROaC?S^fq[oGJ;j!bq&hsO*?3!Yg30eLn<Om^*;'FueQ2&'JD511Y_gO&N[,0/FCZ%75_=jJqq^63m.gnTB.;h.SQ2=[1i(&hq8fNOMf0Rj#TWGB*I!.L6aLUEl#W?c1[DBudk'/*26tXp8Tm_:SVMg@;a_>B>]0=FgctX<@19L,h1=f?jW*[C;q/=MmXL[("a/6a?bIU-F)rdHM4*C"4](iWffQgG">8Z3F]KFNE8pt@*/72.uK5+""oA%W]K1d9Rk^i?43$6F6CA#U1g@`jl1Y%[En?:/)K:Ia@s"FLZ6rK/$b,6^];ka3)4SjbpRF&lS&e[cf<b0,5nmua,8-M3`'l4-jHqu6kN0&nu<]d<Ic,a1DW!e2'2N+h[2b<Zc+IsYuh*"%^kCqZ"Q(6tcM3cf&K'bC>a_a?'d]@gGc,ep5Y_*MG%O$Gk8]4bd#G`W%9W<@JL!\"sJaO0(Fq@Q[n&B)a"KOHaX1]l];go*pQ`Kq)P2DZP@9;M2\Q\;h#);C@0]e9)5e_/Z48JO-bP6jX:9*k#kF!+cBUIeY.5T=2M/XQc762TfmNcB,:>CW(Ac;\bqj+O+8X)MEVtiocb@^q0-O]8bBq<sTXNTdtE">mtJcTib/S[K_RDPLkF-3RV1eFGN(YG7Y%/>>eBLjVjG/7CXSMV=`VM,+cfXIZIb>`4T[gK3M[o"nfb,!I28<Tj2OJZe@hSYjhliDA*(&@-ng/^*`(I`UQZ-C*qUR.A)#9`bI/ssg6k'Oc81s-Bdb2Bh.;/3q/Ze4;NB^34#TQXR:kX-/NZ`LkOgdb;Q&MVDORfGXsZ)#T3Jf=f"3',[k0$l;3b+q,1[B5:q?/7T4oqf61*oFIRe302,=,#/@lq,ilb&"&:/hOShn4&'c#a)5C+(:@0=M:of;U/.u)2@j.l`PlCDV?`ba,i_eThUa(d#NHEmG)+G2;>G'nNN8p7nJ._2&Q0DI%nln/^$S?72hR^\6FJ;DS5m5\Q*L#$5Z%fj\I3_>XLWko.#popoVP`6u2ldiE"EVXE[KK\>6jr)l,jeO)]Mq(ce^#5ZsPR:Z'0Y0Ad\bNH!@#I_&.H9]+sBRM_H!WVin1b(=!^%EK7Pk%<oj6>;g\5Z95>ds_<$mAH-IJ\JhIH.nD8o4Z#ff[TJW0\`dcM,YZOZgo#YU1.'Pa.S_9auN7;GFmkKMIX/_W,JA/Y41OVi\Bk-,hLdEpQkEDXG^E[Lnq$p\HSk@38kVB5(A\\2_1qdD%=gdaHnBr1:(,;.bH(<75?OB@gVGLGWe&KL6G<W<5+IaEDu3f#okCT+j&nE,,u7:T"PFJ7fNMJQ8-D~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2092
>>
stream
Gb!Sl=a/Rh'Roe[\.:_M,R%<hm='-9V6j"W`704oAO$?`OYh/:_MNbjmu/"bB!^7PVDZAD\T=,+mULg)%nlpCVZ?/jE-u)F7:7eMb:stR>f$6okg(K+Gf4f20^QT^6NT_jWuho%UC:DRn3Rak&=C0Dp^T97AHY:9!5W`jDttLm9\pdm@/->X#7_T%ja)LPjLf>SKV3#!E'5jZ5@<Xk..opEX0b5Ob?ne7'NSdE_pro=drKjQ"t=XXID5*d07:q5nK$d!r%8-lhanXtikoIPcId^pI*TZ7(u3$eSJ':Yl?E>ui;'EIY?7Ah4t2n)dqP=L+>!e)&Aaff7k1ooLD[J[\VU/!!n1ojG']gXT*_+;kkG3Fe1_L%_[\EZ%k8aJiU`RN+*b_)eCuD/o?EU!'d8HYMJc>)[4G7u1._'gVU/J.USCH1FHd8oAUkV1]pomJbi$B=+3$F#ZRO6MbG50*ChUG0Q:mYlN/7fU0njG8G2]$D-o)*I;M[.%BeK0D)p@)k-P7$-ZJ)V0p^U"nR8eWp@YR\N[B,C^4>rooK*N`8dPq5eQG:ce<XJg&laf0J`Z:(7W^+2V2^Yg:UTtF^h^Z/C@+T)tJuQL;jXbCO3EtT[I6PFXHX?%iPq@9IYqrb7J#ea@A[n$@=H0D[%!RHJa!-Xc01BM!:Ei6*dk#*Bd%9sCE14m1_<:?u$^[AZ'@t]@IH?/n!oG@39dpK4#p7W,pi`^h!J:2pd+#@m$-b`c-aY,7]\&/P`q>:&0SpI]-t//f43"QQiqio&\q#m<=G`+E:K*]N\OrBnr$Iaj7"Wj3R4]FDZ@ga2WL!3NOA7IT57MLh1tmnMW\c.>Z\UhV4bZh"rIW;)XpG@W:%G0;N-Qc'2[ND@&k+pH42<$%l[`!XH6tW'#t@FrW<h,7P>XH*Lm#iU`bMYO/3"FQ,W_FR]*Q5\'C:gO"cJRhb/DTD,-QgFMa7*NCcn1qR0kG(]F2*&@bD\tMNqbQ^qm+0&/d#OZX3PdDn^&R*3L%SA">u0nJPs6<&l@bRJ'9k^mrCV8?<[(%du4p`GpNsFd.BN,.,"lOh%mBr)1-Vc3oB[cHq:/Z:D'\r'MWJ/q1$hIYi4GZZ?O?a`O=6MuZ#YW7"_ur#[IY?Xi)PNb;;,M_$?5_L0=\DfQ[B]VrS,4;f0[>a_UaV:[BN_\7jk*?j#dU]n@O-<5hLLiI=WJ:0eb3(4:E:n7m@<KB1C?#X)r73sTVq,kRV)=spjG/,fs&DXW4Z@.#&6`VC*]?>hD1g:&5C'WsH$._Weh[`m<CbK&@kZP]n#m>S"k=%^WLp*+u?54:?!+HSmJ5\iH4'D\Fm@\[3j4G&464SYt;s0\%C>2*plE+)MC)Y=^%5^PQem0j#CTl9fd+car-SOED"FKs-h)=M`5h9.+b@;Um=)W^eQXu)"L>sN)MP@FcpM>s*>]W6P#oiF_ot!S.HbSH@^:bfK(lR^^/_jch=YB;un+/+<0(#W/e_W@RCok/dmAc1P'M5$631dgsd2KoUMqPQ192hH/ecW"gR[iP]O$ONBV4N'rpZZfB7q%no+'CAPCKGZT-Xn-p=KSb1hdaa$#<ZsR:&2'I&%C:iOe*pV1]Z_77BEWoAup5fHS)2A2Q`f,ddT'Ng41`gkBdW;cE$eo-+s`+D'i[S;7,e3#Len1*j]U%m"RKKG+i^ffK`Jab8pa9/f-kA2i<S5+XRMFk^pBQ;(Lce*fZ9sO0b4Ii:6rG-YYbCU[i^E?ElJk_-QD#XHN-DihD"<e'iO^k'ILf:YmG.Zd^AM`'"kV-;Lt.?h&E&UO*O`)uBa-"39!%R/qI>pj.3r\F@j%J94ple].f1[a-2:ndO$%D!g:a(c2BmqrZUsf$A;=H"<2(n$A5V/^_E9BdrNN[2WAU*6?6BRMg9<3(1g]p_b,d\H95n+sGr>/oOX0`p=bKJ,BaB@:5_W;r"T5WObrfM$4W-qL<j9\>&2h'6WIqMDL3;(boh0OPq)g\[q2gHr[DpG382%!4OlB1YaaOW-b?^Xp]N'TnMr9>rpJsFL6LdD^+I<>M[=J&#nrjgI1LMCZHpYnqVJ<[/+B".#[]u91A%_SpFJ(+uoE,Y[ff'~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1500
>>
stream
Gb"/'hf%7-&:W5<EPV:0Ftl]h'M/bdK@;0:Z(h%KGJJ_/Kd,!S&m=j;`E?RA\*k_JZ>:nJh#qGs/N,/<(@SuLn)NpT"r(FGr/@NR7g%tH0OPk),@H*/(qbL]JbQ'4\E$6b5^Z<)O95f;pBUNHb92m7L-0">W?PLP&=O356Ob$u.E*"^#"GdZ#"2%_ZiHh'+LU!nmh<f'\eZQQ1>JD7`2=WgON8_/KNZ"9(d>d%5rD\k5q!+?!.u^?]KcA.&&6c%RE#tV;ts2M-Ctojagm"0+5WH?8aXa_Y@);YK@eC7bG^L@6]c'=kW:Sm(Nraq3K(mK(4k?uE/kg;/P*U/V77d3TE6qLq#n1^;io:5pB5P:Aq?9_*=)`FCgKMD)AS*[+(/uDgY!KsHSNT<[kY,0kN6n#K4lrp;CK,pYQS?SPO7:1XZ=CGbP)+1:m/2KAEi@RdLTFaZ(4XbD#!$#hN4i^e>5+@-jq=NZ+3mAG=qL(\qC;J*l?D?8l[?Y`_oTGl6`Zg)Q?@r"]aq%>sB!Lc'ZgM,P<(G@CY$+X1j8,.=T<_mZMmT.':Z9g<?89<p\5!RhTcZ'[%pUS?&iu2t>&0k[%9/]-dZs1;f@?jg&V5&X&53/t8ojHo@H\;Gdpp1#S5:@QQE;.!\M]P0&H<]t$?J_'4`o.Q;Q5&0E;qHm+.BM17_K?0WBk>I8U4B\'<S+4EK*'tu$WWJ.6oeqY49Ba6Nb25bd.%jQFROhnu';$"[I0ZDc\1-81L"9s(i?okOic?BjIPq=E=mOP2HW$R68=9le[q-LJb3*[9n[TMs"/)1AKGn<EtQ!)`R_(Mh6+Z1TBPAG'@b?#4+Cc5$3F:0?GJ$*A3A;<*,69QF`WqY8t<kPjsI`[h#&>[WC^mJ^c?[L2RMdq+'(!'LViOmAWfdL1iCJf*JE`&rdm1n1GaAm,48HFN6h@1*'WT;@c2[)lL!H*guP`)P$KNW2);)8&SfIn*7;q_7'!L:a^MWj^DTpHLXgs2)X&:V'2S=2f!781-tS3OAOKhqHA(OWPq\4(^CV>kCa?"SZ0[Yn\+elt>Fo]R)D]l0LEMB0`<MkTFeYuBb"=Q[fB<Kaq6[6%q:m^):2Deq=(`jbb]*NdXJFqioemkf\n65g!.h/<Qj(mBh7%>Rd'LK4]G&_DCe2ba\.N6mhE](5O2r<UHRgrZd:8EucKU>',YWQ!oLrJ.lZ\s`$F#']EGAR[r!URSB/i]b)UW;6G@-Iu^c*EiUf+C8E'I:<)$>$1CJbiT)!SfPS\3;kNj^A*LIjMtVgs7g;We$412_)d72`tZ=o&h]#dC8q$2M"5#A.YHu$q:nbgr=#ig;u/B&f$;@6W:q>)a+Agi'n-6tW;g+6MhgeGG=gH"4&)la:,JI-?JK]eNA4ct'^mWSJ]Xf](0,"`l<k<%U8!i^fMR^(f\kHHe''f=/b1;.D`;(YG^)K`$DbR\mfPUm^B`_=r9l0ZE"pQ\H0<K82l"m6__'B9]a_($r<$4BYWi~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1785
>>
stream
Gb!#\gN)%,&:N/3m,Y!`a+aWaSsd%Ipl`4P9@G<R6_"CMJgf=eTn8ArjQjDX.?KE5.o&u$PXZA'`U6mqT#Hj$."7Q^c"6rO7W<UlJ8lE#JGI-=d5*a&%K74V*qIA_J9WgA&e62WbQ018<"O^.9R+DsV@eY0+8hLg3)3r@3%p.k"A6Jjk5bYtKf"[8+>F8@34q-+,9c5`g*]0'-D/V&n\k]=6GaKY_JHrb$mf$APgepnKX)^-?o3MpMjJA.iHL]J3h&`E_AfUF2Uuc_Gm$Y#E$CUBP]NPl?uuRIT8eDn;Ep,fKeQ\3qFoDHQBOe[T4qV2.JQ%0YAaYH)FE;tMEFYnJGQeHAq=*kTV%k.IA5X=K84)ONGO\cZO"I`V7N7_nchN6L0'9W]7rmS$4u5aY<ghI-4D:lN$SZ:@?`&]`lajAR%%1e0Xuc@31dp%i($WXB/`j$r0Wq0h2k9aOAMQ=rK2=NP79RPLdWd&I&h!>QB6bi2R+1^&Sm(?!]P_2\r1TZs5LP4Rs)qfB.FqJ%SV]q%Vn/@o;;DS%Aj5seE55ul0uoP`5VtIZVAbPpl&e(6gt0jH;SL"k8bmRQ-$:U&&5tc.<5uoK"k'A:7e)@fbh(10G>?We%3VnW+qlhV*1kJV@-PWRko1ubOZ!O)Rm_p96"3N6T#89kkm0JS#,AWmbp^clM]P)<bJ2e%fpC1M7FBgBsNX(aEa,#hi.uUTu-CiWJ^jOKo&@n6AaN7#^AZaNICjc7#<@K2!D9^S3;o<NX`8F$986,`3@'`3&\8Yg*refXTrH*&<Xd&4E^rM%b"(]cnKB1X._pY_$fd!PH1.fo2K@$(^m;8a0MZ7]@4,_53O$1Zna\>E[K.n+TDnQ8g.pYl$RqnNTg3@/>Z;O]soQdTjaM&D*<&/pRpA70pt9Z[$9+.^`!dcpGKQ5lssWlR:F$VA#.^1o#W(G&0H)Ed.\q[I/aGE@1Zha_C4m%0Sg%sGW6TG8Lrj5\.M(qGN!6!7VJ]YG.&HZLAd';Vr<J_f:j2$j[*`c_2V9YUK&HoJRdJb,aMJpD;%m1oPlKYQ',keJbmmkZGc2$-YpsN7HOuk&'L[cCW##P7D<]'9>aQ3pUcUDVqgCc[jLq:19II1CGnhdEP46=];Chi4knKC?A/bS8$-OoqX;s^9U`2>]=fHH!k6QkHhu\)Mk[<r4[oLm@chL_<nO?*RFS5^]`"iML5/4Jp7.[,_hS'!W.`#c"@l6`?]8<\`kn$+Cf4]EjH[fp2leZXn\b1:Z?9O3ZVmT6Zh*mVak`diF_Z4]QkoJTTK_5k1T(cHo?,X4I@al@-o_$.h\9[Der.,Zia;r!ZNImh5\IjWf6NcbRpFQ"c`nf7!UJr$#d:[RF?BlE>9Q%r,EJ.)H!n)9h0U]6ekC:jDR@C6(]#Fq'$'2b/6//$[VrFZ/Z0]Z/qVjd^TIkA+/HF0g72T@F^Q9)CUb4aqQ>5tFP*.4.^H%f9N-)=pHrrZSh?%VRUJEe\o"YD[(Y8Qgi`n+q!6DuW>('%Xl[PZ+lY5D*hc_MPDA0t_q"J$dEQWD8:7%53#`$'7%M,[LF@6fZELKW"$\'Eh6>Q\N$$]ijC0R<h.W5>pV<k5A9#AYnP'bCftLJ:I^'@</61;3GuHT(POQ*j(UMqt&!W=2G2_F&SKlc[[4'8J93K0-<at15,6De;b!fH<?(8bkY;B:?Fd7,@ZA#<T;N"H&[u9VBf\X<o"$(r+[[VU@m-)^9kpA?.?C<FM8srS"Z1eF\B>*eao@"5Ih^;i2:oL,bm5+&^p_Okmoka~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1931
>>
stream
Gb!#[968iG&AII3lo9bM)&iWB&gVm=lb(\<*@Fm.8NL@KKIBrMQ%\KNL]7!"pla\tVV5WC[3SCs(;#KC?QU+]I'Da_PQ<n<_sBAc`aQR]jq8KmYMn/^o)")Z_0so;iWRa;3KVUmIo%GT*'?MTa?p.4oh")Ri!,,C5o9UBID4$TW"^d(9c+FK:d8oM"O%O1phIQ2"QsIP-(Y\,mJWT*JTWUkU@SlNCnIX7-!5Ai6*'#YaunR6Gm;aH2]lABb9Bf+Zn.(KhO@,+9*:eGpYk0J4B9u_/P9#+K_ZA,+'A\M8mN%e&VRp"oX1]7;_2)uB/7lF"E-rL>=>^I+F*(8a!kGUE^Y@C(hKC+G_Yr.AdcofnKco-oanEclh`9@_cf*@")9c4Q3R6jTe?#I=+Xa*RV\_:3H9\%2l_Ti(]=bZ/6h5+McON\?s#]pRkO#Z&O-Q0I\n&qFCQhid#Bh1IMmP#p2<^4q%uhlP9u@WUCHta\I2i0YET/q7Vi5Z,U$f*!2l'k'O@s5H2o<GSt40Q8J^2(k'e*S!odW6m&k]2HpPD!k]B%>Z`:N5OVq"Jga3W%9h0.PATeK#f/d*+'ko_7fAh[Lmrj'(NJpoYE2rmkjJk\oLG8a5Wq31;V8:JUV`-Yt&)hnAb"Gm<&a_1p)6hu(QUPb5SfGWQ<CLZH1EMY)([_Q:bU:o<@1V"S,/70hdAe88:-HIIf:VqgXbO_ZPfgR<ocYSQjm_@/r+MeQ0nl<RRFOe;JQ11-WmI<</95j2L<ImSX+afVLuZ;im7""o*tCQ5WO6dlAHd>klf<L^=B:IF@`*!kr@6p/FYkSRXKc;8r^C2QicQPY16RtJ,]6OLXh&`B*%oCHbTPHH\H$G1.U?K+6j/NLX@H19o83."h&eK*,Jru'5%]jU.eBIa=.PloU`G6c%d-.@nV&O;fgXXLqn,'@96aO>%7["Tad>DTNQM`d?=BieB6BQu`71@GViSHGNT<D"hWZdt4nU@lk*EGDjf4J5`E$n%1tLaDO:P&,V^Q>Yk3_p!_*t'>a4YMq#b0,joX3qi`F?<W]`!RZ0A*^i_n(-M2St's$FWjdc?j?gLgjq9+4\SR@#>%@;4#g:Y70!u(JOiQ2]+0W`)LSOXK8X.%"T3QR1JqiQQMrj.C0cB"'DR<.8prK-gls\M5;+#7N9N+-$u03U#-=8a/V%B)AsD5WBEq]D:;kXDpd@5]+kO;^9DmY0[K9C<\6_!76A[rn``a1?.j+;9FnrT1W7pfYf)k`O#(Kl6Eit`iJ.ic)I"?T.=-[-%QRI^dWuE@S^8a9$HJb"D?7QXJU=rc%Lus`\KPe%6"K6o35a#B=V30o`i>(no6Cj*ST)W-Dre<Q='ADWPU_/l9eM]7(bh>"R!I6)RbeDs[KF@\9""Z>n7gScQVS.44i#Z65<dY$>[X#>)X4E@Z";i#iO>QdMt]>836jc.gYK4\n=_81@p#R"k6d/QWVk,c2l56q^!Wh4"#hj&mtTSY2g^qRgUV>phn-?]&ZlHh[-?l)[^N=QH!cFTqJs2160C5I=*8_V\/Am4ZBFq)NP>7`nTp:!5hi,-f.-p;?p@qrF_*fjAkA\*X:eZ[Q/3U,g4[h-E_"S";=K]^;qM$kgbfoa0lo^eIFhjZZ6MYfiNC"%V\L+4(fp!/A,%h7222jW;+<LQro:W1%__gsQcVA,V#:aOK\;GFqf1DP<rON5G/(q,&XfAFR3aq8D3d^eOR++omAKA0<_1R-_+O(?J+k4lR!uIRO8fDMAHZ<i<Pu8sbI'gfX<9)-*FU2j1[#(p:+mSqX&Dd[[009r@"1OSIdSZCXKJV;W8BM8FU5W5OnN36`#A[l,8RZ8<q%hG`bN3+b-`=&W=L0$ELa$J=cH[cG1a!6fht<?)A3A.>!h\f-(/+[b7X`c+0dt3XUq6%-Udk'/AF&_@.G+S:0dr~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2034
>>
stream
Gb!SlgN)%,&:O:Sm-%#4-(9$TH"\R>dj1-8PHjDcGbtS*.gdU0YTRW4rq\6<h/#Y@*N,;s'.92=+E2MMfs;&I@+0%lq)^2/?;9AQ:BqjU-8TUgbD41EGWe(`kK%[2GN9!:H'.KR?*M>?q#r62&eK^s3-N=P7/"]Z7R$U0@n"d)!gfJtNLUS/K\>rA#HUd9O!5[Ia9f^3gj.b_6J&'/I4GT@n_NApp`]fYCkYN("LJ'#c"Mg;$u3JVk?GA.Muo@\d/S3.p(#s%'WZI2AIa3(L%/Ec\a,:6jZE5>0/8e>Wb4#rJB;kR^t,B3(f:Rtkk:kqYc>(#[@;PU.2NE0XUW!@#$3m>mLn*l$`th]IEHr$?tb%-#@W7':2!b7>?4GIrA,nQ$]&@kk'2TESf*Ho<7LuEQstdoJJ>"%P6!7-&2"Ls7h#itCR?TX_R]ni5=?mQK")2h"`sU>]*,SX"@9,77EJ7YJ'jdnM4kGkc3+gcfT]`n?LWjjjqbUrPr;H%)_-fC85K:mBuL9q8HEJ0cql7hE/psHQnM9I?,Eg5bO`WeKX#_e33q-Dma_09'SJ%o'RV,r[q-nli&'U#(i4l4OT^B4.?7iQ"A?!bTcXIZP/9,EDB3Q=gEb\0Q[D^%*-%hV$,\Os/!g$)3$\]jaMeWL%HI]A["AR"#ild>AAf<J2jZD,@_jSSmA*/?]-4FEX>J,B3216Qg30n3YHK5uTsETM+pm]N0crZsQi\lYBW7.m6`K,M`["7SK]ko0Q,"@Pigcb,U==.?@Ud\u)8#e7J_G.6>gAeN&q^j(<Y(f>7,];<*j1K$c'1+$=YGl4?<%tr49oK>1^SOo--K*_eYgH-N_JiA-1AZ46`QMY9?E$^jfY'k>3W;VH!Y8=]4<l,3pL^'^i)c&<6Adt@q.mGOc2F72P+Ed5@1*nBf+U)([5Ch\Zr_DOt%Wq)l(=-=/n'O-<?GQXOd"'>a#+j]"7/-Y=MQ;j5p5m7,4:%.g)GIfBX'[pB7AN;SBlh2m5G?:9>^S*1NIEJ&##Qb$],HD1Gh;$+[#f8@WQ]ZJh)VVC6R'm,[*^Y0r8qO>E.G2%tOuBh[q>9TU(g9s.gOM?-h2,^)9mi0?L72J/(B>Xid/1sB&r`m@gS4NFsiSblpo]@HaZ-A9KeXB7>e(WJ`Ll^>Wa[P?FZfBnE!XkI'A:TNY'n=mr\R18NMp4)Lh7L)5*NYONKjD:C[W7g/TVJOo3%-RRr"5B^"9GaYQT,g%X7QpXh"h$GWEC1DI+.0>n)`!NaB2\!)EK5)nE6KE/EoJE\.R:se1.6,3fKV(TD\&;<UnFD<+3IcR2,1]29qF,10qM<RTOK3'*%#f*mc4)cTgJCk#L0*_LiRf9(+*V__Kai^P09L9=&ae$Wjn_TZ&U\#i9$!P<6S(1lILI+5B(1t1jLci"A;DYmUXlX_E2A;r2*sc*ON."[Hdj(3>.-ZHT(8eMWq"b_6LX$YThsf4FhbWGeN%7"6eBh&%phhRH21;E67[PVPK%Y3*g/9`flpX80q?`LbR944bp3meIAtus*n2:)6+W.2"74bf@cGXcg@cOE2mZERJC0WlN*8)]_q]Q[#\#49s'>rXK8RYAll%LJ,MgGRf7eSRsfY,UM:C1Z$KOB<&CrUmY0YnX1H$S<<nR)ffh07kg#_<!Nn$[nXPFMBfK%MEA5YQ1]_E_FZ/PnBs&+s:TL.f=-@lOc-q=c9/NgA0FB2=AQX^9CV.t(B<SR'#FNjG\f2sVn6D'8.p:45:??aGf<EIL'p_qgX]8iYN92E@9=O_OoI9@n.SNS'&r!m]Y5?-Hjtj=Q<QCi_Fk-m!)\$$bh'qt3fNtN#'RkZPWo&+)kb[F%2H>ne@U]8>=4`J,]s4P?BO5)5/!K"A5BWJmk(Y;4VRF!*4.L1Q72>..eYn"9RYJuH9+aV%9L9EUXK'KT_PT/eYiV7HY=fk4f7dUtk&L"@6Rq,68MeH'antch(=ei,1rR,m"!(8X[>Jq<[j6:^NDB)FVkWTihTo`078_k-)m$t'5g`]H_`Jk:$Z04.Rf~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1789
>>
stream
GauHKgN)%,&:O:Sm,Y!X`hI]*Q'Y7:ju.@'<Uu@jLg3Q68:h"1.J;;:!K+0.>E30>CjRE<$1-cDZ\sMB0)^+i1TLL.-89c5J`jqH!&&F\Qs@M/ak=FANZ\-i(kE?rDD:e#)$f:/jQrt&.!FUT5P?4B'.6L@#ZK&@dr>^Ym7S'F!JsW85P)Z^@Q-kGE)J?He+gr^^kmK3>_c&ga5b)9S+okphUmZDd8?:e*uUgghBo5(eKAs=01mFU<%rRsiS-G=.qY`c\I^'7eIo4!L@;jK^n:)R03hp7)O/"SA-%nW`kd\_0MX'N38$6:M+VJZF@JI")6Xo'3sIk\K"Zljhh76t^6;$(8B;a#]aiE,n,8b]#`ZaLCP.`q.5`4V51D+D-(c>kU8h=dX$,p\qN&\]NrM6i`bK'J>]t^<NA&?0r5ffb#c]2O_7CMt%Q@#bZ@\c$2Ga40"'>jQQ,^,JqA]d>_eh34TkW$sL;Q@!$kEe,n3p8VN6*%hJJo:01P,?7>D[KXHUVirB,\:3KkT($!eUuO3V$ET`&4SUI6/eVPe+m8$?u%1Do:`[`^j5g/7704UI8'cSh)_6Z4%\3P`#V[Hi\Q<(Bs2[2%lnZP[I(M5o<*=f\74(h"h1uf(34BnQ'P9k^8lj^iLOk-q3!)RcA?=jK^2Q)DlA-d@D6E#4`nm:O#6F/cC0caD7Hc[Ersmo0B%gh$N/6"b7l5[Nu.Bs%MJZ'EkP@Ghm+\79rCR`QI]H%4-^qA'#N[&/?n!"pN^o`&uEQ\M3>-HKeEeG\PWXSX))\`Jg!l1u=4pDb/(rZ8@B!VVpKIF\_&'>ZspVOMhmSot`F]Q;a)$:XE8ZqN&dlho.ZCV'5$OO&$qF:&!_]A`blpYG(2/*BYS?k(n_g:CT+UhQbSn>mjf1>h\@j4R;!iD-\)i/pU0,VCaImF(f@K6rV%H0uq9K-Te2+CFFjII`:!+0=,OeO.2FNeQ+V1FJ/.GIICXA1+hn&$:mIPKejD"$#G9oql"<6>tC<Z9BEf7:+5?\G#'8+]TnC.,r<*_SMLg-&n>gJU8kITl6_$Un#'*Qc_u+q)0"j=;H2BDHeP\lP_:$!bpuPeYG$O4Y[[5Z`KGBXIj_$(4Kbj)buF5qebdH)VogU9-!sN"P[X:WJ:d;Y7/jS;FR[(o,K56A$udN8Q;H$?]][qM&Qk_Fad2(BY.H&-T1UFjWpQ"<cuaf<^./A(%_qm<I*da/DZD)uAq52??Oas0'X\8-">l:^'meBW6iD."I?IQ2;%;!!OB9XSNAO"1S.J^45Cb$E*Ajr:WL#"l*G@_PJ>ubI9fJHJMP=%Hc,a_H23CDl%1PL&L6nc!KlbJJZ:$.c>06Ge6S2H$_GlcEd`bHjr23L9`X/?bC;$KRlAd1Fas\6.NUsSpcF^rhALgfR2MVEai2!&rHk,\qA@pcnF3'%LVDTHTC3p,W8U\XYCL;9<FpRWI\".tt9!@5]$hRV?H^3P9ajDL=c\Xb;orakaiiMsL_>:!r4fG?YS+GcIlUJQ)NTaDARh<VJHt68!%4HoeICcM,?h[:k%G,OQl1).FDD?(-%S_X%\ts7@\0LmhICecl?h_Y@ZPbU\h0_l-L)@ZMh8k)WFF.B0R-sVbVAdZRin@p=6>&+_d#;#eG5r2-:Bs.(^['t(<[o#EA8CTA.s69=+326_\<GTo(6D5>)Lpt5[;cEih@k(FgXNHWpUXW?[@U%=n>n_+0$Hk(L+4_]3Ze*SL)EY]+ZT2blg\,]f+.*U=bJ%MA9>nQVAk0*XheFYn4#m>ln=n-%uVIUHi~>endstream
endobj
xref
0 23
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000418 00000 n
0000000623 00000 n
0000000828 00000 n
0000000933 00000 n
0000001138 00000 n
0000001343 00000 n
0000001549 00000 n
0000001755 00000 n
0000001961 00000 n
0000002031 00000 n
0000002316 00000 n
0000002415 00000 n
0000004603 00000 n
0000006787 00000 n
0000008379 00000 n
0000010256 00000 n
0000012279 00000 n
0000014405 00000 n
trailer
<<
/ID
[<073ba7643d43bab714be89d42b8b18e5><073ba7643d43bab714be89d42b8b18e5>]
% ReportLab generated PDF document -- digest (opensource)
/Info 14 0 R
/Root 13 0 R
/Size 23
>>
startxref
16286
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,225 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 7 0 R /F5 13 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/PageMode /UseNone /Pages 17 0 R /Type /Catalog
>>
endobj
16 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
17 0 obj
<<
/Count 8 /Kids [ 5 0 R 6 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 14 0 R ] /Type /Pages
>>
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1821
>>
stream
Gau`T8TWWE'Ya0?]VCr6,?RJ:bcQlb`0iGrC*eX1/i8:'Zmefu.D+iJmfPLFX(A,!/ScL8]_-Uj),P^cjtiP1r&0,hk6r2_a]Djn$"<B7?;6$`J8iV1(]b5;MO4L&L&6LC(0HA<OYMn7BW?kh+bZ9rX^_e[cRHgIPQnic$Q'F$WR;q$bp'.K`d'iqkK#\0Od,D4q+a-@`/BK=UdHlkIjBb1=JsY6<J6%284>5#_o_cdT.f+s0f)gU>nf;HW_8O^fC4K8"i"BZRCP8%YqY8m0Y)bV1WNlk1mEqi7F`m82p8:K0]d.Ejc<r<f`]r`_FHFk:I=VI/h%W7E?rp'HgMbC4?!d;'t$N-OQ/c'30ipWaOjAum]Rq4_/R5X+>etC46tKD&W4O]:h)%oG7DcNPr'?6c@_/1YX1K1lC"IL758i\m.PX1DA=<2>R0Im_R/G,Fm"Phd9oA;2?#\n\Nl<El*9Y]&ZTQ@^$\#NFq)ZM'rUqJ1$Cg&:f!'sB&B`&,8QDt1!R@?+lO#k0f8`_Ej$8Rcd.`/FKpD4ia$M^Y_rP,Pi)TWMFa_()sk9p'o3X84cEI9hdcl@A-B0(CeS<`S,c+Qjg(tF'(1mNZ.@Pt@f`PWQT?f9`Z'XTN[,W'g]b'qh5cMjcpg2_jK&8B"ejZq.!kd*RO&M4:1._HN_#B+:-L&7033`I9,/[^S>M(iAui9nc($HS1mo:e-[E+`%Jl\<-+pS`Z?fdT6cj8h^F`/t#_/B'MgT.'e3Im]dGQDV*9P-So94)#F.&?IU>Fi$EK0,]egSDHUbQW9_!3k3@b@nfoDX,sM[rO0CRAU'M;-Cse,ksu#\#"A$/TOHYgpqOEb#\?3A\c6c`Ci_l&BZaT>(X\gq/6Z,Wj9<"i1OqZlmZFRmNX5X5sar?71#9m**6o]JXY4AiI%7N3R>k/;bA&S%i`Z;o,1ZDG5q3/BeK#__o/$ZUd\e\g>"(;\+.YQS?FLK*?Lt)oG2W)tp^*.s@!VXIDD-[ue5+F]hD)Bq:Xo,ia9jG_N^RlHRP]qE%'NoGpM(6%[K`<\R6!bfiFO=@`gY05Q0caS3];21p)ol<SXtfbtN(<`il&ef,Pl>kcN#WSqGcoYeA<FkY?U*2EEC-dcnP#>^6K[k<T+ZJM-BI$;Y8LsNp1771FF%Y_ssXS7Dt[8TUIkA;$nGs07XYKF.9!#1?+;637/:6leMoCMVF]UkqNR=U2DkLaV6M!V0_R:3E&pBAFX30d@gW_0MGhkR&%iBLYn,MRn[l`rHKof"FY@$@C>8Wr0GR@V4<b=de+Mg\Xn'&Xg"IBEP>MB:GPr16ngAnR4M&Z9d5Er=E<>Vfd:$rt'ggs:C0r^7K^Mo<e_QqcN_.4m#Q_3MRflF*7c#EO(0L<&WKCH(l4F`!esDPing(j.q%Y[$Tk$XO<;EF`eDG5DI`iVO)A><=M(A-)<+S.uPm09U$Jo`*&LVcTaqZ+:qu/f%D>c#0k)YGXP<c=!A*(l"eFD/.a<g:&`rT5:c@fR#0_'9gY@!t$*IX+ks6^-5\1hjC;tc0i_50P$k(%A_fi#Y&gD`0PQ@DZ/+Eih7GXh*eEs##[Bb;g6SAq/MqOOK.i.me;\&FR5IVok+u47,aq^'6$HHFdp#HrCZ?C<!*Sa"/?pnVOeXt]\JmW]aiQ8g7KIonNXYMI<GD+$+OsY-$jW)mY>;4HF[Zlc'5kWgpIqf)c*,Q6K;cASSfbEf[.kG*Ba@4W-uJ"g`S2T>r-I#eoX<e`**-?a-tprPR/VQ(`u!iUkb:MSgCqN!E-ct_<K9B8*_OtBZ9da@ne$92X2OB_pp)D6guc!'C1M~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1764
>>
stream
Gb"/'>Bedj&:WeDbZgXF=gY6[NRRU.EH1A&[2YTA*rJi;/@')sU8s"#aiT&$lll`E"p6#/H&1E%H*oa.q.<)1*;iY1Rg]=(p7Qh%JMQEuJ9&N#pDUWVepf9gHkpZ3L`8Bm`.17Yq#cnj,^;NC,8O,^SUc@o#9HbUL/A3bcNO=Y5RA8iDc%X.mfXd=&lR$drMB*<nJO^FS9Vai/Y90,$]TBCnLNj#bioq#i=9$?ePLBKEMs[ucl9j<l.KDkE*T359Wj9tLHi0ZagHjr`WGr2"F^prOV]79SjDfLHI!%Q3MP<,`"/Br+jo=i<k]=6G"UkW36btBClZ@O1gs+qB9c^&o1A.+*)43)_K5Vqn.!G3&K8c[JQX'8r#KR_&YMQBjD?X$%sU=ah;NG1+0a[X"gs##3&lX)@F\GUW3FW&;T4Vd1g!fG,IcBNOGhP8d2,mEoL3d@kIH\RW:n`J%cBrQ:u]36-fF'mf0/MlS=Oh1GG0A4IWg1fH!5S[G[NWp2:gc0d<N;Y*k*:6>2saj.MVOC7fm?/Ia?.lP:8u<8BAN,8LDRhjPap?3=V=C4kX?=7/(hiCp[a*EK^"6$ROe#05Z/BW4n!c>cD^dX!*["a-0sl.\r0;C`a$bS0We6]"D7CoGnA#=@&orFHF_"TiJ-X7r8qf[rEn=9j,P+&nD)c1&`<h)dBE7QSX=@l`]?c6on!sj.=f+dJs86aW*+W5+Ze`$#MB"_RfSk#]@.XDE]]@,n5Hk6FrD+P_O:?f6UZJLW%Lm8>.E\&0WD[DEf,A&u59ni)$KPgOClKX^mF\m!M"qC0k*gc1tIbQ9n`7L7lO!nRJk"]?dG2::e+On.$+J=[*9bLdX[]S-tF4L-[P[r=1AE^q<Wb<[F6U_iIR$6$B^if4M\"XE[TUGnK>gaN(%4>c/Vs7DFO^!b!.Q7kecL+IG%qc!&u`TjnSXQC=tn-Ot?Pq3A2@PI-c9QWYO*In5<'P1NZ=*u_#$O6=_5Dc%.#Tj;]-1QJ/o+E2uil(".UeWH8iZeM9uh6MHiq:(Md6=fKLOKcTl3B'>O@[-]5e[-,>gbXeCSEHpti"9=8XHBnDp/iPB#;5G@Npjb9QA@EpIT2P63NCMqjFt;43%`_^cqI8S?I75*[!D'*+t>JS&$CU'BFq[3&LnOL4KLquFn(M)'8cg$\6Wf&\nk3Z\/Xigo?6K4667Z*nS$DnRCYG[bVas(%C4<>3,uLtIEfM)A`*6Z>Cq%1Baj=Sq=1H^F#!]0Dere5#:;X30j/DRHC#3kia6!+8(Ugun/bnr[4W_PJ:T2)nBFbr)I#hiSj*%k7#6DS%a:M-)'CnKf09)m>qj1.)7)!/$f81QC)UJg/(/H.2(_q=?7j\7K`8sXLU"3l(YTXZ[L;uL]'(`^U`'S<>6e0U(P(nK:jFBVBjaF&1L6q4WgDR?_dB=*Da"(>?K:Z]bs8HcT)iOU.W(p_`gJ`APD_74Eq:oP@DVurA::21DK;#RI(*>ih0h8?Y3peL;n_poESAQ2^L]@5+O(i0oS4'Ya?biA=$kRoD"@2f..m8.*SWh@IlHc]1u?:"]+Wc!bPiDcpg/&^2pd9IVTWBk[463*>Vkb6!0oA=EbW@3*Eqeu2nji\CcC11Z9)9l=23D*ZF:>b]FAt%G:IkSnO+4LBT0=chN4g,39n_3#^`$Wh%#rG;ek5Whrhl#Mo3CA@29)oEL+AY6G(@4(g6rcoVi&6k5FP=4\I$q&+ABh69]d!,*Ip4N>abt`+:C?7E7d]J)=\WL&~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1892
>>
stream
Gb!SlD0+/q&H;*)Ylc(%[(4t]FJhf@#"!jI"U]86Q[DZ+Mk`\+<(V?cPQ0LigW=Ui4392'Bq-;fhL0SADP,as@mKS%l@4F(^oIcX^L=o;9TFZq,%:%(lqKs!NsKs?Oq&%sWUMkY:K0Q?:Ib^N/oa&B1!il3XX$H^Lt8.%Nd=;P"hB3EB-RUK\Q!8L6o2m6mO`iQ>gCa(,`_2:bPJ>j\oQ+ADX/=Sg&*$29!C3%M^g!GbY\jDAha5Rn]O,/9;eWm:=:tR5Khgb-RBaQY2JD*]J^QQ:,A(uKukc;SlH!W5c)Y[X/K2)I<Q_IQR4q4;#]s^;<!4q6hl=5fKm$[oh,UXBST3MHMi*7#R+AIZ?lAVhr&n/.Up9Lhg>dk=4-79JLH*'b4Ze%$B9[[QDKF0b$o_LcU1SG=05#K1Yu:(Co)&&oa#b\"jo9G..^\K48Wi7TN\r>/iF'r\-K@&<2s)F3u3mQVNkUTA<XnW<)PS<U-"cNAB,O.L_,q'nbeauNi_TSi/Dr@OS-DL+B8@RNu1_tc[AN70\Y7g7^R@d`Y[rVX5?Frs#1dcN9V[l5#!Y1lf-H*U-uKT3k*HWnMoP]GbUerHI^'NK[Br;j`PC2J,Qr>$TgMA&)g'T@AO3jq-b*ddiE\MBm011kOm!#8#4Y'\&q3iE&Ptio-E*cj"s8fa2bR`Cr11lknAYk3,'G&r3IJ7k66J$c&P>M\3fE`IFMf\'bk@%L%%&-Jg]k=KHNm+hLOD:]N?i30or?Od[JrcP7e2.?Di/$9=0[ooO8KK*KO>5h4*<j;?J3\^$*Ta4"Z"d7ppRWNq2f*%!Ktg,0aPai;6(c,mO([#RfC3\'3m)IQMp<aEh&>*N\/3a0biW9B=BCeK!;?d-2d?7AI/c:#(cDGIX&t0dD<'9%oTchNFG2Q-a=ZqI=+M3&)^!RA0>;E6o.oqjYO@mgr-)BfJ!&Wmj!^YmF$4EX9plo%t/l6HIErXh6ZOe)5%:m/3?k0('94Iou'@oCK:ml/!]\R]sLt<:UMr4Y/T@f9s2*P<TNLB'D;-oXOhh]ib^%;9*,:]ihq"0ip*aS#'kRH4RTLW]/ZKgRIR9mD3ISlT=k'KjK>$ikjb.p\lnWs/HHD9tCB=hp5`j8+C/TKWofB!(#rfKdk+!>K[hH?Ugr%6gbj/Z96A3bL]0tV@DMiItlc&2.W?`fn(hFT.9RbkhiM65E%=6h[AdkKQV:<(>p6%&rI80lT[W[A@,sY;"I(q1nbn=/<LpU's\n5Obu^'`=g:QclS/>[_=P[(:IoL-J.DNo1.K""%UhBC$o>H0oAP+D+%+.'i3Qn@Ja^`"Jq0.j;+p`=uq'9rL`lX1'gQSej[X?dIHlm3/,Q2cc@H>9*%cb,89N2]6uhUWbU;UjeCr^GMK$C5l48_J`$?-L?G8Tqd(W!K%"N'3`+/_4did`[WZj6/L,!J=0Ic1??PKU@/8Ji8\#_,dg%"BmRCTl19(enEb1UG\9r]u2-'E,<T\>@"f<21cDSWr,'2NmGZ&igV/O@RWL6[gVQ.,F][NCSQVQ/%4Qs/VYT8`MSn/E9=5YVL_\VWYYLXOSLi5'%!VCMVck^INY#ZOn2]6<eqZ8ok6aJcdG<O8V3t'cc`IGt)e!0`tT226C<Eb^QX>9-[%]e&@g6+h]m57NR'j9m1,OTPf2WD/;Q08csZY69"7>Z`,m8Jf^i5=WFn/%=u)P&mRWn.-+J#Bfkd@(FoC0YI%lAJc(AI^o=*>&N/D:P*JCoq#R3#Jgk9J@Y)mS'j$Xqm\I$=I.N9c[Mg%eg01Za/FdN;)l_GC7q<$02T/O,="\#lCqZc-'S#`*6;bm0S3nA^"M1H2A(`&%eUMCkYO+ck<5#]hAa=l6q`^VA_K0NiLp:p8Q4e)b0i/$W'G\~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1651
>>
stream
Gb"/'968iG&AIa;CickO-4g0?!9nYf9q6Hk),F2_8kutE1*k>C5QrE5HTM,o?19/_Q7U/*A9s&<,XGo0mI%FoL]PIR.t:&FJ@>XET.s^n#%M$^nR-;Gmg%->LN()+k6#]+l@p9Lkh6i?M5.m'7"d[5&5Yq"l%'X)&d2VC*9To8,T$^FQOX*A"dOWD,[e=l`2!,\&Y.n0*q=pi+3q(["VtE87#_[b<Z`$1:U"$%<iYHtb'`Hk?j=;/5(354+4?"g7Q5%M^usLOd7k*<c6^.!#k-80-0\[&@i4"<i2'_P,LdBc#YF-XcjrR8rN4;NP4E6BM0/r-8&>FuYRr%'ND$j7"?uM*oQ\!S#R/P3AYo5"B4qfj2($!8QjNEA`jZ<WZ%d:arg?tTe;NJ\r]HVtP%T"3]gb9UA-LCb:dP:Q=s"q:_C,cq3itPGcF6Pid*%+>3$,r\nYE6+hMrnB(Jm253Rk?$&F*-G*=80I7SZ&-qa_>hGq#a2$OGkhJk!6ledo.og(>%,]LX#sC'C0_F=E/$f,?Yk#q!KH(2H'_WQk!UjP2^@]C!3STlin.7M-q4c-q].6P=FZ"h61I0'>OB,'>h?9b,ci*#2$Tj$Jgt37Z+$R2YdRa7.E$:,]sK)Td_,.1@n@o"o)8oh7f!U.uqSSO*97kkALs.*b)u.Yij!]"X\;$qcrRT:TAj3SLn?h8XQqe!<rkQaAk]_tkZb/,o9,U^D,GMca=:]pZ]R\-pknN0^plVm&WID_kTR+-RFVn86Bl42;jl.5uj#)=\RP=D+b6D8B8,T,&bH%D#/kF"ljdJc`&`P$"auG]=X9SK`(#;P9eQJtoKDO'ZXUKt;b(e[OX%[P$GHPaPr\9gBSK(:]6?+([W!T7JFJ#12?AMMk4)c4B_0;f`r9mDM\*5*q\ph)fuSnk5u0&=9p0Y0r$P;5>@2eRP@jG(`MFn,!':_W.e`*%^`PZ":mo`Nn(Q\ZIW3B^6%tdrl5/ZG(BOkpGQH,:i#-Csj1@rSAWmGZ-,`BDn)Hn]S@OmPE]\C@<kU1reU!AVt^><A$AUi*hsm;8f4YSAe5"dKo-SY]lP*jC\PY*2=LnBorpeanDUOVj(#Eq%iPT#<^tQ&*t?MU5cLb,NVoV]MhnNj>@.W4ISU&8+Y>j1c;K(flj/4p4OG/XBPDXEHApB,sb.LoIb,P?mkG@j4[(V731lej^9aIm9&-d,Z9BrO,,o'7+rOo=8phfB.e'Z)Y5&($N(%r=E^&>aHTi/CiVFrJGI.H;Z%ZR@7d]+;-@CX*m3(3HWT<MV)!::If@&rRPIuQ<A)HN[YGGQ;+`A*WHUn+>_HB"hp+[b`$Y6`(N)@&rG&R9Ed>1t0JD5!4qB]K[gG(Z=9<=u\O686K\opJO7l;XLZmXJAj:RJr\L9OC!T!W3a&G*adUX>MmFtc':;:bBf&]?nG%k=KQdumq$nm$cVsZ1?K]_lAo6F4T#WmA"o8*ZI9KX"&67O,<9;G)org^F1%#6)HT&Pi&d@CR0uXU`.qj<923:W"Ih;:d*RoS9U\"AY<$f]p[8-U$g[-e?CA5hR;K(?q0NT;R.=*B23E('1%&Z$]?KK(-Wo>;<SZ]KlagB,k(YYHDqE%VL+#W.kj*gpJHo?9(^J[dR416_d$1M@U"m8*q*X?W~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1859
>>
stream
Gb!;d=``=U&:W67fU4p*aj_"*hL9/Pa(a=KP%Lf,R7;Ip8Q^R5!=T7eZ%%1gVeA`Q&Sp0&dYJNr4[/4d-",`%']7:Hi:RWcD[?s^_^ck<@DhRC:56H#4bL>qZQ1_Nhm<Fl7UY=2:ue,Ia#2Y&"pB>&1ORLQgF%aE#<ku>kBXuJ`Sg#mO+?3"VWZ]Apr%0#GA4g'\<J1QgMgCVGeCeScd0Q<%(DB0`@O5E$s/N_WJ7Ea)^]Pe#DP%uJ,"8.$Ld&CA^Nog"THo.72$+T8j.EA$?+Q+94Z2p$Q*3fn7Bn<7FZL;iHhBqOQa;:cYf/>Q;mhha'=;UZm^;g#\t&*XlOLc)c7d[6JjST8HK^uBq?Wr3BfS/e=[;3#;GJsSl]CUN$UXA2tN#eU#l>[_mE.A4lY(/U>B@EB6_@;m"/2"()R)FMSh!%H_aip8C3;<WPtL*LVJ5O2/Ot%R1!=ucWga>i1EKiCB$Vi`QtJAknSr;^WZ3i]X8k1%+[95as:.<Q?+D&"ktb:bO^Y`3h=,en`qpJm%+5V8ueZ:k?[Pb/AneB/[q>d)rN[i6>F$i,)2MEk6ZcnA019.*@_goqHuHXMEp@USWiDH<BgjIPNW2J47F];>lV+W^<cssqoV&=b0NF.0bI]e?+@RN\p]TIs*1\%WF3T+<5URL*\^gCNr!U9U^RfqT,l^$_&'Wu-eLZ8@1(9l>VO.#mXP\T<:Vqoi0@SWR/W.^r?2<09FI)G3a"=k`M%I5Q!$f42VAY=9an/uUMj;CFIc::"/NB0V#*u)Z\hL8Ve'lpObKG[UnIas`:#\8:iOK=XBa6kkmZ'HT]=g,;t^,R`$u2+L3k@YVFn&73[I2gh?sU2$P4)DFu"f5.2+D_3^"Ai&fHDF6tZ;:1/2hL<cfuu=^,Q.InZp'$&b["_m;@58TDaYP->Acr2&!n[MQXD/bJlo[=2V1=A$S537%/_&P8*VN67pp>BId*?L<OF7auE"=`QA%a45>R?B/>Cao/1h!'.tTnjJ+6XIRW.Bf3XgS8JFA;>eel=XH8[E"e+4EB+,hJnC+c/7W.1`3^Q"/^R7s2hBtW_5joKP;8o1F.r+`0T,-I_Pfn-r-*skKUDY@aV"'U:*D2u3/%';_/.._q?=UaQ:K[qP`&51j0cd84-gr)/+cH$nLW]EY>[+j`CrZ>4a"t<QK+8-),p&DVaW;2%AB6B*WS79'0?'*!LjA^43'gGis`;*@s3K3n^#!`WDkq!.?[<nnHOrV.Xa46C0l8&k^@"\Q+!538XpTunAgnP"Q`P+q,G86<+o*Ic`]cK;$EX&?odZHJQ;<q"'DHFiIX@mmkE:oJEf96HkqGC-6M)N\pMjBL-3#kDZlGTDOAR+-BWFRFiQW6'Kg/;Hbf76r/;#jThl'&_,Z:Lq04#^-nm_nhr];K:@96[2hMuP;p8_hoo,T8mOtl\/oN1]jjB'GN9bRk'IPErM\[)S#fYY^\A/.Zr@,l>PSGnM`@`s,29J'p)@F9E@ZcC*?`l[V.kQY^7D#P"d\=HUcTehc)Y,_;[(b*2lFW9t0!)#3[.llM6@9sH11#b62m$h&ZP:?Ss*faF$hD</l*NNGq9uXJdr^t)X'4"Dd#@$+VWL\'@;89U"Yk)7l^9h.Nb:>[AW`]go+R?)XkTSBOG;.>*+RWb6=23#I8H5JBNDO@`U/"OgU3SKb)]U]E=BoB#t6ra2'9$be8@mdMqKbKSqeM[Z*0Yn;oIC^CK)&/anhl%F60?9eK&NHs/h5J=2eU\Y\GJBK<2)iUSZ?7\=lhRK[4V6nD\]^l_#[DZbbgWV<t%,&^_ap=b;KXr4bg.RfN?ar,[:]=9e.<pYhOY<&J*NQRhLRAVu)r5Nff*cN~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1789
>>
stream
Gb!#]=`<%S&:XAW(uuu<RkQ*V8Q6H/[S<rupVtt,!e-7Xg/b>nV5-"8dJpr1D+ClV]34UV6'T`;IWLT<'>Wm-o&!1Bn8&6j0*r0sUF?b/(l[=gMp^JK!)\B;9F%A5XB?7!V.D<AZU"l.JIIH?"?8:O2]4;E&Eaf6Wq]8OQllQ+*t8Jue%d;CJ2kpcDRB0rA5K:*1SbtEFdKkMO([TXa=+/hAemU'R%b_";mfSa+\ZuVLJ\&hpE)S+_<Yb]@V6`N55^g>iQMrP;ej1u.sN\\#sVT#Glj`o0RAs4=:r[aJd`<^lU"sV?Mn*M73Ucf4nCuZN"lYk'SJ'M9T:7!A#>o#+63:Z_M()X3"H(m6W!;'<""^<0j1au"3YLCIn;/QGuTQ/@[_'JY1ffdU_CU:V5c,NOO?Zg[/?%B(g][?+sUG#$").0&b/;mWGu\Z,MVh)H_Ch-Do],=+c&N16L[<\e&b#QU1/h>=0$ReNq[]>SfAo,N`o2*]&S`8/&3lD!?@4'Y.N$)n?ErsT#::_MBlG\^)%-d:2YLA6"q]N-QH(@-pP6eU;gSN(i%5'^1MYCFf23L4jpOP7&JfBCd7I(\<YGp>Yer0n1p.*j#?"^MiC3Uq.a<M?bRH46R43K)bjkQ/B1<2k'SI\q0K0kbt5\cX^$djcp%9q6RCI4T<0A^,$/S;M?A2:^M+4n)biD*7M5PM*mb/^5jRA0h9U`$m8@3)O_Ql5KM3MF>)fB7*uakp`&lPf]D\7Hl8W7@o^?]ZVu([p)Rmo#YS4O<$^('p$;B>u'-dW%DB#XAmFW7>g90aqZh>HI4JR,4_.a,dlU/TpI:YO:Vnc%B8n1R9.+n*&I'P&XXTKUMXF!_GSNsoqV)f<uE=D^%(ejc+)'l&[DNIP8305Uq4+d+KFqukOV4lWJC,.mJ55,\057WQk-LKPDJoNI'M4]Y]]d3$c:,`Z<?);=<llt[$fn!AAh?/S(Y"psAPW?b;<nK6X37o]d42U]Hm<WKe)*?/2iSKVb8U0CDqU82<hqrV@38heApY-LUHh#OnDqhcrI;s<m&2WSDJ9KpBc=._fs._<Q';`mnO(:b$-/p9)TpnW=14$-9<`E\fd(1]Jj2$T"#9F<2H#]q2%<*%5,FQLE%sSN__LQiuauGR)0mlSVB)s[!Rqf/pitKKd-5-)cgP[,n3K<Ddj#tVfdq?\TF4PWsWt@<pAj`.h@iG\&,Isqf%Q:ue3Vkk)klQ_js4\bnT)igo-]Xe0/pMZ,lu8)^d9d`45"m-(_pnB=QU@m2RN1Q-cP7UTM.I63SctA3($:#I6W@.Q('F_OR`4r4^#fhB`u/Bn<8WfV#W$;"Y4.=g):WF?c%T-s.5=6@@3no0TN8)l<d`T<*tVt'ShK&k#A:=^<SP0k%Q@FQ/<-4FT?^h.aDZ()GL[EbY]=\_h^I6r8dm7];*p9=R9c*od>#h84[Tf.mqk.:WJgm<rr(WO<o`d/K&b`Hgnq6-8nF`n;I"pURio>K/ID7iKM`ORId9[c*4elmJX7WbMuPk2-2\M"br^&X!B*t1q"8LdXb_Q$87TM<(%48rfaA?8XL?l`2[j&=am4$M.V&mEedU<LYY=)&Mf-8rR\B8%E.g*Cs7_5Gl\H4+f?-rl`_lE/lVY,`U=t3F-*,;eT=RAT(#0)4NNNAMX/7%=oiRg;lc`#;<aC#o&*VrF$B+8oR[U.q$TJOPB^4DYW/Z"acG9/P@dB#ic7\A(Mn?L/6=7:<45-iT[A.9dlJ1+A,1K"c-dg5o`lBK&Z>V*[_@GS;)%2(H!,=D"-i~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1994
>>
stream
Gb!;d>?BQ=&:Vs/R+%t?]-rsr>;e-]-sIJ4[^7U=mR,G.j+p+]=C0[3dU0a6a1%.'$-R?)P(OE:)U149q.;Gt*.60)IlmgX4+tE^"j14t$'Z)5_tWY<f_`9NR*Pp0J@L0jL($W:g-79T?4*9"r/cUH!_8>;E8UaC5nF79E1IP>J<=gHVFQ1Ch[oko&l?mbr0?q-nJT6H3UqJ]]YD2/0<j_q`36O82&C0FL,3KHWfcRei_WEq0UtH/o],*J37\b2a&B)Rpp2Y0Sea"h9YeINr$lVqU,-Li_se"fDsRZKU"lQa(QMT5H9>:)XYeW;.A*>k8g=lf$"mqg'tsOl+bAfq1d1j)PWpfDPYQ0i-a:Sop%eZu]3)AX.34Zoi)[t9&Z]K/DXCB.UgR7mmSr-0SQ<]]KX=&PX57FirSLRo4MQD7V:XfM/Y5/%;.STW_H:-g-PJLpbigPp(E8XU;tM>[f`U`La5K1BNKe-@e\qmNRjb[XmHK_sfRC?O<?Yf#T,'l(58YY,NfpBeMga2sSC-XSG'FWU\.::2j/ha^2@/Zd7[?nQ2_(BbYF+?'R9WCH`b:RR<*i\]9VdeRKGHE)?WM81];MFMlKE4)$&)_U&"sIBI:S],\Zh$(QQFQe@31Ga0^E^%(<k9e,s<;/G%!J^d$INJmYL:%:sXuFc'SbgBfTKKWh+uAf4>dbQ12Sk-8c\u,:KSjP4U.76.#G\Bn\S7?83'^csgrt?*!WMReC7HS+]Gm[]c-7>R8O5JRh`"9ul]G#oR;<G_11qF_OEk!3c\ul5Krr9]\8q)NoBI`cBDH-n[3\1OI^%phi6Oej?o;HrgIFAJTKX#*je/AU'pl0;:eYA;VA_O#;ro(hs4R7uK$9h]FT!YC=%fX:P!h,$t\`24D'.&M@Q6eIH_J,Op/B_*d%?fd&%jQcL-R%Dt^_[jiCcS4%WToBjC4]$mOa<qsLUgp,tG1qEmP_R!o"8WeMW0!p'c1-\F,/es7<27u##YL%`VYhP8*R_\IsDZU<gL+^R/rc9mKnC$M.P93P2I%;[-f8\A$)@k5s6'*$GW6('iZ]5qcA4K7_Vr5Z/'k3r(/gVR8!UXdU0]?4"FBSGVp^.6t+sG3CKD[>RU2P\,jV9e)='$hUg47h=&J3L!6*9n8S/(8!XC./K!El6"":\t7,#R-sA;ILI,#uF&N=9:I*SG!3#l]2eB_U66f5$R57^l,E>rG\KXGtn>$[MaCiGJ>C)=Le)DfbPXXOCE%[bNm;D"P;*4Mbdsa0'Q;kC_LV[56;C.TNf'9!E&6:(1\:a%bD=$f=!DCo_`OOhTK.faDSCRo!bm:cWh99lReRLjqlnrruGNEC!,5#-'7CL,,4"*n617.EB%D(T\m?[1h=LBI5js,(=$ao)?fJ>//VP4Pto)BRO)X9/ViG>NfJMl)[_V=XI@U(9M2cmqB-Se"9)@fp#M`0VgKUn1RTYSPATKSJOM#'d+l)c&210n+KC<=B9hr0bdgZ56-8DCtkM@^r]^$OmBRBk)Gi+K_`9ed15ik$clH=ck3HVj_^U1U-KJY=-I`t]n.5FPEIR\4-eG.nY"UiqB35_nHpo27A3YiLs4&f7jYZd]J/H4Z]p-27&!^`QZ?lII0!KK"?2QjTk6>c;1]YFaQRn%PF%e`8m"RgB6AHa%Z=dI"ikjGGK;k)q`@X34bUl1fX3"gLHU[iSu.59OHsIidnX6ER%YH/D=XrCl_o;8R,k1:WOaX03r/66EY%D/4q?0lK:%Nrf5<]>TgM3jrWd9tlF<X+3@3K9O8,6W9j<T<@POk0TGb"O[H:-2<bk0p<g_A(ouq81`9#^e>1p>5CH,N)I6"BeT[P<XII38?8.Aj+Y*%q'K_$<oV8POldV[$Rh7e!1a1'YY[1:O/b:ChXgZAb>]KQ$Wk,<F*DJZL@`sQ:2Q5f7@Qc\jOW3!6%^g1,Y&*o@+[[$&Ug('U*-q[ppFpC=abt!Uq?mjnZ?k?o&?qi<BX9ZFg!'$N7gA~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1676
>>
stream
Gb!#\a`?,q&A@B[H?+k*8hgGS!h_2FYoQo9UrGtp=_brtTI?2%7=bdP3KCk')Vi$IVUl_Z1*mLqj`R?qJHT5*On+"/"PB<]lTG<&_W1t.Eu7S7_V<2rkK'?e$Kd!$8_4=u3.Y`B+HK#2I.$KS"pC_P*%;^Y8K9/]#o(tt5m66UNa@_O3.eb/12nN/\`B+.HOcqf<AV\Y4Lho8[SL)u!f,CYTpaFML#EG<44QsrR,\fdpb5jfpof<gqsZ4r<>!K^/;:8S=4,g=+f,7sm),te;/*I:q$WQ0_rRXockFP]EO]u,H(j]X8b#I8Mb;-i0MZ]qZ7"Te6?pU)iOP!@?&$_dD7@/`\PNLH/V?=C&2`]!Gh%[e@a_U8"_MV!]gj$(AQ6^g3G2^V6KZk5[>LW'DidZ<97@OCC1TYE0WHgn[!]T\NRJ(B6@3t4V"B7#gR2@aYZbh;oH,#8lZB\?j"]t+>useZS@'#b6d8iiarI7CD3I(d:K(8$_O3g4Qt+Tf$ub`"bDViajW<kp67U4rYFABu,tbJMUsupYcbB>.-9SD[IF[V)V';[H@'YL7cN`%_d[j1r'O+;T3\"F"HI7E96'e-siF8k;e"tA-%^_Yd$;Hm:R,a-8oa6/N1P;%\#i:(,!E#:#(.&\S:bQ`dN;&Lab9B.r`s^7&QikLT<NK(h[/I.>M95<i&7sSV=fT%R5H[rr#`ULiK84%de2fC)Piru9Ze7B>nGL>u!AX+m[OEQimNMB?7Z/s$TG(lZ<em8"FCE&9!]G[`4YXWPR>!J#Y-Qi!%a%e[\#%G!IG8[;$E<n6[IB7`Z-c+'3'JLKoQ8oh*:D$N[")V^daVlH#8P*he5GPS-*l^k'=rBdifGZ(k@goQ\_"c)YEnBaR3h?4Gl;:Gi<rq@2sG:<HYFipoJN@,A5=r*+(7sQ-M2L^R1n\Z)H>>&AL_R1a^baUfa0Rl3Js;8dgbtdJ9.<0=M/KgDs,fW6KRF+0!M@miHUF1_\WEV+n?[NYHT\4`c)fo^C_hEouKR2"DDG=(MN$X4>`PN;JVJ/&JEN\j:IX\*!pG.X`gEbYTm\k%eXg(JE;Rn;3BaZ/0-J0g4e?ZbE09p10=*<A2>SOFgH`G#kqINWYl27J;TM,=2G-?-aa_s,:KShOcJq#PeGgh-d:t"79G@WkC_OB>-ID-l+TW^q5@j#p=5CH%tZQ<ORLaX]GFqUR8=C;GIRh2''fE!S0\NsoGKRP-FL'l:[@A)WpJHNR\VkT4jO]]V3T,O<afE9g%hbcJ$33O&S-7\YY-q$C9CV:pX!e@A(cbhpS$E'\1s&-;b.[IjNe8?JhGkm:`c5eEDd^"c2IN;dVfJLd$HUFojRo*VO/eq`OBT3mhNba@[!fsklFb6#gqnJ"V\Bt0)'(FGD"oJSpt(7^/1oriTbeuX47j3W2`tO:^!CTS`?9D7r`pNng,?JdqXdVQnrAI?fS^FT?d+)f;#jiYE9hTjFk;<TNE4:-=N):ZGZpIh2+I=OC&C8s.9W/#G^?;Ke8uS[Bdh=*@2!7<6]=_iQ:od,=1g)9oB/OQ$n=;0OXdYHf&d+:&Nqp<I5N"dog^m5nsP]Zih8HLMZA]o5^/8F+k3W0J23"gSoUKAh-lG@<8i;_9@Fq6<LFfglh'lWc2Qob8%,Rd,U_rjR<cQKf*+]&Eo[u0_u=[OkO%~>endstream
endobj
xref
0 26
0000000000 65535 f
0000000061 00000 n
0000000133 00000 n
0000000240 00000 n
0000000352 00000 n
0000000457 00000 n
0000000662 00000 n
0000000867 00000 n
0000000944 00000 n
0000001149 00000 n
0000001354 00000 n
0000001560 00000 n
0000001766 00000 n
0000001972 00000 n
0000002056 00000 n
0000002262 00000 n
0000002332 00000 n
0000002618 00000 n
0000002724 00000 n
0000004637 00000 n
0000006493 00000 n
0000008477 00000 n
0000010220 00000 n
0000012171 00000 n
0000014052 00000 n
0000016138 00000 n
trailer
<<
/ID
[<523578e4abc2fdb4125b5ff1e456104b><523578e4abc2fdb4125b5ff1e456104b>]
% ReportLab generated PDF document -- digest (opensource)
/Info 16 0 R
/Root 15 0 R
/Size 26
>>
startxref
17906
%%EOF

View File

@@ -0,0 +1,263 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R /F5 7 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
17 0 obj
<<
/PageMode /UseNone /Pages 19 0 R /Type /Catalog
>>
endobj
18 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>>
endobj
19 0 obj
<<
/Count 10 /Kids [ 4 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R ] /Type /Pages
>>
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1720
>>
stream
Gb!#\?!H&A'Ya=F3*1ITNiJ7Y=Yb1OK9eZK=M(Hd9l<Y+"G:3\[KGiErJpe!4!]B1DQG*/8=%SKhXbS$:jfPEF1M?r1PXLo$lFci$s5ar(r(jTZ1lcn4QJ7/5^Z$!L]`K]qZFgmb<^e,N-N9+;+Zu\+Ae"F'e/'cT9N#9TjdZC@mFQqV$_`$-:/Gbh!^GgF+b$Z#fGm*rN1OkWY^f%eIL,GhC&e.Ya1N;l3Dtt+U*f@0Y7&Xb;m3kF'VPEN61"!<Tr[I"V]0-r,N:^l<BgIV(Q)ip_q.*/\jVb+=IhN+P2=]f;2Us7I1/*M!&In!uhOALfWl<KY1;:oGNdRnBq(CRb/#<^4d@odFa^NL5Uk,)VQ\DH\]c,rAoV2k8'$PKF5Q^^&;8.I*!ROdMRn2;\%%=9YJ:(b\P&M%dg+?*c1+=<$T<,p3caKG;8Bq.h<XnQr;^0mMpksYJWc%2?#c,gddL@<($(Y&uqm,4a.sTV];)YZ/"0PEHaLOQUZ>+n)eMA#pL3bX="bp/m*e[d3Y'+26m2X$o()<*Z/"lc&Y0c@SS`DEuu[-8?%QZn--Q5gd*3h-U:rR=Bua@#:2kcilp\<JkoE9BaRCP82MlUpngZeD][.0'I@T2_42>`E;;%Ol4/47BRRFdO,D:f8a]2PG<Z7<27K7Xc$R-3?n>H_XUSJXFo<8-M/SF+PTFQS@H^h)qoWO:ZE`DZXn!`Dke)eZE[M:8!I^.%eci,FEW,VH^T%7AMRfGYdgU0#\]upO1;+3N-P<Sf+#L5erjL=KVFA(t2R#C%_fW^E"L]_4fm>ASqZDE<%W&Sg5MkD^?(L-c((c-rPN#\Ri6uk#5pW#:YNlV%Z67,@=AO$H&/^tm<;aA:./rK5Xu0H%D80i6]ariXD0J'M,LEcbSlVh^_-C=_X7W7jZ[ag_).pCHl*<tl/i68H@YoTrQ-Q)OE+r?s3[aEdm]8KR`)mU:j7W<%([%]gs4i.=d!o'V]!OHKVunSm"`9)VZ!aC\N_lc](W`\pDZ4CR]-TqoZp%ZpOS]XRgo4`S%(315NT82c<2M0VE<IXjEHMEIH'[S2:6QC"boISQ)3V\>6F"^:9Nc#AU4b6McuF9TEI=89:=D<SFLfPo33J9#9QQ);h<Epr:7'7$nT(%odhnWUPC'28dsK%h3R_uU_CfjA(CAgVemt1Dd^f$%H7S7T;6/NO\+W#(0eXeI2EULS^epdenDJQ%B!fq8M0]Be9b*657@MOE=3?SU29^]1dFb,RZXZf5&8bG?!OMmk3Y`0\J9uJi4*&`d%'s7&$'TD-Q8g$EK7sE^Pk\W<q4t(A&q5GABm"6qUKMbl.>[cj1$YtQ-$5>_=c&(AQ!t89h'DP2b^-@C\m1g&-SG'>UTT>G?6%_Ns"H_N4s.T^lQCdpQ0_=rrTs78o6]Je3,ClloaM^YN(iaI1&d,3jG<sa((]/`(:Jr[9'7)F4Gh:O'b3aQ/g<B48<+.3b9leh+5kWhptfWY`L,Wt8"qinX(S_o&#!,.FoQftl%@\PW\KR[%?;5aTp0.ih8P(s]S/+g)XQu)BVGGrdG!Dp[a&tV-LAifXqPlCB-pC?PW%,,?c]mu#=LYZ-ZC$fD2TU*3g1@E=D9kD$5Y&:33@(cJZ57nqg>sL_(+5kr34%TEUbWX+l)@W9_Hor<FIZ]THes!g38$1ecci&3.$XeG7j!EHml3(+7L]'W$(d5HL!$dhEPaM)PR~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1731
>>
stream
Gb"/'968iG&AIa;m&?bU'b#U'JA/CI*N*U-:/\(YFN0*1'J._-8;;fgkb5c)$bi`5/31/:LIrVOKRh%^DnfR/^jtF2<WAg?_"/upSM=LlVO,(\ikb7E]U1bK*Pqn24<KA0W>fk#TkckhbafIGJ-7#+)+Z65'HVL^&Lg'R*6/B%";Db,T/mC:#cNh+&BXi8"rlT.&o`k0Hc-GHE.*+d:Khud#o[mkZi3=%fRl%7eQI#X6CBKSQnDfhroU[kn7+B.ATX2K$2eNF*F0Pmi*=((=)b0(kTn>onH>`@0R[[`(`;pn8po5(2iYQ&AX:XLeJW\6k&IDO%ue.g(0`9iDkICX&F!+(g&EhL!sfSB46b-1nl.?[.lWG77chFGiGF]_lc=TSku'*T$;56oAW4]"N5@>F=%9)(:MrGP$8)VG&0.aeXC'SqGo\lJ;NVrL,7*a#euOkqbq,:I!YCrW(8nFj"-C"n#RRO1Fs'$jdosd,Ji>^82:VjCTTZ(6Cq3O0b`]BX%:hJ(CP_I$aXN=N1tEEWS?.T'.j3+!(Jg(c5fb>c2?FF5@?cHH9"qpg?F>r?0Lc?BYs!c:isAS<9@oIhStpO;hpfVE5c@2lYXQ!K,,]5JI1.i"H"F!mPD!uS5\o-cRnauUXp%Pm%uJ3n[H-7Yg)Hgc>`hC#0F9pb=I\jZg[qt;F6-B3_1$0,*hBhQ<kb=s2GlYWEC`FAGQ=m>KZgp-@W8lF`<@NuFN78?ZuKCW_Y-64D/eRUk*X:\1csJXHaVnsgSDJN-GJQ39^X@8pb>_TmkfC'=FE-D>iu%k`9Q3@.Ag.k=KbU]kk0f,<ge3s1l:t6)aga08!`+1!OZrugo:?$473VSAZ)fX=?8;tBdJ).Ti#RnIBnY*.31\+S@5#jdT\U)!$mLuY&q%lZPYF$3\U1T8)4dlQPIe3,.22`Kt,G.Hbf7V+#7s\Z/QhB8YMEsE3;DCEa=:>o)ZpUQ.Q2/chHF\D<%jXf9u'(>GJ0+[AA@p@Z'7$5<$*d)#^;*Ko)SD?7V710f#Qjru^n-(\DG@$)1$gitMYS7Q(.+i)=??^j'ZZk?)R:1"I6;T]5$BN0VH9G.T>#\0:7PFg/TOCR(?L=]Wa3-&I?eKpjs^i4?Arcm9%`F&Ne`jL&2h?$X\K*+5SmcRkDfio8chU)blfQ$-!WgW/q?).#!?G(OfRnJROlS*N<HVs(]`jgsnbcFgRL\K@o8f)2h5jIJO^L]]R:?c.W.>Jb\@H&W.1_3seFa((j7lVLlo;1(-e4?+FcHosUH\T[T'DW@KCU8*^5$0uR^!j^hW4YUuLI=WM9+-3(<Xoek!$k&#$1:t)EE4J)?<kV^84k5m6Q!eaEbd51Eg(^UYJQR3,Wsn"(E+-FIrB4Ae&Gn\>m']D6"FdNaJ4sS5$J3p!U/Z[in/aG>mU:;ko1U3'Mt>1s]Ie-p^*Zo2Sa3+M$U`i"%=cEH7F4Nu#`Fn+M#M:eQT[(F;V[+nHZ[Q<:;mPC_.;eBDf$\-/)Zh5q&3PY=LFM_l[:0l4qT!?.,<O-M6Q=8I`m!TmjXP[`Ok--fgjt\];a@/M`=:#p]aL"W''jBNVRAjllJ&Eg`Ee%Ru<+]-;Na9ZUGDAA\6U*4eR:"ie9N^]@s>;O3[ZmZ'2&#4kajmYsKFAS,.X\:)BiJHY.ND-C7U(^<&gY5Dr555pI*0nCp7M)M<AaEaL:eD'E+YGA"GC=;=QU)`%*:M0-p6Jb(PL]R-j~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2057
>>
stream
GauHL>BcPr&:XAWR!m\![oJM$8E;?sYIj$VhY*I&I]*=*6];T\OZ*123s(@\@OI2*ZaLB&6CR`45%=p@^1hYJk5`iJE:B"lAM?:QapEjn$+q+9^5WC+RG\)W?[@1>J4.+u5rftI&;2<f=@>H$Jk3_/91l"=,VV>.";OaJ3<*JVJV_YdOoph'#\A8H]MCl6O>SCO(e-I1GPItd(QkphLG7Hn'#P`s'<7tqF5kS4">HFbhRiNShnX"`eQ%!*9EtOL;TBRh-B&6jH3;LdQ-N'sbC(47_Y=Y^?pKq]*XR3H<f*F3aqRFHH9r_'1sHd1"!SgaM[M!Xl_"PK,VnjKC;3V$[%C>a4Q)5m@i;JXN0AYXZdD]BoM5ofRGu3(oj$Z\k?s:(akfggB7P2GQGt^?8s7<qi<l5$Ug@9!?irr+o=2aq!5Np$=Ib_nrIkq)?"KR'CfMlU2F?J2Vt("hgZ2N^9;2NJU?V=]9.m9"r_f%Fe<DsX:ZHQV#Cb7fZ't#t7"J,3."\`V"D,1OqFRa?rj%oP,,N&.Pe.5^<b_7jbnE'#4l&udO#IXC@2T8spTT%:>.Dp^@H"^K.oX<MeesulX%S7CU;:T3l<K\NcG@^<jn;mpZr<5cn[C]+G8=[-0'fmMbLfiReXJG-`6VK4$>hA<o6[eIGpA>c`&Y6*^c^s*_Qh4"BekZgN7Ag&cAPBNeDsg6nqMZQ>FM_$oIC*U;C-Ec??jBE9<E#9lIu?q/aucP9NVk_f\/L!7<o9gqKs/O^0A<^NtG_4.`=f84s^6+OtKj";"+E&]K5MoWLbuu+0%Q-+O-AWX(FCc0GkH3$!a$ekeGYd%uE^@!k*->[41,16H?FLUq$[/n.s6C/6c0#$@\k=3F8qCT/gOWF1B`hgc_Xb7%`F9djS2VL@[LCFKWnESSSn+!G3+>LOkY%r<=bK%GNs7fK2UP)_o&8>n#Li0&%dJ,B8p/au[udbVA3!?_DNhHPApG<pRob;%Iu'4S"4,Im(:9KHA#-!cqe:0-.&EE/5Zt#J0X#ZC]m4H<Y!2Suen;?a.bAn(#6GRb'bNqd@]fT:I?FO1nWaA:G!%huR%:qh$BD$eOH";\gk';M3dUHG!.d.j4',1R6^3+>EfIL1Q/0Tu9L,E+RD#ADhrAi:6U1.N)S0D/3C`r)#h<ZhY!qO3>dRE6k%O5o>e[CI4siUC_()rjrV/2nP#ffHDf]oa'\)/jqeqoP<-99@"V`0(m+Z83H<siJLn,M+@L_'j+g0A=F%["S%07@6pCjfl$'eoIEIIH'=49&Q0)[HV7i)P#mTr9J0oGQ<:cj950\Vj3biE)=lR0;$)0%)RFZVFu=5H]nf(8Z4JF1^Mnh#)lEV_fIW]uCUBN/JWlITY&d*kG/G23F.-l5gpWndiShqZ4BXn`oc176P`eKFa2U+[SHU*WRS+[U-:adXl-m.9$i:']4m*LA;b'7WT1k5.7IK-T,`+qA89i0-l:g0EW*U_?:)939]U@>QLpAjUA@tgk9mR<GiB=9UJ5GTG)kp-eAY$lEDQ+&Vd<T/@e?u>bcqFn!6h.7hRp^o#*COp6E2fK7/h.CrUp7Xh$Mq%ME6K^NQ%<\D[V;%:X'9!:c&H`!6gb)4b$Lj"=3B#2dU>O'Q]cKeT=%:mY_elGobI0I8G7\9@[.t79"2?FWJ`,8X1996EbOn&)$o5tTaNHA/4&I#Cg"feY"Ri#TSh_8*"3]*AEhcqKR#gL?c\6[p)WbE@+_*]U#DP32OTcsDCW@rKT?GA,P/BfgAIuAl`X^DIeT@ER!7=-0mA!5inL__?e_;mkF*oRNE23;p"D*R=m"Ei1O!>+Cl7PVKu/Zo?S,Aq1,Oub5!qQE4FClBW\HroEr95Ef#[;nltq&..d2uc@hd't\gjjg_)@;8[QkGOh<")dX_BS+@\;uQ'Xo[]H8BE5(A+l&!M/Ka'<]OAb-g?US31LIZ6SPuGh[="X`goR_h9m'7I!Vjpheqt)LQ(rnO%Q%eEjp?ZXIeeXoAS9*ZY3hs4MQOjel]aRUta-"W//\1rdCXRh/e&B$TeTZ"h0-#c%D"@1Rap~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2020
>>
stream
GauHL8QXq3&AI=/e1d69bm5unQ5^:X1iI\obk*1ta&[eKA%?/2d$ORq;j&0U=TF5t2"2-P86):^^=mCTJ\S(2NKsS5`c-6<Jn`&G"stW1`ZO1<Gjo3./D'Hk"2smB40X5<[e^"Z+(X<>`!rf`"Q/^)mnoal8UNbl_8:8bB6k[;bh`b%+J*@n4pBr8NpF;=kAB3^(947MESY%"I#ZHRn,hV#kR_A!LVe"c=^S1kC/\T/Np"3&$,b(rrjdUkI*RW5QLbgiQ@_Q7&giq+_:]Q.YSBfVcGVGrmpQ&_.Hh&6N^4YSHCI5cZ@_8E#TH':_g.E!5W_<HTbVdE\Ud%oa.R*or7]M)=1?P*0XMq'`XD,(5#AjPnq:@2W"#C,kNShNQDm#/[)`He/jsI(pM2WPp%O8UF&V^<BsN8acg2]*PE[(NWWtQT.T`m%>\1$O='R&I]gV%h8/]^=E6BM?%B#P9]kL$3;A<Al11`oQh-.T*-Gq,Naid@E(hWXBPT_Q+RiFY$N*!7fm9tp>H1bqk/g+a;nP$5^m\oriV9ZL"7/*bmd1=`Q'<YGS^d<cYN4(m9,(4eo3I^n'X_NW7<'TetCS1(ADcsHgH%K@uUE(Eu7#3^Fr>nR%1:UhU$\$,?$%d4)MD91td(o6.M-69XXQX^mgHE?^>@b9V5>"<Hn&fn#j9Tt4OKSV0:_kVMU"c<[VQQ\9n(lpsI^>_4Z/#Vb:A.^_"<$@c#Pc(;LNC2RH%mm"B%*@Z-BK14!Qu`=Oe>L'>)U]a](jJVch@7r[\VWCIKprL8+7tG5`$D41X(E26><G#%;6!h0<YTB!S-,D'RHlrCp?eoJ`eM6Ce%6fk;r]#j(Z/'L]=!hdAI7R02%YFlJF6FJ$3,Uct0*a_i%G.P=-/srG)K-g^`-NKJaWR,T-=oAlrD5ad8\pYbg*pXVTt-`JS\>Z)g`uT[\JY9OWq=9?sgiHh@AIq(F\\-Zl,(jk<cs04@8Sli^cp0%Qn(PH-=B\&h=X^"UroHr%&8h\W141#5#eNe,N",qS(("FLQO?8\7A)bKn1.(ir)Fi_IZV>A3;LK`HA?JFN6#l\@NL=O&#U5WX"FF2Z4!4H[Vg_<hlVA#%Uo?m1+bTJ$qOE>P09Z%9DSDp"3.T`SuDEnr/*F'+_3M;sF9n:Jl3hX3\%^o$TR-508)I@X,?gigUc'mma`,H\pMe^gZ9Ur6pCZ2/N<1=d/bmK>C5GSCFGeW)2g1Z0XXf_rqYi"<RBX-.OgY9+87YBHH*d?0'\q8ZJBM[R)=-rE:_ZCHQVWD94pIX;Rg3Z3C6nh:F]&.56M90`71M8Y/89/tWf.=l>EE6[B-D#p*]+H8#>GJ?^pLuHI@X(A82?!W+$8/U:2DJ!\EK\R:E:f]t$bh:.EX1d=^HHm4U>ZXs]C&k^9f]=eksfNi-?#%%X]U=g>-^SJ:$9nc?J`R_Rhgik"V`FWe`O3=B64=@0dlJB]&'Jm3^/11.4*;:mMX"[W[ZA8IY;m^Nd:_/(^g%d`^3f8<bu=G4W9Dr[R2dn.h1+35iWUd:*_PEOuY!0LIlfQR1RY^DUd;TO'jG>=H*d9M0B&RFiCh)nWt\OR.:JaE@tY<KM8*O;fm]L'MP//T9eVa6t%rgBc!IF^ln#7D4+mfS>*+,0ZN2d6toa;cek?U`3hbCTa,mAEGugcMn.cBT#RXAM!i`8c10muRC5gPgTh`kMW=%h183nNZWp?PMirCBH;oiW8O,E\;IZ5j8H#]5l-pZLWDZi&V$a1-NH>5C[@Z<FOG,/rm%O7l#<'\iWe75i1G+`dfk(9<QTC6jldU3!WieYt+_=>$,_@Z(%H&;H94bGip=C^!3-q,a&^."+NaOZ5:OD$(]/U9A***C>ctXb:P4M@//S5.Xo;1hdUBYq.VL*UuA1Q@H()bFuX&:g_eI]G9c1)Go^D1DQD=?o-RHa@TflKq)SD>P#RiU4IX[9!;_*&G>N/m:_TQ9."R1tIkC+IG)oXI0E.K$XK.M!#j_]BfmPW1.t<Y#[Jn/ku"B*J~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1769
>>
stream
Gau`T>BALf'Ro4HSB2GiAZ`X:]AbD^il4nU(PfFT*?MeX(/PR*+t\!/dbioV$^/;5+QI/F@u3X$^@0k'6G^JSXo8PuJ2^st^SF+4N2JoE&MUqRGN6NK!F[%5_?IfA_gMa-kN*fHZU"Yq7m*F>'U0i!Oog<26n)ID_gPE\$+YWOo)T"=4\$t&6rDQ7hLkcsG`3fQ+Kjo'g\Vq=WheekY@32ClSf0g-YT8S/!UM%:fk4^?Gc3La$6`bI6'/Q0Mg.7I^ciojq];&8U,XeDp=i0e'-lc0`DF>k9WAhW,Nd:EZmAq?CN.`_HaR%53Z47BQ/;b5,/kE;EWN,P7Ah[FTbnJE?k3+35D'tp&#F3<LJG=IN![?3WjR/QU]^E)XKfR@0%2/1.r:E=BHJGIk",%P9G"um"W\3=]pq^c8PIcAF)n8B2!)qgXg;^U*V@jcr*$DKT=tLXVVPU9W(a(p/5W'l8bk7`MpSSJZBo:.O<T"n9VhN_,%C]a1djBS"#SS'SY!=`u=39\6;EnPd';@cX:urL1IQFUBRG2<&!L%]QnOrZ`I;5D]ZbPNPgaCh'@ZAp`qo,,BW@8>)d]_VOO<PI5(D7M2m)ZL_`d\"@#50TC^fme1>$gBstojkA>G[k=p\3#tf%(r;iP:qpNejc;UV_)o9S=,].6T>Q\67:Z=b]^!0W:[=-Vd).(rXIdptj:$mk>#I,9q&4RFuaK4e=gmZ+F,i%k+N[AC7D(@g8.VP..SNTZ!$VhtNZ[u#/qB!)]p0%]?f`h]62[OPFh1t)W86NFKFtFa@F?XU/QJ+Og&P"gd^S9<*"G:lWQF5I7fXS[CM'F=%[;[TqrD:\1>sV?DLNl(@<3#]#dg:(VX8jcWl?$u+Y0Hr@S*i0ObQl\2:qkL<SV(9p"G<m,l932``+P<[5[B+RA`^m>eQ**uG!Fr3I:b5Ss2`EN+HJ;T&oNX<m,SRAD+D4MIg^jN67M2$+Ks]D,0]U+KKG`4jd7t)2lP)>RO7`Y32VKb4jf(t0a7+uU,t0JLDFTo0$?/W9Q.0s^-mKdBo/Lm)Ob,DnVX@1.)(b*YbJGNb'-/"dSioA6+j/l@eDM*KBbPNZotn\$h1ea5SU"#X>!H1<=jlH<F/iBBmnFG6I1bf?TNN?fD:9EMaQiYNe-,h9n55/)qg4e@)l<,C[MPRli'pA;WZpE.9c?AJ3,lc#b_rJD"Bj(_e_9\W<qnsCp&t2Rc[6k!Zdb3BF@(Y@]mW@*h@-\]f\R-Q)%q])u4VQcHY`.b.17<YXD,,dpX(>Z^tY;=\ZEEj&.aDhs,T?0bYIqSTX_fnZBGR;/Epi_hCqg1Ge!m`2q(_0c21FBTbdLjDgk%92%@[QU2eaF`T-sJ&1%F*QP&J=YEVSe:S_ZVE&_P6@8:ud?aHn8PG.Jg8^:E'TVB9ba3bUVs$'K"L!Hn*7JMem%^3*P^b8Tc0_B5,K&h,hJUHU(dn'oD%&P\>UA&#j*2e6O5RnQT+?m]"MWkuC6]TL%V(^_=\6Z$Q.<tHpZ-.4(nW;M,W>N!IfeQ0htupPb:&sDel''121<+jgHAls7Z[:=]>l@3rPuUb?Rh4TM1ac<B\;DS:U[ts3>VUq:A?`d@2.Z:Z.:q$a!7m@@Q&>,qid629$W@*#o6Y^@3+u0&#SCSZNT'QI"BbjmM]D9X=WAOYibQ\>A]q:DToR)Np?+G(![4G:0pXbs%$6,-9M@!2DYqSmsIC*np@N73tZf9Il[&Anm]kF/H4b!j*eKq),;fOlRqQ$K`hV[!^`H1JH~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1810
>>
stream
Gau`T=``=U&:W67fZ?eIF9I.;#a23WRF[3B:,5C>.qp*t&;l&b7_D&SZJA:UHPa?VMmDY_7?'lif\LK7Kaj]")9#rI!r-=6j&6$g#1Fk8S8ak0LY("kpAn]Sg"ZX<3n/6h&D,DRaB!p1/4"s4>QYs\'?B7N*J6>3lMs:5gGWlh,V3:2$m<!O[_mYUL*[gZKAIl*0bhlh-%pW9^;B&HGV0RC3eUXbOW!R@.]"&d-7@<IC^[*P$pT.;EX$HFQ-B2LP(`=-A^Xp9Qn`3jcY)`>mUV]\1-:*P2jh>+!]j#c7>YSrH_9PLR4%5Co,:*5HE/1^5]iB@67^Vl"KS3K-6nO>3Efc/fdMi+rP#HO"g3Q>:UQ`#7lf97_fOq9+G_b'O/\)sX-]^De6>M=o#n4`5]2?dlp3oR(Z.;bA!#%m8.+%R!X1k"h^#:e8/>,#,moDl[IS,8T@8Ll,V1598ZZI(%KI^Jj&Q+'Z^ho9[(s5rQ06,gBUB6m-0u8T!gQ<lGHdC5g_VVU7hA6Ll,Uh).tULU,6g#1JVhn3bCnB%1r.<[beeK=U&haj1'sGXE53Ko$/;:';[&kbg>*LAhW#.#Ho<\V*=VGA]>fZoR[UNmcEM='Ri2FS$F4DrKEHkZNmi8J>@t7-jUZ#4-H$u8er%2lVLA(AlTnBfoMp3XHtn7;G`EE7WZ<)b]>R/&![Gi2(>?.:ll\oa9Yh[9-*YUV#bI6bTAX1;m`idurV;M`Q\pNi/VrLL]Z]bCH>8qk'/*SN\+/k"n)]VXX5cV>^LrmeL=N\7UQCfGMM5;]gJG_,)uD*U@]YKMS..2*s6:3<d=RBURL$,W,M3ic]n_J*`3fcPVuVi&08RFT]fc>Q7Im?h;%Sf>UYO1kN1[fMiF^_qg=0uL+htlgj$#eE&OT[59:3oN!$*WTeVI(iY=>S:],Ffd(1+G;eA#9]qZ+2S`a\=ZW'87[@+U[<$O%G7Ae87.]WFdK]c?Q+esLc\`N_CG=X3Mqlge*I;N:H_#YPjeRO@%qUA5(aHh"tn5a0m-QW:!Ga5]&C&M%,'\`9p[@eZV-chs)'1j!6b/7Z%[%jAE<0Q!`R[W1E<*_Om,fP"D\H9Bc@f0dN]^?OmWU7*+qjC*Jgg]-\Wr1*;SUd)BNS9m>Sflj*qn;$Vgd/gB#F@B9d;m]_L!`SGqJ/LJqP)F^+@_)r%/KV+g=UZ\4/5J$cRpi/__?3sh"r`MlVXshs:6Tgi-B=/2^f7DGR\K28poO?<hO4q2ca9C>Rb*&E'YD1%V\*Io(u**60?d/.Cs;qX(+5HOD-bs(#oFFfC`u)s/2n!h8u7aA3)"]Q>UR(NR$?$6;pAmPK+_hE.P;7Q&*@%9S.?%P[hAZKE3+u,PB'Kui:-\^1M2JZ5cZj:306M`LN"jK'7=(^%mc8=F,6+7D,ri'97N-P!D]]hjG"h-Qh*>dj)jF/39,e9`q)M^^D%SrgPVj(L;:9L3WuCcMOpbthS+QOc%^QUSU3tdVG7jR6cRkAAP_5h?%i:hkeG4c2VL]_jk@@[0s4,n]a47tDHME8AW&qQm-"F4n=87MHsg'+fYU8+ZYcp41LA-`>&*4/42>aDUFQ-/E(&G,=:$p[e9gdZ7<Kcebom[/fR%f@p\hnYkKY:Hk?Fc:Jh'B96>93Xc'VHqTuH?/1c9QqRX[`ToN6:]LIFdm^70Jhh:BFd[li[%P+JCsku7Dc",&k2h['>lq31$a%a_PIoUu'T/dsX?$<Aq-FlCjUiA(VoT)Wek?L18U1(V`i4jJP\ZL-dDG*_rJO'5>R'gFsaa#Rp]Q-,S;e#22W_*?Q%S;7~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1595
>>
stream
Gb"/'bBDVu&Dcq.k%(=$?iU=$:qOZFe"!4.;lNoF6W4Q<La!ZKFQtFRm2`q*LMYXDe#/udM@aai@V.;1+9RL>epN6WJ<rng3aof`/D%Z?&[6Wfh^ttV(?$n?KEK/YeFkm6hl^<_6rjMP93e+d$mbM%oE5HALm5UVNoN6_Gu,nk5Hu%:c_[3I5U:DUl!><I':3bs/VrGurmgNZ5?ZJ,M;,:&RdC?rYQsJ@25&ZT;!*!4/@R>1nbpKen@ai])9,jXn;A_p(`PHrgk-D]i0??)WQnN6(m^e%q4oo&!>Q(jN\.oeT^PjZo2QA25X,ELOp0c<5X(hWHPDfje6GeBUR7,![g8bQGL8js[<6WZ+q&fk\:a04Cb=UkXa>i3e.Rqq"378^"tlU$HIEY_pBdt,QUa1#3hh2jgO/"%YDHm"m]iqD^gLhAW:;4Bn<]B'^Zc"n7pDZU7kuOM$s^F7j(u`-TbUd+0%KDKj@:RUpeB%3,.jqD"Kf,V\;S0JY3j=XA084:5cG0$IBEoRla7'/(p+nd10>tbX,PHZr8oj"&T+"^2Wl[QF'+)]Wh<%L-oU;nS0_$cfX`kZ3tt2_f?)l8*QLG]+c@Ju7"qeL'neWu"dE5n9q5PF%b=ukX;@p;2\&LnA7]3_SaAtm@F\b5L=H-;dH9oSgZWq:\=4!4U)u&)DF`J[0d_Q&7M\Q:Sa[]+WAub(0(GDd'XV(iK-=nm4-8-,jIatJU;#+h/h7?+BbL(I2JKIJ(La7_F3X-./,%$&bMA#1#]&UIot#LaU1)U5lYL!]*'D+$E#]Q/XZ0GI0-t#WS113?Q0i\6&24>0o:UWEh^i6MV<`(Pa@LCc<1(AFELf#Oog3RYb^qrA$M?=/REA3KFJ8h8'rpt68PJsG:,5pN%PhD*a*bkD;KSU1/4QWl9/uIG:5DnjI`m]F6"XZr0dH\%#ehdg9cq4.lKm.;l-m,N9^<h-&q=(2=^L0(^43[)Xrop7`W'-AQYATt@"PGZXfaTrI_F7Rqape!TSQ(Y#>+mR(2:K]gKuF_qLIXJKYVG?/Ra")]+AI-rgVF9^)AVk47U3S1u+Z)<X'QZ5osCg9>PI->WaD_LJbF,U*:)Ki->m54665lijOnQs7=0G+3FL/il3;4KcU"K&3%WQOtk+WioWcu3PG];F8W2i^gLiT`GN+&`,01],8_G<I:I9/Ud73J_58!O8)4rjHj$\]<_4&-SfDNc(mOJ!BtL*4YM7H?SJ`i>YNh^bKJa:d<N7O1#1C=nqH]i6h(accbG)q/SG;("kM%lV5Ra8!S/$:'`!Ds[:7TeRTXW/eVg5LCJl2"PK<fjP,9<7Kkj0p^r2/Iu*34%BlND9"cFY:R1S2G">blM:+qk("1fCkZP>A$+.P]7%4e!nZM^gX^&SCq^ro7)YpUO0mi+9<RPaR/Km_Ci#%tF2D.b/8El]`#d\5$o>`XWCf!e#k&PL^c,2NL)5)##"j%^-NJa*PA:bN[6%D3@mgAZ(UXVTWe"b3"cRJ0\QEBEWgY/)610YKR\Ah1H'(;E:*O0B-MZT"_q)Hq=O_<Di$jO-K3HbtPVX43q:)"6;bF;UFVN".9%Vnu@,BIL"?j86u~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1742
>>
stream
Gb!#\?$k9`'Ya=F39q;r2q=(.=jC;FRl5,mAI2RZE\V&,\/:^VVHJ)IhnC?2!s<^?\m?pQK_:jr=%>dL3J)jB05CJVCOk"MG]c<'176::]#9<E-[7_XmOZ47o3Dl_,A\`85QXIUJQc/)Gb"8R"VcXW'B-R]$;,sW">J?sIHlHJ0RmM.+?m8_i;sV@j+8B;4+oDEY$L%,*ZXHHpk4A<&72%tR,o9HT`hJ5eQ?s!@T1VI@'YO70>IL+$1G3SbbJa8-1H8TA@*oGQ8'K,0B%og.[+ZneT7+*J]S;eTOlXGCuRIX^Mib.bd5PfKoMe,E"SukLmF1\0T*7Qc73MA_hdeu(Se0d9Zs(MNr/.J_:;:f?0F89N=n8`URNI_J0=1enCp8rQm<<A1,$Ld-IY+'h,n>0bHXELZGGUWXkaUj^"!0R+-UpQf`mbJ!9;5;1NK7WeO6N!JiLoY'W1C:GW&l_.;m-]aQ>0TgXVG[\5:;jRq4]8?Ci5W,/^J@J_Q4S%Wc8RCWkgC8*>4BK_nI-+kP\D_<kp017?u_56V5Rhg:ud1\e'26:-p=f5Uh,RHKCl"=u2*p4utNArA0PJ7iHe,8:ZXZP38jN-Kn-IL3Dr^l]+qZ(r+/#8Zk8@33]!YdRfo0<(b89.X/s>&cLOn-pbRC]!K:;9M@.1ZpH%UjbWd'Ig5ol>UF,icio$6XipP$Xoq!7`X)g,0SiR8arE>;5ro$m_20AdP?c[?Y/S2>rWC_=PH5Cgt(2BJ-:fdhMdnJjt\L5i:T!'B(0-,$ntQ;![kHLN^G\IF`qT,<2N(opMmHknQ+b>K!CompK4S>dlcN)2XNRPY'[%ZA',:ZN9@U^5EV,coWlTn[&@$^-7'q1Q"I:hXL5_>gij6-WbIi<M]tei?ieU4m9i-FjF(]:HCVl>Y/>3Yr,@6`.S^<olO)Tq.APE?Mph`ZZ_N&a6S(;iq)4+@rY8'U&u.j`PY,L:5D^FE)im[Cm0/+.'QAK4&U:Z#fioS;da3(EX:4/[q(U(_Cr":N;an(4PAr2;;TUc\B@!HC?nOYQ8W%hQnf8DBK`:9qW&jQSL'F_PL'5(P_BX4Xell;e>B\h@Z-;Q#b<b<s"q:C"leJi4FtROF0'cd(5-`\lXZP9)?KJt=gT]pf<5c)Sn"X"#3=CF.p2cbLZMV:=g0m29]^C8"l(>kl-#"=')B5eL^CqOYI:JqIm:BB.!,OJKdsW.Mf*JQmIBn[FF%W.dRaDG7(>gueQU<HA'nl+U#(g97&\Ul%30iuVL?rtC]%b6P$Kgkc\'KiV<VcpUa!"]q0]MA[77;<E$(+8k`hks<!`4^m!.PIZW.bgKO":N%lg7j@np_B$Z7(Iu\5q=#da\>`>,0cG*X.QuK9<gg[ORGBm*e:46XfN_6TjfAn9Fp5SfS%F:75BHiRad%3:539nF*`)[a0#_5*Kr#)D9g33(jK!1b&Uq]B"(IqLG1kfVo1n*%XblDqg;_G7,s%E;e'+*o&]>B>*>#rKtB[.=@[TR(5+pRE'WS1ioV`9q>Sk)L.7WIkB^4nns@E1MhMQ$bVTqnFjPQe&?:46%,X7ie^AUG%"$(4hftUUOT!lJF]I!BrZYuLf`%Z<"Pt[?iDW#Oa6tlWG+6l^ZtJfBf>t*p!kQG.i2VXFT*c3ahsuGEd.@Qam4,sT3P[&,93-2Wj]DdfNG+MKu8=(IJS9unf^fUa#V#lhT#5"m3I^:]H/.+"oW&%^nb\L"?u3D!j$kPQ4KP3~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1847
>>
stream
Gb!;d=``=U&:W67f_W]]`WuSd!<(KY3S^JleT@\KLX7:l;l0g)K]FJp^<<!,W5Ea5'3hnUE-Lj>@e\W2.9Q@>bMV7ui7Ss=^7[_/N$gk2ikY=H4<KWuN!T"lG?c9!Y\]p4na5<DoQ6=LlOhHU4p>A7,.I`8TL9&m!(/op.0hG5np!QRE6mO\!@"K.$#`2g-6?[,[6n3Fo@NYNI%l/S'<al\0WQ!.6O?pXeQT@$@SrK(0V62HS%#"BiK]kS4M4N@J\R/0iJiC=`]3mB$,=TY9N3A3,8ea7r4(CPB@LoQin=lL2>UM=.Z8Dq)L<2nj"pbNBB23FE<DYBGso0.K@/QmA?1MY(YLV,Zp?:X)]<7)P9GAeD&_'`CG"GuCRDGTfQG,=]54rPjb[J6=Cjt-qS[^cio-mc&)fs=bO('S4cD>krDn%<2&d+7)(3Ws/</iuq.1^jPP<"t;RQTr_;BggWY4BH%*V&]Ma0cm>c;qF;ONu%BPZ^-4s.qg%WO'q\''%>B_hSZ_AJP)DS@H;3X'RPKA/O[C<ap92'b;FiW86pQ<F<)AI+7</)N$)7mX-I%Ymq4m!s[&<[WTil6*_7H4Z0AlYmuS_@@];I6NjOe5,2@7L+8o<!m8b2Qik.b.\#qrJj+K&YVNF)bGf.0A@d?$`"s@n8^p%\8,5YhUQ?1B*'0;db_1SR`AT8UM,tAK%@@;\AE+e^@X]9B,##nfm10O-`hd].B^5k+-][$C$A][-E:X%V\PRY40KaTqXH#IPh13nhnki=kr?1*M_gJB<p>@meL@ANM=Y)W*l1`'ID3Sd>P[)dDU6XOi`K]u:*5Zgltm&u;;2Am($0fSUeQ\=&R97X2TT*^doGFpa@b1I@$FnG3L/je:,iJ\5L,g;YG9mhCrp_5WBeM1j_e^[TJ-%[jb(c2K2%<"%"p*nR(;*b1;OK0''/kX?nQN1OnpCqA:!o^"3+_S]+bpJF#I.PNj)]<_^"6M&Lo.i<d?FNC2ofc*60mgh-i!>h<$?UDbd@Xf&)7Da!jA(RV]dQjnp)nr`%8hOcV$p'=CB+F%@'T*6BugK@$,.JBM98[HB*mo&OYRW'!TMLY8Q\aQ=Q+NR*NB#dpW"+e?+2eJT'2f*H"AC^moB_gLNa?I=)2QAg]B7)a&CjaN7mNlClGU6,aPm@%Muhf<"+RVLD96E/#+,Un`E>,Xg8XFpaFhV+WU$dj<;FiLM#Y7M"@F?WeIejdFIVY_3jDFPQIVd7Vj((m$7SPOW&R0O0!.W-VFG>5D(`+a+@,[!^"mB*oRdC_CRoHJu[/dH8'h)W*A4m/T^iTg'#e-K"mR)rer^sR0O2;inZkJ\3?fYh3&I2ibsE6YnNA"cR)kQ%dh&JfmjbH?0l/D>l%gi0N)DuK\8[m\ro1E"2r=Pb7;3%[IaB`r5XI$4=YT&gg05f5J9)1iuj.KVeA;II-JqM7`%-YTV0T5Ztr.1:r!Q'S2_#r\]X8g5R>?ptG;8`JFjNqE2T)Xtj5$?IX'%!GbUF8RJ)S0(*=B*Re"^,:W!9e&__9Fk_Fq[Q'H]>d)IL,(Ojb<Qt=ZbPE8A)F-@r^_!!a/kYCbRW<blYFta]r'@Ss0nuM5YWBLMd*\F3dL9Y2=^bDTYC"<!rTULn"4#<jhu]!q@Gicgc9uSf@'Sl$*m7%#;?^cpLGDeIY`<GA.YJFec0E#FrF+1\h1lR<,/eWF3nJm,%ns83P]GC@unI*/r=+)fr6uMP0@g,0Y<6d1!tW`c44farGU<:i[0285*+g&S)qPoZh!Y;X7'::Mc'!I^;[EqGD=u)ocZY2*tT(^?JJenl/KKuTYO2s4n"WWJbLMX6>7:[I'[317Y]<?)%'=m~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1944
>>
stream
Gb!Sm=``=U&:W67fM5e<:.,,ql'G0)`(ai!3?$G=8_*(@,V2e:!>^@L1r$a48j$W)[N(?kf$[)98F5m*gVkd5J`)GeT5bA1Hj%=p$IjgX2,MnF@Isb1Nd?3L/DIW9f)s2&M%eQM7?70G2<bG:I*7T;LdFW6.h#[%6Y_<`'S;>9Jq+&u3*cL5UL46h#soH0OEuB>Dp<JWhmQCiCO*W9h4DBi0/Vf[QG9j<c!7qZ(d:7;:,Poif-8]P4;d2,J,A[)28#(c?H,nm1\aZp*`"YPD**8\YMfXlnk9g(4b:uh7R%ao*MKY%>9rin9qcKM.>pU!7aQK?8Hf2g3`8-aN3sM[?JC2O=Fl#Sc?g<Q2"D6Rk'Mfi_5N-^>.04H&`c)6#Zg^Y@p.+eM4*!+22cu#]-QU#K_7-@Y8Qpo>SB`r8lRqh>/\EFW.fTGqOto\ActQ1(Klfn>@H\QBn_[M=55%&0c=:S[]\f&hR*=&]kOYoPBj:]I!FU8<0<JKiL1OQ<K!s"VR@"q@g.m0LXi+"JBD;nY!L-^s-:c<Oms%k(=1Ze%l,$KX][*lDBdRSD1p&NZkb*J*)]XKQ=Yh!f&*$DC*=_Yb<%_:8Cj<IaJ>k-]`#M]$j6T!9u@>P>SU'M9`=]X?=fYiBCK4W%1XNa=G@m4KO:]I3o;W'[lK+LcplElVm,Jh&b/!;V(fn>V1(ZK$G4.NU"4gA`)*tSBIMYpOB*34Fe+o:)gpt5"pP/H'P7C1rH\,^]IUMMiXD\f(MCW/P+H5`=mE=tJp+<0(YI!T59:Dd8N#:B2:isKY4(MFkA==PHW0UoYEl85[n?%u'O"(-XNpNSC,Q\`E]]^\Fh:sB>0F=C4gU_%JeQ_TmG15"@I'9b_-S?,C3c%u[*c95E$_A=[0%09T5t#hD?<&]0O(?L`Z8,m$!0>YV:>!U26UBB,jV.-<$-/&[1Q4`3TIANc\4%:9^K/)lN;/g?trt;","^ckq*IJ8ZK6rfS<R0_B<@8bh7Wg$,Lit(8#P'bp$L49LQbB/toQ:RIatDBClr.0tf!Ebk\IrQ<c%s9QEJ[G2N$bIK0:+q$g)!iFoD>J'-esL-14l>c(tjDW.1H"TZ/hV3K-t3R8O@kcNLPC/&`QD8.sqLtlC%PK!U5?^dd[df4h^X1Xr0r4lm)'k`sG"TPP.X=.J=l3UfiY*&nZVVqgfhGJI'VrnFf+osmQdgQ>&gjb6"@O_'dIcW-3:LV2ilm<Ihp^-L58(&]u_fO]uU$&hh,D4`q^6Rd=$4:>oj/lk$c2rg<"H*Os0JM:t/OW10EO`gRdH.'\8)5D"q5]%FPs#1&8GZaGo0QpZUs%^IY,%o;cW_5@-71if%',d92op%rV;,`:[ihqO==c;O*ZpOQbRb0$c^@DJa+B&;0NE:\*M#I$7@Y]PTM0CA3#F_`Y\FKF(g3`[[!N#tND>ihUPG*9<M$9n].*rBQ[#WSjWnGh>m)U\[;OX$g\Kc\\MAEB<-c*,mnu;GN8_eP71)s,F/>\d/rEg8]FuX2<nG_Ms.*M^.CKOiYY@K_?m9l*.KPXMc@1orE;<^[8.T\8U])W6`<;K3?"5IV<13'[^bH<P'6JZXc`osVXHm:ON>\m,AVh)1(dIiAg7S[OJ=,<ee0MF[F!h>hG$-kqF1a%sN:?;9a*E31cS/:ARN0ep6HPNamr<io\LDL%9.k?j'WZh`6j0Z[g9J_G>901;eQMX\<X1ddmsf2TF"&nU?tD&K(>jP;6G9=ur2:j*9@H!TCR&!]hW&.#P)cmKYCi*9&jMR##7-)C$m@"!1U-n&dWcpR6mc%<;bRkR79UV%0V"#tG??U$,L1>YAg(0E!QNMr15Mj*=Mh^biPUFLkP(QD9K:7-?;[AB5*hYD#2D^ddMWf(H74[agEf^/k3&]?Vie4[`Jf$P$WYJ.-l6mIb9(JJHCKtOp$h+fehlUh$QBFubl~>endstream
endobj
xref
0 30
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000556 00000 n
0000000661 00000 n
0000000738 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001849 00000 n
0000002055 00000 n
0000002261 00000 n
0000002467 00000 n
0000002673 00000 n
0000002743 00000 n
0000003032 00000 n
0000003154 00000 n
0000004966 00000 n
0000006789 00000 n
0000008938 00000 n
0000011050 00000 n
0000012911 00000 n
0000014813 00000 n
0000016500 00000 n
0000018334 00000 n
0000020273 00000 n
trailer
<<
/ID
[<459a20e2e948bef44ee56942063a15ff><459a20e2e948bef44ee56942063a15ff>]
% ReportLab generated PDF document -- digest (opensource)
/Info 18 0 R
/Root 17 0 R
/Size 30
>>
startxref
22309
%%EOF

View File

@@ -0,0 +1,354 @@
# Les 3 — Lesstof
## Cursor — AI-Powered Code Editor
**Vak:** AI Fundamentals
**Vorige les:** Les 2 — OpenCode
**Volgende les:** Les 4 — TypeScript Fundamentals
---
## Inhoud
1. [Wat is Cursor](#1-wat-is-cursor)
2. [Setup + eerste keer opstarten](#2-setup--eerste-keer-opstarten)
3. [De vier kern-features](#3-de-vier-kern-features)
4. [Chat (Cmd+L)](#4-chat-cmdl)
5. [Inline Edit (Cmd+K)](#5-inline-edit-cmdk)
6. [Composer / Agent (Cmd+I)](#6-composer--agent-cmdi)
7. [Tab — predictive completion](#7-tab--predictive-completion)
8. [@-mentions — context erbij halen](#8--mentions--context-erbij-halen)
9. [.cursorrules — project-context](#9-cursorrules--project-context)
10. [Debug-flow met AI](#10-debug-flow-met-ai)
11. [Wanneer Cursor vs Console](#11-wanneer-cursor-vs-console)
---
## 1. Wat is Cursor
**Cursor** is een AI-first code editor — een fork van VS Code met AI-features verweven in elk onderdeel. Geen plugin, geen sidebar — AI is overal: tab-completion, chat, inline edit, agent mode.
### Waarom Cursor?
- Vertrouwde VS Code interface (alle extensies werken)
- AI features die écht in je workflow zitten
- Multi-file edits met diff-preview
- Background Agents (later in de leerlijn — Les 15)
- Werkt met OpenAI, Anthropic, of eigen API keys
### Cost
- **Hobby (gratis)** — limited, Tab completion, basic chat
- **Pro ($20/maand)** — alles, onbeperkt, Background Agents
- **Business** — teams, SSO, audit
Voor deze leerlijn: Pro aanrader. Hobby werkt voor leren maar je raakt rate-limits.
---
## 2. Setup + eerste keer opstarten
### Installatie
Download van cursor.com — installeer net als VS Code.
### Eerste opstarten
1. Sign in met email of GitHub
2. Cursor vraagt: "Import VS Code settings?" — Ja
3. Kies thema, snelkoppelingen
4. Opt-in op AI training of opt-out (privacy keuze)
### Model kiezen
Settings → Models. Defaults:
- Cursor Auto (default — Cursor kiest beste model)
- Claude Sonnet 4.6 (default voor code)
- GPT-5 (alternatief)
- o3 (reasoning — trager maar slimmer)
Vuistregel: Sonnet voor 90%, o3 voor complex.
### Een project openen
Twee opties:
- File → Open Folder (zoals VS Code)
- Terminal: `cursor .` in je project-folder
---
## 3. De vier kern-features
Cursor heeft veel features. Vier die je dagelijks gebruikt:
| Feature | Shortcut | Wanneer |
|---------|----------|---------|
| **Tab** | (auto) | Voltooi-suggesties tijdens typen |
| **Inline Edit** | `Cmd+K` | Korte edit op selectie of cursor-positie |
| **Chat** | `Cmd+L` | Vragen stellen, code uitleggen |
| **Composer/Agent** | `Cmd+I` | Multi-file edits, refactors |
Deze leren = 80% van Cursor's waarde gebruiken.
---
## 4. Chat (Cmd+L)
**Wat:** sidebar-chat. Type vraag, krijg antwoord. Net als ChatGPT maar mét je code als context.
### Wanneer
- Code uitleggen ("wat doet deze functie?")
- Algemene vragen tijdens coden ("hoe gebruik je useMemo?")
- Debug-hulp ("waarom werkt dit niet?")
### Context erbij
- `@filename` — voeg specifieke file toe als context
- `@Codebase` — hele repo (gebruikt embeddings)
- `@Web` — search het web
- `@Docs` — geïmporteerde documentatie
- Sleep een file naar chat — toegevoegd als context
### Agent-mode binnen Chat
Switch knop bovenaan: Ask | Agent. Met Agent mode kan Chat ook files bewerken — vergelijkbaar met Composer.
---
## 5. Inline Edit (Cmd+K)
**Wat:** edit-popup op je cursor-positie. Beschrijf wat je wilt, AI past selectie of nieuwe code aan.
### Voorbeelden
Selecteer een functie + `Cmd+K`:
> "Voeg error handling toe"
AI past selectie aan, diff zichtbaar, accept/reject.
Lege regel + `Cmd+K`:
> "Genereer een TypeScript interface voor een User met name, email, role"
AI inserts code.
### Wanneer
- Snelle wijziging op één plek
- Code generaten tussen bestaande regels
- Selectie aanpassen
Voor multi-file edits → Composer.
---
## 6. Composer / Agent (Cmd+I)
**Wat:** de zwaarste AI-feature. Multi-file edits met preview van alle diffs.
### Voorbeeld
`Cmd+I` opent Composer panel:
> "Voeg een /about pagina toe met team-leden in een grid. Match styling van homepage. Gebruik Tailwind. Maak een aparte component voor team-member."
Composer:
1. Leest `app/page.tsx` voor stijl
2. Maakt `app/about/page.tsx`
3. Maakt `components/TeamMember.tsx`
4. Toont alle diffs
Jij accepteert per file of "Accept All".
### Wanneer
- Nieuwe features (multi-file)
- Refactors
- Bugfixes die meerdere files raken
### Terminal commands
Composer kan ook terminal-commands runnen — vraagt approval. "Run pnpm install" → Composer doet het.
---
## 7. Tab — predictive completion
Cursor's Tab-completion ziet **wat je gaat typen voordat je 't typt**. Vergelijkbaar met GitHub Copilot maar slimmer (gebruikt je hele file + recent edits).
### Hoe gebruiken
- Type — suggesties verschijnen grijs
- `Tab` — accepteer
- `Esc` — afwijzen
### Cursor Tab vs Copilot
Cursor Tab kan:
- Multi-line suggesties (hele functie ineens)
- Cursor verplaatsen naar volgende edit-locatie (handig bij refactors)
- Suggesties op basis van wat je net hebt geschreven elders
Verschil voelbaar na een dag gebruik.
### Wanneer uitzetten
Soms ga je sneller zonder. Cmd+Shift+P → "Cursor Tab" → toggle.
---
## 8. @-mentions — context erbij halen
`@` in chat of Composer = context kiezen.
### Soorten
| Mention | Wat | Voorbeeld |
|---------|-----|-----------|
| `@File` | Specifieke file | `@app/page.tsx` |
| `@Folder` | Hele folder | `@components/` |
| `@Codebase` | Repo via embeddings | `@Codebase` |
| `@Docs` | Geïmporteerde docs | `@Next.js` |
| `@Web` | Web search | `@Web "Next.js 16 caching"` |
| `@Git` | Recent commits | `@Git` |
| `@Definitions` | Symbols | `@Definitions:UserController` |
### Goede prompts
Zonder mentions: AI gokt welke files relevant zijn (langzamer, soms fout).
Met mentions: AI heeft exact wat 't nodig heeft.
```
@app/api/auth/route.ts @lib/supabase.ts
Voeg een endpoint toe /api/user dat de logged-in user returnt.
Gebruik supabase auth.getUser().
```
---
## 9. .cursorrules — project-context
**`.cursorrules`** = markdown-file in project-root die Cursor leest bij elke prompt. Net als AGENTS.md in Les 2.
### Voorbeeld
```markdown
# Cursor Rules — QuickPoll
## Stack
- Next.js 16 App Router
- TypeScript strict mode
- Tailwind v4
- Supabase (DB + Auth)
## Conventies
- Server Components default, "use client" alleen waar nodig
- Tailwind classes inline, geen CSS-files
- Geen comments tenzij gevraagd
- Volg bestaande naming (camelCase functions, PascalCase components)
- Throw geen errors uit RSCs — return { error } object
## Verboden
- Gebruik geen Next.js Pages Router (alleen App Router)
- Geen any-types in TypeScript
- Geen inline styles
```
### Effect
AI checkt deze rules bij elke prompt. "Maak een Server Component" wordt automatisch "use client"-vrij. "Voeg comment toe" wordt overgeslagen.
### Beperkingen
- Cursor's parsing is niet 100% strikt — soms vergeet AI rules
- Hou 'm tussen 30-200 regels (te lang = vergeten)
- Test of rules echt werken — soms moet je expliciet refereren
---
## 10. Debug-flow met AI
### Pattern 1 — Console error
Console error → kopieer → in chat plakken:
```
TypeError: Cannot read property 'name' of undefined
at UserCard (components/UserCard.tsx:12)
```
AI: leest UserCard.tsx, vindt waar `name` undefined kan zijn, suggereert fix.
### Pattern 2 — Onverwachte output
```
Mijn fetchData() returnt undefined ipv users. Hier is de code:
@lib/api.ts
Wat gaat er mis?
```
AI: leest code, identificeert (vaak) async/await issue of missende return.
### Pattern 3 — Tests falen
Run test → copy output → chat:
```
Test "should return user list" faalt:
Expected: Array(3)
Received: undefined
@__tests__/api.test.ts
@lib/api.ts
```
AI: traceert, fixt.
### Pattern 4 — Refactor
```
Refactor @app/api/users/route.ts naar gebruik van Supabase
in plaats van mock-data.
Gebruik @lib/supabase.ts voor de client.
```
Composer doet multi-file edit.
---
## 11. Wanneer Cursor vs Console
Cursor is geweldig maar niet altijd het antwoord.
### Cursor wel
- Code schrijven, refactoren, debuggen
- Nieuwe features
- Boilerplate
- Documentatie
### Cursor niet
- Git workflow (gebruik gewoon `git`)
- File-management buiten project (Finder/Explorer)
- Terminal-heavy taken (gewone shell)
- Browser debuggen (DevTools)
- Een quick lookup (ChatGPT/browser)
### Hybride
Veel pro devs: **Cursor voor IDE-werk, Claude.ai voor brainstormen, Terminal voor git**. Gebruik niet één tool voor alles.
---
## Bronnen
- **Cursor docs:** https://docs.cursor.com
- **Cursor Tab features:** https://docs.cursor.com/tab
- **Cursor Composer:** https://docs.cursor.com/composer
- **.cursorrules examples:** https://github.com/PatrickJS/awesome-cursorrules
- **Cursor changelog:** https://www.cursor.com/changelog
- **Cursor forum (community):** https://forum.cursor.com

View File

@@ -0,0 +1,219 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
5 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/PageMode /UseNone /Pages 16 0 R /Type /Catalog
>>
endobj
15 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
16 0 obj
<<
/Count 8 /Kids [ 4 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R ] /Type /Pages
>>
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1919
>>
stream
GauHL?$E&%&:N_CbW1*nDBfo'OMnl?g[%FO]'\oDDYBdg"2V91N55nShY,QFKJ6dqFpRClcERo.0JdopB/C5)#=#TlNog=+NSqc[$C&A?!n=P>(qk\`,O:8!1X:[:KC):O%2d`KX8a<7=t07%joGi<84V<1Gi2/.9,U9.pmr$r5d"McgnJ0amKi'./ZI&Bhg=7g3FcaVZ[L,Oh=k^bUinDqH0lW`C&UsI9$eJUUXf$RL\elCd2^G\qf$ri5A*np7!De"^`R-jU:V%U(_cE(&mhW(9!X/nT>B_47aJJnN`(p2KYYR8deBaib%tOOHjlom)?T:Spk077B],t8Mn@ISJa[(/O+u9GptjfsKPt>b5_9MtboEm!3jIhqAaM:/aD)bEF`#1nWID;sj0gIO!0&m/"!c>5CITMK1S%XUZ"Cpg[5k@oaE#Xe"M\aJqF?Sjj/b<M(Y,B\1)I2O,_fN#6t.uJLRkuSdM9'GSI+&5N\=W'/?#B`A'KhLhE3XIRh;RKk-W.B)7rr3gHMHs[_P"pq)#n2fHc^\(uE#PM`/(?%3u^iF/)*.b\&D1k(5i7*Cg5Ol@Nf->I/RDpf0JM<BY;^C(9N[;/ID??7b[lb;VFM5%\SqX"dji@g-ejELGpL-3rfN\s-TCF9S,/p:8WXI'K2VH4pPUb,IL8:&WeYmslq5.gX/mDc[AnQ%kra=Y$J/i7W64Hb&6[f;em3Up9[E9t,7Tfm12'a5L:"AXF/:boe1"6-efh=;HtphcKcjrstC>4m.S(5"hb&7H,Sm%t[(IF:rhQY+r`Jl70s:7Cd'sduM\-XM0bmPf,E8+_rUd\W+E(*r,Uo**cPO04BlF9OMl]CCOMh:l(BFU[ZG/#S!ppQCW8BW8,DO%!FT9[D564/jg[U4,_I6=,2j)n9nE;ZqBrgpNMsD=2WkroLk'"-C!0b2q3J\i!J6G*:7FJilN-?<c&'tN4DXNZK:kS;b`ZhT'Y+r?)DT4ESRJfq/H%(qk0"A;g0o9;btQ)5<joL`!)NCs4>NKGEf2HP/IN\WhGnp#E<5++\r0$o`3W!oe_2#Wa%17HVc1F8d.$KKksVN@:#s5"(n@U,(pd>U*W>TE?%2-$%B>oIQe>CCB^aU1!`gjP)0OhAZcB"gEg>uoG#uI3Y'e($"0qI?uI1GM`[a,c.U'`r;HM^B,[a>+rhiTI%20Ha%h63mt6W07!G%GEG@P=)WWOUUefubMC>"C=D,[ZSu+F95$3TkVMf9)a9q"r$[@@EcN`m8!R+,7cP$rVBam*e$MlU@9(]n]Zs&I+>I0#9Yh>&310uEV0G@I+=]MU-.Do@Vg3M,l*sI._=s\NG+'P[n,e?i<*/058Pbk5Q>(Xn8j*S9D'2u+]C#fQ!AOn+7.[d&/3)'D]H:21TrNa\fRkM%ig2J4I=&HNEWacU%Ng+.nQGh/VS>OA)Vb^ALGgEs,:<=d'ehC/Op9dn1io#R!)+Omq,Wq[cVnq&aq\n7:V5\?&lD+%[gG%]1QDb.nDT&RNHE##dd-Iaq++Se/@)L>a-@C9HV.Pb>#^gD\9l8Nt-m.pQ.@2(@>:-`>7ufkU/)?s+g/fcSf+sPeHTE]'G\Bt)V1m#>4ZgdV)6C[hY-6'OL7qf"#f0-pCHN6-&>u1a).\!aai@""%3s0TBgmqj3K;L/R-KGN7ZrMN]npnY6UbGS&p2rIC\9^OVW8`@Y$H<s%b3`IF7eTKle9^.<YcL3RYBJo4\Tq#ihELimW06-ft:Y!+!*W[ai^t44S_\#?E\`L<o-Xr%Q`k&qSmC1<R/"pb<0"3OV/UJ`)p(38Jimm6,Fn`jnajIK-EdNXAqH2AC"tnAH$r"_lnP.hN)0"l2"@dW?_*)'s',iWbVH->U&TG;#a%]K7Ns49Ze3q6=NiqW3Ujl:F<ZJ_UHm.5\1,b?c\/TM#~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1629
>>
stream
Gb!;dgJSt\&:N^l\m.fAG/U[BHPJ1_Y`0fG!\Pq_KpRqO&qa4@l^:l]rqc9Tl3?fg8QPWg.X7?:Sj(u.:Nq_J:VX"-gReJ9FQ)_R!TVNI!Xl[Q]'nTpGOOR`a((]o&U6V,#AjrW4",ToN:mrRYnslpRmH<e?CHNYVT_]^Fpabr9+mP@5o@>iA)JZ<T;3WT.?!1B??nd)@a=6'd#6nnrUg&fIqe.RgP_udOdl$!N6r;T$>OH9#X+eK8HdiUm/MKRFUi&1KXQB*FU%k*KDc_of:44-Hk()a%PsZNGmW;2ke8N"=>Cf7.7&cRa%"s][8%6J,F;jbPlSO/hucDe`N=dpS47ruOf)^(3j'&o3Uj'hn9G4Mmo*']qNY]6ZK/8$@Hlh2.A,:pZFYP1P2qa`b>&8cM\o+?dTo\!)N;#C`_T!P4>OKE"#q?qEYbhP1Z?]2<%pSY&5=Ki<?3e$+0au*AYV>?q&;ZW$LtlE`XX?Zi$([6I,9Hbj_g%&A\SC:%?qP335.M10g=5)00VMg-K\6m:m!<6`+([]VuN7VLR!p7jl:,n>pK>/04Q&Aa3,V(G"J.Y[;)p(ZS9"U8(^&T^"rj2EFa`dG07;uXSnTKR@Hg'K,/Pt&,LU8BBZ-l/a*Kkqp<(ic!gN6jgee:/rc_Nr5/EMM%FFK'F0b3BSjF&LNuJ[(9H$Y%oonS7cC/I;NZ!L*kXip+n2&J712L<OK0gKY$!tpY1_'Qj@X2T')?5bP"/@2M\9U>!0%4@M=2t2\LX;td#b\4.Lk/W(a8*n#`]-)Ofd4P^q%K_48+7[N_5?ss$5qs+':b*nN<^LbN:ZKmQh(`Oi)*&#d$IW7-Y1A[n[cqC(5@h^?j*GM;l(?CGT^#'%aX\4h>mEbeDL!.aqi,G="U10NK-Re>9%3XPG9,Tr<g(bed?b?L%WpOhNLYG8?7KF\9B<NQ$:q:7#kUTOGdT/gQ$+#:T5B6e^OsNAB(I,?7JiAR!33OBL8Yhar#moUZZ/E$qmb)R.*G@(i_Q#BusX,Bj8Dc6p.\DT4W>kaYTsqtl;?RX^.V<.63&K/LI8mD/]MBtACFPeIo8L"TSk3G*s5)/@VOZO9ak)Q:(HFcj9<iharDQ,OUa'`ff+WTcYa[*J%$7c'"$")2Q@#sU4M2g2AInTQ<,IhA;.(e\UVCWLf5q:hrcB?FDF[e&G!+MjiJ8Y_oL5ing7B_<=%,'3JAbE>AkfM;"3ptJM3Mn?DpLZ?7:6fOaK9!&6F,Kcp,d)3.b9Zl9V]=NEO[9uqS),5>]*NdK@)g_#en7oi*'?]M4diX&eIs9R/L^9BhBFe2+]JKJr=)K#i)M>ol9)\%Sh1uZ&:t7+5C&FNpfgP^.,dpdIX$U!&E.lolN(Oh1gA\:_6j5@nQ0[L\CCG?UV`Pm`']_a@@c(%@5dcUjF$JJE(>X<gB1O6"3c`C&/LSW3T^5EbL7@q5nk15feJTrd7.O-"Bcm,dMRIfpSmcrPFEc,+U_6WN;rlnRmB/Aln5e+[)K]YpS^R7?=9W:7P%ISG91.RKg+j_n+8FR?2CPI/\<E/b0o>85&;;VC2LeH,nA8h!]\')mh]ND#F-&kofu5";Q-Kd`Q8'A@3+h`)Cghu[;ol4j>+Dhk5E;aoF8~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1971
>>
stream
Gb!;dgN)%,&:N/3m!'jU2mEqr]P"+j3mOR>S2@3FkJ])"[A#'HKZ]5'B);%'J<WIEU1HEX['aGlZkgI1KAD/cE\Q^rok-)dGWCH?D`D\:__H+g=YMsnf>GEH""##H=uJ(`1JD-Uo1el[Gs'0`G*q:tT7^ddb]>A?4O-(8pH[(bfB"XG#ihfb%a9&(f<^!QgibgC`d!\-6I=-rZQ7*D*oGoI'Ki!J%6B)D^M,I/i/L\$=\XelgidNOcJe91YErnkZ])/F-;p`1H^SA#.H*l)(J`96'jbB"(RT[__^Q"dWWcRi>)l**3,WrgF"E2HNpB8##'#e0@(%EW6k%q&jd68DCr7IZpCU*ZKX"tY=BK?*eZ5tFSR!Sd=%&O^I;K2!@dgsqpOIOCFmH\d-Y]=b*GM8$aVN86I:m87hdB8]3UY`7mLYr+pXdt4':G1a<UMb(L!,-DOB1M9K.OpcAfKHG"d+GpO3lp5NaWLe!S8/p*<oLmYJ/nHXg,U)BdmV6>Z<FHCRJQ2AMP977b>BjR-gKa!Sc/Bca#CL&71E\*\Q%-RK9>XdBe%DTJ`V8LgpR`WBi/0^_A$1#F#6dPnu2??H==as7AUQ\CN0*Jpl9PQA"XQ&%9LM1(Rj<TI;Nh0fstXNY&4d9Ta#T--`W[O`NjLq=>7Th$;23,<OY4XL<L`V.F[0:=>TAieVVa*(6XIMq3,!'Yi#`FMPEL$'Q&hOC4M\3^(msq!II!fs"_Xr-X]@FI0iJWQh?$i](DD35VOa3EM*EgOSpCAY::Tl??<28J%+NqOje9=!&*2YODodME-h!""F$Z\.18Rea`-7!QuV,Bd7'qo.$/:`]E\#'92B`N7;5,_R46!D/cP-G0i<.H4h<JNeeUe`B],%>h-+18^]eMVUJ`J-:9XD)jtL3WJ%0sTpOF$GR-_n_D'&l,=97T86HGSGn@na0[#Yo$pdoHV9DF<5%"[_>%l,u57V*soYUOK[!;sVXFji-+3CV&5Kg[CD03k[20ms.Skp!Pfs.FHI$^j^g3j0/<dW52l.nB@2WH7>^&)[C#%p#.YINolJi#Ko3FtQnXaB0IBh*CrYRZs5?R&-(2c?V1XtliB59ASmCK*S;hp0Wo>5*(0,`Qf(R>t;/l0=L26)aaRaE?LCi2d95O)qkXnSdXc"8+:Jio<Uq0'^+ZE]Jn$jtk^u3Z,1+bFL9Zb-NCQ8'A]s3q!+@0U_@T6W7(tb<pK'q>+dZZs'M;BrtZ5qia']ZXAePjAqW5f+MRA()S@X"D<sbl@:Ku7m:ht;qq+k"K^1c0*+\%_P$*9?p`roPp-T-@GGBB`Q^N`d4!,rimoCR2e;]thLEOa\)RVrGr-]E91mt.5Gl9kp%"B,MVW0i87d?FKe:jAW+rQ!N%39A1?_d&s#U7q8.cYgFN3O7bu=u`ko*=-9dq'W9((*/RG=j__KR%qNHI=&4BD\PQr%L]_,fmNLI(mh.WBau;60'CB:4tuhm88fZqt(m"pW`g3%8J/2eYSfhG`e,5='pk"Z8&sEi)D[+@L@JWH2=&-0?qZa`J<`H5"moXBVSa<1:Z^(jF7(\mB>kD=FrU^!35##rguE]=X=%g_VOVO&=c7[Z=VP7C>s/ZRXEch(jVLlDYItqI<?u+rMqqZoh6IV%u?oFrG3I0<4-6ck#Qm:3!2Ll;n/]-$:@S@QNdre9q^/et%WX]84,H5*Ks9M-efXn-g4U=(9g.HI64"`W"#8)spp[&n7A-"WN-k9T2T"dU]$m;:6lXZsBTtZjgcW/_=WqD5s*!o1lXb'[DGHF$o#cXZN$KH##2B^"9TkPE*Z2-#I8DX#*0P2,cmZS%^d!KDO'D3$Xg+kGOCNSmXIfi=#5dh_QfU,Je6;Ve_i(c#YtQrNM?#lK<>7XpA_pq8:_[i)1;!R--5[8W\o[B4E7I#BuMNYDtF1@9q*#P#57#;'eFJ_j;X;PY1J++G_4HPg=E@P0nI$_;HEY\8bX~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1727
>>
stream
Gb!;d>B?8n'RnB330TcUUmDW(69sGVm^AV@[_$Bjnrae,+$1b'(1a?1YMURU0m;mlp:?f/@N,]NF2*+C%bUFBR*R_oGSS'J)[@>ed0(G,EJWJfn'TOt7huc^k8m`C@(RQa.s1G+<7@T^4CO).Kan6oDZr<0*]R13KE3bfkPL8M'uK%bOTUn&Cd6ic"car3n_h&q$-%cY[lbhNp%,;5JJKoG6n9:7ft<+Xm;Q7*3iXgACrc-1Lb^scnFu#Jr)$.mNc0e!KeKICpdW(W@m6Di^i)3QZm`2*$ILFncSU7q;(_oJ627KKhdKfk@aYh`7o#7Q!q-`r8/>H,&?HViGD-cV2CH\siuS^M\>JO.lPk?+>%*>sYA1't:6CJj`>"nriH4dJ[i8+LBB/0)[5So":L:3Fe!I!hPR)P1U*h0276nslW`d:Ji\W*l]BE2ug_Ys2D+JA,mdOJpkkj3ObG>I6E^>hOp/W6fPV7m?X.rGI@ld8L[&%HGZq"q,.Ai"nO6q*Xo4].(A%7)jB942u_0l/G(Ful1JFp697c>34[>Ac7Q*ufb+lb"'RNStsfpZ#Ig/mH2Rk"lYOossOZ";7*)a)rO@XNWFr"a@T&1^#i+o57!kI=,V"\Gl$R`H=S?51Z50/[Ui:dH]iHi]VV,^f\nOlGm5O+1F+Hl%^Xn&OFJdSeXA3D#oZLl3uk>6A`aNX'uU:/ag:Y?SLm_j@k<LAR7[F'M;g/^`qhIAVY1fS!Z+GR`FPBAZ>5Npgm$dWI+eE<<&YCF9pGc7u0:^/&X]-^:u:-q_!m4\*8.-r[e5b*isnrd">lH0qEbCPjX0lD0N!@U@=ERP#hdQ'D*SXb?@W3rVM^p[]N)<0e.";Q,g`^#@Z1q=ag@H`7BE2G7%j3_:`SE1B`K\)"r-1B@$b>$l!9_!<0p$Ru2[ZJY6TbN6UiibmVg=LV_KcU?qPK+D'/R'8X!i!dm[L8`^n%XE'mFF^I$h%O@HP@g;QoT`B/f@quU[!ocVZDnWPhDh(!<3lo`Ge`YJ?.6t(k6^"_>im/OL6%P?U`NoRm]W#IIoTSk+X=pI4FjQS#+:Bf17*"'"+(Uq,F<O:/1$Rm!Ed>N78K'gM.O3Sa"fb^`A/K=;Q&t%bKsgOAa$2.3+?Yq57G_K3BA]YM][I\FLZ,g1RA8?%9,?OULH\Yh#LtcTS[ZB1-83M9H2&AHJc)%`fq$4`A^VoDlIVf3Wj8W%-]Glb?GrdZ_VAO-P:p$q]n+ujIIG<93G,L`B%sY*C9rb).jau,H=^)i$6ha<[uOXc)Z]W!E%#GJM6icJ5LuHL^*$YY:SIHkFDdSSHfpFedj)B=dE^?UT4=i+S1T1C6dSOO#2$/&B3<&`VFt?l[[cl\B0J*os]I<KBVM/d#f>Ha"I&MZ\[&tI?Sf7X*P=Oq#F.F]i$j?$E>Ap:-?1@0OO0R62jPq6,kXFMC'>nT[X2U:adZ0HuAAiH(#cb^]fZ%#K$^t-SHhQp8_rC^uY/3_:_!EdK[_AKIrNmq@S8R92&W`E$Adl<58'5okHCU,[\YLj$_o:XN%3D&%STm9&AqjB0!gm=Rnj^AV>Y5%8\gK@CP!9adrqk+^8>VLS4)A8JT2b6(pc"dtIp$bp]:Wk#]cP-0:@`?!14I>c&8VJ"#Iqk%1E>lqp^`O7s_/@9fJj^tT<u!L:iJ>V"`Kqpaj,k4t#<\Tqr^/VrJdYlr<Zj+KnnGloBl<(X>91iW(/<6n^;~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1831
>>
stream
Gb!SlD/[lo&H:Nn1$TPV>dsF\?E]Jdl<St,'6$3'O\Y`33#cL/gDfKR$iT`WlaJ3T>c.b!dksjofX!B[bg+D<[_]hI?%,6l^n2i2IVj^3@5J)@,qb/5_Q2)#f)n>Woj&)a__!7/5Q]"(5oq+Yi%`(M)VDhWT5`ZkQeR2bJ-3c5^2Nn1$^a(=Y^uSno!o-]gE,DAc?b7"9$t"=4N<!?oeepNi!"eakR_A!O31;9Y+9=83\I[RchCh3_VkCM(N85:`M/1N8gWt0k9?@1(fT_;+)g)6\.XX%MYno^(,1&H%'1n#)+PL1^T$k--jm(gQ')Yd/@,o#2$G'VJrKt(CKNcsKR9#COiQ3l2XntN>.Y2m\KR:/R*b[oO(!"=apXJ!.:<ibNZs`@';;8Fi'n%_V<R$lZsG`%%Q,d?`$'Tqmn8eZPu@Fb])&58VX$+!YlTC`OiJZ.Mp"[/k)c=o1TA]%'0&ubR4&Ln?>mIr'T#L^Oi)DTMb1XGQ_j8`89!`;IQYY6N'sO/9VjA]:WZ(RG".8kmTP:"?)??MpZAV_i0r;`cF[X+EtcO/\O-<H?m=nnh<#,eekKB1mE3dmLeO5djjC0mi:%Y%GJSBoX`TkU4rE%gh[.`9M.bSu?F/0/`_PXhVXb=25aA@g.`Og%;A='rEi]PWa=oX6>V:n/o2sPoYOf$(F]W!M*q$3%^oH$^kfW!@MSrDNNV^BLh_0*?;;Su9U(6X(f5bl;,JcTfesOF*>)cNFa`Jf<.[i!;?fiEeJFKdR?F+npAhX!2gS=[r>M8IGM3^Ygbf"gANsAZ$?=a`J#.uHACr$(U!e9">A(t0637\FQ>F?@-="9%q2AP>@3D*6b)P8_e@5aB*9]Q9<cn(-_b'RUebF?9L,;?dd@C:b[=@hf<@0ZD/cZ!4:`C*'bF`O98)2Mg\D1;NIi7Z]A/+]L(-jadJ84j5?X9_`8VIA8=i]Th_bNVf<:g_'JP<Xhfe2K_[H\fJ>Gt&ktJtYdEA6ie/MG,9%R_DXdS2l/LFS^AEQS\U<6UTIqXk]TkgZnA&*B:_!HA<#<X]6>g@\;"o(3*UA);fWGi#/4#fY:Bf]/M$uV\LaXi8c:TJqttdW2<^n1+g3`A'@[#cGO1b%7A<SQl\4h:[X0AR6`[MMF)K9MC_sH\;.i.a=a=)BtHk`*OZQZ+3NRdEqfHO[iKTLA,C+=B%Gq;p=shES'i;0bc?k7I$Y6JbZPG3f_TJd\Sf/o*!6`'*3`bgr_BYCoX[-?gsA^_pSjr%FIQ%,D(YqF0+24XY0-Rrk=r::N!;Qur?]t*,ou7al62TcncI9N,-^14a`#Y!i#[-7;lVj'NMj6LE4,%O.3^d9ij(W:o`8n\KZiKI15lCa`OFZ=&.T.a36DZ75!ZOJGtEDO=`FhHd;R=Y$;Wt!3:=^o<QG*&;`,:LG^I>,bC:-t"]l>7?oenKWQa@r&(Q,p(a+_bj^+sc6YD=S(-N=@a7I^1gmj+\0MOWq[W!-8n$2VL7>E]%c`b:$Le/,C=qV"4&7HX)HN:-]L;Oo5C4dp&VNJiQ?&5"3e';JoosBNia\UHn$;?1RlFsLpC1g?jf1Ri^R4Lj5%utD@n9[2n8Y>snb$TP93H^3H.T_@IXK=Eki\,[4E!UGY*LmAakH7`IRc?@Ni7$?[n_guqpuuXj1HuNiFq[?7=bQT7m:6X66X,*`SV(QI@+m5S/6La,\=ti$E)Jhl]V!;Gcee)oVLM4p"q<kD@@e4Rl;GO-8EtA"i"/E^;K*((Efo=S,71^O-;6l-)\e#6cI>IIT+ZC(gjDK<>_j9gS8WX)Bcj8k*reVqVTcTI'\MOcE:>NN66#I~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1936
>>
stream
Gau`T>BA7Q'RnB33)aFE^_0Y1jkBknP]E='=eMHaI;p7GF^nWY=_WGXrU5(Yhi_</Z7p+D8K(_mp[aqOAO,e)gj<3+4J0LL.gCsMF9,&H!Rl8^E]X&47!QL7i</TolGX`6m+EK-fr+s:+@44]"q_;9'FGB`,>f.F_!tYHZ4OBr`T%O4&dC1O"H\H85nr*6mu`-A<%WnJ"S)0VXaQ<h0.&u#*Lb[ZU+kB=>,Q\GSfj9nTb#Tb`p`piI1'sm-L:;/W<,7&/^nbCB:O`roG1cS93J3Ye;n!`!Ro(i_1kbu7-HrKD@:k?le8:+,NM4Tj])AuL4G=%_+m>4>I/oX@$"KLOWP0)=WCgoqTgM42EW4C-fI7la&%da(cJ)Tf8>]HW'**kp$iOu'f=]NM7Pk7B\4&_O9N@;U:Rb"`&r.PCkRSFh:,ZUYFqiQ9/4;uU1iRA*JDg+=$!(.0a3$jD/IT0h@+n2U[sVK,Pu6(IJ?E"m-9k!W3(l8KNZQY#9\C,G[][]odj7J%[0nAR&nR.TiPqRM5fH:Oj=O'odZ@U[9^;U!]kn(7m`8X-h6V1*5cJ`f]bP!1'8sUOO\`To#cJ[&tC96>&'EP#3HO*Q"=u"aX_>2>+2k%%,#JmpM'<5Q8?5"QdGO0ek_H#o,6Y\NR&Z.]sS^\`'t,-oCh>gm@NdbL(-L)_:H-6=4lB4J[n.7ED1nYCL&Hmf7g;q*a39#+]C0g<Ft5-ZXrR,#5PM@%,0.P>_\VEAo!)tX.8\Q=(a5DeF-?s&9Rfhn.a#50B_W#ROn"r!iDg#:+M#)b9\.?o2%t\)jo_'+H*)'gWGd)n6R#(MAhL]^O/7/+ls\TF<4TK5a8m9K0r*^iiJ"+p!;q9(Oa5UlO_Yi=GBGoUb([*[<g?3oc*l0(r\p/G`:pFc*`B&N"-]DIG/N&/a-7e7eL,7N9XL.+H-fAIPF<3N^>^BB$,b/W]gl/nSt+tb7CU$G%1Qe&Wca7OGQjZBIk'5&)bAOl#O7<(1E"QkO-ColhZM_(H&DsN`I\*A9%7%Z.VbU"6.@`BI-?eY2i0So9Fm\kWC_!Wk$n0+qUn:3tY%j>ijKU0#aE'50'1ISa)CK)pcMWT#:#9KFiG&BTEEbRu+g7Y`)'t%YHsLa/Z_8Q-&-ZJ\kM[BLk5*:8GTloKPeR;&,\+EAT50F^^lW!R:j>M]>e/&6T?%;Qc0N6`&pj[RU^K[%"h^_Nu$0?"9Ge<KUAR$"R*#n]?Ui]fh\%*nL=Pe^sM.WliamD.N;K&M]K93_?XQDFrL6ShCYs)G-j,aC'aqRNrUX`[WG/.`74A8L]R-S%ZeP8klIgq?c_q3_c'nZk(m)PThmq,)UU]NcV>*)W.CB9%U;m%=C2sDB#gJ`UJ*C'`J+jZ]ee+%R25i-apX'2@0^kc)K2Km"Oa(,fE-c)>qd2Y!%o.@U>Pl`7VKj13Dls&8b:32S2QRF^hS#D7sb-nbjn//#T@)D#UWm7<[uNiYL%u@J$<NnE",aS[UZb+;`n3c@Ik.7PY2%d*Rb,hC$`mR4^(nq^/![3&gWK_&l7SFM.*hcQBrfdW8poRjo)8j.0b^q'VLi^Z`eWpqRKc[du&Zm*7,GMFC?L,ujWs)P$Uf/^VfihPHOj[TfT@Xgl-F0n3+VFcX-@g4u!gQdY;L"Q"?#dD=DYFIfZj][KE4+['3FgX((50o0%LTpb$RCKMmo[P4$!:ut4W)5Y*Yn[E=QTsZ@cE#HQk=@**C^!//T1%a'X5NqqrkMN3q4=n=MEQ1u!.OW;$&54m:[.nHRnBR5*7%Q;Cj2BTeU`9=46?iHn[o7V_:lDd>h7jc/YR/\J+hskjjBbB=?WKUeg,dT$+Z6uOp;t@e)O6/@3;C8ST#MW52uMl.%Cn"%OL''f=VNh@937Y\_'JTA"l@Q*P7NMdJQ:Y=(J&(;[DFG^)ogJ\J^M6Ck_-n~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1809
>>
stream
Gb!#\?$"^Z'Rf.Gh!%IG-P_pu96OXMh6c!]VVA;NgD=HWMClW[f[L\4fjDKq[ZO:Q"Hr._)_tfSFMDqCnWbPJpnIG.]EJ"X%&;Dg."h%(-mp"Sn)2`@n81FX@$1a[r6Y$["sid,+-a)t%Y5`H@M+=@P9cA4GXtCC7NjHj-RG$SC7%1*:`rY\1?:\e)Mh5fYhgaZ0m(Z3+@L<oI2cO,_i'=aUVedTIl)m9BUb6ml>tt45R&oK_XRMZ^Ycnt@]$2N?5+9)0r9on"t#:#GjuPUlAa)HPqJ]Ep`.:LXb33B/j`5taBbS0FB+`<g)0XaAneD5p'c>c$>qF$eqPK!6,LFt=S]PDd/<>Zi;pD/l<WqK?*RNC:Pue71(CfGM\9c+UY#M5S-]Qkqob8TYUEPOf(W:6jq,k(JQ8Q_$_8C.,^F6q,4t.NRjOgMN<GukI5YcE-l=(C#RbT6K&qMUfc\@qAHRsYE+(]d?m^]M4kUn`[r^P[)rj,=]HElTWU6&qPR<7:\&Mu@WJb.G'&*toZU'EV_qr^GB?][h`<3:O-GqJhf'RdM9m7Hck(B*Tp=0.PoU8-Hmt=3J(AL%_6mQ6+$"0-eV+_?An`<BXZ2cn>':%a75oQ^*<i*dE\V/#6>3a.Y^g6,[Su0%nY"/HAqY&AV#=',RWH<E[aoj'/\6,nk>j%t&D+BG^^)p93H*WJ<U:k<?n0@iMoQ=j6OTgImhB#%]Fk&ojr>rd%bnC0q8i`:1G59MII0JQHXp2+,3W,)4k=8@NB/<g;;[c@Kn)OJUUFpYV&DF)De^#0ocK[f;MsCfnIT4>N1'cCob(kA>b6s#5V4h"\e_9@#-fBdr)ZBg!PEAjg0BeVGIel59*;Mq9S`Cu6,F3`FM^+i5nN(/dkNd]@(J#0Xhkr=rr^6b&<1A.3;Ah>0:7`U*bdu"m%r(9C")C;A7GpmtHCS#tBS_R7+5b@3*Y@;Rd!E9KP4'(K1KMg?50qZ`O]nSPNn[;&-0-a/pkhZt;tu(b/CWmnI<5u:F/ZbCSZeg#/^k<-$#33r:#h\=PMo!1"kHjWQ[(\k(Fh:EeS;4gb[GIU`o=HhE<)VV`;?8-'L)C'T?!<d"]L]Nr.$aP^OO?hYB)D+@X#QBa2R>L'q9P$`^\p;#/QXjTFgYn?_\f;![\#sf;Qc2.$VS_<"u^'>Qer_C6\VT1s1f&SM@>>otVIl,/SUBZDKplTQjG\Mfk>mS>bNTZEuBJ&=Y.*H\?'&o3QiPl.G4\(g`H'\ss3-SU:D(3]?o;A"@N(l3#e'^:kVbB>`o1Vj7Y>l"QoHGeI/iqbhXOMI)A0^j!<&Qcb^oeY74tHOk1J=Q/)>n+!<3'lV%UZ_"2L']o<:(q./MoR;@W6V&E##^Due_JZ6PO/S%X'VB!#Mnk<S3kI&*c>LSdN-Utt#H%)FJ!rNPkA%E1+<B"7`Mc0*f*GL"D(e$#BB;0[^]p:`^XaoXVCI!Rc%^HC`3Z(&CY$;,L_nAMlu0tkmOA-K_lO/G[;jnG2?d]+S"qUS)aE#r6=r7*_XS\FCcp0K4\Q3"@(FQVqJ;VS@s=(W6:f=tH&dI$YFRqTE"d,;aKcJ\E/^okKWle*8dTmaA"Gj8T<-3CbI"7AI8I.4<Z:Iu;!qA_`ZMXm1OYt',b;d"Jh9d'DKlgdcP)]#bM6@\rZqg!%Y;ufk<Ff+)]hIlUYkJW<)X"9na"^iD^jqVB(!LfG'sY?]A"r]U$hPO<6?/4oW`,'1o*9AGJl9MVi'YKHG7dO]Id@,Yh+^qZ\RA+HVr#V!>E+IId^4K^<h,i;V9.Ul3B8?l5'm."oGsZ6N~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1122
>>
stream
Gb!;c>B?8n'Roe[30-h4&Vu>VH/%K4lu]i'/DDPe#V9J#5ctZlq=cCW%Sd("4?FUfit.9JF8=+*oGn*fWIJmYN&#oZ!>ma4YQ_iMY_*o$^;+kFq`."ZYrp&1A5gtN/O7$U^HffF**e)ODtt6Kkoo=Pi)#@\odO"scL\7FP/HS&$j6'VktqZs`@dkFKtWJ%Aa.POEXD9.gNWJ@3^"RI/j#V9qps'b%buWhH*nZ'@b5ZEaC,#?YO?])=i@t/ej?2%O-2V/.p,o>#CkOF'n>/@fQ)6A_%-f8e,]bK*C;UdipAi+_M^a;<U8_;`C\@*%NKlF'mu.0V[H1(e'XH4b@\*9,%rqi)\/qi"22B#WnEh7E&,Me"K0Pm\?U@P%BK((p:S'QLIp2:\JS7-L^!0m`&Z[ur^e@aQeR`R4rQcj3?jK9?sJPeb]p:X8m^NPp+-ua3b!5=%u<Za7J$HG3'*tZJ2S9MQEh&7nq=&@OLpNnIIj\'nsn_pdDpRtY]]Q%l@:FQh^/[[+ZHH$<3Vb14HsE_JXBM*jNrQ;DOf!m*[dubWcp@.S5"+"99*)(Vc`EQ`>a6"c81cmR+Enr@@8O8_cDX:4OX)&2rmUaNU's+<(JVhn_3V[Gb8HY$ZEglVKF^Y?ZYr1#`<IUg7%e/j;a%7:X_mkrs+gRU+3[+,nJ0YDW'dL'Bl]#9LCmah7V<@I[3R4JQ.G"\^eJJf1b#W#=d?TIKeW-T"=dIJ#0'8+%)GIa+r)A:l>g8mWks@rC3p'F.UrQ;cEQi>kIU:1XN3!K@#[kX6]A7bKWPe9NepeLaDFT-s;`!CPC9Yr?LsTTj<"6h[nRdRQ)9&o7cSkqDSXZ?[!E(QDV;[Dl<[`aEEADfAP0g%Q/GLhVO<(a%UQ:ZZ_*Ic[#Ne.;'<,&G-uAc9L=!l!o]K3U=)eko+%\U>k/m_6?sT>?i"7]o&Or-]1;M+V^h3f;B/b/;+aNWg*GKa:6,*'-$4lTt_;p<bPK\47]>V33aA$:A>hR=_^)$rek@BFGbOLHL!>&nD?#JomHT,DhD'&&/d\S\2pm!_-oJ=X]Z_2ImrDfH;mnPf+Yj:8R3>H6ba8>bk/;/j3#M,;3-XAnN&LrV\HDL>/9K3G#IMW~>endstream
endobj
xref
0 25
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000546 00000 n
0000000623 00000 n
0000000728 00000 n
0000000933 00000 n
0000001138 00000 n
0000001343 00000 n
0000001549 00000 n
0000001755 00000 n
0000001961 00000 n
0000002167 00000 n
0000002237 00000 n
0000002522 00000 n
0000002628 00000 n
0000004639 00000 n
0000006360 00000 n
0000008423 00000 n
0000010242 00000 n
0000012165 00000 n
0000014193 00000 n
0000016094 00000 n
trailer
<<
/ID
[<3aca6d13cd74b57d5c4397c35a55e608><3aca6d13cd74b57d5c4397c35a55e608>]
% ReportLab generated PDF document -- digest (opensource)
/Info 15 0 R
/Root 14 0 R
/Size 25
>>
startxref
17308
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,181 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/PageMode /UseNone /Pages 14 0 R /Type /Catalog
>>
endobj
13 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
14 0 obj
<<
/Count 6 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R ] /Type /Pages
>>
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1944
>>
stream
GauHLD0)1+&H9tYfREF7Y)6NcM104mbr)'#f,%dYh+WQ2`PKRP!_tBDosXuRYT73>b9ZeK+JdhA<mU2K@6jA#Wo%IjE&r`;Es@T@p_oMm>SqsBpLEBQ6b(I=lN%TTMLYd8K_^7JlD3A6`".+.5Z(+;FMUt9-l"/g\5#XC+kL]3g0m7B:Si)_.-C?JhcVUgcT/"KM<FcPpA2cmA]tO<hcPYGemB,G1KXb%8eitPb`a*,(GP^Vf?Xj"OA0j0h.0XiJ![^+DG'\ZEs_:fi(W%n,[9R32]0kKr7WR_#^(PbHqEFsck!1e\C:8dQLZo'`b>^[,N0TQE%SriNEs8+6jB5Jf0AM,a2`<1a-Buu<!irg"GB_24R"i[=+[pU5"(FE@8%6tH-E@,a*]'V$c#AE/?!2aATf>>3farP;.`=3.uh![,);m1$2ujSRu8.QauMBjmODX;EIlb&1.,"\;<X#&_p/FC'N0(YF%N=)SnbP%TUBAVfb&kmhH9,fKXT<BX6b=G2o7]:0rA%\bU)%S!J\TTU<KM^rlI1cn4d^AZ$6p%*U[B%1F]g6M'c+MK8R:5F9-8Rgbk'MWF'3><b2F(UtC2#S/DE*lM,h-ImeRp/0WKo3n<KOBL"T+,S,igmK=KKSkna,?Oj1ZYCWG`['GeJN3utf6)])9)IItQo)uA?Qu'Fe#cZ8/k[ul)]4#g5WW5V#YRZrC2J%q(kG3)3-?,QYdRdQ\=^(GI6QXUL+T/LeMcI#(`DH)/.!j>'Nq(0#5>.k7SS1Rd&-PK(0\lD;mXNXaQ=O%3Bir=$mT+_idVER_H!$gU7dq11gBk$e'6`^!pHNZeY)7?*$S3qs*Ti`$i5ajZh*>.p^G\quG!VKQ\/&o$.58>(@A4hnYJQ:5Jsh@m::/:oE0G#"`%=001A(UKNg"^fF'++S]S(tkTu:(;JM/O@L1VJ>(h+^,Q9!6IB/YI&Y&^)m5/)W0)Wl<-S!K^i$6R1?YgKf$Z^Hhg_5e2kQ1o728u".2'5t3.Y86=\;79Tj4OR'](T#[j!["c!*L't[:0SKn_Se^`(([u-EIAa[Go,:(L>9qF>'P'?m&K]l)7"j/ZqqZ2?0/,3hW1un_'@COcZ[o6RBaAI+A^>C&oQ95N%:IbGZ*p)jdg2o'p!j"4+hO]Z&-K"hfXbCSVFXGkejG\702WaPC9&o4J;=EgD/45Gk-[#!R\C8?Cg,$%Io3+=3Fp>g9Vd^*L288!!\ZIbf[ti''jb29:H%B>19XaF^Xd\!qRtT99UosCiaBIU.B(oc'f)[Ad&B.HE6X8kN!dmmOZ*^;]+h>d9g5L[.Gopi<,V1+6T/ti>bm<\H<<D)iILWH*4Kl">lu!;t[HqJqRd8B7VQ;^ib]jH]])?a^9j:U6h_aV@dFXD>8$n\</B[k^dL='DVC0i-,FakJuOGeamnml0^ItEi3e[BuF^jA+k<)&Odb34Q1j(EI^!`!TL&ac`+nodakR&_bVM/\f2O_YUX.8kTRsO@BQ#T])L0Fe]Xm]Uuqn]/'B>!.!X7Hf@mc846O$]N9TWg<`<KH1hmf76Z#IdW(U]G7'5Woqcm]i(6]\cY#6NAgoRT2Z[gVjX9EbM7C>(2K,qO$S]A)P7U'/qePe%(g=k8^Dpbrl2BC^f#DZSa[3Lp7h+hbA?npQ@r*FMLrT0[k!09^fPAA]E<EsK%'p$d"[5#)b"L_e*1""'lV-)(h\kb#]_tX4A<e\g,4Lji7LuY@(^CTXO)MH/aaXSbFfYf&/P.lU5Z@"FK9,PXlpKk^0k+KKHTE&1D02RF&o^]<+l;1_lmNF&l#_<GRGVPp2ZUhV32E$,hWt^%T[LP(:PJh^(]c:SgRH8ajHK4]sZlN\A&4C!:dUuRpNj?G/IN;3=3jSBl*?5HWGsQn`Nb''P_l4]MU@V:O+:[5c^H;>jSh)5chYW_M)-@G]h.;30++Z&6IK~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1939
>>
stream
Gb"/(gN)%<%"7kOTRKd"%P;!T;LW\%4%Yo"8Y`XK*Bf'&+ds%Ob:]-%jlsf%bDRR$UeE4t;g2u'I$&T/`;sq.ZdtgGT6gLmT*)_C_<I3p\cJQ4ka#hskRCdWNrD/h%,5a&!GJ@b2hqTN6W8D`#`ff2Cs=">6QOsrUUcBgQE+f(4*8<3I?('a+:omW+6fFYG2I9kcs2!,]68&+WS*"lVCcXmgV`FWjnW/(]V/r(Vk[`;?h?$UTpJNVSn_G4?QV60(sScKbM1o\_^cd;lJHP%_ac0&^QC3.$jY'b_Z_YHjp?oX0UflBHY$UPTpDfr[aTFY+8RIFdT[Eli[O?/0Oc(?CJT1N&6=jrNUg>7@;G;(D\;WR&RMg$#?t=n]crPY(lURH]aKK0QqEDCa>WBC>.04S\n/RZ[/G(#ZF-uSjn[ltQ:nQWT>@F)pnq8P,1U6#WP^H\ojcKgl+(_X7eW*9bp^=p#e_;ljr>].AkoPRE_WaA5>B>QX1^[So/i0L))0AM/_afQS(>Cb]>"rueKN]*lPJZJ_fqA#?UgDL&0X^Zm]orH`":U\c]Od+RU;mM(!<!@If=M!qm.6AU<?03p:K8LR<d$eN-30T4f#&m"'p-DQ*'a&RnZ3B"aUeG;Ja?9k0<E!E:-0b$$[VRT@H8uQf$TiAeIoD3l:5!6%p(:YIuPn_XR)gW,1i-`?\oD!oh2i;F)uh1:@=]%?!<.,o/KH499i4epDt`F9`kaqfm?b[e@Wa97g/Y.-F?uGU74EU3O9M,,>9E+PR'Nd=47a.U.7t6nD3*'7VQR+OW"og(4N%-PF'O7dq,V/.+43iZ"#6]<HNJ-k8Qf5ip@%,9^6+!]MW]HF3fa;ENY12SpP<mbrj!]-e?>kIiD(SJ^4XETeO"GKkmKSDN*)XaW86<L3>pi]e)XkJ>ega"!%Un3r9KFlN4M*m1hCSg`7JEDg#9R`PH.E_a;t))\,b(I`%8T_GW@RU'kbG>t=8+;$Il7+=COU47.Y:.3jr?"7,XW"c*c65)H(AV((+j^bb$$0sm=0KUCch2=[fL0aCsju'&"r!b38lg%2C(-;_J@d41a`ThurB1ol$:Z$Ql8-Ltk6&?tf(o?L^6i[:"-<M>h'Gd2S"OXB<oH8Sm3r!u&)8'c0230>uU\\9jY%)=i`V/m?:$6djgj)pnWLopLN*$er<HG-5iJ(i$._b!gO>Kd=M_(<^l<.-c*JSid>9Lr$(R30qqEs%a,dN@!:-1uro.()GUD0Y`i'HMKNZ-IG)B*a@KY:s^g>NQ=WogcjWlBNpWP0n";i0$m6pCS=l(*oojTuYhlAI'Q&SE-G/!LWqq?#5@P'D6aV*<3B+]S;,+JJ:eaW67&nPTZL/nDmeO;sn$E",ZNrfrT?UnP$:QZNB9$2SqchPn/%6_dJ+,T\^l<Hd`#$(c[1j^RZ"_X1Z0245#sr+.Agq&YA"$ed@1BrjiKPsT$g%2Q2;i_4[_Edl8Yr05a6=D*q"h9`4`l#*W,BVZg`p%pUeC>9XVLrMUVq4QO"B`Klh05-'+!hpAgDjG`7S<#:0^A[`tjbK9`5%gmF90CCAH9ul"4M2iW1a6DJXq?]=J]Trp6,WVP/pMno04l)C\9H]VFoAT;qp9&5WZ%N?(%>eKIQJ"2ZUb>K?2!FX=0D5aHHGhPhVjZ']T&PS<1'jNa$*&^cgE_lP]hZoQHcV`X]8qD#HKl12n^Y"+Eo<a]o3QC\Q5XpYTWpKbu=<-3Q;na.6*7`oU(=(Yoe%46WiK#9K3RR?`5-ldc8KV*kd^`1gYQYl!JGfE3QX><0Oo>k=LWBlPemT0+@Pj*#E`d\hQe-;P`r6XTK>k1r#V[DA:\N<(`j1B2/QGg+`O+<C?G/q"9ZTk>fD=lARj)?T.8gV[X]TE8iEYXC683%GG)EAK&34/hLgB8d94EI;?3PPB$2Km;Ttj5Du].pA~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2056
>>
stream
Gb!SmD,]1Y&H9tYf^_UELp12:an.qJN'fr[Y>_?i:7R_WUpW3e5.T)J#29(Nm[[n-[NsUX99L1t@rZk)pZut5q]$Ankf_C=_\p8C!)CfkY\Y/8^iE-c"u"s2i8Do`e+RV8m=OR**N*P&flPXNdd_m=Y%N&D]4XFVn]ejn_$qqO#^QO(AEWiU%k5BZaajVmmreQD"Z*Bo?JsB#*Rh?3>1tjGT%@2U0Du9CHTfh.]d#IoDjlVS=QQE[=WQ,\=C&ZLK,GN0hu%Wu09S&%iFS1jn6Vt/?:l'g[L^\:TT<.k-Z_tB?nd/J'=GX(Uon?uT&9'>-[h-Kll+>e1!<cZk(8/j1rDD,E&!&ZQ[\ajD$JgV9@,2BXTHoCpXMu\^f;nVS1B\CPQHPjEJBll+p-pA5%SGQP,&\eR45I<.pb(0@4h@R?d-qTd)>.H,u)#L:<-c?JhThoJmRU#gaU8\V#up_r56D(J7Nh];PF0-=P@@7CNek6NHdU1):1$S[NX9PGchW@cUB6BAe8s8$,UO#99;,&0hl7.:0X'gGh*>:V<'f8cc+UF[\8^^H))5L!<g6Uj46T+_Zkj]n$b@B=D$0j!ioM*4j6Z"R)9W+`&B/*6R0o24be6N7!U2eiDD2FqA@EnRn>pQ[#QRh-<f45_!aB,#)fnWM?/XQ4=1mLM.H/'fET-(9Q>rA=JWq]!QHK)>VVp<.BQIcoMf]nVJAC;1/8KE</T?19g4URo_;EAR:jFs+<Q6OlgdUT9%SH2bJt5>KM2o0TeW<qElDK_PL<l=LlF-Lp_Xf/0P&<o`mo>dkAA5aIRI5ipLD_jV8b)K]6U$JdoBqo@o0)i,&2aI`++Y'/C%9#<3WaG-7g2MMMEC\66a8jgIS"q/<Y9=^?4Xk[`UnLaSdX0mnBa5U!$i.lr5IimQF2Hg$U#@<dQQD4(VdZqccub@mfaCd_8Iql]kbr[MD+\.!-[L&q26)CIUEi[lCOM.1XMoEJo3M-]u6nPhkOkZYoEe,#M]8VaRSMMt)j.((tG<ePhaj6i&5%).e9lB763,;;EO()7Fn+7-BQiMCKW0gK75KI5&b!JO-HF*sUCuTES*oaI>3@6?nb@.4j#A3g1':-mFPt+oDe)'[mW"D"06ljRYB$oQq>,_['b$727r5,=3_DN+;^k.Dn4DJC`BSg+Osnc;`B[e,t:4(i9@EMf(IIB(HjZ'4^aA.sHbS2=Y7i!r9AUfe@EPcB02l0*eZI[OIqNrn:'V]qd]NbYN!omGmU`M&/m\Ai/<6M1F1ocNhrFh-rL(<"QCiA8dCJ5('G'-[7p0kue^q;-YD-F]1+knp,he#H_[C3\Np`#"YdW\31A%]NEodj-5c_mih=nT!rq*m$>dSQTX,%3'4j`J)OY6IqRTME4[1g5*mN`MG7D$N[.k._a8-[;BAcrK?gD,?E1Mn0kS$#T_j7gl/>7hmWST=8pceu1FDuua+oB^<NT!!*[afB^?W3XMh2k&rVk8IYFb_ZY>*R44&F^##u#&?,_M%6*;#U*KkjF/Smn:S==bCI\EJDelFM=,>uW:^Hp2%&*ZD!7>0mO.0q;/;)1`i0l=SsH<Mq8:<5@ZBM33XS]%M)<Z>SOXc65hYH$1u#\AT7V`$sO_;as?XSl(j,L6"*iaAR-Y,T"u9,fYY!ZJbYJ*iV.2j/O`;/1fMqP6_u>Ib.ab:%J*0HE@E'9lR6idpr&N!tBa+9t?!^LpBr.3f2Zs/:7'\q`e0;Q5eV_A9`H8Is4cFhU_[M9>RR9$pp,S*Qpo8hIqK*W_N-l9bp/]XkAedcSljKG:s6Y>B/Mrbgc>eJAG^:-db+4H$lUdOJ:2*9+r@XFh':Nhi>e5:i,DP/YeV86Hh4,a-jjfFLOt?YEsS-lMa-AN/(-0]t43W9Q1?M"bs#Abj59]=jNsFG3eDRk4J)3h&`oL4'REe?(ffk?iAH=i)6TJ$-(FA<8VD3;:mghc18SdIGWoqXC'f25fUir;<p\D.ER.9bSoSm0g$&P"IN%%per#Wpo(7kWVSpJiS_62D5sJtVo;s(n44KT@SUmCRtMPp_SO"Id(:G~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2026
>>
stream
Gau`TD/\/e&H;*)EUA:m/M]ek.#H*\/8^`]^sH/l+$/kC,1DQ]=`c)A7C)<qmmt,QQBDq1gt8hURWgkXGPCTe'HDKtq\a;PT$?3gMumQE>6<o>_sC1oI5^mV+j=R"pOKcjEC0pUFNkokeKb7C-[s-'$Gm+*#WQchM%H?\L2oRF"4.[H:F?iIi&cMJ5Qpb-iU=n#`+KLFk/?lin@!^]T.oD]`36:11TNGa_\oi<<3+R2`1^Mq_/'5&f5EjdJsU3uoCtYO'L!:9`YSg&)%5Bp'tfW010%PXT>9e+Al$YQ4f-r3`"/AG=6[m`ahLH]Y-bj$<_4&-mqI$%&FS3d:nJ$>i<VUGm+@r2/QaA[ed8F#5pJ#_nZX3]32L8n"5F`=I)[(qeu_kCFq!`,aIRWuDRIiO2CaZs9$-Uk>:V#$Id7_B='CmDB@g16\!JPFjLHn,FTG+:nKF)WM=VCZk;B9:b;,!66tO`s1S%=*6>gc=m'"0b?nJQXb_KB=D#WLkfuis#N0R`9mHiZ2*Vuj\JfflA'D>jMp;r'_q1k3fT(Pt3CqPmu4rQl$ZU=N+jh>Bo(nTYGm=^8,hJZ\<PD3)?s!5!Gnj6q!Y`"@/A_Z#OL)A_UZ-NbS>!rO!8r02Mjt<QG.UcOn\2[`mFJ35b1297I.U;U)s"14e`:q?<3=UR;.pYb08d4St)\4/S&4X]QI!<!b<oVWHE'(-B)LbLfDe6YLNL$YdbX#Co7rT^%AI_ie$hTA*n2Sa)$>OW,$hW!0dG6%ee2\Ykc!imMj5XYEXiPu`<ghBV&+*J92DQdP!5F[X0@UaQQj-`bV\8/rf^D'BYril=but@hpXJ[u7JJVsN0)1NZGOK[A%!4DE#\%T,7DF%IXd?B5uHpK(ZN=D#5iEO#5=]9h\F"08>^\N`>1\^grMa\c7`ba0`2uF+#3/Di2p%<1+nUFNF(rc4L`/ur54*;XE>ZT5%^\=YgEP[UI[bP<XI?3_mn6Q4c]r\;Yh:cFY.bYMPqrl$:"98a,kZ#;s8@lV@iB$+2gi]&e@?SRnN?>-eSk+KadY@M%#Ja<c63ZmL'Fjc45(KZ%F#g*<b++kV@ec6H8?)o4N\5'eV/I<_/?'ChQ:?@"o0g&F3k2QnrNIU^1bC?E9b$\qfSP@6HTML!5H`5d;-A@(]&`8&2L5bC$?6LHLPs"6K2h)o;^DQoQ*=s1.I''>?j0T.H0c_B\gS#(TWrBAmcD!)D"ueGed`OMX!n77T7REG-M6UoflUClsd&!3I+kUEoJc21n_\L-C=Z]0a>=-;6C<_E8eK@5Hk.:gHJrA*Lr(&h)BA[C6l7EOZ\S7mo-\T!VunB^R8gc`1aBiOA+s8<%ZKers8Fg(@<74er``![2kS4.S.)>:[^j7s')s3a6CqDE$Cdn`4.gDdCSfBpW'1Xb.T;l@,_qa,kt5@M!ken[Rm_Hb8e]4BG[Z<@X+QHCRhGb^<S-:8'G2c(>DOS2?\F7sm8"<sSmb2Cdk#,]FX-EoXJ[7YJ<+Wm-!R]!9J^13,Rd)-T0?M_U^%/A9Bjk.<@YjbWlISMj`@#hs=3,AX<kPeFGLdF`0s#+5Y]Fd4jY%S>7C_'A_+/,8TM[=h1QI]^rT=D<a0TN+:n,\"I[,YuT@c9Ho'EnS;n?!r/RR5@@NQDuJo10p9"fok)6O`5qr@,bM6F=X]f];#i;N-t&7J!A@uVsT-j"2)UaWu"Wqr#"\7FI$`ap_d[)M:^d1=LU*ra-OI>eqXl_-<KC9CdQJh:%>o@/A.(f"<0Er)JOL]")NDu);e[f'aI2s7,S54)"/f<9/Cf=Z0gE+0e?7FO0&7VpI>`Z4f%3EemUe7-Rn_ElO(DQPEZtp1$d?3.6>=@C+X*h$r=;B/Pif":8c>#eiGK\L+_`sKoML7)[a$eJq*3#'njL_*,@tDP/R`,V=:[4bP<!c>R4BRA_7>S:i_?@!TYS"dKb['=W7?4o)u'Kr#WC4D4=8^V\mHU."/8f3/Oqf`-:tr+P%/EYJk3qJk8n^H\D:'rSLB0^uU!YL<oA~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2010
>>
stream
Gb"/'D/\/e&H;*)EQb8]=;d6q-n3%fXA,0rmJ=-"*AA05A;Ra_aHT1d$/0P%I7NSA:2IsG)?frA]]b(/*KSP&4ZnmZLVM>Edi#rb+WNVB5T(!N5WRdWHj.iNK>.VD#o<(3L`^nkb^dXGr;e\lBF"_Q0oIJK?:^fP"-4jeU,W4/Ea_L+0G;Bd"r'TV]J/>1+rZ8.XN:9,0SVr9&dT(VQZ)8LXEcN4X`\;ho7tJm#Akj=C\9^XBFkA%SAG3j2]kiR759p93\?4/5#b"KdgA8n(;_^PE$R)I?Hf8A*en;]Ht3Ia;T].h,4raQ8mg)J]ThQkdIK2`.%NW-Uu<=\fVoF`[4>dH7"NAjHMkE4#l[=p06R%34@_Y!4(Z:_5;Rk=7c:+(3sV<%#,VR`;sUegZ@q7N:O`=_no>#&Kup-6AiR7\-2[1D/i@/P.Toe+<]Q$c%;e&=lZRSh^R(jr#:g/:/2JRq:F]?:7H)3hE$i1GmoQ.EW-234gVH3$21_H$Lu$B6G(mVM0%7N&Y+W-;-P:^_J<Nde=H6(WcJ`JSb/1q_JX<@a<Ojlk[`:eYEFj!W()PC]Y11*0(c;!rmNQXK/_n\Q!1-7\;cs-M^.^5R8.W[Xej4@UN22Xo#l5@*O*@":\1p8Dep2<<+1*LS1p1erB=5lmN_tFpA;Q&H1.k>C@5q08i=>"TL]h_YbTkW4Z,$;*mgW(Fr#Qt(&/JZ#%'osF_hK-,[X>k8cO):nH3+\sj'K7N&p8WN6/Uf\VkeZ,2&&'Pe*7>)#K:>?ZaY<I8Jjn!am3M#X",38Md^XRl)eVf(3V;Oe%p.a.*hfM9OtIYG#X>"glg3N(Ln(6b!^`g9OaOrD_Q%Qq^ST1&q5Eq9\0^/Zj0t.fbCD:bO2d.Wqfn3mb)n%UT])=':m9.a1!/"nW6$-3^6fFmt5:Ja=X-^$,6A%&jp!f0Z$M-6+')<+LMlTMr=WN\\Gp/?+:l_.D=9p!KVOCgtLq@+JT[XT4*PlqE?cO?7d!MWN.3pB(I#&_/eRI@W_2b0C@"^kCm1P,R-7c<o`al;<J>0]HM<CDoq?M11EN,Fe.^;.$lM7cB,96YBsVBA#C&6Hsb*0C*M(!*7n.LYI2B>mHUWmLT'B<:^KGf"*@,>bi6?4QXcY6!>1k!IIL1:j]n_?K"f2N6N>K36f6lTP^/1l*]Q)t?@ID,]B$c8?CGks8pG-/XA1;@H[U1k8W/sT*_":E"/p$A@]bb#65$f]2KCjHaW2Zf,3FYX.l]I;77ge27ac+8oR.AKN-1j4<jjn4ETuqHL*ie,k[>;7[b>WlR&!'rcA(.S//-GrgF1.(7@t+F.>V9++G!Nu@d.CZP]QP4@gXi3!mFjedW;%mW9QC'op_OJ5!f^LPoI1u3uIpQL>bTHI7aQ5,MJ3dRGI'fG5Dr`XJmh9gm7TOXP"Lsk;T]DlueeJNL&Nq(HpRG(Lu999sSPsX(afo!O_qG9+m0jSO#$F@;=#5\>aU\h:An9?F+0bWRCAUQs)j<Q0J+%;__WF)H3"9WhRkj9cuP@#']Vjk.:5f$g<KmT3t)=49)IBq/4Xglr-C/SfLO-gOY'Qn$"knU5-W,9X(rZf"&0L\DBtR1l@TR]`ftos#qDm2]#fUCJQt%O`"<B]rfIlj0`As]r4HeNtSZJ1icoeW[c5*X;J4S.i9F$R_scI@[Gs[#&FMQpt[WK@W3hU4^=EOokY[BXG)Wr5UtoW?%)"hn],@;0oi7a-W2H$HnQW;4+P-7#/X;C5$(j*QXqq7]7Fr-mF:+Hj<A:s)Khlsjc6mO@VGpbe)GKld-r'K\Jm:o1<FR5f3n0sSQ"LQ5*?S5]-^4+=#fYVGJ^+`9LRfW-9THL^;IDmhT,?N$TD/PCmC8ea2\(p@dG%op!taQ7i4tLmasCtCQ+EC:QTR-?h/;Xn'`?[N0Xh&*pg?;F#'=6qV3*L3K0)H8hKY6<#KQj(#k9"DDup&X3_YPS_4ZUeQ5HA,FKq5[\$4!_ms(n&BaCKcaa2`rrU9<J*d~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 621
>>
stream
GauHG9lHLT(r#074M,`!\@+-#3CTFKWn!h]<EXM0"d(`sHp@m2\*hl"5amg7WK\E<)_Uj]I(crgpJ\I!F9R&PEH*9I,iU8+@LDW2?fJo*!L$\*'nQUT#E].IJnC[u"pI?<F<i(3b71dI6!;%*N@^m/1I`3\K^&:tJ/QUk<FAj\g?Mc4!RjqmC;iNAUVlr1524/:R,4k71:uYar!BVc[6kB;j!$<'iYBaV^Q!/N?"R'6Za*iqLT;ho3BTiHnEC.DoLR/G:";bPF2[5N5n?q/_6i05+7slCf>":gF=?%1/2%Y"*l=J/n-)/%XY(hUZQWC6qR7.+nT3oKn`%]HeA`Wc*hA:k,bnhY8(f9GKqYp>On*\-UM)a8gWmuJhd>Y#!dgA2[F<f;Fug^u0h4Y:JqZNndGmR&Ne!%9n9_W9(F[lX.R7!6<^Vh%C<XaBITk3K>30POD.,kUm6a6Adc@>PItd^qq>SEWP4,%(rQPW^6N'lnj:<;qU(+qadjT6W6[[/A$fj`tB^)(S"mTY_n_oH)Vqqd=*W?#)rC\UUXo60qmMsc[`jFM\r6=ED&@Y%XUnnSKFoHQ3GbsHg5gSkPC:4(.:QdR^>,'lL.Fj3<(d%n^P<o]~>endstream
endobj
xref
0 21
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000446 00000 n
0000000529 00000 n
0000000734 00000 n
0000000939 00000 n
0000001144 00000 n
0000001349 00000 n
0000001555 00000 n
0000001761 00000 n
0000001831 00000 n
0000002117 00000 n
0000002209 00000 n
0000004245 00000 n
0000006276 00000 n
0000008424 00000 n
0000010542 00000 n
0000012644 00000 n
trailer
<<
/ID
[<00f9ff5fdbba45abbce8b22e24867ac8><00f9ff5fdbba45abbce8b22e24867ac8>]
% ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R
/Root 12 0 R
/Size 21
>>
startxref
13356
%%EOF

View File

@@ -2,7 +2,7 @@
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource) %<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj 1 0 obj
<< <<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R /F5 6 0 R /F6 8 0 R /F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>> >>
endobj endobj
2 0 obj 2 0 obj
@@ -17,22 +17,27 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font /BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
5 0 obj 5 0 obj
<< <<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
6 0 obj 6 0 obj
<< <<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font /Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
7 0 obj 7 0 obj
<< <<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -42,12 +47,17 @@ endobj
endobj endobj
8 0 obj 8 0 obj
<< <<
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font /Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
9 0 obj 9 0 obj
<< <<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -57,7 +67,7 @@ endobj
endobj endobj
10 0 obj 10 0 obj
<< <<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -67,7 +77,7 @@ endobj
endobj endobj
11 0 obj 11 0 obj
<< <<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -77,7 +87,7 @@ endobj
endobj endobj
12 0 obj 12 0 obj
<< <<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -87,7 +97,7 @@ endobj
endobj endobj
13 0 obj 13 0 obj
<< <<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -97,7 +107,7 @@ endobj
endobj endobj
14 0 obj 14 0 obj
<< <<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -107,7 +117,7 @@ endobj
endobj endobj
15 0 obj 15 0 obj
<< <<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources << /Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -117,115 +127,208 @@ endobj
endobj endobj
16 0 obj 16 0 obj
<< <<
/PageMode /UseNone /Pages 18 0 R /Type /Catalog /Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
17 0 obj 17 0 obj
<< <<
/Author (\(anonymous\)) /CreationDate (D:20260305162606+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260305162606+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
18 0 obj 18 0 obj
<< <<
/Count 8 /Kids [ 7 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R ] /Type /Pages /Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
19 0 obj 19 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1201 /Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`R968iG&AII3Ci4:56i[c$_-B#r,<*oXE]g&]M_9qobEPRb"t?DAoZ).^;R@]QEA!Z>B'^*NbP`LZ;%+k%R/8ru!'\?jm[O=<&DmL%6pQ,+PBc^Z@bjVTLbCcDd.`A04MYa-l^.;_lh;Jk6n$0p!!qb]#T/YZ7fo;l(F+;QlauX3`!*TbJZGXO/;+IO6"Ic_#S4j&N%];Wi]Y6[XRt,TbuQ\qWd1nuesPG"i[)N]_:u_W&?]AV;^tP,0B=i)1/RrKcbiR2$6PXW7(+K\OabZP37%SY<'uWn.KW[_?'WM=elgh14sYij\9r(.$<icX@(-E0U*Po%X&^KGXY"gQ:H=QeQ`n18U4=p0%H+#R/G-I`!VcHnLd)4b^keILM@)J%a@j/X@OW`F3Z*,:`G2o0Mfc3p;?_`]1nc*cERE1qN(0H8fs;P0c)Q-S*j`SU[\<BBfq^2bh8_-U*,!I%9%RkUhGNh@N%kIbP8&nU>h;O1Cn-b"e%)Vn-h&d2a0uf(%H52CT9:t34B!:^Y2OckncrHh1g?dM3n<>rb3s+M)2g):>r7/JR@Tj7X=^lHjJO[hW@#gRV7O.i5&?00L*^?#'GYGI'):#[^$+'<`#$QD66>m8TRtN]\.S^ko1O;0QTpFb+&Z(Oo`/dGlkS]CY`7Y*W(uq)H*NrOh/-,:I!ZXH+(t(g!["Tme)0kL%GSjKKSCs=#06I,^OP/kmUCsNel?PEWm;Ttl*:N">3IFpNIT;<LR,c+mG&3$fpI/"K"]_2kt1%thNRl2RrtgI8SXWfp/'u,`I`;H)QOLdW7YQ$-[Dj\>AJ$Y:F8e@>e"Qj;lm90CKmD42Rq7Ear2;*W*OupG,q0dh:4g+kj5`01,.1-<K)f3:k"@G*m&m2EO;S7`OP9p_!*Pe1_i!W4g2qVL[;ihbCtS/eE.Z^%7tgL">dD6g`qm;o_30)6,V/l.q0I*op]$fE=id$T\GN8@ko6+rI=G/FV<SZ_&*L:c\q$^4IOJi?C;Df#=Q_U5Dk8NrVkZ4n4ogT1\0s=m)rHO\>ibfO61eWRj?f.1>'/JP?<(tFkBHGmN^<;E:T6qL1>pWkCW/&,urI1imBEtF]2b-NBPOdNJBFR%pJ;UH]bp3H]e1aV%=fhT*Q^8\A/S$7Ik?Y0Z[@HDJMr8UL-CU*)*R8\q!Q\UMG<s0T"TEQXkZN)dkc+_<=,4\8IT~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 774 /PageMode /UseNone /Pages 22 0 R /Type /Catalog
>> >>
stream
Gau0@9i'Ou&A@P9(cZ@uF`#0+iDq@,WDEsHlCm2MZGYZJRtN&6.)2?FS6`Q2-l7]9=IpCkhg=Cg!)>oRs(i!\SA:K[!ec6f(5--(P&iTW-4^bE6lO)i,:-H/Qkls'D3N/pr/ob/+"!4r*?[@%8<tB'Qb,JAGGjt[e8mCE_%]55`@"1l>EOOUcAJJno,P#i)-0k`YfJpb7t#W&d,D]d*?-_[`l;I>@jQY;j%MkI;3i/Q1+>8k*-=k@#R**&mD08Kh/cGEMh\_DaFk8]`&&ENSH@@o?'g\p<(l]]paAnt@_t]YhpC"XZ13=*`e.D(k365hiFGqIAIW"m@--.VE>H]7Tc@-<36SgihFm@%jm;L%cJQ'c(MboUlj?=]f2A*SU&T2Lr\r`12`\#Y-gAnT3*du$k#)%gdC@p*5H&6CGF74(!eILWh,\+I>E@f]TcN#W2I7fTR=*>hW)j.5*V=?I.V;GE(QC_//Sl[Wd/5nsUCqbu!coh(OTf@.cNYj='YuY]`A/4uR21>adoOmWKT_MG?;:k\]05IM12&:I4HW%$XLmTU@!YO@cp[;&GC#3n>0Lcs\3J]HlP+dl4F1a*XR!00i*&_\Za9nnd*i4Y3%H`X`I&1ko6UmCSI_uUCA%@X3QsV&_Co;";OXo6bGN+-]hnR2*s9F-%%OkZ,#a)H,V9_d"AR<X:'NFdZ71qF7>_f>6JMJd9[BsEFTfh$$Epbh="Tq#=^#6>QHMPVfC(q:n=uL`PMML8*fLp"g_VE\/Y"M?!o_:XoD~>endstream
endobj endobj
21 0 obj 21 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1175 /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>> >>
stream
Gau`ShfG8V&:W5<Z'imZPg#NO*QJ2+Wfte1WGL`&8RMC96"`fK%f&BT3.H>m,h]J>i'c\k0S@`Xp[.CXH`'XR#[XmK-Zaes1&US]"j.t%!m2MnnJ%^BF>KX1:D#Rh?jo7%LBdjtAKuR6bkJn]bi^#N-Y+Aj%$Q]nZcj)W[ScN]a7T`F^aQ^=KqS*mDG=Aj&Y$;I#rZeN^($$GJo4W0Eu9CaIZL@u?UFZ2i`EPVa/?68YQg`i3m6@R=;pj<joY:uS\n0/+cPpf;GLK2?Ua?LII`V`'Dd=X2524B^j#]^d>plO6'rk[KljpWg%L%TrEt\`JC]DYCXPa`>;)^po@,U2#G^PIpe7RS=#>?P[GAR$culkV@Q=5[,`;?SG9NF>m])._7cA?sFc^s#/M*@c_`W1-^eUi9);Zu?=VsuTi-hd!=f,,o+]gmm[\2[uW<FlQSPC;-homjf`e5tbRnR>f%H`AEi6*C[I+artbo7tTa4h]T8f;;[VO/e\DjFOpk,Pd2m21,VOgZuk)tR1sgHEmQ%]dQrh>%[5KjT;-/FR76Y4op,;&Usk9L2<cTZja1.cEGcIVglqa2lDhcsNjE,YN8g<'.9h%!)&h%),fq7leU!>SIpSN(e*@4%;]AHWXAL'SVt6XBcX#9Gr4[8I\SDlK9doK'21YSUt",.)"^J:R>>/Wl.V>'HT$[MiO"_Njg5YfLFW7,#p.i?T^s?j'FKF;8F,k-klKH@f+m@bjdhLr83ad];Vn%cdT5a;kH6oCQ1j$G'ud#]gKOuU(=UAGuDfg:\qHa,L6FT*JPI*6]/bmh/5V"3>I@f"j]uH)[DQ=9f@WCh\J7MMlINJo`N5ZDE&('4Bj8Fr%B8=Z\c9&c`%(L6ZCr(1.rb(?$+/MHbP5&Lh(ecWP-pa:hE#6&DW][R-:UI(FN&qN!p$@a%//ie*SMn#jar\b$<',Aib\)f2S91WEH["G;19G5kBFoL;7+HWiXQ&LC^7a-rX\8e-lXo8W>e3g?YZV4^9@q^M%.iI?q[pE11FFZls'Q"Vr>(32j'KR);e!)/^Uf(X"W.G\!lZi8t7nD#DDG!-:+g'bGo5\PH&h@;n'M]nh8W7A3)ILXN.;BN&_#J)/WG3AK3]JuD?gmY(`B,@7+QK(Fo('E$USW\XC^..Xe9K1n'Q@J?FHdD,Ht=;L~>endstream
endobj endobj
22 0 obj 22 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1095 /Count 14 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
16 0 R 17 0 R 18 0 R 19 0 R ] /Type /Pages
>> >>
stream
Gat=+9p=$c&A@7.oP#h['-YK',gU<V^/Dc5!a`BU&K,0"K-LWU.;JYN[-W1&`3H(X<@T<(??\WWYFc\/]NFbe>6$c]iRo^cN'fW2-A[3E*P>'95=TH0M2P%r49?rGdBS^N?ZXt/jk\#R-r(qOOsE.u0Sq3B(?SC_,Z2(.!D+P:>3t74PMq!Vb0(?kPMrn5!CJb^d\]`fga(GrgW&s]YUs&td`"D'p(1a,"O[NGT6d^PGjPL9(>0B8!h2A+/_l`!/:M4!XtrSD1l5q2"Qal<b1f[%N0F@1\t=uofN0R^X0]ZokG@IA,:#c$*DlfKdSImfp)'pNfO8Y1_g(H]>?82/j=g:Ac#)G1a*q>]HK[L=QU<Mhi0[aZqn/jWpfJ4<pc:<YDC_[0_RcpH"rs#RZ[K:D,Fg%B_dQ?07$;VQ&OlMk_WNt*TCM=IEsI:=*JbMcc**TtG%H]mIHIhh0faVO)G4BN$25dUNkjC]5ts'(=8(S1>N&Ttl$b&H!b3N\\iL`@M'=Kcmh;B@="t93Q&*+[o0f8>Y17hoXAqS27B&J@!KCPuYG*1G'"ul_4^sd+D7pkp)Q2'Ye!ns=oPpTtr1gV[H48O_a/.Dmr9.pLj7Cuo46"a8@u?k8ko=7ChpYn*atLVr\ed+_hoY#+S=-$DklEFM57i$;fkuB"&W+kUKL)Nh6aq5YWeoXg%tjjjl3$*?X9K?tElIibld^"U;^'dJ/2B/7WY"M5`D;g:k4T-;=4O7n=7FNM<a#CEf!Xnjl?Qk2npHG.<N(+N!*LHOfMK"C^qZ7W0j-*3iL?gP):[O5Gin.sZu0LS?_%+:1\8f/dX(tXGC(OP<WUZdc!`_sr>^RM&#Cr_qg[dWd@.R-6agq<en:NumMA!Q,sOrtBaRGI#LX<<^&>URJpHC[gN0g0Q<38Xcr$(lW6Pu66p(uX^T;$Z3C*3=TEc+,qb1%<A?t!2!ThITh%d]n[f2"r<a+ghqr2QMCb4Ok0I0B'FDGQG?oY8G&0VaI'0qV4$gaNpa]nWT#sqdRL;Y%&GA)$9Fn8c.Bi\ih)Hpn!`W`,IJX_-R:Z5#fLK34J7G]ZrBC7Nf?sb!aoG]-"Mqn~>endstream
endobj endobj
23 0 obj 23 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1281 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2106
>> >>
stream stream
Gatm;hf%7-&:Vr4EU]/n`/7)_^C1N>M`G!GYK[uhHeAcY;\!Z4E[f[EKDk=%dW4F$(8M@nJB6[iGose^G=N6anKIUEZ3#88JX]jFKYeu<_AicD0oRG\hlfT4)+9K$:l=__@8TF4g(jSmB]t(9BukZ':/#/PCZtSZZIA^o0Ok7&f^V;[NBdkBhr(6k5rTaL@RM.oE2"g7Npd)1H3(!W:KGjBleM]`UX<0<3.a5>I<tYbkj-uq@'Y=))`.5LF/T2m+cM'Yoi\n.gV4h"a$#fg_ud8A4Tj6.ETDF#3.uN"70`[GH+45FL]/[8&fSh&hXa&\0_qsh"oO>oJH^=?lW9#:$_?'(NAh_KNGmd?`J]_GL$GrjW6lbfABm&0>l,@G\+1Uh&Ii]Unrf=p<s@Z#fQ&S><+J<U0G]JX`p)o1Q<L;627d/(Isp=S2QNh(m=*MHcNI=iNZ]$TXne$p_Gj8\(Od&ZJJUdMZMK#e^Po79BEa)#.MZ-c7'n@8#BK:d79n^p#CuQsSPcqpD7><"[p7-#=63D>V,/sfWcXZhs'.k$;+W3*;2P7-53?^jFe<?X0(%-iSj\m]&h!0*'6;Yq&)o[h6NS5!?r:dUN#pgeV'q$mH.&-m*bqs(m32c+ircZl&`Z'#cuP9:.'/'<2U=8AdtL?8k@?rZHJ;].HC0HpB"[1Y'noq$gP'^gW"[OfR<)9\0>fdh_O%Yj;`o[oSZd`*a/Oc?2TVpZS[eEgTF#a6Q2=QTogUQ0MU't?Eb!X%f,L)K!D84^GZMu+bTtB,G`m,mOpb74Ash:_)'f_:=k\ODQNnIr6YOiBNlRa9QP%7[_Oh0\maQIY_8c7n;Zs9-kE31Ynr$$bdYc[nYc>9BX\Z2Dj_?ERR@FYd6X7qU>EGt!pK5Qr"oJclljbgf8NlhbHGtMAYJmSeXDb^/1rf5SBp1G3GW&nuRpZM3M8]JdVMdLO+PV0cdYBSUUO>kA\pY_h'lks_d:ms_=qY.t1]=*i,/s+K,18k=M/3!"(_<Zjr>G&=q'2Ju(<XOGg3\#%S-3gFi;ZrVbW4"uF#Tk(c_XUI'>LP&jf93.<ao@@gZm3_Ll_LdYf<ae['j=2UhC%Cp'c)F>1"IpgcHfO*#Q?c$hJ-i@il$b3EK=3Zm`*I.gCK&ls:WN&tWZ5Sh08j\Lb5]*+@eR/nI,9Wt2Ge7X(K>K,dA?!'biN`^89I&q(Q$a:\E%m[K'n&jN`YoZ,#t)]i>O7Rb0+?&ki#')_RK[h%t44u]q[]TMXen+^-;%fQKX\G?_HAVh'~>endstream Gb!;dD0+Dj&H9tYf]LB):/EOW]3dU56^lkRde:QNDJo#6_$_t7MomA\q=V4[NGTf"Uq()`#t':qmE;iJc`Z26d4[HI_\p7Z!PCPR^hjpIJ@j$Z_$B073aXtmp?fZgJ2s=b6oM9jd6F;DSI@WQq2l\;#d&W2JI?A:=VsUOfQ8_OGQ8(ZoV06S"hk_)0!LFaIct^@GF3='UtTCOmmil1/,MYM?Guca3\n$hOYGM*/#R-]Nls!A"We(acoq:$jZT-V1$6A(.9$#J:cQ*;i52o)3-l+UG`A\mUO!E&#n1-R"YHFNB/._PK6<k00UMB5M-A7R0hsJ)]HuVpTt$9FgQcKe_c[Or%\^WRif6gtAfWi"8mEr=ksNC*bL]NnGl+1E2kPL8G3TU.43[7XY0T"A5'$cH5qS)fW8(B'X&k%Hf&O,9.B?OO7[hjU)g3bf,Gk-LJ+Z=8;V#un3YY]9_pESJGFOc50kh75)ZQAs[R270+Dgpm#L!N,05Q$FUM<l4XBs;gf,nbblP6I_Ai7^PmCO.r0otpf2ibGmp39!UYpq7%>NYq.'@Pk*nt<q,X86M+0@_li*8?$p9XLlD>,<m^A`C-RH+a1d06"f:c<eU)MeoP5+Mi^!F$(PEA6qMc*t#"t.;*kU"GmIBMbm-T2q7Neq,Y2fCWA2k=727qQ8-gjWG?Y5![fO[OT"9VSM2IY[+-)48r2H@mM@U+[:XO8WeaPC]6do<HsQGra<sW8,)$]@aC8!l1<XkkUMR/`aG%)2PqV^?]st9@%52nok*GO%#/<jPR)K=[hT(6jE^3]V='!*SIOj%rLGpDQL>/Es]V2f0>L0'V'iH&jUi!HSFm9FjNUW!Q[!6(15(jf`IT.(EOU[iL&BK,KE0&%%][c,Y0V-?(,T.0#[he6bp`8<+ZNB3XqIM,abk1lGVIG90LMQ1I1G#2le%PQd\\p=;q@I8\(g#(,V]s;U"C/!<EeR*_)G]PDA<GpVR^;i6),[N[;^%#<Q<954#4D[g&?b5M_DoR%p!+8MJT7HH"k6RsL;Kee<ZCbX2JYSSFaBJW`3+%n"cSG#Z+Q]O]WHQU"18>2;$Ns*==^](-$71\&"nbJJOJ$W6F@%'=9n8E9T_qKUPW%c>R#T[b@Hce0s`=:mOG*aqFYo)&1C7HO;fWk@&oAVS01Yh0[=)R0hISN'G]Co($bj_`J#EAh9n;U^4Ai(.L/d!8NF2C7"RH=L=3`Zk"1H/$@4rW:pWf=,Su[dS*%#giMRgeK"nCO^$m,+]+f!iG#\]IGZe'<.eDY]MF(N?HfdpqE*.Wm'QQ[]:'2jp&rKou1+TLr2E"-Z>I]oK1]V@g=&K_I6]Ju0hB^$?)DmUh7bP(XZQd`6]QeT17,78DL`DUO8If7$OEi"JLC"]J`"A+3\S)D3b<;>TNl<Oe;=i72Dp-V+'PVIMT&t,]PaFaLY/r%i!A2UF$'[fCZuB.\k!HmMM@-\B6Of&9[G8cKL.L!u[^4)?OZl'"ABG;fM;"'%aE'u@HU)AUPE#*q=>p3ImXqYcm'%ZPTnop1Q6W@WUNU]Q4Y#-&RqqFT.YT/,@GH*Slb;:CYgZ.3:s6[uV/';n^;PADiiFZb$t$ET(%-8mlS.1Sp+,@)e#KEj[d&O;-!AY8?KlLV`b9TNabC.:2PAicP7aY[+t^OtF>@YAL-Hd%Q*)K$nlTAT)l$#+[tQ[rWD7An!:0Z5oQC3n,0Pe_FWF4U?($GD0"SuN/\ZRTnU(k3c#igRTj6i.+t-6D3:kub%2p),#&))V\8^Y,IJg@"G%gZR^&"H&:]G5QHr#RTPCf]N2cB<<.\V2UqL'=#:T-ao'jka\FA!M3V-5-CTIpZ7l/-M@HJ][8-l*.30_X62?,qS\_J\2FBc(,mGjMMWNl>I&7H8)kddteVEbPpfr&"QtF>;410:Gb(HGC284]#l%X(gT,a#&D9^6:E$\8)pDWXYP`*Pc$uZ+S1V.:Nt:C=]u.+bmuJ07%S)r:Oco)B34U=`50,#:O1E:a71t::J4_;\nLgT`6nFG1TXO'$W7:?T[&.].)l[cV0:0GjI<^-FQV1^D)/]YZO,HWGu5$12(4K!t=jY`=:82R)ZU_2,ge!FT)Fe%^cT~>endstream
endobj endobj
24 0 obj 24 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1224 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1774
>> >>
stream stream
Gatm:?$"IU&:O#N=C.B1UoM.GkCj3RTTGiY4?W;UFjsB)D!,!I0YP7#Y2mMYD0&Ea(j4h-d`Q4K3P,V#MM$W/]E!2G_V#.uN'hn#9G.Zr*+nHW5::9^;o_:>c68>WM,c)\$s,0DF[mlO$Xg4M4o<$G$%EfN8PDPSKJ='Y"[p=-0F@CZ7UNI<e<!A^]PL:/9]"F%KU8nsfs3(dGAtZL"KrqRj+1rpi5jIEfr^</:2MYE1bS,g?[L_gEBF8nMdt]*5'UUiqKL=@4Oj,fg6U;4h#9C/\_A#-KkYi]6fdImIc>=r#YYQ4EEeCoa#r-amrNpl[]QU4W>fUm):":46mrrDHYQhVpZm<!4@U^f[W2in<E0Ik`TZP$DZ(6BZsl1k#8s+0m%10lqrh<c>hRO]4Isf25:3L=f3*"H(j73_L<hWUlfsfg=(=5Z5)/B/R0T0hL/R,5Z/$62G5CSGgmpg[MBI+'/;"]ND+<Va)&O_P')^Cn&tC*5bc_ZtCE=Yl8?Gi"8AZ$sFc(""+\ZV;k86Sn&J:ioV?GMSnPDGRdXn2KYbXk'YO*C!b[]?s,H7G6(GeSuds#0Wo?@75]XV(>+/`I1^A0AT-]h9n*D/iB1;dY6o`8@o"'oh=ILBonY0!-'K1i;5Q.ZjS@oon99_m]=eRVJoWFbPs,Z1.,jAbAG$[c\,;;H99I:P`;@'6?5#Ep5Z7^a&,+:/4h3)eNIN2BH';)RKs%L#dK$`J:5/>($<;Q6nc@Wmu-*d-epX-!(aJYoHi#-uLn5`204Ok4d2JAJ7a*FQL1:p:'d<<`e7/odao*5`4\/T#rh<<ZHI%8-dbgT7]$ojTU(OeDW8-HD8^;;A9<cQ6#W8c\7Og7g;Of=ZY<dZ+$\bHn;gG)&o*p\I*nLEcS5];*>+$rrtuPTO`sJgK7L1N,=]LMqVW]3jBI>AK"#_90ZbBT9J;Ja(/Xml7i5<82!n\$]MFr"^Q)hu4/_N7rsSaJF0,[ga:2a(Pa]*d(*QM;fJQ!&!_!TObc<8o0eb*-:)2<8i=^Agr)_neAjG\e46%U:uMj7&/UD,b4,%F`ula+8mTSI2W&LZg%c1W.S79=V_;1;$6i%A3.nc?^Fc1ORd@[/odq7IeT-'A_6?)BA^VZ6Oc4hZto5#@SYS+dFSt18XJN,5W.H27M<jC'YHMrUV:csmglaT\*e/1Y89FLYsk`JO.30'[$0CQPq=f=4e-K^+7nrR4o~>endstream Gb"/'D/\/e&H;*)EU,!]=BUc42m<fegS!BNF[`tRfWl$n7*Dk^d\UK`l*'!,HArXu:)alqYf*aYL:fT4pY9i1:pBGYReO;l31IgLEse/JHjS:G%a6Ta`I.5b6C>f@`s#oWQ5q_'Trl'pV%Wm48%aq;'EZH*Ja\+&:_En>!"@3L54q3]=?`0M+MMLaJHI0jXqu>Xo/?+U6e;ff4YJo[ho$>pn3Z+ld:&F8$]X*Tg3fjEWpL@U]"SRD!iE`IH2e4Xb*87_9$/.QX;$^s'jNNV_p_]VSF:_U[p2(Lq&8CV["Ep,a0g_=48sAt(VH!e6q*Z?5GBtJ&[6hK[tnL/`FDVU^<K4,=q7:16)HN<LX5:Yb5t0qI<)K115Q>p&CYi'Zir@?2d7mW'C]h98u\s^0T;]X`s]"8%$p^1mEomh1+l\LK_@MTf4r/dcAa&Wf/=)MVO,g,Ns9;si_g]AcI^]VD5Ii/Yi_c[Ql7LgjGqFtXu%WJ<?K/$J5U;q$C=]%K_OrnR8!D;_kZ`F#i?5HYCb\NM=4#8_4&9!=.l@j*p9!RYi'(-M$-"T]UH7L3%Y?h.,I?@-gOZf;/gFaK'X?AH2#NrHNpYV`gQ!01RN.*BYm3.na\);I5'.qDA\aK#dn@0T`TA_3`B45-7E#M\[W\I0l_TU<j-BmT/_Cu&,&Ye`-K:A/:Y/B[!Ue([q7F+V#:bI:opYIWpN+8'S",DqN4Q%nUnV.=ksrggPW72K0D>sO.nY_a4^J0:KA,R_YUmHE!J^^3,1]Wie,1&,\3-bh,A*[fG7RZ-6]jt)a`GuY=k[$jc.B[f5'Ak<jdB1nJ09O[esF4Z>BbIds;`Y'^u`uN,*;=R:Ia%Hr6$\M;e<^0X>V0WAB1Y;7+`%-ls[9-\T8T@QU1Y5<&%tRqa;n?L`8])`sUPFU@gE4*?j-T]`N6a<l]`E9*eLF7hQBrI5nHm+au4=/@808"OWYE2=iZ/n><0S)TN,<_u=nkm^OaV@h1FO(D1].*FOHl!C+P).)9q,-$ad45;1k]ssD,<G<^VW3@=^!nj6;gWAW'cLA/i49++SS8k'EIQG<S1\?+9DK`jAW>iFcen(LL&;ilq]7LD8$n)r@(5lullL_jUHiQ<Gor"I:/N@^:M>5("G3F)g:7h^&%Seh,Z:=RJ:),,,',mD.L=[F&NPdD+/IbEo'\MH%TUFU$m,N7Q.$3Ub\^O6k<u#Q\=#ja)>\<LYYHB"7&qsJ+9hlU_mH`WI!V4JjN`nlYg$h+.Du*%@.\]HS1F0\B9(K'lF@'=$6!h=2$;?Q!WXq>lL<IrJ&Bc@LZe1q!8tP9$dc34&DQ9,V%43Ts-*u!pHadP!DGrDBYHsZK7ic\mAZ=Z:L33(X6=WiTl3%5l&:R'Nln2@]3*JkETA\,iO'uAHdhd`'4Stpsl4Bd!o*pfnZ9f_$U)]k<8k<O@K'0_f##e=?q9ht,$L]6:Ib84GR\Ldi$g1^]5%8*_"Hq:Kd7:?D6<?o$Q*!u5(W(V%lWmQVG+lI%6PS.c"1q6Q;X7`!HZ+c9X1jmq&O(9=q"UF8\uek[R$Bbg<peiBh:,V8GAM/#'$=Y*9npYHZa*Js8.V]ko4XcK'am4:gQ)"[E/s).EU\I6X8Z%oU8u^--B:CccbH6$j5L>\c/'Q7eiuCG)(=M[9#1EQCiX@\T4Une"M_a)(!gssi:K)qFmi*=E3+;mddse9q<_WZD?#jrkN3`G9DmT4Lf;Va^%0$Q.J/+KC5mU^hTnI[&qMi,'?,(0H/:Bk5#RdG#NRiHSc~>endstream
endobj endobj
25 0 obj 25 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1075 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2111
>> >>
stream stream
Gau`R_/A9k&A@rkVO,0UU0NkU,cd758N5I5K5A+r>G126.utG!P,M2t]Zo&P8D.n3N?S0u(n`/banPH"Ajuh]rBqK\)W2fp[oWWaKR<ee0a7@^]ZV[`'<ti2bZL*#8cLTDAi!$5-?PBk1^5:<WaYu[PF8.$>WHN8[Q$kVS:EG+;9J\C*5^\E*U8-]/Ds,e%(HV5D/j9=#>F;,@_4_*@@CQ\h8?^`J%EAlE;ps>9??#c/\f"h2Pru9V=J/(NCV)Sr]&j[3j96DJHBR/aTKXME@Mg\+EfG/5j,5$)S8b2fR<?+V,oqd58@.F%@[=QidKcZgVX]9*ig?J#d)"]&=&7C@:@bNR#]"09.M+n7+#-U]#V3-bDK>h"tnN1Z]:$.NFstEM+WdW(anQ3I\).S_;tb7/$_R"<NUUHNjDUB"knGlL84e!D8umYT@OI)j541^gYfGQCN)+;GT,>pDW_]P%9T_D2J2c$9%0"5rj8mq%&2KF(gF1]Bp$CEQLGc]rWGs;k_b$TVQ%^MqtPH*7\jbeWp_Sk6c'JJSfH4=&gB9+$@(LM&![G\LeYYd>=4J@D!:l7,!:rj-)n4)NBq[X_4/$(RhD;DV2\jO),"V./T#d]%Gc0?VA0@?\TV4PV9"3eOcHFjZ[Ma62&1`OUc/gTWEZIDRIKE>UdH#B9o1?KOJL[;+[J'@e\Q:8Lp_G1DjGI3C[L%5.^fo<BaS[';Jfu\00d$jku54BFG[6mB6N>374GcAna)Wl;8W(toCRqYr./_h*AM9JGsppsS-/F:YbN+m/#pE/2ga%sM2eo+K:EPi>-FElWPOrZqPm(e,M.sBl\LaSU.?9QLYCKHI\&_0K.HNs$JcGCf13iE<@778GR$:cgUd!9KC\G5lW$_R6bi,:be7Ql"p6AOM#>`jqO@5I=o)[,9O;YWI3gmR3M%8Y]gATT7mm3(q2fk$gW^boIf0$<Q_-`2,I3,F8QWg)Cql7@JAh1Q9Sk<oUWLG'O#(/uV[7A4DA'L&Q""":oZ3WG%J=9),J7^Yn&Q-DIoH$%n$aBg^S[Sth\X7a[FHsVVl;Xi87/TVaZnfX@.F~>endstream Gb"/'>Bed\&:WeD9_1Z!;TJ>KEcQK[VEN%=e'"%o+.>A!,JZU2W%@,?BE.jhN,;5oJRm6:gTuu\&[q>rS!e1a6bp\h.:2$Ki'e0"?5"FkoS,UnbCeXjGh$SXCKXEjKUr^?)qf,L!NY7L#H1KmJ0.lZa6=.km*LVV&%m^#;:LH<_>D*2KV0.jT<nl+@:4kQ#?F7j+:=G&GHJZ#E,!YhK:m;YrXrRKi,u,o7#*I/IlJ<P6-;pPZau`>'0l,_QU:T:]2+3$+@du@a&6sQ;_&WE2&n\Q#gX#iT:I_iVbB7.h?ihGQj"ClHG47lXqr]cqM&R%3`*2TkWKq4JqDaEj9)\ibn;u^1o.no%:aD3ZA;49!E)n3c_r`9[?+>1nSu2DC!-n%)85\[Dg@I^DO_6f2@(kgZbtor<*^0Hl7q0dP7ZItVQ.W[bBE@Ue`;1W]Vn:rO5O"/0>'_m>>aEnHTmi\?Rp$IF"eTKe6'okkI[.3N*G=CiCi;n1\o=3%m#Ejg/_1!7DidZX5aa=!8"VFf5[P%At3QH1hElr>L.R-Z`RL]+$2P\(iJNE]/XY3PiGi2CVs#4_$L3l0kE%6R!Nqhqc$*+ACu-MNJ*<o(G`**0g\-c^O'T=T9u'$V?Sh1O)Ds7]iQo-ZJSG[L(M(8`FG3F>@2UC#3.N"';.tFMl-d"ZaGo,7!0c&CI5GVp'?]n>#_GaD-!s4nkY7<rL;$W5Z9`._@aK`ja=N8XMX@h\$aob'TJ[A?C?=G.ZAg^?;jSS[MHYb&(_1-E%NhD_lN6aJn0LLG#Ei61PIEj3_4qL<\@OuQle1'ZAY>*pTL5/jXq:[\j$6T.T*A"n7B>sPa*YX8JnT5kn;/e,U/5UC@b[l3E_a)psm5jieg=M@2/-.VP&02&m_"V,uk/+J=!ghUme9$o`M#R_&-=*f5&C6M9m[igj&T3eM*5uL1E17R(r!CUMdfsGG4H<P'tg`_#MV4EQS![Uan/N(tMSGR4t5&9JXk#K&W`;%;.eqTJSA$kU*/JOJod)`5XpiJl[b[Oi?oEoSg*E_("J+];cYnHeF,"oR$uFLK,8P#PK/pABp]H^lE._BRI"-[s2$pIQ'_"VqfUl(c'&ubgm/nn(AZEZZD[$+%_b8[i2S`cs:+a:+[F<kG[t!-#%kF1/5aQ"_s65.c)VegNf5e$s5GZn=0Uoh4*]u9?,SekXE<;g.AY00CI.1Rpi>O]#p=48$"6UVYT="?h3J6$iL1)S5PoOhhs7`*kO=U%B'e>5c`u,P_j7PY@ku!!'L_?64+k@af%nKFY7MMO8BcpA?&L16rA:GAisX`Y=R5u7aWAL[p`A:Taf'0_Kon0j2W+7CbP;Gc$5jpO\A6c%<1>mldN=U#JY$M7QQ2V\YW`oR6bPiAP.)s^/>f]1>%(;jgOp2l?++M'q3"hPa#sB""43N/sDJ<2u42!b\L5U,G'u#_]jB1SFQ:q9gk.BXKrW\jC1B.:6sAMb1u/LpD8ec$snrgaY-+&,Vh;\WMo+n)@'s9r[c<eGr;*aN^]gO&h[+Vc;,?'L+]3e8MnY7f->H"QusD;s!GRCBbJ?>(V0tu:\uP[Hf-o,UYsFQoQTL@I3TBZ:!L=-c8%"_j;.-8=:-VCbG.h-M6M-<31"2Xj547W>mhh'/BtcQQ]a-S^3hfO"Kc^Q%7A8op3$,DYZr8#k_)s;gfi<j-rlAN1p*ep3-t>!pZa@&Gu<gB'!,tYH&1D!#HPHJVCkV2a?3)N?lks8fgI1$eM2oQmJ7mYbk8b[fQ=0&/n1AB!AW\UcDbErmIMeO\)F(XGl5&]e%ai0]D1&`j("/$3Z/t@.N@:!aVqjm:Nb@':br2S;c6Q#j(o[S1*72NN@\S,@ujpQj_TQi(\r!$I#&7IELXW=;C1bNa4!7n/;`F!oGAUR$T$DR,8O:(hU,#.VXLINc;f"[.VhNF"clPd:/"N-8l\4T$u6cs6dXbhX-b!-q')[bW#Pnhbi6`BrH(WA3JCbEd0P"YS"7[L,h"tXebu$YXZY>G3Pq$,fH?Z-mq-E"jJ%]mJ\7oqo'(2dDImgJA_.ruj$"A[DANcd7`gb3CkI11B86!YRo1cK;J_HUkrlDLgo!_<^iE3X>5nSHcKP?~>endstream
endobj endobj
26 0 obj 26 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1269 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1900
>> >>
stream stream
Gau`S?#SIU'Re<2\9j*;FGrbIqUeHGY0Pb<kdo:M2BXZ3F=k\%8<9L/V8%JGP,pM_NghrG+=+1:7Im$k%hGj("SD3OJ)11<R`!5r#;0Du!$8BNjtiCMO8_?&_jbYg_H7(7U5Yp(%;?_LBc\@_8n$QV:]8e,;[GSUMZqpH9:3r,2[IHR*^eJ02@`^@<i&h521dXB]'*MAcX=KPF6TPt?l4]TJU[R>\WH?`=,.'o6R_KADQC0t,s&P(]10.2G'e=pk0H3#hs%ZV?l1T>ZbusY2pTAZIiJL(..)"-.U@R*9h344_gOl`4g:,B41#B\,@"XBP]F]_$+cl+\I]&]839nkKP0D%K07(TaEYl'4s&]ONq(0[nA1P&>'IXn6W9*[FSR2I2]"!gSR8ZQr2-XfV*k)](T7jSQBJ),OF&^;aV]LQAn@t$<1k:SitJIuI18j"K$nV>o_%a(!rXGac4$"hW;AC4%"b2o8H5/b&r2>%.?d&bm3Nq^`qWUN^G+=;!<2#:Ab6Y0-P81i1f$GVqia=$c!#0W'(_S6<e3q)j0=R:JX;K=j0ug^pkp\r[m"_W?4H'2MlQR"kkb/Rfb9Slm8^PD88:RpIJWNVA+*+,n)QEZ2+aP6L9c<&/9\["Y)N=B_]f7)((mHkBaU"Xr]#n-DKY@s;FIYXFUP,UT>*h([2R-?*&abO'-<BHBn')7NNo/Ag8h0j\lu3JEn+WGOH1ea)?#D?HpgO[`ZO2mhr/';*X7t2FYCK2UK+=I'e'/`;kc1i]mquVU&hm&qa%2V-uE6)fY.?l+GLK[I`bR99k?5<mtupB(<'.`%sf'"(1^;*S&@TD&daNX(eG2g'3R__LFnR/2bh;s+6/Gn/51X<V=MF]3A'M<HECs`"LT[!cBtFqZgo!1gfrDbS#DmjT$H2a:&k"aeSP*P#+E07MC`=)P4$$`72h-T)eB_=l?I=fh(4TC;mTnWG;(@idt$7haHr9tn&W42>WCF<alMesR0kDBYPbZMeNF]:N7#r:XcGheMSj;"&CL6,nM.L`%dh^>_l"TG+OB'9S`%^NH)j+Npf*B<%2XG$nsr'1R%d8V&rLY#e9RF@nV8)Wgi9Firat[Q9$PT^W\,aso(#QCJ+`Ni3f@k0?Vl_[A516aj_$>nI=lY!/ZsJN9350;DW)O`_djcT_<;4WU.ULVY_W]iAjCbP%IB$aKId>*,#o4,Z?)!CV'#X=reCkqU"VJnG.C^bRQfL#^R`&l2fqp(q9kYA+8heS8h3Fsb7BX4"`0r(C&~>endstream Gb!;d=``=U&:W67f]l&MUbG&c,cFD69kq:sS&@n#Ub@1j.%#V16R?G.a5k!Z_-8;S1iZ\l,?Z/_?@9?m"r(FGq",e]B+m6aB#"hB>QEf;_rN*`9a6(XLg_54[t'itR]Z\02>&&e_&rs*-FR^"$j:^/E&_gQL_-]h"6ge\3KQkCGW9(r*1K!@!tib_KtTcj'&,*:1aeT+]Bf*SIR:*u'"cR%eL]V!%!SquW.q@p$"]E4_'FW[ldPS]i->sVbb$7S#k.=`qXY]P%E!ap0AoZ5b:m)AoDqW$0R9T#FI7*,'$K@].as_>99up6CDabT!Yp't4&"M*(MbY3;5r]F2A$_dk^Di/<]YC%Hds_UVA=JsN.,5ITX5q5LPZF@jDC5SGt6j$>:)2aP$=%Q<-'EVohGV]hA$/7/0oV+i<9qD$9a9;,8KAs^$pE;!I?\)Mea23HYRFC\5&2$P3G=0\Vpj-BPF?LTn8\ciH:;Q6b)i!OLS2O'^i***8S^*;Sk3>n]DTPR*-JD"@)$h3^k6?Q[A:a97/j#Z?ek64_5#]S&OMC0@sM<4T#\#>.J46pa0cng.`#[4>)>qhUDe<3hS@D5Rs(!]8u<9`k9]dFu2BqNjDYUP7`^-_&?IG%/6Vr-g3@3Tji.^=seQ,>c/:n81AeMaV6o@+U#OG<(qfkma(`5efCkW;Lsc]e\1&Wo@&WX,kl>iBm]28\=2NYMM"&-)ta+\DIk^!Ch:mmRD5%j/na!mg)T<>7fc>r8'AWhYg^ID$p4Zl%f/n"4PO>tgKdWc$3'>7J:uhB?5UgEOSp;W<OOFRDUtFN\4!t>ng9[l.7)/+&oJ#GW's\m/ohEcNJkgTRW64gVSu93).Ac?2KfVUGF8`JHPg/&5n".Q?&/^?EQZS%=UPI>:efRp2=65p.&Tga7FZ\^6*nR-'8(@,Y\M`o_C`raRQ88Z.Q0.&1b6YIr=KMVEJ3O<VCaUXb46/87;E!BFfjk3CYF::_0f(d=o),7$P%%d1J1&8/NTSJM/+f_`hsS\[T17kFDq5pb5`KTGeC]tWi95:-+fnInrl&ViC_#['DT54&Da9p>@d4/TL?BMdnoj\ph2mkNP=C=(_s"d+JhYVLb+<pENC@IOf(M[k\5U_aq%gc$mkG-BXjZD[tnl^7@Q.1np(1@dj0rf(rbXn]*un2h;["75=r"q+SWOl0q=L6#C9&$[_Pl"("]2tU4R"sUN+ECajuWdm5S"Q3KA<dG\9S^@F=DVKNc;5m3>Y#X:lN^j7t+&:fc+8,<LBo$Nr1<b8e,FdQ\R7Qpj[^a.4i70V+D2:5pC?/N:'C;Qgc?;ZCDBUgB`H1YU!_B*?n>"^(,t,lUt(Ga;%lM?U=h.^NsH-Z9G'5keAYjs]hdLH0ODpW;g^J>W'@r__]WKPaIFoD2jj$OoYaF-]lMU(;Ct%fW0Ei>UkgL!b_"-EMobZLuKX`p0J9j,]mNcI0Jp:nFEh=oSJ4:t?5(LB6VR56;fES#aEWa5gu\FZL"3*$]Vr38WqOq"a1=n_qZdalM[3^:@qu;]e<,ONVO9X)-l!jSq/ZgtK[7olWZF2!R,sCS`*(f2'WYV#:n#b'-IgZ]B+oIFsl`Y7[D3D:$be(ado"5DCGUbOeMA@<4io3W(SOr!I+O*QSWU72,@>n&EH!D'SfX9h9hriH2'hcO8]+1Rn(s(<l&Y]K6VC[U//t,#tQWQZK-<j,IZK>$-j9Y$er+1NaFLFAgF=EP6TUq^/7El5s8G?gs\OaqGZG"4""V9_Q`r_<ij-h4am0gRN_^MbB%RH7J>h653_((ZoHedhDY=r1jB6=s\h7GAMN3oT3>:Z)(Z1p[Kp&Hd3]u/g6>*oL`C5O;Bjqk]f?5)qU.*OihWd<\b^Sb(7]QEH-j&A&hO*pYleirrD6kU5A~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1812
>>
stream
Gb!SlgN)%,&:N/3D"XT7;MY<=&p1&3EU%)oe8CGSge9MQTdX#p7?IpJfo;L!HPa=fZ=GCYdknANZuB0<]q&GjJqZEGru95`SdqFnS-!7U\,seZLVYE%)g'q\#]lES*?_epCnCauD=[ckm_n%n`:]No6!,0?*X=;G&],@"E1c;j&%%"j`uPN*F"L1,+G)YWE7ag<`+9@<k/;7FIs$6t:De=?ED(BZZhQst\:U#=eP^6Z/F%Hi$tdl`mFCYQn0/an1n5g_";dJli?X%K`]Q4AJR`sMULZ"M,8a\'i3>;8-'UJ,EGY%p$U'bh1*>bR(A'X)X#L*W-0,M=E=JB&]0nUo8*f3BPtr3"jF4=R5HriLeU@P-.(3s^9+/-2gu.N`B9g]rZb9#sGtS_'+Dj^j8d2?C=r1:sBqQ)>rou61?Hk9k`%mK0f>aJOP3E#.a7Z(rE_!='qf$c[K+E%6&IlaCp%;:ecIu4Y(G^U^WA1bZ"PFtnA\=o0+s+iV(!BH7;$lLg0(-^d70Go(/+:ut]?M7$d2:D2[AN]@VTZ8PlX6/11kgTO.No3uRDNP(.abRkUnj=H'0(;dJsi1TP8GZ#+0@hSZNA6[<Shu5PrF@39!:E[J_ILDBFF%/KO6&l'ZkU43W,>0ST`$@Bp4kr<1HO.'ng7ZM&[#Qk=p-884c@9=^";qgo5(r;a+e[j5=?r%eYYFE8(@<e=s[8XBRoI-o%gX6(0.E_/UQ/*U\1VA(P3fLC;:ACkc\.GDX9jY<=)02.<C(UWasAF./#ea*b`Ea+d2G`A#IOeHkFP'\.Sf3g=kU[&0rpR+7]A,)_=J#HP[EmVfIHrXCrQ:0sO9:W:'gr7lE1&L@Ie4R<`R;<Hl>6`B>3mdAW>Ko8oFq!7nl;Jl)D4Pgmn<e*/saTG'iXlAkHd!Y]gMF-Z@5eX\)QK<*G3ZXa'4GGg5WUY-?kS=g^G(i59dfRQu)oCcG3.H'o?6CXGU>^X?m9j2k-5V9!@-/-(*f'&.q$\st.Kbr&QtS&EfalhG3$'e$Td>Y*1d['l&]b(Rj:60H:R'VLi0Kb8(&mTiD4>c.A'OF<AKQ*Nb:pD!RoJhSoYC%_Bi]`;d%Jm)_L912PJ,/u4#r%b,gda0C#&rc<aB:80#KYsHh9fG,u5Yo1-tMJE,t[=r3-QA=9quDkM]Uh]Ybts-$57mAYs&pm?35RdSNZ5e3BuT0/2Y>NCVQZ*iEj:ITMN#ahssmiY=,3_`P8TD;Y=$h5'6XA[Ji[q@=L^r<iSM-@2#O5t=4Q@QGB5,?Yb(+(eF9r_-bhW7qbKfg:XLf^*;:&#Meh9f8"3;FoVfa+3CuNq[;$9p;u3mqM[k1YAJ-+jUl7F^2;ff6T&&lbTc,PVkE*E"SkZH+If=SHc&`G9UsK+*jJ);FTks3g"0!Y\(2P!\_0"PFp.]81eH#BNL"8.aor)2iFkfQg1e>2)]E&>SmjEA..W[qK)[pnbdANUE*+*hBn.ZnR0$m2f8O.F'2uIh?7!c6]CA3UDYOH)N^'2;:%4,5m[[SK=pBX`CDkr=g>]18,N-Ggk6AqO*PED<M9Qbjq?X`26$69,`Lh]0@\KZ2+@KoP(0JTk2I&e"(UPRn^<b_j::jMq9BfJe(]I:`rS@KF3As@2Da+b?>FWNU@J/mc\q3(SK9Fr_kf:uha31U;q"[!`@m$*l.SiJ+^V`7r]`_NC7XSgp"Pb06&Nd$FN'._C3+/1H.`QQ1,K;_M]I!r42L(<<pHY@>`OKAcW_/S^Kb+5pQgO09-*lcDcrr@?&u=^J$=(<n@!ng`qfLsAbrKsKq&iYE'`Z*b&^e1~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1790
>>
stream
Gb!Sk>Ar7S'RnZ;3:N,1Zns4o''5f(g*K&6os1=[qVi;pVJX;XPY/71G2%N(&TtK%--_Me`F:3R..ZE/Icldn`=FbSK+5Wf$&m.I0H2>H@%;2']RmJHouSDdCO9:dE?o[S)i3qs5EIM"(kbOeht@pYl4N9#i0"[$I0hh"o/u/$WaYG=@R*&BHBJAm9XrM6g@#U)[de$+K^8Jiq^_JQ+eDKb8idZmr#uu\@$OV!Wl#-S_@nWV_!oV'5;1q`ZIE$]8s0HDjJ`Vi3D=;EK4c!>WcpKrY&nskP=q9*.LtZmE^>P$\@3"F8nZ8r4B2j;+)2\5$JZ-441&IVinBZ2/h5)UP\>K'0ZnbZ:"5,uW='ABBN&@JSG-H%ER-/[gWW)%QaGDt:,P4S$0B\&cH(<+?o<#LnHn6iCS9rQcA:LY4Jr6ngaO$s&i;BMeNQA:,G(-jf<b^Vm9,!/>@A_'BOn7=\(\4h#1gpPYuH*CQ]KEPpa0T%O]>A&SE:LBB!r)+H%^Ln2a/1?i(V11E=-Ir6^FWY]S*cW&8sK`S\j"J1;5aO)DioLEs4L9Oj7C)l1AFKL0oE25kLs3khd-;m;Tdl$Mr2dorg^63.bZ"F]?G&Q#AGa1Jgpi?I!!E#ZglCYX?t'qQ#?dV:)og6R12A_.YbGQ,ju*#$3jWUJ:njC(MY[.pSpq_a9'>Se#^'5^9(9T&$Oo(W:GYfi>9k^Z2<6Pt`>:/t68nCOC96cQ%^bNbt-8MesHp@1pI%8N/,k%X0DVC=IEQ19Q'"fBmf@AkKm9#1(rcA[9"(>cIB5^?R!OStcBqK7jnlQYR'+QReVTK;A0B!<7*VN<gsO)YqlOUL<)<)'V#h:5^qPG4eRr0RR#ZLX&YX240"ckB=7N=@`h)9%2i>X\ld6;22=)ZZI.hd6WN[Js?hs``kI)&CKjYf'1oPNWD2t;rhOj0Lm-4IKDtQ!fIbfG*`ep,h0i+L(T,H/SZPEAdV"D*Z@LaAnVQAgTu>_,OXY\\:CRKGd=9X%%]Z%S1dfL0Klsr2I%C'KK77#N3/.RB+pXTr;.TGY:qP-9pqYs_n]^SJ9etZd0(-V0WaVD%`eOVJV#%HP6@uRK*qJb?\EEjou:q!CiIG\*(eE@g*Ln$'`D%^=4R0o345"LS^qdi\#EP&3G"f6/#:(=?qdlgXSX`kkhOiU/3Y20C)YrYM0&?8>dFa?q4_gl_dZK%Fu;<NUbWs.O?9U3jN6XXY:eI3dN<,+qQ0-rYZG89;\aG46^8/7W%<!lh.-5e9lcdFRrsg0K0X)&i6[]j,a8.>H+!K,bPjcEITO.1aRkVk-,CTjSZ,m4,TFf^HD%9IQPp7b/3hSC?!mEeeGg&<doqhPnR\]3ZhN6g\\Dqd^T.f%XR=a%'0M1>Q0Ebl2PN7<.r)g(m$jGuf80uqU;#(7I!fJKC?!T5I;XA5kM^T*e9jC1fRLp>n81Rk_.[*k_0r%MmE$qZh&=*%*iqDm-9D!X'-5J5E[L6ke39llf'$fVb+bep(A"i&Hns<30Fm\N_bTNrm`P+@YYdhNB%jK30ZE/sRHl)-(Y@U__:q&gE2?J81c*C#HKYP7Vc_ZtXWoV:Hk7g9_:*Th*e;+Vr3C']aZ!=V3=k81O(I<''onDOpMN,W<SJ;Ks&ug)eZIYW>Wb]!]YW[FgKh)T-S)\I9l:(uTTV?)N4KnHj:(LTj^fM1bo!Kp'ZO-Pr_s'jSpGR.$G.QTTtH>6maJ;I@+iiC-/PVUhc;4aFM-t$U\86,f::aE!&#i@6]P>!($3,fR-]^UlL<d>f"[cBjkK~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1685
>>
stream
Gb!;cbBDVu&Dcq.VHGW62,*KC:cV\2Z$kugNLNm]2r;mq,h&JY"bc6RD>q3N5!V7^b&Q7-eC$'?J=*mWF"oJHi8BAks-">9i=P]Y-r:_7A"Z$U@<`:&6gM'IgsBV]!6!oX(V)dT:]H!9=?-L-#pVC'^`>m(o>0USE#s"<E?/PRJJ9eeAPjR$F;Xb'E#OBlgfX$-cumaD:P(9Zf%2kU\:tf^YX+$ulRs0o-YTh8A(C1-6N\+>E!H%5Mr2h<[$ZY)\LraJ4t.qDCB^'-bM_:eNl8'@MReg%@<_ml=5(KR;*T"ji;%3>kd`+"q+/NFcnFo7c!t-S7QqrQXd.7MTEPb5iA$AZ>D,$o$BZNRXf9kc=i`%3"!!A0B).D9oU<&/o!tM3G!dS\+`Vmb/W]DpRD^jj'JW%M'3;!S=?n:0kbg.1_m"U2+>>$RWk6A(8f6_adnXQ"l$OeCdt,X1`aEZ7GJ!*g-J#S)Bh<g>ORJh:&650A#]E\I'XWZa/p0OG'i&fg<AE7cLFP@^-f4,l4)`-jCt`iJ.qG.N.Rsh#L)U/g<"0laMXfqO'!]feI#]"gU=(6@M,9g:+YW5)1k8KG1nVS@O=t3I3;@LoImG.%6p(&[iX+Jke*mNR^[,o3)0)#WXZBb38$N\2rVd'^*UiL"_;,mkkReXON-?,?D1!Tad=^Bqp)\K-P_`Ci[m,QZpAuEMfFt*#LqA`NR)SS0eGWW;S>C3SargJrKb<j'cJ?W[[8'Y?2M*mR9YBdP'JQ9?doAb*(dKq.bMWlJIS_DfL6pp?Y(`C%/%J3Kn>Fp4G0_DWF'[Xtp3OV;cj'$cR(AZHF<Tl"F)AIQEGPOCMJ]Q1K&$b5iB/2[PNR'CL&/DbYT0T0>?,(/Y/$=ThA(r1:oL`%S;fq>dW(]]%&FYZTi..b`Mtc)2\P.-:GqJO6sbeXdUakJZ3'Q)OC#:&P1C@srOS$BX"e,3VG!:Pdp//B?(03C924TtWM\F7DHLjP(XfJLi#+#Rp*C5(l`N!i8K$7id\A(\PZ-UXdpR$iK=VcL.[d@tCNIU$FQ(jK>fD1$^ndEF\j"[5nK;1tL\g0Q3(VOCcLfBIXf/MfEkWPOSZf4ooV8BGBZ(9[!rJs%CKcNl@1Ae7"Tn-g0.p"[cB!auj,\VQHp^C&;aQLBKupEXdpf3478h@upZ?IpRe&`r(/!X@2F)`DG2iJ9HbtX.kj^0>gh^E`hJ?Wn0cPR.78%"j32ofW-p\5%hjp@Cgb"*5IMglG%\ruD+jqpTR9g7pibRW/?1hP66G>#[XYo>9=Bdi9lHH_a0Sd9)ao56q_=kkX&#:R]FsKo\CcV?j&D:r^*fIJS:9-Fjk?uca\VJ`2Xu@TZ>.nVVGB#1=X&+<M1_gB<.-*o2GUHl3a(g7VL*2l(&fJU$X/^&8W.iGGiKkL*h\K?A7d6_;c3Z>!Kh`t.WnY"X6/26,_*f&`OHO&uY&l&cLk=l"(\V+Mp`2;Bdh%TIflJ90nT:C,4G3.Xjho[$f+h*YV!Yojd-F5@Q:]Q)NJlfE`]C-KalU^*Y3a(+XFIH=/dZpW[WOf<5@:f*rHnSD)[-%TS7PcA12V6mk"'mY(>V]IX4oV+oUM38^\$7c;AOIa_HBpq@%FbJ?c_bsp\Ds`J@F.O^HcCTk<RZ!2fCSUVD>iQ.*,>\p@(68I]g6^&(]Ngoaenjpnn~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1845
>>
stream
Gau`T>BA7_'Roe[36_$2Tjb8d8Lo!5"&6Y/!=H@+J=/]hf8^JH16Ou$Abb^WX1KA+1+f;A&kT.[F8=,;$n-R,rnh&a4;u,b.0IRu49m3iK^fqMN!GsZK\P:E((d1<E&eJ2Qlej7K*X#tfIh@c.-_B*8<A]@V-F0DcT)JV+OMmX4((;nRlX.C;9Z>2IH.s_2Wr.b'$I`>p%,#-b)#3n]9EfE/:N]umU2kh2,te+AX6iBGR;8(0AesI-h0O$rcoK=n7S&#s#bo?k70V%$HN"L%c`gL%UaYbj1C%3Ml=!2Z%R517*frnY@`Vm'DfUN"H`qh7H>2X=Ac>K.@T=\.,/?irdZ]F>eFpV"k3aN!Fe[2L$L?B#L[T!GjDbV+;Ha=S#+gC2PH9pm1iXgnH\`U?k./Z(HJI@bpBM,(0&3UB>p`OJpISl2%SXGDj5"MV@>96nF?gk&LPGO>1W7lUJ5gq&'bEj0:>UEntT+iDXOiqW7!2"7RP1cE>uE'&_dqPc&Rf,\'EC#kaieajn]n?+["=:K']\+:@E#mNgc(C`/uP41V\hF/;PP?B!]V+4+ukZ!5A)qGL-DS(P2]LIs.)"!VdP0^\"&'n4kt=_66"+V'8mCSB6ds_C"F!;.Uf%R8.'n/Z1X$-c7(UbOcAD31:$5r>l<?hfDQE'[5g'K(rm/,1i_Lj.oYM=(t9`UorLT1fK96(jn>4PU"F\O_C<%I@(EfDlHUOqnMhRaW-dPY**':5<dJ'(a$Uj?OWX3G<Y^Ka)%.kMaG%ibne@8EVe1KkgG@!s#(@Y`E1ZQH/@WgT&Y=q>Jo3^B4iU4:ERJ@@t8)Qn\M^ZY%,XL!A]6TpF?Z:l?72Eh=X*pR>!]OrV"$8e0<,Fj???"$Htr8@CP^B/1N3-26o/_.dc)BBEcf)\6=N8n[Bq_/F>k8*:H,a!FiZ/8u;=W#rKgK7O,>P8.p!GE7AcaKJ8+1X0$q2Ji$,PBOQ!8me-oK/3:rG%KA$LWp>YSgK_k"?!$SmD/p>25@JgjQ$6<Z6keP@DmFoPRs;IP(>.X-?D:@Xf@)2"RPFkgH"Q8e@6!rXbHuXo&K;otoiWqA@HAf6@qK!4@+5d:U[S>34VtO)s4\+*2%:ZDL/o7&Y!VWT%8ikT<(g&kQo:ahW8!D[Kf6k__s<WCOA6M?M'9Ee`n,dFd?5@?%ueDUNe:K,YID@W?%!bgL:pI>$+`:GF@)u\4gkCsX33RXK>>!=QM4/Dfu$p^7irhg$+bBG[P5V6L$>cZf7cc]AZ(c/FC+D+g3I[7@DuW[IdPDbfRk+4o$CjbY`kE^-UEun>N;QO-oeP;/8>*pEe,\ebn*kb:Xs`E'M9g`O&Iu98!<pF.4<>Z[L+H#Yo$E@`N.9@)i:m2ERP,6Qpkf$VHek2@2<+l^l+pHo.j"h/]4-lW04<gpf:735#A_D8&afKEqB9T,Y<@m<B+J_YIg\f7o+k"66d<l-76B4k7F&Z]V`Ns*C+UjHU(TDILo>jPsqdAUj@#9fJH.dK'3s^qOmmPm\[f*)\D:gjjge;Dap47c^##B17(tjWM9&j/(EB5K\oXj"Om\u`G#[_j*979*.&7Lft&lLXj;0Kn4e>_o2l6+E,g0+KA#HX:Y!P=Z!+NZDABPuD;-;+AmVj86Z(I4nW,:3=R+`WTcuR5;$2?U^K^LqNchi:a&][Z#!#Vq^$]l:[fbqUc%F(F22(*B\94kY4OZ80/Z/Vm"\An/ESc'Ff@X;4B[\Toi1NGb1P6g%M6NBCMf>,@is\s[I%gLt5fqdaR/,</+'.)*=,D-h"f[!So=X\7:P)Si0D0JK,sb6$;(9*gnNH7.Y#&omiAK,ANn2k#i#cFG&B=~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 869
>>
stream
GauI39lo#B&;KZOMB,GKdjgY7>BXpZe$S@Mg89"6kiAJ*`Ae]kb(<=dI:\lY",.m,'C^MVTm-7a?+gq7pSRUr3X3)bi;AH6AWR=NEl'!1JPSl#DhkQY#p'*:,L;DgOP$aC@'YfE+=(C>@LA5F80g1aLls0D,@Kr0&6+0G(n>^s&.s44i]n\+KMf7%hBsIV/i4qA(ri'.kP7PHH8,`hfsrr/a,.?VcoKTRe`XlGJI!A96gre(]5.291G%"Kecku[#1K9"Hc?29\;!YH@A,&^hE^W;a]T@O--?=N"?mXfU,Q3>8`.UccjuQ+8j_;G\TLp-8hGuh&d9>#eT]bS^"lN7IIQMcY[nUdk9KJkk/a..['KCU=*^BEZ%ZfGg"nk,@P,QBP!1/mV%IR`K'(`0:=mIgQ,Us<Rj6.Q!a-4TThV+%UfsTSZ/s9`DK<DA"'ifk&`?HL7:+^'9bN&+T&@4EQ?fA$;8"1';,!=T7]7G2@*sqhWbPg`L3ZYhXb&+9>Hr**EX:?-]EN552k^]Bk4`J"rfW_QAHj63eI\\gGLEZ=#ORHB_BO@r(n(:VZ[f1[>0XD^gWqZ(T1b)%IL?\^j,DL"h2=U4P=!uS2WHFR!H]">8iW,/An\aYS=5^`oR:H$9/d+Z43e:%rtKNCaj(U22g;l&Ui!Y3A0os03V7cs6W_W#@fj1s"uD>i2YV^?eoUh`%J18/dRkpiRAP.BE1]qqPG#5ad.q\FM7YPQpL("!kD'#3DWY`,EL[0\56-lfL\Vf0bVUEX<97:@7e,&<kH_0)H=G^VZIic=P1"m/qrplXcOYR#&+b\gjZhI!^l<0djq:;NN:RA#a<'c66,8QUX#kN@*Y=8/VT1sb+37/EB)~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1595
>>
stream
GauHK92jk?&AII3FDb]K)Wpu@Pll]$ASX5-Wgm=[4Xe`d$Y5)b@^elXs#mK^NPUq5WWc>04J%"Lh*#->0VJ2Mc$Qf!31[t73<R90ILSs`$1mo\b<5P]+C&t4'bFfQE#aZIocFm++9SHsG2+gVe.?C@8BZgsc2pKrA!hha_tBLL!AU#].tLg"[+.t5"jrj8Bh=Q?DHjjHcdqMEU-%hjc1W6Ei==Fi)RKiC-rWUOHj-k6IfK!@hW>2Q7a!niiK(#.dB\?Sc4-:K^mY5^e,7K-#;EoDq4$*RL/KHXTiRZ'9&KM$^Pe"h;"QJI,ZtD3DJ6T!0_T6<msO/S[Rd/n5T"'-@uQ/g2V*#0!XpR;$J-<"!bk=IhdJ)GUntKWH>,nOH7Z&K>d=7!-lCO"i.MH7)HFZnC6OIO=0@3o2[pf:/#[4],n1\Geo(CZf?3=2<YWog1F[bjI-p"HB\&5AYRHt0WaBVgO3T&]VJ%E`?!1uSbn7u6f:XNU.;kWN*?@G0SYL8r=E^!QlWZD_n>fo(H":kObHlo+*q$&/KB),&V)Kio77`.l-DNCK9/oZ;`J6,T(VYEL8#3769OdtPdK"K:=dAIiI/<d$Ln):p$/J_>ZO=rQ#hj&)j7ji;\=-DhQ23k(nuVCbFU6rS[EOQ0K2HP%-'Be8kl\^4'1,0AKI*#;hMM8%G&odr9TB-@mP<;c3\aVlYk%GFUd[&.N/2M+LQK1TO`4DVcKJtuKX&JSj*jB_S!nPISZtt=jkFV%7<&p#@hD<VUTbPDOb.PIVIC-r#X_f0@saUg;G00))`rpTNd^5MI@&i@KdmLLO5U2T_pVWU,u7G]-OXUKn:!=,;a`.`npH#oU::[X%s@*V!m[nj7bTJ:8ULqX<@$7,jQpo>m#/o_PA:Zg<)J?FU+cE3r(`NB[cQS1%%7hb<>J`Orp8te5-0-ZJsOaP@8)t3<H5%9e-s'RcG_r9.'aD,Z;HDaDNf2T,B$<Y_^lE52W"C5R*e;^/&.(qR?l(tYfZ4ONLuh,:Z6Mp3;,ie7spPG%P2\Inp@"__sKKFgr_dg\4Pf-3"hY,njWJn)"O,hDAp8DMA2r<#],9\25FhCqetN4aH%I^Yt-:";t!?jC8<k(/Y@bo+l/iGO_u;(PH\ulC^.pcak+o=_C=)lfk>RpXqI8Z(Lc@F<:tc*%9rkCIF+T,N1&_D?sI&'T`'@&i_sNRgtZ%GHY7&+s"(,l.IkgtVFao:39nC_?ec9=kM`$9>JN#g:fB^f*lkf>?eqP"Qck/inpUbOpK<7:M^0p'7NT,:]X*?13m66hdIub3n"TIqY<-R<pUAdcb+0l799!_*8>7t5S"KR\G_cPGmVfd$:?8tsl-:7(EtRPq,CIIhg$'bW!K,j7Z!lrEl)WS9,@c.Gho[^EHG!h*$545&(j^7[%6cH'`^:_HiD(aP#lAq1=PN[)OdOa;0#ghMW3>ZrW(R!U)T$8MI6HZ)XeuMQN'3PffM"g71H)E<)%M!Gp9Cn1Z`:!\@3BBqca(.t'_ck'QTi":(ReEab]bXqNWW@n:X\=dp(185Lo2H-JOLDVbog9d3;2#9:HZ>G`H-8CV4,#Nk:QiBrWd8e-R&~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1889
>>
stream
Gb!Sl?!#c?&:Mm.(jO\-5>WY/[VT:D:eD+"^=oC=Z`!/BE>6IOfVr]>h>[6kfoBl>+G&pRH^4dS/(Vq0FD("M$n/hlof&<@]H4qj[gX+/i>@q)!euK72sbt[&ajWf>Tf&&SU^eK*:j7nmUb=&`!^h*^o*@j;Ln6Snbp6.Nq9&W'"!8\o,[uX4Xtj\`+Q79HOKEcic1!]"`Z[Y\37UCk8SXHnJZKTZ[SZ(I"F56Z;qu3.!)3m_^Y5=:Hfl9INGO6RcJ`$T1Z5[8I9%"9@u7T2sOSCq+U$c0YDqpF5rp'<!\O]hig!Y*i^EVNHAhCSVD-IKtpg2ap6_A\J^GefHg3Imo"_kJ,_-F0Mq7tf2lm1UT1HSeN*<sEs4o6E='B0oDY9C\r=NXroF?AV)Z-'n)@`_hqQc;3/#6o.`V5uNno(D%C6YND:kC-KQEi[.)YVU=9F?%M&Z4)%`0V%4QMI7f"5BNdmK91mc&Hke"2Z,k*mAaHbu[m@QS*lM'j^Mm#Ll4B;1t<F*M8,IYVMP`l6`5j+2?1T5gI5Uch2CmoMm+cCr6Ye>'.8'Q5O[AkIufr>>2S]ddjBX5<bUDZp9oAlI\J!RNijJ-;B^cX%&BZe6&b<<eRGN)bQ'&G>r$$mD<nhf84CMq5G53r(^+$"]]@V)e+;_o"XI%&Z]6TJDlWJslktX(gK!:*^YU!?0%pA0gG`a^D93_d1Fihe=.;#jd@UL:skiYTpM47U'4q9GU\B=#^\jcd]KcV4Uc.[:$!Fn'0OS."<6Q8HcrGB<#(*2<U!Q90>`@O7L2t.h?T\NKmOIV!`Hg3(,ft5L,V%NG_@ba'kbNBR[ZTTX<!en]1U"3?G+rX[dXPgMenuP<94O37[i+pATcrY#fl9"T<rn].^VO30,4U<!fL`AZ3dP\\dIF7d5PH`CJ,W,Kps-`@@F5AJ3VC3C3[:@1pXn&`m2ekBaMGYrZHP_!?UJ/dd?'43>Vh$YSQ^#[Bt)6MU(Bli3kg=K[?6[>L'_iV!Dg/ii-aH7]jnPcY4ZWLB#Z>#b&MJ0ns"S(sRTdOe'9Di#pUAid\';$g)`SL(75\hjI*.lFJ_EMV`/Gr*3B0+TFhe1K/J2:U&/72+,8`tQd_6o*('?2Aj/4D!%XeA`eM*jQ(<LuG)AZ&H%7Zo(<W?VaAAa,*nu%DCXZgA<j[PN1W[Gis1YdF)e^.r0uI*spSn'64_>F204@>Jo>opBFhl4+lMKa">-ZQa*qDVuKMO<LQ<IM2WNnQp<W4=:-P=^/=;aUlu\IL\Pk))AXa))lquOWRL\6n#3uHbUXsO$1iFlFE^pmrF(9rq\/Zt8T_L4J&6X14TpMIH)3TmASko?Nl*r$Y-4!]fY,^%Y(&&tVg?pT29KO9EVA`ogpRI-ZEhJEX)I-R[gA#J:4GGBKtr1?=5#:7RhX29P]u,.(i^GbRIt]HcK<;jp26kY([l:?9\c(a]T?WIVkYQ!jtet(UU+U1mR!Z%%Ba/1Tbuke:@p`oGP*DnB^Y1@>BIBJ.^5P`P8&MiAuQYQlS+8@T44jecL+p/'<_0$90QH_nj/Qg=d'V2PpmA1H+&7__k"V>q4gPfo8f8[V:*a0>0]rNI"C\C&(bj\OFXnplY=!"#\0H:<m-25*bl;27uWbg)lr(DKXSm6lg'D8]IS%$c%A[U50b[p9'5L_Hn)?^RUT3Y@A!0)e20kIQR5u.W_^NBL"QU4AF86T%tePiPDaGBBmc17ARYpJ)HUSMA@)e7WKSkk=ilV>Y0on]Ua=:#PpZJqC"gn:EJ(EViim'A<&dcE&]SPp0b%mI.t`4`\c,fhjZ7_-Jm+Xo0"tX<EL^LQrXE)aQOE&-@W3rqJ#1CDknY])<*Y^QlE:b7pclY/n;0e:e!U"2euGD;%nbqICB~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1766
>>
stream
Gb!;dgN)%,&:N/3D"D*^D.!DJ8PjiV,ehc'4gib;ktFT#'Eq@@-r;'9GNq$bh?A-9D;D:Ma,M[3-pbXXY@eA2_87!Gn)4]5>osPP.8U6I0i1V)oIo-uhtc%Nb[hi>JCq`EI0RX!ocI^A7tK\5f4R8N@<k7c*4VY0#[[SLFe2)da<Z^OFXRgI[629V#jSq:?!2(ZQSI9a'?>7oqs,d2KN?DHDP\AR=oP0MS3\[#)Q>VB(3M_EqD7@7G5:ABcI,8Gi?V,2pnPo@3%87NQj7QUiE4sX,b<-F-1nC7s%74V'$@aX/E(o!KjMh_SWC(L&TeaUYmSj?/L_dgNO9Ui<P!H6,Jp]F\mKfPQ<q9)]PEl<>jlu`WZ>Xp-+#&2[b:$:e@n#G<&K,C3kU[*pj*;GJ*%Bg*lf`_@X1K&od\G!b,]hcP;Qr695d=&oq+\"4Y!bua.jmiVj1/eRam*X2]]e6eT1:q2Hi=nn.O/08?&9/qPQ+t,i$E7I?I3ia9!PG1.Fj'N?HNgDTc;$+"\=WcX:!hkn#_+PEXlgp>IZmN&U%V,dqL!/U]5BF/e!D;7`'o)Qq["PYddX\Z.TU=NWH4mLH2YD,er\`1^/Wem;&hX;+M!$GVZXLQR6DS^!r[?;G$1j:EgTg7c`K5`I[>0#/5uBAmm7]du:3C'lHS_2CO1!Ya'cG.i]Q9Os^CDdI7bO',7khf>p6m(3TsPCc&:1ZSl0fS*FL/RhFb3/&4g;H5?Q+\9jjO=_0"HH+,$+#]gO,=EJ^p35dM:ma1-#"OS&:[p0Ur!AN+XsN/J!js%X`B4.h*7oKn]Q<eb]=P_;b50D5G_!B\H;NX))oe(P>/LP.Dh;GpeMIP15u)mDjn*_saI,DolPL?C[A`O<j_:;tC2:u@6&n@#KB#/>3o'=!]$uZb*A/nVE&lEe.O6.lo%G=_SeH:90oAqfgGUp`RPBT-SD-jJVo[K6UdfuK"@XoW,TTK>+^.*794?ClY7R1b=P@.7Ffj4JX]^)]4-P]`LAFoZ0+P_<(6!Lg^KU1$M9dSk!U[05gt6SM_aEWp*aeV54u8A2'';Iq@,YQre^]cu=f`hB(XunPgr/YrdB68)(P3OPj+Rhu3)qZYdST*%TR.=t$],SY$[gb_a74sq>_@&Tcf4.\gCoPek>sgnm@ack'S0m2(\%-mJ,]FLKB_:a2NEma>cTg<pU4pjoTGJK0tCjR%ROH@C5`5.CgYC?B/K?@MZNc:>XU^l,%['kqK_tlqPfg1h8On)769I,;_i,9?q4lW4M4P$%8*&;!\<5.GM9Nn$h#Bh$M*170&GqIC>306"hk9i58M'TBWm!%P:TA5#H3/HO'DU-J1ENn,7:#o(e'<b9=<S%Pi-0`,5>j0"$^#7)GA8"@`2qmVUVc(r^V]#;PD)rM%Ku]NN!V]C7`J.$AJjBZEu`-*0fZ,YUcgnG541.qboj5pfeUN4l+QLjiO/LLRedjYY45!V(StA`&c>eT=d_XF/]G8VMi<iqgbilO9Dp)rV#SIB9o%oe,(]!qrlU`%("YKluA,4"uP4:H;,i1i%Ut=cS*Uphk-`(fNHIg.Ab:/r]aNaT#U].DaFl3:1q/TUbZT/dHZ/$7UAkRp:,fepYZiJbSK`Uc1H3]'8#QAWMVgmr$C@Wl6Xh@n(bTVdT8sUK9sorfKNk4&8f'0J=@8?2k7A<W]MgD^@uBD!]lIc][1m`kXMHFc-nY7=oK)YFJVHb(luP->SGkO74Per%Hl,rPTs+&_hCSS@.j@13r]5ti_,I~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1886
>>
stream
Gb!;d>?BQ=&:Vs/R.:ACTNLcUmcA8YZou)R?*`:AV@UNUM23`pD'^ahZi>GD19hj5;P7[UQ3;$bdAOP>du5`#pn@+o<WG6&5lZWAAM?(G)NXq'YMn0-pLfPkLrDXc`(rK[AO'/Nr]iL3.0q.2V(AI)GVMeL!.ole,Y8YW3%p;+%&JK\a#sbTNk@=XJ0Zt1P3Bo5T1"XsdK'ZL.(qhE9#&<EQ]gQ)4&iQc+rEr!/#+"^59M!Vit)CuCqorArC_C/a.g^'>3GCe.7H-L0Ou_h?XCUC=GU5.7(EDPEu7$J$ZnXd+<k,)`N,Z87AXXlOuGYHHn6!;l??(]Tc7q6(8I4[cjS5!pt0YKCGT3<4;S:SKOHk_4mUWs2?]nP[Kh@`["$#[QnGc#6Q3uq.X%*L.1%FtBP/oq^MCXL.eqqB-;LjEc4%ADC36KK'Sb?U@qO8?^OL6C5n$@b:*Sk99QW;_O*"FqLH?pZ9T;JI%<pCgLJE(Z+5G$CYN5KnoF)5>>4;k7>*n_ZN'rNrN[gDhPDesj`SXs",%A`3nKQrt;.t+JX?[JHNPOr[&iG,X4,_Y#5LjLT_81ff\\M$@2C*d?P/E+gALZ+RE/OCNr7-)XCA8_&L-W34#K_l"GOkDK>U^gg3#>t&`q5Yh6Bi3Y`2UQq?oI6VpZJt]0G8nma(GH/NV?K5d;W_7VK6>3.m8X(@Z@`kqmXqAXgjqQDSCR*T8nIY,O)`:PuSjQI5mTq7Mg$B$SKs]2"A6UHgn]s5=l"[*@0^u\k*\>#=dKNY=O@u(KJG>JV@&JlcW4P^*)p7a<^37?$J0/A-U(7^W^8#G2YHM!ADti.&4sYgsuag`*:CUZh83Qa>"**a-\rMURsXg0sk`Pak-Mu=?H/6B;4+uESit-ZTTDM!m06U.6Ub#Odds!elhm0<0\&q6BSgA>(Ji75bHS.SkFO]]X=7MiX,WlE!,e,iOMdZPZ\11V-$9.nR[.Tdbt-&cn+o_Sh&H6Vg!Qd\_A\;LXL^S!:(d6GG3sMd4qr,EH:cc_qOB6Pj69qM'D3l,=4P^7T_c2f/dDXn^t`oPHYV=;^crX*7omW1R@ce`3U-3Tr'li;D.IumRXXJaa22K`M,3YIHmJoZ&h@>i561t@ccp/)@`,IKPLP/H^)H?dWt2e?s^HGL3/ch2L)@,=7]X3g=r\fl+&:uI[3A>5jC]"OlVBK4-<90as`/JmIEVLfN#9Vr\CaE]6PJN6od,L-5mHk'R3dOb<6g:cWA4]fI/%3O<i&del]GOO=H9$=d^?957P)u&Oj)<K+B&Z4*Z=k2^=&3$(Z]",%+V_k+r+ao"k4uAFnj^rJZ$`k5M\ieFuQ$1Zi6"9/0*FgRpOE9I">gRC2D"PZ!M"a2ZWfp4k66[0p3:>A3155SmKsB!W8rlS\IHoAUH%?j3.i!o!n9Tj)d'ACe+0m4O=0As_>A%Sl;A*,>>Z$%k`pHNMj+h?_X,P9@?emo]FsIVN/&lVl@?Hu3SE-uuj0,sTX5*)t2*/G3%E^2I"4bq1$/@P)[0r^6RoMgj3]5m^p@L1OXJd7D2\_6^`J4i$(O(95`CUg=o;s&A?k/dZ"qc7%7n92n,jfba*/n)C0P>eKg"3M+39@$9pFAi2*3`+Ge46GBg$Bc8oB\9g*Nq:*seeS5S%7d@OPc#"=O<L..Z0$^VB7bAF2@dd4Uq2Tc.Q)fkZZ#.som2-+8XP]UDQ]P+S35'C"&4R13Lb@;j$!>*PWck+p'c.*d8Rm>WDqe;S3W%52&[I6>R/H7.&nKb2FP,rpn"NHqWITiZVXF37.1InBesu0?#O1)7?l1hkp8tetn$NuoP*tU`TOC9?`uGq591Nmh[rOK6BH_GB5/m6\B;?QZa0:oGr)KA74&gE'd/+W(Da(f~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1827
>>
stream
GauHK?$"IU&:O#Nf^cf\#fbbFqSKU)5:@<TK^t9B`SNRHCamGK1A'2UQ(>E[S$XVQBKL&YQF5lqm@ITd@+)MarJiX`P<QW>[D9)A56B"c>j-Zh&,h,f#DVX#Ja7mGKVm5)_<<oU$WM-h_"/#MBD3q_c+jSe(Ym@m_QXi.:%&7:'nAUf]f`O7#^eE6>qeUgo0`Q7qi9Xi2MH;`chDd1hd>@N28#O>0@:BUqM-u(("SOIZ`E+)VW@t&oJ>]Yrc3Dfk;'k9)G?L8O$[83/mr)A!?>I^H^nRqB;f-%IffS83^@IZfC]S/oRlg25@H0WZ!tsI="N<^&WbKq?V/8f2SQlC(-&`7HDX@+e)OIO'3r5Y'l&nM::2F;[:.Ushu0SgkVrd:85\M>n9li(n/V:lVJ?/i6a58U$p*/.B3i_-S16VE3]f1&c8cACJe0.8F_HTN/59!']T?OFR!9!?1+sd4#Z=D.@F3+@KdcMs/3o6RN#1[=&5k-XK,6V"2,1u.I8>LO\A7jpB#0+6]11)Lak;s9,Hts(5?S"/&VsotB:'mCpi1u$CTdb`P+8-^8U5qRfuYWIV9E>'M;j^:WI4>_E%c#4?Op7YXQ/*UD;h6cSTQc`$@!(,/3gS0+*UI^c6MQQSmd*2NQr-sL#O<@JgdrKW\3Ci9Tb/a0W!FjI'qWLL=SZL6B"a7M"#lc"VZL5XTJ5[;LDM1TlIpYVB_H`Z-p"s7OdmF`L_T47"K*kU.nP,i<5p-6>-Z%#5U)*\.gLM&8.lIJJF\glFP/`:1hNq,1Y]TDg2=BI'R\g++h?gl>8QZB/(c(FDU+S@TGVg)i&j3EgCX$<M/Ro<J!S<o',!<T9^\L)K3gc),i(R3pmt9QGT@q,&\0`9/=AO[/M#"Xg9KSXB8'.L-n%?%QRr0^bl[h66p'r_(IikRpB\PI+U&4n*+Yh6mDB?$Q/IT7DT4hkG6V=9+braPl#[`_jlQaFW,5E;.YP;/VWUDF6"cGYRA$L$`o0Ks2br;`0^&,;>c/=j/T1j)3n2Y.KX)b'c`ZG>^LfnnP#udY]!;t4oY:;,!(lf^^&0(hK1C%8+7TnJ5>.[Qka78I:t+im619+O5M8K6H5D@^+n,Lq;K6#n,:BPNFn*Z,Vc?#0."1(]2I`g<DOS4FbA1:G*(L%SG``YekFqu8^]:Y7\14[C60)K$ciL@D<*bA=G%E/aX:#X[<"*Nq7>WUM?u!_68Ze]CR-d1V-J+V\P:8N'dGk[$`ZQ#7d6`k47r:qW[X#A<(NaJja"iQX:'%b/Zc(0mHu1;\O8uV+Fn%&oV>K'A8]/*J/6Wkot3ag40O@]Q\/d`H96^[Q<q9-IOBO(/74m$g$<q[<j?n6c%YRg1`;1<VCf`nnqToN9Z/=.k-nmj+V!k_WN!=^+YNOX&"]lFg+aUD;NGehs,_W*)GA,<<J%;SRMoXPh(U@e?gT%fBC2&0QUHrK=cPs."sYZIT=1%8&X<`d8euWmm.5f=Ch:?KC8I;/X(QW8l0;<G"0A4oKhG8kWMQ:FU2EG@22U0fF;H*jT&DYNX4q6^%c-SS$hcGU)U)!U#iRPhf$tJ<GM$Z<mIfJI7C>=.OH3,ffJ_M4NUk-N:6^"7TU&SY,p$W@U"tR\@u+-?Rl1DX&,=CTf!a<?RapF::CD^/>h`?KLK(*G'A[LnDj))A6*M*"@i:kLKiSlQM-b@[!Ypda9j2)6e]C!o57G@druJjSX=*RcVcs68Gn.kL\QX[Vk/hYcf701V5G\0HCqo3hZutcI;GuD$[]p9JD4pcKCLrskT3(0_DC]uMd2f?p_Z[$.5rY7BIJ#dOda3H$)\2iPM/^TG~>endstream
endobj endobj
xref xref
0 27 0 37
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000142 00000 n 0000000122 00000 n
0000000249 00000 n 0000000229 00000 n
0000000361 00000 n 0000000341 00000 n
0000000476 00000 n 0000000424 00000 n
0000000559 00000 n 0000000529 00000 n
0000000664 00000 n 0000000734 00000 n
0000000869 00000 n 0000000939 00000 n
0000000946 00000 n 0000001144 00000 n
0000001151 00000 n 0000001349 00000 n
0000001357 00000 n 0000001555 00000 n
0000001563 00000 n 0000001761 00000 n
0000001769 00000 n 0000001967 00000 n
0000001975 00000 n 0000002173 00000 n
0000002181 00000 n 0000002379 00000 n
0000002387 00000 n 0000002585 00000 n
0000002457 00000 n 0000002791 00000 n
0000002738 00000 n 0000002997 00000 n
0000002846 00000 n 0000003203 00000 n
0000004139 00000 n 0000003409 00000 n
0000005004 00000 n 0000003479 00000 n
0000006271 00000 n 0000003768 00000 n
0000007458 00000 n 0000003920 00000 n
0000008831 00000 n 0000006118 00000 n
0000010147 00000 n 0000007984 00000 n
0000011314 00000 n 0000010187 00000 n
0000012179 00000 n
0000014083 00000 n
0000015965 00000 n
0000017742 00000 n
0000019679 00000 n
0000020639 00000 n
0000022326 00000 n
0000024307 00000 n
0000026165 00000 n
0000028143 00000 n
trailer trailer
<< <<
/ID /ID
[<feffbf100a2b13f97aa0ee56386d0d22><feffbf100a2b13f97aa0ee56386d0d22>] [<c31704bc72723f0d2d5a465f1e9345bc><c31704bc72723f0d2d5a465f1e9345bc>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R /Info 21 0 R
/Root 16 0 R /Root 20 0 R
/Size 27 /Size 37
>> >>
startxref startxref
12675 30062
%%EOF %%EOF

View File

@@ -0,0 +1,449 @@
# Les 4 — Lesstof
## TypeScript Fundamentals
**Vak:** Technical Foundations
**Vorige les:** Les 3 — Cursor Basics
**Volgende les:** Les 5 — Next.js Basics
---
## Inhoud
1. [Waarom TypeScript](#1-waarom-typescript)
2. [Setup — TS in een project](#2-setup--ts-in-een-project)
3. [Basic types](#3-basic-types)
4. [Object types + interfaces](#4-object-types--interfaces)
5. [Arrays + tuples](#5-arrays--tuples)
6. [Union + literal types](#6-union--literal-types)
7. [Functies typeren](#7-functies-typeren)
8. [Generics — herbruikbare types](#8-generics--herbruikbare-types)
9. [Type vs interface](#9-type-vs-interface)
10. [Type narrowing](#10-type-narrowing)
11. [Veelvoorkomende fouten](#11-veelvoorkomende-fouten)
---
## 1. Waarom TypeScript
JavaScript heeft geen type-checks. Code als `user.naem` (typo) draait, crasht pas in productie.
**TypeScript** = JavaScript + types. De compiler vangt veel fouten vóór runtime.
### Voorbeelden van wat TS vangt
```typescript
const user = { name: "Tim", age: 30 };
console.log(user.naem); // ❌ Property 'naem' does not exist on type ...
function greet(name: string) { return `Hi ${name}`; }
greet(42); // ❌ Argument of type 'number' is not assignable to parameter of type 'string'
const ids: number[] = [1, 2, 3];
ids.push("four"); // ❌ Type 'string' is not assignable to type 'number'
```
### Waarom in deze leerlijn
- Industrie-standaard sinds 2020
- Next.js + React + Supabase werken alle met TS
- AI-tools (Cursor, OpenCode) geven betere suggesties met types
- Zelf-documenterende code
Hobby projects mag JS. Productie = TS.
---
## 2. Setup — TS in een project
### Nieuw project
```bash
pnpm create next-app # vraagt "TypeScript? Yes"
```
`tsconfig.json` wordt automatisch gemaakt.
### Bestaand JS project
```bash
pnpm add -D typescript @types/node
npx tsc --init
```
Rename `.js``.ts` (of `.jsx``.tsx`).
### Belangrijke tsconfig opties
```json
{
"compilerOptions": {
"strict": true, // Aanrader — vangt veel fouten
"noImplicitAny": true, // Geen any zonder expliciet maken
"strictNullChecks": true, // null en undefined apart behandelen
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler"
}
}
```
`strict: true` is **de** belangrijkste — zet 'm aan.
---
## 3. Basic types
### Primitives
```typescript
const name: string = "Tim";
const age: number = 30;
const isAdmin: boolean = true;
const nothing: null = null;
const notSet: undefined = undefined;
```
### Inferentie
Vaak hoef je type niet te zetten:
```typescript
const name = "Tim"; // TS weet: type is string
let count = 0; // count is number
```
**Regel:** alleen type expliciet maken als TS het niet kan afleiden, of als signature documenteren.
### `any` — vermijd
```typescript
let data: any = ...; // ❌ Alles mag, types check niet
```
`any` zet TS effectief uit voor die variabele. Gebruik alleen als laatste redmiddel.
Alternatief: `unknown` — moet je expliciet checken voor je hem gebruikt.
---
## 4. Object types + interfaces
### Inline object type
```typescript
const user: { name: string; age: number } = { name: "Tim", age: 30 };
```
### Interface — herbruikbaar
```typescript
interface User {
name: string;
age: number;
email?: string; // optional
readonly id: number; // alleen lezen
}
const tim: User = { id: 1, name: "Tim", age: 30 };
tim.id = 2; // ❌ Cannot assign to 'id' because it is a read-only property
```
### Nested objects
```typescript
interface Post {
title: string;
author: {
name: string;
email: string;
};
tags: string[];
}
```
---
## 5. Arrays + tuples
### Array
```typescript
const numbers: number[] = [1, 2, 3];
const names: string[] = ["Tim", "Lisa"];
// Alternatieve syntax:
const items: Array<string> = ["a", "b"];
```
### Tuple — vaste lengte, vaste types
```typescript
const point: [number, number] = [10, 20];
const userRecord: [string, number, boolean] = ["Tim", 30, true];
// Useful voor React state:
const [count, setCount] = useState(0); // [number, (n: number) => void]
```
---
## 6. Union + literal types
### Union — meerdere mogelijke types
```typescript
let id: string | number = "abc-123";
id = 42; // ook OK
function format(value: string | number) {
if (typeof value === "string") return value.toUpperCase();
return value.toFixed(2);
}
```
### Literal types — vaste waarden
```typescript
type Status = "pending" | "active" | "archived";
let s: Status = "active";
s = "deleted"; // ❌ Type '"deleted"' is not assignable to type 'Status'
```
Heel handig voor finite states.
### Discriminated unions
```typescript
type Result =
| { ok: true; data: User }
| { ok: false; error: string };
function handle(r: Result) {
if (r.ok) {
console.log(r.data.name); // TS weet: data bestaat hier
} else {
console.log(r.error); // TS weet: error bestaat hier
}
}
```
---
## 7. Functies typeren
### Parameters + return type
```typescript
function greet(name: string): string {
return `Hi ${name}`;
}
```
### Arrow function
```typescript
const greet = (name: string): string => `Hi ${name}`;
```
### Optional + default parameters
```typescript
function log(msg: string, level: string = "info") { ... }
function find(id: number, includeDeleted?: boolean) { ... }
```
### Function type as variable
```typescript
type Handler = (event: string) => void;
const onClick: Handler = (e) => console.log(e);
```
### Void vs undefined
- `void` = function returnt niets relevants (mag ook iets returnen, wordt genegeerd)
- `undefined` = explicit returnt undefined
Voor handlers: `void`. Voor functies die niets returnen: `void` of laat weg.
---
## 8. Generics — herbruikbare types
Generics = types met een "parameter" — flexibel maar nog steeds type-safe.
### Voorbeeld
```typescript
function first<T>(arr: T[]): T | undefined {
return arr[0];
}
const num = first([1, 2, 3]); // type: number | undefined
const str = first(["a", "b"]); // type: string | undefined
```
`<T>` is een type-parameter — TS infereert per call.
### Use cases
**Array helpers**:
```typescript
function map<T, U>(arr: T[], fn: (item: T) => U): U[] { ... }
```
**API responses**:
```typescript
interface ApiResponse<T> {
ok: boolean;
data: T;
error?: string;
}
const res: ApiResponse<User> = await fetch(...);
```
**React components**:
```typescript
function List<T>({ items, render }: { items: T[]; render: (i: T) => ReactNode }) { ... }
```
In het begin verwarrend, na een week tweede natuur.
---
## 9. Type vs interface
Twee manieren om custom types te maken — wat is verschil?
```typescript
type User = { name: string; age: number };
interface User { name: string; age: number; }
```
90% van de tijd: **uitwisselbaar**.
### Verschillen
| | Type | Interface |
|---|------|-----------|
| Unions | ✓ | ✗ |
| Intersection | `A & B` | `extends` |
| Declaration merging | ✗ | ✓ |
| Style | "modern" | "classic OOP" |
### Aanrader
- **Interface** voor objecten + classes (extends-pattern)
- **Type** voor unions, primitive aliases, complex types
- In team: kies één conventie, blijf consistent
---
## 10. Type narrowing
TS volgt je control-flow — types worden "smaller" binnen if-blocks.
### typeof guard
```typescript
function fmt(v: string | number) {
if (typeof v === "string") {
v.toUpperCase(); // OK
} else {
v.toFixed(2); // OK — v is number hier
}
}
```
### in guard
```typescript
type Cat = { meow: () => void };
type Dog = { bark: () => void };
function speak(animal: Cat | Dog) {
if ("bark" in animal) animal.bark();
else animal.meow();
}
```
### Null check
```typescript
const user: User | null = getUser();
if (user) {
user.name; // OK — user is User hier
}
```
### Type predicates
```typescript
function isString(v: unknown): v is string {
return typeof v === "string";
}
if (isString(input)) {
input.toUpperCase(); // TS weet: input is string
}
```
---
## 11. Veelvoorkomende fouten
### `any` overal
```typescript
// ❌
function process(data: any) { ... }
// ✓
function process(data: unknown) { ... }
function process(data: { id: number; name: string }) { ... }
```
### Missing return type
```typescript
// ❌ Return type onduidelijk
function fetchUser(id) { ... }
// ✓
function fetchUser(id: number): Promise<User> { ... }
```
### Optional chaining vergeten
```typescript
const name = user.profile.name; // ❌ profile kan undefined zijn
const name = user.profile?.name; // ✓
```
### Non-null assertion misbruik
```typescript
const el = document.getElementById("foo")!; // ⚠ "Ik beloof: niet null"
// Als 't wel null is → runtime crash
```
Vermijd `!`. Liever: check expliciet.
### `as any` om type-error te "fixen"
```typescript
const data = response as any; // ❌ Verbergt fout, vangt 'm niet
```
Liever: fix het type, of gebruik `unknown` + check.
---
## Bronnen
- **TypeScript Handbook:** https://www.typescriptlang.org/docs/handbook/intro.html
- **TS Playground:** https://www.typescriptlang.org/play
- **Total TypeScript (Matt Pocock):** https://www.totaltypescript.com
- **Type Challenges:** https://github.com/type-challenges/type-challenges
- **React TypeScript Cheatsheet:** https://react-typescript-cheatsheet.netlify.app

View File

@@ -0,0 +1,244 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R /F5 7 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/PageMode /UseNone /Pages 18 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 9 /Kids [ 5 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R ] /Type /Pages
>>
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1701
>>
stream
Gatn'>F3es&BE],.H[/7/@62(fTP$2q>dlql/=nl#5Z^6K@d.LAfWtS::>QINblaZY*]doFs>&'q2PA0*l3Bd(TW$5$\0$,G]q>^EL9FN"XJW?)u+:0IJ*r5>Ql8^TrEi-O@Zm2?tWdUTd2DQ&Hb`Bd40Z31ST#fJ`CfD0a6.DoVol]-qT[6J7o]j/bbhQ6un;l#:,Nhg3p^.:HS:p,$XN_c/ot)i<n.&F]Lpr-js#\P6G4)IJ<7hr*IT@REUR5K+F5)ah340c4rHk%DS@>ablq":LN`"-;WG%"/CFsL`k6Vd5RpRX('d"q(nV=GmnLsi&sPK@mT\:/L_N6;(+-h-c>7AHu@mH.VrQd+i=g&iDdCV6*-mu]`0N+n[]6i#suOk\S(do8VCObFOh:eRT80Uh+6N7VDGF3X;dkH2;2u7GSJuTn9;LYrSp@EESfKg6R>EA/s)X!0LRK)NR>6U3u;R.-p;,(MGR#7h6Z^O?.EfCNB$Y"6c\&Cd,#].2u@K9B.P;OA"*'u!T>2[0JbTnjh;Yh5J+ouUe;.2(2n8(+C33(V?@^.cp^Q,[#lsDNGr):D[X=_#HY'5ihY+\7%CgddHKZ7dbH*+>ukpXb4"AEaf@BO^R>aJ9Y("N))5CCATB25\)=S_lfej@\jC0kGuq@2cVkCdGm"GBn*O#(8ofBm#e!4fb'3M5Ie\33l(M/j$HE1.[EZ-s:U'3HBbG&t?+:_OBp"`P2a]1DZOgHGCq2%1:,1>t%`OQf\``m9i@hL)amT[LAdlLY!)EQ&U]7gc^P[CgiC."Kao5/Mhq>K&D&D8J8n/Y*aL5FeLi1'./+B`D3;?V=]7pL'@A5+!Z.-S6&VF1&2?lAfTPW9WGRe1<&9T(Q.laIsBU<S[i.9O&2E6_j"W'_W"O_"eY\b?j(th(&>r1Nd@m;H%'8:ASUZW1:fe#2:dVM?OG1s%p%c6F3FZqHZpICe>8eqs0@*d4H$f=-II%-a`F,5sR4pJB2@0Tqa;ssSTG9#@H!I_NYp\*kWk!.G7IYG[N4ad.fW"[fmk_ju^&YOcY^('_S<3'T*b/k*g3>dstdMAHK;DWC/F=VaR.fD3uERo&@:SZ*kTSkPgnkA[:qk-,G7k4Eu2p`Q4Bt3(FE5<C$i(UY)GOCD.3qs9t[PE"E-OjhK(\MmflMLPHBl8A3mViRn5EkuT[IG&'N2"Q8g<boH6.Bj:G+.qV`CZ(u4L[:uaRL:*LfoVUL+fu1_U;f%.Go&V7VMTQ,ta044h!adT:Jq1Wn>-iP<2V&:YSa]*Ba^SR:;s^5b;2<?CBSNf2L1aG])l=?)8'U0j]UGe(+H!?01t$'dHKL1'K0H&V+rgQ$^us]'Kfi,E?LqIpMa_l6PM'l4]q&3fEIcbcr9*O(geY]*d7gG(V.S01.^rG<-E,UG:H5.-s=+W-dK;Z)X7gA^"M":\r>s!T9_S&rus2(!<;R0W.4Gi-S[:7UWD3r-Git1`ps]r!pUSh-p;=f5^[0%!,pU(!KoM<XU1@S)g7gn?Tj6``[Nc&=Y2iW\g%&Z!$GL4`7IM6?2l*mVNrAePD:Z\=?X)N*XH6Id_aIb3<nKoQ2i*7<e6U[M-ZSMnd%-rPtf#&\N]_;Cn,JAh:%DHrbf^:b+"th[1gfNs3/<X)p''5ffWa=<iXX^W.!:W7A'*H[K8jd%PgL9Us"1>e)c(p2n=gnGWZ4="A"~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2062
>>
stream
Gau`Tq/>"G'`Qp<`Ig)lmZoOhFLE$poNF$b^#En]joJt&g/0%kRRFPTMuN0lPcVb_m'O`04,@F)qVLrfhaK;npgs-u-j=iTL&InX(l.>WQpVj\5)1N7dD$pC4mkBa&.q_NEZh'[+"3F"%B`46OG=5GlBB#-^^1haJhR1bn+f0=ThqugDT%)#*q]U?8AJI`n?0DWLrVN5G)5I0iT9f8quTME,i4D!dVSmo$tlf0;B;cV#\C1-_DHtgMjM1!_R"'Xb31+o')9uk.QT:<j4oEB6[5]hW[,bfE=\qE0`B9((k=YRJ1>gC3p:WbQ6ofm+Ksi]ee7`Xi&+]B7I^)0()iEV(QB-*,Jki:4Z#rYD9Qh@1I?HJ6lZ^\*BCjkR'mr,7SZ59Mu?IbIudE]qSSGgSJ.!o0udHB"Kk3L*:o$Q=?.mN`kl=ca.OA;W;]:B@`/e/_.22Od9]j1U-4nIIrnpsn+YQ.\'aDM<;VgV2Trf6<'XR_.j`$S,6eMkP)qKf5q$JX48!ngR4\qJV(1C.p]+Kpl9:0)EB;q[\\rh\iT#RV4eMsH6ODA\&82*N7$/a!c6a<nBW9G5]a(dV%lMZ3;eMZ`7'FT`d@\4T_YTn8J/o$'"7o3OTJH]84@\%m#'5nW+G=QCk_6rpJq.'[2pZO3dKm[(4Vj<C9T0UMKi2M@Be32O,1arj4Z$049N>d$k?/5NI]uU4rpp+RDW]of`"RSr$Wu@Kr%i22:b8YHBsbaOZ,2O(dUQ;D5ht!_Q=[_Yni0KS1<=$X*"B&l2nr4%B/=*BLbC^u2Of_:XP!G-n>UY=hM6j6?[nhlrP`r2mt1=]M`8%FMhDomYKE'^AA$!`@f2XkRL[l]hE5Qhgm5/!0^S?F('N2&JBQR;*)*%9\G`<`Vq:PZEkb7MA1>G8k3BX37&_Ae:\>W[+c.h<]4gf-"K`cTGlVmeX_%")Cpi^:Lp5leF!8/HGCs%b_T@c4rf&0,,;*I,)p!Wnmfma>%XtA>Q!H#M<uS($BVIMOZ(@;t.Ao+^%6t&?Vcth?PB;/Fc4)cciHogEA7Y1U<9<[QQ3uKJi_4'J$2Ppe.SPm]W64A\WS5Pl,ZP?bpC)3\--R]sWhR^p?$Mbfr@"-c9VG,G0/O['S>;gZQIq"\)"YAigkK=L8bkHtrNfK';^I@8Go"pZ)AUbC"VL$J7Gd?'Er.+L`A#D]ReUOKnaQeD7<Y[TK-ljVpuR=aH9/76X=;B6dj&n.nf8#aUr7K5d#tnfK'RLlDSI6![iTYob8\m"^_%@4]P/Fb7lDeGFHMh,[p[Cm+dk"+b:d=)]t:sk<1)U$KjVTK'n"ZH@WTg4Q@TfO%(]KeoW)HJW=%CT[dR%NFk=n&T_dh4:E_3P1^Z'ObrqKX!8kTH6HZ.@/esSg;,kKEq%<U&j`k"_(3nH6dD+<.5SH5FBG4$kR"L5EZ)q0I92+/EgM!r[2h?0U0uoTS10H)$N#O7jDQ/k5jq]Zud,$pf0D!nQQpW0#9T8]"q_%V++rnr-qS)8$&lR=m6P"?&_O0Mmc@m9g25t68N`^MnIWS?@NR/`*p9O,=_q/)Rg;W0$%XX8+RTI*Wr)DSBlh,k7-!YP@%d9an[hnA_C^UI8#2Q"l$3kZZ0YC8+_ZO2Z]a=k#N@U-r)K7?p?LE-+VQQLq"Z9@IB+s(=>U04FIh@/6Fa!3h@Eerr)#-bA3g"_k`2@5Tg-c'HDVM#T6nl2>]DMR'iQXb]QkQWpXuM@GNt+od0JMfarTQp9;P1,!5PiioG(fQs[$PpUiGB*MW)(;l,X6+*?:J5;4L[>-!>n=0R`C77?KUtBTcDsF/HBQV3Ima,h).V*h_[cuG%'cj46H^F$TV9Wdpg!ZV_[aBW<@0eD3Wm.D=*jkQDV"+1f**Z2@'*<Z;;80ZYeTq^4>sG[SkY$4W>@<<1[q?2a"Gb.efZ0P"-lL3\/f-U,\-.!$tYoC_:G?#FWcPi#^n]CSFG08R+=WW[/Qd/<r*UprO+c4o'?sp'3];5`-"pU)F$Do@jI'4Dl#\]MW7+<7WWPejIpurFEPYCTZ%#[^2rA.J^K><FGG@KA0/C~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1537
>>
stream
Gb"/&968iG&AIa;m,V&%otYea"QemaR5V0[1/6K$3V<rNJg<r6R$*]_[$1OH"lHW980)o;9-oPu/f3F5!rFS#$n-R-o/FblSh8mk3<R90YlZ8/KZ+>oIM)K!&?^7'6Qe]o&T])"n/j(1JV-c2(%[fDV@h4<"K<9d3nD)d>njOL8dh\t!<Wr`)JKLGZVYB/@(d\?F#5I?W)S.oIHR6rm_qS:hP$G+&&D(pF[6J865%GX."k#!Z_(R<\Ubi\[B5Td;.T03?.rgf_f)&8E.%iGffPZ<mqheW/@Md-l4$EPV:$34M@MpZfW(s0<=AB?XA`as9E9O]*UF@Pn(`eR,!)M4G91*eCf$37Pr61'q-3op5%)7>?b(no<L7Dtc_2uc[P?:%>GF-0[";&mHeIt`eud2U>F4St=4Oa%rD-Y8=#h,XaFX*+rTB=LWC$(R;$EfhT^^&33f%);fGi/+A*2#gbQNK0VFhN#5J4>QC$1_T;qnC]Faq&B>7S)Q_Z8NFIT<7j>,QT-fYsp<&pM@M-&f-3@EoBn)nF;j!(fM%M"2DR5XnVoQU-o@;H(>L'Fgj9KM!.W-+_]"JjC0kSk:hUTR&a@L#=-Hi*(4pK*R#3TuMj=?mO0HnsYSHFL7;9FEAkILV_S[r><d=9nH*d'F4YTO2P[Zg`->@\tf)^UgasX`YF.=$)J37+^n9YWWm*V3sSOl[t\h[aWf!%>TN!JO!6rc7&21QArRXFTAS?80a'W?+9[N(k>R&@\mFNuS&6fn)/C5/GcI>8ijbi!i(`5\l4&L-h8qE?n\YZtIQRUUD6[:2h9rH(B9rl\bcabVW_hn&V]X*Y)n3,LF`hHFi"A,U4-mXVLAJd<QHe)%@s5(*ljC20.2q,BXDV/)YfPAGbtm)\3"mk@nl1p,`&%nUPfcl9``0k\.a+bh)Em:1T$"sg5ik9u7kd!XqTMo&QMO/6J\hDRQ`t]Dn#]CHk!8I*CO(@m*AU<>UtE9tE@GA*+%1"#LtK$4'I>"_-s^S8lK[NPY3oZ`g1Kp]f<NFQCL%mIrSq1L-9bdXZU:G..NeNl"\fd$Yb7@`B%*T!(P%L#=/aQT1\DeNV.GeUF!R/dg)1^;A82P8EV+]qgkW@U06(XJ4P_VcRhlY_</E8(1Vosl_Zl/Xm"B^bTgiYQgiEgXJPA,%_]%gF4u7cXVtncjAe'&,R-K?dX#A;9[$-9$1Y9b;=dm/aAn?[!\@uW<01[uZfeloWMBa>+rOMpnp(lJ55S2hC+pmUNAJ;^@<j5A8\1<FLQDoR";l0b'>"dcYHX#pe?-aqFNQddDGIaQh>C!cdfbq..^;W>(5<J$-Fb\sE2PQ[^)"tCrAFF]EGjc[Vf[(ru0[/pk">i3#EAXBKRuP[$h1f%('*_Lg0Z;'t[HUqOK>M-QF@kEPm2"$GbEd&hojqfJP&m()meaQBP=IML))aEMN8C(5T.qO'`;VDYs'7'gYO[*Qb;oKCd%+Ma[+QP+9_IkD)ulX\/LZ!/fqC2!\"l6ua!XWKYUpqU[VVmcCJ9",K-9q.pRh(@~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1499
>>
stream
Gb"/&hc&;g&:X@\Z,93W]aF_B-(-USd%j>k_k_!moEBIN5&ltdm&R6u8i-D6?2=4l_Ehnb4S8'WB:\bNeS;j;AHik+XT"hC!5=r>mK!F0@<rD7,U#hliVR?Y><o^Z.ZAl`9h!9W`599^S-M&BP/s$2$oCsPWt7VBLt8g8Ncn#L"f6qEk5b[Z,ZQl.U0/bLr/862P&k^cP"<aj[XB*ep>NtY[aANNbm2((#&>%*UPb.0(9%S:$eTq&j"G?0LLP/%jJ"%X3-(ii/f^C#Y$h8]]WkNr/!dX!Ja"IST6gefcqnI^JlM'/LUO3fESc5Y2tJjb&<6a>_@1SnP.+jk((h.4!](o07Th8s4oMc[ZVOAIq'8)>nJE$-W)Su7IOkjn9tfL>eE:0O)H&F6dG:<<kf4NAKSL_OU&)$]KMa"f")!3CPPPR]&VM'?Z@EO`p#p$LJC227'$qeh$ubuE>Phhd_q-0D#jOJAmq01U%g9gn]i(TZMAU249Oc;W`*Xb+A/*VlQ0-AXk9dHQ<7qmJhS%O3Be7VZX;b)ggaqe5<3Apdq2>,%0q!KG7;HW"BUGt=B=?T'-o#)&f"<lI$^52[p.bX3GG/-M[)bsb5>\/3%tM&QV)>S'c`SF^oo[a;-HiL8+gZ[Nr-lR<,#Tgp"5_ft<=#<%kOmV+cf/&HT&hh=;WO)FQS/!#Xa(3plWDi9c26'K?#36(<!isk)\Uh04Z9$tFG>mi=`\GjHP!?HcZ\0*h^Y[DG]!#aE+#[qS`eo<Ga?XH_3n$AWj7^I81QB:MSH<8]I^aV\EcjU&8BZ&!@f[:PkF`m?/-jXjg]Zq`Nfu[$1aXhS=MrcG%hUkXa.Y0GDHEsUsNJ!#^JEEfFl1J`-hB,5Fi(b\=#10:cD:1:j4^O:cC]G0KT"*bTaEk,_HB90<jRtLsR_&EN.,&W^=25`2q`_;=8:AGY:%<V0c^3n><UB4j\@')JHd?i+qV/GqnojF*)g+#][B-`6p>ulco#p\U+AkrIfM.9PZJN4cSc+%BkgtgC]#8Z8C/JHj+Dqbj5G1/9E`Bs!/J]SSr\.J%35V$W%?Kqh$,Q`p2Nd6L^pT%kZL,I0BM)=-*?X=-%f`%UaDJopO??NKHr1Cg))6p%%-Alu'kr/,9=dVWo7eZpd?:O4`Ktg31)NQr[g7'B7p5pXk5p1Xs7r\.h`q:gN80r4_oEhDULoc7UgA\no,qidXs`Dg_%el]L(1b#7l.r)EA`4_'t:JLcBO(lq\mgt>8GkH:-^iA3jWNYqYc>lPPLQ3F_\4ZI>h2/,)%:lHU=ki3P8#K?7d9o9RE[)Yn3G.82F_rjm4nhKS9qJkW>r]A?A'DD5OK<(^piIa"E6g>V'+3hO[Ufc_r!gRo3rAVIm>j9QUlsuTWm(Di.m66RYgNb/K-Tghg'aBcF:,`cL8Ob+.nL+2ej&&&"WVom236Ld]$JTKRg/=C+Tra6=%mm=H6:[IUC)pGZ>L%&!@8Y6cQ<sQ:[u<TA-Q*<uCB~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1601
>>
stream
Gb!ksD/\/e&H8h>E<lceBeb@G&sXRA\ogK""\Z<cqrA8fCtd8\9;s0a)q+ZY*@[J@o;2^@dK6`a9;6\BO2pFo4#<Q)B't#O!;LgB]0cd]_e96J&db<XpiR9u$4%/f,S^laWJEQr=P+FSo,n8QOtc#Q"&1#7,7.7(U33PgUKnS=#YG3*<riC9Kf%3jLh8-di>m826I'Rb8Q6PH\*[8rC$T)!_Nf?/B(J;BSAA6qnu+kfb#G0E["-!]a+(dT_d[M`a]VJOE)N$7E`U)Fo*F3cK=C!kAAs6OG@:&%N*b0@3hS7X\:lWj"?eM?<>VtGjF&dZo)r"ti"(e))Bn/l[mCZ?(+P0'%g\p]%P^*Fg4\.6-bss>Y&HLX73JA($*>;m!i`.VCkmE96UE)Y\g)MaB+jtoL1-E80F-^['FCTMYQe`b[Vh9&^lKU;qiCu?6s=e`VC`X%f9uiLFXG!2n*A-1h+`5X$-iUm,PuA=HZpk\G'p,SY8GYIYaEA!nITYH6K,fL]J<DQ3o,Fg0%51XT-7Po:/)$"Ya(_RIUl]"mGEEmCUc&F;JOGs>WP;HanK4f(Q.2lNdlE2=@GWg(ngE:ZR!Oa7,"as>NV,1/TR3njW^\EK?GNERQDH*n%eVV9++$0_0LY?O<S<BotM:Iam1).huJDV^ht<#C$K8t2ntKd34V:cr/t#k4;dPZKSUk:XEmr@h*N$Ws-W%q^jBM@=,V+JX!u'$VD)_h-;!%-DWV7_"@M\7U!5ZZ8<-/lUU2pjP(='<eO]QmWG2N:8Q&;X^>[8KhC+6;;#VI`>U`@VkXnq88e]A;jV=rXeKjU7+0c1I%pn4DKXP9q?0d1Z^-QU_B^h]jl=FO,I:;]GAMblJ.mYIeRc_&KSDjFR:[K*#[`P;ul[Z/=T>4rL2Dp;$f=#D2g$T@3k!fUOCA_*4"u*@[g\)K=OB.GZ2'c1ecL^*R1JemJ]!1"8]%s8)`J%s*/bm\?*Y=5]#YgZD*',o'K<k]U4GV+S-t/G(W#n]08Sos*Y8%qUmcr+rmb>+;Pj&7M0ZF<_3@<%OhZL])'#dIjHaPWJ#ZYWG*\2fT:tVbfW&$B3XiK`>=-(rDD*;3dck_SKCV?rU):p-o6J8C3:K&jO)@dgT&RuEH&WKjljYL./EP;[#\MX1;:$Q7":+@gV2a&kIOgm`_#r>5[$?8aB(8\4;2grig@&d>Pa349J"6/XWPtZq_'N])Dhd=5Z>)uYi01g0?DqXM>ck9`<_C.0,Z=7]+D"pPm/.<;*YZY]4!NqB\pKV+be=`7o)U?cd]&WZk(P!GY(tC!W-?ku$BAsnPYHE*;V^JuuX#'"6b**_TJ_53i8`\_7>Ur%tdD&[#GqS`7cMdLr:"#",$ltJ75HthN^SE=;aF]EScUtS5P7lQ#D,LP@f+"<oUu)QWd0m+lK4OkoCQ3`0R?skDn\>K\Sa49W53qm_p&=CYj'`9Z>[,.9O'f5sB,JrP?(O^C2jc2"?laqSTIStrV>B=R'cSD5#_Tj:Nf(&P-f/'6il*\dn#<di(@-ZGfKF2CgZsTEfEsja_1S@$ACS:_V56=(Tt^e+N\;qHnGhB]R$q/e>E]GemV]96K)Yg0a^6V~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1607
>>
stream
Gb"/&9lo&I&A@[:m-#^-<#>U,!0lMcd\^nEPA-5[m#0s-76r[JMGuma8LEhSn+$j\*3)or)<Xmj@u;DuG-Q;hG0,9oLK4AL'u3TY35&_83(t+'4Q=3<%K%u$rc/8\>^ARF=&Cp75Q\Fm"1*)In-'C)%i?]EM38p)M@lZd"WZ,caWq]4Me<M%+pF7S"/;/9Pk\_$9*FEkg*=<C_8Gr*J#[TD+JSB9h5n?sL,2r<.?!J;KJHp20Nl6]\)4ABiH;TYH$#Ba$!\377s>,13LB7+&mjgLSRcMQ:13W?9V.LR3hW'@\-4%"6/Ulg0=""UnhsamBaCF8n.$\q+pd&8,m%*F_T4fl;&0EGO1j+Q0#Q^W4:1b%4Fi^W8Qgi"N[9^`BXr(DAE,<Kor.5;W-1qsfJ1\u!VLkA6+(3S0IA&s[c"HZ[.U(4M+SS\`F)(`eTjit@!$07Ep2)B"E1BFm<ZC6mE`kaF"/5rTDH&n03ec4^/C[D7W]+k+9?+[!69MQ>cQ(bYt:]7c;I3=j`J#TQXe)E';s"c,j"j2[r;h03*g'Ikm;_A64!M<:Q*drHegE^Lsu0A(sg6aDH8Q17M)IpZC1#[3miYQs#>`N;Gi3`YF0k188?8!fu`MqI!FIA#Rl1Hf]bhm?rb.FGRZ<07uL/Y%:Kb@To$ZiU3E-kGCsnp]>"#(LS(*SeR?-$ds7YsnoQo\ihf/f>\):Y$b4OBq:Y:sNNtAo+A72Ziop>c(VBr'B-:,EPrC[GG)3'1ngm'JbL:7^%G^-N8`q"59$d8&dn7CDnW%lu4`3WIiMRDO[oKS:O+iKM*q-:ZHT\GcX3*Gm1+DrYkq_6SVO4da-"%0\ZD3.#]_S!B%*QPj^pdMci`TF;0tQ#)["(!a7?2SjCgi49;"2=JAD)<C*gG,q3e@m1R2<*WWEs=Vk0oO-Y%)jN0Ke5,SR%EFL.Hf!,K&QYL1ifHhX+6*T6H.*h`99Ngi\o#\?"(/+%,'t]8tg4,u?1n:KQ^5O0q.(q>cSo!Gk\t0J).7?BW2-n"[ZsQhf`$HRF&9fEoUi6!-<M]c=6OTEtIQln`XGf<*Pn2D_[rhp4XUs%:,N%t![=hMsr]m(J?g]8X,ZcYIU+dKO<T_I+CQ&9"one?1A9r@so."BJrE+O-3#]NWYQC>BDG\Bm`6fAes/H_`]7Au9^V?PT\GQW#G)r;.;t!-=Z'?Z_3Li"G9(.;[BAr+;,b^lFXJgYUSWD+Ee*N,EJqER>O&nN<ZC_k,69`Uh30kqFr+%$R18km:\Sn#[AAkPq^?^*LGU\uYsf7KrkODWpJ=U@7nG\5H<W%s50r)*uQK\bg%,F=),LJ\>r(NQQZELGs#PHiu(indGLn:TH<d)rg:g^U@@_G,Jh^&.V/`QjmdlekFQ;pRCDC&^&iBq.^Luo1Cbf+gA7LX2a32m/7aS@!sU,?SWc3PN3"C5Z-pYo-g0>au*AIO-*?.GHC3cEP/Kn]eh)6KE@b'0(XieBRGJM7_c]%\\+t:pr^o#G)IrPgQ<bj(*g:56Z/kam2B/;4gFSM^5T53p%-92Xua]]Jd"%CpkDu9'b8`ar`,pf=#[V/^6#YY)gV#J&u@*c@l!A&49=VPP/'`e~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1925
>>
stream
Gb!#[lYkN9&HAoJiXfLMdj9rD8JL9f/Q-]D1'DIG])=DQK<3F[&j9-LN`uY^hfklfG5Xs8+Ic`D:3Xb=nUC5*@,m`Fh^AYQ21hT%$C&A?$Ig@SN6^CkOnIBON&0AaJ2kDh!X9ohoF$PEQ%?s^%p2(_fKKn]$a--jLd1r-3T$_u'G@:h/.0>Y[P(l.JpL\kDr_qU)8i:Vic-$@b1H=nD-fJPD&o'JI8Cf%d!AWm<lZLEom@9>.1G(GrH&6nj>0q.Q[,1<7odXo;Se_T+&:,>[ChbrINsc!(gXuAR9lPaeE$b@_#7i@kHZX=5-:'^$YOGpK&9Mr(OE=5^fbLiG61+AkG%,k6>[W[FAI7cgoT=ATg&kTO<-Z%\\;F][\Y:9.r6fiO]qd+@_9)+Vhg'TZ<A/8\%@YfNN/<,&am4?1s.8=X^PrrBITm[]1FPGHm*fsm7s)*XVFu^B2!n9Xf]!Y\!uf(A6i@cNqBqEm\<\c!Y_aq&TpM6%P/_'UPo<CbOKO[F'`j`A2+N<#q%\%HWf4d=Xeh@]n!`fVqri\!HDBgQr*pH?OpRs5pXA7Ge9X3'@6$V'"eKM3/#Zh+W$^3pnF(:7?JB>LJXupc=T.+*JaD"A!QEZG$]nNY#2'A2fgiXXY<(c.>24l>k6dm;ALqD3J<;E<\Tdg\f;4d+liO]SQJ-%)D$:(05on8j-%o&U8(X\%CSH9_WjoOK>DmP7LGkP75JJO9!ao,@to1]>ZuRCqOZ#)5b7oU(*1sr+_DT]0c`2V*T"UCs(gQOV1fog[p'_Sl[!$)oqQ%YcQX+e)4\aD6?%nhG7Z9mQ3S6ffnD!8IL%e;_=71`a#/8Nj$AWgnNK'b!TnL]j;/HsO`1OB:iO0"SiffUkGaA@)_Gi7X,E2lap)Jr>Y5/5M0U(YA[)LKD:eks<gPRoKp:2^n/#ra68bAOj8fkTEoPf(Z"Q9&HF@87>&TaN^oJIu/kf,QeIDW^UTZThDG+YAh/3l\ZRo>L.&W'O+-;4[/C@O\V\%+X,c76]NY7S*G)[#+Kj99<i_mB(Mf>3!I"5o@Foi`^n)<Ll,d9FMWDqm!;TaFAU=AjOVTsdJU(Q/:[('s%G,NRPep:d:pC"i'T-*:@Nf!]E_`a9%$%d,N2q^<aBIrVN8H$cZQ!^;2Mq[4I:j8nnKZ:IC6.]+s_#=XX_[I*t._`J26<uX@1,G<<C(Zf/9I=1MXO`XAT\^9n1QKfh_lMAu!+X%BWBiEDlr/n06tRCiD-L>dmG>G/H?U'5Fr0b*QpI0I]ac%,'C^,q,g\\:DIhj4$i+V:?<;N0?KQ.UCBD105s<Al`];(PmeUgVEqCI^Jqdd.e*-YDG*n=C2JmEPHF>0Lg4m-mMUpuqCQk]c_iG\$b]<ZFX`YBIdAbl%3,mROm85gs]j?Qq+=4Uom5A6B;s8EB>t^^'cgY\)95@T(7:G$.i!eH&)Qq[I9#;c/X[XcJ/D@ENQ;iIn\+A1joh$9K#$aA]dm'e7abK;"NNG27;XApkCi>*hC1_QY=iM&dIJ^0#TbGD;pq=ODKN!h^.=pG3m[17a@$6'7^K\X/7>(EC!ug#BnA41T[@*&#33iokZ)PKHN403[RL;p.X9^JFB(QOh:qNu:FVToe3MM_Xit[Vj`&^9_?.#&9r^J+Q8j#]LD:a*pgp<MiHA)ZCo=TU$EeV$AT'I1HnUPK/\:N/g9rLlJ)t.^P:&qVmc3;HrO*![WT"itWguQib\1-Do<q3;F0Sr/=_L\*h'D\J>9t0Ni$+KrJK8Ph#3eZg$+0OX$rQT;6fe!]NYrmP.&mn?jTu8)_C#>;`&^V4^.,,Q-!DOGI)1H[8_1o=c=>HDSo#5VVhdiBs0<P8aETI:W8MX4`-+.qrOXGq5,[XLQ8i<t,o&9`0ZWF"IG$W'.9]@Tj69IE$,^FK;Xu:f<r<qIIdnB~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1275
>>
stream
Gb"/&;3T]l&:XAWfXWBNK<SlhP.@8BD:4ncRRrqSQR<j6(]c8/VRGHH8aa>pP&8k`H9TYtda#58@(]%fY'.Qu-"CoE)k6;0#Op1^-8ubqJb]X,724mfi9.ZBLP#jWSGIauiHbM*'R9HXq:\EVB8?^:^`ZmB"K+Kg7R@4ZLml@Ek)`5<4``;"c<MtM+G"qffJiCb`!B5C.In>acKEgL#p!?&=<3q>Zhc((2$2BfZD\g50(ugdo,Wcr^NohlI`^0HLc/D%^hoL_BN)d"&.Uq=KGX2-PADoD1!G-&q(qE2"%ntX947Z3oT^tb10[a$^P1u5%7,(9hPpuB#`R8AEK;7$]2W?J-Q#nk4hmSkaT\[b:2Y069Tb!'_PmCFQcf@)&E_.L^DB$hlm'`%iu)8A#>>lP?E4.n_DnQYM"o+6^s8XD=%0O*`1b&u'3g[&4@:`DH.O7/0p,s_=;@?P*]?jGjs*?p#7WXnX>5EE"P0<?g7-$sL^VW+gMOd^elUqBD(pgXZ*DmOgXWYq,A6$R#4$J5Pf\miJLQ2/7*W\GXTB1J9Gj^NH+n<8R'JcK;&O!qXEN]7FIYZpk&IteYE0fK+(`/'_jAQjCZ&<F-l%=N3.P,9XssA_B!W@[<KL;\:d.C`a[cR=E("8\]3"'C*YrcN>)]Xn14_C!4q'eYMENS,P^AK`+o>Mk*`Dn`il(Lar(/LW,GP.:QZ6;Fl3MB,B*^Ec?\u)i-]1L,D_r%h4M&)g_=rAPo`_hQH)bQ<oWa"E]')bQrsSP4$W]n.SqeW9i!\m^FuKRV%%-tna"1Q6rUg0$)R(%2g44S[oBefIY$`?L8)%s>]aVB.;4,A80U\@EIFY%`GDS,TRYGm[K>.K,i!N;S<'QKD_fUo)&iD897aO_U"Mu;7;MqT,SgrLHLEqFa,GT+jE'6EN5#r?sET&[5\7o1giA-rkDU*#4361\7)hGD1iS#5$>\e=`0Xp`JSV>fEI[$Zt$&:k0;n,ibAqsB?S&&9og@,B*SM8sj?K:]/k)A)A&k^'4]KY#tZrq<_-G'1ND%PT)O0H9D.c9F#C$fuPN2*VA76g#Cp@S4]"f21Em8g[Oa2L,]$8cD>6b6!u]6#d!<X5W#bW5$_REP/_Vf;1)3FLS[opj#_)BL*HG.hn,5Eq)r@$R1+(XKkfGAnp@3N\%C$2bb88ed?1Js9du%`#(_c%$%k`_Q`^XJ!f_1GR5I,E*5IQSLR5=h`.(10po8lg.HjZsVQiD5<^^T%$k+K^%Y1O<%mR->/pdq%K0hZJb~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1820
>>
stream
Gb!l_>BALX'S,*:'rQ=+l*`pAD_g.l[,#>_R9n=-p5+Pc7Y$,RW%F0E48nVpA:/q2#UDKGB/VFuQ@5nsTB'Jd'L/\o+&;p/pRlTGJ8sc^J[r^QhJ7AhCOL%3mdn6eJ2i-A+U8W@p(+H+97c7>5NEsi5m&;4(L4e4&>9)aE^@JBa<V09[2>"@Vh&f<#j1s"^F&C\T5ujV'$p<iX7E*:_R^Nr^[r#l>^TBdhSI@-C9<Lh..[KNH;eLlIJ<OS?KmTrj0@/aHnq+K`s2C1#Oq'srg)_&eMEU66LP>/O0!mYV62I*"@$!gqHE$ldDL[$PA$2Z#f7kkmkKH[#+q6"q&Ub;THRp]72TU0O6NX)M_s2\ZnS,*HT3(`[,hM.,.7)Gg2[A)K$@,_J"KQ(#0S6c\gMCG@j*'<%m7U'<K0!aE(&VOV*+CmRq`K!&QI;NUb,%;+dOb07N$&Z`@]e'PN#1$CFS./e,5//j&T#Ip9U.ScB/3;;6Q4?Z6GS]/0lBOg]p%hXt'W.k,Zs^@Wje&m]()-Q/bqf?E8]NXVVPpFW=G\*R7Z$'!5Q-knm'fh]>04l9_:!qhOY]#U/\II9fkL>`\YT+KW0!2`WdeS;S=qEV>?Fj4%;g[`1((';[A3Y45K3D(<:f1?a=Y:JYQq'N?oS?-#a+W"Jr0CM,e*go5;1onk?PVlRkg-%]TCTkBo@]AsYd>%I%qP3:DD-I"YO?nQ)4`V`mE4<BYSOoB0gK@$cqe6D(g*Z^#_2:',gDlPt!7kE!Z8^2<>65sLCZ$"ATYCO)@cY`I(9J'p8QmW!(->/O5l"mAF-qui'Pfp/c:'S=NZ&J147/hD'YD%!CN!dW)@2DZo4\]tm]=mq$Xu(HheM,dD`cj6)@$Eu?NY5p64I=_l)Q@V/dWKP0E'j<^6]$hVeFV<JPcde!o)i#\km$6DN<e!iKsEnATr^atUPq+>mMX04HB#>T9sL5++#(ap+h6qNP>i/Vp(ZF#e<V"\&h2Um#'-(Z3IlUB1U[*<[*c(l9#kfUgA:YU?<r&)jl!7A:XhL$+j/3u!a5`u1n,kVRmD#_EEEM?$g^Xg;\3JsjYkKUHn(C)\9tt`V>^5fnp&N"*t5P@kT<!u*>Sn#'0*t>71XCs:*`k!QH?u28>+(;BatX_>bIQTN?rl3Km1L>T6pPa8$]Z\$%`n);*M^.O)Q(9QfQaU!3i3r//hE$bn+31ZOsQ/bA<W;%A<E*EDQHt3D^$i$+s$;VouZ]IE6X7o%P]i@S@Ef!?)n[mGZmbr=\5#&blER>!-piO]eP;0G4kMaZ$1/DK^g4/j=**^Au.]?`"Wd@Eo^niH:HT6tamg3_PI+A,F&6L0@mW9]u*)^c!BmB.!3fSkE20ea6b_b/>[*Ob'3tS&]Ih.K'-`>(Cl3&ffN+C52IPU8i8c-Q(kf@&rWKkTPmqYt821V<m<H&d,m#:tYj\NmhYtM=.O[c9bB6htdgs,uVM?Vg-V,MjW8F1Tf/m8&"hB&#6M:8W0WLF]9O<(L6'[X\'SF-?h[5)pB*Z(N/qL&8_!d@DlYLYhI[j)<U6s\;)m:1!YrMJQIsPS8(4O?CSX50seOIl!.Iu&6f3]+cp.N&tP"C\-:ubE@K^8PfYa"Rq]I]B`[(^'6okf<4;MFbXXWaUWZN3nZd'%SBOfO9Djg[^\B<`qo5fK2FpL6d;QdVN.DW_lZe"uh"Ht7kpA&/f$c58i:R#s;;&Ma..C[cV5[E=R;\+7PaM"=e-=\W2W_H7\U(tA+nq@b>G^A4N+0+u*A>Df1AP$EZT0n2'me;-"m2Nl,"e:\).&J>2S8,Cqr.^[IfUNkR5+~>endstream
endobj
xref
0 28
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000456 00000 n
0000000661 00000 n
0000000744 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001849 00000 n
0000002055 00000 n
0000002261 00000 n
0000002467 00000 n
0000002537 00000 n
0000002822 00000 n
0000002936 00000 n
0000004729 00000 n
0000006883 00000 n
0000008512 00000 n
0000010103 00000 n
0000011796 00000 n
0000013495 00000 n
0000015512 00000 n
0000016879 00000 n
trailer
<<
/ID
[<4d415ea91cae7983bc552f3a1da04e2d><4d415ea91cae7983bc552f3a1da04e2d>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 28
>>
startxref
18791
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,75 @@
# Les 5 — Huiswerk
## QuickPoll uitbreiden + Next.js verkennen
**Deadline:** Voor volgende les
**Inleveren:** GitHub repo link via Teams
---
## Opdracht 1 — Push naar GitHub
Als je dat nog niet hebt gedaan:
```bash
cd quickpoll
git init
git add .
git commit -m "QuickPoll Part 1 — Les 5"
# Maak nieuwe repo op github.com/new (public)
git branch -M main
git remote add origin https://github.com/JOUW-USER/quickpoll.git
git push -u origin main
```
---
## Opdracht 2 — Voeg 3 polls toe + statistiek
Pas `lib/data.ts` aan: voeg minstens **3 polls** toe met diverse opties. Op de homepage: toon het totale aantal stemmen per poll (sum van votes).
---
## Opdracht 3 — Detail-pagina aanvulling
Voeg op de poll-detailpagina toe:
- Aantal totaal stemmen (boven de buttons)
- Percentage per optie (bv. "45%") naast votes-aantal
- Een "Terug naar overzicht" link naar homepage
---
## Opdracht 4 — Eigen polish (vrij)
Kies minstens **één**:
- Mooie skeleton in `app/loading.tsx`
- Custom 404 in `app/not-found.tsx`
- Hover-animatie op poll-items
- Mobile-vriendelijke styling (responsive grid)
---
## Opdracht 5 — Reflectie (200 woorden)
Schrijf een korte reflectie:
- Wat snap je nog niet over Server vs Client Components?
- Welke onderdelen voelden makkelijk? Welke lastig?
- Wat zou je willen leren over Next.js dat we nog niet hebben gedaan?
Plak in een `REFLECTIE.md` in je repo.
---
## Inleveren
GitHub repo URL via Teams. Aan het eind moet je `pnpm dev` runnen en alles werken — geen broken pages.
---
## Tips
- **Commit per opdracht** — kleinere commits = makkelijker review
- **Test mobile** — Chrome DevTools → toggle device toolbar
- **Vraag hulp** in Teams als je vastloopt
- **Tijdsindicatie:** ~1,5 uur
Volgende les bouwen we Server Actions in — Part 2 van QuickPoll.

View File

@@ -0,0 +1,105 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
>>
endobj
9 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
10 0 obj
<<
/Count 2 /Kids [ 5 0 R 7 0 R ] /Type /Pages
>>
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1876
>>
stream
GauHK=``=U&:WfGfQ!fFE]SekO9Cr[[(.Q`SO@I)oKl-*`0c>(6_<PGmt(d88X?HfBe><XK%T*fm-_>n5k2bWhaIV9q\1B\)))QLDnoW;_XmrCRQ>X&iBEU2#=Ksi!Y-Iejq%$JPChs25MuPE73tgZ"]mFQ<1nc:S<Q]6Y2S+kLB3N$Q-'9)R--""5[G"oF#<7schE'?q:7cAg^AqqHA?Ar?W;bA=:<8d'eZ3(P9*C2)#\`&o+'Vh.pX^W=Vep,1=qG,#rBjQ]QaZ7oiB,d7d$*lr=7:h`kXj=lSINn.X./lXeOf]kI6G:lYmT8+g?NP:DgrDL!Nu<I)1UI4Fs1j).1ES\\rKaf*%@*N&Ldre2L/-_=j/PrOi^La5/Ks#k^;lAG\6V#g!.Pg)(3d?.PBK=ZD&SZ-sVt/%!ntHXdG=U)Pid[eng;=iHVHede9$@7kNjfK!PuW,k@81k$Kh/l8C+C5AER65B/mO.?OC/o/\6)!pt9@^dkpf1(*sru/LHjq3Y/`HkoEi>rB21qJQ"T-j(UYL/)CC',--\&C)C>qBY9"W&</77q,fkO&R\JCc&aQc?Y:?ZuWRG6Dn`D*S0JN!$$O;\^m%YHp3C.OsVlNg;_SZlW&-2!kD2@CX,hZKG/uiQe.iisn-H6#.RQm9,uB"echHFMIY>FpcG<j0XYMX/'W\URUcHq2WokY6%B:KD&R+Cfg?F]1s7r_AHTl<OrU^-qfJn`\8(iP9Bd#j[E03NoF=:HROn2bQI%#(B,jkl#`mJf&n0#&ce-oIZs_Yb$KjK$2hTuV`i3]EBOhX8mrJ'-#UK6'm@J<#C_,SMt_A-.nGb2Ju7&&e\ILr$F)=-$L]%Ofq@XU3f"-%?KuJI8#^B8g4s2A2d)HaFqAh1[rcpcn'W'!44i_jn=-A(>KsE+D)+BL\$1iYR-H@cT%6%G`ed)94;pLeqKBcuBk/S,^<N^)ADk_#?Yu*SBK2WlHsIJ&8Ad-"+[#1qla]+6r)h4^"anpP,nF^uJi(n%XS'5ZQ!T2RH9BZYH%C(T<)CmMN$93K:>'CrOd\AfSh1A)auoq`Ce0On^XVj&Te;VJ("M^))(I`mK^s>B$;!A3fP-V?&Y\&l4g6H8WkXB2*/Bas4JoeIg=nBqWd5)\pU-:TdIdIIFLt2486PVr:neG6X^e[;9@jPNI?pYI'(/G_fO11nGX1W60H:/;?IWGbW.ZRYb0qP:pTBG7J/&BW9-C-D4;/ffK0q#maH?ZZirh".)HrWt2;_c2f'7RW*at#U?f5E2hO6:'mWDIaf`ogQ\sa;>2G*R)bXS(:*_2.Aj_;[8-P+&(ZL6$00O:bgr"5)G8l#h9bV8WL@"iZmA>QHHPiWJeh68NT:%<Td)7]G?lK_g;Y?tUaT%K5OX2g6036E(2)q-"N<G,pif8#9K.@g-mG;QIIp\^pH1u95B9r:u7^d'KEbV]5%7>V[I;+CEUnb0h*^\;Qb4B"Uf@1SLDF_F?6FOUjlo*Mk;OHd]bCRC-;P_0Gn;-K2F4li+KaapBVQ=0;h7`\,S`jA-]"bE]`+FC5s6uTr-IZF:\bRE9/An;hF/c[+QNV=8.SKp6"*+<SLR*8!a^c"m6Y>Q1C96*MGn9kl2FE[;d=eP,9T6B(c3U`<G%&8'[C#1o`f!^HuJQIoEc&bt]?MtFteS1?"_)?9P05ELM0CWq@1RXftn_Iebs6PSK%ArRb!r;>=3Fbr.FV8&URWkq_:A?K2oJ/usaKjK4So+"T6(:qeM*q;<ceNY/%Hd6]*p43o!NpRZcj4cjlOp4ud(nEL\8],g04pP_\15XuR`8(PSV$c(,(:0_=*T*/;k7!jAno9Ubl<^-*\Wtm[pJFTchVJkN!9F<NAiElS::OV3dk3~>endstream
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1429
>>
stream
Gb!;d968iG&AJ$ClqtmS0EFAfR81bES_=`)YoUipkQ6Sp"UP<6&sCZaqV/WT*i<Ji[[N4l>EhejJUMpXqs?]a4FGQ=F&2l7R_mI!$C!i&$T&t,U_e!=*rL"C=N'2A"QCf#hdo'a^AEO45L9s2,jMZfKuAm@&dJsnPU&gZ!J^L2R)Vr/\:&]hJ]*Ze-NT<^L/AT>g[C>^0iT0T0T*H2q\SrPcFbcd(=o1Io*^92$G(1k-.NN^8&I<>["-H"cSt$+Ao^`ZL;kY:C+D"U>3I[V_sobb-Dj+t;H.QW*C9PQ.;0"s,"eT^Mq<ZS9k6C#eT`_.P35_a?nD[d#iSZL`"mO8/0[[L"UP(E#e0GQ&35_?mh)?"#1g_ko=<'pmed@Q2OqopBIJk'oalG?BdH9_2erV72ouG2-EZMAS6jo_CN@@7g'Ltg<=YQ1;UeN6?!F"<BTtAt2CgjP5G[_L(CufU3^<'iCDF[A,qZI9k4'FX4#np-(Wj8DT:gl9^^X?&c=P;;mEmoMBr"Nr881Cl](SPZUG5Y34VgXlUI"/kErH[o?C"+(n4`,;f_YJ?9+p`XkAtjHCJT.M-FG]7";o?'Y%hGWDp:[_O#Y=qkB$>lf?0A\_WeZ$1G]cr+kO$X(5$Eq=-;cE>#Ec[H1m2Wr@>WHR_Db\&6VHc9IMn>@g:[P'kSkW9dT)QkZU^bjH[rtnBTQ:re["4r#c?;<Eg8m8[)CfT5eI&kKI^]X2MdWWn1[N#;]ki9^&DDAr(YJZh?`Wb@$.uHj]unHYb/^YhL`\GlfoK/[eXI_2\I"=mV!h2f>>?]S)CID0"!$=E$,$?UX#T9ku^cR"Q5M9S#cjGP/T"bo,Dl_J1i.=."@B;dsKp_DHptO2jts]n?,!`G7!q#Mjgm7,e:GQ^PAYcD5L;.T,/;'B;mJ]-X3j10cYO-,<@Lqm[sh)<^k1q`DnG8>9.]m+Jj#'d(&Jjbe/dCL*RH^GnAJcVI,pD,*$-ccB+.Buo<s'#Zt*!k+Tu!^C!Cpeh#Pf*[:=K_l(!H*jDk9st`2#^3sUHT(+I(r4bh$^aNrWSg3>i0\;=VZe5d#)0lT"D\\.;O7Pt@X8R>C8.uo!ABJT;hLRUnOpd^\VjG%1?1Ir3[MhWrs<-'P:lD(,ha+?5P/"bIP_J4/9_U,/"1*j>N;b)J_AVBckM2@J;5`sOleh&?Ds?\NYU[_Ah4@Z*B!b8a,7C;&lU5kY@]uTMFB"0MhU*OX6gao$nG6^G>:m&r44q%"WKA*0\Y0oGQQIW\Iu':j?VW^U\_WL@6J[-cu(>YEu7YO\W)%WW^2B<*Oe_IBe!UbqkDg,^.BM==cJ@h#CJBS[[mDerY34[E^-QcHQrp92+$&uMr,A:]7U)C%doh.%%.nNp0pKQ`^(B$""k4ET1:AhISZ+%Y9n9D^;M8D-7?^I56MZr3W~>endstream
endobj
xref
0 13
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000446 00000 n
0000000651 00000 n
0000000728 00000 n
0000000933 00000 n
0000001002 00000 n
0000001287 00000 n
0000001353 00000 n
0000003321 00000 n
trailer
<<
/ID
[<9039fd2d998a3bef32f6fb1a7e765539><9039fd2d998a3bef32f6fb1a7e765539>]
% ReportLab generated PDF document -- digest (opensource)
/Info 9 0 R
/Root 8 0 R
/Size 13
>>
startxref
4842
%%EOF

View File

@@ -0,0 +1,168 @@
# Les 5 — Lesopdracht
## QuickPoll Part 1 — bouw de basis
**Duur:** ~120 minuten klassikaal bouwen
---
## Doel
Aan het einde heb je een werkende **QuickPoll Part 1**: lijst van polls op homepage, click → detail-page, voting met lokale state (data verdwijnt bij refresh — dat lossen we Les 7 op).
---
## Stap 1 — Setup
```bash
pnpm create next-app@latest quickpoll \
--typescript --tailwind --app --no-src-dir --import-alias "@/*"
cd quickpoll
pnpm dev
```
Check: localhost:3000 toont Next.js welcome.
---
## Stap 2 — In-memory data
`lib/data.ts`:
```typescript
export const polls = [
{
id: "1",
title: "Beste taal?",
options: [
{ id: "a", text: "TypeScript", votes: 0 },
{ id: "b", text: "Python", votes: 0 },
{ id: "c", text: "Go", votes: 0 },
],
},
];
export function getPoll(id: string) {
return polls.find(p => p.id === id);
}
```
---
## Stap 3 — Homepage
`app/page.tsx`:
```tsx
import { polls } from "@/lib/data";
import Link from "next/link";
export default function Home() {
return (
<main className="max-w-2xl mx-auto p-8">
<h1 className="text-3xl font-bold mb-6">QuickPoll</h1>
<ul className="space-y-2">
{polls.map(p => (
<li key={p.id}>
<Link href={`/poll/${p.id}`} className="text-blue-600 hover:underline">
{p.title}
</Link>
</li>
))}
</ul>
</main>
);
}
```
---
## Stap 4 — Detail-page
`app/poll/[id]/page.tsx`:
```tsx
import { getPoll } from "@/lib/data";
import { notFound } from "next/navigation";
import { VoteForm } from "@/components/VoteForm";
export default async function PollPage({
params,
}: { params: Promise<{ id: string }> }) {
const { id } = await params;
const poll = getPoll(id);
if (!poll) notFound();
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">{poll.title}</h1>
<VoteForm poll={poll} />
</main>
);
}
```
---
## Stap 5 — VoteForm (Client Component)
`components/VoteForm.tsx`:
```tsx
"use client";
import { useState } from "react";
export function VoteForm({ poll }) {
const [votes, setVotes] = useState(poll.options);
const [voted, setVoted] = useState(false);
function vote(optionId: string) {
setVotes(prev => prev.map(o =>
o.id === optionId ? { ...o, votes: o.votes + 1 } : o
));
setVoted(true);
}
return (
<div className="space-y-2">
{votes.map(o => (
<button
key={o.id}
onClick={() => vote(o.id)}
disabled={voted}
className="w-full text-left p-3 border rounded hover:bg-gray-50 disabled:opacity-50"
>
<span>{o.text}</span>
<span className="ml-auto float-right text-sm text-gray-500">
{o.votes}
</span>
</button>
))}
{voted && <p className="text-green-600 text-sm">Bedankt voor je stem!</p>}
</div>
);
}
```
---
## Eisen
- [ ] Next.js project draait lokaal
- [ ] Homepage toont lijst polls
- [ ] Klik op poll → detail-pagina
- [ ] Voting werkt lokaal (visuele update)
- [ ] not-found.tsx voor onbekende poll IDs
- [ ] Tailwind styling — leesbaar
---
## Bonus
- Voeg een 2e poll toe in `lib/data.ts`
- Maak een `app/loading.tsx` met een mooi skeleton
- Voeg basic styling polish toe (hover effects, transitions)
---
## Klaar?
Volgende les: Server Actions + form handling + voorbereiding op Supabase. Daarna Les 7 = echte database.

View File

@@ -2,7 +2,7 @@
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource) %<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj 1 0 obj
<< <<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 7 0 R /F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>> >>
endobj endobj
2 0 obj 2 0 obj
@@ -17,22 +17,17 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font /BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
5 0 obj 5 0 obj
<< <<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
6 0 obj 6 0 obj
<< <<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -42,12 +37,17 @@ endobj
endobj endobj
7 0 obj 7 0 obj
<< <<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font /Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
8 0 obj 8 0 obj
<< <<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -57,7 +57,7 @@ endobj
endobj endobj
9 0 obj 9 0 obj
<< <<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -67,7 +67,7 @@ endobj
endobj endobj
10 0 obj 10 0 obj
<< <<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -77,220 +77,86 @@ endobj
endobj endobj
11 0 obj 11 0 obj
<< <<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /PageMode /UseNone /Pages 13 0 R /Type /Catalog
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
12 0 obj 12 0 obj
<< <<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
13 0 obj 13 0 obj
<< <<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Count 5 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
14 0 obj 14 0 obj
<< <<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1580
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gatm;968iG&AIa;m,[5<.Mr[/!.@J.e?*@=Bj@]!q*J#a7>i@(P-UQMIsVuZ!0h$IXqOAo$/jgt#JY\C!Q@"`Y3?k_f/XhC112*af>']c_Yc4f2@o3W_Bi8l"@QoQ@LaY!p'(+`:d?:_N-WW4;an&#+k2Ha*GaSX:+<'52K8UI?pKsP8r#YgMklYck67!<U[!q/;T??3#Q(kc0.(_D%aF?)#_it.E6=l3OAH^l#j,n^qXWgY1\d`X0ho51b8gM!CQgAT\E$o2LGS^9mS."gVLApE>F<13$7;ES6qJXj[12uc1hF(n'*n.e\]K^3fEC7TUH"u=5+!Z#,:\]V7fURA#85@bK2>!b>UeaDL^C!-hO2;dC;KjP65m?;@tN&U@eQn\P=-f7K0s-"m\QF/\!%#[gNbJ$F$%mH;6MM[.%6:YFc[]Zln5Rr=9eP.$.G=NoUR3e6q7oMdJ/"$F+KE>l)F,V&ZTQ@^$e')Ums3L@srP/kI]KB*fYJW5O>ucMb(dRB&9eSn;,&N*Fi"#GL-6J;q)t-H6BKfO<5/4@SS^*\,_40;QA`=^(BtUSM5=N!P5kX]"0#U7#jj_RC*'HcSo"<qHE#A-:H[a<2\cVgcWBh^fAfnc*J:>^rk4Bb`JfSbO.o!-ZBmKme.J+1lHN(F'$H&o+ZlGO.\H1B=iO6Z`FZqU'!qf%?J4LX-5-1VcLc-,jYA$Z.V&/*(s.kV+D/pjec-*D,qFs6"S+HqC3:FDX(i_4R^6^iHMpo:dt,;IpMimr5KGlT%pusK3('@o0N(Th-i"pds/U%fb$0#Y^'s,lQ+u2JP\=WrPnWan$r2?<<*JD#\Dd=58G?N2unc2@Ka>j`6[:%+43YZi98X%;tohSiAcF=)00,U'q<bgYf`0,a]8_re#'>u%Yil1`&LWHi!or7<72(83G!$;,98YQ;1SD%m8I`ik=l:N3mkG@CXINsfOJ@dO;+oU/XXb&E+uK5eptTp4ICHFnT'HE)!&@K\/XHAaKsWuKmQ4j:oo5RJn;JN<H;SuJMbF-,H08Wkp;DO%bu".bA3SXq5hIN@rcZu[TRSPCU?;Z=%R;&Bp7,`jUmfI"R]!tGfXc\(9XrICbF>IBpO/ci-d`91nCDM8Us,`0Ahp/`1(Q/ClphN!IW6hi(#58d3dDrAhHchWLgRp:e_'mX;etm`Q!eWke;Bg\hPK&NRpoMC8Vs(_1LBnI`mcrKSEH#GP!:>R8Kb(MTI9:c7%,L;q6lW4h+sROL)ai+I$6o!WLMnEgqA/l?1bl7=-,T[rj\!^%"=Ba^ohi#U/UQ8;Z1F&&tRkN(>lFg$,.ZW\pT[YnSb55OC#$WqSNV0H9Frf%>(pbKIpRnI\XV,U5;;+TZ2]p3VM2I@XB??!nF1@'8Kb7)s(?cC-eb/[?92ft&YKe=1)B")m$<^O,RZ/ri`HrZUNJV$h5'e&S=1;<RSggcmaln<c7?rpL'bEG<i9(7#S'M.PAI-\>5'D-:=cJ&+[>gBR7/:U/'T+G749)AVUH#4mp:JY/+A][,NB@^\2\ZMnb-:\"QSnXkWHj)>)/+04aRG'.WOOLEgmd6"?Op^\EhD3F~>endstream
endobj endobj
15 0 obj 15 0 obj
<< <<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1461
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`S@;jmY&H/b=EA7+&.;G<I.$Da<Cb+5@"bJ?q]mZj^<0:m!M_&SJS2glGhfk;q8P[^4)2^"(Cl,ZKpNSg6k:iS(@c_74#'`:bnL4R[@CcFcLk+_-]U_*53J:&.KEoHGeFbg5hmIrq0:`5.8Yj[\#+@$9PlRKqdG!3f0i'6q+?-NLi@lBH;PaO.brhueK7'"VcEX`!Ss96Qr0j7doR%iuG"Arc,8`nSH;b9Q.gT^XnmK%`iJ6=iGRs8kV:gO&1l^Jg+ueJ\J/RMWIX)HBbdE;VbiD8Jr=c%]Ck3(pn0mg3TajB7bU1TsH-cP^#KnM%J9O7B@MebeP1S2Gi=_b=(VB,I7[Yp77Ep&,C>0p;HV1f'lTVBjTiBS!AhA1ZVDb\bC<f'W.]DX8k^?.g1i(=e"C',DW;YsXMAP!<B*HR0YC[YsbmHeF2mL8V_T[1W[U?JE'fr]J'B;g)[E`]7dp@dSasguF^8`D"T*k)2RDg*;<-/Vp[lrjdR$,DZOb,_PZcge0J1s\U"_;<eDdWX=+$]E&5`5-j8cXCrSnO2F/sN<0!M]BE%+sKL:R\MI@XaMA6q(oGo<m6c#)XOZJ*P#2ReTL`V:2N%E2Uai4(O4F7GHh3bDLKtGR9)W'mMaPaipY:O0Si=Y1(61/qpo$:=LL^HK$+?AIEp8;lnF.3O$5UK<[Yj"5'i3rAB!5,gO/_:Sul3?M#L6T*V,JY7pd%4[gna/&O#hHobAS7(Q"FfWPOj/l=7a\i\T'D%bPiLSZHFEP?'QgQbKq8',dpe2P#[28EsF]qsKugH;I,'=*FWq.uG7j9.4Nc!`Aq@)lnM4Zh>H>K"-[ATU'ZQn"Bkd/`/&9u)tle7!q1A#kYdd:,]]iMFF$58?HgDC+--d^@2KV)][n3!0l2QGGkTEZ/'eDRG<u>E&(JSM+CgAD,V$+iS%pQ7@m'N#Ni4fB,a?/^YmDGN7UJ'(5XP`Z[2/)!r.Fg1D5P)TR<'1lhN/CE33dg4I_\ephKUS0J<;Q.\[no's;n:#c^!H+JaHcf7!r*7'6])"]oqpd&/.!-T,(=#Ea)MM4mK<A+b!Wh@(N=rE^Imbp-IQ!nPG_)C^0KUqqlY[8(S%($V#g$i.I$1M[M6j\NdYh=C0en-[>#J8C@,JK(E]c..0,)'j/#:Ij)<s2j70!#ffOc-/r1atn\Bfq1Dj[]kV5&R.bb%fq:nV[")\SoMjAfGs;CpG0?URMkaAUNC#9=(WTFWG##V"V7gTgb<DiWu^2c/dGJnm*?$LL+5\P`rW"c!k_jASe?*J#Epngc]?<A\9lF8L^ahCQfiYPI\eTE_Tm_*jP(?)l3DBF8&@`DYT:[#(#RlZg0M.Nd<GkS9pke4.72_nElV<IYPks\>Ru1WE2+R_<K(QBADCrPr\-*C]?d!RO^0?RXjkdb+`q<2l6kTGk>jmCmC\?nSaB>cMcp>IdtYu%F.0kn8]E~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1117
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
GasJRD3(GM&BE]".AhC0Sf2)X5I'$M[CnK`8Z02&RbfROGR6s?GY#Z]9=;od58slim:lqU"QT=&h_Tm4"L($[qjeE$^TJ_^&Khe=>9F>/=FZ"]fA=7`U4Q"W!JLl9&Hrl&mK<.-.tJ'R+rV%i=<]%/0L_($OTK:bUa-T<'XmHm!_<YL'a(6;(J=VO5"(!#l^AtL7.epAf;G.O#`2lYQ._]DAnR3S;$/[d#SSgNX:+M^IK&d<rht!SPO,>"LVHQS-@5hLV%S7Q!5G@;e%@`;oaS#&Jb;+f?ijmZ,9AUc%K2YPeR;DB!VE=7=fER75lS,f]MJauV/_A)+dh!IH\c&B#ofVtg4e77aKmTiPhY^6$BId3Km+BW4f5G>*/B7g#_X(]dh-_jPB^T7-q-fYg7j<VAp$QqT,jG"d7kMn$mQNFhW,_D;Q7cJ4MpUO/+N*W-FYpdf%tj\c1j*bp0Lrrmc[OiX;F?Bc!mLFWgG%`64kMC!6#d0CaHT]A]:@C%6VN\231b/_\on*<P[VW+O?X2NAc+Qe*BGAi=Vmt[lM%^Q'GKPa)Ws9bOf=s;Lcr7g142D99fSK8A.jqV)%;8Wf)_XUp:NSZntKrGrj+aXK=V*IUa.k2Z0jZOIfVZRrk]l\H1Oa=!k.7QAJfR\B*?4:LjEM`\Xs#;5B*b^d6S`BRZJVTaF4dF?7^V2@?#./Nh_uA5.CE%,'bY)H1;1%aGT(Nc/<##a#BcHkDN@A`Md>\U<4crh_L#]:"R'k(j;gY!<4n8b\R?MZ%?)hop&6crTidhZ2=F@fH\RZ"po";XD_=lq8:<B"-h2;lAb[QPT8&Q&#ue?cC:ti3(F0#t_:hk*%FGqaI2SbAYR5"3"uRO/@NH;CrsHVK.N`'J`K:G>G)8A)E+h4lroM9!`oFEm&r9ZGj_f><+I,aj]ieYU;5u(e5d7C?fJW;]P&9jddQ^iIiA;+f-FI/oZB/Z(cE:F:G7ZRSS'UD<lJU2\:QD(8:%'Y>/Jg%hmgdck@^KMfmm/Q#3gD)l7D4p]!#F!5*)R6NCWrI@f-j"l<U0ReZ#;p$8o.30A@F]<-)$H?<@L_+k$*rE8U)Iq;DCVE)%jgV5);M1>Ch#'f#+T.Ll^~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1872
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gb!#\gN)%,&:N/3D#KHXdg-"?&--"ZSYh5kSu-3X<V$jrJJKD_(.k_Uji$3L^NW8,(X''d[khnRNHkWOT"SNO-jCAMXST\j!FF&[HHLbXR'2#H,%1Bc?I),kNX1tV#oADmWT.t@Sl>VS[N6aQ8g6Fd1!il3XTSpSLt8.%Nq8KE$8M^ak9C1!8ZK,tU7!O>]JJFgP&iH3Lb#=25C^^LQh3BaGO1E'rC&C[_0/S]W/`!b\]TVO%-)QHHoQa;G&?g3-Yjt%]u\Fg;ZR9O(&W"TYKWi"Chg7CQs[Z,H"ioV.U5SN8#Y18DbY,u+S/g1?i>,7p`Ol*mkK\/MW>4(mSs`Mit5^aGnM@O*pZ@`&K5(K$$YpR#Ot>5<CaO3(QF*Fji$RfRfZ0[TW3K32e//Kp7>Z^GY3i#WkIR>#pl8KB<iT.0kfu+98^t_1h&jeh0VgW0\Y2`NbCp0_Ma^q1V`U[4'dk1NN,l+5BXuDVZON2A1>p<U?L^_,9CK&K&bg"1gHmD@%/*;7\ND2KC?OGlZSlJ`5C&=?5TRu/)V=brbmKt(q>,sAn*gAN5$@PP)<'f.h3)KEm%jqg7nC@=^5g-AJ*W!51m`Bg+6QhY9C;N"?26+\/m=S*5[tF]+2'P8RB3Q916p05]2Gl1]IPhX]LF##u,5>R`lS'6Z+oC3/Y#Rpd'f[gr<^s;/V,>R7DoE6h/%-j18Q,^("(6?nngT3"(`h0=!97%u6'i/s3<smdQkY&V_SfQS:LPnjm4S7<lHbJC>!*6FUV.Q@o:_Ai",1_=q&0KFn$T,+Th7OQlt_7A(U8lN%q3=0:C$ji-1dE4Lm>NnX4_=H&/S4.I6B1nbCp9\p2:FsJMt%jmH\>j%V8OI7Q+=TXNO!&QTuNX*@>&74AMp@J3Q+.LqLT)))9\XN#?TgVaM"SG/9;qG"b\kEWt@9O<\4*M2;)4b](_Bo@@PpEN1`N>O.)fmmK/dl86^eBW#=4s'\P96Q=\X?_V``W$"^i!!li8S\]dcK,;eNT`Nbl..S"LBR;K=h>q?-W(gp%%^"ZJ&b0/'O>h&t)`#l,8-oRft-kb\iW["RsN>RdB6c4]uFse\n:9M'Ir3%?%7f&mX%8:7oHi2)'cu>1%cXa&l*Y$"g!oHZM<O/dIIdp2fKda0@tr#9o0TrjK&8MQC/YZ>beLU5DPaf>jHRFJt9aD"h9c,qS4b>8bL"8cZmHW:0EcruG_uG&3j0^V'WEoa2P'lXCr+Z`H*plsg-6"a4\:V"[r-!7.7QES:rm/r7Lm'1lmOgOk]V-Ld3nJSW/8E+*^\0_%*Be+@1dZ@e.miOgsp4N6/5e7Gj_Qa1cnBs>oAa)^t"YbGZ]Tlqh1j];\+mC!*<eFbsOW6@m"do2LnQ2'LlS&+lBR%*.PUV=iNJ28a5c6TM52p)T%dRq+@p0FG]YJK7[@jtTI2.k*R_3DNt,RP?simue7qKi`4]++`Ord]2p7cYa`9jfWuZ2f7cnA>;O]CGj`?HX7kYs+S&SZPDopVt3"p"'BTCD1e?]KgI<b/=,Xhb\)PR;\Xu8,N!Y'Q-a#eO$jQ1d-!T3,hseT'QJC?j],W->E.]pHUDPrH,m>Ccsfr./m$a_e50MRd*>PEuF+E',fH"5q1S"+7PKCVt77$ok6Q'>>/(oXrp14V=+.;3B%n08u&PBZW@[fp(MVGJ)6FP=IGf!,f%+[.OrnNr@eg$PFq`$G/s1N4U1;&_'C=i$%D>t_GIQt"9.\Bo$Sl>q]k"qSZ&p:e>"ses.VdI!nK%GeR!E-r5"gZTKiOlX2Vpo#a;,GM;=\A'V8*?62F^$s/T%GUq8kgrha^[h`j>"V^R0"/DY?7mWIGB`29Kq`R]d*Dm2UbI_k<922qM9<-?RM~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/PageMode /UseNone /Pages 20 0 R /Type /Catalog /Filter [ /ASCII85Decode /FlateDecode ] /Length 596
>>
endobj
19 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260311071405+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260311071405+01'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
20 0 obj
<<
/Count 12 /Kids [ 5 0 R 6 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
16 0 R 17 0 R ] /Type /Pages
>>
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1904
>> >>
stream stream
Gat=,a`?-*&A@ZcqVi4V:nsGp@+-E5/+Q`$(6`<2--cMo7heL1!^P2b+lAk4llZ<P:2(s"Dn=i!hfLfqJDqBgJ%G`sRg#=sA\^8VmXYZg@.=Q+(6ccF/!5QT1kTj'3@?l<Cg8m/la'MngE.e2=9^^,+InofB0^9N$]L7M-Q&#s/C"Z+"A"(G[hK!fKEN-i6kdd0^g[Jr:GN+P!q(6']=j2Os!93SY]p=a>o_;,l_S3\`rD_Z$>LJe!;1F@C:Hu4ZR]d/U>5jG$mA)HB20HDT'KpYKKs-g/\bq/P;[MECPV.pRonIM:7a9qm(-T4rGhC;.G%l3RBuN3,gsrQot>S_K"seU#Qsh(,BjJY?<G-&\?ZC((AA\$/^%n3"h;g2-.Jskarm3'8EE=CX8M!j>c@YsPu%=TocgE+\LK?9BE]jbd%%3G&+K6,KTd3->b15;fUBp)baWGl,6K"nAh6o1>O9]*,*?jEC-ian&_Nm^XVQ)Jk$7Pc8S^ie9IO-EF?>B,/Yr_bWWc##K`dcn-#8lsFY[&\Y`Z.X=ig*A4S)8q-%b@rMT(R,fU&!g;9cpsP!DWAb@S!N[PCEq8.+*W(uiE/gj5Hl$tkZ61'lA7]Gl/0_\L6bCfA@\!sbM&51]_=$[<]4n2]3617>s`-@;/r06$0&1<eYhBgijc95!bjp-XDKc[U2?PqNYC,%n=\`K+-Hh8G5XSAN/5r.Bc-]:@2="f`;d2kY8`$XtjV[&0'[f6!dr5C7@7%%,Gn!O$U\<'kAZTR@Yd>?DrVOqooPV@?k2IDdMmJ&\=&N-aR2D^:Z&5F-4\WG#^$<EbsMKI`IlV"@kOBd5JK_q;'1s"6+OAD0@OnfBbJ7q#Er7Q1]nZPna(6N=l\#%!*X$fTjiQg(uGn1/#[4"gd#5*tbh-OP$'U8M@0Z9<H%-TMgFKRX8/hVMK(L7\eV,O\:SH0-As<(?eO@-"J_4fTio+7$:99:id52n"SRTcZ9FfK4=]U_DZM#GZ'8nJ%hs!(ar^NY!W/A\Z&lcCfSLgP9i(-7]4<\P(@aCr7Rm:#:0p]Xe%?l8'+^1"MN'XcnA*i8t'@d$)[-\*]o_%f/]nfh@3e*tpa_<4=E$=uat?)a;$+&028R\IMgAb"s*jSssEJ5WcGh$eU%>3)XmmD%_ga<<Cl$r2EA7XFm9S3Np_QbCEZZJTnQ>.ftZr%p#s60.MQ@eItFZXH%+1+Ob:;/'X-G;qs2dZPpR#6_/EZ-2KTe@I0ae,A[oeT)4UTS.tYV@Vo=!*9I4"=EE%BK;,hWgUn%Q>cbOHT\lXY5Ne6Z;4i%#<X)iu]t<QS'YPG'oZ2CRFPJP9Tt5(AVlV@lEW=EF">MT_XG5`9duW"37@9+'YE856>4/G"W5#5m6]IME8>gQ_=,!-eC_pGD(^JuQ=FtsNQ<toL&6<g9_R]5XR1EtO@#N)uf5_iM@o_NkS\;L5'Ah1-\)h^fr3/`k^_r&@l1ZoAV5(TegttX$5]]A'gs0neN*(p`*sFECf(,Q*1G^ogNH$E!NcLh>Nml"XPdl&#]RY3--k%Ksc?!%LIsJ*0a%2Ij`^j6d.)cIi'%We!HS[nFFM<gAJYAhc<dG\EV&."t7sL:QobItTX9P%U06BZcPj?=kBSFTf&Jc\Z$h""2PQWB&%jPVlY*O(_HgpO$@u+*X2KOOMJbk$EQ5?]:E0V]2HF:;D13ac*_LX;jS-C;<F2Nn#C[DVXN2*AJ\^Nd.*3\QDDcC([:F(*>OZYEMWQs*5ELLl927^/P2mM_pG3jsQg#6<s'L[_-BF+*&HsVNI=1f`.MF2g>49eO,,"'LZ?W?`.2X7X]9!#=\&AbSN>!N4FeM2&)`>e/W%'!Ym"eiKq>Xq<aEe83ha2%AmQOiRL>0GEDLnaJ&D1;JWh$RQ\0;i'+p]~>endstream GasbV>Ap#c&;B$;($BS#<":h#&ZMd.V,=!WBqs$;m0`r9WE?ejFJ]!6)VEm4-!LO(,ik@LhjbRAd(a]#AddO<K$.@*b)d=1S8]bJplYcp"2Z<^>_#4'N+)u(8&GF1"tbKR11i7p%MdBKK54)dN]!3M;i3%aKAo"d+A.A\EtD'"eFG"P,*FZfRM-iUI$h\2dfWoMjI4A(:</:g#eFngWu>sj;P=5V"_J;&TC;:"QDVhTCE*3<S]RlQF2eosmr2c;VQieScB.rjE]t2i&`k2^,3!?Eo\O\5RCdPkoHPsR2MKcqH1W^1TrEh[/OJm]pXeAK4`rL)+WT[\[Sti>HXit4s,:Lo3WpNY05oN5EZFF^:6jNXgguEm&X7&,=pi_=ThY9hT<0R4P'1u&Y5d8+D2G*+lE3Hl%Hb">Y)Iu^$Bt/=#P9Wc]=P1_gWe')QlZdj,hr+73/P-Z"6,dN;X828qsBPN]>di\;bQ#:1j,Ec)YR?5Ye?JQHlKHM1p/9%Ri=2]]>BbOK2:+PBFQRj=LUP\[eXV$"]j3c(ZS2[&-$g0Va&ASqec[W4K`$X^RS-qLgeQQL45Gdr=jG%%t];<\b@]~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 395
>>
stream
GarVJb>,r/&A7ljjp75+I`LS?&PlER6H"^R<Ojd2"Sr\EO)9j+<n/\)G%Po!Zcg0OnFW?SJ:<L$3t<l>:VdcGW!Bi7aZ&0]B`s\j#ZODoX/ueAM2ed3OZ&#KJuT[<3jcF'akC7Y,:k\XP!$XY&L%_ki;Wp!W>3_T?+\j]UL'\_*D)3a`X0\lnn.:0>E<4E2#&!8(@Cm=R8fJm?0PU;h)*utQnR1\rg`37.==cTXg:\^:rfrN,.rMCj7%@jW5_UgbHUiLgu'aa`H]<o;J:60ZN:BN.D7XmBIkZ*Tqu4JL*Bod9TN'kCn":kpIuBHL07=fL?`/DZN0KBTAsES79O@Gf/E+;kUVU8MofU8q1fLrSmU=rn^,PYAhrhd$kC`@+SN5OndASRMY[~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1962
>>
stream
Gat=,gN)%,&:N_CCo<I7`Jl<s!cNPP`+bZ$P=b+CD-lc7PE81h,&*.E@t/oN_2B^=ZK$n,OMG<A#D[Xn3&(8Mo5Cu?31n(_D[tQRkmY)+"\_.sql+^RnReU6fFuSN^^Gk@?/J(.b8,Zli2c6)^2Q*bTb@d?U$#Hg#uk,5_XhTq`An,O%KbDZ*0LT"eaqSiK-8g,"[lBMn3YlBbR[:SSb'B4EZTt^=n=#cWc#.\#&S2^WRYh9c*4<-[bWL?&0J&e/\'q/ZUgFjY\#9($iTRjL,qGP0[tAkcqoMh/U&Uah8]53%AW7RgIi6.8(um)<L_u*9U@Fr+gn@<S-P&pn/s"%&'@>fa`%%q1I-8*8+%$=o7\'uAEKfQ0`"F.=\2mJ%?F']2sO.=TMu+m^+N<[.ep)o<;*VN6K^uV<NsJ'RAL>CU1P2$>+'u,fj(YU>ZE\0<3XHoXBqd0p2Ga4Zi):&erXF@Su+ug75f`i6*-nVcn><#.TgPn$9+G%=f*s$LT3^P\.65pAD!SK5)HH,H@\#kVh^l))&EJ:Q9mE'_ms9hTG?D:^"VS1Uo\0keeg"C"S=_WRlfEu6@=+'%g5?(VnEMP^Dj[-W#u%OaRRR"6<-,-L1E*5;iWa<PuO%:l0TgS<^iUWVp3i"gLWi)MK`#(X1OX/oe+=DqR`\<<BD5%6IEi6&lig._@O2`WrGqWfY8a=H`$OlG:Ljq[E<ZZPtKs,TF^bIRr%!-o?P3"4_NH)*<59=q1<]Rj1Lpi0<2$3)irH1P3F/DX0W+BCuF9/EU+R7hrBhm\3))T<&)\?1+>L)`Udu-W>B($4dH]`B!XsSCUL)O*,l;"53h>N`rBP#3C$MF,Lj6H&:ZkS8r2l;04>OCcs<6gahrFMjY9mJ3GoMZJ6#XBZpWV\`$_E-8g]6C99l%ga6qI0-`i(D/"%nAUr*arfr(o[6JH#[<15f$Jous^FjfL&9RoJtX#$g^=Aa<N.`$CYefM?X15C.`E*T;F:#BPKSru%Qmo1\U4gA;V)?!H'j6E=7jZ#PTJ(Rc3DhT:Bd\1B6?",u@cJN=^.n-6)4FVf0g:rYi;H2jBkVP(5WPLJgK(VP;2GJ)/Z)m">,&Jl:A>a4NcLh:$/Q9G35j>M+5EO3u5[U.#ZD^B%L_R=3Ofjm-:=[&-l5-]`[_Acr%Jg4'q&Be!*2=_00U>-_4s@5P"<1]j^8YEEG/?;EQsbkE_nk!XqF/nnd1>]DF\gAiHMQZK8l<+/YNK5F[!$USg?:<DHBSgLqD6K5/+8E/lt3P+1>cc%hmhgUBkr$\.4'A[^Int+!![fNFtfWX!M=6@?mkX?K7tWO^<6QC?5ng?'X!FOo`]/ERe7HiQ5hWtq6#NlNF=p&PMiASG[=a-UK/L*?\"nPi9VH%Bt*86:_QD;\j6_ml:;(t64XGR+-`TKaZ>I:MJoUuVQ#2?hOs%Fl7Jbf.>XC\P2=^iIe)dN41S-j]o.Q]Bh<M]i4[kH-Ui?WX\GG>(BUAMaB3!,rtLJu$=Enl:*?lL@0mmC#g3M(&*THZ5@B]%C!-fkl)G%"l=seg*4d0!P>lk4F(M`m[e6IKHsI;"fuEmnB*X;JDV_A1cCbN:X&ZH1@Jd6$duMqS[d'.=htF(QBuKkMOD)i-O]o(mYRbI8-iH1CXSl]>/lnip>%9FcqghM."QWmc/(KCIW6OXMKP6LLDPYd)?h&P$<u%"&ndREok78C!)b^cb3I:j*=5(C'2H^,jRF[Aq[MnjQ7tZDrL!1W.73gu;^MDn+hVX?BZ92J'\2qRq':HV=C2Tn'G(J;*WWRZeG<$pHDNmcRJVcJT^.@qaj[EIW3k@fUc/oY,U^[Z6krd:r`RJp._P9_9;!"]pg8Os<a"+B!j$;rE^/GA@GO`+1PJ%,g&2nM\_[4'/s)r7OYaP=e%&t)8cr&RS\>&k`l#-tBT>1;J!WV5%nt8*`-8-\AJ:pK)'3P8:b;i*W~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1741
>>
stream
Gatm;D/\/e&H8h>E<oCV/LjqgWOH9fcu(Gh+m>*7BYX>#/CCa9>')/R:,;1Nmmp*Wjd3IZ$3QT=8)?E':/UNM8*tf7!-g__iC=7)L[bd$,7MRnn6t\=41*ZY`afe[5(j4e1l)2qjq&;`5/%ZeO'"Yu,_!U,L+8_9@<cVIYV7=gJ2@c>/n,HI^>Z<;gX%C+i],et).ZLO#SRhr?Bgh`/M3\BTeo?6P89.H?(J9]K!MfmiAA\<MRSl5D3\ZBiksSY$a+al._<fk40pm0(\:!eXm==DAmH49\8`P;>MgSW#TD[^"UtAO^Ulu+"Pj8hdYG,!FigP\\:^bcXa0RX`j[XNA#.m"$UO-CR)Xsh_,5XuFSu$&K!Yp5LY,uRIUnOB9-RldTN9`">qUmVI?H*TFT'hoG>s!@)8_R+,WsuMq"MB;4MY>KL5fr;O.Lp^fq0a%n-=_#&1D>83@H=6X;-?J$6IV&DE5qOi.)LCmtBUVXA`uX-#S"j)CC*:Fo,C1T`D5BYMk&53h)JFPm4d8c*Xa`0Ete;EEK),=f%Fr75uE?cl+*DM>s5&OXjc:]>#AP8hM(\)hDm0c/gF1]]?:Ll^A2Uc?n7Q0tQ6*Pc'-nl1k!Jlc-Z^UJ96B,Fboe7u&ZA[pI6(YC8Qk,m`1blCr]4hmgP-'c8b:R9V:fV:/C0=ma4TJP=?>W-6AGniWr"Xp9-cp^N\@\Mg-YAE==%5+q':kl.kr,,!3(Y6RA5,W*M_f[ltNR$QDFe#cHPaoR>tWH,/sWRP*(cJ(_HT4-&G=l%Vp+ClXN]$t!#`QbF,m]NAt(H)L%ma107%)fm=_m:ao')`6'?TG^?^dK_,6.tr,A8kt9W%YBHNs'<e.@t:'m+@YfA+'TeK$!?M2T?=e=aEnjI`!4d>5#Z$C<Eg$6)RXt98[ALkFu3BQ(991fU\/oK/7P[#jeO.jV+8T/ZkCjD<2#rTQu>oAmc=\LHHe4ZZAmWM<P7dq#1IIk7u&8h7&1cUW<sbeg)C_$9&'m132%`U5KDu!G<gS1r>7,d:?"YUmnAiU[Ses,LhJ?g][-Xo'8FTfP=H3gGFuI,UiFeXie7SQ#;KA<2l@tZ[](9O*W5.6bBrb(R?7>Fa`meUFn^+9;b3QC^HR;Op]-5/s]CLc;i``m9hCc37^c7gZk$T3j%tjM/mYe]D[8=]]_&_>J:ntr;S]Y4s>rli%Ro!Yq@bd16LS+X3^N\+)<CpFHRn'pD?T3+H438QZ>"CCb@NpUcf_e,\U*DVOoPsle>&Mol6$e)@!HlSH5EJ%Di7?TbkZVe!(bV2NNU1VFtbIh(>d"bp8=TZJs"ZD-/EfKtEqC]"bKj!lp+N8tTAGo6S&qT&t(\er,G]Zk^=\lZ:T+57XZh:'LmJE)\9M6>q4P7JbY,KmRjbRh!!6$2:rFQT^6*a[\9qC"]75+'mGF4RE_mK(g"SY84N]d-ZCu?.HNV4h4Lof/R)Dp;@]+]"SDlGq4&ScrdF<Scpol(/AJ(pS`8uEi#(R]:nE$XS;Z#kB_8;F%^e?Z>Wo&N-[<BR/2ZH"`Xh;0Zf@NhX;&@>ZEf1>uC78F)3/fEiUj.NIJ-9Z08XHHIs'0\*2`44?Lu^^[dfPp"\=nVb4+-XpFsIiE<;n08B2gMT"Zjs31/Z[,H>GrA?BCo=<n(+)ZbZ,kPOg$l_fhjWA_<TR6X>*V:RG4Sq9X54#HA>9gY2mOm%;ir/Q;1OP>ha0,k")re9=p&j'c"O;LEhU&)~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1879
>>
stream
Gatm<lYkN9&HD15iXi2APLd*Ie0A0UFBseWbIV:Cg3rIGaq?;,Q7,7tdM>.KpDp5gc,?e"K`TYMh&UuhpES!2)#,i9GE`4-5(W5S'2/c\F"eWo^uPi/:'NWZZX)hl`-*^?gqY'[odF\s&BAuHr(/H_F/TBjYQ>&@Pf\Fd*8Hhj*7lL$ig9`aG'r;[QCMqWUDZ"IkPP7imm&_n4)R;G_sd`<[i=p4&t!8B5VLBggJtqmIKX5a45$9,erLY`BuX=Z1dLqW[F#lD2KBMj)Cu*a1W2_2n>$CP4GT])F,Ad@LZ9Cu3(I[5I$2D:h;nB9Y[E?m_<W:XX"[uFYUZr[!`<pV:LWf#->-6#oemoe(@b*`O?V;Xn'Z[aAtPDJD7%*F`f4=c&?)@KnfYiMN5jgk23p-5;16hcgT$cQJ2i+ldl>P7kAN710E?NX(,UnK3#^3V6[d)[L4:mZZuA<7!Fm+63=:8DG5.)_\#b6!7D=pMMKZ^t22(3JOo%o=MF!K'\E!d;&Z<bCPe\StA^(CsBuqQ8==<"jp*WPHQ%#/3Vl09"92pZ;RR\Q5&;IhKfEsJb0.WT7-DJJcju9;i3M3(0[\":CSFQe4&ILu;K5A']<l<bt1A-9KrasM#W2&`;md?``rV[lRO;CU+-O+S,phpCSTrt_ql_03lr\OrZM]b.ejInsWSJYsp>Dc0."_2-!Y1m`hI5E4H%Z*X4mkA"HG[%CgL%3^(q6h\D9N_t%4dBE#cM73D9/`;qko!<cO-l6_oj&M@(V.gk,RTDg*N,_kMaGMcalch4>1+fO;.*V6]i&P?o&h!KBpmH[Y]UE$GE<&'WC_@X.X9M)aKY3O:`^s1?O0\H_\ZKp3g=/tY)Q#69i(F:?KX+FDA2ZCC/i?+2D55t>H+6Z/?U4P5qoD*r0b"Y[WV@GWSJ]bdeZa^&\:A?HM[5!cT/`8SM=Zu(g93KaU)[XiHgG1;&$[",*jekLQ4aXmC?gL9X^qbH0pFhM=e4b_ZUY;IdSZ_De`=0[,C\Bmt`fAD#,A-Hld<e6RZ!&AJI=m=YJ>dG1[.C#:DYQVq-G2h6kI/ar-!hWQ)7u:>-E8B87M[56Qrs6Q6[3\\tP9`K9Z8bHLZr0?s?oPV6HBZMDJqa0G:"pnp48ehmC"n_7ZQlo!V.nI]3t\m]E&CUMWP]3m8KrJ,8AlU]NJ$&b%+_dRId-F#XDO!%-Fp;e<#["@b>9Eeurno-I'H12Y'C(kFliGCPK)dfnS(VSS1RJj;EU-`dm/?Gj1@EpK#Am#`1>%bt@o-+oC)_?o9a"/9[an2u0);erue]?98Q%XA</0(eWEg<nlD&=Y4/DYS'CrL4!m5gVB?c4?c[-;kP`Md6k3\.N27!$eI`d6N!-0%bDj(sY&gV(U,qV@seOtuqrU)cA:.b'sM.$D"-C*snZM-0!#dkI43SX/U+;V'0E0#i#WRm_WT,i]r0,>WJA51B@lU:l`dn4N/g?d'!#'o?0+i\cjB6YGGMRFId<SZNi$R@\RMD<3ORiA-T$CG'rh@gS=/#\P"W<HDPBZ9fU2eMD#BcZ!Ff]^AV(X7'34@WG$fL,s,G<,Ijof#a^c;7FZ/_BMt\B<\-`L';ra"$UtHGl6Jf=EIFG#rN!M8j1;LMHCU+)p4Djc4P4<`[6FO,Lln$%I3g+ZET=ADYHSDs2;2ar**U047Q.$Bg&tJ?S#=/5/T9oNm!F!;nglen/CZe'piF8[&A9I;BYI1Q7eMK43+Xai^Eo2>uo=J&\e33QtCl3;BB9ZgP*gI0$G/rAa"aX\lPHsbY<(po`$]Ya$_V0+:^_/&M7bUJ9gTAm\8$NLnXg^OoIdRiM2!r_f_M>9DNsRC=P9C]`/XO(RPrbU+"a3[uJ4G__rA0&+g<D\G~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1670
>>
stream
Gau`SCN%rc'`G1AEEf)d'6H&[Oa;6hL3Dl-?-t^8Yl^Eh6'3!gM(C]NS?s1-hfhXT/6Qt_[MT2nECbtRLZb7MF2`[hLRI&I$K1^g`\/2`)eS9K38lQ<$SQ,CQ,W#9?(X*ZD1`dH_Ls:URmjjUgA!&#D3#&/,d7B21%L$`=WFoQ/FL);#b7ZOikQq5C[2`'d;#6bchID*QpYDl"#h>DV-]hh2KKoa!FnCqD)BS<T5"mPB/%n[OBV<cm0qf?UYE[1$h<3)ZiO6Xkujh*>$C+0aG^&U9au5i%rS=eM-j2:o*ooR-:Al%[XuoIfs<+e0LsjTg%5D2W(e]gnERt$A9KD#$#>g'7khQ*fs-Q[H<2;<S+t2<F<^-XG=B,mF^M/[5]-!J_XU8/J[pi>D_im6BH42,plgXoZsrrG')si72/Z;-4f!:2&L\P=\9kL7ZsCH3!ht5@76hRt,>kI\;=hmG0R=sP&V_S_AI7\,ba$?/3m>BIdeB[uN4.)[W4*p?0H]NfKP>2b0BPc$._-%I6=unA+CuMBDYD"UZ>c'Cd8CIK@:C0^7b*XjWuSq'4:\eH)8m05<>s%C$c<_7W&u[AJ9@67.p:#b*%%5fR!%[&8@PXBiJ;[Ub'J(T(O0g8StZ(&)3kc0akFmrk#]q&0g*h'gO\\T>od#$9L$rDR!#LRoLAeE2DI?q\^PAh3`oq*R)0o"_@f$Q6Y8KD=Zj2+#oq8,k_-`?6uHSqb`m]2`#ir[@g\5J_O-)hDN1E8o:U5TP;QW,G=j2<=WU2(Z`^+kJY[cg/hSm3Gu4WT5<%$)<[p=t16!CCW5[udrE9[G5;_b6jl>bb=d5Bm:PGX.>(505kF4"P'+$TQ^FT\5]QPgSo2rF&Dk3fSL!6.*9&krZL8`Wi\inlE?X^Pl5jn@]%7,VirQ8m=lVm1NeZ@`>/n^gG%P*7S0(>`1Aj7C0')-\7XPjcglOtN43XerN`8(hJnK8KIB/W=ad8aRC8o^>(:X&O.0N:egKdB5QRNG66j*'sBH&J-p6<AT"^2SMPBe<^$@(aI(D*qnK;*3^CIq.MUI:`A1\MOOus*5*-fhAmVI_4,$3I6GEK+&9Qb)4X**E>4\rpGb\/t1``^!TWh;0Wa$rD45759?]>#s*0U9c@jMIjfTANM4$rFM40hKe0.3pAE**4NI?CNt12Yh=TJQ@FgdL6f;*NZuE;RnRr<*4eH3?b"\HFZ#IhrX2GV<\#DdBr>K*J'43>T$@4A9n)W[&K.PS%+A"0mQ-Dg2_%[s#7oD+g<BfYA4e=Qk<AUD<lV/qk[E;sH4mqY+l,1fb%$[6UIjjI;%W.\3o:s3tFWC+7,2ms4grOT1Oel;ka&BdCO71sh5U_S7b2E;&:*-8GII2A1Y$3'=qji*4Vlc&Rh,[)!40=V&g\AX%e6d&C,kOCI-E;]H?RoYj)%m(nXJbZ&Gcpoe%AiHIE)?9re93P5fEY:4q_fe?@?0Mu:I!?InV@(i02!0g:'U_J?\ML,Zs/9OA\"Cka/Os5FK(.<i_W6/>nFWKho8FL/6=b62CQ/]\Q'SY$.C6BXR1(H'3XubkUFuS<S#mUeC9FVY>V`U2'e\8eNOP)":O9g:n1oTY&;2BE'heg[siII.gln%38Gk-V64C[9B<_Z^Rr;W[?1/1U/X99%8k(f\/fBnr<lX@a0b~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1595
>>
stream
Gat=+lYkN9&HAoJib"j^'/VNp;_J[#OKRu6+ipE5dK.NT0JXY!OX45+qH/jZI7NR2.>m:H&/(C$o'U_j'*F+&1]P?=^q2%S4u-M(9]s2Ni@mEG%o[7\Z0J.NPHeoXi!,]*a)ga=7C_g?plj@=`uP@0YQKnJZ<Jia3*ofmgi\J6+H8^H$_M[HX`q9F90+;hn,&S3LX9cODEp<V]g1JWBc\K"@mL)(2fDrlC4nGYjL&./<[Fi@cj_qF&JeQ+%o:Xm>kQNE1mbVSk5/g.rLg%-FJoF'VK7T$R1AJhm;UBk.d#2+$nnN6kK)s-bm&sda7(N0PaoPbg#Wog-'rs4]n>R`k&U!^$[eH=bR_&gT&"U]Aq0c/:23/'_:R=/+#sHn'2RpKbd276<\+*+7]SA+o?lICm%;[l<68"7@2"oMi'%Oi_3j24]+qPES,IIK'a8\4U+4!H#c/FZ2,AB'_tW_/#mLYd6o't21)=-;"N6hGHO4+#a[B'c,#]V(_q95`'c>k4j-&`t!Rd6jdc;5_I@EK"/8o&'O4CL=p^iP-9\*AX[0MW?9H]"VCnsSt$m8Q3h=dNpHARZkfuNW8Aq+[Jb'+<VQ/8htOHo],$O+]f<P:aNWD%cqM8aI[93,E<G#p@!7mb-WX%'Fe!K0Lb8n;DA4*I.a&*qNP]%[?_Us-4c1:]#JY2CXtI@ojAaa=^X,"^_VKYb<@>i-R^gVm@WRN`!6Y]4!7*G,riAHA*PMluSD@FNfV-]J!`q"j.n#d]rZ#5EA@kB"jGV?Ij$L1uf$K6LFdFh#hlVHdOZ^-cXjppRLA?U`IU;]18Dj_8`u]\`O.Vbq[mDAhPKiaPU>9#T+Nb%q,VhMVoH&nrXu5M\#ab$<^B^7<T;q9Ia_3Sd\Ai4Na[1&:K=I:(*<hK*=*pNlFt[p:p&8g=bIpH%@?o.m-JSiBjf=jeIab&?R/bZ>W_Z?#rQg[L/`H6omKc+7=CfVV*%GEuTH[Ygi!T`uP.j-uCnaH]Rjh?CbFm;h('\;kmAoscf``kM&]"Q0DE]Nk+2?T6ARm&AT=,2^2b:oM%^:';`'h(W.26C876_`3DTG)K&V7BD1+\&\WEc(d]#CO24@TStkgPjcUPDO^61lFMm5&Oj-jLDBeh<\7Da.3MHJ5;1>XGGDBZ11mW>GjTP+*qO])D8!NC\(K5r\;>>u$'cP`<`ho:U^QQ](Og>Oh(5dR`3#;_Kg[#^g$!c?J,G9Bodd1jRc1Wf6oD<t9WKmaR:0M)TD'M6?HHa/dte-XY%H$[:CmC<P[hDhhU:?_(M28F898`=Cg@=OeERbmY:&DNM0A@:Jskifa/e70"4llDlkDN`4jp\^;%I2L,g=MtB?%X^,1/2C&g<qgc#0iZCQ@GG10b+_+`FY1]%<jEba)*Mi^m&joNs*V_BOosi3/=:6E/LG1lBaY`/?HRP;/o@2)$gB/]5C:%":tcPbekefEn!,A;Kh7<^`W;J#$lN!"NW1qOq1l#8<bkYC#5U@@kWUjk*=t%hQSqq@Pm-[;3!:3>;ed8X@o#Nfd)]GFe^u3C2+S'=]Hbn6T1pnl+ZBm-5FJdT`,pM_qPlk5pi6JChXBepg>&C2a~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1594
>>
stream
Gb!ks>Ar7S'RnZ;3%.V=$"fX%86rND6^ouLLFc)!,6^!oJWUgSN@[(FSYdA&hfhUsHr4--!VS>U0[8?4+$Y3:4Cg_IA*u:D!PB>fi.M-k0Y@T:Lk+G5]GZ%)*ihd8&b,tK+c$;116acC,9dISr["(i68BZ<Ns45c-XQ3IS2Tt,&.g:qNC&AbLkGf<4X-\%4!S/J7B="M`+pkh9L;@hfZn?f6:PG(iYYj7TjNjqS[C%_CK8Khg0*/s=4ZTX=lLSg*).AkF^\L:/oU#\+!NB3_j*:JE#lem(QbSm%bhrjYYWEqpi$GNpVW?\+CTr1_0M/Sn6-crAh[;M1fjo9r!:2-CZFEJ%>[!#=;9L!Gd'DoD?'"T[V-[(LWCYYS-Xr,3^UH9hP*[JC-E``&`hlrFSs_j+_kI%pDY4sKHX2?+qAe5jL"<h?,o84[hQ+>Z(H'Q!uQKenMlA'MiYHQS3ZPN#)`u2lP)[s!3L<].,F=$=hXR@][J/H(UJCLleL"gNR])/;iR(mMoC(D<+Z-t@+/[qoLVp*@+79`;OkA)1-0+$TGD=HeG345L;:!KBrm8GUGA5#;GVBm-Mto[!H&nMGEF8J\F%'()DX3R%''hSem@h/#A%:DBEK>rTnUdAg5AB(i`gi99ja7.[`TtXcqGa3>%G\^UlJ6Oqf<Gb>VG]eV#"ah&:],U?2qMo_?dfnX_d&@RdEkj*<?jq=Jc:6<3"V\59qSI#`05iUX1s%fOhW>g[HQD=I*9AIQ&;kes4I&iXsR:.ImeXbSDe#4@MA6H=<$n7ibu_@8;\kNi6\dlO58.Q\D$sHp?=4.n^HKh&S6Ypo[S2Z?8e6X3$^ERWB*7)](4karh%=/-EP(!dBiZ]=ilrmhSA)--Gr.RGA:G0dG-:b\_Xj3/d.\CESQl)8oV]1lMPAA7f+-nk3hcA]7`S,.ff!\^E+(Br[(5Wa_LTD)<W.=tItK9YYg1;tp5dI=@f*%%,lFe^>/XWnNNGbWk<-b'*S9qVH=!>o1'9?f>_VBQZZiV>Au..G]Z#eIN^VCU<fVC6mX-;6O\rIsKPl#0kjCa%.G^NBRa1K`gpXUOBAe6Na1@e$Y=5KCAPM=kJshF`%RnFn7"r\o5:F<uQ!J0^:.:W8kf]P,35!\]`T44^Wh[bh#l1l"7=\NZtr")Db9mlq9:b(0P-G>"?g_C5jMlkK71&-3dEDE!X#K*+M9I73qRo/nKBo=`p+26d\0cA#261KWu'nXqE$B>JtB5f1$n>8WB,GN4\YJ-KakobWWo^>Ki-h&bJrZ[Ri&K9L_XLFZBZ=FLsI#n-sD\QVNc.,MQh1k`7a?'J\,MgjB@(^lo1>31##/Do8.U,;V0_8>Zo+m9a)%D3DEsV5*+0D+-CHou6r/Z;,EcNq%,qX`E5tnTEYcmc3,WHDNBS39o+.Id$fu\ilYMjJFH^T,$EZPoWFiNL:jt#$I(eCg&C6O\[F.SeS9,_d>7uD3L$_Mg[a>2#:fm=uBKk2pll:^hP3rV[[L8BLFPM3!(:c=G\"iM@FAP$#)5QP,.O-CS,RDH3*RB/s^3lj.:5X0mE?GjZ@]k9JdfMU8T$WX!^KGL(1eF!HC0!ir~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1885
>>
stream
GatU4gN)%,&:N/3Cc%OiSOO;bOVFeEm5RkiUm&enXmm&H%$?W>M^2sKoHbFUHPa=dOEG=oRLt5-mb(n(/64fFpsI9'56c?sLAj[`F9BN]cqW&DnJCtAgpub7oh*t9#I\&km@(%m%5$Ad;,,(hn>C"<6dsILFUcqj);2*TFA1I*G>-al/ITTULp5p<6e`/.k"r+uF`ln-cDkf7he>0\Wt%"(k_d'ufMGXT?$BRfV%!\&W`E7aK!JFJW)G3^8$nO<D5GJF+?j&42;mahN2!pFo?Qt;qF,eYdaE8OLKV46<h7re38XE?k:EYL5)qq>)P:;e%3E(iXr4,Z=Vd&@TTF456^Vh]9o2YA@!i@B2aZ0+D38cGe^5C=6t5JpD7/tZqdQsne,W!(m!gk./I`U*F-JfYq`]p:QI(<Jr<BXOo1',K<ZDmH(t5m:i\\#crb`a8"rLSJ;dh*#V^=*3jX6OKnfd'*jtN\Q@S1\O7E>QdUC$d[iE$dk)QE4W[Vcl(.8?I'?,iu\WLQI%=pF/LNV.[o;F1*u_a?D;QmAUSDAJr1$47J6cRqG7:SLHk[J6>(+dp\JX@Nn9PgTu;7H3p#k3tOH9n5WNcWCC\'G_9(fo1BX>WqFSc,Q,cK3`B&*4MKRlSLehrB%)ih0>V'p'5[XS;lGN/O=F9&GQu\[)0kY8X"eZ/DFFYrDMbFM#Kb>@/&l[3WNb*!5HTO1V[Ja?A?6tP.ueb_Mee(TGtefKOj;mKV^+l7L&r)*.8:#l<<1fi#T(=`u\W(,Q67@Y<g9AVHG^7N`QQ&+X)5s/JW>YN_4@%d=*OhEQ$0PW4J[,[Yq8i%36+cV(QkT5$2^-<K0T8.@sF[hj+HqQ'7FD:\pi1,)r-oc0s)RVj)%DA3l[[X_K0da(XpF,W?,-FLj#'59I@c-$[Q0`T\$&3!/HI3Q]7B%A_BYUo#3W.DMkmB5g`Ea(p'C,d\]<aX!Usl*=04j@2?XH2a)IoQ5BMd$keJ,Y`@VaEnMiEbRAtR8Q7Z"elHPd7bIM0VknRB1RZYQcB,Z%0s"^8+uoGl-%!:,<FoJ&#n0_D+TX:NG-Yd1tg=1C8Un"\jotIcSG(@1H%)9"kS]DF9Co4&C39sO3-k28Z;)`Se=%5X)lg^Z@qs])MCQ7Q0uc"idtf7;L^!--\Q*rg212(m%$!-AhRXtp<TP$pER0\Nuc'`Qs6$'H!%2_1UA'I/6jtlX'PthWPtmu-IR'=+F2M>Y]*&T#jI9F1FGa*;8E\nIBBCg6B[;TPcJb/6pgn@r@dlqc[kdI&K[(=oH-h1`h%j[s&d//0gWnqQdHf1;*!H%o6$*VOAOdjV;.\ib"\M(@6_`lQhOi[\M+G`qtK<j)`drcUdTU:buq8:#F?6.j6kZ->NV1.!Qdi9'XSLunO=^uhY8Orh$rTo9eja%EA@@"3D6q=@I2K*@DS-YlL1d3YA2@h0U[XD-Z9)TFn\*.ZBhueU&&EjA5,;^hQ;+_<*JRp&QIFm,?sVYpWI&CU]EZ2!tdX5V&9#8B;:/*S18F7]3QiS0lXif1Yt0IrOY8DWS^X!<`!Mt@62nfNXjB*n1W%E8CS&>rSmO8KTr<mW!]fbW5GhMKf^hOkZc[OfjQNqSjiGjcDiu.pdbDDPYLFhMbmOX!D0:(L.7)i=\I[TlhD;%XHli\Mb^Q%>\p1T)<I4Pat;s`L7fm8P+/^c$BnB*"H,Gh<`*ZFjBb[oMNUb7H-"'GbDN=BVN6NZ'K$guqA6QpR"Wih5'C]!U3'dZNJ&BmiJcR@<sP;a%'[t,25;Y>l@2^3i`U's%8]dT[5A1g'8bC/)RVCAco97+D:D_6<429m(@c=Z(JIcY#eh&KGS[3eZKUVnok4'<Ai08FN7EQIA/=0uERum3k<EoHKgb~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 564
>>
stream
Gar>CbAQ&g&A7<ZV?$b.7a$l-.8`+6B[@M\)`L*0l,Ae:ZD*[1bK0-ba[gEuJ,gD_R+^:='dOk9m\0m!jLD]t:`B-Fap<Xt)W1,L0iCq]U.(ScNE!m6=VilQZfh'^<ZT3QI7"jM(f<-?53cMmeA<JfYa/E<)KqWA'C@S&PqR,';WliW2^hF]%B*?($a"fu9Ol>(hZf`4c-0mMUDY=?=lDG`JXf@[,K$klG5/[;(S+L6H+/pWZo&^hQ>'o/[Y[\K_,0^*15n!7q3de)Y['^blI]hU`R6fF+`sgF2"mSFD]/2un'kCXkCUWWWa9%jf?RU!e,q>+oL'h>)+lHom\m';59bT%_nWu_6@J2i&9[42@mr@R_n4;]h'\6@luo2u_\qa:WbW^:_N!IQE,<PeaPKi[CtOt/p3jC^pd892mR!t%M$6uLfDHH9*r7S`lh=[Ra!Vjo]qnKJe\(4*cXXIdZPlsX6OGco+cKlu*J@j@/aI'r#LoR,ruX$T6LrT-0@8^I%^;:%*NPpKl'hnWZqg/WpY?@-mn5\U]=snh2_S)[q.;TSc`'US[f~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1710
>>
stream
Gb"/'>Ar4d'Roe[39"B.<+5:Kj'/osBm\ZA7C`]40;T0`-8<:035-Z7<WDrf);B[/#YC6#'bY-(gqNBNX.`q[L[+>B!q:@9K9$_F%AQRhN%c*>^k\%lD9umk(D+WnD=Bk]W9_(*boeS,D#?k@gLi,B'&"MH1\/)=)@X)$#4jt:\gXm-`^)k;cW2jG[q[oLILlXO0nZI1*dAju/^"[ThH&c;&lKX&YWg<URT8[see1)\1Ph%QZF.X)S7ZUjRi7(n='I8dk+SSAQa&4s?Qh)fK:6Q?:_0G&o175)L[p`mS9*NKn508LE:i<Rpb51ki'^$jOj9$H6_;I@IY1R%_FIb*ZQg;m_<@.Flf()q"?$R"&1U'&47B`Gq.mmrZSc"!2SQBQBZ"$m]s"Z0ml='d;+Bf/Vh!)AKd_[e*(;k5]S&jUL]Tu-`B<*n)3odi"?uF)_FpK<G@%IN"-37[1$\MEUWpJs?(4Y+H@,=iKD#.b<t.[!6+,$R;c';!@?"2`f*a\G8DmZ[J/!MOf:8&1pf8>B\E#@tAI<1,k6J9'_-S\VNs^hQK5$`jkm%l9\r"iqoM4nQPRu9lCiMmdMde"m`8YN7K$7WBJPR(.LT*s?Umo.I505=[":]GAOYq?M;(@a-jSc0;$f4Rc!).ga4;V)VH)mMsM</d"e&/V&ke8!a8a*06a)Gsa%6]YF:PV*s:hQj96u'>a:4VkTd3VE0@Bd81/6b85ZmpY'M8l;KROuIUBDDSG%&9r')>mdX2.tpGr_`8p:?/9$:8<KWl0T,2/h4/?b585'ldb#[oL"fCSV;hP=nI?le7@F.kL$;J>?47cX'"MjNpO2M#>VHI)S?%mp+/IP8!6RB_:&tppd1$'!kUO9^60ba`obnfj.joDS*cDDiRlq0dA)M#o$s3Oio`M2OIY'Z./A;8oY8@N,%]UXKiXH2]gEk5$^a#qFIuu8B@(c)2!,J-mCDGQkDJUd?lO?C286d$`^f'aT:<qc)]qb4%Xk=N`)ZcnPbbl2QmdQ\I!$9^[C7@U%i;#b(20kON4q$)js#e,[2;=V^(omk!-SKJ0!bVJT\M"XHIkos_.n.;@Eo6ehH`*)K(%\kpD7mWY-O31eC4fW92V;'Z@AhjhU'P!ekg<&Lpq6uV`%YgLJlA3f)?Z^`s,0,H.sr;.643(iO\,bnH`#4&$b'_H^Z>:ZO(,Bpj^oplWsDBZdXDZ[?nPL3VF8.0&u^jDn1XQ(Oa7hXnUMh@I*aTLFgqlTn;"3(kc,M<TMUpP\#KH#!"qr>l"+[+0obU&]^Sl0j=!krb;B2<`Z]@_nD:[;T/\X?7(a@?JT("5nXQ%0,_iE&n+"^q*pU!iM!]m_rYS=mpqU'<4BXBE*2U$$)sGO8%_pM^tOCRL"8GT)TUA%Rt@o/cDlI,n^V9]cb>O/7B\4hJJ'_$`XZ<<<TYjT*$b@(fC@7nb)`86<g,q9,mk/5iJ'"Z`!:F'RT3pY&sN;h*^u."h?dNJqY.$I8jkC>n/=_m_b_%e`D@aVY`I0<^4FnCL_$5Sr_&nF59#XJ>^P)B(e.u-rH$$%W]hVT=-Y2\D's@I\3u+D6>QDCKR4V';,*t$-slAn=BXTU2p&(/0fFB2h@>Ces#bG8Ygus<0H,7<J@-"'[Yq=pY(Zq'-bQ^=eA[.S9E,0kZJl0oc@$-<Q'a1H51Bo0o^)2,n<]Yd1q&X.n@WWj.,=q.`d]erCE<~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2067
>>
stream
Gat=,=``=U&:WfGfXd9'P8Q^f$"!%AHKD@E2g/rdm7c=@MLm*W,U&A5SR_6J]AN^Q[Ugd+ND2#@HXO,RYY,07J#rJgB)o\A@If9VZXLEF`X.Fb$+ud3f+r.6H3&"JgBK=lKXngT@M[pRBB(MID4eEK88*buFVIJ![lB7V(ABrN\i</&73WkgB58"OBg'at*s=l"F,2D8GTlT+og:=cNqnWeN.iDlD8+KC1<.NDlKX2TC5ePmg1d=QZ.MDCE&MR(CE@d9_e#sO`H-urro$JMd,@$1'fqBY:$?Q/N?.Rp[o#?6@/oH:P;@H-qVq;C:X<Ep"k2X<i;H$j%Vuc^+OnefORK`7Ir3Sj>Pl@_%f=sljW^g3oX0>K(IFoV;AO&9M0pp`+h&p7krd(S,!R'Woq5aF-B*`:4icoXcS;XUs4SZ*kYXR["Q:N3gP8N;/JPF,q[[KO.XKPOE&G]%V9FL#2fg%lCBkBl%.p9Hhl>8fUKS]86*21>7bo2kc*L'8J@O.lYl!,6iTbj9`lr_Ym8@k\qPiU<KN$Hg3L.R]-sAhthk?8;e7&=ORoG^8cpBt'1f-=&0)$8aHeVF`S0fF]H]W);"Z$1AHIrrHFPK>^XTU&_!P&4/\k#^R[U*GXD4[e!#tT(J,):5:gk]E5gmJ(8AfI/5a(#-+"tucS_I0?8mVoY!2YLbR7c[F2_b0.^PUai=3s1/_>YAq.,0EMK9$!i\7#<+Vm>;Lu;5]P?"dDTEUsWj@m[D93oPZ/gU>%(6NK"O1AWFD%)3R"-JKLQuL0EUJ]=^SVCUPG0p$*;a5)2hW\%<H4B[^MIcP,tk,Kd]^jV]#X\D)^\Bb'H.DH+$hOl^]qY!fo,<T5JEac]no1.P&R<K8I]mUCXK7"K]F0$M9DP`On*#;0l339>[gj-R)^-kI!1cA%I^-50Bo@C3?VU6puJ4(4T`W>G^LA#Km]6DegT$)`YtXL?mCE(&KKMDgqqZq2S`RAT*,T4IriUih)uM?f.-'Xo/P;97`.c3h)oL&/;8D&ShQ'_Oa)+-LZbmWU%RDs9A:&kj47F-%\Z(9)O9FuY(>OKLE:iV?bIZ$mY8S/*5iP#(RTL_%Crkc=Ifra"J7L0'=deX;2ZOW0bP+0R7qEbk+"XB1?(RDO6gU4!4d%+F(OhNT%<o\J>9H(?^=7JBqU[Of(ZHQ8hb#2[*X##[#T0A7HLWLCZ5?gjKX_@W8j=L-MOeU0`kr:`;<+7<SUbd!Jf;4)@D2uISEb`387P9o'31<]/e4tXgU1#!4cek##i3ZRH$f*a\GT6f\6\iQg6MY!]AAhIr#'<S^8mCK$/:l87lGCm!gp>RIDB!-nL`H7flYleCf(7KdPmjiVVTmjWc2ZpXHE+VYYT;XPQ069A8A:k3-2BU<;7]2h_#n0OOkAi6rlf0l?\_R31nH9<7C!a45BA3PT/AHS`GONFGU5T?L_*K\\B$DX4_afCJi=ZTYGCGcn:thU:gf`%583=9heZr7KD%7qW<5qeHP,13-'VQPMrdW#rHURScmf@]WH9V9ch3/e'-PVo6SNRf.3uX3-^Ia+,>TN#B3#o0l8kG4+;MiUFqOZR@=psp&q=O8"(($r#=@;Q6cj'I>FSr(Pi,G4`*F7,R0ul3MC[9)9/?t.6]"#Y1)Co*&DD^_2Gh_Pei@DP+*g:<Jm@c2PA#q&cMO4UReq>AH\9b$L1UcZX`Z%KQl&;Z<3JALP1T]N<kE&nDYj]661(lX^mCEM.\dm*T2cZ;]\gk^ISD&CDd.0<codUE^g@mdF?sCoi*TmGULN\AtIZ8V)4LZ.;qep&CDf)RlWg\1%W4IuWN)b/A#eWm7ept_fJ]/XoBem^aj&,tVUnCs!'ZNJ@)@,$oY)b:qJVt_0QJ0[o9..@Z-Mi"?5]POQF4t?W,TFVF)Z_H<(3MbJ;4=4nbTsQkh]hEfE.XJ%6r)ZaC_*esg*RQp(7dgn[G1i7Kb-mt0<a]"YmGDP7@9N^++uH:TWs(1:$LV7*+3u.^c(9p:2';l8Ja94kad&+n$bm$5!qSc9AEWoGC"6;7rg'$GU6oWGS]8kLi@!Rc@PX1q[\;G~>endstream
endobj endobj
xref xref
0 33 0 19
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000122 00000 n 0000000122 00000 n
0000000229 00000 n 0000000229 00000 n
0000000341 00000 n 0000000341 00000 n
0000000456 00000 n 0000000418 00000 n
0000000661 00000 n 0000000523 00000 n
0000000866 00000 n 0000000728 00000 n
0000000971 00000 n 0000000933 00000 n
0000001176 00000 n 0000001138 00000 n
0000001381 00000 n 0000001343 00000 n
0000001587 00000 n 0000001549 00000 n
0000001793 00000 n 0000001619 00000 n
0000001999 00000 n 0000001908 00000 n
0000002205 00000 n 0000001993 00000 n
0000002411 00000 n 0000003665 00000 n
0000002617 00000 n 0000005218 00000 n
0000002823 00000 n 0000006427 00000 n
0000003029 00000 n 0000008391 00000 n
0000003099 00000 n
0000003380 00000 n
0000003518 00000 n
0000005514 00000 n
0000006000 00000 n
0000008054 00000 n
0000009887 00000 n
0000011858 00000 n
0000013620 00000 n
0000015307 00000 n
0000016993 00000 n
0000018970 00000 n
0000019625 00000 n
0000021427 00000 n
trailer trailer
<< <<
/ID /ID
[<4a95945443b3266c457c35d632c7f433><4a95945443b3266c457c35d632c7f433>] [<72c3ab2d07f22178abbf649f639f9ed7><72c3ab2d07f22178abbf649f639f9ed7>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 19 0 R /Info 12 0 R
/Root 18 0 R /Root 11 0 R
/Size 33 /Size 19
>> >>
startxref startxref
23586 9078
%%EOF %%EOF

View File

@@ -0,0 +1,441 @@
# Les 5 — Lesstof
## Next.js Basics — het React framework
**Vak:** Technical Foundations
**Vorige les:** Les 4 — TypeScript Fundamentals
**Volgende les:** Les 6 — Next.js QuickPoll deel 2
---
## Inhoud
1. [Waarom Next.js](#1-waarom-nextjs)
2. [App Router vs Pages Router](#2-app-router-vs-pages-router)
3. [Setup — eerste project](#3-setup--eerste-project)
4. [Folder-structuur](#4-folder-structuur)
5. [Pages + Layouts](#5-pages--layouts)
6. [Server Components vs Client Components](#6-server-components-vs-client-components)
7. [Routing — dynamic + nested](#7-routing--dynamic--nested)
8. [Data fetching basics](#8-data-fetching-basics)
9. [Styling met Tailwind](#9-styling-met-tailwind)
10. [Loading + Error states](#10-loading--error-states)
11. [QuickPoll — het project van deze les](#11-quickpoll--het-project-van-deze-les)
---
## 1. Waarom Next.js
React alleen is een UI-library — niet meer. Voor een echte website heb je nodig:
- Routing (welke URL → welke pagina)
- Server-side rendering (SEO + snelle first paint)
- API endpoints
- Image optimization, fonts, caching
- Deployment
**Next.js** voegt dit allemaal toe bovenop React. Standaard framework van Vercel.
### Waarom Next.js voor deze leerlijn
- Industrie-standaard sinds 2022
- Werkt naadloos met Vercel deploy (Les 15)
- Server Components + Client Components — modern paradigm
- TypeScript first-class
- AI tools (Cursor, v0) zijn geoptimaliseerd voor Next.js
Andere keuzes (Remix, Astro, SvelteKit) bestaan, maar Next.js is de breedst gebruikte.
---
## 2. App Router vs Pages Router
Next.js heeft twee router-systemen — historisch gegroeid:
### Pages Router (legacy, sinds 2016)
- `pages/` folder
- File = route. `pages/about.tsx``/about`
- `_app.tsx`, `_document.tsx`, `getServerSideProps`, ...
### App Router (sinds Next.js 13, default sinds 14)
- `app/` folder
- File = route. `app/about/page.tsx``/about`
- Server Components by default
- Layouts, nested routing, loading states als file
- React Server Components paradigm
**In deze leerlijn: App Router.** Alle nieuwe projecten = App Router.
---
## 3. Setup — eerste project
### Create
```bash
pnpm create next-app@latest quickpoll \
--typescript --tailwind --app --no-src-dir --import-alias "@/*"
cd quickpoll
pnpm dev
```
Open `localhost:3000` → werkt.
### Wat krijg je out-of-the-box
- TypeScript geconfigureerd
- Tailwind CSS v4
- ESLint
- Hot reloading
- File-based routing
- Optimized fonts (Geist)
---
## 4. Folder-structuur
```
quickpoll/
├── app/
│ ├── layout.tsx # Root layout — wraps every page
│ ├── page.tsx # Homepage (/)
│ ├── globals.css # Tailwind imports
│ ├── about/
│ │ └── page.tsx # /about
│ └── poll/
│ └── [id]/
│ └── page.tsx # /poll/123 (dynamic)
├── components/ # Herbruikbare components
├── lib/ # Utility code
├── public/ # Static files
├── next.config.ts
├── tsconfig.json
└── package.json
```
### File-conventies
| Filename | Wat |
|----------|-----|
| `page.tsx` | De pagina-component voor deze route |
| `layout.tsx` | Wraps children met persistent UI |
| `loading.tsx` | Loading state |
| `error.tsx` | Error boundary |
| `not-found.tsx` | 404 voor deze route |
| `route.ts` | API endpoint |
---
## 5. Pages + Layouts
### Page
```tsx
// app/about/page.tsx
export default function AboutPage() {
return <h1>About us</h1>;
}
```
### Layout
```tsx
// app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="nl">
<body>
<nav>...</nav>
{children}
<footer>...</footer>
</body>
</html>
);
}
```
Layouts zijn **persistent** — niet ge-remount tussen pagina-navigaties. State blijft.
### Nested layouts
```
app/
├── layout.tsx # Root — alle pagina's
├── (marketing)/
│ ├── layout.tsx # Layout voor marketing pages
│ ├── page.tsx
│ └── about/page.tsx
└── dashboard/
├── layout.tsx # Layout voor dashboard
└── page.tsx
```
`(marketing)` = "route group" — geen URL-segment, alleen voor file-organisatie.
---
## 6. Server Components vs Client Components
App Router's grootste paradigm-shift.
### Server Component (default)
```tsx
// app/page.tsx — runt op de server
export default async function Home() {
const data = await fetch("https://api.example.com/posts").then(r => r.json());
return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}
```
- Draait alleen op server
- Geen `useState`, geen `useEffect`, geen browser-APIs
- Mag `async` zijn — `await` data fetching direct
- Geen JavaScript naar client (kleinere bundle)
### Client Component
```tsx
// components/Counter.tsx
"use client";
import { useState } from "react";
export function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
```
- `"use client"` directive bovenaan
- Gewoon React — hooks, events, state
- Wordt JavaScript naar browser
### Wanneer welke
| | Server | Client |
|---|--------|--------|
| Data fetching | ✓ | (kan, niet ideaal) |
| Hooks (useState, etc.) | ✗ | ✓ |
| Event handlers (onClick) | ✗ | ✓ |
| Browser APIs (localStorage) | ✗ | ✓ |
| SEO content | ✓ | (werkt, minder ideaal) |
**Vuistregel:** Server by default. `"use client"` alleen als nodig.
---
## 7. Routing — dynamic + nested
### Static route
```
app/about/page.tsx → /about
```
### Dynamic route
```
app/poll/[id]/page.tsx → /poll/abc-123
```
In de component:
```tsx
export default async function Poll({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
return <div>Poll {id}</div>;
}
```
Vanaf Next.js 16: `params` is een Promise (was object).
### Catch-all routes
```
app/docs/[...slug]/page.tsx → /docs/a/b/c
```
`params.slug` = `["a", "b", "c"]`.
### Link tussen pages
```tsx
import Link from "next/link";
<Link href="/about">About</Link>
<Link href={`/poll/${id}`}>Bekijk poll</Link>
```
`Link` = client-side navigatie (geen full page reload).
---
## 8. Data fetching basics
### In Server Component
```tsx
async function getPolls() {
const res = await fetch("https://api.example.com/polls", {
next: { revalidate: 60 }, // cache 60 sec
});
return res.json();
}
export default async function Home() {
const polls = await getPolls();
return <PollList polls={polls} />;
}
```
### Cache opties
```tsx
fetch(url, { cache: "force-cache" }) // permanent (default)
fetch(url, { next: { revalidate: 60 } }) // ISR — herval na 60s
fetch(url, { cache: "no-store" }) // nooit cachen (live)
```
### In Client Component
```tsx
"use client";
import { useEffect, useState } from "react";
export function Live() {
const [data, setData] = useState(null);
useEffect(() => {
fetch("/api/data").then(r => r.json()).then(setData);
}, []);
return data ? <p>{data.value}</p> : <p>Loading...</p>;
}
```
Voor interactiviteit. Of via TanStack Query (komt later).
---
## 9. Styling met Tailwind
Tailwind = utility-first CSS framework. Class per CSS-property.
### Basics
```tsx
<div className="flex items-center gap-4 p-4 bg-white rounded-lg shadow">
<h2 className="text-2xl font-bold text-gray-900">Hello</h2>
<p className="text-sm text-gray-500">World</p>
</div>
```
### Responsive
```tsx
<div className="text-sm md:text-base lg:text-lg">
```
- Default = mobile
- `md:` = tablet+ (768px+)
- `lg:` = desktop+ (1024px+)
### Hover, focus, dark
```tsx
<button className="bg-blue-500 hover:bg-blue-600 focus:ring-2 dark:bg-blue-700">
```
### Wanneer custom CSS
99% niet nodig. Bij echt aparte animations, complexe selectors → CSS module.
---
## 10. Loading + Error states
### loading.tsx
```tsx
// app/poll/[id]/loading.tsx
export default function Loading() {
return <div className="animate-pulse">Loading poll...</div>;
}
```
Toont automatisch wanneer page-component nog `await` is.
### error.tsx
```tsx
"use client";
export default function Error({ error, reset }: {
error: Error;
reset: () => void;
}) {
return (
<div>
<h2>Oops: {error.message}</h2>
<button onClick={reset}>Probeer opnieuw</button>
</div>
);
}
```
Vangt errors in deze route subtree.
### not-found.tsx
```tsx
export default function NotFound() {
return <h1>404 Pagina niet gevonden</h1>;
}
```
Custom 404 voor deze route. Trigger met `notFound()` helper.
---
## 11. QuickPoll — het project van deze les
We bouwen **QuickPoll** — een mini-app voor snelle peilingen. Stack: Next.js + TypeScript + Tailwind.
### Wat we deze les bouwen (Part 1)
- Setup van het project
- Homepage met form om nieuwe poll te maken
- Hardcoded poll-data in een TS-file (in-memory)
- Detail-pagina voor een poll
- Voting werkt via button-click (lokaal in state)
### Volgende les (Les 6 — Part 2)
- Server actions voor vote submission
- Loading + error states
- Polish van de UI
- Setup voor database (komt in Les 7)
### Architectuur
```
app/
├── page.tsx # Homepage — lijst polls + create form
├── poll/
│ └── [id]/
│ └── page.tsx # Detail page met voting
├── components/
│ ├── PollForm.tsx # Client — create poll form
│ └── VoteForm.tsx # Client — stemmen
└── lib/
└── data.ts # In-memory poll store
```
In Les 7 vervangen we `lib/data.ts` door echte Supabase queries — en QuickPoll wordt productie-ready.
---
## Bronnen
- **Next.js docs:** https://nextjs.org/docs
- **App Router intro:** https://nextjs.org/docs/app/getting-started
- **Server Components:** https://nextjs.org/docs/app/getting-started/server-and-client-components
- **Tailwind v4 docs:** https://tailwindcss.com/docs
- **Next.js Learn (interactief):** https://nextjs.org/learn
- **shadcn/ui (component library):** https://ui.shadcn.com

View File

@@ -0,0 +1,263 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R /F5 8 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
9 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
17 0 obj
<<
/PageMode /UseNone /Pages 19 0 R /Type /Catalog
>>
endobj
18 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
19 0 obj
<<
/Count 10 /Kids [ 5 0 R 7 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R ] /Type /Pages
>>
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1889
>>
stream
GauHLh/f>L&:`lHfU9J75,:OIK]q0=V9M]2GF/*-%o",OQ5pSH"E;fE?f)U8J=W&PS6O`X)sqBaJ#hDU8doN`Zhcae!PFo<RpuY]_e]@tV(TteiT&.n[3ujHG<MUZ[%2^L%35=u@VM[s#q>ut0T`_=V=0!d)3lt=^i>t71EQr-MjG1]l3l@5/l9YP+iU5P%MbM/C6s65"M=7EqkQ,'TVA\$bqpLVL)d8qeOjshC,=31@((Z^5<aKWJ`!f1.\j$q9AjScW9C75$dO0FHNG;=SP$1m'e`s<%C;C)5u4F0,XN(A[a7rQQ;t@I69^1J3":H3"FNKGDBoMEQmE_ArP3L$o7QJ="O:4SY4!7#g5t5[5e/I'V<;V;*SrpeLog<$0o+JSa7S/)9MicB!OU8l$Og+;X<!/!*]^JDAaP<08[CKiO_(:*$%=i2c&WpbLpO68>ZAkAj:5Y^(`6!g+qhS/3:,EdOcD*lfXXdpBm[/'c@^kP<S!1Dm-R/u]cF@>Bm-E@Vm1#G*q^A6X97T_m]caJA!9acD;tQ>1$T<22))7ZP8h3^`I):3_]A6o7,.Ef:$@1A!k4$GmD,pk!NYO;1FP,R!G>TN:,;K<7B]@/(RB&?)X1>'Jhn-2'eG5]V=(\Lk(ah+_L5]c0LP[FD.\.3DAd=D]-_HdJYq,.ft8nGS,"s%dS)qpk-J>S0X<MFmEnBo>mZS+Kf?ba);VbO^d-<X(b;(mbFW,[9&h<ni&Fr=o<=+Y[+q\jA&Fl@iVg>9fB&&jN"s*[@S[/UAGe:YB?=&JEs7C=K4#;lSI`S*m$Di7h0dM2"A=&<!Ipp8bDt^CE'4^j/r=ke'=]'8la.(]2oW,\E:CTE!"r>Bk6*.-Z1u-1*eB9X!cPPf19#gCGb%KSDX#,_kDgd31*E9!gPE['.H4oW7J[Y(04!V]fgDpfUE[u637brI.]pSK.<2sm]IV>[c=SZ^;U[5K>cHe@`HpT#2o)O82rMB-jPmo`_dE_Vj_iJ#DV_1/'36LF<OSLf26*cl*;bUgkNIeXS!EA'cd&FeN7#<s\ouQmoMdt([Jp"Y%#\p*c'&$REV'V`p[o@pEU:9LGd1=3[Nb8b#l+aZ4]TfqpbpIW/6c2UJ@e^'Jf(`S=ek((b]?\3cfD5S\Y_=3_pH@gTK?YVMi#g,<OL+HZ7Aq>Q%HZiY#SG8j:3UrR1M_0%;?ZdHP"Ql(sq\=d)T9Ea0dJ!@NAJ7FhPpM=mV(W_rM&Rl&C89-c.]kr!H3:#7T0EF1ioH8Rf\o0cm2OM(ojF(8l4RggSpNcW5=WipKe2%"=heppW2\TaM9@btFdS=D)\SoC`@n?#l<Ak)]#Qe68a8<h(d:9$\U-E"tk["0'-?SngRcFm24.65hU&L,t.g0XXT75X)T?I0ckb(937p2#b\p&>K8!JmD2D2ABUKK4#3g_h&J.Vj=RYl64P/=*QouKlM,TVtK<Z=MJSX5mjS0aro?S<&/'Hks6Yj4jCjS7f*NV(.D7h=bW+rXb][a6c<8&dtj\,,!HFn0hp7f]Nnas*l=D[([f-SHfa^=X'If;O^$)$,<$de\_3ecEY?VgOsf(jpDCiZT\T:[h@?"YG0BB]*B'[sh-^0V"Mf]G;ZA<"R_+M48X)gj/j]Mb4X!CE=bObHEH`=r^K9(Z;#$>bZtUS0gSj%:?'[5E?E$T-<fgqbGe*iFgE$k,Xpt)VB-.YUlf4lfon*#=?6^KA>ZORAk[qRi\l["5K!/gbS)^3K@g;\GcIoFqJ=2kX=0TT1/,qhh9Y:rm*=40)4:W2(:g=k3S:CHiorCb$`Z?[?Co@qbS.9blh0mRuO*BmFdH;0.R!FEgp1LSq/p@4!,a3bKXKXR:/?e&5r4Tg'Gn#Z?6+r"$XBUHC2&*-A!EuJT%f~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1827
>>
stream
Gb!;dD0+Dj&H9tYfXXdl%hqU$h`B5Sk0iR#juV+\E:"HR3fYeJ'4JGW+JHRLei).j"<*FuOoko)=k\;t7F*Sq5k3+!ms#3/`t/a<0jkuU@pjlo(qtbiLV<.>_EI;p(Pi`$-fdNZVgO&`oJ1AKie9L*&5\u%^&Sa!&d2VC*7t!Mo>*s7^[*Zt^.8,e!"#%Y"l@7FLNo>aC-c+N$eNu`nHC5OOEaE?#daN'0V#tF7Q"'a5q$f&(PYjJpufP]'DP3rA.bGLXl*Q%A:/9'`46CK-h(0^V:)n2049#*_j@3ON_n[<BS,F)'`),OL"53eaN%tWAeFNmJ5>CF%9U?^8`3KtT#\mYH<aZN`ILuDi(X>Tld;^)MB*l)!2^l2LkkHo8n8[dK+[_R)[O%m*Ca;R!nOB'qQiUK].*WZb`uL.AS*kXHs5"[nWc$eh-+`5.]GkGAoo/(;!#)2(Ib1&7<8HM/LM<se3]sqS48VBX!O;#\]f.*T4J^@!iIs!Osi'lN(l-o=5$or4NcT?1pL"jX-XakR)g<7K[k'Es4n_4;>DiCI.nA,kUA&764:/O7/i:@UbjR7aL8s"'$CaKr=[9iO-a"OY.[a!,YMa'25qQ0:"5%W9+'UAo;ua0oZlLMf':u4[]e+a>0*Ed;-FbiQ$/RIQiQ6&Jl,)r^td=q*JQVkiu-S9g<7iAC$*jZZ(C)=6^B.YG;rVP??O:<17d\uRLJc.6qKG-m]`208#/S"0>!!t>b8q^bq4lQ;qOC;U8$:OdrT/J/=73R-jK"qG\.;"qCnhB([qN`$78[62P!;e/WdT-R`i9AIAas?qV<p;0>7kD8&D*mrK&>HcZ5I\pYcB,7/,XS9>-U?V\Tl:8L0NKlN:1E"sp&KmQENc;C7)dK?h[l]sR>?28Sr6EJ3M@Y]$/L75Noj+nh?9=%s70c/]"fEi`o"AoV2&Mm<RRHgCPj@&<c*PeC>7En.^b@gi!&8hcOe6*Vi>`%I_>alb+]81)<a$iN%>>,KEBT0j:k%50lC[!&!l\Y/"/MAQ5gHn]IDY;X@"YV)S3MX+41o(Ft6gt"sVV1T7:\u;l7ac83()X?-r)S=8$GH$bp]$<tN9+tB%=;i6OiDX3DlO=@U#FmZeh"B6q/tZr.W+A1DVVa0g^.!<rRrA-B[XLkk4=cp$]1nng>PA5tBd,b[SStn*I3<'aEOQ\l#J9M572[+H*?EWtZ/Rk-oW^<5URAD\$=VpH"N!NP56?+fmX3>+_&TujI69r6r_)LN1qVK"LF&'F&VL!7qu3q@C(EJ6o!50)n"U%UVs$L&D59k*6qO^V+-aeF/_L92\[:":7+`uM0peJ3-.p\tlI5qpA%D7sg/b*5I^ee$o??AC]6Q%"Wm_$5NW"'sE!'aPS6\_-NP:LZ`Q%QC`gWIC.!J#k#en!MkM0bu4LD#1#l<3!o"'0;,;HH(d!lOjKl.^KK8STlOdNe*d)hgCoG:L?7Tnq0BRae6PfLI#!J58,a$Z6fK^[M_`Qae8M1Cm"gS*alfcsHm^H3(0k/=rVQ;;nj\Y9_E)@K-XrT\41(@JNjU]s+@Jtgs<e\eF1kWG`E0\YfLZ'GWs%CF*c>i/`6?H0\M??Il,^/nTjJ?\T.-,HkrkQIm7bd[np-(a-%ea[^Pj\pu9-m8UsgAr(c2l\,C$f>T2I$ncH?o5In8:)Z1EJX(&?Aeq'%.#1)7=AEl2c6TXYg(!WP`FXh*Y]qB,cSVL'Nr5E?Bmt`r:]:Bj_qbREK!M8Z<ujRP8<9JAZO_.kX<_**4%S,=`+@Ld%>Kp\(:Kg3O6SL.98Kie@@3u.u.%!n5=a9T)5Y=&+oi'OE0FQ~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1745
>>
stream
GauHL>BcQ-%"@rScoHMo]>kRsQlD+BD:<)m:2b-]&"@tiGjLN"Dulk2J,O*d%+mE\c>FXaE=A#E:DtBjL4Y16lMa7GJD[8DE_:m<R*L8'_I7a#YG\/!,Jk^)>QF<%k6DDdi7f?p(S_[t,Via."mmb5'aLljd5oXi:erO?+?)!(0qpptoT\K'1_ip3TCdOU)+/(4KTs<UIa(YmH3'-c4/?#md25L&g8W)lc\Y/G&hmV.ptbh^cJWQJ0L^)SAI3`:Et_iGE64K!QY5g1gmKElRJ]'=Dd`FY!d'BAWR1mK[Z-lJU+!?nA`Q4gLslq5Ne*6._2SW?C0Jbm6jo&cjDBE](!td_D4`rK(@^D7`lK`p[Qta[#tqeQj-p5-(s(:i,b%TPCGWND^2ME_&o$>MWU:>fh!GI"-%kB"=Ha(2I1;PK(&.^gki#k$FQkZsUe:<CoI1B:C>-LUlJ5s?DB#5)YKTG"a/]gg-Hab^]NF@:jKi/\%>l7RXVU4V\&(-#(8it`j5L..p]JeIGs#_CXFm$gI;p=+jT@^AqKP32=9nZk2Cl%%-!<3ce&;El0^j7hZrdRDEZ-<-35WPV+NIA8i6N"kH'1,T=(T%'J"SUh/1h7>*5=4J;-lHd$1QsbE)W\]on^qjYkWPKK]8!,j's7%=L`h".__FgBpQt:4t4X%*L5r5hA_o<JBsJgOsNAl7g"U=[e["<fM4NFekDIHlN&P,>cF_r2qO3)f:GuY0/]k:&s%C>HUVj`U/B\70igVN(JMEl(f>j&2(R\q7gg]o0PIV^WV/t?U-r_O\a?fE]G<$7VPRK=]U!?8hg3cN)i_!jDBuKj9tTEs\D6V1Y5;L;aT<(t]#=9i6sr\oli4PVUYAe7,U`HoL.4a++p)$tWS#3.VePGGIpt*dE4$T>/\0&W*n,Ol!U;`OO@d<9/.&+'^-hkj$pJ6)ql1Uc!;%iR<s@M%Q/BJ/>aPQc!Z0>rNPD'u-.CsnftYdt`a6^&E3`IXp/0pb9%.8QHBD`>@8`2c-lT*[duTir/2)n^Z:pHIa^`7H]Y_&u8lD[FVnE$_G/#XaT#$9TBYYce&1YXrnohOU"?tDErpnL`#+icsms+QP!$eTE^>RZ<T#0]*XP.7(-$2GJbf9s8G+XN43#[+UAO&6,RN5Y-UC86ceDPRkdc$7p`T1+r3ki97EVnGs4j66#/'"mAK39Ji<>WAXn[XUB\@b<5Z[l#u"d-OI#:$G'=%OD!Jj4mG1+_Gkju?0I3:6SG\&7QOkgXu58[Y`H6]kq>O4`KGK0dYS7^snQFPo0\57\64(u<p4h*K[XmEqSppAXBoJK+=1]/r^1G\`Rj%LX[38I,0e@j0?c\fDS738nb8Ja/ZHa`+siL'73t#i420gh>[/B#o!8T3td+6+_NJ;Zh3r?8&dccXpCg3Gdq2TGs-N`+bPHlWMQ?bd\o!k<U?l-1!Oqh:%qQ!PE0A*,hkB&7-sfb1J`pVr=GNG]9!\3R#\Xj*$YMb[!ka-JBni#d[S,i[2t73_j:t8RZ=*=IHh;I@`n-I+AP$Bn]W*gE-Gu/"BZJ:gek?ogZGX1H'NMjc;*$Mnc^[JE'-\$hO6ZgJqGuVcc$J>L>snY>r*Q+1iNCH9.2Fg=hptKO90f"-_#2g%KuWXWr>TmgW;JCp6)=%&PlUh0H6E&d"]^N/3"&9gr0m:Q,1?^d\;&SGE96SFu?sWK4BAY@Xn&+RFMri%`^[%D3hW"P=FX)k=N&hCY`]qA8&&7l^~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1542
>>
stream
Gb!#\hf%7-&:W5<EC_1O'FQKj'M3F]J?E+\!^X8+m[j?NfX._RQ<Zukg'.<0GLUQ-Y2qQ92`n5hRePY.mc/MM.6.+"jl_"#nC&'uk7f=skn5Bl*2XPAbLCiV&LNn+*Y;C5Y0VXnY'E;K=p]G*#bUo,PTu$J*4V_2.:3*C4"7.^9Z-FT7=e"g8B$-.l3Sb#Z$2%4$sdr6$/n+UYN&P.4J.Ej3Xi@k6SP#rlUA4[/gh/%U^,@+fU'AOobN!N6_2P)Bc=n$,1H-`!Ah_@]RC5QlWYC-)kA"eoEM0GN.W0"(CHKOj:LrMkBW1B/!/Y@0M2E)4b,aNK+3E?F]d('7!T9_baSaa.\RBV__jHiNPilKa\c1dAWgGr:He3Ve"cCP/.;-17m\6]$S4hqXU8hN@UTEHo5NK?[DeuDMV4$/(0?MNm"X5O$fZ+qp.&(<B5Vju,`u&N]S(%>I,ZqbZDRbj[%>c:d#K5JpCLPRVc<,#VZV!$?ZXETJr0#kNO?4`<n#mMXd)mAf=\.n9[5ZnAb%RH2$\Ic17fp.^c`lHWChb9-4juOPMeLX(6]1CM\PuBh$e)C?'c[$=Cn[#CsoD8KjFu<\:E[!R28_h^hX$cMEeF[a)JL0O^Y!/Ft+()[oBWW&ia1EZP!JNq<8#(Ib^"4>RedQ(rpVP[u>Yba"N%*)!*a#\OjI'h>a).'P$]f,Pir]-5%eJ8I[WoU70S$d#Js/[gt(6gC^=cF#m[cRH9[bRaRsV>ZPU0ifknO9>U@#r$kF!Wq8+E%d'f??=Z*Jqj5Ym]n@mVbR7<t?D\)>pZ("Z;FqkmpquJQZU_):9Y"#aapN+f'^HUq+:2Bq-1TC9aR4%&jhC$(&`>]UHlOk.p:)0aXjWW2@1q@e&OK5?k%6gXl65=_YlVXGPJ@"n`h"Hq3?<EQ@UX@Z"]4+FLZo1UNA3G$m/nN5XA$c,X<*2Rm.af-)J?@@R.i\LMj=UGngNUe/OW_>Q\CEZjmZ&fP<eB3Pe(n0N<bM,apXaSof!>5>obP\8/Dj&P>&1/D,NX(c#_YLS+=dCJink+TSR\bi6NSq1gJ)Kc*AJPWp0A/Db6!gl:[*e=?n/7q7(A*.?lQRr=9S]$d1N-"3"l^G<F4='\fJ7Ue\1aO]&HRLJG+D&Z5_P3a^cKZ24l?jSEi7R[e^l%sF*]2,PIj[\<!gd(Q$9H<tSOLgs^HpN_4trd@WT1OC-QJ*S:N_V+J#9)BO;_o_(H5dQ:hPFH2]aTC7pBa/Fu-9ZZ#2gogtiiiqT\b:.EM<"EcoCNhZ=TnQc3XrC6#^mb9S0ssu)p.'@m-EZ`OjW"%NJG8<\G,Y^^8hbS[cSsnmM-^Q\8Vm#?8b<=@Y>YHh7K_GP?`lYm#aMs)M2I1HBqF0:XUd&Osi7`n:7[^HB!=8"R=Hb>Q"E&+G7Xk[Ome0<Nn4f[_ScAZWj!:Rrl>8'3md4[lM*X,J<CQNlOl5TNcVSh:\BhXB+Ge?Z.j$_O0*EH#D'"(>,dpk#npE_Y$L7M@M[%:endYM;_lL:q,b?"DV[nOb!*Xq1V>H~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1994
>>
stream
Gb!;d=``=U&:WfGf^Y/q3Y2<u?lFA=:$`j`2M]iDU$;_R5r*;7<(P)jlg]Jn!^&m,4u.$@M^#h/p:t/3"";gs:!MR/%.II3\jmG_KAI0<93g\oLVo_Vbp(AEJa3>V\F"qX8Ef7ja@B8<Sko9GKbV$;&0A@>E_8;%3A?s>">kX6_XNCNJHW\-E#/eXT$RA3q$up46e*gZHp:l+?eNK-Gp2].ld3lH#Jj5g<_bNNN_=3R"Wm<Ud.u_>QacH2)p'9bc*@KO<4Rr_(%`@Oi5JoF,qiel9k:sG]eek8d0a'MY0YK!5F;\(08i/._\2%*(r`HSY6FD%,?Q2cX>7u>:LW1n(jV$9Rta+]Vg4S:f&<kfSqMAK*l?QMK:iWi1R;,q\+R\m:_S>NfWH7%7sHU!=j:%[lDWI/JZ@i$kr?n>)OrmS:h)dIJl&e?`1eO8]_-2i#%l2'7@$(m-Gc%genY3.S(Yj'3jhX&l0iZ']14K,-=:W,X,L^D=@bbJR1EUh4P+SO=g)]Z`+7;eLlis_pg1+-5"uc&',X7gA:Cd9"):*Q,JFh1K."E0Z<ZA4TpR/66ueJ]0V##&MR+#'D(PRTr[qGo7W]U_3/j,a!)]$tLaeR=I1V_h<\Taf3ph-7:6h7^camC:M2D-_`fifR-l[@X=eU_Dr[q'G1@9:+fKXnVS/#2,p%NZ[h/!)/A^^IX1*DouR]#Y&RN,RJ1WWZlqONHII@eAr0!FuP-R9bg*8j3'.Zl[9]1ICsho-s<g7k]uC1T>>2G:B3^!LXTb;[U&s/srqF29a@^m]:Dcf^*\:>&IZ>.3+OChQW=Lt.li"EsVu#j+fs)sL2Y;9ETG(R.."_!*uVX'Fl-'hKT\W\\TCrT<cmE;8HR<U3fm/7E/Y[+pD]C[I$Gf,M(2kY)A0XFubeGWi=<#GX09LVogEe/J.H4M/O64alkjD6Y6fb^R3<e[k/cXl%*2aa6rT(-RG&ij6"n=%i+q6nHHLqI/YYS;ptgkB/c9`9Iq%Fg'&!o'2dU&B@Wh:DBTkj:EWB`8]VAS0p'e-'EtGBf\dqIs9"n:CH;AmFZ3^A$h,Z%PL#t#J`2dRL[hm=k`I&)c*aR5HPAaUE*PP`nKJQ4W0pB,E@E+/8:10m]#kYi08tm:h)dIU<,[ldZB#l`1DP51L6&8#!rPL6LNE8+K?6Xke>9&#0:&uK$EZjA)h5l@5)l/<)m)2Z_d'b+`Uf5R@+kP%<8n4\h_,3%.e9D41Q'Q<ie3Y\J%nU\4PfM^$3XGOTsIUQDG#>hoJf4?htf?^6IYgWYAX'V7;_`oDNH7+7bFq9tt31_Cn0:D&cfM2e3rj]H>9Y*+Z/DcFah^pplj#];k8*drr9CQsLA3?nonY,hCZ@-gS$]mMqQ2k1"%WZ-!Q6#Jfq?&+IMm4!/ORTdKfghY8tO#AU4u<\3M/S^?n?/)q`&$,;?SPqn+fR@LIAD6qo_4f<VTV1Ymg$"g=+.<CtOL8l=4),->21*kAY&*V6SZ^MX*>Ccm"%pYH>`FYNe11c4mQCZSnpc-DtpB0\jQrt9W&tS%la'=B'VFNP]-)YG`0:'IoK1U63:\(M[7T\oH)-P8L*dMV`NmlLWf'!>(/'UTo7Ci_<//?)*.7>r3%HjhSjX%_^>of#*f'NkRKo3s_BoUs1lp\75]:$>NjEA7Q>$r=0e9)3qKkA34p7uH$>?rZ?5L>,7+LcKei`3aY[0uU5%in3H80l5*bJd"ioqI+aTGOXpDX0_nDR74kROtN7mBasrn-<KO=QTFVbg2E=NT5,2!F1cY])9:[h_QhRa@@8PZRk%;@kMIU<aPS!g*.SC2MH68.o#jtJ`HDtKSCNSW:/tC^01M4%^j)!ike_.QS6gt:q7RfjOk/a.B=AW>h/RgAEg&*OnViL0Hqqgbm*]oCd5V,)oOGQ[Ec(^&\'uVn=,_YDS0-*jT>RVZ`2BnH,F(q=/d%W&TZi0(.o'S@4l`VQ8K1fn@CHNnf05bm-e?\$^nSiTE~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1360
>>
stream
Gb"/&?#SIU'ReT:\1mX7'FR?-&kRA/J[S_.!'ur[?=2[nV.J@],"o'aV^W&SpQ>=C8%dK,LBZ=B)l?/ik?d"l/e:YVlSg9,K,MJ:51ip>#_i6pLl5O%hn[Qdl`5^fUYPMB3<D9+"lqc-"mNs__./;se0c@m7tSA2$A*s#"]2mmF2B)#0RdLD5b)78>X3mc9X&0q*Q0AVVHr7;k3oIVr"I(5+0isMm:Q1A@!W$V2V"H]0#GQe*qX*lrqO[7C\Wub<#//k,_FqF<!C_j#*a.QHOZ>,;+8T3V.\/iL]/6&?j"ni6>qGFD9s5eAU-$`6#Pd0N$Y\;J7!F%CBR*W[lD4Fo5uU9R=tnn51AJ)g+pl!4I2!TU7NG#@:m'?Q_A99,0L_R/6i]CnRi->QuA"@H;7j*@h((UlCN_RRK>@H_k8`aTCk7o6l&'nLggWKCTtV^/A*kSkt^8-[:J[fqD#4O<l#@=/e_r+\_n8t`(3k<hFN?]HqGf&>*B4PTA+CR/96(i-OStg',5/bYFKI.p4.IjqJ!uB)bPoRq.#"7q9oL6b(A8_[lK<<QF3@YQ/QsrZo!((4dNE.J5k9'>DDmAFr57)k5A)H^R%"Q,`:s#E:ir_q@kW((n;9)*+TWn9e+CB$g$PIBVTd-bHn`5FWJ@j6'0=Q8Z^paF-ntZUWmfKqSZe^EPah^P<R4OK,=A]JoagaC-60!%%!DX_l./MYJK_^eiuh]f0dabgX&SVc'(!9ko.`6P_72o`rV,8EKGrI%(DZ[KD#r?16o0S<ZS-24)gZ9ZS5>6-%r$'A9f*5'3Op82)p6MI[-oRE#ce:8kT[['.(qE0K?:g$]s7VQrdmKH5VP($lL@oJ5VXcdMTQjn?HV2LLiGKF`#Sj!45mKX$a;R;-]=Xl^i,FMdTg))oVpH:GS5Gpo'd)FIrSB*GEU'SD>eV?B*MQD$Vpo.^#NVKD%6l5r-)S5s@7qLF^UAl.YCN<8kO7KB]qrnL\i+42SMNO9tBVQhS6f(IguXflm^q/6Y_B'Sc`_g-[q]7":P\3ghYKhq^g&P2(c+cPV-$X;()+ZLoHLL?:""IGS7L%-oWSqg'1HDo28MnjSl/.Q!8OK(b3?dGcq\lFd/#a]^YSA?Er+=<EsXMY3*I8%RS=+9e7oFJSJL$Tlg:NA"Js-,%iUCRVDCId%lV4W?r80BIoT#:!\b<kW_B+hW:)1\Mf35Q)#d/,K5+8i7CXP\:V^qF5\#L&-B;bK"QGo?aG``/)leTf'[9L0!:^Oe\\)M$f91k7h7jTAYiD_MeHh[s#i]+tik\e+.*#&7!@__H:LY1Dc@Nbei:o;PqssFQ0*[6sl");sC&LiI-,ChJiOs5600CbA.~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1820
>>
stream
Gb!#\gN)%,&:N/3m-%$d=:i7U8@l)fNK[$uj2oP\q@Mb>Tcf0u8Z3oqbBWsR?'#ak.ZU>^SM[pF`!Y.&/9]?BRK:Ad/,r'f^sa`k?8,b&9GbJaikY0fSkj]_pP?d?cZ+Ng5.(J#87:a"jNCj6/gicc!X:j]M!m@^pl+usi.HaL4HFcL$WoOU0d%O8T'l[LREL$XeU!^(b<jYfEB+PQf@U#tg:`%+g,jD_qOfU6_<O`4XgUSFF$1>:.1BOrIX_h\j\cf?9$.;9<4Rfc$>,Uc_&qk09O*EBY!mdBe'B^rU(+Jo3o%b-E3H>7655-:Mb;*\E#E:3GV');0nNU=goB1N"%HN#@i2%*_C,dOL<!Q"0^J6#0V64';'&!VF$-W5XcXnma/=5l,;SfPKK@Uu9Dn1IW+TYbAV@WI.odITNNqY)Cm?g.XX4nrN!*-<K;?PDkPMBRBqpVF[\=g[S4R[-I')!Z]4l/XhPsZ>Oa^BP4aQ'P;!'8SI[q(Q!t.Y-0oKO:q]t[@;k@&mgh%-L2HchbRDDe"2_ms^fjJt+G7Pe.dDJ(54W9Q2!$[gG$F@'h;[BSE=M[>&BJgb$=%]TQPL1d`a$e^9krKD%P3HY^/bP2!g7^--gi[?n!1C>o-ZFjLY/2HULJ"':Vf7+oUCfn&Zk@[eM!/il!M4r`pfkH+Z_QD!?[rGkQYBVTaG&@/RGK[o>f]ToCl\W=&BF<hX&O'<pfuE$97lE=hk&r>K\N)*.MOgWR4FY_7CYo'm%!E8R>O@,e[C<I>F+/,eafN[\[I]4c]0TY+cT^^OH&r(Mg2;toWGj^_e?>Gh=eE!^P>[?gBLXh[TNd_]@SZ5;CL"&oKjd@=\<6K%F3+tP%tejU1<p`b7:BbK#KBnB*^U`A(58RRHkN$iQL/I)q:(1#=bHXbR=oO)$t/EdDja5`j8F[esNec'?$.C$r3J1OEi++jf#?j*U4I#"nGk9Ag0V!)q:]?48Ou5mMc!=1`<'%nbhr`7?8s]j"*HMjKpm/nK6Us-AP.)H$=bG`CrlTgN$n\gJ$TWdFmQt8^(J(`'7Ehk8Bd9Yn$>m9\30tH[cd`bX-dK^&Pj)QlQb#"ME1u362;oqFt&Lf[Zdp/(dJ:Y$a>)\q7&;2Tf]ClXtDFD)Uj$$3="L@f8HOggTA*/LflnE;fCI6:C*@hd.c`">#-n/lUus,)l5qD3ORBN*PtH@Cuu=jp*SHLR#?-pAo%g4N8^74i<bMaF2fkbQc`I8bOoHS%hh$#mbjQI6*qcF/r%&\rO8UP]!6cg:R@NLa]@gfc\o3Emo^ZH0tQ:?["IO)lX>is!>'ga5D.YY:"PjQ6<t[`;OqfT"p2K?H@(,B1kRIQMm.lDZu/P$iQ:oe`RkOL%Ra48%TD,hFj8(S10S1DT5b_'!WYMH3%)e#h(KFPE3GngPs9m&O=+P<'c,HOCP6`".=jWl?\Jo4aVDTT(R9DUCW`_ST"\=j\qgPm3EfnWGWB.0r..0mr<@gBCc5<[-Wedh\Eo.)-nU>:1A?->f8YRdFmV-Q@5-XCRKYqa9#dIB[5-m%+i%=]Mu?F`/k.n&H*.Z4Um</3hVIB%%k?brrq+9mLcW*fbOU.>od8I08<*0a6H79"!c1rA-Rd=N.a+3BOg?U'2TY:`q/s4q$2!&'rK8jJ!#O+^nOM\@3fr[_D5@,*RN\>bMi+$ItM!DZFQ>5P9gpDE%\?kPOF+:n]GV$<7o>&Xd]G/1/l(d17:KY>3=f20VGd;Gq"nEN^kU8O.@;e*3[+4;ku#$Y1EQ<b`fSlaMSU14Mn$kp;*QnR[jB)3dN.\m,\SMfpu;uhERm0J=Z~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1686
>>
stream
Gb"/&>Ar7S'RnZ;3!_4RBks05,Z;bt"7$CJ;"T?ch8?l1=f*4IZKUS:"tfE'G=5$0i];7o'\ONC)mMfqI-8B<I6(h&n\`TNGQmS]!i+oe(l-37Qq'9+]Rjc0kHdOci6q4J\,g_>%O?/^5KK0d#/23(j<9/+8eOZ*]RZ+e#Qs!u-RFt<.p+oQ(_A-p$p5X5o0je9ZZh8a**mp0(F%YCDrV5jn3S>QkV16CMdUc7CQl'&Y"'o3V%8b)$sp^En.K'kV(1JGX],#.bZ0$s_N]*J^V,;ul9_=nXn#thI"]Uog-H8!'*4sQjE8gNW[LKQBL(EDb9VugkQ/?6$?c],[p_itM'$1YifukJAYHp1f\`RMFa4t.-fI7lLTke].@\c>[FF^J=rV@FD#FO2*gQ\hTXuRpm$c*,89]eB$sTAlFTkmFG`6h=:[0VXK>9$8CI;m=fV'6C.A#0?>*D[NS&<l=G>*eAT4T<<cTMP.-W1SaHemG6OG'-D@=RU&31VE5&>rB&]T-%Xm&3mMjfhk'C49V%B2P?F>rF(pnn<Eg-J@5fGgpTYB8;r!?$$o42;rOJPKk5m&i:q^LssP$@OX#1d<"/Q)X7d/9Zh,op4IH)nJM^:cPJFq)o1-Ln>C"5<G;bPYgTj'<Aus**n1#0VXsID?is?:70D;f(C%Cg#()Qr!&H.#=fTW"0HE[rX=kYjO8!42O%K>G*3jR/j>^5[Vc'_a,T5_#mO[747:Kh!n=\ClKJg;Xs5'9XB6#s/*5'W7.XqR/*EU3)Qq-tM)_5@qqZ/(I-iF!Un0cB:X=?l6op'L)*6uu)%=Lk-]\]NLDFNK@fs-`'ad,;3p<?p/Phr@%Rm$C,]8(UtTg,8&;^r"\W73>Bo)AS>HH<e^s2SY(%"EgZ;'fb!Sh(11:-O7I$)2R,QO9H<=[cnr1Ml;XYL]\a<)BMm`MLifBF3p@W;u\3(00*>F[ddho.!c$(7B/Y7us.`G2D-\^:iM!dNr_obq-i'd'1@EQ&b"Z#4N1qjgi[1.&0ZTLBI3sfoP/g/W_kFOKuAYm+@T;R5t:iq%/][-@E!M,,/\G1_Xj2/m3ObNPM^HMIKA_Y1OK#!M^T@pFJ(k:P:5#,;Q#+11WOOlSKX\REY[LmG>8l.'?4=bBX2b0%W-;nKHHl,E"%0CU/)B3#t\RiS/goRNqKPK#%P:="(+3KC)gGiNX<(X0b\nj0$eqp^&+A,J8I&l[D?PNP.@uMQSVE`n^<]B=f5W'<O&)TF)DFV$C@-i(GSYlY*8P[1):nA[Q,%3sFmrL-bGX9$6VbKVZ,3gpfK%`-aKVX'.])7q(Q?O^S1i%Ps%m'NF]bN'&=Y@TFL/';E%Z7UT;4%bhZ?@Cnib@!(GpSiP"W]H"0&FR`4^019fK?nWN@BRY\g@OQr>QaPtL0cbWDZi,rHMZl:IY>,R)Qn_12UgZo)@sudu*=@^67;F@=aH$g,^rXOK(bTnc5=B6&CK_7aL=M(0#5c:14ljF:[@%Nu>G6:g?4cVW$B.*,pY2?ke;fp(6*#&jI\YKu(:57;8ehM%_U[lVYO%&1Mg(*1cA=T/Os]^sZYu^e=6$d#T%.;Ff/OUI?VX,9I0]8Fah!$F*R8Xt];N\6;h>n4Kq5IGn6G`3b*HVfM$5.BpA.ho\ZTls/?2j@X4tj:N/E&eG>cpaQc"N[ZM=u1"m9gDEd/H~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1906
>>
stream
Gb!;d>Ar7S'Roe[35AkU(840RP,PN#d*%"F.(U16gP9>NMT".>,Z9okUtr9T^-h0pg$pB6\dYj'.&*ZXmp,YXS3t-/0=?:n!oVTC-H?h!$e#KVN%gX5K3tOOY9W$2DTI2J*d>9<"VQ+C"4_35_%0'J\If#5KS5*h(oN&YLkCWSKcpo!&odA_7"L#B'64;1;a93VXnOsk\1TDYL`ZcIqYMj.DW!r/B[J!Ik(gfm#&TXjV0\([e.6tp(,14;gZK5pX(J)$k"=b)8QR+(CH-Ck&71sD)f[HM<Jp&J9J9iNe1<9bao[SQ"Q?B-GG;7J\nHbELhE-7+W:X]L_f>&"E"STeL.&q<`4k^F_DJ^H2;;dAn.DEg69$1N^lp)=;WrnmDnc0j,SD)3RleJ+:`J0i<\o7,boh4pX(#2ENQ0WN"a7N%s5\eW1DE_kXSJ!ng5GU</V8.4%j#-Eiim5/A^Cldpm7P?YZqF2]9k12NH"jEVJO]6"K$++hWejJ\rZE\^V)(o18)U0":fmhb$m_8B"$1a>I3RA>1k+iP![[C*D'4n_"TNCNBW#!aRXI#u2u^0L5<*P42pUIpigkM$04Q%5W"+A1HYu$-r<k\*36p,lbP:N(cXJ@J"[jbsB7@"DTm#h:@T@'62c621tGb"ibB[#4]*!'jBZo!L6i%6"!l-Z^Ibb5kGhFZ#h4#/-goET69_F0Gcb;+0krq1N_EH0)'_qIIdTnkpPiYTG=l:i?lT9,F0`_COe.9"?nHDjQ_B?o>X"9e?#b$V+<FJa0O)V(\N7<I`)K,%Q+"u!U"3;,@kFf[kh<Nn!6["?@f9oREU]NZ>BG=99JB=8s/5'S-_dF<6*,2F*K@PBl[@o1RNVE`G&4]V)C8PQJZ4.]n:D(E5hOXZ1[s9h=dqZ4gTL`m`=pb=Mp-^mG"Ui2Z=9J2Pb0uD1^6#3"+C>Naj/T"ONRYS6PB+e\0;&gDP3pStuXNbU.Y]BGbUjku$G=b3<<9hVB-)doGA)a;q+:^d1A+>n*2ZGW:tSCE95!>?-J7SdER](TJqbBa0D*r=5[WJ/TNK=$l=Oe)Lt:k&RTAe;UFb;5m*g;FbH&A&tJ%W704jM[]@Bff50cKd]pnI7Kf;WoQ:4[`c&gde8[Ia<*o`F0&LG17FLL@;Sm.!VO$j>+_'LnjJ)0Y4*FP@Q7_.XlN?B,9*EXEci,;\aaI;@kBT`n`)M?AM!Ub,l1[*aREo]TP#V7`07@K1QY&]]<J4MnGBKS,G:Q*;-d\C'&-BgDSl!K+j\Yro-15N*.?UQo1m9($.NT1Wlc=\-5s?@/!#9[0\OS5H(05uVj#0F,OI4'o4U5lcK!W_s-5(@i=<2$_aCrO@m;RHHW_Zd9Oh,.=B,/r5Dk^Tk;<&8.oY_%KX*!C<i2*YiWTh\.oXU'Al=\_+#0$pJ(%JrrJ7cojt,,1i6%;4O>rpIfl@TZqoS9cO?,S!J`$=W?X7(kV<i!*eL+bQ0r!uPYkIl!qIIjB-@'c;CO<"Lnfat8ZA_N:p(XVMRNgbc^kF<+d2?6Yq$a$HZg;OlTe!>W5kB>gril]&&.uoAG7R.FpHl7T\"B>8_k>>ZYAF?I)mg\"@mPFFHP0>C8d_Q`4_A+d$+u?aJ<*BXI#J*:C6dCrL+&N.DPPc`)Z)mGfGj[JTjt5SG!iI@.#O;$BM\6aT_7pCI#f5%c):FBX?$2T^GV07l)LDr/%&ECf[nlP53i`R[5JESHi#?Am@aoT(1MlHag5\JXLGKo79[X=\h9s6EKW>:dcmKB:@t^t;.V'V[iH>HkUG>d.dbFQ0p_@o!cq4YKX$nn^I-%q17+@;[&k9:SY1?/Djt1=.OF2:id9%7a!JXen:KWXZaK1+3-S;CF<.Yd-2$la4\W!$qY=YGERn\q<&L/4M-I8E)#XPKWlD(~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 654
>>
stream
GauI2?#SI?'Sc)J/'_^0.2X`Cgq3!L>,A0%4)\32nJpOJEkhd?D?#([,AF`fdBZ=uQ>b]okC&tT$/i$YpFXqrD_d.:#S7?r!XM.%Z73H47c-^lE[k/m.$chf.A/M8+0ait6c'F2BhCX"JYZ\h,XG>*&nn3WJdARf(=sc488p+*"!gIT,sSDj&Z7ImAglV#rNgtB-X1pHie+jNZ[[U03'i9qHe"K,9G3IQ[YF=ia057,_3E(W94M`3iiO\r*bLWD\@mZAC9)*u.!l-N$F9!+_1=#p%)kVlQ_IF?S2Z@4jATAc3X:6I'HR@n,@?sN,SSB'qQPskm63iq"PaH;mROL^QQV$G'14daN.JA`UH?'9m)D)X&KtI_4>[ohPRo%\^=TVt0Cp`Qkj[:=`j\YE:M/XPKh?]-DRrTh\]1lG^2Z)/Ut&8UElclgR[_/_H.,0Xo"NQ6`;/2721O/Q$ns>i@b9p>'VCZH"q5Fp\hRB&n,A56j>shCY32"CY(GN+fINQo(!FdOg@[K?<0gVYO%R`,bFjjp3[[.^/=]'NI0](+G)@r>IFmf/ljmOqB]WX%EiWV,%R5rYH/U9]QsK[@KrNhL;\1S&i1CRjANhbh[&HCirKW,KqIXgGlP,"HL&0Ns/f_EKlkYP/"5-\MMu~>endstream
endobj
xref
0 30
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000428 00000 n
0000000633 00000 n
0000000738 00000 n
0000000943 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001849 00000 n
0000002055 00000 n
0000002261 00000 n
0000002467 00000 n
0000002673 00000 n
0000002743 00000 n
0000003028 00000 n
0000003150 00000 n
0000005131 00000 n
0000007050 00000 n
0000008887 00000 n
0000010521 00000 n
0000012607 00000 n
0000014059 00000 n
0000015971 00000 n
0000017749 00000 n
0000019747 00000 n
trailer
<<
/ID
[<2814d2269da3e51bbaeeb9604badd1d5><2814d2269da3e51bbaeeb9604badd1d5>]
% ReportLab generated PDF document -- digest (opensource)
/Info 18 0 R
/Root 17 0 R
/Size 30
>>
startxref
20492
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,64 @@
# Les 6 — Huiswerk
## QuickPoll polish + voorbereiding Supabase
**Deadline:** Voor Les 7
**Inleveren:** GitHub repo via Teams
---
## Opdracht 1 — Polish je app
Kies minstens **drie**:
- **Better empty states** — als er geen polls zijn, mooie message + CTA
- **Dark mode** — toggle button + Tailwind dark classes
- **Toast notifications** — `pnpm add sonner` voor vote feedback
- **Animatie** — Framer Motion voor vote-count count-up
- **Validation** — toon errors inline (geen throw)
- **Optimistic UI** — `useOptimistic` voor instant vote-feedback
Per gekozen item: korte uitleg in REFLECTIE.md wat je hebt gedaan.
---
## Opdracht 2 — Maak een Supabase account
Volgende les koppelen we Supabase. Bereid je alvast voor:
1. Account op **supabase.com** (mag met GitHub)
2. New project — naam `quickpoll`, region `Europe (Frankfurt)`
3. Sla password op (lange random string)
4. Wacht 1-2 min op provisioning
5. Noteer in REFLECTIE.md:
- Project URL (eindigt op `.supabase.co`)
- Anon key (Settings → API)
Je hoeft NIETS in te bouwen — alleen account klaar.
---
## Opdracht 3 — Reflectie (250 woorden)
Schrijf in `REFLECTIE.md`:
- Wat is volgens jou het verschil tussen een Server Action en een traditionele API route?
- Hoe vond je werken met `useFormStatus` + `useOptimistic`?
- Welke onderdelen voelden nog onnatuurlijk of onduidelijk?
- Wat verwacht je dat met Supabase makkelijker wordt?
---
## Inleveren
GitHub repo URL via Teams. Vermeld in je commit-messages welke polish-items je gekozen hebt.
---
## Tips
- **Commits klein houden** — één polish-item per commit
- **Loop niet vast op één feature** — als iets niet werkt, kies een ander item
- **Vraag hulp** in Teams als nodig
- **Tijd:** ~2 uur
Volgende les: échte database, écht persistent. QuickPoll wordt productie-klaar.

View File

@@ -0,0 +1,105 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
>>
endobj
9 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
10 0 obj
<<
/Count 2 /Kids [ 6 0 R 7 0 R ] /Type /Pages
>>
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2010
>>
stream
Gb!#\gNM%*'Re;/SB&EqZ/dub"^:+`.><N%94&B;:"@m^CHKdmYFd&s'?=gM#qVOHFP2t?cJCUK/JHM$6],58!dHYT2eN7!Kuk>H;_qj&!N2./j%,q'F\E0"_po3WK'!s9&(9,Z#0YS6O*Uq6h9fKJ"OeZclZt0[SEDlMJX"(.b7Od"Z$")E6$%lo]68,,U"P[id\^X0[^SH8o$:>(H(&#aLMiDb1km5G"fehBR$pc$a+?kcj3')7kO;'gGimmV)8c,1jo0Z<\!/pmEXj2d'+\Zkdha]`JB:Hl5f]g;'?t]BB@Z4DKufQBSX3B[fM'3l8B8SKUp)ace&j>u+I_=n##`4$hiWoiU64\B-)iqYGi<@9\(-ZPfsY\Cp=]_#e6EPoBY%ae27L83CPG2=BWMg*Q(seeRQLMIo/I^iM`#_NesbGJk)XV+,K/JSI.^:k`K2%pO)S/Xik!W)lkC\^-t:+`2NEQ`)JIQ<gb*d8BY(6KDMt'3eYm)bk)R=8>Vt*&4*k[:D\r<.fTe0aZNtPB$d@,!76F8'3ht3&%/`%s\;%,+!s=H^ajGrN9PEE&e,T_Ze9/e^@eYIekYMl$FVq<:ISg\J;%\bhAj+D66ofcu^Fk1(^QN"2M$ugr%tDFg,%4E9EHmX%Sar#'5fC!AP6B,lWhs0eF9aYUD:s4ki,PP/O)$r+3PBC%2MJ6(YCkf";\2n'>qI-8>RH<3[5(WZ_sn2*^Kkijl]m71UaXmG2HdFN_,:sTT7q52(NI62+ldBX0anTk+:.EPBsu*S8$T,j2&$-m[-.?qoZM3nj+'M<G<p0Z!0n0lR1`6@?LrQ,o[`oN[VcbeQA)Ha`Pc'jgNJ*]1^!Skn_6RH\L^@'$P@P&YKVHs5&`Ym&8O^On8SQQ&mNOlLD(MSi%,.&bY(E06H3tsaU0=;e[*uFpcK%+Ro:C&B71KiVo9?c<$L9m0UQep%0pp3JPaV-Q8lsSl.F72XeK>0^YM:UTc@aVb?pDTAZGEeWbn)Vl@B%1qE*MW`A0NX%.d1OnbnM67O&LX3KLKfYsBl73i0a!hU+?jj3c/;cioKua62U/]HrRokTk>IZB<[Qm2;ScGb4L@Ga.8R+Nmp5ZX1un]?%htE8Z]H=LB3_qC*KF<tIqP3(,mPfSj<!H9XD-FOl/WSbrselF$=[=b_5YP!La!8fi"5RtViZM`d=\ighb8/k$aFT]Z%nb;)8OOY0,Rmpi"sCJP-]P%?Yl1)G/e1YZ6hj.a,#e9@*9M1>a1A291G*n?gW":G.hW3A5lVTbZN+f]DP^RhBMXZ_M%M+**q$q/6@as,&scVcLM@Xmd?"NdA4ID)?I[1'DtiR]k^YI,_[2_5Z>S/TNcK[/%GVAY1lF[ESY(H!JQ:Z_0@`A[M+&cG#R^Eg@G7$\3&^7Xk[+cD;gZSq!%C0h;NUkk;P4;ei("uTICq-F-iWi5E.q%G\Xj?._rF.$LK/jpcO)7g%0:<tOfhbVNn[4$POb>hc]kL1EK"cUFSoDRK1/OH#61i43t;2`p+Ni#6Y\K@F]RtD'_7Xm2.aMd9?VPm/!DXBl/='[&K8]!i:@`]QR1jE)lg^9G`5,eUbU1":L67fh1f,j4q23*f,A9c9l]m>rBYI(3p4"7WCAC=Cs=\YA=UOM?b,;qn\P#l[LCR)/c_?/PE"oBth0)6-C<'G99HC5O)(A/$XUO"SdFP/\oYOJbM;[mDg`p"\dK-ZV6I4CiG/^f"s:ZbN!13VTT?"pJV]+,](W4nQQ%91F(N^FSW,Xlg+N)89+,+`Xi3(JO5mJr@j#4^UA=S8,_,EBWsEUb;0gthW>5&4'](q?XfE#f/K&j%+0f=O\joW@l#[KI67YS-_D.BJNnIoW?EpMUibdMu%$@b*,f9g3?`R^cZ,r\0nNmsD5TbL`9a5lB5Y>fBf`NqVV((Y#bBYZFWYjQ_*p$\L4W.l<(D*TZ_IW/2e7bMi$iFE4Jb)`?,E/sb/]X2B%X6qF.;?lh(hmNA'*"/R$CX4K<bq@@Q6rfm~>endstream
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1190
>>
stream
Gb!;b962"3&AI`dqFIos4OQ@^-0<C?2-$gPCZ<$H))D_XH"^6I_,WM^Dr9.80OSid;W[IYE&"*;O&'-W-OpXbnb3!]!;J^3dln!h+<CXZQj<-r>f<1_3_TZ#oR(%ajL@>RXQS:RkXhZT5@?cQoJf66aJ.#`0B+O?H4^G:(PY$TNA1@aiP<=G#pTs_`;Lec?L2l=+9[DlQlcIEh>POp,+Do""j?6\c,H0BOTf)-[J&m3bi+$76X2nNYNprE>cJ+!d8[(b^=F2mdi*s-KQ',*5B)XnW_e1qGR!\.)dpR_(N:.C::T]`ZB=8UFggd[P>#MTJCs@19+\72"Cdd#-it1[N^qI2NpoMc#6Gk7ZqhgP0SoF]]%9r^'3g7(aPdWL3K@j20^K/(JL@:9MWO?F<`8hDEkIC=[UOSA2K'hK4E50A9J#(I!o<b$<6Nr3A-m+Ke%WFNleYq>Y:dQ-K*t_UbMQ>Q\n;8s>+]7HU5cOMp?)T;c[IEbQ\8Z3O3#4Y!./L3(HrW8%s]!59[`%Hk<.`CZ.></Fj@Ies..X^%Eqg9_:$+m2))ufk,=-515EFq#"q5XgnU`X32a)_['Ef8FcoA/J2tLBblG+cCA`H5h[&$$m6Fgn3g*+%$42hMKc,JZ/ul6#:j-R')!ibYgt)k+[*'upD4gcL<Qd^t>)mdn?\;$3D[4s:XQ+PYH%nSO+Z4UAJB\hkeFl_=#q_JH;581mb<V&h=X2%I*a^Mr%BKKmk+S)cC<%E9-)G6IPl%=M*YX0&,[&]a8U^1uA$CDbmd6]V(^Po-?JsS^p)<^g[l4$3+[.;q;BLn[pP6+Oh_r@nL"N$'^2+i^;_&#Yn#g%N'8S@l%"ef7"]<:bDh<#*MF,lA"WESd@T".KIT7kaApPY:/<%!*@&CXMaeni8ZQD`ol`nMEY<^7d[DB%5)U$9N?X#X:1ZCLJQG[33ll2^,g+tRIj[b.f<DC'cfB/H:mgMS8kOqhlShSMkBZYo,NL]@SiC^'V8nhio0f@=qF1l(Zaf'2D/4j`0[[G*HX$lV.a<\0GQ/9Fh>HgZ31[-k3Sd1f3'::\'o`>;k9fjA!,YF?Eah*^o,7BLm/3S>Wj1bXd)Ll!.4RR.4W2&MD6[R-P&TT^@/Ib:_>2a3"ldKUjp7@t)$C3Q%gI@4/)jTRo%>.9R[';RfP:TKB]fUJ4o,jll61t~>endstream
endobj
xref
0 13
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000446 00000 n
0000000523 00000 n
0000000728 00000 n
0000000933 00000 n
0000001002 00000 n
0000001287 00000 n
0000001353 00000 n
0000003455 00000 n
trailer
<<
/ID
[<ad2895aab17a02b8bbbebc4dd4f08ae8><ad2895aab17a02b8bbbebc4dd4f08ae8>]
% ReportLab generated PDF document -- digest (opensource)
/Info 9 0 R
/Root 8 0 R
/Size 13
>>
startxref
4737
%%EOF

View File

@@ -0,0 +1,197 @@
# Les 6 — Lesopdracht
## QuickPoll Part 2 — Server Actions + polish
**Duur:** ~120 minuten klassikaal
---
## Doel
Aan het einde heeft QuickPoll:
- Server actions voor vote submission
- Een /create pagina voor nieuwe polls
- Loading + error states
- Optimistic updates
---
## Stap 1 — Server Action voor voting
`app/poll/[id]/actions.ts`:
```typescript
"use server";
import { polls } from "@/lib/data";
import { revalidatePath } from "next/cache";
export async function vote(pollId: string, optionId: string) {
const poll = polls.find(p => p.id === pollId);
if (!poll) throw new Error("Poll niet gevonden");
const option = poll.options.find(o => o.id === optionId);
if (!option) throw new Error("Optie niet gevonden");
option.votes += 1;
revalidatePath(`/poll/${pollId}`);
}
```
---
## Stap 2 — VoteForm met server action
Refactor `components/VoteForm.tsx` om `vote()` server action te gebruiken in plaats van useState:
```tsx
"use client";
import { vote } from "@/app/poll/[id]/actions";
import { useFormStatus } from "react-dom";
function VoteButton({ option }) {
const { pending } = useFormStatus();
return (
<button
disabled={pending}
className="w-full text-left p-3 border rounded hover:bg-gray-50 disabled:opacity-50"
>
{option.text} ({option.votes})
</button>
);
}
export function VoteForm({ poll }) {
return (
<div className="space-y-2">
{poll.options.map(o => (
<form
key={o.id}
action={vote.bind(null, poll.id, o.id)}
>
<VoteButton option={o} />
</form>
))}
</div>
);
}
```
---
## Stap 3 — /create pagina
`app/create/page.tsx`:
```tsx
import { createPoll } from "./actions";
export default function CreatePage() {
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">Nieuwe poll</h1>
<form action={createPoll} className="space-y-4">
<input name="title" required placeholder="Vraag" className="w-full border p-2 rounded" />
<textarea name="options" required placeholder="Opties, één per regel" rows={4} className="w-full border p-2 rounded" />
<button className="bg-blue-600 text-white px-4 py-2 rounded">Aanmaken</button>
</form>
</main>
);
}
```
`app/create/actions.ts`:
```typescript
"use server";
import { polls } from "@/lib/data";
import { redirect } from "next/navigation";
import { revalidatePath } from "next/cache";
export async function createPoll(formData: FormData) {
const title = formData.get("title") as string;
const optionsText = formData.get("options") as string;
const options = optionsText.split("\n").map(t => t.trim()).filter(Boolean);
if (!title || options.length < 2) {
throw new Error("Vul titel + min 2 opties in");
}
const newPoll = {
id: String(polls.length + 1),
title,
options: options.map((text, i) => ({
id: String.fromCharCode(97 + i),
text,
votes: 0,
})),
};
polls.push(newPoll);
revalidatePath("/");
redirect(`/poll/${newPoll.id}`);
}
```
---
## Stap 4 — Loading + Error states
`app/poll/[id]/loading.tsx`:
```tsx
export default function Loading() {
return (
<main className="max-w-md mx-auto p-8 space-y-4">
<div className="h-8 bg-gray-200 rounded animate-pulse w-3/4" />
<div className="space-y-2">
{[1,2,3].map(i => (
<div key={i} className="h-12 bg-gray-200 rounded animate-pulse" />
))}
</div>
</main>
);
}
```
`app/poll/[id]/error.tsx`:
```tsx
"use client";
export default function Error({ error, reset }) {
return (
<main className="max-w-md mx-auto p-8">
<p className="text-red-600">Oeps: {error.message}</p>
<button onClick={reset} className="text-blue-600 underline">Probeer opnieuw</button>
</main>
);
}
```
---
## Stap 5 — Polish
- Voeg op homepage een "Nieuwe poll maken" knop naar `/create`
- Voeg "Terug" link op detail-page
- Maak buttons mooier (rounded, transitions, focus rings)
---
## Eisen
- [ ] Voting werkt via Server Action (geen lokaal useState meer)
- [ ] /create pagina werkt en redirect na submit
- [ ] Loading state zichtbaar bij langzaam internet (DevTools throttling)
- [ ] Error state zichtbaar als je expres een error throw't
- [ ] Polish: alles voelt netjes af
---
## Bonus
- `useOptimistic` toevoegen aan VoteForm voor instant feedback
- Toast notification na vote (gebruik `sonner`)
- Animatie op vote-count change
---
## Klaar?
Push naar GitHub. Volgende les: vervang in-memory data door echte Supabase database.

View File

@@ -2,7 +2,7 @@
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource) %<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj 1 0 obj
<< <<
/F1 2 0 R /F2 3 0 R /F3 6 0 R /F4 22 0 R /F1 2 0 R /F2 3 0 R /F3 4 0 R
>> >>
endobj endobj
2 0 obj 2 0 obj
@@ -17,17 +17,12 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
5 0 obj 5 0 obj
<< <<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -37,12 +32,17 @@ endobj
endobj endobj
6 0 obj 6 0 obj
<< <<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font /Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
7 0 obj 7 0 obj
<< <<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -52,7 +52,7 @@ endobj
endobj endobj
8 0 obj 8 0 obj
<< <<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -62,7 +62,7 @@ endobj
endobj endobj
9 0 obj 9 0 obj
<< <<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -72,339 +72,85 @@ endobj
endobj endobj
10 0 obj 10 0 obj
<< <<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /PageMode /UseNone /Pages 12 0 R /Type /Catalog
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
11 0 obj 11 0 obj
<< <<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
12 0 obj 12 0 obj
<< <<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Count 5 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R ] /Type /Pages
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
13 0 obj 13 0 obj
<< <<
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1801
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
GauHLgN)%,&:N_CCd!2COq%VF(P(b[e$Q[81RTS-e@\bO#t$uoCPl)9Z.$gjhqeN&Ju!OqSYh]B1-o;lcgpG=64>9V=S!E6!IgKRoJm#n@C?=$&J&J,iRuHNi"-rKiV>`D8_oI1$!mK7`J'M,+-7W++Tk:>Ohq2r1*U9XJ`Ad7R".N>ntEsOLk#is!KkS:A?`Ju,m!2mg*;%XKK%MlnOXa-8:i`\%+Dl:(sZM@-u7B+#\Ca>@CCp4YHQfS_(YV<.cXO#Vso%5W-D=YS9"^,cJY\5;JEjB`<2M+"ga!<_8*#4;rYE\(`Rn&b'^ND,&?CbFHL)GY^qpXb[P32i,*.YbD6FP(UJTF`D1sLerD,*P?/)??A+!\5i3I?4-2)`Y60S$Hbl(BW:)OU[N>m5.p*).)IoJ/AY%M:fGWI>S^s2LTtN>;4,Y,:@AN\Oc>UJi.'h-$3VZtgPENP6SKg/ML*dP>n_[d</t-m9*+J)_:e?)gA*78^b;usS)S<\ef^/t3XjQ"Y(Lu(:I,Zq/=V&_$gh.d27or[dA[jsQN]mMM*_7j=f#N<T=OTsRg]`6P;C]PD^)0[6g]<VZ"jlH7CNRBUBK7=]B0$5RHsS2jjm,$'Yono2\FK)Y'j%Dc-ZPF4=a@ABd'D#mJgE1B@*@:8W1EFoU!;sW)]0B.@cg_5](HbBBpKk]o,d3&;G2Yh.;b&$E]A=`>s9;54cCjY->E+][EZ_"B;e7%&k=B5cg,BZD.i'["G,$K627uCb.9]qijRufT\(Ka>J]2MrHW^_ZA!m0h$1^/!9f"G/QqC6oKF`>ZF6bl>Q2odppIL%IGDF[QLt^@p(KR?:>"D>IsZa!f8Tc$=G%ECVY3l6i6<<qW"bf=%m*T+CjeJP3J#<$\h6Z7qd`CY+,12+-Ws`S$ng#-/<e7*9(ur2O+hQtE+@X\h@kI2E3Qqki<UtZRMLFCVtDlJ[g:+I]og@I0fmHbV(,;uB&6.ZAHc,ip9UuA6%g4;^U6O&ZuEJ_mB2j;'4PmA\5Sb(VY>52gpD)C)**JQ4>63!;Gbs5f*P>%ch@4$"/5Yh!:MAZc]J(R\53cHg6fm_!LY76^;_=l^j_9/!tkM.#k'4p0Crk>A/F_@<)FdDZ9kVt1&[/pmY0lTVFlqt<>%[4=mSP_=1V['Yno4HY^6F0s4r>]'sBPr[)(MONKGe<Hn`UkbsfJ96eX3mmOn$j2Og[XnaqlQn`R82A5\[OpOiE2BB.?U5PLX[7Ms)s't6*uD=Z0JoNpFolIK:sk\PC.:A)JQW:0$Yor&^faDT;mYTrfFK."^u@7Np&9!256j".!<P)[8;TW.o7FmtbFjkr&aNR?ULme::RJbH@Wl[(Je^[3a`gr<hGh6<:[\_V%F/N+!L-LFO2I8XR=;DnqEq0r(seZQgHV!49>\n&LrYrD\nF::@NZH1X:o&DQ$hG:CsU8-:%$rXBMCopN8;4?^kHQ?*:CGo*5X(dO5$['rMa8Cgf$1bk_L;to4NH=ctE?:BpB/(t'XK/*gbpOFcg#=_Y>CctN*TS/fZQGT"J58Z:U-<":DmBQY@uXG^dbrX9N\%Fs5Yl@q")LN6JC@G<kA2l&E!1$Vb9iIEnRMstaZ"Mt``9-ur#.>5%F;CBcR1*bOUARi$80h.N\*hGEmt1,JVu[hHT7YMB6kVj7n4[rY$.42>]j_$NAg7PG$-sHNA$(tL5k\keN4@Y4]ci]m.mG;L*&hMi^qea>dfc^(l0M5$'.i4*V$sC>P)i5mIE"!kEC*Z=MOfFGjtObE@)+>c_$7=NZ#g5ers^D!p<pF;LV1~>endstream
endobj endobj
14 0 obj 14 0 obj
<< <<
/Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1455
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gatm:D/Z1=&H9tY)!-s&3\UBQ0'W2]T%^+jSZZo!IB!)Ej0_5b!sP2AZM`TA$Q.pB(TpYG/&6JoR:g-()2812%r;0b>C^p=n8B0u%eDP38L2ME^^kMTDiaC<CT2gi6Uf(IKYm[R\a_FO!=;(61,)Z@UErIKLbYS(NcnS^%AedO.us_Y!S'X@0h_`tG\/U"^cAul6j5mOe@ssU*5.F:*BU(MIM!!4YV)jq<CfHEdL,,@R!ehrdsLjEhq0EmbOZEsY=fhleZdt:_ftS.H[B\[]WgKTbl<:j/*C:?.MX7%8:;!E_,bid.\e'Kk@g&i&b#hB0:9^'9#*N'RKpbZ.P^fR-[@t.6K"C1\!X'?'>-?&a_u<$!,qgcb%l?nQWr+r)CetJgCg6j:@db1d:H'P%QL">QHh4#gbh-dc9:.B\(nd[=1^pdGmTHPs&O62-?6aOo#t]gjWDU,\pESK*O-rQDkEHSj8R#.EW'_B=^Y'1f[scG90V)=Opm4)MWtQ:UC;=2`U)+JAitCU'G1D3M9uu+=W!fFqeLO2::)(BS8a2J+`'<@FY!69/bPp5cLA3j=%,BQUjBO[NdG6=?PA7;(#Gb([?*q=QlWWN+.>>UJURcb:(O>ELc/l71[VI2a]%QR'9s7RHD[8/.@/G"m+lq]D7`Ro<Hi[rdmGN<?'PnQ'U"P6*e7&o;p&3@6W\M'&>oh,jQ`5X`Rij96+Bri),([m<E[3\S4qi@lOkLcorT;NKjWnTlMm!Jrq'ES<27Nd&YUX87n.)cY>.ErWcq<D"J)^dm3jC#6jL#kqnauPSP"U<lh)lG7I=jOh6*pPCbaU1?8RRq`AR!hp;oZj![ZRo";#)0/s=(`X!HG-%(#Q(>^_Tb_2TR@RLZU0orcMH0c;^oW*IH*4944hRqP9m']'/P)Zd%'.U&]m2;<<u*(CL8+V\^;!"l,+<IKh7G'<Q)FM1=Glkg9+1puWfMQ),;?EUN%Pkcq9fbN<(fNW6ZS*?f/*iFnh'Q3IcMNcbr?&apW!HH^9LUSM_3S"nB6dGT&`/.uM^gnOZS^si/f+Ph,a>b("i/QV@IuFW/7++nTG,)o^`Xmi`Z.V?^/kcKQ4,nWu(0D]KG2+4oLSbL+9#:nd'ne+,Y:0^R3&WHBs-n8$`:dbEGY6mD\KC+867(:Kj-3o1Um,jd664/+d5p]k4jT"%ULGt"@J4l7'[q_M)@iF%fGYDY@Rm]V#"kK?!IV>:Z[GT3e]>R\U3T0i2/iBWD!qKuQ:\Mg9JS0$f?MD[l>(@kMsCssHn,LLERYl#O5r.5Xt#Fi:Dgc*[EPd\@XJFM8'hrn?R3G4e*=QXN`\p?ZpL75iSo/?@"H!jE,GlfM:rju9^JTn*ram14C4Z2jlO=6i[?9e1\b51^btL<r%GCVBP1=0`]#?\\r104*hUeaCHq@anpDo>c)5G/B`7bjcX%MUT+6_9r<qRl)F=~>endstream
endobj endobj
15 0 obj 15 0 obj
<< <<
/Contents 37 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1871
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`TgMRrh&:N/39SG[3PDDkPn#gLa9k#qEOJI]$QYqB$&g_D,\*U86#EJht6gdrtC*lBs>.,_SS28'N_jLT]T_Mpks!e-GBaOJn"3+c[!Tk"2QET5cEqXKB\Bb9/"6,!`M)^U<;*RloB/t3#nKT)0#\cQ@^]cZ-,RgFZ38+N:$_WZeGr0"r!hT[j$RB8S+8Y`u*TD.#Y$L&_IWX2UM_A&g7E"Yh__BhP"N)7]44JfG\:cUjn6hZ8p%lr1Qgf($Q1\ln'Iit6<-#B^+Qbe:V_@#>]Td,-b3B7uJ&(W;E\IN:4\@iW%1Y[2agrnPPo,&.MJ\LaE$c^B?l")'T6HuSSju-8LRA#X@?a2EVJ(3l;lrqS_jhA-iHbX[bRK.^]u+#7F$lr9a/,I65+sS<VCQ)iB/LXZ=QgEhl#aKPOsoD6Z3=kQD)Vn9$nDT@^.Dsr"CX:cR#YQroX1.80pi[4%'b!Lj(ZN"X4_Bf\YL9`amF-S,0a7__N#@pU.$?eN;LD<=6El@/BQ&/C>]:sPn]4*>GN_'_PSe<QkN]*R\\$jq%$i0_1:`h$ksS?L_&im0s$JEIc\!2]9XD@:E.sQF6s=+[:+lnN32j\D@DOcAi&qa@ghdP2#AbXfJ6R6JC&g9SJAq3-B]?LWMo.7,*Sqr9O'6R(>0V3l\3tM"dFpaIV(jA*aueG%]G2q@oLlH?8i7@S\h8FS&IgY,6#QuSY*SjjShb<M9.ueGKetnEf^B#Gi376<#N'n3kZD(Grp.UQXV6WT9R6K*?akmcc*=N3^=KQ?LAcRgQNmW.d*2fO8G`9CFE,7hVj#rFZP"Z$*g$s4^Td!HfW^G;;h`'-/RcnT0F<K*td*66[fl*8tj&\F`A+,bKmq[j:-PhlR*6**`IPK?q8,J>FD3WEE/Xf\2m%hLZ/J*V1TeCEj9POid`m&gVlUmQOBE`d'^UA,n615HJq3dWB9cVY30Fn7@o?#AU\*t.#*>`*q>dDS/0m\'fVL?%LF-#8%TF=&`$j6RHhaWcrn=XL<JI=X6mC9:@A<QVuJ_FUS.G,oW2&PN)A-I#k*5C/Qe_um?ZLT@j4XL4mI$h%BSTB&AAta$TLuqs6nFVnJk9ol*PGL(Ae"aCE+UlhD4jJ<n+2gh@-`&=J7kl*W>oVP6UIaE<=j#SGBmb:s8-%<i10%0YI=tlQ8kMeK4$b3;mNgab@DDNA.*#*:ph!*MQuK^kT+/#/D3sXIY9mA1JA'9W1(jjEci1(\L\%a]ab0Ap9'E6=D.!YT[=V2gfk5nc6ekEc4!17K"ZBNH933!O8J)`H+`&0q<Hkb``bh%#WfR$*<X!25%QFS3i9,[^(alDAXLlW1e+/,i>'9k_=aObW>gn>58deFl,XFkJ+umj-.2/h=6'k'5s[!dmQ3QiuB)$9U)f90q:Nscr$Z^#VL%Y[#n@)rIf2oMVQi"3QDNGWFr.Tj(-A%Z9dmK?(:!&TDKa&.e>6Tklgc_e;[AcdV'="bmjt!jRNXa<)nJSR(qOVWg#8ma,m"_iS'Eq+]7D]8NkS,*k'-"s44D9n4>95*nW=bUj]@!@P(&FN>ca[54sbroeF,.'T"Et1\q5<"r8:D0q_60Wm76:L<8XUL-f7Xj.V-p<(JP#gCm,^N(C/)17dd7:7[u9W6XsM-`Ugu)RXT"i:.HOna;<7*RcqtcHDrEGWolH]I,"DeR^KQh3!/q#"hYPg"0u;Q5AYshSiO91aD\^aJm'XO8$dThjup`Wh2S^otaZ@g#(\/_2r2Uqr-Ft?Hd?&<C#++jj/5!J,\@B*=&<5qmOg2p&u`I\<_'a]1/$`+S9jXY6qO(\fs4Ys2!iW)6:M=U`iZlE;kDbeG9"o=oWB;D$6dPY>&I<Aq'h)<FE*~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Contents 38 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1885
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gb!<O>BA7Q'S,*4/'d3e;l3DCq9HF>JV=TXYZuo608'SL;%bapASen/FSanhp_#Z^8PNTi5gsF^765X@3XQ#m?aT_M6i^$'0KQ*s)3!`D/RlQk'g*T455,>(QttA?9[>D@#/iHY+%R3](i4se54^4JL.aY\!m@@Wo6_&cY&dn667QCBW(2EKNo>:"&<GP*kM03Y&r/2@D%YNBr,:3=p3D@;5&k?'d*1bkL#EGD44QkZ/RhQ2[:(&ki:WQM0B%UgLb)XX'uGG]'u<ecKJ=:7]S'qW;M6M3kn/k-@/Qs"YT_N%%:Yfm].NZ?aAaofGpDN)?c\Ue[3=TO7WC$!@C9gXMf+obLXGQ&C/Eg(&2ioVW/D5[0W'NV3:9/`ZWssHD_i1&/C,^[[R3b!*+E$)]/elQk6/J1N1s%\@lU<`B$;UOV5U:-:*$7$e6((VTW%Q-lqubghT!T*/'M[L"[/V<-H(\Zep;c1:&AkU>P?3C.UH,t8*;5oA^).3X/f\SBg2&)AIb"@IdBqHbaGt9<2s@Rjua/3bk!g@;T8,tnX5=PPJQ;cDKZg^,EI,gG9*`K#?[`^:Lfb#3`]+E(p;iLWrPm=/n5/RSn5*N,Yn4K^E-\jUDZJO6_8&saj>YkiIMhp)-[!F%f$;5g9IbL5&-J,b=r.5PW)kV(FfA>A;1,ab2\nW!KUg1[2:69QjL8@RNnjDUCM^dM4*nIqt."-B3hrUjdEQ2>\RaMgjGp<m+D5(,+_I4&l-b6A*j!/Z941baf4Z2M(bbcnod)9LqM#`FGI_V8RXd<;EHn-*8TJdcE\r-Cd`5qVKQW/:#_V#[ED<774!)X@^rrVW7J!r7t5`Y[sg!-hfeS7Taf=3Db;gYX:JL+.)gA+7^6;,X+/S%%![qo&f$.rO)jr.,goYg6tb,JcLP'eQOFpR)6qX!M_ROM4>qXO<gcUJA^N*219=7*2I!8O[$oKRFZiW3FoBZrFZj3@_MhOI6Xt6P3;ji=&VO'#]&-LjS)DqSj6&iK9EmFPf#'4/2A7!H]A`Ys9"ktaGJN`SE:1Ts%PF7sRmONmf#(J2L5o^7ceaI'HOMj`%Z!N=nV+J9)'p;,G#2_<CQ1VZnNW]U<i7lfoPX,2Sqad(<'rsb1mG9/T=mtL</;5f&ke?oSW#%$Iiae)C,Sc>3PiX>f0\ep:3VV/V=r:s2QLCNb"ArKhJ8^5>rR<aPhC(1XkNc=g)KmJo&KBI>Z7h>am2uT^"rk_5a/=ij@X#qnq=UB?6^%=2PhI3FR<^%h8T!s8h@3"@&Y?4?l=S.1%\fh'd]N'4[aZDi]aGQS/$+:6I#E#&MY++WPC<7YDIMI0HMhVXff[eS\jX"n1kLPYt4IT+)lk7MP/1Hjt[nlEOjE-#B]BhI/B9%'i]:r+AtfU2(!seKfTF/ni2g:bd1fHX!#_2`<JDn*8N@5h7a!I`/>p!9n2UQAhIpIr9PJR/i+)`Dd2Lq)_)BN[Wk)eY`-$%%SGtUp]M\'`\bMs866]^-&;4=]u8DaW=J(4?r?:P:ou\f!De,3T,&!sRB\!CXnT9qE8J(8%edW6%OBS!^5<!gMheZ57A,cCOQFq^l?dpW'nH8a?gB3qA7Yt[b$_3H"c9/J!^[q]^2b9GN3u2dm(F`uBB!s5<1&5CVFp0Y\1Z[*niqZN72X0Jo1fiVqK[YTeocSh;gEbUI9Gh3eR/&^s0i5WiH3VG4@V7sFRN*6Cq_XI(\kf/h[aDc=N"YIIR"_,Q)lA2/>/W837#/:m8YL<K)tp$lLhs)1@k-5U1GT+/V@t[aIng69J3PM3KFQ0MfY.QQsHdt).SB@Gf(/'2W_d?[jp;<]?@J=)3uco<-&rHnlS40?_Y<snMEs]\[p6cAh&i,YBMp7[^R3,hZ(Ys=do~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Contents 39 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 550
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/Contents 40 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Contents 41 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
20 0 obj
<<
/Contents 42 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
21 0 obj
<<
/Contents 43 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
22 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
23 0 obj
<<
/Contents 44 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
24 0 obj
<<
/PageMode /UseNone /Pages 26 0 R /Type /Catalog
>>
endobj
25 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260317132407+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260317132407+01'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 6: QuickPoll \204 Van Scratch tot Werkend) /Trapped /False
>>
endobj
26 0 obj
<<
/Count 18 /Kids [ 4 0 R 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R
15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 23 0 R ] /Type /Pages
>>
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 442
>> >>
stream stream
Gat%^gJ3Ad&;KY!MRc\rf:?>GG\PZ@d\r.pH;,frg&iqG5/1#IV^P7K$!H1npA61$K&d<_Ha3danSiW3J->il:^I;S#^8Jb"F*He-T":>!\9fI6YUgQ0`!;-S>cU[5U^9dC(Nd6B`o#FV"gI-)XsG&Et$-??SVfTTCrseHNlh]ZjQO65Cp.L\cm-aUT]_hrfSiKkMSS@?bi>(A+EJ-S<3k1oCUK&WX:FC&o)kGcq*I:>O\CD^ZjPb49EWFKI&a8<^bYAnDe`sY=TcOaUF'.J@@A-VlNDVd#B,e^ed!km8]6MIK,(RWXR7]$oA<3VD>YU@?rNDLtCrcfG<uqG$1,tX2^m?V;FU"-PU:[ePOiHJ^\rkCCP#8LaRdP<Z4c[j%"@8VWg",AQ_s+DX7Y?;/NTP-VQC#X!0rpc!71(YiDINCTojf!u;$sA!5/,~>endstream Gat%^92F=s'SZ;W'k[hD(u+R2h&m9*TV<4OPSG.$0pu!44A@RUp#"@mB#6Y;U59URo"F4651^3"]PR@T'l]T#m$`KFUb?,-#c)\>S4:7<_A1ZhK#ED`#mX&]r]u`<25DEGi<b.1RM[V!$mWb;#!DNlbqp>oQ]m5VBLT<@+GNI!e3SRX'^*;9&?/X7hnS;04^LJ)RP&!..u8ld[Q`3:)@Jm"e.QJLUMo$3DfOfYf4K*m9Dn,pQd%TSENX;$M^u8WV-gap)!N]L-b[?^W0!7b=Qj&<44j>JXKdu9^!2Jh6>hWBKG4sDFNfT(<.sn]2BB6H;[d`?_]8G.Kh[%&G3jHd/6gI8U;oC.jr;ENYX_J_lQ*iZ`g@@[Qsm1!(tT_\CfgM./h5Tj%Xrton(_X>QZ\("DX6'uQp0l)/%u=G$PEgnH\R"c-tB-+O6<464GLJd8*7"O[E\N:M7e-a[H%'i_;$]u3U1"*01C)kHmX+1Aa\iO6g<<#=Li#Y1."j1<j)#<+3\P61%W+FIo@A://S$5[Vja]J&iZdU;(-Uj3.~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 656
>>
stream
Gau1,d;IDe'Sc)R'^#g7#`OgS3t?HRCB8-cKgf8>`bJ5iB]:X=2iX`u,V9d0g8Yme/4GHegZSHsfEZuV_"Kf@!3S)%2aTb1fag?i,\/hfbQa+1ga8k+$<*K^Os#YrN\le<1MO3e'JL[CW=W/];G#&2o)YtMTaWMX:^I/S2^O,j$:K)6Y54\bJ(F+"9:.`LEN9Jg*[#gc<<#R#(P1SiB\a<f%`B[s*rk=5>7bVo2`TIL0GLI!,"'Tg,KY[XN@#$hmVBE;rk??dhbcH[JoTlogp@9$bJO7!,tt&U:$ltAEJ/ls9VW=!%8_gF56fataBk0M"g?k<f(LA8Y$%jFIX7R-&EnmUFQm`1MdP(hs2c'pC$4mu"`5MPj9HA3&H_nZ`*J(X_[J0<TA^`GS;+50).hh+pbE;0IdlHZ*H64p_08]=)hDiK/@kLgJ7oR\\Q_9?jVk$jF+(i(,U(NqX4lOt(CR`r[ETLA[e%/=kL.>&`C_2ujXLE0dFDOYk,XMi<PSiH/:Hd*qFnIM<K+ASgoF(4E<u33S*W+-]Ue0Gr!a(8b#`\^h"pm7aKNe?\[:UG0o@("eiX*3d5G:t0DTFmE6ksRfA9NWWE![CBMtc-)u+?r.poG\?-CuWenoU"jgJ;6JPIdXQ<J.P@IOM%OUTD~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 730
>>
stream
Gatn$d;IYl'Sc(%MK@=q8i=';3!i[R[SE:B:><k7,];DqPsF=Ga3]!*^I(8[>@GYkZ4u!^M>dC&NfP&SCohno-,A7L"s4[9%d=L3Jd=nci?mqDH>FNL@M5t7-4iV)";,5?*DR7[9-/dP30-JKJ0[5h\;YduiL6k("rAn3$P&]0\);YI6%@s\"Zh;iY+"V!_mM7rRVQsSkmZ!u28N@1q^=l-P(IZhi`j8FNFIGq3/lrL$F-9iTl_NdTt"$9%U'f*\R%J:BDpo5X9Q:j;T_8(4\R]6Wo?;`lss+!.Pn'\eADct!@>"8%I<un^'j-S#!Lgh)F3)6ToBn!T-/2YH$sC'aJH39Wk_L!@Bn%_\ZLa`"#>j-+Rq**6C*IA"9-u'rk&3&Ea>HP5;cEkA&!Ym1?Lu6WZC5[BH+1#$,O*]aI3OmjhbF4cl]SBK(Ra];<DobLX6%hFS*?6\c[#p:Q0BO]$8LI3.X&s6Rj`1F#/AkUX?>C9V**$G1cjB\\jV9\`Y3B_B_<"f!VpTX]g&<N^\h$S_tS_><+6Y7BUABpTFc;j7?d>A3b`C":(!#.$?LHJ'0cW,-Ioj'>;g_AP6l&eCq%OgCC/J6t@8Y-KXXm@UK)iPhibTs39YAZ7Eb1etD]^^t9:Td]D[pd'B$8(.O(!WFuALHedA#eh&E/CV\[,nf#^bmWG'poD-'t%a4LF[$Z/XLP%liAZD+u[3#U;dQd@hmhZ3[m.L~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1340
>>
stream
Gatn'?$"^h'Sc)T.o*Y=5XU4u9-8&A[[B$PGES@>B%dX^`>TLC,:"J8LcrTS]k8XDAIjH2Zbq_R`(K3TcMO2S,Q^/Y8H!b<"F)_U_-6to_Jf^4HQ7e/i/cj=k7dEjP"2)dE=bJS&s%`1_;k#t4HSpTKh!eI;KM3_/HtF/Z["Y?BILZk1us7=(Xna]TOJDe$S>FF:18CV;C25H^Ip/*0YDtq:F>p.r9PZdU.*uP8d+ST8Do78a#NiO$LmshiOFH>0@FbkdU77U9=Y'$74G`EV3]e6AKYOglT?gcf3#OqR84SOV[.K]6-"@+$A+^arrSh](*NUmgTq]gf&2?+ebE]1):Xn'"OV-N>oj4Z@da&NLkC4DoXM^1rZX(6#T6#fTO.f$gJqQn82@<)R@G]#OJaOT[@dqVB+W2W'M;XVg&,K@^`m_5piD.`9(M>`K]gifpj?Y)QeU`!9:P]5EYa.qCPC0BC3cW_]BI2(o^7cq'=%$N&[?sh_!&B60"dW"<s)AkXGeVsm.lkLL["ToK(&ESZ8S^3-LeE_krm7JHjQ?NRhF2TaIg8rr,#t6S0=e&_[8\,@YT)K$"krt?mMF%"H,SnI-*%Q=NEP!dm"n=8+*2C=N*?$8?Co!gaJQ3F^?=c.p*P^]TC=5;V3_#9Rj>,$\^CN?'uXSrfV&B0e&9Nme!4EiD*bCRFs=t`oI%o<N/'H2O&bS[6>;B&Jok'Zk#"Y!teQJgmqjAD;m9oMR>,D-P!2E0aP0"T^PX+/VEth.p+<e6<+asV@r(H7?QBLNFc.(OA&EP[?X*]gt(='MC/+YjmXQYEC_+[q[*BlBZq%#N4,5'MgEQ9P:UgRafR?)\fsC@0Ip5/^n")7>eqC<>74Ldk"_PV/!uUcW4RZ5DAt'2@*?><Tt]U,!p8dJW02ih`AKPnC`T@K.=??FCRO1GP*<I5r*:cCmp`Cs?#T\-c)XgtH%O'('Y3m)'Vca0Fpdk2A-ERVPGsNnB])X`2GXUceWTY[E7cbeKUJfDI6PWtP2"?'G(bme9@(M^orQ:_7`jjDD<Bbsg`?-4,I'\:_4])@$DjdICW:CaqrPGj2\s_d,S%S[*YQ#in:C5E\N?FD>H]<\\Uk8ifi64Z9MKB07Y9:GI*g0-LBIlBm[A(S*h5)$_s@/#00ptUSO#"OpFO`cKKEbuUfSP8%>;9m%F<L=.^mIZ\8)+;h9!m:ja<sQMi(5VG9s3PU$(Roj7YX^EIbP2"a'k8J)(d#2T,:"B7a&Mo-OON`%qoe1!nK7:!0OW'SPm6P8T=k5Lc3m%CB"<YOIdGNQ&L<k)Q;Zs)iC@RQKOm$t`hGZFR[jpRZB@ahM)>N10~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 236
>>
stream
Gatmt:CDb>&B4,8.Gh<B2FghSknXs9?%TaYVpmEM2:Ld;GAi_W6jF5X0JNO`mkFs3K8+b+J[N=79-=`l""C3Wp=L4%'D0sW=p>[r0d?!X5B;VLGV$t3J@gt22pr&=06N*5,$=G`bdsl\1;ekg&8i#G2/1f&'tPkdZb/noeK!]YZfodANdpgXSd\u\U6#o?VY?jfgY>gk2Y&sjc57Wh0_HB24(H?h-6p9SE"HqeRs,#~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1445
>>
stream
Gaua?>E@c%'Z]+o;]J5+`Dk+$NcUtlW[dD7&(=C"b9IO5&ehR7gE`X(6@AO]%`:PE@#X/`KbPkm*WL/-ro[_nT(jFN9e1bOVVp;S5T$@+5f=g"]n[-IS#744+%]oh5Y7>.'HtMX4=''GIuB0In16<+!fZ5GpC7<!jO5(]LH#XV_)NV>![kej&IW_AN;hhD"[%Nd\nP1b^5(U8MR>9R[kRa^diTjP8+Cj4K*:?kLr;R>)$:<b#bsZ/F&;'h0bHD)2@^Hkhk_rB>IRQK%e&"aI:X!JGm#oh&"f;F__;?G`hB8ZcY5>hJG"=<o"8)A^-)J2%!]?Dc[,M`_M64km[Xlng,DgAnu/M@VW5HN/V>YQ_)T[fVm(eBf2Q/.CsB)S1mktp1t$eL59<\3V7>,C$'W.]MWM?ng!"0`4)*U<6(lDJ(e0WB9"%cbBiFcKe^P@p?T)s,>7KT=S5\s0QY[)]a&S6crn3O4oqM]k1$:k@ldN"MH-t+Circ?UY?>!`BE_(,k9'o/7/7rfbPBS%nbM>FC8^)Yrd-8NN4Vp+(3EPs=KLde)G^OA+l:L63_nb(F/!bZPZc%ANNENHA(Q"dfu#$F.pNGM].n\B1i)AsUD=pL4FD#))+Y3-\YH;<9u^R"%/FK0Rbd8m/VqW];oe[5X'mp7=>iRe9XV@RP#nJNFEKdPlI%^O`FTYpR3n=\f`olfpAG)qfYj6AG2CW+*I(Bq[Crq9<+$me/5!?O(HZK:+ng?5`1e[T(\$$f_&;l<iIYG(^4LXZAZW6$=(!4nC=m$.`<iE_1n5==l_%G9FN#24f/A2'A!8Ds]tcJ%.N+Nm>>-U"3X4^jbhIAJ_Es@=o;9agk9GgDV5X(A<S*P\%R':!8>AP<4Gc#"Hl6d2P/t/#>d<Pil\EKVi<jGcY>:,SHmLoQfS<G=5c7hqIEi/2e%Lrdp"=cR6<K&N/_'SsAD,!:;(-H(@=>[!Ccl]N8!WQN9[?s@1rH$i`?#NJ<2(00r5?5\Y#1o8)-;DO\<B*CB\]:eRG.<7!oq#[ason'^c1J2[i3MCDt$;*Vm.4.Nr%d@Dh=2:0Yl1hM`g8bJ)'UB(o5kHg#g*qV&^B6qYRIKj1kt?'V9fFk[hR0I(Y#!!H/fd$T[6&](Li"T3hcJgm+cB>"h6SNr=cP%/O50.NMoofmI4u(ulKo?!:gRaha,r4l)!\N.G6]"_-rQM>j8\^(L$m9'Q3**6"%Sc6[ee(m*dt5cZeM,5kT!r,6E:]IPb!(YR(,2M*Ct^YJ[Ie+T4;$3c8@i2r/r;peY0@3fcE4st[k/Pee\0PrugGot^OU?J*kgC6=+p9Q9!E5+L4rctD[2?-l2l;5<@c)T&kAs`>-R"t#$(R`khI\eIoV^0g!Wd#hjbC#nl>VYU+du*fR7;*AnZ1@k/UiG09epd@ebV6[,29j$8>F8^rr&Fu:qu\AKLEl~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 224
>>
stream
Gaua84U]+\&;KrWMK`kWdTlC'iZRIG,%U&;-l"f,i9#O`g8]s.kYR@n,Bq6m:IkbKK=\^6J5nq@+]+#;";tp8[TFns&bJ2"K!Z4tKF_7$YDD@d>>e%Y]98]T_*GG?E4DJB1LJ&DATGZuNR0+R/'+a'b3q@=)/7[eFrWkA(I+,dg`H3es1T2Q7An=d6[e9%b7T2=s6DU#iKMSX#YRCMnG@\Y*jkKjH2~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 929
>>
stream
Gatn%gN)"%&;KY!MCho*e$13%nu7CY1R!!FBp1CD?0R%E,&msu,E!PanEsT:i0#u0Fm<B8gFV&s=9!$%!l5\T5=[M[r<1o:'I\TE!gGbdP0\*/oPStsA][;0d)_7j#cQbeK]<%$B8;7+$NrGJ"^FlC+r50'7UPk.:"m1pKkKV$!@*j;`[V4GF!D(^@eb&,^k^B+36UJSm6Pb%aihj*=+!/b^r7W%AQ7SdL\`8%3MPGKkl6@P)[)+_1f;g0?_mT#8nGD[?298'#":_HQB2o5[o[UMZIjcOo:1>mYbHHtJ-<!*IHL;cEtpB<LGa7S8$4BMI&Cikl[DLIhq^<na-=p!qN:6"^/)5d@L?<AgE\$CC83otCKaWbVR%Ju"r;0Zm`h.LM``L)/7G8-fDQ+"\u!ia9(u[sO9_k6YY/P&0oc&@LZ=]d]fSqAgp&]a$HisP8Z:R<ENAu*>F#fQ#U].ZAC<T@b%Nc=+Q]CT&?Tj4W\cH#2&EGIgp9^`4lN/=](NEN&-`LjUmA>"Q8,JE@lVHp9?ZH?)8'[t(6FPd.#h!.93=*uhQ8DRj3mAV2V`r(o,^=7G33dtPud-2X^qAGjIJuh.SghK(1DEMD+L\5$9:#eD)b),_`]LeZFdo*hr0DLJ`5NU7;KGHU-"WRA`c%#FB1HSAY.T)[d^lWc2s6]\W3@jm1j0BJOr&O`dLrmPdt2XBkN!N/'T&,RhK[<["<IF`*%q\8)7n*,!I'Qh6k%NmW>[=O%k&TUrVq!$o[A/OX!udDblEA>(_<r+PGc]1;UD32'?pUHp1;NgSo/_?5l#lN,1@:;q?'1oaJI524bLAe>=*g/%Et%*R7_@e;V-E(gIqW`3)2H7rip@@iP.J+WE3`[0VWq-PW8`2(1,PXhk#IlUM;2VTQ\V_9r)#1#0pQkpY'WK+rXH!$riS=T~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1261
>>
stream
GauHL?#SIU'Re<2\FkcN,*PQTqXWcWkcb(<\i*37]i9>T/D=-;M^h/n#n6k.>tL'V+S![Y>[\mQBNk0"n=F\S8V,fX[_LuEJ6*&e^J^^5Op+\ME(Jj$0?Mnf1O>G1,KH^%&47:4`sW3mn);:sNrg*ni%PpeT7R`_R,_]+ndM-^q_7g'%>J9+8/$T[-G\\GB,0nb>e[gFi(p<U>fj)`kE((AjCJGO%t$MFK)7nHPYiMm*?("niWobgNIiN#GR"<%8\0&Q+F_YB^Hm[]6_PCu+?*,4Z.\'6Q3)$d<f3_%VZtL1cNso7)JIGm+CRLNS3['=@"TB&7kOF<c/#J$n>C4U\R*nUq]c'`]gXF,FsW0O:I>WO^kmYn*efP`p(L-a`\e_oh1MY[9NoNVVNOQh%c3()I3n/NQF26+//472.WNh;Kt8"6oXt:rOP'liY]kq7p7QkTf>W`=B0%ic'LX>$oXR-3V&!g.bn%t-bZ)$M@:t+RP6$JP,'<q_GfO70UhZ[!N016:mc6J*TmPN[O\\hJW[O4<n&BhChFtFip(D:^&rrO83YMB%>Ltjl/",:am$f*O9-.7#6C,BO\[\+q\_Z$HA[!P27)%cSpu)O#ncO4[+RWDDaQiYC%Z>0aD[:(c6TQrPb3`bq&g+TWel0*DrjXWfn(C?n*H\$1rH.6S"sB9r?V/S9pQT+J3&leXFGN(9R:GT\<YRPpM&BirZ9fW]1QW0/mA4WSj9G!]qUnC\&08'tq,#6i76XGM7464o%kX*N"f)f[?O=8VQf&9'$!thffFYEu1eQ(gG*iO.X@W`3<TTu.jZoRA%W3rKFs*$4C'p^Z2an2.,$!r<^="7Y)n6"Em,d"4$[S\Z=RnHq?squag2f`i/11(Re7<u\r4?W)M]Ho;phb]oWQ<g`Fk6;gl(lBRSk-tZ1='Pch<=^S!2>m14l9iPrU9UU\BRYBT\jpnb!KcDMHbr7;OT&doBa$A:q>@L\K8/F\7TGGm%pDlqH/->gp+q,/f`3Z7oD'LM1sio$"q!@paci6Zc$QBiJT@"f]*@-"?RAr_?P_B=Ii\)K529XjXl9kHlO=,4Q1&n>6mB!V3CH-hM&D)0&m<QRq$]#ZipV9>"LhbO./MZfYC30*[#;'?\p<M$I*)dj.@WhB1r2/K&,3!nRPYKSRbG(Egn$j)gNIC_ker,>u1CpqV>AR]724EpF//]ULPsc0Bp"JXrnS>qRU/G#'BK0T^!99*mQF=n'V#.&'=:AjmoAu^tCqo$N2=~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1051
>>
stream
Gau1-Df=)Y&B<Vr;]HN*3i"+-j8<V"#U,Rg"DEUK2ZsF?EJku[6K2mRVLEa7BiYQke.P6Q)C9CjhjpBdc3+4HOT%2B!1qNQ5:8]EbSNO3a'elb?Hu?\T9*J,9>--Tj!c5[n\QOopcj/nYr&=L"<OBGM[4Q+3b:9F]0*nia_hud\ABO?d(h1uWEEX,?LnAq)-k[&#qptoZ@iV"P_u*Mr%#u5)2<A13Q/b.I1AS8KMO`D#>*("#B/)d*XCG?@&Un"e=P\0kMMpDpb`=O:B6[,YS9^:>`1Q9U>VJm:nVQO?E[=jNO.*%"_SZu8J%\PoC.8QfaY/].(`-N#lt-"q`q_NpNb6_%49U).#Ukb"sZ7dXcJ+Se(@=RR/@O1o=5fJRrK\q[Q]AO#7YuU=Z(?&iHCP^fYF5`.i9_?f"U-FElk_je`a7AGs^>>/VQ*gI"(\P-egGlPaB)rJe_=N]#OSCCN3[ieW)#\nV%TJGQ-D[.l>7NUZn7;@+odhZG3#T8APo6d=(g2!8I)2nGXCB1+Os1"j_n-)fa9V9o&'EDgBm,*?hrZ7*duEZG#%F/8!8n<iRH^[a1O_09:nc^P>>DOmiErC(]c\96bZUE`fDBDCXnBR:YF=f[83>;!nr)S(Z,p>9K_mZ[G?a5.J4K.2hgoDCr)%GA`f"W\^4kNRaO"^ZJE)ag.k8-ursM>8#CKOCQT<Z`u'e;]D+NU$4-O)a?#1fdX9pY?HWOdScE@#,D1ETOcrVYA.&C21ges+a#0shk<4u]J[4UpQar9c#"T@4q@$^1B1s25MHd5^_ri"2+>?D`m:OM"?'@\+VoH*hQnVo,@_29@C&3:=B$V?ge%"m.[.j>V"W-"aWbr/qP>tA&&^@Gm$QQpGB+W0e>CbNOuhnb6X)##($$\0]!o<bB;:?f-eB$C/tlHEpe'/bge;\\Aj'Rtr?K;=3<SE4o*a6le9GHg.2TD?PKUNgTXpZ3p4VDSS^MuY;iAU.GK7WF4oQ7,++$[e0>BU@RoGpN$/'iI:W/dhg.,T+Y91>35q@Qol2POkE:O+6a9-G~>endstream
endobj
37 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1454
>>
stream
GauI7D/\/e&BE\k;]La)OLnI)WCM<Y0J$MV%.03$`njAkW^q65<_jGZ00tci^8#5>EYc\8`XN,]Ml*T5h>Qf&(BQM/8G>%l!.J1'F[gmX==f$5V@/<+nC-C\o+B[BF@4M%1OfTp5YNQ0$/UGEj,IUE/\J[q9'*b;)$Ocu?SgNbVh#("V1IqE0P>Liie*[=0WmfKK0P.K.`'E1VL[-qW2l)H![?D0pq:))28#u-Z=F<#O0EjTZ$s[DF(h^868Joo*j1sM[tE$r!5&_gI./br/#bVrmG<02DnM.k:V^'==XdGd-R*&9#$eAV)&N`.+NZG;pmPhEK3Vm*Es5C\0a$/?-0Xq>lsSK8q&*EMDOi=u?Zn2C&o1n;f%/HMi4$Cdh_:>uRDV&QB`nYt\o[dX48bLbL;$IWg4B5E2Q0(JZ"Y9m#Jr);Fr-94bLsnkPA_2g!ikY8=m$[4#=Rc5q$>0@.U^[YP_Kg2([B!PG;Vabb::gCSf]Mob12='"2T%qIE41%Q>scr>eb*TR_uf?-e5,g)LXL34Jq*\U/+(9$BMO2QfI&L>\uUi[ZaP1Q>rB%=LKMV\>gOC',gO@GJ]g;7P(".`68V0dWpSF`u(cK)ZrQ-Q!D,nSE2:6/A7u.kV7$'Y'--1J<M-@4$qu>riL!pCY$9'P\m#d9AfJ^OWg'cWIbsLhq)_m.d#0eBkPWDc,F!>Y,a$bEVY9;)<[Nh);nBJ#%[Y3]e2&`ZLXkKidA-&h\kF,\d_6bVST\blU#7)l'L_LB#lWtfH:hsd=_Uuf;&17Df;DL7%?o(EAV?>YITs7B#E%T@?I8!DX0rKaP^oT$u7CD-Q?CoY/!!#4pLm<M`]BhTp5]BL'MJ#)sF?M6W(R+ifZ/*7P)9i(j-F[6XSE=l1U<5?$:XU/U[qf0p^A3$.p*:L5E>f_,bQRX08pL*rA,:/$l5/16%6PX2#XQ*s#a-/[eimScA?ci*t8!4q:EdeE,Tp@(QGbp)a(&*H8Hn69dOKDrWUt=Yki#hj"ML\kD93o\9!lWtROk7g"6*C[boQ^TA/4ifF\_XE^>SUMn.rbO`<fdVVQQ8.<P.NG(0p`pRiC9+H6uJ;4@H\'6(''\)@)GcQbm8[HE)DHaIAlaZ"@i+\hnZgV0/j#Fa3oQLB,T5fV+<@3lo9!`PoUQ+Af("\j"HT\dO\f\E./:Fm9V>5(XR#'&[#u*_;1t8FkJr*Kmc=(a=EOD14fGY<<%puS$AIZ)]H^L=(3),^uo`@Y>$1c#WSS(MF'@$BpX)\9&.Wh7GSR,C^h&LmX](j8*U;;N*Q?RA&Wk.O]02m$ULF4D,0q,+=])!,Bd"3[r-VpRZ6E0^"3MAj5Lq:aAXX7ZQ8Ssh@1Yi5:X]$2ed`^Ua&OU+Ki1uAX2&DEPT1!jXT?%k3Wj2?qoJ;qns$;,YT"^)[O>+W'-dTObAbDaaBPb7UXbNUc!.8^k0)~>endstream
endobj
38 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1416
>>
stream
Gau`TqeP4]&H4hB`Pc#6;^t5JH<>@V(327YEjXGV>7,KrZF.,`dAs<J*[gm#GP$\u8]^%]j"M=lhUR"Bq<"07AROJP2;e!.i-YT=(CV.9aT@i>3\Yga5>R==4(@#<a#@9^oS,%:0[h(F%/8`<\<1X"KtA#V]\\!Y_1>h`dnIgVpqR&so7>pW0Sb&>THUk!rhTsBn4)nKVSknM'6oumH'X=e_%`6RT>//Jr-J25.82qBjP(U#+8C*gQ*ZD6H(4\]SJlGVPr[*Iq_e$F#GFbXeojRQ6):39;7_E3=&G8!+B"Sl9&ZTN.bc^agN@71:G:Y\"ULT;k2NQko;mN3+FLip]`Zp^*k]I/KAXJQ)VD?L4md%CZFh3a:HZ7;jMo(.^nC]pA$-nC2_^;FUA-<2`4/n0_-@iOL>?YFrpaPrhN3qPWog.B8>Go^*1L6pbTt9-rFs$[r=1$1m+q:J`Z7CE1b]DeZ?XV+PCd&\3<BYU!lhGYlM]jO-]jq_d,EYtfaT9=nPA2=Il1'4F=a#TI]m2,p5$Tt'pg*[F!X-]6d]3=hCo,Qj)I^-*Ft[iNJ.!VT/rZMOaGcg4/AY0[C@;[NN:YLL4,!HS[7s**6k\-'ahm>+rme<U9736S?tMOBYa3&\60)[\];['^Jc^)s1!/M%&5#6`?H:'%j'+!?k\FZVR0<(\&P/$@o2/[)6m;:L)LQCX@1Bf7_I4N`p"m5b9StO"pZH,[#!ui)$-Iq+q@Ro,9XT1EY2rn`[V<_Tp&<3:/0V^iWVP4YJ[r9_7dZ:m/0IYAC:b&+t-sOHPr8.UuV/^=*(k/nl"VT0O2fLJE,*5I(%h!f("D`a6h:7aK0.-N:pOdCUqA0D$Xm&jB7]s+a'=7cmeP^C9?;P3h3@DXWC'J<WU5)iX9kX0AEmi?UA7L_5t`;;@2]:YQbs\Ct"%$d*VLNBQtZ$@4?ik"slTgP;j8>"f>,j0c$DhDPL%17WA$tg:$J9Dm!KMcWT!K+2Q5D(o(["U!lc=G/WP(/aC0r\LG(I=PUa5Z;As.hO"Ul.n$C%LYBtG#)^lK\r1ZmV92=s(mW2aY("n2V]Ca<i`^9PLMtQPr\MNTqrHNroO-/GFc&##&-<mHn,XQupTe/DZqHtkYG2;GkYt\8kIF=-`Qo,VcKI]?B.hbe?r?3j`X)e>krOF(<g;94Z%%'#@1B@\cfA8u`9?N(b66If*NXiLN(&_#a(^5"G<;?[EH7?(XK7&0YWVC<F>p7=gIDdPRmt&/<tY.mq5]O3).@6^E;V8"8Yf=6\rQsW\bHjj:"/G0%V1nu,fdTN3rI.MB,9U6W(%3-l.g_G&\E>AreeBT2`Hpcki.aiC(0C%/7cr1V8Vf*Tj=B$8"XSQ+Dk%Fmp(N3HEE39P,TR[7o1YILhl`"CFG9[aeP%C3;O_?<*"8~>endstream
endobj
39 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 226
>>
stream
Gatmt57>=^&B4BkMDqsRBs,^qU,WF%EY1(<.8#;G3k5"A]sK75'fq##*$P'gpKe,_Mu%MP!NUaF+]+#7"DOhI2HU3((%dsE?5fh\%Hf6E3CV0^1P>-&L)KGF.`+VQ_8gDU8i"U^ZH@G%)6_oVG!`XY&^JITbKuT($aZeEjVh(,op>OTh.+GgQ3N,t/q6P+1a[M'6[PFH=B!)Po*L#F9.'H2^CX3'8:i#~>endstream
endobj
40 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1340
>>
stream
Gaua?gMZ%0&;KZF'XPM%llqT]ME3%XJ[S+"!^Y2PHEX?CO=f267]3)]`.m5pmmp&u^tK7*@9OL%+Go1ZEB$>b&ciAiV#?os!5D9:Hp`E\R*:+8PJQ;qXs[jhccC0#k*lheg]0HtR'pW>m"^Y,,MA*2]ec=gkrZVQ5cnWTPPHj(*&&i7Qp\XtBY[G8/7A6E7O<9qE*G_MOtY,>>)5M\%rbT@j//dHGQa3`0_qt^q1udq4NuL=0aT-9hDL.*Gs4Sq]_#K/4%*WhC--"-RrSTo]]2Y!I]6_Dn5r"WnlZU%*2^B3;',<K*Xfp`r4@O3P#iG,FLGcWY1qAFDd]heK<Ic^M>n46L@O0==c(fk.a)hcL!u::&jgC>T,r7"AW]@OKF7s$2diLo'B^XMlgGajL)i!_(O$hr2XFH`G.oL8+X-">W(nY_l[1#mUjZ!rE#=UCXha:+g5lH([E'L2.`a[=T'VTE]-4WjVnld9;_'ecP=M":;,uF@)8@)#dF*7pkV@j.Bgf?[TNi?oHFYlbT^2-S![jc3bSfM6L36phF]rc9T4l6(<A-c*^GFl_iPTbG/4?j#W+CNn2AmRRP@9OLJ.e^uFH!$\qNdsPJ,Q9ZR_K,e83!uod9gK$Pur(E^X"(>_Rk,K;Q9o@J!X>`i2`o$Z8l/\*-,sD("bWsq>ZsC#7:!-$gBXb[QQ,\KqjWZ,l<(4f<P#1mW[n/=(B<)'a-+g9i,8HR3.e+p"Ya$2fnA'"'q4F2o]]I3'&-?D5nioX-]qu=Q?Y?9,!o?&)E4aUu4\/6VS@S:JZf6)S@rCK,ru;@;VG"^VWI.2RZOJWJu'\<3SoP=Sc\LeT2;7ipq5'4)jqYhcBE>$WobHJ'lO>ZD4p[egbQ5XN)NA04CX<*c57k'(p4)[d.^ebBpfjgL7ZRn&[bj`-8DNEaIhTQkjBEm4H.a"78ho;Pl+fY6?KH%0R:r/'*n=K7Z59Qfp*CgHAE+4e]IKbAW]G2-m^?OPu?CR\4eI&nJYTU'9Eo3hoSu)DofI(=QGFYJ<U+>FNbWY1E!+Tl?T$?XMsa"VSLa=c5&sD'7T;52@TL[rpAg-uG^5UI(rX0CSoP`KYEE7@>O9ISp`$oOiT]@-[>rg,$L1YGB\"(4RW;8VoWHTi),/@u5]hkn)0hH*5=jk(PYSNJZFN94hUP7(=[9$I4dDNen"-I@AjB20`mBPH8n>[n6Q!F&?I%aK_\a.:0&78`Gh5=D^hQlR=3,=31*AX6M&k6>^R54\QNoJj%feg,*rAoaK^h\5;(SK.bVp1*85IlrsSB*nEV!#N_.te@2P0euQr[>OA][j-^lk]6k^HZt"`pIfRh8c78~>endstream
endobj
41 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 345
>>
stream
Gatn`9hWAX(^KPW5K07d3h^D^2LRsU6."'lKcG<9?.RR!c)r!lr9gGQMTCGj66IF)cguLH&=@2hpI,2>$2>#6$6Zc"mW"$tmY1=GdFUs]H4a_.L*R5A0O^d:e@%jJ7;CAJQmF2:2bha<6YWNihn^eGb1nBi6okut!h?0kY0g9j6n(o;]92I^iYCHfZCb./jN#q,rrR5drBpNj+e5$iF8Z#"hJ27OA6N>?m2il*DO7eMUT!e%iA#93dN7NIkk<&jYGE0oL1YNf?L"]Gg\US`1A4p=%`]3!Se'IrNRYar`;!D.YGH_q$B5k+WD;/rS7T]HJ%`AC!7T"+q!j,loa0H1l$<~>endstream
endobj
42 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1049
>>
stream
Gatm;CN%ZU'`GaQEN/_pU!8RfGL;'H$jd4ONrgCOdR&97L*^j&\D(EVJ*5tAG!dddO;03B'$'/TT4@beK1d#!mo]tdHjmno*4UOh%(OW2(r(XNn\N0Fmp#WC$[<:2&4N+7OiuuRqTSjs'N"j(Lr^)dYXBa#Fee((e0j.j:rakJ#S:kU+[cFjI+%6liXriJVpb^N;MBl[rX%U4%JC%<m_edO>PND-r!%h`gflWf']XcMoH3+e)oXuqV8kP@L>_E;iDQDuONArg.bE&<B_ZbA31!OCBr_'^S%]n>Gd5+hf5O19Z%>VJ=/aD%KD2<VQt^75KL3uIGr:(^+O>+3*/:T.q]!'E[_]ZRj%d@&7tUC%FU4L@A]&OM#)m(dW"ltJJ;0cn#YI^;"RfZhNZkS+8`<>Y;cErn_Sg)ia+M&t_Ka[_P-ii=gEMK!+!hHW2QUecUqBr)o'Ze>iO/Z@ohngJ_A[#YQ8#9$jfh3CmL5[*0TTJn`:U5ZDV;F[q/::^pqX*<_A[d6DV<?:<Mjh?_(I8PViUi@[]%<AJH.@3`c#tNmi)@N@4u^?JSM-+8jd\%02mk3P#i<0EbOGW[hl?)Lb+Y81,Epq^-03p]jW5PKq,<\5>3Fq6>L[dpeA1]X+Dp%]r9?lf4RQ_'-uSp)%Rp<)<tI+RgbkCM,^Okd*WuC(Te,e[_S,ngR?Y`1^l>Hp/3cX543h]ep3+),6N2:?A^p\79eom\NR.S\=7@_lV&GfXb16b]CnRj:p3j+9r.m%T@cfog'#_"pD!9FHVs"9Tl-aUI?r2nSf4^(IV:A:AZE'?WY'Ut%+AcO*&WZ.PJIh>L.bY`S*05Ee&;"J-"UqV%8X3ilG!4/nT`g(PYb_*mY^).nohaE)Wpes=6(3uB*R_XKZ-7Dm:GH,dC+TT40^qiCl3AlSN/#ZMVsJaCIj?bG6NAZV@"5OJVr76dI%`L_Ys3)YS&T]//.t+OdJ%LGIFM/Q&FII!*USnk.]TYRMFP,@)so5I'LKR]KImS'l7s>WI]<B)nFD?'pZK=^N6LU4u'jh++1G.Mu~>endstream
endobj
43 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1256
>>
stream
Gatm;gN)%,&:O:SD"CQ$P<oCsca967R\Y'RESOa>6gHp$e4P<=Ji!`_n_[tF9!hck%Q!827Ze)<SAh(P,mTK;]_TinJ<r'Z^>Zj2ba-$H(;T8g]Uk[!TC@8>OKahE;$q<eR3-dG`mJ?5,a!mM?p_dtaFU03%Ho]^F[Gi`h)'66S>Hi?4?%s*DM$!R6J'b/3)`q/69$X,>Bh<6/iT`$_X%VA5<'4(dd'(>6$Nfk$Qd`!`Zm-3!Wkc>PNWL<TERYe]p<F9jC<`k=OoO>WmGde/1M%95U^["/\7+l<F?CoK9q&N)q<1=JFl!j6r='WrW"!^!T2*fr0PBVQ";raQ5?jhTFY(fnh/ksT"3SnD\;UDLC%U4rr-@2^Iu8mU1rTB0#7\I8\'ENfu"7HQ-#mkLH]J,jF1j$g*3lRSae^D5h,0Pm4';2'FmZ%PR-DA<0"YKLlsCKYuPthitu)9cp'/>T>A0Bgq`%4]#Mlmh(pHOpKLoeKcQUX10`K6pqr>M,*)NiP=c;cUZ'fpJp#2=l,3eboG'nE?b%&+glGQ*DUFMMLb<'LjKD`!4'h;Gn(*&D`Bi2*(jRn;2YU>e-@RW70MT00Z!\YV&4j[le;m$sY?$J&!QbgCcCXP&bN.si,SZjBY84B(>^rh^#R8$^P[q2bEeWCa(KiP7>1,sIMU2$B`;j*J8QL9W4KutGo@XA--EC]dnjZDIQaMOD_X4(L>u;Fu\ASC2UanK`qk94V%KYTUG?A(JcGm(4B:Gs&*MYCgCaCY?'MHO5X]=Hu>CtpX"6bj'U*T):'9M#Cf1.&aeao=)s*8HuU"r0>>"[hVU=iu+m61_I[+Y<Q!U:%jC'$^TkU-s4?,.j>c6SOn19@Fd1:U-b1Y\$OG*BqZ/,[S-X_%PH;Rsicro3d#!%EgR]Y>Ts86L^ua#]('i2tFsQ?hd)GO;3jrET6(FePu&;fjR/-mc$.f0t_F9a2kuPii;!"1:bD3s7Z6N=V]5/FuXHW(FmHD/f=BPJ-uZBeTD4rZ(U_m>:eOW>g(%q(Os0@`WiC:X>df,51n\.6gD8JB.Ap1K@HXN8,dlKq@2:Du!8W"Ur?q]'#JVHfA(QIi#IU$Y^.M>Z4k<cp(uGg7,Os!*'KD*^h5?44VJ'HG$5=lt][)Z>!qOs*2k_I5AnB-0M/g)t#m.8i1l96d47#aiK9f_mubs#!RF-k*"5m1_k7qg+'dVrFWCrFRA7QUiLBaL`\(>$^]4`;fhAHL%++"oXk-sJWha$BqKG~>endstream
endobj
44 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1552
>>
stream
Gb!#\gN)%,&:Ml+D"Z.'2i?PLb&ifd:7APmlc*Z\;YL29<t]$V:]XD$gZcIsTpleON1#eUm:aL,OUL-<_n@%WJPRArpmY=bY6N@#_ghnE(]fQ-#R6(RHLTk=#Ab+mAR<USP!)?7k(Te\BH975Kl$?b[(:i3E,0f=!XO2JCL35O5oP@l"DJQ+nFhIILc3[kkROu"LF&CG;HCjnHjalYEqTbC;]%W?qu99\gFu%c(']g'/>g$#9DgW)BIEYF-+(Rfn0/+`!Fu+lV?>QNJ67iZ==ai5A$$#4KsKS;7-Ju#Ot8lR*oKPX!(,A;6PIUUJMLH&m(C@NC6U`melq<%N6p]#&-er9:uFl8/38!-:9n7He!DN(Xt-EjBMh*&$Bu<H<R$c(Wu(7;/Tb`[X%/`D0N<+XS4g$h7`qsS7?aq^^&E/icGK!jkp4d"$^bWc6Z"L8iJ_PYR>7G):s1MR2[HmTh2Apo&lonYItK0-+8??@3>WHs#bT"KpBWFR2`8D1Db_C^^rVlZ#AMU7Dk+e9J=Yg#=VZ(9M_#ktP-PTOHhMK7VM1IY&oIg)8^72?k%?A:Y_M3YM(pHV,k+]Ndtc5lhW%?QId_MEUN=$GUBS5rH!-YkbrQ(!-=BmqpJ4QB*;,^'.F>L'kD.f=mj-_>Mt1,oJr5s8K*M;f;_!*2n<lRVKGAQU$Md"r1W,A:H&F/5p&^:dbs`["ankh9idH=S%`X;L$]uO=5Scdm47AJX8m8>h7+\[Y9c+>Zl8lD^-HVQ"9\k&DO-FtuGVN.N;B3/`&m<[QbV4!;BsX7WZ3f/`c4bOr1OG7?PR@6)%QW-b@go\W)o>@]IT0i"$>r./:+QK66HLl\D*;YeS9A/#OqPFa\5Yh%)D=#RL,c(gRsZiA`nY-D)i;Is->2[8N=q"<jFpGD2[@;#-=Bp,Ee)&Rr61%dC#N%.0_:Ga%@WC_aX5pZ:D^*+*F"rCokS4F:I3AHl=*UL>QEQ*L!/5Tm)W_K<mTA+],#N8,VQ@'lbZmU%0ILi-b1!KgDe_</-)4a1+cJpZ`d0q!9XH\8ooXG&__<&cbT,1Fe4"@5m5fH1`CC6A><BcW*=3LpAFq&8*YPXRbphgLJ"+75Lf0ITC_0fD#G7SWl)#8dJ;J]m.)GaY>jQ2m`KckB.LA8Z5[o&Z"SG&Dqp(U*,REHf-f/1Y=!6QONnZ,D%db$F`(kd/SmRj9llmQ41WT6Wd&P>&L7264nN.>l>lj2NTgkgjM0V@Fedd_BF_spm\]ITpqELNB,0W6\u..L1RaqbfPFV+<SfcEf)bdB\&2]8qW6Yk%km??`mVfKBWO$8UUd`AfX5+uV^tR$b15:u^=UC;2&_<VS;)#SrkD:?\_.37f$XQaocu,W)NTW!D\MnkdSY&2S6k0BR,0la2Klo^nB^^1X&/@**`[Rq*^Otq4FV<%VDhWd>qO.7XK6$9DtGR%WQHS\NJ\?#c!UVhb7\Be6R?7A4VRXa3?J?$TjFWpTl\G#6/D/;$!"g;e\@40oT<FIZ24NKKNPd[]&gI+21l8'D<XG+Zj(s_&0C`WCP&BZ~>endstream
endobj endobj
xref xref
0 45 0 18
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000123 00000 n 0000000112 00000 n
0000000230 00000 n 0000000219 00000 n
0000000342 00000 n 0000000331 00000 n
0000000547 00000 n 0000000436 00000 n
0000000752 00000 n 0000000641 00000 n
0000000857 00000 n 0000000846 00000 n
0000001062 00000 n 0000001051 00000 n
0000001267 00000 n 0000001256 00000 n
0000001472 00000 n 0000001461 00000 n
0000001678 00000 n 0000001531 00000 n
0000001884 00000 n 0000001820 00000 n
0000002090 00000 n 0000001904 00000 n
0000002296 00000 n 0000003797 00000 n
0000002502 00000 n 0000005344 00000 n
0000002708 00000 n 0000007307 00000 n
0000002914 00000 n 0000009284 00000 n
0000003120 00000 n
0000003326 00000 n
0000003532 00000 n
0000003738 00000 n
0000003944 00000 n
0000004028 00000 n
0000004234 00000 n
0000004304 00000 n
0000004617 00000 n
0000004796 00000 n
0000005329 00000 n
0000006076 00000 n
0000006897 00000 n
0000008329 00000 n
0000008656 00000 n
0000010193 00000 n
0000010508 00000 n
0000011528 00000 n
0000012881 00000 n
0000014024 00000 n
0000015570 00000 n
0000017078 00000 n
0000017395 00000 n
0000018827 00000 n
0000019263 00000 n
0000020404 00000 n
0000021752 00000 n
trailer trailer
<< <<
/ID /ID
[<4ba4cdaa716430c5e4593eab67d6901b><4ba4cdaa716430c5e4593eab67d6901b>] [<4025b2061c2075f6dff01e41b90413ba><4025b2061c2075f6dff01e41b90413ba>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 25 0 R /Info 11 0 R
/Root 24 0 R /Root 10 0 R
/Size 45 /Size 18
>> >>
startxref startxref
23396 9925
%%EOF %%EOF

View File

@@ -0,0 +1,343 @@
# Les 6 — Lesstof
## Next.js QuickPoll Compleet — voltooien
**Vak:** Technical Foundations
**Vorige les:** Les 5 — Next.js Basics
**Volgende les:** Les 7 — Supabase Setup
---
## Inhoud
1. [Waar staan we?](#1-waar-staan-we)
2. [Server Actions — forms zonder API routes](#2-server-actions--forms-zonder-api-routes)
3. [Forms in Next.js](#3-forms-in-nextjs)
4. [revalidatePath — UI bijwerken](#4-revalidatepath--ui-bijwerken)
5. [Loading + Error states uitwerken](#5-loading--error-states-uitwerken)
6. [Middleware basics](#6-middleware-basics)
7. [Environment variables](#7-environment-variables)
8. [API routes — wanneer ze handig zijn](#8-api-routes--wanneer-ze-handig-zijn)
9. [Polish — UX details die ertoe doen](#9-polish--ux-details-die-ertoe-doen)
10. [Voorbereiden op Supabase (Les 7)](#10-voorbereiden-op-supabase-les-7)
---
## 1. Waar staan we?
In Les 5 bouwden we QuickPoll Part 1:
- Homepage met lijst polls + create form
- Detail-pagina met voting
- Alles in-memory (`lib/data.ts`)
Wat nog mist:
- Stemmen werkt niet écht — refresh = data weg
- Form-handling is matig
- Geen loading states
- Geen error handling
- Data verdwijnt bij server-restart
Deze les: alles aanscherpen + voorbereiden voor Supabase in Les 7.
---
## 2. Server Actions — forms zonder API routes
Next.js 14+ introduceerde **Server Actions** — async functies die je rechtstreeks vanuit een form aan de server kunt aanroepen. Geen API route nodig.
### Basis
```tsx
// app/page.tsx
async function createPoll(formData: FormData) {
"use server";
const title = formData.get("title") as string;
// ... insert in database
}
export default function Page() {
return (
<form action={createPoll}>
<input name="title" required />
<button>Create</button>
</form>
);
}
```
`"use server"` markeert deze functie als server-side. Form posts er rechtstreeks naar.
### Voordelen
- Minder boilerplate (geen API route)
- Progressieve enhancement (werkt zonder JS)
- Type-safe — params zijn FormData
- Te combineren met `revalidatePath` voor UI updates
---
## 3. Forms in Next.js
### useFormStatus + useFormState
Voor loading + error states in client components:
```tsx
"use client";
import { useFormStatus } from "react-dom";
function SubmitButton() {
const { pending } = useFormStatus();
return <button disabled={pending}>{pending ? "Bezig..." : "Vote"}</button>;
}
<form action={voteAction}>
<input name="option" />
<SubmitButton />
</form>
```
### Validation
Zod is de standaard:
```typescript
import { z } from "zod";
const schema = z.object({
title: z.string().min(3).max(100),
options: z.array(z.string()).min(2),
});
async function createPoll(formData: FormData) {
"use server";
const parsed = schema.safeParse({
title: formData.get("title"),
options: formData.getAll("options"),
});
if (!parsed.success) return { error: parsed.error.message };
// ... save
}
```
---
## 4. revalidatePath — UI bijwerken
Na een mutation moet je gecachte data invalideren — anders ziet user oude versie.
```tsx
import { revalidatePath } from "next/cache";
async function vote(formData: FormData) {
"use server";
// ... save vote
revalidatePath(`/poll/${id}`); // refresh poll page
revalidatePath("/"); // refresh homepage
}
```
### Alternatieven
- `revalidateTag("polls")` — invalideer alle fetches met tag "polls"
- `redirect("/somewhere")` — redirect after action (impliciet revalidate)
---
## 5. Loading + Error states uitwerken
### Skeleton loaders
In plaats van "Loading..." → skeleton matching de UI:
```tsx
// app/poll/[id]/loading.tsx
export default function Loading() {
return (
<div className="space-y-4 p-6">
<div className="h-8 bg-gray-200 rounded animate-pulse w-1/2" />
<div className="h-32 bg-gray-200 rounded animate-pulse" />
</div>
);
}
```
Voelt sneller dan een spinner.
### Error boundary met retry
```tsx
"use client";
export default function Error({ error, reset }: {
error: Error & { digest?: string };
reset: () => void;
}) {
return (
<div className="p-6 bg-red-50 rounded">
<h2 className="text-red-900 font-bold">Iets ging mis</h2>
<p className="text-sm">{error.message}</p>
<button onClick={reset} className="mt-4 text-blue-600 underline">
Probeer opnieuw
</button>
</div>
);
}
```
---
## 6. Middleware basics
`middleware.ts` in project-root = runt voor elke request. Voor auth, redirects, headers.
### Voorbeeld — protect /admin
```tsx
// middleware.ts
import { NextResponse, type NextRequest } from "next/server";
export function middleware(request: NextRequest) {
const isAdminPath = request.nextUrl.pathname.startsWith("/admin");
const isAuthenticated = request.cookies.has("session");
if (isAdminPath && !isAuthenticated) {
return NextResponse.redirect(new URL("/login", request.url));
}
}
export const config = {
matcher: "/admin/:path*",
};
```
In Les 9 gebruiken we dit voor Supabase Auth.
---
## 7. Environment variables
### `.env.local`
```
DATABASE_URL=postgres://...
NEXT_PUBLIC_APP_URL=http://localhost:3000
```
### Server-only vs client-available
| Prefix | Beschikbaar | Voorbeeld |
|--------|-------------|-----------|
| (geen prefix) | Alleen server | `DATABASE_URL` |
| `NEXT_PUBLIC_` | Server + client | `NEXT_PUBLIC_API_URL` |
**Belangrijke regel:** secrets (API keys, DB passwords) hebben **NOOIT** `NEXT_PUBLIC_` prefix. Anders staat het in je client JS-bundle.
### Vercel
In Vercel dashboard: Settings → Environment Variables. Apart voor Production / Preview / Development.
---
## 8. API routes — wanneer ze handig zijn
App Router heeft ook API routes (`route.ts`). Wanneer wel/niet?
### Server actions hebben de voorkeur
Voor forms binnen je app → server actions. Minder boilerplate.
### API routes voor
- Webhooks (Stripe events, GitHub events)
- Third-party services die HTTP endpoints verwachten
- Mobile app calls
- Cron jobs
### Voorbeeld
```typescript
// app/api/health/route.ts
export async function GET() {
return Response.json({ status: "ok", time: new Date() });
}
// app/api/polls/route.ts
export async function POST(request: Request) {
const data = await request.json();
// ... validate, save
return Response.json({ ok: true });
}
```
---
## 9. Polish — UX details die ertoe doen
### Feedback bij submit
Geen feedback = user klikt twee keer. Disable button + spinner + success-toast.
```tsx
const { pending } = useFormStatus();
<button disabled={pending}>
{pending ? "Bezig..." : "Stemmen"}
</button>
```
### Optimistic updates
User klikt → UI update direct → fetch op achtergrond. Voelt instant.
```tsx
import { useOptimistic } from "react";
const [optimisticVotes, addOptimisticVote] = useOptimistic(
votes,
(current, newVote) => [...current, newVote]
);
```
### Empty states
Geen polls? Toon een mooie empty state + CTA: "Maak je eerste poll".
### Toasts
`react-hot-toast` of `sonner` (komt met shadcn/ui). Goedkope feedback.
---
## 10. Voorbereiden op Supabase (Les 7)
Onze QuickPoll heeft één probleem: data is in-memory. Restart = weg.
### Wat verandert in Les 7
- `lib/data.ts` wordt `lib/supabase.ts` (echte client)
- In-memory arrays → database tabellen
- Server actions roepen `supabase.from("polls").insert(...)` aan
### Architectuur na Les 7
```
app/
├── page.tsx # Server Component — fetch polls van Supabase
├── poll/
│ └── [id]/
│ └── page.tsx # Server Component — fetch by id
└── lib/
└── supabase.ts # Supabase client
```
De rest van je code (page-structuur, components, server actions) blijft hetzelfde.
---
## Bronnen
- **Next.js Server Actions:** https://nextjs.org/docs/app/getting-started/updating-data
- **Next.js Forms guide:** https://nextjs.org/docs/app/guides/forms
- **Zod:** https://zod.dev
- **Next.js caching:** https://nextjs.org/docs/app/guides/caching
- **Loading UI:** https://nextjs.org/docs/app/api-reference/file-conventions/loading
- **Error Handling:** https://nextjs.org/docs/app/getting-started/error-handling

View File

@@ -0,0 +1,206 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 8 0 R /F5 12 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
9 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
13 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 16 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/PageMode /UseNone /Pages 16 0 R /Type /Catalog
>>
endobj
15 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
16 0 obj
<<
/Count 7 /Kids [ 5 0 R 6 0 R 7 0 R 9 0 R 10 0 R 11 0 R 13 0 R ] /Type /Pages
>>
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1881
>>
stream
Gb!;eD/\/e&H8h>EPT;a/Z=hs6qRQ9Tl4'9FBc>dm=9I(A=IS+kf&Zp]?@D8;3E4cM&f_VMCf,IQoa*[oB>Vi;.2`[S!Cad0u3)e]KBc@3/fJ@\[Dm@&+FIIh-)]Q>e2!/N_c3rK,lr6$aR=.J1#.Fn:6'cV<pnl>bB]`+8EWkT9N#9VVq$U`P@dk9&Bg,B:eV3KDgf^360CKm0OB[hd>R0S+HbdeCe9!eIO].$W_mp]K32iR3t-7`GkD&n"7qaI6(I*oI<Q[pf(d=H<%bJEs]%qi2p1^-s`e<)2t_,o\9T53-Bq9&;8h^qEa4gO^;'`cGR1f6=:f=+-FC!#Jo`5KYqUDGRcLDQX3>C^=[J&=)ghU_@M4BWA%C7>RTHJm:QGuX80Pu@oL]`AoG:.Ce(c2)K1Q<PuSL!=d`HabE5d0CK>-7NOH[#(<&*Sr*A(/J'9BCS98E%9spDXEsJsk/.AF-&Kf[c*d6tE91Shals/8oVk2dTk<Wt8"D_$Hp?"_p]ih&22qeK5B'dO*B7#U5X9Ib?gg^A.`hoHRG?+Aj:GISXXau2Fle^ii0(q)b%X10IMNl7k;nA>m=h&ShD\ml%#HZDWB<Tq&%QH979p;Q[KmfN0a/,BaS>T3eDpikB.9/L`'^/=2$,NM&)Do_*$/-6O>-trT_2m9r1/m&nen.,Ma02ooM!AVW/[1U9lA!728L]*9T>R-?\!$/k'k$DGb^FoGD;QR;SjZAl#Yri[1(+J\-Mbqp=:TEaKK%(*?fk.Zkj/3hMB/Ge+SfI<VpS`q1Bip+K4#5jdfQgiJW&V6S:nG)$WS_o&)r#M(Ukhtcbh,qO,\OjCg."nBac%H"on?$(Y<6Aq[hdT-E+KreHRXL3(.W934sYBAVI8JZboA4W*:lLi6c:mg2,dRDb-bgS_MQb@#4G)+u]ku3m@9h0e`9>l[;"rDTG1K(q1eT<Hm:*=,P"*moZnbWG%0qS3;*s3+p?5\t&.]WmNA8L5%$eDp?.sYO<HskMo:Tm%$/JZlW^<Takh/^V5A0#'gf8$*;\'IudBS?t>74Ug,-[21Dti3[,8.6-/pG'E\qRW,/:cGVuTaU9)P]1lHFb9<j6Ab4uocl*=-rJ^6noDBNAqJWS<I<5p1gBMo`:-cS:V0hrg"gk!D6Q6b[)e*R@Q;kqkL8T=A!$'b?9.,@'8q*:14>(r).4]LTQEE1io:M2B/f5$Z-W5P?P8Sb_!.mfPj1`#s;TLY]klU([n8AU'<SEXPo0Ap-%V.I8KrPDGK/Hm2P.P!iM0d;kpBoMbkE#bPb4\-EiF2."n/5kdF#Ob7[:c"aJM48'S/anC=*4:tn?k*p`GKEHiBbIJBJ5r!$E"Z0V-AcIjOlk(u\AuuN^B`Pf'%T[!e_'1A8JFenSV!mrRHZ`el0GXhrJkn3;VR<q74LB.m.QT^*2s<lO>0`!n>)rQNPbW#1KB)hb$h.^W2rN)bgNNC"0s=L;<GTUg5M[B.F!Z'gIoM*VAe0@MLeHK:=F$R18SV5JTT;"U#YFF0Rd%43g?^,L*U&d]J_%f)FQbU_TjA/a+Gt1T%H'6Epbgih`A;')n+q<V^H7Tq,[9C#X(iG_ndU(Xpq:EeTj/o*bGS[h8d->O>cP2gDg\?UtZ"J[oD.M8\$WKLXkj.#/1LjT>iiOi6a#T"[r2J0*%IMg[>;>1PLn<Eou/T0D,-M*;HPlD(-31;8",15Z_ZN,Ju]Eh\"@:BB]koXg@Z##[8=)?kTM"c2L"_W6_fqjuaUIa\*T^6bCG.+*A)+#fajQ#5f)LOJHrRF^F]R1qsI\"U@!?s.BWN$5LUX"D'M_MT.+c4!&2:$';.09]9LN-SRIgc2Lr/Gp$:37Opuna:.Q!LH$jW6UXr)Jb:[\Id^Y~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1759
>>
stream
Gb!;dh/h%)&:`#5Z.#Tb#/uaB8`kO@30(W-E-Gk3Gfkp_/#can%^K=H%0-4,r1,_fm4lKu9r<q^C%o*o];FNFLK=H<.tC]"R(T+X),(i3!trEA/c7LII2ij=R0Z,%^@_>Z!Ju3u#A-!=+QS2G/>=7M6)4c/OH`9R8RQd<#V*W'=?IL!+G+r,#!aFC\`@t[qh-b[X90)U*o0$;i0+XW7!O=o@Fed2L-'&n<(GILLdsfE_K5tA^]4+K!e99(?-Ftm4GEO\kkTpd).N_ST"o,iXj_["bqVmF@J\&"(_@.d6kQr],l1OXL!:DkO]/Y]1'MJZi#QS%%P/Z@,"""Kc/W<;H<a*>ftaY)^cDk1k9]o/5-i3U"2l5`%ccUZCM?gM*RCYq)\@cII7cgu,ouK,qR_A>h'E!3eet9oMN_i_KiM.i4*dNdGX"rrT%Cj`d`1>P/lWUa.+^Y6I\8h'8Y"DT._+%VrfgZ"(=&+:.($gE-UslAN4m.(h(8Vs[;IPV^l9Fn6\!LFlJa7k'JH+YL2j3;)R]M\Y4LG=CSR(1DqtkmQ"tNF$4TQ2(j$nA:(?jr3@B9k6O.T-#2e`)gtueX1Kp'(==k(/E)nD#?I!DNB18@)(:dQ_n0QCipZ1rL9O@.FM%3`,"TrQ[!$'lrUW?cH!s;r:dl3Rt(:`T`C<W,/0'=.TY+ak1]A.WEFRul93Ne'4`TM%IM_`1EW;AR%E2fO'T*8h(I9"(jb0%YS$Pk+qZR<]&'m!XW(gN?iF83i;)@]E6$Ed,SOQCJf]SBq5JRQrD['nHNlgA-g.S#_gh-R')\VE3CTT2+SP#.3/*(sIZXW>EHZk:kS_EqLg?o8:EW68VYQAu%2\V'iY=#2l,!`'5+A@lJ<l74CX81;k8l#;Uo&c(j*9q5W$Y;UM/\eQL@hkVJhKTq,0?;Jf2H-NTfa^,1Ta4d'PV<NKT7i.r#p:F+)i-^>1m<_5Z'lIETLd]=TUMV7_;5[ERSP2;Nf9<UGC1<*jmH(l?.6%VY=kS*`o\2K\\^=N?:@g<5NLc9E>kf#i1r!YCnFZcu*`Uumd0;Q[0cef)IIt^6P9HsUoga7Ic`R85,&']"Nq$f!-8sED**U-gWU4ML<%T18AlW6,2-?+R6"#jDJd2a)<%9$oErubW>uHZE[S*h0W),cBiRJLS*SB\3K_"V_d#jCWdMbg:XE0%.l\-fegKP.L.m4gn[LgH2*sNSZ[?*l4dUY$Nmm"c9&d2+<jqPV;3e^SHT7?7ak1bgmKL.sEGM3Wq;G";L/S&UmT/T5,=<G`)kSPWOkQN-g^5t^&kG>S3p>X[2e$DVe]:Y&N'B(auds3ik!Zj>?0XnP5]K%i252]i9osSLL:T)G*dcne(Bt>m6rjLfE%(nY*CSf7?es-nWLXFU&CbgmVcRH)t+B?q/3\P<#c.ut\bEOdV-pfHl#9nP&&c.#0:97Bbm:=r\%h'\eBD[5<+lkkj2sklRW%%WpWS40>4@udk9[Ua4G*a.2_X)MCp\bcL8#I\@@]*KW3,O8mE28leQ,]t?2ZBMsQ#0aE5L9$qq@a94e'Dh.UehG)pQ00%Pj=!Bm-%(0s([YLSV4FpfMdb5H?Gfi32U5jd^JPEgQXQRqHB^eltV<](O$Kl2:fE)JT;cLSW\3B?-J4_kD<m8=@7f"D>;tm`ii<PiECnHW&U:c.2K&eJF?*iR-PcC1TP=pi+P*[fCqPI2NU&FK3_OGhISfe?38XF1n6VhC#T11]jRCDpoAXc$P/3q"a+=6@f~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1681
>>
stream
Gau`S;/b2I&:W67\/BX4MiB&4M57F&6]*KuJ>2@+[h"*5WlVQBb`Z4gcIrF#mlOFU/A%J''LQXT[WF]^GJ#08:Ll`\c2;cd!'D4<k`Pu,0V/<'8-IrhnCopI*tU'7N+*p'U1(oi,b]R9R0P%VJr#(-$l"spaTs*0Lf0'2NoQpG&r_RudsqI]Jk?aY;(NJTHnml2Jo_>@O][G#E;V%IjjHeXfOTbO2BN&h&%7m*M],'<Z<5+#/n"JFO1/3[HSsDtG#MBKG[l`YDCeI@QZ-pJch3i8<(h)"_"\\b:L/J\BI"9e6-+K$(V6bd2/>H`V=V>n+m]4,M&"ei#eik\Q8jRp.]e"_(hJQ>o!H/+R9b(>X=)s]g(Pld8BRg:X_eY<MRn@#;d4`;BLHF`U:*6gd+T?!PR&a$<,7BuP76Jf^mPan;k$'g6)`Va,%*egebP^&_!!CO(=6>B$bU1ph2L79Ap9XH2h>=+mbP6sF;[F)f./.^ZQ_F>91Zo;(V$:1DoE@HYJI6iO=bKYg;,G7Dfe($/!<F8q/L\bXGhi<_"!bV.:1cYY%h(VbZ"`SN(u2+o<]un6(&ut;P2/F08`aCE>*Z,.PmPq-+mPi(V+t&ZF251_oWR:3$'RVZ$;+?:]Rf$XPF;N\t%pE*-4@!T8gbT8KZPT(e;+5)b?akb*6jkm;mkn?DlB_4["/E`)rXMYM`J!4Oa'#S.IH+',\BaX<+H=8'TEPT"#sf;5=p#ES&6Z@nBp_m!+A^\ClHDn8sCBJCIZrm,8F1]C=G<oAbtMON<N)[Ah/[?7o:pb-]N.K50W^"u,>Yi4/(mdqphN:$s%7rUl?k\QPHsE_jn_mQkl+%@J=;mdhk2^P54ENh?9)o@n-W2I5CmeBN%flK@2^HZ;nQr9$9Gi?kI^')=eB<E$tSQtiR:>#*Pr9MbLPL/\a1;tg0(Q6Sc9$5I$t[;dCS0PP6eU[3<)2M9T?BXYTgBstFr*>mVOqURL('T')lqfI,@;WN6`m3P7OaHj&jG_sL#fEZ.^%2E.b.Iu.TWNL/^AgbJ;DIbI;bWW0egWnr)ThfWPD%3e9@mX)SaKhMO83]e&N7,h3T6`c78d!F:5j_rXA($F%@2FD4JbR'*KkT;cd9e%OC&P<\TG<n(jim!keRC6N3`:6pg@PM#2cl%U*j<,^2L!mIXagM%BtCoM9s(>Gh58Gm:1sEgZh8Ke:Gr4,5&Vf;jr0T/^fq&WIHV#r7r'(!`Og(hgX(H+&),PWJH"sXBMOSKT#2Y=$B]Y"Ab\BF%GD*Z"))0oF0[5<nTUcoT6.5Eh%T'=RRSMenV0*<dpK7MlTRH=.4%)B-:X0tX96N1^3)D])VNROd0c1(1@Rb',(c)jCK(\.OM,A"gYZ8PFaj4K2Lk$G:bj*^]n@H'A1pm.\qFO(]l$/6Ba_BgjuQ0*0VSS(9-Gs:P1lS0cO`N@Ri:^9oZ#]tTN\$+ieFIS:&7e#W"bCEq>HS?Z'^3<g-9O1\$;+AJV,8.e*b#V[J0jEp1AO,fNRJKN:(/'@jTp*^K(XO(>`(-9Du\e>jq>q\FBqUmss$GPO6sVq>p7PK$j>gXhu;GRn%JSIK_+:GG?HVeEFr.I(Fc^`9H6?Sf(hkJGT^gDr)/eJE%,,$q:=0gjO<sgf0!qO7=V^<5S$%+o[Pco8A=QVF70+GFoEc"TJOXmQJ/~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1762
>>
stream
Gb!;c;/b2I&:XAW3;?p$\sa6\MPRPR_m[!UJ?EZB[kI=oA;dnHaHA($8V8/cI7Hkp'K_/7(+?WDLi&%Imc3-n4!"PA?aT_q?N^3e!Tu<Db$_LTapEjF)gF4XHl`hGR,gFB:UsfIJ-;JBK7#[M_&#KB/>/Y@8X/;O'dZHU$5fq0P"NeQ/=m;!&1Lk`3"SN,Tu=cnNsNbP1ag!K_>a;"T<e(j,&29lZ[*i5cCjj-)H;b2Qho-caVmWes87*G^Lp2FbZ@r5^^$(hq9$L;0aYUb_+T3MPAI#c,FEk1aYR_*"3Q>7/I6V@oSkI1P:\8GGMt;P6f8u8pZTEq=qVjWI$^VknZc:^Y'*X]^b''3RL&92UJou`aTF9^0Qr"ONm;FK_^qQDRSkSQ;='J<..J`d['=`Z=MZu#]c*3@qOK9JPj=5]M5/G]8[t:NL79_cMW+3+1tZ\a<-^#ibLp(^&1.]Q>+>=[(U2Hp9Xob%q7UUl-/[)p?g3Y#`^DWH$`D(sqJrERIBQ"]ZQWQjl]er:ZP9:3GeH].H&QWT*F*)r3PXJ30%_f<>X:J)I(P(o-OArp'-?U;dC?MFRB1G,:Z+q_7WH"m+5p4kB/pY1#oBh*c)&_3FaC7#>=+j&$.4XGroa7Mj^ig>8a*@!SS3Y99TYRcMapl^\#d%>^!dt7SPEfHCm$J/"^H^0$u92]6AA<,SaYY^o>P$"e5)ai;.#*'1os=p%3NlUqmX?UCK-$bQNdL[\G<5cC.3AtW_JkAirQ4d>fo[SS$?M>Q"q2E6]K4ric8+D8(;G%I*dgL-4/_&Q;Gh.5e-90YQLeJcH8]fK4Y7[g)nFe&uejnZ.jl@XfXSjX(qCe[Tr.km;CX]o>,0<<\+($8[8Re)%i46>*D$.&<ME>-Le!1W:7u`(c`(ZRuLpsbP=5[rc+)^"\eIJmcq*1#s>!rW!Z"DfjqY0J1ncV@UQH8.ljOAC-%e)_=b]jk\e`0GYfq4TQli@DY<)L<<D!uQ"'D9J<MCqJ9_bC`S5@6:PZn9SEo^qR)<MeL+aT;o-LXUBS1Ja[i-ca/]Z$s]G`RBX'rG2,99(;`gHLH]\+WcL<D;ofFXPoHe^!cPNkGT*p^;eDoqU,oGD@<SN(;^B+`#p@.-#HU?U'$4Xj6Xg?CQj>V4Ys0=k5C-gK:'9OjM+WQ%i+6\O0iFUH)7:/d^I7jsBF]#MKVZE(8cZZ-<CX7AT-adZZ1ZXD"`*qT@5\eccHJS&3D_ed4DMDr,e>ZOR6(c3I<pR31`mPQ5,$g+n+^:3N%5oRQXDXit:P?=_pfTXi"'@k+g6(ofm?okk'D8/3R$n*e?DN=TnO89:Z.X?H\b14Q*:#lPhL+(%o_#/S=f94pTe=/Y-h"mECNJ\p>@jq$EoEAK1ERY6/'FCS6#i5-r2PlSHdLDcpgUCqE?+Pf#D.O52R:EuD]fu8+<K_)[?*Q#`d9fQR)PE<IZIFhG=b=.r)QuD!lelnjS2`%M@qi,KQ'O<5L5PZn`H<%rZGu;_>j@dlB@?s2:sfi#[PdbfQ)27Seb]49\d[n!fA>4hKe&/.P-#c5gn&XkT#@W-MQ-pN0$e.<fuZ-dXLFNlY%(5Gq0uJ3)"e35d_!!eTJC1-Hu&U&#lG9);5,_]>f/*DiqXg:r7KGA(d,(F>;u9FMKdG#`Rk^^fdCV%`d*jf3/)aL)Uo4\,Ft??4Pud?-qFJ)g7`J$<mR71Y]pX.?$7f\W5.L`\96gj<FEuRP;S2sc4kJ1Ch)a`d5p.QhdGq,!jbW7~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2032
>>
stream
Gau`TD,]1Y&H8h>Z/n?m:cRc9dRbXHl'R44A8'tS+oU>e7$c0-5aIq(D"9@Wn(g(==>gAGVUL.%dBU1Xm-_3hHVcEdS*K`e%WF1RmOJX/_-d>o-8l:XiH/IT1^N-c[2gBUB3IJ$i`k[UjO?`9iIq*PVr3sqnQ[#LNtTe14^beGFf>aH^uW;(5[83<SdiW5%eob3r>+@NTkTuUSGV(<973=_k7_0r6^Yh#Q(\=4SZ9)$2DM2k3\ZpgkKVcI1\a,(MCb9oBae(R']CTu+_*.scJYO$M)\cH\IX<3(`Xq+%AbuWciriT.QnSNQD]p58O&S38H;LQ_4MR\8cr]P/B>2Tc_uP[2[D:?cS7QTB+\_j*WtFoR"O]gbRN<LMpU$jZ!i!Vg:1Ihj3NQrRr3;dX(4Pl?DG5)0[*4kW\S4Upku%j=X[o0.thX?oa7^&5K!aP0()uJQtp9qg/_mSCG7J,e6'omCN%e=L;qHa4At'*]">-sn24S#7`gHU_L*).`dt^k3'KZ*q<E-3*f\4F\-o)TH+#fdoi>trPj,<tI$)Pk^;:iZ.DHGI,#'h4#l3Y;.$m+M7@(hMR)j@ZHO6it1EfgdmQGKnj"U,\eIWgbZ;iGiJOY%8BI:nJbbI"/GW"j/!m,Eqeo2_F[X_a,nQfJ>#p;Y1Eeq$XGTJ10+J6IX-l!EWg6IW=!gf*Y/kD951=+fGq/"^:lNV+IhJg6SC[)P]2>qBEbBtY"4:6^GN#P7(1qel:7V4r@7PZMWo_Sqq9SZI4[)CP)OD#A#!$\N.:=JrMcet]QB^HDNMR'J;X\pU@/,<'i)[%?_N$CH@nmNmXGAq\EXs+^\G`qD6f"NeK4PXjtQ2AM.4cbm%^-++9\3tnC>.R/RFpPQ^n*q5u(3(qG]I#k$UuM7sRURmR!lj^8;TF7N^c]]UR?5Hc;Q>)F#^<LsppcXT;u?7#oe9uQI2K#&#K:JbUR7^BTj+<qZq,>tFNtN7%Y1J(</fln\ePP,#oH/mXO:(bj`1rlJkU\=%bX+Q)[j'09jN`iVgpgZ.tL2po*0AE@)q]8q^3nu]*(lm<@$%(Ngti(+JW<YMl[qrD>R$A['7.?q*5(NNnm*55nkDs86.!2_]\s*DV=T[Y1*EcF/g!n3Y$"M:7Dnh\P)86BtL4g)F:d*3bSCfGKtNR>UqV^[f5=4\P\A?H\:0Hn+-*6*`4R+BpMPkaH!l<6HIX!n]g<*KD5>FPOl+fhtQtqX_X6c$e1q#0LNOoQ>)e)<GQTT-GkgAn5B#EUGRfl_^^9mNj'RbJlNB$WZW?nANaW\cY7uVCg].ebu#3aNj'4uq7+Y/'!],U,/dQ(1HN#<=`.^BUO%(6=`o%qqanh_:unQ.`?b;e4/\=<ccl,6fb65:8%569G[P9pQs56@gi/7ni^elMg^lEPCk\";bhNN0m%qVF<8^Wccq&rh/Qg1j]f9&^MM\D<D7QLbq;"+lq"KU#!iO[IO:H^ll.1IL^6)b%C^ZLPk%jn*_/d=7^d85\]Pq$MlK'0:iSleK3,hr=Cq_5)5/hK?q7X,iR-Wc@D=RoN'>p$7')8t>FArbR7DiA/YgI,!NT)(Kb37tg+E+/%51Y1bgMI2E(?4tNiE1i+_l`^(*Q#u5=9McMQca<&e(@?Q7[W+SCLme?I;dF9p[j^Y<\:_M^nu':1]k@$/7dQZ4#lm;3L[pd21Z]DV@m3B*fZHl:?,.6pl,'/\Gb&?FtI5Qic^g@hluq4'2N$A`^)L%V1BU._kkHG.%+[I<:.pn6g!m?R$N6TQp@gT#m:@D_#$MS6hP"O?5@aT/j>(kKO]&3\ui#m:C&cLn>bI;L\XR`=pt8l@-&P\jJYb=3R3BU56H*qOpEW50*5`O1<*Jl96?@[!B9ThYjSEeW[bT\Wd9R,>UU-r3@Z@9i!!it=_G>PoH1);EMEMgqZPc@0&2;nRm\J#jU(.qNM-7Y9c=)XKWM3HZ-Xc,'hd3ia",N`J&H]a\6tKBGm:#L,G>K/^^,EKjg,Cl#lG:6;[#X)'FVI-nS5U/BJBDiK2o-9~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1802
>>
stream
Gb!#\>>s9G'Roe[39)BMP-n>Wh%^C@j8oWD8Kl("cGY!ijTQ%8>")VaV@<L<7i+h(K5[GNM]$%Gm=+60h`6:?JKL?\od9`XHI+gP5Y^HJ!O[an]oR-^COKt1PF:3LJ69[m>SDp/ANu8][j#c.@BSim&-aM6gL(C]KQ%*^\;t^R+d$a:X@7\ZAoM/\&_(6@rNP0'bVW2)9cV1.jo)$(+u@OkXL&J^/:J0>=4#Bp$IuG=5ooAYDZZKe:+oE$K=[AJ5>ita$_9h<UnM^q*+#8Q4#rLuMIj'u]c6/ub7lcuD'mU5`YUp*au%Z6WW5'NY(Odtec>K(&Y(("ZS[SE-4u8HA)srrditI.f0u;?YVV!hj"*ZFP!g(=cKheM8CUV^'P9r`$`]]=X-bT]DC@I7a+^P+!/qoPXO9>j0+ahaGBH3QYd_El9<-I=S?FctU;Wa)d"X/$ITM'K7IWP&!)ksSU#.l^8J"P1S45QqL\HB!0HHCerOnI3#dD7r\QS7Paj&Zj8;>H#0@AZ#Q,tTH1&JjR_M;Id$tM2R<Ieu(9I@4iQFMn)phLdDkARJ<-\"@[5nHZXiY[%r%+B@U4J=PqjicCH7<#"+5<A=[8Pqnmb[g_l?!JRD%&=;e/,cNug'g-P&K0+3C/C6?M-&:QXr3)*OS+IpT\P5mbN?HN!0o*OfttfgetT0;0OiZ=Db@rqNSgaHe=jg"*1B5p1(0;i/=;&ga!hd((/tp"Wc,`i-!Z8GA"s5aC0a#DUSrSpC0Sm[[5[b[^GTcfh(JTK=k*R4c[\;L8ZRh=\\pA)acLNHEB24Kf'.@a@deV_clG\2e>$nVnO08cpSJ:NEaj"*bsCDtYt?itl1`8SX(gY\!))eZ;6SmAn%mfa,f:c>>=FPTfS&oSM;WTG`[XS,\OffNn(^4/4ZuLMTWQ6$IF,eu*^CuhiLQlXY3*I5pZm-"/r&5&7A8sprE;n/Q'Wc!?+l-+`3t@RQU;W@jGkf:l0u@Zl'b/7SXs=>'DZJp;gj2$ahMX%XmH[3ED]3Va*;>9HJ4!=n8>p)6O?m"H"-h+Mr6j/c2l=$63tfJ0L/UJ&#hLOlOcfQ;q\Oc+k^UX!'6OjD3A(/QZN!WdGX7V2Tbd^i<<@eQOC7bG#f2_4uJc4s1/?Y<#DF+@V!+G'8BD36!,s?R:mmTW7H(7asp&o9rf=(bK!Kj#G+/76#ZqjF>+$n('^uH"*Wutn"l!$C9I7AVDq,^3"3eFoW=?3Q80WQ/kEYV[bei"CFo9g+H;"%_Njn5lJpNZ51drp>2="sR>!0OVZ4<"0MZl<D2i_UZARc>$VUTHBt:1JTTWjQUq3PZ8L6*+0Vd4l`9j?l1'PYP6&_"9&7*2%OmZ_E9[7_YhN_VXPiXSMWag9u=$kfZgkf_,gY`gRhoNQbCF$&@?oL*tE\`bSHUBl.ZHS5E@FWIpCh)I,1U"^:*o#-\>@*EV^kZWoZ0gi([+9.KkhkdW?IYl0f@2slQUY'*@HE]LX`/8X)MraW2rC5m\<>PfJVkV#WCX13PT:CH<&2r7@#]HZ2FKe^:@S*EQn)G^E(uA]RLLH[ZU,Iu<CGb+jeBnL8s0cPF]/l<,r'-gUXo+V7'J?R"d==q\]^"_UNZ+b.T$jm-dqU/HNOp<-_p'`S:Z7)W(Q$F_NV89hJd_N+T#=R;_@?[FrGd@3UTWVeF31],a"5GcfWg&#TVb4?c!VTU?*b0[qDI)5(32C(iFI)*m6o@P;rG@JDQ<;7%sAfF$i,_^Oi&o-BR%ZPfe`Yg'X>\hY(8#PCN/91#1\CRA;7V2R\r4!a>U(5_?q)~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1671
>>
stream
Gb!;cgN)%,&:N/3m%c:T-3=Jb"Mr=S+_frU1RVJd-(Sc##E"0[g(_>QP]QZs!Ye4'Z:'C<a-0-$AV7d)c7X:d@W9R2=23cQ^sa_lQP_E-klNP-'W*PBq/l7KKEre'o`9?nog/^.o]utXE[8J6LkR+m^tf"\J-+gLE?9-Ck$/JU!479q_\!(e0K7o(&B?upm*9ke0g^h6ML<F\_t19agmT$'<a04\gjY29ZNJfS[8K/F>jM\Z9\1tIp%lQ@]MM6u`%.Z>G[G1tY=b/o'#9\]GU@;sVK/@`@!W:2LK6]2-tV2D^k.!.01Aa&C9\NE-<d9%JtO@HX[01R^dr<Ci"<nUQQ"p:^j$7NiV1&^/l8Uq\[32R6/iZ5nPhqG=mTibXqQ#%hA)!MLc^qE@+U9+V#KR(N4"K$EjAU)UpTD:D,n/H>K:+OW7RKuj$H=?6eU9U)rIT:$#<C)Z&4]H3h(57J`(_uOrFKe/;-RV;1+#1_'R]%*bE'.l0&>kBY0rsOn[dA/^@A)OU@I1FqK*u9$`2,Bd+h$*8YQ'BH@o*G\-FGK%\+gUDYA)2ROqT%<_j/2EKmMnuI;MRl%j)UTt;/67bh0H9Sc%&ot,:R1S])O@3X_B`Y3'XMnB-0*qOg72b>&IYCR,q$lOC]Ed:(-0_%!$+E5k1(hNX<'gc?8K6C\lhas,h!4E1@g<q#QE'(0#EKCRq9J=ZgbTq?2U]Laa-bmff>'J5V/s\3$.ZMoHV6OOSWn?$PW_mn.<k..Ci&F*J2g2U/:3Q-<+kt)nCd%EPj;CFl9_:hoVH6ZTEd@dT,f%O5H-8$FZn!9a>+q9!4bT^cD:n4Q7hWZ2E(n8*DVkN5V%td,'9aJ2X.KnC-<M#aA&'N*gd"ub/.Dsfbbl3-Up%9U?F3fDbh)PT<S?s0KdbQ.P4(oDDiD,lg1e_XU3M=Lm\<U9gI@M+Z'%jrSE:Snr&VR,`)5-4bWKa#/QUpZtn?NEn;Af/[Y_9+d]c+GD.u&i_d=B%<%r3LFZ6hRZA;^*]1a=+\1([eq/(aLt_fkNA(]!mlYc;_VC]bfT\_:o>089>+a\tZhlO"X[X$;ZgXcIH4X-)E"T:SBI@I:$4/$fN*i/p'N]r8b&c`*6#*j7&5gS1f`p6hf.`Lg[Rn+2"S-5?le5u2Gl7\do)GT<\WWhuD<]V<Pjo*\'SkF6[dCT^4?l)[L#QM3N1r,2;\LZ7i$Upb&e*#B*am4LC%BRf@lt8>U.L)D"5d\;@J'Dk2ZEhmdVh?)f?);<K*,]^AA@?jgEuReH/%T$h)oN[iO/o^Rfg=MD9LSirqK0SdASIobeH%S<FU6PNP_J>oqj4<O3DVRIdm]$]bWB8J9dGe)ZmP_j]@Qr'(HF4ct#)8L7_D7gGAc9g$kc,ql."k`9F_dnjHqjdSB$,Sf$<oh[e$kIWDO[^Cm/3FBp`4l,bi0O72`1<E\J'A&j^Ds)imW?93q#$ca%LV'sMd/go0P+;/=N)fB1&/4Ji4701(dG_38sBeMT89!8V)DTloT&0#tlE#/.p%hq4>5:@FU"/5K_-)Y&KWY1PPgE$lTY*l7JfPtG8UKi7LT^/pKfl/bZLmKS`N"b^[C)@.PSkcXp#VBR<S4/m'8Z_!Tkmt5$38%@!s("kcMTg.DQ%g*;9X<UpE_n*:Pr2^pZ;+(a0_uS<+o<G~>endstream
endobj
xref
0 24
0000000000 65535 f
0000000061 00000 n
0000000133 00000 n
0000000240 00000 n
0000000352 00000 n
0000000457 00000 n
0000000662 00000 n
0000000867 00000 n
0000001072 00000 n
0000001149 00000 n
0000001354 00000 n
0000001560 00000 n
0000001766 00000 n
0000001850 00000 n
0000002056 00000 n
0000002126 00000 n
0000002411 00000 n
0000002510 00000 n
0000004483 00000 n
0000006334 00000 n
0000008107 00000 n
0000009961 00000 n
0000012085 00000 n
0000013979 00000 n
trailer
<<
/ID
[<4df18e91edc6fd902063dd6395541b13><4df18e91edc6fd902063dd6395541b13>]
% ReportLab generated PDF document -- digest (opensource)
/Info 15 0 R
/Root 14 0 R
/Size 24
>>
startxref
15742
%%EOF

Binary file not shown.

View File

@@ -0,0 +1,92 @@
# Les 7 — Huiswerk
## Supabase verkennen
**Deadline:** Voor Les 8
**Inleveren:** GitHub repo via Teams
---
## Opdracht 1 — Pak Supabase Dashboard erbij
Klik door deze tabs in je Supabase project:
- **Table Editor** — visueel polls en options
- **SQL Editor** — query historie
- **Database → Tables** — schema diagram
- **Authentication** — preview (komt in Les 9)
- **Settings → API** — keys
- **Settings → Database** — connection string
Maak in `SUPABASE.md` een korte lijst van wat elke tab doet (2 zinnen per tab).
---
## Opdracht 2 — Voeg eigen polls toe via SQL
Niet via Dashboard knopjes — via SQL Editor. Schrijf 3 INSERT statements voor eigen polls (met opties).
```sql
insert into polls (title) values ('Jouw vraag hier');
-- Vervolgens 3-4 opties voor die poll
```
Hint: gebruik `returning id` om de nieuwe poll-id te krijgen.
Plak je SQL in `SUPABASE.md`.
---
## Opdracht 3 — Query een aggregate
Bedenk een query die iets niet-triviaals doet. Voorbeelden:
- Totaal aantal opties per poll
- Polls van vandaag (`where created_at > now() - interval '1 day'`)
- Top 3 polls met meeste opties
Plak query + screenshot van resultaat in `SUPABASE.md`.
---
## Opdracht 4 — Bonus: Type generation
Genereer TypeScript types vanuit je Supabase schema:
```bash
pnpm add -D supabase
pnpm dlx supabase login
pnpm dlx supabase link --project-ref <jouw-project-id>
pnpm dlx supabase gen types typescript --linked > types/database.ts
```
Gebruik types in je code:
```typescript
import type { Database } from "@/types/database";
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient<Database>(...);
```
Voordeel: autocomplete + type-safe queries.
---
## Opdracht 5 — Reflectie (200 woorden)
In `REFLECTIE.md`:
- Wat snap je nu beter over relaties tussen tabellen?
- Waar zit het verschil tussen Postgres en wat je eerder kende (Excel, MongoDB, ...)?
- Welk onderdeel van Supabase zou je willen uitproberen?
---
## Inleveren
GitHub repo URL via Teams. Werkende app + SUPABASE.md + REFLECTIE.md.
---
## Tips
- **Eerst SQL begrijpen** — Postgres is een vaardigheid die jaren meegaat
- **Type generation** scheelt veel bugs later — bonus aanrader
- **Tijd:** ~2 uur

View File

@@ -0,0 +1,105 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
>>
endobj
9 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
10 0 obj
<<
/Count 2 /Kids [ 6 0 R 7 0 R ] /Type /Pages
>>
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1991
>>
stream
GauHL8U&oK%)2%/i)ZcEKdE^P<9KK(Bp4r[S()=N^;q(*/!_JOMt>Y05G32gbI!9#]MKl(%g5(HA3f\(MYHW\i8"CiHsj`L%))hML]rE,E&02>%Dj,<//sBoWTeFGY,VFDR2?Og%WPbA16>HH.4h\K,>u)c33EpH#tPbXIr-k^_P';"5U<ZVl"mF[M8M?R[YX<1meZe&5,leJM,RQ4AsWHF$tldO<$Tr##\CHK@5*Jnk:_m?E#VSP3hF?2#iDpUNMdX&3>ZXW#M3^i_K_c;$Q)"Bi3cV4&Sa=b3.d#fTso</^8PRC9"F[C60&(489dB9efl)?g#\T[#hLu^om?XQ34NjD=Mc\]8g2+p0&b=-:HHdEUrhBK%ZHD0#@f*S[a"HuG0D,,?nO:a(j!l'NO!/,Cig_R7]!1(Trg0*.N9<@bm<jQRU:L,;%,HpC>c6--7(S_43,DrM\qT?NF.I3Rjc]!ZAY7]67'$NMk.K1X@?>KU9QXA)XP]SD5GW\g&K'pL"XCV9X5G$7C^TI9T;*.oW&Du2]kkOUN6M>Mc\$JM-Weg-;8</5SGR]D@sLQ<!o?.gcCBq6bd"3<\T-9=0,&"cEmU#[@]+bOd@P"U-'/Z.QWq+-q@tA^hi40B[YOVBJ\W#TZ,q03*JTU$[KWlom-tB/=3%"jo6f+?kd==[J)-o"mtt(^"M-TUUsR;(c3/sZ*N&_liD-%'TB^:5/_a-HW^nMktYe,#P9PQn+.gLe&*So'u,K4#@23aJ"HPtE2"O`6)]f0E#&Eoqm)1Z-=G_\rH>lJmU8h,'=G9.,t_VJY=3:i_(qJdS)s,)7iZn*;I.-ZX,C1o3O0(cG6gT3W!,A'!Eha)h:ZcSoWFJBLI%_.LUR3G_.+H4;#6r5<X\-I73V)>U8#n4++ro<+!DFP@TWgU%$W^.*QK`9`ehLZ\'o,YE1.)[Ru\<^:(p/eLVV)-rj)#,:R?<,QfhM`gXfam*Q;@EK1\VLdp^]WgKLlKUj2ba$teF5:]'FTK$511&4H#`>([S^r1q?cmYL>=28!G@d<m@YjeoY3H[ZHm&3Gli!`[aQ>1\UN3q,V4Jf?qqiaa:tMHsHkBs(D@M`;,D:_CX(r?Nkd/ffECGHL1!h#3"(HVm#j.es+o+N54Lg4Rq!rZ'Kmf;W$9AS&qa:sClRgih89W-SM6FJRYSKPeDkHf,.c,k:#D4OdF"hs[7Bf81Q[b-S()1@,ZrBQ(r'8CTCk0/2b;id%ES7$G,B]\!>"/bd"%HEHM_6r7#%7$I98i4-A5g[;&/qQZ)%rZEY]a,/ukUs?@7IMp2YSr\#I6(0*uiV;i]jP=:T)\:\Xk?e`-0ue!?PuV&=s)rnbm](b(k5L+O$Aj3I-Q.)]_,Hf=dYm&&b<UcfU7>\4<HshuEVLF86O."3WlKl2jD\flYq+e-A@&BO3-HV@KO<;qn8]<d@l49%9XN&58]tRCZrC-?%\(bK/*U5\;HNEL5bDajD)4#,il)T%86'C4/#pHSTKf"p_%WCqiU1dek3E#b`lljOR4<oeDJm$>L:oT>f>Umh8*pA!,q6,fhhj+FB3f>CS'TO5`Q`q`SqZh@JQOuUla&e*$eqBKG(<DIMXH;%kB*j9Y]G$?Y=pJPNH9b:OB9:f26"!V*Z8`,73dHDkuDmJdoI<&Fm3*4fj^VVXnDMp:&D?09N\t:YeVhKR1d&UBWobI*-(3n[c5XT7&`e#%E[UApTbnLeaNVr/^/?&oNqJ:k:a&54E#h2Le:t_0E0[S='"YNh@!Rp_P9_h`RujIo?sX*UC8,,:kdmrG6LZ%^P\/;H05t5]nM:],rp//lg0h6/5II#5mTC5-_=i.%T/niQdX7(^]u-[)<M#&3[VH.gY%nMLWGkZY^ji?)K?g.RH5':=aVUoktA^9_CoC`Z_WtDU9E,6mS,$bRNS4B[b,0F*[]/V]m%V#dB$/I2Usk^O9edu^"F\I6DQaT;a=Cu;B1`fGi%rU;fHLi)#jV2C.b&~>endstream
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1795
>>
stream
Gb"/'=``=U&:W67fZ?dN6SJP(+R,\9j4LLtj#0Z6,VPVN5U%aVV?hp3Q"/P*h?@h#Q>Iq=eC1Bl$3KqXDg+dh^aC]t-OYI<+m^1HTF?S<5V6H]n,s5U]oP=n3--ViM!5hTa+/E3IR#[U7::2R4m#U\%>VHR"dVf<lZt0;4Qe]RJOIBNiuSB`E5QZI+>1(4bLb%/KJS@a/Rieh>s2Q:kA'NL_COkIbjpJ+E!NM0C8dR:0rXKl0O-mCpXekpiCH[S3ghE3_Rh@]P?A)7`Z05K%/]TnL+8M2,8e^7pfK?9&@FJDgbG=!U.9Kj/nK'#;E5K@+;2IN'],JhfAtp4-a%;gBR9U2./ki!.%FZZ:10%hlLQWqDL(:IVfY<b^sYR;*3u#FiR\!a3mNV=>p2p7CeA!ei<A=Y"*(nEI&JeD64b?`n4U`'+B(P+6EJ%C,?G9jj2\-"o3*MDP%g3H-kH8Te0'H<&a?bX`"Y]>K%\GC<UK6.B+cG4P":^,rst7.$]*;Qe/pi*!<c7HP=maU6OLR&r3/4e1W)pG)<_=Zk8QQ+K3>]EKn[b?/^mBo+gAuYbn]B2e]Hd[S`JGS7A75AO1@qJ_\5Sg%5LOg.P%$Ta>=D^3&C1/>kQk)]@3*n0@(-L_S>@NZI*'^ba]?qijP0Kq@0=LCq.(fH/ldDpfM7nf<LqRNEfM@3dW@!dp3f>N[7A1,SQ:D._:8ZL:\YY<mL\E1Qn-VRdJcR$/u@K]I`Uu%l0MF36Ped(9'\lbiD+WhCau9:aDq=*^U>$ENC,(GA/R52gSS>#d\O,K14+,S?h96CLPP0%=PHdC'kV%L1N@#'t<$Ul*\,Ci_XMs"fZgm,9Co`,$,D$BXOh%TNOQYm>nK,=0C<RgLuE]/[#JH!k6^rBP"<k\(\3UPMWBB'Nk=8MhhOCi@BPj<>Fc.<-+pqK4P_!NNMMK*5r9s^(5jE81V/T?O,oGVF_bkZ-I>Rr7%6j:gkfcR0#afl6=!"64dG<?k=]#/go<pOlu4]Y4?/1')4+tAl*ta:ENN3MV-pp%,o#fZ^!_kG-SX=MlbQ+Z?/H6DhAkN>m9[UUsh<FK8W>E`$\6NM=TaKElLFZYmetT5A>RgdKGJ1,phoo=4j]#"oa2H6nR?500?3Xo\eC<)-,)`>.#!H_E^Rn9=g/CSbceL:N*#cc*t;2NVl`]0i:f:[>FM(MG2?3]jH`pKTOTVB=HuZ79L;.>:7R?V%R.XE#1p6WJOfsTu8;<8`>@h.aDU&ritLn6eO@\eCLi_QYhqUc%^_LCtiOSIOi`3KX!dO(Wd'fQA&qu%6\)LQ:3lED:p*RY;\[a%h;AF?4Dt!l[C`::c$BN[qhi?ei<7%gVku^Ym08;LG9!;!pUC_&fHR9\B4:ue[7f(AJiSRkBf,JCosp4i!VG^1Ml#I:[HnhYh&>DV:cR[BY`r1.%39b!I_>pKoCC"aTnFb140GDWG&=*pRX\P#re=6^5k,nA9\+^[4?3oQmA-?p5@)$%@2Qg4CHp%]u_,gibO-Rj1N8L)rZnLN?H/5YM&EY+ESTWnkoj?430,@XK^N`T*_fuI#L&u.sUg^">0cW6R`d"JIaLbK13^5ic\u(_I$Ro\c[I=_]l8HCpkAGDR8;KD)Vm_oeCV!%&q')*:Gm)DCusr]$bSKE0.ohRhN`VBbJYM.ZQROU:Lq;j$\Do+nbdHOncb7-3G?;XE\f;+fK;j9Q;&eB6^t`9s,GI]CsUXY7*:Q,'](<BaRs#&24JRNV2M<n!,39?b,_%n"\sPAdIPum[E]r1!&s/]h0i/hV\3`5`Y~>endstream
endobj
xref
0 13
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000418 00000 n
0000000523 00000 n
0000000728 00000 n
0000000933 00000 n
0000001002 00000 n
0000001287 00000 n
0000001353 00000 n
0000003436 00000 n
trailer
<<
/ID
[<d26ece81ddf37883320773cbdf3e68fc><d26ece81ddf37883320773cbdf3e68fc>]
% ReportLab generated PDF document -- digest (opensource)
/Info 9 0 R
/Root 8 0 R
/Size 13
>>
startxref
5323
%%EOF

View File

@@ -0,0 +1,212 @@
# Les 7 — Lesopdracht
## Supabase Setup + eerste queries
**Duur:** ~120 minuten klassikaal
---
## Doel
Aan het einde: Supabase project gekoppeld aan QuickPoll. Polls tabel aangemaakt, en homepage leest uit echte database in plaats van in-memory.
---
## Stap 1 — Supabase project klaar
Account + project moeten klaar zijn (uit Les 6 huiswerk). Anders nu doen.
Check je gegevens (Settings → API):
- Project URL: `https://abc123.supabase.co`
- Anon key: `eyJ...`
---
## Stap 2 — Tabellen via SQL Editor
Supabase Dashboard → SQL Editor → New query:
```sql
-- Polls tabel
create table polls (
id bigserial primary key,
title text not null,
created_at timestamp default now()
);
-- Options tabel (relatie naar polls)
create table options (
id bigserial primary key,
poll_id bigint not null references polls(id) on delete cascade,
text text not null,
votes integer default 0,
created_at timestamp default now()
);
-- RLS open voor demo
alter table polls enable row level security;
alter table options enable row level security;
create policy "polls demo open" on polls
for all to anon using (true) with check (true);
create policy "options demo open" on options
for all to anon using (true) with check (true);
```
Run → check Table Editor: beide tabellen verschijnen.
---
## Stap 3 — Test data inserten
In SQL Editor:
```sql
insert into polls (title) values
('Beste programmeertaal?'),
('Beste IDE?');
insert into options (poll_id, text) values
(1, 'TypeScript'), (1, 'Python'), (1, 'Go'),
(2, 'Cursor'), (2, 'VS Code'), (2, 'Vim');
```
Check Table Editor → 2 polls, 6 opties.
---
## Stap 4 — Supabase in Next.js
```bash
cd quickpoll
pnpm add @supabase/supabase-js
```
`.env.local`:
```
NEXT_PUBLIC_SUPABASE_URL=https://abc123.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
```
`lib/supabase.ts`:
```typescript
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);
```
---
## Stap 5 — Homepage van Supabase
Refactor `app/page.tsx`:
```tsx
import { supabase } from "@/lib/supabase";
import Link from "next/link";
export default async function Home() {
const { data: polls, error } = await supabase
.from("polls")
.select("*")
.order("created_at", { ascending: false });
if (error) return <p className="p-8 text-red-600">Error: {error.message}</p>;
return (
<main className="max-w-2xl mx-auto p-8">
<h1 className="text-3xl font-bold mb-6">QuickPoll</h1>
<ul className="space-y-2">
{polls?.map(p => (
<li key={p.id}>
<Link href={`/poll/${p.id}`} className="text-blue-600 hover:underline">
{p.title}
</Link>
</li>
))}
</ul>
</main>
);
}
```
Restart `pnpm dev` (env-changes vereisen restart). Open localhost:3000 → polls zichtbaar uit Supabase.
---
## Stap 6 — Detail-pagina
```tsx
// app/poll/[id]/page.tsx
import { supabase } from "@/lib/supabase";
import { notFound } from "next/navigation";
export default async function PollPage({
params,
}: { params: Promise<{ id: string }> }) {
const { id } = await params;
const { data: poll } = await supabase
.from("polls")
.select("*, options(*)")
.eq("id", Number(id))
.single();
if (!poll) notFound();
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">{poll.title}</h1>
<ul className="space-y-2">
{poll.options.map(o => (
<li key={o.id} className="p-3 border rounded flex justify-between">
<span>{o.text}</span>
<span className="text-gray-500">{o.votes}</span>
</li>
))}
</ul>
</main>
);
}
```
Voting bouwen we in Les 8.
---
## Eisen
- [ ] Supabase project actief met `polls` + `options` tabellen
- [ ] RLS aan met open policies
- [ ] Minstens 2 polls in DB
- [ ] Homepage leest van Supabase
- [ ] Detail-pagina toont opties van Supabase
- [ ] Geen errors in console
---
## Bonus
- Voeg een 3e tabel `votes` toe (voor user-tracking later)
- Type-generation: `pnpm dlx supabase gen types typescript --linked > types/database.ts`
- Loading-skeleton voor detail-pagina
---
## Veelvoorkomende problemen
| Probleem | Oplossing |
|----------|-----------|
| "Invalid API key" | Anon key klopt niet — check .env.local, restart dev |
| Polls niet zichtbaar | RLS policy ontbreekt — check beide tabellen |
| `.env.local` niet geladen | Restart `pnpm dev` na env-changes |
| Foreign key violation | Insert opties na polls (poll_id moet bestaan) |
---
## Klaar?
Volgende les: schrijven naar DB (INSERT, UPDATE) — create-pagina + voting werkend.

View File

@@ -17,17 +17,17 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font /BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
5 0 obj 5 0 obj
<< <<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
6 0 obj 6 0 obj
<< <<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -37,7 +37,7 @@ endobj
endobj endobj
7 0 obj 7 0 obj
<< <<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -47,7 +47,7 @@ endobj
endobj endobj
8 0 obj 8 0 obj
<< <<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -57,7 +57,7 @@ endobj
endobj endobj
9 0 obj 9 0 obj
<< <<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -67,7 +67,7 @@ endobj
endobj endobj
10 0 obj 10 0 obj
<< <<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -77,258 +77,86 @@ endobj
endobj endobj
11 0 obj 11 0 obj
<< <<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /PageMode /UseNone /Pages 13 0 R /Type /Catalog
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
12 0 obj 12 0 obj
<< <<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
13 0 obj 13 0 obj
<< <<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Count 5 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
14 0 obj 14 0 obj
<< <<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1449
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
GauHK92jk1&AJ$CoFY\ZKd>E9b`.<fQRus<8!m4-_U0VUNZJ%J@Li:i\,DJ\">bUs>*:XPWR^rilg%=R",\1$5Jn5Omh7ZAB>?K#^&mn^#EqgUA)]U3KF9Cq+,Htr)fQpN>Q$iGG7sBK&HNCZ-n:(:*dEPSV#gf?f1F(0A-TbsEYo?:W)OfL`I+Atc?bf_c7u[rHm++/odr@-_$c'4d36`rMpB\$[7ON)Y"'o3V%8b)*.7bKb6@g/c:o?4dPQ]j+uA2PJ19Xo:+kJK4IJ07S*U\5%l!fY"W05lHqJe<PFG<#9qJM#RC8-YoK5`&Y^r!RXCC?]n.qI3)3KL=@eJV0Yp45Db42:be<N@Z0*1$2<&9/Q$g$sY>sRW+(WK]HI@jMTq_:BAaTA^'(^h64)pF=qc<r\Vg0f)Wp>0I)/9E;WM"00P\,WI*A=^&GE+92QMS#6;7rl*s9b^XgkN0upFQlCTbahBn(%kS!3tGLF)pF=A\_@pi],dTY2qeN6iS5qr54KLhXA@%bgh-Y28(U_jVr@X&3Q;V1HQ]S<gE-Oo@S\fEEYfufUf7O=I6fd0*ADcF!GYnJ[4\t-H4EK]=bQkshj/&+YB'fTVC:'c$Q,)hKn7:mA<G!KgE#KW<dKAR0f6,*m0dY<*Z\E[GD/:Q["cc+Lir#4\>i\`R5Eeqks/9LpoA/<:22(;pnF+q)k_tb![LX.pqFJqVXFi6:_JICL@_cGB"EfH,TdJM]V$?=iO$i"1B2e=qmt\-@RNM+^jiH`Bfn>rbWp"<al#Mm<5"rn?EicZ]t$5Z$$X&tf!<m$n^LIhcs*U=%6W5\m%0"lJ)]C-h>.IZi/+,kH;kop*H?lRd5cT%--7LA^79h=^qj/VAkb#W=rb>m$jj.qP-QbJ/7Y76d8K:T[-0Xg`ehVYD)?T8$>].n]j`2s@0odQrk-pcZde=Ban+^c`">14SmQ!7:1.K;0G-)/\0o6V9-6i0^t^Kip"I>?ctI]17cEnfNFN%?1P\<SS%+oUS!DRJi`EpI0%-"flZkp0P?X_D-mK.Qb%h"3^PNRLY`?+DEd0q>;=`JaXO?Hhm#a/,GbXtBF<e$Ff&0%WijR3LSDJ(OY!PZ$4Y?q%*_A<[]MEag&66'P,GpC18kmK7S\_f!+b=?5i2XTs/BTAj2VE+s8DjV02Tm6m@@!?mO4(U's#AHUKaF+8@$!?h<6?IV>^/@H;)6Ikm6c)=acu[3X$bVZ34ZVf*fb#EIg9RQaEsPDC2a[La,ei;Hci-("c6<Gk(_@()HSWdRY"hQ4+;BpH/)EHl]c3_'^P\lkXaTd%.@bQ926+sUNfafFSlY0IjjEB,XlI;Qed&6bMS!>Ed75`Eq(MYr<mC7-L_8-2>AUU_&Jf0<5KJ^LH\-FDQf1IZ`$FhcjB.9)h?eqI9)l`FM>7\FZ+Srch1]'^\5!ZY&D'.gH>qiJ&2DA,Q~>endstream
endobj endobj
15 0 obj 15 0 obj
<< <<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1662
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`S=``=U&:WfGfZB'5N!&)a!O`MUF4N.=>ZUHlR1)d*1*)6O81LV=I2>"2b'$M4P=[1U,$2RhpP0IcMD*QY:Y#NlkA^?f!TPlK!%*PUq'itF#@@SM,HbP_6te&Z%O;hXJoVUe&4Rq&H-ANP7C84#2'Z;F)E@.`MCBr*>W`H4&/A'=,nS><84U/_$PIH>W[.tH.)*7,ZVN[S@M3h7Tpb9e_/KSDSFWUF'$<NU_L)g!\*lMO^u*,R<lnoMAFNB#g>oPo"m66l3e<XkS'?hM/Iu9="nSWe_$F"pP_;B'?-lMS'q8cK4OAG]8ok)^"S)SgfV:jI1JMm]F;-HgIR"`]1#<D4D5^`r!fSSe+j+:s#?%NZ]O$m-;H(&E&G[;6KM&8a'&B`_!\Y3\&LFr#TY)g&YnSARi.A:YOgi,!&8HI2!kcp,oJIZ)kb'F4k[7)=&)PlTs5;.@Rfo'D;bQQ/VYp4sKXe!a8p",LUSOSmc?KIS%S7@l2J:@-_>>G".]CV&c0ilchl$]U;E+K9d[Jn$?($C@K<U_;Cf_HMa]lFYkn<o:SusPIVC$piRBB80%:AJpd0*^1G=$FcF]tO`m8_njCWHn]gLf+QMU[:def3/N[JXiU#J%9CD:TY.g'b73*9R"7CiMFc-mIY7*T5rHpPHjkq4,o'rB71u-bYM,Y]lQt/b1N*)"uBiVG8`(`ft<m->fQC8/f\+W@U*sWFRcd8Vi@O/")Gi,uYB^@kBbrkJHBd&])nCa<gE7Ke7/5fW+OaQ7`u/:un"<bb>c-W=lPE;u.]k0Mc%;Y$N/S3@s7DSZ4XF>>_.qmQuj!b*KbVkS0,sG1A.X?%S-=5fP[<<@%;h6&%3a'ohZ85t45YU/:P@q!mtbCW5H"GMue4(\_^%"VOn/@[#=ZT.tQB]Qko`muY)T#:c3ZbI#!T0HN5XKG%)=S$7;]58H59M3M38qkFcRij?%3+/)&9EXbfJa'</D5Ws*eg;r\`/<QHVdTnS4?uQPjIU.KG&R\h>q$NUt0"2T(s*IpV6?6e(04$QqQOrT/iHgB#Lit#`?%2I/h=[k5:)$"gq'1:!H]Xn_+!fXK#46b],,3F`@5HojG/SHWjm;"cLIT,MCU*c]Jqm4tc&FlWJb,b[?7jX;."?kjRkAR$cC*u0>N1m4?KF'm3tC'1Jqt]bDYc^:mTpH>^Ymt*FN<LAFW#tWAo-P1q.I+gJ7s_G3Dp;;9l6!-OMP_%mpRc=F^nVs'^q5*c9@cl;4CU@k9Rm4jM-.9A2p5@D4cf!fXOfd5:&)_(!nN&(3k\*')dHT'"rr.@!'cgPGc>>Ao0'8SSX!%p6pgGqt-B"[W\D8a)$X(^R-$(a(dt:.>q2?en^3-`ajQ=/.O$;b8nSC+e?8nj`XG(hhYP3UW=J%LY8Vq:l^uq@F#eWE2p77*PoSiH=P9a1>UI*ohP;]]"T`dOl/qg*LL,M?-G:rHa,0'U?mE#i6rRV.$f$-8_42o&1a[6pYLNArP^@KHoTIC[dK0;aBTX"[0Mu&(cr=.q7fnO6Ko<a&1WqsQ(DhOk1ioOb6Hg4Koi?Mg=j(:.K.HS9aVN^0\i?\M*G`WUmS&=WObNN"hhk%Rt'r"js>*LUP#_Ar?HQ"_HFb-D45il-+8;iD=Ypib]4#><aEG#qjV4W&e;a-\[,<A~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1876
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`TD/\/e&H;*)EAR=).;G<Ipnfmies@*<(8P[)$l`Rs@q7W$,>4INVoaPgpJJ,[h8CdpTsY>6U3Y'JjP;s]L]Fl%;LEg!J6-4t]d5olN+YBm@PBut_f>.;*hn6Y`W8(,4"^]t3r'/Hb?bHZ+Q64bJAMpJaabglP]@L8CF:EjO;O?JlOcB[@&Xtc7CZ1R.shL-9!)l`\.J)*IDo"DoNWXkG*Zb9Z!__ZW>=$W3XfH6-&;!l#0.hbGRs8;99X\n-jnl`98kgU?p^iGQg`mm\Mc_fRq)cDT4.XKGL-D&*$al*\INprdO:\6\cFk>Q[YmLBn:Z=]3(g6>#CKD5`0&`GMiDUnq2MTaJ=X-kUcmgo0jm-I?I5?+;8(V+S'VN\1&V'bSoiNq0gVr:q4$X4X5Q8.r90nh_N8uE-aF2LiPTF_P5)H/-FXc"[-I[XPmomM7u6B@G)]!oc10eN%kRJQuc.jeRJXm,,>CE_.>K<`Ln:BEf.0=+@n!4qAZWRnB.*L_^dKn]kP"-p<@>QQX4Ue/$_-aQcYPK`\"1o,?<i8.uZ*$.A6gA?!!W>AI9LX3BfYfHZeu[p%dk*aida=:Ckdt4rs%:ZRejq7jEH@&aH$2)=%[$)WX<t-Y&-Bs#peho(^,mq<s)gm@2kf&40Z*.B9ErAS'e,N#Lh]qLmAZ>ToFnm)Q$$9+\"aMfrjH%[)j8U.J(G=-FO,bt+FpbtXCjbm7X,iK^V8S=7;`N%%2Rm-tm3P[n_<?=J"g?3e1N1Ur3C&hTdVCE;"R^r+K4s2F]mj:ZIp3$cOoHkta53)UJ:bY:C?Mo%<'g(WhVELI<EHZen=V6g@.Lm,n9Bj)qIA**I6oBhWT2>doFFjY?j[]=VXo:i9F\NPK\G)PX1GX?ju<ti"`ghVULp`I2WB5_e$d\=YbVjWQrQY5$aBOP@uC#E0ME*@sl]:,-\>BCo&'Cq6PHnmMFAPiMoN7<_@cuD1ja]O8-H%Ntrr"pfar:(E[:q+[HQGhEj6&N44_Us*uEuG,)8?OYk9qsDe#]?m9b0tPM(rnOgS@`<;@%+ZE`+@F^3P&1D=qMM)iGHpd5J4#36?A>n]^Vp77p2NnC:cH&RI;<\D0;<$bZk>ikk$e*@($KWb`BW881(d(iNC'O[oZ>,-)K,I_,P&n(ZHhKdcY#$`$YJs'gDRbq^WuZ!+lRHL[YWg!9H9t)>"<dra_qEgbtt9(_tW$$&iNY[f<G`QJ-/K\E,bDVC&RVV/fAXFk2%[Q`3p0KMt+JgkD.+nf1c`]a)NCU2!\4-K.Q89*5)$-A,bDD*/Gp/X$b>@djGiVT4!kpA=AV6"X&,R$d,7@,*t+bbspH?"&I'<oC+$h!^6^K+<K$.E&?+ChH;75ho?s_hqFF@7CAMqltHWpD2HngC%0JS)K\W]a8(d1XsT!!kYi=5mJs=[b`<G?nLl<Zsem+E@gB+$FA\['MMqT0bjS=O%\BB3jBR12k#p_2pBEs,&Z/[12+9kA*o]Cm>uKHVRA:FU<OP5Y/os:cpGd:5n*Vqh>9bh_@jIr0U>_s_j.dg^Pe4=^$h\I3?j']%1J.maO!%(Zi.MN7le'+cR%T.pL!=T7BeUoik[ag2TbAB[.Rm>bB.TSm2KaiO4l8Q/+^*_gi#]eB8r,LARG$NjU:;A^Xb6MD$.PjZJ?!KQBRl]:']["K313>"s(uI]"m)JYFH*'NCL*MS(\>,I96;8*85KU:M>O39\[HtZQ"e>G[XCDlci0Qf>$g$kfn6pBi;/aB)L/3<d+n@aUWn5Z+Ve3,0Zf=gNB_p`X9_b?qO%D$0>X661n$!@_ogn2pX+`:1.dsX1CYdhp@?[>Wb]*[&$dq_j:>'V%mQ7qo31#%u,)oZt=q<o_nsJODgH~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1850
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
GauHKgN)%,&:N/3D"T'c&HmUa$+dRCc/^pLVFdQF--?<85r'+:?qAG,nbD"R+=2oRCb]g?CjR]>_Oe*G=R7(aT_Q^1s0Djdq%uT)(bcH["Y`4FN8MIpEUQDYE1[A%!q?ut64P:5g^iJh?4,+.I`Ok\M?ZHP!eb#NWDEUc]-(J^j9?BT4U*2$BqPS?`MB^8*IEkBS0PEadeCYkp1s\mF"\g<g,jD_r^/Bp_:Cn0W1G,ra[!^&J\h5u5/2e1G%lieRC+dI;s%\8<l0O]!<.3N0?gt`D.`>@(k72.Td+6%$;$*H6uX+;SLJA5cZK?^5qf!4K4og``%5e&I(jSpH:3!!_sI+'UFc$l7EoV=C6tY9k*0hAlQIN:&Hm6&S$faR'Qo/bV</2663RhP.r)D'en`i!'b]Y%;*f'M6:SW'pL+0lKjMHlnXs#NW9oAMa%2k&lYF'8UKam(O)CMFnO)@&g3t!cp?er*euNQ-rROJ&H6j]8C6fL?Y):f(Kd>`<qr%8NTaG(EB/UZZcE^;Zj*:2BRXZ>hH>,oQ>i'u"%>L*l0T9!K;3KVFKPMu:R@`]\^^Vi8Rm@#J;&i;#S)sWf*MC7o4HTPZd+"AblmePbTW,IQ8#\\5QF`#kg55+*N75r"4hFfeKJ.(XF'3M/bsJVn&p/,Yc=!nLB9!Kd@'6`>c"(eL_2Ne-b-4VR5c/Un'[QL-n5'a)HM*!'3PtQ,ZQo6q_+02>^4p<M"@\_Kkn7l/iF[*1*KG+#O[,kQ+#BB%0!UO3km?P]*L1E+N`>QLYCthSIk&"IG@#6DD6?N["Kp$RXIIArTG<>\O3'7'!-*]H)>"qQd@VD#R!V#:YDm[5@P]O^rpUfXbaiH&)&uB]\resY5>GFCQlcSIc25iFr@45(HnpN?PClUM`lY?-$9ZKK$Yj_/FTRd?5sqpW"IN(T@b4iu6jo@jIW<KH;V><QT-.Wp:LpE8aF$jmnMOHeb#P#W@0a7%f\6JTjPW#F;$sX3(WC`lR$2un08C@]A.H`C:p3J!fhh?;4&?*(5/kAC'lhQ%)n!WH1$"ZU/8SK"V`%$Bktq"JY?cTJ)3qJ;3?F`r/gd_l)#0iM[#3U37Aa^0GW"QQ:,D7W!Gsn-:qO'::6OgW19b_<g7;:pl_2`26f6l/^720eCJ1Dt:#!p/keYd2F-AuZlGCbR&XuGg[OTF5EAa8To"pd$.gVYaHrDOI?=_&<Uo2<"167j*546J._<X\B"8?<mSE;TY=$oPnhm&^+dM+o9j($+G9(BNm_O8q_.C$'XHDPKCY5QUo4+Y*$$WO`M7]X%Ober<)EPAhA*kA?"@E#KM441RHlFcGPf4sYol8;?qHHh:UW;g`C:C:)V<(`V19%n!B_.Qu`aYgK,$^8G]!PJ-)*)QamU:m1dF&K\;id3V'jYn.Pb4Su!qR*)s\1::uCI_akZqVY7WR96ITIic>ID+$<:$B68K\4p-5_gEBV.dMXVfT_,i'A_fqFH?%Xl7t;XC8Q?[S@J??f3G^g5*<k\)2.BJjpVg(6Fmr.UjbeCYM-4OOoC0^]FAEZZ"[OG'90tC>sJ6eeR,aGd=Df\K4c0/o,sOqZIh,Q-0e(8#8uV7'jrKHU:*]qdcC;\K2dFT+NP6P8:qa3EN]ur8ROD\30G+EG`6-*S27")#*Y)Yq[Y0cggWkmHW04_/]<n_/6_(*S_$$l6m]cob2Ub;>jJJ(E;hh#5X!mroYtBUJq8Xk;KNddQN!1GW2X`%h0A1n*g@55<*%i7Q)4bmso\$e()A7?oqbdk&2Xi0jpUP`#^pF5$P>rG@I/C>Q<!AW8ub%R'6dKn@>qeX9t.%b?WB-4&HUU&tcuM*]S*%r<m?OR"P~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1147
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
20 0 obj
<<
/PageMode /UseNone /Pages 22 0 R /Type /Catalog
>>
endobj
21 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260324182754+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260324182754+01'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
22 0 obj
<<
/Count 14 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
16 0 R 17 0 R 18 0 R 19 0 R ] /Type /Pages
>>
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 779
>> >>
stream stream
Gatn$968f@&BF8='RNM7K4;NjgtG=AFOHsA*dZf)Jsp/aFpp4l\*qHm0S<;9$8r0rX53eO=tLFT]P.+$>lhTri9CCJarpNe<"K)X/\I-rVh!?iM@jEf`@jgr6Rbb<7Ruj/2tj/".&cRn0u+d99fp-aX"("qF#'AME^aeX/NQ9U\@B-m&)gI\kgn3i=giti@iF26iRYPK3D\'rL_>O#^n<b"FcUjU0hI$2WaC.p>6e-R'[oAMi?mWO!O:FpNkhTNL4M%ML/g(!'<+u!F6hDMGEP&-I`^#WJg9`L//<"B:biKZ<>5q`6cia]R'E2i/Vl=%Qs/u=:19M"^:70Dr.-\b$[C=dnW.q^>)_m6="kKZO:\iB"08SE5R[\DI:D#/7?fXR9&IRV;C*m"4EjGb6B!=LK0/h5+itY^4Pt!DB5Tqb?l!NOb!Q5G$):T&=;\1=?_ud!*fijm+1(B4.PT@NqMJutU;uS(>:rKc84kH`Of!u:iA[nF2>cA49<luXgmd]>34Is01^AsKPDddoLKFd@#KOsJfa,sPVn#T9Y'>+YIVt**IWL+D@<T"MlOl?"Q7]G'?/ar3ND%Sl<JCJ@MM4]90\XgMMm(fS$$hXZDRtDdHiq+QWP-7Lm!Qfs&eJP9'-*%i4pFElF-'idc!U_1.Ulp:r6l9"8cuNU4Tdl*"t'$QpuDmZnuBNBaV>FePP):%WTph9"UV0XZ8n2CX8en-3b3Hj,W;,g$/LS3i<n>m$!Y,JQWBQ:KM-m)'hE4u1aoF'c%ACQ(O_^e\c~>endstream GauHJ9lo&I&A@C2m,TFi&PR]t!Tqah1U^MqT#@lOT/>#jW/XIY!a(U_lMgW45=A/M(oQap7>[gp]5Jc,%hIaZdD;;n\d!Bq_s&HP/g1-%>VZWU'jS\P5=S>"6HK4pY<>)_^`pPm5d;;3#XT:r,3#7Y`O(dN2.p)_)?f.N`>''mT3mX=0GSn+9441nTam^Vq^`G58kTqQ@<@mon^BA/LkQj2U=ju%N$<L*W#jKUbi=6]+C;t\rJ/!6r8O#EVYA@Rpf%uqhH)BE6G_=hc>eKVj]J$<quH9Q]"efS$p5=#;XK*C@Hm>OOn:ojaYL1/"?R_JWJf*$.F2Kbn0E.K*dc/lFqi1`Gg/@,IMTBfR``)ghjB`NefMo$kNShq@Q$#(SoLV#..38j3=@gu*/)qpg&pEI7Vm(9\2)H[M^=>B`uHI"ZreSRk3Q;c8tB;2/pNo@HjpJT-^8!/A=f"k'FbeRQ0gR`ZFke2`+4%F$i"_bFkf)B>pNF6`i=&u'VrSFYuBCTI2@oQo6osUQRjo(S<PN\=?-a.k6b=!Q"4Ki2bJBsqVqU1:iqSh1\5/pe4bl-OSH6bhqs^'mn0q]7*GK<dF;].DN/gjO;DePOR<?XeLNiqqYOsY3fbQ=Hch#!Dsa>a\sOm.(;cg"ApcSNG"G<=Lb&/5^_QF0\BXjcL[0;bi?:@"`%o&E>)MY+FsLV>+t99Nr'P@,=d#4siX]lP)Ql[NY#/M"m3XR@!m[sHYenF^03%Dgc7Fg=_I5kC>(Or&ZbuDVdhORD)eN?DQoENVZ:^"3<5(AQ*C?FQ"up,8(@//_%!J3f"5_h^kq[1[DBX3N9-;"'C0i$cp@uid,L)C*TJ:eVh4m7cXMLLL[p554P/U6uc_O4JksjDG*c?N%#/Zk*pPG`;BW-%&,[\+aZXqnD:$,,ZVD$G91T.ZLW_.>pOeYh!]]nNo>[MuYl!6@hah/sef\+@VB"_T%V;K1HENOpj.oXg'm5GuoVR6ai5EAnH?ai[HrM4Z6BAdscT`RN(8r5ih$L#`e.t9ND.bt@-<t"oMOIgn>oW+mYjBT;Ss,k4V3O<N1dU;kdkfomD*]CCU=fMqomq>1fmr'jsi]$AkqYVnYR%8=[/MO0.gB6@=g));Cg@,i8'u@-WehHq>NGMa3~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1029
>>
stream
Gau1/gN&c;&;KZP'RT)O'7qJ>VDk%eEpubkPF;%i2_rH4%Nls+Vg8/3**fD$-Z[6_*gcu(rE._P?U3PL"Z>VA!;IJMaVb/5+eA`**"V%%3/n/="4WkZ?mgbLKHTnS#=UqS`i6ic%WLY-i/j'o+q.47oFJlfT]SXH@H'V-^jqmcH@6+;EOk#.[-#o/Y1XE*98GgrYd\@m.l8E0Mb0R/^O6/%D,,>%%H(q#jQj#g"!NZ/Ri[=A)9W&/C8dTVZm1[5/fstteKa",kP6j7.\O,"5-jbX.gi"i(U1X`XMVSDGd%!'nXB:2hFo2s!'(<+0FhO9-.?fD_hTJ(Xia%D#3cW7^a^=AiGPeG0aPLV%%`k`BhQ9!HbOD5OL0NO-Itl+2dTIrA>Os?E3Bn#`^O=O83Er3?H[SBg?2:Q[cVCDPWqR;ZM?*,I9*ORc="Xo3i0sYqd=l+%pR)!Y<!_k;Xee)WrscMMG@m1g.T!9l7kg=C<$jI`RNn]Y^]OW=hTCaC]NV0<l+X,(4=4:$'^a1`U)X+.TfcrQ'/s%,b;6rJB?X3-O4)FMO.C"j/"Jq2mR-9\1cUKbDFMFQ=R'TJ-p+]Ko4;F`N5@SQ.,fTZY9p%#s34<<K0nF8M1F5n4kY35?T4XakB5,*dLa75q[;&_A2qoSYaFKG&=eokp:1Oero/U2/6"0BW"]IKW.nVdrLuc?5D8mf2Q:&R[_e0$#H%1g%6ZjI809+&K5V62EcT_Z512SXG0`OlIEfQ#dS.EUmEs@*fd=1_*jhF7(-?i^u<A3'9HPW/pP2^3bQ#Z.pCOoBVA-^+MH.dpP6"a`Em5l9iE1[W,"*!DHo'].?cU3600dN%86g:RjLFkW!3*>1N'gG"4=pJE$fS0b%glM[?jTm=/hk7ibok%4qU3-(BR[7^AUC&Q'#ocFlRhNEEqR[9f@cn8e8MRl!@N=\30c,$8,YXUf;/PCb,#KN(?*)JJZ%l&]4ntDem:oFPNDtPQErXb!0R>5p3n>NYUK9OlMK:en/8!P5u)@"%>E0`W~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1346
>>
stream
Gau0C>B^uE&:WeD9`9VX/67+))KL.Eh"KeK[rH4Zq[i>&Ad?tUPr=!Z,rY_h*D$WF*+MO.)N6r0b^B#AoP):\U)2FRP76Bo#l;;Ui&6Ok^g6*>kQH>TFZt"o1Xih$+5%6]^^D!?r.s]QR+]1o\/m=O[%,2A(-1XjMHP^^nlD,T7NlTPFU7Yc!o7A)"n2P_b/N?gc?"f>=aZ(c&4W:"oKj^G:TpZm3-H5E\*+'Pa6d@NY!G@1Eh0/,;>cEHUV\!$-nELsqOS%UiX<X#3h9M*I%]t7@mLbA#01E]8R3,Ir8Un@V4t+hYhchf./XS1p52$$CYYW'I9slQE5l=&gAtR$$5Lj+GC0\F>"kq1TosXHEOHCQIc.VqI8-1Sl[c_9fF=Ti=V?]bs!ocY>I.NW>[_'nAFM4L/r`]jW82Y6ks[gnX-cmu1UN%p"e)UBU'`2K`3E-a%X+c6"WQNXO]o*\\39`&_`YHsYfO;*d"TLl'h?&:W8;FUZ&m1[>6,EDDdMYC)ru^aGhb%?3=tR%%rZJ[lcQFY7B<Y,1*?dZ<6TY2F#E`Y#e1b&W3Zj_`eS.R_*-;t5>;;.E2RDI]Q=V%X(EPE=[B4Q%s:f+Z:J[)FE:VO6Sn$cj=F#53#k8RN":Epjt3.@\GMJ16ad/!FWhek4E&cm"C;[Kp\4(9i3etf0JYF^Z3?+g2?/tEg0AW#IV?:lq"!NIMoN.[Cs?,NZ-GK#LPaJ7Y4p6YM3k#!BSn-XW^mXIF.?(1S>q->1H*->P0P1%HYSbhV4;6MSU40"*L#.0eK2$Xg&+@`Q>L0uo\K<K$;'g!&m*`W#]M_uoY1^`P6s^0hiIB9Y;\uO6^iDhCS9Dr$&bidbY0&>Z;1*i,T\uGP9N#OrY@r.,O69p.F#4Fh8,_.;k7?bdhY>R_R(F[57l>t0.D6!%U'f_D6sq[[D=NpQ+4<c)]MX_0o[OdB8Ys&\;7J3]8#EnS5bR)VBq\V=/NN\#J#M!ULpD!C,`?V2qf4;[pnp$^hSjh8Idr9=B5M`1LGHmRK3E35oVJVdLOf-fSGM1`7H_,8/O!aFi`3?aQ.M]d9pCT8h&8@^VdL^VaKj.[CRF0i$enR:=[5Be=7<A'5?JPC'3.88@3b-a4-;Vgg5J)o)%*Y2Ks[?+c?@@k_qo%%t6<\;PG.aP#<`fL8%EQ%q+)f^+a+5=#DR+f<SepT8R?>\U9Fmm0mhCrldsb>QV8NE/TFp*IoaEk.N54T&44Kj"cO>JYt?$H\*OH7bRg9kH_SVkRYmJE=3tN$TP?]p`aT6WX7JSaF.[rDQrBQJNhm\=r,kq*%R9g&("RB3M&lR)0eot]T?O'q\F/-J^2#Jgh*\~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1616
>>
stream
Gau0CD/\/e&H;*)EAIeukn;.%-!Br-@I&8p[`K;[?`F0=/372`OfCt8"bH^NNg-B]Na995Q37dN+7C9-4ac\]5nAH.qgXb2]GQ:u`WOPBnJ&Wd">G98YK*2P*H,@(q'6mT6OsB`8%`7e`-(i4nTsuHK@OU[hEdc?'*]K?(r?M2Z6<Zj^cBrP!0?aqnbiKYZLXHLn5AD&'MN38"[5N&hT.GW<FfA'_>"Y_cOI+nnTQ!5^Y]+%KYSNF#[V0GgV%n;aCbA.]]'j>Jd\I7N+GtYQi-DHBa+akV3D%kJ<0%tP=mcbP_"O$pLmho"[2%#0&G.[*TN;;nT_MlB96"c5o(9$At%6(FoKT?Zbc_$6F2hM1hYDKPb)/HiZP$ZB-Q#])d0&lHD^ouocljX1N"Bo0itWBm2:q=K8gbW#nEs<A'Fq\"P;b5<W,-YH3KKNRr[iS'<Q.lS#bJ2^!V#5JJYfK)@tk7IgE+$J)5?>#WEbZN-^+9JCQ$Q=hm=>rdm*T0eNPm*^\!,`H)uCRI!dY;phdHd>-\h9K\dn"r"VbB6I3c=17fBGDha!LD-(e0Sa?kF6NV^lFVYIm]VW?ZJcBnU+n!4rG&GtL;lP&X_[fs+i.?ZestQ"oBApkq2kJrE>%FU$?SL!C3%R5<oG#arOViajLftu>nODl9VbK'4ra*A:e[>n?f8-hQ8gJJakdB/FhXY*nB_>=G@H0ZObEg!_@ojgEK4E:/+_XWUK[!8\iCBP]1(le0WAA-_Tg9aBcX2_EsK`3;b1Y7+l?,GSLN$OMo>GVdXo(XOE,ib[fLb8s15rqm,^a_oS#t/cojBQ*I%7Mio5R;Pa0CU\,0't(^YUE7OiT/.kOSn-e)ti]i7mO@K*&>B/7.>_-a+\+%]Hc5.ra/CM+^q[A33dcDBGtA4g,6,-MDfCHa(?<L;i`ZbaROp<YnF2u0(qQ`DF]ZVnSWeYhQ^ROTE5>0i>Pa*,q1I?U_Lqhj!HE#7lC*j+hS[jtp;kl9fIIT?dMEFCq)@0u7Kk33ZuHQZPVpM.V#8\[DQqS2ZL&8fqcd/---DT)1[U<AJ,UU2>u)*`1:CL=-Wc&D7%^SV=?>q2Y!,A6!ZPe_:W(%dregLI`Cic]X8dKtO>XNO0a$aj,/E.X`CSocg4\RO+4"^1;FVmVsGkeE7>X">T.;``+o6CXI!@a\jbfnNs'RkE.Igtk:)-;6h0TTtRt8&&5;Ll*]d<PrF4IRc,o7f66<7b"6kkeJeu4`PWYU.(5DIZ6,a<U(gRfjXX;?ogZ^`Bhjf-i=4gFlE57?Rf70>/&7K1:<K&RC^SM:Q*hd]WH)>&,E?d?s:"?>H6QjOr2pk0b1\L)Z1Un%I][e0*miW[:fM06bf2al`kp]<bGZ.jjMLOi%7^uoo:#^OBt_\CngZd_Pk/9Uo?A:b0G([;O6HO@]--"+8.L&/I9#K%7WTF'O*%.9YiG!bnSs#X$oU`e4T!A[m[9O?B<$_9-W4.X2!ah?Pq<6-QkQ**/#Z&c?lEr:pl3W<5=VUpqUoQhLV?,K[X'icfd]3Wk`J4?:9*:0Ne#cJ;[.&[=\1956sRuIFB0`liMV,drYod!%eIJ57I%n*5[.u_AH]=mkQli5j)J_>mb9~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 837
>>
stream
Gat$u>u03/'RfGR39sM#^kq[5U^1[$!eeKM7O.W2m(mPo&npZo\-7W`he0QtZtomtET4q1\bFn>lV$4$S(dUU$63\t:FW6'C]kZ>&D74^ZIXG^Y#`P+M,QX8kf+d>Bq/q.T%60<[\Zi"d)]Us2/93)lKRF&YJ)'ql-Ch;?k(/IX=?EmJom+1,24of^[(c(rW@)Vs)./We9jX.4nV*N)e*8I3dnss:`XE@qd#__A>nT`E@ArlP)m0KR#ZXaP(TY3X2ba2)a5*X!Nr%r5!g%H(r'Xu'FM"4@c[_-)jc/EJP&Za\75TG\m\&t>\j0_%$^&pD"O$F_lCjj<TtE,j8LTf?`nN><+B"EZ?;6j"$+tL[%#6Wr@IF04r,H%ilsVYd_lMk]^;oJ=sUsPMkmW09gZM[oc=G[,c68e6kTsX\J_1)38V!%\)m=_eN6mu*?b;OmW)LQ>2^?/XtI*ra%tm;53>a_o7mK=[@Euifq"?0=)6.9LGj;h]QkLrBFV3.8IR>BM4lDqh7)1=q>H72We[Y:a1c^qZ'nB+/G,T4qpPK+*B^O-3j>50h,'!Kn1+l@jp:=)Q"jmln9p8?Lni51Ei1JZc;%J%dQ@EL^tp<Ch:5cTC4WSd;-i^hdZ->uD5>7DBCNKuFUr>iUaWe%>inou>dUai@PitA=job%KikuTCp@bb\+aGJ)\s6.;Kc(.Ck>KE,cb[X$c0,c<tCkGbHqaGimF\DR5At;G_>FiE*V^mG:jB>n>WL]+;h0L;V<rJDd&qkn`$dbD)$XCo6UR*r7LIm&P-<TMm!X\@'91=&[0^$L]gSRkGF&eKLCZo[2tg1ha6W>aej[S~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1134
>>
stream
Gatm:>E@K-'Ro4HS>''S7bDs5_^;4^'"(T4Zq7m.:HW0l&)^`?m*(FA-&DTXisVqS]A<+2&P(L:npTDScPZpF?**j]F+Dk`)#qI'3A=e@o.1F7n)<I*i:DJASq1ATOV9I:"O(=P&5aE1[[9d=(gL7T*`,UT.RT&6.cC@8RM'%7^pqt."D7J6E1@74RApTMKG@t%jRFh_W1cTsUX4CJYiJ\f_>FN"05GC=e+FPA2sfKb"6%cQQsZ1tfWlF<dgX%e:niK;A-9O82rZ#7$UL00pg]Ftmkj0m<qi0>0s(Hj\ja0k@LWW1.Q0_\^pYX:CceAK67&W]dp/Z850qKC3.:23.(%e90'sa!#:/Qi^kr2?&peM2Bl+!?@K#jch[1e@S4N\niUtBknG1N.XO5:0F`S^P:::t(6AVt41j[Q2W`^2gaX/n3TiMU4Y`_Eb_k4qp=/$V)r#4Jh*ZW`/;!PD!+(\;!R)/bFA%OQf;`&Aj;H9T'rJIE%W2:];I#7DoD^1h@4demSajTtXa!iPlZ7`:ff)#;0q9u.+ic*0Cmi/]T+dB]K66m>d*nni5(?_WODZh'\31T\qnVA$10FQni1>fPf8[laIZi.c)`uaJK8%+>V_c,769q64"IcEH6L(Z;Fdk*o#1E@l<(RBbK:kC5JO^J61,ul,5Z:K\HgREe$Np1S$XsMtn^-1i0HsP\PW?)8X<(0i%"C77h%2l<*R>nbWBZ!]HAQGMHC`BbB6DZP>P@rS<lY<"1V0<g&p3X;B'>9gNVf2;?.sUjW'-%K9rZ=+jFBrI&%l]d%l"Xi`;;WOSIjWmEj]'>j5DudbpV>b3COGC?mu-k\BtW'<%<0#`N.(;$*9oJZYNt355N4^.P0D7jrLIR+j-afP4-*/])RF9RFkW.-*%dHs#0t-l.rZ_g#,UELF]3.'lC/7&[riYLe5\o)K<,4#Pn)LRef4hU&nk?38\JT_9UBq,hB72;BpL+5$jA93*$pJ\/ga>;$>B8tZ`UGn"OLkUrLOOB5Nm@'Sn0^ME"aPX4Xuh@o:-TnSM5Q4]TB`@h/u`g-!/_Lgs=%Cb7;2,H,]j(F<p*>=:V=kO\BXUmMq[2DZ)T?4n/Nso.ASgkZJBZSI>@W@%H^sE'8`f?`/`dX8~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1711
>>
stream
Gau0C8U&oI&AII3bY^qPL&cF)qGP@Wdl=DYjPoq)+:4?J;1LubG25N8HNtZa;%aboWU!95B#-F\2\Z9/^PVbJ>64X[JX:!P#_gAX&E!"dEWN)%dJ"6XRNZgjKI-hr+EC!c->80DLP@YV")tp*ob%U,ior,;(F/QD>1ZGKGQe7cY0_YO@/QJb%-TFY&Ls.=Ei)_EQfXZ1=i''SdKn]&30A:]$mrG;H*/<=_XB*Ze8)rG/fk;b^@&k42(TB/aC>><;R&)ULK"i!1'MC>i;.Qr(>&Kk/:N9VX$@)ZTYaU)"!MV95d%YB;91MbEB$U4DIb:s4;SFTGO<37>er8YF*2jIBb2XDUg%dNK;V%E11X5S#6X"IZ;?IL?[fS:3E$-i6*Q2[>\/#JbA1DuW>%J4K"(C2C@&LG^b''leMC^:nSbQP^FIbC(Fl!?@(X*bEfl5(aS@#3<3GnSi.JI*kN>_q1-D2,lM#>QIDr%G3Eu,8TCP<'0ulVFlV')3Vp!%lNYP,eI/q_XNoh070<fPPM&u)0XrZ]*bMh]5J`SKf:5BTQ\(cMtkTe!`_R7eP7H7#?NmDi'$:$n[j-\Yub:+bVm\J&Mj#I<t5Kf"`K'O?2nsSLS):1f<nC4d7X-f@D[r?jPZ!p@qocJeV[s2ZRjsXrQ2Aslq`.;t66>+Ig^F;lc+Z_Eig+/-(B=ckS_C0I/%lhROA36Zc@+9`8\U[Yp$>4\:8(GL_G+JeS]5E&Cn)7dVFhRrbapbI8Y-ftC'gLRHo=[h1bI,R"h0>"=1JXJTq^,ZiDW(._*5OFIoAt+_.m&/@+9KbD(YF]!Umg`jAluC6\<m"rkHr;IggEb8]'8^(fG!mKc>h2r@-l^K2H@>$ZPs)JGV5$(9T&Y=%X\&;j&puPgu>!4.B^]]FSs_Dg#"BBC%sWSH+oWg$(E,IT?^B2aSjh:G.LC41BgV/Ib1fR9dPW`#n;G4nZYLnU%_Rn?4o;=i;2qpqR?dgqYA3(68sdMfR:.s&T&EETe\rj:`%K3jI1s'qf('-E"'!s_AU+RRAGHaTU$(]"<e#0lJuBu]/?SN4&JD?>4]YC+nJ=X22X7Fnj?eNBRHWI"/r;-=nZPfW3#.%4C,5i!LEWaa-r8cg54[mN57;U5G"9TR"&W2!#Vc?G:;n6eQVp"!0]9bc*(9<WFHM1rbC5L-T9]99D"6dFf8U](B.AGl:ngJid6Np=^#jIP]]Y!J\SZ=-Ved8_X?aQo8s^%IGM`?9fq>`K1dG.g[DaYDn?t%Q:A>&m-g5?:US!!gB'Lf!Z[u$!)Jl1&?j6<^8X+L2c1JoH-tX6@)\c7=H&"6;mWK2Z)V&uVl*&V.eUoIn`i3UQ=d=WPaD."@bE&%MtHO5R2D`>0Sh07n,EMj''cp,o]bmV8SC5R/Sj/CFBP[D-b^k/5E%:3`;tp#X$27n/b]dQ9WLCJ19JAhb-\7R+&0I4rA$Bs3DUI.AB)'k^K%0$'b/%)5dVifj-#VOO5T*LjiORTV[(dL5F([hTYmRD2*4pTA)l?9[FLZClR!>r*jfgRqRJi(E&806pg"sHXdkA[pWdJ7dR;Iud>bKhIJ5rZWXZW/9i]B;<Fr-S0ob?WZ/lI#0%J;A7LDJo4Kqp?$)55bl2j3>8(BBk_?@L`0Ac5a6p`T"/F*hYh.7*fkd[<.D0q6"-/r`DoPsl-h@2;+E4itVfa7d6G(LQ>2=KeF@Iu2o)Tot~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1410
>>
stream
Gatm;>Bed\&:WeDbW_<S'ZC]NZ.%0W1aR"MUe/Ah^>teI%TX2U@oM-tVS@RM2e,1)1oK,FBtf_l)inS8$4aeLqAi?45)+$$8qA`'Dh5L<Kl@%jYk>=k%FSb)$WoZfk6?SD?@[>M7R^La70<gn5e0iX4CpdW>`MVcnT<epgd1fo019iI_1QtpH4/\">G9R#0[%r;h^!r1.$huNX<<Fq6HtfAM$Y"&]2/=bG]\!(WP>^`#Dge@KZKB1/Ft'gbbD?jice!<4Ff?8`Aj8/1)>ttW^N)5k7>KTcm)WeIa0I.2nZGeo")`+oTs%F.ED>6F6ug>c%$B9f8TB13#G6!PHcqkai[5OWQ=d;KYO^paOM&/kNQX4*p-*4LkSB.,f]F"W?1"fbb?Mf@$q:f#`,6*Jn]<3WV@dF_fC-3,a3r'#b4E4"1n)jW*(*W2*M9OUW`f]peBM2a*K?Cde0/K^jlPnq3&1!W94!(%6WWka+Y"5:^FQoBT^)OHG0b_Y=?Y*)G3!98k9o&:ZQ!lPRj-A$k5^PGRUCGg0o(JdKZ<JVME?A*d'(,;UU&Z5s0R%JHcTmS6>d/9GA(ni:C@=;*q6X/UEe&0r%Bg`2>K\qrmD$k6B@30M@i%U<HWI[abE66eO_cdhF$>2SVQ?ki+#I:#'EAqLec=\;.N/7Tl>Mk&#WK1#Lt^N!)X:jFPX`IFJ]#2lR[s(K!!@rR;6p(H)4OR/*5i(4!<!BhM,MID>]%*;9-rnm=r2Iu]df&mt/jBb<RkGlXFBLS%e<1RC!I9NMH=8!piO^hM(UCX^Q9f0DI5$tbHQ!(U)J\kN3cX8io46\$C5kW-ZYEi44[mmMS*H!*c,I4]!"CWB%]4]mi><4PqI0_\%][B4+]ci)=(bgU,S'P4+u7$W[!0(*%D_Dq-n@?'\A2JUkTg_:Mq,YL42m8Q>8:9(sWC+4i(.\pp3`S\)2+#C.h)6V`"Ju,rT.sm+@2$i5)(>!I2r12.HJ]P?]=-Y!RM;OPBK(?d%'6jYROp0mLrS641Q1(8>U8OX%k\=M(^VC10pg[%:AWbk`2dnB/F"RgUcq*?$9\S>Be2Cb"Dq_QG)slnn3kkO%4srOo@H4C,JWC%Nj7T'S<;!\*h:m*qS_VcLFuk/Qe4*J&]8pd_VBSE0!]Y_ZiPi>3]s"7>JI>`H0O.#6C1#/P(aleLGgNL/>KhiU5@=9)IbdGBJ2`[>^?ip\#=EQR\$$T\hi<Z/;c1C04>R4N@jg)cj$PBZ<q#C@U_<]-X-'J)%G_cJeXYF$2Ya#\,qH$5^]4:)A?>GSQoIg\Jq%(uB0@ZRB;<Kn%cojVC<Q[KCJMhZo^Q)83>^/WGguaM7e9c)'9uc/+K$9#4L_f6U(<"r7Lb>oc0MB5eY]mIFLd=8.IaK9\;t7PF#%T"l[O))9^;~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1255
>>
stream
Gau0CCNJ2h'`H=\\EtZtfa,c>PKD%32OhgC->=Tnh:_-K[S_j4O^)%NA39bY/&/kZYddtj);CgbHdBAd7h6#s\o;g'B)ot>kkp/9lS,sRCa'OII5i+Q^:%uhC$Wk6F:X"63='u?Vu!B)Ut`Ij>(@#_1HZ\>B;?U\PEtcr.q+/g'g`-g$^'<Cd/HR,"@a13o@OTOKYWhm0o6/<he-moSg8VQhSJ[^L@8&#T@L=UP&=5B@86^9:k.%>kp7TkB3DhaUk//J;"!7Bf,Zh\M=dRaQ]s=WU$5PoY*YFWlHeeF(:)l'KfiR\>SHBu"d?cRRsn)`6E]SX\d*i&nbXkTe,7EP56JPL4X3U\`A=04;XeI"PeC#0*&OY'D7f\J[[pRtKIs.\CdseFKeKAH7&1,3e#ECo=T`K:Yqgdg2"l+6cp%,Rq7_A1C'HW_dN/rK.@VSoK3:%l^>$-.A_4L-/^V*j.pC*jD)DAfas/n/0dT6'R)$sh+&_Ycc<s89&Ua0JkmK%uYQ]o/kXTd9h$1j8`[d2$e12eM)[5S=_dMQC:_<347cE@fO5]<fk.#p7@5PL)l5fU'-R2W]UO+HMUtb,rnG2*1/GK;R,q@T+6D!;2(1=J,hSnTqkksMf,P(d0I;k&Tg0HDUZ$q;mfZX)Nf@`th"gK1ooEgP.o-jef$1I+88BIdnTu[cNrg47Ji$2A[!b_WC66eMl5(e)$6o5%WS=A4G&r8Q=.Lp$A9"g>A?BH''TsF09h&eo+<G+pe-8dLI^*R^Y#a[>s(f;UV##MP92mI:#=%%]&I#)>(',!)1o9CT`RG0!!HTro53fCP1n-q]MHq?M4jbN;D-PWiBDHn+:*\QQ>OY,X/+bA)"7RW-V8s:DiP&-$0VW'Nb5;aNG7ItT>ncjP8.DMj5,#;?Jl[G,:C7;X!$Ktj^d;Rn_2AfpugUABN>S4m:Qm=AH`sOHR%E*4U^$4K2<YIu/%l2,QTkmDo2TR%IXqjDVHo>]3%/n_"8D(>YY!0;fKA%_57%#=[c4:4dEOB*K[UO)[V"-gl>tCbf1[O'YPHT%j8BTU\_jmUaOY:pIni6<0FQ#!%q<RL,jnFb/=='2Uq-PSMjWb[$Y`if<^XHl4,uL)7q(*ZJ733sS($Cg/8#mfB32S+kjPP*r=`u5,'5:Q#j=(VnI3gNof@h$`auEl9T?)tLkBu;k/kD8C<KGd%RVb+O*^/_c6W9i%[Sp&FCpnqmp9'-]WjWdIL5RTa_-6gS_4Ut6If\uB>k7~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1242
>>
stream
Gb!;c>BAd^'Ro4HSFU4=XK[)iOLEW[9Y4j_S\9^0Qh=*DMZrXj87#N)@1rQdO(92'&d"c>'Gpt9cLj7hr^=TB2`9LQ)8P>>\pmVN%ZD`"4lX<A$N:mM^:.d`1N5n3GPW#"!@>)poMH*b$+9:6Ku[[eD4s_92M6m"BYjcg(_`T$?sP:KJP1BH*2a#r;iIXVDKoKHDt;uDJdY[ORD\\[@p`BT4#$L8UGM;j#CJc!SJsK"gN(-Z/l5mo2R-0IaDV$oqS_t/'2s]I\s.5+`/U;-J9,*<1#Ws$<gnF'<pj$^[/k'Ihe=J-ROJ^CU$_R4nbDWk$T%IN7J_Sk$U&_s@`eke$2)=HI1i7krkNdhQY4>-FuoQ88VgRt`.e3)HmH$ljpLOMW8N1@9QE.G2X/dkm0aT1Nd%i0]hHmrGaGBtMRC[s?+%n$d1@uur6>SQ@O];NR>\<^RW>6i'Tj,Q#4NZK,ZQ^(^Qa@WrqrVjr>XO1]I:%bLTqPIG"I<DJ5#8k#G1*\A1REifFO:HFaUfcC_&qS'3T1IX;uEnPU`o5`X:hQc9[oK@!$$YkAUkcO*Q`m`]7[ha8[jD50)#P1$0ZT`,ktmQ>2YYcG_E$aTNg2`#j+u<i8HbS<Pi&_?JMPRca`9J%:*[/lgFCP6Q8Vd$lsu=0FmbE]K('.u=L-W#XiB$$(7j0i-7CE<"h4cG-,r&gPt!I(3>'A'/rkS>[-Dedj9cf2f^S.^#J)/1j"iQU.1GiSMGM:7?t7jL(!r&Qt`,s/e=3L_8GPniB#lZU(mW9Q*!(WLld#`2\[8G(O'.E1Y&Fe2UGIC]ZarY-]9RpBL,]c8[QYi+IF,Xc@(O9d3rtO0?Y&M0l$"i^oWP9Gos=&C5>+i&U[pU^!6<)obeBfX[/$V@o\=RN5+Jc;T[QirdD:5QG@"MhL?FM9L6#'l_?_jFG&4hPoaN:t!P%jG[_fb(2:0Z(g/c^Ge"A:.?VgAc*usA6IL6:*FVi4+]JI-<[$lHKIcchCdq-3l_lRR`73U@*P3c'$$^*Zc<!L`'qLr._><<1SRs-\?/.%^Jef7h!SR=0qY[qqW'*$X$n*6qjnTMh5S`G-;WHCLfAdE=c`'S/n$)te0\UH#K+_eq:RBH5H&>4onZ?@T!(GbY-@SFA\ET1Hcf0tq4#]@^'):)ZhLDq7S8Ms'sXm'g<deh@7,]-J^a4<+Khk"#Kt3=YB?7iNGkCa>i3H,)>JG4o0`.c4dX$.$X3Q3jt"oC~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 675
>>
stream
Gatm8?#uH"'Rf.GSB:C(drAfI7@;XiUoBp/fT0"/:HX<q)QBrE^c3\$J+)Jdj$u/-9p+t_m_.eT]6XsB8KV8e%o_C1JC3E8(4n9N_]/f-HjI)d)K.B:Mn-R`dt@$Cm^k[5d5LTDca8*?`buqV-Eu!en!Y9C_-tQ*22/J?hMrtN7qLVq7j`4qY$D\r;;tfGga5K>Kp%eMZf.6=))mBY5Dn,G&=c*X$c1.RKXZ(@`HN.G;4`8t;V=3;[`=:O_7]0*ebeg8E"_P0m"r-.Tmor6'(]7hjEk%LIbJ/;HDggH)U1W4eB=2_Kl.!K;#_?U-\ps,C5SuqFfUNR*j%0=jLG)+A!@A@X6oc.q??IQK?73[F&g;g3m3u;)TI9m\bTCNJR8Bq[_gVlH%h`JoNs`.0PnFJgoAcdM0+&L8`j-UgtpHDSt]s_M-<]NI""CYqPD,TTnYue&a)uKRZc()RT_ks=)-A=D?+gl50dA%EH.AdE#BIZ7LHJD'G["V!`CKVA9K=V]Uu%lR?FSChX"Y<`k*]ji$S%6lQQk?DmGh&abAK>NU8E`MiK4361;u:*JBa/_0=mXV:qPP3m1Q#;3YLnQq'B8>jaH*7HBu,jD+RJ1m^L'\l6HsfBP<sbUspa+tL%DCMT4#OddS_/KEJ;+`*2GO*GNn&e$U1^B$$T<(m~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1715
>>
stream
Gau0D>BAd^'Ro4HS2/i%-O!qJRpjKXRr,W%B.msdpPFYB>C[A3GqGG;1B-`*Oq"Z>,\5%%L^%'EQga-cqMYS)^+B6?>6%oeT^fi"bD+CYX;5NdkTg!hWdLjLq94jn3^()f6+:>9X4QUp3kS0<'>IYR43"T6g9e;+d-q*BfO/j/$V*32Y,!"&PB:5LgKh>M@5sKn!NsTi<sZso?uuLGEtuf(pj+K[VGi;JjKbUe>&E@lk@Q0`LZ8QuT?)4&"mo9EW`L#Y?UUD]-:MDX+d(bJT=-Ij!+3Nn8snZ%9-aVb5cu:<B^q,&\!6QXc_fC$MqC'Ra)(HWGPq?!$>IC`L%IE<f4i(hLtFM^46kXBg;Lg=cn[Zo;n+g=N_;>h*D7X-b`HR+ml@%I-\?pd#)LB:SWq:>#S<k8_HPQr[_X)?BoL,4Iq^;f7!1RuYL*Vm:q_g5,[c-<,.u@UfA?R@RAKXdi8)-5_q<oDHU%6Y5(eDEC:o6H%t$pk0'KtYbMu:;XfFRo!Er\pB!2CNNBKtWS^AA:rZEe]*ubaDB%piPr1"4FYhZ<"XN*eMm3Vk>M19o=*jSff]F]GKZb)l_C.pur#"o;]<S`D.hLl2rI2YJs'BW48]He7TY"(T^P/c&-q/Lij3>>`0'>_Qh2mMF@h1Ukb,nBPC1^QO:bj(BGTlnO8X2d4L%mmEc3`rTE0(@u8&(e#9%n0$=]S87s`X.g\i\h814kq;L#1HS#6KK5alt%S.l:s`".p=[Y=cJ96pG+<pD=#P2Z,\/W<2=89(Qf]0rQcTE$PD$(eiblH&*)p2be#XY/5kb^8Gcu(-oT`S:dCFkae]r*<T'NuAXd4\#ng0$nL/R]+d,8gYsHbg?A"m"`=1E<R,bM3LKqet-8Bk!-Q]H;oe[U&2XF`#?eFM3'5Z"*?/@%lrGMuWb3dLJ/C/a<^NBk8Kc;I?q&W6P/Cj8X<n,3S=Ns0Hhr8qT%R.FD:,F7\ps7(fNP]K?ko>erE9r4&Yc,SQH22M0GKuX]\f,CR2"8uleCe)!$`D<YNHo)H;:01jPYs0IPShS2HM$I.AW1Gh53'!!)qu'u&3Qh2C,+s`@T$5$"-6IRqGb$l#a%1VR/7M9Bqp"NcJijXk+df3-R*)a`5%PLV:ij+qYSHp,RJkReI+tm+;%`h#Z)St+/(s%DYlLE:s1a-.F;DuK`X*sIa/XR8-#ep1%.\Bprq\.;h5QgBNo[u+CRm=2]j!j%6"V4MUY&S<CUlY]%=?")%<,Bk1oDmp%$;VW*29#d@@crksQV9E:l@a*QM]=KK?Z$G2+L_k''gON>o]:("+>/::S((_k1";4qf+"JB^mk4c%u=#.`hB-$g)*9qOEEJghIDK-fKc=Fi=8.MWVWN==M-D&'dJaCqb"fo>XK&Y$.ET<']$Cp1+*.-P1>f[nGmPQ`iM9<=467ofr7hKkaV?<8a>O("?*ENpGY#Sf8*hR_`'!l%V!oJlA_\"e'^)]#7^$`O!^#XkbXo4TePT3j7,lKLX+SM+BrSn8S4I>SA;d(i05ShN9W0T(@4)tk*hC*`OMV[P;P`(>Iii5ZRIQR)0p7PlJq-?8T`7L6;jI[<?;GIES'`3e6(c"tBiN'%'%j/^@2aQfD]K#]BLXrG8Y'"JZWd":;P7EZl%dV@I0AYYKp>(n9@mb$>r)b<n)[#J>G<.A,TAe2/Sg8*D>iOoE%Rgs-o(t\Ib#Zhb>r!/'jYG)~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 736
>>
stream
Gau`P?#SFN'Re<23:0XJ;%r+S9RC1t'iNZV,MH(&;IUbSEMsmk/&ZqpFiYDr/(1e[J\fruch6gNcJ`a+bFAOZ%-XVQ%QLtVF:@Rn+6b)s;sVQbmE3de@H&UR5nYoDKF-W$0oM7JnIk3_[hfefn8,?TFJ@F.I]k)a`*$oF*sX>D(c_JY5l]?FU!,o]DcuYP6TP>D%'T*76Xkj,mLU'2Y#c:hialGq)S(<^,E*FZ<0rlg`Hdp*8j"\YY'[\7"<FQtcW*0X=OUfgW5Wm8bYGB'62CSWVm+R%^Ud8gF\TZW^`&i-5NcV6B)-Nc1TqiA[tom>YA)dA*>Y&K(>6fbi,Xe#4u-N?V*r!n&m+(h^(krhGm/QAQ-AS0KMn*#iV9De-NCB7Koj>WRq(_EY8=bThsms8Yh@(m2[";SlYY8_s'5<aDg25rn1.IZ_e-E:CcSo$4&D*bnmt609aU$h3no#e@/k?3Ishb?O_SeQ!PMQPoL?Ad*4euI(4(h\6SLGRl7pH:OWHLa2p1Fr.,^(H\42,EQ`1i#k[>qT]i0%3KqPl-(2>9tLL)ellVMTA9'@]Zf8[u]1Q,/k?9ID].ZX3^[k?0DRl`0=9o.S<e)!t1_Y.6+cQ""Q;2D,u.5[dDL>R'/Tfi3%AsI[rU`FHaR-44S(-<K(B&oIBjA0\MP3I)1'6bSCV98U53mW&A9;^j>cdqaLDf1$>]YLFX1B_%.Js^e"k8nVU_>4K!npIM~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1081
>>
stream
GatU2hf#8L&:Vr41"RfHe5FMO&GgFq8\*YLmG;`5G$c`$S1k*o?tTqEHhZ.LfT:cnM43]r!l9,qD`mX9?j7YmbaoUc^n3&\s2BNaO?N[Qh%8!rR&6XN,M(0\qsHH6'*`Fj].=gIA4M\dJ*b3a"E#p`K#@mQ$-WWr4sEZYTLgZ.nA2RJk'REZVcM<nW)k&`>seD"@Jia<0igLUZ8.JY(qdMqAG*F5ChsnGZ)iGY1X-_)Es(#%NP%PZo3=frF4EILI+t(1M[%HH0X;rYS1HEhQC/WQdgh#J>g$g@D^RVcchRnZ-1k!A0M_*+.t`9O'fOY08a36,"mR$ge#^RRY`<(n?qOHdDA;@FQ5OM'dZ>Vg2!=\F)#$@SMY!"J^5!n;$`;L7_"p4^>^TJ;GBV=]]RZ8Hlh:D/mCX(VTpb]cip!(k4Y;(7Q?+UA7S,P8b/Jt)*R3?bZfshl:tDWt.2jmUf6kkZKLa&ke^3eGQB*-EO4XX,"f</:Z:DU83\WBT7!:c5"(jm[U&iBH9n&cc,[hi*!9^ZIX1gQR">Y3B8=R>',/3h'O9uH2OG=XUbXs$[-JrEhRGm#H\NWG$^8=W0VTQ'M'k@tChHrV*?j3LZq@XPI/li3#9_l=hQtE'iqX"Iu`h#8K][/KcitI%7DSlEj=4:N9k0Su41I[nMm9L8s#36!tnNhA.B6:%%pr5shE=s9\F^O*u$no4&6/g*T$;t/dPk9IEE\A,*N*9-b.(IJL\bQ\G=%SmOMAcVW!2kDsaEjmB,-&h0eI4`U?glocMqX!%?5-Qo2n!?:OmLM0-?VmB]2l[V\a&Lf5^[;T?A0XK[#1hZrc'R?9^)aYdrNT:SZ4R?^P;_M3e^IW='R&jCfm'+n>35p=<];\eND+P.%3s!r/>H=Tc;CkpS8T'8[=h)rX4(V`P?699#eE,-#QOtS%<l4W&!gF,hB`Dn@%4S,Skn[VVbA"m\9S"E^o*VMF,p);&gGaS3%'`%$/+EP7T%qb,]ljPl@QgdPgUtiZTLUXuH(66UV^,2=5Af-Dt>Dn8[MYn2uk\hnmGDU6(sH&5eia'Coot<l/YUU]1>?iF>7~>endstream
endobj endobj
xref xref
0 37 0 19
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000122 00000 n 0000000122 00000 n
0000000229 00000 n 0000000229 00000 n
0000000341 00000 n 0000000341 00000 n
0000000446 00000 n 0000000418 00000 n
0000000523 00000 n 0000000523 00000 n
0000000728 00000 n 0000000728 00000 n
0000000933 00000 n 0000000933 00000 n
0000001138 00000 n 0000001138 00000 n
0000001343 00000 n 0000001343 00000 n
0000001549 00000 n 0000001549 00000 n
0000001755 00000 n 0000001619 00000 n
0000001961 00000 n 0000001908 00000 n
0000002167 00000 n 0000001993 00000 n
0000002373 00000 n 0000003534 00000 n
0000002579 00000 n 0000005288 00000 n
0000002785 00000 n 0000007256 00000 n
0000002991 00000 n 0000009198 00000 n
0000003197 00000 n
0000003403 00000 n
0000003473 00000 n
0000003754 00000 n
0000003906 00000 n
0000004776 00000 n
0000005897 00000 n
0000007335 00000 n
0000009043 00000 n
0000009971 00000 n
0000011197 00000 n
0000013000 00000 n
0000014502 00000 n
0000015849 00000 n
0000017183 00000 n
0000017949 00000 n
0000019756 00000 n
0000020583 00000 n
trailer trailer
<< <<
/ID /ID
[<8a6c7f848f6a2a1be56036b86245afb8><8a6c7f848f6a2a1be56036b86245afb8>] [<c676df07d673064026e86bd63f52215d><c676df07d673064026e86bd63f52215d>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 21 0 R /Info 12 0 R
/Root 20 0 R /Root 11 0 R
/Size 37 /Size 19
>> >>
startxref startxref
21756 10437
%%EOF %%EOF

View File

@@ -0,0 +1,346 @@
# Les 7 — Lesstof
## Supabase Setup + eerste queries
**Vak:** Technical Foundations
**Vorige les:** Les 6 — Next.js QuickPoll deel 2
**Volgende les:** Les 8 — Supabase CRUD + Mutations
---
## Inhoud
1. [Wat is Supabase](#1-wat-is-supabase)
2. [Supabase vs alternatieven](#2-supabase-vs-alternatieven)
3. [Account + project aanmaken](#3-account--project-aanmaken)
4. [Postgres basics](#4-postgres-basics)
5. [Tabel aanmaken in Supabase](#5-tabel-aanmaken-in-supabase)
6. [Foreign keys + relaties](#6-foreign-keys--relaties)
7. [RLS — Row Level Security (intro)](#7-rls--row-level-security-intro)
8. [SQL Editor — eerste queries](#8-sql-editor--eerste-queries)
9. [Supabase client in Next.js](#9-supabase-client-in-nextjs)
10. [Eerste SELECT vanuit Server Component](#10-eerste-select-vanuit-server-component)
---
## 1. Wat is Supabase
**Supabase** = open-source Backend-as-a-Service. Geef je een Postgres database + auth + storage + realtime + functions via één dashboard. Gratis tier voor leren + kleine projecten.
### Wat krijg je
- **Postgres database** — echte SQL, geen NoSQL
- **Auth** — login, signup, magic link, social (Les 9-10)
- **Storage** — files uploaden (later)
- **Realtime** — subscribe op DB changes (later)
- **Edge Functions** — serverless deno-runtime (later)
- **Dashboard** — visuele tabel-editor, SQL editor, auth-management
### Open source
Volledige code op GitHub. Self-hostbaar als je wilt. Geen vendor lock-in.
---
## 2. Supabase vs alternatieven
| | Supabase | Firebase | Planetscale | Neon |
|---|----------|----------|-------------|------|
| Database | Postgres | NoSQL (Firestore) | MySQL | Postgres |
| Auth | ✓ | ✓ | ✗ | ✗ |
| Pricing | Free tier ruim | Pay-per-read | Free tier | Free tier |
| Open source | ✓ | ✗ | ✗ | Onderdelen |
**Voor deze leerlijn: Supabase.** Postgres + auth + dashboard alles-in-één. Geen extra services nodig voor 90% van je app.
---
## 3. Account + project aanmaken
### Account
Ga naar supabase.com → Sign Up (mag met GitHub).
### Project
1. New project
2. Org kiezen (default = je naam)
3. **Naam:** `quickpoll`
4. **Database password:** sla op (lange random string)
5. **Region:** `Europe (Frankfurt)` voor NL gebruikers
6. **Plan:** Free
7. Wacht 1-2 min op provisioning
### Wat krijg je
- **Project URL:** `https://abc123.supabase.co`
- **Anon key:** publieke API key (mag in client)
- **Service role key:** admin key (NIET in client!)
Beide te vinden via Settings → API.
---
## 4. Postgres basics
### Wat is Postgres
Relationele SQL database. Sinds 1986, krachtige + betrouwbaar. Industrie-standaard.
### Tabellen + kolommen
```
polls
┌────┬──────────────────┬──────────────┐
│ id │ title │ created_at │
├────┼──────────────────┼──────────────┤
│ 1 │ Beste taal? │ 2026-06-04 │
│ 2 │ Beste IDE? │ 2026-06-04 │
└────┴──────────────────┴──────────────┘
```
### Veelgebruikte types
| Type | Wanneer |
|------|---------|
| `bigserial` | Auto-increment ID |
| `uuid` | Random UUID (default `gen_random_uuid()`) |
| `text` | Variabele tekst |
| `integer` | Geheel getal |
| `boolean` | true/false |
| `timestamp` | Datum + tijd |
| `jsonb` | JSON (queryable) |
### Constraints
- `primary key` — unieke identifier
- `not null` — verplicht veld
- `unique` — geen duplicaten
- `references` — foreign key
- `default` — automatische waarde bij niet meegegeven
---
## 5. Tabel aanmaken in Supabase
### Via Dashboard
1. Table Editor → New table
2. Naam: `polls`
3. Kolommen:
- `id` — bigserial — primary key
- `title` — text — not null
- `created_at` — timestamp — default `now()`
4. Save
### Via SQL Editor
```sql
create table polls (
id bigserial primary key,
title text not null,
created_at timestamp default now()
);
```
SQL is sneller + reproduceerbaar. Voor productie altijd via SQL (migrations).
---
## 6. Foreign keys + relaties
### Voorbeeld — polls + options
Een poll heeft meerdere opties. Twee tabellen, relatie via `poll_id`:
```sql
create table options (
id bigserial primary key,
poll_id bigint not null references polls(id) on delete cascade,
text text not null,
votes integer default 0
);
```
`references polls(id)` = foreign key naar `polls.id`.
`on delete cascade` = poll verwijderd → opties ook weg.
### One-to-many
`polls``options` (één poll, meerdere opties)
### Querying
```sql
-- Alle polls met opties
select p.title, o.text, o.votes
from polls p
join options o on o.poll_id = p.id;
```
In Supabase JS:
```typescript
await supabase.from("polls").select("*, options(*)");
```
Automatisch een join.
---
## 7. RLS — Row Level Security (intro)
**RLS** = Postgres-feature waarmee je per-row regels stelt over wie wat mag.
### Zonder RLS
Iedereen met je anon key kan ALLE data lezen + schrijven. Voor demo OK, voor productie disaster.
### Met RLS
Per tabel: enable RLS + maak policies.
```sql
alter table polls enable row level security;
create policy "polls zijn publiek leesbaar"
on polls for select using (true);
create policy "alleen ingelogde users mogen polls maken"
on polls for insert with check (auth.uid() is not null);
```
### Voor vandaag
In deze les: tabellen met RLS uit OF met open policies (`using (true)`). Dieper in Les 9-10 (auth + per-user RLS).
```sql
-- Voor demo — alle access open
alter table polls enable row level security;
create policy "demo open" on polls for all to anon using (true) with check (true);
```
---
## 8. SQL Editor — eerste queries
### Insert
```sql
insert into polls (title) values ('Beste programmeertaal?')
returning id;
```
`returning id` = krijg de nieuwe id terug.
### Select
```sql
-- Alle polls
select * from polls;
-- Specifieke poll
select * from polls where id = 1;
-- Sorted op nieuwste
select * from polls order by created_at desc limit 10;
```
### Update
```sql
update polls set title = 'Nieuwere titel' where id = 1;
```
### Delete
```sql
delete from polls where id = 1;
```
### Aggregates
```sql
select count(*) from polls;
select count(*) as total, date_trunc('day', created_at) as day
from polls group by day;
```
---
## 9. Supabase client in Next.js
### Install
```bash
pnpm add @supabase/supabase-js
```
### `.env.local`
```
NEXT_PUBLIC_SUPABASE_URL=https://abc123.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
```
`NEXT_PUBLIC_` prefix want anon key mag in client (RLS beschermt data).
### Client setup
```typescript
// lib/supabase.ts
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);
```
In Les 9-10 vervangen we dit door SSR-safe variant (`@supabase/ssr`). Voor nu volstaat dit.
---
## 10. Eerste SELECT vanuit Server Component
```tsx
// app/page.tsx
import { supabase } from "@/lib/supabase";
export default async function Home() {
const { data: polls, error } = await supabase
.from("polls")
.select("*")
.order("created_at", { ascending: false });
if (error) return <p>Error: {error.message}</p>;
return (
<ul>
{polls?.map((poll) => (
<li key={poll.id}>
<a href={`/poll/${poll.id}`}>{poll.title}</a>
</li>
))}
</ul>
);
}
```
### Wat hier gebeurt
- Server Component (geen `"use client"`)
- `await supabase.from(...).select()` rechtstreeks in component
- Server fetcht data, returnt HTML naar client
- Geen extra API route, geen useEffect
In Les 8: we voegen INSERT toe (create polls) + de /create page.
---
## Bronnen
- **Supabase docs:** https://supabase.com/docs
- **Supabase voor Next.js:** https://supabase.com/docs/guides/getting-started/quickstarts/nextjs
- **Postgres tutorial:** https://www.postgresqltutorial.com/
- **RLS guide:** https://supabase.com/docs/guides/database/postgres/row-level-security
- **JS client docs:** https://supabase.com/docs/reference/javascript/select
- **SQL crash course:** https://sqlbolt.com

View File

@@ -0,0 +1,225 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R /F5 7 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
5 0 obj
<<
/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/PageMode /UseNone /Pages 17 0 R /Type /Catalog
>>
endobj
16 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
17 0 obj
<<
/Count 8 /Kids [ 4 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R ] /Type /Pages
>>
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1932
>>
stream
GauHLh/h:0&:`lHfU7)[:$#!Q/^$(o%rIcjFXG^U!pr,jpYZqj%`Tjp+P6Ym<gIS2"@=Nc5QFICh>Q`Mb^e]2<M/4Oi;F5D?8Gt/L(dsTjhU?iY(jWFT#Cm-*#C/1;VUABq6p9TCt_Ot'pe@"cTkCSP+Dc9A<rIo"HN5%*qLLQ0R;Ja@!R?MdK)ur=%KT;^MO;&;7'iD6MT=0fD8(@So9Hh4&j\AOVq'$)H=o1FtCd@c\:<ZqOdc`q@W]tV^`3iBc=mU,#dI%J.^rc]__sVe4R^E;J!%>GRq^D>!RkB,:#SehBp\jQ01Rs0hab9djPNQFVro."WIr'f4kV]=e>*9B_d;Cm0UFDd;qG%fT\^](V[kfcoW7P$Yf5*[=GL5?8,tqe9.1nGJ,=SgLEFSg_fVl<@b.V$%&61\5s&R=6Q(l>mh$e'\/$0Z_jq@oI<=8Dq7:R>"hP+,Bf)u@94Trd2M2cc>@*+Ha8R#HPVmrQ##aAYGk]6m>Ap??F8A>'tWNsf>;tR]4U2//n:'HJN4KiR?*c`,a<bG\:8jb15&C3$nP`J7ON:4T:'>5)a%)^;U98J(H`A@FVJ`uIT6n\<=eGK>^afY9Zor'K5qiW$ZZCQ<Kp.d!2[!6;".;]/5l;MR=S$p>t6S)\cck>]7RHo%m=*52b$&tBVd>"McXsa"^@F"&;b[NQ4/^#XhV;Tc(q@irNF'8f+"Rg>59"#)YgSMfd?/2QCfE0K,Cc?1)U<cPU?34@2K[M,RB`JQC%F=.#qlRKjmj>gen&-o;D+X-"@+`3X3Dl!-B8QP6Yss?J^,+YTrRZ95GQTY)D+.@PVjjm@(hq>Ct[+GkX9P5#uAN@=aEX2]7Yk#6oMl1=e4.fEB<l7VT*/mFea9-`GY*keiV3#W5c&"s&jqduHN$*4-lC1#s_T?X_dRE*Gfjr,Wds0NKYm#OV*:G47C[j-mt*r='QOIJL3#Sk5I'BTA,o*;f/12`^Z6+ZMIVC`$EaO]tO-gdK]5A<rPA]h5[9NOqqUk0X>Aqm3Y:VWZDG`iQj73j]rM3hfrF=o\C?'G0AC>5^PJs2)ie:lm(QH+c1`[9!A3.F&!X*s5E2#dTH2<=V<"W%>c8`/9pq\@fdP<]Sjc4q-4,$ZPt[i6I1phh<4SM?8u\RAKX-/0G4]75-[AD%`4a6L&F9C`c-lc[sq4#!"m[q<'RfVAU-sFDMZR)QlGnocc,KLI'@pJ96hQ8P]IL%)-/lDL;XcZB<0[.J/)T;\CCsV=]&UQ8esAWE&7Fbu?Mo@'76,(u1O:FiIHg(1^l4M;BMRffP#b4>k>E!qE69m-\InqY"4kLeS\`3Lo!E15h%Y0^;/"OengS)S\eJ=MmlU8Z^$)?B^M?k^XPr;pjY<AiR2k%;rGoNh[fCN&<N>/fMJMq*RhT772ma-h[I)nE268rXn'aX_DVk$facd<QBKjV`5.@?hZ:]YOaonrVOLBcSM?C,B07\qo\\YE-65E3J:CoPYm"JT<2&sQg%tI-4%$u>\N0d>fF:D)-X]$Zm9I$T.n=BK*-<#T)W*$G9Z,S]cm0uM3M/I230mb1,I8@aFEG7@ma"8Y5\t#[#"Z)/[J9iq]Nf]1+!#3848q2$C(e0.lDm)Kh7XsgMcUa@Y44RK!Ld&=,r[ci/-Nh4X">Ca/isJBdRC(RWH\&$=IDV9`HK]-D,]ZK5?KU1+_?D?kL^mQ"&mr.RT%/0TT4uW+ND6ao2iV>H?dZoG07>g&BhMo1g$fZLX<)eNAcXVeC_G:D'lFm.rA!7B@S:r()F"R-3j:dUr0IX@Cbn_h1gnj8>He1;u;Ekrc\nGlptc1S7SCIAe@=T81(Aog7a.0Z9Rf)lM.5Glp'%,3AA)/:qRM66%:m>YDs?&+QF[\V<ls4kuBQU(L/+_8,.+dq4t80nLsCE>je`jeG"7@k-5;JYDg&Gqd*d~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1857
>>
stream
Gb!;dhfG8H&:Vr4YqJ&rp<EdI&C?hl81/Q6Rp;C/DYrE0)(RU"#bM+[H@Pmq0OXe\Rj=TN1q)EI<ic0_X`cop^r.$<IKqUCq]VI?#S7?\#9^H`_seR.%+"o51FT$$m=8VjVWC`1HqXKiR\!)iR)+18'C\]In6?oKNu4JOHU)S@lOk"uJ;:UH":UWbY%NCG&VkXJB=qe08o\V#E#A2Ua-Z=A3]u;-ATSdOlAa*9Js;pCYEj$m`,Qe7`mD?nr9Y/F9Vs!CAk<WOf1_$/QGJAT(G7nfV-&U'=U=[)L6"$9X!_R?[@)d]R(MVT>,5ku4KP(.nnBL4d"[0+aP]fqb\)[nQo6^\\'<q+$:1p$B!DQI?@ck(#F;h;EaVT[&Y!1o(s`Gonl`&/Da[iS,K+2U(,6dq4AsM5lYtrtmFIrl>>:f8-[:l0Yp^r$_s+9?9(R$@W,O:1=hs-G#\I?$K#"<$nP#n/S(>)'UWf>8^7+AUi'0o4!X?1DZ7qDT$O&jKKo.R&?m9.0=1Qh.FedkB1@QIh/pTJs-X9C>@pat)/g:<6+,d'N-=N4=5N)Oa2,o(s4Ic"R0)8Jb6=r<!IbBUFd:uJ9p0@&8K<,pCrbcAi/f=-dL-@8DKJ^eN+BjV*:MarC]Ok[B9Or2r^*QX0cnT<fA5[6$X"aF<Nt&T8d6iDLUtM,V"[#E9;8?*IAHlBG$u[TU,Z,+!_7Uj^UI1Oe1G#"U3mR[.VHFj[cS8HV=O^ro_F5&%^>NLm$<X/B5%_7a=bnA)[Y@u;8)'lr,*@0kma\o7oPsl1iTO?Wj0O.\L9DO.-HF\]3QS$erS$*9r)3EbhkCM*m4QcDSDh.*Rs',m0p+HIWsj=))XQp+`5do#3.>^.#aK'^VnSq8dG"LVi_j<$^n[2-QG9FHonXQL1m`^(oD.d8Yp*leQTR>4W.\Lrhr='l.Zkc<?Wu>4\dj],'!S2_Yu-APnPB_nqZdTn69qH)(cZDAG(E*O0Z'+6q7p`cf!FYAgUPrIr&%5a')"D,4#s;)H&WIA=:5IV<>^C0HC24jG+\t]Thm.6Go.VpONKffd78?3=+X5.AB+<o8$\nZ3R]h'D;An:<rW:_ZI_UUKrNaMKo_[s'"XS=2*hDnX<P6,r.Ub5m/!;D/aO/c%iSJgjRBBt^tmP/iP8CB$K?4,`W%-lDc[Z3_k,r#['aW%GT*Lh[a^IXLe$OS[ffq17/SDT&uZ,S8,9=US&UJAWi?=%?H=DiRT+;84"MjR'E\5qjUhBQV+qU%Ar7D!1CS6$9MfTA''HA6m.od^YiJ^J$bf_b:_G[_#'$bg;CmmZ#-V#>Q2qdfOJ#-6]F0ueMBE#HA^'<BUr5;.a(pG#.Tolnd:#pgA('O3_CH*o9>7dUK-6#EbQW>da]!t3AP%.Pm_c#WY7']00qUc`Z;OebhK2k-MjPk:m<5mJa$h(YG%8s5*/Y'1:2qg/mDRXhH/`a9orL$a&PlEp*]Vsfo-?S7(Ehk`J:,A:2%Qs"8^+8mGi3k3_4S;\@*Zasc`Z+r^f_\n<AQf0m!=9ihX)$5nq'eGpa6T)q#ZUo#GAAd5d`[=AM8[>a_4fG1jr!GA/BG.EIAhW:F.8-:DLq1AdiCN:gtGMBDWt4SIXTFQ[umbdkHp)=8G:eP(e?;1I1I$LKnC:mcGYJ8`AeMVIGKVE\:=;J==q$.b9.hqD)gXM/JXsX\01t3XI4D"/qQOXRBCYj<]3]E@>s%@j,05.AjoC@H#<!-"=-Cou-;]K=M=2VcYp>2b&;I(Th=/`a@YTBrMU#leV7(%6;V;7JcHMS<!bg`(!*:rQ:0p04Z88/q30H?f^5q'QX9k\"C#r.HW=B"2$7m4_8l'^2Wd16TNli~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1805
>>
stream
Gb!#\>BeOU&:Vs/R!f@H'p^Doo"K'N$Z%dBD@Q*`F#ZcI8_#kFZ'DWnpH-+O;S-WMoW48-YroL67[h_\K1@"irgteD?B!k-.h5h"GRdt6$0/MaE]j+\?p]]H#/GWRq2kXmq8ENj@ZWjJR#4;M6$jd(T`h>TdlPo"LbB0^#T:MWnUL]LPo"0A9_1M`FbARa8dJ<H=eJa$b?s#%$hGR>C?rsbl:]!MK%HZ!WP2ma&&J=d9,PBis()?5U^PDEB5&:%B:%TLbe^7i+Zpj_0j\:Y?=NU6`of%)>U\59.[;=d.bkg9(A$=Xo1I(/Z`o8eIm_"Ao&'t`6=2DeG`k0bYJ'LLKqOBU=2mM4&SUs]W>3H*+k\R%"'M#doTa)XQ9cO_nhAk)E77:KZ[d,A)c\iY<DqCGRAdmR!er(i?.gYnQGs1HGl:^CBT6a4B"#'<nHr$Hmm\tN5Yok]@cIAHI<<B.O#uJQdC>;#kh:_02KX7qDgUCGg)5K0\?a3b'=o&@60E'iaJ$%EmPmoDC'RE1#+g;]Z!Mp_%JBqrV$[Q^3sh-L/]$71XP+5P91)Z:8Hp9bgat;*@:F7=c1`0UI(cMO=8I+/rDQCU51-5+YJu.<>9!"'S8Ti@/=`=d2U80+d[WDpp_IJ])+';k:+3h:n49TEi?C(bg?et##u&]Wl0?=-R#Jj0RB:Lr=Zjit8S0e;]0e]5aSTQ:)Oh&Q0hoS6E080)Ef%ne"(Xs;'JEMfiuX6qjk095c'fis%O`b^&^Yb*bCL)>.R1CPnN^im?sF5M8R*uGHK""BDJ5o"G)TAfQG1[<;=.K$Pa"?g_Dr?eP,Pd]*?e;GLNpU;W:e/GD_91;l^C`.e8#KLg=D^BNFr-13]J(C`MiPg))m)EN.o;oST6YU(9pDLTn%+X!@]Xbrad"gH$>NekZ,Qse65iAp:"$1P<3)n`n@W$=(r5OTQEr<dV`bdYd5\@h3l5b7uM6E3`NmO6fW.ZN=s4(be<Klbn<7j&*e2mB2m,ET@,pur,@_1^mlm?1F@Qo5F2aRW$@A;ns=W,ctY5BBa:@KpI.;-Iei?%'CIfPDskAW^3/Ueg*&D#s(;_c(W:QLPAFe`MRdkXGtY8WGHX?59`o9K%u?:$g7iOSgQSKTW&&BaUN@:]Mi']L+RRr'/h-Nf(>_2"7r#6cYS5P.\Zun2Q<\DkVQsO9gNdeF>UeT>3?a/f$>+L=.cM79)7?8I9p4F8gU#Xt7(;@fWgYoPM]=NgidFF7qWBAq*nc53!:=qLXmBph;BV]s@C<DIIBmY::UH*SQgjhBka8r?):$JVG-JdC>?8K6<ld<BSj(ln34?5@<Ia3$?aigH:&;g?r(4."Fa0&CE"tHkP1h5m(O`u//%[-WNG#Ur$%_F6Dc-G53)FCK-J9WQ-?e&LT?^0$pIpjH^/]i08I=$#0DEPiacDEc/SR00m!2CN'NCbecdQF17qb?ek2cJ&MWXXJB%LW-j&YN(2"cV&c7'pbY03_j,XO*]o%66,L4W4)#:tBID8KGY(L$>G_b#?a.AY!.b4WH])jPu?i+I-%he>F5LnXWaLKr'6g/*148OBpOIK-UJKLT&C=[LJXQ>i8FV9,luZ[s-o#j$'L.^=5L[!ebR@cqoM0l<DSa^Yj:\']=@hB[6*XQ$`/lkO-!Yq=8%XtZI'K%/B_LU>HO+ArOd/`U`=$`#t2[OSLZK@&K\CYI0!i+\R&0;'3.0uIO*Dl[c+SYm@Z7FFs$*h`P.;nl(pFbT5&BW092NO/HQ%,j]r\q2W@k<OsW_%N^Q0(>kcd(S,"H^^5%Fd\4tn/m*_0pD~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1630
>>
stream
Gau`T>>sQ?'Roe[30.L7'p:+@nojlVcGF\$b\e:rSij?S,YIRc955Cos1Ydd9cO6A)<q>E/(-H8\U?LG!Gl)\rh%42^JEhTJcMJu>lnGj_=SAcVp7L:U7;SQ!HKK0I1"&>b6tV@PCU[cpSgqR@Y(=_^a)3Dq@]`0-Nk$CBioh'#U$sgO:73r*g_8YhF3r4URE?eF+8ObNDGl0I)KfB#%mNd_TWEd)q@Q')8a<**_^(2I/ABa(&ga*3hP<,B`ro%R@`:O&5Xk7\$,9i5NjM$lg+bO5@OD^<6u<$\25OOYpo<CkBW1B.j9DA<L>1B4TSX(K8g"/CKQ1/,X'A1kFZs;:H\ng.Qk<s5-eLf2FJ2h_,S[$"A0uF]$gt=$!cAkeP,(N"3=4cgm<F;Uf+mShhK!O.*Uh3ZqtX,"^b5X4%iS^(ffArLV'pk)V_GG75bgaPt]ppCt;6emXC2^crMnP`t:-8Ol8@<SL1;l,GN;WBG6Iu_tbK-dL<4CZO=3%-(l<_^Y)d!ht/--V1_]nVRhfI!r<6?1n'0Y.Noi3Ss)jQ.2@>MD"m34PB@d4q(lV'`@CTs<ZMt-5LV$?A"@ug.(C0gE_jcoP2)>Cn3oTq)"iVVO@P*PXfh12Hb3`,0"*N[;UODR>ie!S<E),aZS5G5'AViMk;!sjT=p5e4mai<U+XT>abB`'hFNg:JE/nOShp$[/Nq2%H)=T8(I(kR@VltJ]MS.0H<f[1\rV_7[3t3K0F:MJ-l29u@X5-di@s,u<Y%PQhtBCK-$q7.lBZgGF]n0%0=M&-jiA7nl:(miT:<j&]iSMl)`PfZHAHlZgkXNj6<$Zd3u0hMic8Hde96Qd@>74#6oK,K:-0g#Z6.#V("LMaGLr['?`o)U\";(nBLe#[mNHTV&lSG;`gng=l'e*;PFW/m_cj84XQ_poSQj-X\E0b_<tBZt"r#-??[L2kO\Z;FAog3YF'W6:af=R)SKI2f$,L.r/)%(;*oa>aFu_gtJG/7V\Au=]cV&=b,[<q\EL-!,EL,H"ApZfP21@,]pKC82-.(\3L,+JtYsVuA0*MP-^V&'%1EtQnhS3#aZ%P-uM2idN_+/SE=D-mXI]dfO;^t.RPFAAO)Cn,`.Or<-$[ATX/XXK8.T8d'-@'Pcc6s]:bRkN<U>7iG'tBh(f#%PZE04`n>U<rFjOUubJCW[S=bhXW5*!,"P4@L)lY'.>#WCF%6FsUSHNb2=a0K>nH>_#!V+.uFH<ELL,.l4aPZ_bQ\N*DJC0QF("sg++LMVWfos6l;D:#LO**>I#P*Va>J"lU1Y<[f^qaBb:<$2?_M:VFd8M,O;Ua4[fTdAE9"F%_%VsBn1QMZIm.Huq-l]caYC,`*&caAN^m3Zc'8Q<e=PE'<Nl7G_>-?G_Z,ncT24#hdJ1&Mo'A&DR5F1'AA&pm44Dl*,^ZnSH$b95@d6^8+Wj.hbtOh@f[X\'u3`C>$[!s_QfYH[@q&J@J&]2,SC=R'QREtFl_l7Dlrkj6]5*JT"9rJeVfCJqDPV!/m^lI@CC)WJl1-f;r$h\5sf83b'C)*cPlMHr4X_O$<-h(Jt\&+9Ccarj6gSS$o,1C7<IP^h4)EOrhHlo<9!%5qa=/5KX/lg-&o<a/bDq%"=En'(~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1746
>>
stream
Gb!#\gN)%,&:N_Cm.a.q@KZZa!0cZ"4%Z;eh<&0(%iro:?j`'2;ku`HG*B,u!k^%lV::ni[O3=d?nV`iB:!$lnX$e9P81mZ;gA#)!TPk>!"2<tdkc5+ofd\T7pH0?&78="k!3D5r]n$dEX3m&`B7`TW?>(A&4f9dN$WFJ-Nk)ZC02I$%#B_<O9#p7_FR.'XS5<)3P#\k(e*ugqBeC?_i%+97#,4%IqT7'YU6?pWZMep64q(V"d;1-HoQgeMP[J=bG*)9:K-Q>d_Lf_!@Of7;W$]>=R5MhVH5H7Z47(.K1KGYOVf$#doBt:7;_+f>,Ji^E+%TE,1p(TGS=+'!X+A!LqH4pAT<CmFOqFC$]g'f&g$%W$nEtBU5$)qbIg)<]<ECBn;dhaW#1Q9G#%&iZNLjk$3Oq@*K*M5L"jf)\7!RW/qRsD:%]$bLNcW+?IRaJm<p9%m=WOMTo6<]he1Eq-JkT^G[u<im=+aiK\5g['%nsJY[Q*=it2D;M0pK&Fr_[B8X='m(KjeT8fK20-IpZ&>M`QQI3O'aCD2uYFCJWP9PQ?]'FJ=A5K7#J$F@ng7uT%'SY\bXXI;]2%kh_%G1BTTjt>pCYFpCI+,DfFG<1MO0W]Bq@OM3FJ@,6\#9<$DnKFW_55K?#5\jB((f*nJ38^gfKrR!-HN&<QlY^VLms+a4YheJ0T&Vin$jEiBl:4"Rn_R._0-.%^Sp"nJ[Ip)94=#Kh<N1PLf`tuS1n,IE/fi.G8^1*P3I9CWAMuQ;*TF]%j9Xe=gTI_,a2u=8.qMVC=O9)693/?f,,+)9VM6_lINLuFqZdMW.)MpC&8R0()SD),&9r\J?L.:]iYKh@lGL/-2J$Ve_/,:sVCZ>7HN_TG5,^->W=a.L*C9iR@=fX^#<dSN4M5Tjat-1k*A=cT)_?BG8sLp/i<g;mQcCDl>O&%S_5N=<:qU[f$+Hn)BOI[&HU&Ui6RZ(Hh=gN5c/pXXK``$_r2[p%keGC(@CK^QK3tN9)VnLR=hR9Q<0!\sXZsY0b2MFJlkRa0;3:%g39LSjpWE-n7csn<'L`=L]dhsbDbo?35-<";^.D/m@@gL,@4_-R/Weis[,3Tnr=J#[59ok;\&G9RSNR4KWs^J'QLdn6,3ml_S2A'N[n#:=8p:in+$dCTp4n4fZ_;n*MNp=1r(b'G2PG"d(I9uhe\$7m1qaj%]eS7<qT]/'H2/UEXqa,Vod4k<9!a^^">V?.<?k[#*c<%'"[i8]DU%$&.hj7N8R(@LM#sJgVL4!,Y/'5m.Ym]Z,"qSd7\Hdi<2YA(I1LZXYe<YGC4QVpl(^.:RP.N]9tA[3lEm;ugU##U8k!1_LFRj=Z.E@.2>YoNG(TKlcj$sWf/hfOf<?$/jd"tAd@_tY91U[XEfJ2?NO^=(F?Z2<%O%qs0+?p2/DHp>EuB'in?L^-jR>Y#F/>27%mLTh_"5W0PJ[aJm](6Y-I,JMOXScO>)T[U_6"DgY^:Ze\nSrqjIIV@<_Zj.gU]?kaEH+PAd;Y>)QP(aO2\b`p_[AgOMd8?bD@gCG,q`h>dHM=L+S6nmf0G;@>J:7N/h)n:_Lq@Vc1;`DC0K<F<ai^\qa&V\e3X8UV3l"XF-cR/Gr!'laH-.m%FTJ,l"M/kjfJG=PlkCLIZed<*Z4WY_01p@,,.I\mH?(GUsA4C>[j3'YaH/QM\7(k)8s3A%Q8Ci;=V`eiYgWLYDrk3f,kHgureV_0k,@U@B@p8*SU(PLM1Ni;F$,0P!H~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1376
>>
stream
Gb"/&gMYb8&:N_CbaW/g?LNSp6P-U7;POEt[tU)2)+YTZ/^pCaKqt7$mlS_9MK36#J.&t;.L@F^hO-AcF3a3:!Q?^-s/$0S[o57HA&(&tYCXY<L?X'[AK#uV#Zk9O&r85@=:W7Vs++o+'d+5gQ<OQJC1;8nZ!kQfCOi1PekAHmi;+j25d[9>`'=`pb,?E["]:e"lBk,=m!\mTTCMD%;*?sng&3TANaVg]6<"O1b+t=W?,5O\[m/3tf5g<EoVO0\ps;tm]kQD^Et,&1nBTk#]Ni&5&>loj4n8nK6"=JF$;,4@IIHI4.Bg?+^F/WS83i.9r.,S&+t2<c;V&4!=S[b,b,iJNKPOY$?_.Ph8[q1#Kgc\kh3BnNngHEG40D;Oref'ilES;:A'udX@R2Q1P-ptfRj*e?NBr?X\f\:K0N_3`;26!IBOaO3VX%W3SL]]`)GH/%!UJYcB!]3GURS4DOoKUl4ung7>J=!EH:Ei3Ar5W./)WB?c_\'W=])f2JZNNW=I+5=_ptR)RbV0h_Hi>.S2VG#F`l_P=dAS.=Y(P=,YA!a_:@LfC(-MbX%u^*AlTRK0o'T=H7'l?dK:Z,N[&&aHo0EsdEe.V5@MG+?T$`be0\pagl@l>)u*<B[r[os-o/:.k&:kgY$0)l#,ppn,TjiHX:tU3l_aB%`$]317?,Q+>;Ng3\P&FJ3@,J43Zc&K2AhWG#[FA"YtYlLq`K:G`b[R^+:&adNURLd&M/#EN374bZSno#(tQ&GRiENfBqDq3(QU?mlQKetc1c[0gKHRgl`+33hQJ#F=-ge01#0B*4A,J@#f-^aQV3ZWf9uNa6$td`/;Y"n49Q50h70I"_])uFcjE(Gi7pGTG%6s1BZmDq1FST\n8L\HJ+;.q\?';FK$W<tX^$I?5:-i>\kXEp(0Q9<hRUeI<X*8$<R)\PZXdQ8&',XC9T5eI!]^WP(,BdeSDe0pLakk$(7fWf8@?>#Fmu(geoM4A`/[i%qjnS2CS9M!ON7YCm1PJm7Z5G#*[LRT<cK$]oi-7M6NZ^D&#&O'kLZ@+l1'h^A(K4[T=&Q`9CU"\[,e2C31\AG2b11)];`S'k/C'Vjf'@K^8'UQ3@9D9KQ?tn7S)8E$4)7&ZQhR8NW]_q#G^TicV0_rSi1CDBt5^^X2tqpL%jHG2g2kVj!6K=AWu2Y^b8h4Rqbs!GeTaqh[a%Q2R73G>5-nu8+`BSj_F%(7LZMbhAfn_W*n'&D#44K_gk87IQ.&*!rq"V<8J\K-^MR0C70HEC'SIE\\c+,^kMZd+h.>>K#V:K:Qj^_;.C^=h+@.eQ=t-sbNnZ4ZQq2^jT:Uu%">@+3h-U;a7kCoXWuVUN]`R2T85#c87&/brokI?+Sm$K=8si~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1900
>>
stream
Gb!#\D/\/e&H;*)EAR=).8lV1?:^na[PW'QCg#ZTF;nU1@hdWo.nd#jV_*MupDronb@tEC(m*!#Cl9L0Hf<e%7kp\3B'"4r#C&Fei<ojK_fuO4,qb.;@5RD#l4NH*iHda/8Y(A6#orPgCt;7po8+RYJ:XMJ8E#.N)3H\9^i>nV9L,I`qP;/^#bMIg!g1^uV>nedL\RC7BU<tX+5C10lR.[<!V'sm:sJ9X?oWeh7Ti^2-'W\lKCKocY?nt.JsY^qkM^!@`c,*l3kR"O_RY2L,PX]7kr;u4C^\6)@/RqKBS!b/6kasQ%XP5J]L\q8a;[!p&d>!5n.n1>+S`TMb7A.Z%mAepN3^5hpXnBGc,Mn0oI&T=NX%9,\O'8u[:=4&Q..?i%9``.KXt-i7q=D'm+F,F+T_6u<^JZR5%2YO#hjfeHI>E<AgB2_$B)`VOKs"uY/'6n<nO/tAR`<V\i/lV264K#n$6$7Oa1$_4ac3S:rY"3ZAsalL'8j\N;LE</e^lX&<-T.T=m75IXH6^G&mHAi;(42kj7rtn_RhS/Fo@j:n<B#4!\/ce@E^Z$.HN(Tg<UGmfbq#p%m4lDkk)@o[dFV+e>lh:2aV%;d1A*cj4&kAfB,927=0)J$Rb=!i;PFVos>f=Cc^rI=]]o.6o1n![%):R&_)m$&!;oEHj6`GC0JT-:;l50Ao/3C9k7MoA*Ss]VRJo'h-pW?-gsQT]$8b)MQpJDW9TYdO!MaEmZJlF$)dgp`JQ06OIlTB.]Geon`(JNm/l)4BYFb)V>Xc9D66bOr^5H0Y3G?aLQtI3?AM[_gOLt3'&/8<%7C_WT"0$Ff"0\ib6%sZN@9Qbd8jA^$.I0c-eWEIr7M'qU5t#s4M"3:Cs^O$KBr-b=*d>6C(7-0;T:iRcG<)[3XC/dqLSi/Ce`rE&b$$!OF<dYpL$Q>`np)k(i?KODBgJ*KU`LFQ'[=C9mN6Mi'VDChdg],'Fb;*@66D&V?p*mn.4o.[fN(5&7ZaOB9jeK9MLC:NJDDE2Bj2Q0_Fj<l8d,<Z'oND*gU!K(fHt=i+/WkClff62qG+ngJZ!8.ESE4"$D)hb;\T!j-ae[sV6M.D5<!!&FsO3m.m?-_o_Li><#!QKX#9FGnH&0Z@!^0[dQ*As*hi@T2okP8tILSl+>k4"`L43--\)U!p#5<WbEmaNe*oZEkct"\)S!*kQE2-(th?)R<;"`GhM_L?Q?n,d;o<:Ru0bkUaJNOrLjoZ]!X!8!>q*2R=?OO[eH$h(J>!/RtmXq:?mFkqWR'#cn!KFKR!Y6u^s*QVuhk^ob_Wil^Sm2;!IK)TVY3kUaV6]Kt[ZT2i7md`oj,ek&mc!taLZae3"8p*X&bbCra)5e=#X\W1fgK\_.+^"@P0L;bc?ZO<>_g5>b\c;`3K7QXTklJs-]Aih\HZ.Zg5k.D'@Riu2M6Q:6,\JT^W2&\l-L)?/(`%B*8pW4'#?0mWra:;IAGK:cI!!_B+mVoGgV$*,1&:TrYL>iARPc3\ePs!NO0]-)[IWl[uGEa-Ro<Gu3!8$<js$Z!aJT3Y'=(qHeI])tK-3WVcDB,(!G-=:[dD\h86>OgOf[m9X9C.l:Y5]O]T](qIn*cbEl@0B\Z.T3/+ed_PXOP1Ymo\1Z:oZsJXi]/=K=VU=W,kaP[2GNTh/4<P\s`ld\[GK9gCqCF=P,8O/<r#>Y*[i?L!h%?K1`XP8Z1\;LARGE_E@._T5c^R,rkI(-%Db1Kis]=#nu<),ooH;`[%mr*nXWODAt9:Af?#sgW`ZHM/604m/#W5:A:cD<L>tA%iSR]4Qrr7RC[:oko+ocV?kZu[SO^#o:EV9[/QGZVr#_E$_?gD^1]o;6gqs*le$>>9QabbAsos;?1W:A0?:gL6_[O\a2'\q]Ii$fqZi)LUNQ~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 864
>>
stream
Gau`Qd<:sD&:O:'k0^!L_Ci&DGtUo]et/BgM6p'm&0)9T=P[8irVJ2qC1?hb4BURXOe'%(kMCcdi7`fAfCTs=3X4b'"j.r/!VM9[nL`P7SQU_%c9a_qiX+4p(m)h>J"X)B#luD9@M&e&L.$\Ypjs,%+p#pMKcpmk+cO].'M-=$;#!9Y%Ck=Xq&\LRg!W%j30.D/YP<sC?:=RGSY`kZ/XVNjX/=IHSkiT0KE9$;d(T>UZNjiKL,p>J=hkQC0HD)L0G_N*%mJql$TUXu#4ViUo=D^QW6^07JVPmEDc(9p7n\s@,g4@6`"p.@<H*^okV47_f=/oWA[bfKG0kKl2BK*1")YaeFd[6bOtFO'pbbM'1M\-Q;nE,ML+aB]F7^je-l$i&$C9irD#+eA$XsG;gSb7XmX(U;AagpTp!ZOnc"Md0fr=r>M?@Ln:3I1-3ZUeg=+W:7`$HrGjq9JnTm,,'H&TR1KL%OsQl(LU/.+O"K+BY(E8$(=L1IJY)hK[eT$N%Xi0sb;o6%j`qo77%2=o+Z%:(JeQ<<Qd[2uLoE4:]G0j`66kGt_m$b1lC^i&rXh0q4USe@#:Pc;B5b&!O3_Ut6T^2t@.$6uNtG3[GfKEQu-l+1bJ]sm=<PR?jF$UuJ`FRNa?5"'`bA+DCecmDToLX*!DdpL?Am?AB/E_**YT2);mer`#L95QFqhg/3=WUck;YL-ga+Oa?cXD$W5`=?S>M:61ceiH]]a4id7G/%NNL5BU[S5pLtai-\GDi>JNdn8`acN/0UHc#a'I@!"PqN)IQQKHg1LnepB$Hj-S8MX(`Wq*-/1_t#sB`E.o55*IrE!rX;oGCJ/.=GlEB#Trb9WcC-/K?g$!S#kClM~>endstream
endobj
xref
0 26
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000556 00000 n
0000000639 00000 n
0000000716 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001849 00000 n
0000002055 00000 n
0000002261 00000 n
0000002331 00000 n
0000002616 00000 n
0000002723 00000 n
0000004747 00000 n
0000006696 00000 n
0000008593 00000 n
0000010315 00000 n
0000012153 00000 n
0000013621 00000 n
0000015613 00000 n
trailer
<<
/ID
[<44f9cee1fc8d03a58752233f94569497><44f9cee1fc8d03a58752233f94569497>]
% ReportLab generated PDF document -- digest (opensource)
/Info 16 0 R
/Root 15 0 R
/Size 26
>>
startxref
16568
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,102 @@
# Les 8 — Huiswerk
## QuickPoll polish + bonus features
**Deadline:** Voor Les 9
**Inleveren:** GitHub repo via Teams
---
## Opdracht 1 — Deploy naar Vercel
Push je app naar GitHub (als nog niet), dan:
1. vercel.com → Add New Project → import jouw repo
2. Add env vars: `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`
3. Deploy
Test op productie URL — moet werken.
Noteer in `DEPLOY.md`: productie URL.
---
## Opdracht 2 — Voeg validatie toe
Server actions valideren nu te min. Voeg toe:
- Min 3, max 100 karakters voor poll-titel
- Min 2, max 10 opties
- Toon validation errors **inline** (geen throw)
- Form blijft ingevuld bij error
Hint: return error-object uit server action, gebruik `useActionState` in form.
---
## Opdracht 3 — Optimistic UI
Voeg `useOptimistic` toe aan VoteForm voor instant vote-feedback:
```tsx
const [optimisticOptions, addOptimisticVote] = useOptimistic(
poll.options,
(state, optionId) => state.map(o =>
o.id === optionId ? { ...o, votes: o.votes + 1 } : o
)
);
```
Bij click: roep `addOptimisticVote(optionId)` aan voor de server call.
---
## Opdracht 4 — TypeScript types
Genereer types vanuit Supabase (uit Les 7 bonus):
```bash
pnpm dlx supabase gen types typescript --linked > types/database.ts
```
Update `lib/supabase.ts`:
```typescript
import type { Database } from "@/types/database";
export const supabase = createClient<Database>(...);
```
Refactor één query om de gegenereerde types te gebruiken (autocomplete moet werken).
---
## Opdracht 5 — Reflectie (250 woorden)
In `REFLECTIE.md`:
- Wat voelt natuurlijk aan Server Actions + Supabase combo?
- Welke RPC functions zou je nog meer willen maken?
- Wat verbaast je over Supabase t.o.v. eerdere database-ervaringen?
- Wat is je grootste vraag voor Les 9 (Auth)?
---
## Bonus
- **Realtime updates** — `supabase.channel(...).on("postgres_changes", ...)` voor live vote-updates
- **Delete polls** — admin-page met delete button
- **Public link sharing** — kopieer-URL knop voor polls
---
## Inleveren
GitHub repo URL + Vercel productie URL via Teams. Werkende app + REFLECTIE.md + DEPLOY.md.
---
## Tips
- **Validation** is meestal het vervelendste — werk er gestaag aan
- **Optimistic UI** voelt magisch maar is lastig — test edge cases
- **Tijd:** ~2-3 uur
Volgende les: Supabase Auth. We laten users inloggen + RLS per user.

View File

@@ -0,0 +1,124 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/PageMode /UseNone /Pages 11 0 R /Type /Catalog
>>
endobj
10 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
11 0 obj
<<
/Count 3 /Kids [ 6 0 R 7 0 R 8 0 R ] /Type /Pages
>>
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1785
>>
stream
GauHLD,]1K&H;*)YohF9<@.I3DeXcT3=aIMR-RFX(r[*'i)ls1_qi)Bot-Dq894>n-Gd!pqs:*68*_k%pgV3TYQ4GRL<h4U(l.W%0T0$e5)81'n^AW9iN?_o0g0:J*/JOqIuqm6(i4se55,q>e0U]%J`SWGH+jM'f=<MT+d$a<d9o4ELUs&\`+-793?.9Yic'p\/Rgf%^V7G!kN22\i`,+QB)+o+3.k3s2-*G0:hI<tN#+1X\@ahS;`0nUE3E4Df/f&1]nQjV/e$(a83Y-d/S4JR`Xad&QojLK[2_XUQb'4e:U;a'QH<WNAL-DH/:_joHp\6V'+V3b3@5uRDjs;rX8EkGY$2a/CR:hpM"&8/S3$J:%bZkTo(Ldg^h>>;1C:I+QEP/G*+HM'LW16BIQ=HKer0`$kB:B8cC,@!>,/4+^n:rX_TutGop(SIar0pXmODY:a%_M`@qM)sNd/Xbqo-iT1hjO-2g4U%l;?;OA*8:uX)Z^LjKUW[:$g+1D6;4:fmf#F2eE_m0or_n=bPPRa3pn:.Y!_?s7leG3-f@K@e$HX3k:.Pc!6I%i$(Q]?,+J:F.$K''o?.mnS7>*MSKQf0OH^'';)TN!*]>eKu)e?71h(N'W1Wo)ba8%V/Rf9c4ZPZ=WD,+c*[\4UH>0KC>5H,KV&H#DV$un-s?W5NI]RF.@=GP"Cin<X0R:JPt-q"=W&YfE,[$C%p)#?;>HSHH0F#:AuiA\-p_hiL^6aT(=.XD<LibD_mH(`L%$rmdO]f.MJ^VA7F@m%)rUIc?U]#RcQko!RgA]p+>3o5/;:-@.Ae;S0[01fL:_A>DO[`8D*5'cXQR!mD'rFt1L]l3r;Jbf4r9LQ_#b,d^FX[F*OtAhL_<Q(r:r[@AS<Zd*D0^Y,fM;A@p'GunhGY6V%P3PW:&1?#%qq/]:?reF4K`Q50]rQ9hPXcTn'B^MuGhV@pkh:GS9_UB":YmiRM7F-%;a`UnV;UjX+=eB8O]*Hrf\-O^(B@+,GVAi'o&EN8=bTg"$M%S[*'rTc?6e&BeYL[:3u.&5`e>RR8&e4o'$s1D0AZHJ@<OZiaoU+iL.ogl9XH$^6]ZL_d+=Ut4!i9Ka-F5m"HmPL*R*0]BIHQA!d/(sZ`4+eN2-W!=4(h$o$qV+NR,W9h&ckh[`Zro-(sjBE0uHg7eUp/7IEAB=NPSj\__el5aofj5Zu281):IlTajH@'ct)L`Q1*T(1Q5@6)4KC)\L0.nnqs#C#J$=WD?Qam9,qrM*4$/;Mpl14f7?n>4cC'i'Oc*BTi&s2rfRMJM1a;ZlPpW)!^=:qAM1ZUl:.2*!INBKHd*h?[;+H+p!3ZP:hh?K[-Vk\#h]fL(0Vj[$l3mUGSDj6c%!CUAQ?:iL9^($HVedA">2YK`i-t"0LU73Z=kJnpf)/'>70IA(oKX-<UF6[nPllbo3deRpk9pk8?K#Hi3nhF]OWrBrL1Cmk:rl/pbO!50s=scdDhM0r%7.a'+qN[8tlZD!u50?%#r&dSX7u8OQC"V;_H(?Scf1/g;g/0`I9#XM!iP.->'^j\$`u)gAPI]'m:'Pcrje2&UofW'>)AE,q&UWp3M+SO;NP^H4N=n:=:K]N,C%tL;ZMd)+Ya'!>I)jJk%:agBXU76u=$,qD9oIjU$T4_c2*-8uS0hD6\=rV!.Yl!-.kUDUQ=1!T@B<[H4gIe>?gdctSlr._n8;EJQ<Jcp[C$9=*<pJ2[KT^oGG+:nHQh?$d+Dg[?kEPaKSWM([4G4ROL[&?[>6\HB_gmfb1T_s)a??5nLl37kBd~>endstream
endobj
13 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1974
>>
stream
Gb!#\lVlRs&H@3/`=AN#'SIc:QCX898UuO5V@[c>VUOjQI'u#Yfp:[=-#':WHWPY034MUB,TI>1^"TrE]7PWc+'SX:@t5@/fK5fm),)Z5>/Z$7#ol]0+%Cq:9NW9jknp;@J@MKUJo!VCJD8"cR7k@N"EB(uQ:$Mh\.14J-Nk0G8[s"%U-OBK#fd#+:i8AgNVt3/)+2piiO8-&\\GDqdH8!XDQH2]lYdJl*40^cPA4:>TNlH'`%_2Xo\D77;KJ9'QV'^9[`G7o=hp7V!RHhc5V?WD;OMC>j9d5p["<j*bGN2nL:Al.<>jp@A[\P6S9a][nUM&o]Z(Mk,&Gi_ATLHP@CR0N&YTDOD2_9b[uReTcNjVF(e;.Fn]2?;Nbq:E7[@QJNBO76J5$Hq&4;?(o(\u?k#0'ai-$EHV3s`=Nj,2lmdc+3Z_4(dW.#><-kVIqG]!)iN*_i814!FS>]dD4qg38X7t5V@WX;=Il?r%@U%53k%H92j1!#_T>Xk+j[S&0pEEJJ[?R9suJ#K^[j"N,QrtM)e[KBhIS9ED+WfV_I5*WVEM:;"^V9pdPJoJmiBr)(X<Dc.`,Q@,%(+6O>S7^f'S/5KTGG*f?*)*hMs!^o8&prkbXDiTs6rV-sYuW-#,%1KKqtlp\GR"0J+[k_5'"uO3,>7\05G=Ts!S;Or?s#)YOLA2.hp($We_JX@-hj2EoUn>l+,9=pX9t1X.u:2jbKr+3=S&*.@Jh=^!^@%j`FHuR9VG@]bGF>AhoI[0[#9(Eg^5*Tk9UrhPsHN9Qe>8Ki-UjGCG+E1">adP6RQb_i/Z>BgkiGj!`0&?mg.mX!^p(C@XOUKRAUYAWmPMN3L+O\/5-F"n1h]8>`MTICV#>Y')t-\FXG,Cb!]hS@oFh/V3dET!H6-1RsDQ_U=RL$Hm<$rOtrYI5@25Ol4B0MmgkX0)aYhD!(O4r[Sk?N2OZKQRKGZ/2>jk/$n^dr+`M]"dNjeqLd",]VIhHE->D$!\n#u.UG,il!1qck]tc-JG#IDqSR$+MD:UU/\o1MH,]B4*.%K\4#.G?VcKH1CADq3!p$M3S99r.SK6')T.*Es%g4FJoAVl/@\"KS]o'-urO`_A5(M<<N*k:4422<k\<E>k+p7-c4OKcc1A1E>9?hUX(f[c8Z4,Nl7M6>TZ=4-p'B+iDOAJE:_ppnrMF?7Er[motoR,-<8`^"c$00I"bFtkj7eNX@f-tW)id+:OT[X!Li\7gnnVTuJ&>i82DNkM_p^5CB1iepp\!q_9tPNhcZ/]XSF8TU*!CcNin;p4[F[2`M^*-=?,IM$>)BAA#ufJNbJq#,B*S.Eit&2]E2)h;pWG]\!$EcQOuia@2AkcPCh\-$f2l?.FR\pUjPQIP>H5gQp/"P2i>405,)'k4#%-4\Ig3cq$1UB5l4'faO\W.;f:atemlX$no,]W$[UkC,:piZ-TnD_/qsHFD6GCiRb<\_ZT*b\\4L,b1L?KSqU">l7fkE$ZZ)F,9MUnhH(I4G0noa6bL'RIP7ap:<0.ZHQpPLWG98.\59GT`r8HT0S)sGf=QoG8DdFbJIe=O8BIOrDu'&k1]3JVGr[&O=i?8S(D_oSjH_9W97`33ShF6kj)4k`<7L:Ep].Mb"UYHHn2_@cr9N684C'N:q6m14^]&[,C<--Fb[]WD?KTRks]hmP>G:iiJkCODED37IlAePQX5irW+l,s-.DBbWq'Vjao!gjE\?sc*N7iO&7(Pn'J<t_hH4-GGDDL^38h$P@GVpS"'H'LqHjpe@d4,:R-^^,*(LR15_=="X=O^Dr(tJ=U$$(M/.-gPQQ+"!/$-?G!"5'H#`lT9cVIr2W3i^_5%8:.#3?&o/M:'*#,PA@n?%4\S4!uU?EVRLVq,E_X"D'RVB6SWar+_F<M6,Y'>0Ns0-a"D'pR8DVod-/K8K6[SA>#:I`6Ta92f@Cc=XRK3'98_r>hN^(iT*7aJ-PQ!t(h'!$bB;g]~>endstream
endobj
14 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 665
>>
stream
GauI3cYo:,*6%CB/)E#H1tOY*2SF7eW^a#>Ff!cf(GBb7*J"Wgm^BmD"qm@HbG=Q&YX$)!HdA=f%0I%ul^kF/n1hoH"U!dU+2A!k8?_MC*W6lg0"DTL8>KsaE0)>[0@\[R6nF0gGf$,Q,$G9Yc%sr-"qU<i@LBN^_o[^c-qT[>+I^8IbCfU&OdlYl6"2:,rV>c,\rE$f\P<rMp+;)S&T#.Z5rB:.Z<5(:QPb4_Ska6-A_,*A<E7u&f64Ul\E@,UI"G/faVNFLf'e\a,!BWL[R>g[6n53[75(.crO2CF?KJ60o$SZ7;Rd#=2\M:WF"&_uNi<<Js%Ra]T0fuHV\]A3LOjY,)Q3DRmJ(N[%O@ha>E6)Vme+2te#r%b./IPi7\jB-;@F^qbs(2O;sJ&;Lln&Zbm(@=_-Z7mQLK$t1Q86/aQLS+<S:Nf/81!t@;2k8VSL&p4P;dFfTpUAD-sQNG.'lk%Peo\.?EU"S!q&3N/cF>@9g!`^<E.oB=OENn9CsLiNWgG1`V,:2KaqV0O]@["7ZBplo_VA)/#$!X8q8i=o9(n1k2$f*?b-p5=B1RqS;c9c[@dT;XC"+_;_X+A@i5><^dc^S4-lB)/bq/q%:-r]^ZA]n):VC[RB.lm?!Z'Q%dV1O)J+/#f!+:KBu%GkS]*Q;ag~>endstream
endobj
xref
0 15
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000418 00000 n
0000000523 00000 n
0000000728 00000 n
0000000933 00000 n
0000001138 00000 n
0000001207 00000 n
0000001493 00000 n
0000001565 00000 n
0000003442 00000 n
0000005508 00000 n
trailer
<<
/ID
[<0cbc8e901f9a8fb8899571460bcbc4ea><0cbc8e901f9a8fb8899571460bcbc4ea>]
% ReportLab generated PDF document -- digest (opensource)
/Info 10 0 R
/Root 9 0 R
/Size 15
>>
startxref
6264
%%EOF

View File

@@ -0,0 +1,240 @@
# Les 8 — Lesopdracht
## CRUD + voting werkend met Supabase
**Duur:** ~120 minuten klassikaal
---
## Doel
Aan het einde: QuickPoll volledig werkend tegen Supabase. Polls aanmaken via /create, stemmen werkt persistent, alles in database.
---
## Stap 1 — /create pagina
`app/create/page.tsx`:
```tsx
import { createPoll } from "./actions";
export default function CreatePage() {
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">Nieuwe poll</h1>
<form action={createPoll} className="space-y-4">
<input
name="title"
required
placeholder="Vraag"
className="w-full border p-2 rounded"
/>
<textarea
name="options"
required
placeholder="Opties, één per regel"
rows={4}
className="w-full border p-2 rounded"
/>
<button className="bg-blue-600 text-white px-4 py-2 rounded">
Aanmaken
</button>
</form>
</main>
);
}
```
---
## Stap 2 — Create action
`app/create/actions.ts`:
```typescript
"use server";
import { supabase } from "@/lib/supabase";
import { redirect } from "next/navigation";
import { revalidatePath } from "next/cache";
export async function createPoll(formData: FormData) {
const title = formData.get("title") as string;
const optionsText = formData.get("options") as string;
const options = optionsText.split("\n").map(t => t.trim()).filter(Boolean);
if (!title || options.length < 2) {
throw new Error("Vul titel + min 2 opties in");
}
// Insert poll
const { data: poll, error: pollErr } = await supabase
.from("polls")
.insert({ title })
.select()
.single();
if (pollErr) throw new Error(pollErr.message);
// Insert opties
const { error: optErr } = await supabase
.from("options")
.insert(options.map(text => ({ poll_id: poll.id, text })));
if (optErr) throw new Error(optErr.message);
revalidatePath("/");
redirect(`/poll/${poll.id}`);
}
```
---
## Stap 3 — RPC function voor voting
In Supabase SQL Editor:
```sql
create or replace function increment_vote(option_id_input bigint)
returns void as $$
update options
set votes = votes + 1
where id = option_id_input;
$$ language sql;
```
Test:
```sql
select increment_vote(1);
select * from options where id = 1;
-- votes moet +1 zijn
```
---
## Stap 4 — Vote action + VoteForm
`app/poll/[id]/actions.ts`:
```typescript
"use server";
import { supabase } from "@/lib/supabase";
import { revalidatePath } from "next/cache";
export async function vote(pollId: number, optionId: number) {
const { error } = await supabase.rpc("increment_vote", {
option_id_input: optionId,
});
if (error) throw new Error(error.message);
revalidatePath(`/poll/${pollId}`);
}
```
`components/VoteForm.tsx`:
```tsx
"use client";
import { vote } from "@/app/poll/[id]/actions";
import { useFormStatus } from "react-dom";
function VoteButton({ option, pollId }) {
const { pending } = useFormStatus();
return (
<form action={vote.bind(null, pollId, option.id)}>
<button
disabled={pending}
className="w-full text-left p-3 border rounded hover:bg-gray-50 disabled:opacity-50 flex justify-between"
>
<span>{option.text}</span>
<span className="text-gray-500">{option.votes}</span>
</button>
</form>
);
}
export function VoteForm({ poll }) {
return (
<div className="space-y-2">
{poll.options.map(o => (
<VoteButton key={o.id} option={o} pollId={poll.id} />
))}
</div>
);
}
```
---
## Stap 5 — Detail-pagina updaten
```tsx
// app/poll/[id]/page.tsx
import { supabase } from "@/lib/supabase";
import { notFound } from "next/navigation";
import { VoteForm } from "@/components/VoteForm";
export default async function PollPage({
params,
}: { params: Promise<{ id: string }> }) {
const { id } = await params;
const { data: poll } = await supabase
.from("polls")
.select("*, options(*)")
.eq("id", Number(id))
.single();
if (!poll) notFound();
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">{poll.title}</h1>
<VoteForm poll={poll} />
</main>
);
}
```
---
## Stap 6 — Test
1. Open `/create` → maak een nieuwe poll
2. Wordt geredirect naar `/poll/[nieuw-id]`
3. Klik op een optie → vote-count gaat omhoog
4. Refresh → vote blijft (persistent!)
5. Open Supabase Table Editor → zie de vote in DB
---
## Eisen
- [ ] Polls aanmaken werkt via /create
- [ ] Stemmen werkt en persistent
- [ ] Server actions met Supabase
- [ ] RPC function `increment_vote` bestaat
- [ ] Geen errors in console
- [ ] Vote-count update direct na klik (revalidatePath werkt)
---
## Bonus
- **Optimistic UI** — `useOptimistic` voor instant vote-feedback
- **Empty state** — als geen polls: mooie CTA naar /create
- **Disable vote per session** — sla in localStorage op wie heeft gestemd
- **Total votes** — toon onderaan totaal aantal stemmen
---
## Veelvoorkomende problemen
| Probleem | Oplossing |
|----------|-----------|
| "function increment_vote does not exist" | RPC nog niet aangemaakt — Stap 3 |
| Vote-count update niet | `revalidatePath` ontbreekt of verkeerde path |
| Form submit doet niets | `"use server"` mist in actions.ts |
| Foreign key error op options | Poll moet eerst inserten, dan opties |
---
## Klaar?
Volgende les: Supabase Auth — gebruikers laten inloggen.

View File

@@ -2,7 +2,7 @@
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource) %<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj 1 0 obj
<< <<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R /F5 9 0 R /F6 19 0 R /F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 9 0 R
>> >>
endobj endobj
2 0 obj 2 0 obj
@@ -17,7 +17,12 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -25,19 +30,19 @@ endobj
/Type /Page /Type /Page
>> >>
endobj endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj 6 0 obj
<< <<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font /Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
7 0 obj 7 0 obj
<< <<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -47,7 +52,7 @@ endobj
endobj endobj
8 0 obj 8 0 obj
<< <<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -57,12 +62,12 @@ endobj
endobj endobj
9 0 obj 9 0 obj
<< <<
/BaseFont /Courier-Bold /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font /BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
10 0 obj 10 0 obj
<< <<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -72,7 +77,7 @@ endobj
endobj endobj
11 0 obj 11 0 obj
<< <<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -82,265 +87,95 @@ endobj
endobj endobj
12 0 obj 12 0 obj
<< <<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /PageMode /UseNone /Pages 14 0 R /Type /Catalog
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
13 0 obj 13 0 obj
<< <<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
14 0 obj 14 0 obj
<< <<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Count 6 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 10 0 R 11 0 R ] /Type /Pages
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
15 0 obj 15 0 obj
<< <<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1129
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gatm:9lo&I&A@[:lqpJ50Kt;rgsW]M1QuP5=NRNYPXZp!r/aLmaf3%g$^(Q?fs3J1/WDjq(2r)7]j6Ep`>@i)ZP)2_-!X\0?lYJ>JYaWGjTkR'RG9*A/$;eW6l7C)#@^-sK4^BJ+;Ib>>6]gs@WVsV@Dj!uJE&YlR>/`!f2i7\U(u3*"_*iu7Qi^aLuKCQVaN"GO3`mb9V?$T)VH:YiJh4^_+%96<MY:'W?j)g=T%^PQhTur^%-$KY3Q-QGE'r"*W3meL:?X1dbjqrhYQ@^=T/EG=!>Bg1mO:rOm5<\&&,0T[uH;2+5JEM*3^=%2-+^XUA.8R#tD:e!iu?3M%bU+as>MXW%3Q'+"ZAMKq2A[PnACi<feWtJMBHhPUr>qeeA^b=bpaMfc_glM^qpcgFeXD=^7X6)P*%&#t5a9IZEsY^T`Tu9@aDuZ%O"4"`!46%aj%L?o@pJm9Cd0ct9GOCI/JqB%"ul(_r7RQ(U9(7."uJ:2"`Ap;>SdQm@hL_^8e@iK@@1NdXi[fAQUc/'O\RH_@Y=fH2pH@S\d3\,_L&.FiT[?gOcK\2,KS2F'JC=?dV?PK9%lc2n4RIeW*u-2\2GFdH/[pu\'*YAU'+*Sg"imVg_RB,^tnFVlR[+S1-9geuN:E0nq#HX@.k7=3$:cE[=n$Gm3A:sADmS/u@F+<_G@"R1^#ieuR(3?UItA^O"6qmkAG&:97tW6-nt^fA(KDI&U\<I6J=>(aO[_Rj+&mb6i(S-shBikuCV5lP?VYDX-Aa@"q4;=Gb1TcNLH%XX\^gKh:;ORDrnD02nEG]=Vfkp+eT!NCkU%kkmt^Z"1]^AAA(O=E=K4q8XD3<=qG@Lm_XLr_m9<6eW<?u`a32+'*r=tJT=L'B'tC=i7g2MGr$I,eIOZKMr<`eh]>mA0SXWu1?e:Q#;q.N5%rs7u.q?.Su`8ngm.17mu&5^pr)Y(AM@/YAg0hSAe:cScm2U;4TG'`L"_7U,''S^B:t6<"?<<MdT]\Bc1#A;tf(Igp8Xb7YW/ff3dafJIH*>?1D9*29p(=+I&R!'EUt2gCHUFgCdEiY_0[`P:Zm(:X0A)0Nd(s69,;;5*65a(`SO`uOERgG.Rhk4>Ba^E<@IGWJ+\+41jC+o~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1269
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gatm:ac>+F&A@Zc$9Dm[Yh=@^P8OJJ15Gs@ll`T0\kl:?8[t04/K'3:pCp2UUu_&"!MYQOX6[IN<Q1tI5k2sbcXd1Io*g4t#)pH9%87B@ZZkonbkp`=Y.9Z%Lp0j3*(VLC#8A+1"f7%cH-!d!6`cCm/L/i$(-("c_[I4heuq1?`+Wne"CdeI<e"U4Luo\V,uIj$fCgS?[[%^BI8YhUgD>J#%X'm4LFORC9Gn#?"Ju^u5J;d.Z]3]m[ojKaa0K[-D$b:/%D6ro^Uc'Nc>m"A_!E_A]rDACTMeX]KJ]$gn(^+M=%1U>I>Ben1]fi@q#e<T7a_,Z9i=HZ;@L8-&Oop%d7)m!F`m'q%t.'[_Y"HQ:E%]n[p+bRBk_G:06K"rKM$!6/,$Vgl#gc.186$`1`ie+@MD<1$ne>j2g#J='nkk%`#^/Cg;2[R#GXH6d\FLC(k6X2:\Oa$qQEP1lSZ4P5MM8)pB&2YB.:*`X;D'l,U$f*K4#jb>3[GH]-P^[&ftIa\>XKkZ8dRd=;P*A',!^VEgNX"a\U6\6&17&Y7q0R&\l)=LPfakg0AX<L3Mb1;&,G%Y0r%3IVE@])`OD7DrC.s@W'S_dPco3G=PdN.En\77KrrF\N3joga:E$Kk27kpCC-\mNtMIoFHDVK&l,c<LH/@gWAan</'4_ks,i(bD)[d4-i&p`j!b:dU-N>_Cp9sH2Xsge\OP3Y.kFSClCkf63U:TU30K^d)PA=Yn,pEOFEfl9BUf,#tG8S-M=de7tt<<=655Ya5#`T>o3X=mGW8#lm<qWN0DG;eW7RqY',M'NS%-$,Rrk#E?=/6\*.R.geBsI;7%4g^oSghlcg0i^lJ_M?/[rPa9i'h`5'N[<U%Z.`fQ0,.^YNLK997i/XmAu)2pV?,)l)KXl<GGbdC*tG[u)H@uilG/0pNeHfO";KQ0XOUL+GOH^*L_5JUMP<khSKQ@nrO(QV-tL/:7POd7$]GE;</`0`$k[(;Rs5=@LG=J,V/Pd/VlV@d'$Gu9i<G#=P@)h/H$cI\:I;b[bV?&=9qkY'"3%Q'48Brq?_>(1Vl2c6#3J%P>a@qD++`@f+6XkF@rCkGn.4"OZ'?+WSM";Z:!H#ImGe.m>3Na\3Va/5'Nr+;a]SZh_[Vm2'^-PGcj3$I;"o)&]^]?V@%S/V]*Yjp?3_**g-c#C^ma`I;k)<JZgOfIf0Vdb.Lnp)*4T_1&m\=+CK%7<9<0Np7FIX2_JQpu?B[,'e*#`s)aE&Q`r@kdlO8d'D=!)OAte,~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1784
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gb!#[gN)%,&:N_CCd!6/F+F<&!5YPS[(1GHR7s),C7[8G0G5om6]h]^fkDK,HPZg'Z9=r<LU<46,XLAT_.%V.^jtF2ec1Ob_"/F;Nu9V]ZVt7`#ai;[=0pgX5e,g9O?c-,_jCO_6hc.P($$JP;)++LBGqI'#nWO;X^_e[a$gSuTJUWa+CIGY73aC7BI9!F2o^V@EK6n"O\3UEa#Eq'UDFToYX=lYLLAbe23[<%6U<,aObDC+-GTNYrWI[%<i0&j'h&=Vg<qOt/Bg,8i0P+%C!KFRCeT*WZd1=Pi!^#ZKqq+k,2*3KD5q'O/<^S-9sRC_"Mt2\>P)B_U3K=*L.$\<6gk85;&1[(;0V]9FtO-KVh@]ZO's&b..Zfng9NtWl3?rVh&7\."c\6g]'Zg0]!bGUKIJ?bW4"9i,`It>(-IOChl1,4[3/HKO9LS2=q=rg*fTg$('3gEAGFMkD8u=Vl#.BS=]!/%qt_V2*et<Y0h[@@U11??0o7pN$:5I>Wf_m;Z\*++TJGW>.1`$*^=_7$.<.'ZX2h(&9i5*(KPJ+j4s^JT"fGq:L4c+r=o)jd2NNHIORPf@?-q"N;[c4OJ`c*qS`\%>\k6dBjJ/ZIo.jn/;9tFW>pe.88aP+_p&_"4S1KST:nf;KV\c5FPd*/b^=L;flE>R9VqZUXkej,ON^](Ao>t]DY$WM6q%8XV]D3%DmO,k]8X'X3g&Wa^]WtpDRi-GX/Ke164.dMBbm0&m<)D7'buZ-rj>nQKco]n!`pp3Dkc1*fR[<cS&Rf\d/oNOt"pX3\[E2<ZANnGf!a-n?q#j8O"&%"hH9R`=@In3%=]<Tnc`rq,,bH0<&Wh5R7f-8M$Vb<U>*eD%bU5W"2h1_UOsHI;<u=[s!PcOhKo3C@#6_8DAT7a]\U[am=Wm`spY3ooUrhO<XOA/6D9#V;]'5:#MIV(mZmC)Wd[P7)b\g3(8r94GBHX3O36AF3=P.$Rm`/sD'8a\TB9=iU=U2PXrWnIP[=:FH?qNV:j<@04=&qdA7#K&fMp@s5V)3MG!P3e$)6QB@"80R\H>`>rAWohiUC`SuNK+2O.[+<&Ea^s`;IGd@Cgaom]ZH*O3O6kfCD'-0%-+X5+bnp7Qtfri[Ag0:A]E[HD@dD>pBLntdViLE"2i1FIM947o"i2NU!\Mq,5dpD^^WAiW$?1J6XQM[""5_h6>M$+*njlneYfR%cbP6koBh<TksLi6b=>CD]lHPUeBnmfMH]`_f$VhB[Uo)Lm_"DY[tl`d,C:/kqN1<Wf^J6ikdfpuC(=9b-Vlf0^NIjM+/dC3e&0AK2-1kiZ.c72\f+S..$*[5</nA2TXsHn=1]!1T_NQYVoL4#COs`Gofm_7P7<1Of)G4%7DG+[(Ia11(3=\Tn?%YZ<]c8Us/o93ScUB'lAm&FKp*M5[:8IX>?#gie7,kF>@k=<1D-\f?='E%Q*o<baQqK4TT4>DNS;Brl54Up:0r,TS\4AoBFdRZ>MiRimh??eoDh7S1n-%!Qp,K;*+,jCDEhP$R'sq@/btLjS#qB?.3>)I=NT8G+f2Hu&d?d1OY31=4$:/sM87?kDO*.]?g>W6p.jGBN-.-gS9FMULVW=X2D38`*c@*`/,hS"gnSC"*^Z1RX"BW-W4le<`[V73?X7-r3uqt2Z?JjRfH7R$#A77'^>\=9nmV)\'Y#,I?1O[?p745K?&M@im\*:fY(cRW[(#_AcaLa$oLeI>U9XT4Bar2eIp-[7."cbUpP@2:O.6&L(RQrg)>p%ScH!fOa_9b1rC.%.5D6e!4o~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1725
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
stream
Gau`S?#SIU'Rf_Z\1mX7F>6Kf,UI#AYn_,[!_(^L?=2igPpP/3-;1?a-OgLapK^Cs/>ZL:%E2ouEHFX@H[%c8Xr1&`ZheUM"aI;&fbFV/@Bg"`Lk*G`GdSB:)A0-^.jP\HUQ3ZOpl9VcYo0A\'i@0h)0jXWSh!'NN-Lr_!QTVkb?QGPXIkIh&6D`\'0nZ,Q)D@Kmh!Gu\e[[`jkntQo(*8QT;\%rdVM)QL+?AQW".>iKJMda=DVF:p8@YgiQ#c0bO@R9')8jaFEh*-P&hFgGRZ>!ND?ca(MBuI!uB4AK-$tQPXn<S6dRd'bjq\<3hU]5-;FXS4cl9jMFSB">A>cl`04/.oH+TaNrfJrSBe8k:3@h,SYjL^<KMiHr4gQ-%7++8=UO';='&P0*O'gV%i%5k"/j!qA[SSlPlls`f7^W*@KVf:cY%Nh,dZCfkkA6?]d-T\]<1D!hD;^Ho8js@laWPF5o=1I_U@\_S*66f).BWZ0%'+)FsL>%.D*lkN.a^G`fmC&9gu"RDVsFof7]pE`fQCfW2cOPRj?4si#fe';U(qr6"`K^dmZ$$`:^e"D0c8Y-XYhgT#`1%d;a$tT2'J(2]Q+al5hbMVIWApr484Dn_.mF-.OA,B3\kGn[?L9\sCCK;F@FA)dSE;HajBnIG?']X6Rip`7mC).bI,!bC`fF+9u!bfbVTbc]WN14.<:EbU(c8rXcH`2aJ'H6)EHBeTD+flHe!3`4iRq;@Kmp2:oTMjZ=;RhePu_5M+25nh(A[]h=i<]"qu^:/%4nN\2I1D-+;.LFbAC:R:)[llRU.`T0R@h/-BtK\.g;TXlPW!m`f\i&6Cl/t/TW_rYDKVdZ:.3itR_*oh=2(Zc;R4HHsXTI'FXN]tBq^8ikIk3%d-8XC:&X9CX9cR])5ZK^:ZICt<rUco_eVReCc>=eE=]W*R.%C4Mq)/QYpfl;i6E:,l\8rh/2*Zcna@0%r-*uh3UB&@.inBpOpphfL12IVr2FTV8tKf%#Xlr-Su3BKhlb38#<Tq`%&i&gB,0;FPLl9aj\W$AQ8<%"CMQ<:hroA<]0LisT*LisP[KVBhYs075dB+W+[lm/95&n;,_ZK*]U:aOUfm7_HmjR^1mWtcLb0e%N/6q1dcS8_N-G%Kj2cj2[lZE4S#q\Wu185&8ofV,$RrD#:G-,8)4<L,6bqc7jbU$4`c-T3:2/s_LTnt'1M3fW-@;_."gE6F*GUJ^=BmPl[a[4>.>.Ea's&aD('.I-"5IC@&EHuDnQ<cK$0-g<6TN[HqQ+\3S)cOS8Q/f[<?8d"bPE`GWTZAi?;F"2P6!2?t3<f)k!q_h=W$OGdgIld0.PFsJa#$X54hbMdJ.]DjI4&,@YJpck!.Ou]K5`tH^84RWiiTtNgg.XFoE&X&hj)C.B5o<[:ZZ)S%#jR<h#tr4(k7NPk2P>J$k!AikhZhq65$ZBJRg%#9U`0@>@/WXG+_XYBa.405s72"qPc/0)TBB@@B\Q;(;8h6'_onGs6JJ[BQj7#9O26'R.@^=dp9Z"03*m$s_R-M/#LbM*&V\'6p>d"'2gSp-UA1UX>>/A%Vfu''[Y4:2nHtp1-qI8G-.rLuEg"9:\Wt[X!NW>XPA7t,qJO$n:d>MmQJg;eQ'ZdVe_HWs-kGJro3.`Z,X$S:C'tM=As9LY"SQsC/EYm.hh2A-RtheVeh-YH5HSMge,#oDJiK1\bqK!#DFVe@hBW<#^Aqs3.,b~>endstream
endobj endobj
19 0 obj 19 0 obj
<< <<
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font /Filter [ /ASCII85Decode /FlateDecode ] /Length 1891
>> >>
stream
GauHKD0+Gi%0#[%JbkRoX!s1*,UuH6>IS51Xk0GPf6sTE4'JL%20s6g3m!]2Iin<c3/JBJ\\u57VMGJm!tYG]R/!DpIm4!Z2$)`n!bF&g!9JmOj=S$9%)*5XF-t-f+I4]5NredPr"%6;+9pRDNlO6h_K:WR3H.9@&=rlVEir&@8/3]L#8E![R',@4"LT9/glT"$_\fE9`-*,=;nfP5jQ:a+WN8HCb;Y%3%U(mCTN[kQe95\r6nir]rpq*(,?_%j5=q"LrmIe::Gb`_F5`HEn=)I;@Breq*_a;aA3X/B!Tga]Cl>pW6/S[n=j9mu!$06o&505h+<Q]a)T?-MC#!`"iL_2$#W8UE+@XOf8TdeU!')@L`cVfd!I*@_hI\>ZE+.m\m8=T"LR?k=].9W4it%S9bI!+6N[UQh2*jnDePt1el'6T6".BrmC4Cm=8mEN#O3ImPCc2"jZSa&I+-!+^GjA$"eK::iMG20"A\a9M$bRZn9d6U-k_./)*i$p[-7n.s;$>)s5d"/-.LAK&9/-B\XQ37kSR("lo`i9%AiM;n*^m%SeSkiJH6m2Z;fDnu1l5W8ZOmBtUL##@e,sIG2p8mp)(58/=i^+<1KG=GLuhdDPWD@p?;R6B9fFX%S7m&0Uf#015J`,[MKNO\:OB?$C%G,RhQhuHaI$*KTIpQRk%Z'kTa$q`)uHjAa+!F`*+K]P^o6M]Z:?W\V"P+&,uY[mc[/&RPAo"2L!8'JE_qW6^bHH5AErXsK)#FX3Xt'p>ePfkkoTKL6%pF>T$>Ch5Dc_:h&qd0$]sO,d$:%@-E6;BgCnr:BJ-\TJ35hRJ9<pG+?I.`/JTH0aTF[H%<Jmm38Nm4[i$5MQabtB$C.e,@/i54X#s_AFL49gl\FJE)?oM1U:qjG0HWK6GO&q>dci0I:\T0TQlr!dFA9VCKpXI@]fpbA92*t0[V%)/H:/dc<Y-fi3dR+@Ko&VJ_g<g'/1aXu/FVGLV:Dk32U53'Wq8?3;;l\7a!7)^_&<dn,8nGXLGI'0a[j)^7e1#95*"b:?&[lK-a4MIiQLVe[S(X>BS22P-a\f3Z07/"70nesf&KmG,5uE&LG(<%IY\JUW3-Vi'AB4<gVg@%d8e\\U)`DdJTh8e%uu>Ygg[>g3](k$HDDD&qi0oB;Z2`Z5)YTOgVGU-$ZPIj[r/tshJCh*7s-B!<g[Y]Nc5[^L)j;g@\Z_&Y4,:C@SBauY8PsBhTS/Wn;_[uG[,Gem%@t<2H_iueab[E=M#Hp)hUf-dU5]81_Inu3C),`DShY]XeCDJmrSl2pF?tGJY)W9El5uf;^JiOQ>=$.]oQO0DTZd.@r(`?+t6;RTnYO'lZ6':l(,!8N:eT8Z$W_:4H-DWPB<s9WDYSaE8]7X9:=Y4Y8i?*T>ro,D=NuXMT=:24Dm#6rnIjo&]-cMi"S7R&]D>%WSNcr$u=AFa81k@8Z<kinB.uj64/&R;YWCG@1OUEUKXHC4*_YX0FNMO$bYGWn9U<&RDu5rfsUOeaiC1'@Gc]tLTs^@OAGQA5*<0J_<ZB>PB;##rkel.X-+iHc+gs'@J#<aj-pOp>T9lcGW347KeU\c2Z.4rH&XUugtt%=ZT9R[kSn3^,K+t%?2%)=/P9hO"mtO-.I:F"CN8OY5fu'LVjIVM.Qu=$(.dY4OP>s;VrK/rYgp.fLS(r2U;f(gdN7*ocIpLl3S3QMh)UalW>&l_J]o67\iIgcb0c4skXV/DFm[hZF6>_.s4Ue>2d:A8@tJ/pofm`$\M<<lE%8e,[B2re:IdaPCZc!'T(d)eVFd6<oeaE%-fMMl5%38mGhMoJ:)*"/?LtF7eDhC9jo`eKPc?MW#5PT8WDC[sHV9R9Z^Xd+(DkI\]8>iR(Y)%>-EiSWSSd!`KDttDD'B\~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Contents 37 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources << /Filter [ /ASCII85Decode /FlateDecode ] /Length 1232
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
21 0 obj
<<
/Contents 38 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 24 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
22 0 obj
<<
/PageMode /UseNone /Pages 24 0 R /Type /Catalog
>>
endobj
23 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260407143958+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260407143958+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
24 0 obj
<<
/Count 14 /Kids [ 4 0 R 7 0 R 8 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R
17 0 R 18 0 R 20 0 R 21 0 R ] /Type /Pages
>>
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 952
>> >>
stream stream
Gatm:9iKe#&A@sBCi?#<#YVI>WA?]aThlS0Rc;a'(LrB]`3C?'T``'D/(lXP#/c#QbAqd6]C5.9-59^4;Yq=b!5=2,GX?s:#k*:i`.RO\^4jk\Trk6=Lp*2_L%5KaJ\Z]Zj@'<q3esPaTpf%?FYF3j&s"d!U<2]RXN]b$gaC6E$6?td7R&Q0ces.)eZ8JZ-o/;@/:aKO\Bqh0dTM#!i=*Sa0](ZAPtqUA':_TcLPt>;A&m;kcN6lBiR6hF!E%W7?@_#n=;Z:K6"[AU7YG`WCp@7/(!$R[/rMKaUA2Ij&8Z^.Jq-bYo0<dP&5mW\Lk3-:q%S"U],3R3XG7qf80GSU_0)![=[)hY(Ie!&Gna7t[4\6/BVdd-gKTD@#U'I[q(N5W3eug?Xc/`Y.1M)@Z>DUeVI1o%D?0<N#G]&FRR<gA1i-i\<?7@o:_Zp98oR3M#`HP6kAuut^lPcp_k48T>U8%u7lBK;U(#J_C$7+=!D9^kB6Q3[l=bb1>$%\0OcCO%a*dD859?t\P27fU$<a(H#OXb0hbpIg.r)XWA=0dFV[q8lL/=Yl9qCM=\oK@NK/"f5O%UY.ck7Br4B2%7^T1s<D;=1E]%VAQD.jD@Z/8Qb#].kO,$s`/j>M0/\p7/=3n$*:K#>+H;6?ONVJ.+=%1TcoE-.,G:C:Cr)c.K&pCt#*liE7)N5Ecu9=W6(q-<)A#CAh8D!#M=l#]qkI,E#6n7Ea+4FtU8NT\'6/Ak5*@*>R;l+#'=3W8.9SiK1g!t'4T^J>joi1H3C2W_gX\FPIjY%R/X\?^j>oaQ/T0mL!B^q5SWH$oeO)8fuuA2,P&2cpLg1LN?/*-Oe4[h>Qe1W24()Q)9uX!pp`IC;7$ZYq62SYA_qfXL-r045$/P%pBCkud++ISi:hbG]2rZOIF>Dj+1g*UcR'_ZFsukPUOhm[f^=U":[0$TS.eIO$@u~>endstream GauHJ9lo&I&A@C2m.fXR)OLY!&F?7R-?8?.;_,-4;eA(P[%\G#":IOkoC';A84f*q.nOAi8[^)9^3t8'`=N)sL&UhJ!r-U6(KVc5*$u%!@huuC*P@f!rY[FCGT%sF+rNcd#F7gH#>@=]+V@CY4:=FZ.?eHSYmd%bR0696Bc<jV&/Hog+g=oKWJlDM0G.2&pd\"s:8)0`#a+NOGPn83QSHmm,F[pWJWWCR*GU3F`@M:Y1kA4%kC;=C?,IaFa*)X0FU9.l_:cMU:Rn>%Gn$tI!DD7Aq$AC?@Ih8=fE$tqJ0e'_4pHFjX`!8jD1KVU05:Z"#NS%IGX,!!P0"u*8U\/jptP+5pcJ[C%t'RphHpo4g?"1(m'$sBG!%F\G`V)FHi>Hfdmk*r8Oajr_GGuV=GMEBQn9lLh:q"0IacrD.U$'#i8_5+Z9?\4>,L`BW;h%kin!G2j[!Ya7GV-I>Iq'6Ee-3BWnHt,)'hW@q1S$CIA]n[WlBJk3gR`nR8hj+N`\ZDbHh'M.]j)3=-H:UPqm;51YDR7Mnju.';:K[SKb^!=u@nZk7sroTZ+>kF?Q]r>:QWU..p9![oOH5,No?GO=^-^$VPNJ(9@70RQR>j5GZ@g>?,u4g0kSpehuZ;N^g":Y,igoqU`9gdoTWnE-o@?;=MgU$<S"#`).O5TS_8>I(O3(,F]e/HnF(n@d1ILWJTZ*nng5FIYdI/`(U7&D)?"j8&`!k75$*7^P:OEZcU.I$-V+MMI?I&kEPP$\?Yr4>TQ+dlh:J<h[;Mt$bGLOl[8%F`G0XWnQ<"HNjF`@9iGfl[lWEOhd8n,nYfFJ%cqN3Wb7X/QC="l&gc',m2LASZ%Z@c^jg(,T:I+TTm[cm,+fk?!j/Nh*%RkOh1iVNWe"h#83i>aKKHXgApQoC@b&\:7XD-Ld5t]f&#q1Ndob:Ml8(LZL_O/KhuV(8dC@>qHcJZR*BKiDD(94#e#KWI#O=CW-V/?nB=&7b&fM+%#&Z$(WMdDI/NX.\>c-)'Z,g]_i`ABTBR/$^e;\Z9&Uk0CVKG8LL+(MZI;GWeZ2PX'1iOEImK0q:I7p3Y,8Nnn,AKkHc[(_'lBB_rnDX*R9AiJ#GLa.Sl)KEkj5VQp!_,t;r9/B_1X<ioHGY2%88n!IkLZ=PmG2-1%]aG?R[LcB2q*1o[tKfdbFL8,593CmSU\7de5T:&>ct"DI1,*q2611XWI^5Te2:O2F7Nadb[C&b15FJ:~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1229
>>
stream
Gau0BD0+\p&H9tYf\@ip;iKfsCbk63\`VU>BjM:tQRNqE(aTH(aX7IZ]:8`m8hpm0K>Y54?n;gpXe+?sSm<SFeJFWhS-#5ST_TW0EhIUaaKn"mFl9?&qcH2nbJ:B7aGCJ8r0E&2+B&*dA'51KQKNn^L:/$]?q%6tJ@MX/T4m>R?E0$)^bJ@CCBs,h'9W?16^Pks#5rk.;o0Y'&k4u19_Ju-Tf7PZ>E.`JI5g,)4`dOkCbuElV1A],CkWqHqRR0h.063Zj<QR4]+Sb,/-LCABu)gQ,u,(>"E\8o*o`^V`Z#'.GJN_U33#Bf_!ql(b=naJ69l0G;MGjX%)scDf/"=@YBZ3q-MW84&sV4B/"ACFgD)F=p+"'9d`$q5otrF?bD5t`'a8b2oO*)I0ed9oqWERH'rl,DZ6fjI^,>(S%Gi[gG9JfJ,83/^;AH>`!;r'7dbcTo)O%g#Qqjk(VHZl@I=7,F8Rt*r&!1Yt'O:VNa(#F=92gCUK!><E>OX-T$D^L_<rXkTb;CJbaGH8tENgCX*sVV>Y>`gBN6S?[9M&!r*".XZ$)s"D5<p`L^1M)qbp?H#6\bI+(f.sfBs8NQ\jb9,8pH;Y`KS_K*AD)oj!+VWF,eo#ImNW4`:dL/9#Pnj'k0C#$7`?5MQA@"r2lc"SGgtW>htoncJK)B2chB)-f),Fc%jU7=NW152k(IE]5K6P[S"PD0fSXg"Di7$EcH@Zq!IG:A$[75c5KXPWA18<<61Tcg0F;K&;:OYZIgcWW;f0:8/G#)V)sl-TrVAj:o0D(4QKV'b[cg"h<",NS6VUhE.L=("7GF71VG$7XjgD:lQrS%K%@Y9jVFkBMBYfo;H<rLT(BO>9'GcD03U-g,cV4"EJ*bGU_>fDUuR4`PR^DDY,Lgn@R74Dmn=&G&T.bJiQ]@sn`K%,2F]ag_75<3ROq@i_=9=BrVBE,7CpZ2WA5fGDHb[N*?Y4Kh7H;d+"TSI&!&1ScO'>?GH[Zdmo*7uBXkL_2j3'/,?9T(BJ)0*VWo_n@2$gKF1'38jqLHOWqC/)*l_<N&m(.pnm6*XTU*9>Hiu):_1KLfWRo!k*"t#EJmYsKNiG"\B'GD5UMV>"B-`h.X)=D"U"]$;_a5WD!L>fAH)<aeD7DD]s89K<q7':bbCGI%s!sm=j^_3(:6LCgZ-9a(q+b#K9[7,OqUoQ>,5)BVC]&gZ+OIgi_!R*"OqKnq;EQ7A%3*gr"!`SM-i~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 746
>>
stream
Gasal;,<]I&:VB$n^ZCsg31X@a$G]%@^J>K`9QmBR$\%Hh",F"?-orQs*GQB'0X$2Q7uinB(h^4k2UFJinZOt!f%(GIH06,P&'Q;"\;C.S;cl*]_;gt(<0\)0b%U3j"Ro]p=KT?a':_rZ36f,_-K+YVISDhrqqK#"e;nFC;Oh_'IfE<Q:l"3-r$gh+HSHF8lHOpB'6)%DH'Y0JgthE5Ut!H8u0<8_c]EC(WdZ=T"WkDYBJJ,aG%/r9;-ES6(@.!QZ]:>L]OIWHf'6C)NCg_YL?VmcL#q3MU6F::r/kcEr?iEp>TW$-?pB43-;&qJ5*)&Oi#/;I=l4M+r^aS:SA)MHelZe8`kKB11.<Q,C5:/9Tu\3QeJ=<(*]NFaAS^HdY5otI9G$!=g_J#:02XD\:a3nD-#h$1.Nf%WTq=gEd.<1<&[tu9;B^dh1\Zo,79%5>7A,uZ:<%6(NR*QMY(j3%*%=E5aj0@lfk[X@$tlWL2+*W)'&;B4npquLE!P#gBnJ\=RH+G4<Et+4VX).G[2Cl>Wh4RkH.o(J@f+Ur9ei=gYNsuDgIq#>uJ'CL8hSj2%[XMWtad\f^BJ7AuuGHAXC]fPP4El^n7;Yr9[]IJ8s5Q7-A3^EiXol.>1nWk6:"]1f#`9M<B1-XmL5,Ec/9hYBA(gK<+L0JD;RFVA$2\O$+P9H#YpaX["dXCfq`W^>dW;^(<V@B`[:\+?P>.=.BQWV1kf#UEcK:]QY=!0_u%8a\rN~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1400
>>
stream
Gb!SlD,91]&H88.1$+Tba2[FhVc?_og>968*X>QW1tB]f-HUjLL\7*O"T8#>Y&0=u65"UH6j\a7h-&(Jo?9<<i*b#lS+h"/E70O0NuYY3r@r8PH-h$O5P.%h*Ssm&%LZ_njq.A4j)GXZ3SJ(?i.R[4b`-EtG(@Q7rW,%Dcoq2^S,S@O38bViqY`QZVhc3M4ZH/8!a1[[@,O!f>ZC<*R$7m.'hX&=+nRF]J#!2C8?\qCipKE8CS#gQ?#s@71c]Rs!95ujo=nSm"KYr\Qm?X-@/T;_lSDQgL><Gqb#I&1[C<JMMR#pR;I&'dcJTD1W(%%OZmlV630]]<;BYPj)9rT"J4.Oj;)7oL>XEjXXP,e=`rN@2#R#-T5%t.k2Xm%;`7r<0f?nYChKWF#,;Qo;W+6AJj#(,W'Q\gR@3cNqYuF:Yg*'dhYCs7Ee(^4nhb`/Tq#gtBO\Z:.TW`^I2a[a;4sIF76K'/b`<Zp4r=>eJ@$h[1=.$n,+M19U9]S-4Q=9dC%Z0b4fo@"f,fYn2#"2-!lV<&PfCPUqb_OLb('f""H1:T$`8tqXl!H+7=[^<GNBe\X*#ZNW9i5EECQ)PT[QuHVo0Oq:KsE;THPjq8"p_6a/ff=VcnH44@"23ffn8[9?+$&0fbcm\Rnr.WK$',8aredVXd.+plNEI_UE!Bg_n'C9-:nCJ0aMj6!QBGALtqK,ie[`j^luAX:&(W;4Xh1m$KEU3PpgZTc+aKr7"m&:,]%m-?hF'\J(1+*L"l!&Gi!2_;@oND7"G`Q8<3kU@Gle?D8a.%HZV-k#Ns5,@s:lN6+dPThZ+5Z0^qDTk'4U7a-l=K[N?Fg\m<di4h.FJ'p.-m9hlM#;n1-OPc@#$CR=H4nhdC<\]6D+EjF%GQ8#NgAr.-[3+T)PCId9>>a<"1V7&[WmXg"4@/M(m9hNV`<O?f=VKFYuNWt9G[s!B;OrT^lO?F5R]IYgKjss8K&lg6!B\6NP;-%CgAZrMgg';hGXl]0H3rXV+lasU5>ISb(!-L;(pY4/9A+rWSaN<Gtk`LmE;b/uaL`:ZD>=7]J`Ma#e2&i9;:/Kl/N3[71<H6UJq1kueD/U(5Oo80\Ba?BTR#8/a.r;a$RN(l!18XNWN#uN9QU\Vi)]2nFOVf+O+dZ/p%0=Mi0G^(NZ&E-*U\,k.a<qjo11$EuXSOqKVi&od=B6;66>D\k23RMqmhXU0JU*mf*sBXCnJ;k/RmNfdUSZ[L.%G!4oeT=/"RZh_D8/ub=f,P-s1>D%1G%b+R,iVX%<n<qV`0aE#nT=IWSF![37k2$0Ys9OIG[;C7WE+A<X9ud`f0obI*kb7k:$^nLAOo/1b$O`,<;C'd^T"hrVg<K36<))Srj:)WuXemY$9(pjUr.pb]!M]nZ`1e^B!-67K*~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 285
>>
stream
GapWf9hWDY&A@g>]]89#G1&9+-UC]C]ne]:-+:/6V+n74K<W,Il/FHP%.=ja:s.-rG8'K0E;)[A%<hg&WePl@ZR\cSr@<k.`bJ.[RmrMt<d[67o%rT=JMNM@A>$:]KuNsq8ESGR\Q$C>;Bco_9(Z/hHQ0Yj1%C-mEQUBS]KG+0i/)_IKq*J(Ekj>HJhBeI"qDSmNl'_eiN`qRFK9Y)i/VccfQeS$a@V&3X]m'cT\ig.M/coC)(CU+Jip.0bfPA1Kb;d'/DUi_PI`*_(HuA+quMG%;mQ~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1320
>>
stream
Gau0CD0+]+%0"PUd.$.e]@a=lN8^4#kH6JiBdQOnVI)q[/@GOcCp.cj%V.?mpM(MgMZ\t-84/.)b=[(+Xn2l'D>GsX*@(V,7aV""!HV[+"kIh-0Y3"27ZB&1[b9oUN]1n^%/RZO_ZntJjQO#3H>^LP"/k1g3s-:h5tCs+S2EhbgG:WXaFjr(0ql@c_>4`uL<^>oMBiiaV@$6MZB3O]!MdspHE0@06(_XP=D&]]CXW`Fl<4A.#&>LF/2PTF%$I(]4sQ/#%Rm2OY/pBkk6Uf+;4!@MeBgO8?k4^LkmTA>.p*&p@d:aI,)["DM;8eYLb`&=d>3P@]^1qCnB@/@lhH4kDF8ieh(f#T1N**0m5r9CTJ478Fo/t\XHi;n3\"LRfXaHGJ9%!HnO3oZ*OZ4@!'s[2=GM5>rmUB$FAO0U*7=nMU2=]c#E5=po>`]?4=mmC:rNiOZq7=>k+'I!&ld2"/U4(k\qVkbg[Y$OFo6eC!iW8OrmGb3Y\5uuYMJrb:gGMM.G2B6n+o2f-S]Re5"L>;DiN_n9Qo!LAEud0^jdep&HtNOG_-g5>7nn9XC*MH!mMfjEAVCopb^kIGKmDKm(\S/qouhhQ\r5KpIDZ+NP?r:[OSaDP./SXHX]GYQUWgM.5*(s-C6D<dQg5FKhio/><7OLCO?.Y4+lk3PtN5t._X($Es3nE>6hQH`T3_s6rh<m%f%R@LWao--&`lfLj>TLn-#q`$[Z'q0dM-\05Pi(=%f#!8jI!8c*bLap%0?62J;p,'W&V5OHHM5Ps#_!#g&lOa8/b'@5L?8PPd[KCX13qA5:'Jiq08($7&NADLRMP8ffKH:>u=lYMFrDTMcgH\qe_]6fTdm@M.Cf'AULe*Sa%b/CkCp,;LhkRe$Vd3FI-P"100;mcun2A.$=JGXaQ"ko6Y-X,Zu0p$gLlD4AI,5$f*8:)'j)or`47d!@Pk`u!coeN(aI1jg%*qJuIMa]d5&QnE`&Z?Oo2J##_QhQHs:IEVQ94Z[b7N$D'F>:bN"1R%oG'*5n%bIe#ip\i@Ulgo)I43>CC9Bn>I[nA(9lNdI7`GZ*P.Ke`)RmVf(3nA_2h_RWc4"=<m)<OqrNG):V;edO]T"^I6b>6Te0#ll7f8!!5%V\+"-7Id''DPI5Y$hha=#*B\28t7=2'6_+rqi=OEiWjGF_^-mNZ2P;`n$>f8?a!R#4(A"6j^im^P"p:MO<h?60q,NMZE):eZkAUaX,33C;2:J1O,f>3Y0r_-+*!FQiCjdRHP_S&u<mu*7Cp0(-@efNr*YD.7]pKPGfIF?CM4kniWL4(NXdBeZMh:j'V9>gdM~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 729
>>
stream
Gb!#[?&tF>'Rf.GgmBusP5tkn"C&=V-JcCPRVY@fjF\ul8f&=*%(_2_hg=mg&XtWF/q*r`;/t`gq_?,A"W]8-IeFG*3u>8N$If&7"?KM;i'+qX=8AuFm5Ia,2/U7.0HAaq[7qUliGI,N/U_$E+o_86W&Lq[<85nmedr<gb`ift<Bl5hNG@E-(f1kKK=ekgLc_@WqH'M%)n;H.!7bjrgAM"@o`lY=<(Ah<*u$L2[gud.Jc"a]pq2/#>(@]AH2cVmR+'/5cY$cWN6^SZm2B<AFVDoVa0EcC)=]Ob'/,hs-f*&%8Iq=C&!ZNqC4_Lg&i*gG"-Q;1rlHJ0i>2'oR@<UKG2]EY25@TMNtM,kW]H))s4"Ie_.4]eUd&^HgWk)#dV!f:/#V/l)[4c+M4618/9K%6<k"Fh@FJd9@9U(i\aM[T@E`%#Ot=_3cVhm'3@-Okk%2I2^CWCA,id9`e]di@M(qN(M<'OrH@'8QIK9b/V\tm/%o#ncZ$!_=W:M2B=9*F?7B)Ig`dCA?;%Tu(o#X!@[@#F@\7!7fSt$ko-jbek"t@2AO(s.h?6"0l;en!e0ltJMQ;JdfA!iu2qQfrWL$Gb*r'/O\hNlnce?BUi715,[l2IZDlp[("\X&\<4I%1#5u],67/OSSCY;E'FkS=8Hcl;tX.&Z5?=0fen-+tumT/68eMH0@#Ud;$k%3n92]:UZo6L8F7X,l3p^7%b52lag+-(qO1&~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1335
>>
stream
Gau0CgN):C&:N^l3dt5:#suMa*E">ij4%+Hm5eB"0:![aWPN)?OYS_u9i:h8H?A+Hgq4s;`<auY5,Y<jkMUqZ0/re#,Co)'e8JW3)_`7agU*G(quV?V/,rZ*_Qr"%gV$)&KhgC1h-R]`cd?UaFm+_kgT-iDaJZWY6]NAud/^YHL$4s*ep#@O\?mp*CG\*1a&*HW'O'&eM)F/01:"<6"jd#ZEr$Y;Pm1R&$H"5.IP_oAU=V#fNHLa1@,.>>j0fANN4*LUmAC$:%G*+T&2L+kJg6]S.7sb9@hbW@i>SWlBaTnU63]+gS2n'MM:#TKL7VCq?Nmmr-'j)d`l&!kN!YA(+TY(MVo%%*9>8t%No5aY!>f^-(fFfjW;K/BcR=6'Ss;do=l6o1YNoHe@!hkLc\gP1Q\sU74.U7&[TD0g!O](U2nLZR997Ih%j]$ba"6^L^74LjQ>ecYpa($CjnhEF&H$@r5@gPuX,K9@9op:U5Sd<_)IWYV)+SWhOnnk5C2(C;/T\Z`rOj9C;*A<UmBlnZBHE'hCHY<eXdS>66DGMV+/,de3uKCQjsuL<'pM@]\Q/UFs8Bi=m)>i?I*J;e3+cm'M]s97AL,Tj6fALjrCm8uF[$#$*mejJ`[p%Wnd?kq?h3Lf(bAVN=^r3soVtt_r0YD,R2:Ju39"GOT1:5[&<.'<^sl'QeFP]6cTrX@)N@Q+X[2s5Du9?I/h;+:V.Ft/cn8EMomKf^@!Z6<!*1[V@QW6d*ttEdhkC!/_C!Is)n@NVSuZA5^Gra$):trF:1l%RVc(=6q6u#\T.0Gu76%g(po8*CM(!+Ua13Tji("E)_o*7\OS1DpAi4'[+.6.A\=Te6\+V3-&H@??B:Xd^#T`EtFk/%9_,?cQ)Xeh301LU8Z%UDnU28F#ku<`l&/_6IdtF1LCf&'XH#R6_S\E$o["(@]bfr/Zij"pp,teU5<R2^Mi/3L\$jQ<4KUt?D=q/-o`[Mp3UIf;:VJ)tOZ=\?,j;Q>bGB6>j%?PQZ!XqWE4JV80-p!C[s+W.)glJE<\=V5SmqV\4qSP3o4i9aT6R;,RG@:-E-^S]gPK(Y*J/e)BpO63n3mP9YIP[=u/4o+5SYPk)*^%pc2F/SZO!A[,XWKgXbRp+L4'2C3GEc(WX+(hOett5-:eWT30_doR1#;YN.BiTg0m7jI@^gK/II0)?IJUP@]MVugQ0nd_;)Hn2cbX>T\4jliG/p5`SXNa#qUQ(>AJd^-<u:4k:RGk5D0<OgJ9+`#eA2@]*>Qm!o4ngBP:Xl;EI$@F'$(Yd\C!BZi$:(CQ8Hlq;4]1OrHDLC)](oD'T.1CX0$,fb($1\poO~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 630
>>
stream
GatU0d;GF-'Rf-p:A[F/@5%fkh6KY@QDmb>XXi*=02?IQ<j4$?,up4[T:N>dP"&ZR#fO9>n%Io:k*X$7%paZ4'ei>?N[UieF:-_LIAF@IP$3n^IE@Fq&g`"$""tcRM%X*lVb*Ds?BF(VIseXpLkS9\aLdE.35fE@#ro28qf,/9>m?bmBK1__et)61-./he)T>5t:hk*_UB%P28uSYQco9V$JFin$H:WO&@3S.@:s6/_!,TL6$8\j!lgaK/-I;%I2(cQT.^S;`f#r@]en(`+O_4261Af9PbBeEiAfbLMK90gn4/&WsRi`oXrl3Z2eMTZL^Q7mE#4hS.9M3mEhcRi&k6kqVkrkutdTJP0Nb[g_:.`r1FM94!oY1#haU5W&V>*qKrj'IA$K[4XWThF#na+0"3<Jd(nQ*o2=IgSi/a2H"s!\[)aejZkNLk<tdJ#D"_>Q$E=(V4.s&$9"6Z%!48(tb&CG3@UE>WU<A)cMTTsmbC0)+AH^C3E&+Rs.Ki[;`[`l1"te[GbmN(r,j^UEELIA,H5:A+-^@E'E,CJZEZ?b(&'-`ekpSd@O*,;;l/;6l^MCYUFH<ErqJRg4(qcNTq'i4c8FR'lj7I<Noi@OtZGT,fI#efVZo/sQ~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1425
>>
stream
Gau0CD,91]&H88.0pb\p"A@<h*%+`:!QPq$*%BgGC7D6W,_NF[A,Fhm\-hc`46sAgn<S\W6#dUbmQCBj4HCj0g@XD#qfi-\kemBi%bq-c)S![)nB^%FDgZ9g1=ERtgTu2G\t(J64h!rIkVfbPX6XkXfj<G$=ho?lq#_?gBMZ@*`a;OL$`lIEGs?r4#K.1D54"=F$B:.'5XkfEEH[8f%eqjLh]!CKoQgoQ[o]6(jl8LfOEXBer++TYA\:b-r4uA:coTK\MAjo26kMm%KF*4q"(G6G\eRO`&7L<T@l).Sp2*52#r3cG(oB"5+q6k,$Sa;1YscrJn,_L&ic$(DK\oP*A%#8eKSHHo'iTFti"nD+F?EQDG"qk]$A(USY-LHS7#Gr0IW^&&6Pp&K/D/-f\NMnOAE\>%TX,'"dQU7R3n782>41P/j5m,NdNS^IE>Vk[(G=%:$orA+0Ba6k@LT]EYKL#;]Wo2#k,cEfC)DZpI#b/tP06us-\F]O4Du"F%\/>s3f8W[^e\ol5pE!3A$oHNTIoAlW\/09FoUP*4'm-=!++!-$9#)S5;u[LDB#\?[_&+5Ro_(9"FHa9GJ"FWBGkd$$OYk^I@b\S8oEfsnq'LR]U,SPgT,Y(XQ`G!X.oF]1Zg&K\i`1GO5\^,g$-m+co_TOp_K$/6jl7LWF8#OMFGeOWkis0U5srM1<K*a56);7dIN4Q:]1qd3]TD#"N-O+)%Lk>W:/j\O$em?/`Z&a_3W9qiKdib&b,C/iS(>L@2B]kH!T#J=a;Gi#C&<HB'HiO!1AG)ZO)A,2D52*NYLQW(Ld^r9Mgjq!Ekl=bCY-3+Oedk4N=Ymmqj4KJZp]cQOK-)N'uP;A,81?Go;n'o3R!j.8X$=0$K&tKP45(>lg*cm35a_gp5c99B"_#P6uNhDcHN25&^_(7HYUU'&RbV&-X1(TM]8d8UK=EA*SOQGN=`eo^hQX5c%"bp[BD`><tE:Q5hJX'cpRbfX6SQ_cF)tK[nm;iX.[U>BcqZ;PUoh1dB/$)6OSrBYs^(Mc1%(9T,MNO\l[a$/)Nqil$@W_uT$Lb"*lOFI)M1N<SblKN^6]1bpJ*nmLi!R\"stGtSG/'NJ+3Fu.pQ&,k*YYjZUKs2[dH!kCsL^1uY>5hdD$1j;OP)Ugl-`;T,)pGmV9T>.k@1995[NKnMH;(ntq)=C=rQ%Gel9&fstc![C).s7]8!:`)lpPKE!6IHalWpFS'(HT?ob2h?:#Nij"5L(X!27N'Cm^3r,SfYMR;r@UMQ>%/$.?^KsXS6F^7AeP;>G,i:TR#SAoi[+HK2Ln_<3,$m:!X53`JGl-jE923A4hP5!n8E_4BT9P6_D`ZlW>aEOM3N^*QO(k->?bP11t>kU\7Cteml-[)42,-H2YR7_1R,ISto,-pG0:Nb<"0,QAYr(rWA1fG7X~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1337
>>
stream
Gau0C=``:f&:WeDFS([Q'F9@H"qn@fPLuj6AaS.>AmD;9[:$YY1,Au0'`WSc#=<qAJRbi#8^l;C-O*Q7D+)-+#N/Mk.b=kA2<\1NeFblp^;EsSn>fqB-Q=qVdAjS_\8:D!X3nR&3dRkd>KuGY$T?W6Y6Fk+V?OZ`W*VCJYdoWg_1cncr7%2PHBZG.dV+.rq"2:>8"<-s,LqrF'>'h<7Q&\sEd\Fai=-0:UIseg>H8T,nQd7LL,MP']fUl''0u#7oIY+(pOn,Yd#"o7$=Nt$n/TdXZD#]1UrV)IhKsf?Oe-]8VCF3fn.AUSF.]:lJ^4NoXp"Z.Z2(&u]UbaQk\q<bR:rk@<aZ+!0OtWb8M>c^4PTkO7bBBfcX=JM#17V)$p@ZAGk`#H$u&?W;;EN7O3gI8mM@a_J+hh$)p]&ZAAmRfhQJ_\d'OF!g>cUB[`;)0NZqN]j8D"hMqJ^Ro0FN^&TP>gG=UC5@Q/I2/e%j;nAKC$bVWf8Lc4fi-[tpD/pZd+$:.!QfC]j3%J4hd%t'RWbc$V!/pC$[[D<<B!>98`Ad?rmW<>4h(Pdrh]-H]'*F50^7ZrKD.j&srAUR_/5=BgQhMjA;8Y603`G87C/91_Dd.&Gci7B)7!@r%"P6;cZ7X(ZJn1fCAJJp6WVukqL?unMhojt+Y`U,W&MEabLZY"3%e*0,.FoO"bL_iBAB!,iX2]+MZ&`cXbG)*UQT#1@g/EHZ8-_.4D21Rn.kG\7Z6_7ZE.c&uplB\3._UgFj&aZQ@>D,kUgT5;u#qHbSUbCrfI_!^.kEAUk]#1f2:DSmLeP-^N]Bj:iDRrpD4g;U3+0mhNq;msDQk)Y*^:=lU/c*us-jW*H2c9as#&#))1qa9:Pg+b/.VhPE9+WtHp``%oRW`S-p15,G.AJ:t2LR`Y"NZe3'm]Cb^PE>M3faj<([&#m"(:X[OsJa@N06Gm'\G;bOUoKe6EL]ha#Nu-4=fG<QQu0o+H-bT@Pn!mbGFr7WKp0'*L&=L]3YNRQS$mBP"\Z%DUL[S`s:dA3[S\G*/mfpkN7Wj?Up(\C`Hk=QUhDW8cfZXrB?A<^SJ3ZQiM'o7"HiBPk:ZX5Ijnu73aoh7%Q`V?\QIU17lh\7!m)G1`^9O3\lM3qk`.E#$]mojI!keN[QKIVQf_cGoYAk%aFSAB7MslF8,QBF>EZFrpMQjDjZ.tD-FBbU>W7YH!5AbE+WYs-kH5r6]27k%dqXM)]Mp_@3ChN1E.mk<TSdEPISHPjK(!n*.o\,p_WE'8ls$PVFF'2RR^p%hSrW8F1WiUErHiI!mPb\=q.1,Y<eSTYuis1cQ46`Y'Pd`H:-Y@$q=4`~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1211
>>
stream
Gb"/(;01/N&:WeDXGl192'GO?Kdo,^C\>LUWu8q_*k[R\>e/Xdab@/Yrc^"%["Kp;@h*_p(qq8^h!OOsI_3.s_,=W%ruZsqa"B2ED6P%"7prgM(:YIEX]rE9g%.;[NnNh]?$/rDCYITf=$<IMbtb`Xm<;tR5JO7e#B3g%]5?l<dt1SYK,OuiPPn[U"1+aDK6F:)0uEJ0g6q5/M.GL7fle@cSK!/tAWeoHpYdg<0ET_3PVi(SMus(S.5YECh",m/@..`WO?N<Q7pd#c&oe2/In@>8b2-r.\BhB=]C#Fqh3MKj8<S?G+nk1m7##A[)m+G6o]k=\T<$o!Bk:TLFoXuoA?_kfa2Dou'!J*nKN/OdL6:EB#goPa#bbn`-0mG&`e4I@=dut+HL4"DPY.%hOYT@;KXtJ'9F4@s2nMU8O]:fWgi=D@r^I&WTEZAmE3KR19t":3$-KTb[Rpg(OuP^@k&sjeGV*DY\bW'V8f<9&E53-lO"nQsjZ`O0-Tkjq.`R(>&UX1(;T7KQ_DH=VdkiqC*TKR\A+ZHtft8s^o/Af)TDnfk/+i"hl)u1#MFlLD3r*\@U+@W)1F1A@0k_9!c[i*h\6@l!(c:lRj`]otK%I\=/q@PCp`iLl(g]Kn17G^/72qD%4,IYlb`c)d+WHu?1@.=g>6em''8c[daE>$85Mm4/b-9her.*]]lmtZqMUaUg.]e9a11Kr?cP>rZTZUp@cgP).57L'$rS])[1$!m*_^f]a8^[/uHfA36Et\4F.0Z?MG]C#X-RsaX;auP+N(eGW937Z8'[nhDDO%TOYXDoF+fV3P33]Ji&[)UQA]XZ17a=BEK'6r2Q-MGc[e89i(@es>]4cEU2/dK"WLuP6Xc_lX<>+3XDk[SFAJ@p?Bh!HUPYr&]<qsUlEa67%Dh][35uHZ5JQ%+#E_X8IFc^BF+"=aLP-8\'meT+ALr[m2c'TV;j[&"BIWnr?$T@)*\J&>1WPj05E*h2_*O?$IKo1Ys<F!c*Obh)?b%k"7k_e&ILVR](+6*m#YA(ice3=6sWJ'c&9T[jVE1k@jFjX'p=7i/'m[l9?HS99+$Jj7[>ISdADlhdNd;oe`GP(V#&$04[/8rY`NdB/o6YN("niaN\^3B>Q)XgNiJ.09]TCfs0@\V_3@`=ukJP`a3S#Y,=$!\)LkO]`\Te95,<DeS-KG0"U':IZ2'OeokjeEP"T_8bJc]hr~>endstream
endobj
37 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1621
>>
stream
GauHKgMYb8&:O:S9`3tI0[9L6"e%?0S>9/+YuIA]*!@d3/5[V%oPuD$q>/Ah.>`(6;b[:^Ybh$Zbac"\fqAQr4dQ(/blD(0iU"tobD,Nr=K^W"GR/rldI!(Hm.>/4O6jr>^^CQ$nfuR-Z!mNQi-JcjU$4s'(m1SB5g580VU]]CcH(\K[W\AD%cQJ+@LCsPN3SV75DSb1`\3S6:\=#FmC<"^o"B7"+)NqJ36NSC(-MMB#gQb/Z[C"^eDMtA3*iCQ.Jn,\Ie3_[h:aG$];=>0g?k!n!b2(f0NA*F?oJ;fQDRd$*K$\@$*RJA'?jm9YY5oJcOKs=q1`TFIeU[hen2he*gegp/_Fs$[)q3:<!W,(7,]`DY[B6i+q[HrGaapp,n`[I_'Z6O\3A"JP`R$q8Fk4<1G8+!T-(l#$D3j6+C1]g!L!%Z!\\(N6-G'LJRXMI<*UeEPl:BjaEqt*J#(2L5h?]FJ"[jH/4kC:PiPNeTH_XH3A67WC=N^Y-`8XBJ/M@A/el8jQOp"=2Pjk`c6o-=R(c-oECh<'A[7[D;!+>g4ZT@FWB_eM*JQV_DRdcf1ngpG@9EoVB(/`_E!Oaor?nN5;'creH,c-a+,\8L76-nd$XG/7Dd'sXi(`CV_-_:sd5b$YWpZ=mY@G@hPu:!c:a?9FMAr!Rka?=$F*?C,LAuV$N<QL4FIC?5QUsC,6l/:HD;"3)_RAq$lTQ[RLB\#3nnWqXgBE.Io7CeYVqGR8@;?AWZJK(ZJPGe@%mSZLT"Rp8f.ms:n!:*&m'UZ?mZ1I.pG1R0*:0NPA(]JXF(88^F#HEIl?4u*[8J4P3snr-S9u$@EWNLI(:<d<!F;Ec(i6X1-rOB;]34`M2QBr,$qK5h_oEQEcT1[+,`a,/EL#O48>JS\Q--:A;i>;S0;ja!\;s2@0/#(1B<"h/ftE,$]fYmY%.Y.7kU)'7O-*7Kgul4FHp@CQr:T)WYD2Ku^-Wu6pDXQ`\:P=s[DY6Z[\p7OWHh)_,g_NY+CVfR(>fe:+D*8gOdl$S*FB7GW`^XsHWVRVAZB*[S6JP'&S\@=Z@I/f7t[j^+2Z%B8?r;%_h&cGe-TL!kgL)dRc-Ht[CbfP:#k.?<uaZaais>A6dZo6km[qJGYJr-PlrLG+0*>3;.>D]H$s`3ge_"4UA@J`12;WO^)U8P<At$)m^6uCX\desPI'Qg\YL/db%d*eGYD6bW.B0.-69/4[<Ohlo\jP4TKrmpU,hm(hQSK[6k>)Vj)**435q#7fL[Hj:Z)T?7*ndhK:3_LHb;1m<JaeiOu2s8kR`err$Ka1[Rt.mV=DPr=Qa;f<`*W?D=72Pc<J6tAoHN'oJk0M@.u?b9MJqq+7)Jk%8K;[e+I@k0U`=,$^>beX=n5A3qZODdi2,L<K^4sL8pp*'t_(Wc#\V;NErB@UHhrg)GE>El)W`G\Xn()"-4qh6(CIucMJecfDf5<\/<*k\@h\-BDlT>F%]BT)8FYhilDBM2+k[%c`8upL'MplYp.q/H"rba8;k^#^teapg"P*4dU>\+,qY6_DFE?AHaVXbB]NibBXnnX\Y:BJbDh=tM7/5+)j.Z56S6oa?jB-)"l\fUE7PT%^oScTE,6;*cCa_28,iSS4]Z\~>endstream
endobj
38 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1634
>>
stream
Gatm;gN)%,&:O:SD#G""j3RpR&Xg,jini*Y'5O*Sc#d>*Q6Ck\9gVmE:B/!8?:7\W9M)3D&d;e>loE!:YU&/d7EY(%$Li3?QWF:qKuk>Hhsk.G&O&l`*`#=D),_i@BhVnSN#`Od1&Bk96UNp.")tooojS8'm+FVEk9l'W3aj?aL7gfT&GGuGN.,)j@`@qo1RK_$Ec*+N_J<@TcS'e$W7qbP]J`#Y`'o[h2Xd-Br.Yt1V=L:TFi3fEMV5[g1JB@l_G8l-GZ^\AR,udKA*g&s,N:s+Z"5c'SE67Y%N1`D`IQd@m")4kWkfYUP6EKs.)??T8B,[PZ(eV2oLJO6n-tR*@7G2iRQkLMkN^:rD!>+`DSNl>S"-`DV"cB+9?u_i9e96_qIT]aKb>hE&nhU@=s=L():C#.KpZPUi(bq"b%2dH*,`^s[$o_]JdI\oboZ1A?&(h[o.+p8B)[/+lbhU,B.t>hBq7Vb\<Is?ZV7ka>YWQ<8@fq:/X]p5n,LJ>pKV`4\\"],)5.clMW)E7bIK'u@n8*(#Gnct_.Qro$[C\,8h:UH_bq>]?=rPi(&Z$u]Ja+CY28k#Qm*%X$<WT[WjP+M'[pp9KNnhK[(tN6i(kHREQRf!V4N5W?5Q4$c=[?fA^)!lj+g#>SaWg-T'Nm3)"5\@J-9Y?a":HB//d8Ra_nK(C;n4:H*LMYUR(q@964Gh'M@XN\m.MGkFsXjcg?65\E+TlG[KDnY[YUQndiWQrGgnO@I3A\l[,bMroHJujV!m@&s_SL:9,8Y$tr>7Dg#4=aY/Yp8na$@@5n&N,>-X^4p<SLSLAH*G`;r,NgYBWR.b92W4U<oM8qIBA(\HG?6kO8Oi]RF#!)1.OhIm.L60MXV*3mQX/l?[E3%8*Y.mud!%r\Foub:/6<rXdXh1#sdY.r<fsGPCXHQm01P35gR9GUC(T`mKgjp*_GIUI6FCH>K2D-quh;<68PreUl=,*jBQ^GBn$!bs`n(d"cSW9R[6Q0^SCYZL6L>uU_E<e2aQHR#*jd!;:I]KZ,X2CR`';.>@A20a27",;;Pbe"Ld<PSDq`6iQWRI*4bFD56DB99%nr1KNq*itpBN7_rkL6bi7>8)MjH'0DWi`IX1q4lWT!#;Y9DD@^\rfcWEd@c&U#^X2IN!G\9>6I;g&p*m'uPIR<Zj&]dP,9n'%,Xj5&&<eT9r`!^]'B9-A,:Jk6P)WI':I49tb!hRu<!&%=R"]CrZIp2BmiL./<PPjbUh!qUg:+C>[@m/9:t0)4j*r=3%8>dJdOXo9g)%):s"sB<sbRf@HQOcf"cV\gta#OJuaBpL9aYBuBtN9)R&q%]TkG`E+q/A1K!]NfMiP93E08h7]ud5S["4)]%$%^Z-<0^oPWDeIm5JR2#GmnS1<UmI@>9L3G]'[)-1j.&`iBFIj6aJ/#-q^?-KT5AD!BrN7mu+K>sd*.,frj'NtCB845C2m`DDeYRl&4mB0F=e%HKCth_;]RTqF`!KhZDF)a[NNkhWfB&7OST&rUFutF!P8uosL$_X_(<lKOSLHX*:LSV(S\j?3$@C.f'Fr_n?;HV&Y,=gOL)i0N;3+/qOpHCS_Nof2A)R5)Z$ibI7.Yk8.5\foB1.0W>$=#$*]3J\apUuD"4e'?F8~>endstream
endobj endobj
xref xref
0 39 0 21
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000143 00000 n 0000000122 00000 n
0000000250 00000 n 0000000229 00000 n
0000000362 00000 n 0000000341 00000 n
0000000567 00000 n 0000000446 00000 n
0000000672 00000 n 0000000651 00000 n
0000000787 00000 n 0000000856 00000 n
0000000992 00000 n 0000001061 00000 n
0000001197 00000 n 0000001266 00000 n
0000001307 00000 n 0000001343 00000 n
0000001513 00000 n 0000001549 00000 n
0000001719 00000 n 0000001755 00000 n
0000001925 00000 n 0000001825 00000 n
0000002131 00000 n 0000002114 00000 n
0000002337 00000 n 0000002206 00000 n
0000002543 00000 n 0000003427 00000 n
0000002749 00000 n 0000004788 00000 n
0000002955 00000 n 0000006664 00000 n
0000003161 00000 n 0000008481 00000 n
0000003245 00000 n 0000010464 00000 n
0000003451 00000 n
0000003657 00000 n
0000003727 00000 n
0000004008 00000 n
0000004161 00000 n
0000005204 00000 n
0000006525 00000 n
0000007362 00000 n
0000008854 00000 n
0000009230 00000 n
0000010642 00000 n
0000011462 00000 n
0000012889 00000 n
0000013610 00000 n
0000015127 00000 n
0000016556 00000 n
0000017859 00000 n
0000019572 00000 n
trailer trailer
<< <<
/ID /ID
[<ab4fa5324f02268490d94a51d4d35c59><ab4fa5324f02268490d94a51d4d35c59>] [<60bcc86fa22a6ca874effbf9cb4ba218><60bcc86fa22a6ca874effbf9cb4ba218>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 23 0 R /Info 13 0 R
/Root 22 0 R /Root 12 0 R
/Size 39 /Size 21
>> >>
startxref startxref
21298 11788
%%EOF %%EOF

View File

@@ -0,0 +1,443 @@
# Les 8 — Lesstof
## Supabase CRUD + Mutations — QuickPoll voltooien
**Vak:** Technical Foundations
**Vorige les:** Les 7 — Supabase Setup
**Volgende les:** Les 9 — Supabase Auth
---
## Inhoud
1. [Waar staan we?](#1-waar-staan-we)
2. [INSERT — data toevoegen](#2-insert--data-toevoegen)
3. [De /create pagina](#3-de-create-pagina)
4. [Server actions met Supabase](#4-server-actions-met-supabase)
5. [UPDATE — bestaande rows wijzigen](#5-update--bestaande-rows-wijzigen)
6. [DELETE — rows verwijderen](#6-delete--rows-verwijderen)
7. [Voting in QuickPoll](#7-voting-in-quickpoll)
8. [TanStack Query — client-side data](#8-tanstack-query--client-side-data)
9. [Types generation](#9-types-generation)
10. [Error handling — productie-pattern](#10-error-handling--productie-pattern)
11. [QuickPoll — eindstaat](#11-quickpoll--eindstaat)
---
## 1. Waar staan we?
Vorige les (Les 7):
- Supabase project + `polls` tabel
- `lib/supabase.ts` met client
- Homepage leest polls vanuit DB (SELECT)
Vandaag: schrijf-operaties (INSERT, UPDATE, DELETE), de /create pagina, voting flow. Aan het eind = werkende QuickPoll, productie-klaar.
---
## 2. INSERT — data toevoegen
### Basis
```typescript
const { data, error } = await supabase
.from("polls")
.insert({ title: "Nieuwe poll" })
.select()
.single();
if (error) return { error: error.message };
console.log(data.id); // de nieuwe ID
```
`.select().single()` = krijg de ingevoegde row terug.
### Meerdere tegelijk
```typescript
await supabase.from("options").insert([
{ poll_id: 1, text: "Optie A" },
{ poll_id: 1, text: "Optie B" },
{ poll_id: 1, text: "Optie C" },
]);
```
### Met returning waarden
```typescript
const { data } = await supabase
.from("polls")
.insert({ title })
.select("id, title, created_at")
.single();
```
---
## 3. De /create pagina
### Route + form
```tsx
// app/create/page.tsx
import { createPoll } from "./actions";
export default function CreatePage() {
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">Nieuwe poll</h1>
<form action={createPoll} className="space-y-4">
<input
name="title"
required
placeholder="Welke vraag wil je stellen?"
className="w-full border p-2 rounded"
/>
<input
name="options"
required
placeholder="Opties (comma-separated)"
className="w-full border p-2 rounded"
/>
<button className="bg-blue-600 text-white px-4 py-2 rounded">
Aanmaken
</button>
</form>
</main>
);
}
```
### Server action
```tsx
// app/create/actions.ts
"use server";
import { supabase } from "@/lib/supabase";
import { redirect } from "next/navigation";
import { revalidatePath } from "next/cache";
export async function createPoll(formData: FormData) {
const title = formData.get("title") as string;
const optionsRaw = formData.get("options") as string;
const options = optionsRaw.split(",").map(s => s.trim()).filter(Boolean);
// Validate
if (!title || options.length < 2) {
throw new Error("Vul een titel + minstens 2 opties in");
}
// Insert poll
const { data: poll, error: pollError } = await supabase
.from("polls")
.insert({ title })
.select()
.single();
if (pollError) throw new Error(pollError.message);
// Insert opties
const { error: optError } = await supabase
.from("options")
.insert(options.map(text => ({ poll_id: poll.id, text })));
if (optError) throw new Error(optError.message);
revalidatePath("/");
redirect(`/poll/${poll.id}`);
}
```
---
## 4. Server actions met Supabase
### Pattern
```typescript
"use server";
export async function someAction(formData: FormData) {
// 1. Parse + validate
// 2. Supabase call
// 3. Error handling
// 4. revalidatePath / redirect
}
```
### Tips
- **"use server" altijd bovenaan** — anders runt 't in browser
- **Validate eerst** — voorkomt slechte DB rows
- **Return errors als object** ipv throw — beter voor UX
- **revalidatePath na mutation** — UI ziet anders oude data
### Met return values
```typescript
"use server";
export async function createPoll(formData: FormData) {
// ...
return { ok: true, pollId: poll.id };
// of
return { ok: false, error: "Validation failed" };
}
```
Op de client:
```tsx
const result = await createPoll(formData);
if (!result.ok) toast.error(result.error);
```
---
## 5. UPDATE — bestaande rows wijzigen
```typescript
const { error } = await supabase
.from("polls")
.update({ title: "Bijgewerkt" })
.eq("id", 1);
```
### Conditional update
```typescript
await supabase
.from("options")
.update({ votes: 10 })
.eq("id", optionId)
.eq("poll_id", pollId); // extra safety check
```
### Increment
Voor `votes + 1`: gebruik een **stored procedure** (RPC):
```sql
-- In Supabase SQL editor
create function increment_vote(option_id_input bigint)
returns void as $$
update options set votes = votes + 1 where id = option_id_input;
$$ language sql;
```
```typescript
await supabase.rpc("increment_vote", { option_id_input: 5 });
```
---
## 6. DELETE — rows verwijderen
```typescript
const { error } = await supabase
.from("polls")
.delete()
.eq("id", 1);
```
Met `on delete cascade` (uit Les 7) verdwijnen options automatisch mee.
### Belangrijk
`.delete()` **zonder** `.eq(...)` verwijdert ALLES. Altijd een filter erbij:
```typescript
// ❌ NIET — leeg de hele tabel
await supabase.from("polls").delete();
// ✓ wel
await supabase.from("polls").delete().eq("id", 1);
```
---
## 7. Voting in QuickPoll
### Voting form
```tsx
// components/VoteForm.tsx
import { vote } from "./actions";
export function VoteForm({ pollId, options }) {
return (
<form action={vote} className="space-y-3">
<input type="hidden" name="pollId" value={pollId} />
{options.map(o => (
<label key={o.id} className="flex items-center gap-2">
<input type="radio" name="optionId" value={o.id} required />
<span>{o.text}</span>
<span className="ml-auto text-sm text-gray-500">{o.votes} stemmen</span>
</label>
))}
<button className="bg-blue-600 text-white px-4 py-2 rounded">Stem</button>
</form>
);
}
```
### Vote action
```typescript
"use server";
export async function vote(formData: FormData) {
const pollId = Number(formData.get("pollId"));
const optionId = Number(formData.get("optionId"));
await supabase.rpc("increment_vote", { option_id_input: optionId });
revalidatePath(`/poll/${pollId}`);
}
```
---
## 8. TanStack Query — client-side data
Voor interactieve UI's (live updates, optimistic state) is `useEffect` + `fetch` matig. **TanStack Query** is de standaard.
### Install
```bash
pnpm add @tanstack/react-query
```
### Setup
```tsx
// app/providers.tsx
"use client";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { useState } from "react";
export function Providers({ children }) {
const [qc] = useState(() => new QueryClient());
return <QueryClientProvider client={qc}>{children}</QueryClientProvider>;
}
```
```tsx
// app/layout.tsx
import { Providers } from "./providers";
export default function RootLayout({ children }) {
return <html><body><Providers>{children}</Providers></body></html>;
}
```
### Gebruik
```tsx
"use client";
import { useQuery } from "@tanstack/react-query";
export function LivePollResults({ pollId }) {
const { data, isLoading } = useQuery({
queryKey: ["poll", pollId],
queryFn: () => fetch(`/api/polls/${pollId}`).then(r => r.json()),
refetchInterval: 2000, // poll elke 2 sec
});
if (isLoading) return <p>Loading...</p>;
return <PollChart options={data.options} />;
}
```
Voor mutations: `useMutation`. Voor cache-invalidation: `queryClient.invalidateQueries`.
---
## 9. Types generation
Supabase kan TypeScript types genereren vanuit je schema. Geen handmatig typen meer.
### Install CLI
```bash
pnpm add -D supabase
pnpm dlx supabase login
pnpm dlx supabase link --project-ref <project-id>
```
### Genereer
```bash
pnpm dlx supabase gen types typescript --linked > types/database.ts
```
### Gebruik
```typescript
import { createClient } from "@supabase/supabase-js";
import type { Database } from "@/types/database";
export const supabase = createClient<Database>(...);
// Nu krijg je autocomplete + type-safe queries
const { data } = await supabase.from("polls").select("title");
// data is typed: { title: string }[] | null
```
Herhaal na schema-wijzigingen. Of automatiseer via CI.
---
## 10. Error handling — productie-pattern
### Wrap Supabase calls
```typescript
async function safeSupabaseCall<T>(
fn: () => Promise<{ data: T | null; error: Error | null }>
): Promise<{ ok: true; data: T } | { ok: false; error: string }> {
try {
const { data, error } = await fn();
if (error) return { ok: false, error: error.message };
if (data === null) return { ok: false, error: "No data" };
return { ok: true, data };
} catch (e: any) {
return { ok: false, error: e.message };
}
}
```
### Gebruik
```typescript
const result = await safeSupabaseCall(() =>
supabase.from("polls").select("*").single()
);
if (!result.ok) return <Error message={result.error} />;
return <Poll poll={result.data} />;
```
---
## 11. QuickPoll — eindstaat
Wat draait er nu:
- **Homepage** — lijst polls (server-side fetch)
- **/create** — nieuwe poll form (server action)
- **/poll/[id]** — detail + voting (server action voor vote)
- **Database** — `polls` + `options` tabellen met RLS open policies
- **Types** — gegenereerd vanuit Supabase
### Wat ontbreekt nog
- **Auth** — iedereen kan polls maken/stemmen (komt in Les 9)
- **RLS per user** — users alleen hun eigen polls (komt in Les 10)
- **Realtime** — votes updaten live zonder refresh (later)
- **Polish** — chart-visualisaties, deel-links (later)
Maar: **QuickPoll werkt end-to-end op een echte database**. Grote stap.
---
## Bronnen
- **Supabase JS — insert:** https://supabase.com/docs/reference/javascript/insert
- **Supabase JS — update:** https://supabase.com/docs/reference/javascript/update
- **Supabase JS — delete:** https://supabase.com/docs/reference/javascript/delete
- **Supabase RPC:** https://supabase.com/docs/reference/javascript/rpc
- **TanStack Query:** https://tanstack.com/query/latest/docs/framework/react/overview
- **Type generation:** https://supabase.com/docs/guides/api/rest/generating-types
- **Next.js Server Actions:** https://nextjs.org/docs/app/getting-started/updating-data

View File

@@ -0,0 +1,257 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 10 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
11 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/PageMode /UseNone /Pages 18 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 10 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R ] /Type /Pages
>>
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1904
>>
stream
GauHL;0/3d&:XAWfU7(XH4`FE,j<Is:"lDpbk-3umIhUHpHYqqP7V[5a4'qY[h9gf*>@FY)J>Q_X`jGCm=&5)_8[#9hpFU&RgGV!UHf\jY(=0M$^2*?0c<-5/B4)s4g5p`FohkKi2@a=Dal1#gu8>B./:6TI,T\C;p4n;*uM-oJdTRF>e_1SYQVFhmt0Y"O8F<?]jl'%d'RS6S-PPLC]AeD?=<<W4*7h*7:dl5CJ[L$j'"A6KEm]f3;WF%[nCt<h8ge/B3>:Cb?RO.&uLTo34jibq'_GC+nK32gqr-;1=/n`EZZHDZ**_O/;c3pY*=;@DrNSVg/7>W,M6\fXEKL`e.R>q@,u[P46!d<IcLj>MQ%$k4p2Y-\XMd$RemS1T/f:ao0B9bfq(^ag3/EZNh?CiD3P6iPVHc>U/>Pa):caNLtugP>@Z(%7Q1tXY3"t6C(rIA1`t\R>1E;7K@h%gL8.\ca(QG&4*+5p,Q'0;-7mo\4hnt]Jm-;61F!7=GqdmqLtugP>@TmV>q,@rO&DUY^g)eC1r.7I$;,`H]K^h"2Rk4G9Is5r7ON>`SuH[r!s2c8D%SV(MtNkZ\'F"+`7KB%2'4fk=p$9_<7sd<j5hJt$4@/Y^O/2"?fB=B)4#9.(6tT>b;d*1PU-VuAkAD%YtUcA(:5;#[:$7]"\b&*gbo3E,?mr&EBu6pNIVm1CY%7upsfu[=8f;.#UYskUk2f$dA2$Z/\HGDk&f4U!-:cO@]41UY'YbZPf?Rf^q4ENcDo7Y1ko^Rmfh\;1,"s4o-f?nha"H!9XgPL0Dnsn,L`'66k2Me(B@GR6'\]%U!K%dI*:=.%C7Bs4V&&W+7"7uCKghk0`p*bj-MuLE2Au<LO2.1Jr0\mKODG[+f.Ze_`C?R/!LdW2P-J,FHX4p`=Y5#NDPNjC2cQ2pnkA<>n&9F@O$tE=Y:LdB\D1l9g'F7dd4s#P8ghC*]Lmp)\:bq)rfk,NBhF6ZPH_^E`BLpXNI0YFIk's4.S.V`NY\BD%<Eq4J6NRAUZgK9@V\[UMJIe:<1kBC?V;)__?k?%)Wc[o(RX38&%m+_D.e*a@]3gG?W&\_`nDn2?71+eB8D0IN2^BR8dmWeIb-9ai@(a*\4UV`+^CdOq9K@bZmAKILt/W&D2A+f]NlBUKiPMKSAi='j?C:,cO7)2;4,?4U=f,#YoS>S7@sOarJ9sik9\A)Y-a]>uG>:;@=$M+@Rm/&"XdE]JfsUgCsM::ZlASM^l3>Ub5dqk<)r`Y_mB!MsDY_aDs"6HVTM2;*q&jl4:gABT*H.`4e'OIduBk$&"%o>E7WR19Vn;1%>pV,+rq"Ap^3nL>KiKjSQ7;\#bP;)i2tOCKG`aH.3MKDWF)X/9%="l<u*c*rpFj7[o(q\.#,o6n7fseQt`P?;@_t@n_5<i!R(latPE3,XP!m698#5k'I2M(sWKn"Cb`\Rs\RNVhJ\4F5?44ciGTG-tu1u5otd8W'-q6fb<I9SnC(-OfT1\iHi*PGrAkNOfQs3/7kuX;k$<(9,^r"[cDaeEL9i:C")ba7=-30;35cY;`%fqoX$2h6HmpmJ9P=P(ulAF*oGXne%djC5MC6Y$eB[MkALNgqeP>$'YO/!"&jVZ'[u*u2cA,s;qcs'Ju6;2Vskqa1o3P*FOHlUCT#2'[_h/FfsnV:NAQta/<a9UQ1/R1d;tbgSB@^<l[i2m=#0#M(&R0&Df"g\mQ?1dM6B[Dp<P4t+fbOH3\L8Jr^<-#-2m`-?=JDfdN0>kd(9UF@ChCj3.HR70ZJS+mGoQ=+`n0>_))'iD_\]$&?.YuDdGdCc1C`(R]*\jGYIA%XDV]!:j')l:c3=CitIes?=H[&l>,<=a]91I+be-[`t[pWDrtWK9'1?o22*4!PKqQqQQZ<EOu83t#D_Nl5l~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1254
>>
stream
Gb"/&hf%7-&:W5<EU]1@))Qi"Ub_;1=W8nWRr4e+Q['u9RoYcrQ7L)%J0=mhNfm)ZSms&P;!_W!@9PMV]2-JZO!b,GhlQgK/HIIN0YV)53(t+',`sd+#B)!+Q[j%o[1%Tl6UeqE7)HX18:hS0MPu>$$k1\)BF3*@@SC<_URft06XaEn.UYNKU=r-\L5!dKJ(Y4(3(MS`KM"[gp+8MhkX@nIm#YiN5qlQ[g7.Z365%F-*Pu=n_s7iJ?boN`@a!G!SnIOs<S5u!"]N](]Y8tVp8cI/[4T[3EXS(4c9V\7.YG4'oKMJ#>F&:'BL%$,PB7NAmf<9;&_nQYhU9i8'-UA3OagmB<IVd+*U*!fTH'`s,mLUa'<h.La9c*Ws8)HLUu=:oWu.klIa)_==*mW%;Gl.iWNaD8iHRm^H7H3q-rX'TLs*0lG8X#3F;RKm-"3$,$F@d69ak;#"IO([LH$Bl16>ZuRHNb=5T8nrG>g[g'qpfUmYoi%R0A&"Z&f6BadRA81^U#Mdt0@k22aR!5D)eEM_&7()q4VPm_J&3f.<RV1)XDCY-%ZjDK\6W_+damR<pm)0tn>5e^:;5Zj"q3UkhF/E<VIiN6'L12Orm0Z@_s791E<I+tqjTIXq2G:+I_OlhIZn[)WPb$]'?HTu<aGJ,j+WjNHe,Yg0SV*)+[R)lnccBail;VlS5]eT?$H<E`u-*!Y#oh:u.PE!(@K_[BatKj\,tdUmZWG^X`j,YDb1c-fUT=_II,BfdJo(7a!2O0@Q192=>Yp_;7g=GM3KL2'e,MA>PE4`T<eA;McL-PdbL]PkjX<p#er=e8<BDEg]R8,=n\_q`,/M;m'T5-5.qou6^f8<L5^AR)AmlB7.rp/<4jm"Dta_V/RLg=-m*bcf>]HCHm#\>Y]?r)r*):t]<AO=*R'jW0X?;lTNB(3>DS:5'%CV73)oh+MLeo%ALXZ#o&e;&XTmbDejXcmtCom39llcT&o7(LFBE%,HK^SZct5=F2p=Y=r0*ak'OMq2]RV($(G='`<B]0;$\g3Ns)B_VZ(XcNaT\n/>;>oQ1[)%<g,0[\jif_1(_UlO(S&qdO_*Z*E?YM>d"VW`j\c,)<ci`[Z=%"2^$EPj89aleC#l[i9R8)fTbJ5-#&N.%nI1T`<Y/-lRRF%FY'N_&1"iY]47;TAll;:Ub-]m08S`0=K1Mk3/SB50%;em=L\5qL[Wm%#gYpK6@,Lnq7(^a1Vt8(Y/<$I"S$*K10)t%m35K%uaXXRK~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1219
>>
stream
Gau0BgMYb8&:N_C%.n'8i,\:u7-t]Q`Fse;8Ph9md0iCF/dZIT`DU+=h_QNhMGacp/Po:UajnZsZZB_kQ3"s_Fh_o'nB2f'3sLY]Hjra^$1iB1qqV)6&[&[,$AbocKH*N2g(0De0*A&-%XH.2;F@OJ+>"hhL))c&)8clI%b@gG#/k1iX9<"#dT6BU08Sa1W?kDFLR7^)s(q"-8G(:kFL1uk(sZO071H1^'$?G90MgZmrr&b(n4134<P6TJ"TGDo(N4(kE,OUY>PQH+\0N_4Gn'Ak0RqUcN'O5J\--Zo6/T5QWq1?Dnfc`RZ3\ASi$1_\)+!kh>EUa.Q!tSUO"e^CNStcCI@/dYGSj5n'on'2HIA0E[)6#*8P<:*e'JYU9rOk"4CXrG`830p,U5pUR`TeJ&>N(lB5f"o5ABUp(dY+L9B%[8X<%76:LNh5'moT69S+pMY=JK=C/0hp\+R<pC9Lt3i(cPijXVYNQk:RZ65"=Y2$as1WMT%T$3H$@,)Al.eLi8EN?`Rgph.PN!6f;V:q%3JQPOjL_^"db+7^\.-Wl^\$8W;_EP9Q%CA--"LceX)/((3?$aVD(:>1`Z*BMo>>=VCc_n*rN-MY"C!nX]e>$Su*"Kt+N-1=bKE,3uuRDIlt_FidN0Lm@<Rl&i1&1:=Th++HVSYa`MhtuXFdXrW!FUj+DB<N[JV'T(p24u/]QAnaWGGoq=878!$[D0p!`*`@]pA07$R_==T6[obcfbBRqUqMh6ep3ZM0@fIM8]R_`HW<J=o=q\\'DNPgPgf.hOCFOk9g)q+3&qL7qoS]Bn*7j9-L<0-P(rN/TQFP1?0PBC)`)8d_Er<P>U6iE/V_uE\$NhTo#8F4)+>Lsmh5E^TW2:\\ErAbf9jrRL%`s&;0_j7]"srDbY+bKI)1E$2qc?UVNA4PMWbpu0Hh$,*".[es&pTnZ*IJT)5UZ7]]f+d"9c1Z2#9G:`!i>o^8TJ,FMh+gM;p]m,JS7f<+81t(=uKV;+6jQs+<k9^oDf3s--(,IRMd/c9thoFe,->S)qXs-B7USV9kK`rH;7P2)t@DMJj^]-hoNA"_fR'=T4d<9;=-mHeDMhY*H85B7o'q$"@_2=r9=R83pIB-HlTN"2XfTmNuW5n5OPIK&7WFN`M)(M9ba@Dl5foSR[<b_`7o3MQB#Z?Ja#SAe_h`#k$EQ?Iuj%ep[4h.j$IeqPnp4r6YW846XV/[K~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1654
>>
stream
Gau`SD/\/e&H8h>EAR=)Ba]fopq!TF>-u*Q'O/1qrFB;9(#%4]9:hq)*Ral[*VF$tafMp![NpYWML=i:p[I.(!QAEsr(ja$:DXS61LM1<.q!r7=M0=MMr:dhE5f5H5U&Q?bCS<es$4+)Efc/,b:Nf`2)/9b0T6iY%<.i82:GA_=?Qp,&?Vlh!f18_)0KS@6knft=qIZt4eCR,B=rSWW6RJHZi*6F*5T3T%B,C3PY!H8Z%`!,^V5*s58S*:-(CXMi:jg)aeje=k8Kr)J7n;mA];r[B<_.E((\'/&ZAM1Q_<sokY"uWFg5[I?H)4eO$S^)?=O+b"N>_sQmS7NM3/;SUWb1rcgYbgm)'KE4:.A,DdaRjXkV24I9@[$ob7(*6i7[mK'I?:l,P'ccmQ?=#&Boe5#%u8&@;]*VB*&<T^PIbMu?9a0VXOEIAV?F]!mq-FRMnX08$J,r*_J[AeJp3L.D6P9m:h'JSk0SM<Pj38sgoj1Tiu>:,&QHa]B<G]\A-3l/LENEDi]'?BMh15Nb0tAC6"ZWe$OC<XpT\?Fb+MrPUg8LrH6`G@HfR(`CkuVqYKSeo1`AjXu!(UT%I"Q,OMN5D<8:54#m/9hU=B@dFZ5F;HC3^)fO\pRr)gpaTRi4qs3Z+sL8bFc:V]BB]RhoMo.7%^D3Wfh=IH0bS1]'dmUM:nfi84uC:>lL-ideRdTJ'&("4.^EkN?PV\r=^9#)_0OX9T#&[),:I&"g,<[G$'M'<3it1CO.ce(CKE1PZ_i)(QuN:0?)IFD@[5_@U1>M[^l)Jc_;F8<],%trT4Po.6jn(.$,k^?,LnD>]o>O<::B\13QD.b!q(ath(Im61[JGE=maAnr$fdbMt?&`P];Zq,.Kb+7P:q\l-;`QODd5O9RmL<E#88r92TcnhmBBYpp"0Da]uPL$N:$Q3nZVn`'7HkJ9k-0f9!U[G[?[>Y']m91'?][cN'<J6eJ7Q:PYY)NBpW3Ra7kKK#5Pgm6/4T(sP&)Q?cpNV*n-1p-F(gUEnBo6gC;`B>tL>8'D!&DW%8B.=V+<E.7WM9+qWed>oHbNmi;NV$S)E&S[4A6;+s8?pHlNkOZW6-(:$<5<Wja\")>tS+1Y76?51]oZ2[-ALMqtfb6.FD3([p9\afZo.qa,c1'N+;aQEl3Wp&jG_]\E8$^)p,$qlq'3I:l:$lY@0T+knjB[)=X?CF;U;W+Uf+Xr)"X8=3-a:7>Uqjk;QkOh33t7iZrIm!(/h?eChoJoZViFh6:DP&05LPIUas=ZF"O5P&YATPtQ?X+:^MKFbIeEF]ZiBa@\J09.@"g:Skb4S<SG.niGgp3p_GAN#<+TE1%hNReYaiH9I9aX-Dn>Gn^73(+T-!9@ZHf;41o%>$]lsJ.d4jM>9k35jQAaUGG`J,EjuU;I]?4@iGgd@<crG4mFZ$hBbK\Z=iX;Vnj9oa?+$Yg7&VDa2WC34:FH3oJK/9,Xb-4!o>c[o)-G]*Pf!%:VpE;nXLk_B!_t'`D1jC_Hpm](g1>E"e*kDTOHX$O?:#J9g5,4'$:nIOlc`5X/-Va3U$I9s%6,dF=muo'op^jSlWB_BD8W1C+5^u>aWOh"YBQ/Dg>%rU`S6ofO#_&)`+96<$UT6[?W6\P0)/K0lP$_e`0%+$JZu$u]#I!bF70~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1697
>>
stream
Gb!#[>Ar7S'Roe[3:k=`Y$ae+81MLug8;gjFDG&>`?#ErMG-*(AC75eVeqOq5*D'Wfl?#K"gZ-;A5PD^mlNWWJB`kZs4IJ3jVSKb&0M"4B0[XT_>#Up*Y1FD:d>*u`IL:8_^#5HK_>r+Hr*.'&P[k1!65Lf(.#kFi]Q02(cfSA"!q@KCd7tTMA_HTE=u2Fn&U9?#(\KLTpX8=>JBWg>PAau)t/`Tp"(TJDic:oY;M7M-8CEe]R\Demlm>YT5lQalpAhrcEn5;Kn`/10R.R=a'pV-\J4</`g8B.Ae"Bs7[0AR.,._t<`G?MZWbIb3mYt`igtbr-A-NtU5U<<j2bcf4N?f/*J(6lFu9PQ"^61h1t3][e>27^L<049pa0Zs\uLc;KWtt&qbDkK`Ir3iD;A2oX6J-.T_YTJN/"B*5UFo`W$.sjc7c)70%Zgke']-$66+NY9?X;2'rY-3iE$J6$0Ooe<uZ;7oT;M^T.U_XX[a_t@p7sB<!s6a3k[WI[?TrK/i6O]Kqa+XQXF<Q+S#Ls?0&,i7n3JDk`mV`-m_Sne"QnhIOVS73QRP&cke%e3ZI6K$fuC1BE()YJg\dXG9oM2F]84e<*t/i$&b'DFY<,k^tB$Ac%U&'+BMJB7QS6ChtnuiC!_$f)#$&u,'>6@YP2ZVEgbl=1Og9<<*_g(`_,$I7W1I#6UYVSbTh^26;>5hf=F)Qh[dp8JV)OU-a4FUN7E9/?Rl<ma&]EKnf%p)35Vc3_V9:?JR9X6+,Rjr3)tDZ7PouhBU'7;=h0m3#CaXjl>DI[6&bElA)&NNSZU-.E8JQa4'rs&/t23@2RjU6NR<4/mN4dT.Uf@1[/XIK&sNMETO?ad@q4/.5lH0/qsL#UQ(nYC,0g9<-U'2[16AQNPSq\GAS0m-R1^:CZ7%&pR8f)SK>JjXe,5XS^s0bD@YS?Y&o.R,n.6-t%uWh&T-<6S6j((@OB4rFeOhrZV=E\YHK;4WT>Kue0F\e#(^.MC6-^O;#RjPr['@f0RH\(u$.mC]@+]RDS#]\\(LfG\lVDl8b&?_d%6>hufJCXX38[_Z17)hN[!,.sSKfY*;<jqTXGu3B@Eao7T=%OP&feq2XGnVPKJMOi)mSP%c@^;ZZI[oXf(p-:.Dq^Y-YD`Ma>-n![`_^P6Gjn,?Dk?j8\W<_,LD^F3HXmdXVJr.6WYkg8g=Staf'J]hehSj#9F`$"p>\_]3d8TK_C+<hi=\nFPJPleBj0eS=L_9(r'rYJP)h`4*9Ko>j%G\o=6:D@lb$Xe)AWW'2aLO@r`+/e5hL<@oBG!OldtYJR>[Lp,=&AIKar<E+eKn1#;<S25G0U:'nBNe^\E&Su7iu<7=;m,o;cmd.[BP3&u4_s$j&cS\6AF)pl,JKPB0oo?4\S(@"M]I_AN_T2J.JpgbAdVo.[_^4A-b%Qj`@F:rpHb@tkgR^@T+VYpW'0Lq@jT7?nmYpXi;pBb62@2QqS!'G((nfIQ@9)sJ%$/em(V[RdXSsTKso?Lk8^,bknE0j4%mJVRmAkNC([FCp3Z=C^WQuB=._g1Xhan0q9@N#'Hdo+M/L,*WN';)[)Th8raIt?rQA68YqAAIJmr1cqH.F%"d0OrLZ!YO-FHiM3Kloapp_eX>7$en%?WsS\.AGc"C"ESRc<r!I9;79s$M/lR0WPfL:8nMPD;W@,tEV/5^e`:+bdY#AcF/+:J~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1370
>>
stream
Gb!ksD/\/e&H8h>E<u-OkuL9$&P9CoLD4m8!++8"?9];5'Ua-/b*"!s$*^-'I7M!*94A\@g&[,&836:445N,E]MS+f6`[ul$K1js:<t@c#1E`P5m0k/0V3Ub*at3\&HLeDk90p?Eq][Td`Wbp7#!7gTRB89&g0"W>)+"5l7#.:'F#>V4:4JJ?YKO/dm.[D07?S@@q]&-5g"%I^[Y)]pHg&Cn'K>UMdX&H2Oiu.\KF'F;ukA^N'@72q#Z#gQ_o^[o/q^kD.2F.$T#d:S6`o8o3g!oD2K!ohSJiL1GAeD;WAOgg'4+8ZF'G%#5JrbP:Qbq!4]rQ[Kr$RDFqJKPnY'\O&2I''#W1(lS,s?GSj5n!gJJEnq9n`BKKA^$10gn?IZr$&mtEK.+.FNf^!&tFA_db$E@Be=3aqK/\'rfU<\BdJl)D5l;=:_*k_2n0Yb(3H[bEWM@Z8]NIJX3r\jIf]o#>J;lBNbS3pEKeL.q:`#rJ3#oR:e!_!1,3N_lFqDDMgE4&h=2c4;Il>cr<T%Nt/Uph0b+He6\6,\J6/<Y%;`AYgo82?F29P1IMEbf9^I-nl(ao"3Aef+uU$*qFn:0tBE3Dl<Og-fB9VT;ASaHJVP,oe#AXNWB@Y$<GfJB`E.4KKPPTemOTCF-W/Y.pXtj/p/G6Mu&3j71ljNO;i#lhD=F-sLS`V1J2$ICkjAN"O%IIt7?b%69J,bpYKb(7!(7m!.u4NgGdaGjfi;^;Kf`S0$f8HAiIEAOC00XQ/!tBUb5V^V\m?=agGRI%?hp:Do`.FkNph?4\O@/U6fq)!h@bj*X'Sa,XO"FB0DA,>$h2GVYkNl\8U(O&uO^GYIPfaOY1Nf-d+$To1Q#q>?D5-n5<RA=7OR;q3="K.GY,l9+8UNcNrC8%_UVpL&GglNab8X".YWZ,e\!'R9^dZ)_^4nf,.^!*L$3$<b$ee$M6kf/e,e+.8VJ\44,,DcfE+B'rs\bct44!G*F=Cl*>Mc"u>=BuT7MV".e6$#@8o&k9WG6a#oaSEono4@j5%+ca])R[[nT$S[1cBS5inJHOEg`)Xbrb9A`FfB8ogbu^$%E5$mg1$!k"&\?j&Tlm4"??[o$FHn@+MGs]r]f5@%.$D1q#FK*!OP'*$@^hi_@>#O"CB]4Lft83cSljQt^</P]j9`c-pK0DE9ZC-:c;KQ%0GsOQP$1d,j):*m2u@gD\Kn=]IX5f+h[P"3Ves_u[dGR0\?IQ?Nu-hjI0QOf/?q%j(3p-C\hWI.UZ0SH][PC8<8KEO%GTooIIR%qoB5iF\8Q.99HDGtm2PpPBD"KPcV5ARgV3^E@7(Y%SD,;niWp']RjA"($/OKGa@u/U$fBJl)uGQ+=RF`EmiU(5NAp~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1751
>>
stream
Gau`SD/\/e&H;*)EA.U@l"Z*OhP`%5[\4-GT]fS/m3_uf,LNqX]iCfU(kM_aNdA%%A5RjeD&h1Dc$Sm;h=2PL!Q>kUhnp/dNs/W%$lFc=$CF1#=M0AiMoh:li?%_6(PjZA*H3-PD>p25:GQlPiWVGP+K/(hmslW"&L%e%dE_KS&#Fm.ZO$`nHdiiA&A_UIGk^QAic1!]*TDBOE7_hc-Od\=GV)"Qg&*'3c=$%6H;rWBPe"L9M\KcArq^jGJ*(NHKpt2#i.EX^\C%PAgkXc?iMF+d8RA@d";ZL)igFd?!-LDT9CVjhd+>:tFM;KThTBu28alrbmkB>6K#_)!/es%<a2c7s#brs?0Kf;H'4qoL$-&0J(WQVK-][XSU$]m`M'JrR4:LoQpBYo?59(9kS8`Mi&h_06Cqk_ia"Vnj0pW8.[m`*PB@)\^eDVR=0]EHppmE2=keU=[Ta*=Z54i)aqnm.Y?c0ut;V.%V2<hP%C^B<PV*q[*0h>D3!m\:\pdT)NUs$%dbgRc^<2M23A$4?N?D^+l2\.:La.SYV1iR2k(]d5<[r@?#Y_Q5HV_BE_%!A(Qeb%J6Z'Z*@`>fhu7qVQ<E<FU5<&_5*eMaI65Y$2^]7hG)P0<&Lj@/GVp<+,Z*F[kdFX>VkJ3-GCb7']C&M'2XH@2Wu!]XI/"_^qbG&)]7LG4ijogYhDCg%Q/<:er$St:uC4.&7KJfYc&j/gmJd(9@12K9G1C^O;SgT5T+f.u$ZZeOV^&([*]/kFoIcG7P=)`!T!@QDWjm!Lo"bU:o<6`N[8O]O#`J(3oQ2CEKd'STP]DBRL[Xl^cBSLS&"M`Dl=$$?RG>j'2US[an>MXrGObut=&Bpb.Mb;LtQ1`E"%`gt]2gV=tE0fqlZX`!e1e>aT48&@H!]+-=/"%^>NUrckZFUeV$?DYp0\s0h;9Bjt$1aQ/hTu-#i.XR>"0-H9""@#YC<G-!`eFeZlbm(&gPNBpcE@]'UT'_GEm9XY;cB"9;[@U`6;W]$sbqd%OYU#mOR6+73k1K(mD&0*aHN"u;H>5;C,CF?tpbq:?f;FqfO<[dG]=_"lenTIcd]L)V1OVJ7Cdp-?@De92CJG4\5EEdP6="Z`Kb=?rS(G?$ApR_:>`RT'kh(&-nX.4D]V71D'&1Ft9em\EV.KS3i/@iaUn0k:@MH5"kS:KITa*8tnF`=eor(qc\!;P;Q.N#U;nf$Pct]#NG$0&d2RDM31K2=IV3WdmUAZu&C3OiMLlG]LiWs2dAt*,+npjEb8hXhJR$`:c_Ym5RB]-M"qqhn[[ep7EK3%R(>q`t8=@9JJjHZe\.>nb.``ZCnm$RX5$0Uq@*`X+"TAo'5XWT8,eG#`Nm^.pNTu+a1eEX0cS)s"CAYNl:e4K2ns0noY%O[4_H>>`-JU79J8$=F59ulRh:49%uon@$*#V9N[?H_g[Gdg]7XuY-i8W;&e=)k#9(G<`I')1X@e<+BEkAF$$jd\*en[37^YF>n:2/EP:s3%faKR!m/3BEOFLmJhNE;=R/8!P@>n(Y]iU2%u'BjBm^7)?ebgbEdP2,gi`)rMTOelSo;$?c55kA^^@gmboR3o&M[QV&:%8N3&]j2YT?B8';/eV0!O2:%@q(.hXuj9acb'Z%6cb9cR]R3^ff=l9qO$N%l%MTposK(g\=n>>'9g&iA#)[3JOg0krNk\R36qVH6If^;1/i0>ICi&Al/AI?F,("W'U94'T<oE+1NI7CrY%,U$HVmoY.0_lM@Se,l~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1782
>>
stream
Gb!#\D/\/e&H;*)E<u9S.2%N6?:\[bZ)q6A@+j*IY@$Pr<Fs0N,"me=B+5:LpQ:\.=c"(FB[P*`m-o+84Pi5F$j!Hd`-b&_J7$=SS.ZqY`YUm&jMCU2IN&g##D`SKGs3@;@olJl_UU:fAqLfq!!Rr]!ZX#7R0Oc\Li^C`.QPKSK0mGoZN1*F!mJ.ZL_E#2_**&["dCLc*qFqKgm)gUj4ZYIK#Tn6B)PTL'F/>1A[T)j_Sg(NN#+2GlgM;qn9['WAMh`="TGA-)9j\!:s._Z1\au,a<\r?Yn,kf(dHIR2O&Lg='Gr4?g5*Pb::-&Q+RN<E>eo9;".(GYgj<3`iXddaRq\t7=Kam-6c:FZ+kFKFa+*?Sr!6#/mpF'(op#>C!"0N=:99t)ufnH&$nt;DgA(.V%Li]ofQ\_=dhUIn%6pr-SDBdX9Y&c<-=+05S2t'j"]tdiQbI\^n!9<>$,,Nq//.IT@%%10R9JOol3'k/dRZE)"Apt2@`D'5m\"M;]h.;pWRnC%YT,qj@+5*:M!CtWr07&]N]C7.Mi5k`V5[pKID[g>4):`Yac&u5%E3c`JZi/.TjNfV(?MV)[-J9MjKDjY_J&[>JT)k<LB(P(gT.U%&<+W>4_0f)5pqiSC>2Hjn"rkXJFB`2"&fR1SihS>1_rJ4<F_Zj2RbiA.2cqe#8/1'\Y^8PMlkCH(7P9RDO9U&$(I[].RPFV6s?S-rZ7YGLt5h33es@%+T\H:.C>fIlAUOaclZDS"hIb281m_$<\s='TTXC8:B2>X6XF^>.(tE+$3\O7m!f\^Y7mt(J+<.,^ebEmgg%_+J1DRfE;MSO,1-XJqWV4-L65ZBTTG+$PJbW4(Yq.oo283=#g^\,iNUKXEGi,Au0TLB=$K]*U7$F=7L-leK`85.DDdo#a`Y&&\cPrlJ-4:WE&_])OXZbA9@`(S)00cm2gV>d8>sqRa3]T?aDdUc>7X%)26QrakbkR=Fe5<\9"[j%$M;N+bhZ2a'oonoh96\lDbhEop#%'99L]q7"BV1WHoO.9^Tsqm3&?q]"Zuu9]'_(?/KNK\5S,D>Mm#1Hg3=5ii.p(:lYYd]R*B"+SM-Z=@*kA%#]lKZSumZm>C)sNI7-?a_P%Z68cG2=3Ir7@qr;.N3o-q"k0[_%j3LNZZ$h\1UY7:]4#:/$%iS`Q\iX&o(E@Gm:k2G%N5l8+$=!0YaS>9,A;GsKrh$EAGEtIo@VG_9BV(1XaL(UZB)#r9II_EZPMc1bgO(ln$(OK?u<B7`m@jlal4X@NdtSt%fd<JCL\KN.gZn^)*JmmQ/;2ZZ/X'e'!$Aqd%6,P5`;?3W1bAfNh(P614BFaFV[-4LFTj?>c1VJZI4S[Rai=HY6qg>:lBeS>B#jp4/9>T@U7fG2P4F__m`cL^ga8i2so<2(h4HiC>PZ,ej#Y%c(e=a&:kFR_ItP4j&DR^4>i)l[9Ro3)7#d0$t<Are%6Rg.2.O7gg&@;1O-'6Gjq`g$Wg`jOL`\8'=a`$0YYeC#rA!lU'nrX*pVP5E573UCZB4)?6@_ebq]eoL'h%d_UR4e',>Ln6.NLhorrBKVTZK$9*snK//KI](K-CY@6.[B5A*G.KnYc1,D&NU04nS@]$E3dX+GeLIeF&b<0aBNrs..nhaa1J9K1_8cOm&>A_X[I)CFd$V<IVi(Ue`r$LX/;cIOplh`WO7dsM2TF:*f<6J5o*'/7ag:QnRT(6WJLViM(l/ILM0$4[Ts7"-RbpK&A&_/cl<Vk[O*W,=7<Q0;;<5BW[mrpQX=(^C!@?+@7\~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1737
>>
stream
Gb!#[gN)%,&:N_CD"T'O2?`LNP)A@8RnJs5N0?rck+V&B6U<JEMH!+pM<jHa])YEaFCN^:B&#oq6!OM)mq6&5']2T6`uBP9jtM)+JCuV`!HX)*o2kEtDLJaFc#)A2J2dRP65rJZW#$.`.g(hG*nhciJGLP\?#Tm8JfkK;`cJl?Hmf-!*a&o-c`&"r5Q^*<J:DRq+l'M'[7`X-_s?K$qZ:>889etlRTY%M%!Sr0.>-oqKJLmJ@(q3^l0CQ?_M`dnb4mO6;tsW6,!M3pY\bJ2IL/fh8!2q<;&mCL*9N<HJe"a&"*B+kIF)&i/7lPq5i+op,`<f3!5-8V2@/*@c12_u?APkB2\ohdKcJ!?egeln4;Pr#fH/1&fN><F=.qLWe8bYk%^mPpInlq8rN7DZp;E8Z3OT-+Se-Wb#rJRj#GVu_j#ONC(*e8>BG!+7W5=EDg8[a7_,sPVC$f_d`n$QS.n%(O6r'=8&F)l`,cGe?8OZ0:S(ZSu.M:EO]7FPi)9UbnH68CRefk3A\J8]K*>cgu_U25LA/A\]-^AeZN25<*A3#l4*nVfVfGCXSKBm<f'Ie?ck"VGJdafIRJ&]6\pVebqkc+K[;U9CiV1/4>f*Z"/EL_Q'.u#dNGcoInK/49DRu@M?U<:M=Qm+9ug4I^Qf0`W(K,?)WWhbg&2D6=\6!T4:MC3*^1'r;0(&8&'5;e-QBmq%mQ_VT.-]\HRj5tS=<_3O'eKHDf=r1YK@+)7*+`&24f*qdc@Ge`@;_`G8VC`@O[0:QAQ*P7s=jQ'e`itZGQk6P_(bil##^?4)Ft4Pfpl94W?/s$0:3UYS,j/r&(D,tE*p9#0.\qS:Fa/qhBI2TS:)&O5Dc^jeAZEkGOXnJT5_Td03eQWpPdI"p($NV][*@(,*%_Xk.8gaNPfQ7i@Pm:aQ[mEjXX:%BAiW;n)J0>Q/<XfYq`k+4Ij!LBkn)<gNb=ee9jjn`2c'l_3N^<0VNr$m3/aLFE"_-*':\4L;f_k]JtiViOhg:JNpnBY8L[%.+-Qu%]Hh]/+rfbWq*l7peI?E3c%]Hk%6Z)KiC?&dmE,`O;g;=WGl_PT[S0]roSD<=q/R:p6l^%g.7K@.g[0;Qf;rnbm<;"+L#8=gM'K*k@0:?4H<d$0JAT^2OOHCIF,r#IFXWdOC/[daNC6]io?^B[,G?\+D07uqKejPF*3`6uAQ2uJ0s#O9Q;!m$U6-dL:G@(7F!S0J>Fa@I$%6,S"FsK1KuJ:V!4*>`KC".PFBn@Z']sO^56df2G?Pf%-%u6=J0LM4e>JSfMh>^K5/3J:/9^$X;7&jC9"p22;AbB&e""5(J2W:Aia1Z2/1u]QoL:(`X%TUNPlVnc?"GKZpDJ_n1VoRQ=@6MQ$R'^_f(JX=nP_)OK9u%?N>(n)PHe,_fm5QGl1Ec6DKM=_2b/M#HK/#)lCk4'*nJg(mUHrNp;f*H5#]:c6BkcM\HD*]:"V*-\JEFO8$Y'ZdB's@a8OB/ZgjdEYiLGmY*k'A_>NbPRf-(]s%C$X2658ICsPq!i7+6T"\,5bffU*d2A4_qd8nj$;ff-&.f(P]\P$L\1V6-'a<;;OhPXM2YBQ'"'/F,K'`L6VBopbh*MRiALWW,M?aM)">`FKLm:KGm(>Y$uR%2slhUs$c5qbO7C=![@>R.m7$Rij:F)S_E1$4o6hgDb?"Q&R0pd,q$06JJ\QDKNa3S^j4XUK4KgWfM!,[jhDWmL7pS*d*)oRZZg2aE%;~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1350
>>
stream
Gb!<O9lo&I&;KZQ'mioCMBqsKhjgQXdW&07W9p;D!?kMY/J;Fk88e:i]-&D&YtVQG3h"4b=>M5,fR4N[G9I/3rNc-H<WfuUKDUr8o3j`b(-3Ut0B%]Vg#k03O8U>_^^3ml)#<*K!rE)"3"lkB:-A);$rS`udNjK"APS\S;XeC,P->''_Xuq-""/r=,RqR]=VRe(cMYJ7I@lf8SLBLgO6<_E9<EOc-XM'gDK^M?N(1$O:`HH$k]eXN+rJocq"XHan)9fg:hMR5/,7(3b[q&+^7W3[H[(09XCQtK"cVnXr6d4%AMf?5-X^ZZ[F%Xsg;mu@jGFbMi4uuW$eL&Na0.JrS2Be'6;Oeup2q0<RfoohK"jmnH@?4CC<E-DCq8muBUs8&qJ2R;=pG_,,[\*lm:=#&Lp<1]f%N"6R<^LPpo?VZ^u1cbZ/Gkp$Ts(ukR^bUSMnj9WmWR=BN.W(6XAi=A2MtUntOa>Pjf\Hq"7eq#4H.2\`nrVPdn6D2L(T]<Gqj;cV,e,hVa%YGepT83])(#RJV?!s7(4/3>u4)n-YK0PbNCB5!>4S^;IW,I.);&enZ93iXIjE'A#D%@.c?Y5A^qKcHoWSj()XKm>e!MYc:MbN<X8QDh0`=fNhNi-0fn(NsP;Z*62D)gl8ds=C?[]'r&iZai0u2E4]d)W,I$(rQ)%l?d!EHDoo6$]!ri3p2^LD%Va,F2f:kfo8-_@)\B==KsIZZ;%u3t$ClVX?7a=el-,E[gUmi[F0R1t24pX_[DBGOkEE_eecn_I<*WjRlDeMn,W-=@d&YH$LPUARJ^YL6k[t8(=;E;C7<4k%o1iR1Die%tXF%>%WkX9WP>`&.e1<-_rfVjk%(1XbKmH3N.XJ#dA,*eHgD,ROmPuBBN%6\hQ?pA]&3$EDhbiXVC06a1Y4hq[e[[)a[tLX9=8%l^+#m?blXI5]AoPF3Zh]mRAF<<Wi1\5I7Ln[8aq*-aCjTrN]VcH)n=u^_K/UA^H8.WPi)B4f`fZ8=aT5h=D?g%9bf?3s[hfFebPZ-%Kg>1S!ZjbgetNBT3+GH@W11a9gna7^$:!@LPZs5GRIctd4#<b]kH:je':_bIDD!a4d\.th(E'f.I*$N.b/Ur^R6AT7FN!c4HJS\Z@FIg!2m_bmlsXr:(Vh%L3EGnsYj'B%pAJsJk2tt+D[)r)m'Kul0c.<RB61RhT_d*__f2=:\<b0J44^es:n%s?<:LmqV4&&E\k9PsmZbm-mn^PmZBlYH00.hEq[V:2`M1RR]=]SL#Z4c0&]N+5Y#He&3dnq2NH;#V[eo@JUAa@BpX9^2r_>OQ'ce7M1rR;=0PFB6K6aB+p4;U3HJ0i.q\r_g#Oq~>endstream
endobj
xref
0 29
0000000000 65535 f
0000000061 00000 n
0000000123 00000 n
0000000230 00000 n
0000000342 00000 n
0000000447 00000 n
0000000652 00000 n
0000000857 00000 n
0000001062 00000 n
0000001267 00000 n
0000001472 00000 n
0000001556 00000 n
0000001762 00000 n
0000001968 00000 n
0000002174 00000 n
0000002380 00000 n
0000002586 00000 n
0000002656 00000 n
0000002941 00000 n
0000003061 00000 n
0000005057 00000 n
0000006403 00000 n
0000007714 00000 n
0000009460 00000 n
0000011249 00000 n
0000012711 00000 n
0000014554 00000 n
0000016428 00000 n
0000018257 00000 n
trailer
<<
/ID
[<2a963c3a26f31af55617bdce2d2e6bf5><2a963c3a26f31af55617bdce2d2e6bf5>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 29
>>
startxref
19699
%%EOF

Binary file not shown.

Binary file not shown.

View File

@@ -92,7 +92,7 @@ endobj
endobj endobj
13 0 obj 13 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260520093344+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260520093344+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 12 Huiswerk) /Trapped /False /Subject (\(unspecified\)) /Title (Les 12 Huiswerk) /Trapped /False
>> >>
endobj endobj
@@ -169,7 +169,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<f3027a8d2312895e62b8ae303848b605><f3027a8d2312895e62b8ae303848b605>] [<79e8326966c5c98df280e802b5bd3c63><79e8326966c5c98df280e802b5bd3c63>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R /Info 13 0 R

View File

@@ -82,7 +82,7 @@ endobj
endobj endobj
12 0 obj 12 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260520093344+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260520093344+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 12 Lesopdracht) /Trapped /False /Subject (\(unspecified\)) /Title (Les 12 Lesopdracht) /Trapped /False
>> >>
endobj endobj
@@ -150,7 +150,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<990b43d766b45755d5f398f80fe317c5><990b43d766b45755d5f398f80fe317c5>] [<ee84849e5e540483dc2efdfe46a069f8><ee84849e5e540483dc2efdfe46a069f8>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R /Info 12 0 R

View File

@@ -167,7 +167,7 @@ endobj
endobj endobj
21 0 obj 21 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260520093344+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260520093344+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 12 Lesstof) /Trapped /False /Subject (\(unspecified\)) /Title (Les 12 Lesstof) /Trapped /False
>> >>
endobj endobj
@@ -309,7 +309,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<81cf0bff9c8a5b633cd9ac4faf7d01ca><81cf0bff9c8a5b633cd9ac4faf7d01ca>] [<73c52b02e6200a193904a57b4ed003cc><73c52b02e6200a193904a57b4ed003cc>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 21 0 R /Info 21 0 R

View File

@@ -4,7 +4,7 @@
**Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = thuis. **Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = thuis.
**Demo-app:** Polderfest 2027 (verder bouwen op Les 11) **Demo-app:** Polderfest 2027 (verder bouwen op Les 11)
**Vervolg op:** Les 11 — Vercel AI SDK + chat met data **Vervolg op:** Les 11 — Vercel AI SDK + chat met data
**Aansluit op:** Les 13 — Agents + autonome multi-step workflows **Aansluit op:** Les 13 — Cursor + Vercel deploy
--- ---
@@ -333,7 +333,7 @@ Schrijf in repo-root:
--- ---
## Slide 16: Volgende les — Agents + autonomie ## Slide 16: Volgende les — Cursor + Vercel deploy
### Hoe ver kan een AI autonoom? ### Hoe ver kan een AI autonoom?
**Wat we vandaag deden:** **Wat we vandaag deden:**
@@ -341,11 +341,10 @@ Schrijf in repo-root:
- Antwoord komt terug naar gebruiker - Antwoord komt terug naar gebruiker
**Volgende les (Les 13):** **Volgende les (Les 13):**
- **AI Agents** — langere autonome workflows - Externe APIs in Next.js Server Components
- `stopWhen: stepCountIs(20)` of meer — AI plant, voert uit, evalueert, herhaalt - Cursor Composer + Background Agents
- Tools die andere tools triggeren - Deploy naar Vercel productie + preview per branch
- Stop-condities, retries, error recovery - GitHub Actions CI (lint + build)
- Voorbeeld: "Plan mijn volledige Polderfest weekend" — AI bekijkt alle dagen, maakt schema, voegt toe aan favorieten
**Daarna in deze leerlijn:** **Daarna in deze leerlijn:**
- Les 14: RAG + embeddings (semantic search op grote datasets) - Les 14: RAG + embeddings (semantic search op grote datasets)
@@ -365,7 +364,7 @@ Schrijf in repo-root:
- Tool-invocations in UI gevisualiseerd - Tool-invocations in UI gevisualiseerd
- Edge cases + error handling - Edge cases + error handling
**Volgende les:** Agents + autonomie **Volgende les:** Cursor + Vercel deploy
**Vragen? Feedback?** **Vragen? Feedback?**
@@ -390,7 +389,7 @@ Schrijf in repo-root:
| 13 | Tool Calling vs context-all | Reflectie | | 13 | Tool Calling vs context-all | Reflectie |
| 14 | Lesopdracht | Praktijk | | 14 | Lesopdracht | Praktijk |
| 15 | Huiswerk | Praktijk | | 15 | Huiswerk | Praktijk |
| 16 | Volgende les: Agents | Preview | | 16 | Volgende les: Cursor + Vercel | Preview |
| 17 | Afsluiting | Closing | | 17 | Afsluiting | Closing |
--- ---

View File

@@ -1,194 +0,0 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/PageMode /UseNone /Pages 14 0 R /Type /Catalog
>>
endobj
13 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521071303+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521071303+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 13 Huiswerk) /Trapped /False
>>
endobj
14 0 obj
<<
/Count 7 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R ] /Type /Pages
>>
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2436
>>
stream
Gatm<CN%rs(B)NcEFGLJ3H_4ji+(uF$b4s@0i2u$M)P6"5XA=YM_RZC,S_[9dbhcOL/6K[ja,N66uk8.m_*[KB-`;n,M[LS-Mh^Whu,)s8=EnJn<m)D?g-%q]ChO"A`O*7PiaH]`+!<XW4M[0$:5NJ1)?[2`,t((Y6EB9eg.LQMF9jtTrT!$+;TYndQTB;Jl%45eghM.$.1pE_D&^=^=,k^ojS\[g-O!W+(1HZ3hlmYjYJN@.%pC)B#"?:h$(JEY>(RjatflE2jHs9%5"B7kj7<j=^>Z_A!ZbNq-`c6ZSk6n9_8!8Ipln_n9l$*?h%eGrteUt;"T('eT[n%BlX0<>\?Jl@KQ0@2RQ$^AZ'7@"H28)_&8=%\//W1g@M)4h.BDB*b$IAB\uLl5L`;ccQT.An0!Bn4:$UG4-#"g73\T09o-<M2$b-j;K)+epGua##TqIh-nP$NeB%19c0m9.'LCrb4SY<NXegX:'!\09e7e3gs3Gkf!3%/*[9Z7\CED]eFr>M1#%>E*[=*9:C`c.ALrMqns0M)./7=#?>)\439El\1ZLg.h5A_ltpG6?52Hp_pZ:gNU#U@;WUnj^j.WQTLdh$\bgW/i%$Fh9'>`hjDil3O8_J0)'ZYQ?LD6rB11>1(ioIXo0ZUlY<[P8^`V;&R1f7YgSFE[ZKf/[%g&*=:R7CMD&B;Q>soFH=09Xsc*HeiTN<9;C63E3S=4U4<c";\HG]Cc?4B'lmNgjutU3I@+JSF.dgeLF%%faW3V[b/P_>bH8ZEDlX97f6e[AY'Y!YU-u5LS-6KBZ!4Alr$tej<Die,ONb/3P97\QY*ePMX1*NRj<KL9c$6Y/ZVQbfVk]?\EBITXEhLm6m?Nk8H_sm:fWgBGtC3CTR$6[q#jonA]gX.[bL'Jpi#n[$u$QO$VHDiFY=3E$)h,-KSM\JbrH!s>_UY6-9mIDieHGbDtiG&muN".hD^c*4dMPt1,j/;g/+5N)bVf"]0HN1LN_V`Hl+9FgFf9/a%)e_%qtA+j=,]OrWo7oLlV?HCUKGU,&40$[tIt]e5d?tk1t^aRl`c3>1%h+:uQh4MWFqE=Nk:"Z"L#7!U;h+>@u6)#!K6R,p(c`nDnm#^C.S*Q%Nd'bHC8_SXlEsPU:U*A**O\1Z*r9W6">GEdQEb#?6>1;"p<2E`8<oAX,5U2QKMgOt'bN9O.HsRt_V7?u@hW%!?O\O)eG](\M5apu6O<bikdoA_,5.B41$N\Y8bp&*4ZsZrhIBXk0F2-1eC@Or!\CQCj%FSYZhnAQfjD<TYZ>d'$,tAZe2LEQH30?9h\^DJ^+HVLfdkR3C$lf4JSfcCUUs^'\!G$M`..;R,W`Ys(\j'd?:$5P.=I-0/BZ4,e`sJ>$ph:WB3uB%ckub3;IDcUkfY$o]:QNqs2P86Z8b#Ail>2ePs[+%W)5J"M&hDoML7%mYN(@`_P&C<oBr]>]C?'?`I4Fe9<R(R8C+qB:'>)&TH>QKL$"1`2`-0,#-Wd;JRSlNH*b/eHu)g^%_lV/&0fYD*Ua^TEho^&"=@[.uZE,ZRbf&(%gEH%qhk*$8WX$Iu'cOhY/qhj*?X7D!JAFdg_i=BW2NOX[br6WLFs>2]qtgE>F<g_:9/r.//U:'FjC7>;,/9gBd;Y%''Tr/oH3U*&4O\X'RC]5S`.=[(k0O/=/5T<gobIAUHgmEg>n?H@Q,Z3?Re\!%"*L(Q\1%lS_YXXC=J#f]A;2LtI6"!;[QerSC@[sJ2o]\7XimuQ@lEoW',d2kp)8*_iqeZ,+0\GF&;GVT*.s+iaEER&qQ]82jeMKGCifqum6*@eI0+jMhoJ7H3F6q?jS6mX_@'#el(;lHUkqP,l+oakDfNp,4"n;)/h\j+'(S',Q9h7*rVTLY[-?aiCapRt3Bl\:9BWT_d[9p20m%[*G,0(`EtO5b!5=sf4\qaG,*G8%>pBc;/:EW@iXc6b,P<c#4hgN7#XaXR2)b00NmrWg+]Hj#$:UKZks=^qJi/a.;aR%Z*D7H:Q:X?`hn2p'+Z9VQ1*V7B4,3F2rKj$W[;)TS/d[%b8S?6IT$,2VWt5+6TJQr?WB:IU/Hp:42S,1-pNVaHd@J;GrsrS9s8B7^X,o\umfU#HHS3k7l`>&Q@AAQ##<6"B#VjTnJsY,ZNUQlYk\j7fRuQ_U,2]*A__6j5c#_$$es\b"fX[QL8<Xf4LT:g07iB=Qi_jrbq:YjZ?ZVi[`L+!=<d:9Y*tSUrf[n8q9(#_$9-ol9ID@THbh"a:GZbhC81pQ#E,K=da6qXrMVSEg"PLK:;*<Ws1Y"/kO?X\E(GkNU.jBVeh,Ca8AQ4#lQl"%sqT])CTl&(:VH3rP?'bHAta)]9GZ,J-*(#PO_I>5$oipZtm\5B\.i:-7Z*&1O?gpa_(?O+1NuMGH3G/jpD%<Ca:%p*Zj&SM[8Ca:e3%kN%p\PP8FsV`c+~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 535
>>
stream
GauI1bu3:M'SZ:1MR-!E5tJ:4a\+ZH"#KQSl?:.dj'3Rj=>mH5_qS7tSMY&Rb?>g$jEp<=cBSBj98mN6!q-Me>mL^miZ:E@L#O!mMrZU$;G3c?Ygi5#QXG*Mq;CSW+k'-J1)I1M0P_Ae(!PCe6H2&rKRkN+T-OK^BPsmQZQdk!+4[8_9,UqaQ>)oi>sIr6%:7?P9G]F]*Q@"[@Q(Vm9bl\41Du&cMpGaZ>iDuhBrG'<\&S1#WEKJ\8SN-mFa?4[bn+QF&+ke2?/LeQmnipMEO+i:Vm"O-WK`l>rG*;o;HuCC___+D8b["'2m.hh'=s$o*g)nY\]qXA_hcol]UhfVA)ZHMjDHC#qNs(29)^QB4`V%?@6M5a>Kq07M`Y@k!TH:R.Te$N't[emJs4D#<$peqCFm35`)p79^2*UrZ?.tsjY-pHehLc!'?-_gNlWFVWYJMEjPE:^^AjtqD6'5*=1-#@p8>o!gFg3sBP7[LO&+hD:t*jZA[B=\+fs^N];<75@6j<V?'>dh3&fkanf'F+h?*~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1696
>>
stream
Gb!;dgN)%,&:N_Cm-%#9/Hf,fFIUM8i\[(#8^jVdM=Np\YfrCLRAB5IM>t6s?9h]&/A'.d;orO$9Ao.<fQ2i`",^I:r/WXaVfR+XJcXmc56<0gK_]E9T6hq,iB@dJ![9H9+U8VeqgiePje."\LHK+?Bg?b_6#&lr%Q/2F(Bc:>d_O64Nr]Q7)JBFF1Z`EPb'64"cI'$Fb4igHnQgOrL)1K;M[mX@rt#TcY\m>K<CfHE$5C]?R(dkCq^Zno/56j$(I\\GeYS+`CKPNs^lqj+-WQF2[5ip'k00X?.Pl@`"7n`brkS@KiCfl#'K!=Ys4UGf"M?ikWcM,<g#DuD/X&9u0`lZVMqTEO]SeV>RKs9=B/d!'-ZEY(OM:?1o=,u]e(IW[#D?!S7lIN^?BVP.k@9G8qo#)4@=r:6/<hrEfIp4^YQ\h>\,^hBMuiY>e789<%1fE?U<ZEud34A]Dd8C[?oO(mb[^+oCQchhgV&+3_Br'B]fshLIZ3tO,`IGICLDrK[*m3j4WWnt@I5hR?Usm?K-(_T'jl!U=GVf\$%GsD<E,F][95e$R'XX\9b**GR423OK%[Wcfp3M)86ohtN'6/u=Wa`=C-u<B_o(Ed^N'Y0T+Xi?`^:Dhdp\[kH'1Tn$4EP0o5Hatnud0I2hf`'5TEd9mo#t5a,6u<A(>FtrDmcAEgXRHeVSjTXQ@k$:O/0N0kA7s8[er!:]ckJ27%C6'K64"aB`"R20;1(,.uaAb`b?>MO1ZGT%)7"*)',dHpT+g`YRD)M*5JZ),WLmIKS-T":9_kOH:K-W4G_V!bXftiPmW&d!G>O%UaDJAP&_R3RAr#DYu2XTm85h"GBLpe*B"/ElNN$;'MjfHp-Tc+K@We1$8@G5\4673R&%-\I4h)WX*_a/f$P<kV7J!?=nP/'bD[F?k#4`EeJrF*'D54I/2be8S[g-I>hdX&Uk+r<5]T(m[sU<2YCdP_rir*p7PNU4A$C<a`:D-A2-BgMskS='QujFd^5AX2tuI%'D>/Pp$VcsF4+F_W/GL*U/5ZQ2LHfSns5Rp:`!_:F+>'**ZEP<,-A<&'D%JcN9K$FPMn$O9?G3GAGDIR8dS!`L+fd.PDd4Z/3VgKUSkHF!K7N&m[9Z*.`-QZDb&,XOqM>]X&-tKV#90`gk'saikeUj.fH*O:<q)=VUHT6R&"s^qphd*ZE>Od0KD&smnHd$a-2Qgl$,di[aK/Rf&3pbIh7mQ=d:<p_ulaE`@S`\W3#m"U,19$lK$uC_qetG71u(Q^sGhOPL:FG[RPEf,n_\L`;`G%,[)L?<og[aX.IjQP2QFS\QsluAS-"Pr8o3APW^g/3[6=j1XZ'`70q519rC:1H:oJLrQQHO]nHr(FRXG!,'6C02Mf^#cNS+Ld;\cI;nssj];?/BA*tTXp=&n/HM,Mn'ZicLEM6BWni)KkN7#Via5+@!aoCi!_'sF^45!MBXf9.8VJ@r&\t;qKhctrH\t@*L:YIr!ZaDH&(jA2ao]%eM9Y)o:Qf&h"Cb_D_Cq="?YVA[2)CU?:YOcnWP4%MIH=JY30!S$<fd[Gs`g(X_&CYH\)Z+$!4ecd%9B/LthqSHDDJ%LPZch;(7n4o/iGVp\+%/s48Ifa&=%-k9BsHH@o#05;j5g3igg9+3jN%3XF-7Q\Bi:j@Bn%Tl2sHq=Wt>0.q[Unkc:)n&Jp5HU]RKqRG(%I~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1699
>>
stream
Gau`SgN)%,&:N_Cm.a.I'*MAL9PSne2]'f9:=H0/6^6gh'I5Ep73O*mg._LZ$XQ*@[]I'(E@d/A/V155fKIC]",\2OI)d,?dj[D,c@Bo%/q?M;@JU>&9ta=DiB@dJ![9H9+U8VeqZl62b<bsB%sc5]dt$XIK%,`m*GXLl0*kY[V1HTKNr]Q7)JBFF1Z`EPb'ZL&cI'$Fb4ifso/hETdL1ohYsXuI5D%i"eh,%<$:uXEJV%S?POmD@T>A][BrZDX'Iir\QR6%h0]P9G-YEs]<)liHAe%%n$^2@lbiJF?9L$DdT(OtXQU295BX!Krb#H.Z]\Fd_B2ef[ir0QBP<8n,!d]Kgg*?F+@iA0<KS>Ak)gC'N\2.;Z?i#k0>`na2fi!k9KMnd>2QjYhP-Dab@uKWm`1F<o%F^8=-t`m,>c>GH$eC>X"F<Fo"T/)GA,)8t&#fZ*c:dNOJOPG\*6E*(>K1@<Z+':mUp?UNp(*eMjCtpO-b@K^;9VAD=NJ#WL:BQ#h8JZ%'GnX?D8(B<iVO(58GH24abaIM-LNekVQ,O_n8%tF0(O9c-O+1H$WF4W"I!bI\1]T7OLiB7@YFH)45k22XLgs<ZrO>A3-cIHb2hRaN6/m]9Dj6s9MSe978@7efbh4IMXlBSl.k?\[cgsl#k%sa=%TW.o7q;OhH$#V?JGE<AZ]"1`EssAn6n+[RX.1/`G(MGNFEaD]uM&OY,u^_`F)Oe]T#YJaWP9_PI%*WeC7559Wj3IKM!/A/\3#;Hd9W-(0jJ_5WN%>Uf%8?E/#QM"uun5Jl'>q/"/`hd:54fdD;1"N?6Y9#Hln\@5Ysi[CQq]2CV"sQVGO=7kmn1R'2qa:QfO"PVps?Y75m4:+>rFM\7iF+A*+b?XGsCaA="]:cFKJ8)]10,r&c.A!BfDIVkZ=D:7Lm[eCjqV.,!#MR5F!,F$mu'VAN0n9&m[8&t,\AkkO-[+(O'h>hkOFd+(P"%5a;ho'+b\J[pA`3Ntq&0R0OPMM"oV1JC1K=-h9'eRZ:Bm_`=W8Q_>kj7g<bmpNn^'M*`V`,,&JcrrV^NTPAE)1F4k-9=8GN2=pDp#`IM.7+h:J0lcpi]_snFc=c3[[;_jSY"[$?+,1$^2B=$!"5Z@sg^TmJSETYhJIt0gapt:+>o892*E_idp[@,pouBeUd0]9W5NgNe+Oh''"GN'&tNb!2G1M4"`6lg1ut/OkVEgDqi?]CTUs,B^;o[d2[Kkb`cB%M_qG`Nn1NCWjT[VSLuF%$(aV#>+LaDP1HM;:j(Q6XQ/I=3G'NV*?Ds^:Z)5F@j-*kr[r<[<_ZJU0C'>m++a9cneN(u?:q\E@nqsK6^!oOqj5OV&ERuGLVBC\r^5/O;%[ZWq7W%5K_Cp'eQBre.KigJa]`e=*!9iY8p3FhP+@::@!(m\a%G2dQL0,#=CGtOmr"m?/&'JAPLjHtCa/Sf%ke5te0F=JGY&LJW1%m]SP9Toked74Cq#%C]RR-jC+P59q\6kXkYh!#T#8S`J[i$]'8=Q7Uq3OLGNWD3a$+5/\<!`?*-XpQI_Nf\@5$E,8(/J8a#]fs+P96ugKhd[grS+7MF;g@g?qGt6%&E063F-0\$!R!Xk*0^`,5<+jh*$l>KSqGf7Z<%@9\qka`:sUh0f_bpC::%^D;0^_ikn_cDMqW_^;?]Za>M=cVY/CU#<i$\E8>:VYPc:0>G_$mJ~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1837
>>
stream
Gb!;d>>O9K'Roe[380^R$AOu=gl0acJ7Z>`/+u<P^?!8c6SLKCeom]Zec4J^G%*NE_F8-B#U3k9o:>>TkF=6!pgWpRBEGCsK^JLB(l.&f0L5gM5Jk7`qsG'!\/#^5Dl=as+G'!1TGW"n84?Ln!sXKp@^H,D(bm?k_"!rG9LE7IlrT5Kd>DZ`J/BVu;0U=_6ue6]"d)C\\'NCr)+Q>&C<d<'2STNP44mf;(=a4S18uQ.-SROVFE.X/o!'dAo/oh-c`44sGm,G<2=)B%m?V<]<]5\Vp<'9.FCMRk",7UGr7/pSi<s!*iD[FKs3[.JI/#Bgb%k3d2RoBsEKZ"uHU(rbW!alik=d`j`-7<jA?Eg6+"^uMTnJ#Sa!GF@gU5PkRSYJ-DiL7^/jYk*]Y>X,HQoY!_ZscjF&;7%JGTBS/[iuo4Y;6(6A,IXc`+tS;q?@f>9MWlM*0Ls8F`=<jSWtt7SiWs488$5Ej*LWg[AG;eBt=QRE%hDB)uEli7n<">i/(Nqs7V708)2p^AZp+=#GFlpg&9`M.?VkmLoNe*sY;'15R1"UR;LgYY$I*#$87#V?o`LB]Gf-:]YDX_dt&L^WR4MAomP.'W+S34,S[.%.e,#D\[P(D8K:nE<`8!O@-Rb,^6Y,I-N!7Q,[PpGD<liJ1rscV;g/h.u'F@jWb$:rd<7OiMfO[@Oh^_\?JdiR:uH#2N5,['hMt,)rqSNYSb*Y&U7f=j!p[=PuSDsG+@33RC'q,b!$JBJ%UT^<d3EOmDX>Q^0)<BhR^#8Sp]4_,Gt.I,Vd1__gH?5XY>uQ%(2b^F!hC#mS<NJ=]QQ/UVY>kUTmW5T%WB67,`5$No2i=jF2mCNC/2eRL<7o<-*Oi<r&OgDO+8$*O!rT-`Zd>%,9)UVg,b_OM24B,+mX&o]<fgP$G\B<r%_XVc`E)_B*2P_53^Y4<h%`;QhIQT'2qf2SHJZ:Rc-4O)=@Um61L#Xn1H5d8RGV*H&&/G>;t*D.o)!P\4R!g9!1RQgV<9^<*_6(6;6;iL?0/-./O:8Y-`reu%t<1!:WP.0VNR^TB_UQXFY7Xs:FFI:eBZRh-BER(tA=9gJ%&24duj(WBm1(QSLRN2sO^Ae[<_S3Yg&-5u/u)FkR[S'Gm1$*B]]V-Q_W@Al9?/[Zg`,#hCp?SRI%Ok6`j/Vm8]ePPWO2UYe+YQ/=i1n.YQm0Z1&s1"@u)q4\OG$q\@jgo3Uks.>5oCJM2h;cY\g4u>E'4'En#IT\^j9Vf%f+,MSkO$'SDd`f.a[HE="`2/pCg85%Qfp[nCuO`G`?ccIQ2n)E^0*U4[J0gB)\tF227mh)#de>Ke/&,@JSTUYCr7GX*tA3eiX2[P*l=FtPPtdc=Xo6.TUE,@XU,C9[XJI<NHI6SZ(\Y[")"SY9Z\>-[Y'@Q(hZ5%=Nu^;3FR"##U4h\h?o5*L^6SWLn9A*<#2UJr\t+T0*Ps7bCr0QM[G7O`paJ^?a;Vb49QfbEHG:f+o6R-JKQ48^,@!^gqg_pb'q=7Vl6+X#kG2P^/)-)`l$B171F2Qn).lgr[c*kG$e:OO3Y_V'C['t-7iat3-@!"n7LgIDY`M;CTP(OboRo63VD,.pHiFu2J)nrj@be)ITkIbb&qn=G>O7A*gnBt:f@8)Mn5,FUmpUIL;Wk1ke8Jak;J("`G92cG"qSu$JN@XGs6p!I?)k1<G%&"1Q8qg>.oNrd!`#mCR$2*p0ZRkH0[6#Z.W="rpRP[_:]\Q-sVJZdWBQj^-=Zt:ACu4pGRqglLe.EZrQ/SoQlZ:PG\$<-k9VtrWTm6>YsN^(o@H0o.2AmM_FF52f[RhDu2>D^lJ!Z(_>K<]QFcn~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2009
>>
stream
Gb"/'gMYb*&:N/3%"cI<BcBO;.#Dul"d66,!sIFsj)eZ+:g%CIV7K*iS6h;,hk@2j@Ri_R^24il1.<80+_T(/7DZnQXhKE)i+N/s-PRt]aX<aOE1!03X,1h-&EY[5gH[;u=rme*=o&["KopoQ&BA9%"_"u1\/`#O6jQQg_f;hP?-"=>H=B\nY%,%p!tj%+KQCe=73'<dC//TcnSXD+lkA)8O#W,ABP.4(@+^)iUcMJ5'9h.Q%?hVuDu]fU$?+@H/:qH%7W>&A)(ZLr)0=d+FT8Qn_Eu@)]TaoaV-,>_[0MmgQorc;Xl4?E-JUB4+7[Zf!Ru][AQW3\r,[kpO1tr6+.P3]GIXS'P/A22>uM;-6O*(o.rJJ!1;`#\G9Af2:$UK9/M`\d9TtCB2C=l!S5@gGlRd;7-SW+i]V0pT%Fm=]f[$mt_mX77V_au_#ggB\4u+NMV>Wcf"#@Jk!lOB,M"!oIA2C`jZ,Sm[Q:Bt8qGZk]_23?,b'P-Q)ZNpo1QU08B1r:o>YE_Dg9Xjrqa+u0bdXckpeHP3&U"t_1La8n*VTg:UGOD-R#]TgKkV`B1u0,A"@niM-X<e"J4lXlBgo2&]A;gsH<Rr?`@8`'5npIITV#l9&!h%?`>Pn6f='TqR$B8)q:ChFQF"445=7<Q_26_7)>OXK/5fmJq=/RV/4bgVJhVa,npONRb"i"abM6/sG9q2JKfBuMRc:f851`b!ao"34N1e%BH1(R'+qNUEYt&,9<j21A3SU`S=f#gBKo]]Kns,B[YYc5Z`:cm&OofBm;k\GZf3/e:.6t9eXEM2-i3$8lDq>aB**ijUp._)=42g3W]A=ac5(V*s3+IUL_()CdNME&9<r*`)0rOHh=jXQ!<<#=dJLe[mA$ZCrqmj'VLn97PgY.VTg%;`m"i18DMH=l**dEW!PS_doh"7W6*X-7U-n*4tp@IdCbi&^NnerjB0$_m%44H>Q*IZh8'j=!T"DWqX<JUWp3g\52dS)!:3$%B;1:>HWrA[KfSa#";!A)hg?P'ld.__Xda(*cti%+S$qE_+AoCe&=;^\'WgN4._0IrnhWe0RGc/\<9qjMda]V8jDh_Fs'F%g!TDMA.-L:cJhL8m*-G:A_q'qWH[RAeSD3jOJHF5/?5CI<!:Hd;r.@iFlBVjd=N?53!sCO2KD\753,@Q_<0VG4"![j:-=8`X<Vm*1he>ka0NBCu`CXgr)<p\&qQ-<[=nK;FP*0mk51lr"&Afq?P6h11(p-AtJ"Ysi$YAoKabC+YpM6Ig.u02fF))#WB/&jV)PET"fC0YlQ8#d5GZ`WE)?;?r&.NI&2P2l%8W!DqMsg-45A!b?QpB5.hscPtCS_]Rd`baXXqA@YDSb7u&IYkqN<E@kH1ZpSl5auhu1YIT$$6V`mDU>TV`M4m&sK!dl_$CCIt_94e#"NTnM_W)mkX%lVIYq"GYcB$t9kp_*QI_o+>@LEp'<P\p.@ocslW="r?Tk3rMO3k@[$\'J[b:LogmY1dOY&gV'2>JPV_B>(8@TuLd>FNc5\f5"+VMh%3eCo;]lgZ_>",quj>[E\(0'BjUV]rW96)dW]&g:+M%q!(t4!F,6Xte^u=AGu/Nou6Q_M7%N'aGD3'`DD%s/nCiGg;j@s5Z,jq56f;LW1<>ngPPMFAL-VW7F=ENV_OX_ps9G[j$9<*NE-'9c.gA_X:Z&D/3upZ[1ETDge7`mM.uK*ih]00m1+oDDAQ=XH[-][g*8;s8#.>cd[fl7VMWCo]o>e.;,U>=^#BG%,%C<>V&m;q17<^/QTfN_MgX.RIbLD3orY"RbiLbVWo3hr)!`&%j8f?NmL3Qp\!j<.%D;W"Xh,"?[Y6m<%\+(O/R;^GSGW)!W:TRo;g3M%DN=\cd1^`5.Ee1TYt;"Xt&R\fKKXFqZ15WNb_q0m["Z"m@cu!5`2TJX3<QRn(B<>,bZcm,q+6i,KuacR7qM3&CEDLgQjrNVP.>)I^'7F<>mGW10O2qE0Woa<+6.7cI;%7D(u4S5;>1f^A~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1570
>>
stream
Gb!ksbBDVu&DcY&As:e;/X-7mmE0EH-TsJ('!',D)i0.q=<t]_TRG7Yr-JYkorr74D)YbMH;GjkpC7B`(LmdQ^8V&a)M%!,q!f.-Peh/B1a3OUhS@=fjR\&/KV_NS,g:ioB0c%7rIM*u/]7reEgBYFJs9e["AqW[QK8u<S<p*0"YF-XCdN]K8W[NrOGq1NQ9:NVP(YQcN_#Zcq;M8!^Wa6TP@X:qh&P8WL)+l9e.sp#83l2lL04UkDh%ZZ)IBC8Qsumk%DQ+!MNrlU@jtZqSmE6YN>3bP&@\B7>pEPM'P99XHfhj3n=qZa;&H,'n_XTS1k\rD1j;9i#MaO9OtDH2&*Q.\oms#\`^gjM&T5UfR,bh)gBDoGU2>kFCL\#HO4fWM"[@[XlXgn?:*SlC^Aq$^8_iOW7@h5*O03M]ldH'E.e%/s`jFFRaolD%r:XE2Bn_k$F(EULEJ$1Cn+tUmG0`/;Q5`^/q-S*HggaU)G>63(l=[%Mofe1,BktLqO+e[+=."P8M1t@D55;jC6>=Zs@p-A8E("?"gECu!AF/n>IA]NS[CEZ>6fL<Uf#<5^%:ZmG)gimc;8.u!&`1rAp;X*:Y-$tA<Ei'G<BDc/"P&<MPUTB+pkp`Q`RW/@1X_L)\u)N^YgD;U#(t*^_OR8<iPK)H=H\+PrC3'@F(mqIjj^:Z?=84_$.6UVX#44*hjXAi'9".[4iTJJlqCR-lP!*I.1Q!pSFHH6T:6.\=iNd-(l"J!H?IM0F5XsdKZ%i=Q&oTZ?LG7VCXfQ^pG=F0)\#FhM(-]>L-7#,;%daU5#7b$"DT/`^8M4F["b<@SN@O)(@n?E^`+D3PbRB^@0XQ]'.2LuU)8bN?\?_Mg>0cY^h<s?K5='9D@2p&Y4W(dIL"VQJHmaq)P]_Tg'lkipU>YfI!Q"ajGDXd__kkMo9@3kNi/KWqbD'^IF3+[K7FtWaao!0@S:";&+SGu!Rt>G8(8X@?3.#-+ETS5%^3HqZ]@H&[n>nm_Lo$+E6IQi0C)KpS.h$?@,i3h\?+D0G;c@5H;@,>YeA'!B][qVa5N#.7UZ=HrAG.Cp)JkX8WTB7fo"5,3TL3ZPR@?B_c$mMc0AUDW3rXu',ljTk9u3R;oJ;<267JsLdSR25fCH\C*fk\Vc\dbm70@BY[G#mr6+#hFh;@hQ;0<'#CtG)@QJ0[mWbppgpeXLF;+U*7;#][=2Bgf<8@npXOWkS(V5_fjV[)"k0-E:Zqpr-HMf>MU9)ACjl))DKBt#@c?`[`mU!*U$LqfK7PQ,E%GB-d%C$r.)#UQeQK1?'Tnnl%@CqD>Rh)(BIoNmIqa!=PA7tmEM8%Y=Sg!W(CK)kkVUbV2.h7C'*%X"iQb9KGq3YUJk"e8]b[ssb/I;9Zkc:[=4%rs#G'/'0I!5haP-9Rp2^!cCX8//OAr^a&GVnhb?E(ZoS_jg#"4gPrclcbFHImRjEo)D0m@e^9`(-8?Y,d0I*Nu`a_h+t$Ab#e[-[qBWK&/>_>1anK"%9URErc#5eWlKA>*tr?_o3AASS/e5/7i$'!gfoi-pQVl"'@1Y"n;(JNYEg6rWJYYAB+~>endstream
endobj
xref
0 22
0000000000 65535 f
0000000061 00000 n
0000000112 00000 n
0000000219 00000 n
0000000331 00000 n
0000000436 00000 n
0000000641 00000 n
0000000846 00000 n
0000001051 00000 n
0000001256 00000 n
0000001461 00000 n
0000001667 00000 n
0000001873 00000 n
0000001943 00000 n
0000002236 00000 n
0000002334 00000 n
0000004862 00000 n
0000005488 00000 n
0000007276 00000 n
0000009067 00000 n
0000010996 00000 n
0000013097 00000 n
trailer
<<
/ID
[<464a00a4f31894d5e1fb188fac933ea2><464a00a4f31894d5e1fb188fac933ea2>]
% ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R
/Root 12 0 R
/Size 22
>>
startxref
14759
%%EOF

View File

@@ -1,4 +1,4 @@
# Les 15 — Externe APIs + Cursor + Vercel # Les 13 — Externe APIs + Cursor + Vercel
## Docenttekst (Klas A — 3 uur, fysiek, demo-driven) ## Docenttekst (Klas A — 3 uur, fysiek, demo-driven)
**Les:** 14 van 18 **Les:** 14 van 18
@@ -41,7 +41,7 @@
### 4. Folder & terminal-tabs ### 4. Folder & terminal-tabs
- Werk-folder: `~/novi/novi-lessons/Les15-Cursor-Vercel-Deploy/live` - Werk-folder: `~/novi/novi-lessons/Les13-Cursor-Vercel-Deploy/live`
- 3 terminal tabs: project root, git-watcher (`watch git status`), Vercel CLI - 3 terminal tabs: project root, git-watcher (`watch git status`), Vercel CLI
- Cursor open met empty folder klaar - Cursor open met empty folder klaar
- Browser tabs vooraf open: - Browser tabs vooraf open:
@@ -164,7 +164,7 @@ Waarom belangrijk? Background Agent kan typo's maken. CI vangt dat op voor je me
`*[Terminal:]*` `*[Terminal:]*`
```bash ```bash
cd ~/novi/novi-lessons/Les15-Cursor-Vercel-Deploy cd ~/novi/novi-lessons/Les13-Cursor-Vercel-Deploy
pnpm create next-app@latest pokedex \ pnpm create next-app@latest pokedex \
--typescript --tailwind --app --no-src-dir --import-alias "@/*" --typescript --tailwind --app --no-src-dir --import-alias "@/*"
cd pokedex cd pokedex
@@ -508,7 +508,7 @@ Vragen?"
- Push working `pokedex` repo naar GitHub als referentie voor studenten - Push working `pokedex` repo naar GitHub als referentie voor studenten
- Brightspace: link naar referentie-repo + huiswerk-instructies - Brightspace: link naar referentie-repo + huiswerk-instructies
- Verzamel vragen die niet beantwoord — terug in Les 15 opening - Verzamel vragen die niet beantwoord — terug in Les 13 opening
- Voor Klas B (later): check of Cursor Pro licenties beschikbaar zijn voor studenten, anders Background Agent demo moeilijk - Voor Klas B (later): check of Cursor Pro licenties beschikbaar zijn voor studenten, anders Background Agent demo moeilijk
--- ---

View File

@@ -1,9 +1,9 @@
# Les 15 — Huiswerk # Les 13 — Huiswerk
## Background Agent + CI + branch protection + DEPLOY.md ## Background Agent + CI + branch protection + DEPLOY.md
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht **Opleiding:** NOVI Hogeschool Utrecht
**Deadline:** Voor Les 16 — MCP servers **Deadline:** Voor Les 14 — MCP servers
**Inleveren:** GitHub repo URL + Vercel productie URL + DEPLOY.md **Inleveren:** GitHub repo URL + Vercel productie URL + DEPLOY.md
--- ---

View File

@@ -97,8 +97,8 @@ endobj
endobj endobj
13 0 obj 13 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521105950+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521105950+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084028+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084028+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 15 Huiswerk) /Trapped /False /Subject (\(unspecified\)) /Title (Les 13 Huiswerk) /Trapped /False
>> >>
endobj endobj
14 0 obj 14 0 obj
@@ -108,52 +108,52 @@ endobj
endobj endobj
15 0 obj 15 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2334 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2335
>> >>
stream stream
Gatm<8TWXr'#*s=oOTMp+p88i0S``km&nK)4H:aeYK@Z=KI#7cWK<@8RD\phY5ps4[FioP*2b%o"M4JGo^W"k./ksmR4\Ns:>ke8#)pH1#0\GY9YS;tM>+n44QMVH!"kBOQii2!rWi,O.j50i)"X,GU_/`O&&)RBb#e_cF]$($W"mN_GRR+WdRa4",RZpVm]@9Nj;_1s,RD;4GJ1C[C@bmI>3jPZmQV&r)9d\Q;M@mp$_dVJ9,RX$p%pasY3)`U(KFJN+)S..7131e7rWW85&6V"BiPB+eZC=$eP_\"F-p4MjFu/BORJ*Xpjtuio"V+-=9+uFH#onKRniB?1=+,HfKdgPkgYTfOBY@F_+57F!]T.*O*`%Q>C(`4FDdsPi'U0t%J?3Aqa2fWru=Aj\Hg+WTg?Kdg3tRu,%<8dBoL$e/>p^OUu($PiE9`0K_Ei-Y:T>pRSi"@SSu:8-jHBSn8P!+PEH<lc7r@QM&M6-GWP1rTL][:+a+n=.VU#Plo___S2*$tZ+C6rh2Tcf)XWggC[>5,5Q\qNl[ekb#;!l*g#SP"lVc^78(8.9Cr*pH2I-M1N%*$r_$*5?,,J/lLToZ)mO!t';ns(RAr;7d:i8s9cEma'p2,uLbj0"LAoKZKXFcf.mMnHgF],(E=OgEPdPe:$*.._EilfsRP%Aen@o-1$9+GRXE.Ua^^uoUP&!*12)s<lfe:?J[c>D-2PgD!JI,4hil@P.q;/$PF+f8A%^*bjX[Yu82'k:WcGFU.PD9G+LT!m0H&Fr[@hQ%nPnkpJuZ;IhZZkLu"(moh[Wi?tRWAJU<H1hQR>qMs(bOT]14Fi:;7q"G3$ZoORb2]-ieZcACTCV^IHAZFHWXoQXF10)5<q+/kQ[;)G#MPr7:%IW:"Ak/roKW%!(irf_lTGEdmjN3:).5hm&kgkP:A,@*Li"L*;hE1g3-](nSV/<a@GKBnXL%E`E0C*I0CXbkb>_o^Kf5>7$?m_3+YE8Mjr(aO?ni0tk:j;-%#!F(**e0q,>.>FYfdi8V[/:VHQeRGdd_O=CSfV18X.qD]7aojW@g"%RbA)(-T-(EY^erF5jA6AY[Hm.+Yes&7A""6%C#Jg\0D<g8]Uq$0g9]MiT0!RHdDJ\]FK[Qc#!iuT;Z-@WDm:-8*fbjbCC)#hN6.>C44^N/XD,,WYK%O$Ir+VXA00i)dQEK)]E"=TVGD[9`<I>^T0Cq7A"U%cO#!&e/X]&@A]32N?2a`"h/aYn()V[\T$D@9<TJ?b#ppK-)q0=dq>O42;#->6%Zjiot.oWoa4M9o#a#.T'b_<BW51jM-6N".ror"q'%'rd_^A&8]7&"`:><n'Gt:Wpn8cRK>Jo#I_%8p1!!Os0*bulg0)"`LO;&oD!%Ob)oEag:(/.b6^YUiX`q(5MjQNMJB^?:#&\l+*lGIgIn?1RlEk4k(%g)+hFP92_&+<(4DU920b^/"=QM`=M$^Ikc8G>B6:bX0Ra@Q6[ZI`=c+Dj8q1aYJ3Bk6FOJ?n3DG0t!)n7qHp;k_5#b0MIa>#QTSf_H6+q.b-r&A0OTl/>i`].T&X\DisLUsFbb+-q3es!-FHC9[cZar)_:[!^Q5KB;3WBIOI<WA/rHpnk<D9<g%[8(O1g:Lqio%P@\[4a1<)76STr#^0,:s?7mbsp=3-ZKS[`AP?/Imb/<W#?O'ggGtd!uRi_*._CrNYa!5BaZUQZ>+eP)8ZUS,Y5l\8EJl^I^>;G2jn9SdX7@])l<GJEcjSqa-5_N!:rtd(-X@\s"k0dN!!0+O#$Y2[OUF$]=hDpV/>RS+o4t90fT3.s"Es;i_ksFgYrZ99-jMVMORX>ICM&_G?(]u>hs*@rrD8\WES6eT_[ULp9I&J<gak=q.te`OohW,#2TI/Sci2<!j]iIqc20fV76&2<6_(,&ksKgKA3EVQ06s`/C\dN:Hlk1Yh_NHa4,n#WDZ/C5#N;hp)(=RZ@M?aOAVeXGYE/84k9<)rq8ihM+'Kb6Mbk`l@o15Iih.Y:SZm)grpX@Pj+A@p@2O8;5V*^i0\jl\.j+LZbVQnW;])(\k'u[CYB/k]e3%FA<2<8[bCC;Rf;J9=skFN)aP"@]'aSgLe-G3_$oT)2+_[Z75&_i^/Gu6D\!G`)jSq;@Mm/k"QF.Fh"PN.jqr[tMRK[F6=j7d=6nG-7AeV;.WmsD54s5ebS=i]T1:.75pE"ZW8WMWdGck`O%!edQ/a('DQmq'N>gtkUWOq8k7h4\:s8Ec@#j!7YM+uoce+UnP2sS&[dJ.ar`/$U!FbDfCe^G"VFBh@Pa3Y=ef9f:]El/P2iEZ&dF"42`Qui8$p+F*1o[*a<t"Ns%rsn*BE~>endstream Gatm<8TWXr'#*s=oOTMp+p88i0S``km&nK)4H:aeYK@Z=KI#7cWK<@8RD\phY5ps4[FioP*2b%o"M4JGo^W"k./ksmR4\Ns:>ke8#)pH1#0\GY9YS;tM>+n44QMVH!"kBOQii2!rWi,O.j50i)"X,GU_/`O&&)RBb#e_cF]$($W"mN_GRR+WdRa4",RZpVm]@9Nj;_1s,RD;4GJ1C[C@bmI>3jPZmQV&r)9d\Q;M@mp$_dVJ9,RX$p%pasY3)`U(KFJN+)S..7131e7rWW85&6V"BiPB+eZC=$eP_\"F-p4MjFu/BORJ*Xpjtuio"V+-R"3NK]X^u69dfZZRHJ,_C`qqcFQu=naK;;4?mLU3JXc2&a1W&9/Nl<*3]Btcn0'-KLAK01rLjq<Ih!Xpg]M&<clc_BD*JdK&[<1C1reNmQ;cp8;K)'9n>nB(6@3FR=-e.Hbp`)1cF7/,'SFb:Gdu(Q8]_-Fk85_d7#aTQ4<8St:o&p.&3GpYPr+RcFroC@:73'Kf\M1tmRCkCNV:No20LQ&+9>u8otYsl!u>CPCiW5LFfFm,,O,PW[U<K_RkB=)`Y<'JhuY)ZOjYZG6eLiOG8&$O.:A#91IXVm-oWJ-BA*D$q_h#ak&n'a1H:k6<l%FRGE*co3[rM]XQlfcBq&0MNkPI3n`B(daYGrH0rQSM,mQ5<35Hnji,^j9LI]VTNH<HCC-Z`>k;MWT9'DQ`^@)#EFhpVtW3h>^&5t,MhijNg>=K.*MD;?B4&2'c[UgO6:YY._#l,k[mo>McH)ZfKfdPJhg55)L$qro><E0JTc@R[o0$c`?[]ALhAQ`?bRg1WeqC#&#AUuJ7<I#S6W>]rgk>U5d?;E9b<u#2\Gg=kWcO0Z]r,Q^Hmm)46Z:TM9SH.qPR/Y-4"_/&.FhO^2pDl[T-Ne1@>[e#oaiSu5(9u,;I7eJS#m]omZ'2Bp5E*38LNOBH*DUY4mfi^[I[M[%\'QJN6K)gX/YkhLdQBm@%P6b9lPueQLOkQASV)j)Img:7"*XKLn._SdIP4+;?98'\ENR_o3f-a=D3n'N.Fhu6?W0%[qkV6W'Gg3$$Ri\q'Genu/0q*tV!'TcY5sr<&pGV;2@2B/1WG3Q1Rq_JE:4Z/Ph3`*Z+4]PpCe8m,aBiQi+RQ<DAgg[e/L/h>HR?t\AcnC6FDD=6(s`^Q.:^7BVUKcCI=jI&TguePc::$l??7+Wp!CLl8aFaQ(!>'--T?:Y0d>gV;O7-i8(t^.MpBWD<Ve2<B87c\4"kTF8F*;V?S!j.nK1(Xa[b2\6]396XEpYf<bF'+"^KN4#&8XA498>-XVNP6<\VP5)EB_J63khN<2I@$:"/MA5JYHh+ota49eprp#TS?905eUoT0SRK$Bh8F(=tIabc^DD@#i8T_2&<EY1+J)6auLdD4#q_INA,oe39X7%G)fW.NlPg)F`B3uA(\Q=oUU,\Fn,)6;QU1GM0rbIQcL6jSXN:(s)&_%m[7\U!pr+Q)ZB,f^/b&os4s_JREpBEM>VboV/A)IYF+'fi/2eam9%8VEcFO<6u/4k+=0f,2Pe^9u'tohZHI<LInhd!Ba*5qd;aBias4o*Ki-mH9jX34277Vs5?:R'5_*]hNbS[ap:08UIqj?@H,>ZhEL7.tdO1N;j"+%Z5OTYM&+XqBW6&VmrU*ooCN=#?<!9Kc;S*DZGE3RNo%Pea]@Z.;]+*7TQY[-UZNOT*2,Q!NCGdcu6A@lR()^<1;-RFea%C=K_'>j`hDd&n(\F^r"+qpRe>AMK&VhjACZ(hc@]9Ejp7nUpQ-[0LYq4+9j2Yo`%AZ?<h79?sC9pBo0dc=E2f)W=N(-qQ=RUS#\Wqj<"C#1fZ%g!Ao:2^g;14dOJ2U/>(2V<)Oj(ft_q7g63Y;:-eM4@)&^fY4QmDNN*j18YQM:DK&gf](3KqLP;2bp;mP"(Uj2gl^7OQ4&r<%`^`XRdiK`X65Ir("#>b`!09_>];PLshr"Fs/$WdN7S)ES;8'1UlL2Urok?6&Ode@`M_]^d_*/nK0?Wpr&0,c;$CAV)EYc.s'\,E]:)?J^GYNNn[+D-gSa8)XhH%8&8(7K#8F$DsAg?MJ<nCVP"VD&g+daEY^F%'^WT[oreotjro'IU[Feb*\>mpi2J3Z5VReo9#cQ#=A7+'Rc;5an=k\AqBZcKMb<Mf,=aJW@JP.;cRoCIcK+\3k8&N0J?03UJmi3>g)X)_J+f+"%JUf$0bCfK*KqOF91*,8Ut&^556oMrL8r#$G09Tm&u_q$tgg:rNX1a(#uPHB[?e[0!QT$l&_cC-!KLDPLXlXmEl.lt8IV>/_HQ9j\@QmVL4m:l[YrrGKPSRq~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1035 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1035
>> >>
stream stream
Gb!#[gN)"%&:N^lp5u.>Z$_i6Q8D0sRC"+ha\6>l&S<aI=E7sRmGD!Z5Y8IrkQ<8Y^k8cFF3^r^(^c:Oe*8a2!%rS:G"mP!cl3#YM%@9]\E^JN[YPm6OWOSnR,c.<OOu'jT[T3[+=(C^`Y=dR&Jk3#1J/LB)7Xiq'[[1C_W\?qJOH1F0cp[r6--p&oc=EFf;A75&;K_uoaO)c_M_"<TX-?<_ZmGkd"^%"Wok%N##PB6%,,(VT5NUWV-#!QV5E`q1aZ]7IFjJ:r3gZQ'V[9@KM.iq<94uiErs#scoWh#Xi:%JJG>]L4cb)J"jd6eAtiD#T%%bl4;F$3],'VHMRn`\\dd*/EsW3oh\O+9?H_G\?UgrpUjR>k.TC.JBO-=Yh`?Jb20(M%fF^Kh.W;rf"^ZU(U#2FIMq%_o<u7>^ffsb:EujL;du^jmUeZ'CQG7/WVeR>ueNV1L$uGB39D13l-LZh3*OBM&G+V7O:66MC!MtaXEbuE:?O9kh-#Rdgb'cX[P;*KUY#>0De?5i4&lXE$\n^e6\kG[l3CqH%S`gnYrp_7iG5'EK$$s@-Cj9jL+;p*MJDA:Tb$.jMB"7p'*pu==4RUBtLR):]Z^l2@g0'_EdVADXOZdkMU<?dH'#!FKV1l`p456`,q"1%QR]"dUn,eC6_+mJU&W'E_C@""%UV=rp+SC%')q"0-i,6Gu]q*br>EGB!M&kmrK\SaI@=la)fqHM"-2AoWY!e-[n<Y`26oaYlDAQnmFh#apG!;Ze"Uf*$@k6%q$r\u%fH+@,>T$fY4)=PpgW"E9;Rp0%L),&co#'dZji@A8=k6g$la>G_%8NN#Dp08#*2qP"#]mi@JgZa]X-jsE\ZMu^`+_kq#!T%<<s@kP2ZG[VqEW=BRS.GFURM#s+f$+)T7jbC%:F^?iI%sVhf_7,aKYQl1:"O?\kS(5G#B=ZB4L[$6;ONnS3jAu/oUiP?gjY88D[FFit'E;3Sd<;]^"A0Ij`q=K;E1(Q[s@rb:V>n=NmXR,MG@9UF@NZi/SreXZnC@&E*~>endstream Gb!#[gN)"%&:N^lp5u.>Z$_i6Q8D0sRC"+ha\6>l&S<aI=E7sRmGD!Z5Y8IrkQ<8Y^k8cFF3^r^(^c:Oe*8a2!%rS:G"mP!cl3#YM%@9]\E^JN[YPm6OWOSnR,c.<OOu'jT[T3[+=(C^`Y=dR&Jk3#1J/LB)7Xiq'[[1C_W\?qJOH1F0cp[r6--p&oc=EFf;A75&;K_uoaO)c_M_"<TX-?<_ZmGkd"^%"Wok%N##PB6%,,(VT5NUWV-#!QV5E`q1aZ]7IFjJ:r3gZQ'V[9@KM.iq<94uiErs#scoWh#Xi:%JJG>]L4cb)J"],_IAtiD#T%%bl4;F$3],'VHMRn`\\dd*/EsW3oh\O+9?H_G\?UgrpUjR>k.TC.JBO-=Yh`?Jb20(M%fF^Kh.W;rf"^ZU(U#2FIMq%_o<u7>^ffsb:EujL;du^jmUeZ'CQG7/WVeR>ueNV1L$uGB39D13l-LZh3*OBM&G+V7O:66MC!MtaXEbuE:?O9kh-#Rdgb'cX[P;*KUY#>0De?5i4&lXE$\n^e6\kG[l3CqH%S`gnYrp_7iG5'EK$$s@-Cj9jL+;p*MJDA:Tb$.jMB"7p'*pu==4RUBtLR):]Z^l2@g0'_EdVADXOZdkMU<?dH'#!FKV1l`p456`,q"1%QR]"dUn,eC6_+mJU&W'E_C@""%UV=rp+SC%')q"0-i,6Gu]q*br>EGB!$.+3SOP=Cp9X*2"4#Asl,la[]Pt4aRriu]n#j:$umD9:5%ei!+c=\u4?sucACkZ&K@>\Y!gVXDX/#*J]B?`V`gXn,Y.eg""clt,>IX'\Sr7M$.bBf(l]iLW)_<LRLNS-[V"#X9k@4jNEn77\s23UBe\$`W)3,L+k^dj[OW^+8<k20cG+3=7EF(oK;<)Z"+KTlT8P;"r%!=Z1dS8WT3gCEEL)0Wbu7Wqj:[n5!$:5ZshD!W36kQuB`;ogiA"YSa'lQ)3#ans5&r5!Y$VcsIo=5CLcmj&j$Ygi%-1@Pcu\`GjjMqPIR7/I4$1r[B=gbC(Jo`l3#&Dm~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1666 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1666
>> >>
stream stream
GauHK=`<%a&:WfGQq&HQ<dSh1BbWl$-9r'=:kKO+;,GbG@a%4%+ZKAmSL#SFFsJdsN(AOkX`hGSB'1EAMJq'n7k)7F3Qtec?l\<q^a,$rIg<1>hR,k`i`c1DKV9UJ5Q]nN:oq;<Hpq#M!sXKp@^H8P(bm?k^emjBVP155q:K1B[%c8F+GT^7W,L`#;4OCr8UR@d]CJ%4`mG0Mg9F#6m0CIH#MU-HTaF@>o<f,#'IFncIXVZCns(f%Fe0uMHWA^3?,6^-)P4X54tFgdXR$R+g9"*?9kq$"&^8#*r3=^.^mDnc;G_c\s.(`mq=(8Ab8XYj[CGDY.aC?l"/&G7W-]f/G>'kO6o`794aH%Y^lpK>.]FQ`\51i5DCtCg-Bq+Y=Q=#&9+n*:+0PD94d"?ui=.T%3N-gE^jUbE*O]ACSrUU8+[UeXqo!">0C/Y6*>%VF6lt_u,l",Z\J+DT(g%i)CTe$opMPCDHgQE_M-`Wp/j9J'$OC5Ck6;d_$KIVqB?pg3+fmih]@R(tC@D>B^VuP0paj4r]nQK%>eR*Qn1:U!4=fC0>I^&:D6ZZAN4b'=@o8p$g-s!R:`CI>_e2]42Mk'I2'gb%MA8fKa!&+:dnO0&!qJudLY4ElX*E/aAf?D*5ZVm4Xr"F6]XYOHnsaY8`T1g'SD@XtOIHLiTh7-Bb:&g>.Ge@b^hj,gCBEJ^dA3A`\h+HK>2i+@SRB4^eIY\&W?/40rLV*r.uiL^(,f"F)PZakZ3BD\[@92]h$QLA5?uEI@g7G3*fTg(>hGM%#24.SanOBY[g0fO5gVn64WLj1B,m,Na#fuaR**:qSma#fY"bI?1kZ4eQDQc+)qceWEEBUe?rJGp5D?eRD-;i)Ed'Fkhaml#MD0t>[QK2WdP/uG*YE%Tlq'7Oja'TBV*r`shGYLPLA2UT:Ai$_Xb\'d<lp\U;3$`I8iB8G,DC66X"b3YA";c>NhXhA.JaA97@dHO1^PZpr=KTt6"=$DJRJB/N0;0&)edc;#+.__\e>M,1,WhUaQr-U<fUQBC^?I6#I$,>-CqPpe'_:ik35p*J5MpmjU[1KggGOK0dmU#?[H]WpVJ[i`pQ*Ee)FIbKJ0UU+$Yg@s"qocG4\1%5bp5ks/6OD-B85@@t`;km4@5g1l1d\'&)-WLdL`Hl]BTT64b_RM]A;k`apY.EE6+KP/)0c=lfV9CmsG4eRb9'YnSS*NH.NcPPEdpebOE54Y4@Hj((1$7ti_q??JEZkO3NF_-#*LkK+^M'#*#Qp%NWfm)MoEHaU6VG@1%;*LlS:d,'[jn(9EZ4pW3<g0us=_1[rG%'a]WF).tY)]T>SZeNji=K!AN_ZFUZ?J&Dj>Y_%2VGH.J2tr;QcDns&k3c/PXR&e2fOuAF=T0>\mPXt$*;/.t9%DNfNjIJL9Al.+dq$"KgRBSXjl2E/f!R2U/MM2'NtZ+iLt1KHXM1<^?cW2@kGiEMS37CX/+dPH/Vdpr?FF^kqhE7kA"t8Pr(uYQ.P>R]Hs5o8OY_9d<#"I<r,fc^50=J0NdQT-6Ck:>nL4sekHPo=;:q?s_#fW-e!p870%-A)D6N8\!Y\5MZ3\@XK!LC\>Ait&52W_IVCbAW$p8+]:GhTJ(;>!Pf&G.&K5I1r$YtqPCr<?V.;1sBn`?hCG9?i1l1.BnJbMB0^]AE~>endstream GauHK=`<%a&:WfGQq&HQ<dSh1BbWl$-9r'=:kKO+;,GbG@a%4%+ZKAmSL#SFFsJdsN(AOkX`hGSB'1EAMJq'n7k)7F3Qtec?l\<q^a,$rIg<1>hR,k`i`c1DKV9UJ5Q]nN:oq;<Hpq#M!sXKp@^H8P(bm?k^emjBVP155q:K1B[%c8F+GT^7W,L`#;4OCr8UR@d]CJ%4`mG0Mg9F#6m0CIH#MU-HTaF@>o<f,#'IFncIXVZCns(f%Fe0uMHWA^3?,6^-)P4X54tFgdXR$R+g9"*?9kq$"&^8#*r3=^.^mDnc;G_c\s.(`m$$]Chjc(jp>28^g'k\\G!RN2Ve3/uS4/SGb+rk-XSih!gi5lfZPuNikgaDK+\!D8D'2#)=XDtT$,mi%X%p/]-T#g6Kn:hh#*)sB]i4d!^%U6/\:Ieg-&0\mgIH!!ZQh>jV%Z#:3,*2FK')^.>g^/1:$nRIP[FYPHHag_]]lq6@7'@eH(EWaO"ba.2EruhjL%.mtZf_G*&Cqooh<P&J2>@42hr7:(Hkp,JhST:MY27Y9GSX;!SsAg)/R1uX[b)i[7c)+ZZ)CJ"m@rTdW""g0iNjk*S&D.`)A6gM`<mrait,PXkpA'#!Vn%C_eb`q<P3&k1C_5P+KN"Uf8J<V?<gb_q+Wl-@e)BNc>G?ua@uep:aMQ\AJ@kZ'^r2Ai&1Uo21b8jBMqW@h3Nh6/b,X1:9\*jC'Z;N<"E'SIS]%tQ,`;?$QH$^%FKDFfn+:?g.`T?D?Za1+"h050n[5T%n:nO/o47#"7<YejEk\=gOiob+D@L,*fes)1QG&bj.4Ok9P%XIcS1Rnf;;;0)F=UC92hFQNU.F<\?"?mYc3iIT>Fpd[]IIO\N:bqmj%oL7@6MZ>FrZ<Bc(K4O,,Sep*?3cE]p:\;Bfftn#;?c6[Xhe-[oNk<l>MBX5lpf-q?f_-(C^_O[;+VeX20=0huh/7o<p\'`A1-U<]cbRY2EIrWn=uTJ8"]5d5ZR7`f-$%CGCX"&,C@h$JgQR@5u;jE:-;.n?f\2?Za,"'D%/PKm@IBkaVoo5lKP^o1%rnqY-`DQl<a(_d8"YJ%E<HXW<o@s=T^BlP[A_O"BfO.Sq[J"#Il4*i)#+As,qJ(+a2'1[Z10uE1FG*[)n)FXEi$#T*<6m;E5Fi\9:+c$o:71N)pj0Fr(3%M$`8ROTm/FrgW2GNc+l7u-$=GddP7_'bB8UP?slMS9+*gU0_EO$SMUI(AsYIYe>o637^@'"%ao43ka$"*&dqKohCp>[O^]is.f]<D).Nm2f-B^`pFGO1_=*s@WYD)%NZ@)Bu^L0-Cg\[C&=%1WW:fkoqo/C]c8@=bg=0C15p/uMPTdjK,6S,:2cB3""NF8)Xc<q[pTCpX^^/H62ipR6PMNdC-uV<[@na4Y=7-1FR&BsQO6mELjgEq.4RlWT[f(7;W$`sK'o`+nf_<o;6@YN(,[F&b.acCTg=(&G;_Q:!GI0AEqqI7*,FZ-a.8I].@9'pgg?5-9"-aI0\B.LPbYI_&oj+6A;S7m=h'Tha50p_8MCo@OK/..#3J?ie<'ktQUV([98P[b(1>JVg47=bL3g6!6^?/[tL#T5WF5e!;7<#+i-j-^o95$fAQcC[l,$_)BVtKsf#8[UIb<'XSt\q!uu2]8qH)FEo.r_##32XoWG~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1812
>> >>
stream stream
Gb"/'gN)%,&:N_CD#KGDWJqH38:l:]a0D2h1JZsi8iiNS%ho1=N-UOW88A1=$^(SUMe(L<1MNbQ`h\p9m[hC,pOEror6X_YPQJM^_lL6\."hL)-mp#2B5lY8Xt@LQk&V>p,A\`85QXIU5r#f'E'<1a/>+,%T*V%k(R,1;#[fX<pSe[WK[EGN!qAG.(EA7(Xs^kDo,ZgFL8HtN4YO<.^[Y*5pB'>3hP$G3(R<qbg41q^*DUG9qC_D=kl()Oo-p3j@p)9b4AXn!.V(A5E64IX#H)nRAJph,%cKt(AWfhfRAh"LrrW.cg/^^.G?i!*gV9`f9U7qL317bI65EY1hXb\+B-Hc)U(8*jV'_6\T),l<N`I$oCEm^W(`D:OO*cslbU)qaOX1e7M/@=]OYP7Bie7.LlUosoR)h$<]V0pTXicG$*#H+mF??iN@iSSX,'7dLT3)f"de9AO'\UJuAD+($$2uVR2NnT/%e@]0=B/8`:VHJ*hWj1$ZI^=qacF`9"bb<S0``!]3l2W^RN6S&L!Vm)\$$hN?DTk/m&kf_Le@hDg`-+I'O_bO?s;V`7Ol\>\EqIO0hl-$]ZV*%AVDLJP82[[3(V;Sk1Xo)*`Y%C+&t:kb&%*4c)t'QCL!3MXP24bAIpQRG,:Fk!jS8VTs^H2e(#>K_UD\&<HWVPXRqY0c%\$Omcpj\['&D'e_agE]q8eW1)jUuRHCaJ)Ce+V"20anWAki`qH:LTZFW7;%\]79Ei!7I`)a+K%C!=-%'Y(Ye!mA,>g1&a_DG4a(>1mI@@XG#j_Y0cZN2KCBqPq`1:l1p$[FmnYu?<0SL"Rpn+BA?$3kO8UGS5><oNQeS9uhHq$&hS<cF?S<3m2]/M09M\=dDuW231ld(o8<an%BGfiAZr)^&a"L%m'O/6<B08\T_k?Q(:E-)_,&p)ou;.%2a"#4#<_H5f+t)UaZi_MBOIL=G:EN=WL7RGQjWDem%[O.0],3b+9s2fgfIdi=(qf^4dNR;3hlMPD:',cpEgWPs;#AqWX>=<.2V:2E@R2L<=([bm@+jd=,(8,:*$T$&Wa93FL]k#W8(<pnFKOR^+W:f[B[dhH/Fc==IdB",3*;\:Sc]CiS"hkFh'mq!sY"BFsYqh[q\-pt<&'$p)`)DR7P^";kD\m;W1RHccMG;Rq!F-5MFYbQ/kGMr.0\2ZZ3H?W'2iHc4IUT+X10csj0,k1.<<5.F-MO2!jG(s+ZYi&2fj^`#;b2mcF;,;In!-+Rj:!,W1f70+*,"/$1^MNMeZH`CL^DAXo:55>!$bA!HIoKk,'m+:_1laSIkW&9Y]C.^32r\C>.m#X2_93h'N<4>rI=J)W8F]uCKYCs^.HI9lPXE+)&`hDr3"!",*P0hQUX5Q=4>-_\^XObCj!'hXKYp`UkBTq0PBFg,I7&6T6?gqF!+a8U(`)dV>3*Y!_j(TIO(C'$]XP-GO+a%6s.>%\l"TqV+$L,U*M8t;rsa>$j%dEap[9FJ*hAh!=`rBO/+Qs4_E@fQ6H5rs9=_Xn[[)3cZ$]@E&U!tR#((L>o[-Q@`OXNGThcJ;Wu7t;pf)A&s0jKWH'&VM<CeeZs6fIW0$['8ZP&$e$TX:0iZV"QHV*\?-FjZ0b0!FA]'UNUl5fICN39C+cE\T5N+JkC=%K5.**Xhh:G3gQ8U(F0:F%0j0aL"\,#g87o4R/S,-dBkYKPdqi\7u`I^,6a;Jb[20T$NH2J9Y\/du?31'A>io('cbj(.I9Fg`;aV[hi4,0<J\^qB"<[ZI8[)Y\2bC+@]malmr@qnIkg-8@@R,sJKC$.V9j=o>X9.tI:O7?aH/~>endstream Gb"/'gN)%,&:N_CD#KGDWJqH38:l:]a0D2h1JZsi8iiNS%ho1=N-UOW88A1=$^(SUMe(L<1MNbQ`h\p9m[hC,pOEror6X_YPQJM^_lL6\."hL)-mp#2B5lY8Xt@LQk&V>p,A\`85QXIU5r#f'E'<1a/>+,%T*V%k(R,1;#[fX<pSe[WK[EGN!qAG.(EA7(Xs^kDo,ZgFL8HtN4YO<.^[Y*5pB'>3hP$G3(R<qbg41q^*DUG9qC_D=kl()Oo-p3j@p)9b4AXn!.V(A5E64IX#H)nRAJph,%cKt(AWfhfRAh"LrrW.cg/^^.G?i!*gV9`f9U7pa317bI65EY1hXb\+B-Hc)U(8*jV'_6\T),l<N`I$oCEm^W(`D:OO*cslbU)qaOX1e7M/@=]OYP7Bie7.LlUosoR)h$<]V0pTXicG$*#H+mF??iN@iSSX,'7dLT3)f"de9AO'\UJuAD+($$2uVR2NnT/%e@]0=B/8`:VHJ*hWj1$ZI^=qacF`9"bb<S0``!]3l2W^RN6S&L!Vm)\$$hN?DTk/m&kf_Le@hDg`-+I'O_bO?s;V`7Ol\>\EqIO0hl-$]ZV*%AVDLJP82[[3(V;Sk1Xo)*`Y%C+&t:kb&%*4c)t'QCL!3MXP24bAIpQRG,:Fk!jS8VTs^H2e(#>K_UD\&<HWVPXRqY0c%\$Omcpj\['&D'e_agE]q8eW1)jUuRHCaJ)Ce+V"20anWAki`qH:LTZFW7;%\]79Ei!7I`)a+K%C!=-%'Y(Ye!mA,>g1&a_DG4a(>1mI@@XG#j_Y0cZN2KCBqPq`1:l1p$[FmnYu?<0SL"Rpn+BA?$3kO8UGS5><oNQeS9uhHq$&hS<cF?S<3m2]/M09M\=dDuW231ld(o8<an%BGfiAZr)^&a"L%m'O/6<B08\T_k?Q(:E-)_,&p)ou;.%2a"#4#<_H5f+t)UaZi_MBOIL=G:EN=WL7RGQjWDem%[O.0],3b+9s2fgfIdi=(qf^4dNR;3hlMPD:',cpEgWPs;#AqWX>=<.2V:2E@R2L<=([bm@+jd=,(8,:*$T$&Wa93FL]k#W8(<pnFKOR^+W:f[B[dhH/Fc==IdB",3*;\:Sc]CiS"hkFh'mq!sY"BFsYqh[q\-pt<&'$p)`)DR7P^";kD\m;W1RHccMG;Rq!F-5MFYbQ/kGMr.0\2ZZ3H?W'2iHc4IUT+X10csj0,k1.<<5.F-MO2!jG(s+ZYi&2fj^`#;b2mcF;,;In!-+Rj:!,W1f70+*,"/$1^MNMeZH`CL^DAXo:55>!$bA!HIoKk,'m+:_1laSIkW&9Y]C.^32r\C>.m#X2_93h'N<4>rI=J)W8F]uCKYCs^.HI9lPXE+)&`hDr3"!",*P0hQUX5Q=4>-_\^XObCj!'hXKYp`UkBTq0PBFg,I7&6T6?gqF!+a8U(`)dV>3*Y!_j(TIO(C'$]XP-GO+a%6s.>%\l"TqV+$L,U*M8t;rsa>$j%dEap[9FJ*hAh!=`rBO/+Qs4_E@fQ6H5rs9=_Xn[[)3cZ$]@E&U!tR#((L>o[-Q@`OXNGThcJ;Wu7t;pf)A&s0jKWH'&VM<CeeZs6fIW0$['8ZP&$e$TX:0iZV"QHV*\?-FjZ0b0!FA]'UNUl5fICN39C+cE\T5N+JkC=%K5.**Xhh:G3gQ8U(F0:F%0j0aL"\,#g87o4R/S,-dBkYKPdqi\7u`I^,6a;Jb[20T$NH2J9Y\/du?31'A>io('cbj(.I9Fg`;aV[hi4,0<J\^qB"<[ZI8[)Y\2bC+@]malmr@qnIkg-8@@R,sJKC$.V9j=o>X9.tI:O'q_3^~>endstream
endobj endobj
19 0 obj 19 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 972 /Filter [ /ASCII85Decode /FlateDecode ] /Length 972
>> >>
stream stream
Gb!Sj9lJ`N&A@Zck"*pDn_.c*l(q##7#_ngM*fZ!(Lmuq@!:e;J`P^4CkqJ0R^PhXJd"JQBAT,'o>VaiHLpDX*WqpUTQS)%]?odE(JI*W$I1_mmg\C`DCBm?SohWR$`r`\0/.*-JKM+hmC##G-Y+tH+=(St[O&G*/e!"2#,-P%i5!4F$)IVK\KAn#kIeh:f;6uKq*EBa56$F7QLNTZGXP%Ul\gAB5PQJ&AQ2GZL\mbUSM;rcJ%<1E:HCo`&%'X@CLJn<'[V!Y&5Fk8SQMB7!Yb?b1X,N&N2ejhc4E%WAZiH9_Xj2bS8^:`'jBNZI%"YjNb282]oLN77Gt?Q\tPkd+:[$*PJ/9?)0FW4DV(\a[Q%8kggsD"k9YAY5'!;jCWIM--.^Y$]80TI]%Q1R\,gRiUrSnL\`@P:TYC+&kF9<&77n^A3/uopC@kIOE0=+=5O?Wcno7uregf:XBQ9DRD0h"`!])[HI+n$6ED&/9LR>atZ/=\$Nf#BADA*c/UB6/U$"D=Gg<"cLKctCO_@GXqY]nQ;=XL6VM@p'PFWIp*9a]-LN/J,/>W#\tQS@$'eBdf8D^e`YjiIIF^904K!Yn-.=IKtWBs4qCMf$ENHPkqLHdHY?K;e-%(GLa]OG0@EZMeC8?LshlGdVkZ;DQpEQDq58BlnqQ5Bm84NTK(-Y^h1G?f98VShHX!4aVW@Hfn\\k6c=WU7%-6m"3rZ5i6R2D$'[ojVk\NogGoM?)n.Y[9c5lg>FO"3LSnQf+6tqK<=H=RcZ`<jJ/I^k1O]ACG;IUd_;)=o^Hj6"o\toGp_uY'<-3V';LI`*a7*q9>qO]80qr49"YO!HK?[W%S_mBj>s]qK!VG]HK28B&h2$8Er=NPkn6S!<T>V:[/`?5@6[%lYNH0?%XX4<HHr[bm^*kHYB$aq2/.='Bn&2i,#*)U%*l4(lRWTfg3iTGfVO_Y%hdoI;HU@2)&b^>MK&;g~>endstream Gb!Sj9lJ`N&A@Zck"*pDn_.c*l(q##7#_ngM*fZ!(Lmuq@!:e;J`P^4CkqJ0R^PhXJd"JQBAT,'o>VaiHLpDX*WqpUTQS)%]?odE(JI*W$I1_mmg\C`DCBm?SohWR$`r`\0/.*-JKM+hmC##G-Y+tH+=(St[O&G*/e!"2#,-P%i5!4F$)IVK\KAn#kIeh:f;6uKq*EBa56$F7QLNTZGXP%Ul\gAB5PQJ&AQ2GZL\mbUSM;rcJ%<1E:HCo`&%'X@CLJn<'[V!Y&5Fk8SQMB7!Yb?b1X,N&N2ejhc4E%WAZiH9_Xj2bS8^:`'jBN:I%"YjNb282]oLN77Gt?Q\tPkd+:[$*PJ/9?)0FW4DV(\a[Q%8kggsD"k9YAY5'!;jCWIM--.^Y$]80TI]%Q1R\,gRiUrSnL\`@P:TYC+&kF9<&77n^A3/uopC@kIOE0=+=5O?Wcno7uregf:XBQ9DRD0h"`!])[HI+n$6ED&/9LR>atZ/=\$Nf#BADA*c/UB6/U$"D=Gg<"cLKctCO_@GXqY]nQ;=XL6VM@p'PFWIp*9a]-LN/J,/>W#\tQS@$'eBdf8D^e`YjiIIF^904K!Yn-.=IKtWBs4qCMf$ENHPkqLHdHY?K;e-%(GLa]OG0@EZMeC8?LshlGdVkZ;DQpEQDq58BlnqQ5Bm84NTK(-Y^h1G?f98VShHX!4aVW@Hfn\\k6c=WU7%-6m"3rZ5i6R2D$'[ojVk\NogGoM?)n.Y[9c5lg>FO"3LSnQf+6tqK<=H=RcZ`<jJ/I^k1O]ACG;IUd_;)=o^Hj6"o\toGp_uY'<-3V';LI`*a7*q9>qO]80qr49"YO!HK?[W%S_mBj>s]qK!VG]HK28B&h2$8Er=NPkn6S!<T>V:[/`?5@6[%lYNH0?%XX4<HHr[bm^*kHYB$aq2/.='Bn&2i,#*)U%*l4(lRWTfg3iTGfVO_Y%hdoI;HU@2)&b^>F#s%m~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2107 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2107
>> >>
stream stream
Gb"/'>BcPr&:WeDbY,Fu[S`+t+M(??R^Un5[Vj[\m[fV`H8&B9@R((#h<_?&&R`EK1n42QA&mB#D_BIc1BRdo5IC=t@XsY+*5/16)>%itEl+N"!G?i@c61>>0"6C6_R)E0`3](XA0W<"gEDTt4:8rIM/YIo6&?/E!/C)MQb&8M\9VLZ+Kf4cJccV7G(d1[h]`P?.%1h(EP0it[=1HCk7OWC%b7Yp#_jR;D,c.&EFMi#[@n\[_8f>YcJcGTaZLCj'u<n4a^AAh2.J6YT-#-;H'fCg#]Jct7OjC/;Z$n#>NiiKZ9%d9Z3e!6G8^EIk!3d.57R4pbU+'BcQ@jt%o*An1HKZ0jKMfdf+c0OO?pP.j+`8Z&JfT#"0o[Y;Oo`?,(mGE1qDi*A"k$`$$@9>]ji_8"@dGC:T0pc6T)>8*9Z#%?sBuVdjVH1&YO`6o>mU"PdV+I#0:VV"GYTE&`H0RA3IIXULSRWN/_jVkte_\7rS(_.<hs_7(kfGCZZ5`jGXD<Lhd<$P\YHn=VjCT2m48apeH\7&[m_G)6p/r)g;Vg6m^;%Xq+K8KIW*>])Hiq:2'@&@l_e/\22A"nNmC9f.9p09mA;Q$Ugqjm+=KBIF6GG_pYUnZOHY^C[/K(.X%)qKsW9]>9do(Y_$Rtd9"jW)_Ki29DmA0K.9jG_N@NB8W_g:R3`K+HfsV(:T7"t5KH0k=7@gnhG4B[J.T$GaNmM^Yf+k/`Br.N>f!kY,+4.Q8i-W9*iLnh7d,\iB7KThp9%.Cc;21rpNg12*e-/%REUc=_C1Sh:r;#^1H_Hg/*G$F?=N'Co?otVUV(,Sp/6Amd8W@%d<PT+M'#D\R@5Hi36&("keOfmIPK+.;6I2+?Gb^-\5-\MgGqLG2ug]OI'[T`Vg4tF(ol4!':=J;I$%PSUGZUHY:.pH,hoXraj:"MUE>_]K]fGuUUNHI+.Xbk(,m-%lq9=#8g.>*81se>'AKc.S)J7G?CO9UE^T)E<eK"."/AGAh"FpVhiS5!ob>58a]8k]=kA)(Ua@iU6ITN0.Z\"PRjtqZ]E!o<P:R]5M`gY7\V$0;-aAUn^bY(mQ;oaDBr6X6TEsZRRE(r<4R3%1n].'lk,`dsl#.1F[7tuC%Psr=?"r@k/E.2ELcs%XX*!RkVMC,I@QYYNbuH[4M:=XP$:8bTY@iehQ1Yigfafe(EL)"Y'5ZhEX>_;gfa)H]?,Ff]5U-0/ed;p`N#]/o6V8;<[V0])8UK4F&lX%u^f[V0nnHp>c;ZW"AO5Llgejn)7*08S_p>q5G+@]N[S&hq]P5aYgf9BnI+&qll-:;d=?/!G@?J#0flJ28m'==7I%sPcE7m]2f<Y0lU?O3hec[l]oBL$*@a>Z^j"2nm9Ipp_s(o^LV?q.bcJ[7>k3\8P]Fs6AIYii/55oD91G?mU9_)mEB;(i2)W%Aq%;Tf%LN:Z)4i^,=p[fHtRgr_+&*,jcc-,TC:!3;6R;o`4Adukjai*JSFDkr0jsRuIkEeL>\u,a>VjX#;Jnc::9oeV,cegR">+uO,S46CcA00BbCS<8L_^9XdhH!um30r<,.8?,Bg]LeWghKBfL4*(sI^B?[)G89"0MO.6j8U\HGsX1m8VFVU),J#\'1aWmq9C*@bSuk(gBc5o&cAo)3O+Aegr26?RbC;Be.U#V46,!ZN\JWlrW%;W$lojE'W1`'+jNEbY#EG";(?cQin0OsF6O.0eR9C9Jr["2V.[3&2B'Y@(i"q/JA);.^-5"DX?JS4H"I@"i6fOVAj*$f2+r?"(rMt!+>KH2XfpE2rq0N.Et:h+p6JV$0!FN?MPD4t$r\2!)fh3ZXYcDe?aBMPAMh;P2,S@]R:^n)R>+S`@Tj)Pg8!q=eS.a#2n[F98VjW/cnAtJah[YW70B#fb75@3OJlSiFXS036E-j%^5q>2W$n@X.HeilBbUbr.C7Xq]Jn*UM_W:G.`J%:jms5&VJ`O"P%/m(=S7ZkThH\R%mKR==R1m2%qY;=k.Z:u9Fi#Z@BtKAoQZ!s=J/>YP;EJLOSD[P+X=2/@8T3JN)VJSpO6Cb[0Z)72i,so,%XeS2,3J>F,1QGL%k25k21[*gZ7<^%E2'\f@m8l'9%DA[Ju.L~>endstream Gb"/'>BcPr&:WeDbY,Fu[S`+t+M(??R^Un5[Vj[\m[fV`H8&B9@R((#h<_?&&R`EK1n42QA&mB#D_BIc1BRdo5IC=t@XsY+*5/16)>%itEl+N"!G?i@c61>>0"6C6_R)E0`3](XA0W<"gEDTt4:8rIM/YIo6&?/E!/C)MQb&8M\9VLZ+Kf4cJccV7G(d1[h]`P?.%1h(EP0it[=1HCk7OWC%b7Yp#_jR;D,c.&EFMi#[@n\[_8f>YcJcGTaZLCj'u<n4a^AAh2.J6YT-#-;H'fCg#]Jct7OjC/;Z$n#>NiiKZ9%d9Z3e!6G8^EIk!1MC57R4pbU+'BcQ@jt%o*An1HKZ0jKMfdf+c0OO?pP.j+`8Z&JfT#"0o[Y;Oo`?,(mGE1qDi*A"k$`$$@9>]ji_8"@dGC:T0pc6T)>8*9Z#%?sBuVdjVH1&YO`6o>mU"PdV+I#0:VV"GYTE&`H0RA3IIXULSRWN/_jVkte_\7rS(_.<hs_7(kfGCZZ5`jGXD<Lhd<$P\YHn=VjCT2m48apeH\7&[m_G)6p/r)g;Vg6m^;%Xq+K8KIW*>])Hiq:2'@&@l_e/\22A"nNmC9f.9p09mA;Q$Ugqjm+=KBIF6GG_pYUnZOHY^C[/K(.X%)qKsW9]>9do(Y_$Rtd9"jW)_Ki29DmA0K.9jG_N@NB8W_g:R3`K+HfsV(:T7"t5KH0k=7@gnhG4B[J.T$GaNmM^Yf+k/`Br.N>f!kY,+4.Q8i-W9*iLnh7d,\iB7KThp9%.Cc;21rpNg12*e-/%REUc=_C1Sh:r;#^1H_Hg/*G$F?=N'Co?otVUV(,Sp/6Amd8W@%d<PT+M'#D\R@5Hi36&("keOfmIPK+.;6I2+?Gb^-\5-\MgGqLG2ug]OI'[T`Vg4tF(ol4!':=J;I$%PSUGZUHY:.pH,hoXraj:"MUE>_]K]fGuUUNHI+.Xbk(,m-%lq9=#8g.>*81se>'AKc.S)J7G?CO9UE^T)E<eK"."/AGAh"FpVhiS5!ob>58a]8k]=kA)(Ua@iU6ITN0.Z\"PRjtqZ]E!o<P:R]5M`gY7\V$0;-aAUn^bY(mQ;oaDBr6X6TEsZRRE(r<4R3%1n].'lk,`dsl#.1F[7tuC%Psr=?"r@k/E.2ELcs%XX*!RkVMC,I@QYYNbuH[4M:=XP$:8bTY@iehQ1Yigfafe(EL)"Y'5ZhEX>_;gfa)H]?,Ff]5U-0/ed;p`N#]/o6V8;<[V0])8UK4F&lX%u^f[V0nnHp>c;ZW"AO5Llgejn)7*08S_p>q5G+@]N[S&hq]P5aYgf9BnI+&qll-:;d=?/!G@?J#0flJ28m'==7I%sPcE7m]2f<Y0lU?O3hec[l]oBL$*@a>Z^j"2nm9Ipp_s(o^LV?q.bcJ[7>k3\8P]Fs6AIYii/55oD91G?mU9_)mEB;(i2)W%Aq%;Tf%LN:Z)4i^,=p[fHtRgr_+&*,jcc-,TC:!3;6R;o`4Adukjai*JSFDkr0jsRuIkEeL>\u,a>VjX#;Jnc::9oeV,cegR">+uO,S46CcA00BbCS<8L_^9XdhH!um30r<,.8?,Bg]LeWghKBfL4*(sI^B?[)G89"0MO.6j8U\HGsX1m8VFVU),J#\'1aWmq9C*@bSuk(gBc5o&cAo)3O+Aegr26?RbC;Be.U#V46,!ZN\JWlrW%;W$lojE'W1`'+jNEbY#EG";(?cQin0OsF6O.0eR9C9Jr["2V.[3&2B'Y@(i"q/JA);.^-5"DX?JS4H"I@"i6fOVAj*$f2+r?"(rMt!+>KH2XfpE2rq0N.Et:h+p6JV$0!FN?MPD4t$r\2!)fh3ZXYcDe?aBMPAMh;P2,S@]R:^n)R>+S`@Tj)Pg8!q=eS.a#2n[F98VjW/cnAtJah[YW70B#fb75@3OJlSiFXS036E-j%^5q>2W$n@X.HeilBbUbr.C7Xq]Jn*UM_W:G.`J%:jms5&VJ`O"P%/m(=S7ZkThH\R%mKR==R1m2%qY;=k.Z:u9Fi#Z@BtKAoQZ!s=J/>YP;EJLOSD[P+X=2/@8T3JN)VJSpO6Cb[0Z)72i,so,%XeS2,3J>F,1QGL%k25k21[*gZ7<^%E2'\f@m8l'9%DALiJ>9~>endstream
endobj endobj
21 0 obj 21 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 831 /Filter [ /ASCII85Decode /FlateDecode ] /Length 830
>> >>
stream stream
GarnTgMWKG&:O:SS<li^g2(rC;lQde2JF@<c)#<X8pS6,->N]V!BX2n^9cbMNh[N2H=5mZR@,i<OtY?Mdh4X0iq,Q'3LJ*c4Q0^0_>/3FG9i]o#sBBINMILT&@$##B_#"(57g-I`!VV8721(;+sis3No4k](oe,V@=C=:&7H^!aFf;5+%3r7GZP$._l5fX#=3_S^You3HEd`6m$QpS1DkJ;9i5+of+V'XToWoEUEA+^=1C(I[HXG@"b(S'V2lW<*%/]"l=A\Y]'Uo`2d0-glB8184f/T\O);$_I*_J>kK<9Ore+H'+."M65#JX+E,UnE<sc`,TNc=!)lA2LLrbo(%td*]Rh:FL94e?I"4@ZnTkiC9N[j"A_9c_LJdq.'moj59q/3DmIAAql8_6H!9V3]mm9l0;FpY74EkFPn%BTL][rJ\Y9_n>66Z.:+VsO5VGf9&\<24Y:AT);rZ&Bp1>Jq$;,3Es.=YC:GY^,2R@]_p,Z>\YTp0P87(Tt*0m7W5"BA`Dgh4('*kh;`0?K\4&/3IJEr\&F79m,:cA$l'E_0^7pB04lhOeW-rLA4nMWooh:KXrmLh6g?(e)2cKQ[*(Agl?C".N>1h:@].Y1WlNBH(W/e%S.7BES]CnA+;Igm^/sTBgU7'Z_/8NQu?u--#u?j@AUSf%^GH$8Z=s`neTPt;.2am2qeb>O.Vije(h%90:5k.JtAq[5T.u!L#G1o%RDbmMAPIRAodi?PSn(ZJPIjRW`n%dT^!aO9c]Cm!pM0rjCAV#K^fFb5N-MX*?RQ.N3\C@[/s]03AW'85[Q5^L48#bnS5DsDVb"&7fNH:Q93[~>endstream GarnTgMWKG&:O:SS<li^g2(rC;lQde2JF@<c)#<X8pS6,->N]V!BX2n^9cbMNh[N2H=5mZR@,i<OtY?Mdh4X0iq,Q'3LJ*c4Q0^0_>/3FG9i]o#sBBINMILT&@$##B_#"(57g-I`!VV8721(;+sis3No4k](oe,V@=C=:&7H^!aFf;5+%3r7GZP$._l5fX#=3_S^You3HEd`6m$QpS1DkJ;9i5+of+V'XToWoEUEA+^=1C(I[HXG@"b(S'V2lW<*%/]"l=A\Y]'Uo`2d0-glB8184f/T\O);$_I*_J>kK<9Ore+H'(RHZ.5#JX+E,UnE<sc`,TNc=!)lA2LLrbo(%td*]Rh:FL94e?I"4@ZnTkiC9N[j"A_9c_LJdq.'moj59q/3DmIAAql8_6H!9V3]mm9l0;FpY74EkFPn%BTL][rJ\Y9_n>66Z.:+VsO5VGf9&\<24Y:AT);rZ&Bp1>Jq$;,3Es.=YC:GY^,2R@]_p,Z>\YTp0P87(Tt*0m7W5"BA`Dgh4('*kh;`0?K\4&/3IJEr\&F79m,:cA$l'E_0^7pB04lhOeW-rLA4nMWooh:KXrmLh6g?(e)2cKQ[*(Agl?C".N>1h:@].Y1WlNBH(W/e%S.7BES]CnA+;Igm^/sTBgU7'Z_/8NQu?u--#u?j@AUSf%^GH$8Z=s`neTPt;.2am2qeb>O.Vije(h%90:5k.JtAq[5T.u!L#G1o%RDbmMAPIRAodi?PSn(ZJPIjRW`n%dT^!aO9c]Cm!pM0rjCAV#K^fFb5N-MX*?RQ.N3\C@[/s]03AW'85[Q5^L1/uXX3Ir^Fk^7?r<"3n44O~>endstream
endobj endobj
xref xref
0 22 0 22
@@ -173,16 +173,16 @@ xref
0000001943 00000 n 0000001943 00000 n
0000002236 00000 n 0000002236 00000 n
0000002334 00000 n 0000002334 00000 n
0000004760 00000 n 0000004761 00000 n
0000005887 00000 n 0000005888 00000 n
0000007645 00000 n 0000007646 00000 n
0000009549 00000 n 0000009550 00000 n
0000010612 00000 n 0000010613 00000 n
0000012811 00000 n 0000012812 00000 n
trailer trailer
<< <<
/ID /ID
[<047cece75ba73e044622d5b8b8c18397><047cece75ba73e044622d5b8b8c18397>] [<ae3975e5edc34874771cba6bf909c448><ae3975e5edc34874771cba6bf909c448>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R /Info 13 0 R

View File

@@ -1,4 +1,4 @@
# Les 15 — Lesopdracht # Les 13 — Lesopdracht
## Pokédex opzetten + eerste deploy naar Vercel ## Pokédex opzetten + eerste deploy naar Vercel
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
@@ -174,7 +174,7 @@ Het huiswerk bouwt voort op deze setup:
- Branch protection op `main` - Branch protection op `main`
- `DEPLOY.md` met reflectie over Composer vs Background - `DEPLOY.md` met reflectie over Composer vs Background
Zie `Les15-Huiswerk.md` of `Les15-Huiswerk.pdf`. Zie `Les13-Huiswerk.md` of `Les13-Huiswerk.pdf`.
--- ---

View File

@@ -0,0 +1,156 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 12 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/PageMode /UseNone /Pages 12 0 R /Type /Catalog
>>
endobj
11 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084028+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084028+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 13 Lesopdracht) /Trapped /False
>>
endobj
12 0 obj
<<
/Count 5 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R ] /Type /Pages
>>
endobj
13 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2127
>>
stream
Gb"/'=``(P&:XAWkb<s7i>A9+Q=QRp\Z=?_9,:jr`UP@5'9@!H%tWQjs1U',Ou"o)fHj=(;RRlE?[#`1?amt(ifA66F9V0g5!4/5J8s4+";[.3p><`FrSU=6\E#,uJ-\k<b^m^Lr]trH'G*h[@idGQ<"Z6!#W3i1`u6q_;i3$&%3448(_A!mdNK1H,,s\THpK%@-orW9Pk!o65sK5:MhrF\6T+aj"N(gf0Zp)HOAH^l#kh=RgO&\Z%D4<S9TpNaAIa3u[7QE`=E(G$l'qLtVTG:X/E+/8C@\Z6RA.A"q^8Utho_DGLHHhE%b5k&\#'0Q!,lGVX:kj;4upcC"P<kC"+Ji69_(JP.2Yp%,]Gn!rTJgNH)i&e;?*IAjOf7pVp`;IXFSfPqmM/7E"0eiTi&bp>i-oc:b2g+``V#WEl)'W)GFK#_'$tp:le)ZYV`#O7ZQ)/r,B!Uk_HuoJ4iV(em+m8*8O&*Nhc,[r-u.rJWN4_WU3q&WbJ9Bm5uFZ3FT)2g?om)G1T)E)YLuHZgAMZ+q\=RH,Iu@,8Oe%N+$=JI5F'4M)(k9(j%;m7*NT-1!5ms>_#-U.93YIiir14M(>2/KT7Na7ht#]ka9;Y=X=XTI<iC8&R1]B:f`(6[P\4N!+TaP3`qh#0>Bl:,W0s)F_^It_Zb`B90!hAdfD)r,>$^A0*1HHO'`)kUn.A;n_?*rK$aH1[&j9lcS"EnefO^6#EXrsB:k@9a6/\YC)*LFfai(.Cj$lsC3hoo%UFefO:fgjlhY?HXp_sPKtu?cMR?abXI,o2dPR:nn3[D-Cm0%u>f249I2fH3n[_NW_e_P!=dl'NGD."=,rr'M!^$6t=ebL3d3#Quk02>QYg1sTg19u-9:HG2=uidH,#!A&).:@_rI@_S!S^3=O&stZeo?Cu'ne@1B`_uU54/oE:alYE-+J;00O$i4*97;a-#FgMZcZlp9>!5d3o]P*;FX!F-XJF$D^+J"KUJCl>*^!m%t^&3d.'-8\Tl:&`/`]0.F]Q<G`2&K*<u.;g?G$B0mp\G7<$imb:Qph9OgfeRisXXaIFODF6p]IEh`OQ)a1H4Rm,2IfIl&J17pNB+6`=U4HH1<%O>`LKq#5Yh8q0&H^YXfCg&M1qBJ0E^kk?p/\l\,Z$f0X*SS`#E<"Ed0i[86_8lB/-ft15)0kfbq:\\"8ZM&!*16oq?c'rF^6q,gf1fDcZZ9'2NN)<<C>BjS4*:u2.ViCp%itep:Y'Bn9%j]3/f`Bi4:_7W,m2JWlN]p.2,RI">o4P)Q^A:nI:W^2csO-cALOgP^oZ6S\j"@&R)*L8-[f51UMOh3I+f6nA(&0ci<(FlXu(0)(lSO(GM&:L].m'3Yp2[@a6,Qmpm1`Be,`Do`>08Pf:I:7LWRi#M<.+LYurlecI]:HdlS1(7BU$cfGWZUN>7Jum*jCKYl6FshC&)(9nJ)YNkut#Ub?B+iM3.bS,8'NC'%c28"j/e)l.lB.6/`E$_?Du\S&aC\hN[4o(BD[QZ](a\Q<5OF8Ff<<(443Ls%DGs*@RUr-X,d=Vp7!^+5QD*9%fQ+>P2K7oR+f=jaTJSn"J(KZ,M0As'H*/acnR^TUI_^AXh.)qs25jHfa9R[3848iuDJUK]G>LFeo/n2i2=7;T9)@U7ZG18G7:9o9tWH!r$2a:Bbrr"mc<.adj[9_;H"=89)%VY;jP4u9EU^:!#)9C8ajC.F(!B@7e<=f5XAiNYXkG@0D7U#.c_ZNR\@Q+"^7e5#XA^1nrNUh\VYa"`bk#-!Df1('p,%+=Qt<Hgj^K.AhgEZ2G/K^oT<(J=#8C[/a7QXsGiHQ/p8FdVX"nW,b;"8D3=b0aLd0lH6nLiheuG26t(K![EBmc4a\YW8l;P8me$4'%]P=R84F)t=%HpO_uX&7@\?^K7:(l`=i<,K]L4XDRJ>Z12"^o;5:GbH/]QL1P%X;Y)GRi6INVp[;?>MrU8Yj2Fbo\f>k*I+%X<UX)7lY&[)Lj)-IF78pZg;rT]KMYAt#U-HCR7,MA3<mdeOEE@7YF/WboNZ0'.]W6!i2%"X<6`q/6Y'm`^5'XE!J/>QLP8(p=4PZOTf(mT/T<mP)gT4M,>MRuiWGS+=.<!WD:N#%@BMQ0bEWa.m?-mRY~>endstream
endobj
14 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1391
>>
stream
Gb!#Z95iiK&AII3b[jX!88,_*8HF\mg[94e/@sNcD(iFR&oB.b7'37E5n<eH4/<ou*_gN@,KCL4br;En50f5j`JaQ\ZikWgK&oK,N5KB>9G.Z4cgY?XHj^3]4H^j!&Q=g2+Gk&ectn:@6:Fkj'*^1N8/t3_0dC\.`5'bQMHC"@Jb=#uJ4,8aYlk]G:rV^f]c`2RF=g(_<:\OfLbEr1,t&3i@@6uu_=.ah][VTa,bZcJ6<KMWq!H73(\#Oa9Ufq%/`=sX1$Q-!/']A!^GnApgUuoI#/?P=.;W:YW]Pg_%BPS\Y8P(8P41k/O7>H((75(ACn3G0K"fa(][FT.=C3ed,FIIXYY$0oWDFc\!F_3=$BmB-II^[l!mEFY+g*1h"u;)4KMQAP+Cj[F%ndQdMGQm>q+<b5P6TJS6SbGKbX5*?+]2,E(r7(FmN7lAQrXd`0I[&mU,\bC9FkP'i%#9#+d`<Y;lkWMiGB(6Bs8&Z]%kho@/3Ybi`/ZD4Qp=q>s]1L\,q%2&Y`c2h0XKq#KB_^Bm1m[pSVl+S$)19ZSgsX?K01jY.Z29CLY4^$'@!'\]=ZEFTImrkQ[:U/7dU)Be.j%hV7kf`S'R5@73GS+bp?-mCKkl>:s\Jeoa_c]>S-gkC*T.Ik("Ems[Z;YN&795X_l4eO9jqQtC7Tpt:t@X\elt<Ybdc0T]@"3L_AAI,(]=ZM&E[+\3k<n'S<S/"IK#H'Or9G6p-QC%<40fZ^_7cIQ&e"?mM]j,mbcbdr-G.3)p`$A?I'ZnC<PO^]@m?/uMC]/i!(+[OK+:#;9O^c*)c"P%?lRcY&+a3bQ7?#%T0D,SU$YNEF,c$*!Pqehgg:)IneD@CdFgodM@s*7kY-qYGlq*IdP6L4if3)<IOG:4Z5V(>uW>6;Rs<`%Eh$LI,Amh`ZmOWk)Fs+A`Dpq3P5rT"B6cA3t"TpjoQX!9St'a4!iA4%BgIp=hmP,PFm6pC<_0cu/?Pl#APYhaAJi-_C2=F@)F[;O%FL+dACMlgj.1I3H1HAgU)s,/B^D"e+uqpb)aLE'OF[FPf_=+O&)&hDNaaEQ5?.j&m0\hMcddgjeMY?eb0WtHjZ4[g%lS7"DgKq$;5^LM;SL60\k_OT"1__RqH!CWmh3o6cJMaK3A.`_Qs66/s]6\mtUiIUutqD_F+_V`C1"n,-M4aS!pI1l'H-?pSg\Hmu^%.t3kd@K9m5CQG$YYcq"p>j[OC!8!2M6"t%m`Y@G24elVkF2'VWMcMdI[/NV2s3q"'o$5iPe+mUjP;Aa`As7T^>u[ujedYsB;R_@]eu:aj8@7jAkVMN[K\RSFB?VhPuR'sK2%Bu?(f/oZbmlk]L-bp^^ZSOMi)W1)b!2ds2D_"H@qKp_uK;<i4f$qJq!d_"+6s~>endstream
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2009
>>
stream
Gb"/'=``=U&:WfGf^Y/r=qE;mIV?c]SYM$_b/nbj50sufdH21,ZBJnKhqeMIOGXRj)3<4$=;mB,!daq)Ib5qKMB>n!%hjKN-SU"fJ8ps(!%*PUa`BG3=<B-3*UZN=M"%A43=oQ]5:C,E$FW;ATDK$Zl4VF.+?`1VchDtM4P+-s'FI#dYS[r'TroboGg(=nkK80<*6us=,dub.hp-0=o<`j.EE_hXc/sr,E!0s/10TAWPhE2KP6A=$]R9GfSn'WWL@ZsSiOC@:33V7nEu4PBNqUXO.P!B1"*L<s/5K5KmD.ck-4dJcJUY]eiP'E#oflM(0EHF?nnA[QeZXR-PQi67\mFF.G01f]3pT\)#XMbOO'<FV'"BomOH+E*Z+*Ms>9f%XmLi-g2ir$_*@2#5*Bo_?h3cPE1;%$:@p5-0q)H[/_<;Z9).OZM"<fhYh8^;KVlYA=N?W,=KGNsgM"-7?ZCPgK(doEKF0!<Gr\W@oI\cL4"5"c'$^&960hSsr\,_80KkGc*[`QA"&CrE(\(?1[Vq1;MIT=/D`+D2BG=hhh.`g$-)@?_L$DMd02i'HHcLNI-;PiB:SQ4lmHtq$%P7j>Q1@T;J[*@<%g17L4F8KC3jB8Gha:#Y]p6LYCD[mRVk_.GnA/)qu$oZ]APVj:4jU#kB:+YY@:%fN/Ce9]QM7pu,KL;]6mSMnc@m[4<jV!n?[]EJO18"?sXm)][m]q"tn\@[l<W>GHdIk/gA(iH.]e'[bYE+8.^:*Y1B_pJ!+Xt412hG@k88Xc7bY"?a_JSf5/lOQn/chfk'P'3,Gs9N[F-U;#pocMFeDFaUTL`(3,1dK.VdB_h$I0RmP:TB$?rgg'Jhf!R9'nq`"N`8qT6'(t+>+h-7sTpk9iP+c8*@-\'IPuS\(flO5FT#r4(T.+NAa2\XAEI7Va42J_H]Mc,fa9MZG'K#HZuS@2G2;8D'07EBrRF%n)miJoJ5VI$8;k[75*"hZ7;tmgi?22q^:WGP]Z:eOKNCjpMj.q=e&qAO_62l+FSlsO4OqY6`5(#<7C/`L10s-#gOTQeDaBV`\]jugNua9mV-rNUNEM"[Gjs;p+GEadl7\Y@A[!2D[uLPNXj)X:hcoMC=\[`H--^`T!Wo8D!p$&OL0F16D!K[de<'OOR^+W1hiF$L9uqnp<%&eCVus-kD#4ma(rK8U'dVO\tNNuVV!N+V%CjE$)UX'_10A/5u.fn,f.YPJZYh`0FD96eY!4$UM:8L(Ia`,clMpdG;pJIqU6WZ_`<[9+:4e7%Wnm%(J)5aWp$Ce,/UYok#I\5HfHhESM*_E3^<W(jmi5qn_:r?j#.:dCt6*+cN%f0?^0d6U,2A"Vq7gN2Agc-IhM]LM;HngdG#,X^JdS"@^o7RBp;BC9p"SN_Z;#H>-rb6q9i+qj/*FVjs/oCXpVoU7r&h#lt/SN[-]A*96WLU*X>CsFA]5tcFRVAiiGlk/F&[Vksbo>kO0]d^.+'pV*"?,qa`Iqe0U'&Ki^]dVS_VaB]Qip,M%Z?Ic$/KMm2b9;dH(><YPmBX-r'oq7X]sf8,cC?bC6Y@\88lVc6OP?@Joq=kNj6#k2el@tc-k"H+*9$#Cu@oTkU--";4\Lqe"`j66D5)0hhF3;\*BjQi<#47:c(``eW]CcSruodd"k*BNa?PUam68!8li/*mVpGqm,)KW3Z!LY%nk&>.Z7)qLBYs"``Hbg`$.D$T_TF:qkhRNJEH1_SLmUV3c=f9f2Get:WiIY4E+%d!f#e%/,<eeh<6odcuD->U/'o]7W.>j=6J?V,TP"F7_]T&TS`DK0W..+ZLj^&.>hk60YBik5*sSmfn\C\0U1Oi2;PD*JE=9bqd;-42c2@K206/'uqO/eoS;L%m,c1<e>[(j@@Jkj4p4^NY;[WfR]d[P+Aj1f5V^CG7!.GfSnFi0C;"6V\>oL1)+WBbc8T>;WIj(c9o4pXJ"=Wc`0Go7g4uLJr`D<)LEo@rN$UYgmp/>>9sdFVLCC>mJ$MbTC6k#FUDDE<~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 627
>>
stream
GasId9lJN8'YO<EN-Zt=qJ&*P5IctF7AU?i'RJaO&pL[DCmH@6Ol)2jSHT/$'uqtVj70de!"Vd4n#QTI,e1E#&/*(uKHc-2*q'a8K9=[3W#-4O*]XOI;?*<BYleH0g.<Z"\KP`&PSI`2Z]H?V(h(d94C'WA17B/_5ZYhWl9FhadSbh%'ua@ght&4E[\r:Z:[A/-Ym7M;6;3/<:a8D6`$RrOiV^U6a#gr;GJ;=Z\h<N`COB0)p`cQNp"e_Pg[<hAkBQ<"Hs%OAJ*:2^q1dt)heRkJUa#&f3Q8c-/OY7GeAo3n([+ZZDLY3N2HUJUf,79*M/3`W9Wql*0bR_N*CO,O;>a`W(/uUuLU]^jPVJrk9<;[Hnih%&/QL3:'fXm'S_%CgM8aH_P2LA2RU_Yn$kHt>fM.8>#"p4,Xcnp)E%JWsbuZU5mZfN@Ot":ZiB$)(Vcc5?<j9DGI2bn"FW8.+0'6[lT589*a@RO4U52JgV&`1;gNQ3[*;&uOcT*aodCXG@am,l5_e"P.S*.5\.s1ZkoOn2YRE$3,ptQYb22AVu3VkgoZ(Lla#AF8'E09s@Oa@,SD[N+ba.mQ.?Qr;#ibP)C3T4Vh>EijbS(B(_0:kp@4>=!HCW,V/~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2100
>>
stream
Gb"/'=``=U&:WfGfZ?fJ:1>FNG_,9Ma#WP<9q4aoV]EP!,Xg$,$&4-"35<08?D;7-X?DQ8i^;]+I(P;Bm'd?0-N;Hi1X#i*:#Y1q$C&AK#1OtX9TS0"eG*bijtb8+J6:U6Hj7NuoFI1kOb;[,f4R8NDL-t_2V=N4c@$02kBS-ATG0),DGVIICO4b?_PuR9pWe/E\;[+pRlIS:hk&`ja0g4WEEhg,c/oPQE!1$;l;9.&R+1XGQtESoiT'/7*6MA_iEXM>^8Oq_Es638H#R`0G>M:2V*kH)`0El)Obm=+KBWP5T5.R3I%/fBq6mbiIk3(B(>tN1U,(r+:P(RJ")nHHT5\'t0UK2iH6t#*AU<R$Xc%(!\2`9L?/((W?k-m'qe)nE4CXa;+$=&G*G#oL\SV&Zl,JBGrsUP/Vc6%VO*hr144%JAZl.=CcohY3_<s?A.))P$QY$b=p/45p>\]D\9s8(h\Mn#+H"bE]3j/*nj8PD6FSsVhlk800aM;ZB,`GZ6!C^7O41o_U+8CQ:AsmRe&+JBnh^@bC^<MI$I>ltsr3o6DndW>%"4]9RhY1@dZ[U^:eV_sF=hc>rq&D(Hl7#p=AtU;"Xk'I0Uqs/,q9BlN]G20:8ttVkMN/UrK'$tR3*c^f/.)];]G-M'#-rdRM)nn3mm=9=:Qoam=:U]n*mM-iXF&XoB9FWF&>V9r-3CTjA>Q)X`>*hiO9l)oAQHlEP[!KrgrHaB.I1;`*Y\c_Mt0b3.PJ3CB0/OgA.XTuZY*K9ZhWRK[ZknfdnW=LMA1qG7Z1(h!ks%GDJ\-<(Gd/ZY,/4HfepGY\DqOp<HCuJ'$$_G&1j'i!gOl3$?TU:b+!6K5,+/MZLPU>3Jau*AHbX8XXh^68K)$1`ml*?T5Md>ak(O:IaMEmPC"C6Hi5&1^!l$dWffIWBp-N(ZRccq,eoVLf$L\@r@T!X$=KCdnn$@`a6^OuD&9)kA)$=h&78MUB^2_gDAM[<0kB0i!3jL5EUC/'NSq+M<o+.HeS8^S6ju,3eW-,tT\*(fRi$m?C%k!&NsA$jf1u;\@Ebne./]5s5rJZW5)=-7>Z=N+[2>1dcF.gcXWNHFbbd=,]nig4!$Ou$2S-2&9N[3?c#(l_O#@o!_VPP5,jAX_F<G3XZ;?D%Kh,:R^cI#uPd=)Sj4.Z+?<gF^U"cj1HVlTFLm/Z`Wta?'c'V6uS)s+Cf/`s2j=LEO2nD/$9:QGT-rFjH!]qQSlf(n^3j&=?rth'U3+j!R&;L.e<Hl;";[Ro$D\*/Vq[AT=GE9I4@Bu<)/DJ&X'\gm)K_8g\bJi$()<7cN6HpUr=JrYhYG<^&AL;G'^6S7O("mg:a\8`GLiL^DcUY%+[@Ve9-t#1[XT5P;T+TlOI'eM&5HkZ6S1qLq$708lIc"'GCDeCiDY-HC',=OcnH2pm:$jr]cV&($@f_p1&B"q:("1#,2U2OT7hB)oCs$2"7P3+=G+VSu<MU=s<8o0"8sFUt]2MuaCLJKQq(.AZW^cbOGC',tat*qk#]cnP-5Us7?'f`;DA&/G;F-bg?47`eKMGR*pq!okLZr?Q^=k3F"m?eH+.g]>D_SjR`$?mt68`FP7Yp4"U9%n9jQSeC0)g21cII1ON+gR(AC6=1SknL;kQ>Y8>3$g.E"SijhG-TnR;*MnLI.5.JjC`)j<`;hAFUUlM6:;q1-("\E<C4cLXYM0Uct&'3LE"#W\?.9W=!RQ;AJjRDIupnkA+!4798UVHo7Le$`mAo"do%'%u1M/1b&'"1":5,[um_fg7D)Fa5UL0*'@GX,ih5#]Q'pBeDFDBT"P8Hh'G*gLH$*bdM<EJc#/E<O[Atdn?ppZBKj[EcOf7.f5o#mVjPHlfKsu7k?'\TT2>h2JG;j)DA/F"bb9:1,dRGt-qJJtg8sC.$Z4EUZK[nF9Lq%VAu:*L5;3V5^Zg>#_Mt5KB"gecI5Xt.O4M0c0`%pmF@\"6gGp6IJoeK4<hS\Ol%?cBHl#MV^#,HRSX2V`c>-RdK((NJFf'_B=QF5+X"OuM?,]k6qIm>Gigk66d\RTLlWk&^]QnjEr:+]g2+MY_R&0YU+Ri/NoKbXJpC:Eh8.j+fL@YI#rWT?e_sd~>endstream
endobj
xref
0 18
0000000000 65535 f
0000000061 00000 n
0000000112 00000 n
0000000219 00000 n
0000000331 00000 n
0000000436 00000 n
0000000641 00000 n
0000000846 00000 n
0000001051 00000 n
0000001256 00000 n
0000001461 00000 n
0000001531 00000 n
0000001827 00000 n
0000001911 00000 n
0000004130 00000 n
0000005613 00000 n
0000007714 00000 n
0000008432 00000 n
trailer
<<
/ID
[<35b33c1bf2818e2781e292e6fe49cc5e><35b33c1bf2818e2781e292e6fe49cc5e>]
% ReportLab generated PDF document -- digest (opensource)
/Info 11 0 R
/Root 10 0 R
/Size 18
>>
startxref
10624
%%EOF

View File

@@ -1,10 +1,10 @@
# Les 15 — Lesstof # Les 13 — Lesstof
## Externe APIs + Cursor agents + Vercel deploy ## Externe APIs + Cursor agents + Vercel deploy
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht **Opleiding:** NOVI Hogeschool Utrecht
**Vorige les:** Les 14 — RAG + Embeddings **Vorige les:** Les 14 — RAG + Embeddings
**Volgende les:** Les 16MCP servers **Volgende les:** Les 14RAG + Embeddings
--- ---

View File

@@ -137,8 +137,8 @@ endobj
endobj endobj
17 0 obj 17 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521105950+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521105950+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084028+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084028+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 15 Lesstof) /Trapped /False /Subject (\(unspecified\)) /Title (Les 13 Lesstof) /Trapped /False
>> >>
endobj endobj
18 0 obj 18 0 obj
@@ -149,80 +149,80 @@ endobj
endobj endobj
19 0 obj 19 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1912 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1911
>> >>
stream stream
Gatm;;0/3d&:WeDlq;!>p7b.\"PfK19A<-eD;)Sg4_1FBZ"t(`j8sMYqt7E2(pG"oij8$W/Wb/MPBO]Z@6jA-b]gDo\/<)`f*iLOi<5N8*#QDFX.f48,$]*5EIlb+[0$maYk8C0WKi&cL^87@^o&7D4U2t!&`4+Hi4.)(Qj9%4aU="-nHAN4#Dg]2iJYDB2A)ISCPTDd"M=!#pj=)g5XZ>-L08uP(sZM(W7n9=&B\8(L#E*Y5(*9O%<'crk0Zl%"MPY>N+N7KEpgd%qL"CfEF-^@r$BrM;9OYeMrue,KAd4*X(C1.3,p[cD>Wd5%a5+SaU9sTc/+-&3":GHm!QZ5h&$d;$<5Z:G_'Yj=`ePk-#h\WE]ghdAI8_R!lCq`G?VU3I%*')!Kg@m(paNk?)H43f*&?A(-l_rZ(RUe40,PQ<pOp<<R0k[['<(>B9>V;N!-nrq:1P?ME,@p/3IO]I%T/LSR\\P->@k_NRM>!2O_!9^Q"e2K_j3k)sf\cB%>2l.iNatW3OrUBOd#[cMfbGD9O:Y@m4[Y3J>!q^foEUR!tBenEMn-&@tstZ$98#XUN2VB:d@bn1[7&]qCq4-?HA>'f&E.$uW4hGR9_;/6<_gq'NF=-JNZOR"H:=YWKN%,iDA:L!IDd.3pAMPF9Q$8Ad-6AZ!JJW/,"&_Eo"W^Yolb0aF-+*4_*k4cJJX;8;]m$O_B0R[C=`g(S4YE-X7uVa\ktboU?Te=beY)fF5*fIT>(j_('80Hi;II1VYU6`C?<ro[>/mAL*15J9:0D6n*6O-A5)4,Vd3'Sqgn7)n7HSN[O[YD4,H#KXIYMX;Jhj]rM]O/(oSSF%8N!Sj:"YZbTlq45QHrWhTR6Cj1DGV.D!k8fXD4YF]a[T:KaeFITeI9l1>1JHblAbp]A#'o0B0p6%;&pY:dj7"0.R>rR=ZH#i8o^NJ8;$-Ukncj-i6^d=Oq6]1i-5m[HO8DK*4%.Ok^^b'7@D<cXr!"h2)l!(8!KIFXN^o([0+Tk*m5>/u>0fYN>7E!t;'JjKU&q&7?Kr;!X!S1AW)_=1S8`=p>;`rCRNYjO"q8,+Ucn?(I&A^:>hV0aK*^)phkW$.s3l972$P:"5<+9rF38E9if.=Mhd8W`4i;?u_aFPEp_<H4`Pb4@,=1!2<C1Dofu/3>8#8ECk&sE)<b9ZZjtLBc]eX(kQ5\"0gootLP1`sZ7&D;pZs0G5;eIKAr+b4O]4KiZqM&FI.Chk:_ZTl\Ihh#sLG'u?iDM7n.Q-4ajY@1<):kI#VX9]#O:[LCj.si_F'.UO-ZR[^*b/JMA7:e?>c)3MC:!ad?,r@*[?A<dbi3T;nN`m*F!Q%,FD/-rWIbX^rsXD4I(acSIJEur$ACR.;'q46U:J9WV<]IUN(PVt72X:IR9JR+&%(+:g4*[2i#T4Y)1oJ)Bk`3RW^X%p\(R'd\ZAs:>\BL_Z=.HnMk,P\>Q)LWm,Sc]R`M^8@H*6O0TB[peWn*t)X'h]b#,U)kBe0@-8+/X7PI(\.a?rC)X^T`T-W\C&QDSEc]T-=]nFc_:<%Y8E`%/#?jg\m5_1:)k'=KFM_Ip';j-PC`5AL1K9Tn&?;Kd4d+^#P;3SA4)WN,p?DfTe)BWMQk!@<J0't%[>=_T?ITi6PM[:U5@ruDW1tQd@,SA_0g87m]3^g:G:BHFJ!7c,_,Z%jZ3MQtP3!hRV%leRiM*8ps?'q.G?ul*Og:5kG[um<mR^S`VD*KeDNi&[V4N)td]3t2n^i]IhjMr9H`To,4m_X#`ndp6=*(_3,KW#TX%W&&:&?c>G,8k#f(H]F&L,/ZJ@#ecV4b`;(EuM1eH@S#=._a)BSememMioGG:!YjoTmE;,`D5ak0\"S@"f$Lqq:PPD:n0&cZ[7[Lg.Ct86.Dgi3&VFMh6$/?K4+W_;^I)0~>endstream Gatm;gN)"=&:N/3oLl3SA3H?=Y5<se:?#GYiZof&#?RaT(dLQ(La6rF?b\b!)]'aB/3j4\c#i]Jkru#aJE!&dmq;`@0n_K()))Q<#r%k$0YDt;U%QkYguY-p!"hC0!='5CrISj#V;Sl%%=#\(V]P@k)f2,Yh[b+m\Ba]5#FU7e.uOGu>jD,C&>(tcn*[:o`8qtEgVe*f@!@#6T<H-?Lg*<'@?qulL,2p8Wj+$i6CHjo0O2EHLQC>qiOt]&4IR^a^t0codB%j[c93"LT+CKTc3lXe^Z8QFC:TF?nIgTN0RT^FD:l=7:)j[\g]!2VJI0,a]MOg?ltn_Adh(/dSPQbn[3:l<J\$FF05q&c7H]D00!8D\[c`me9Hh5<5WEoZSW2HLIDO[C$^&sJ(__Q`%b#4JCG$2?$_XcE=A[:XS2F@lCZBSI<R.$`['`A-B9>V;N!-nrq:1P?ME,@p/3IO]I%Lebc7r=P8K&[pj)iqa5a0(V2mIFb:nKdtMk(+'XN"Ca7:U6?%JJokD6;4:g&K'pNB+pcb\&L]RrF,d==\NNl$$8:Dr.3!<u25k(9a`L,D38<R4#KE%n!/B$T9fnAFA!O6>!3M_<l@TYMjMejXS/4hddMEA@jH&F"kKOU=3=3!mYmmkj2N@6DC2.RAmiL1^l0BAnnu9MHH/f/7_WT%B!<e3QMotaE9$U?n@Y$qOKiR=QnMg`.WiP3ME,PLURqG>1D?1pCJRI"r2(/Y[1,!?@m^NcSc#:6>Dna+=\Uj;A&X#c`Nj!UC&^To`"Kjc*hIR9k)lF-uQq"+?hCk)3<g"qD=GN*d41r+R9Lc_ESCMhas2"NM<Ur[Vm,iE-EX:[E;nJ4-/M$&'Wj`3Zi#)>,HKs4!8Nh>`-X>Xcb-3jjV$A]%@$qR"CZ93n3>6)(#[P6Pl-MYTOLFN[5sVa"d8ZnJE+T"S6p.%S?)'0p6%;ht`ke:HP]uVK#H(\<$R$__g``Cm!uhqsDbnGBiYo0YIu)YhbrtGn_.kni1auV`"7uH81T8CHrJl&rDJW'bD\];YO9s2GqTO7Q-7Q\W60gAWmM2*MV)-^p"hN2MW?.Dms>G6X'eA&E.s6RoF"mJ(h!!`aGV<#A;Cu:AIUY]FiBGq^Y4>(O5_%Qq0IETAn_$RQ.6q,UbaN8h!IkFfabP<!m/SElV]u<@Vj^%qDKc/(;M6WY)q^%@bWpR>mJ*A83kk]=#g>9o=PJY;VuY46GqOD]#@>P"Sb=4Q$b@=$c7qpjuKu1UpDBV+Q_.C;#SCBNE`Y[Tcp&7R/#S'?JFmF'.UO-ZR[^*b01aA7:e?>c)3MC:j<l?,r@*[?SHfbi3T;nN`m*F!Q%,FD,l2WIbX^rsXD4I_E8%^AJ"IL!#t0.$I)+nQ]k:&p=pP7\us[,)k[59Wdg&#?pR.mD#qTn;^\h%)Lc'['me;26,6]X1'B[0!!h/f9re9lr`!(@V=Ze<^X,G41W:[-8I,QQoLil9VWJ5F_1*V#5T78Eg3]cq;+TSMi7>1&Id$E8oqMTL'O!g-]*.7";R051ZZXZNJpnX1>^cOMp`OK>=`6.$9\,<cc]TrKQ5_<P(`39%j*;3;NbG#RF(c*[oEWM_pmggN0c)AS^,`"I#t)W-U$4o'[LU*OJ&Os?C[',$6odcZt]1m\)HUT9!VI)D64k$Lh,bB";L;*C;\T.5^hnZN%T);8\g0Hi7oPQlqqZd_IT8APMHIBm:tNb/O;7_9fY5gIV(?P9gc73Lb6kp_;ltpl1BPKO#sq1f/Ird$dWP._sN*>8Fe_c7&9m+?ongOGWh]?aWPrAfE(+kPi;?:F!P8^.<Gf^dr7b&"3cm,nQfbu]Z?=@PWVf%4mOeUl?P]240?ul:f"tFN:p-3A*^0^ENW-a*]1HB-e4gn;4i<tfM#7=\%^`1K(U3Nd"HW~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2006 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2006
>> >>
stream stream
Gb!;d>BA7Q'RnB336UYU?s:O409TI]B?IXsB"8T]4QQUo;%g@HAS``2l1DaZO`,5\*>jO)9i='1o]_n7*1`!:=SSWPru_Mj5(p`[$C&AG!n8A'$t$ooYkPOqR)c_s!jRGjq[A:!Rm4uk]`_T$GWt^J#`BA4*H2--6MLU!Y2c$ma:q=>oI(:==^3pO"EcldXf]'h`u&^]&D-OOeb-=t_MI@gYEf[;XPO5;1MEmiMeY>lU+UXu(dn>j]?d\=V4O\LQt[SWV]o'UXFLmm*0+>G*p%[7(MXB!C7uiB`[WDY_sd_^:X!,cI)f[67Ifg+^K*?k(\!S(H;_SNa_@,5?lbd3aCtb;Z!'tA$"DX)7pG=*]OrHD_KJ&^K=Js,;Veck;3,^+=cV^)0i?8;#j!,nNk!?(T\#4_%2G*GW-68&H+jY<[S<e_XT6U2J-%Y';30_?FSV]^!a4nC6-i_,&`K'WaEhj,7S!'C2sZ_mAR:Yd#;;&)Pg8S,;7f?=ACMes:hBeu>[+_41`>]5L!Y_>eS>EI/+J&)f("_i:`oZ0*ra9(Ts@)&dFkQ?_?A_ql[iC&qn0c*?L&&-]=["!"K(;N/.\gnA3u-QG;dE7<<?pG0n_P8*-sUbSfOhASE_dW?m-0h<@j=gi(%?=>Y1@"Kn?Q\,bY04k"/C&3g!9AW3Cfq3A/eF9L^KTN<]@->%]Ni&1`HI#@s:c0Fj?K3nNu(!bU`QHr1d"@=hF@*(IA@&`6sP-'7>13$n<tfh@DN3ooY9g6+D8d+33"dR?dmc]sC-.bVCQ)baLSFZ-\NT,Zs,$pe#82k0IA&SbIX+7(Sb<g]_gq]j8Z<[%!h\J,QR]@T)Oj"kM8cQ&_-%ulpA4"U'hf3q?[Xr7]r+2GKf-&6D<U%AAUL;h@33L&RA2oj7Rast1B^Q+CfYO<_>o0Ji07;._$Akn<Q8#Y`N;TpneL&n;+(L_El6ZH`:3lRT%^/OPXH.++S24ZrI=dZ2kGb_#^<4`kCKmN`[RO>?KUWlD[:cX9P"*FCPLh1aT!$Cb.Bbl`\KR(<a8@b)uITDOkc7kjPZ+S!trcKhZcANQD-k'Xk_Zju1EWl9EYk7ukl)@6jQg3^'UDAF@&<"=*-E7>`S\4YMc`YC`aG-ZN5(.ZmP5%^BN*r.>WM3B-X9nf[ld"$SA]Ug/Y[g9?LC9N(nm"Uu-SN73;1EeC#6lN;^=pfKWRfNh2$o5W^H,+7FfhqOXHMWj/4'Y?Gb-&r.UQgtCCG/ekGQ:Lk7W-*_c.DKXP7),1!_/)ZEb5geAB':qlf]s)5q@!Y[JcX.U;#*_g0eE[:<([&XHS0*,6ETO'%F]]-F&<'D1!5arMZgO-WW0)"nQ3gX(IL/uhLF"RQI]/\d[5Jd^!%fiiu1bIpSJ+dP/k93LTR95U!()k.0Rr6br'VOkXPIRu;;)8bsmErEfSdm^^\HIqqS::<'Cm:lmB"ng'h1;?D4[e,<R.PQ[X==9km,%L9[Em2>@FS$DfpRkuJj`@Vg#p@SsHXeRs_quT?A6;@7;1B)`2<7qiN<8T\<YT9IF>-6_/=D5<ci^oh(9AKA5mMnr)G0D3lp8'b69Vf?DtNh.h=H%6mGs1;IYdrFrt!V7kY!2=<+&dhW%0jL17aF$O5>Vk5l)67S"&Kd??gQdgNE!F<q)M,k#l0g_J[V[^DF]WM;nlX8q=P0F'VPb?I[3T50Ir&BCi-a<7e+p$LG)GEZPt"i[&5XW^cqk87a..*:ENILM[]B1FDO88(mYpma:^?$C;U9mcB#Y))i(DmM#D4*%q6$2&hc.GL$J*@%YR,lRJ[!,G)g-LhDlJ)uhid=*d+.PSMadcP>S+*<Z#?)N/o)8(W$t^VHS\mqhr1$`o?6&lqA&%^@oCeX=p)126!8C[(LrGd0D7rGEA#k%?+iS/A(WRTq99VP4C<a[2;r;Ff%C%<Y'B-"?NAJ^dKh-4\0lZ"@4A0hq2Ol6(&BZZ0E"'HL\5Op<cO-%X"oH44<TXD$'-Y[n[U^&J*YR6H'~>endstream Gb!;d>BA7Q'RnB336UYU?s:O409TI]B?IXsB"8T]4QQUo;%g@HAS``2l1DaZO`,5\*>jO)9i='1o]_n7*1`!:=SSWPru_Mj5(p`[$C&AG!n8A'$t$ooYkPOqR)c_s!jRGjq[A:!Rm4uk]`_T$GWt^J#`BA4*H2--6MLU!Y2c$ma:q=>oI(:==^3pO"EcldXf]'h`u&^]&D-OOeb-=t_MI@gYEf[;XPO5;1MEmiMeY>lU+UXu(dn>j]?d\=V4O\LQt[SWV]o'UXFLmm*0+>G*p%[7(MXB!C7uiB`[WDY_sd_^:X!,cI)f[67Ifg+^K*?k)t9",H;_SNa_@,5?lbd3aCtb;Z!'tA$"DX)7pG=*]OrHD_KJ&^K=Js,;Veck;3,^+=cV^)0i?8;#j!,nNk!?(T\#4_%2G*GW-68&H+jY<[S<e_XT6U2J-%Y';30_?FSV]^!a4nC6-i_,&`K'WaEhj,7S!'C2sZ_mAR:Yd#;;&)Pg8S,;7f?=ACMes:hBeu>[+_41`>]5L!Y_>eS>EI/+J&)f("_i:`oZ0*ra9(Ts@)&dFkQ?_?A_ql[iC&qn0c*?L&&-]=["!"K(;N/.\gnA3u-QG;dE7<<?pG0n_P8*-sUbSfOhASE_dW?m-0h<@j=gi(%?=>Y1@"Kn?Q\,bY04k"/C&3g!9AW3Cfq3A/eF9L^KTN<]@->%]Ni&1`HI#@s:c0Fj?K3nNu(!bU`QHr1d"@=hF@*(IA@&`6sP-'7>13$n<tfh@DN3ooY9g6+D8d+33"dR?dmc]sC-.bVCQ)baLSFZ-\NT,Zs,$pe#82k0IA&SbIX+7(Sb<g]_gq]j8Z<[%!h\J,QR]@T)Oj"kM8cQ&_-%ulpA4"U'hf3q?[Xr7]r+2GKf-&6D<U%AAUL;h@33L&RA2oj7Rast1B^Q+CfYO<_>o0Ji07;._$Akn<Q8#Y`N;TpneL&n;+(L_El6ZH`:3lRT%^/OPXH.++S24ZrI=dZ2kGb_#^<4`kCKmN`[RO>?KUWlD[:cX9P"*FCPLh1aT!$Cb.Bbl`\KR(<a8@b)uITDOkc7kjPZ+S!trcKhZcANQD-k'Xk_Zju1EWl9EYk7ukl)@6jQg3^'UDAF@&<"=*-E7>`S\4YMc`YC`aG-ZN5(.ZmP5%^BN*r.>WM3B-X9nf[ld"$SA]Ug/Y[g9?LC9N(nm"Uu-SN73;1EeC#6lN;^=pfKWRfNh2$o5W^H,+7FfhqOXHMWj/4'Y?Gb-&r.UQgtCCG/ekGQ:Lk7W-*_c.DKXP7),1!_/)ZEb5geAB':qlf]s)5q@!Y[JcX.U;#*_g0eE[:<([&XHS0*,6ETO'%F]]-F&<'D1!5arMZgO-WW0)"nQ3gX(IL/uhLF"RQI]/\d[5Jd^!%fiiu1bIpSJ+dP/k93LTR95U!()k.0Rr6br'VOkXPIRu;;)8bsmErEfSdm^^\HIqqS::<'Cm:lmB"ng'h1;?D4[e,<R.PQ[X==9km,%L9[Em2>@FS$DfpRkuJj`@Vg#p@SsHXeRs_quT?A6;@7;1B)`2<7qiN<8T\<YT9IF>-6_/=D5<ci^oh(9AKA5mMnr)G0D3lp8'b69Vf?DtNh.h=H%6mGs1;IYdrFrt!V7kY!2=<+&dhW%0jL17aF$O5>Vk5l)67S"&Kd??gQdgNE!F<q)M,k#l0g_J[V[^DF]WM;nlX8q=P0F'VPb?I[3T50Ir&BCi-a<7e+p$LG)GEZPt"i[&5XW^cqk87a..*:ENILM[]B1FDO88(mYpma:^?$C;U9mcB#Y))i(DmM#D4*%q6$2&hc.GL$J*@%YR,lRJ[!,G)g-LhDlJ)uhid=*d+.PSMadcP>S+*<Z#?)N/o)8(W$t^VHS\mqhr1$`o?6&lqA&%^@oCeX=p)126!8C[(LrGd0D7rGEA#k%?+iS/A(WRTq99VP4C<a[2;r;Ff%C%<Y'B-"?NAJ^dKh-4\0lZ"@4A0hq2Ol6(&BZZ0E"'HL\5Op<cO-%X"oH44<TXD$'-Y[n[U^&J-0#X3V~>endstream
endobj endobj
21 0 obj 21 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2085 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2085
>> >>
stream stream
Gb!#\>Ar7S'RnZ;3%.hO.:SaA,`9am%)&A9ZDL((p7X*87A4QEZK+W`QQjM#h]ZQ.E\;Oa%`+;N&h3B5(S8et0qe<bbl;nln9bLof*iLOi>@qP4;]-UX.f.0+^FNPo7=E7\fh:k](uYhM3EKDL^8:I5gk2(^]R@f,%W0Rj1ZXD!>Gm\:E0Qa&2]Ii&BT;C`JsgK&Y,V0O8)%pfCuK@P?PY]Lm<.^B)RKm\:UiAZDaor..[N_L,8&,4oT[3Dt8`7j(Y*_n97m2GZqq>o)P@&p7IU];HE&s?E0hooD)'keIE#6@/*.5lJR"1-U+Q>Ndmis?p<MFXR^??q_"<_=TiUIk<8[K!>9dVBL!k`>oMX(Cim2IU1:"b#uA@\iBF5Zm9JrGJ5GOQc5`1O<?>S"i8#9c=VEl?%W@_F9LIL4&D)V"=DX>SCTIT^7#VI2pSl(".;L#'$Uh+]fV,D_.1WGBX3K4SNodN%F\GKnhtlOAYBB3!i"\Y__P;0_N"R`\GC^p?.t),lN-ER$YhI@RY8r"!n3b'2ip2D.+i`mfrWcFS<RHS5$#uDA4S?nY']W=rnMJ?7gS.#*C89eC('U+#BMXQSpqq?O;+8Z8'76cfhkqah-o^,+-lRj9CThk_RW-2u-bM?bk'00gkJ!K[*=kl[NU;r^&;!`>#2L0MXGIrZa-a(/.1DH3$]+7c3@f''B4;WZ%I=Ki[0%G3JWu_GZj!5,/00t\[=PctY4f?U[(!LKV$itW"+"0FL*Yi=$OC%V#c0PjhI$?2Hp3q\kA$;qK?m[W;dTb#BVJ$t?JJkJ)Ba-`l['H])CR)MB/,>]=^37u"qt"MX"d+-NB,^DbKX]E,b?A02eW22Ss:$kit@qMoM:]NFVp0cRo+S#?Ira='S*C9Wg]9$"(Pds:Ipudn1n*dC\2P3>/RDE]:5KWT*RB;(ASRuF]%Pb[8>$p9hqHUm=?c9Ke*'icc/gE<J[k]'Ute%QNSr(%JFJuO3QuNL8OB?X7_1H(.G*k7F"NmnZ;f9<U[]V<Yp.Mg[ru))X>)L$N[BA\g[b(o=R%_WQOr&X95n\H?e$KU?6G/g8okeQ7=`g,pG1Wh:]u#5h-GSJif79Y2V8(+WX^TrP7"#T=m=>F7gPKdc>4L5s>OTbb_;%GKQ0.b(hdSQ$"at?::[$^ncddUkE:l_->+kN5Q0KEVaWt[Bf43f8!GJrFLOc'VdTI4,6]%c1%n]R&LEHdj(ejZ'^Jn2Au=@2ZB5'R7^D3N-@7/rVVD3pNO#\c]t%X]d]jKDl%T`K&3CRbEOLM+N]cr0g^43f<6W=03-$&]7;M(Eh)N+Q;g_Ep?.1`ra(cTCr0\h>HWF3`k5u!e98YJbIGk#nNW[$W)G,.3fO_8Ea@7i0gaBJ=rPl6(`Lj3=rPl6ck_SKZ6#CQ0Fo6u(7H<<BMkcEkC'_6oeCh1#QmrQT4Bk+M[EZJmXI)8X16m6[i[*djk.Jk76Z>oKo4mWYXn+o5`IfD<`/LYn8%"J_?dW@kpT[a9:CrJ+=VlBmDN^ucS`Z*F.GdsWa=]0(F2k;=ieW!BtBQQXH>SXrIa/4klj14\0mo$L;/-oo]nR4=t?C5_Wq1m2-$+2oSQhE_NLO.@+Ug:`EKffX)kH6[B!T3M=XLU2q(S%K`0A1H#T_f`&M=XTI4+Xp?)ZNH$"pLQ4U>dQll6mm#L+A85lqah*Gj7a7q(Z8VTqOF!X\VI2NdiF;MqgMR0&u?.5,I(3@`a2q2ij#+=(Cm.#qL%KKLNJj#jD5h,$^fAC[hf*lG^W,!6('F,cn^8hLp%n*R6LH`YIU<<*T42SnSnmFb:B[Q?6`k?Ug=,920_poO&O^buupmA3"eGlMq1PR?+H30N+(hpqu>HgbR!QVZ:5[bXZ@f=]3)@[VPqDbFg;>i15`j9-`2=!;mRVn+UO-sm6B>]DZF-T5JUd-u:oq&,3S>$ee?#TB3Cg4"[qHLhkj5\$#2ZMnI7@]u"!r=JLU4pn0.Z#DK=U[<d.P_1;ZeU19'V0kSR3)'[I"CAs1%_NIXsTMO&>b\3p?"emnbm'Uh8s?S>Bu\?^IB+594'oU@ht;JP+:'Fn!Yler!REUef"~>endstream Gb!#\>Ar7S'RnZ;3%.hO.:SaA,`9am%)&A9ZDL((p7X*87A4QEZK+W`QQjM#h]ZQ.E\;Oa%`+;N&h3B5(S8et0qe<bbl;nln9bLof*iLOi>@qP4;]-UX.f.0+^FNPo7=E7\fh:k](uYhM3EKDL^8:I5gk2(^]R@f,%W0Rj1ZXD!>Gm\:E0Qa&2]Ii&BT;C`JsgK&Y,V0O8)%pfCuK@P?PY]Lm<.^B)RKm\:UiAZDaor..[N_L,8&,4oT[3Dt8`7j(Y*_n97m2GZqq>o)P@&p7IU];HE&s?E0hooD)'keIE#6@/*.5lJR"1-U+Q>Ndmis?nUB6XR^??q_"<_=TiUIk<8[K!>9dVBL!k`>oMX(Cim2IU1:"b#uA@\iBF5Zm9JrGJ5GOQc5`1O<?>S"i8#9c=VEl?%W@_F9LIL4&D)V"=DX>SCTIT^7#VI2pSl(".;L#'$Uh+]fV,D_.1WGBX3K4SNodN%F\GKnhtlOAYBB3!i"\Y__P;0_N"R`\GC^p?.t),lN-ER$YhI@RY8r"!n3b'2ip2D.+i`mfrWcFS<RHS5$#uDA4S?nY']W=rnMJ?7gS.#*C89eC('U+#BMXQSpqq?O;+8Z8'76cfhkqah-o^,+-lRj9CThk_RW-2u-bM?bk'00gkJ!K[*=kl[NU;r^&;!`>#2L0MXGIrZa-a(/.1DH3$]+7c3@f''B4;WZ%I=Ki[0%G3JWu_GZj!5,/00t\[=PctY4f?U[(!LKV$itW"+"0FL*Yi=$OC%V#c0PjhI$?2Hp3q\kA$;qK?m[W;dTb#BVJ$t?JJkJ)Ba-`l['H])CR)MB/,>]=^37u"qt"MX"d+-NB,^DbKX]E,b?A02eW22Ss:$kit@qMoM:]NFVp0cRo+S#?Ira='S*C9Wg]9$"(Pds:Ipudn1n*dC\2P3>/RDE]:5KWT*RB;(ASRuF]%Pb[8>$p9hqHUm=?c9Ke*'icc/gE<J[k]'Ute%QNSr(%JFJuO3QuNL8OB?X7_1H(.G*k7F"NmnZ;f9<U[]V<Yp.Mg[ru))X>)L$N[BA\g[b(o=R%_WQOr&X95n\H?e$KU?6G/g8okeQ7=`g,pG1Wh:]u#5h-GSJif79Y2V8(+WX^TrP7"#T=m=>F7gPKdc>4L5s>OTbb_;%GKQ0.b(hdSQ$"at?::[$^ncddUkE:l_->+kN5Q0KEVaWt[Bf43f8!GJrFLOc'VdTI4,6]%c1%n]R&LEHdj(ejZ'^Jn2Au=@2ZB5'R7^D3N-@7/rVVD3pNO#\c]t%X]d]jKDl%T`K&3CRbEOLM+N]cr0g^43f<6W=03-$&]7;M(Eh)N+Q;g_Ep?.1`ra(cTCr0\h>HWF3`k5u!e98YJbIGk#nNW[$W)G,.3fO_8Ea@7i0gaBJ=rPl6(`Lj3=rPl6ck_SKZ6#CQ0Fo6u(7H<<BMkcEkC'_6oeCh1#QmrQT4Bk+M[EZJmXI)8X16m6[i[*djk.Jk76Z>oKo4mWYXn+o5`IfD<`/LYn8%"J_?dW@kpT[a9:CrJ+=VlBmDN^ucS`Z*F.GdsWa=]0(F2k;=ieW!BtBQQXH>SXrIa/4klj14\0mo$L;/-oo]nR4=t?C5_Wq1m2-$+2oSQhE_NLO.@+Ug:`EKffX)kH6[B!T3M=XLU2q(S%K`0A1H#T_f`&M=XTI4+Xp?)ZNH$"pLQ4U>dQll6mm#L+A85lqah*Gj7a7q(Z8VTqOF!X\VI2NdiF;MqgMR0&u?.5,I(3@`a2q2ij#+=(Cm.#qL%KKLNJj#jD5h,$^fAC[hf*lG^W,!6('F,cn^8hLp%n*R6LH`YIU<<*T42SnSnmFb:B[Q?6`k?Ug=,920_poO&O^buupmA3"eGlMq1PR?+H30N+(hpqu>HgbR!QVZ:5[bXZ@f=]3)@[VPqDbFg;>i15`j9-`2=!;mRVn+UO-sm6B>]DZF-T5JUd-u:oq&,3S>$ee?#TB3Cg4"[qHLhkj5\$#2ZMnI7@]u"!r=JLU4pn0.Z#DK=U[<d.P_1;ZeU19'V0kSR3)'[I"CAs1%_NIXsTMO&>b\3p?"emnbm'Uh8s?S>Bu\?^IB+594'oU@ht;JP+:'Fn!Yler!Q#deee~>endstream
endobj endobj
22 0 obj 22 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 704 /Filter [ /ASCII85Decode /FlateDecode ] /Length 704
>> >>
stream stream
Gas1\fl!<6'Rf^W*6hCpFZd)e?LjD^N>a6<2qjTn+"6Y1/H[G`-rQ=[mq!B(1hcquI(B!AEu.IT\n1W]G/3DHMfT3(OK9Q^f17Oa2IX?<=%6=5K1A[)?@i!P]hkh6J_4r%Q'ZI,Eb@8:PMA1eTIA)hBi,&8:7)0n7TcS)SW&Oa:Z<U:PTjke@q5GOnUj$Wb4FBsl:>Oe&/]]6+fQ&2dTjlG`^k84\pFDL!q49SW3]3$k4mA(+knhU.V3UC0gD`)D;Bk\]Erd*05l$-BTA5Q6up^r*T1_8GYIZLj'RNZ1'T=Q;m(H!&*\CEUsK?++/u,a+JT.7`bHumo[F8gV3'P1_8`l9Hs89o($6tm]>oqGC\qS%[[_%Zg;(feG/S?nKfufQ]hcWp0?^ISZ0n:Y2UB(B?$CX7.gMtL_.Y!jBp1@LEphkpR)$YYPqb"Ma_<PG*TEu5VU(3<=>sCMh%.<\4G*#K=E$4Ca?e]eAuQ2\bY;VRf<nUlZH_t([`Vt9&$e%HKN$)qAX.sp\!u>bH&Uuk/8u9&?!>U"@!Qi7<p=JX/<?DFPs&[mE>pA"*+olORo<LkE0o_Ala.f9OV%X*'/PbWI/\dZ2PD<JcqI`=%b]%$MYbqrU)+FoauN13od%_3Zma+7dlS@!F7%TZkLZNqq@qh!2s%6I.uW*TK*7$gIa<M>24_Le&DOL8FE#%p!mdba'E~>endstream Gas1\fl!<6'Rf^W*6hCpFZd)e?LjD^N>a6<2qjTn+"6Y1/H[G`-rQ=[mq!B(1hcquI(B!AEu.IT\n1W]G/3DHMfT3(OK9Q^f17Oa2IX?<=%6=5K1A[)?@i!P]hkh6J_4r%Q'ZI,Eb@8:PMA1eTIA)hBi,&8:7)0n7TcS)SW&Oa:Z<U:PTjke@q5GOnUj$Wb4FBsl:>Oe&/]]6+fQ&2dTjlG`^k84\pFDL!q49SW3]3$k4mA(+knhU.V3UC0gD`)D;Bk\]Erd*05l$-BTA5Q6up^r*T1_8GYIZLj'RNZ1'0%M;m(H!&*\CEUsK?++/u,a+JT.7`bHumo[F8gV3'P1_8`l9Hs89o($6tm]>oqGC\qS%[[_%Zg;(feG/S?nKfufQ]hcWp0?^ISZ0n:Y2UB(B?$CX7.gMtL_.Y!jBp1@LEphkpR)$YYPqb"Ma_<PG*TEu5VU(3<=>sCMh%.<\4G*#K=E$4Ca?e]eAuQ2\bY;VRf<nUlZH_t([`Vt9&$e%HKN$)qAX.sp\!u>bH&Uuk/8u9&?!>U"@!Qi7<p=JX/<?DFPs&[mE>pA"*+olORo<LkE0o_Ala.f9OV%X*'/PbWI/\dZ2PD<JcqI`=%b]%$MYbqrU)+FoauN13od%_3Zma+7dlS@!F7%TZkLZNqq@qh!2s%6I.uW*TK*7$gIa<M>24_Le&DOL8FE#%p!m'UG&c~>endstream
endobj endobj
23 0 obj 23 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1519 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1519
>> >>
stream stream
GasIg?$Dc-&:N_C9_5'U8*g*TQM0seBp;)dl_q8OIN5!?K@!f=7Nd=7fD5*1?!tJY[OfP91,F8ipYM<L5k2bYs'u6$IL\ji)))QlCLE;rR%M0)mbN/A#<\57&>?%Y306[u5:BT>%XpZpLdqjf%>bE<8B$B_OTLPl@E:b`2-dof(m$GEToqYTo)f_Tk:]BA3DM/_*sBu4rs#)Nn0/K%kR_A)`F*AqR\X1f+UM_/kehcMUXLk4;ts=nFHrqc,(m)2;CCcN>]Ln&nT9.`<GAki9DG1S3\.WXSaYFPr!)<PbZqjV;KCbA]Vk9qF9Tkn]MuN&\dgf[=(r_.hi%(RY%\h'i!n%p.O#!)EA(X(E)5E/-m8[1^rGCuWGgTpk4+O0.TLDGX2[aE('_E9ijUh&kJm"G.E5%02\_rkjF`@B=Dd'uZi^U9D!s0@iEOmHUb34$ZQpUZ:h9@Z5W6n?NF(b(\+VANbbs=oUQ:-kQFm5q%6]#A`[Kf'E<-L.$KWeMAYQXeK[n9Dr7[&Nf_?';ho@[7?kMu'8c2/o:Wjq@9S.[tVXZuc3^6#e+JOl)GPt*PF\GnL`G#o]K*_"shf8mq1VM5i:Nd'qBPT>S36RDT&+L-1HEGX*UfG[dDahCi-(Ia0SmTaV^-A%bH3N&$?`3pd-TD?nqOo0coP</9M@4qqGLr:tQF9m4#d5%Xj2j!VCP3YM4K59!m"Sag#mceQm#S*r-Lok._tkO1?oF5go+@N-cj",bUo]\Gi'oD"pL'@-.b/l?]3r"8bE,eJ3RA7Oj54Fsh%#TL5\.DoLU\:cLbg(Pjs>DFfM_&!#gRS'fB'N`ZUYkM?Dgr;)D5-/KHMI:.`H7XD-8,dX,,'qjND@[H9Al%SkZD;TD\;,&3hGS9co##CaF)37&X:jVj!%\)(^[nllU0[JqSaIg@*:7V'3rYPg>hk?h`TjkGDZi^SJrO*SfpMp]^Lsp.=+ON7f8.gg6I<Wa1Q-8osbas5O6O;mjTdoFEY+-mPj8pm11cXS%SnP.<4J-_@pPjl]bMkZ'^fQdLL>':j^BeXJ$;[V<I%;8fV/8h'Ws?>K9LU7fuoQqQ&e)_r@rO:Rb@aE2jSle/[cP3QF[/mgJMMmP'\CnO1kJ>h;CF'KU]_PT,@=c9LAr@?07Xik-_/i^++PfEKm.*@7pfs56cX_eH,2)67AkL\dcQ,W;XfqlY\8nfG,p)iob.ip5-06qpSRlGi4c_54R-@#73J;Q9P)0R`TCbY+%WZM]NC5e4YeNdr^MM=P;kK+W(c]9bAWt#,Fr9#!;HN7-sUjh6pk+L8u-cKpBB5fl:eK?B*34jQb!0ise!0RrCBDgSYHEjIW<"6kmY-<[eKfXglh`To96`Z,>a'a;;i7r'fYW>;e&13fFjfecNcG7NPSH5>5$`<3@d2iJV_o$/B4WbJKN2I;u9lYf'Zmf`#3kNqNFPtM,]n(kt/Z6(9)"#b/^qU%2RW;9^Vmfdo[P]^Gfl/W([I;+LbHr,0ANdc>06ZmW'*WX\"5I;DC&~>endstream GasIg?$Dc-&:N_C9_5'U8*g*TQM0seBp;)dl_q8OIN5!?K@!f=7Nd=7fD5*1?!tJY[OfP91,F8ipYM<L5k2bYs'u6$IL\ji)))QlCLE;rR%M0)mbN/A#<\57&>?%Y306[u5:BT>%XpZpLdqjf%>bE<8B$B_OTLPl@E:b`2-dof(m$GEToqYTo)f_Tk:]BA3DM/_*sBu4rs#)Nn0/K%kR_A)`F*AqR\X1f+UM_/kehcMUXLk4;ts=nFHrqc,(m)2;CCcN>]Ln&nT9.`<GAki9DG1S3\.WXSaYFPr!)<PbZqjV;KCbA]Vk9qF9P><?E.:N?&+uiX#,mRn&>)9f<bu$n-3Ps'bQ%P\/2>$\0l6(P`UG)@,l7!e@0<Ho6<eSQ)Zd_<F[<]$No6-nQVL$F(9I4'OrJS)iDupo"i9\XL<*Kg49A-[eH31n1Es4;AY/#=V?d=-o-0h+<+s[7PFAO>C2Z7k#63sd7;(p9AY2tL*"#[A!CrO\,_8'L%:Mb1==hm_Wk]]IdP)bD#B+Yn)G?VYR#OO,lT(HVe(u0-G_kuds.QBSKB%C&5brP]Da(c3[QDaij=N?6%jLJDn1JIR9o.E-Td"s['^`:S7P7;LNj%S^"2EPd]-pC[j#2E&l'g(c`^qfhk*Sl]n1+#YLENm':a\GrD8YBqDE+-`<AMt]5(,J93WqUK\$U=nRNKf28Y>aSlF3!G!iEo"GBAcp.&(tPB^u(@Ju9S0H8/oq1qcQBS/)l;V&o4E$H4"HSEYQQ0Q&[>qk!WA]Up`*,(,8naEdJD?n96+L9ds6emYl`#0'co+F5^CoMQ!"R!AOlZ-7kfcuGaYL>%.%2Z*(64a_XQ/X^=[O`&m<CH"snms^>4e>t#c_adY:]>W&L`[8eVN4#L[Z\.*,#g/Fe&fSi%$njGp(+Y>5siD5mJ#bWdZ@ugb3.$qYPW=pF42hE?W,t8%W:qaquZgJq]p)8`bZ/RDQcbYeLj<'V)`pls)EY8WS6?Bq?NC&P`aNWHqX,Bep9grakW56'@5Kco(/paoW"JDbNM9ZM9\B\l:mNXgGE9N-t:dRV3HBJYI/]a;:+QHbbaXn%@N2IaG3G[A@atep$CBl8Tc^>Q`ljb7G8M>2Gg,F5h,5]3Ne<i@FH+1X@:d1rY=V,f&a+j(S',&8n36G']h[ICtUVBf!^:Q)OV,1o5!pBb$oXgm*al>V6gdQq[\"B'os+'QTW!:9q8rUkKl,9'0Q/*5fF\9%(d?:2OO,#eIMlb29*\hC*5E?7DkjYo43iOk=:o1<<n%3rc=(Y4b,%t;Eo+sF3n\!PN"K\1UnFXC600%S6`il!6WPC!6L&]1]D8g]i\8<WeTOG=4kEn663nqD]\H-U".,Z@k^)XE,INn=<41C#a<K4EnGn7B4,99c2^Z+"]KQ[BTE5fiF+R\Sr\d```!3!VRSoNg(^q"S_\$b3cJc'hS@!uQIFSWN-8o(i84ST9t;\@dp&nrgR8q_CcIfOg3;SaAQk&SZ6%oZ(VBJ<M#t?i!QG3#BE~>endstream
endobj endobj
24 0 obj 24 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1952 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1952
>> >>
stream stream
Gb!;$=`<%Qpg(Yo6\0,h'/QEoMX%DHBt@d,dbAPEr5)"3X]U?Oa[t)k^Q5sS[OI)M[1/%iaR;=7JDunqs'Z9(F:>(n))*#L;d_4t@=/BrO0+HYZ+986*Y:h<-a8.)Nqn3s=W)ISnA#MN#jN)^]AO#cKEq_5Gg?&O%pHgAZ,M7gSGL)+,+-CSh`C3;DVL!$,p)6ck4s`q@E8f^Dl?#YlQ62G*NW\LKBft"1=,]&SAN[s=77g#O*mg^E1Z5!r*=%Pc:aPW[L[!eUU-\NMc*"59\lWm?`#;'+2R^j`fCS3!IWM,M21/o_nT.S0G!YMPkhZjqc_;)9EH<OH%Rkh!HG^pe>ImX%eW[8#6f!*-lCpQguXW$[R]Uk\!C.):FLA)@*KJ3/se8agVXc0h%NuJ)@i-Bb^euE!o+T:d(sm-]r**J>mQS.G+;YChm35-m/YND95)_EM?G:IOj2jFN</4927G')1>c:.VpC@i<6!+<BZstZ1.I*PR-al@\;p&HV)!7f(W'oADa"EqGm-DTp,7;.&M-2Z?%[X@dRC<)cHqd_paM251&hF&o5pB:9#F@(:M%&'l$Sab?SW37d*>%<=$lji[sXF46!UrUX^0W,g(H/BC0ErLWtZ7nY"P$;Zk7O#WtO<VT2dY+e-TYt^5C+g\0t<s-)Dr('^hh17fsY?8p$!P:4],d\WP<HXIY\f]GP%Qea$7OSK-uKTXEqd@(^6-\_#m8&3?'CK_bUR,16*IL6g]Tg'1Z3kt)no(5#5nO>;AHK51W?MG)IYjJYChqV5d[*1a"TnHGH"H)["fMrnjamqD9*06mVQGCMA]ESXIrn,CGG\^'fJNiCY#2;Cf_gaBN"_QD5oS=&uq`bM8n3\:iGm"kOK\]&\]Q=$_V1*00MUfMeM$t/(>X?q0]O"sh9""o1>R,/pg4g$lcVQnPu-HTd4k%Q<OW.5SI.$mSthoOjiDth?,2f\O4A*ak2b#ea$1Xe*J7V=)FA1BmiL3&bk20&c`dk]%QdOO"GjNYD8lT*t:L"\]s_:`Y<lIchk?/,=dO;luMdTTn"oY%^aN%*t/FjBoqJ0pkr1`V3@^5ARK;n^=<*O*j3+MF9[gTbm%'a\QXkn9cV9M1P(_@VCu.U><(mkE5j2P8dP/RM&Z.)?TYTWeL/dLp*ka'dn&>iHl5R^DY^mJe_mgl]jrA-Sk[:ihbb103'76jbr4<#3KrUm.U<(l*9gSKB>4]N=qZ2f-<)//u'Pg.<Y^W8U]&nI-pS<N_VmCS;gqU"j+$RUQr2YtrVPWarZg-B0RQ2Yp+IK'3@)GI5k7q=Q2U$2A^;.;(Ebq$uK?8/Z"Pe+oKYQVm+C)"c-X!EJ=K@V]Z/4]Z=.^0b5'FDH`p$>L(E9ANkV-e,!lE(.-\6EB#*';'9jX[':0!=<SW]%<m3qlJK#;:)EfW.&3E?XJW*CYAlc4YG4`MOk(,e(U>\\`nl2qd0S[9)`p6qeIlARtL#=meCSBC"m8`!W:H,_urG<3-bZ&[-8uXj[5Q/?H1[`e!^O/5iF]@GAMUHa'=oFr"d=!6<moG.W49%S>-g3fO3:L#GcX@^4aEorL!JU$HZoUnt\SBDB;Tsj4?!]%3E1!^^$>J*umbu4q/"SnTd!o!m\C\_2dNV<*8+EZ.d[JGI<Y%MU(3G=q@gd%#^*C?=?:$<EN_kMO3I?$r<^5B"U#X$40H/_QiSd?8oB,F*KqB+<9#s1P`OZ.YbPu&C,Xd3"GI05*?*o%V^9C)Fu#84FBkm%J;rfkR:l0+!*d]4iHuu`<uuc+K,Z;S0"+P$$s'=YQs6ME)L'<I<A8@@>F5"oGfcjIP<mh])((rgT`@rPE8>G0u0T#U>=(galmnE%<f3@^M['JA?ur)5I%p`L9h8h*`I.UJh@V6qT8u-M-ACV2DAs9/Rh$Je]_Rl*@Olc_3J-bm&Al;@$.@s6g<-;qc]mm&7GGE=&9f,~>endstream Gb!;$=`<%Qpg(Yo6\0,h'/QEoMX%DHBt@d,dbAPEr5)"3X]U?Oa[t)k^Q5sS[OI)M[1/%iaR;=7JDunqs'Z9(F:>(n))*#L;d_4t@=/BrO0+HYZ+986*Y:h<-a8.)Nqn3s=W)ISnA#MN#jN)^]AO#cKEq_5Gg?&O%pHgAZ,M7gSGL)+,+-CSh`C3;DVL!$,p)6ck4s`q@E8f^Dl?#YlQ62G*NW\LKBft"1=,]&SAN[s=77g#O*mg^E1Z5!r*=%Pc:aPW[L[!eUU-\NMc*"59\lWm?`#;'+2R^j`fCS3!IWM,M21/o_nT.S0F.)EPkhZjqc_;)9EH<OH%Rkh!HG^pe>ImX%eW[8#6f!*-lCpQguXW$[R]Uk\!C.):FLA)@*KJ3/se8agVXc0h%NuJ)@i-Bb^euE!o+T:d(sm-]r**J>mQS.G+;YChm35-m/YND95)_EM?G:IOj2jFN</4927G')1>c:.VpC@i<6!+<BZstZ1.I*PR-al@\;p&HV)!7f(W'oADa"EqGm-DTp,7;.&M-2Z?%[X@dRC<)cHqd_paM251&hF&o5pB:9#F@(:M%&'l$Sab?SW37d*>%<=$lji[sXF46!UrUX^0W,g(H/BC0ErLWtZ7nY"P$;Zk7O#WtO<VT2dY+e-TYt^5C+g\0t<s-)Dr('^hh17fsY?8p$!P:4],d\WP<HXIY\f]GP%Qea$7OSK-uKTXEqd@(^6-\_#m8&3?'CK_bUR,16*IL6g]Tg'1Z3kt)no(5#5nO>;AHK51W?MG)IYjJYChqV5d[*1a"TnHGH"H)["fMrnjamqD9*06mVQGCMA]ESXIrn,CGG\^'fJNiCY#2;Cf_gaBN"_QD5oS=&uq`bM8n3\:iGm"kOK\]&\]Q=$_V1*00MUfMeM$t/(>X?q0]O"sh9""o1>R,/pg4g$lcVQnPu-HTd4k%Q<OW.5SI.$mSthoOjiDth?,2f\O4A*ak2b#ea$1Xe*J7V=)FA1BmiL3&bk20&c`dk]%QdOO"GjNYD8lT*t:L"\]s_:`Y<lIchk?/,=dO;luMdTTn"oY%^aN%*t/FjBoqJ0pkr1`V3@^5ARK;n^=<*O*j3+MF9[gTbm%'a\QXkn9cV9M1P(_@VCu.U><(mkE5j2P8dP/RM&Z.)?TYTWeL/dLp*ka'dn&>iHl5R^DY^mJe_mgl]jrA-Sk[:ihbb103'76jbr4<#3KrUm.U<(l*9gSKB>4]N=qZ2f-<)//u'Pg.<Y^W8U]&nI-pS<N_VmCS;gqU"j+$RUQr2YtrVPWarZg-B0RQ2Yp+IK'3@)GI5k7q=Q2U$2A^;.;(Ebq$uK?8/Z"Pe+oKYQVm+C)"c-X!EJ=K@V]Z/4]Z=.^0b5'FDH`p$>L(E9ANkV-e,!lE(.-\6EB#*';'9jX[':0!=<SW]%<m3qlJK#;:)EfW.&3E?XJW*CYAlc4YG4`MOk(,e(U>\\`nl2qd0S[9)`p6qeIlARtL#=meCSBC"m8`!W:H,_urG<3-bZ&[-8uXj[5Q/?H1[`e!^O/5iF]@GAMUHa'=oFr"d=!6<moG.W49%S>-g3fO3:L#GcX@^4aEorL!JU$HZoUnt\SBDB;Tsj4?!]%3E1!^^$>J*umbu4q/"SnTd!o!m\C\_2dNV<*8+EZ.d[JGI<Y%MU(3G=q@gd%#^*C?=?:$<EN_kMO3I?$r<^5B"U#X$40H/_QiSd?8oB,F*KqB+<9#s1P`OZ.YbPu&C,Xd3"GI05*?*o%V^9C)Fu#84FBkm%J;rfkR:l0+!*d]4iHuu`<uuc+K,Z;S0"+P$$s'=YQs6ME)L'<I<A8@@>F5"oGfcjIP<mh])((rgT`@rPE8>G0u0T#U>=(galmnE%<f3@^M['JA?ur)5I%p`L9h8h*`I.UJh@V6qT8u-M-ACV2DAs9/Rh$Je]_Rl*@Olc_3J-bm&Al;@$.@s6g<-;qc]mm&7GGE/[u]h~>endstream
endobj endobj
25 0 obj 25 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1559 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1559
>> >>
stream stream
Gau`S9lo&I&A@[:m,ZO'R0k9+O9F=%e&H8dC#do^Ep3`O+UJbfW$GrnrUjIc9<p.;DEH<NZ63Tlmk&]!D]oHO^1d,+('&9NE.1B0176@<El)8]!T$Pa5<Qe,(@r).+T*?j5a&q]6+QInKFs%RQ;A-A9LR*U$VH(C">F'sa#&NK_>K9_J]*Zm$P#SO0G;cso`9md6Y]B5-qYPan,*jE]nAeEGN`Z97PM3Bh51D+J.nQ0E<t"pc@5TakrnrX(TL)of&lI+?)i!L_s`Q'E:JBt;,t3-<<b[d4-ePpThPDB9NNorj1#Tg3G0U*pE&=D:_h=gE2[M5Ddfj265p7$!R@kcdiKoHSYL2?L^8Eh\Sr^iD299p%sR7?GJ*+*/o",7KF>uVB5*<&-1"UF<Y'usWJ;=ETfAis0&*lg')NA=(a$'L?G-g2a)"<+dZ0fB2"mu;5Dkt!rr>#jUU^6cVFGOXd9R6l9u1:Nr$F5$/(fLH79D+B.@f-l)-L^$]\!9,Of$-Eo-kIDJZ7PZoo'TJB*_Yg&fR$f<cnRDRZ4BuAY@VT9UQ5cMo1o0*R=Dff[rf]a3BamDbnB4R`i(H-.k;\b7Nesa0Y>:Oi_A6*UIkXIqj(6-YliL'kC@93-]c\3oi"+"Du@HR[I>0PJKT11nO2XaAk73c#3%g7i40sT2@BOPa2s4_n]O!H<[Cf+I-Oo;\N<iRrj=e"*uKHoqJftFSB6a;M-1/;sDN0AL[3j'=q*gma7jFJtB^qU$OIb0CVlj2Y5D#=tlQVRAj)R"^Ks#S[IPf,HJk#-lLd?PH(8EIt_nk":J%i)"s#`kp-=1$?!"/'#JMtSRR'kh.$r(NTM5rglTQ%Uo9ZZHH-J.1)Tpn7D?&W;bnSGRh@6P#$3U,Fn["f-bST`Ti4aTC"'M[7c*>=@GSP#^tCe#N[I$K_5h"@^ppX`=nkhO!JG3_;E`WHNA`:S?Jle-rubctl;Jj@V6P%9lo'($ptHUh">O=nd]a;Jdj2e^(rj!u3JI0'T$\,4'.>saa),5nF1K>FmhY>hL?aVOci*WX7eAU<2p;H,!U63fL/QW=>1<P!<DSM0ELe%hO-3V$B$)4Hp^SfC,o:psr4Np&P.dLbYGo#'SogNrlN'0]:V/kY&k6"\N:%CoqIJ+X.OE8[$+3doe_#;(j6>d6n@*K+Nl)5[*RKmU1kYfmdg6dJMo4a4hap)m5fD'3n0I@Z"qQG+Qi,fN."PgHhh1`OY5c!QU4dKG3nkFgcVgo3TjXNGCj-4uV)29n>us%)98+@Pp`;.XL#kVI2Gn-[bTWk7e>:-EQ%:i_D=%Z?Ap?*cY&h_0k'SBiMU^1C&UYX_.#:;"J#W#XmhR=Xf648'CF6Su<Ah5B8kl\/)c!5FIAaku!/V%Jl^_ADcVjs!08t#nG^1^HHAscSrMCo\eNUlMl?oL(7e#$K2M2@?;RtOoo5inj-g`?"es$!-do$l.]JER<(^f%j.a+n;E4rB>DJ*5f0SXb'+"ir5F,Nt`V.1knYB`!3'jb6X=b#:@Z@)$nf=%cG,B)>!lfbo'R+^j*OWo>M(C"&T7K~>endstream Gau`S9lo&I&A@[:m,ZO'R0k9+O9F=%e&H8dC#do^Ep3`O+UJbfW$GrnrUjIc9<p.;DEH<NZ63Tlmk&]!D]oHO^1d,+('&9NE.1B0176@<El)8]!T$Pa5<Qe,(@r).+T*?j5a&q]6+QInKFs%RQ;A-A9LR*U$VH(C">F'sa#&NK_>K9_J]*Zm$P#SO0G;cso`9md6Y]B5-qYPan,*jE]nAeEGN`Z97PM3Bh51D+J.nQ0E<t"pc@5TakrnrX(TL)of&lI+?)i!L_s`Q'E:JBt;,t3-<<b[d4-ePpThPDB9NNorj1#Tg3G0U*pE&=D:_h=WE2[M5Ddfj265p7$!R@kcdiKoHSYL2?L^8Eh\Sr^iD299p%sR7?GJ*+*/o",7KF>uVB5*<&-1"UF<Y'usWJ;=ETfAis0&*lg')NA=(a$'L?G-g2a)"<+dZ0fB2"mu;5Dkt!rr>#jUU^6cVFGOXd9R6l9u1:Nr$F5$/(fLH76j5k'[CQqN%DA"?>KY'85j$3q%Sb]^sm;hH:A7`1P@;n$'!(nX1A?]bska!1/R::VG%/m`F6uS%d/1CCi#rjj6"GG[jU3*c"1)5''pXiAI*@Jj&u2XaCM^V%X'mg5;g$VP;Ooa$8SYW*5&ri*V,R&Ji73_btP7)a^CfS)Gg,gjJj3UB"*#D,E*SJc_q]b8kY$+@:66K]e.bnO@h<sWJR_E9fg/C!POc_H;WBJ\pL\AWBh-SWH@:SZBTWp$/MQnpZPK^6-int:j*\l(O.BES,$c"/XXk<bZ(Rd!j6J"cJ!;nOk&JLP`5"[8_$W3^HsppJd&)E%/WQAF:s-S"ZKL($"5cK:9d$FmP0LO7e;WIDTH<#;H-=h^#K;R)%?MH,%"K<W@&:49o5-8K<#m'\pG!n'41:kd&EqeZt\8h,B%[ZYjPdLi9VI"`tKQai75&0@,0DA/:8l8!(+(jWLdn57[oYd05qDRIh8kJor/M1db)'WG+6*Mr9XkoJs`brBikZ6BbFi?$tJ&!S3hQNcY/.+#o"GAj0gXr\_Q5^G74.D6hNjckC.e<,C5j/)s.4QJFlVC6`KB//S]gLW[GdS\BYPo7nG7"1Z]-_I#!u]P)I"trn`QNakkABf@4#N:V'<Jo`1V?Vd1Dg$)9$i7X#2HIBmSgQ',^iK\@pHC@&[OnT=D+ptN?&a5I2i%VSBeR_f#rkl_B``F3kUmj'#q+Q@'*GS50hK*T;Q9E+E7Pe]!5n%nobf7.$9;*m64SS\boB.;H*:bY]^[Q=Z!;AuWrY,e)%V*^28I#f,=_X\g_Rj^*>jq(I,lI'.^b!;H@[WVfZ1V=SBf=BsSF2!bE7I'0]#X/bj'Z?`"^XROgG70YgCV*W$23V:KWZ'W1V'apS%B%X^^/JDuJ4'R6ohM^]k:$J!(WJKG]KDE_]geIeIT$oiC7eoaFhZ<O,P^S6RmDa0WSD?sq)NGpPP,\!lcK+RBdjB'hO1BY$jCMpQ"<u.\DC7Z\$I[n(dkpO%i7q+\](Pkd]o!rf=W$*$El+gX?Z/0=h]'HCKoB4Ogj`!F`cFNb\VJ&8.iZ7$g`4P6i~>endstream
endobj endobj
26 0 obj 26 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1871 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1871
>> >>
stream stream
Gb"/'8TWWE'Ya0?]L`WR1(f+l$^g0h`b@>,4fRHkm_ousKI#7s_31&3o[)LP#O[a$=`RgB;TU/HO21Kj]Yt:-ITcUgV>tP3nFA^E`aLn1AeQ,\VsnS=rGE58EmJoZ#YB`rJb[*0TU8q$3%f3!mPBsS,LWp7QAeB!9Am>+o9]c:K%Y4'!V'F[8K3IrN[rpiqZUt"8(KS<>h<??ho[=+GWp+OktoUd&&E2gCR+0^KhWt:49q`4*.@\FiWMI1\LPLNed6`'$5G0C\E)Ftj-.T)=iP$L,'^/+<2/t`A^rT(?GZ9EiAJK]D,)&bD\`:OQ,"BT93LL^"+(g-j"(0j_YK-Km=8Hu$L1J[KV0C_@].$oJVK<(G&8$nM`[`Fm:hEr4[Q,"7l2jQ<An9WbJt<p>8(1'%<%VEbWthH+4p;uo[naQCO-"B6AP\dpPHlY/K8$E*f0Mp6Al=O,l#^ofl$6.(hk$p$`f::o5.b4o"BmN3d=pSg[H&jN)@G<irU(W$L,XcA^8@MKJd@J^Q.g>)W)q?2SP"Rk%!2Li*WE,<!brB:\8iE:ZYl5i;0ek"EX:0q-/hs[$$!D%kMQ-XHBGk(RMAQAJJj!aHN9ckotgPlN08L5:U\R6D]9u^r;ZTjEZT&65c]39(3\)6B`.82iEW=,E[2=nWjBmf4pou]i2ncHgLg9ZL?,Lj1-E.[!pj,XLA`/doj.eJh&l,D`r#C,Tb^1D7>U$g[$V53lmk)bAmVb$8Z(m+U`l'5/c!ljk$UC-.ia&'Al/)qgLT^e0.FNS\jGF*(LT1i&>_(P30?SN.u;3qNc,tMsi_ajU\)bfL+,JdquT!AC,=,$TRuC`d2#tpB%L]p_mm:K)eD[lPSNQiI`Oln"J\<4Sb=:-U'*_1Q3ei5n`''pi:h0Mr!Q5H,FX_khp?f0&L3q%n^CEl>.6^+k':N-`qeY.?C,t^6K$UV(fFUA@JX^)H8FL!diue8'hLaDa0ea5`hYT11[S#G;H^^95MXc)?WI6`*atC?^lkM)Zsoi#]E=3C>#31FC@<aZ#!"V`duXKC+c2<ou7^!XU2,$k4tl?UJ;9KXi%1N*4%p=/k*CNQ_:6!eF6jl"&I(eCH@!nJX:']jIcSqA8V&Og'kG0gB.J*m0C5%47J*Q)973I,E=>YX,D1njXJ,%R7!1F2YVgZ<nee#n=$Z?XG92Ro='(5&B#6PYA@G=quD#9DIUhP9hg;1!98N2'Nc:tMMp<[*)12%kV<!GOr$.t_<YbP<jBqR%_E=blNg<u2io\VU]l_L[k,om"9`(n7#+'+$[o9t`/X:>I";Uls$$3tqdB/*mXrhd@^p</+]ehp/V5NYg_gcse&B8A<OaU^Bb4NNj1Go"I]OVCdh&^LBpDr(<_eTqW#s@2f8IlpAV@[/HADOpM4EP'>pm0n9Z-L6@o(^-1S!Xo7D/ge`?b$RThj`4KaqL4i:Y0J*;'pkPLn2@a.>%F]sKD$bfCV0pp8q3?0KsMg!KDKD+hud2ObhuHnLJ_e-&8od^I&<HhhJ:X)Vk-Y6qD44]=YS/C_j@"U,,%WnQKcE'VOVLX$QtCXU?\Bk3V_92us>MfDnSY>h'`K?i":YHN^HRk\kK0mW%!4DBfH$@]qep@XW]Z5"1g46QXN>Pp(Oi4=`Jju<P$4U<ja*Z,tQ#<V?@$lYJVo<uetQ-Wl@k=3)oRPiB+&#dACl_:JF3LjA7f7V*OaC9l!4\;*I+B"COSo&DLEO_0mVt@dj+JmruiUsk1b:J8*\S:f,,)2eM;;.9f$q^&(-HrYZ;!]*fl/QJ?n2a,#?`W*g/T_UC:]D<55%caL3E=%Gq`-nN+&Tk$kuSCt:GImWNB2hO^<1DBc7>GM7HN$9mkqF-=FUD\9N>[~>endstream Gb"/'8TWWE'Ya0?]L`WR1(f+l$^g0h`b@>,4fRHkm_ousKI#7s_31&3o[)LP#O[a$=`RgB;TU/HO21Kj]Yt:-ITcUgV>tP3nFA^E`aLn1AeQ,\VsnS=rGE58EmJoZ#YB`rJb[*0TU8q$3%f3!mPBsS,LWp7QAeB!9Am>+o9]c:K%Y4'!V'F[8K3IrN[rpiqZUt"8(KS<>h<??ho[=+GWp+OktoUd&&E2gCR+0^KhWt:49q`4*.@\FiWMI1\LPLNed6`'$5G0C\E)Ftj-.T)=iP$L,'^/+<2/t`A^rT(?GZ9EiAJK]D,)&bD\`:OQ,!O\V6'<jJNXD'E>F'EiI"+aG!IZu"nef>6;S2@Z.%Ws5f6-$]=&*H`?!C^p9_ct*hh)L,8up9.[r-<j^X1sXU2,$L,Vd]AtXI5O6_/uH>LEd28&u1+[c@Cqnut=Q45K]%n(asTg]28&q&nsCcD*'N&2'IKiQ0Xq)5C*q;0%b*P="eD0V"E`[Kf/E<-JfKlgkm12#Ya_AY56?Usm/NUIO0)rF$do.b,an1R`QWWXN2-i1H3Vt-uUE.-FFJiS2)r2mst>04S3#F77Qek";qMb@19ZAPtKj@N1mFHJncFTJ,a*u2=9Ti+0Ki*o@eo"7@NTo@H*-$Ti%Tui2-Rmk?/OiTW/GY<\GCUMKKhPjuB]ljBWg%T.7n_=_'>/0KQf%YuSl)`Vm_%iN'\":&\&s$nT[TghMD0?aU*TYMPA\!=AKc)SrO9IoN+6)SGo'9>2''okNM=7.%I6X9?l4>88:1<]3NhZk)n=-sO8TS0:7RK.*IET.K`V1CAnd!QAm%J.6kr)cK1?^^'"W[I\@m)NKHND_iHjqs.6%G`>Fc>e9n3IbqpJC@.T)?d.';(S@)+G@E+Gk"NHoXF)`U<?+]\thjFE"]nQZ'1t#Gj0]FZ,0@OQe0bPLdI=PXj(Jhb&Tf;A`YeZ<L?j%B:6aJN`Rn,NsdA\"?Dk+@sje)7!>M]:%Ej-+;hlN<,eV@^)']Y>%F7N<-IoKJt2*[;=0)]!.cl=LP#;j$;m624%./H=Mj!eq@("o6f#[;5]06f&9U7NnL'/Q_Id89@-TKC3VGGJLBRC2''Kr^rs(iEmT@IZF9W8D2-f)m=>8Pp&j.#*VdS9N+5*5&]YZ=e\sVrne>Q#bb7U3RsVthX6gI"GYQk0ejH1:q:iSU#iZ09=155YIXo(-2_jI9VC'/SJ8r=T$ET3u`Pl_>N[?W#oGE$4aU9,Ki,uC8X&s!dLY[dBFTeYK)p"@;dK2o7>F+Iq!eN'rU;J+QKt^YJil63Z^;'mGIinTuIB`T%pVCJm0jHZSOK/Gs(-r]gmYhIul!iZ1.bkej1^L7bES^q!5Ltm]Bo(BaZq@K$.jmeIe;n8*lc!Is1;[<R]u0mI7*]c$Y*3*GVIB>,Z)?p'):%jHU0`GC@M3tdcmSCU63f2*n9X.`Nd;"qam8/[@o&M^?<S."An2;Sr7USU0(eM7D!:`6[\`%BRn\uK5*nc@C4[ZHC"m(/]mR8Xe[RI'=,#5USuJAd(@#J1Jc^RM<UK<B31sg<6g"cu2/-Wi1pTf@V()tZ`ON#:=/sQk60E!Xf@NB_bnrF6Qot$KT!ZL_"[?ICqteE?fnp0oSb%?b/cHMbE*^C`F.<=#*e]qk%u_$dK,s\0#)u:<H!=jub3(I[F!Furbo5cQ#?5.2F\u2^*6p1,lbVTbA?j#LSg;Q_&?/58caL=73*aSG;gRAEOOA'!n9SF)AJW,PgpDE&&]7Gb..'VCL89)O'B[mh.!?'Do^OaZGTEUMY>oPD(-7;2VuM]UT<k!7S>p&4r>_JbO/V!MoW*buV\mJ<7\)mb?Y)2\kEX>bU2oP-pR9bQXM4emO]>o~>endstream
endobj endobj
27 0 obj 27 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1724 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1724
>> >>
stream stream
Gatm;>Ar7S'RnZ;35@5`D.A<r.$;YN]<5EAFC!Y3gOOD`A=9lkaHA&Nl*as66cl(`pnBCA*J?2eo:>c4$n-R-o0:n.HoH]$QOF^dfb0Yp!bSXp`Q\5?&KYsA![,4OI`-e*^AU=-no>"&&k4umTVs,.$4r(,V'6'_l(hi&8e&ta*WmTR.[:".=:hM%JDMXskK$hg+:P%BoK2l5'e^ci:-')qrBi8$_0/F2<*p3Z!ZAdi"-YZ.rGi@NMNt?-F\u]=_3?u`)u.LbKP/ocB2t3t7PE\HIAaD\]@"07"LB&74gr!-pd/p4TQpA/YB:""!*h!P/6gc9nLDdnL^#j-d&%g[aEN5.Weg+BM7trbE6h%l-sqWOKT4"SdQY7Ubi=j_.b%jeX5,3jQjie0-g8i$T%h-fVAQX9DC`SF;#h*\BC-Qa5dulKJDG;/0mq1@Qdc%5a!L7h01CU[S<,gAVoD!n`*7R_9\F@MqTG3`G+.=uM;![(^h&H;Xr-na+g/!Me[S9_r'FM$k54HE5A]g6_@Q0R7'HsWFq=V.e@_gEn16;.O]V&MH7TQCLq5RMW<_hJIX%WM/:*M`[*;Z&d,]o+OTg-&4>1`=k&jO&E1Ir].V$[%j!.+G3k9r5)98_-\2M;1hdAK1Z%X,+8[6VFISB?T'?Ac@A8,r>$-_]l>ED"qNsh"E"6%S[o0=,T^;bG^:'gW"Pdei;pcQjY%kr0C1>3^W'YT&da/s222*$=iMX]2$)c'#X(+cq]GsYA$fPe=#((r*q*:Bcn9]G`Q0Ch]QRGU9?]aud2"6dOG,hk[]!k3eYr=>Ae;Q7KJg4ReEQd$f+lTff"GP&R,rSu:!nf_a16'!<iA@Z^(98SN4hNkloJ?2YTY32.B];j%"-%Bj=is!q`"Sh'$"s]0fqJ&5`N_p'NW6\YU7=I+7g.+6`C(CD_lR_q>e=UJ]R5%$g-K6l7;$+tb361BbY2K%KSE><[O>G)`(-'%YHAirB7*nIeO<7DY";p'_r6-T-Os!XSPFH#fN<mKidA5>gW2=fuOTZYV:%imtF^@ei:JfC'gsje(2JE%$&:otA=QD`O.rRq3`JtSQYicEKKt=Q*N8*oMfdK\Hk38ER_.)'\,`RglD=d/WZ3?b!g=4lTGQ%jb%1!>oTjRkm0j@*]_S#$V>Mq\h\u\eFd-*SPef?;t=Dq!iUQL%pA'lC+8/Mp^PiD^CM*M\("M:RbjZ.IPE-`Qn"=3W9\qcEdkg.g'kK/.E8=st2B*jO?Q57o]13&VrFLj#]Irmm!MWArKApQ#IM6[f[#uoY?8,Tu'O4-$NGALIPH0@<Gs)#9\`WfIiY3XMd/l-Xp2d18rd[iC7??ZjsbpD0$,!($dTmerUS/cTGLc_,Lf]dYa"`&naNmf.V$dsY;"tc4db&k&>AK0=91)"p0*p4f=Z#I4V[gO`t(\Z6WGKAgS"C%g#8qm6<X!l9.5]Q<J`S]9mISB2@:$K[^0K5r(0($$URr$Q$=iP)rk$LPirsNr2&(C>e'5u9rLIud8ikcFd-82",)m!=IZMOM'2Q)H[i@g4emCk`tME/TkR,c$60QhMON)a$E>jng+)"XT3_/D4AE..W_5b*%rAos(-gqIOi8]T=W4E`P;e!ic`Y88^+Y(05,D"*a#Cdr;.j)UW'N)+\ns"`Z4!q\&#B!d,[5(9EUrRN]&'lQHCB*L[`<V0KLaO7r/Fh,NXaMN(RM4JJN3s*'E!L(:nUA~>endstream Gatm;>Ar7S'RnZ;35@5`D.A<r.$;YN]<5EAFC!Y3gOOD`A=9lkaHA&Nl*as66cl(`pnBCA*J?2eo:>c4$n-R-o0:n.HoH]$QOF^dfb0Yp!bSXp`Q\5?&KYsA![,4OI`-e*^AU=-no>"&&k4umTVs,.$4r(,V'6'_l(hi&8e&ta*WmTR.[:".=:hM%JDMXskK$hg+:P%BoK2l5'e^ci:-')qrBi8$_0/F2<*p3Z!ZAdi"-YZ.rGi@NMNt?-F\u]=_3?u`)u.LbKP/ocB2t3t7PE\HIAaD\]@"07"LB&74gr!-pd/p4TQpA/YB:#m#@&`W/6gc9nLDdnL^#j-d&%g[aEN5.Weg+BM7trbE6h%l-sqWOKT4"SdQY7Ubi=j_.b%jeX5,3jQjie0-g8i$T%h-fVAQX9DC`SF;#h*\BC-Qa5dulKJDG;/0mq1@Qdc%5a!L7h01CU[S<,gAVoD!n`*7R_9\F@MqTG3`G+.=uM;![(^h&H;Xr-na+g/!Me[S9_r'FM$k54HE5A]g6_@Q0R7'HsWFq=V.e@_gEn16;.O]V&MH7TQCLq5RMW<_hJIX%WM/:*M`[*;Z&d,]o+OTg-&4>1`=k&jO&E1Ir].V$[%j!.+G3k9r5)98_-\2M;1hdAK1Z%X,+8[6VFISB?T'?Ac@A8,r>$-_]l>ED"qNsh"E"6%S[o0=,T^;bG^:'gW"Pdei;pcQjY%kr0C1>3^W'YT&da/s222*$=iMX]2$)c'#X(+cq]GsYA$fPe=#((r*q*:Bcn9]G`Q0Ch]QYnglf]aud2"6dOG,hk[]!k3eYr=>Ae;Q7KJg4ReEQd$f+lTff"GP&R,rSu:!nf_a16'!<iA@Z^(98SN4hNkloJ?2YTY32.B];j%"-%Bj=is!q`"Sh'$"s]0fqJ&5`N_p'NW6\YU7=I+7g.+6`C(CD_lR_q>e=UJ]R5%$g-K6l7;$+tb361BbY2K%KSE><[O>G)`(-'%YHAirB7*nIeO<7DY";p'_r6-T-Os!XSPFH#fN<mKidA5>gW2=fuOTZYV:%imtF^@ei:JfC'gsje(2JE%$&:otA=QD`O.rRq3`JtSQYicEKKt=Q*N8*oMfdK\Hk38ER_.)'\,`RglD=d/WZ3?b!g=4lTGQ%jb%1!>oTjRkm0j@*]_S#$V>Mq\h\u\eFd-*SPef?;t=Dq!iUQL%pA'lC+8/Mp^PiD^CM*M\("M:RbjZ.IPE-`Qn"=3W9\qcEdkg.g'kK/.E8=st2B*jO?Q57o]13&VrFLj#]Irmm!MWArKApQ#IM6[f[#uoY?8,Tu'O4-$NGALIPH0@<Gs)#9\`WfIiY3XMd/l-Xp2d18rd[iC7??ZjsbpD0$,!($dTmerUS/cTGLc_,Lf]dYa"`&naNmf.V$dsY;"tc4db&k&>AK0=91)"p0*p4f=Z#I4V[gO`t(\Z6WGKAgS"C%g#8qm6<X!l9.5]Q<J`S]9mISB2@:$K[^0K5r(0($$URr$Q$=iP)rk$LPirsNr2&(C>e'5u9rLIud8ikcFd-82",)m!=IZMOM'2Q)H[i@g4emCk`tME/TkR,c$60QhMON)a$E>jng+)"XT3_/D4AE..W_5b*%rAos(-gqIOi8]T=W4E`P;e!ic`Y88^+Y(05,D"*a#Cdr;.j)UW'N)+\ns"`Z4!q\&#B!d,[5(9EUrRN]&'lQHCB*L[`<V0KLaO7r/Fh,NXaMN(RM4JJN3s*'E!HZ$NT`~>endstream
endobj endobj
28 0 obj 28 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1906 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1906
>> >>
stream stream
Gb"/'968iG&AIa;CbHeVWF,]/8^O$mN:V#K2GFid8M@eS,UCb]$&+'!8Uc((+@X^3g!2Q@e^Bfr*oF[qliL]_n\a/^ZikV6L&E5#N5K`I9Fq6RGOT50IIRRRGpEG6^8-5%J],;$K6lKV&;2<fH-AP%Lr`,;OGl^J9Am<4MHC"hK)'JK!Js,]8HD5b+I(imof`[B8'unk@2N?WhruMjH8,^fm82($MdSMsF[l&&^*&XD;#o&Xp>5iJq&%uRKkf&4ecgFV[7Zbi:-"Bnn9B!+1jNS1#-ZRf.eL;OQ$ES_1RLA8Z:=W+QNV/^0&s]F%Boj%d25#b@6Z#q]Lm_%&^X$il4ti0SYd!a`:mu!_:\!lcUZ;P?\BVVdc1@BRseZ&nVC!kjJ\-_DO)Cr$Mh1ZfZm(%^(2/V11m6VXr-?@!VG#.CZk<sCcbNoE8*!-L8/Q%Ucf:VV5,.QZmbE6Y@P,P2e-BDl7G.h.f3pi^OKe9j4G:`g$rPd1I_\;N;LC%f9_&10pABB&D"Ggl>qV#3rGB7lhH'qJAk(79DC1+Ue6uXY-h-+a`V_B&&O_-4Ks/Cg@&U%UQ[7?gT\'@YZ@I2InWaO8Q'3*8h.n^VJ;qW=DsWS4t7P'1<D$JT=(i(;V;8>;K.a7E2FaN$rjbmjH>ZbX,3s@RQEZV:$Xu>/kgU>Rf[e/?K'`k$Ii"XiV2-?h99b:UYjr0[K\Uf)r?=MpC6Riflk%3l#.SilW1Vdo<H'`m@Frtb7'$!#DM_:XYhrXR(QTZ0_l/]-7RP1bVH-ECUZp&&3bu&r#Q&[-!c:A5mGe-0'ILKQ';X,M(u$5%_tZj5OuDiH^:cqN"h=^Ujin"`V18GC8oW]Dq7rA#5?:fa1@Spegq00E*kN'0ecOINP20gZ"P\3fZbMWDK-3!q%'aB0o=R?OP3hH(l\Z3RVq[3DpK'0;$EgkG]aE2\mEVhIBg[?O5cD^*_pu[T=i`OB`gqX`kh#Bo`PI@bS'.pe*!`,!n[)@G[#1u\9t[Er+8.5#i(u-76nU@'*mK+K^G!mdB-%#nKVFdf]Zm00QQW'<FTBZ75[I3+sZtg\h1)QZr_!Ri&jfn_oXO&b,;RjOS,:3oARV*Me$q_#cUo_Fr)cGNOJ!$\N%`+o]`FrA3J#F,@.3^@KSQHj$Lut]iljbB=k6l6K>f'[[0Rs_C08_Y(mCt^bg#(l4jLTfbe!A-HF;*8'qN9pV(@C3gj#;G5CS)#tERjSis^cIogp4]1W!Rmje>];&WAK?,Fp!Q8Hcl@BQh2A&1@LA2$r,.`#S2L5WrTQPgiB,%rMI;&D`a%#/Cf(e59kT&d"GV'i"9I>-&B'qUN:/f_J!pC&4=8B5_2gs/L)^5r(E@3Q1%e@&/GocZaa*B4^]4/pi)mm3o2LZM,Rj_1"k@!%KAkop?Okb)_#I^!EthFJG)@M_ab'3eoYF2j>p$lL/7fEIHNJE'=3kj2<QMrW'#1]$c$+=mq+?GVgi^su\!"(/2?VN#2idX7XeePDO[`XSTGO+tWZ"n`K"eY[4\,JCO9Zh>%$!`E<i3@:dCh8#igH35_<cjp6lhSKVQD/YAPkUtPk<b6E:j9?r-j9YM^At-HSG,'dH&OK+X:]j,aXKYS:n4d'?eTn;M+B.SmIt\4;"_)sBH&"?144Oca@^TbW3(2[ho!<b>OqLqtF+>=Qe0N6#F&]Qgn_D_&g^Pe9')GJ;Ij;m[F,o,3-rh6HQf8N[i1,P:5iRAt.oYWr%Suj`M1!U\QQuk7QTGE0\H#Fe=)MS./EaO^m-D8AD[h`n1WQ;4A)<.PdiDEQSrVZl^n6=gD:3`'YMi/LP4b964&H-MGGZb3KA6%ji'ZH[5KiPlT&jZq?_OuHG3T=V$/HP(eTUO)+NhX#;!-<J?pRgn2DKN0O/l=lnGWM\J,.U~>endstream Gb"/'968iG&AIa;CbHeVWF,]/8^O$mN:V#K2GFid8M@eS,UCb]$&+'!8Uc((+@X^3g!2Q@e^Bfr*oF[qliL]_n\a/^ZikV6L&E5#N5K`I9Fq6RGOT50IIRRRGpEG6^8-5%J],;$K6lKV&;2<fH-AP%Lr`,;OGl^J9Am<4MHC"hK)'JK!Js,]8HD5b+I(imof`[B8'unk@2N?WhruMjH8,^fm82($MdSMsF[l&&^*&XD;#o&Xp>5iJq&%uRKkf&4ecgFV[7Zbi:-"Bnn9B!+1jNS1#-ZRf.eL;OQ$ES_1RLA8Z:=W+QNV/^0&s]F%58mnd25#b@6Z#q]Lm_%&^X$il4ti0SYd!a`:mu!_:\!lcUZ;P?\BVVdc1@BRseZ&nVC!kjJ\-_DO)Cr$Mh1ZfZm(%^(2/V11m6VXr-?@!VG#.CZk<sCcbNoE8*!-L8/Q%Ucf:VV5,.QZmbE6Y@P,P2e-BDl7G.h.f3pi^OKe9j4G:`g$rPd1I_\;N;LC%f9_&10pABB&D"Ggl>qV#3rGB7lhH'qJAk(79DC1+Ue6uXY-h-+a`V_B&&O_-4Ks/Cg@&U%UQ[7?gT\'@YZ@I2InWaO8Q'3*8h.n^VJ;qW=DsWS4t7P'1<D$JT=(i(;V;8>;K.a7E2FaN$rjbmjH>ZbX,3s@RQEZV:$Xu>/kgU>Rf[e/?K'`k$Ii"XiV2-?h99b:UYjr0[K\Uf)r?=MpC6Riflk%3l#.SilW1Vdo<H'`m@Frtb7'$!#DM_:XYhrXR(QTZ0_l/]-7RP1bVH-ECUZp&&3bu&r#Q&[-!c:A5mGe-0'ILKQ';X,M(u$5%_tZj5OuDiH^:cqN"h=^Ujin"`V18GC8oW]Dq7rA#5?:fa1@Spegq00E*kN'0ecOINP20gZ"P\3fZbMWDK-3!q%'aB0o=R?OP3hH(l\Z3RVq[3DpK'0;$EgkG]aE2\mEVhIBg[?O5cD^*_pu[T=i`OB`gqX`kh#Bo`PI@bS'.pe*!`,!n[)@G[#1u\9t[Er+8.5#i(u-76nU@'*mK+K^G!mdB-%#nKVFdf]Zm00QQW'<FTBZ75[I3+sZtg\h1)QZr_!Ri&jfn_oXO&b,;RjOS,:3oARV*Me$q_#cUo_Fr)cGNOJ!$\N%`+o]`FrA3J#F,@.3^@KSQHj$Lut]iljbB=k6l6K>f'[[0Rs_C08_Y(mCt^bg#(l4jLTfbe!A-HF;*8'qN9pV(@C3gj#;G5CS)#tERjSis^cIogp4]1W!Rmje>];&WAK?,Fp!Q8Hcl@BQh2A&1@LA2$r,.`#S2L5WrTQPgiB,%rMI;&D`a%#/Cf(e59kT&d"GV'i"9I>-&B'qUN:/f_J!pC&4=8B5_2gs/L)^5r(E@3Q1%e@&/GocZaa*B4^]4/pi)mm3o2LZM,Rj_1"k@!%KAkop?Okb)_#I^!EthFJG)@M_ab'3eoYF2j>p$lL/7fEIHNJE'=3kj2<QMrW'#1]$c$+=mq+?GVgi^su\!"(/2?VN#2idX7XeePDO[`XSTGO+tWZ"n`K"eY[4\,JCO9Zh>%$!`E<i3@:dCh8#igH35_<cjp6lhSKVQD/YAPkUtPk<b6E:j9?r-j9YM^At-HSG,'dH&OK+X:]j,aXKYS:n4d'?eTn;M+B.SmIt\4;"_)sBH&"?144Oca@^TbW3(2[ho!<b>OqLqtF+>=Qe0N6#F&]Qgn_D_&g^Pe9')GJ;Ij;m[F,o,3-rh6HQf8N[i1,P:5iRAt.oYWr%Suj`M1!U\QQuk7QTGE0\H#Fe=)MS./EaO^m-D8AD[h`n1WQ;4A)<.PdiDEQSrVZl^n6=gD:3`'YMi/LP4b964&H-MGGZb3KA6%ji'ZH[5KiPlT&jZq?_OuHG3T=V$/HP(eTUO)+NhX#;!-<J?pRgn2DKN0O/l=lnGWM3oD-i~>endstream
endobj endobj
29 0 obj 29 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2014 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2014
>> >>
stream stream
Gb"/(968iG&AII3ChGdB-&j#KI"@&b`_N#AD8pQ9-1/N))2a(rfHd/@P[%SlgUdS;MN[Y:26K]6SVVk5]DLtJ53sa5/Gu4(h^ARd*Pq4c"j14p%FcO2N'>+^UYb_d@35"\(Pp<f4((;T]D;Ujl/giL`!][4JQk=s^&nkCK_']r_gT6pIF&%u?hGfYhm7^u!9)H#\G'CG9g$GBZpS*E$eG&2rpe.EJ9[&tk[sdOb#![JTN\J+6S.O!/rVRLT7?]`"s6egMJ/_`$=?CWU.GYmN;7F52E3,m=d1+b?c63FC7:!lHjQPe(qlqcFn@aR-]#`Kec/J\5[D0lU/]aPg5@YIGmKXX'`ESK?"ie2j/Hs:@b[30ak.L$SrJlk[c9@hA3K(<qQX=!Hd!k'jm^P6j,K9jW:."ZMS"t,HL2V7:ek`$Wa,s./o[N7D:;[cF^VHcTnA9dZq'Xb])9oi'j7Z(W+R]q8F]F?A@&h#d6SiH-9Y:,ePDb5iOc+79_E^b2tbS?R>9/u(uptk$oE1=aVhKIM'96doD37CJ7f8nKKV0M0]LL\.sJtJKi[^p.]!u\\^5O%b97Jn^2!/IeQ0T^4atfP,Wh:1:)lqAqJTA2(+TU$-JP<T\k^l<Y!\9IR'f'@"6QtG]ZEYi'6p!785L=U`3AshD"?7c]ad7l06;=%?)6(-ESHR[X@CBd\,TUp\W"I=@L+BuE7o[jrD!_$R!lYNT%T&>P$?$-)<SI@)TJK[e!2u!ba*sdBPP/[S/P[?KoSR4a3dBMK,Tg>iMrO6Y`o;bKeAV4;gEG2ol?,ZNJ=nlbKumr+pDMl2q5.iT>ES3j#\-FPKc^]J:+^#]duCl`c-MW7HMK0T:8!fZ7O(-50Q@#K$I/)j&AK%6bbF67)%:G7a\3JJOHOO1F9nSMfn)&]*:=6fPJZBlXD*N)V1sUY6"G!huCd!^!8Jb:;c92SXUe>'4d-/J=e><5Ag!IW+ecX?J-qo\N&@(BJ'3`V5]8^!k"eM4KJ5;A55bF&ZnUc2uJ#TKZ,sXOZaOfppRa03V!J]^@)XMmM>GV/^G]V9B!59VN$8m1@Nm%n["$`>*ep[3RMhka6NL->[r]RIZ>??dc_H:CRq@"l<dEGhs)KDW@l./ZssL/h_!"8WcBX"\/"`AS:CBW2?K:6PY/$\W`k+tiV_<B7c,i4S:3SIqe`01=5DeBoAa7bg3OB4,4[`c<>;;F:6N[r-FpuTi2T"C8r)"09gj(RnfN$!A_-C5/o3[M=K>S6m)/u%Q`:IVa%TsM848p*Gu!X2e3H_/gX1r&(Br%#*$13b0(_X:Io)Hsq[P=3;QIIqhP#bT'H8Z$)8ouJS74:/*088V+lfsgXR]mPs#BB@)R<!]gG&n]5QB@d4kUMDa0D6]=d3`FdBT.VB5-Ul>fC,+)66TS0R/4[f/-M%ftK4h(23%Hd+EorPa7/V4/%d5@Y'57_5[LL^jA.!D2*Y]>bLX(]=@MoYhG/RC*1AP^SbM=?c,,';'@-;B_.[-bRL;cGUClVEeU('j,]Xgo91%#ruZoT3='iDU%g8FiD\guI-]kJ;BD\6,5Y/F4R+#n%;Cebn[tBM^IrTG^pPSc8Tc\S_ij'F9gP"=L9ZVn@5sefc,i8._7c<%!Nt?g'38p(N5ICj//7HD%dG(>>A9';(m$..3$->q?'0)dfXeH0SeqbRfSoBM27D%2<JPGn10(e-S4XEn>pu+^7$J'h:IJ@3c;:@FL/pI"aK-SuC_o;$Lbi%HlnEetBD,&-LZ;EO&14Gb2Qrn=7q=Q-(qD5%\i.$=ZXAkqM`];]8#.X70W&U39sp?]ES!$ifeU$P@##bR@C'YZ5H;PBO2tAi@:ZcSd[GqpL>u6L#tIL-d#.7+I#gg1p0h47qNYXTKI='qbf0k!aG8`,Y;@?Xe46.4=7fAh=KH!Qk0X;B!=gggelL:(9N<6/*/-d8`6$q@-8Sr`hmEeg$pnL<9]uU$AWGBRn\&tWNu*2UrI1,fH1cZ#ae5mgi`=*cR0%^7![57XjT~>endstream Gb"/(968iG&AII3ChGdB-&j#KI"@&b`_N#AD8pQ9-1/N))2a(rfHd/@P[%SlgUdS;MN[Y:26K]6SVVk5]DLtJ53sa5/Gu4(h^ARd*Pq4c"j14p%FcO2N'>+^UYb_d@35"\(Pp<f4((;T]D;Ujl/giL`!][4JQk=s^&nkCK_']r_gT6pIF&%u?hGfYhm7^u!9)H#\G'CG9g$GBZpS*E$eG&2rpe.EJ9[&tk[sdOb#![JTN\J+6S.O!/rVRLT7?]`"s6egMJ/_`$=?CWU.GYmN;7F52E3,m=d1+b?c63FC7:!lHjQPe(qlqcFn@aR-]#`Kec/J\5]+<'U/]aPg5@YIGmKXX'`ESK?"ie2j/Hs:@b[30ak.L$SrJlk[c9@hA3K(<qQX=!Hd!k'jm^P6j,K9jW:."ZMS"t,HL2V7:ek`$Wa,s./o[N7D:;[cF^VHcTnA9dZq'Xb])9oi'j7Z(W+R]q8F]F?A@&h#d6SiH-9Y:,ePDb5iOc+79_E^b2tbS?R>9/u(uptk$oE1=aVhKIM'96doD37CJ7f8nKKV0M0]LL\.sJtJKi[^p.]!u\\^5O%b97Jn^2!/IeQ0T^4atfP,Wh:1:)lqAqJTA2(+TU$-JP<T\k^l<Y!\9IR'f'@"6QtG]ZEYi'6p!785L=U`3AshD"?7c]ad7l06;=%?)6(-ESHR[X@CBd\,TUp\W"I=@L+BuE7o[jrD!_$R!lYNT%T&>P$?$-)<SI@)TJK[e!2u!ba*sdBPP/[S/P[?KoSR4a3dBMK,Tg>iMrO6Y`o;bKeAV4;gEG2ol?,ZNJ=nlbKumr+pDMl2q5.iT>ES3j#\-FPKc^]J:+^#]duCl`c-MW7HMK0T:8!fZ7O(-50Q@#K$I/)j&AK%6bbF67)%:G7a\3JJOHOO1F9nSMfn)&]*:=6fPJZBlXD*N)V1sUY6"G!huCd!^!8Jb:;c92SXUe>'4d-/J=e><5Ag!IW+ecX?J-qo\N&@(BJ'3`V5]8^!k"eM4KJ5;A55bF&ZnUc2uJ#TKZ,sXOZaOfppRa03V!J]^@)XMmM>GV/^G]V9B!59VN$8m1@Nm%n["$`>*ep[3RMhka6NL->[r]RIZ>??dc_H:CRq@"l<dEGhs)KDW@l./ZssL/h_!"8WcBX"\/"`AS:CBW2?K:6PY/$\W`k+tiV_<B7c,i4S:3SIqe`01=5DeBoAa7bg3OB4,4[`c<>;;F:6N[r-FpuTi2T"C8r)"09gj(RnfN$!A_-C5/o3[M=K>S6m)/u%Q`:IVa%TsM848p*Gu!X2e3H_/gX1r&(Br%#*$13b0(_X:Io)Hsq[P=3;QIIqhP#bT'H8Z$)8ouJS74:/*088V+lfsgXR]mPs#BB@)R<!]gG&n]5QB@d4kUMDa0D6]=d3`FdBT.VB5-Ul>fC,+)66TS0R/4[f/-M%ftK4h(23%Hd+EorPa7/V4/%d5@Y'57_5[LL^jA.!D2*Y]>bLX(]=@MoYhG/RC*1AP^SbM=?c,,';'@-;B_.[-bRL;cGUClVEeU('j,]Xgo91%#ruZoT3='iDU%g8FiD\guI-]kJ;BD\6,5Y/F4R+#n%;Cebn[tBM^IrTG^pPSc8Tc\S_ij'F9gP"=L9ZVn@5sefc,i8._7c<%!Nt?g'38p(N5ICj//7HD%dG(>>A9';(m$..3$->q?'0)dfXeH0SeqbRfSoBM27D%2<JPGn10(e-S4XEn>pu+^7$J'h:IJ@3c;:@FL/pI"aK-SuC_o;$Lbi%HlnEetBD,&-LZ;EO&14Gb2Qrn=7q=Q-(qD5%\i.$=ZXAkqM`];]8#.X70W&U39sp?]ES!$ifeU$P@##bR@C'YZ5H;PBO2tAi@:ZcSd[GqpL>u6L#tIL-d#.7+I#gg1p0h47qNYXTKI='qbf0k!aG8`,Y;@?Xe46.4=7fAh=KH!Qk0X;B!=gggelL:(9N<6/*/-d8`6$q@-8Sr`hmEeg$pnL<9]uU$AWGBRn\&tWNu*2UrI1,fH1cZ#ae5mgi`=*cR0%^7!pZS^ir~>endstream
endobj endobj
xref xref
0 30 0 30
@@ -246,20 +246,20 @@ xref
0000002767 00000 n 0000002767 00000 n
0000003059 00000 n 0000003059 00000 n
0000003189 00000 n 0000003189 00000 n
0000005193 00000 n 0000005192 00000 n
0000007291 00000 n 0000007290 00000 n
0000009468 00000 n 0000009467 00000 n
0000010263 00000 n 0000010262 00000 n
0000011874 00000 n 0000011873 00000 n
0000013918 00000 n 0000013917 00000 n
0000015569 00000 n 0000015568 00000 n
0000017532 00000 n 0000017531 00000 n
0000019348 00000 n 0000019347 00000 n
0000021346 00000 n 0000021345 00000 n
trailer trailer
<< <<
/ID /ID
[<2d70597e08491c5e3793c7c8ec02df61><2d70597e08491c5e3793c7c8ec02df61>] [<e6640fbb12dea5618fd4e6a632502f7c><e6640fbb12dea5618fd4e6a632502f7c>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R /Info 17 0 R
@@ -267,5 +267,5 @@ trailer
/Size 30 /Size 30
>> >>
startxref startxref
23452 23451
%%EOF %%EOF

View File

@@ -1,19 +1,19 @@
# Les 15 — Externe APIs + Cursor agents + Vercel deploy # Les 13 — Externe APIs + Cursor agents + Vercel deploy
## Slide Overzicht (Klas A — 3 uur fysiek, demo-driven) ## Slide Overzicht (Klas A — 3 uur fysiek, demo-driven)
**Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk. **Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk.
**Demo-app:** Nieuwe kleine Pokédex (PokéAPI, geen key, visueel) **Demo-app:** Nieuwe kleine Pokédex (PokéAPI, geen key, visueel)
**Vervolg op:** Les 14RAG + Embeddings **Vervolg op:** Les 12Tool Calling
**Aansluit op:** Les 16MCP servers **Aansluit op:** Les 14RAG + Embeddings
--- ---
## Slide 1: Title ## Slide 1: Title
### Les 15 — Externe APIs + Cursor + Vercel ### Les 13 — Externe APIs + Cursor + Vercel
**Visual:** **Visual:**
- Background: CREAM - Background: CREAM
- "Les 15" in BLUE - "Les 13" in BLUE
- "Externe APIs + Cursor + Vercel" in BLACK - "Externe APIs + Cursor + Vercel" in BLACK
- Subtitle: "Van localhost naar productie — met Cursor agents en preview deploys" - Subtitle: "Van localhost naar productie — met Cursor agents en preview deploys"
@@ -415,7 +415,7 @@ Beide branches kunnen tegelijk draaien.
| 14 | **LIVE DEMO 4** — GitHub Actions CI | Demo | | 14 | **LIVE DEMO 4** — GitHub Actions CI | Demo |
| 15 | Wanneer welke Cursor-mode | Reflectie | | 15 | Wanneer welke Cursor-mode | Reflectie |
| 16 | Lesopdracht + Huiswerk | Praktijk | | 16 | Lesopdracht + Huiswerk | Praktijk |
| 17 | Afsluiting + Les 15 preview | Closing | | 17 | Afsluiting + Les 13 preview | Closing |
--- ---

View File

@@ -87,7 +87,7 @@ endobj
endobj endobj
12 0 obj 12 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521105950+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521105950+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 14 Huiswerk) /Trapped /False /Subject (\(unspecified\)) /Title (Les 14 Huiswerk) /Trapped /False
>> >>
endobj endobj
@@ -163,7 +163,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<fdfd9a649f26f3dd357aeedfd55ab30b><fdfd9a649f26f3dd357aeedfd55ab30b>] [<91d83aeaf294ddd69def8dba974bdc13><91d83aeaf294ddd69def8dba974bdc13>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R /Info 12 0 R

View File

@@ -87,7 +87,7 @@ endobj
endobj endobj
12 0 obj 12 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521105950+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521105950+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 14 Lesopdracht) /Trapped /False /Subject (\(unspecified\)) /Title (Les 14 Lesopdracht) /Trapped /False
>> >>
endobj endobj
@@ -163,7 +163,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<9f48df53726ecc7f762a28209cc7a8fa><9f48df53726ecc7f762a28209cc7a8fa>] [<5a6a7779390657fdb2af72e0dd471cd8><5a6a7779390657fdb2af72e0dd471cd8>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R /Info 12 0 R

View File

@@ -4,7 +4,7 @@
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht **Opleiding:** NOVI Hogeschool Utrecht
**Vorige les:** Les 13 — Agents + Cursor + Vercel **Vorige les:** Les 13 — Agents + Cursor + Vercel
**Volgende les:** Les 15 — Cursor + Vercel deploy **Volgende les:** Les 15 — Agents
--- ---

View File

@@ -157,7 +157,7 @@ endobj
endobj endobj
19 0 obj 19 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521105950+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521105950+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 14 Lesstof) /Trapped /False /Subject (\(unspecified\)) /Title (Les 14 Lesstof) /Trapped /False
>> >>
endobj endobj
@@ -297,7 +297,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<ac774e881c346d045e81ff782e65a794><ac774e881c346d045e81ff782e65a794>] [<9f458718fcaa3f6c1b5350766073fe05><9f458718fcaa3f6c1b5350766073fe05>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 19 0 R /Info 19 0 R

View File

@@ -4,7 +4,7 @@
**Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk. **Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk.
**Demo-app:** Nieuwe PDF Q&A app from scratch **Demo-app:** Nieuwe PDF Q&A app from scratch
**Vervolg op:** Les 13 — Agents **Vervolg op:** Les 13 — Agents
**Aansluit op:** Les 15 — Cursor + Vercel deploy **Aansluit op:** Les 15 — Agents
--- ---
@@ -428,11 +428,11 @@ const docAgent = new ToolLoopAgent({
- Chunking strategieën - Chunking strategieën
- RAG-tool in een agent - RAG-tool in een agent
**Volgende les (Les 15): Cursor + Vercel deploy** **Volgende les (Les 15): Agents**
- Externe APIs in Next.js Server Components - Agent = LLM in een loop met tools
- Cursor Composer + Background Agents - ToolLoopAgent — system, tools, stopWhen, prepareStep
- Deploy naar Vercel productie + preview per branch - 4 stop-condities: stepCountIs, hasToolCall, isLoopFinished, custom
- GitHub Actions CI (lint + build) - Combo: RAG-tool in een agent (combo Les 14 + 15)
**Daarna in deze leerlijn:** **Daarna in deze leerlijn:**
- Les 16: MCP — eigen Model Context Protocol server bouwen - Les 16: MCP — eigen Model Context Protocol server bouwen

View File

@@ -1,4 +1,4 @@
# Les 13 — Agents # Les 15 — Agents
## Docenttekst (Klas A — 3 uur, fysiek, demo-driven) ## Docenttekst (Klas A — 3 uur, fysiek, demo-driven)
**Les:** 13 van 18 **Les:** 13 van 18
@@ -35,7 +35,7 @@ Dit document is een **lopend script**. Lees mee tijdens de les op je laptop.
`*[Doe dit thuis vooraf, niet in de klas. Klas kijkt naar de setup-stap als je 'm doet.]*` `*[Doe dit thuis vooraf, niet in de klas. Klas kijkt naar de setup-stap als je 'm doet.]*`
```bash ```bash
cd ~/novi/novi-lessons/Les13-Agents cd ~/novi/novi-lessons/Les15-Agents
pnpm create next-app@latest research-agent \ pnpm create next-app@latest research-agent \
--typescript --tailwind --app --no-src-dir --import-alias "@/*" --typescript --tailwind --app --no-src-dir --import-alias "@/*"
cd research-agent cd research-agent
@@ -189,7 +189,7 @@ Stack: Next.js 16, AI SDK v6, Tavily, Supabase, gpt-4o-mini. Losse repo — niet
**Vertel:** "Klas, leun achterover. Vragen tussendoor mogen. Ik laat zien hoe je een agent from-scratch bouwt." **Vertel:** "Klas, leun achterover. Vragen tussendoor mogen. Ik laat zien hoe je een agent from-scratch bouwt."
`*[Open terminal in /Les13-Agents]*` `*[Open terminal in /Les15-Agents]*`
```bash ```bash
pnpm create next-app@latest research-agent \ pnpm create next-app@latest research-agent \
@@ -684,7 +684,7 @@ Voor sub-agents — een agent die een andere agent als tool gebruikt — schuive
`[SLIDE 15 — Agent vs tool-call vs workflow]` `[SLIDE 15 — Agent vs tool-call vs workflow]`
**Vertel:** "Drie niveaus van AI-autonomie. Plain tool-call: 1 tool, 1 antwoord. Multi-step uit Les 12: 2-5 tools, 1 doel. Agent uit Les 13: 10-50 stappen, open-ended. En het hoogste niveau van **controle** — een explicit workflow. Code die exact bepaalt welke tool wanneer. **Vertel:** "Drie niveaus van AI-autonomie. Plain tool-call: 1 tool, 1 antwoord. Multi-step uit Les 12: 2-5 tools, 1 doel. Agent uit Les 15: 10-50 stappen, open-ended. En het hoogste niveau van **controle** — een explicit workflow. Code die exact bepaalt welke tool wanneer.
`*[Wijs tabel op slide]*` `*[Wijs tabel op slide]*`
@@ -780,6 +780,6 @@ Als studenten verward zijn over "wanneer is iets een agent vs tool-call":
> **Tool-calling** (Les 12) = "AI mag tot 5 keer een tool aanroepen om je vraag te beantwoorden." > **Tool-calling** (Les 12) = "AI mag tot 5 keer een tool aanroepen om je vraag te beantwoorden."
> >
> **Agent** (Les 13) = "AI krijgt een DOEL, mag autonoom plannen en 20-50 stappen doen, en levert pas op als-ie zelf vindt dat het klaar is." > **Agent** (Les 15) = "AI krijgt een DOEL, mag autonoom plannen en 20-50 stappen doen, en levert pas op als-ie zelf vindt dat het klaar is."
Het verschil is dus **doelgericht autonoom werken**, niet zomaar 'meer stappen'. Het verschil is dus **doelgericht autonoom werken**, niet zomaar 'meer stappen'.

View File

@@ -1,9 +1,9 @@
# Les 13 — Huiswerk # Les 15 — Huiswerk
## Agent uitbreiden + prepareStep + custom stop + AGENT.md ## Agent uitbreiden + prepareStep + custom stop + AGENT.md
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht **Opleiding:** NOVI Hogeschool Utrecht
**Deadline:** Voor Les 14 — RAG + embeddings **Deadline:** Voor Les 16 — RAG + embeddings
**Inleveren:** GitHub repo + `AGENT.md` in root **Inleveren:** GitHub repo + `AGENT.md` in root
--- ---

View File

@@ -0,0 +1,194 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/PageMode /UseNone /Pages 14 0 R /Type /Catalog
>>
endobj
13 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 15 Huiswerk) /Trapped /False
>>
endobj
14 0 obj
<<
/Count 7 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R ] /Type /Pages
>>
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2437
>>
stream
Gatm<CN%rs(B)NcEFGLJ3H_4ji+(uF$b4s@0i2u$M)P6"5XA=YM_RZC,S_[9dbhcOp_q:U/D%M"+d0a2F75[s3[6p1+45P8CSDp6o\IiFKV\DY$(q#Ms+Oe(]j$Q>:e#n!9PLY=8M!p9O/d!!THIcR/7Uu77ncE:q-#JS@ndU%U.@[O)7k.Q$"?cQ,OH/n+p`>d@(g$CPS!5g+:R<-l[/T;<A.rmY8u-ZrW.`kU,QgT<BfFeL]X$KC%gjWhd+Upo%MUXW[r5fG>joOe^-Y*Ls@VZT%.sa2eGWGR1CVt2eu>Ka#&9Ao+tHY"Q*8]o+d=0nUE8NM1AoNZhhsH2]_>$P3]2?85+P__kmo7U$OWGQ!dH/-og87*VVn%>C1f5FPG"ga$\&r&+,k.p4lgCpDd)rN=S?(`e-P/[;IO+.M=IqBL9YnXARV0P'W>D\^q3.8%:qH:0?e$W0-,PTAO#B."]fMH13U'>"]%R-"9<N;5:B8s$,87!i1_Ge92]aY'H\2m5"*BNP`[IC]!l\g-1O9LW5mhs4MQ'(9g%0/Y$65PC\OP/45HN:R;FGr<sR;bn^GJm*fMY_FSYY.B+_IMO[2A$XqRSmL[FN.F8h:d2!&]-uR7<.BE`(4hF05d5Gbm/!DPZ6/U+f17P'pD]?%!;nB*#E_Z>7:M8joI\!h<nmKa.=Cd="Eb7@@9`Mnpj+LWt\$(SSJZ?@?6]RFL=O2QF/V/W3s)*6NXBE1%*qpdo\X^?+DGGD?Sn\ub[-WN0'jL$6+"gC%i]&Cc/0fU!aYM0LF4cXA^dHHYb1SIG!P;<s't'1dGEMU]ll9=jlV"QhB#SokLeX$sbGL1Aa-K`&3,I)C-/<RfH.KXb?6Tt?jWoF,/#Xr@a1N[iA^EPd^O1VbcSFTX8_\+T!;s<Q6H1hjcip78h7Ar-D?;<>0]=/cG]Sn]]=,Rj>*C&J?#`5OV76?ng@lWGXnU):6'%ih\]bL&O>`?cfuB0_gFc==_m*LS"[3?ZhJF',L$fPOmK'FQT0,P=hKL*24*98U=KAQg%T-H4q^(#AV7*\f2=Do7hn7JqV%rsl"VolQVH?$dKuH1**.*F/)PGrn\75_kB@%<-?K.Yo#>_LHn@OeZ;E:-,ZL$oVf@^IF7qqNPE3)2%IcfC(Ef/(i/@Tg4I6]Z'#^(W2-oZ:Z=]S,;b%?p<9i@ggQV#pqetsTZ%@C@Z$pu&jr1i$_bsf=5$,/B**&G/SBUL`b)Aq*f8T*b*)+&TQ&KOoCBBut):<@m"Wh]_[U#i0r=_DH,rA#s_VCM0N1?_dd_m6^6fl>*S$sl2&R;QjV2Pu'G>+%+oB@ga,9[96$7_T44":FqS1fCUGpTZnQ&JZK_.mNYnYU/@:G<:h9Z[e`g?Ve\;mUt5H*QmV;0[*,%E==cK+t`I,LQJqOg5jnE*UT@oJRK[TK#<$)$+q#@,p.^5.)h@I^hM,cP5XCfN/?XZVn1326lVD!VtqQ\M&@/3Pa:JfV)0#o93rqtA>7i@qpu.'bIKlkpM_@]OcHU3i4g0tOT)[p-M?YNb0fA/TT`>LNBBJdg>j,l@W?dO&Lg\S+[l<Mh1&LplSdIFe#Cf\L;:sS%?=,m9cU0rNR\A[8D"+ITB)ko(ul/!&o]>Q>$GO)i7J2)Jar#?RHHY,CPdL^O69]lcL!qWjB+V+5*)QcHC2$+s*^bR(%'@tA7!?*]<VO*8p?Ig%E8uF\Ha(eOk,`JgjsGmb6G1o2K5R0^YW,RDYF>hG]i=,^-@'.b)J'O7!C%:+0EEd<NC"\ip)<Ma,AX6rC>WTMf\%P\;cjnTh*dLQ#2tkgn@Vm(?-m_!][Vq89?[A92nef/Q"&H0njpgW]s*s;if>Fk_Qr9!09Z@T_f5ugg!n7m&'.M$$l`3rH1%%Gos%3\Se?:P):kdh'<<<lmVZ9i^1BhALGdsX_#r5Z<q-SHT+5pQDS(\-O138rbU"+B#SB:]M2I>SXe+MXLrqAk't`>_FG_^iRC2$b8LabCdFu"`=-T</"61Cc3gpNH]rh^bTqK]>FMU'S)\Xq3'O,kWc;jS9IK,Ki<9:R+QA#kk+bMWNB*i2r`#[ACS*\"/JA$OG<07`&"!V)kO1$t58/F+TGLZE%M`=^e]D(ud!E;q/sG!O%N;CV=uoJ(G#agn`U%7\+2:l_^)ZMSh`Y'i-7\N4$RSu`a]gD>A]kauh4!WX$)NnYE/+6QBb!I]$2_HfEXGt'oE!qSjoi;Xe1#Ve%Ss!EL#=n5=!%YX,%f@?;t/?]Mck6arr-m;E:ES!NF@6Y"fJeXJ3tj9Co[Vp[0*>_Krn'T,Nn=7!GJ<3Uhh7sY^8@qlN9d+C:aB&E!Xnp5s"t0ileLHq\pCh@jATK5R7"RiB$\[f'_4lXFBM$3hCNAK-4&[J+6SKm>c['jbchnBeDdfI8reA[dGNBkFFH-rQ#WFLZd`Y/X,p9k>aYg~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 534
>>
stream
GauI192jS!'SZ;\'k`piK90WW]VO"30LHpY[js?XkMj"i%qJOlIp^0<d\MFHCMC/<n%%=9<rtK:0qMqY][(S@+Wr'$HO.S)nnWWsPK/>J,H]C%WT.\>_6S1S_,j29D4&FU-K)CFc714iQue[JN-3\Y$W"8s8HbD<gc>W$KJq*qeYgV^)-\VgNQM1&TD@7H04SUkMjVtR@dss`S(aj=MK,>l7c%PCq9+gL>]phkjf7Xtp`;P_X+38\/^COpc\J28!\NqnIaPam)f!8Pj?Jd!CjPL5X&Lm?EdOa79`p'gj\n<)PCJsA^D9i*(6El02_if,;B%E9R]AE,Gg4:paj`9c5)r)"L9dqB3V062+(O"Lk>3,KZO==o*!a0e'@n3ImR*k'Bd'#!of<kYAH&5W3H&85na.XBg7\1Gdg$RU>>\`9F7;U5A&^<%4GpQnnd'nh7HFWZD^%X-s3^PKe]uXEg>Ys+;r'ptD1!#Eck&qoT?+d?U89N#HAQ3-=NC/Z97?!@JDfan+s2haDT7Ck2`Z6A"T~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1697
>>
stream
Gb!;dgN)%,&:N_Cm-%#9/Hc%S&p0VejC0L.VFf78I>RM[e$.&N(R_)cVN1\i$XQ(j[Of&83)dq/JkP%g!n_RM'a'>#<r\4YJEKjUI)(8PR%=9k7)8F(lqa0.LN&=O63;-AFTW+!E6SWF\W_U:L_oQ2JYG>*^&XiD;(>DXELcJR*srH)NuSABpSb7u&B1HC]PHP5ic1!]"d,AmXH.;[;^T/-G\qO>B(LdcfRpSqZDaoKPY#6!1kkJSGCLULl[5kYkVUU!pq8/!FBZM>F!$to:7d_^>ZU\<?KuU&jGQuMeIG:QK]s`ACOe'C8VBb8<W"ee"=E+#1+k5%n[ZL724V]i#jq]V4YCK)jRG-+T.8h=a=+`E`>oar7_-AL*i':4UhO":ic(Md.b)8R<SL.Xk'MJhO^4U#Yr6DP`L)4^V?$Js&hLK7RQ`W[c4FE7>s!$C5%X[[C4W>V&im=[,/G3;A38F=@kdMq3HaV_1>c^4+!6m2WO(2$Wm-U@ScsePJ9(l&EEskj]k>Xrqa+Dkbj3j]^/s>"KO;b9S4FE'ii_2m$G?]QrLqXIW,d<Xlab;K2Eoa3,)J&OAina&_[EEfN3f3J>UncdePrZm920XJ>k;%@@Jk2*8QgD=j0(P'dl<970MGm:8le.rpT:Oah8,(Z=_`c0;X^_UH?61?\i!O=`7f(Yjs>fQ]1!HMGg73K^&4%IBcKF-+7!Ha+;,tc8lRT6-Ur)c:k7o?TiFf7<%PnUNCt;Nqi,i'>N,oWc+r1H(!\%':k*.U?(]3C[X\t3IHf9YS]rIpX*c1'$QdBtPE!@]&?<K"N:N5P4Jk7Ym<ojMWI>>aO0p"cc_bX;81GF-3p5bPS-h79*i:=t67KX?np:q6?a9t/r=Vq0(N5Z)OY1f#eR]Vm%`?h5#G+&3bF<(OK9nca_KAuj%hP?U?k3K<E=uWn>#:CGCgN[,R;mo;Jh88<>[OncJ8^ol=_)L),ha=#$_<"ACcn.>WeneeLj8UQm?"L(&>M&kk1/k43Tc!?e$ZkNs4a&c=#9,VRtO<HgPua#LmG]IjT4Y`A?M!_U5NN@)ODi5G'[W3&rI9LIsNktV/[[2OIcm<;F4"-dZ`VtXR9UDYSKT%HXl;S/[PbX]rq[<-_lhY:Pud3o8]V7g#4\_@KS'/H3/:u+0N+hW-t4c@8t5/H>:lB%mH!d4IQ/F(O8lCUKn^BkbAYL/>CV@Vlb&G&Z;aQgnHYc/bpJVASkJ%%Zg.1W:)EuD^$[srlae92lf"9Zs.VG`G$A`H4M^:ZXmD*j3cH!m\N=S$nUq`OV53a'"uAm9)hmcWZk4.J2?(86JO9$5#$KM&Rs1Y)->)hN1!?rIQA(XF(a=.(ST,PMbnWHMbn&[4W*R74g53okf!`<]'$V39g*6ohJ`h3"(Be<U1_]``56m_s%'>rq2ll3#U)+5&l8LQ2P)T`g\J4'5:QF.*BlGoQ=ac6MQAZm(t<YMArZQF;J2Kb&6nlb1%\''a'H,sKam)9-]W)W_LkE!k2m;(6^S<p?&O\TbkF%#M+7ZiYk5?;mTJ!:dT(2oL=ISNBbOFA_-G`XXpJR-/eW#MbV2PoNF=9kW/$jhn&s#C7W>dC^410tUC-uYQ1Iii((b*ij]S!!HBR@\bpQ;Wh#gF??d7slK4hC]hbHah%*Q.Qo\B@DE1rKA)QOG@WqufLE6``T/V<`i(S#sT)1R(X~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1699
>>
stream
Gau`SgN)%,&:N_Cm.a.I'*MAL9PSne2]'f9:=H0/6^6gh'I5Ep73O*mg._LZ$XQ*@[]I'(E@d/A/V155fKIC]",\2OI)d,?dj[D,c@Bo%/q?M;@JU>&9ta=DiB@dJ![9H9+U8VeqZl62b<bsB%sc5]dt$XIK%,`m*GXLl0*kY[V1HTKNr]Q7)JBFF1Z`EPb'ZL&cI'$Fb4ifso/hETdL1ohYsXuI5D%i"eh,%<$:uXEJV%S?POmD@T>A][BrZDX'Iir\QR6%h0]P9G-YEs]<)liHAe%%n$^2@lbiJF?9L$DdT(OtXQU295BX!Krb#H.j]\Fd_B2ef[ir0QBP<8n,!d]Kgg*?F+@iA0<KS>Ak)gC'N\2.;Z?i#k0>`na2fi!k9KMnd>2QjYhP-Dab@uKWm`1F<o%F^8=-t`m,>c>GH$eC>X"F<Fo"T/)GA,)8t&#fZ*c:dNOJOPG\*6E*(>K1@<Z+':mUp?UNp(*eMjCtpO-b@K^;9VAD=NJ#WL:BQ#h8JZ%'GnX?D8(B<iVO(58GH24abaIM-LNekVQ,O_n8%tF0(O9c-O+1H$WF4W"I!bI\1]T7OLiB7@YFH)45k22XLgs<ZrO>A3-cIHb2hRaN6/m]9Dj6s9MSe978@7efbh4IMXlBSl.k?\[cgsl#k%sa=%TW.o7q;OhH$#V?JGE<AZ]"1`EssAn6n+[RX.1/`G(MGNFEaD]uM&OY,u^_`F)Oe]T#YJaWP9_PI%*WeC7559Wj3IKM!/A/\3#;Hd9W-(0jJ_5WN%>Uf%8?E/#QM"uun5Jl'>q/"/`hd:54fdD;1"N?6Y9#Hln\@5Ysi[CQq]2CV"sQVGO=7kmn1R'2qa:QfO"PVps?Y75m4:+>rFM\7iF+A*+b?XGsCaA="]:cFKJ8)]10,r&c.A!BfDIVkZ=D:7Lm[eCjqV.,!#MR5F!,F$mu'VAN0n9&m[8&t,\AkkO-[+(O'h>hkOFd+(P"%5a;ho'+b\J[pA`3Ntq&0R0OPMM"oV1JC1K=-h9'eRZ:Bm_`=W8Q_>kj7g<bmpNn^'M*`V`,,&JcrrV^NTPAE)1F4k-9=8GN2=pDp#`IM.7+h:J0lcpi]_snFc=c3[[;_jSY"[$?+,1$^2B=$!"5Z@sg^TmJSETYhJIt0gapt:+>o892*E_idp[@,pouBeUd0]9W5NgNe+Oh''"GN'&tNb!2G1M4"`6lg1ut/OkVEgDqi?]CTUs,B^;o[d2[Kkb`cB%M_qG`Nn1NCWjT[VSLuF%$(aV#>+LaDP1HM;:j(Q6XQ/I=3G'NV*?Ds^:Z)5F@j-*kr[r<[<_ZJU0C'>m++a9cneN(u?:q\E@nqsK6^!oOqj5OV&ERuGLVBC\r^5/O;%[ZWq7W%5K_Cp'eQBre.KigJa]`e=*!9iY8p3FhP+@::@!(m\a%G2dQL0,#=CGtOmr"m?/&'JAPLjHtCa/Sf%ke5te0F=JGY&LJW1%m]SP9Toked74Cq#%C]RR-jC+P59q\6kXkYh!#T#8S`J[i$]'8=Q7Uq3OLGNWD3a$+5/\<!`?*-XpQI_Nf\@5$E,8(/J8a#]fs+P96ugKhd[grS+7MF;g@g?qGt6%&E063F-0\$!R!Xk*0^`,5<+jh*$l>KSqGf7Z<%@9\qka`:sUh0f_bpC::%^D;0^_ikn_cDMqW_^;?]Za>M=cVY/CU#<i$\E8>:VYPc:0B1>Kn,~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1837
>>
stream
Gb!;d>>O9K'Roe[380^R$AOu=gl0acJ7Z>`/+u<P^?!8c6SLKCeom]Zec4J^G%*NE_F8-B#U3k9o:>>TkF=6!pgWpRBEGCsK^JLB(l.&f0L5gM5Jk7`qsG'!\/#^5Dl=as+G'!1TGW"n84?Ln!sXKp@^H,D(bm?k_"!rG9LE7IlrT5Kd>DZ`J/BVu;0U=_6ue6]"d)C\\'NCr)+Q>&C<d<'2STNP44mf;(=a4S18uQ.-SROVFE.X/o!'dAo/oh-c`44sGm,G<2=)B%m?V<]<]5\Vp<'9.FCMRk",7UGr7/pSi<s!*iD[FKs3[.J,^bt*jg?Zm)r/cu36=LK4eOHAe-2#pF/GBEi]G4pZI\$,O-VN7:dW":j,u6[m98dp9dgaR\&Q[?QQSsPhHuD'4d"@!i<(lp3N.*M^jUce(>EKHSsI0$+[Ud=kL=#:.I00n/J)cq6lt_tV"d_YEdkMuUSiCuSU5KU\Q@hgmIr5XlKD6dbi>J]Z[a_FE,L1LY&C,8IJ0i,(W%(HhgY%QWu=2Fr%>_A7'ZdpG6rcnO+X2NRD]["dEDbn=="_PK.C/"dfcFa[.-t'W.;==iNa&ahrTYaZT3;R$I^>U*Q>j'LA<XM[u*;O2W6-r3.oXKaJ%BlP.OmQ5'<%W8n58s42]ro5StKm;XnRo'gp3[ndu!-J%k3cnC4<hYn_p@>Zdqp9Jl]L)ogXiMPRPQ%Isc7=:AQh#eVn/EKs>/b,P^t4&5.U9\Nr&AY0:25@29?X#k7cp>W^ch^f1\Dd?LW:VLYk&_$S_P*k3k@6V0+<Z"FcL0@F@\J#0LGGk?6/?99(dGS]Fd9*=UcYW7VU2[[M8+7H/EkfN]`h>Umc%W5HWjt>EX*i>D2bU1#Nn<Oe'@hA/L@+/f;nUmj87.-\O\bBNqJoqD8ZlA\X8Ku=;lk1O@?3.9i6ong*g'PkWRm>9:\<$nRpK:>Vp2WUa0ta;p7?d"f(ne+kc%af%_#N(4"%JP2DduKb-Nj!m8f[:96XTWhrIpVMoV`YnBFV(P%[bX,gVBICX[O/Qt6fcP_,=dhq"F;9<^;Vf9';45-r4h9o+]]9]28Z-D5MN)G_rpMrHJ)$V159``:hj1Q%_@:*AqN'+K(KN?\hi:$4G)K\"E?d]TF<0[q-0QJ)p@&LsaIYF*;#aD9Cp(;qW?C8c:b)elF&=F`2ERS>AdFp4SNIp>XKNTkjb4##C1Ea?*;FJ'Z+q>!dTmVuf>m6a^^M6:`rKA+C?EeMuNCBn4:o60':\$1IRj<B6/!k)QH2D1/N96?gG[W(r_iY%C_9)r%3hlIm+>'tn\%1=0TRU%mO"BmZ6l3i.1^pQ<g[UBc=Ns:(mEJ;nc%q/5K8UgjB//?*'d*111ecZ0W>JGg/`k%\:f[/C>J[8;gVIY`'gVLd9N3f4#XCanYS?TPL"HgJiDZrUP7"h@<7*iaP.Z;k`IiJR;QNFM,jhdY970Q'b@sA7@0A.:A*eKKB3'+-n&:Ha'5S0),?^hNjmU4psA\[6W;cHL<"F4)ch^@-%j'c`TU'<T9GAsonJ!OSF].Y\c8*Amf$$_MJ',InuS2qNLGVaD5[sW;Y2:gR8Ae0rVSGI)RH_I_uS$IMtng2I%5:p_ljgr'Z4"/*[O3A7u.&h[P7GZ(3d`qD5_dWL)FPddlEuW$LijCUl];GCK"`<5=4J+s!50%F).Po#L)91JnX^4:tke:)r[E9+%qlakq]QKY"fPI[!s7]jii9Ujc'X#;hBtCiph]JCu-[]"+H^dGnp%k[3g8].:H9KB.8^i!.'F-;urrV"V/u\=j$r[6)Gnq.G`><^+S%*<o\,@12?q5KhN!JfYk2d.`~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2009
>>
stream
Gb"/'gMYb*&:N/3%"cI<BcBO;.#Dul"d66,!sIFsj)eZ+:g%CIV7K*iS6h;,hk@2j@Ri_R^24il1.<80+_T(/7DZnQXhKE)i+N/s-PRt]aX<aOE1!03X,1h-&EY[5gH[;u=rme*=o&["KopoQ&BA9%"_"u1\/`#O6jQQg_f;hP?-"=>H=B\nY%,%p!tj%+KQCe=73'<dC//TcnSXD+lkA)8O#W,ABP.4(@+^)iUcMJ5'9h.Q%?hVuDu]fU$?+@H/:qH%7W>&A)(ZLr)0=d+FT8Qn_Eu@)]TaoaV-,>_[0MmgQorc;Xl4?E-JUB4+7[Zf!Rui_AQW3\r,[kpO1tr6+.P3]GIXS'P/A22>uM;-6O*(o.rJJ!1;`#\G9Af2:$UK9/M`\d9TtCB2C=l!S5@gGlRd;7-SW+i]V0pT%Fm=]f[$mt_mX77V_au_#ggB\4u+NMV>Wcf"#@Jk!lOB,M"!oIA2C`jZ,Sm[Q:Bt8qGZk]_23?,b'P-Q)ZNpo1QU08B1r:o>YE_Dg9Xjrqa+u0bdXckpeHP3&U"t_1La8n*VTg:UGOD-R#]TgKkV`B1u0,A"@niM-X<e"J4lXlBgo2&]A;gsH<Rr?`@8`'5npIITV#l9&!h%?`>Pn6f='TqR$B8)q:ChFQF"445=7<Q_26_7)>OXK/5fmJq=/RV/4bgVJhVa,npONRb"i"abM6/sG9q2JKfBuMRc:f851`b!ao"34N1e%BH1(R'+qNUEYt&,9<j21A3SU`S=f#gBKo]]Kns,B[YYc5Z`:cm&OofBm;k\GZf3/e:.6t9eXEM2-i3$8lDq>aB**ijUp._)=42g3W]A=ac5(V*s3+IUL_()CdNME&9<r*`)0rOHh=jXQ!<<#=dJLe[mA$ZCrqmj'VLn97PgY.VTg%;`m"i18DMH=l**dEW!PS_doh"7W6*X-7U-n*4tp@IdCbi&^NnerjB0$_m%44H>Q*IZh8'j=!T"DWqX<JUWp3g\52dS)!:3$%B;1:>HWrA[KfSa#";!A)hg?P'ld.__Xda(*cti%+S$qE_+AoCe&=;^\'WgN4._0IrnhWe0RGc/\<9qjMda]V8jDh_Fs'F%g!TDMA.-L:cJhL8m*-G:A_q'qWH[RAeSD3jOJHF5/?5CI<!:Hd;r.@iFlBVjd=N?53!sCO2KD\753,@Q_<0VG4"![j:-=8`X<Vm*1he>ka0NBCu`CXgr)<p\&qQ-<[=nK;FP*0mk51lr"&Afq?P6h11(p-AtJ"Ysi$YAoKabC+YpM6Ig.u02fF))#WB/&jV)PET"fC0YlQ8#d5GZ`WE)?;?r&.NI&2P2l%8W!DqMsg-45A!b?QpB5.hscPtCS_]Rd`baXXqA@YDSb7u&IYkqN<E@kH1ZpSl5auhu1YIT$$6V`mDU>TV`M4m&sK!dl_$CCIt_94e#"NTnM_W)mkX%lVIYq"GYcB$t9kp_*QI_o+>@LEp'<P\p.@ocslW="r?Tk3rMO3k@[$\'J[b:LogmY1dOY&gV'2>JPV_B>(8@TuLd>FNc5\f5"+VMh%3eCo;]lgZ_>",quj>[E\(0'BjUV]rW96)dW]&g:+M%q!(t4!F,6Xte^u=AGu/Nou6Q_M7%N'aGD3'`DD%s/nCiGg;j@s5Z,jq56f;LW1<>ngPPMFAL-VW7F=ENV_OX_ps9G[j$9<*NE-'9c.gA_X:Z&D/3upZ[1ETDge7`mM.uK*ih]00m1+oDDAQ=XH[-][g*8;s8#.>cd[fl7VMWCo]o>e.;,U>=^#BG%,%C<>V&m;q17<^/QTfN_MgX.RIbLD3orY"RbiLbVWo3hr)!`&%j8f?NmL3Qp\!j<.%D;W"Xh,"?[Y6m<%\+(O/R;^GSGW)!W:TRo;g3M%DN=\cd1^`5.Ee1TYt;"Xt&R\fKKXFqZ15WNb_q0m["Z"m@cu!5`2TJX3<QRn(B<>,bZcm,q+6i,KuacR7qM3&CEDLgQjrNVP.>)I^'7F<>mGW10O2qE0Woa<+6.7cI;%7D(u4S5?RmR_#~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1570
>>
stream
Gb!ksbBDVu&DcY&As:e;/X-7mmE0EH-TsJ('!',D)i0.q=<t]_TRG7Yr-JYkorr74D)YbMH;GjkpC7B`(LmdQ^8V&a)M%!,q!f.-Peh/B1a3OUhS@=fjR\&/KV_NS,g:ioB0c%7rIM*u/]7reEgBYFJs9e["AqW[QK8u<S<p*0"YF-XCdN]K8W[NrOGq1NQ9:NVP(YQcN_#Zcq;M8!^Wa6TP@X:qh&P8WL)+l9e.sp#83l2lL04UkDh%ZZ)IBC8Qsumk%DQ+!MNrlU@jtZqSmE6YN>3bP&@\B7>pEPM'P99XHfhj3n=qZa;&H,'n_XTS1ko)F1j;9i#MaO9OtDH2&*Q.\oms#\`^gjM&T5UfR,bh)gBDoGU2>kFCL\#HO4fWM"[@[XlXgn?:*SlC^Aq$^8_iOW7@h5*O03M]ldH'E.e%/s`jFFRaoo24q<bfDdL%T'k/a,!is'Aeht=)dm@J=U/N9I>o"X*n\];41n!]E/e^%'%l?s57dairl*Xb14Y:p'P&e!MgI.2OdL!l?pa0KaOiJ>c#[mU""aOoZ[qG)s/CN42[LW"[5XG[8F)T6[l2u#kPUO3q",.sbam#>!S>[,`aWj\-mWchM<$*"U%-rZZ4nJ>E,MlW1_B;?t2FA5gE@A1M5$jN%EKfMFX_M-%oYU'0*qMcs^kL+rqbGeK?]YOHH&u()6<boA3^,>M[-Q#?AHAljrfpT.9f-d3q;]>"j3T9cK5;s6BZ]'U:0FTg!o]hs?k.lbQ$&RVY.j<0?]\I?5f;N'FmqGn@2B%lZ&lY5Z%=;(8U*SM4I%EH'#h2>JHr18jBamK_4*N+2/EBNhJN#jF-q2OE_[M-D-VV#t755L'^'::#[C_E<J^Fs^#2,$Ph%Vj+?0`*Rr=6:-!Y8Dk2+EL3Zl-R[mr&4Wq",!KaV2/RLMOd%jsc4`*)Ad8p7:%EqkE9A"p$g8Ooka>`Kn)U+6'ht"/r[mO/P:_]`M(:5j30I*+!akB-2i+DjAadKa1s6i0N!\?Ikmi3@?!]_8\FZEET^@mVGYIoU_4Z@=+!!dE8j7Nl)e:NPYbpqJ@2dm5Y[:P9)`NZ5'46F3"I?-l)NbLSkh%Rao(g:hs&s-Sub3c;>:.VMOIWC02np&;P"CJ;AdBe4N[B:9bGNg5gVb@DQudq3SoZlZU`Z/Y-W-%fig1`H9IAh!n\i\T(8#kU-.3MU&B?YC[SVWO`gj=fXX1/p&=Vat_%#baFZRBqYq:o_;S#79PUebJP(h#2)k^Sb9AJh7[.4(#mVuNFG@j)R?+Q)e(n;1&,*U/BNN,6P1V)_fcd\2BOubs/9grp4IT*aNj^i&q.*Y4@A,/eu2a`9WS!B<u_e-3EU*\06pimo.e.sc(BSER*DkN=qLI=d8s7ZG*op%m-=*>q<eaL-!q#jDa4Sf<qA,(bT,C*nS$^O]Ma0g422U&#->"mTg?QloWJ)^jLbX>gI(@QM2sL^>ZV*p4'lELLBUi(b2WF?:])d8"heVH[BMfu#Dd8/joFtIW[f``[4jh]LPm[a44,TI=j"0.">3]\:k$1b#-_?;$fL,t*%=RKr!BZ6AB=~>endstream
endobj
xref
0 22
0000000000 65535 f
0000000061 00000 n
0000000112 00000 n
0000000219 00000 n
0000000331 00000 n
0000000436 00000 n
0000000641 00000 n
0000000846 00000 n
0000001051 00000 n
0000001256 00000 n
0000001461 00000 n
0000001667 00000 n
0000001873 00000 n
0000001943 00000 n
0000002236 00000 n
0000002334 00000 n
0000004863 00000 n
0000005488 00000 n
0000007277 00000 n
0000009068 00000 n
0000010997 00000 n
0000013098 00000 n
trailer
<<
/ID
[<323c7ae53850c32e02de0259196e5e57><323c7ae53850c32e02de0259196e5e57>]
% ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R
/Root 12 0 R
/Size 22
>>
startxref
14760
%%EOF

View File

@@ -1,4 +1,4 @@
# Les 13 — Lesopdracht # Les 15 — Lesopdracht
## Setup research-agent + eerste run ## Setup research-agent + eerste run
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
@@ -279,4 +279,4 @@ Het huiswerk bouwt voort op deze setup:
- Custom stop-conditie - Custom stop-conditie
- `AGENT.md` documentatie - `AGENT.md` documentatie
Zie `Les13-Huiswerk.md`. Zie `Les15-Huiswerk.md`.

View File

@@ -97,8 +97,8 @@ endobj
endobj endobj
13 0 obj 13 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521071303+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521071303+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 13 Lesopdracht) /Trapped /False /Subject (\(unspecified\)) /Title (Les 15 Lesopdracht) /Trapped /False
>> >>
endobj endobj
14 0 obj 14 0 obj
@@ -108,52 +108,52 @@ endobj
endobj endobj
15 0 obj 15 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2307 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2309
>> >>
stream stream
Gb"/'D/\/u')p0`0it#uP=DV/jkI(+JLIMPo@7fM>4Gl!!sVJ:Ct]T&OHa&JfAEn[[A;mXgr5mp)'\hBR@2m!B1=D-j!1#]A5;c79&ne3#t`Ul,Wt5:FI0G6c528X5_bk+bZ3GX,dGEJIoN"#3V`[`+rL\b4Cfr6aA[[>'e,;J(PX-0;Uag\NZ])A4B*@V-2^"3\(8/BO:n9Njp+2Z\\?Ng)>,0hFP9%*p)d\0+ZcALWp;Alr6VA+S@8,T*:D0<Mc3n-B17s1Vn1C"=\VCaL,@R$9r]\FC-A>!oqfrk`E_U!/"3'YoX0f=_"XYFAE8I1pq+*]i=[3N@TLJaH9XSfo9dGrlQc+G"W#0Sft\=RN-lH)n_g9+!S5L90D+"ik*2PO1!'MR1,shM\[$,YPW6)pKZgmo$a[;1$^_ljLb+u+;*2r.ZTX.$(s\XHR-iiq)XiA+%Ykr?^:X3s_t:eVSMLL@c%K!CL$]N@i\lglYT*U,gSG9K2cN0!A]VC@^?TR%;)cZ*ZTZ<OgT\-@*o<[^?J,9o])hMk08'tO@;nVA7#710R$g_h%HH=g,;9-#a-'`H%(mES/j`XN'LG76_eA8QNTUdVGs)]WWXoV>\.:nr/<[ju!TX>g0,N!AdW(\FNT*mT(]?a*Q\[[PQhdBW!nbk]$j's!_1oQDE'*$:_jfW8?9fsr-nHsVXk%Q6<P&CB[/]H>!lm&3QjrFJ)LC1"N%]Wd;gPBB"@"Z=58@D(@m<^Zlf-hBr2YeOFh'%F\)OCF)cjJ)ehgab3i=eV-!=JQ%pAC%"ru-4]r[f56Ap:3Z,PsM+3:@^BmMtlGssM`)+#SI>S]=\g&RP[E=$AE>Gfr9/h^n+egI:h0n)cbNuM8*YP*C?3e`sYnEPISkLp6Oe**F=U[tKo#=W_)JuBt"&/-)>*@>)0>/2f:O!bkAM<aj]6PSg]VBeeN-8umD`T4g4D*s>7n#CN1Q#=r-JNBH0@2@O^TgGpf!QeMe]I-g>8(JhAK\e<>"t@C+a"Zs/[,8OD1SHW$pM7pB+*BcZAIFE@UcA&VAE8@n=k%'6N`C^_qBIh#.Xa(#^jX.,^'4?S31&t;oDZso:b6_>30'-aD7ZH]Vd>Lf8Y"7tY">P\8%bD>\H\JaA3<_Y^(%*]+e)o2U.'G*n!]eKR'S3t&3)jK!EIR1laMSj<rWBecrE7*ZIJ"/S!@K%!T[^X)kd7d[%tdD!o"c/po<V(Z+u<f<9NW4Z/>eCKrBRjN<N)^89g8CZpo)p*m4-W00m'u[+W1I4sY!@B^VicT2aVtPIprWm.".u'$'_)"dum"I;B^/c\;'.)i;%l@hi*g,Z&IQSiHkIU*&G3Lg)=*HLQ:KH*:bffU=P!]IPHiMZV;9(<SFU8*8s,#(auMJEn\L0ICoQCKDk:D;KXMn=--SQ/E[JJL=T)YH6\)C9T$_h0gS7?dQF`q*-+A.p<Yk%lhfI;U(=0_gCt`Nit%[H<JS:Q$W\/8FiD0clui@hp?(`J$oU."tsUc0C)aF*@r#s8R-fZP,)33JW@2$nL;!-7VA?%lV2\sK.\WgC/-K!o'"U+(AEO4\$u,_Mma/S]ZCXXp35^e?c1_>Yj)s\"T7>6YuuC%!J:hiJi9%B0-<$\YIVB\_(/[_=%Di,l6sA?Zg3mm2Ks9mW\'B/bIC:tW`,^[@Y*TVQE[0P@t+XE&<)iNNTY;OcQ:r((Yk%S3r[#!H>eC[9^e<Z<Kp9THnn$^j)OlXYJ"UUPM\@'iMXd!K2!3LV0[E`D;g3Fkcs$W;M;-^!]*Rp38d[5gLjm13aR:F@.$M$NN3)$c,%ZA^8nHZ)>AA8lqsfDK,^!SMMT(BL,UH1q/%33=+2`G.(VuN"5<pV^1$p`<,+,2HSF="19R<s)gJQ%\%]>KJ%a;g>`+u6j*,dglAEIM=`[AKcHRVB8kL,URW9D##cI>RMbP)%=]HOah0hf'Joq[XY*:Ljd:cKd06EJDl(U(q36eU&^uH.Rn=:AjW_>mgZpZ.008^CZZS\iKLUZ<q5<LJiib6Q<Bd5-rD5d=#g>Pb#@t$P0;4Q(h3#u#*MfF<tL?;2bUUO6ifZ1%Zd<YDP1Q0W#)1<mBQR+Wc,m[8S"Ljq/VIbmZ>:R4Cb;;E1ftA,Kmh^G_nr%/D>>mhmX?c`7;?B9%6ckjik!c9LEV/Pq$R%%4]a+(Zmf`O9"T)VWHZ-32N4SQSO6s]2W@gZ!Z"FX4FE4mtqj1Sq?Y7oN,HT;QhY)Gra8;LcmI%VO55;KLGrIb955t3;mOr3q]r6B$Nrc_a2\`;g-dOl*-[Qs/)GTnt^Xi)Uk`GCCnUVR8~>endstream Gb"/'D/\/u')p0`0it#uP=DV/jkI(+JLIMPo@7fM>4Gl!!sVJ:Ct]T&OHa&JfAEn[`MMYigr5mp)'\hBR@2m!B1=D-j!1#]A5;c79&ne3#t`Ul,Wt5:FI0G6c528X5_bk+bZ3GX,dGEJIoN"#3V`[`+rL\b4Cfr6aA[[>'e,;J(PX-0;Uag\NZ])A4B*@V-2^"3\(8/BO:n9Njp+2Z\\?Ng)>,0hFP9%*p)d\0+ZcBE<7bVbpn:L43Gn/338C3W(8n`9cAEg@:N`Y#Z^QoM$u*"'RT*9jeTs^"l:[Z_Mn..!=#<(<l"_MZJF?'jaiFkAnTT+E_C%I'`N5#Fkl(95c!q@gXH2#c'j)S?AHQ#<0_/M>a+KlL"B[U,][1S@RT"r1`$>l;aP[1&j\"8;-uo*<&2*"W0?dVS(GIc^&bTg(7.%'^=Po<%KAk&=K_7L`U2_\7EB)IhnD2@X*i9a&kaXXmC*o1./o6kn(UnB(L#)P(fe-Pq\tL%r/jmVnpQ`-l7bt.P=PmV)mi/t-I1Nf#g^<qND)Yido7^#X)?r_(7>,ngKphbDd4kP/1'/+CE%K[2beT,KjW\fC9-I9q4H-?X]<16+>^8ID)QF>X<O`Q+7kBh?-irB2>q[#@ZdNi]S;lN,`#&A?>*k%+.[Tt+!<Up#O:22$32$k,5N)Kn0+MoT=*jtEGb_M0R;K@'PH3C`Ybh;*k7]h@Z+t0h#L^uZemWsro:")pXWmP&1&\*(@NG>c6<Y01kMT]Y`37?qq7%/8"lHQ$7C8rfZIV%4q'aAEWd;a<Y;5%/NpC9L";=u2gP@GAeU8R4[\i<b9]m/81h?rPpiBU!k\('/(<7`"rG7m&=1Z&;AQk^j3lUkGD*DiNeU+^m,Ln6]r.\;-$(fmI\=H+hr#M>0%6Gu,P8?V=0n>YTi9i;h_QX:Cir"%qOe8S4:GP>3:23D,FCB3rTit,"HE(i'1%8JV::8LZC_N`Lg(e3sh_J0p=V-[2O,ir;C[oJ,`.lXN-/9UhGk`-<h1YKk2gQfm7fRp3\auTAB=D\c&W[XHSq2iJE$^FrXP0po0Mm7P7SBRRV@U1t\BD?HhZN&)*F[fsfb'*qc5O_Xo"7[u2""lhfp]i>S`uSb$@g"K$(YjnBhlY][HZG==ragcegXe0VuNpQH%e8:iXLJ!itP<9*P$W'W,1-G3/=[%d?g[^YMZE$HOCr4bM3@,0Vg!`?5;,d35\fta,:+5gnZuD:QGZ4:b5!DFDi^T1-i^7e>"ma$hmK#(O,u'"f0E:[I6K27Z-?")Y?VObqdBkOM`,h2(*D?5.i!O2mlH=L"LI?I?0B+gW\ms=EPlcE:oe_!i*UBnfEV];G?cA>OAt$Z<Q+R0sJ;@.Q31ddC9t71Nc4Mk+Dp0bUnA2.[2V6FUr7h-JE=nHk,Y8U'$\=*L21'=^/)2i?)g=-;rZJ-%IT2?$lRsaRG'f7DT($o7U(a,f9'-4G2[0M_cmL=h/RV5SQfhdi2KOMtn;Q:%-F%i7[&M%'m11A^J86&YHuV-m;0>,oGiZCEB+".rKJ&)7JCtk;hb#U8I&e@j-n>4^bNHUqXO]?Wjaa!9[("BX5B?(]#'DhLJV0:aFsH-]H<uo*ZCO#SXSeFFO%Y_7&M&p'.^2h-V2E40,.O1<lt'#5>[/92TPgFBZ\,>#Ch7]bCi"B=!7;`>nb"3/:n;N+tJ9j*^RiI_=T^I+@a/*mf6I`++,./?>LmHK(,#$6>2Nms4:ho:#TsGmuu4()Ul)?n^'R/);"JW/i"s]dlOmRO^)P'S6E.ja[<;-*6.[CB/E7&oLq`Qtm1L(>:BFP;DXsE7gpdEs=QM!>H,smgX2/!qY/1Cp*\>n5+4jH4B]l5hUn^MbpCh0XkHFatg,nX:<tMg9%j8f[i2j_kj:l3I[<-XKEs6T/H@"k1iW3VPM^]XXV;ANGr'>Ze1MYRoT./dG9#".p*U=m7Q'k&rfBRog2_OR4`7'Lst\t"[$*7!oJ8XWlej/91q+iq4]8\4A4^lIX!r'rPQOY,`]n"RPqI7fnQL;Y8uKL2!2ib)9"&<NRL`^],2>TD.qc?1O<8JM1*$_)4aii3O9!>SC)P4HWbrA?\73H95rY]AQfk[\YZ%D\4korS_[Mt>JK[FQ!ZX8hjOn0AHh?(PS,CE(eWr_1bVK"O/#eN?O6>1gNsJbpeJ%H9s>`5\+_42a/Br<s4I>:Qg/%u(jcIL:+(fY]79M>lc\YkEJ-2qgtVhSoQ^Db]A9%P`s871-grAegW,rch#6?9Xr#X7j"]ImoS-iJl/[+;n7;"*?DFL6rn"`Q+!#D$$RPWeMu~>endstream
endobj endobj
16 0 obj 16 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 627 /Filter [ /ASCII85Decode /FlateDecode ] /Length 627
>> >>
stream stream
Gar>C?#SFN'Rf.GS<lhg;I/&I=!$UlDJ4i(.IB$-&q]%.W^'Z!nb[O$KTDEYZ$g->j5Y3A!2h0t52-,L.IJ8]KLGY@TpS/-6';`W%@B!#.Ld.R*lSaCNl$E`4kN%>AmuVc3,Y.j$H`\;>jNR^cWXaSH+XRk!mDR#SH<k!)eZ>E,A*aIUD;7t`1QXJIP0!*RH`B:c0cl3g*-;cSPUQM\Bn8$h;WVSoK(!QEp`1/;jISnR`]94#(NJV(lduRFe.-D?f@J=pnHP^rN>sJoH!0MS99CdUgc)[p*9RTf+8O-./0cWEIsc6f(j1aH%GW^\mCLVZ"$OM7J3>8S#*#>1lGr(8V=*1<oj-#).dZYXQaih-n$30F;0="r?H@n26q9gb_qB-VUDD!LmD[qRV.jX6d[.,PTNhK5g!ce[*8CV?-c`H))h7I`,9PSGH7dVO=+Kf[>N'>:.Dhh'Q4j/g"fNP=b*u5Fd6jXb$2'lP>dO"$5NQK.UEgK4r`c4>&3"[P1N)%@&!8akHS3GOu=`_D;i?gWnf?*QSsM;SuLL/c'%=)4<Mhfo:O,Hj>FY!aV<4bG<2A04A<b%kJPRYgQIY6?QFN:=6D)pAWa_Lr/Q1Z8[-<XgG&C5!^GA0~>endstream Gar>C?#SFN'Rf.GS<lhg;I/&I=!$UlDJ4i(.IB$-&q]%.W^'Z!nb[O$KTDEYZ$g->j5Y3A!2h0t52-,L.IJ8]KLGY@TpS/-6';`W%@B!#.Ld.R*lSaCNl$E`4kN%>AmuVc3,Y.j$H`\;>jNR^cWXaSH+XRk!mDR#SH<k!)eZ>E,A*aIUD;7t`1QXJIP0!*RH`B:c0cl3g*-;cSPUQM\Bn8$h;WVSoK(!QEp`1/;jISnR`]94#(NJV(lduRFe.-D?f@J=pnHP^rN>sJoH!0MS99CdUgc)[p*9RTf+8iWPl"Ig3'kk+l[60l]YJh??*D><fJ0;7U3b2Wc-fN/R`2T%Ud<QS/+S+MN3]lgeoWro'GQWS3XW^"rfK3r)VI+nk/Bb';ea`!7*@AIbqmM=U$*)&b)[u6+D!BC>3>d<Y3.C_$lf*_@Q1ge]@GG;a:khD>/fP/-R7GoMRO"Sm-Z:c/APK+\k9G<jfMVGaf.d!KaN<6'ebG6T+,oUXgRU>a_N(#0[]^lo2r+^8K3ok[W(1neaAe&9,g2XcW"eSB$#-OSr[LDq9S+4nf$DLA;Y*l4.X](*[]pNo3pg=D+VgVY7A:XX7MUsZH1o6I`FX>,hV1gD&E0U#4^B>~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2004 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2004
>> >>
stream stream
Gb"/&=``=U&:W67f]jc+lG*B*n5(K,SMZbGof-ikAD0Kj%8FYS*F9n_3(bOt]aKpR.-G"0P.m/E8?ID\Qb2,r?pO7;g&FVRn8J_i:Dbbqdn=)##ah4!j6>e#LiAsk63?[Dl9u[`jI$D@X&/oG-[ruY"sFFH(^LZr,@MFC^i<]mYQ/DAQZkq.8Dqr>'L4u3rQtRX^IN[s;7.OppS6L?48V?S?:=_:3]+2A75.u_\sIH9Sfj9>5f,@5^!in*O5ZGr8i=_r/2MOJCR$G.bW$-kkkO"3e"ht($i!l<;-@&`WmLVs]nYcWUT9/'\0*mH_(P_DC4LS[\$B2eZ%G5uYL4U!YD;d4qK2o&o?Q!=L;`[sJFWE/dmkH?-hN'FI)nf_P4m;FZ4RTQV'>9JGhB,2KEXR.9B9\Z13,-t?m0"ab)%<I(J/Su*c'@e"#b`6%GX'Y,DP*]m?c<';5Y]XdB+-$IW.c"S)%lPhE2Z-8![6=V[`[b'>knb@%W)m7=&BPPjjcS%iF;PTaYej6n^0G[;N^,n)=-Z59g#8I)1YM&TW(#s'3SZ)K)Nn^8g1N\5ApZ$^D/56AgRqmeN.[N$:)jOh8*@Y_9g!,J7$IO$jPd)<bVa8;,K/gko@*qLf1ooHiI.9ep`E-5iLT1(32S*jX;i?j"]MC_o)>S-5Oo*t0NK0^O3^[pX<YbKqHg^'!3Fg?me3c1^[k[.#3D;59am778?F3-#Jm(^7XX5tbr-CE'-E@0LCF>UR^?XfA\X%F"N0>o+Ip_^#P%A>'"O"h<kB]kUN;`Yh`uR`G(>?E*V6!$%8Wq,2<RY?)(?[?jp42&%A9Xg2aC-:/Nl.,;TpX5*"?=r<45-Nthc#?.ej"=p+TY+)`,J;(Rn=.+e)04*M'9WW%1dZ91q@E:OOf(k5LXO4=1=,i73b/"kTc"q=,s(+S9&7ZrkLpR%%^:[W?id65Nf?Z,@4;)n/[n.TQ>1K7?LFQJQGlsIK-.&T$<Mt.+?j=Zq1/4su^oGW,A.@RQb"F-5<K*V&5#OBPq!R!bpTgkDc8*`m`!'VPR^BRk9'^f"B)?P2l6R]KQ+V.C*sN)fongV-oRH'#VO^A/Mp<X&c8ERtW<&NZlLaq4.Y\dkg$BRG\uuEGA?_Jm0C?\LNEKpoqcdFD?C"n;C86iW>&1M&W/G^iGfZ/)C&B=&erq*n5%t2<q$a1$i4j3'8-W:[q@1pf=A^?@ap-Y=3b0$e$_5-l;"qd`:a_r@0Y5g-N>ngOgp.&AgduQcR,C,p5f*c9XNMU'EB5/>JN3ZB.3l8/o$/Dk.i1Pa4Ml+k4h1sJf$d,lMGq2Uql/faZGXr)^$B8A5=AS2JSr:+N3_BD&P6+^)E')'rf/^#_Z][LXJ%p]]rS`_DVG_&]HO26s.%B\Sio1rIPa9=G'<NIkksuKfcMU!%CB=l6:*g^s"3<Zl-n,WDiao:`:\M`kqdrTQ^]cFVfKS4N0B6tlE(M,lca37\8NfSgNu/XO&@08[$c@YGRCP$8uH5TJaqWoHA1/iQHCBb/9_h"dq3UZ^do3Km]>[^^5&RVX%I(]*h(e@-*S<iMe]*7Z*EH]"Q#:3i`[WFqtKJ;B1.`^YnNV[#!U9)LX6->\_COf]u:RNWsQ_h\k'Wq)C2im,7HPeq8/HA%LkHHj85Tuj-r$YE2drbSF)<&>$&u0n1_"CU2;&#8XU[/o>p]7:m9sBHNN._JT:(_>[S8kSt8^_]dg5jKe2NV?`J@El=PW>5(6HH(bL/S\usO"+lfT>q'e414uAJe(d8?WkT9o<RCuj5J:9Y2HJ6=d]j)*=mFE/J^!LJ7SG+Bm3B'*IIXL_<r93M",h^e?"kq.Sq>g*]mC]8H3^\APBu!ukXLg@egFWMQIVZCL:hp[/fPq:Y-71d[iNf^EfGh>(kuD"k4OUq@"-U\>@dV^5&&l-)JAHd/%KW+b0]+6S'>,@D3CIN&I'O7fRjqek8^"XFfBjP"3nL':%j&NEQX=edJ3aD6a8HOXVfs!V"12sOJH~>endstream Gb"/&=``=U&:W67f]jc+lG*B*n5(K,SMZbGof-ikAD0Kj%8FYS*F9n_3(bOt]aKpR.-G"0P.m/E8?ID\Qb2,r?pO7;g&FVRn8J_i:Dbbqdn=)##ah4!j6>e#LiAsk63?[Dl9u[`jI$D@X&/oG-[ruY"sFFH(^LZr,@MFC^i<]mYQ/DAQZkq.8Dqr>'L4u3rQtRX^IN[s;7.OppS6L?48V?S?:=_:3]+2A75.u_\sIH9Sfj9>5f,@5^!in*O5ZGr8i=_r/2MOJCR$G.bW$-kkkO"3e"ht($i!l<;-@&`WmLVs]nYcWUT9/'\0*mH_(P_DC4Jmk>?NQCfKl.K=(r8!f>IG*rON%$H"UqY6fNAJ^j(7Skp$_0'7.M353*q@8c.^^fn]ld;A&V54R?)T_?-A(-$$==)*&QuY`LRAj[9]`M^18uO0rbn!?4=V#&^$=&]8P?p.O\$W7-ogkgkV"5<'n"c0dH8Dk;oR,KhV/dt[nlM;aLAYYW,r,/(388pJFe#7PUc:kglEU)+W_=uY?Qp[ETh*teK,^>MDb#e@R"J$.f=%C]:r?WHVbgaLP>L!#,U+[ndIpO#U>7M-QFaPC'0=@-EL&`0P57j85m%!8dk,XQ6(DFH0PI6n)HqN>g(-5ef]PDi<eR>#Z:%pA1EYQ8B7[YpXZ:4c<s%u(``)"t\@>;3Y=AS;ZnhgoZ^mIkJUB)D?p>'LV3W6nDG+sIV3*4^fGMumA=TI%"'[1-'3YQ?[3Y*7t[<`N;g#%i4SXpY_s@?LaMZ;:Pc!o.p\?8\`Xis_qKc/X*ZYLNDV!00[gHmq+df.2R0g.SKU)N#1-<`q<\';:=q'Q.<I<GqJZ/I]YVP6-rBK.0lEJsFYef1fCQ^d;>HX%^F%(GG5N-<<#)ksn-t0]X6blhn^aenA3TX%(-Tj^=#;B!sYQs"^;WLp<(F`7b,#?X><0n\)`8lfT(0*XOsSgSBicXm46[6PZ`9]Re;6&nk7MW`-SP0S<kIRASSK?r^fQZA.m9jX$.V.`P:#+/p4cI!9MBHWeo2B,TnGiW?Ac9j1dFV00ILZ[K>Tob*Fa8mXO2%tfRnqF"dQqS.*"e'98S7HY;#kF1DKe,W6=FaF!U'gmqqCj(b^h:I<41>'grQZhAa`[isHrN38202!r.[F%K<XYngNeA\sE4QK,P1k(X#lcG.rT<s4/I"kR"nD?0$,_I[>r<DNnX=+][AHV@/*O:Tn"\rMFW;GKkW0>R[(u=KR`XUEbDHVQ1m\IBB9^j)s+Q3E-en#?O3#rOZ5b*=\PS)XRH05aqQ&?dk*aq'qT%o$5lfk/q`Mq^frR>okg#;)PhK:W1+/5gT5e#YP7To63LnlR?%3$%$J&dqM@01d6f$L(jhGmij[r$pNhN64,Ino0>cQ8Yt5FS3/4$.b5FT-Oam#RA!#21XF+e]s@rtb1ho]bW<\&Wt-id*fAoU3OebKUo^;`Wc*`lZ4up""l'Flp+Vgp[uemCaUg7k#$,g.X^=49a;MV:2`;_"d@r]u'1E94a4lQFdL"BsTd=@&+-6G?/hjha:><<M_Mi%o$o1'%dYE7CCS,fN@`i!q/[*ENKk4rVLc.1SR@jfSRjh"!;.P6g+QZh!HenhVs?beHFlD>pS?I%2.Ir&I+cCHsoZ[LBa<5nbpkKnP,Ng\5YLlcM#7NXfH&SGSjL2dC'UMUs'A(H";:VW(D$24b7R@^pnPj/hdWF:X>qk?56Rp65K7f03,Y]FYgiZ+$V4_N0_1:>utd"OE":Zr"PVS+.>cC$m13<oT'%/b[)nU5eimT4mc^C?EOP/G3]R`?KeaVcMNfrS=:Q_5<emYIWTaLP3hM[!psPdI/nQjG2?+4SKYc91gmIpf%lenm?W;c^GXbaW3qG(m'qa=',-qiE7rk]lj[4%oVsMp*pI#1!Qj@/Z1_qVLLT(O^gOs(LOdYlR-t]e$/Q0]*256#51t^D9bf@FUugB^lZS:!Sa4Y.#7ob3bHEoB^`\:,j8OhgdlWNf!SOcaK)~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1601 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1601
>> >>
stream stream
Gb!#ZD/\/e&H8h>EUY?RE#Fh5hE5mG[^BeWTZnCa5Z&<u.l4G6]p5>@Udb:[Nfk^ADE>bS0[)FKlca_DGgDK_),P^eqE)t&I[S%21BrfUlk5[.!bSA"FQRso#krTe4<SN4h1u/i>l+SNjlG@q`/f/]+J]#E!s'TV,RgFZ3;NdZ$U?5PI,lt(JPUnp!"#(VL]2Ms0(CsBd"6MV+78p.o*]D]&b4K+@@GFG_/KT_0<.B^"ej-J4IB\6Ie!!R#s9lD<#%'E,)+W<X*A>dc?TE1-]a=h.]JA1^i/LAV+$fOg`4,r,Kq4^=<%$e$c4,#Cu_.f$CD2\']h[)%f/k*-+O/`Jb:DA[0?0t3n_=A8a'$&I+2__k-M`X$Gm"J\Y9O7[MEATj8oE40Y"LS<iC@tH'Au^.(@"uUFbtuTl+\6[L>/e.H)?%,KLi:":_u6/TjHPX^c;7>/2LbcsY<8[W>oUD\UKR#X_ocFZ+er7^ej+E6eDo;O9[^6)ac+FVkG%E8tljK@)k`m*Iqa'HankfDb_`qOb%!FQuo8mtR.GB.cS0%?uP3VVGQ0+q\JC#>Q][1odMoX.-EA#3$i1%!9-FWL96:^YRdf/J8FYiZUB@'#4R<=XU%;ML5c+k>J0jK'OUTeKV9STKZeGCRKfQ3P9f`$:RNUPCXR%:V8(ilPN3"Y0;1(<108n=&OG@W+(C9_Fg`W:`5hb=7bt[J=slAE&TuuMW'K)'A"tgNJ^e,9gMghGmnJ1MZZb(L7t&\*(^OlI%`'-KiOCFA7FIpR<U_6O-[eMeb&?-Q3f;:3_=6]>\&WT`o)S/UWHmlJNS]=l9YM^at/GS<r_OJq/!:B4=!e^M[f\4G(A#k'Y_EIf-3.ul9(ZoQ>2)7Z7OHMQBpCFO&_='i,0qC$O@4*AqD+^`U+@g5C`K<9iZ4Z45=Ju,L#m?'*Z1O?$oNU<pCl0<CKl99kMFa:/9\Q*1rd,r:0FH5^JQNS#L>.k(QLho&&EqI_ZuM#M0V;5/$i4X8*>>oqlYud,h1?GOY`D_m#\l>"BmMQGW>>Q4r$B")u+%^)M_eBQ6Bt!a8i\GcT=n8)t\=Img[AEm[WA3eGam+GB'D^u`4iTp8dF*9qr/Bk'll+/Hcf;Y)W6TFt(9\*Q?[N^pEUjE6!H5&<_NH`,`plB)?@Val)l?R;o+.oi4A&!T<(n@IShhZ#k?4LA#!95MbCO)i(LW0]_B]UmWr?YcY&YC5WrYI2^uN:sOUC\bl;:"p(\lF0(7"80ut3Tno(8,n>?QP5^2h>S7^Vm7)W,0/a<COngOn[Q!+TL?XO.Ob9FdgB$u8pi=F]"+[.5M")m"<QLm9'P)IS_[)V!NK.ca^#I@-$XSf]D;3MC;_W')UEnk-af8=-4aJ?Y#`H$Y7X-9IBUU:0r`m1<kEsBLXiWX[`CYj[^3*5pY9q,Q7"7_PIAC?]E*F.X3LA7<\)>rPh(PC]2#r;<@L/R9'n4=jAHd3?DC>tPgo6o6J%^9)U/fde6p3enk*UPYkUA()IY.]er>K6<+-<5l5p:REf$UA<Q"BO8m312bs4%ss4D\qODb&"R%)g#i75*`s(#Og&DMQ^'T??-6iWX=%*i4>!Sq2~>endstream Gb!#ZD/\/e&H8h>EUY?RE#Fh5hE5mG[^BeWTZnCa5Z&<u.l4G6]p5>@Udb:[Nfk^ADE>bS0[)FKlca_DGgDK_),P^eqE)t&I[S%21BrfUlk5[.!bSA"FQRso#krTe4<SN4h1u/i>l+SNjlG@q`/f/]+J]#E!s'TV,RgFZ3;NdZ$U?5PI,lt(JPUnp!"#(VL]2Ms0(CsBd"6MV+78p.o*]D]&b4K+@@GFG_/KT_0<.B^"ej-J4IB\6Ie!!R#s9lD<#%'E,)+W<X*A>dc?TE1-]a=h.]JA1^i/LAV+$fOg`4,r,Kq4^=<%$e$c4,#Cu_.f$CD&X']h[)%f/k*-+O/`Jb:DA[0?0t3n_=A8a'$&I+2__k-M`X$Gm"J\Y9O7[MEATj8oE40Y"LS<iC@tH'Au^.(@"uUFbtuTl+\6[L>/e.H)?%,KLi:":_u6/TjHPX^c;7>/2LbcsY<8[W>oUD\UKR#X_ocFZ+er7^ej+E6eDo;O9[^6)ac+FVkG%E8tljK@)k`m*Iqa'HankfDb_`qOb%!FQuo8mtR.GB.cS0%?uP3VVGQ0+q\JC#>Q][1odMoX.-EA#3$i1%!9-FWL96:^YRdf/J8FYiZUB@'#4R<=XU%;ML5c+k>J0jK'OUTeKV9STKZeGCRKfQ3P9f`$:RNUPCXR%:V8(ilPN3"Y0;1(<108n=&OG@W+(C9_Fg`W:`5hb=7bt[J=slAE&TuuMW'K)'A"tgNJ^e,9gMghGmnJ1MZZb(L7t&\*(^OlI%`'-KiOCFA7FIpR<U_6O-[eMeb&?-Q3f;:3_=6]>\&WT`o)S/UWHmlJNS]=l9YM^at/GS<r_OJq/!:B4=!e^M[f\4G(A#k'Y_EIf-3.ul9(ZoQ>2)7Z7OHMQBpCFO&_='i,0qC$O@4*AqD+^`U+@g5C`K<9iZ4Z45=Ju,L#m?'*Z1O?$oNU<pCl0<CKl99kMFa:/9\Q*1rd,r:0FH5^JQNS#L>.k(QLho&&EqI_ZuM#M0V;5/$i4X8*>>oqlYud,h1?GOY`D_m#\l>"BmMQGW>>Q4r$B")u+%^)M_eBQ6Bt!a8i\GcT=n8)t\=Img[AEm[WA3eGam+GB'D^u`4iTp8dF*9qr/Bk'll+/Hcf;Y)W6TFt(9\*Q?[N^pEUjE6!H5&<_NH`,`plB)?@Val)l?R;o+.oi4A&!T<(n@IShhZ#k?4LA#!95MbCO)i(LW0]_B]UmWr?YcY&YC5WrYI2^uN:sOUC\bl;:"p(\lF0(7"80ut3Tno(8,n>?QP5^2h>S7^Vm7)W,0/a<COngOn[Q!+TL?XO.Ob9FdgB$u8pi=F]"+[.5M")m"<QLm9'P)IS_[)V!NK.ca^#I@-$XSf]D;3MC;_W')UEnk-af8=-4aJ?Y#`H$Y7X-9IBUU:0r`m1<kEsBLXiWX[`CYj[^3*5pY9q,Q7"7_PIAC?]E*F.X3LA7<\)>rPh(PC]2#r;<@L/R9'n4=jAHd3?DC>tPgo6o6J%^9)U/fde6p3enk*UPYkUA()IY.]er>K6<+-<5l5p:REf$UA<Q"BO8m312bs4%ss4D\qODb&"R%)g#i75*`s(#Og&DMQ^'T??-6iWX=%*i4[FkpR~>endstream
endobj endobj
19 0 obj 19 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1809 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1809
>> >>
stream stream
Gb"/%bAu>q']&@2DS52S)%-L2&-S7igH:qU*D_j<9!Zhg0Ek+V.?Z#$4)$&AhTIk>GX?&,DIRrD&d$?ApPHe<i\.A3LKf;,$^eV8^c3mjJI*N.E<:V@S1BA6aaN+KE><Tu%O?#:+3<&/!hLYmhuNpKIA2)i68>36TRc&_he,.6#0n;O%#?R9Y65EU4K7CCk?T8l8(3'7;?jVV2uHWH0-IQ/LG\<]"N)7]EN2BK"ej034]lN/o((>CA,%Q[Rj-X`BaeosDShBe-0IHS3M&D`MQ!ak"jbH$M:69V&pjnB$WoMBD%5t<(PE%1ho@r9"Y^b^,L'9"m\!qQFd-S/#$Cn5>[&o()mVY-`-&&?q=nRK*>a@'>TnfSXi!;"5B^hI_gOkN:kLX.RU(M!?h305fBrs9D@I\T@]Y7JQ3,hXGgKm2XPVD<BGWu\fKR=c_f&]X-1-4rB-hY5cQ^AqNb!4@F(=-Rk\QchY0,W_rNd;OrDWqOM/#XnO>]Q7=,ac,&D'pRWmW4!Gp07!oBjj)^9$f+_S=),S9QU#g>0Y2[5nDnWNnD4'WfN(PXN9Rh)9_HRq/TQA3dc<.,,@!^\s>9TU"*.*i=&jQNS[UF>hUE<FUm^Su"Mc$-si&5\3rJN1r8`\D:e'McC3qV\<B`]6/eqf1k/)`K!d%4P2<0P<fg2W'=Nam@M\hk6L0<.)d^8DG;8"TU[bp39RU(e1p/f&?:4/bKs=*n29ULBQ'rQ7+M0"H`kWhhOFN7c:W1%W3S\W.`?i?S8kWG8r93,Q+9Jnc-kCaB3=)23_@f%.[D<pOd&"%GDSI8i!Z(<knXbNFR\M^dF:K=V20okg4rEZPN\rtq-?M>@Wa]3QU`3IM7'$pZ+Vl)Vafk.jp3?B?K&+EaB;l>2l><Vg*/>2IMJVIUo6nj2"HW3*li['2&5_f1)-TW@?EoSZ)KhP0dPmn5G63Ak7In"F/E%[3IktX1@`#6gi@G>cKnN+dk,b4_=I)/":I_)i(MI*'q[1JgGsZVgV?t6c^:M<4Os-'K<5LL9n!C00&SdMf60>eK],JqBhas,G\Z`^JZYp10?`!YYte[eEMjkJmGcdN@X1L6:oQsPoP3Z]^n9a?haNl[^6)Wg6^gNd=PLoUhutb,93XPsO4P.A%C\+.V_4,k<A%d&XV5L.m@0;K"<V90lNs*3-,(L@)K,-0ik1.7U%'bMf%*=4)A!K7HY)fb%GG'TA-?'?6r`3?K_>s<elWG_K_n(`E1DUOY)(:^AhH!GXrTq(7CpZ01Zj5NPEJ0-G3'*m8Ct%`Q?O\U(EH'kbU6(gK9^S$qF4]!^p$9HWm66V3O?eRD)PS</+R,EG$UI00'B76h$RY@T8"H(jZ(IWC"N'39saR5PK\f7DE2-I[(4o:''II/nBolO.[XH7a\R?X,P@?%,P77;o[W8;aO?\;A$pgfl>#:i23lImREhO041T!hanlAq-@7KA;dfPg!c)-fFCJq7C$"dq=813;NC_I9V^-re>nYj>:#P]Fe&??jS#\Q^0ipHLoTk7dVG@C'$0PqQHThP'c9J!YO$V[eW4Y6ra@24<bK9`s*)fe_$`REJ#B5<_&c?9^D%2@Oa=qq.S[SaAXUXpQ]p2N6ln2'f84A:"9]Of.UkZ_lnAguY8@8)LPV6P;D5`"XJF\RI3eZdXCitIeSeO[+@IbK>$DY9-U_#d!4GRU'c^r.U&!ki<1VE7?<C+3_hca&=]I0U?N<@O[cbY>Nn4OHmk[TeCCpd;,N=[.GRKaK7AFsIUMOaOm7Mgt4Gn1r1pW;2BnT$k#\!5!Z.IS^I^"EqAInc#i5l~>endstream Gb"/%bAu>q']&@2DS52S)%-L2&-S7igH:qU*D_j<9!Zhg0Ek+V.?Z#$4)$&AhTIk>GX?&,DIRrD&d$?ApPHe<i\.A3LKf;,$^eV8^c3mjJI*N.E<:V@S1BA6aaN+KE><Tu%O?#:+3<&/!hLYmhuNpKIA2)i68>36TRc&_he,.6#0n;O%#?R9Y65EU4K7CCk?T8l8(3'7;?jVV2uHWH0-IQ/LG\<]"N)7]EN2BK"ej034]lN/o((>CA,%Q[Rj-X`BaeosDShBe-0IHS3M&D`MQ!ak"jbH$M:69V&pjnB$WoMBD%5t<(PE%1ho@r9"Y^JV,L'9"m\!qQFd-S/#$Cn5>[&o()mVY-`-&&?q=nRK*>a@'>TnfSXi!;"5B^hI_gOkN:kLX.RU(M!?h305fBrs9D@I\T@]Y7JQ3,hXGgKm2XPVD<BGWu\fKR=c_f&]X-1-4rB-hY5cQ^AqNb!4@F(=-Rk\QchY0,W_rNd;OrDWqOM/#XnO>]Q7=,ac,&D'pRWmW4!Gp07!oBjj)^9$f+_S=),S9QU#g>0Y2[5nDnWNnD4'WfN(PXN9Rh)9_HRq/TQA3dc<.,,@!^\s>9TU"*.*i=&jQNS[UF>hUE<FUm^Su"Mc$-si&5\3rJN1r8`\D:e'McC3qV\<B`]6/eqf1k/)`K!d%4P2<0P<fg2W'=Nam@M\hk6L0<.)d^8DG;8"TU[bp39RU(e1p/f&?:4/bKs=*n29ULBQ'rQ7+M0"H`kWhhOFN7c:W1%W3S\W.`?i?S8kWG8r93,Q+9Jnc-kCaB3=)23_@f%.[D<pOd&"%GDSI8i!Z(<knXbNFR\M^dF:K=V20okg4rEZPN\rtq-?M>@Wa]3QU`3IM7'$pZ+Vl)Vafk.jp3?B?K&+EaB;l>2l><Vg*/>2IMJVIUo6nj2"HW3*li['2&5_f1)-TW@?EoSZ)KhP0dPmn5G63Ak7In"F/E%[3IktX1@`#6gi@G>cKnN+dk,b4_=I)/":I_)i(MI*'q[1JgGsZVgV?t6c^:M<4Os-'K<5LL9n!C00&SdMf60>eK],JqBhas,G\Z`^JZYp10?`!YYte[eEMjkJmGcdN@X1L6:oQsPoP3Z]^n9a?haNl[^6)Wg6^gNd=PLoUhutb,93XPsO4P.A%C\+.V_4,k<A%d&XV5L.m@0;K"<V90lNs*3-,(L@)K,-0ik1.7U%'bMf%*=4)A!K7HY)fb%GG'TA-?'?6r`3?K_>s<elWG_K_n(`E1DUOY)(:^AhH!GXrTq(7CpZ01Zj5NPEJ0-G3'*m8Ct%`Q?O\U(EH'kbU6(gK9^S$qF4]!^p$9HWm66V3O?eRD)PS</+R,EG$UI00'B76h$RY@T8"H(jZ(IWC"N'39saR5PK\f7DE2-I[(4o:''II/nBolO.[XH7a\R?X,P@?%,P77;o[W8;aO?\;A$pgfl>#:i23lImREhO041T!hanlAq-@7KA;dfPg!c)-fFCJq7C$"dq=813;NC_I9V^-re>nYj>:#P]Fe&??jS#\Q^0ipHLoTk7dVG@C'$0PqQHThP'c9J!YO$V[eW4Y6ra@24<bK9`s*)fe_$`REJ#B5<_&c?9^D%2@Oa=qq.S[SaAXUXpQ]p2N6ln2'f84A:"9]Of.UkZ_lnAguY8@8)LPV6P;D5`"XJF\RI3eZdXCitIeSeO[+@IbK>$DY9-U_#d!4GRU'c^r.U&!ki<1VE7?<C+3_hca&=]I0U?N<@O[cbY>Nn4OHmk[TeCCpd;,N=[.GRKaK7AFsIUMOaOm7Mgt4Gn1r1pW;2BnT$k#\!5!Z.IS^I^"EqAIrV3J6N~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2065 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2065
>> >>
stream stream
Gb".=gJZcqoNbgDL51MZj(3GBP#c\%*Lc+W_?9omD.]0W..Ui#F[M<dS@8ISZaq)l<&,-]-.j@)B[?Xg$Nl8.<rVb:J7$@$pQ>R;0YRZ:Lk,"-]GMSH#2qIaKE];Ye9!\^f@3$H9oTu@S(K?;)+a$(km.i`&Lgul*:Y#(3KP]"HtG&TN_LNCJ4O;*d_:KT&t<rQ/VmummTo`o5,lMBM-Wc0@THh]L+?B.<(kaUKJL`U?l[#N]ArKMGb%N.mU%83#eq1DnuiD1i7rm9_pLcA#C3!in=*U[0M*K((JeIe%HD)i=-()RJoFdNX7VHP%a5'g,j?TG>1+eT1l+<!HaMY)>oR62YD%+t,c4-RoZ)SR2bZ&g1kdMtL^\0`lF)D##'U?L6M=eleuJp^Nm7G4X'+I%/IZQbA5&2%5q]<]/SJjfXBO'[ciAG-Ydk8RL2U5hP.$$WbJcDR-Uih%XcPD\X%#m+hmbGa\C."lrHg2?r0.4u'3U)]cY\UR/f?U!+^J#MZ?2T&q1Z&qb]g6RqK>Hf-2]rT_26-9N856FB8)\(;h`(jjTPcA'Io"p-GlI<Y[,t;K[)ua^8oYAp<noBoVGRaC>!dN2%sBp.t#oh&iRSuXFcL1<!+qb]iIF$"s9^%iK]jo+WRE&p(eD^6;ifqJ_H9;*!CE\&D=/TN>?-sP">1tA/J@DL8p(Rgb:U.'F9-7@HL*`JnU'02(]hRZBL;l;Ud+cSDESdi%i,#X\79bQ:kK.\D:K!kL2DM@%nEh?H,BHD#a07k5W9@QGA_pPlLbi[N4?]gCepAgY-mIfgI=L%]^DR'!r5;q"CD(Ig_qj1"u0OE\%KSfVVSI!Ip\p0_uGXNmG^a<>=]shHlTE??har`P+nmh=K'&02oFP1B.\60%RM'L:1e/a5jlW%PW2<43s,#^m6hr02o7h?CHV"mhJ,$mp5*J]JE*AUDn=$D+IF[a^7+gF-S>$p0m+pYCJ:BFc6>1T2b$ndk&##@DC<o'0Bnja`V1TPhWt>r:=H\><bsbreBa.Tes#Jg'7#jRae8KU.^SS,/N]Xb&2>phM4%&a6t-K"dJql/$%dDL&,'(Y_L(K>jSI5`bqBF8QMKV._^[n2G!EsLpnk(.4B/baPg02'1DN?Car(WMYCecC;hA'V[:)OGY3]H=@eWX0"&G)$!SD_gi#;#]EiNmDb,CrR^J[:pGW:.?T1[5Y/&f.]tp&VMDi.ZA&PHa212g^>VO4O(np.TMkR%0Ark0_;jA[j:M0:PHoK;N\nOCX^*N5:AY?=[amtG^8T=M!N6q*@<&5mO?BDHEPSM=K6\R%'C72u#\mUV6:^#6,aj^E=@aEetSfP")l$50_]h_spe^;9@;O,5Bo4GrDC0C9(eEV9A9!&3_0=*2)ZTC1\WfS[=VbkG"E=,E[TE&eX?;TRcI.$k]a*r_WQ@m!Ug@6b\S;u3r[!SQU2NQ#j=kU]4^/7U'hUJtUdWgZWJ!I`$\k*)@p:O;p-5Gu(ID9J!0q!aM($^5i6,(_P@\Yed4km0!#`O5m)<>&%E02F!/;\>7=-.%9Vbfh"EsWLT)\<,7KnsBbDJ(rgU-0U"m8L/"@bhs^l@VH'p<L(^_D3f5fsSSHYep_1MR?%cd,f&N]GE#tF'V"*J6BNG@p2>N<ig!5Q4&>P3aZQd+/`P1k<V5tXhQqm\drcADFnGfE.3'(iT%briQ&D\5/8.jjt_bCA4VRrrD[2;_G\klFqB#1]ipBE,hR)(MQCN7eiNL?6+@%`fatJ.iN6;#AMPpsLM5]/=$OMP8HXZVA!4i_Rbr!lLrHeZE&4^$ENW.#9@!u)#hcMd;,<7u+AHf.^'+I.q6NecXD6d$[G8DcdK4B/]th'4*FMiVl5oX]_1m-#?XU:Wc0FM*=93FFDISYE>+J^Z7d+EO[tIQeZECI(CW548@0l&fYTRL=*C\Ur<eG4B@hf0rZl"X1'ErIVP=4LD-O$Hp5sAgc\&\:]47g:^*gGX6a`o)Hdt:8B1SDqB)uRChdO?J$Ys*.t$FBZFKZ&`OVlpM<_/3D,U+SJ!@gH_:>9YjTI2lb^$M`HXj'RG%Y\!~>endstream Gb".=gJZcqoNbgDL51MZj(3GBP#c\%*Lc+W_?9omD.]0W..Ui#F[M<dS@8ISZaq)l<&,-]-.j@)B[?Xg$Nl8.<rVb:J7$@$pQ>R;0YRZ:Lk,"-]GMSH#2qIaKE];Ye9!\^f@3$H9oTu@S(K?;)+a$(km.i`&Lgul*:Y#(3KP]"HtG&TN_LNCJ4O;*d_:KT&t<rQ/VmummTo`o5,lMBM-Wc0@THh]L+?B.<(kaUKJL`U?l[#N]ArKMGb%N.mU%83#eq1DnuiD1i7rm9_pLcA#C3!in=*U[0M*K((JeIe%HD)i=-()RJoFdNX7VHP%a5!e,j?TG>1+eT1l+<!HaMY)>oR62YD%+t,c4-RoZ)SR2bZ&g1kdMtL^\0`lF)D##'U?L6M=eleuJp^Nm7G4X'+I%/IZQbA5&2%5q]<]/SJjfXBO'[ciAG-Ydk8RL2U5hP.$$WbJcDR-Uih%XcPD\X%#m+hmbGa\C."lrHg2?r0.4u'3U)]cY\UR/f?U!+^J#MZ?2T&q1Z&qb]g6RqK>Hf-2]rT_26-9N856FB8)\(;h`(jjTPcA'Io"p-GlI<Y[,t;K[)ua^8oYAp<noBoVGRaC>!dN2%sBp.t#oh&iRSuXFcL1<!+qb]iIF$"s9^%iK]jo+WRE&p(eD^6;ifqJ_H9;*!CE\&D=/TN>?-sP">1tA/J@DL8p(Rgb:U.'F9-7@HL*`JnU'02(]hRZBL;l;Ud+cSDESdi%i,#X\79bQ:kK.\D:K!kL2DM@%nEh?H,BHD#a07k5W9@QGA_pPlLbi[N4?]gCepAgY-mIfgI=L%]^DR'!r5;q"CD(Ig_qj1"u0OE\%KSfVVSI!Ip\p0_uGXNmG^a<>=]shHlTE??har`P+nmh=K'&02oFP1B.\60%RM'L:1e/a5jlW%PW2<43s,#^m6hr02o7h?CHV"mhJ,$mp5*J]JE*AUDn=$D+IF[a^7+gF-S>$p0m+pYCJ:BFc6>1T2b$ndk&##@DC<o'0Bnja`V1TPhWt>r:=H\><bsbreBa.Tes#Jg'7#jRae8KU.^SS,/N]Xb&2>phM4%&a6t-K"dJql/$%dDL&,'(Y_L(K>jSI5`bqBF8QMKV._^[n2G!EsLpnk(.4B/baPg02'1DN?Car(WMYCecC;hA'V[:)OGY3]H=@eWX0"&G)$!SD_gi#;#]EiNmDb,CrR^J[:pGW:.?T1[5Y/&f.]tp&VMDi.ZA&PHa212g^>VO4O(np.TMkR%0Ark0_;jA[j:M0:PHoK;N\nOCX^*N5:AY?=[amtG^8T=M!N6q*@<&5mO?BDHEPSM=K6\R%'C72u#\mUV6:^#6,aj^E=@aEetSfP")l$50_]h_spe^;9@;O,5Bo4GrDC0C9(eEV9A9!&3_0=*2)ZTC1\WfS[=VbkG"E=,E[TE&eX?;TRcI.$k]a*r_WQ@m!Ug@6b\S;u3r[!SQU2NQ#j=kU]4^/7U'hUJtUdWgZWJ!I`$\k*)@p:O;p-5Gu(ID9J!0q!aM($^5i6,(_P@\Yed4km0!#`O5m)<>&%E02F!/;\>7=-.%9Vbfh"EsWLT)\<,7KnsBbDJ(rgU-0U"m8L/"@bhs^l@VH'p<L(^_D3f5fsSSHYep_1MR?%cd,f&N]GE#tF'V"*J6BNG@p2>N<ig!5Q4&>P3aZQd+/`P1k<V5tXhQqm\drcADFnGfE.3'(iT%briQ&D\5/8.jjt_bCA4VRrrD[2;_G\klFqB#1]ipBE,hR)(MQCN7eiNL?6+@%`fatJ.iN6;#AMPpsLM5]/=$OMP8HXZVA!4i_Rbr!lLrHeZE&4^$ENW.#9@!u)#hcMd;,<7u+AHf.^'+I.q6NecXD6d$[G8DcdK4B/]th'4*FMiVl5oX]_1m-#?XU:Wc0FM*=93FFDISYE>+J^Z7d+EO[tIQeZECI(CW548@0l&fYTRL=*C\Ur<eG4B@hf0rZl"X1'ErIVP=4LD-O$Hp5sAgc\&\:]47g:^*gGX6a`o)Hdt:8B1SDqB)uRChdO?J$Ys*.t$FBZFKZ&`OVlpM<_/3D,U+SJ!@gH_:>9YjTI2lb^$M`HXj'T-aY\4~>endstream
endobj endobj
21 0 obj 21 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 721 /Filter [ /ASCII85Decode /FlateDecode ] /Length 721
>> >>
stream stream
GarnSgMWN8'R\fAR$U@5.-oMn%.pAgeYJ$?V+jT]WQGU"P?h@0"`G%Hl['',-&i8Qk$ZLhShg_:D`*JV"h[KIEiu&t,S*^TBI$Y=94kqO_D>Ms!sh,SIdBA=^:V`DB/K`89^K_*OUOYmC?S3F.#K6oN!hufU*Dc?bnNQZA/K$:8-L=qYOK7[T#\Us+ttAC(I./BS@hsk8KGto+"$"gC-'k1e^m-f+:O?2QsY?S]u3@GUcr!?9o3esUMOL]kBS4G0,LO7?hBY)]Ve7LS$o'F*[:E:jN.:8O'd6;Gd.`cnm>6)jb'J.c+A'jrAe.!Fc(.!l\9h9-.YIf7"NkC%phH0-\fI7pEd'LR71-lXg<s`'m++YT-[)^fTO$o`P2Adfp)TD?"&s"D(D5_UN\!'m+D+s@k:F;`5o-&"-JTmj!int3GfU'3U"\k_Y5;)ZNI6!=(`,MN$CNiLcpbdbk%4++W5=IZ-g)>@LRi.C`E77,ZYD3osT/%po:^u3dA3e3XK0(DQ+f;-g.!ZjTtjXEm-b6C"g8>/Tj'rW5rGU0)?s\ILRlO.eLe:4Uc@jhT;6om"'-5XIh$bS#3N*>3,=2d$%bEDa;XW949iP4mqGYkOAqf]W](34@\(&Rs+GS;Ti;.Z(WJoa2liFD5p=Ak$59OXJtg.(3BtbEVeY\3Y>AP]ZJ_WeL@[-r$]X?<V_Q28XX8`#Os"8/uU_HNS.Z7Gm[^~>endstream GarnSgMWN8'R\fAR$U@5.-oMn%.pAgeYJ$?V+jT]WQGU"P?h@0"`G%Hl['',-&i8Qk$ZLhShg_:D`*JV"h[KIEiu&t,S*^TBI$Y=94kqO_D>Ms!sh,SIdBA=^:V`DB/K`89^K_*OUOYmC?S3F.#K6oN!hufU*Dc?bnNQZA/K$:8-L=qYOK7[T#\Us+ttAC(I./BS@hsk8KGto+"$"gC-'k1e^m-f+:O?2QsY?S]u3@GUcr!?9o3esUMOL]kBS4G0,LO7?hBY)]Ve7LS$o'F*[:E:jN.:8O'd6;Gd.`cnm>6)'nE3Zc+A'jrAe.!Fc(.!l\9h9-.YIf7"NkC%phH0-\fI7pEd'LR71-lXg<s`'m++YT-[)^fTO$o`P2Adfp)TD?"&s"D(D5_UN\!'m+D+s@k:F;`5o-&"-JTmj!int3GfU'3U"\k_Y5;)ZNI6!=(`,MN$CNiLcpbdbk%4++W5=IZ-g)>@LRi.C`E77,ZYD3osT/%po:^u3dA3e3XK0(DQ+f;-g.!ZjTtjXEm-b6C"g8>/Tj'rW5rGU0)?s\ILRlO.eLe:4Uc@jhT;6om"'-5XIh$bS#3N*>3,=2d$%bEDa;XW949iP4mqGYkOAqf]W](34@\(&Rs+GS;Ti;.Z(WJoa2liFD5p=Ak$59OXJtg.(3BtbEVeY\3Y>AP]ZJ_WeL@[-r$]X?<V_Q28XX8`#Os"8/uU_HNS.Z=0+(q~>endstream
endobj endobj
xref xref
0 22 0 22
@@ -173,16 +173,16 @@ xref
0000001943 00000 n 0000001943 00000 n
0000002239 00000 n 0000002239 00000 n
0000002337 00000 n 0000002337 00000 n
0000004736 00000 n 0000004738 00000 n
0000005454 00000 n 0000005456 00000 n
0000007550 00000 n 0000007552 00000 n
0000009243 00000 n 0000009245 00000 n
0000011144 00000 n 0000011146 00000 n
0000013301 00000 n 0000013303 00000 n
trailer trailer
<< <<
/ID /ID
[<2116caca3db23abc7cc418256d9c507e><2116caca3db23abc7cc418256d9c507e>] [<6b5e377fd0647992621660653a695082><6b5e377fd0647992621660653a695082>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R /Info 13 0 R
@@ -190,5 +190,5 @@ trailer
/Size 22 /Size 22
>> >>
startxref startxref
14113 14115
%%EOF %%EOF

View File

@@ -1,10 +1,10 @@
# Les 13 — Lesstof # Les 15 — Lesstof
## Agents — LLMs die tools gebruiken in een loop ## Agents — LLMs die tools gebruiken in een loop
**Vak:** AI-Assisted Development **Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht **Opleiding:** NOVI Hogeschool Utrecht
**Vorige les:** Les 12 — Tool Calling **Vorige les:** Les 12 — Tool Calling
**Volgende les:** Les 14RAG + embeddings **Volgende les:** Les 16MCP servers
--- ---
@@ -34,7 +34,7 @@ Drie ingrediënten:
2. **Tools** — uitbreidingen van wat het model kan: zoeken, lezen, schrijven, rekenen, anything. 2. **Tools** — uitbreidingen van wat het model kan: zoeken, lezen, schrijven, rekenen, anything.
3. **Loop** — de runtime die LLM en tools afwisselt. Beheert berichten (context) en stop-condities. 3. **Loop** — de runtime die LLM en tools afwisselt. Beheert berichten (context) en stop-condities.
Het verschil met Les 12 zit niet in *of* je een loop hebt, maar in **hoe lang die loop draait** en **hoeveel autonomie** het model krijgt. In Les 12 deden we maximaal 5 stappen — kort en gecontroleerd. In Les 13 gaan we naar 20-50 stappen, en het model bepaalt zelf welke tools het in welke volgorde gebruikt. Het verschil met Les 12 zit niet in *of* je een loop hebt, maar in **hoe lang die loop draait** en **hoeveel autonomie** het model krijgt. In Les 12 deden we maximaal 5 stappen — kort en gecontroleerd. In Les 15 gaan we naar 20-50 stappen, en het model bepaalt zelf welke tools het in welke volgorde gebruikt.
### Voorbeelden van agent-taken ### Voorbeelden van agent-taken
@@ -385,7 +385,7 @@ Niet elke taak hoort bij een agent. Drie niveaus:
|--------|---------|-----------| |--------|---------|-----------|
| **Plain tool-call** | 1 tool nodig, 1 antwoord | "Wat is het weer in Utrecht?" | | **Plain tool-call** | 1 tool nodig, 1 antwoord | "Wat is het weer in Utrecht?" |
| **Multi-step (Les 12)** | 2-5 tools, vraag heeft 1 doel | "Hoeveel jazz acts vs rock?" | | **Multi-step (Les 12)** | 2-5 tools, vraag heeft 1 doel | "Hoeveel jazz acts vs rock?" |
| **Agent (Les 13)** | 10-50 stappen, open-ended | "Onderzoek X en schrijf rapport" | | **Agent (Les 15)** | 10-50 stappen, open-ended | "Onderzoek X en schrijf rapport" |
| **Workflow (code)** | Reproduceerbaar, audit-trail | Order intake pipeline | | **Workflow (code)** | Reproduceerbaar, audit-trail | Order intake pipeline |
### Wanneer GEEN agent ### Wanneer GEEN agent

View File

@@ -162,8 +162,8 @@ endobj
endobj endobj
20 0 obj 20 0 obj
<< <<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260521071303+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260521071303+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607084029+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607084029+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 13 Lesstof) /Trapped /False /Subject (\(unspecified\)) /Title (Les 15 Lesstof) /Trapped /False
>> >>
endobj endobj
21 0 obj 21 0 obj
@@ -174,94 +174,94 @@ endobj
endobj endobj
22 0 obj 22 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1870 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1860
>> >>
stream stream
Gatm;?$Dbt&:N_CbY-8RgR(S7K]lY:\N-/8VQI=UaU8.&AcmhjG..;6G9ekM4!E,>36/I\FD%agk)N,di/=&u-j+]MLK>QG:^6Lp:tKl!IKf3'edor9SGB;m[NgSA0X(XLs$=3&Eq$T`!u=]E`4(HhJh*cO6m.$=52W8%PS+`b/./i3M(`,<"nfC`#Q#O21PVc4gZ(EKhr"8X[!RAK>OTq`jr_EY"`6hRW/bX,lM2LF1H>:'e$i!F9eBokXcuH:YI]tGWeMJ4I(6\V>uXg%eM;l'E[+L_A2:?\_u+G?^X0Cnpo_eV&)H!Z^QK=.#OnLgeY7W.%[Ta.!Zg3H`\ZEPERm1n*GYJ&k?oi1&)?0S0=+p@CJL9_MM&]VK^1"<e*"SVrKor_FTY5VRs6")Hi#g@4$F+H6_cJO<cuEnRE-:/:9E)L2a_mJdMn)qJo7CZhQCc]oIT-t[B_L12ALg(aIQb>3$r>BT#U$)1C#'D?OXJ$h^3r"U?BgRG#`1VS'g$'6-$[.+[$b.NW!e`)U,NN8d4U=\Mj%mJ@2[71&Yi:iRJ1?_0*"j@^3@F"rW@7:47mXi1l3`pq\Y:Rt=aOqH(<)D\RdAKlBLY"$9migIKWb15Dp259S'6in%//!]!nGNAXfq[_d0hEhtO]X'p_.ma<d?+fV%a)mngEftjs30'EGRA,V!$(,:lZ-\VI3_hE5:\(shf]*2n,s18Vjl))Se@r=Sk@%McSmp>HB4nL5>m*_de'q=W#5:oaEjp3$G;'\=?WD):s?Tq1qWeEScO%AdH'h964jnCU5Sn9\lS0!:""l,V.Y[3[#pfSp6mMo](WEEIQ)k#SG+/-WoE@E6XNCoP1MPl;*26fZqkQ#C5F0=Qp2G@&nLG:R)EBtd(O!UTB6C9+RG_h=5OSNqe&RL(5DIop@]/hYAH-^T11`gfs-;^9-Pbqf<(SL/I_op>lO#VE'FBh'8/e8j,`te_`+-nPGT,li#le/DYRfq7"D(8EOUDfj`.J+'A2b!(3]PED%NH*8V]1nDJ]H8>45G6YFdc"$3/[pM/HKWk0*^mMFJ#4g!r_C%Q_uN81IrGR*f/2s7p`%$V^;#3RHA97#i+*'<&-U;hH\dI5bmp1h:tl6>ON1%UReA[CgbB[[Rn>d,6OD9Le>/'q<R^4S^Q.R6P%C_*.W^eFg8s&qku&4;IeE]1h,*!!q-G=l;C<*],=X.5</sS2h`"um,t$L:iD/MpNrl*RkKC;D^,.FK<>H&#5jCDD_?ZrVj$AE""\X,FXqO4Nc*tK[>$&_\.a6p(XHTJ;=F3Tr&m59B@>e9anlU6A[@Y%NBj&)Klb's5c4Qr%<jaoWA$ab;59R(C-0''&ed.E*5o6@K_GYhO'QiSH=W>XYPn<u>_^pWe;mA`tL8m6R4I:Q_4e-_@?8K8!M@_L7/.@6R<OIOuc;L"pW*YfO6?p^G*f##hO3cfD=?YA\)Wj'&!?Q),(F^[T"pTWO*>Q5JP[,9CaGZu\LMD6!1D-Vs_XJS>ct"*29kB^9,!7&4\6%eJ,$"@Xq<7tAi&;a-,!7>?%ccAsd9g`P8^BJ(2F"<GUR@JE9!.,D"hE)1]T3P=:9Hi]&`NYVT+CZ,C-V!Y9A6"M"&lta2nk&)-?W[TO'4k.r$6+2'K5kK2Xb1o@V5&c-jR#Y_^$6Ijdq-i1PO?0e03[LNOO"ab'LLsH)AJhX`$1P[oiX'Y2_6glm)_i.0S=D;>[r"_IHil8[s"D\<,a&2:R'g.P:%aQ>k;j_IA2TC".`1@!ADK*&OH'18b]lIfc#_[:6KbNY":3@#,--guF2rN&Kc0AuAL`?imYZL#T[CnQNtIVDb`mf=r&dUTljSq]umm*Co<&-JLo@f%c>%q@@e`3r&~>endstream Gatm;?$Dbt&:N_CbY-8RgK9^D#j>Lh\N-/8IX0\7]F^0A2Lm2`B=kp-7fie$CI5^pF)4K?GNR20m`5eb^6j2,14WGIGk$dpj"Og?F,0qi)gFHR^0?6umPum2gS]51JHWF\K5t\fi!LY0*\d)_7srV`a(N?b"!9Mjo/u/$.:Mbj@R*%A4l6;"1KXA2@)#D=k@iQmXq8GKrmj;@],)%+HA?Arrs4?0=A,Y][2hT%la\^qi8W&n?a&EI[?O[u;C[C8l;C*P)K%S0i9GW3<E2Ujb8B*WND*?7ah3'0o=n`59\UKD3t<Vj]!mTI,:d.Si($eJ70EEA>UF_%Ck2*`A%DgV]QI3+N-Knh@kL4QD@,*b=cVZ';5TH7+<[0]rF?IfiS2!e$](m%^mIiplS?/_T+f0:=9'?[@mRH$1Y0f=f&1O_[Docqg8!'P=Cb9N,K9D#IJ]^NYm.=qKkVmXpUQ:=3L5P>MT3\MS<#b@&^pCN+a<>dl;Q='\auJ"eJ[[b2"tn7EURLQO%+J+s-pV)F,A)-c['%1i@YN-XDErbIPiM3`B1FMoO5SQipCFt<%sn_k1SMo%pc!\$\fDO*/Go,J$iM\7Nn-r#^[7C+9?-/5(^M63S`Ef!D*b6^SXU<ONADU4G-XD.pU[U=";+u)HQY"4q5CBP3UG)K,-U%4*YRr$T\<-H,&:L7Esk0K[=(@\F<8Z[ehLi[iirXIog'_gb_#3jqbl@k/GsAroK0h6a$Qm/fg4VfPDB$EJ`C,7kkE"On_bK15V3Bq)FY=(A=[HOl?s&[XSpThp\fUSAeHHFpJRZE-l$2H<nDI8!V0m98I/VAoX5TA:FDtKG(2\Q'a*].U@WU*[`kr`#^Y."&<nq5@;*ZkO:CAPHc`sC5gMRI#s<2@gT-)OK+-q*[N(m'Df(K\l0Oa],LE@U%d'6?\"K9m=N4`cfb$^q-^SbLC>.71bt)."MXe=^9EB9JD[IVG7ng-:ks7o7*Ud-Lsi*G[j^&LYucdb0q),i>he.QN8,3I&5i<*_hO?bLUqUg4Ufe$[g)II_Ys<eD.3*]g?kX>0[^km.qlPlH)J[>#ZgH^)<B?^9`>&?'%"Fl(d%(//p92e1j>Y%(U>3FR3"4;E3d8h0sJ*NG05S;V@0=O)cNc6h&X7nl.V;3XCNf%;b>]Ee*Q<k'Qecrr`n56cU/"G,^E98'!NlU.P"JYC6%11@FHYmh1=NkjuADGUO24r[VJ&cD7!:Z%Gj@qn_jp@0YJD-)-.J'j^#Dl&4JP9!rH_<)%3K!O0c&cQI91.+am'q$$_F]As(5Gm:Fgone.j3nQN'dqRX7+QqCS2*N&'I2Jd7/*R^rg1;8ETN=abaFA^1)/EI[96'qS9[Ge2d$1X'=b`W5e'h^r1W1)XP>lL_sE8G!8ApOn#+_$[\0GG^4eJ8Y,93n]qH<oeE@@36@%eKMtT>bZQHF/`IR-,k&(tqk?;Ck40$j)bV.sNEj]0(J,=&FAPebX/q1/o9ii>Y+WaYn^>atT5P(a;+f;!%X"<=^,GklPDU2\1Bb*#0TcMf-Ap0=RLH(S*1JT3&\Qbj0YQf'uU'mPG:>U][*M:EZZnDuZ8u5OT\Q*;.^QmE`+iWF+p0hng:i\j)0E/Kl'Q(,gOI)fZdc2mQjH1O!f&K36]5P)bZFc9f[F6>C<$&9"Vh><5,_^"Cjte)BhuDZk`;Gl0pWNlMFrZOh5U&EKa#mE:LsO)^k+iSmVk6;L8*;#<te['Z0'_G.WKM\19u;%#+0h2,T\d#^`<S4>-C$"Qf\MU?l46L6gdiD1TYS4;j[Zmh%i4-*8B':>=='H]s_YB?FKC*Un,rEE\jR]H%e?TNbcBnTf$Z2LcXRem\!rrMW'42(~>endstream
endobj endobj
23 0 obj 23 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1565 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1565
>> >>
stream stream
Gb!;cfkq`f'RcUW\-NXF0l2U*m!Ws@"uYDK8Y[UcI\C@%M:$!++mGj!qHe1XNNFK7$3RPD%7u\;G<+iL@R0J&r+E8=pgjdc?SPq.VK6,WM-tW5^J0>V!T=>\UDQOhd4j`Ko$I>d?3E.(#t]0/1WX6%Z8@.]@jK7g$okC_;jN$$0L#j\O>NYF('2NZS7KaeqN)tmj44g!P9bXj^9]J6k2dlQX@"eu2hKusei>U\L(U+1:1KZo@IiSgmk<YoAg'mRCmk_1Z!%o9$eLoHE.3(UDN$>OQ>e!cA^tVJZF2Doq@TSPDQaY$'QFb\Gn9GKU]D545)a@@/aOF]:pg9e_Kh%om=>o,)4K!4KHX&E(InQKKG^(-N05T?FhhM82M\Oei$k?Vb!ol'lXiS=V$S6)`;Q2M(rier1<(<`0U1V14GEkuAF5o'J:=.V"8d6V0`75R^SCrC*Hik5]!\9Lc<t1lG]70RGnDS0cRJU';ucERj,PL*6F)UmUQdK*GfFt6$us09c@!de-ng7]@=J+oi?o[2-[Z`f0nSN.gB[KqKEYpPar84X+e?V0)#0P-X/Ee3i;$%jHbbMA,uFl#Kq_HaV]&gJL+#c"WDTUuK;s_pf,7489X`aoMJX_5h4gU0UH5/%8BeR,fIh+p5,o))S$ZNh*E%HL(r)s(K_CUU3t#0-LD-V=kHZ^aHm(Mp1Pugj3EChRT.T5SEM20KhSqA<['bG\Yk<9]\b17,6cg70*k>,ib>G;/5BYXf^;fue1'_c#G;-RhF&a`k,[=-j0B(a+CFG[h>efbGF[ebN7/+\Y0$dbf-I9sX!=T8+iTf\="*TO^\1nUI(*`pKBE;,^Cp4GE.%9h+;J(at1Fkha4^a<1cJ.ct;bE2Y.ksgTkP+r^:5.MW7tHN:ETp1>4#ORq(^!bkZn.KOBlY66@G@faXFK(]FGJpsb!u8XFYY`Y]-TrSjK:F*^Fc>WCN@\JoUq=KWa^^:C"V`jGkf#B?tKX5FGXoHJseH_:94Z*PfNi7`<Pal!2YA'VF#$*6PPPgarIbu,u(!a"T;Za(kS`^oDTlf-p,mUQ,k&KLps,P+]q>El_]m]X@.K\pEt(]qi[$*h=%kfWNB>s.$YT5T_GSR`V`IK,:iZaqMq=i,bO+pf"Ph)LSR-Y-h!nObE/`3NB-M&(Oe%t>6F**qSBHj(6H_NgBacc@N=e]XMqkV$W5l.iH2?@;'32GUTFpS65E:4F]1l29*.7C#R_e<5V7XY\t6mJ#<;,,R,Ifm_.I_?qcNVEX#Vf6<djX`;cMQ^3C,PA"hB^NIA9i/HoWVSR/4S'dPQ7sAQ<mtnQ1K%.ou5F4GN,>dI@%5CRdMX^A>OW;.+lH,D@b9UW_/Ie35g3KmB2Z!n,''`a?N218fXjfBVB91_KqJFemC^!9_S0N@UaDio%L'OS,MJC*=9nBe5"t[ZMKjl5oCINW-1YRQ$M1CT7(*^VMT%`VW]oZ/Q6o]NWP_rl"Ds\jc'hnjX^`e.6NX]Y!]=#-/J:@=KDW9&L67q7g<;Z'+epX/9/H#@'ugpX[f'DXhIY2GJ&LJV+5[rr@,3_[Z~>endstream Gb!;cfkq`f'RcUW\-NXF0l2U*m!Ws@"uYDK8Y[UcI\C@%M:$!++mGj!qHe1XNNFK7$3RPD%7u\;G<+iL@R0J&r+E8=pgjdc?SPq.VK6,WM-tW5^J0>V!T=>\UDQOhd4j`Ko$I>d?3E.(#t]0/1WX6%Z8@.]@jK7g$okC_;jN$$0L#j\O>NYF('2NZS7KaeqN)tmj44g!P9bXj^9]J6k2dlQX@"eu2hKusei>U\L(U+1:1KZo@IiSgmk<YoAg'mRCmk_1Z!%o9$eLoHE.3(UDN$>OQ>e!cA^tVJZF2Doq@TSPDQaY$'QFb\Gn9GKU]D555)a@@/aOF]:pg9e_Kh%om=>o,)4K!4KHX&E(InQKKG^(-N05T?FhhM82M\Oei$k?Vb!ol'lXiS=V$S6)`;Q2M(rier1<(<`0U1V14GEkuAF5o'J:=.V"8d6V0`75R^SCrC*Hik5]!\9Lc<t1lG]70RGnDS0cRJU';ucERj,PL*6F)UmUQdK*GfFt6$us09c@!de-ng7]@=J+oi?o[2-[Z`f0nSN.gB[KqKEYpPar84X+e?V0)#0P-X/Ee3i;$%jHbbMA,uFl#Kq_HaV]&gJL+#c"WDTUuK;s_pf,7489X`aoMJX_5h4gU0UH5/%8BeR,fIh+p5,o))S$ZNh*E%HL(r)s(K_CUU3t#0-LD-V=kHZ^aHm(Mp1Pugj3EChRT.T5SEM20KhSqA<['bG\Yk<9]\b17,6cg70*k>,ib>G;/5BYXf^;fue1'_c#G;-RhF&a`k,[=-j0B(a+CFG[h>efbGF[ebN7/+\Y0$dbf-I9sX!=T8+iTf\="*TO^\1nUI(*`pKBE;,^Cp4GE.%9h+;J(at1Fkha4^a<1cJ.ct;bE2Y.ksgTkP+r^:5.MW7tHN:ETp1>4#ORq(^!bkZn.KOBlY66@G@faXFK(]FGJpsb!u8XFYY`Y]-TrSjK:F*^Fc>WCN@\JoUq=KWa^^:C"V`jGkf#B?tKX5FGXoHJseH_:94Z*PfNi7`<Pal!2YA'VF#$*6PPPgarIbu,u(!a"T;Za(kS`^oDTlf-p,mUQ,k&KLps,P+]q>El_]m]X@.K\pEt(]qi[$*h=%kfWNB>s.$YT5T_GSR`V`IK,:iZaqMq=i,bO+pf"Ph)LSR-Y-h!nObE/`3NB-M&(Oe%t>6F**qSBHj(6H_NgBacc@N=e]XMqkV$W5l.iH2?@;'32GUTFpS65E:4F]1l29*.7C#R_e<5V7XY\t6mJ#<;,,R,Ifm_.I_?qcNVEX#Vf6<djX`;cMQ^3C,PA"hB^NIA9i/HoWVSR/4S'dPQ7sAQ<mtnQ1K%.ou5F4GN,>dI@%5CRdMX^A>OW;.+lH,D@b9UW_/Ie35g3KmB2Z!n,''`a?N218fXjfBVB91_KqJFemC^!9_S0N@UaDio%L'OS,MJC*=9nBe5"t[ZMKjl5oCINW-1YRQ$M1CT7(*^VMT%`VW]oZ/Q6o]NWP_rl"Ds\jc'hnjX^`e.6NX]Y!]=#-/J:@=KDW9&L67q7g<;Z'+epX/9/H#@'ugpX[f'DXhIY2GJ&LJV+5[rrA0Z_[l~>endstream
endobj endobj
24 0 obj 24 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1637 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1637
>> >>
stream stream
GauHK997gc&AII3bU%cuKc*'C.Ye4B*b^(@RNQKgnO4sJD'cLK9!jfSf6=.uV;8P'RiZ#X(.iM[H17:HaaiB;FoU,)i3sF`H-LkZ=Bu#m7)J4%?EKs:,JmrnV#hhL'aY,.#lfHf'31]7&goeM@&PDA99=l?@hJk`jg8V<)@P/X,6gQV<#Z.^0GU)PNk?JhkGVPs(!"F5q8#8TbtCSi=GLM^56SkACiCks$:uXE>/=qYMmn1bHiq.8)r"uZ\h;qpf@Xp*@*Q6:kAQ[4gU:ddc/GK^g9TT(Cum9Wobgek]ri6ePaj-YmjA%1D1N#/8*fI+*qimN.B4*#%-KdnF9IKs@&TrW#XL>N`Ou;5"9ujO)9Wk?&QbcHL9WMnRSYKYClFilQ6]/EHp4:E3E['9Ye^`X*\%RE3%n,?YQa@U"9ZYp$k432A]4'iRpOMC7"^dVU6?<<G(Pj/E,]=LGnt7lN`5r30E%*dSi[s<@q#Xgba+2b_@>N,(ubmt9XeP[[P!7+@D;]1iPusf6MOi6cNogZDf=RK[#f0e7a&*?pJ=hN>F-,e6YqPl)VEs]&Gk9YP%1H'N\5*]T=*OW`B2g>iG=^h_EPZ,l(fr.BG]6[H&SI.R&],u1U(@1ju223O1Rqth5>N8.jJc,(S$4H/Vj^u<6n(Y3%'X$(diUh.9Qlj`Y'J\&hnnn,Z?WN=:dq5C?g'7Bk(bYklaI'?(QOXnpsQE%e>fB;tD:7"=2eQcr9R08AZ67;H$"dXLa[$HrrO]#B-6+Xtc\>,#E&aH3lj;i.F*2)V?*g]\$?=@C\[a[8<]6".,@(g^f0k'hT[PHT4d5#c*a_>1ZL:&C*FH:lI])`pa#&qkWNcE;#c*elDPER3,T2$6A<7'^j:Hd1K2hi[nV\^afqO7=(AuA[u-Sl\fBsEg&hMG2A9-'o@W&".UM'lC6$.c?:n/JK8\;lbu&)&D`YV_bHgU5(?^BglEuhd=Us%=q^U4gJ)U"A(sB8H6'0.]MGT42YWtejLX77##n%L`R\X.]$PlZg1m&+<F0&k5<tIlfqZIghA4ZCCA07:K@eT>(\U\u;1aR\nAEc]/)IZ$^>^.@X@F4VoT?<%f;#Q]95I>VC%lpIZ(R#1e&a"V&7IEjm.P_IIX]cF2:ME'O]Y3i_egpf\dR0.9X(kmi<^cP#G`>E(KJk#4#N4#MuLZ!X)hesDAosg[W,SVq)Ifc1j(AiO]EV[c5LF_R%G1S;:c=JA)oQglS?M&3?=0]iq&9TSa?>EIAkqjG.li+7\\a_S^X4oqP`]b?!mF!k<G?bQlEK;:;1+PCfB*%4VN[bY3^2$3o&JjqqV4.hZ&)g.r4_ldf$nZYr%to\2uafYt<E(K0sDn?O<ooAqrmG]#"N?k*QXHbtl^FrRq$6jfH0Y]!?QG#FAb^(2k+ZK<-WtraLIW4$7&lr?6e[M&j6R.,d8Z>E4N;Y(CKT8F;*t0>S$XS3Rd\d'9.8/3_2W&Y!kVTcPZ#LVhYbR*bl^cHZj,nEDZ,d3DlWGC75:>b\cl$/W<'(M^IjdE[?k\g;OrMq3B\\@BQF'EOT8`;nIDi9]^^mhs_+m[\n3nht(Wb0JXZV\n>UCl>UOCi,<DS&SJ\Q;&V81l!RZRXX_6Um@Mo#t4dp$'TE`~>endstream GauHK997gc&AII3bU%cuKc*'C.Ye4B*b^(@RNQKgnO4sJD'cLK9!jfSf6=.uV;8P'RiZ#X(.iM[H17:HaaiB;FoU,)i3sF`H-LkZ=Bu#m7)J4%?EKs:,JmrnV#hhL'aY,.#lfHf'31]7&goeM@&PDA99=l?@hJk`jg8V<)@P/X,6gQV<#Z.^0GU)PNk?JhkGVPs(!"F5q8#8TbtCSi=GLM^56SkACiCks$:uXE>/=qYMmn1bHiq.8)r"uZ\h;qpf@Xp*@*Q6:kAQ[4gU:ddc/GK^g9TT(Cum9Wobgek]ri6ePaj-YmjA%1D1O.O8*fI+*qimN.B4*#%-KdnF9IKs@&TrW#XL>N`Ou;5"9ujO)9Wk?&QbcHL9WMnRSYKYClFilQ6]/EHp4:E3E['9Ye^`X*\%RE3%n,?YQa@U"9ZYp$k432A]4'iRpOMC7"^dVU6?<<G(Pj/E,]=LGnt7lN`5r30E%*dSi[s<@q#Xgba+2b_@>N,(ubmt9XeP[[P!7+@D;]1iPusf6MOi6cNogZDf=RK[#f0e7a&*?pJ=hN>F-,e6YqPl)VEs]&Gk9YP%1H'N\5*]T=*OW`B2g>iG=^h_EPZ,l(fr.BG]6[H&SI.R&],u1U(@1ju223O1Rqth5>N8.jJc,(S$4H/Vj^u<6n(Y3%'X$(diUh.9Qlj`Y'J\&hnnn,Z?WN=:dq5C?g'7Bk(bYklaI'?(QOXnpsQE%e>fB;tD:7"=2eQcr9R08AZ67;H$"dXLa[$HrrO]#B-6+Xtc\>,#E&aH3lj;i.F*2)V?*g]\$?=@C\[a[8<]6".,@(g^f0k'hT[PHT4d5#c*a_>1ZL:&C*FH:lI])`pa#&qkWNcE;#c*elDPER3,T2$6A<7'^j:Hd1K2hi[nV\^afqO7=(AuA[u-Sl\fBsEg&hMG2A9-'o@W&".UM'lC6$.c?:n/JK8\;lbu&)&D`YV_bHgU5(?^BglEuhd=Us%=q^U4gJ)U"A(sB8H6'0.]MGT42YWtejLX77##n%L`R\X.]$PlZg1m&+<F0&k5<tIlfqZIghA4ZCCA07:K@eT>(\U\u;1aR\nAEc]/)IZ$^>^.@X@F4VoT?<%f;#Q]95I>VC%lpIZ(R#1e&a"V&7IEjm.P_IIX]cF2:ME'O]Y3i_egpf\dR0.9X(kmi<^cP#G`>E(KJk#4#N4#MuLZ!X)hesDAosg[W,SVq)Ifc1j(AiO]EV[c5LF_R%G1S;:c=JA)oQglS?M&3?=0]iq&9TSa?>EIAkqjG.li+7\\a_S^X4oqP`]b?!mF!k<G?bQlEK;:;1+PCfB*%4VN[bY3^2$3o&JjqqV4.hZ&)g.r4_ldf$nZYr%to\2uafYt<E(K0sDn?O<ooAqrmG]#"N?k*QXHbtl^FrRq$6jfH0Y]!?QG#FAb^(2k+ZK<-WtraLIW4$7&lr?6e[M&j6R.,d8Z>E4N;Y(CKT8F;*t0>S$XS3Rd\d'9.8/3_2W&Y!kVTcPZ#LVhYbR*bl^cHZj,nEDZ,d3DlWGC75:>b\cl$/W<'(M^IjdE[?k\g;OrMq3B\\@BQF'EOT8`;nIDi9]^^mhs_+m[\n3nht(Wb0JXZV\n>UCl>UOCi,<DS&SJ\Q;&V81l!RZRXX_6Um@Mo#t4dp,lMd=~>endstream
endobj endobj
25 0 obj 25 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1844 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1844
>> >>
stream stream
Gau`S968iG&AIa;m.eq)1,]Pk+94IOKA.Xb[7Qk+8p\m=VBC^%7EQleVoe#7G6'm=b@]2eUlm9k+RncF^GQ+NDs"do%DXVQ3.9)&EL8>/#pNdN&t[@\/!"YkPmDp8Ree04')M;*`QH@HO@4gcA>#nG=pYb/&ZnD0*7$(Q'GLb;O$*\88ZK,tU0/VH]Q;pWP&h<h80DJgqg>02[d&Q72VOjno`r<P#A]:`:jkVX$WI,4%8?croDKA0j==0KlT@u%>ud8:?,<%P"m=?uo<M'4at2JM\Me09h3b9i"LAUmHYd7&n:fdG5kXj@?^_Up&,9((q6Ga'*NbJU!\qK9K0F.',]=As<"n/e$=iV!_`](^UO=;>KT4"S;I=T_WQ,aI<9V.:f?Gp6R$)j,'"!!pY?SmPVAZ^:h,9(+_>lW5T@J9L"knYI'l:'PO5X$g5GT;2mA.ZAmBoLTVGjc\gmKn$4SI?tb:3=k6\"sfk)N)@8T^.;K9.f[\7XM$L:Fr-ZjW9dL^RY!RrA<:n>4#5$,;C:1P1=J[sRm+bd3X]^-,h30#:>Q79$F^^r!mpK]o_CMC>V?1R9"YaY#TVL-kFVa^M>U?2[[%+t?]EMA8g^)<AD`_(n'D_St!]iS"uWK"6bM:`-Nl&&r@KU71T)UeB@-$;`SnD._p/70!?bh4t0PJ2%pZ?6jN$$RJQCZ92pQG:mq,p[*.MHfZSbcea9iMng\aPg#BpUWd'<^NE\hEkmDsGjY9c-^:WX:UcX96;r68?g8Po,ZISt>g_r1f^%9/-;L5=P1/A.-S"cUaVp[Z_fVA/%D!:-l>LK-.'3`8Bb*[[=gf`#DZfBLD9hn,oTof@_M?M"/3QrG+UM",<gqSb5bGWP9fCb=W8J'M`UF]o]KO9I0\]t+>ujZmp^51ghnW*R*'H=;-T_?r^d3diIo!lC%cMKC(kn'gjbAJ6?rqm(Znu:s`HbKb80=[bMKiEni6RLQRsicJP:n/T"aWtNg-#G*HstGZ36J]WMiuQ>[Q5#rdI@JHp:F-md9r2gUE_]'nsb2'X-]rh<n!82-DIRcUTb.gZD+I92FcdG](X-K?9##r7#_u'63^p9?(8=C3WJC^/e&)M6)SUcDuX"1ltdO=q8B3&7jC9mO6P=erp0L08<gBrr'4Z=I5&f!,XQ1hpS5AoD0VhF.(L(7JmYCjL,Bn65S5N;2.gb]3O]_mklNqXnmPZk.G?g!k1E.?7nmeeKZeae;jt5=Mm8A#J4O&3Dfgg('BO;<+*Iq1`al!Dc67IJ8=HaEPM.[c_FBQk!+2Y%Yf)YL2%X?L9qE/ZOU*k[pHdPm-u3XPN`$!4/+etG`b8*)o[#MlWtG3q):,/-JF-WLS%Q4bR.Q]kU"Ff@PXD_*4`9"cb>F4Bj)99NK<H4gn"7qodBpo8,X%POV=%=r-`)@P>h$m,$eTJ_5K*5uOpma"ZS>$GYtZt9Dj,*&QEG$NYG5p=M5k)ti+@rR:@&7*YA-U3oZ,YBb5+m1?^TiYfHhUmUSp.gq8-P5-O--[4rpC?gico?kHCd27D>gA0KR2#W(=@^]t2pcSLGZOaq&U:^[fK8P-&Otk.;fqJH)!E'ebd$@JA9i<3q!u>]\`+li2L-\K<MLDUMm'YYEB_43G=KDm]+aoq,7_Kptuf5.E5=mIK;d,tF"GUppAR\dU=#>Qo.-?&#fLCF-UW1(9UGSHdo-SM%ODDS#18BFdRZ=[./Bggb,qLhA'h6trt'7fM*$jF^tbh'VrP\7(n6#A!aL*,H(g>QaLWW_VDFc^Olu0F&\cFGHTGAiKm-T^Pd.aN]F<G!uTeiTK[,Y=r(CFBp/19t<]lkam4P2]d5D!'+(NJH~>endstream Gau`S968iG&AIa;m.eq)1,]Pk+94IOKA.Xb[7Qk+8p\m=VBC^%7EQleVoe#7G6'm=b@]2eUlm9k+RncF^GQ+NDs"do%DXVQ3.9)&EL8>/#pNdN&t[@\/!"YkPmDp8Ree04')M;*`QH@HO@4gcA>#nG=pYb/&ZnD0*7$(Q'GLb;O$*\88ZK,tU0/VH]Q;pWP&h<h80DJgqg>02[d&Q72VOjno`r<P#A]:`:jkVX$WI,4%8?croDKA0j==0KlT@u%>ud8:?,<%P"m=?uo<M'4at2JM\Me09h3b9i"LAUmHYd7&n:fdG5kXj@?^_U0!;KJnq6Ga'*NbJU!\qK9K0F.',]=As<"n/e$=iV!_`](^UO=;>KT4"S;I=T_WQ,aI<9V.:f?Gp6R$)j,'"!!pY?SmPVAZ^:h,9(+_>lW5T@J9L"knYI'l:'PO5X$g5GT;2mA.ZAmBoLTVGjc\gmKn$4SI?tb:3=k6\"sfk)N)@8T^.;K9.f[\7XM$L:Fr-ZjW9dL^RY!RrA<:n>4#5$,;C:1P1=J[sRm+bd3X]^-,h30#:>Q79$F^^r!mpK]o_CMC>V?1R9"YaY#TVL-kFVa^M>U?2[[%+t?]EMA8g^)<AD`_(n'D_St!]iS"uWK"6bM:`-Nl&&r@KU71T)UeB@-$;`SnD._p/70!?bh4t0PJ2%pZ?6jN$$RJQCZ92pQG:mq,p[*.MHfZSbcea9iMng\aPg#BpUWd'<^NE\hEkmDsGjY9c-^:WX:UcX96;r68?g8Po,ZISt>g_r1f^%9/-;L5=P1/A.-S"cUaVp[Z_fVA/%D!:-l>LK-.'3`8Bb*[[=gf`#DZfBLD9hn,oTof@_M?M"/3QrG+UM",<gqSb5bGWP9fCb=W8J'M`UF]o]KO9I0\]t+>ujZmp^51ghnW*R*'H=;-T_?r^d3diIo!lC%cMKC(kn'gjbAJ6?rqm(Znu:s`HbKb80=[bMKiEni6RLQRsicJP:n/T"aWtNg-#G*HstGZ36J]WMiuQ>[Q5#rdI@JHp:F-md9r2gUE_]'nsb2'X-]rh<n!82-DIRcUTb.gZD+I92FcdG](X-K?9##r7#_u'63^p9?(8=C3WJC^/e&)M6)SUcDuX"1ltdO=q8B3&7jC9mO6P=erp0L08<gBrr'4Z=I5&f!,XQ1hpS5AoD0VhF.(L(7JmYCjL,Bn65S5N;2.gb]3O]_mklNqXnmPZk.G?g!k1E.?7nmeeKZeae;jt5=Mm8A#J4O&3Dfgg('BO;<+*Iq1`al!Dc67IJ8=HaEPM.[c_FBQk!+2Y%Yf)YL2%X?L9qE/ZOU*k[pHdPm-u3XPN`$!4/+etG`b8*)o[#MlWtG3q):,/-JF-WLS%Q4bR.Q]kU"Ff@PXD_*4`9"cb>F4Bj)99NK<H4gn"7qodBpo8,X%POV=%=r-`)@P>h$m,$eTJ_5K*5uOpma"ZS>$GYtZt9Dj,*&QEG$NYG5p=M5k)ti+@rR:@&7*YA-U3oZ,YBb5+m1?^TiYfHhUmUSp.gq8-P5-O--[4rpC?gico?kHCd27D>gA0KR2#W(=@^]t2pcSLGZOaq&U:^[fK8P-&Otk.;fqJH)!E'ebd$@JA9i<3q!u>]\`+li2L-\K<MLDUMm'YYEB_43G=KDm]+aoq,7_Kptuf5.E5=mIK;d,tF"GUppAR\dU=#>Qo.-?&#fLCF-UW1(9UGSHdo-SM%ODDS#18BFdRZ=[./Bggb,qLhA'h6trt'7fM*$jF^tbh'VrP\7(n6#A!aL*,H(g>QaLWW_VDFc^Olu0F&\cFGHTGAiKm-T^Pd.aN]F<G!uTeiTK[,Y=r(CFBp/19t<]lkam4P2]d5D!*[*-K)~>endstream
endobj endobj
26 0 obj 26 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1640 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1640
>> >>
stream stream
Gb"/&gQ(#H&:N/3$j$QOJqV=:8?+osdV[D8#e!In2F-Rlcna3R<u4Ai2f6=D6X;*cf?'lqd_<XX/;YR3%QS0^L(#JZ=neO(!8f?dlo>0f@<i/Q&dc`_n8&uUN<iTjb8?$h<$WGS,5_]2D,`j'Le;p/^edaaQ66V]`ZtaJNmjG2W#],,MAQo,W&>9E@BhTQep'IpkP/^^@\o6Wis1%Qdn>K8fHJN=LLAbe%?h-t65%FM*Q,15`PqSd]S%*Oehu]pWcImFX^/MR@E#d3V_=Z)D47P?h$1T9f.O9#Ke(o5Yl"ThO8Q=rpel,F,J@Ub=0;QN!"Ve.?1tKefPOYmLhA]NED8qG`<W-+)Bo=7(lJnWGU.6:N0$X]-mB^rr\V"D&_D\6BkD5;%)!op>4Hl24SD@Ad"Wpl0]o&q;hFt2(]q-RI@ic4Ce0]HGb.D6n$;1)%6ua4-&q-,,0,U,EYodn0q3G,m@m?SrnE5-m((_C-XK6c+HK[H(a[rk/q>+J0X9k/->.<AXC(+Z`u2VVn.WZWj*O5!"Ef'Es&3.hT;5JtakFrrGDSR&)FX(<%Z[ULiE/%BBr:?3$k!d?rk(:VmE9+L\6(o\j]L/"Zf4f3[:O,pBNi%*]CLd0BkC]8g@XrH'ISe6*0.^+4*dP$&Df'.&P9*O0*lE?,]Si(E,#`7Ta6o_cWeWG-]LH^i#Tm`KeNouCIAmco'rEjlU:T%(SWgbCSG5GoiPOLAn"7X(;l5jkB)#JIKG[-*V>Tm&s@4R<B,;ATLnM-ls0?$*5sD)(b@X."+ME*GL2On3Y`s*rYQsMgX,t\]lDCsBD/\kHd?p+9mt*cf%/D[o*2@'Q=nsCb;RVRG%F%f'JJhsDrL"l\fBst]*/lf1T0r_<4g++A9PGfMk+^NkhkP]cW?#?cRs%m<Y%EHKLFL4A\P,<F/\j^/GC'0m='0SWc%:]#gK?aE"N0CYD):*(B1Hp[0>_c=M)8Sq8Rte#%W_f\ui"`LC$B,KgdZO_KAl/n6f0TfXVdS\bZYPBTlZ!p5`Wl9=W,!'cqaUZ=OZp\:9r]B?dKWg-<p+XP(//C,+Fc<T:*AAGZs\A3s`W^M*POB`(8K]N'IUm+DR'=cp,\;>O7R)A0jX2S-YH=<9eEf=Ad[2f0__Zb8#MEE%JsV"t7hOQ-M1]s7&Co,?Aej*2G/3XZSlK>Nnhnlnj38knMoT&Nj7j9).IX$7#d*\#&qN48&uU&V#2cP1Qljq3j*I91<(blq+6BHG>"l[H`?4R=##a'`HP">BU,T6:T#7Ohq0&%ds#cUm#?46Hb4P"pb-@s96T)bbA/&KKY=jgGPhIr:mYP7`?Vl9o=U/(SgFmUD1\EeT6V\%#_Z9QaM$0H5,$/Qr[9Vg7]YC$X@L%?"j&Nj*uBK>q6/mD7AC#$-YhC>)u_O%1'>g8o8DTfr(/IJl>;&90h]fVcDuc`:NGPt6%j?.\eR]1n)sgrrVArdPSZRV8R-3O^3oF'Ej8eK.u%Ti5>1>.cMBMr7@(Khc#tHIdR^<AGmnBQM(kIQP5c*<unpDS^T_$>u3'O(%sZ^YuW[F;]B+R!1ERecYE$Wo1*NH/IrH&K&"!IFJ*GrF,W71&l](@DVor$psmQ<&igq(?!Aqo6s22h:t"VoFG?\m6:~>endstream Gb"/&gQ(#H&:N/3$j$QOJqV=:8?+osdV[D8#e!In2F-Rlcna3R<u4Ai2f6=D6X;*cf?'lqd_<XX/;YR3%QS0^L(#JZ=neO(!8f?dlo>0f@<i/Q&dc`_n8&uUN<iTjb8?$h<$WGS,5_]2D,`j'Le;p/^edaaQ66V]`ZtaJNmjG2W#],,MAQo,W&>9E@BhTQep'IpkP/^^@\o6Wis1%Qdn>K8fHJN=LLAbe%?h-t65%FM*Q,15`PqSd]S%*Oehu]pWcImFX^/MR@E#d3V_=Z)D47P?h$1T9f.O9#Ke(o5Yl"ThO8Q=rpel,F,J@Ub=0;Q>"!3o>]'NjTYhQ7d&C5<%j-kunM@W*42+._M0btj9n4;KS(a5/D:ddDmrForg,H_?Ld`gFT)1"lk[,U\CGjLV`Taaeb@E_)mV?HcB0a)=/qEBJGfT7;nnN;jLhIY/1)LuLG8fH*67?/18j=iPe@lEp8g-qR0r3m48flO?f::uIO5p!@o0hSra>Q@,r@:I]>9[;Wa=MN'=O#)16i?s<9`qP?u$0q3is/3<Z5=qnrPI6fomLk(+1l1)W*#r&!_m+)cdnJZF(`"O\rHWN6gR$0"ENsiBbH\:$B#UGDCWk;kd'Ru2GNBF?e',JO[HZep-r(KJ3?3C6G4J$'+M;';,*H.(?4bi]8E(V/i7&GL6P1fIT!t)l:E"pF_)mbK$=OcteqbePjPrU]f89,)019YNf0mLnlES#"bf#N:/;>;]cft(tque:93p8$c,p_H.X)R^b5a0j8ft$Z(3/U^00j&C<#6$f2n";&gF=Km2r@pq$\"WgBHfLcqcKo7`p7Ca4S,/4PXf\_AjpbS-/C1adQYi1.mE10V.:1^qhSRmbF?.bqG7,fWAkq`GWHO26aR!eU(H^A&dD+"ET!&n]SmC!cXWDoo$&PtHb'[(Vk>:\G=RJ'?gAU7/<ScND&XlXLi?AEe?OPJ4/GrdjC(&=PY]bA/o8NjU%*0@UF^%pK%MOZ6$]A?(L$Pb=iPDC3Y]DD/F7g:+cmH4um2s6cQ>i+!.QmJ3A]l?jEW7lEcC.g7[==d5=gN1=eRGoQWl/$`an?tCaFqK8IaRq'dJ/OuH)pr4fs;(-ZQa2BU\(N.2'R_:D019pYWRTiY&fA@DV@FGB7!u$j/<"q8G*?Y+iasAHXl"fju'SSa71p>F;?.a#DF[ZjgUaFPa]th4N4RMa9P,p=+;&R4]7/m(iRls6iTqDSgj$abp+X3ql\`0RL?,Jd6*^$f):>]Gh=t%Nkrg)$"!7854',%N)[l?*d/d%Ss-n]G0UEF-(PH9a6lR22jig=,<3?Zb&%qYs4fe<-R/[7e;;Q3=01Xkh8L?Cj9c@6DK3:=RHh*'@5d='>I5FQ:\3B=dakQ!)]$a,*+Aeb#E?E=gOlUe%BL=Ze[3#I*fi'[Zru@f6[S)=qtb^V+Q@XCYto_uSl`ll/!9*^]<:O.GFK/q\='*ar;S+>1so"9Ec+=gkI0gPW]dk(6`7^B[!5pb(VuY/$_>)soW8)FWanefd,p'_rH<MQ3Xudih1G6I'\k<,+2dk>J&?-@kq_l60^ia-XU!c'<P`+'o"N_n,;=#!qkj0nqSW)LA,cG0_LhZm)2.e,WGoYl/\m\lkP^FD]")m6kT>?)m6L~>endstream
endobj endobj
27 0 obj 27 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 944 /Filter [ /ASCII85Decode /FlateDecode ] /Length 942
>> >>
stream stream
GasIe?#S1G'Re<2\CskCMJ##256fk!`[3$,^fZ*lMGTYND4jHmibkEgs.,X?-7tn!WFG&5pY=eMO3N47_l@pF!5&Ztk_]E$&5I`^+s=OLbL$.N&MCU,!>&U:hf'^X07T'Z]bCN>Uu@&ZVM]%55\NWo2B"R;.E*"^(++eX"/7&@=ocr$OBVXImh<f'Q51a-deoZnnC&[H6Y+(EC"@b:_\K9+</^#L6<Tr_#SZF8IJ;tEhIKPh7'eG6_ag'JB]`^D\UsG=kN>8G(XA'"[=,:NCm!B"oca5CiF,l)"()=/!i3;bIq&jo52]8ICf80b+&1d;"EFV-(,]A"8_t!fKMN#slmVB0UWc7CX;u*89>N_iR.(+9"qj][<K#\Qk+9r,9^G)_7jOd[Wm-?+YDKnM`f)5m4KkF/]qc>i]'O;Dc7,q5[1(ap6?OAkNtI)6?%dB/[&XpeZm.BIO-XRFhsI;17c)@iS5hb\!KO=10U79q7cTVj^6ql//qGHC!eV30[`-?4b8i^]S]_cb=ZVRKS>?;nd3Ekd_$VN7QGC<b5'ZUI41)4i<:)5FGH;-2mRbsJUF[u:3%S(F$$(9tpNLeF8$`6mIPaOkfDu\]#Q)></6DW*iaNOqf,B8<8;U5^[Z;-S`$i/fl@(ab>'KcmZ?C')a4p0tFMAV-9jTP=7I%eI'B%hP'X/MLiT(]Ep<[9+:dlm<4b0pM5AXL1;'D(WNgGkKp@]WVJ1qjs"ppA`YtS!%RKq-s=W&I-!nBCX/p!e5=B@OF"$5cZJF5$uI.Z4J03Fm^7rpdO5+ZH&=eAp-bgZ7Q:*H:f.&D8EU`i'<bq"b'T#H7)ANdK6aW_kU=1U^lm:0_#Rk.d6:[t="#4AYQqaC7MlXj'qk6JUt38Pb=/`*;][CGuoZfs2l.3!Ys/Q6k!%"!HRK5JAOh#k>3.s89>EpJ;N#P)c+NW~>endstream GasIe?$"FZ'Re<2\C2h(\D?!-B=7-Vg5_`gW3oJE`,THm+:8E%9<6P#^O,Q<!-J8YP2+`;mb)YVQ3"rXX8_,s^oIa$Xr&i&d0Q*^!hpXDN.RZ&iJMCoJV8c4Q34C#q13o5U`^CLQ<OQJC1=OM@2L`=)W98G2:IXK(``ehLfRIo!Q6[kN;BG:,`6X_/VmBKrnZK$1F51W<5T2[eis;T's-(fM])phRFDkD)0F`LqfE9cZEYq>8X<*0UX*4.n^-H(_tiuso:eb_mtU>c4h,2aT=NHq+o2\r@6&**?O0CPdbDdVE<S$&GU\"uWaXcq`^r2k[=NCWR]_/TDhq!t'$FF6?3GpYAeb[(?>JLm_#dT'E/A]FZTr20Mqus]JM=HI>aJVa'VU-Dc&,Z+M1`7VX<AuSYFnp&;MmE1FLMJ;Ph1gs#&OO;edp5[&WN@I$=/;3orL-GCGJh9BXp&"leSX\j'WL!aXY&J!043KYZ69p7[&rDhe]8H=2;0edNXCn[U_;BEXtrbkHjtQQ4=S#A8)PubfH@HY_5lFc/;uk*5)&r**QGj.Q^;U*NLI+4m@9;S>CoEO/!%A5n8tDrltuDGgaLb%u(oCf7RQ%i'+Z.jUrY_;N)74>!m6N.8e74p6"?h=KOJQh(OLmk:_>(c4/V!G[$c+rqG2Va=HDN8A3o+!do:U"YBOV3&u\j4g^S'<7?_*#@OCG&!rSK<(J9Y_aWqgSNTMC&uMI<O8u6oM]&Nqo>#]t<n>?d5W-lDchq/heW\;(JG-T<TY!_H&2Uf<$P)Cgd2_&5&Du]U=e@djaOA]-:-m<HPgV]3aq>kVi>'@QcXNkF3KNPc=\,8RD(<KR4]VTpag1a<(f*1LE;,;F,Wb#A1n1M8n*P#OG^bmTGgh8bir&DdV8r)%2#&8!V#IshGJ_LTmC[l'"229Hl>.D[)aNltrHt<#~>endstream
endobj endobj
28 0 obj 28 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1615 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1615
>> >>
stream stream
Gau`SD0+/q&H8h>Z/Z?g@%>Erl.uPs%cq7oLES7ZHti@p8/GK!QAhW80HL.>=)TJ>A>1dBJF1;+lLqdEgO5YT0qe;RmJhD=nB2/6Shjao<p.7$&[6QfcW7m&J8iK8O?c-"_h\DO_WD$`3ljT:U*:X50N8^\"UN#%0p)KsITeN:V1\Ad!<]&2eOBNn9IcgOndgT:*2aQ?.MX!#p[OXu]SNLM3Xi@l+;g,HI8V+D'SJ6@-*4Ooo]l)9$i%,3].2YO70\7mV2I8iS8k^jnVcGJ<L$Um9Ale]FBPm']"G`bX1r(cYF00X0*EX8_qW4]kpg'ai)`npk8ipXG+Ib2oE==f>gi^EnNKcD%1,D%YnkqDGS&lOQr#3)?lO&V\t@iF"^D^5KpgT'ksl&s[,P#B*6,pJ\)@j0(i,eW.Dg(e"HOS/DN#*60Z4gdn2h!phIY_Al@Gn+,nB,U7>;UBaPPUJ1!)Nf2F6(rc+>M)an)BRg?)DRo^+@^)5Dj(`^=-i)]EGEP0$:$#j[fPn9]bj>5X3GYOS*B?kN,"*r`<a4'T9T[G/NgD.9Qj",MlJ0!Y@uY(Wg`]=HKh>5?`_fEg;G^Z4jfS[%91m5Wl(H1\WCSAu2q/:2<q&!3RshO^=Q#+'aWmIZL)ett<Uh].$RaD4=1kB<==7poOH/mCZ%A>tm!`P/cO*l-WM9M[Q8)S70h,AZnAXX][$]nEO`8XO3af.QugU$*-]F`+7-oHml,[_=0Gr3Se"knmJRaV`!;Tdom,Nbg;h:rWe0b..t7et&O\>8@K3)op@eAPWmfW1I2:0I@:BNG1\;;QPTC2Ir0*+Um:&Rr4=K^fq@b]P)PeNLAS!,8_HaC8baa*9\5TmltD?rk+D/+[g/NkZ(<78CT7IP8n#=3$c@hY\d1-*W:>m\p=@-pkD3h!"@]9^J7O3F-.g6]!K^*U"Vn<M&lslIeW,:qqdU]%Z)7)H/_#uA-RcGMb9`N9Jm7b8`ns:.+>TiDU-$p8XPZ.<!0n$"!#=Iir8$0QF492AX=pKO_`Q97j6G:1*-"RZb,_r&^7=7[UCQfd]SM*FNCG/c:LGm#\/,Je/.B4q`kEi?LK@$Br5C8CS1Wd]S.U\eAaT)\5"^5W_k8<rsJkabohZ_d37Zt`2IB/MLZpgRhJE_s5h'j7JcJ]+EN]!E5rrOlF-Qa[$C6mDk5$^%[X3:kLD?+c+P^U%p-r1iFtqX2-%hu.A,#1X(<RR5s>?gC"1R<Gd[/Z3eGb!Y4&HXHVD"S/baA1n&@:rpAs#H4J!URE:=,mgpuH28`oSd]g4HL#X<riaMgG+\sBr=$_,b;ZIl#D8Y"Il`#VoJT"Fh9:\ouPiZ.I[b;Z\H#j$PI-]bV^`bjD^.+[p6RanA0q78^&T%iN7B,N$B4r<E):JQWT"^Hl^UC<acKp7dr9I"5qT^aEd=PBOoE%rDF"q)HfkW%2g50?QCl<//aOHOs;o[f?*kok`OgcO/r-fgc`Lq"T\rc.Da3*XCl`Ok5BX$_&rmc-`>\n%Ci#J9pC'k\cso2E-FQ@ng%B+o[DG)LS%7o0]YYO&*4m<1p$0:&h5MVR#sS\IaU)G]okE*G&CJkr93;gho;l#qu*FJ(r3r!.]!/,]~>endstream Gau`SD0+/q&H8h>Z/Z?g@%>Erl.uPs%cq7oLES7ZHti@p8/GK!QAhW80HL.>=)TJ>A>1dBJF1;+lLqdEgO5YT0qe;RmJhD=nB2/6Shjao<p.7$&[6QfcW7m&J8iK8O?c-"_h\DO_WD$`3ljT:U*:X50N8^\"UN#%0p)KsITeN:V1\Ad!<]&2eOBNn9IcgOndgT:*2aQ?.MX!#p[OXu]SNLM3Xi@l+;g,HI8V+D'SJ6@-*4Ooo]l)9$i%,3].2YO70\7mV2I8iS8k^jnVcGJ<L$Um9Ale]FBPm']"G`bX1r(cYF00X0*EX8_qW4]kpg'Rn>iRIo+(J<]2!DTH@k_nY3>q^GTWl]L4g`#=Gpr24:#q89IQ-%YRS)fh+qt4!j2j+_G"e$oV2Ot>4JR\%V+M6g[GG(N&=Gg']HPmK#\@(2oZ(V(h*nmpmhQsn$;I1og%$Q&dNN;,/Xd1AFJm6Qt.6CS"T/Jk1u=%jE]39D=]5dqY$;@N)@G$iup+p%?32]alK6MKQYIcpcZGp/Ug+_fD&'1YR(,L%t@ZlSLrZeg?mhD2R1fp!Q7E5Qe6aK=$fpAh-=_DXaFn@CkV5_hspKncId0)FrYCO4F17\c=;ZIQG'ct#=q_tDbj/9K?HHgG'Z\OCX\`fD[ns9j>A3TF1Y//,Hra4QS"n#Z;aKL@UE=b%q'<7VC.iWNSP0EOgY#1<gCkM?:%_k,g8*ACDVHD:im$?3k&*QHBYLQ>@3V4ITdo"FH!8dA;k!.:mLs&8%+^o-t@pSjkL&,lV>j?/IR6*NT4^CZDRsC<)5)X(_[/2`j?jX.Fph2)mW-&&-d*N9fL-`i%53l?8Odn`_::!&WD`k2,lAA%WmZ;pE-^ZIpP^S&>HT7oI?_,,\e-`8WL#Y*"q3ofX<0RNrH^q>s3^'I)DZo!/>CX?RI5*\O_p+h:ZG&:i.DY7$!!F^O(+.IIG<iLI@3P4E6uu1'>F_7A\B7VO@^B,]dp-Pj-nE2eV'I,YZ<'We"O#!=n-_EIW"SbM(b*ZHF!6aL1?-UCc`-R1B):fj/jt#\I*VgG"inC"GdP3oj7(kG0:GKJC,`lAP<+I3=1oYBQ8#1t/_W[EnkBhEhhiC?(k%>c3p+eL21/s+LIAAe;h@k`GBJ@aqb(7DP%obmC6@s70Qp,5l^iO?(E!\76"8F^'9Ag<+]r[nc$?LJ(Y.o4f0&k2$m;LT>")n?f$gR]9rKPg=%)eM<<d+<Q0D1hu8.]NTUh*Ppr!f6:9=4XOI:Q@$4)GN50tqg`N4*`%hd3-YQGmbI?*,]idmhOp96KV-(EjPh:&?-D&ZL!ApX=mXT3,gPaFif:&`cWtsX-iM"8E=R6ijdT@4K^um`P=O=?j0n;j'^PNVc"bc)I,1A#cY[fWZOE$1T*t:P-RZfe!\VFj;$PAB6H[DIV@g1Id!1cm/F?;H\/:8^K8#=nFI_ZD+(_<2odi+A8BJP.qJ/_&oFSlbmN(ZJ'Cnk@7,/=is1%fAS1WdGin\X\eKI"Ip[KFZ>r#3pKAD!2MDLEJq5IS3b<^HNZO&g2]>_DN,:J?==8((UG.XKM(J@jU7IG&ucJPEe%4?HF\?-T2_'`1UWBRK.FLst%3`$t*rWAgP/,o~>endstream
endobj endobj
29 0 obj 29 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 742 /Filter [ /ASCII85Decode /FlateDecode ] /Length 742
>> >>
stream stream
GasJPgMYJ*&;KZJ.HWCfd`J'k78tagMFnTg@CU#t@@:sFA1&NY86(q!BC,Cm5`$Lmj2q;XcMfV8!M"&THtNVuRfm=^!ec6f&VNU_aW8#efM@7M8uE,knlu>)(fYq"DSan3/D;5!!7)[3Va5Z\h?ORSFNt0t]*OJ\9E7,sS_&Bu)!gQRHA,Bl>$@]+2Z0[qoCI*N!H";HV0VhIN+Rlh;a",pjMEkY8HG"c+2?XKqop=NflFF@iG5iZfs64?PRaj70<WK=<EAWO]T'[9^=a9A?(F:P"-W8%XV"oUM2'H*ahN`[#R*&Le`QCPrKJp8lP08Qo9h`.5ZY=MRNTsjE]#?a$8-oV_trn2Hu0]FLJ\tI#:Ps_mU12[bF/(:((R%P+r7`ODB/3&S;d+q@0CU\7"ac7MQ1)"FDt[4@8`^`+!K/'O>DI5qpF;KJFR'MN:A'ZS0%N3>Q(dqiFg/rXQch_4uC(A7R:]KR%nSHA5p$g5mh>*b<6&BF]5a9/oK-Dr)1N$-)BYO3eR7h)%%j'9"b<'q&-iZK'30C6B;fj\`9AL!j&@"P7E.h>VE*'>_1r=4%8-5Kf-Ff!?H^Uf5?"/(<BJhr#gW@$^Yg^>YB3?:%o+N6%.'$VD,Sn1FSmZS.s#32PAXXb83i?lqJr#<>Ob]$UL@XCMKH<'lh?Gj(.2=UEW1gLZrf82JABI]jh$,pjApb.4I?prqL;$a/"/e[BmJkSQ_g.CXrF'$Nes&[DG.!~>endstream GasJPgMYJ*&;KZJ.HWCfd`J'k78tagMFnTg@CU#t@@:sFA1&NY86(q!BC,Cm5`$Lmj2q;XcMfV8!M"&THtNVuRfm=^!ec6f&VNU_aW8#efM@7M8uE,knlu>)(fYq"DSan3/D;5!!7)[3Va5Z\h?ORSFNt0t]*OJ\9E7,sS_&Bu)!gQRHA,Bl>$@]+2Z0[qoCI*N!H";HV0VhIN+Rlh;a",pjMEkY8HG"c+2?XKqop=NflFF@iG5iZfs64?PRaj70<WK=<EAWO]T'[9^=a9A?(F:P"-W8%XV"oUM2'H*ahN`[#QloJe`QCPrKJp8lP08Qo9h`.5ZY=MRNTsjE]#?a$8-oV_trn2Hu0]FLJ\tI#:Ps_mU12[bF/(:((R%P+r7`ODB/3&S;d+q@0CU\7"ac7MQ1)"FDt[4@8`^`+!K/'O>DI5qpF;KJFR'MN:A'ZS0%N3>Q(dqiFg/rXQch_4uC(A7R:]KR%nSHA5p$g5mh>*b<6&BF]5a9/oK-Dr)1N$-)BYO3eR7h)%%j'9"b<'q&-iZK'30C6B;fj\`9AL!j&@"P7E.h>VE*'>_1r=4%8-5Kf-Ff!?H^Uf5?"/(<BJhr#gW@$^Yg^>YB3?:%o+N6%.'$VD,Sn1FSmZS.s#32PAXXb83i?lqJr#<>Ob]$UL@XCMKH<'lh?Gj(.2=UEW1gLZrf82JABI]jh$,pjApb.4I?prqL;$a/"/e[BmJkSQ_g.CXrF'$Nes&^/.$d~>endstream
endobj endobj
30 0 obj 30 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1781 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1781
>> >>
stream stream
GauHK9lo&I&A@[:m._i=C`!.<!d)K3E>,6m`_Dmi9b157'Eu[eq&tr`SYhVNh?E]=`%od_,0;#4@NXH9h_*Ig.)),H:3(lWk&BsU!TPlK"=AqTq$!;5]j$QeO@p/cnJ1^A%OCW4$`^U95S0)4iXl8],uIQj:lHe;.H"ke-'M/>\:!En+>T`j#p>*/TaJQ?pIWFd/hKU*L=)@]/O*h273l^&+jK/%?oWeH:A(R"+I!$bJ9_X2f5EjC__:+Tf?%#qB(3F3FE1r#_7>6Jo>B%g:2?V+n3Z$sXPDmJ0`*Q=LA<X;ed,Ug:'.6c&H>)K^jNpjD9C$+p:#:;(,83%S@?#+*Djg]U67"cqc%#UT%n;2a,Ns1#Xo$0`rjcFp1'N2-)";:d25sP/4#X3q041Kjs47tL,Vd\Atf'p#j4VWo[l?Ck4AefJHQ:&pR0(k.2s>V*f0Nj,T[t.AGDoIfc'U&N''nK/'hqP^73Ik]sQL5iXL`ZjY7)[UP(/;I:.lsX$F4WKql-henjrEf+EJqn0>fb`j^h5&aK&jren)/LW53g'-!^I@S-m!%!s#MNq)Yc5r+do/lel^K3Xj@[>*B319]Y#c/;dC.Q.jA;8R9u0gC0\!q+JRZnB/A6%s2[jY,*K]<\N(>%]?6F)-Qn=5(GJ2**<i3_QYp1rP*Ya*F`2Kc)5#WO@Z:<a&QT]<3:fr-Qp\?W,l]`[[NVgbUJjrO#M8;``JB_OE^54X"B8<r0)F'8fu2@Ap@m+eaM1nVHJm,i2@k,+h7C1H$25Kc#"T5R5RZfhCZKoHOW!r30Xs8rXn@!K7M(=hUlP#<Hg@m0@QagILr)6fd<!+-V%^=6#Z2&fhXu.8WT=eAfJBL(j@Fn_2Pu#'f<(B*`I[Qg]'%-!(=RO5gt@215III&Gld9j*m:#qVbUoi]XnXY;8c*KS0UMM7*qLtBWX9sJqEl,KN1E=@3_9"fd80&SoG$5=YJW7L64WGg]AMrP/m)Gos(]WiaLYB#8qc"p^J]d_ALpRfp-?TTht>Ot%hdWp3KT1HN*eqoggJ8m?SDI8`T,%Ss4SZaSBZ-AWH>0IcZ;j8[VJjs2P<c@RlY5Yj`R#PgbrWX4:'F?J@HC3%--<QUd8.@'k*Pp'7B<OUNeB-9T3.s=uUL+iAF6q$W`X9#Wge7^'_A.e@p`#S'*"tb!9KrJ10j.n-.-AmKR"^;m,XX:YP,<8k5b[XTN^CEE7o&I(A@ret6W2@XTtJ>?M,Goa\qnh1ou7u/E_:Y:#)%[r\(`NF-VUbYn54_;an)Pg9eaug.Xep'/%sXuE,fr`i7Bo#F,2W9?E]eB!V<8,I+$!_$Xon("+fX0g],7l6j1A_#b_r^3WajX(6a_%;!E:qfau*rES:VMi0UTUUG3+[WQH4,Y\=Fg+JCI=#hp,fkAce2HF"%B:2J@s7bWmSJ'u(Y5^f7qTCW7E`GTVFJc84,G.ruX%4<MNY\2#N(Aj<g((7P;GhW4%U1L2n<iu[@i^sbrF+2R-mckuReTprB_0"l2m6i`e1aPn8UYa077C,54EkK9)[>b]uos3;K2nIYp,4o/&=(<`04ml(YY4#f3rs,C,=5^-FrU(/A#Q"_SoiAC&PB&$Blt$9RSa0sk^&`QpS37")V-TkW3jC=V.,/N[9c!#.D5Z/h.5k[*Il*)^SXcqKT\n)c@BKRjp]kp,VT_PYWS,k1/ljsg[\KJMnI;HUp7OmY!KZMj[p[SOn*'KFo(mX"02nrT(s6*Q*G$,#DAV<M[_/Hj[bd#D[KlhY#N!$NGlIhVpr7g~>endstream GauHK9lo&I&A@[:m._i=C`!.<!d)K3E>,6m`_Dmi9b157'Eu[eq&tr`SYhVNh?E]=`%od_,0;#4@NXH9h_*Ig.)),H:3(lWk&BsU!TPlK"=AqTq$!;5]j$QeO@p/cnJ1^A%OCW4$`^U95S0)4iXl8],uIQj:lHe;.H"ke-'M/>\:!En+>T`j#p>*/TaJQ?pIWFd/hKU*L=)@]/O*h273l^&+jK/%?oWeH:A(R"+I!$bJ9_X2f5EjC__:+Tf?%#qB(3F3FE1r#_7>6Jo>B%g:2?V+n3Z$sXPDmJ0`*Q=LA<X;ed,Ug:'.6c&H>)K^]M;ED9C$+p:#:;(,83%S@?#+*Djg]U67"cqc%#UT%n;2a,Ns1#Xo$0`rjcFp1'N2-)";:d25sP/4#X3q041Kjs47tL,Vd\Atf'p#j4VWo[l?Ck4AefJHQ:&pR0(k.2s>V*f0Nj,T[t.AGDoIfc'U&N''nK/'hqP^73Ik]sQL5iXL`ZjY7)[UP(/;I:.lsX$F4WKql-henjrEf+EJqn0>fb`j^h5&aK&jren)/LW53g'-!^I@S-m!%!s#MNq)Yc5r+do/lel^K3Xj@[>*B319]Y#c/;dC.Q.jA;8R9u0gC0\!q+JRZnB/A6%s2[jY,*K]<\N(>%]?6F)-Qn=5(GJ2**<i3_QYp1rP*Ya*F`2Kc)5#WO@Z:<a&QT]<3:fr-Qp\?W,l]`[[NVgbUJjrO#M8;``JB_OE^54X"B8<r0)F'8fu2@Ap@m+eaM1nVHJm,i2@k,+h8nq$sDH$Sh'3J.A)>ZC02ukXQ2!pgM,oPo;f_!uN'0Z?fT)%s6a`g(3$K[u]h1LWIT"4sp$FY/W2C,W[8s;kT;ZW/Z^b%4CYkj0c"u%.MQ/c4Jo?0Al**9!/Z.*lfc^C\e%rpeJTQS$FdS'3IR5lEd,e>@CPP4!'=5'FQ"l&?h':RUYfidZ$iAiY_CGQ$NOP>ekbm'IZ9r;6ABH;W#8a(<7/c25&s0G[j>!?f_JlS(YFsHW-_#mQ[U8^NNds[cW!YV=XI!5*9l2XV3MX!TR^0h7bN37*(gF4'u-d@[f#n[?rQ>V^PD7"HC>*XPW)b>lAMJ0H8JMr=(GS.2$$_oe<#99s?5ROW%7a3eF!Mc<c/&W0=@2E!UTt7_^Vak1Gq8N"ol7\X<F-Ke!Q`n2E$-3$sN!R!emA@^<f9:s>Ut0aeMe8;:T<,YdA_JO883*//]iNh"h.a`oUrLSU`:6[=O]';\lMF:kE@l]!n=jcoBS%1!>oDRWok:7,F;iM-BUPNQ"YRUDlW<Vgm.<dM/ti8WlI_67e&jq)/P]j<Qd!p3@6q4rqH(W&f/#6N4?\,VBbM$SbH&OIrGF9DY:/1)<)T[NKkZQY.nj0T7$_(T*57Um-?;jBA7@FGoY5XJhX&[j8Vcf6QDoO\ubS_0`pNO0_0s.k-=JGMHl53EAiMV[-j"9"A7m<fr;)GX%&@*al%/bURX/J`*Un[8J*7*A8fXBZ:_`0DInk5;%8h:4r/Wq5_bKB^\CgPKNUBM+fO7_P-MMIq@Fj`lK1CE"?tlXdIuDfi7j7Hh@,Y/XG>Heb0<?/NPErsq_7YJ=3kqqW:b%e^@/l`Fb,-KS!cfZOI-44hk`I090k3-tr19"RR7F^e]7:q#!@ROlt;g.o2Z;Ja@3rb*)E4#p`u6,0&P_cm)^nIOj79pq(=;R<K@?*&"XD+?h$iu:m5lp6V;"!6"_DS`"'hpLikjn84#?`$r30U0++43B=%h(HX$D0\d^D7pngD%HX=%_Qq&nGWTCeAd(~>endstream
endobj endobj
31 0 obj 31 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1937 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1937
>> >>
stream stream
GauHK>Ar7S'RnZ;3%0Ntko,;P,`6Wi!SQ%u!OAgD2gb'^AXR_+aJ,\-dO*%bhkBI0m&68DEF?m&q47CCT,:E&Yj+=*!;nR(K3&HuLY3$%6QDI6_onJ@aWau/cZ+NgP1i))inNT+ZF,sJ.u<]*cTkBh8C%<,1*WPJJ`Ac:@if.f<_k:O`"UXa%M6`e+iV.d2A)ISBSX)apik%CqFRHR:ILruW`f?H)"(dk;&u\(&B\8(L"QYWs874a"L%K%jl*2i0mkB)'qQ0pkM1^-U]&(mO7GUhi@f>I@\%C9;XD6d$t`:pX9$%F97jTs\+,MZ%a5-ijFppjY]#,9PQ\ec!9c!q[7(_@dF=qSfJ`CV(_:rJZI(JVG(_)J@r[jb\(t5(EK<r]aMAd]bq=c*:[m>#g[5BMD@LNOAB[;]90Ve8?0JM0<q#8eBGX!7Ye?)LL/1tPOENmrP7h'+f-83VSW_7VcA[>9Tlk*M8S().ljmEjjJfFd&D?-b+D-QF/fD-L+g*D&=iJT(`.bGLc$->nHr8l"K\sgo3,t@IM0fX19cPEMPcWh&bi;^)_BMm>#">C&Q&OgXOL32f:F#/0Y+?XYGi4S((R63ALLIIfY#YYePBR@`chD<kZ!@l[9+O_;l@4Rsj6F44<.\JW"B(eVE=c^$nj6moPYhHS"`]41Jtag&ktWhA>'><Kd"5;ZgX($tH.TLYo+J+3<IAF^m;V"1%RtWAkg617[$'jpeK@$=^km2M.e);V8_lR^2>/0.I[*?7WreO.Eq>83`?Pp?:oM^Z:;*k<5Dn_'.no-`B0'Y_6^D(mPng^3-=ng(!"*Puq#_s.MT,9j=T!RO2s'dqdHAp1H%D+&b4RR##Vc5YNhU0Z/qUUO'Y#7S\%=-A(!`IaDQ1e>:fk)"f:u%Y.l.>2lrm>ODHO7@(S$U,82IqN0c*'PE>1mB!564H=#d75*:rbG1U[j>NDDHYWFAtE]Npu;a'`3Vad%`bXW`lsP[H_W>(Y=>m>SHpo,nLJ6:$D=OQ^8_hAr!?BNmT&gO*?\p8b.Y::X[`'0k%pS+*2&.asTX6LIc*#!nDdQ($eoYA.Hha6XMWGt2,3MMb=dMUMl7=Egn5U>ckXgBb!\f>_hnY@_b0>&62YM==ofeBpBEW'e8WMJW$?<_io[-]XG(K'Lo,eC-@@Ym0Are=/K.\eTn`Ii)AJ8ND#hHSF0s1<`)Y2UGd^k'V)AJ%LtKf\fi)U>(KX:OLGIne=]Q6iALIP>EXZWUk/:$*rbeAafa6FU9i4gbEF9TaC"3EkS#M[YRULiaS-%7&]Eb$;WLU5nG'<dph4^qjT!jSidqmncU:kF;gg`KG!GOS'.ub#g5OtDm'IPW^U+?euJ8-\p%R[`j%"61+GmU<VA;EWbstRCLfZG'$7A0RkXo0@s#@Yf0ZD8SZ64XG:NPiQUu1]cR8F6D[Zji[?RanjCZ.#Ht5>0;;W%PfEZRS,etJo\&I!%BB"iC2HGl/Qb%hV[l&8aY9d>9(6M@\aI"=DiSAJqKdI"6+n0>Bk!%KrP*X)an5O7V.9mIu35bQEg-M.GAg&f_,cL=VI#m3C\\cUiGHls@f>0@Kb>=gr8Y.@6q3N@[#2S4QMr.s]&],nj<Nn=r5j_ZP1VmW6%EjQ8h&+/17_S,6`9>6&:hW>L'L&+q1Na&>>bdlL+%NDT>U!u[G$*ehAD>&/3U`#>W[O#)?8olOR6j@OH%VRu,`_9?]EpMfA*)0G[q,I2)<'<*N;1e/H(oG9/II\!+!6smY@mi2K5]]@[X8L`2eS_k;b;@VFW%ojG-\iEmEP:69(j(_EijL]^<TYrAQ[H-XJ3XlIB7uSDGPbRq5p`:2#i!(_C158g^qO]q[N".bWf3F[62JiQSmiDXVP%WS_n^(^>k9Hk`5-&`nu)F]`jHW!r6`-E7uU/L3#_IiDf-nZ?j$5qLeH*`LX,H~>endstream GauHK>Ar7S'RnZ;3%0Ntko,;P,`6Wi!SQ%u!OAgD2gb'^AXR_+aJ,\-dO*%bhkBI0m&68DEF?m&q47CCT,:E&Yj+=*!;nR(K3&HuLY3$%6QDI6_onJ@aWau/cZ+NgP1i))inNT+ZF,sJ.u<]*cTkBh8C%<,1*WPJJ`Ac:@if.f<_k:O`"UXa%M6`e+iV.d2A)ISBSX)apik%CqFRHR:ILruW`f?H)"(dk;&u\(&B\8(L"QYWs874a"L%K%jl*2i0mkB)'qQ0pkM1^-U]&(mO7GUhi@f>I@\%C9;XD6d$t`:pX9$%F97jTs\+,MZ%a5*hjFppjY]#,9PQ\ec!9c!q[7(_@dF=qSfJ`CV(_:rJZI(JVG(_)J@r[jb\(t5(EK<r]aMAd]bq=c*:[m>#g[5BMD@LNOAB[;]90Ve8?0JM0<q#8eBGX!7Ye?)LL/1tPOENmrP7h'+f-83VSW_7VcA[>9Tlk*M8S().ljmEjjJfFd&D?-b+D-QF/fD-L+g*D&=iJT(`.bGLc$->nHr8l"K\sgo3,t@IM0fX19cPEMPcWh&bi;^)_BMm>#">C&Q&OgXOL32f:F#/0Y+?XYGi4S((R63ALLIIfY#YYePBR@`chD<kZ!@l[9+O_;l@4Rsj6F44<.\JW"B(eVE=c^$nj6moPYhHS"`]41Jtag&ktWhA>'><Kd"5;ZgX($tH.TLYo+J+3<IAF^m;V"1%RtWAkg617[$'jpeK@$=^km2M.e);V8_lR^2>/0.I[*?7WreO.Eq>83`?Pp?:oM^Z:;*k<5Dn_'.no-`B0'Y_6^D(mPng^3-=ng(!"*Puq#_s.MT,9j=T!RO2s'dqdHAp1H%D+&b4RR##Vc5YNhU0Z/qUUO'Y#7S\%=-A(!`IaDQ1e>:fk)"f:u%Y.l.>2lrm>ODHO7@(S$U,82IqN0c*'PE>1mB!564H=#d75*:rbG1U[j>NDDHYWFAtE]Npu;a'`3Vad%`bXW`lsP[H_W>(Y=>m>SHpo,nLJ6:$D=OQ^8_hAr!?BNmT&gO*?\p8b.Y::X[`'0k%pS+*2&.asTX6LIc*#!nDdQ($eoYA.Hha6XMWGt2,3MMb=dMUMl7=Egn5U>ckXgBb!\f>_hnY@_b0>&62YM==ofeBpBEW'e8WMJW$?<_io[-]XG(K'Lo,eC-@@Ym0Are=/K.\eTn`Ii)AJ8ND#hHSF0s1<`)Y2UGd^k'V)AJ%LtKf\fi)U>(KX:OLGIne=]Q6iALIP>EXZWUk/:$*rbeAafa6FU9i4gbEF9TaC"3EkS#M[YRULiaS-%7&]Eb$;WLU5nG'<dph4^qjT!jSidqmncU:kF;gg`KG!GOS'.ub#g5OtDm'IPW^U+?euJ8-\p%R[`j%"61+GmU<VA;EWbstRCLfZG'$7A0RkXo0@s#@Yf0ZD8SZ64XG:NPiQUu1]cR8F6D[Zji[?RanjCZ.#Ht5>0;;W%PfEZRS,etJo\&I!%BB"iC2HGl/Qb%hV[l&8aY9d>9(6M@\aI"=DiSAJqKdI"6+n0>Bk!%KrP*X)an5O7V.9mIu35bQEg-M.GAg&f_,cL=VI#m3C\\cUiGHls@f>0@Kb>=gr8Y.@6q3N@[#2S4QMr.s]&],nj<Nn=r5j_ZP1VmW6%EjQ8h&+/17_S,6`9>6&:hW>L'L&+q1Na&>>bdlL+%NDT>U!u[G$*ehAD>&/3U`#>W[O#)?8olOR6j@OH%VRu,`_9?]EpMfA*)0G[q,I2)<'<*N;1e/H(oG9/II\!+!6smY@mi2K5]]@[X8L`2eS_k;b;@VFW%ojG-\iEmEP:69(j(_EijL]^<TYrAQ[H-XJ3XlIB7uSDGPbRq5p`:2#i!(_C158g^qO]q[N".bWf3F[62JiQSmiDXVP%WS_n^(^>k9Hk`5-&`nu)F]`jHW!r6`-E7uU/L3#_IiDf-nZ?j$5qLeH*lA_o_~>endstream
endobj endobj
32 0 obj 32 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1856 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1856
>> >>
stream stream
Gb!Sl=`Y6:&:U6Yd4\H&eeTLTV0U9#JVD>M!AA`?Ml`'.M8tdI,6<8l[cWU2GbMRE@Uj&rmT,re[nOWW&$:n5"7Z0rT"h'd)9`j]IH&02&h[eAB8<^Q7=G6Tj/s1S+L,SZ+C@/JJrkX?M^`U(,!>G4kEKp,F(!'*75TU$_;^kMJOH1NE?>Ia6--r,IZK/@iR0mr_D'j.DtW-k]pOJTG,T$E7:A_Q>GHMDSkiT06ikLiE;'"]Vq:En=fOfkN61#H108Kr_@9ueSA1Ye(I_Ml.Y/E$:1\%L;7_,^ZWie[ZYPQ]q]7+u9Cu'[V(."AJ>]+uMam&[YtVP*8k4K9d&ES3OL:NH/gm7R7Mq(S4mmRY)=I<o+2Z$+!GO1`B:6X]ijq;q4_).$nd1:B2LZ9\1t(W\i<A>->#G6n)!U#[HJ'?VBR0in#8.d<Xttjm><9E=HU2PaMKIW>M[XNM-!TNgN035M=ZLV&fhW:Yk:^]CeCbcRhWDj,B%/,c;s%L>d*Xu6Fj0V//qc-#hE?q\LUI&IY^Q=2,6<cYE?E7d?XaYa>lc6`gf0.^ZT%V*?S=0UIj?K>oF:SW'IO5"q3X6Chj!qbiO(kT1i[brKZ(;AdGUR:b7q4FEddohEgcs+gs5)#mILE$`sctdVR"Z4-*"kj9&5"Oap-j@Ts[eo@;6QeWa]<.e=V]Ak=T=-Lu,7j3u'3_a#-7V<m(;5UjC+5':Q@'Zt>]`)kkH%e0?uIF3Aceec@DTinIlg/H)NEri=2aFGdT;Kpr:`fZhkY$F[$P)Up5P<l`.W,BibV[;9d"[r8\^E[00Y9r6%mR#[Qi6P[#oGph-X\YqS!>UW4Lh'tPgK?'t>M)sb<QMlFcPfVqnEYMpPUOJ.@Vmdt3>"Y!WP<-_N)Va$mQ,JL'KubVaW['a5;QjHFqCYS/0UH7N7LU&$hVeDc_AVO\6b$OVFhPBdEWcsKnB)mTgin"I)2]!o1AHZ%FEP)`"VIIf$b:td_ZU#-#sOusduG<^_qHnumi&jN15/dG(N2Sj+84]p_g(E9hIulD1>P6ZJY/]jP7W(/j[NiF/Y1_E-p"@Rp;!?#Jp+8EJW6$_/@Lu/RkNaeKdp*:8Te3Q'PN]+bBg/(Yd7s$=Q$icV4,2:Q)@32Zd&\3WkM;kLf,5COFtT'Sf>8K^=*OXU/Y<F4`#J9-EpJ@]Lpd%L^XWm1@X)Y[n!N3ma&5N>O+AQ[U#iaWba;l8ZiMs[=6=%)ca`TIBXJ*P,cZu9$>Gqi+((-M8&a.='R/%B+QAU3%]4se=ITn>+I:MX'rHh0cnaEdm>"]gf*MegA-3eT7bhi`T:eJo>9^@Mdl,r2W;?bj_`J;^c"QPV0Y.Q7*VbYDPQo8pIc[]-^--%L/VLP>clBYLHVlXkok\ig'Wt-n4dJP?Q6R/KuR"rA,"Ej&W<nLE0a?TcOH1sSd\Cu"T+JSlFcnl,ufR".1149"`ki(7_l-oj"RT6`:$r>r6pWd$!7:I\Dui>a]pFbSjU^XKu.@,1/#+M-Ptj\Te?bBU!L]Gcc<jS$p8kmrr'hUm1oec_bEZR;h*uhB^$$o_JkTsf+N?r4'=HSn^?f,>UrD*.DXPQ9@+[7>#,GT\:+Y9H"+InCC?!TR,^Ai`/Fo1o-SGjr-!Q-N]4Rpe*Jaf24e8Vl(O2cF=64XM>=CZKX7`%PR>]C_oERCi]]pD8`9'7MiIB#Q[Y8Aou<m0g[uANqN>%Z"aXWnmT%!"E-""B8t6+Y2!N&u16i!F=4dPgRL6:d,\VIh>2N'DC9'b_7oP]$CfJ1D3kJ22'rWe?/<qZ1f]Y(L=l!U9:&Z'37\s[a)I5U&?Bf^]b::P$\fWe;.n\;[(Z\-PK(BL^o"sq~>endstream Gb!Sl=`Y6:&:U6Yd4\H&eeTLTV0U9#JVD>M!AA`?Ml`'.M8tdI,6<8l[cWU2GbMRE@Uj&rmT,re[nOWW&$:n5"7Z0rT"h'd)9`j]IH&02&h[eAB8<^Q7=G6Tj/s1S+L,SZ+C@/JJrkX?M^`U(,!>G4kEKp,F(!'*75TU$_;^kMJOH1NE?>Ia6--r,IZK/@iR0mr_D'j.DtW-k]pOJTG,T$E7:A_Q>GHMDSkiT06ikLiE;'"]Vq:En=fOfkN61#H108Kr_@9ueSA1Ye(I_Ml.Y/E$:1\%L;7_,^ZWie[ZYPQ]q]7+u9Cu'[V(.!"J>]+uMam&[YtVP*8k4K9d&ES3OL:NH/gm7R7Mq(S4mmRY)=I<o+2Z$+!GO1`B:6X]ijq;q4_).$nd1:B2LZ9\1t(W\i<A>->#G6n)!U#[HJ'?VBR0in#8.d<Xttjm><9E=HU2PaMKIW>M[XNM-!TNgN035M=ZLV&fhW:Yk:^]CeCbcRhWDj,B%/,c;s%L>d*Xu6Fj0V//qc-#hE?q\LUI&IY^Q=2,6<cYE?E7d?XaYa>lc6`gf0.^ZT%V*?S=0UIj?K>oF:SW'IO5"q3X6Chj!qbiO(kT1i[brKZ(;AdGUR:b7q4FEddohEgcs+gs5)#mILE$`sctdVR"Z4-*"kj9&5"Oap-j@Ts[eo@;6QeWa]<.e=V]Ak=T=-Lu,7j3u'3_a#-7V<m(;5UjC+5':Q@'Zt>]`)kkH%e0?uIF3Aceec@DTinIlg/H)NEri=2aFGdT;Kpr:`fZhkY$F[$P)Up5P<l`.W,BibV[;9d"[r8\^E[00Y9r6%mR#[Qi6P[#oGph-X\YqS!>UW4Lh'tPgK?'t>M)sb<QMlFcPfVqnEYMpPUOJ.@Vmdt3>"Y!WP<-_N)Va$mQ,JL'KubVaW['a5;QjHFqCYS/0UH7N7LU&$hVeDc_AVO\6b$OVFhPBdEWcsKnB)mTgin"I)2]!o1AHZ%FEP)`"VIIf$b:td_ZU#-#sOusduG<^_qHnumi&jN15/dG(N2Sj+84]p_g(E9hIulD1>P6ZJY/]jP7W(/j[NiF/Y1_E-p"@Rp;!?#Jp+8EJW6$_/@Lu/RkNaeKdp*:8Te3Q'PN]+bBg/(Yd7s$=Q$icV4,2:Q)@32Zd&\3WkM;kLf,5COFtT'Sf>8K^=*OXU/Y<F4`#J9-EpJ@]Lpd%L^XWm1@X)Y[n!N3ma&5N>O+AQ[U#iaWba;l8ZiMs[=6=%)ca`TIBXJ*P,cZu9$>Gqi+((-M8&a.='R/%B+QAU3%]4se=ITn>+I:MX'rHh0cnaEdm>"]gf*MegA-3eT7bhi`T:eJo>9^@Mdl,r2W;?bj_`J;^c"QPV0Y.Q7*VbYDPQo8pIc[]-^--%L/VLP>clBYLHVlXkok\ig'Wt-n4dJP?Q6R/KuR"rA,"Ej&W<nLE0a?TcOH1sSd\Cu"T+JSlFcnl,ufR".1149"`ki(7_l-oj"RT6`:$r>r6pWd$!7:I\Dui>a]pFbSjU^XKu.@,1/#+M-Ptj\Te?bBU!L]Gcc<jS$p8kmrr'hUm1oec_bEZR;h*uhB^$$o_JkTsf+N?r4'=HSn^?f,>UrD*.DXPQ9@+[7>#,GT\:+Y9H"+InCC?!TR,^Ai`/Fo1o-SGjr-!Q-N]4Rpe*Jaf24e8Vl(O2cF=64XM>=CZKX7`%PR>]C_oERCi]]pD8`9'7MiIB#Q[Y8Aou<m0g[uANqN>%Z"aXWnmT%!"E-""B8t6+Y2!N&u16i!F=4dPgRL6:d,\VIh>2N'DC9'b_7oP]$CfJ1D3kJ22'rWe?/<qZ1f]Y(L=l!U9:&Z'37\s[a)I5U&?Bf^]b::P$\fWe;.n\;[(Z\-PK(BM04Mp^~>endstream
endobj endobj
33 0 obj 33 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1724 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1724
>> >>
stream stream
Gb!TW>Bed\&:i[:/*:\_)dLR1pT9eSCsLIEB_R2s@12*</D$%VZbLrZ1)QoSDVL@,%@ggb2)id-)Mrus04OpY97U)RGlF!/EFCs3inHYU7rUMt^0.l`\re(bmDY*P\6p\Ure!8@8dIaF9\b:dlpQ":q;B<3NoMAh(WSrVM4eH7HYO.sUX4j,+7,?t@3"]op[$7L;71<I@@6sPIViGnbtIDBD&o(u^/5_26.SeR;E`o\8.YqY?GbY!LTb@[VoY9"k<a._U2$">'hhjkJsU,fQVnSsYmfKn(#u#lZ;Ni:nHFlDC0a!u^),Pf96=J=Le/^1i.k9@er'Dso:i#tet/O1(t=P@cs9io3O.ss:5"gNA&Kr0,85EQk_HCLgq[e\]6i=R,MR59\9H8Yf2)3#M*e\$-eLPF>2;?S+>G$C<-Kk/kE5g+fcFk"kmZ5"8C>5t27Ekj9"$rFSKOiZP$6/^$BAIS,M.Q02gV'nf%`#PV-iWF5C]_ta(0+%a6WZebo(M;2^Y[4"QarL&=Y[QHLkU02U"C7p>guuIU]q$npT+"8:l\F:&`1:A50'22A@ZB?S]i[S<^Q06Pqmj146^Q0%(K?Y;Q$j@"L*-941M]0P-SmnUp!&]#28M>m80._6Cf(C+pFj]?Xh=nH^j!n1%OIPp"3ub66iC""ltF$X*UdUf<S"1lXB#pd;p8(i$r]Y)8/(`Bd//iXR!<B;oBihTXNi3oY<&gPh30Mq<MC>\=9CgWD>b(edI7*AeBb4s66MSZ]k]o_&G$6W(N49rZG!AFP'=`$j?N2#tcF8318G$;t%JZi`>T4J&l`?(EKmKp1i>?T/87-(HK:5*oEG$@tcIJJ+?T&s/rXi1/@c]$qn6ak92Vog,a@7'7+%'rsXH0h_e<N%Z%E.ej=o"YMrsY<?5gHf'cXLWVN2r1A_&&]I(1YARuA&6r.[^JLG0l+>6f7"HNrQ(IQZ;F=eVehjc9cP_HI8=!^_BJOrMU4u.CH8qZK7e$tIn<<?c@)QC(Sn%deQR7\;Pa'a\E_TQXWAQ:dBGm34g<pCs%!HWr-e"*5+Cfu@W+qIHfR.g!,o*OW?s?tsHhm!&K4Z#Bk`oV]A-u!X9,2p)/*>YjiJ6r!A&X3Pf&MW_$XTbn&B"8&LD'dKfn&`)[I7CrdlhFf[kWr0$X6p2$H9QQB%\`5XM,jUKCJCNg$6.ej`9]q34:WhTI?l'VWIdVJFZ)*5mfJSF'-seR:<^=`t)9g89!t8L#f0MHD%T)Le>u$+2/[TPnKG>68s!:h7@-5g9g7>3?'Z1Z@m^bM\=0aWF<d\X-Z7X86$ecmFuXG3BrSc?PtU]T<i!N-.tSblT#JClOa]mn%)>3W;?bS8\B>&<5KqVaV.e)Jn%`>HS<(hRO+>LYBZ0FWbkCe;R%28-V".jgk!_-H:c@.m)rP$\OBfa`h\p>PV]!/4@:/KcTX.R%7SCBE"cMh;t1l@)=)?t1G1.&h<30G<'jA4gU@VR,33T9TLASWgVeK"Lb[aLK?ISqdmhS>X3>$qG<EIgNaVi*J&Vo%=6@!0L\SX'\W=@@a`o2]"cPq>G0YHYMP2^lE7&Q8,]Fn9K4Yhl2k)P::.=$goCJ,GE\<Sr;XX:Ois&m;3+lBV1U@N-Wg]gO";"<gj2K!3h&$Haj_Vc%3b)R-okS\%pC,=2MK4df<pP=H8G%0r93B`UVnga3B?`9(X#<t4P'q,Mn(@g1[^*aG(DCWQD?~>endstream Gb!TW>Bed\&:i[:/*:\_)dLR1pT9eSCsLIEB_R2s@12*</D$%VZbLrZ1)QoSDVL@,%@ggb2)id-)Mrus04OpY97U)RGlF!/EFCs3inHYU7rUMt^0.l`\re(bmDY*P\6p\Ure!8@8dIaF9\b:dlpQ":q;B<3NoMAh(WSrVM4eH7HYO.sUX4j,+7,?t@3"]op[$7L;71<I@@6sPIViGnbtIDBD&o(u^/5_26.SeR;E`o\8.YqY?GbY!LTb@[VoY9"k<a._U2$">'hhjkJsU,fQVnSsYmfKn(#u#lZ;Ni:nHFlDC0a!u^),Pf96=J=Le/]ii.k9@er'Dso:i#tet/O1(t=P@cs9io3O.ss:5"gNA&Kr0,85EQk_HCLgq[e\]6i=R,MR59\9H8Yf2)3#M*e\$-eLPF>2;?S+>G$C<-Kk/kE5g+fcFk"kmZ5"8C>5t27Ekj9"$rFSKOiZP$6/^$BAIS,M.Q02gV'nf%`#PV-iWF5C]_ta(0+%a6WZebo(M;2^Y[4"QarL&=Y[QHLkU02U"C7p>guuIU]q$npT+"8:l\F:&`1:A50'22A@ZB?S]i[S<^Q06Pqmj146^Q0%(K?Y;Q$j@"L*-941M]0P-SmnUp!&]#28M>m80._6Cf(C+pFj]?Xh=nH^j!n1%OIPp"3ub66iC""ltF$X*UdUf<S"1lXB#pd;p8(i$r]Y)8/(`Bd//iXR!<B;oBihTXNi3oY<&gPh30Mq<MC>\=9CgWD>b(edI7*AeBb4s66MSZ]k]o_&G$6W(N49rZG!AFP'=`$j?N2#tcF8318G$;t%JZi`>T4J&l`?(EKmKp1i>?T/87-(HK:5*oEG$@tcIJJ+?T&s/rXi1/@c]$qn6ak92Vog,a@7'7+%'rsXH0h_e<N%Z%E.ej=o"YMrsY<?5gHf'cXLWVN2r1A_&&]I(1YARuA&6r.[^JLG0l+>6f7"HNrQ(IQZ;F=eVehjc9cP_HI8=!^_BJOrMU4u.CH8qZK7e$tIn<<?c@)QC(Sn%deQR7\;Pa'a\E_TQXWAQ:dBGm34g<pCs%!HWr-e"*5+Cfu@W+qIHfR.g!,o*OW?s?tsHhm!&K4Z#Bk`oV]A-u!X9,2p)/*>YjiJ6r!A&X3Pf&MW_$XTbn&B"8&LD'dKfn&`)[I7CrdlhFf[kWr0$X6p2$H9QQB%\`5XM,jUKCJCNg$6.ej`9]q34:WhTI?l'VWIdVJFZ)*5mfJSF'-seR:<^=`t)9g89!t8L#f0MHD%T)Le>u$+2/[TPnKG>68s!:h7@-5g9g7>3?'Z1Z@m^bM\=0aWF<d\X-Z7X86$ecmFuXG3BrSc?PtU]T<i!N-.tSblT#JClOa]mn%)>3W;?bS8\B>&<5KqVaV.e)Jn%`>HS<(hRO+>LYBZ0FWbkCe;R%28-V".jgk!_-H:c@.m)rP$\OBfa`h\p>PV]!/4@:/KcTX.R%7SCBE"cMh;t1l@)=)?t1G1.&h<30G<'jA4gU@VR,33T9TLASWgVeK"Lb[aLK?ISqdmhS>X3>$qG<EIgNaVi*J&Vo%=6@!0L\SX'\W=@@a`o2]"cPq>G0YHYMP2^lE7&Q8,]Fn9K4Yhl2k)P::.=$goCJ,GE\<Sr;XX:Ois&m;3+lBV1U@N-Wg]gO";"<gj2K!3h&$Haj_Vc%3b)R-okS\%pC,=2MK4df<pP=H8G%0r93B`UVnga3B?`9(X#<t4P'q,Mn(@g1[^*aG(I[!FDu~>endstream
endobj endobj
34 0 obj 34 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 934 /Filter [ /ASCII85Decode /FlateDecode ] /Length 932
>> >>
stream stream
GauHI9lldX&A@Zcp6]I366@>,UXM%u:GY_od,pK!`j/<kOTWO9s*^50PB]E+I'E,X=KV;1\%>g"TQma<2r4O>K]$/k?l[$00TUGi?Gi,VH#a1W>^8LETrA;WO?cbeaB)+@^*GJl!<Z%2dE2Pe1ST#bJ`AqjR"F,/o%[Y=Pb^ou5W&)/Q3[9jOdmZ'7slb<\,0BY\tTuPfs3u6bnl#+#AZd$;2%Lgo9BjF#0ss?r1:`+].ugf[PihHAT$LM#nNOVR*I&-U.C0i/E"tC9PV$UPEha_qubo'Kf+\T#u+6SH6*%>'Yjk0XXNSB$2YrN-!>o`6(hFUC)9J4QDpUI#XK1@@l35+^s$KN8Pd4CiBCrsHX#cS74@j$^rCN_jUn@8+'STf-['eT4tt5`'rj1rkSO$@`tkcHkm;Hd(^YB3WP`\?m2'IYM"W7%6h`-0I-F52RsQ"Tjfu.8lDCSaVY9FXeNA!K8tt)>(t;5g2?V5^0T7NhYNqW33[bDF9qL8!#6;%6#REWtn2Tr@J=ZQEi$,X5B!QX'h`%Pg]tXD?%]u'Z=O]lW=Pf[lDEk-e7J377VAYK6oN&>6/PXUgTV"A$V-\-]ZGc>0%#_Lu4,hh1fosA`2;`cbB@@aR?%.Fj$;XV%2`m5l'(aPAO=6M2Mat',4*P,n_Mr:Xf="HCP,\j\:FNmY4&5X[[9NEBZSKS;1T!6&a%>&GNbCqJ-^3Cq*N/hp3Ct#Y[d'kW-@XhJ:7CnhrV0001Ar6EEVf-qkL%>mMp?*+ZS,+P\\gI'o=`BjQ`5CaD,cfJcc3B-[,,<H`<iH43,Zfkd4S#j_7c8SSVco^%FZE*7X/&hOk=P@,k;UD1OeC=bK=sF[n5ArlArAV/koRt3s-Q_nHnC0EF\=4RDpO2magH9fB.RH*O5F_NTPr<3MV67ab'Zs\+KpMIgbq4T)~>endstream GauHI966RV&AI`dp6]I364]0rd:o&KVjXDrBQM9!A(d`qa8t;-s1Z\*,bC)8+)F%DUt,4l?-*L'?EF-c2ZOX;\5s(ULN!RD,9DNin0N1J*5X"'Se"5&.KU)*&Ch$VQ'6bPM%"XE5Z:+Yo"`_5BH:dE\5"KM+?-MeG8Ll;WR;h!c$ZMP_0SBmk=FtP?cq<oqGs5kj97r[l;2*a750[.Xf3@AG_@hZq%.H%m/,&r)18hB;oEHe;tsAT-=3&.^q#']CbdT"UaXIh0$V\;G.TJ3q$Fo&&=us."+3mXJmQrBr+f42o)WbuBpT:qO(aeh&MPp>]#CIg8<UGS("G\XWj!>8)0Z3q7LN"<&iL6o8b:SqV%-R[;GRhC\8J'(_Na-!&\j6\SULthQtEFOlA#G"$[h0C"`%Rn!Sp#"!k[XF@5uI(PI(Rh4\P.g]o!M2HBIUShT!?Vm&ZbhWN*"u]mEa::Yi^IkdE\[23XEPJ9)/.EJ=+/>r+qTKd!P>o@s.m5h6&=iJ.OW-U%pBF'fMaj>P1Tp.kG\7eNV0QiG1$olN]^*be?lq`WW77lTY1?8L"d"-Ju-8lk>U!Ne<Wf`P1<Q,]Li/>(7m=F7>@`!0j-(,OHfo+dciB5i(j%AkZ2;$GbA9YO0D9=%![A5Xs"ahmE"KoHI!We4R2#/)Oe.O70NooAAulds^*iNpeO*"SVqh^Jb)i[/W_41[PBooA>tk82H9\k',,=8alFo/:d?]T;j.J!uSsn$nDLJ+l'd5'C7S;'VZ\Grj7lf5[DND>q%=m0da*Z8?hbmeruA*qM!ZGfkm'%_4:I-0[Y(2flJb;')oLqIA(n0C(&"gWbOCI_sQm+*j5bjZ9m*,]7Gk>MC]q-8(LQJIe7FK]gp+a4=$BND"*CXi]>#c2T+P@e5j(bmTkZ7L9fm#6t<JlO06_+8_4p~>endstream
endobj endobj
xref xref
0 35 0 35
@@ -288,22 +288,22 @@ xref
0000003306 00000 n 0000003306 00000 n
0000003598 00000 n 0000003598 00000 n
0000003742 00000 n 0000003742 00000 n
0000005704 00000 n 0000005694 00000 n
0000007361 00000 n 0000007351 00000 n
0000009090 00000 n 0000009080 00000 n
0000011026 00000 n 0000011016 00000 n
0000012758 00000 n 0000012748 00000 n
0000013793 00000 n 0000013781 00000 n
0000015500 00000 n 0000015488 00000 n
0000016333 00000 n 0000016321 00000 n
0000018206 00000 n 0000018194 00000 n
0000020235 00000 n 0000020223 00000 n
0000022183 00000 n 0000022171 00000 n
0000023999 00000 n 0000023987 00000 n
trailer trailer
<< <<
/ID /ID
[<11be394e8ad147cab02e0a1e4416f65a><11be394e8ad147cab02e0a1e4416f65a>] [<fb3f05f6608a2d955517a71787b2930a><fb3f05f6608a2d955517a71787b2930a>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R /Info 20 0 R
@@ -311,5 +311,5 @@ trailer
/Size 35 /Size 35
>> >>
startxref startxref
25024 25010
%%EOF %%EOF

View File

@@ -1,19 +1,19 @@
# Les 13 — Agents # Les 15 — Agents
## Slide Overzicht (Klas A — 3 uur fysiek, demo-driven) ## Slide Overzicht (Klas A — 3 uur fysiek, demo-driven)
**Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk. **Lesvorm:** Tim demonstreert klassikaal. Studenten kijken. Zelf bouwen = huiswerk.
**Demo-app:** Nieuwe research-agent (from scratch, los van Polderfest) **Demo-app:** Nieuwe research-agent (from scratch, los van Polderfest)
**Vervolg op:** Les 12Tool Calling **Vervolg op:** Les 14RAG + Embeddings
**Aansluit op:** Les 14RAG + embeddings **Aansluit op:** Les 16MCP servers
--- ---
## Slide 1: Title ## Slide 1: Title
### Les 13 — Agents ### Les 15 — Agents
**Visual:** **Visual:**
- Background: CREAM - Background: CREAM
- "Les 13" in BLUE - "Les 15" in BLUE
- "Agents" in BLACK - "Agents" in BLACK
- Subtitle: "Een LLM in een loop met tools — autonoom tot het klaar is" - Subtitle: "Een LLM in een loop met tools — autonoom tot het klaar is"
@@ -76,7 +76,7 @@
**Het verschil met Les 12:** **Het verschil met Les 12:**
- Les 12: tot 5 stappen, korte taken - Les 12: tot 5 stappen, korte taken
- Les 13: 20-50+ stappen, langere autonome workflows - Les 15: 20-50+ stappen, langere autonome workflows
**Visual:** Loop-diagram — LLM → kies tool → execute → resultaat → LLM → ... → klaar **Visual:** Loop-diagram — LLM → kies tool → execute → resultaat → LLM → ... → klaar
@@ -343,7 +343,7 @@ const costLimit: StopCondition<typeof tools> = ({ steps }) => {
|----------|--------| |----------|--------|
| Vraag → 1 tool → antwoord | Plain tool-call | | Vraag → 1 tool → antwoord | Plain tool-call |
| Vraag → 2-5 tools → antwoord | `stopWhen: stepCountIs(5)` (Les 12) | | Vraag → 2-5 tools → antwoord | `stopWhen: stepCountIs(5)` (Les 12) |
| Onderzoek → 10-50 tools → rapport | **Agent** (Les 13) | | Onderzoek → 10-50 tools → rapport | **Agent** (Les 15) |
| Productie pipeline met validatie | **Workflow** (explicit code) | | Productie pipeline met validatie | **Workflow** (explicit code) |
| Wettelijk: must be reproducible | **Workflow** — geen agent | | Wettelijk: must be reproducible | **Workflow** — geen agent |
@@ -393,7 +393,7 @@ const costLimit: StopCondition<typeof tools> = ({ steps }) => {
- Done-tool pattern voor forced tool calling - Done-tool pattern voor forced tool calling
- Wanneer wel/niet een agent - Wanneer wel/niet een agent
**Volgende les (Les 14): RAG + embeddings** **Volgende les (Les 16): MCP — Model Context Protocol**
- Semantic search op grote datasets - Semantic search op grote datasets
- pgvector in Supabase - pgvector in Supabase
- Embedding models — wat zijn vectors - Embedding models — wat zijn vectors

BIN
Les15-Agents/Les15-Slides.key Executable file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More