fix: add les 11

This commit is contained in:
2026-05-19 18:50:11 +02:00
parent b053fc7206
commit 634789e615
37 changed files with 7587 additions and 209 deletions

View File

@@ -60,8 +60,18 @@ npm install gsap @gsap/react lenis
git init
git add .
git commit -m "init: next 16 + gsap + lenis"
# GitHub remote (maak repo eerst via gh CLI of dashboard)
gh repo create scroll-demo --public --source=. --remote=origin --push
# Vercel CLI + koppelen + eerste deploy
npm i -g vercel
vercel link # koppelt repo aan een Vercel project
vercel # eerste deploy naar productie URL
```
**Check:** open Vercel dashboard → project bestaat → productie-URL werkt. Open GitHub → repo staat er → Vercel preview comment in PR werkt.
### 4. Test je setup
- Open OpenCode Desktop → File → Open Folder → `~/scroll-demo`
@@ -228,7 +238,7 @@ Dat was de theorie. Nu zien jullie het live."
---
### Blok 4 — THEORIE 2: AGENTS.md + opencode.json + plugin + stack (15 min)
### Blok 4 — THEORIE 2: AGENTS.md + config + plugin + stack + Vercel (17 min)
**Slides 8, 9, 10, 11, 12. Achter elkaar, zonder switchen.**
@@ -290,10 +300,11 @@ Framer Motion is uitstekend — voor app UI. Modals, page transitions, micro-int
Daarom staat in onze AGENTS.md: 'Geen Framer Motion'. Het is geen anti-Framer, het is pro-GSAP voor dit type werk."
#### Slide 12 — Onze AGENTS.md — 3 min
#### Slide 12 — Onze AGENTS.md — 2 min
**Vertel:**
"Hier zie je onze concrete regels voor dit project. Let op de structuur:
- Why this stack — context voor de agent
- Stack — versies expliciet
- Hard rules — niet onderhandelbaar
- Patterns — hoe we organiseren
@@ -307,9 +318,35 @@ Regels die opvallen:
Deze regels heb ik uit ervaring. In de volgende demo zet ik dit in, en zie je dat de AI ze volgt."
#### Slide 13 — Vercel + Preview Deployments — 3 min
**Vertel:**
"Laatste theorie-stuk voor we gaan demoen. Hoe sluiten we onze worktree-workflow goed af? Met **Vercel preview deployments**.
Het idee: je hoeft niet handmatig te deployen. Elke `git push` triggert Vercel om automatisch een deploy te maken. En het mooie — voor élke branch krijg je een eigen unieke URL.
- Push naar `main` → productie URL (`jouw-app.vercel.app`)
- Push naar `feature-hero` → preview URL (`jouw-app-git-feature-hero-jij.vercel.app`)
- Push naar `feature-gallery` → andere preview URL
Stel je voor: je werkt aan een hero-sectie. Je pusht naar je feature-branch. Twee minuten later heb je een live URL die je naar je designer kunt sturen voor feedback. Geen 'het werkt op mijn machine'. Geen screenshots. Live.
**Voor scroll-storytelling is dit goud** — animaties moet je zien om over te oordelen. Preview URLs maken die feedback-loop razend snel."
**Setup (kort uitleggen — komt zo in demo):**
- `npx vercel link` koppelt je repo aan een Vercel project
- Vercel installeert eigen GitHub app
- Vanaf nu: elke push = deploy
**Combinatie met onze workflow:**
"En hier komt 't mooi samen: 1 worktree = 1 branch = 1 Vercel preview. Drie features parallel? Drie live preview URLs. Verschillende stakeholders kunnen verschillende features tegelijk reviewen."
**Demo aankondiging:**
"In Live Demo 2 ga ik niet alleen onze SmoothScroll bouwen, maar ook pushen naar de feature-branch en zien dat Vercel automatisch een preview URL maakt."
---
### Blok 5 — LIVE DEMO 2: Setup + Worktree + SmoothScroll (15 min)
### Blok 5 — LIVE DEMO 2: Setup + Worktree + SmoothScroll + Vercel preview (20 min)
**Slide 13.**
@@ -411,6 +448,45 @@ scroll storytelling. Kies GSAP voor timing-precisie + GPU-perf.
**Zeg:** "Zie je? Met goede AGENTS.md krijg je consistente output. Zonder zou de AI waarschijnlijk Framer Motion pakken of useEffect gebruiken. Schrijf je regels op, krijg je betrouwbare resultaten."
#### Stap 6 — Push naar feature-branch + Vercel preview (4 min)
**Pre-setup check:** repo is al gekoppeld aan Vercel (deed je vóór de les). Open Vercel dashboard naast OpenCode op je scherm.
**In de feature-hero Session:**
- Type in chat: `Commit deze wijzigingen en push naar de feature-hero branch.`
- Of typ zelf in ingebouwde terminal:
```bash
git add .
git commit -m "feat: SmoothScroll wrapper"
git push origin feature-hero
```
- Wacht 5-10 seconden
**Switch naar Vercel dashboard:**
- Refresh — zie je nieuwe deploy verschijnen voor `feature-hero` branch
- Status: "Building" → "Ready" (duurt ~30-60 sec)
- Klik op de deploy → toon **preview URL** (iets als `jouw-app-git-feature-hero-jij.vercel.app`)
**Open de preview URL:**
- Laat zien: ja, het werkt live
- Scroll erdoorheen — smooth scroll werkt
- "Deze URL is publiek, je kunt 'm nu doorsturen naar een designer of stakeholder."
**Vertel:**
"Zie wat hier gebeurde:
- Lokaal: ik bouwde een feature met OpenCode
- Push: één commando
- Vercel: automatische deploy, eigen URL voor deze branch
- Designer/PM: kan reviewen zonder Git of localhost
- Iedere nieuwe push naar deze branch overschrijft deze URL
En als ik nu een tweede worktree maak voor 'feature-gallery'? Krijgt die zijn eigen preview URL. Drie features parallel = drie live previews. Dat is professionele scroll-storytelling workflow."
**Optioneel — toon git workflow visueel:**
- Open GitHub in browser
- Toon de feature-hero branch op repo
- Toon Vercel comment in PR (als er een PR is) met preview URL
---
### Blok 6 — Pauze (15 min)

View File

@@ -10,15 +10,21 @@
## Doel
Bouw een **kleine scroll-animatie landing page** met OpenCode, gebruikmakend van AGENTS.md, opencode.json en worktrees. Deploy hem op Vercel.
Bouw **verder in de repo van de les**. Maak van je eerste sectie een complete kleine landing page met 3-4 secties. Deploy + previews lopen al via Vercel.
Dit is geen design-opdracht — focus is op de **workflow** en de **technologie**. Een simpele maar werkende site is genoeg.
> **Doorbouwen, niet herstarten.** Je werkt verder in dezelfde fork als in de les.
> AGENTS.md, opencode.json, Vercel — staat allemaal al. Je voegt secties toe.
---
## Voorbeeld-thema (kies zelf!)
## Vertrek vanuit je les-werk
Suggesties:
Je begint **niet opnieuw**. Open je laptop, ga naar je `scroll-demo` fork, en bouw verder.
### Thema kiezen (als nog niet gedaan)
Heb je in de les een type sectie gekozen? Bouw daaromheen je thema. Of kies nu:
- **Mini portfolio** (over jou — projects, contact)
- **Restaurant landing** (menu, story, reserveer)
- **Product launch** (features, prijs, signup)
@@ -31,24 +37,26 @@ Eigen idee mag ook — even checken met Tim als 't iets totaal anders is.
## Eisen (verplicht)
### Code
- [ ] Next.js 16 (App Router, TypeScript, Turbopack)
- [ ] Eigen **`AGENTS.md`** (mag onze als basis)
- [ ] Eigen **`opencode.json`** met permissions + (optioneel) plugin config
- [ ] **Minimaal 3 secties** met scroll-animaties
- [ ] **Minimaal 3 verschillende animatie-technieken** (bv. fade-in, parallax, SplitText, horizontaal, stagger)
- [ ] **Lenis** smooth scroll werkt (geen "harde" scroll)
- [ ] TailwindCSS voor styling
### Code (bouwt voort op les)
- [ ] **Doorgewerkt in dezelfde fork** als in de les (Next.js 16, TS, Tailwind)
- [ ] `AGENTS.md` aanwezig — uitgebreid waar nodig (regels die je tijdens werk leerde)
- [ ] `opencode.json` aanwezig (uit starter, mag aangepast)
- [ ] **Eerste sectie afgemaakt** (uit lesopdracht) + **2-3 extra secties** = totaal **3-4 scroll-secties**
- [ ] **Minimaal 3 verschillende animatie-technieken** (fade-in, parallax, SplitText, horizontaal, stagger)
- [ ] **Lenis** smooth scroll werkt
- [ ] Werkt zonder console-errors of hydration warnings
### Workflow
- [ ] **Minstens 2 worktrees** gebruikt (mag via plugin of handmatig)
- [ ] **Totaal minstens 2 worktrees gebruikt** (de lesopdracht-worktree telt mee)
- [ ] Elke feature-branch gepushed → Vercel preview URL bekeken
- [ ] Branches gemerged naar `main`
- [ ] Worktrees opgeruimd
- [ ] Worktrees opgeruimd na merge
- [ ] Code op GitHub gepushed
### Deployment
- [ ] **Vercel deploy** werkend, URL in README
### Deployment & previews
- [ ] **Vercel gekoppeld** aan repo (`vercel link` of via dashboard)
- [ ] **Production URL** werkt (deploy van `main`)
- [ ] **Minstens 2 preview URLs** (van twee feature-branches) — Vercel maakt deze automatisch bij elke push
- [ ] Geen broken pages / 500's
### Documentatie
@@ -57,6 +65,7 @@ Eigen idee mag ook — even checken met Tim als 't iets totaal anders is.
- Welke regels heb je later toegevoegd aan AGENTS.md (en waarom)?
- Hoe heb je worktrees georganiseerd?
- Wat zou je anders doen volgende keer?
- **Screenshots van minstens 2 preview URLs** (Vercel dashboard view + browser view)
- Screenshot van `git worktree list` tijdens het werk
- Max 400 woorden — concreet, geen fluff
@@ -76,13 +85,15 @@ Eigen idee mag ook — even checken met Tim als 't iets totaal anders is.
## Tijd-indicatie
- Setup (Next.js + deps + AGENTS.md + opencode.json): 30 min
- 3 scroll-secties bouwen via opencode (3× ~30 min): ~90 min
- Polish + responsiveness: 30 min
- Deploy op Vercel: 15 min
Setup is al klaar (gedaan in de les). Je begint bij sectie 2.
- Sectie 1 afmaken (als niet klaar in les): 15-30 min
- 2 extra secties bouwen via opencode (2× ~30 min): ~60 min
- Polish + responsiveness: 20 min
- Vercel previews checken + screenshots: 10 min
- `WORKFLOW.md`: 15 min
**Totaal: ~3 uur.** Loop je vast? Vraag in Brightspace of plan een korte 1-op-1 met Tim.
**Totaal: ~2 uur.** Loop je vast? Vraag in Brightspace of plan een korte 1-op-1 met Tim.
---
@@ -114,11 +125,12 @@ Eigen idee mag ook — even checken met Tim als 't iets totaal anders is.
## Inleveren
1. **GitHub repo** — push alle code naar `main`
2. **Vercel deploy URL** in README van je repo
3. **`WORKFLOW.md`** in root
2. **Vercel production URL** in README van je repo
3. **`WORKFLOW.md`** in root met preview URL screenshots
4. **Brightspace inlevering**:
- GitHub URL
- Vercel URL
- Production URL
- Minstens **2 preview URLs** (van feature-branches)
- Korte note (1-2 zinnen): wat is je trots-punt?
---

View File

@@ -2,7 +2,7 @@
%<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
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R
>>
endobj
2 0 obj
@@ -17,6 +17,11 @@ endobj
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 <<
@@ -25,14 +30,9 @@ endobj
/Type /Page
>>
endobj
5 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
@@ -72,42 +72,42 @@ endobj
endobj
11 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518122502+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518122502+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518125917+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518125917+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 2 Huiswerk) /Trapped /False
>>
endobj
12 0 obj
<<
/Count 4 /Kids [ 4 0 R 7 0 R 8 0 R 9 0 R ] /Type /Pages
/Count 4 /Kids [ 5 0 R 7 0 R 8 0 R 9 0 R ] /Type /Pages
>>
endobj
13 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1631
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1980
>>
stream
GauHL939k-']/^ggg+VAW0[@EB@iG>3FtfU;n?Dt3_CT*>HTQql+`i@^Crp>9Gs"W+BeR/rU(UQf_D36B:K%9T>K=r$C&AK%b)dW9[D[BCAkFDo3(!t5TFZ'+Ti?<jp-ctQ%A*35@bo@D?kh"0"@Dac9i'Mmf`_$TF`f,@o4A"D[5&$_Pu^>s5&0Zpl(n[Q[$4dDVf=)j$p_DpoS_<B(JJG4@*1L4f[NTRsKVjdhE9U?X0/<8$rn>]MpA3n%')#;StA%!PCKUHrlW>e7&VPi`7<S:IV-f_t4/1DiCb0^?^GCQ3ZaNkFr(`+"LLNM.5#NIYegqMh$h,^7n=`+J6'!q@4f;kW.jbSHcQN]U)f>i&+QD+i-T<R-g@j,O>6^@DgfSf]j9;3lL_SC@2RY5&gWB6B=TMfUV5\ofKE9HCS*>Y^XV6d-O&#CtYaVJtMH+p<2f3$sH:3h+T6[bX(Y*6cH$WL8-X**-^NfU_E5PG8:aZgE%HHZ`lUC$gW!FpO:M2ms"+!boVQ:BC5uJ,9E\O%`DVh4;q\3F=Cg.9d[M95oIC.((;bFB$2TS0uI_`0F%YYdC+[H'Z"qMG%&%T!-O-kFbt'\_M0=He0ojGmo=K82ZeY;L^_G9:e>[EAMT7P'Tb`99P+[RUP3qL9+X<A<<fd?I%\f0cXm'+?^=t^mL4^$fsTtD05]Nn)\JMh8?-s=(DMf\6cE08"f^hJ_,[l=HVNb0<Zq[2Z,+0,F<18KMR5"]#)>F$`'p7'BmfD0Q$jrp:jJ`)m\%G`B2LZ%d4CEJGaumi!]HEN.94/W^o^3_R.6LG;s(Yd*2cAuZV20M<lHDo5?((NMX/m+Ld$a[=dEG`'I):akd,N*9)Z$k$/[D^i@h\R74aUFn`/X"e&hF)&!G6+ao8lF6_Ck02G1uo[V[;XDucqCGMrJ!E-[>1GBFXB+U-I.gB%WeI+o.pnurAS3Q%p9_sa^5%iVO/.OC5_m6!r3S2H-6f\7Ne0mHtL"kL^/-=\BGQ:XW$L5T;I*u%3&OXO:7jV(aPT1(&-BsbauK\Io-GGiKRVr,j"P>;&YL"BeH7W(h`!Qr#Q`<t'kPQ[->7/_k:83u@>f?#)P)''=H6FNRI:`e9oN@Qm-&sYsmAtkNJlqlfM,3gP^\VdH9*'p-WDQV6H&-k])H(s`\rD(?5e9L_JCFhT99%61bbo6eG9n/=?/eYO2'GY":TLnb3I&5>e;)_E_Z%m<=mesCM1r\XU&BX98UQ;-Njb)RiL<+Tn'#/WXjO!SHI5TkfVlj_F4K'N#-I"g)agr#871S&f3WI/o6EUYY=,BoNr-s-fYXH?fWgYoi$[!\'>tuMCR>taiUFu.8dscTASZF40^D*N)WZoT-<una%!(VcY!i8r:mg79rV'p58f[Z/[W6)e:ohO'OWIJVc/FosLGe&P%>XZ.i\eB1t]YQ7"=K6`rmpRJdH/>*n-h@80ZFO]HVB`_W*!+c=E1MBE$g[nJ@3%#?X@e.crPFMV]04L>7ftl3s,#6n-qfBe*"+USB"^@mQ_I:i(kP"_WlS.N1.o\@(3je9@=G^^:Z"?'*S5f0aI+a,A-#<1rt@)("*@4qXefps;jd\:#-Y6E$=/6a3f4QcS44l8\(PRR@/UJlcQC[~>endstream
GauHLfll+.&:N_CbY(a&<(7.4moq[tDOib,'^*Fg0Ek%T8:oeETChG2+MgdAAN+>i,FT<#1O!g$c7fr+r1WdrQiOdf_M^2WPehGOe0[(I0Au6IphgZ*1=(,o=MAJQ$qOd*Iul=B'HEIL!=L=NVFQ$[#2?&opB)KSmdiR+5qZREgn6npfCXG0Lef&CGIR9M`+9?_gVe*f?us)CcWB'/`7<7DR*@9&_\H.'lE"/I0ra1n0MUKdj5oqo]U'"'KM*b(pfcf(>aB?HQj5:j:L=l+<0UhrDo>ht1.t#=5(i)?9V3hB"8fMA+B[M?gV4:'0R-qn`P'>oNS.*T&Z$K2^s6T:Bkte$3`+G&`![Omcf/?L%2\abL@$uqQ;*2*-6UNSeMi-I]=u8\HP]#D]:m^uVW1L\[t!NQbG,)[egLur<LpJa8SAOHNXbBWHXc^"bhcK9Ql&;OT6e2bW2I^&@qjjU'C,J=6L5,[@b%:E0cN=f41!;0jnV:1bTj!'3e!-\"aX23XF$\GG;gQ9mYTV$1OEd7)7qZd&;O/Up:tL]*#`4eZmDSuRS%gEL-AjB/4_=hX(B(SXDmH-bQ8;B1efV?0XrHI9B1!me.P&_M6IJY%7n:5$373BP1;^s76VAF6n-mtLdc<PMbHI[Gn*0:&BZ8V7>YCAF;C\\aS8(a=>]6e;ken51L/:l^LOTf_0<eu^M`Xq_4!4megXn:ha@js(<"l'NqERtVN@c&CEp5lSm:m;T;/'7;$G#mQ',Woe$8:q"`!DL"Nu9-LeBjd8=dT7:lb4Q!G.<'++V5P-UE#&pahG'nM$,9*Gck/Q845`J@1=P,+[9.L7>c7XJV$'dk[8r.P)eFYH,<tq9?655bE`$4H5I8\O_b]qBVU"U@N_T$X^(ii"*=5Gpm-MoBl,6n$@qqD^:`fq>S#=6W^c-p.a\Ee85n;^Au6U?*HIP>eS%1pU)F'OFZ^&=q;d20=q\IIaArp37<bKiHEnWk74@l,t5I*cb2ih)L*6i<RqeRg-4&>,LMr_46[:QUt8FR>-4E4?N6"ddq`/t-NlVP^8`!Bi!PUAE'PR]*f^AIL"2cTFVbZfJoth;+A\GS"[V+h@eg+e4j1f*'))R&%&#O"_`HeG).[Z+qROfl-KhjBJQ!2Gr&.Tc_@j^Fb1(O3)F!k&[qkb]Mfp,a+#eRZ\c"*`*Ai8G2Ka5D+ks[BD"X?Ar&_j1G_riIHE>It9P#YPXT?0pon)>TXQ'^t$/_=ACA`fQY_@c6B&K.L@;Li3G&.dJbgX8]*JAp"2bcY(\mZbI.,.$E*$PSTA%HgOB><H7b\rVj,+Ut;+Us`p3BSr`g+gh.A?.cW!VQF)TI,F,L4&qi`,fJS>iK;<j$Jqh<ht';md8'Z(DMr;-o-Ks-HKI90`nI6[?+i3]YpqW83#%WpG>eYf2=.lc0k^+.CMgX=,eccqe=c7&S!Vtl`Q,fG1P=`V"Vb^&A@No<;E1p?k2HO.^rBP5":t!V7PPbM+^j_.SQG!17Q(22a\HHdYk5NE=q=gN_a:3OdgOZF.E<"]'Y9drAr:kB#,ngZq9rQFak(+WMg:,;a4P31LLq@ePbbMMI`\k1b;sh)<^78cJ'c]1[-$VUFX]HG02q55J'#Q%J@BI6/j<M]E,CRp2boSilHm'N?FF13L=`mI>0[.&e>K?ACXXaQHM?@W+(A'+t\(B*lss<(i+Uarmo[GnQuS:OXfNr,eDh!a8le$eHFDlk!(2k_hH1`fKBa3n&O?n&&%Z/8Ec\7+V\otBt2q!HS0PG+l!AFHZY%0,$LdBFqAj^2#hmWXfk7SIP'$Z)N<5!o)`l%eo+5ln3n]!$6("[%[UX*`BkUD6G71U5'cid-K%Jjc_<0070,No+Q<,gPe1(ZD-fu1-UETc&g];m:e#Y>?uI]pUVZA\D]*I<I#3Gg-?'%J$]n9d-^m(S^k2qpGZD*71eR$ViqF'^h,V3Cl^7b1^iCDHMTsEK`kRuQj\>~>endstream
endobj
14 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1724
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2005
>>
stream
Gb"/'>BA7S&:XAWfXFeHe6);?]UUEI-prPQ)sBq$<*QW`.$B^XQLa@fg5b!r\M.I;\9*HPPGGLkg2AX:G"'3_(MQ's3P`fm]Qceo:`)uZGd[k;;`Gh&h^k6$2"Z1"h8jSG$?kdeJ"SSjJfiW29Oe-d'A?=IJJSn[MW+miXp[T0K'"b8D@s+j^^24rm"kF&'WeE\m=8*ig9^`#L``d,l5/"9`HJK8%b5CQ-k'aM-)b.Mle)d<6Qa<h3;E:5lT7(')6]3..03e7k"0Gu6>6]qmgbDYWi->%iAJC46BuUEbqg2D_>&;hf8=t%N=ft@hNr`7/"gje.&n5hB<Bg9=]S&tF@FJfZtUm9TM%^@-aI%0$.0PN%;r^iR)nq%07^T%ICoI2NsU`![c;V[ar$,(ZTO_1!F6`9]/b_uO5UT^&Q4PPLCgU-qp<N08NWhOTGpEu_="e:#X0PY&"R$ge*iH%cCG^Ps65eR0(*/L+A])oC1=2l[B>#LVN.2oGQU$2L<#1pLh"ni:_sD[FX'+c>Xhcl@[#Be&&23,#EAZ6VX*e9CAT9r\@j9i\>ZoR,N4n[q3EGm_po:14po#,:@l!M^4t!N:]&B&ejh\:[;0s(cAJo@j]]>%;_,4HpO`bY_g=GIC5H9h$2SI\1MGZMUm(](5P"9_^8bp(:(E<,'$f"DE'8gCD9:*;?'GPC0D)(j=YcI/gStS>--h$c]?SnQ[W:etY#qKCIYQ-djPT?PE:il!j7qE$Voo>$dK;>KS7SAS%h;94E643%g=Rib,4&'fgF]qVDo(KoV_Vqh2/s@,9YkqA&IgXc't_0Y(F,rCb6/Ic_b%s-jE#43jEb,TTds:50E<.rK,L?:CV'W2-3JWDA2.^j+TJhjXZ#1@'!6gHAG,#4dUpjT0HB:oY?qN_br)*EKb.LdQl&JDLB`fW=n!;9GQ6`3b#3[ja:XY11EkEF&Y,2^0OnXd&`cP#5EmuQIoPT+Q>o']Nk[AMg]7_igM9T[ST7l7#=gXQb2gb@J@[Kj4(-J;H1c'Y]oJ40/&Y.*doY_qE35?o(Z($9B"LkK#jRa1^#_e*$$):Dr/b]rF9QCdq/*,dg6I=1VBo\V:[?=;'^7,?T4/sM(Kc.oaoMlB3a=srU%E.NeBQ<s9$`F-5hN-7HlC$.2Jf[:]5Gt6f["Co*A`/D(WFTLl`3o7YU+(jMoi=i9X6$6r#9FIQ^Z#Aa6kbDF07=c?mT<o/"4,r&p%*pVbR++SWc@)G\AafAJP/3=heh\&IH*%bfSiW]iQhdS?G<6b42&:gA((7+o+DqhAqX;?h70ogBTZ7)en.<8KS=enbcnXrLQ.OQ0X)28/l'?&U[m5@WO5T05%38.`9s0dH_=`:RN&gEpusWKS;!OL4&^sI)l%uO7LW9<,&L2s%pUpeDLd,%4YN1`)*q\5J(6F;;3]Ap<LC1:M9.RS:8'%FD$<lVKo-N2)^lq4iH5^;kbWh&k=I`lp4U3EEfhhJ\oBb6`JVK1f`:HUUr;#dslhQ>Gtm1VKp0M"Za>N.h7.KY/)M+]Z-!H(mE<RDdp9%lb8XX0db4i_1.D5@o)kIMKc#r7K_s6V)'GQ,Iu[qhoBCRp@U'pn3\dBJCkTV>sYL;IFh)%c+Vj?1%'YgHPI,3];5$$]dBd"M<^PO[I,Fn9^c0s7:k&[c4j>oh/)6/1o^G<.uY#*4*D,E,$$bl:6\/gg.#\-ToEP\Z'\:q<#f<E#COFtk5~>endstream
Gb"/(968fX&AI`dqQu.o;"U(+Wi`C6j2@p>SgNu]b9/ZOCe6u`"!mm=gS5Q%0F9b$:_dIB*bfr3^Zk"^\n-Fa0<9J]14X")Gk/]QbD+sY/D"iLGR<QNcKC3rqf^nD?oXkE$u@U%NrB'IFE6ku_]RM5$UQX'_S?=6[#?[YKOE9A+Ktp/#a7b!$]Mk[K?scHZogSF\)oc,DqhY+CO!QXfUQ=7(M`UIL0n^dC0&(pN:*obUKXXWCRCD(GVI@7qr[:D=)];q/>B*T.=>)-UT&j-D$TS&<W?c1n3UOlcZ+N8Qt;Yc1Dnuan<%$m9top%aOi2V0E2XmYi0':M^?O#9'eX*n=5'C-KdO#g'I9:>1(+o%EC1*g5EXpG8pZ2FBm_r+m[dP;13<%dZ,=bVWihN@s1u3jVh1XgZp(jF&1;"a68Er>*]rS%["<I^k5[r@o`91$8_hs.G0#D3u2,0<Ys"]OP-cLFj-*d.K.^F=\iq[=L1-T9KT(HkuY:c:L7_l.@o'L_V.0([`gK941&f//<]=P?<D*5[C.`C<Pc?D\L-2ejUVcH>J=klSi%Y*]dNiM(RS9qn?7W[7bt>:0,6$kO:&o7;Ck:M%ld)F`Em5ecLJGTQBrPmZt6(7G'dVdq'#!3<cduEe=$gL^=KkP[1ZY4JaUSdJpTP]CIt#]=gXHp`O7'nE`R2e_!4uJd!\Yk,cHc_!hMc<GF2,2X,2qIjf0gU]>2jh\k+,:E5'.Ab.&m6CO.\IU-HZH--tT\:uC/_K`F(N.a;-%K(AQqq4$?.Oi?&\Y^D:O4K5u.c;fI+M*-M=@hNeolUtN?#ng2l8%:i]r$KFrJ2/aRLbcu`!)X_#)F2PN#6H/_Qq)7oB_+[,#G`sq"GL;_U$P(b&q)@J)(X3C#X&-3&2\/C#f/Mn8lnhsUhH7N,f,GE>I=W(K`R_\0oI?QN&NeMa&([E8FG2[#O!j5<XUIejSTHZ.)s];WD;?),*F-Eqs/<I"7(W\"1D@u5[[sjS7gPP#8Vu42!&G/3Q2u8a2u'0,3"]*]Z"a>)g*MZ`]h^q0Op9B.JqPGX'*TqOPoNB<(MHcEXcPT4(aYK*8.3uf,O*%`c:mr_Y>G>I+r:k9F*MX]q^NNC7gna['Ei72.<D!lb;_P8Ei5LGp-)PUQe(\+=8f@8dA"/O])gW3R<oV"7Ub,Od>fgRS.B>oUGUrOndVM,C\7_@j\0WIZ*<uDX.Q5Oh;>uf#&tUA3?cCQ0To68YAoU73#(OQT<rk[ORTpA?C;:#8F$B1>L2aIRXB'0UeN0[mY;"WO]tH=L(&X&fe6'0r6)$`l$WZa7fE?V!9K"$"\c=bTnf#0&biG9,LT^C3%fQA7KDAo/nOS.6StEWYAp`2:J[)E#O5J(uJuiccDaa]#/Z;-H(j6_45/l<%*_ijeQ$[^/XF4jQ^2<DE[pp;l"15#(8PIF6$2>UiX0gq&F%Hpo59Nn-?V,,$=B;K]tI&lP9_:bS-rBl<p4AXdI?eh:Vu4M).G3E\e=\WjsS)\,.O@<Yq8lb_kXe0Y+qonnTP,SN+<H,+_:NoqmDOAT$$udS*")(G#j!#P5sh]Ml#Q?E]19)BIJ5c:2*!Lg&db%FJJ'l=@32'"[5%.N$2'##K@V*PbH2,F)iq=:4%W<2:n+EM%boRXZAT[b1c;-m)7_c:Q(#8a[13P)/6],O's/[iXGRp:&mtn7fRbqr,:+QZ''OFaJBKjnhp]?1Or/*]t'P>1??p<kA5":C@XYa]/>(,+GR3ThU(J&qTR;^KAPVLCC6\p/;ss^4"-<8l1*D(\AK0=hfAA5iE[RZL'<NdFg_TIn#@S5k?W32HI$U#)#ZP:1k4$hYfTg@fMlG\.`q#+Nn8Z"iQ#$D^!Q)ln.+XNVcC3!A\g5dB;TM<7&b:`$5(r)H,&?QBoBtU9=qURi&e3e]S$U$.6&LSW":I4.0d!<U9NmI^.]ACS'Q\;3djDPW@B3p4Wj#P:RJ)DK9V?EfH4HdF"ks8NNJ;*oLSUq&b7^j<X~>endstream
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1334
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1415
>>
stream
GauHK9j?@A&AJ$CbgB#B79Y,AEbHOcJ>@==J4_H.#\blo.r1DUaj;+(m@BMQ@r,Z,Zk"!-fJE!?]^ohV/:?*pmplWA'#Dt`%5roR%(8f6Lk]jeomZN=okE?15TFAr+U&K>jpP/>/&:b5+4AL?Ad*hk0"B+PN.hZgl32_ZJDr83hm7k:^(i=<#dZ[dq&B/?nL6oU0(F<R>hAHBA&c3DpmlWmB)@Qq-t.<c/Q!OT=LK#j&C$ktEI%Er^;u9!A0PRpIoM:QP6sdD#&sK_E3-Io'i3dETCZ<R1L=&L+IYXhhUl#JGF]:tA\iHc+kK!<9.fd!=+@Z_=)fRE(n;>2Doh/EaJYT(!VHcj//NB4S+7:I/F\YTUGHG_iIs0]l^u7mehHC4Z4aJ$4<M7`Aq&9],u\,@<ueH5[p*oJ=]eC$ct-'*oGQ;iFdUYGdchOSFa@R'_2DV\2XtUQfh]UG&R1bQ>XH&@PsPFLA@qnJh[SR]Ok$A>qN19Q.)a3s*//F-JB&mtaC6^+,?aR]OXWM@d5qOLm@-tWY]V&j^ONfrc./>bNSl>/kE6d97fBqZ!=ZX#%oiUN.2C@oTTXpaXuN44d5u*"6#^61rYHUk[LVBWr9!b]icH4X#u<d'E&!JIr/L6e3<u*'RHH9a'pMf55FE>Q]+6%)E)YnnMNFXr?!YEPee,Nb(sd[n@MZB^,j&%-.li5*08,('FQa0[pd</g0S>LgVI";Gaq'Tb.Q.VqMo/tAa2,XDJK,(e2Q8%/egC2jnW!<nL<r8-+O75U>a'O]'"oN'qM)nM^2>i8o<cMDJ=/5C`-&+RSi$9!#_1>W'd%Ln#HCcBZq<FOre@cLFec3I%Pi<[19Y\'DhO,EJeHOX8'%\8hpsnmmW6_Os7U^`VWg>[WCX88q#4:]>40/3>o5_Kj^oI)`PoB"*X`jeX=Z1Q1j>Glld),&kjJZbkUUUX[MP:uNi>$Rkk\/_OpN4;A^*qnS5`rM.P>&;"J#P=<TJ;%E,Mi%\AE)c@G4bHek`;bLN0@X-uX?1Qe6Br\7ir_is&,$BqC@2:G8F]1/%0+p.Tb_JQr*=0HCO5U=_*b"85P9eEsu$`^q<BXM'hj4ncs%`3?b,p=S\m*lFQB]V(CuP.ApQ%)r\tgcGRaNGH5J7&R[Z,-5l2oU2&Vr6(&e>HSU1mt'o6Ci:,3fZ8HT]`.;7Gkp0+A)![/"s7_Q2nf,>r_.[WArJe'ZkP_Z3R)1aL2@@Nk<7h@rN[qd:N^RSc/IgHOlV0ZEEqBW@puu7^m5$,&(*pKEL_N37gJ<_Oc:5>PfWff_`ZN#06!uO3&>dPM)$S_QZ9mag15im59UqYmJ~>endstream
GauHK>Bf'r%"@A@k`O[R'75*GmmDH-gV#L^Z3edin1rVtL,C#r`[3]oaD\80JZqD4CjUcE*'hq"IF:Zl$P$H[o:@K5h@/B0]aHHJi<3DXq(TI3GJi9E4iTi1q#N0F3*sg[`ErKC1[X98KIi(-m"01#-6aOZiA)Qc!M&eVaGmtX9O@Et?r?,U_?VFC+;Edp^;iRc$/0#X(rk>,SU[AW04nYU*P'ieaV[UZ>u5=;T$JB8L]SDGT`<'om3h\-VeD9^ef"Bg)GF`hN&ZmVr6sTZ>%L?#iE'8nVMbW?jU2pN@JI.Jg9C$m0a0)%n*OJT"V)V)AadunCX$2-WQHN3)g8q,V^k+Xmi7=3a@+t]P`*GDDg:5+=Q?!d-e92BGa#N6)kC%G7X\R,9';#`kf%c8RguNf$=^a.JCFGP_DPo`1hFMT7Bt8Wi4@3J:A\h)>GJ=L,<(LOo[7e`i4?dR"P^?:g3L'KGkX$nkeC%pbe[??JXimKqA<9U;Oj[jNP*%_,c>[-3+Ifj-Ydt)$d99Tin9OP$(tt(NIhnrM%'=]p'N@>-(:C_98uT(2*n#:GfbI;0Ccc8@&^PbWYgtHONJ1ZeVQFc9*1h$lhA0`YeiG`LCZ?,=!5tgbS*ZWmr1#17f?'Ob7)367V<SiY_7U#ihuX.CA\G2"E')jPsZapq:CpQ3phaZ:J;<`+#,:I'8_!=fhsK]!cqqHD&meT*kX/QW4F^XC$I!3;nR^h19sq?=<*oW4q:Uq-ZX1"VR(<?.pFB.)r-;MB8@QP#@p<siRc11.^951k0M["q2b3gCJ66>$aA!#$>J;L!g=tG45l7sKu"'64#!ebTN+%?pLiiP5Lpb-iLlB].'e`MohO/H0,QQRG(a[Xn7Be,ofNb:s)4J>eN=kN4B2\.1457=7r6mO2R1l-mNpTcT'.+EWrf4'a:,do;Ar1('N6HMZ'Z_G82Ge4B7quP=XB$WS0glqY0kO<I*qH%^LS[pp&'f/E^5#RQHAu,a\^g^O^W7CAU:TZfkJFa;8X"G!P?'*C6p$&WEHe,p<'e*\r_@Uc,P$(X=mS1lA7[SMeJM*?IoN+lJ5O-1s8NAWXYflKeGUim^2<J9q-2?jCBFK2:Fg&(32hWZ)nuqR&4&I3S,-jK7W4$6KS++6_G*!bAeFfV3,'2=W$JiNo66r_J348K%Lre#S4cU;'U4[1M(2Urp.j#6W$]*5\lEGFNXM(!Yp#5FGhK^%&gWf(#E(aAsh)$2B)m1DJ-OCL=_i6&)tQfbh(&(hqh^FIV"FZDen*?54125A\C:bTBS6%0inYKd6Zo:O68BEH\.89>^ttB!:JDcFn&T2p"'UiSo19/,adbM6/=$a$\Zf/i8h=2e>8D_CO"c6<JKm_r<l>PIZCXs[ep;HNKho'U>M>a8[*nBE4ajjmiTA1R=G~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1876
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1916
>>
stream
Gatm;=``=U&:W67fU%Pf___DNSa!M)i](YCUQ,u%p][C"$8Mo9+D'+!oj**D7+#K*]!8>h_o9+Z[n?cT^52_]$\6\\*5<db.#`(ppl5mF$TK)d^5j6Pd`;s7nRC*C-od&rr]k*@#smd.#u(]DDWJ`u%t73B3)3qUGV4kE"Id6QM\,t;$Jd-(_21_p`o2RASeG"ZWdQ6#_k_drYqJ#t,u3)pLM#-;#_itfEGCKuq2S+"."H:<LEAa/HOoRE`liJ$<"<7cc-of!f9AaDo)@jK/4E_3.D4V`4BIGmbN_*Hk:h?nFER)$00s72BH-u'QU'Nc;Nr]7Den"O//+1thnf*rA(h!<ZnXD3Tb@[6O1G&[OE[dF+Z+M+hdY)O>c:BNi@.i#:O+R'[\^F5GTEKnV2nP+nJik6-G`3NY0F(o2)5;qm>u<#PB7?3hsIBshN.%#:I1lG?K>Xp>C1mqSUPJ8qE(8%K1gE7\]2%:J/NQJUXH"O3b8m)F^845YI1==(<^0[MVHXint28Sij'fq>00eoJRhk1M'@l:]nA/k.aO0C'EtN?042O9f@Y-gcafR_pEbG!)c$fi]>q-5k\`E1)L,<@jS\B)pkr'EJMF^p5=>]/+]U;JS7@0n$CU#d>g;\t8tMbOf?a2*DLfj%Asug&[GWf?;sqk&-)!S@$a'kg<2*oK]Z?Gls8-mq:rBm"RUA;bM>SV.bH-rB7J]?janS7W`NA\$LHmni0W%-,a@$3Bb4^29J.HCUM7rqKl]gQdjbmC"K4285Ebpl-K7gs*S_U8AQ[c`_piL)Q[n`?n,*'C_e35`!$lr7+eX8Ni1kT/8S-.AHkn9"bG!FMZUmS_.dh3P)gnW-K;\sR+a/WT"hZMD>h<g"9K)Pl0o8uE"R!Qil'PF:UVe:tD%%$-%-\0a9C5WO(R*-J`=Jjt9AGjAi4?j5_fC'K2_R4n3##P?oa,XMf*R^*I4a+Q=I&aEe3W'6C9*\4W>aF%,H%g+O@3Xi1Xi1-lk8D$EL'sNfn[,PL,`_1[8`/URKVuXii;;`kKO_b_`?ps_SF.,f\QG4^"&BZ_58u'g"6E%_7g*-,mafhGF_1XYU(^kW6JfEJ0IQi(L7"1,!csL`H1RRcYi`F,53H+b'Yaa7E#Y5Ae$\nH0S?DB+@j`dD>&CpP"6c8p^&QPVG];SYNs#e\Z.#JT?MWqA.r0V.&i6i<n`CG)nJeRSO(1:32GCCqVO=iUquXagdZ0]@4MHOI_-;]H=X'&&esN=W1\F(<ZHt'+Y.&nDkT*)#c:?TAfk?Kfs%1Kb$_QW?FgUb:;fD;At"1k%r0)c*'0>eY:\!u-Cbt"97*io8#)tO+!W,d%kB`OC?PtqdbmDS7Z`$5mYb"C'#BOg2gpL_2,3*D=E'gNa;Il8PfO@EUfsFn(nOgE0LWuSl&;UIO*&47.+(NkC5ILHYk45)ROAqDUIhS9Xlfr"O[&')/5(G8F(8t+A-L8nS:%d(ffk?mp5[PoHWIGkZ0!U>qHtE@h\D/7gtdLGpG,141b20Sm5&(V(9tLbF.CE(-6=:3:>R$C'fR?Im]O7M1N/73fG&P_`^Za@R,NQDg0$s#r0]FMice#`@[05GoE[X&KS_WYLbt"?!rmHrIkPkjY0^A\f"b0YihW@Cd>])4p`D*\f9UTJS.$(;mkt\=Xepkm*I_u)9mh1<WcuVmp>&';>J9:b3kpSa3<M&XlFN3lRjj^A%N;M&5K.@5#cIX!3PA_W?S=&R\;iB2o'GG^LGN/UF1qt-DO9T`ES5\lbOfL$GF#gGc>'bpf(Ikr.Gjl]nEt#9SSF;3WY.</$+TEgp0##fk:b0r4!sl*bB!;8nf'T`n3]a'57^er!p"OKHDM@ni`"KJ#6Q4UUON9L,Y1Q~>endstream
Gatm;>?BQ=&:Vs/R$Sk-!Fs7G4_N(n[$8!l02'db_MdCZ8&:Khfh%M/qAm\$ie4gM]-TC`4Sn4>c'X$>04M]F!oSG3VlpC<$H"qJ^>m-#$8.'cDZbcL2"C`f]\)li$;TTK5LA(K64c1d65'F*)`_p!K-(aSNft;.Sr4d*J`^qG@R._c68sdME+0H5EVSb1kCf(oC>T?70\JYIfG>Lu&gqLs6Sn$eJtW<]S6DV4^>kA!$=HuOiJ3J$hng=tnM6X`Q,Aq\o5mmH/Ys&L]feA+92S`;%'TGXkA"%:=ZqQ!'S\9"Xq&27-0T.bD;npm&h(D\MfQr4I1?(1AO80A4#h_"9O"0O2MO[XFQ1+/0c*%aH,g7.6DO;I2+Gj1L"`=CSo^b#R--eJ)f!!B<tPdEqD?/(cVY=X'7>Dsg>&,u,=CtQ%N-WK8bZWi[lkJGqiQ=,B99+)(HL15efNa_Vk4p<r_BBbi6n0&Y&J5&@)cL,W3g8l:0E68?.TkQ9._Wr`OtE6i\pJ3r27*,\EjL5<jG^t+R.KLU<$eg7o6'djnT4HU0s8EjY8<r`h!ihcK,nWbo'L5GZ+&.4bg((GKZ]2^p=)TQPU`uT:KF"N6*CG/i#D<<68*\NX^FcA=>T!1O1r/H&=N952W9K!@GLKBjq7qN6>1[\MGh&KEAR+\1Rn^M3?ub/>$GPn'ffPp$6X6JpB!pnrkm]ZW-cBkmJ@Vj!-]'pVtDF!pOO>Qj+]W',BRXg[AhYhQ&ddpAS-r;kCmocZ8[YL>i!MYsiO?p&YJAEc4-Js7Q6Rj,M1;.V6&G3;P[5qp[GVZqlZ_BCZ\_%">0r%U<eG9/qXI_cUE2@d97Q94Z7eO#CoP?.>hnWf"'/%oea8[j,JjqAk$^",FfLooP"Zc:lPZcPX21XtL#T!6Z,-(2L30QT9H%9YYYipkeHaIM`p)h^oCn.fhF7TRLg?*PWXWUa;^\m!Mh/=CHi'p`73r#L8U)Qe:PJKl+Y7,c4Bi`Uo2R).,)8"]"N2>$D[Ra*".fgZ8$\Vnl!`gYgb@A%t=K7[R_VmM2P.R$g)>:DMGF)_)X+j[ZgN"C;N)`mWjhAcW+1'4/mLhS&P8-iP$=R$4WRF-5I-o:%\Ck'qStcF&0OrWXe02DXs7C[Fi)!]Mbt%\=Qlh"D%I,)L!k-b*!@8m)\;Xp6?:Wh(?fAA0oef!-NUP3R:0Un,$(U$HgT)+4mb6g>\#qc@Eb1jHaMD<,"<[PBQ*pN(nb8%+j26#hpC$C[;q`K<\1Z81#,(4'8;@-V9>p>N-A%;X\$$oZ;oV<af56jscBVWl/!TOoajTi3u@daCg#_O9r,[.i9p1jWp/+_%2EYdB%`L*#;&%3F#/"PHl8^,SS.&PQ;U[gd>`U1mj6$a)8q3C=./')A5P<&:lr_fH4p6\MP*:7*N?Ofl2.-2K#UbqY;9QJODc'?*XZ1o[mdp&#pknd!nto9*J9h3f0:=b4cBB:j!b2@lRI]jnGJR?_T3W]<_QD6OQKT*iU[mV]h_#FV;`RMDZep)1&;Mca;B.F.$$'9<\U-Z9K\MOP1_Md%k,bX^\&2TB%2Yn8Dh-9*-*Fqt]!IqDEWpd44NXO9at*l3Vl0_'GqO[d_ji;]tADe4sT'maB+l<28$'Qhhg\T),pR/SI+rKX3b-7Ac1m(:LE:TN_7>_aEVm3Y$0'\/]K#lAM:<it5#FIh=B]UXM?%Wu&LZcs1XoEQs+$c"E7RQeRPi9-VJ.X\,DGb3W#j3.,G,PQ1q?!j,8H@K@]H-4`)g?l?C9AK64i3rB$DKcl.?-[2]Wd8+)Hm/:5"JrHtPs95Yr"@W[VmsHV%`Wj$5M%*K<$eh,;KUahmF-;-$GSmU%d<`Y<d>Ye4mGK@T;'C5L$q?#UrS*6WrV>!Pd`7b<Z5I+_^DrY%XJBl#6+`5@9j$~>endstream
endobj
xref
0 17
@@ -116,22 +116,22 @@ xref
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000546 00000 n
0000000661 00000 n
0000000766 00000 n
0000000971 00000 n
0000001176 00000 n
0000001381 00000 n
0000001451 00000 n
0000001743 00000 n
0000001821 00000 n
0000003544 00000 n
0000005360 00000 n
0000006786 00000 n
0000000446 00000 n
0000000651 00000 n
0000000728 00000 n
0000000933 00000 n
0000001138 00000 n
0000001343 00000 n
0000001413 00000 n
0000001705 00000 n
0000001783 00000 n
0000003855 00000 n
0000005952 00000 n
0000007459 00000 n
trailer
<<
/ID
[<51c9ef4a08589d21f13f527085c33787><51c9ef4a08589d21f13f527085c33787>]
[<095815a8cc0df89fff07917977950c37><095815a8cc0df89fff07917977950c37>]
% ReportLab generated PDF document -- digest (opensource)
/Info 11 0 R
@@ -139,5 +139,5 @@ trailer
/Size 17
>>
startxref
8754
9467
%%EOF

View File

@@ -3,8 +3,8 @@
**Vak:** AI-Assisted Development
**Opleiding:** NOVI Hogeschool Utrecht
**Duur:** 35 minuten (in de les)
**Inleveren:** niet — je code uit deze opdracht is je basis voor het huiswerk
**Duur:** 28 minuten (in de les)
**Inleveren:** preview URL in chat — code is basis voor het huiswerk
---
@@ -19,6 +19,10 @@ Bouw één scroll-animatie sectie in een Next.js 16 project, met:
Het hoeft niet groot — een werkende sectie van 1-2 schermen is genoeg.
> **Belangrijk:** dit project is **jouw repo** vanaf nu. In het huiswerk
> bouw je in deze zelfde repo verder met meer secties. Niet klaar in de les?
> Geen probleem — thuis ga je verder waar je bleef.
---
## Vereisten (al opgezet vóór de les)
@@ -46,6 +50,26 @@ Geen scroll-demo repo? Vraag in chat, of clone: `git clone <link uit Brightspace
## Stappenplan
### Stap 0 — Starter forken naar jouw GitHub (3 min)
Dit doe je **eenmalig** aan het begin. Daarna werk je in jouw eigen repo — ook thuis voor het huiswerk.
1. Ga naar de starter repo (link in Brightspace) → klik **Fork** → kies jouw account
2. Clone naar je laptop:
```bash
gh repo clone <jouw-username>/scroll-demo
cd scroll-demo
npm install
```
3. Koppel Vercel (eenmalig):
```bash
vercel link # kiest of maakt Vercel project
vercel --prod # eerste productie deploy
```
4. Open in OpenCode Desktop: **File → Open Folder → scroll-demo**
Klaar. Productie-URL staat live. Vanaf nu = elke push = automatische preview.
### Stap 1 — Worktree aanmaken (3 min)
**Met opencode-worktree plugin** (in main Session):
@@ -120,6 +144,14 @@ git commit -m "feat: [jouw sectie]"
git push origin [jouw branch]
```
### Stap 7 — Vercel preview ophalen (2 min)
- Open Vercel dashboard (link in Brightspace)
- Vind de deploy voor `[jouw branch]` — status "Building" → "Ready" (~30-60 sec)
- Klik → preview URL openen
- Test scroll-animatie op de live URL
- **Plak de preview URL in chat** zodat anderen 'm kunnen zien
### Stap 7 — (Optioneel) Cleanup
Klaar met deze worktree? In de main Session:
@@ -156,12 +188,18 @@ Sluit ook de feature-Session in Desktop (right-click → Close).
## Klaar zijn = je hebt:
1. Een werkende **scroll-animatie sectie** in je app
2. Gebruik gemaakt van **OpenCode + worktrees**
3. De **regels uit AGENTS.md** gevolgd
4. **Smooth scroll** werkend via Lenis
1. Een **eigen fork** op GitHub + Vercel gekoppeld
2. Een werkende **scroll-animatie sectie** in jouw app
3. Gebruik gemaakt van **OpenCode + worktrees**
4. De **regels uit AGENTS.md** gevolgd
5. **Smooth scroll** werkend via Lenis
6. Minstens 1 **preview URL** live op Vercel
Deze code is je basis voor het huiswerk — daar bouw je 'm uit naar een complete landing page.
## Aansluiting op het huiswerk
**Niet helemaal klaar in de les?** Geen stress. Je staat al goed — Vercel is gekoppeld, AGENTS.md staat klaar, één sectie werkt (of bijna). In het huiswerk maak je de eerste sectie af én voeg je 2-3 secties toe naar een complete landing page.
**Wel klaar?** Stop hier en zet je laptop dicht. Thuis bouw je gewoon door in dezelfde repo.
---

View File

@@ -2,7 +2,7 @@
%<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
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R /F5 7 0 R
>>
endobj
2 0 obj
@@ -17,12 +17,17 @@ endobj
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 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 <<
@@ -30,11 +35,6 @@ endobj
/Type /Page
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
@@ -42,7 +42,7 @@ endobj
endobj
8 0 obj
<<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/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 <<
@@ -52,7 +52,7 @@ endobj
endobj
9 0 obj
<<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/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 <<
@@ -62,7 +62,7 @@ endobj
endobj
10 0 obj
<<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/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 <<
@@ -72,78 +72,116 @@ endobj
endobj
11 0 obj
<<
/PageMode /UseNone /Pages 13 0 R /Type /Catalog
/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
12 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518122502+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518122502+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 2 Lesopdracht) /Trapped /False
/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
13 0 obj
<<
/Count 4 /Kids [ 5 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
/PageMode /UseNone /Pages 15 0 R /Type /Catalog
>>
endobj
14 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1679
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518125917+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518125917+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 2 Lesopdracht) /Trapped /False
>>
stream
Gb!;c>BcPr&:WeDbbNq&$5,;FQeaKb2Wo2:[.^@MISm>,M#gJhFgo,77t:V%[c;VemV2%GK90^-S'*_m"VX,-\crJVX"g,N;4n?;T7P_7L@JKX*#i5n_Hc6V%M4PfQHt*VQMuM!1fA9tiqgls^eKl/cN]k;_R\!DiAo5Z*omqt5;su%cS[k'"6%aL\bk<t79mi/[7qXmof(2Up2Or@:Y`rN1pd1U0\er5:p!^?-73jt#K@&YhS$\;L,UTH75.XiL;1o:#."phN-TAcrSjn,U8!lN\<('/XKk6kjYIb2_t^dneWXo-:-9IkXiZ&C$XeKdPtc>I9"kmGPR='H;'4/e.p4K?Ciq=%4Q!Ct*.**O\9KV\CsT($D*j1?5%1=hTC`3CEf5)7/d+Xj6`ELJa.`?G\)n=HUHZ'5..un3Xg3*r0RAdiUJ]UFR%6(?;\g2sRM"Sfg#)_k<D5biAmhD@jd]J0SRJs/<Sh]e`fJ$_//2fD]T8V/`8mf547(10G.#KH'ofo?BsG,tAgbjiPl57]>*qYs8ic9hfn;B8a)Y<_RJt^TE-d4!>[9"M=KEs=?4pb1;pSngG\EgcH@@N(X2OC:np20Q6pW>tYkC]_M9i-/!<p59M^:o^64r9.NaEJU-mK$q=tM@,50%].Ntr&Ep,(*'On:T>(%9eVh=/B;X2c`?TOh_H2/C<NFl#Lmoaq=+J(H+QP=rg?:2PY`$otg4o9X5^pT=!@QSe\/A^beTO)ra\3YO&n'SuKd/>HpDL6"\^<5Sp)*Se73$8[`pEj8a-O/"[6p]_),bTods,pqthJ=/Ka&BePRC`eV2:gBnQ`]KOO!Dnf77jOStF>"e6#UCnX:11BD=/Br)iT&T8.[Di^5;;'6L+-t^3nOr\7k\^YB=@mZCpi6\7.B_(/hSZOZQTA(oc''H(e36`g>$TMmN#<YI,_S0YN?/BUlLW.:3Un#*G\C0%_$5q>Pqg4i5BZ7rbo>DUer<m)m5Ca48H!(pB=A0Z<Z5G1Is2Pmk^B'l]>Dn@U?'N=Da@$f]1B<$HPIs9-^uL8f1-1'9s>0MRt%E*hD-&$*nps'dt8[Z&%CNPYTOp,BA;V/E[R/Ceqf)3k^dU>\__[#]li2FKCo3-Cmi.XZO7S'^,pZhO;P+),TKGJlOQg^eW)QE>`eT-)p-2QbS>BAYK$^k$toY;WO[upJ=.7PFAjkd(p`[_lB[VMIATS9W7.A1_M0iHGJ`d4cNLRN,:\/SiY%Mpo'93o-'(malFkkUT>HDq6n=X][o2o53QM2o]s\Eit4k[<HY>6]>SD7P]<r5<nBfj5-,u5[R-G1SH7cMdL'04eJHaMZ3ORb>CSiD,Q%7q#j)2$Od?Up!r;F`rH"E#&R\e^RLo5Pqh=NS<=e3A;GOEs7VWGu$j)]).`F]Y3#s;9XKtdSAOosOX&O91(r.mC=]SPe4;Jdf\NjI/jW1e/D0<Cqo/#"o@4_:I@%UAbDeKrmLe.PjS5cKRrB@$g4.^Ou4>3b\hLodCGd-n]e.:dMguT^hB([9jY6U*!O8duegJ0p,7Ok.4ktZ4V=LeGg\3Jj:m4&&?q*$OqT2m2`B%XRgN5%:lhl8XeS"9ooN,@0D-\G5kKNG]TO:D1e,mJT"MaH^nFbg\SG,`0[rq1++7.B@h8J(G!A;an$W=ZUh-*'[`#QKDG0=[&<XT~>endstream
endobj
15 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1751
/Count 6 /Kids [ 6 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Type /Pages
>>
stream
Gb"/'94Q^7%)2%/i95=t6W0.:mFJC4gTB^Mn^^>cN'uEXp$a4QC&@3$l9WO8&uAmC;rbfZ-j';HHj%5=T_Ms_GFSd5]S)JI#)pH?"\]I.bLc7LdeVW@4Q)q&JU!?(&I/qojp.oo;h,sO+Q<t88OF[h!CAOcAL)i%>SsaX.LiGV%Kd=J1mA&tA:>YR,C,=QSE&%Lpd#H3b4k\,JJXHA7u&e1?W;b9=DsGSl3TeF+8W4c@I`LI?a&C!\^ko9.E`/!CapHD)S"]fKP.LDB6BcrNDAEB^<p)obB;2pJ`RUtT:3/7q?<32'I^Aes0]"\"+HTKUf(7b41.fk"am'04h>d_(%<8[81!dg)IbZIoXX"UDkn`^&O>c'T6.Pc/9?&,-l$bXL3U<L6!+unl%hRJM&e[42bYu=<8!rNk=%R:h&bnE=9-6(Mu\Y1b[L:4NA%827-uJ/6Uqh.5$3o[YVfp"H0f@;Q<*.s7K;Gud&5uD5\/3&8^nS'>Vb^J6bT)`AK*KbM$ma_Rh)\9rB[JK,5bQXi5B7?;Kkq:LU,VXd537OjD(`RNYNVrBe`,7+JP/7Ag9Y:]2*VBQW^9C]sQP-#2A-22c/pa&XS>tD[-ugll,*o(CU/`'n2]hUjZBN4S`\%c/!V45]@6X'P.u<`GKIq*E?=$@NHZ)F%5SR0^M\h*QoEGW=^,*Cu2rB":_7REgRM%G0K!KP2Q_t0MGc)<Y($N/F"+U#]h_2%&IcqW0O&GQ_C&ldErOp0/DN,DssKp#>lEBH5?Z.&oknnHSt^\;ec[YBjjAN;jJ0"Ztc`omH3Y5iRU&-;GCcfJid]QcPP'l>t9hniA;=.].1-T<s5*F<FHNX$.!b-D9C]5CpD+6&&\S\D-mfkZAWd.B*NX'[Pq<-D\g"/+MMb*,POM=ZqoGo9#p3X,pUcn2du6'Q>WDH5-DKl!T*%p@6=-8#O)D&BsFcnb8UjH3\f%"`#@ntd?glE(G(m#DrM<,#_2?IoLFe8n'E.p1&&ItbF^"toE/PEi<At.K;neg.+Cu&f"/^;<>kNO0_>D7I1tdhO)U]b<Vu2YWip=m*SQJ.5`WBZUVR,P)qDH<=Z#tbEs1J#I>Q[u=u=>(&!jU8TP$u3'7b"&YYdiPX!V+^h,%6;'TjS.R(!t9nYk^r,#$*@OPd+Z\#US9FA18YOou%NWT1#&1,mU+l#(TCJpV4TM0Y[C,JqKeNeZnI,Po/5UAR5n7*jU7!k,*-4>`c0JL5J$6Q%I=*G/'!e/[AcXlj_5:Og'%g,Y\[22=T^=GXC,>^NFuQrP-sYL"f\XBtn19g_>B)k'>\O?^C9_=H&MhgM;2!@&3LI67+S]'&SI"oY-&R!D`t1eY$\)kA;hOi)o(H2o#R:9ZBG[P5,PI$^\S&k`_gHD=IuLUiaYl>>?BJh5)ee*+q3XfU:5_i:hgi/R-jXBhC*P>csgGu9MpeR\GG9`U?a?r"=u=2VUA';ukX?LROnG8\heHLA5cb.JDd&K<WPV6K.HFm*AUJ549"r^Xj"_qp`&PNHG=RY&.#X7S2+!GXM,^%BK6+@Fde4m3@fD0TPj-2!3/SYG-e4OsqEm3WT%<0le6;nMBk<VW@RcBusO5$M<-SL%uYg*";46/9HBbOhgDCW6e/qc@$[]%#E3VM;Un`\qXn6Cl%Jl.$.:hVp/3NCG;R#u;:il!^i>C/(1K*doJXPIuC_^FQB-;K<;S1_6GPgAeiXbhMX-$]"LrCX[5d-8tI__0Op:K(BLp>aIM~>endstream
endobj
16 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1729
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2059
>>
stream
Gb"/'968iG&AIa;m,V%lD'6IsK"c>s1i_<m,gKNZ--h&g@>Qm6-m\1:rUjHX,"O/+ChG*;Toh/U\H)=(I/%kN"r+hRqbKk8B60HRAAC1Kc[eY3@K%0Ob_(rWiJL,\"<oZ;0aA=!pORW&<"LOR@NI>P1a4uD+>kBI`u6ptM]rp&D;b=`^jnh17Tol@/6#f$0jYF13LZ6Z<%?`G^\1GbpL9lJhP$G;&!^Q6[LUGq'p;B/7NouKfR*5`mj!'g(T'cjee[aV>FT`f_C=X[*#q+)BUZSJ9a6*7CK&kcBr^k]bV*B'`7^UCQX#_Fii!=bY>#*=nDCCS3q8Z"P=8e(+==,FiNs*+'OU_U;,)_:&MD+*k<';82d/`u'pJ_08Up&;7DL-7WRMS!qV0mu_BQssP&TWK#%!$C9Jbg1Gu9P!iXib?_>6@PJO,BlK>W*L0Pk<1,P?qm[upr;oV0,+n)Sf!%q?5t)D$LN<pn_Grp6J6:PW:GoGSm:<F_84c+!b.HA)iO[qaB7+fq<umH[0TlL`,MJ#Qdq'!`@J]:o878?/SabtO1Q&B_Ys$OSA\*XZce6N>dC3R3gEd-Y#jmono'hGFH"AZE*n\_"2[h*PGab55Vn@@j!?/YP&k.;p,'R-O>6re=K5qo/G<fg1j"$l6=[^\1Lk+Gr9HGX!'W+JYm5">;8,WMpgrMEGf*67%Vg&j>kY""t#o0T8lcW>]<9:lZV7P_\e?PP;jc:t>@!:`=%2Br7X\3neU>eRK#0oQ<<GN+T`9&Z>cjDT1g63/pMR)+V%A&dciR(kFCV]Pg$<$oB;JF7TE1>HVdr6j6_2i7\s72(^*+(DjY@$WAl@;qPK2j5b>UlAQiZ%LujYR@fQr,;?U8K$qFI2*1Br_^AAf+rf\K10p:nQZ-A^l\/\)10gB0_io^_3&j*RKfQ3;nm9Ab@S!,l'Hb\2M^2Kfc0ojo'.Q-b+1t<S)[p0]NPJ,$$Fm7&"]"RrI5C&*DG55>UmL01N=gmW-3X:2\p$d&niKeEZ`Ca[-JZl67Ga_o#:qtSP`D(lrNhi2ZfRF,C>H0Q#0ra.":cGaOUoU1b3V:4>\ZRAR&V6(k#.;.L*<%L\Q"5:'erMH10Sl?4W#H)bl*/AF"a5^1-4.C0putLlna"]aV"0^3:b/q3[]G/T<sWE8schH\Ml;uebppTa'j++9^S&iX4;$?Zprd3+8FH"$!%.pn4STE"3]R;/hpG7#4(-'gkBPn)5.Y%J(!+IBeK>/1cOl(rrM5\U^2+?iucSe@\WqAdhl_6XT*qla[2qd-A39D!q3*16_1A#F2E%F<iZku.p'/bh_k@!F$KUFDoaDV?5W:P,R;0B><Ef4.7UC#ln-t8[6L,q2GK(*D;'D(.G`-)HWVMh[4M^ec^,ul]KO/kVf/R^Nmb(UQlr$>\:;m[N5mta%GC>RP.<$0nu\.uU?GW*EP$u72tt8AK/3*kBl1J8VOJ4"Ja5rkmdG:@lfmG6XWm!$mQqTE<eUD8Z;XZ_AV)oKg,`Rl9PlOI<He'+`KbdC!i=_!5I):YVn7k/[.U(_&)Ddd[8g]E"/`5<h0^fI*QI^<i@I3+2(kC\]&aAR@ClBRgq2<56EZF#igBa>n2jA6l8pBgkBJDr>PJq6=3\%soAVrZSn"AT6Lc.ikPob0HPX+t8X9C&^tTee-LI/rBaKjG:"&IIq[:I,ldnRdmXKt1au[%7jF99]oQngJUe6sq2LknGJ#`<@$3~>endstream
Gb!;d96\iE']/^gg^WEL86&<3ZXF3;V<;qm+e`_XE?-?FCJ2Zj)MVT`=10>8Bp+2Z0S_i^b*MJmIeRn4R.sCVCQnn5)8bn]"j144!GW8eL6qCIBRDZCF.$Z&5V1g"!X9pSe/.1E6\+202dcXiht2`nfjO]ApjV-'_fMD>4ifWW?5OB4kF.u\"7`ANqX1-M(3(3ZeM_DP2cr<%f]OdV!oc,hTpbQa$H!mkECrm3Cgp;_F'tA%n*7g8"h^1#?:6Ru'DPhp4IVNh@a'IgMkcK1Ll7FWiKQRr6tRkaj`;9q_=30,eWFc+T6N8c>*4<V$XeKdR>pf79>1n6Ym>o(7"*"X/nMSpZ.661nH-bJFR4ssiSqDtYW\loZj@$k!l@W44m=6-oe"at?&/p&T[Y0_j%sm,^#p$OUB,%BPQpe5X\@W/N6^J%BU%aCAh2,BPspFaAgDV<p,=)Y/s`1c1GI:2qED74GD=XW<H[>31k)%bbX.GXkBD>e*\i)lnQXmRd-T3'oH!&*?>/6h*OD#C[`\TUmn/s7*(kY53bB&fciDg3fk'H\DMI1-eD[EV_89YU_fUbQS"+d?ZbSpA:"'J279gRFVik-9TE5I(!JRp[E^0[qPmo/:9]l(GaZ2PkerKJob]0+bl_8a1^m!ENr34X=Pfk=4.X4q4#E$TCrXeZ)I/\6`A.ta,T#*d0ipI#18<1seL9H>74^R7Y24KkCVSRJ%hF%\C&N$Ne=bSshIMHI[oL;B*i4YWLrmcnR?)n%.Fd8SIA^aZ4:LiOe3YO(E+=B?`$'3-3Qp0o[^)GR-feOLi\AHIB>WJA$o;B:S=884#b_J"jo9'IuojRr3%LFdXcZcp>O;A]W_0kENm,?)QSm8`V#O"]8$_(iK8TZF7i&8NjK*NiHR.1f$o=.olr;Mg=+4n`bSa,/"Aj0\k>,SeJ&8daQ*j_2/kBM&FTs>+VfP]%91*eR+/C=(m/T<)>>)A<@'2WZjes)<Xak"hJ)BET^j-CB-aW#9i7a;f(Z5fln`=b^/&Z;=SdKWQ'3umSRMLR.u>liGD\<M44$rY<mLQ%/#.V5Nj\1_FEY;YusMUs/WpQpp4e2%^.q1?M7,I0j;5T/GPiI#Tb%52]FM7>e_!et-R/7L>_3uF&Bia=eD`*m^9^/sDBq4puePq^IZChch8X,;pqYn"fA."E?nN7NsNLk_p1d94Shg[/hAWnXrQfe#_VVui'"SF7<B.#B`KRM?,q?K,]4<7)K5Z2@T7`%8B'U=9YrU?[hH.?\/L6BM1[l1fIUBCR3\,Z[mF3FXI0OW%$jfPEIq=0o1gJf/r]!Q')9;0q:2$-^1DZ)`s6365Q":cCbZGMJ5S8%>KhcJCo%'1a);=iiH4.nk&UhQ!o^H,%$9<P-BN(>FCuIU*,EgnG3u6s@hRlro4J/PruqmH^=_V/?_nMEB?oFX'Qo28[3:-QqOS0#S*mJPlo#<MtiPG7NMU1)[,@AeGZ.a#pP//`f+HSQ&[#6/Y@<H_5t"%XK81L3$A+BFJL*Vfa_\8fp_oV5]Tg:oA93G"j$EmoF,0fZsZ2)k8[@@5JY"%XPj!V!2K#MY:d8p+@7*QK2jh_`*Xt&bWf=7\XTSO`,C@(gUk'[YY9Ek9S7/PJl^XpL3hm`Wo?^B4YF[jc6#0*=DT-SN`9UT"hlU%S/X`b$BnnWX#C`.<`5Od_T;Zeq)=LieUR8#4j94j][D&,Hf)E%bFmEq!23IOH3_'d=$h@q@u\^&82#MlJjke@>&3[W+!E`^Ye83L*9uLB8#)3mD=3'P%c6H^@2iWK+pnnCeui3;AS0D=32BX@?H=J<coj#0rFY.$kq\*$JIH3j]6&kJb.?`oa>g*<+<P7?&0\uGl9It#+e_2]70s^DU0]dPg=R(0Q'dt<8:]`e41s9$+G1.U07F-;N:9olMfHbWu:do%n!-DMDZN[ec1:?ot&Y#k=k\9_"S(Trae[Yf@.J0D<K6"iu=C[b@YA'*-9k0e5:.a.,e;MVMGG+b7YKDLO$_dRo^]hAoLB0bk:EplQ:6JX\;Z8q'BSC@Kp:5D6"H/K"k^k$P^\1_Z~>endstream
endobj
17 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2366
>>
stream
Gb"/(>BAOW(4Ol=3&<YFELIL`!+*Ibm`qWQ3pAOodooIQncG#:7#N<iP-USVqE5rlOHs]UG+ItmI$$r*pi(+1k;s@]++J#!R[*s2cf*P+"j15e!#gq!k&90Bo@Y3A_BKa#+V68RShM8n2a:+lB,-(3M%Z+N&:R;@*'bVp&L%h&E*XI4(hs54DeBbT*;QiFJ-[&_,2-8I8]2H`*KVt4P25fEI):]+OJnKU`O(+#L,3MHPXFO5nS&hq0JDDGh9R0lK\(OLRWPBK!Pc%M8lmTlA1WHO5C+uO-?!(Q_+SpM$G@lgeNSQ["jF_=HVNu3-:f-7Wb_BJ<!*Qu<H#0H3op$UR9($R"R6d[l[T_T?ImaFKQB@IGMHp()+WEe*^i9sjc"o3?FmCN`a[s)JXDCi]_3Nl1lg41,TPsB1H1%)<)@>&ge`UoOq8TkVfn(6?l2F3^u;kl;>cZ=+8QJgGIsY,J!?\C)^f12fVpUQ4IrTd?!*M%lhtIo-@EE"NJQdCAE#K3'.,-f5S9?@:ip%8-[m5gRX+XUJff.1$"<`+!@&a^0QaMWT=(tB<=K=AY>kakPVl_0m1m:VgXk2$)^??F]K-`L;<#1fq.$uj>0LeO]//34@c'_51>9Kh#q%Ct(,E#M6:&(VVbB&:7&d2N7DA-/LZKm+AHaU7_R[Mh-L_X:a$@@:p"I4BQ.87`9@U"C)f9`FH4B7VRl>;cFkm(c40slN;fSh540ani9pG:^NsG7eP#:A)e$*.D`9i^LNm>A\7OqU$S^?+[%/g++%m/Ur"0\MCI\re&A&9/OUr]UE1$A:R^0J(j7],J2PJKuk\ptl*)!s;_rrgnA^><r!.>HZMA+'r!@rCVF/^m[;YN<ah<Y>s+MBgacNYlt\B"ek'8"1S-?)dfG.OaATeJiaj%R@K;Ki5oZ)c^IL8l=t;1hD`B.6g-tp99YU8T-MeJ.JYT<UkHUHSECSAN()Gr:WJ<l#!aiDc>ug%]_^L;1^$OnhBP4N35$nc+O(LnM%[Vbo.hb3Lo5c])U1An4n+gWHqA$?Znh]WBB7/apm/][@[4s238ojGAFFceg$k4bZ:!L(<!K><c5"+"i<2+a!!sg,2riV4<5$OS9-[7MFgL:0^,0aZ%OARm`:n%O(gi#8`3&LC:l:_4r.VuYs3j9j'JVBMbs_/PdOj_C,92Q=RcJa3bS4H'n!>DAOq,6'(OV?j5nEqh6]fVs"la\gGTBH>H.W#X@[25'OIY/I5CI6+?:f(B?Xh^),(g_2r?m..>N:k2\&3=)kPgC9[4mT5QBqFD[UjlV3L;S5KeRin3Wt\d*i#CGb8BudlUrIY!^'A^p7h2k/ns`6@V$a6pf%$o\TKCrD[1a-1HB9e,/Oa2l7_?()=S`"?sn!/tgq8^H`NLP]#6Wn60^6?-5&qnno^RQas]=4\7V9K*\Gf^r!:VqMVXoqO(LZmmq5uI8blqQI6?1j*>_X`%E>'*PQHSc>$&K.@(J4C62n'ClondQ,Aqdildb,Al;\PT0,=^7'ZCo'0l?n(B_s[AH83(7ZhHsW&u!i5EED"c_E5Xj0e@,p]g$lVtk&<H],uYdp!"$79q^T:pSp.at*(Ab%m6`5NGYN@*CY*gcJctgVC&(H]Z3NFEG?A<&e;/+bq!^N[80Lk8k)\j7)VL)Pl;BD"X\)jXIi@=2T%3A#Z>)2Wsqb;E?(ErPSo/4B(E`T9;>qHU"B'Gpn"u:"QO2G3S/HC?m?pM9S+?4@<Vi';;%fjWDtJ4H/C:bLQ=/KgV33>:;4MgSYeN9"&'+X&f20hoafug0'S41VoVnD%r'ne`jFM=hmX1R:.pFX;eHYL*BOW.&M8ndN2CO=;[L<ppGE1@eEjcA$Q<,AO+>D2=OYHf&3+2EanGIPn=-HJr8V>&cJFlP^R-fHIe2ae#!"#OAL**$$BfA)5H0+="Lk?q;]Tg=Q$nkl&B38,gf=b87K;J5tuR[qaE5$L`;-Ti3M99gqhXp\]Vk?(`Ijif2(P$2X9EOQU[2bIMfYq^WTj8@35*fc%h^*[E=F*@_G\8oKh%\QV)-3:XBU8[E/NJWgmp`]U`Oe5ufS']VXk:,59:DC5o?DL>c(0[T0_J33$Vp!?62uFciRCd`R/)3t8(hT2[%<RLJYY@"PW/*_pQ%CLC<.RH_bYbA6eN-8kXrgfs)2QZhV;8Ar/pZk'\VL<:"IDc-5h5>lmSHW)h>?Ks"!Klj0Wr%BVhnt76(eZX`3Kc6QDf]JiJDCXtR3M6N<2`ou#23L^p=6B="rMeOo,AXrUIictP/pso`=/s@4b)dPU:r@#Yn'CT`?E40#,kh`nPLoelrth&+KjYlV(lLhu].\L7jtul+eVo0#25I0kbR8Ys^faIA@.lfeKE,N~>endstream
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 550
>>
stream
GasIda`c,u&A7<Zl59(u-F5AGYQVfNCBRnP#chgca<Mo9o()O6j9:YWXHr"u<E!2"(>u11Gg=mUdi@P;!^\*'6YN?Z?fOSHrQ(A5dV/f\4BFh#"Z8DU(KlErbQ\pf4Eo"2%IF>j5'Y/%F&"^%K_]=/^msN3CG7E#p%ADm0e6hH=u0Z*\<#P3o7O]klqUiL\U>,ol4CS$%]i8Y/rVU-f/S'Qmdh0"2%/\]bGM9/WGcLZm."(JLPr4>Mls+lSk;,C?W8tR29#P$neL`EiN<L%QC^+-:k/"B;[8/$2Oh!(%a=C"7263/$.XfAlN=8L9BH]8.?7o@o47G7VpD/&Qorm$7I'o]N.r[oq&$Ws)*/Y`6HO5Mr,+n%p-Dfs!]O`Kq5&>S0P*7CMS";sRtdrS>('aU<DF*QCu:-a#`ia/,L9(koGqPgce)0C7,o'QXBNlJm8-i:B%'[a;oEMb,>j@KiYta#*Z8Et3kmLMI4$b0W-bhZ,X^:he$mJen6W+/X%]Re`hi/RBRG2q0n\5/E9kUeC"0Xa^W]NqIKMBAg4]~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1956
>>
stream
Gb"/(968iG&AIa;m.=a7XW[ZI6-tsYSL1=?:ZB;b/o_@X$&c/]66U'Tm\.D/$W;B)nOo:T12/=S,SC7RKb*&n+9iP;XSIlsJDDYJ?85h-VC0.^&MW$rQW*(*6b)3kn:8$+\cE$K\Fp*fbUL>k6j>b]TVtYN00gpTPR8+D*9[4CLJl%3F,'ed-2!N'U6m<nr+`l;,j2+0&5UI,qY6n8b*j+X\[2jkCd0<VHa'>F]i8&EaunR6Bb$VNhL=74hp"hr;.<3'+6l`o8I\1[qlmE9[8U(><U1KNe)rbJMd.(k1ROcNoXWL0OtX<h^;*TIjR;CA38h8K`+@Ro4pYe8&V:jVHA>qrA4aMBeYe;70(j3FmYn^:@Vh8ZUl^["g`u2thj-:X-^4rqC.!@&$UL.5q7+E0qF"*9L)3N<AjuAe!VQm`k[hB-mF*$$2+2+cGF^`&T<dE!m01mD9B=I9M@=EL,F=%02b'B/:?"+7ZL;u1-a,(K)Z34%Q3\AQ)P_s9`a)t#f2\DWB$D@@$Xmn>YQ'XDb=6qGpt,'?-QWX,\l[r7A7;a.Rom.5n/tMbqk,&6g-`\/5\NA`6&orj$CXsfgJr$+g>"3o/9DI].Q=Ch/8Ica=S-d(':=Np?ui2'>bkAr1L1t`gV..Ic$&W#<AkD"'V33Sh>ao[D'4]u5^46,g_%9X;F99,3C6S)E+nN^6P:lI5Aj>(T?-9O49Q(&PW,>J2FT%7(NdO-@+hNgTPm+n_i7*aYLMbj*JDg+QNaB-I%Z+obOL3D_rZkC'bE2X7W6.X5Q]4jU>7-0bP;,_d(4a'p#SM-V5$*%T-5uc_A#O?&>pGl9bn[R6\p/1U.[Yu=`lNSF\4UtYF/:h"C\V-qW442+j"3q;e$0U2'aTtU1YDtF>cWI:,?Fl4:LClWde_%moIm8=rjdWG7J$D?k6lG\3*Dg)2UYG/rL!R:h,J1>,9]PpF[+/H8r(?9_L>)dCDa)Ygs\^Qf/??4@.`o$(PZL+,A76gqPO*cc:^3Su@"<e1D`0\p)KK/08diHOtILDU;g#APcQ:DWFT"\Q>CCEDJ3Z>T3dcek?.K/S:+Uo!!qp"3=^qQZrOrhk/,H9*4C(CeWtX'#p`nH86<9ZI<2If4)k7^ZikQDkVe;3p9a'R:"q+?#t0t$$rI#q8=;E'0qioCJ.=2:"_\?<tis"_^RL_@:cQ`Bn_4u`FOP,7dB7lptN_1<WdEqa>%+2q-1`VF%*49mOcM.a;0@>lI4[Jk13.GhBUM)[$gk-b#:S<l:_B=T/k[W"X*6Q3+G>SkK8?,>hRJW.gL[ACYFiC<n<^"@D$3171SFI/_eS>$br`e+9!oPA<f&+%!c<HK4+:&D@O/k,F0?.PIb(::F;Kd_CREA^$S]iY@X1tXHB7*A/Tq7M2p`-B:*-%:$'Gmg-"d)e0d!-+#J*"Yn!++p:QZ$DG$f(>0:BiJ#e^Agc^CMH_bGR9RW9I;^YC!+i,),SE"dBZ`./iT&$C]6)W;sRepqja<*<%KghGcR$40qe(IE]3lYH:;_Oc7fi&O)c*d/*l^i..5#2Dh.s_!FDQ"aX<$p(ebL2X*>n4!aT5Sp$\Vs1O34j<+/"FI)q+BJTgIadbOk#&65:-*4-@#@-$2t*G$ITiAL;d;\[!CMV8=o"3kIE,=pWrI2]AoJ#c;tk'5ZTkXZ"'MOWjd$DksU="2LIQnCq`"aqWZsc#V3!-Ma@?_D+#o;\."9Dq0X9'QotpfdX0u9[IT.Ra?9#jQ]]R$;<maP?XQ$YKNYd(i-,aTn0a:K^d@r8$c8dF?:H=QX5qodAW.pDQ54PR&)Y?KPgn5-N:`0;+F["BfH+D<HBFUg3&d_A#Ic9FZuDu/YWf*qUH(Y6MqQ,8a''GNFVnJ'?jQdPl'A-2`9rT>%o@6ERAKN*,LJ*Q&+B7^^NO_h,?Ll<\7)pdg?Nl"\@4^gAa-b6?J\SbK(CXbhmm+~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 470
>>
stream
Gas2E:QO3`&B4,6'^o)6;?r9CIlVDsY.>6\GH9((Q\ZJL(E>?T;Me1VP5ktZC2@%=SG/L3o,&Z(ma(\5pmbjl^gN"H!EQ"X:[g5;?5&Jk>,=Na'58dZ=aKki/<^'NaCI&93+9p3"m),Ab8b'B=j%S?a5S^[O>Xm9"`g](1H5/pN0LTS,&L$IYQ!b3*UI?JNp`Xd@7OGtK9&`tWMq)Xg1o[fN5#>eon[PZd^SgJ?*?!M)F%SOQq;"3s7kimD6(,:-,0/F?e=%l&)Bb:^QICoC0g=oFC\BN?1B;VKg\&hD:oV9nl)fp632LcHB)LKnS1uo:(%fsLsMfF*non3&UcA(*6Unq-TrmWPLG5.!Hg(XIZPpfTCcg:em:ALoU%CJB#gfI\%I:_:*k2@bn?eLFn((3A)$cajo8`bF+PlL^++m5^@sS'^+P<R74<TE"$UPjneOR)m408rr&sc^a^5iIV;h~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1412
>>
stream
Gat=*gN)%,&:N/3lsqG!Ei+Qtn-2'&DX0:(A8F2*m2*H$'L^=Q!=#@$\6n+s8DS)RmaRCGP/<eR]@]7S$3@l>s3*!Dha_YZR0$qRRK8C="JbF)0cKs0&=0OWMLgFC#VuZ1$f)oW@\=l>8<U6:!Y82Gdg.-m$0N02L3@9';m6mH*sNEMRKP(#J8cDS4F(K[P(YQ3*K`<QZBt8J5OR`H,jEu*c0gR!\:XE?X\lul">ik`(f`9&]"\%K?VDW4Hu=mp^KW5[Gme-%;E4]&HJUJie&j-;.A*CkFX;0W!i#u;I;lp/n0>qE)PP[krcd#q"8k"Ke;?-SN@7CN+PMGD$e)](8m'CsAI7=8&E.dPch\E>!#"Jkln^!6VhY"q)r=/cSrBq8#(r:8W3)I9M:Xg7[V;gA(B7GSg=bG[oo>Z=o@7Hbf4n$spT5U,X+CmhI]oiIk\XiGr"%j>GnW0n)q>n;dG?R$E7scKI#[/]#/1=F?fPAFSH)C_L(A5#L<=7\IF9Yh/8"4uf<mA9gq)-A*r*,nY8"8e:?0^=//ieZH[Z'."5:+)@(+F->8mGEMr%^j'pQ:DKi7E>BLI8\V8s1S(j]b]2uE0)h;l46<Ap+Uo/S@Ue[s5qF5,Ha6e[X&'"dt1K4r*F!2!Q@Ahn:uXIl-rll_L"e_h?50<<gZ(8S@X^;6JO]..A"T:0pX/^<P(b-IDDB?GjPKdc$#0$6]RNt.<1e77=segND]APku+\pQVJYi=$!\TAK8$R]oe7P.H"`k,@5':>.7A8kp8'8TQtFXa/AVD>$>6fSc=1[*)$]g_)sQ<)Kmo(Um9C;@G;-(`AU-#N8>&:q'dUO1KJP\td#3YaT"+s0\CNg&[$]>u^D\06Q*@Z$je2-ea2s'\_Or=<s`Yt48u_X,G1]Qr'geA@*Cl&#MEjKB?\mPpE3:L^fp@O]I.8(k1h])3$;*sRC=c9`4QL9i].;j=%&_iMtAM.*qqfP704mT.0+(\k\--Dl$QU<'%Hn!sJV\68<Bn9uQedTV3ZK9CpOKABM=iJgn%2bc?J!IB`'*6rQF+kSd]KNjla6b^+IdAaSB;@G54JFHs!Nn6;FEp'8djGnA$&ic[,^DpS,0BbS%cSL>:gj];eG`T9'.Me0N)98.815:RJ%)9DofBY?PShkW?l1RaRIA,Db][FkaosrkGh3"$/l:89!Id-nCO'EP$O>DTd9DN*eJ[IQ\;X>S*>?A>2<d8Yi;NFV$/NH^+#MHj(_c>?Dm;PbJ'^d8je><TV*Z8brQ"q!Wn\P%_`RX1<<)].k%K@:>qa^+lTlh2r7OiW1:dUdT%]-'7Xn'o29ZAVYf&V"'J]XWc;j]#?">/?H_Q*1cn[5-=+Y7Y9^k7;O0*Ont=I5+U8mPZQD?4K(?K:S=!Rpc4e`iuI&K(ER,O`Gq~>endstream
Gat=*gN)%,&:N/3lsqG!Ei+Qtn-2'&DX0:(A8F2*m2*H$'L^=Q!=#@$\6n+s8DS)RmaRCGP/<eR]@]7S$3@l>s3*!Dha_YZR0$qRRK8C="JbF)0cKs0&=0OWMLgFC#VuZ1$f)oW@\=l>8<U6:!Y82Gdg.-m$0N02L3@9';m6mH*sNEMRKP(#J8cDS4F(K[P(YQ3*K`<QZBt8J5OR`H,jEu*c0gR!\:XE?X\lul">ik`(f`9&]"\%K?VDW4Hu=mp^KW5[Gme-%;E4]&HJUJie&j-;.A*CkFX;0W!i#u;I;lp/n0>qE)PP[krcd#q"8k"Ke;?-SN@7CN+PDAC$e)](8m'CsAI7=8&E.dPch\E>!#"Jkln^!6VhY"q)r=/cSrBq8#(r:8W3)I9M:Xg7[V;gA(B7GSg=bG[oo>Z=o@7Hbf4n$spT5U,X+CmhI]oiIk\XiGr"%j>GnW0n)q>n;dG?R$E7scKI#[/]#/1=F?fPAFSH)C_L(A5#L<=7\IF9Yh/8"4uf<mA9gq)-A*r*,nY8"8e:?0^=//ieZH[Z'."5:+)@(+F->8mGEMr%^j'pQ:DKi7E>BLI8\V8s1S(j]b]2uE0)h;l46<Ap+Uo/S@Ue[s5qF5,Ha6e[X&'"dt1K4r*F!2!Q@Ahn:uXIl-rll_L"e_h?50<<gZ(8S@X^;6JO]..A"T:0pX/^<P(b-IDDB?GjPKdc$#0$6]RNt.<1e77=segND]APku+\pQVJYi=$!\TAK8$R]oe7P.H"`k,@5':>.7A8kp8'8TQtFXa/AVD>$>6fSc=1[*)$]g_)sQ<)Kmo(Um9C;@G;-(`AU-#N8>&:q'dUO1KJP\td#3YaT"+s0\CNg&[$]>u^D\06Q*@Z$je2-ea2s'\_Or=<s`Yt48u_X,G1]Qr'geA@*Cl&#MEjKB?\mPpE3:L^fp@O]I.8(k1h])3$;*sRC=c9`4QL9i].;j=%&_iMtAM.*qqfP704mT.0+(\k\--Dl$QU<'%Hn!sJV\68<Bn9uQedTV3ZK9CpOKABM=iJgn%2bc?J!IB`'*6rQF+kSd]KNjla6b^+IdAaSB;@G54JFHs!Nn6;FEp'8djGnA$&ic[,^DpS,0BbS%cSL>:gj];eG`T9'.Me0N)98.815:RJ%)9DofBY?PShkW?l1RaRIA,Db][FkaosrkGh3"$/l:89!Id-nCO'EP$O>DTd9DN*eJ[IQ\;X>S*>?A>2<d8Yi;NFV$/NH^+#MHj(_c>?Dm;PbJ'^d8je><TV*Z8brQ"q!Wn\P%_`RX1<<)].k%K@:>qa^+lTlh2r7OiW1:dUdT%]-'7Y4C#39ZAVYf&V"'J]XWc;j]#?">/?H_Q*1cn[5-=+Y7Y9^k7;O0*Ont=I5+U8mPZQD?4K(?K:S=!Rpc4e`iuI&K(ER2MAmo~>endstream
endobj
xref
0 18
0 22
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000456 00000 n
0000000661 00000 n
0000000428 00000 n
0000000533 00000 n
0000000738 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001507 00000 n
0000001802 00000 n
0000001881 00000 n
0000003652 00000 n
0000005495 00000 n
0000007316 00000 n
0000001643 00000 n
0000001849 00000 n
0000001919 00000 n
0000002214 00000 n
0000002307 00000 n
0000004458 00000 n
0000006916 00000 n
0000007557 00000 n
0000009605 00000 n
0000010166 00000 n
trailer
<<
/ID
[<de44488731e8e5bd8c7e304038250f1a><de44488731e8e5bd8c7e304038250f1a>]
[<9ede7c3cd6e0a19e0d40b08da394d3dc><9ede7c3cd6e0a19e0d40b08da394d3dc>]
% ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R
/Root 11 0 R
/Size 18
/Info 14 0 R
/Root 13 0 R
/Size 22
>>
startxref
8820
11670
%%EOF

View File

@@ -16,9 +16,10 @@
5. [`opencode.json` — config & permissies](#5-opencodejson--config--permissies)
6. [Plugins & `opencode-worktree`](#6-plugins--opencode-worktree)
7. [De scroll-animatie stack (Next.js 16)](#7-de-scroll-animatie-stack)
8. [Project setup van A tot Z](#8-project-setup-van-a-tot-z)
9. [Workflow patterns](#9-workflow-patterns)
10. [Bronnen](#10-bronnen)
8. [Vercel & Preview Deployments](#8-vercel--preview-deployments)
9. [Project setup van A tot Z](#9-project-setup-van-a-tot-z)
10. [Workflow patterns](#10-workflow-patterns)
11. [Bronnen](#11-bronnen)
---
@@ -479,7 +480,88 @@ export default function RootLayout({ children }: { children: React.ReactNode })
---
## 8. Project setup van A tot Z
## 8. Vercel & Preview Deployments
Vercel maakt **automatisch een unieke URL** voor elke branch die je naar GitHub pusht. Voor scroll-storytelling is dit goud — animaties moet je *zien* om over te oordelen.
### Hoe het werkt
| Branch | Type deploy | URL pattern |
|--------|-------------|-------------|
| `main` | Production | `jouw-app.vercel.app` |
| `feature-hero` | Preview | `jouw-app-git-feature-hero-jij.vercel.app` |
| `feature-gallery` | Preview | `jouw-app-git-feature-gallery-jij.vercel.app` |
| Pull request | Preview met PR-comment | Unieke URL per PR |
Iedere nieuwe push naar dezelfde branch overschrijft de bestaande preview deploy.
### Setup (eenmalig)
```bash
# 1. Vercel CLI installeren
npm i -g vercel
# 2. Inloggen
vercel login
# 3. Koppel project (in repo root)
vercel link
# 4. Eerste productie deploy
vercel --prod
```
Of via dashboard: vercel.com → New Project → Import van GitHub.
Vercel installeert een eigen GitHub App. Vanaf nu detecteert het automatisch elke push.
### Combinatie met worktrees
Je worktree-workflow + Vercel preview deployments past perfect samen:
```
1 worktree = 1 branch = 1 preview URL
```
Drie features parallel ontwikkelen?
- `feature-hero` worktree → eigen preview URL
- `feature-gallery` worktree → eigen preview URL
- `feature-footer` worktree → eigen preview URL
Drie verschillende stakeholders kunnen tegelijk reviewen.
### Pull request flow
```
1. Push feature-branch
2. Vercel deploy (preview URL)
3. Open PR op GitHub
4. Vercel bot plakt preview URL in PR comment
5. Reviewer klikt URL, ziet live versie, geeft feedback
6. Merge naar main → automatische productie deploy
```
Voor je eindopdracht: gebruik deze flow. Het scheelt enorm in feedback-rondes.
### Environment variables
Heeft je app secrets nodig (API keys etc.)?
- Vercel dashboard → Project → Settings → Environment Variables
- Voor scroll-animatie sites meestal niet nodig
- Maar handig om te weten voor latere lessen
### Wat NIET commiten
```gitignore
.env*.local
.vercel
```
`.vercel` folder bevat link-info — staat al standaard in `.gitignore` van Next.js starter.
---
## 9. Project setup van A tot Z
### Stap 1 — Next.js 16 project aanmaken
@@ -545,7 +627,7 @@ Plugin maakt worktree → open nieuwe Sessions tab op die folder → agent bouwt
---
## 9. Workflow patterns
## 10. Workflow patterns
### Pattern 1 — Plan eerst, dan Build
@@ -573,7 +655,7 @@ Eén Session = orchestrator (in main). Worktrees met aparte Sessions = workers.
---
## 10. Bronnen
## 11. Bronnen
### OpenCode officieel
- Hoofdsite: https://opencode.ai
@@ -611,6 +693,11 @@ Eén Session = orchestrator (in main). Worktrees met aparte Sessions = workers.
- React README: https://github.com/darkroomengineering/lenis/blob/main/packages/react/README.md
- Homepage: https://lenis.darkroom.engineering/
### Vercel
- Preview Deployments: https://vercel.com/docs/deployments/preview-deployments
- Git Integration: https://vercel.com/docs/git
- Vercel CLI docs: https://vercel.com/docs/cli
### Combinaties / patterns
- GSAP forum: Next 15/16 best practices: https://gsap.com/community/forums/topic/43831-what-are-the-best-practices-for-using-gsap-with-next-15-clientserver-components/
- Tutorial: Next.js + Lenis + GSAP: https://devdreaming.com/blogs/nextjs-smooth-scrolling-with-lenis-gsap

View File

@@ -2,7 +2,7 @@
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 8 0 R
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 8 0 R /F5 14 0 R
>>
endobj
2 0 obj
@@ -17,7 +17,7 @@ endobj
endobj
4 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -42,7 +42,7 @@ endobj
endobj
7 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -57,7 +57,7 @@ endobj
endobj
9 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -67,7 +67,7 @@ endobj
endobj
10 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -77,7 +77,7 @@ endobj
endobj
11 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -87,7 +87,7 @@ endobj
endobj
12 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -97,7 +97,7 @@ endobj
endobj
13 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -107,17 +107,12 @@ endobj
endobj
14 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
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
15 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -127,7 +122,7 @@ endobj
endobj
16 0 obj
<<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 19 0 R /Resources <<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -137,141 +132,209 @@ endobj
endobj
17 0 obj
<<
/PageMode /UseNone /Pages 19 0 R /Type /Catalog
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518122502+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518122502+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 2 Lesstof) /Trapped /False
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Count 11 /Kids [ 4 0 R 6 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
/Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1817
/Contents 37 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
stream
Gatm<>B?8n'Ro4HS<rZ>m7,J,K\2XIUt<h6g9bkSR@Uu%/3>+4EWF.Nrq\bZ$okC1f'>;J,GB2S`;.+l_LUX$<S(acE&N<3[gX+/d0,h4Hl.9^2^@eJ,@'fd%tFpS7DsaF_Yl_`oeHduOV*Wk-lN^5qVWknP_p/oZjT5:6EXbf_IGht8OMSA;(Rf$DV,=@3QKK1$)EM$gGepWQX3'jP9$N's.V;S_&?.P=5ah8JhV`&%$!N#qK<A;m8OnDNO8u)QFTb.9"<kCK[]PQe"TBk;NKeEIaH*[B0%Q8_rqk*03kTMJ)?S<$N4r"rs)g0#J:hKS^^t!ib=k#^j9l^j-HkG8D`DV"X@Fi#^d=JpY1mF2tQr$W&L,r_*LIKQ0qCco;*)4)bW`7G/0If1^KJTmH,Z++cE#d``Q3DC4ioMM:]@V]I$`B6T]4n$^Q#OdkH#`ei-rR(/*#dnaIt@VA'i&SR\LPWb)t5`o4.CJM'BiqUg'aW1nk.Yk+ereHTf%*;4R&@W,mmkDaZ$r\o#`/0Ft'MKQ^^_?1Ps<E9NLT:-$5D_Zug>f";:%9[u\N!*dehuZ5=OjYrK'l[0_TB81]A]G]AEkBVJ8gRT9&n7d)Ld[cD,gc.LKgFTtaCt?do/e5SCA:82:aES/juCZ7=^7gBMR:lPD&5j94\6V%(HUA<iq+%o$5!!F?#]8[lLntR0NhQ[iN:b7lm[7Z9b:h5].Pg?E"8;jkf-2jQq-&n]0Fl0mUm8CICUpIlC4pQITiMt_bgt[0+ac<7]59'Rm%9mBS8lP[V51@.%K]/j_keK:SSclS8C<B1UoKOR7T4540iM(aKM3(K!F28ai6AKl?kbqb$IVB^;&7<?"rIZ3D\PGq)Gr2ZZ/-5Y#G)Njlsb+#G%^17T,j#-.h]F^lHMOWn\i5Fph.0<XUh3$t%lMjKd3$"Z,XZ<(eB,0jO]]!/-55L\KZ3CQ0>Pb4s\(eBOeB`2%Hu&95quoj5)OV.p5j&8JnhE$;h:HL1nF7GIHi:B(4;%<Ii9!,dmk^&'^I>PC'nm:bT8EDhH?BX=SMdOO,WDW(C"aLl.H)fK+.&WILD]gEYIYY1(V5#4$6K_9=)]2@BR#"p4B%Vpr=XhYcbY/KVBW[bRE(>Fm-Y4:_'Cpe!LhM(W<S$n-heQ8*`d1m$V37H>=]uAERAK9lV##!cpY.I[5`&fE9P6V/m(3s?[b.[CGgL$=-4#pN@AdgJ.K$42B5N]uF<YUJXG`(bnC%bJlAWp;1gMm<A%'t1D@haO:,Y_1=%8:Suh5o"UcHKaD$-"0uL!:aFfd*-*9U@Hbq(+sW[oouTjESX.R%&f1i\W1.fGL/hk_Cu!S,@L>0[AJU!u7&p>'6h1.+i.PqDs)<-Qi#B&sEDEiFPGtr2N<%C=?1,[e&@Q$t?pV6PB3D[$CI(BC1;AD]NWD-<n0b?4D-2BBRs-?&Z7-ALe7NCL,0#V2t7KikOUNCL(R`CQ:Sq?7gJsp60U"'Mbnh<!U$H>[jgF^"mF6$U2Bk[q:.=jZu`6+XlH$-q@XjiM#JC/Vd2m]8HUlU>1UO56sG-"J<FN^.tCt>%r9h-Y\la5:ds3ILood&7BlM@/[D85-l1Za]^g16m/L!2V$qnUV^TsM2Y!i6'):<OKLoeqHGhh'uk^_3a.mJ$>lR8^U:)F2pY;@`kuJL)urk'L[_&'7g7o*kZ']P*Ca;N!O2:IQIgHSe[1:!47)QEQeZT7a&hnc5Z@h.mOKs$]lb^B6C3Tj4N&,-6>9*fB*YBQBM1/^e=P+Jrl$QGFp[aWcR=(IMd(sNj)b9grNMgR2TrP#ZbZGSrgWN;~>endstream
endobj
21 0 obj
<<
/PageMode /UseNone /Pages 23 0 R /Type /Catalog
>>
endobj
22 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260518125917+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260518125917+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Les 2 Lesstof) /Trapped /False
>>
endobj
23 0 obj
<<
/Count 14 /Kids [ 4 0 R 6 0 R 7 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 15 0 R 16 0 R
17 0 R 18 0 R 19 0 R 20 0 R ] /Type /Pages
>>
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1862
>>
stream
Gatm<gN&cS&:N^lqB[R<=c__I_ltf+G&HX"<8thg;RPU&N(,Q\RSa&ffmNbl!!6\"1==6b+V454b]KIpb^e].<S(acE&N<32[gOYd0,h4Hl0PLf-BaR8%@WR*rln1MMM@kK_p=Jl59jQOV*Wk-lN^5qVWknP_p/oe-eVZ6EXbfgg`T98OMSA;(Rf$DWhHP3Ch[b$)EM$l8S5^(LBL?'-2g1s.V64?k''cWpg=+5o@CN#"S,HHoZtslr4eCNO9XO/p!T=P]4Te#cHk+VaZ^`V&mN)IBPFgT4q4fK@)90Si^:Bqn=^T'`-e"rHGgQ%X9Qt4/o>g`7*5S^j9TVig-b68D_96"X@Fi#X"!8qs?u)RsBH"e=0,T_aQsQQ0q4^o;*)4>>%N"G/9Og1^KJtmI!Oi65Dk&NNoFJC7VbV'!M$ho,;9/*SOYkS[680(e0837_\\=G;097)\5`40Vu9Ell7fM<&p^m2\(V6$T';!e]5s&659r/LRgqp<9pX!j06"N(41C`G1L?im!iMh`W?c,VH=)I-TkcKQHH5EgnucXP;h\m\luqgi_?]M&f;"HKn9[<0gnXOW0b;"idR81o?rXV>i^(A"tGpH'ha@RVBZ^nk(5kAT,&<u^;>b^Y;X/5_HSU!CBI"ggFPFH9fe3U<'ue6)QrI:WQh2lKC2(H4'4IjJX-<<T=4mZ4BamSm1BOq.j2JN]9PQK$ag=NXFJhN"r#9*EuWpPW>P6j976L2>1!5H,0V^L,suOUFk_sue@I^K6L=s9_`ZE43&T1*Ta^V`!6Q'0h>r>Z]qG:o`PpjcL)O]o`o.?/Ni^?#UOU2H=Y0-EB=hR<G9CM!o;0aq"/,"7UojAm]!s9X]IqLY\$+\M0$.p70:2"$qtBUQioHXgBsA9"`s9Ggobq5Yj9f&X6+qFCaE&k_c'dP>>J.MJpe\d8Hl:I6Lf=eL5:6H)U=S6]n&_uWNXTKHSS@00UkC!dkACiNbm!oL[`tX`#;Qj*]t&)*]-UYJ((<brlRs:WqjeVe1fk1B,!gYOSMb$8hmCq/Q,1C9&PCD>VS:J.h?7`SlZ4c:'5b`.Qq0Ui7<.dXL'-cT,c^$aVOt(VNaoPugW3c[`6;XaZE5DiUWfQ:SQJl==5@?_=Q:<\cGrsu%Gs7VI]_'G0t@/Hi]4SZ@0gLlR]!W^]!..Rgs0<,]?YPcl6#dH-$+*&i8l.9CgNNRQ>6AV/2ekgM_lBjbc.91TDJFIZa^ahi]<YT]0^7]kd#"klZBbm5RPCWmSOjY?nt<;<9jr>2TK^dE'^C60t[X;Ok[_k8?A5T;jce^juT-2aR7Un>?$Vao`t))iNbF#72]a+cI)<5)M:bu56Mhd:*>/r8l8/clIlWSfs/8O+7@6trOp/-J4Xu_PrO4m7D<Nc<HknChPL^]HkD)Yo)36;jU7]g!^#:#f!8#YHs+-$n=%YJc&H"f[rQ%Q%W4>pHk&o"j8g`Z/^C![3[7j=oP*o3d;u];V.6BAMOgFZm$;XJ\W6K/X0Gjt"TR*m!Kr[.#YI8\A^Am[TcAJEL\mgt[N%c-h,X,T+Ng8Mj?`9l+o(,Ipc=9nBrU>#S>7Lf4tIj2ruf,T+i+$SJG!O_4L5u#adP>q6m/L!2V$Kg7YW_R$Q5)tK-1VX+C2P3['sdn.uaGHFgOp>(#"E:T=1i)2eT'1`l!mt*.j=@L[h,(8-L3kkZ0cq*JRn;!P%i6QWJM)jg9u147)TFTA20i.l[sTVu[IkIOFkYk6VV(:[q.dhktdW</N6uYC!P0Q'6tHQtQK&4o+1`\$p5j/p+Xk_gQ@Z'M;TH5<D+NL.`@(dae(Zjo0T^am9Z&0ofVOfl]]<!Ae7Sfal8/DN3=16A"qR$SNd8~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1814
>>
stream
Gb!;d>>s99'Roe[3;^(i9nXhMj?>.'D932bg*,k/m-l2=`JDT5C-,k5^OD71fJ-*nd+Mh387Gf3Nm@ImSXV)'peRC:X8r$:$A\(!:^5B/d#`o74bIrWn!cgLb`XX]&o^'+)3?[oIo,:!JLDjbb#/T%:C'`_#WX3$V]6Q!9+m[Y.:N50UHk!p:O!.udjXAKcMW42N8`2.M;gMnEW/ElmaOm$][75>Cd0<VT:d-uHDs2$Hl=:C9FEiTGlDgeV`'lAG&=@906J_MlP_An9AjJ=5,p)4eT(jAE\4\)(=L^9@!Vq(f5@^Ar%O($RY8dgq.Hu7#5DEQG2>ji,][H!Y^r1f#\bY6AfElHT9CDe'ASHMnb*%&Ka2$+`_^n2,40)/VEL4Vh[fNjN:G.k+e_KOL*KRi9]l"XGX=Ee:/jHBicAf:^$L9Xch%Qd!uWT@SSO;G?+R`6pO`<lQ-Aj/>%kS4Q/#($bnsQSH.Q@i.JM`fr8DumSVFa2i>ZqKG)Z9NEQS?U-o^&rDg%'Lp4^j/jr]Wdq/IWD-#?Y3a@J]tV!T2uk=]NLm7`*e^jHptN!=87pG?iL#OU\,\aeEFDqrl]h:3r2=KMWR%9U7a=*@SU''TjnSLKb`-R\?g`'3UbrrtZcqK-i`<@u@N^^"!JZ)D)CD$_!p;psoWn>Wd123[-(jMk6.64[f;IOe']:rjR1l:7$M*1?Z7ZqH[Di.JGJQ?XtJ[h3;c&6_DO)JY8sXd+EXX[OC&J<ttS-+O-)IY]3I(l6&B#^qtL0"&8n>R=7O+=<;q)MG9OGZ@dX2#?UE(+[>M!BC5"UO7El;LOph3#a:-2n(m*oI@(/U3?,g9'GWOfB;mr`U91;8X&4A-.2T6MS@ZF[4AHrZP>Pe[:L)[/8Ebg>'/+h+Eq'p9/As5[*9@rAaWQQ6bo>?ibkkG>25<i+]mRi1"n%Or*!(@*b!t^LoC1hQU\.=XAh.M#;BQbo3p"JogB3@Z;N:?n[_]0Z&Qrna'gF?\]bTl(G`q/[Y:ZF2'Y)P*$1`2@&[4p!NV!kGXa65$&[uLPY`*(+jJa^&5HcDW9k3M&&(^i?b&-SrA)3i>*]>(IXV$,8$1,3KsiB:LS=+OI'aEG2Z5MTn"A.qB^'VC$SrG?#A_%HBNVr<Y?cR.nCL%p8*%KiK#%$uDA49V^DOdo$KK'A21dVq<rW^jZ+!2,0l+(G93@RX,SB<\[^kpaPRu54A^11"Sr%sa$>[G0>[,DZ\7(GSpEBFQG`N%!Za%2Jl\T_5Y:rOXA\8uWZndQ>Fo*\G,m+>U")hRb2$Q_/dSf2Yof1DM>AW:b<\+!-n%XDFGG=5@,cARIB*XMbbo?iq,&:2\UstKm<gpqSg0%>h/[S]?7HWlo_c#?!W-m:/nb?;;YS9Rl*Af><U"j14dMC$;!oqES/>bga\!;8r#nboQ9PbGC=;kG$>qui$_j.N`Kg_S+J[I+ZTQ9Y/6,[0t>iXCEh2G*0rUrK%IK@Q1@WHa*=1>]]?-:o/-oC;+>%rXehGji%_k9M2`ZY6[1?21%oBtm0N(n$5!(<cHD'"DuZ/(P>3=iBAASiAgG[ZcB01,Lim=j>>'=U@-gQIs!Tq;``GkXnooj_Dq;Ep%P,H;\Mj_10Wcq\hkH"a6E2j-09P?nG>$0Qrqr`5E$?-BY>Hu"ALe[:n(>I-KKgS+q72B1WDld/Rn1<Qi[8%[QGT;I/tb5rB:o=d$u$h]8j25[#EDe;$Zh9cPnk5MIZ%Ogf?q8mcthbqeJ$)GCX(E:E`m:Bmf!qW5d^$:A2'esmd<mKD]H#[gbJuYf[X%h^RA(^t@Ig>D0OT~>endstream
endobj
22 0 obj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1690
>>
stream
GauHK>BcPr&:WeDbfcTAp=+sF,UAt)HeE;ce'lL[:%oea(s<Bu"q'!sqs/HZ!+X'&[L\?<DP$[d)pL&m@R0J$RU`u2GW(?KQOF^dq$NK3!p4FZn%&23,<XmV80GXDI`R(n^AW\)m:@CB&qiAXTW',=#nWO;X[<O;oornm8cu-7*Wr,<WjDc#R1+1V:Z!N#k@e$1)$Jp'I`kMkH6ESuG"C)1&I]sflVrr1$UU7\'':,mHi*6r!aau(;oL\@T#/OZ2"=9Lf:4@9H80bM<Cp2[-+konPNKj(AG%17Itmc/CMSGR6pO'be04f1;ZR+c<cu,sW:-L(P"":>?p<M3FuTM@Gq,hNmo+q6G]:>Z+4isY+qOck4>)K&m%:*q=+jJF#LBntV$(3Vi56qJPDR!P).##AR"afIKd[a0kcoQuA9n=5K,=o<f;Zg[=18-kp-?!o&pn`H,/p%CA?4Lt1%7=!DS.<mm)MQor2!,Y-?fQdg[#bFN)@GLj$#08osN:D`:tH-KXkYX4qI.8#!XC25/,rCZ4PLY!.Y"<!d5=@;fu=-`CLX6aXWF!QNRu**U;UYr`u"5dD';\RPZdN4s`Q_qu3:E8*<W?LhUBpIfVP<-@s]=Y9n5-8N.0!q85C=&Z/9U:W+(@;$BZfT2pZ&8*U/NP&SG8_O(>$-+Q@aOSQTNr>_MjBLe(Kp]*8;[hZuKn[@5@.=/,oASmU[Pce%UBo3(1QUGe.^+JoS>Y\.7;6J@2p9m?A-.US6oX$)Ok+QiT=fj@`]>WK!EG[SiVbrUCD8+S_A8.3dppatgl<ROZWIZ@!S6:39*$n*\+b,p4Pus:H?"L;jHEGI-Y1m<id]?,VZIi,Tlis<eqiHBt$21)^'TKEIbf("f97lenW3d-U=m;MbX#8dN^VW!!W)]TY;f8fmV,Jq#-M+<j.Tr4Z3('[8puO"_F^q-l0&qbESmSPi3gu_ib.TYWEQ8:BZLLk"hDP`[D<lRM("(i:#[>8>$EY:GJEsP2-sLS`3a(KX7Z6S&A#roJ?H-PSf[8[gfr\.GX9hY\O&9q,cV.col%,r'0!FgF1U]0C\W:T\j6Ykd;jbSE!rr8[&IEZ0T@iMrUV0C\&t@C+e'j2]ZQ;UcCfDbcKU0<eQ\j#A.8soG[jf5=%AC5[SUHC$%*KRER1ulqrcujZ:\IXO_h%L@13up[p\Gd?-<op>@F5ac"2`Y`WDSg<$V?)::N,P_TS(q8ijds]jgo`HApK\kK?@Si03oL`h)]UGG\p+Ys5>_Fq(c*6P0r4RhreullR+iEIW>Ab"VaO:Csa>E\E_qS,hqE8^6T!-pt0@WJ"P>`Xe56sWRn1!)tCCn.bb0d1KGSJ=daS?4QQ$NFSM4#mAkDm@tU@iX3o^?b'M[T>^_B5PeduTdk,IHmSQ*LA,G)U<.dO-a24qFKFof?-0*:TL,_m7]15:A/<;9"jcO"l'FOT-dap_p2SB#s^m,K"DfDbE%dlZb_I=$"q&UQ[A(8Irg*5N&m8U#QMX_t^BA*^&,Ah\FE!)^R6g">UZK45VYl'969+g/1gieC#JsO<Z)fOMVr55?E6d&6DSZ/C"2hc[m+2HRAm(:+0F,S(ESsL9o]X$!'(,V4cbIgrC&IqE]DM[=PZCr?c9flDi\BIW]BAM;$iJdKKNN.7%";V1Tar0QcWYq\m/K2%gnF?ED7T'Z-rrLYKr6>~>endstream
endobj
23 0 obj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1726
>>
stream
Gatm;bBDVu&Dcq.As6^`[:'%<5qneXDA"<[3I+b%]#Y)M+Ghuu$45C&^V0g>+\J&poX'oX'&[0[%WLSS"r';G?df)7C'#3T(bcG`3A<`%9]!Y08an;S>k1ub5XIoWKEFe4pBU@8-m=aA-9P_0BM;AV5U]*d8ec5L(WS(]g;*W#^js@d`_$5./<WUh=s"C!3LU^/Ott]rhr.KD?:&1X%UleQ</)$eF)'&?$:7l07kcCMo\KDjDr>cG0MT-[WZ6Js[7Q]#^2b:4jdYkbVTB`lB(3[mS%Mo>VR/S(j;'(<SZS$'+XBWg&T?ubCDu,]f>^k_<pL"(a@ZnNUuin>Bs1%t%VJHM#t#Wk;1*T&K+RcGKgH+Q7DL.r4q;XZ^gf^1:np%R3[m?s/GXN;l=JCOR)90+(iu^3W<D=G#R9*.CLm\MrBuMCqr^(Lpm,c'dQnHcXJ>mQTZD+,JF"$^DN$\RK4WsijZ`(R?bCF/n_BBtFmKs9(o)a7`^=.42cPq1-Ph`fKs5`iGOHdTdd'[7J#m!r'!VRR];>NpY02a(FdC?+IPH>Tnd;r*1L+I%AreZ5.QT9CgC\C@Lh5PhNqU?YKSKU&%<s-p<&:jlID:3@AKPXM^BY1Y%;li72u%i5b$WO)/<-'%YRe`uZV;AR'0V&L!,LL9CDrD+P5G;&Y"!rM5VTt-X_mO>a"kNeD8G0+#4O'P%;$G?40Qg)0*2e\%*^RmEs@QVXRMZ[dkc5&e%)aJP/+I[-(%hI)gph?S#+5JS?FVhgfIJbdopB1-@m)EVK_D!hUHbH/@0Be,L/&jaB<N4f:?F.EHYsVHC\7AQ[*Ja3e'H]P/'f'XKu+nXqXs/TdQ^\cUFPN=Te!6*l^A(gF*[ZgeXdOdiV[T78'"`;-fcq>h6qq"c-9hV1M$o"3g%-kQ^&['$AHQJoifajI;3"$!%kI;%iDYG'm&)/`-%n,<jP)$$D\7]LDUaFoq&rHCQE8iQG.JK.!Od4n=:P1f4r[:r9K;-$X?l[P)OJj6/4hj.NMce8JQ`=GGJe6cg@SQ>j0W#TrMsJ@-X^<&fsQVQmA*F_\7)6OU0B*I#(>^0LL*e%*_@B7Nc.N1tA`/-9at[M[lP&L05m"ieAG2fl0,8S"<OQ9!0KR8%gM8$F*["7_XL!?DTRSNFRV8FGuUHNR2:m)L[TGUSFn0)rC#HF'37C\6%5a.kn=Z'@Dcdm$]#7LVNE@VD+>g?(e4^/'D-Y)Pb4G4+01ToSF"ik$C_g"U-%BWi\)D/Ep^Fg8\[8f0jl_ml'2U(=V14QOGiH\5^/)H2]MGG?KF$nLo=ESB%",LAL9:ONt.9r^C/[9IqI7I(j1lU'Tlk9kdilVhY4T:bIOJc/9p@RNtZ>3AC0G1'I"_5`BImTM@e_:Pf8dAHiM38s_N?oDt=d*"fGOqq>e<pKig#&LF*[AbtKV@EH/RCd2k_d'N1L9Fm.ni=V3Wa.X%[%V?sF,@%++lhC"JbC&^hdRi]`C#S4NkZr.s3!`;N5;FXJ4/nRa%WaHGO1Lmc/D>>(cJ'm.Mo@:"[Wq7!rk-Cq#7J#XOZiQ+I$BjLRS=QY8MR`\e@l+g-4g9DV3.kiULTgN?X=+,5e`@O*X&EJYC2$;I*J9F_,PmSREKTa0jV5oF14?4i9"?mDXB/e&W(7]tAgiDK8+%4mDmLs&c9kHiNP<d2/'fEJX7%!&6Ii]-:on3A^IOPaPZ=?tHEWZ)6uAJ`%X4Z'"D~>endstream
endobj
24 0 obj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2485
>>
stream
Gau`T>BAQ-&q8H9fGRJ_:*RLS#_JjbEi*a6>WQTYA*Gg'IXt']U.pb$8QenOm;MFp]ZQA5SE\6XQ6h,*G-T]up-o6#5Ks+].tF7)E;#"ej"Qr)'1BY&"'j,@^Q/Yeg_2:Oa/;\JJHV#/K46Q-_3ICm4CI)GO8,:HiA9KjJI`ab4HFbaBUD"+0d*'`ShGWhba#p?L>F):F50q1=3BGUI3YA&`!_B;UdHm&Iq49a=ECF$X!7m]Y33Z<"fEG,rUq;hAIDdub:H<E5?4DpAHb#_HZ8M(E`&-B=m62ulN`tkq+@R81RR"7m((eb^g@@=!`+'Qr'0BX38e^XAb2AVQ!2,*!dDHBhl+thO5u:j*qbBM:_-9?:u<K&p#8&"$43aFG=asak)p>N#c5B[b]1C#,ma)f+3qC`RW-d$iIL`_)-5QmJEm7Q3o1@If5q)$'-R_8Nft'mVlYA=4%?U3,ok<=M?IiY+WKG/(k\$-UZKQ`b'[sIT=lu+Z.P>[DpU5C(o)c]N'"h:YN*7/[?qf`Ks4b*O08ZbdddnSs-CFX`+8tdG)-+:gWPYa.9T(s)O@sdCd*otpr7<E6mK&T3k<dPV:+QE7&21lL`!%CqL9=VppE1f=/NAU)dru7`$MKaE?Ab]']Khp1uq)KVo*7IA6B(5XPm*\doT\J6*72(V5b@Q`iR_4]nS46/,c;r7&d+/nB%7ll_KgGFIj4<6f@N.SsW"_4QljmWUI7N&c"n!Lf3/p=6lU)MB>J6TcFm67$hFS(&O7>r1PkUR]b8%W)_:i`T#s#[a?"V/AuVpo#\#GOQ(S.`sr?+,6a/&!HGtF(CM2?RO,i.[tFl27cI8d>oOt?%e=H;>9dMd>g`5@7Hg"op4kV&0aDZa[gPF$1tB/S/>dT%],QC\l-3$JL'Ka)@!H52L>YZ?/NVkQ'X:U#4<)0>j)\);R1UjYH+'?31]eh]^Wm*OFri<^15'e+Yl8MhC'JU?lrL(g*jVjIPpDp<k]B(.OR`d.mgtJmcQ.ZAa)'qk]]UM1i;2hs\?K\,^?R;+G6pqpi:`o$Q+2oKh`u)Z!lsO@r)7gLr)2c'D.6G#Qan_FD```&6;A[E4KN&3+H0bl`7&q^g-KNj6hD!ta33"(G[@/"FtOX=T,PRqWmd4Y<)@Kmj0rg@;)dZI:19*%bGq-)$0Cpe/TWja(3L731WZT20o=-GrP<!t1SanT-C=Q,)/([=6f4N5+7@Bb:?,#i?RcFS^_o(+76H@s3n'V7Zr5jGfDrK)eh%oO@.HEQpQHm_/$!M"Vi)p.U8;_16W/o;40H$([/9A:g^YD2;OH++_7HFQ'+\];Y@dQP$P0LoY<Sn'X]73W9OVRtD6?L`e3OI.SEL3C<o9$B"S7@'rZbM@%3rkEVT,Qp*G&>`8MX.WCiX8,7ZP[1:iD_@f`0j438u!sUGqfq/h%CV%6D8@PZTU(,j8j!?Ze;u?Ze03B1Dd3rl9K,*D'FnT>4HjI]gH'YrM0sWGMhL\K<1/X#l'"'DT5q6FFb+X>Kp'A-7_3Tn*C%l+;2FSEMeE@"n5UZ)r+Wr"tXZ`FcGR79#klq0W3Wr1MU:jr$2'*toH1&P[E%RpK@9$Z'HR'^hdu/(cm_+kNT&b4A#^1%5lsN`Y86([oC7[_OBD%K-&.(L`#L_/-)JoJ(a7_JGL*WA2'*&f'`['jRWg6(ngYk]DKc'\6V$X.QpB60!f&s3p"CB*.V_ZW\popk[HR\LUB9J83AN\B`Zm1<2*'k'@r?1+F9IMq]dQek_PY*HUS#!`+].q+ScL-;L=;djZbLH=5"U&E^^*mq[8XPO[W<?]8LEUW9`-?,EDlC#ba=mW[`R^d12#brC9`)GBrdKj%odr=poOV.5Ip$@@Xc2jPE#`M_s/NYkJ1=#>'W"P0D--bh[\cSKhA0DOSR1&QT)a!0s,'IE5rc<D-_=Vb(ni,V$=%B"Q]OT?$qla(2m>+=V3%F8H[Wgm%.GcqLLU<*$UV?+8/o5g;"Ust0&],i[3?iuc=7a=;:'Zuam<)5Mlm_UNea)8d7mP%Rur6k-5_cGQp"A[l4<lXY"^Sh2P$SJncToAXuE>C"Wm2-07e\D<b2@duhGd0LCU594_0!4qI"jo5./(7!H%:iX*;(Qg;Q5>pYLB+c>pkN(5E<%J2CYNG0aC,_EjolAq@4@1E`F^$GQ*`eSkrQP\Zhq4/NpL[i#R@>i)5?QEe?GZ[,%](@a!&mj-##?uOL?FaE!f<.LlZ8VT`1cgc4H<2q)P7G+&(I=Hkm@A^o%6m;I.LS,j7%riB7a%Ji@hqpUCNVeFN9Y`PMajXY+fIQQ!&MNF`J7Af*Ydf#$ZeD3EHQlTS7cT_jD]3fL=2Z5,;aLmgb6hHB(9dUDFh`<r+&10(laj?P:.&-t<s@)Usd]"#B(l`]$TX>')PC/6cA'2/Y.%72Rs-""2X.]'.d=N5QPT6*ssQ?TMVFM+jH*9&G+("XEea2``<h&OJ455VcJX;`o3r=-(@%0u~>endstream
endobj
25 0 obj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1620
>>
stream
Gau`T95iQS&AIa;%#goWK4q[]?2Bj0:"ge.h+#X<(Rh(03M\'eXFm6<IsYgpjH>fTYtb:#OsP**o?I.u1SFMRr]Mh5?7o[VRK;HQ]E0F:K]QG5IMps2KPPJ$![9010aA=!pOI!!D*_m1@idG1e.?C@8BZgsYm$/8`\7Kp#$9+p#/k1iX9<"#dT/Tj(IW>)U*WZ?a8>e*Ib(J7'A[AXC:5bu6OMB^'i9T0PUWA8=hsBj?f1kh5EtK8:9VhrLHh4W9<T<0^q#"45L*WcoqlW4'th]WZFns-fs^\dQ8c$qk%'J@V:6bKdbMlmS(5:Ths7/PC/HXIok'\D*l7c/0(!X8n+8Hd&g=3i:n70%,g\2F81c\5&Qbe,)U@o0)a^O2UGHdL.S6#TI!hZ7RPY@apk;kj*)nnTOY0ZGYQ\fVJcbm:M@0(7o8)A/D"s+s+<%&O&KS7"nKKC70aBL(QD`,QjAX2agW2$S]@?A]X,65L@h^Xe$+Gj$@#->7Z9D`4'GnVi2t)6Vn?p;t$%Iaa3Dh?I[(V6%m]p\5Xtk#rQeODCdW0]B=i7_QbGo$()4/lPae:9qa`0D9-OXK;SH^=JGc/dBQ>+e6b8a.aV5#I]90Lf.-l>,^rg_/.o3HkdM6r%/8F1X'>-[hT0l_IO[gro?(*3_hVRZ>^\4BYU9:8`FF^4I.n6Lo;)j+#of?7V7*uBY!E!Tuo0C0?]4/Rq;JmDC5AEf5BURbp@r+A=L'FI_Z-*@DsPF%V-P)j9^!rR_$2jdt'Ee0A8fW9dFgD490^V>V]JkpeGM]jd!Q,>\U7gJWe`I_3pXimNX"Bkt\Y>+MQ#rZe5/'I35bOX324:f<*7I?<S^@a7=7>s-[cSjO+lbugK]Ii[uP/_U`pLeasYtgF$3!p_TKM$"!-aopEUOgQ!_mGRJW]uD5b`/6q/\#40;:$GU+OkAh]!&A^oJ7N'kTJ&+?p!"+#@0Fj_4'?K_$2I%g7X5tYER0ic6,Q_0Pu%3qf&_3Ud>V;3,`L3cG%-"SJB9"3LjA6c)s6;%%3`((2[(H)E<(m)OWCJDT;=i"[_8[fARn&HIpAP3A3;Fc.Qg,rmLmrT'G@aV0SDA[g-rAq45]I@D8GoS7u?\)J22q*T=$"MBlo]_96j_Db4To475#-XBKjQk*o@@cst<+]^KV[gR_3MIpqB"ZMRpHYN$,jf(IFiM/f>M>>4L=f`u-5;'g4U:^ks2Of[K?KAc)[pqnd-'kPc):M7urlc\ZU@1&o.B?D@_;5PVnk.3$dRrjeTae,VMNodpud&p;Z4eYk_ACS1?D\m\j'ZjSk0fS`FI[=%l/n0,"5j$HK.Pr)EjO[,JMo3a$6+NNGqWVnBrq?H8n-4P=ai4FGiB;lo8q[5e0NanpBFmqoJ.*6&5_]q5JC-[6'+[W'(%HqP5>4W'X14%hm,qK#97[cG*%#pXImV7pqZM;:>pf7;1`u,s;W<EJplP*8S"3.LEGFnk6_$\*k$;mDB_h84r%s*]?6;4YWbD3JXSk"2XnO^\JBs;1'.0Y"[0pqtGL[GYUN_8jeL#q(rKErcRm>lVB&8UGe,T52ZMNT<On7hT7DdkD^b0>iXP1+`2RqOn%mmNQ>[^R3a^/2&k[-:j#h/~>endstream
endobj
26 0 obj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2009
>>
stream
GauHK=c_;q&:W67(na.S,W./O'M0m6(296pS#2[u8RE5]'U_/9ZKOib2Z\g8p'u4lII;Zh]p;%qLNCd#'O:R_i\t$@r%`rA$OW-7E"%sE%`?ofI->rt#STmP+,Hh"047$Hci-3kE>%aE&HN7f-s%$-3H.ED;Lnn(qkU##;@VY6%L"&1.hr;`W%XCfg@#Wi(`pqY019c#IjL_miWV_Ld\3&i(RZEMXd!S1HCVLpQTbfod(=Poko=#uM9_ip0en(";]SSR\7A:MZh+1&/=U4]*l2c@X^e\BkTkWd_^cQfZ"J4SF"U!+\_Q9G>%bVNJ$[ph9<N3NaXd`aG1aGpPLb*aX5oMJ,+dsiFN$Om4!**EH!G:h$]"PR]PZ5/LIpL:>]nVbWi.nN;R#SH?dhD<Z\CD<;/05k9**HE4uBo8>1,5/e-ciq=Pq./`OE4&kr+LUk*3r,>:F$/BS<HF2emFkO.<1JKTuG"SfbVLTi8n4+KC<ZNlS(kR%he,ML7SKX28A@itk$T1Z,igpks`R5hIuEcA56u%,26jDrVT/5D/F@/9MSnOmZSGFH1@=O%"^-ga45ZFAG4:=l-MVcm!%,.i&IlIa^l:0!)qnMK9-h$aSW:'UcL,P&Jm/H@HGXH]_G^<llom#)dH'diZAm3J<bD3X$1F"eBJpOY+IA?ToeU]'S!;W/`ck:#.;a=[`_OBj$_&b.YR,*(EE\0\-!FH]N&:J7.3.h;WSEdoq%>RVGpm`rbC(ddGH%D7?m<Y,&b,;XP841W-,X#L-EKrQKH\\IPLOUK!#ZhKGm#6&RFekE*p[l<;*g1eaVm4GA)sIr+,,:A9X%G5*0(E'Gk3FKG4>_8c1"LM.SQfDs7u;67ZG[G2D[h;0!GpW1FjC3.EB$M0ZLWtWs_`VapFm(7M(9uBp@l9lT@g'roK]cYG@1,W,o.bdnjVt.,b;0mNn_8/P4'tZi-[QZ?;E)D.4k=LtpEGX0ZodmHrjL>1p.DgL1G!bJ'9h"-i>g(JE3[$g!_TJ=ZE4D,Yl=eaXLF^toCmQ&R,)FEJfj.H4:#n-H19c;Ioa=eX*F:miq+rkK?:E@7d&\@jp;&XSWDr&ggG3j)ZYVj*XU]5!CULq-VS1g=%m:1*?b!`%@6al`)$0e0I-u9ekZ6TWF.Fl!GW%Q4b5JF6T2'O7)[=ht\5.c*bE`sHdMVi@m)*V+k4pbo)[pQ++X=ZA+O`WqP[m_f#I<T&`h#\ra&p0'58?OI>-(gT;)Q,DkdAg%A$X]f]@SMQN^dC[DXn;6rGcQfNAdc-+A,>BO]nksSX`?^M.g*_S#W\KLZi@+I':q&Bb#'c*;k]U!"_lU-9NH>&=.Eu^/m4BdOF2<=cDQ(S*+AilO8Lic]:"mO)O<5@%)$X&8b>=)/k7b.^CX_A@kB'@##(glGg6c`77`!N#s=E6/X(tkSR(Q$r_i,ZNr)<m\lmcg5,H;dS0ge#T6X\%rb^P#V2ZoLi4K*@)#rqR2S$2!eb!F)SOpm+cWSRp/g2b;30)WF=useb"[^_!0Q@E#G`3f)M<><L?t)!@W5;0MXEh"EJ(LHZ32I%MG03!YB^.dO'3cAF>tI48bb&77LO$`'?&KEE&=(&S-Q@Q8:M,ubJtV=2KN3`rtX[q;U!#m@5old`SdgOC#JsY%e8Mh:4bnRY4r^KL],R'.m2qreko,Wh#o]cf*(h"'Gftm@rmWP$F[iq:Q[nefFd$W.%Rs+6f:nS^RAX-.VJ\AW*<`Go)tr1N(<ihs(>P'fqUbDUP$S^Wp)Q[@o=.RSutuITBapf7gC`ZH4V=*'9(;0FK7T+2<Aio3IUT4&#,D7JmRGS^AT:Jc*uL('JB#8<8QIM8'hZErZ=t,5D\=s"NC16`HMet(6H=iepgs7Ws*r^"D#6V6!Crf:pZ`fCeIC;0Ejj)\!To4`)-F>L15@br/2:`ok1e_38J1),]NTbL8b@-EBTt)83G^!p&bXdLq_jOIIF%NOV%=<b:l%nFV-d3Dm*f`(iT&um_fR[It$K5?i~>endstream
endobj
27 0 obj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1975
>>
stream
Gb!;d>BA7Q'Roe[3%m@hd&<+TPBh^5"h$3`b*$XLqP)\YU;f-.VZD8F*r-R!Bj/Y5h4a)cQ>D!4IZYIDr3?):-3.t]E:f.kj"S.Njq%cp+5lP9qJ$W1ESkbefRhfX#85\O%uQd?K'O"%huNpGI3O%D*5RFBJH1_rI%U42.(F_D0d+2#IGk/<bk6XuZed#Mk=F;MY3,uClWa@A@4ra0b8mnAr$*&-_-3OY<8/R\\\8I#"@f;]r]PhIZ^E;\H'ZEg?54r[=)c9l&!N4IUb$XkW<eO7XbsGI;/(.Qdi4Z<2m`eaNoQ8;GPk25&#oaBGV,u_\j8KC1S%,L".7E5dLO=X/Y>3A`3uY+VRT^bQAp2&[c9@h,SkSqo@VC.(AA-3NYou[d=10gk'MJ8j*'=5<^2?M9JC(OqPaJ0$XDo#D:X*`1XJjLaC+`^>7BDpoh4!@d@NsDd5;^p%XKJV`P!)ja[9i]eLkE^NTH5X):tj9f-@$_Ne,.d-!W-A"%-<t\>$F!5HkN(NLI?F"+7;l%g_(3G;sSFJ8VuMJ#o:OM_'n/1=_5_1la((/fo$<:XIr=^-9=MlN>fp1^Ao:eM'$ah^WYF)X]7KM:00gpFZt7=Lah,DhA@<`;4ro<MSP#FjsC:FZ!*U$pt<+7?q/X_U*E3]IB(Mk]@$f>c&?q:mk,M*uZA$_6$C^\M*\4f*A`7S,m]<Ibe/,B8-(?XBR=hTp',-PjM?5:qTH`qg4`!Is2cVG>DujY^orp%^ZV=8bkLY@<-P^XFseXjK[*,UQ`*),7(VlTiH@u\i_s*\WW()g-I>!R?WJ'.TqGrZ[)a=oM#\W&nHu.B."QuqBc9SP.K?tN<!0FS]WusO&XeS=^5Mu7M\DW=t\iM7pEH*<oD/*5^0hDl8Z@F?r!=hi&.Y6j(f#bd8:UYPq3WK8nb&D[M[r*f=opA%=+(aqi32q;o045i0S8/RRP@E2GQj5@b9J::fttdLk"9JmTdsf^FSJR86KI0]`0`IK,</PUq1sHE5Ha7n(/6@Z*$?Y&7+!BCPkgGnkK)!RB60iWAlf82p70_N)P/*jH@<X<Y[_q.Xd%i9T?'96WD[;1dY%`ne95'nHe9dguJNncI>k!e;FYX?0t]o?N;)FMZj*-e0f>(Nn.\J5b?#2a.mFNT\Z>R=CI(G[51+d[1,TV4faOHGn%*eg2($',Pr!"JR>EDkBg/^a0*:8D_h-C3r\IYp*j)-jCCdA6l$/1RAbO)`rDfK4k?l>.kFh##tOLQ@KJ'NVO1]4]BsuMkaRip].V&Jdm'X5Z+FO2.l'esb=H:-9@t`;UIeQr15>$u@@BB5%p>8GR@-*hIoMgW_D/VfO^Ut0S)TH+W<,6B_:gg""qQpZ?WRRhTTWB]_VI)(:DiEQCrUHp!fl_,4*V)e%WJcAg1E%og"YA0kX)d#i)VfYN-sFQ4)5BnfBDuLi`]ch1l0"fh(GB*.E%^lU[8<2Q.C>;0SbSLOBR.51tn(GU#CFf3WU?XDS,:M"g'fK\/XJ$3F)@DnpqQgGFIFFnpOQnIr?"J[g8t4^$i0k`spHe[!7nNlD)2Kp*!r46'uI>1W=jCX0PV2UQE(\b<1ROP9u`]/<VaU$*$=hV)BjHVQ(T^d7<80J%r591#+1UFFp9-Nb[.AY4M,ZZh&1>MX(;mE@ohd9qcl^`[b%?%\(aW5d-d9m5"AnCGu'<c.X'/9)#46SgsI`TtY28Bc+hf55JE3D\>fn8qS`lG]Opf=:Voam;Mr.CcT#Aa+`iYhC1TS*U4/J7/'DholE$p6+RZF0_ENueO4%?e2G>nNk(SL(gi)FMY:ha_(qoB@a,p!F3uUCo=9=_o+]3!TN3YXlOYBc!GC3Rn)fEObnJGQG+.W:ZVorTg0B[G,r(]qdlBX7=MeA#>NO6Il&CR33l=Rrf\KruEe1&'\(5e<?eX>Z2.mkNCK/>qK)'\)`TnlHO0<P117M?8G9U95C^0uCrrIjK#,_~>endstream
endobj
28 0 obj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1636
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2229
>>
stream
Gb!#[gMYb*&:N/3%#dX&D.B"nO]7q+7@S1GU@"]3I9>Q!OVqA_DO$GmYirjj:m*7fbsi!NUh^p4392&#EXkTL"r+hR]-]PRDeiIG0OPmOkJ/@*Y^Q[-f>4A8E5f3nJI"V3`.:=nIA#F$"b_c3Ldqj^e\l,-dP,-(A:UGIekAGJiVZ9_J7qBZO['<_Pu0d@$_fW$W?hk9MQZddr/@Be&N-d[Rf*c5E!.*qj\^^WP_D/OFUjJi^AI4Rr*F8XPO-FIK0S,E-G($g3S3cup%!CWUePV`nA9X_=]sjpBRba/7p%uqF%u/#<$]mi+6(&?%<0*ue!B/[lMGgq(,82jQp5O_pGe$@4>eua#c]Tn2stl4E*nQc8h.ma*g6NMgTl?F6E)dT)`PY_8XNP+C'jWEP/,iAJJlHIPW)#j/dfF)$eCC/"SRQQ$1=FlJ71)M4/iIZI[27P,DusLT&ehrQSDWg''t3F;XW:0IWaYGdqMkq1T4dr0h)I.N!j$L.njWfLm^h>#j\tql@"8f3rFg'+7UX)+cB1*#PdcRntSo_BP`#u_<8=YkKoMHr&pq_AZ44uV\s6nT4I15Sa8bR&!&r^EJ<5>*oG\T/c"&/V,TUe"")W@EI3I2Z-t%p\4Sm,rn_Ftdj?,b_Y[W["0$F8#J;Vr,d%Ip8!?^aMGQn;e7/,]P/,g=<!m-"G>NXU+dD!lp>B@9%.Xh>"eiqjPG^<NdS34c3mQh$C;r-XOmCpiY%E'o<hTSh/hHWUJOUpEN2+T#d=Usr5=P5[P1mpX>o"9fAR&6]12JfrWMD/QCtYVdL""N:e'oG&j'Hj?FI3'OAc&UH,ZpsElPac3I7]>+4sE0sD3LfMlRBtf;^]a_>.\40oiYG:ai2MGmI+qmA2C&BVtn\YYHrT'4RY0-_H++tfHNn(1U$LKW%OqHI'nk7S`?2o1H*B\W);J>Fj_%?'K&'QmmA,H"7(33K;-L3/XeTC1>"K%R:ks!6=FAAb\WD"ZeE4hj$"seU(,Lcj&OeWZh,#9:eFCpTb0Lr(K-?NL*<%d"7$Q=P\+5C;@eCL#()8lMJmaUGRGP.kW%/rX61U8D1;uBN8U3r]\*:97utGCOttAR[`i1=OH./R;th&Tg'dIc0>kc!%](C.W8M!(.#7*Ze]YGf%j^$t*#EmJ@>e><OreSY6F$Fda5jB+l:_"lo(Q:7!B]&QkH_28XN`YBM&V+jnbK%r0/([(/LIj/;3tiek%P,RmWXT+IZ$hBi^p\c=MC$/fH&6dOeMUnjDcLj_ITI>kESUi',<D(]J;T`h&t%Z>MOMs%=_]tKoTP_SEkaP.qAA+5guYnIK/)M:`0]K;kY22Oi9!KGKf4>iYWHC[]Q"Ye]Pon:01"iS>Y*olAMF*'Hh?@On$LQ6=^SXi??^ZC6u52k*Q54TJ01dPUP#^Wj6c=ir;@kE==W2<"Y8@(d@_hpK?;<k5@V@gm$%[U$!(Z5Ai(h8$HrhXD_`Sq.4FI1*fJ*1Bhjgi@+aXlG8#4dC7*>GR&r%KDU+qU2sr=1ja_EbJGgirbUIbMG\eZH&".pRI5cG0&!TlK)2d'ea;W(V@PZB/K:=XR>#O=eVQET3p!%RHEK7#FAL%qA*^`g:C;.EY7!mE0tnF8`El:0&GupW-3P[~>endstream
Gatm<>B?;m'Ro4HS=*-@D*"^g63r^A:+'mrDDR-=39a(B0IuUt#"4!L-iN^$![4e]lZFkpm".3`:HIZd3e@CO?e0^=-,;0HnFRFt`o67cQllIUhSRIBi+kTfjKXMkKSkKj#Ejc6#F]d35pV:\Geu_nR&F,;:lHff.,_$?a"2s7_o7gi!Jr+^PlRO\,aH$;*tl[U\eZQS1:aOUn0n_u+k!&OR):!a6ODm%jfO8h:_q"^S<^='p\saj]J43XAfG4eps_/^gN;q=o,+'k/>'CghKF2K0D(M^9O6q`qZ5!NE;%6HRb8KDOsCh5:&AjO$QSZBmEEOWoe]t;<=6jlbTF?jUE.GscBp'oL,?nHgq2E/M!Ld%+bbS)i"6hZrE'[$Qr#9^ClBkl,m]DTT8uC89G[CX]O6UOCW[/6.$m?[D22qhnGpR[$iuC?7DSCARiYIGLjC^W5UR6LhKY,WfhZ*9o.8MsI7i2M+nAE9g!o8-<taW#@hpdg$!3(@^sHtt,1T1Wc/M(BYfsSkBD,nT59]s-IDJLn&kq%!p-7jidfk+0ViAF5oeg>^?'oOgZ.`\:+_0b8ip5A7rqFuH?_Vtr;@<nA%=cXVHS3e>Z@d8NR54/Mb^7^JJmFZ-9+@LW]S.kG)UJZESMt8:cW@Z3XbJ<")gIotDg(;?n(LK+i%p7NTGMIrR%d\lVDmBn>nhRlL:ftB%b>7$)R;T0EpFLaU,9HfApaKSY9F3snQ2kD2`=E@!N$!@V&SVTTZ`TQF@C)Kf)G=TC:7IC7rqj+@97K84FQKGhA?\@7!u,+bO2$=cS?*qF4^0V-0fJ2OlVZ5c]9]HX\9r5M3,[H-I1`([o81[;7f0n$bK[!CNh=i5'Um>Bj`C=I[M"eoI75@;A2N=[DLQ(T7*atXSR7rYJD[U;EWrF_rc$2G+ENNR0N&t8"f)00M]T54(Xj^7mK,We&JJ4=dPT[nfFNhhjWBo19G>4eX%Z"bPd;hc#Kq,U!mo2kiG8mjp3<3iMblE+=B8Q>-@I73VTr:k1^-6`3c,2>c1#aRfi3O5b6?@J3)Z&5b5Ll@SI'1];!(TrjpSGJ^*$29]e%f7l^IObY3;l/+Ao2`D7/jf#VI$+(e]B7"3&R/J==H4@HX9fGfNmQ_]^-i5=l26uY<;5rmI<hA,ObkG#XX(pT/N/sU"C]`LMh?JrRRj[\.oCA>*MD5BpaI/W/^j%LJ6C,a>0fjPT(9q8Zl*_<VUG*$qS+1B]T&90hVhiAM':t-si6[k.CTn:;U&N.^AJKJA6`]AuZDp",paP]U=UN%&<K9/U]8'ob-A,Dg!WS(cB)5EBKg[_:W%WoSQoV^A9Q[;r.d#f4%fC:+3iJ]#W@]Pd4EhLMBcj.);i7GFcOB6;N(Qgo"GbZ".]jFHgbc^4DE`fJQ.(UXl1a5U_^&PuJ$*I3kW"C='E)IE_]fq/YUD?>9Oi.5);"#NX4#NE;+gCJ(#8P4rg1Cgo8Dn\jfBAoGbZ8A$E`hB;P"BM`0rDRFqg6PDLr_8N2k]<`jo%e[8E,_PF[&dLCdlCL6RiASe.&!\/CK!&\pl7';/kDKKZg2LENE=)9)4XY*K]_XpGK*PY;`hmMt\$,Q)CiYgWd9#S(0<]=9Rl3C`12dPqP7_[i.d2"Pt;)T=P%$A*&o[2GFEXC#up5?S5ifBRFWcBUrXR3[*Ar5KCJ93!"%kkH"9J#l%J"T&UF37_#fGX20h(dCO`+$:,aH1U/lL^M3.OBeM(GA%,"<<jg[<=4;-o40uB%)rZL19:Or!Zf@T6Mrtp!SSP<CkgK&hA(dQHXN52S('1g^LVsj)cd*:a8.d4;7\Km0j-<"ll`;>PAfCr\9)]=$%OojGO`Iaff,<jG]+#8dnWJn^e6:#a/&K?V#n3H5a-jaJrd4cIn46W]4*)PO9bd<-[La\EI?I;$Ts[$J(uWZcMr/DlDtW,=\mk/Jo^79NTXaMWM&F<f"6H5/$nRbV5Q$0]gu6XeNj6X=a4H]gI6P&9T,m`61ml"[X0\5BfKq+(<8D\GH"de>5=7)V]RYdi*1p7^4a5G>5lb]m;K#766:&-:<>F(uVq8N$\"77LK,Qr<:T8,6c&_gC%nmFD^9-nkN1MNt)!adQGH:RJs2B_:!WPf8cb!2]20QWC''\7@o^3fk)H\$=dIZZ)`,fBqL\VJVAp@H:H2:%$F1Q-GA!S[lDkA=oqGQgtb_A>i2ZIYMN[Y3f`("4%bBnR!+k\"5)\X\D&-~>endstream
endobj
29 0 obj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1324
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1044
>>
stream
Gatm:gN)%,&:N_Cm%`Ul0EL%Gb]MQ`C+#Eh*Of)/(V`5r8qKJD$33YgIXRP!1UQ163/K5H%"dEsm+J]Mj:Kap\%fldi+rUq(EBr8f`HEB@[LH<q(2:\0Th5D:4PbgN,eqMO.&;;bFjS8ASEc;%Pl7qb[QASB2[k)"?i)_49LMG3"@pP/.FBQ"-Yi=AbssK&PIhNX^dZmC&[c#*hR9,jXffH&^9Z9_.X#@P8^/b0ai8i,r")hdFF"Jn)9g?U+99a<:J:>/63h[KZN)rqi`taC$2aS5B2aLfl"%fY@)MaZf>Z$;>`Bh/0T8!j'SM_!VG]j=`dNEePb!+GW:TP2f\[*-l"nl/<h]C_Mi7"9u;O=LlkQ)`[P^*Og&^_bZ058=;]%u1achK.V:e9`HW_T=Ao@?*"BF=]EpGhjg6X9@#,inDTr1>@A4lp&*#.tFI.Kf)%M57@@&/D^S%Oh@K>(G4JX^S]EhP(X/Y71Q2^EMd7u4KPf[5QUQY//$->U=SDm!nO_r52;-b%-BR]f-'L-Hpk=g7D^JP-[8[jc?h\s+5<9=0bjZV>OI8:*t(kW;^Ig6T.=u^7TCD$-?I2dQ(fA3%*U=3SJC-]/OrsC%]cZZlL+5qJd;%ep%OW<-E;[?WO(`K8A(s\3]!*&(QI0haa&r;a2.?VHC;BAF5[A6!=Sb<dNBa=s4?D3.flB['G%,N0\@"DG*<O$/c=0BeVVWQ7&E-`*\hY9hkBn,;#,YIcDhPAFDj;s-oYD28@EIJ]MS<>1LO:<@Ld8GG9mjq5L`@'1]I^UN2B\-'r@TZVF=Vb"KUNFc=SB1.B^i-$5&\@CNDH0uD)#U5]CTR1,RUg9)+;Of@2SI^eTN-?@i;0&PlmDPOZQ&RTrq?8)G/H3ai8.Ep;SA]Q-i7ma:I<&i(cE083XLbu_EELk7aOQ2"%?rV8_J4$@-M&p73GPU/?'#+LJJ,@i!m-<#4N&X;3eM(afjo)W_4a7Z"jiHJ`!]bnJb%G02HWDOo,I`]<)KuAT*Op19,+q0./G*_Op=^.uh.C6:!4Z<t9ck>M=I]^,6F442RP,R2nPQS8V'g6#Qa]ntbju?2o\E)7@9)QC]1oEo[\+j<dDXcK0tjSFj7LG,+<H`70hDe/'XXP,)ZsdtO3?9MV>YH)kW7]-cOGf%aco?NUnS@`Lb)<j(t$CW]rA24bedr3'<p+ae0cKjJFte#St;8dYQ#C9Qb7:*DE=Gr!j/bT#o:FLi'F-"@lFXN=iO\G.HHlqP5b6(8fdolT%?:E=P$e6DJ!.gEJrof?:,fJ%<di59fMo=LP>7JD"7DQ#)NVu/mN5Mb5ei;~>endstream
Gatm99lo&K%)(t.i0_bG$qX;A[C:>5Cbh2KgPjn#oHHr4UKA:;M/bb/rBc\?@AiO*1U0'*"se`noKYYAVb=DkF:I_O#3Qd(KS8"[KOP:#fC3YnHjuImd\mFRBR(Ff?uaisTNVOG7%3@B`W@\MbSgZ-$>+-k6'@ip_E`gZ3"6!EUUdW:QkbalqN69K[$6eYYt43Ud!phs2Xk1QGN]<EpSVE+6gR>Q;+&=4LeIrX24WI7s*P!:DM`L^k?J%[I"ggULG)ODG^X`.\utYY@g6jkMhToeZ1NO]llKc:9s.'8V'Ls)hL>B<X?cpDC[W$Ee.9YV0,"nE''CKfdml[2iQObrOVY=JgZ=GoWsWcFOb5!o^BGX$0#(7t!h=mXTUoN35%^ke8]^T*:*D+$UGuk;mXHLhfFRq0K-boT"h0&tEe!m=5FT]GH4_pt$"VQWaF(uW`<,2I_kot*FK]YQj#?aTHOY8<o.5%MK>KWZ.:7a>oE:KNGq<l<:0>?4aGD-]HNcWToMFUQKIp5INiuiI\F?^fbiVL.q@2<uTrXeNpN^TT`bL?,-:nC,KJ[N:S6r5n?!h-<G:NptO?@cs:4,fR"fWVLp5o+j+i@%5IQTsqnGp7gI1(klU]p\R_K;r4HN_R9b\aX8TuQdR8MmUlneFId8PQR2h\]U]N"&T74CIERF]5`^LhDu'1TZXel4L*s;m<![o'gp0>1I)k/bXZ,%l[SYB$_Ngggg0;l"NJkDbYO)\;3#eQf6WJ=#41b)G!OkA<1.>-tBjA1t[[N=l),uVI>!h`YCF2Ms^87_-g1bMg6"n2H4VD9F,J`BHQ$r2N7ug9A2Wf6O^ei[?G/c#303rPU;&(3UdVrmm"#o?dmpcBErNuos5rt\5e-XcYg6d"H-D6L"%6%=#5fi.EA[JT!H508b)-*fR*;;enNksc6H8,PZ?C&euuh:SZ^Tae6VT?%`s0[nU-kB_A*s]Z8lfdVLt/7Zb0PQDEcZ9+X>gdN6ZnWj72S:S?QSmo-KqAHk^jqP]2944hIne(mW/,nE<.,0+b36Z2~>endstream
endobj
30 0 obj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1582
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1740
>>
stream
Gb!;d8T3?E&AII3bbYhFdEj-b;,g=E9imuY2n/7=MaGgO&t*i13D'8L)c=$h-ZM$Y!Gi^@\BW5V)i%rhn]UjFRKL3j_"^%p`aLV+(6JkLTAeTOp`0nuGS7t\6:o(Z"%gDm"4\qV&.9[[ShcBa+YnlsP)Mr"9&R338QZ%ZL?Zm3!D*DgA-><+=@dFAI7OM(a>tNM&F&l\/,<^#?:r..3Y\q!+YfM'<hMLR@72N%P8GWf(`e&#oa*h9R<IlFg(JkcPuae?*-7^e_5I56k6b;V*8]rg?/!8&RsGSlB/"Van/BZ7,#2S]Dj105m=5<<]@p"aWaE)8@5;5,5j'*OFA5<qQ(SGK,ReC=[^]8p6&:D\@3d#to74lWII6mRJ1$#u8.PL+>g8-39*?@1`9TE5kkae&8]DZH>uupTdMP%!+`$7_!j"Ht$FkO<",<SP+/Bo#g2TsjmA259d0[?egqagM=2AV/IB*+OVB<QkI)e=P+EHQb"-X&@B$.YP>G.^%/A9.B*>jO8<mTBi!sZUu8.!&QTQ(:(U>p,FGZ.aT[(4N\6IO0W^[DbfFcdV#/-`mQm*V/R2MX3BE'1GTBqYm9bN$8F$&13WZ%>h3OFd8e20@>(odk?S(=qdtTSp6fDti!<@^e1BWYlh`,hXXmH;Mi4?O"09rG<_'2Mo2Vb.S";RSg"$Oqm!sHcB:c8\e=!CnQ)\Ns'T>8t4qoJ[N18@#N"q@I&2%$JY;dM:qNGFR\8FdGtP#kJqqYfWT%%h.=Q%4s/4Ef;"EK=u.aB[t%D+i%B,A4s.A-f;$]@/XNsLhA1HrG2uDGcNru2kWT^Ra5tEYQkf;Ynq8DQ+62KJ?=U[bp=hIu?2fmPq:G1eX)cS0\j'<BbjWmU;'MWuq0*sof!a5G[+./PI!W\6kIIn]g6b+b)tS57m]<u$I8t(C$>X%@R;Ab$D:$h`/dL?ijkM%Y%l1D^q!\9CikJQf*MHo_RDWe1!MN)W(n*PEUMib_qjp)jS2k&Zg%Y\3`_Cg[%b9or8,cc;WXK:)fs8]l#"$)rAW+O[&%V5YcRd:VI%dSf<,Y.<eLACq;o;>G>(>l:DnFc`<qbS3/,Y$t=&ZX+h(kf(Bl:H`V5Mp5mLK^^QS!RtnTMMMGJ)GtaM-t6eQ>s-SSm.U?/<>u['RqJTk!q%4'm8[\=X._Rp^:S`^m-<#Hfbk6]sRgJF;^HjB7c:QgKB1c9FLK2`<riG$\<5f*4l8XfEf/PdcDDojlO*4:d5!"#!Dk;e4J48ZAE3kY\?2(<qOSY*rih.G@uk$7.T.,-\q$j;m"cL8&V+T_aCNc(_?UP!h]$&KuJcpo\Qf50=U/I&6-T[%X;b&`YQN9kaR+QW(^Lr:^gtn3WWB"r<BM<72'>b#p8nI("4lpQj=PZ'KAO)soNEK2Wq^MXam`GK>0oNk3HZI-0;NCG>Trb8JI+TfFh\.Xb1X95iC9J"-1ZpOU?:]jUib140P'9O6>!WTlgfiNdL4C@<g<._<r2=/sWGS6@/8e')2O8_3M2)&t7KF@Z"*E+nDBlZDf7m9ZQ;pFADW'c(32]n4GO1gUHS\i`K_es9j),=:la%t-!i~>endstream
Gb!ksD3*1)&H88.1"oZa!pfG^*9SRmW$j;3!\1X+W;)P!qKBb'ECdA?W8bR9S7J0A>VCkS!i0F0M*8*cO(Y%%:Dcq+Z0n2!!5G_qj=pbV@<E&R&dbW%nAd#'*tYT",XW\@;\='nZ#CN/S"PF2&Jao)JYj%,OT_X$d5ojoEF'?a#\jJ)G6.so;Dcf7Lh<@/lDs`4.*cgH8OB950BWlBBr>92e=[h^g&DWm8$HE#*`Y`t=Vujs.cC#YQZ&J3;nFbY]!XGO^Y7D;gD8Xd*l5a,bD/fU26C$!,BI:6>8=#OItQ95=P[t4:%5"?,Xh<cnXl9T38hJam<Och.bS?D!fTimr^<4sJ.s(>NMn0jcj5&>V837bL=&=;WLsNA8G]3MjT1DJV,C*">S!ST@?KPJ8U))9#%!#nVAXGO?52G03!>9o=?jeUE"JhDi1Z\H%,\A\-1sOQYEB*3e0;qn=)s\p[kZQ])Jk%d;sr8LroC?E:.JVZoK\Iob8;O11G7#jBP8FOc=QOa080"1rpi(c<ul``pt,;$&M-E.*oXl6m5pN?d$Su`_*q8=6YL<EJ'[XNC$PN`IRZ3W6Wpuh-^Nu_E;OdI<;=$Lj9tRa-1;b]Q)`I'8<_5>EONbem't.cmLk0*5C8E6gr/D(]XL3>a=-<eJX>JL`*M??;<5';,#m!(.aa#+C#EPG15.I*4/dd*'?]is"*bXnK=hCpJl#std503snsYSHFBm!D<0)C!UTVN4EAqD!;MGO741ES[#TAno1QF:.,SHXAr$e\-OObamc*Ba`/X*2\OCPI[8u8r?o4=,n#2[)-4AQtO3SLM)TYgn70&'/:B#-O/>1Z?Or'OMfZ&/7#2bfm/mS.D^9q<og=m^t2lSD`kl0diE%SsQ5\t5o^a8&PQca+SL4RY<1aAf$ARki5^1XGbkW%P"JGd`MTT&W\c)&m9Be4=PP3bf$[OrE*)c_1j747d^>K<csL/"8H=F4`>5R0W//K#G[aR%#jHB"<KUj2!6)_@=n6j%7grB%]&ITTkfj67mXK0;K^F%7<$bLK&p]'erJp)%D3f%1X"@(#SP7nIdm7d;c;WbatSg[JANJ1PBg*P4]_!gq!ZlPM2bHa0L5L6TPC;:>I@D[jU7mSq`.`*_N?_^k*NaTcD5$-\&d2]dC]:P,'XlSLLbY8:%'>(5grJ58JGh:g_t$MndDu*GeFX(Y7/M`oLpfUOfX'5$p89IYZCXEhX=mC27$/YEk!_c'g'I9k5u:Vflp]I'M;-%d0(t;#LNBS;EUe)67Ja15TS:U>!X<_as(tGn%F)`N/J&GkD\1K$eS?mi8NiiMSt0j"C3-\N3P)%1,t,*3,.?YP:7mMI^]6Mf%3Lc0<?,pN;XiUp`D32P&G9pL[<R^n&Et,8UWJ4'[Pr:n+Ij9"QW."jB9+UI6MmVup"1l6=+V6r`.[Ai?Ss,,Nk<R#A;sP%Hd?08t]kP50A_o8Za6Bm,D]Y],H#n)q7[0Xh-%&g\_b"`rkr'EApA+MdR3e)G,TUVbNsIK$+<F(Y&$H[hX1_CXh5[VmG1-smEGh4NY7nA`tWa^Jh_b2h0r`Jej^@dt+BS,_;'dUilpWU0,FFS&kG>ZUa.4A2s,fKHh<5/CiJ$JV$H[a$dUWjsk/p)BrXd;oCSO`iE`^C3eMHVNu8*uK*Jc4?kP9l8Je<+G1t\)BaP[*9#\9pOI/F5[^(cc$i[Ni8#!Q^C0H*Uq-,]@L$WT\c#SE_5p4_7sGmL$o~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 414
>>
stream
Gat$ra_nsL&A@6WhN9!:fT*H57b'ss6D[4e:L$^MO=DM4M>I0nQ<&[1C0P`s^Lc8@0Rn@LdkgKT?ljB.J`He`8Kq<r.1&0?&m?-O5bVat,X>5Z*`U1QJC:5<&TLoba;PA!3E[;(#`gcr)cR<&Bu!#(1Lh`PEi#o;K+CN]iM@hLXeT+ui6Sk*,1;**DmOqbbl?V=:qs**,fZ*H8C!U8XP]@h/s!/1:M#sSXf5QOC9SGi@'Q4Rl8ksb\&Y9@Ed;pj]:ui'npt?*C0g@&.7e`2A,_ao+lI.lP_Yk'Fa)&eSPSp9BB(fH+jsgRC-kWq1$No07?7A,a't.4:q%h'n#=Q?&neaBV_F1n\@!&D&"OXNee_C10(ZcWrXZ0\Wm(';SMcG3/<HHHbrt2lOYntaFV>nm"s:46#l~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1326
>>
stream
Gatm:gN)%,&:N_Cm%`Ul0EL%Gb]MQ`C+#Eh*Of)/(V`5r8qKJD$33YgIXRP!1UQ163/K5H%"c[YZY.T:a<@>iDh!ZS^tB,k00!nOZN]ic`A"oWo3(QC?m6=gS,eIX)!(g$*]8FTQU)'Pb0jPU*+YEkRDf_1cD8Z1#^S,HGQnplE?&q*=W1m-"t"VYb4Mat,F/[&TjsCaC&[c#*hR9,jXffH&^9Z9cH(V38I]"$R"[ZE&t!Ookj$'`p[HHZd1n0A.er3Z(+To>6=fTJrQ-#A[.@D:T=DqaCc>Jn="q7Afl7[@j?JY.9*jBas-Mq7!<"rs(7j&m[FDSc*f^*q9q4C,8js7I$RL_*0V_g!POK\=@Up1NE=/1#,ck2[HW;1D(5B(6m0VHM`JeH/)"/^\2FT=dd=P$:)cspX:3LmaKC=V?2?SJbNIh-oXK-m#?2iqt3&h8#-q+\r5uH%K!4%*!87Rm0&ZgRb;pD3jrTQbGSQ<BPPJ'(J,tj*>>R1Y+r'iH(D97#^.Lb>XcVOS%!i0[`S;FEO1m6cW$27;I>@Z9CarFfi]LQ2<mg4P+@h?N?mm,l"%nB?u(*W/C\&!91h8LXt:5kI<!RWt./!RD'gZb_cK]dVK8N]I1H>L>l+`Q+CTTXsQ$ti*O!35Vd^'%VV$,js*PfVc\.1[_V>#M-3:AYBb["JNuYL(0nFlo>;K=?XE=<NoN<NI&qQ>:Q/WB%=7S6j-p"5eq\mI*/l7*-LpS(-,Eg`u@KeIZ"DcL7K\;mIY[RR7?b[$73R4,XbknOYTpT.S/:g,7BK(fjX*1Q/9=;7^@Y:?;-\i&=QV#[MX7\#M&]%/s/j2-0R&9sV3eP6uc43PF$h+KN1VE;e)cG*Djcfo>iJrq?8)G/H3ai8.Ep;SA]Q-i7ma:I<&i(cE083XUi!_EELk7aOQ2"%?rV8_J4&@-M&p73GPU/?'#+LJJ,@i!m,,"*b%=W(PdOjB$FQeKpHWfJP&*^i.jnr'jT+bEEoi,l`GqDC\(`fc+G5N9XTub6^k#n0_hjQ,_V\TqEhi<t9dV>7/)4h[U0.42RP,R2nPQ-Jt,d#JC0ib*-`:kk[N>bbt\_[e0J?Pp:2q,r\-4E@tUgjeO!QBK)Ad9harQ:OTLB/4j#G4'e3[aQ+VHT-"g8oWF%\XYoiTpt%caYLkRk]Tm9pYVkOFn/>(4<;tM:6m6qqMhPJN>gp<SWCh12=DG&%'i#o.H$M0oNm&I/R<6"PO/9ZNN3FX]$/jg8i3OO%4UMO6/Ci3pX#tOOh,-Comp7`Ym74?)X(DbRLC?A*c(3bZ/1J0F$Ze[@;*X.YK)Ykgp$s7~>endstream
endobj
37 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1681
>>
stream
Gb!Sm>B?8p&:WeDlq>[#SQ[-:6KIC,kq+]Z2Jq9AQb3kQ4#C&[!@R9Lmn25_j#FNiAB)[`(j+NgDf8e[K`Jm;rQ?(oRka^,.8U6/$.+Jr0Kt58A+,aS(hZDS!sqC-V@6!6g(..]:IE>4:K^:U":5Z3"Hf?FLf=AlF\+n5W"_p3Gn`fdK1&*m"HBtM)s]l.)+2seM)eA8Y@#F"XEZ2Q9Bf9sp4pS*#$liGW.kljBUm!pT#'9]cTdHJURA,cSf:VFpSLjZ]Ra#$&i_ih*Ro4/2_'Tll;EmZ5#]%<$0.X3IV!d6kXQ400oEG8s&dge!<;B)9NnGDfsK*DJf<#3Ji[0LibU&W&dT,)6%ZPT<T.8?M@j:8,7ZMj`MC37qFZep,R>SKk[S'^.j?h/CtKE)k")]A_]('R[A:C:'^);IFL4EhcKPI6F\!3cF^KG/7qk1)FG,7+MtDU-M@pl!ONYT`Mudt`SU8Y[m'ejcs5*U4F'_V[dQId]j/C4e0``!QL*@DYA<[Q46YNO`ldl.>mMMaQD)/=J5uVm\2$RtKUUANoR@fD11]OX?"JK,^7[D!n\:_KhH*6e5aVC?6RE;7dKi7$sb;BT\13BdQ;)aR[E5O3iW9:t$?sQr<XVZL?g5<T"DmtPYdWDI#n!#0@<[#kC@Z(.?i!&Ld$ZWaQr2l+S4rDe.7*Ugpn8msd\+12_WU/;'ot2=Ol:RBibHD"`HZ-_9oB4$Bo6LtVYDX%"l07'@LNfB1hoI?5I<gJD.QcrS.u*'ZOS6=.K_3XT8MRmZS9+kBTjtq1U$Hte#i/(_^`DpAfUK>p\)Ma(G`P2cTkHVBcLt[M2!9cQ,0e?Pc/2l:h-g-A)Z)/ea.[a`r84LoPVi%T/8&R=BDs:kO3@G_&7-kkN35isJH_ZLZdqPtc%XUBO2!Df\)YcThk5EW9%SdE0["Pr<Rj"ko(OaAiL8lnGp_uk@Q3iV!?/pQ=.jt._iUKJ<g37`c/=_X\H>%lVDPgOC"1/KR[@jTT4*LngS7tPZND9EI6Obg/AS0A,$/Och9MA3kIqn8rIp_Dkc''2.N>BH+lDRLiS(8>;m=j1HN2af[^_TN4#he@nFW`=qJNbN"84^`gk!o&Bd.a+L2!4'>nV.#]*rnre9&dGW_><Q=YFN$gU=9Q?rj9cMb9^R\lh+$HTJ[WKu?^4*elDtR\GPJd!:Tr=hFsPDDIbq<B_ne"hU:S>S+)UJr&cf11mC?QA/"32WL#\LAKJ3K34a^#Q1:Bai_6E%&;5M[P0kDe7G>Vi2rH7k)XrALaK`UMWn&7h@KJSG/7k=\)[!]1iT60jT<op:%[Yb],ZR-Qc%ePd3^\Q(3bL>(Bu]7(4e-aPWdn]fib;I;OG[jf\AY`a&OoXbjkB-HiPHN;SqsCBk88HQk+K"N'[.H:@4dY'p=5?4V>tdl?Ft%/RHRG7D'(19*.aXi[)V'?oaqZ&"K.&cJcN>TY2.6k8RMo)PeR5d$BX14N2)O>PH8_E,r$j*+>Uj6ZDMdJEEQlL70QeY%W^(U5?IUBrc`WKhXQrq%_P;<Qk/ZB!qQkP,idEYf?)7F0>tgI2`3PaVV63'HAa*g/RI?"/Lh21./f*'Ij@*7-X;:j"ZRqk./N>E*5R&PjC7IRb?KGWd;@!YJ#EUQ("WYcT\@X%9Jt+)ZX-BncGd/;j&_m#i8nqD>@H~>endstream
endobj
xref
0 31
0 38
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000546 00000 n
0000000651 00000 n
0000000856 00000 n
0000001061 00000 n
0000001138 00000 n
0000001343 00000 n
0000001549 00000 n
0000001755 00000 n
0000001961 00000 n
0000002167 00000 n
0000002373 00000 n
0000002579 00000 n
0000002785 00000 n
0000002855 00000 n
0000003146 00000 n
0000003277 00000 n
0000005186 00000 n
0000007092 00000 n
0000008874 00000 n
0000010692 00000 n
0000013269 00000 n
0000014981 00000 n
0000017082 00000 n
0000019149 00000 n
0000020877 00000 n
0000022293 00000 n
0000000133 00000 n
0000000240 00000 n
0000000352 00000 n
0000000557 00000 n
0000000662 00000 n
0000000867 00000 n
0000001072 00000 n
0000001149 00000 n
0000001354 00000 n
0000001560 00000 n
0000001766 00000 n
0000001972 00000 n
0000002178 00000 n
0000002294 00000 n
0000002500 00000 n
0000002706 00000 n
0000002912 00000 n
0000003118 00000 n
0000003324 00000 n
0000003530 00000 n
0000003600 00000 n
0000003891 00000 n
0000004043 00000 n
0000005997 00000 n
0000007903 00000 n
0000009685 00000 n
0000011503 00000 n
0000014080 00000 n
0000015792 00000 n
0000017893 00000 n
0000019960 00000 n
0000022281 00000 n
0000023417 00000 n
0000025249 00000 n
0000025754 00000 n
0000027172 00000 n
trailer
<<
/ID
[<a6147630729a0aa699ee753548d84bc4><a6147630729a0aa699ee753548d84bc4>]
[<a03f72edec5402346255e0fe29756f08><a03f72edec5402346255e0fe29756f08>]
% ReportLab generated PDF document -- digest (opensource)
/Info 18 0 R
/Root 17 0 R
/Size 31
/Info 22 0 R
/Root 21 0 R
/Size 38
>>
startxref
23967
28945
%%EOF

View File

@@ -43,10 +43,10 @@
| Welkom + Terugblik | 10 min |
| **Theorie 1** — Waarom OpenCode + kern features | 20 min |
| **Live Demo 1** — Desktop tour | 10 min |
| **Theorie 2** — AGENTS.md + opencode.json + plugin + stack | 15 min |
| **Live Demo 2** — Setup + worktree + bouw SmoothScroll | 15 min |
| **Theorie 2** — AGENTS.md + config + plugin + stack + Vercel | 17 min |
| **Live Demo 2** — Setup + worktree + bouw + Vercel preview | 20 min |
| **Pauze** | 15 min |
| Lesopdracht: bouw scroll-sectie | 35 min |
| Lesopdracht: bouw scroll-sectie + preview | 28 min |
| Huiswerk + Afsluiting | (eind) |
**Visual:** Timeline met YELLOW pauze-rij + PINK demo-rijen
@@ -298,32 +298,66 @@ scroll storytelling. Kies GSAP voor timing-precisie + GPU-perf.
---
## Slide 13: LIVE DEMO 2 — Setup + Worktree + SmoothScroll
### Wat je nu gaat zien (~15 min)
## Slide 13: Vercel + Preview Deployments
### Feature branches = automatische preview URLs
**Het idee:**
Elke push naar GitHub → Vercel maakt automatisch een **unieke preview URL** voor die branch. Geen handmatige deploys, geen "stuur me een screenshot".
**Setup (eenmalig per project):**
1. `npx vercel link` — koppelt repo aan Vercel project (of via dashboard)
2. Git remote staat → Vercel installeert eigen GitHub App
3. Klaar — elke `git push` triggert deploy
**Hoe het werkt:**
| Branch | Wat krijgt Vercel? | URL |
|--------|-------------------|-----|
| `main` | Production deploy | `jouw-app.vercel.app` |
| `feature-hero` | Preview deploy | `jouw-app-git-feature-hero-jij.vercel.app` |
| `feature-gallery` | Preview deploy | `jouw-app-git-feature-gallery-jij.vercel.app` |
**Waarom dit goud is voor scroll-storytelling:**
- Stuur preview URL naar designers/stakeholders per feature
- Vergelijk verschillende secties side-by-side
- Geen "het werkt op mijn machine"
- Comment in PR direct met working URL
**Combinatie met onze worktrees:**
- 1 worktree = 1 branch = 1 Vercel preview
- 3 features parallel = 3 live previews
**Bronnen:** [20] [21]
---
## Slide 14: LIVE DEMO 2 — Setup + Worktree + Vercel preview
### Wat je nu gaat zien (~20 min)
**Wat ik laat zien:**
1. **AGENTS.md** invullen met onze projectregels
2. **opencode.json** maken met permissions
3. Tonen dat `rm -rf` geblokkeerd wordt
4. **`ocx` + worktree plugin** installeren (was al klaar — kort tonen)
4. **`ocx` + worktree plugin** verifiëren (was al klaar)
5. Via prompt: **worktree feature-hero** aanmaken
6. **+ New Session** → openen op worktree-folder
7. In feature-hero: **SmoothScroll wrapper** laten bouwen
8. Bewijs dat **AGENTS.md regels gevolgd worden** (useGSAP, geen Framer Motion, etc.)
7. **SmoothScroll wrapper** laten bouwen — agent volgt AGENTS.md
8. **`git push origin feature-hero`** vanuit worktree
9. Open Vercel dashboard → toon **preview URL** verschijnt automatisch
10. Open preview URL → scroll-animatie werkt live
**Visual:** Mockup Sessions sidebar + diff-viewer. PINK badge "LIVE DEMO".
**Visual:** Mockup Sessions sidebar + Vercel preview URL. PINK badge "LIVE DEMO".
---
## Slide 14: Pauze
## Slide 15: Pauze
### Pauze!
**Visual:** "Pauze" groot, "15 minuten"
---
## Slide 15: Lesopdracht
### Bouw een scroll-sectie — 35 minuten
## Slide 16: Lesopdracht
### Bouw een scroll-sectie + preview — 28 minuten
**Setup (al klaar in starter):**
- Next.js 16 starter
@@ -332,22 +366,27 @@ scroll storytelling. Kies GSAP voor timing-precisie + GPU-perf.
- SmoothScroll wrapper bestaat al
**Jouw taak:**
0. Fork starter naar **jouw** GitHub + `vercel link`
1. `/init` runnen — check AGENTS.md
2. Vraag agent: maak worktree voor jouw feature
3. Open de worktree in nieuwe Sessions tab
4. Plan-mode → review → Tab → Build
5. Test op `npm run dev`
6. Commit + push
5. Test lokaal op `npm run dev`
6. `git push origin <jouw-branch>` — Vercel deployt automatisch
7. Open preview URL → animatie werkt live → plak in chat
> **Niet klaar in de les?** Geen probleem — je werkt thuis in dezelfde fork
> verder. Het huiswerk bouwt voort op dit punt.
**Sectie keuze:** hero (SplitText) · features-grid (stagger) · testimonials (horizontaal) · gallery (parallax)
---
## Slide 16: Huiswerk
### Bouw je eigen scroll-animatie site
## Slide 17: Huiswerk
### Bouw verder in je les-repo
**Voor volgende week:**
Bouw een **kleine landing page** met 3-4 scroll secties.
Doorbouwen in dezelfde fork als in de les — eerst sectie 1 afmaken (indien nog niet), dan 2-3 extra secties tot een **kleine landing page** met 3-4 scroll secties.
**Eisen:**
- [ ] Eigen `AGENTS.md` (onze mag als basis)
@@ -355,16 +394,16 @@ Bouw een **kleine landing page** met 3-4 scroll secties.
- [ ] **2+ worktrees** gebruikt (Sessions sidebar)
- [ ] **3 verschillende scroll-animaties**
- [ ] Lenis smooth scroll
- [ ] Deploy op Vercel
- [ ] `WORKFLOW.md` reflectie (max 400 woorden)
- [ ] **Vercel gekoppeld** — main = productie, branches = previews
- [ ] `WORKFLOW.md` reflectie (max 400 woorden) met **screenshots van preview URLs per feature**
**Lever in:** GitHub URL + Vercel URL + screenshot van `git worktree list`
**Lever in:** GitHub URL + Production URL + minstens **2 preview URLs** (per worktree-branch) + screenshot `git worktree list`
**Bonus:** Eigen sub-agent · MCP server (context7) · Lighthouse 90+
---
## Slide 17: Afsluiting
## Slide 18: Afsluiting
### Volgende les — Introductie Cursor
**Vandaag gedaan:**
@@ -374,6 +413,7 @@ Bouw een **kleine landing page** met 3-4 scroll secties.
- opencode-worktree plugin via ocx
- Live: Next.js 16 + GSAP + Lenis scroll-site
- Parallel agents via Sessions sidebar
- Vercel preview deployments per branch
**Volgende keer — Cursor:**
- De commerciele tegenhanger van OpenCode
@@ -401,11 +441,12 @@ Bouw een **kleine landing page** met 3-4 scroll secties.
| 10 | Worktree plugin | Theorie | [12] [13] |
| 11 | Demo stack | Theorie | [14][18] |
| 12 | Onze AGENTS.md | Theorie | [14] [15] [19] |
| 13 | **LIVE DEMO 2** | Demo | — |
| 14 | Pauze | Break | — |
| 15 | Lesopdracht | Praktijk | alle |
| 16 | Huiswerk | Praktijk | alle |
| 17 | Afsluiting | Closing | — |
| 13 | Vercel preview deployments | Theorie | [20] [21] |
| 14 | **LIVE DEMO 2** | Demo | — |
| 15 | Pauze | Break | — |
| 16 | Lesopdracht | Praktijk | alle |
| 17 | Huiswerk | Praktijk | alle |
| 18 | Afsluiting | Closing | — |
---
@@ -439,3 +480,7 @@ Bouw een **kleine landing page** met 3-4 scroll secties.
**Lenis:**
- [19] Lenis GitHub — https://github.com/darkroomengineering/lenis
**Vercel:**
- [20] Vercel Preview Deployments — https://vercel.com/docs/deployments/preview-deployments
- [21] Vercel + Git Integration — https://vercel.com/docs/git