aboutsummaryrefslogtreecommitdiff
path: root/Semestr 2
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
commitc5fcf7179a83ef65c86c6a4a390029149e518649 (patch)
treed29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /Semestr 2
parentf8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff)
Duzy commit ze smieciami
Diffstat (limited to 'Semestr 2')
-rw-r--r--Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpgbin365667 -> 0 bytes
-rw-r--r--Semestr 2/algebra/32.jpgbin206132 -> 0 bytes
-rw-r--r--Semestr 2/algebra/33.jpgbin212272 -> 0 bytes
-rw-r--r--Semestr 2/algebra/34.jpgbin190004 -> 0 bytes
-rw-r--r--Semestr 2/algebra/35.jpgbin220677 -> 0 bytes
-rw-r--r--Semestr 2/algebra/36.jpgbin184488 -> 0 bytes
-rw-r--r--Semestr 2/algebra/37.jpgbin171842 -> 0 bytes
-rw-r--r--Semestr 2/algebra/38.jpgbin197921 -> 0 bytes
-rw-r--r--Semestr 2/algebra/39.jpgbin174797 -> 0 bytes
-rw-r--r--Semestr 2/algebra/40.jpgbin195910 -> 0 bytes
-rw-r--r--Semestr 2/algebra/41.jpgbin173475 -> 0 bytes
-rw-r--r--Semestr 2/algebra/42.jpgbin233446 -> 0 bytes
-rw-r--r--Semestr 2/algebra/43.jpgbin188791 -> 0 bytes
-rw-r--r--Semestr 2/algebra/44.jpgbin197980 -> 0 bytes
-rw-r--r--Semestr 2/algebra/45.jpgbin167104 -> 0 bytes
-rw-r--r--Semestr 2/algebra/46.jpgbin210398 -> 0 bytes
-rw-r--r--Semestr 2/algebra/47.jpgbin190287 -> 0 bytes
-rw-r--r--Semestr 2/algebra/48.jpgbin186012 -> 0 bytes
-rw-r--r--Semestr 2/algebra/49.jpgbin182485 -> 0 bytes
-rw-r--r--Semestr 2/algebra/50.jpgbin193019 -> 0 bytes
-rw-r--r--Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpgbin34616 -> 0 bytes
-rw-r--r--Semestr 2/algebra/FraMalEgzamin.pdfbin963445 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z1a.jpgbin173901 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z1b.jpgbin43979 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z2a.jpgbin43523 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z2b.jpgbin46691 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z2c.jpgbin103884 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z4a.jpgbin40713 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z4b.jpgbin60338 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z4c.jpgbin50039 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z5a.jpgbin39674 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z5b.jpgbin31446 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z6.jpgbin39287 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z6a.jpgbin44221 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z6b.jpgbin49631 -> 0 bytes
-rw-r--r--Semestr 2/algebra/egzamin/z6c.jpgbin47465 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad1.jpgbin311797 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad2.jpgbin63809 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad2cd.jpgbin65841 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad3.jpgbin90572 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad4.jpgbin306994 -> 0 bytes
-rw-r--r--Semestr 2/algebra/kolokwium/zad6.jpgbin288908 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/66.pngbin391731 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/67.pngbin389525 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/68.pngbin497884 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/69.pngbin424553 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/70.pngbin348488 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/71.pngbin378907 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/72.pngbin385889 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/73.pngbin369513 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/74.pngbin401320 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/75.pngbin327086 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/76.pngbin375970 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/77.pngbin366403 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad1.jpgbin204448 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad11.jpgbin238123 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad21A.jpgbin194934 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad21B.jpgbin49197 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad21C.jpgbin48670 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad21D.jpgbin309659 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad3.jpgbin255585 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad6.jpgbin233281 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista10/zad7.jpgbin258015 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/78.pngbin1398319 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/79.pngbin1266655 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/80.pngbin1424243 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/81.pngbin1376070 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/82.pngbin1408919 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/83.pngbin1391087 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/84.pngbin1372672 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/85.pngbin1410804 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/86.pngbin1368489 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/87.pngbin1361263 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/88.pngbin1385287 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/89.pngbin1404569 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/90.pngbin1339680 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/91.pngbin1372560 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/92.pngbin1404574 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad1312.jpgbin260095 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad2.jpgbin327561 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad2c.jpgbin126523 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad6.jpgbin122642 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad7a.jpgbin146024 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad7b.jpgbin211857 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista11/zad9.jpgbin92369 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/100.pngbin345246 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/101.pngbin400133 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/102.pngbin302152 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/103.pngbin410059 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/104.pngbin325369 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/105.pngbin356252 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/107.pngbin376442 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/16.jpgbin167273 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/21.jpgbin175859 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/7a.jpgbin189376 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/7b.jpgbin206316 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/8.jpgbin193076 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/9.jpgbin42985 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/95.pngbin341457 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/96.pngbin369495 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/97.pngbin391960 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/98.pngbin340355 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/99.pngbin296338 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/unknown.pngbin1063866 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista12/zad5.jpgbin24117 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/110.pngbin1222766 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/111.pngbin1194865 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/112.pngbin1189988 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/113.pngbin1192181 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/114.pngbin1223165 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/115.pngbin1197864 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/116.pngbin1204290 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/117.pngbin1203324 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/118.pngbin1200359 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/zad11.jpgbin67460 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/zad7.jpgbin174903 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/zad8a.jpgbin46252 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista13/zad8b.jpgbin70384 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/11.jpgbin45816 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/1a.jpgbin46431 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/1aa.jpgbin45878 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/1c.jpgbin89905 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/1cc.jpgbin61182 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/7.jpgbin64599 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/8.jpgbin28811 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/9a.jpgbin37695 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/9b.jpgbin36484 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdfbin608041 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista14/zad18.jpgbin40241 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/32.jpgbin247003 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/34.jpgbin261625 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/36.jpgbin215510 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/38.jpgbin223506 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/40.jpgbin225450 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/42.jpgbin280494 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/44.jpgbin218826 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/46.jpgbin232402 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/48.jpgbin223615 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/50.jpgbin230537 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad10.jpgbin161120 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad10bpoprawka.jpgbin174812 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad11.jpgbin157934 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad12.jpgbin110740 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad13.jpgbin273471 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad6.jpgbin67937 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad8a.jpgbin142464 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad8b.jpgbin88781 -> 0 bytes
-rw-r--r--Semestr 2/algebra/lista9/zad9.jpgbin168035 -> 0 bytes
-rw-r--r--Semestr 2/algebra/z1a-skonwertowany.pdfbin963445 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad101213.jpgbin185244 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad14.jpgbin146485 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad2;3;6;7;11;21.pdfbin1959170 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad2;6;7;9.pdfbin1171720 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad5;7;8;9;16.pdfbin892151 -> 0 bytes
-rw-r--r--Semestr 2/algebra/zad7;8;11;15.pdfbin424939 -> 0 bytes
-rw-r--r--Semestr 2/analiza/Analiza_last_gwiazdka.pdfbin155235 -> 0 bytes
-rw-r--r--Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdfbin693764 -> 0 bytes
-rw-r--r--Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdfbin457283 -> 0 bytes
-rw-r--r--Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdfbin1613519 -> 0 bytes
-rw-r--r--Semestr 2/analiza/Lista7;21pkt.pdfbin918184 -> 0 bytes
-rw-r--r--Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdfbin716107 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/LISTA3;zad11.jpgbin207637 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/l11z8l12z1.jpgbin161554 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/l11z9.jpgbin198131 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/l12z2.jpgbin161375 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/l12z3.jpgbin56891 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/l12z7.jpgbin33902 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/szwarc26.06.jpgbin75212 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad11b.jpgbin128041 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad1a-e.jpgbin166178 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad1f2.jpgbin177380 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad2.jpgbin208902 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad3.jpgbin193499 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad4.jpgbin151935 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad465.jpgbin152331 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad7a.jpgbin206281 -> 0 bytes
-rw-r--r--Semestr 2/analiza/lista11/zad7b.jpgbin206293 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad12.jpgbin49660 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad3;5.jpgbin247822 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad6;8a.jpgbin230676 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad8b1.jpgbin19594 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad8b2.jpgbin30323 -> 0 bytes
-rw-r--r--Semestr 2/analiza/zad8c.jpgbin56019 -> 0 bytes
-rw-r--r--Semestr 2/racket/cnf.rkt188
-rw-r--r--Semestr 2/racket/cw.rkt57
-rw-r--r--Semestr 2/racket/deriv.rkt47
-rw-r--r--Semestr 2/racket/egzamin/rozw2.txt1
-rw-r--r--Semestr 2/racket/egzamin/zad1.bak1
-rw-r--r--Semestr 2/racket/egzamin/zad1.rkt300
-rw-r--r--Semestr 2/racket/egzamin/zad1a.bak300
-rw-r--r--Semestr 2/racket/egzamin/zad1a.rkt314
-rw-r--r--Semestr 2/racket/egzamin/zad1b.bak314
-rw-r--r--Semestr 2/racket/egzamin/zad1b.rkt482
-rw-r--r--Semestr 2/racket/egzamin/zad2.bak119
-rw-r--r--Semestr 2/racket/egzamin/zad2.rkt186
-rw-r--r--Semestr 2/racket/egzamin/zad3.bak4
-rw-r--r--Semestr 2/racket/egzamin/zad3.rkt347
-rw-r--r--Semestr 2/racket/egzamin/zad3a.bak298
-rw-r--r--Semestr 2/racket/egzamin/zad3a.rkt301
-rw-r--r--Semestr 2/racket/l10z18/solution.bak363
-rw-r--r--Semestr 2/racket/l10z18/solution.rkt409
-rw-r--r--Semestr 2/racket/l11/rozw.bak2
-rw-r--r--Semestr 2/racket/l11/rozw.rkt776
-rw-r--r--Semestr 2/racket/l11/solution.bak18
-rw-r--r--Semestr 2/racket/l11/solution.rkt35
-rw-r--r--Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep1
-rw-r--r--Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zobin43422 -> 0 bytes
-rw-r--r--Semestr 2/racket/l11z20/graph.bak97
-rw-r--r--Semestr 2/racket/l11z20/graph.rkt100
-rw-r--r--Semestr 2/racket/l11z20/solution.bak1
-rw-r--r--Semestr 2/racket/l11z20/solution.rkt245
-rw-r--r--Semestr 2/racket/l13/oceny.txt18
-rw-r--r--Semestr 2/racket/l13/rozw.rkt79
-rw-r--r--Semestr 2/racket/l13/solution.rkt124
-rw-r--r--Semestr 2/racket/l13/zad6.rkt132
-rw-r--r--Semestr 2/racket/l14z22/solution.bak70
-rw-r--r--Semestr 2/racket/l14z22/solution.rkt87
-rw-r--r--Semestr 2/racket/l15/kacp.bak55
-rw-r--r--Semestr 2/racket/l15/kacp.rkt59
-rw-r--r--Semestr 2/racket/l15/solution.bak7
-rw-r--r--Semestr 2/racket/l15/solution.rkt85
-rw-r--r--Semestr 2/racket/l7z12/solution.rkt95
-rw-r--r--Semestr 2/racket/l7z13/solution.rkt104
-rw-r--r--Semestr 2/racket/l8z14/solution.bak155
-rw-r--r--Semestr 2/racket/l8z14/solution.rkt201
-rw-r--r--Semestr 2/racket/l8z15/solution.bak187
-rw-r--r--Semestr 2/racket/l8z15/solution.rkt182
-rw-r--r--Semestr 2/racket/l9/zad4.rkt202
-rw-r--r--Semestr 2/racket/l9/zad7.rkt340
-rw-r--r--Semestr 2/racket/l9z16/solution.rkt42
-rw-r--r--Semestr 2/racket/l9z17/solution.rkt266
-rw-r--r--Semestr 2/racket/leftist.rkt105
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep1
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zobin1709 -> 0 bytes
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep1
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zobin3273 -> 0 bytes
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep1
-rw-r--r--Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zobin10868 -> 0 bytes
-rw-r--r--Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep1
-rw-r--r--Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zobin3273 -> 0 bytes
-rw-r--r--Semestr 2/racket/lista5/julita/props.rkt52
-rw-r--r--Semestr 2/racket/lista5/julita/solution.bak164
-rw-r--r--Semestr 2/racket/lista5/julita/solution.rkt164
-rw-r--r--Semestr 2/racket/lista5/prop.rkt1
-rw-r--r--Semestr 2/racket/lista5/props.bak71
-rw-r--r--Semestr 2/racket/lista5/props.rkt52
-rw-r--r--Semestr 2/racket/lista5/skrr/solution.bak135
-rw-r--r--Semestr 2/racket/lista5/skrr/solution.rkt88
-rw-r--r--Semestr 2/racket/lista5/sol2.rkt90
-rw-r--r--Semestr 2/racket/lista5/solution.bak135
-rw-r--r--Semestr 2/racket/lista5/solution.rkt140
-rw-r--r--Semestr 2/racket/lista5/xd.bak4
-rw-r--r--Semestr 2/racket/lista5/xd.rkt4
-rw-r--r--Semestr 2/racket/lista6/lista8/kappa.py13
-rw-r--r--Semestr 2/racket/lista6/lista8/zad1.bak98
-rw-r--r--Semestr 2/racket/lista6/lista8/zad1.rkt104
-rw-r--r--Semestr 2/racket/lista6/lista8/zad4.bak114
-rw-r--r--Semestr 2/racket/lista6/lista8/zad4.rkt118
-rw-r--r--Semestr 2/racket/lista6/lista8/zad5.bak1
-rw-r--r--Semestr 2/racket/lista6/lista8/zad5.rkt151
-rw-r--r--Semestr 2/racket/lista6/lista8/zad6.bak151
-rw-r--r--Semestr 2/racket/lista6/lista8/zad6.rkt171
-rw-r--r--Semestr 2/racket/lista6/lista8/zadanie.rkt98
-rw-r--r--Semestr 2/racket/lista6/solution.bak27
-rw-r--r--Semestr 2/racket/lista6/solution.rkt73
-rw-r--r--Semestr 2/racket/lista6/zad11/solution.bak36
-rw-r--r--Semestr 2/racket/lista6/zad11/solution.rkt58
-rw-r--r--Semestr 2/racket/luk.rkt137
-rw-r--r--Semestr 2/racket/rac.rkt371
-rw-r--r--Semestr 2/racket/solution.rkt14
-rw-r--r--Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpgbin63539 -> 0 bytes
-rw-r--r--Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpgbin47593 -> 0 bytes
-rw-r--r--Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpgbin46311 -> 0 bytes
-rw-r--r--Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpgbin17926 -> 0 bytes
-rw-r--r--Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpgbin48979 -> 0 bytes
-rw-r--r--Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf3629
-rw-r--r--Semestr 2/topo/FraMalCzęść1.pdfbin270505 -> 0 bytes
-rw-r--r--Semestr 2/topo/FraMalCzęść2.pdfbin689315 -> 0 bytes
-rw-r--r--Semestr 2/topo/Topologia2_Franciszek_Malinka.pdfbin198792 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad1a.jpgbin55456 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad1aa.jpgbin49682 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad1b.jpgbin63375 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad1c.jpgbin46532 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2a.jpgbin42734 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2bc.jpgbin54378 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2da.jpgbin55937 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2db.jpgbin56781 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2dc.jpgbin118128 -> 0 bytes
-rw-r--r--Semestr 2/topo/zad2dd.jpgbin36936 -> 0 bytes
289 files changed, 0 insertions, 14369 deletions
diff --git a/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg b/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg
deleted file mode 100644
index b0e2f4e..0000000
--- a/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/32.jpg b/Semestr 2/algebra/32.jpg
deleted file mode 100644
index 8f66fb0..0000000
--- a/Semestr 2/algebra/32.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/33.jpg b/Semestr 2/algebra/33.jpg
deleted file mode 100644
index 200d044..0000000
--- a/Semestr 2/algebra/33.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/34.jpg b/Semestr 2/algebra/34.jpg
deleted file mode 100644
index 39bb45c..0000000
--- a/Semestr 2/algebra/34.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/35.jpg b/Semestr 2/algebra/35.jpg
deleted file mode 100644
index ce2008c..0000000
--- a/Semestr 2/algebra/35.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/36.jpg b/Semestr 2/algebra/36.jpg
deleted file mode 100644
index b776d30..0000000
--- a/Semestr 2/algebra/36.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/37.jpg b/Semestr 2/algebra/37.jpg
deleted file mode 100644
index 18d9384..0000000
--- a/Semestr 2/algebra/37.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/38.jpg b/Semestr 2/algebra/38.jpg
deleted file mode 100644
index 1b90aee..0000000
--- a/Semestr 2/algebra/38.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/39.jpg b/Semestr 2/algebra/39.jpg
deleted file mode 100644
index 6fa2ebb..0000000
--- a/Semestr 2/algebra/39.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/40.jpg b/Semestr 2/algebra/40.jpg
deleted file mode 100644
index 64c2a62..0000000
--- a/Semestr 2/algebra/40.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/41.jpg b/Semestr 2/algebra/41.jpg
deleted file mode 100644
index f160777..0000000
--- a/Semestr 2/algebra/41.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/42.jpg b/Semestr 2/algebra/42.jpg
deleted file mode 100644
index e8de627..0000000
--- a/Semestr 2/algebra/42.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/43.jpg b/Semestr 2/algebra/43.jpg
deleted file mode 100644
index ceffb0c..0000000
--- a/Semestr 2/algebra/43.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/44.jpg b/Semestr 2/algebra/44.jpg
deleted file mode 100644
index 6237e6c..0000000
--- a/Semestr 2/algebra/44.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/45.jpg b/Semestr 2/algebra/45.jpg
deleted file mode 100644
index 1ec6cf1..0000000
--- a/Semestr 2/algebra/45.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/46.jpg b/Semestr 2/algebra/46.jpg
deleted file mode 100644
index c2cbcc0..0000000
--- a/Semestr 2/algebra/46.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/47.jpg b/Semestr 2/algebra/47.jpg
deleted file mode 100644
index 7a4a73c..0000000
--- a/Semestr 2/algebra/47.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/48.jpg b/Semestr 2/algebra/48.jpg
deleted file mode 100644
index d27be3d..0000000
--- a/Semestr 2/algebra/48.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/49.jpg b/Semestr 2/algebra/49.jpg
deleted file mode 100644
index 4a626d9..0000000
--- a/Semestr 2/algebra/49.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/50.jpg b/Semestr 2/algebra/50.jpg
deleted file mode 100644
index 06f0fe4..0000000
--- a/Semestr 2/algebra/50.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg b/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg
deleted file mode 100644
index 48546c1..0000000
--- a/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/FraMalEgzamin.pdf b/Semestr 2/algebra/FraMalEgzamin.pdf
deleted file mode 100644
index a4d4941..0000000
--- a/Semestr 2/algebra/FraMalEgzamin.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z1a.jpg b/Semestr 2/algebra/egzamin/z1a.jpg
deleted file mode 100644
index 6bca7ce..0000000
--- a/Semestr 2/algebra/egzamin/z1a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z1b.jpg b/Semestr 2/algebra/egzamin/z1b.jpg
deleted file mode 100644
index 23fa274..0000000
--- a/Semestr 2/algebra/egzamin/z1b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z2a.jpg b/Semestr 2/algebra/egzamin/z2a.jpg
deleted file mode 100644
index 81a90c2..0000000
--- a/Semestr 2/algebra/egzamin/z2a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z2b.jpg b/Semestr 2/algebra/egzamin/z2b.jpg
deleted file mode 100644
index 510ca22..0000000
--- a/Semestr 2/algebra/egzamin/z2b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z2c.jpg b/Semestr 2/algebra/egzamin/z2c.jpg
deleted file mode 100644
index 361dae8..0000000
--- a/Semestr 2/algebra/egzamin/z2c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z4a.jpg b/Semestr 2/algebra/egzamin/z4a.jpg
deleted file mode 100644
index c1a480e..0000000
--- a/Semestr 2/algebra/egzamin/z4a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z4b.jpg b/Semestr 2/algebra/egzamin/z4b.jpg
deleted file mode 100644
index 85c70c0..0000000
--- a/Semestr 2/algebra/egzamin/z4b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z4c.jpg b/Semestr 2/algebra/egzamin/z4c.jpg
deleted file mode 100644
index 2196e19..0000000
--- a/Semestr 2/algebra/egzamin/z4c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z5a.jpg b/Semestr 2/algebra/egzamin/z5a.jpg
deleted file mode 100644
index b12f4b3..0000000
--- a/Semestr 2/algebra/egzamin/z5a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z5b.jpg b/Semestr 2/algebra/egzamin/z5b.jpg
deleted file mode 100644
index 50f4883..0000000
--- a/Semestr 2/algebra/egzamin/z5b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z6.jpg b/Semestr 2/algebra/egzamin/z6.jpg
deleted file mode 100644
index 3ab55a0..0000000
--- a/Semestr 2/algebra/egzamin/z6.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z6a.jpg b/Semestr 2/algebra/egzamin/z6a.jpg
deleted file mode 100644
index 7af963e..0000000
--- a/Semestr 2/algebra/egzamin/z6a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z6b.jpg b/Semestr 2/algebra/egzamin/z6b.jpg
deleted file mode 100644
index 3c5c3e3..0000000
--- a/Semestr 2/algebra/egzamin/z6b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/egzamin/z6c.jpg b/Semestr 2/algebra/egzamin/z6c.jpg
deleted file mode 100644
index f46689f..0000000
--- a/Semestr 2/algebra/egzamin/z6c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad1.jpg b/Semestr 2/algebra/kolokwium/zad1.jpg
deleted file mode 100644
index f8fa7be..0000000
--- a/Semestr 2/algebra/kolokwium/zad1.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad2.jpg b/Semestr 2/algebra/kolokwium/zad2.jpg
deleted file mode 100644
index 7c92bf4..0000000
--- a/Semestr 2/algebra/kolokwium/zad2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad2cd.jpg b/Semestr 2/algebra/kolokwium/zad2cd.jpg
deleted file mode 100644
index 692419a..0000000
--- a/Semestr 2/algebra/kolokwium/zad2cd.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad3.jpg b/Semestr 2/algebra/kolokwium/zad3.jpg
deleted file mode 100644
index 1f5304c..0000000
--- a/Semestr 2/algebra/kolokwium/zad3.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad4.jpg b/Semestr 2/algebra/kolokwium/zad4.jpg
deleted file mode 100644
index f04662a..0000000
--- a/Semestr 2/algebra/kolokwium/zad4.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/kolokwium/zad6.jpg b/Semestr 2/algebra/kolokwium/zad6.jpg
deleted file mode 100644
index be3acea..0000000
--- a/Semestr 2/algebra/kolokwium/zad6.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/66.png b/Semestr 2/algebra/lista10/66.png
deleted file mode 100644
index da66007..0000000
--- a/Semestr 2/algebra/lista10/66.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/67.png b/Semestr 2/algebra/lista10/67.png
deleted file mode 100644
index a3992f9..0000000
--- a/Semestr 2/algebra/lista10/67.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/68.png b/Semestr 2/algebra/lista10/68.png
deleted file mode 100644
index 9e036f5..0000000
--- a/Semestr 2/algebra/lista10/68.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/69.png b/Semestr 2/algebra/lista10/69.png
deleted file mode 100644
index 1c15346..0000000
--- a/Semestr 2/algebra/lista10/69.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/70.png b/Semestr 2/algebra/lista10/70.png
deleted file mode 100644
index 9665a37..0000000
--- a/Semestr 2/algebra/lista10/70.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/71.png b/Semestr 2/algebra/lista10/71.png
deleted file mode 100644
index b8874b1..0000000
--- a/Semestr 2/algebra/lista10/71.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/72.png b/Semestr 2/algebra/lista10/72.png
deleted file mode 100644
index 756231b..0000000
--- a/Semestr 2/algebra/lista10/72.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/73.png b/Semestr 2/algebra/lista10/73.png
deleted file mode 100644
index 27805e2..0000000
--- a/Semestr 2/algebra/lista10/73.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/74.png b/Semestr 2/algebra/lista10/74.png
deleted file mode 100644
index a441e21..0000000
--- a/Semestr 2/algebra/lista10/74.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/75.png b/Semestr 2/algebra/lista10/75.png
deleted file mode 100644
index 16dedc1..0000000
--- a/Semestr 2/algebra/lista10/75.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/76.png b/Semestr 2/algebra/lista10/76.png
deleted file mode 100644
index 7671d0c..0000000
--- a/Semestr 2/algebra/lista10/76.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/77.png b/Semestr 2/algebra/lista10/77.png
deleted file mode 100644
index ecd5099..0000000
--- a/Semestr 2/algebra/lista10/77.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad1.jpg b/Semestr 2/algebra/lista10/zad1.jpg
deleted file mode 100644
index 43206e2..0000000
--- a/Semestr 2/algebra/lista10/zad1.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad11.jpg b/Semestr 2/algebra/lista10/zad11.jpg
deleted file mode 100644
index 1f6852c..0000000
--- a/Semestr 2/algebra/lista10/zad11.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad21A.jpg b/Semestr 2/algebra/lista10/zad21A.jpg
deleted file mode 100644
index 2e113b2..0000000
--- a/Semestr 2/algebra/lista10/zad21A.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad21B.jpg b/Semestr 2/algebra/lista10/zad21B.jpg
deleted file mode 100644
index c457411..0000000
--- a/Semestr 2/algebra/lista10/zad21B.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad21C.jpg b/Semestr 2/algebra/lista10/zad21C.jpg
deleted file mode 100644
index d6a2eb8..0000000
--- a/Semestr 2/algebra/lista10/zad21C.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad21D.jpg b/Semestr 2/algebra/lista10/zad21D.jpg
deleted file mode 100644
index 2406f53..0000000
--- a/Semestr 2/algebra/lista10/zad21D.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad3.jpg b/Semestr 2/algebra/lista10/zad3.jpg
deleted file mode 100644
index 7c99c84..0000000
--- a/Semestr 2/algebra/lista10/zad3.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad6.jpg b/Semestr 2/algebra/lista10/zad6.jpg
deleted file mode 100644
index e75f2e2..0000000
--- a/Semestr 2/algebra/lista10/zad6.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista10/zad7.jpg b/Semestr 2/algebra/lista10/zad7.jpg
deleted file mode 100644
index 669ccc7..0000000
--- a/Semestr 2/algebra/lista10/zad7.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/78.png b/Semestr 2/algebra/lista11/78.png
deleted file mode 100644
index db20401..0000000
--- a/Semestr 2/algebra/lista11/78.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/79.png b/Semestr 2/algebra/lista11/79.png
deleted file mode 100644
index 21908b8..0000000
--- a/Semestr 2/algebra/lista11/79.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/80.png b/Semestr 2/algebra/lista11/80.png
deleted file mode 100644
index b2a153f..0000000
--- a/Semestr 2/algebra/lista11/80.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/81.png b/Semestr 2/algebra/lista11/81.png
deleted file mode 100644
index 3d65485..0000000
--- a/Semestr 2/algebra/lista11/81.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/82.png b/Semestr 2/algebra/lista11/82.png
deleted file mode 100644
index d90b5b9..0000000
--- a/Semestr 2/algebra/lista11/82.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/83.png b/Semestr 2/algebra/lista11/83.png
deleted file mode 100644
index 915574b..0000000
--- a/Semestr 2/algebra/lista11/83.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/84.png b/Semestr 2/algebra/lista11/84.png
deleted file mode 100644
index d2dda41..0000000
--- a/Semestr 2/algebra/lista11/84.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/85.png b/Semestr 2/algebra/lista11/85.png
deleted file mode 100644
index 00216c8..0000000
--- a/Semestr 2/algebra/lista11/85.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/86.png b/Semestr 2/algebra/lista11/86.png
deleted file mode 100644
index 8f649e3..0000000
--- a/Semestr 2/algebra/lista11/86.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/87.png b/Semestr 2/algebra/lista11/87.png
deleted file mode 100644
index 037ebc4..0000000
--- a/Semestr 2/algebra/lista11/87.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/88.png b/Semestr 2/algebra/lista11/88.png
deleted file mode 100644
index 94a43c9..0000000
--- a/Semestr 2/algebra/lista11/88.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/89.png b/Semestr 2/algebra/lista11/89.png
deleted file mode 100644
index fa58ac9..0000000
--- a/Semestr 2/algebra/lista11/89.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/90.png b/Semestr 2/algebra/lista11/90.png
deleted file mode 100644
index de92a0a..0000000
--- a/Semestr 2/algebra/lista11/90.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/91.png b/Semestr 2/algebra/lista11/91.png
deleted file mode 100644
index 47aff85..0000000
--- a/Semestr 2/algebra/lista11/91.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/92.png b/Semestr 2/algebra/lista11/92.png
deleted file mode 100644
index 42d9caf..0000000
--- a/Semestr 2/algebra/lista11/92.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad1312.jpg b/Semestr 2/algebra/lista11/zad1312.jpg
deleted file mode 100644
index 63674a3..0000000
--- a/Semestr 2/algebra/lista11/zad1312.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad2.jpg b/Semestr 2/algebra/lista11/zad2.jpg
deleted file mode 100644
index 9793c78..0000000
--- a/Semestr 2/algebra/lista11/zad2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad2c.jpg b/Semestr 2/algebra/lista11/zad2c.jpg
deleted file mode 100644
index de85e61..0000000
--- a/Semestr 2/algebra/lista11/zad2c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad6.jpg b/Semestr 2/algebra/lista11/zad6.jpg
deleted file mode 100644
index 582bddc..0000000
--- a/Semestr 2/algebra/lista11/zad6.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad7a.jpg b/Semestr 2/algebra/lista11/zad7a.jpg
deleted file mode 100644
index 944b735..0000000
--- a/Semestr 2/algebra/lista11/zad7a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad7b.jpg b/Semestr 2/algebra/lista11/zad7b.jpg
deleted file mode 100644
index 1e62ad2..0000000
--- a/Semestr 2/algebra/lista11/zad7b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista11/zad9.jpg b/Semestr 2/algebra/lista11/zad9.jpg
deleted file mode 100644
index cb0646e..0000000
--- a/Semestr 2/algebra/lista11/zad9.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/100.png b/Semestr 2/algebra/lista12/100.png
deleted file mode 100644
index 32b2012..0000000
--- a/Semestr 2/algebra/lista12/100.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/101.png b/Semestr 2/algebra/lista12/101.png
deleted file mode 100644
index 4eee8ba..0000000
--- a/Semestr 2/algebra/lista12/101.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/102.png b/Semestr 2/algebra/lista12/102.png
deleted file mode 100644
index 6c2c8b4..0000000
--- a/Semestr 2/algebra/lista12/102.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/103.png b/Semestr 2/algebra/lista12/103.png
deleted file mode 100644
index d417206..0000000
--- a/Semestr 2/algebra/lista12/103.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/104.png b/Semestr 2/algebra/lista12/104.png
deleted file mode 100644
index 3a1522d..0000000
--- a/Semestr 2/algebra/lista12/104.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/105.png b/Semestr 2/algebra/lista12/105.png
deleted file mode 100644
index 583e7d6..0000000
--- a/Semestr 2/algebra/lista12/105.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/107.png b/Semestr 2/algebra/lista12/107.png
deleted file mode 100644
index 9f715e4..0000000
--- a/Semestr 2/algebra/lista12/107.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/16.jpg b/Semestr 2/algebra/lista12/16.jpg
deleted file mode 100644
index 3e7c20c..0000000
--- a/Semestr 2/algebra/lista12/16.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/21.jpg b/Semestr 2/algebra/lista12/21.jpg
deleted file mode 100644
index 263e8d4..0000000
--- a/Semestr 2/algebra/lista12/21.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/7a.jpg b/Semestr 2/algebra/lista12/7a.jpg
deleted file mode 100644
index e84ef5e..0000000
--- a/Semestr 2/algebra/lista12/7a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/7b.jpg b/Semestr 2/algebra/lista12/7b.jpg
deleted file mode 100644
index 061543b..0000000
--- a/Semestr 2/algebra/lista12/7b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/8.jpg b/Semestr 2/algebra/lista12/8.jpg
deleted file mode 100644
index 94f8206..0000000
--- a/Semestr 2/algebra/lista12/8.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/9.jpg b/Semestr 2/algebra/lista12/9.jpg
deleted file mode 100644
index a26d268..0000000
--- a/Semestr 2/algebra/lista12/9.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/95.png b/Semestr 2/algebra/lista12/95.png
deleted file mode 100644
index 07493f5..0000000
--- a/Semestr 2/algebra/lista12/95.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/96.png b/Semestr 2/algebra/lista12/96.png
deleted file mode 100644
index bb1c592..0000000
--- a/Semestr 2/algebra/lista12/96.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/97.png b/Semestr 2/algebra/lista12/97.png
deleted file mode 100644
index 2bf4bee..0000000
--- a/Semestr 2/algebra/lista12/97.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/98.png b/Semestr 2/algebra/lista12/98.png
deleted file mode 100644
index 413f7a6..0000000
--- a/Semestr 2/algebra/lista12/98.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/99.png b/Semestr 2/algebra/lista12/99.png
deleted file mode 100644
index 32f8997..0000000
--- a/Semestr 2/algebra/lista12/99.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/unknown.png b/Semestr 2/algebra/lista12/unknown.png
deleted file mode 100644
index 5556264..0000000
--- a/Semestr 2/algebra/lista12/unknown.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista12/zad5.jpg b/Semestr 2/algebra/lista12/zad5.jpg
deleted file mode 100644
index fabc22b..0000000
--- a/Semestr 2/algebra/lista12/zad5.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/110.png b/Semestr 2/algebra/lista13/110.png
deleted file mode 100644
index 2ac2e37..0000000
--- a/Semestr 2/algebra/lista13/110.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/111.png b/Semestr 2/algebra/lista13/111.png
deleted file mode 100644
index 6c4fc2d..0000000
--- a/Semestr 2/algebra/lista13/111.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/112.png b/Semestr 2/algebra/lista13/112.png
deleted file mode 100644
index 432aec0..0000000
--- a/Semestr 2/algebra/lista13/112.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/113.png b/Semestr 2/algebra/lista13/113.png
deleted file mode 100644
index dad0858..0000000
--- a/Semestr 2/algebra/lista13/113.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/114.png b/Semestr 2/algebra/lista13/114.png
deleted file mode 100644
index ba0a7cb..0000000
--- a/Semestr 2/algebra/lista13/114.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/115.png b/Semestr 2/algebra/lista13/115.png
deleted file mode 100644
index 07d838f..0000000
--- a/Semestr 2/algebra/lista13/115.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/116.png b/Semestr 2/algebra/lista13/116.png
deleted file mode 100644
index 5e19116..0000000
--- a/Semestr 2/algebra/lista13/116.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/117.png b/Semestr 2/algebra/lista13/117.png
deleted file mode 100644
index faa3b2c..0000000
--- a/Semestr 2/algebra/lista13/117.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/118.png b/Semestr 2/algebra/lista13/118.png
deleted file mode 100644
index 572840d..0000000
--- a/Semestr 2/algebra/lista13/118.png
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/zad11.jpg b/Semestr 2/algebra/lista13/zad11.jpg
deleted file mode 100644
index 890377d..0000000
--- a/Semestr 2/algebra/lista13/zad11.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/zad7.jpg b/Semestr 2/algebra/lista13/zad7.jpg
deleted file mode 100644
index 5ec8064..0000000
--- a/Semestr 2/algebra/lista13/zad7.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/zad8a.jpg b/Semestr 2/algebra/lista13/zad8a.jpg
deleted file mode 100644
index c631e11..0000000
--- a/Semestr 2/algebra/lista13/zad8a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista13/zad8b.jpg b/Semestr 2/algebra/lista13/zad8b.jpg
deleted file mode 100644
index d35585b..0000000
--- a/Semestr 2/algebra/lista13/zad8b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/11.jpg b/Semestr 2/algebra/lista14/11.jpg
deleted file mode 100644
index 9197141..0000000
--- a/Semestr 2/algebra/lista14/11.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/1a.jpg b/Semestr 2/algebra/lista14/1a.jpg
deleted file mode 100644
index 3f25d1c..0000000
--- a/Semestr 2/algebra/lista14/1a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/1aa.jpg b/Semestr 2/algebra/lista14/1aa.jpg
deleted file mode 100644
index dd22bde..0000000
--- a/Semestr 2/algebra/lista14/1aa.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/1c.jpg b/Semestr 2/algebra/lista14/1c.jpg
deleted file mode 100644
index 9181ea2..0000000
--- a/Semestr 2/algebra/lista14/1c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/1cc.jpg b/Semestr 2/algebra/lista14/1cc.jpg
deleted file mode 100644
index c258f16..0000000
--- a/Semestr 2/algebra/lista14/1cc.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/7.jpg b/Semestr 2/algebra/lista14/7.jpg
deleted file mode 100644
index cee2b83..0000000
--- a/Semestr 2/algebra/lista14/7.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/8.jpg b/Semestr 2/algebra/lista14/8.jpg
deleted file mode 100644
index 877a488..0000000
--- a/Semestr 2/algebra/lista14/8.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/9a.jpg b/Semestr 2/algebra/lista14/9a.jpg
deleted file mode 100644
index 51fc8fc..0000000
--- a/Semestr 2/algebra/lista14/9a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/9b.jpg b/Semestr 2/algebra/lista14/9b.jpg
deleted file mode 100644
index 14345c8..0000000
--- a/Semestr 2/algebra/lista14/9b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf b/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf
deleted file mode 100644
index bac9a67..0000000
--- a/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista14/zad18.jpg b/Semestr 2/algebra/lista14/zad18.jpg
deleted file mode 100644
index d7cb461..0000000
--- a/Semestr 2/algebra/lista14/zad18.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/32.jpg b/Semestr 2/algebra/lista9/32.jpg
deleted file mode 100644
index 66d37a7..0000000
--- a/Semestr 2/algebra/lista9/32.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/34.jpg b/Semestr 2/algebra/lista9/34.jpg
deleted file mode 100644
index 14d8458..0000000
--- a/Semestr 2/algebra/lista9/34.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/36.jpg b/Semestr 2/algebra/lista9/36.jpg
deleted file mode 100644
index 44cb097..0000000
--- a/Semestr 2/algebra/lista9/36.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/38.jpg b/Semestr 2/algebra/lista9/38.jpg
deleted file mode 100644
index 2ad8395..0000000
--- a/Semestr 2/algebra/lista9/38.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/40.jpg b/Semestr 2/algebra/lista9/40.jpg
deleted file mode 100644
index dbb145c..0000000
--- a/Semestr 2/algebra/lista9/40.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/42.jpg b/Semestr 2/algebra/lista9/42.jpg
deleted file mode 100644
index 36bcae9..0000000
--- a/Semestr 2/algebra/lista9/42.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/44.jpg b/Semestr 2/algebra/lista9/44.jpg
deleted file mode 100644
index fcf96e2..0000000
--- a/Semestr 2/algebra/lista9/44.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/46.jpg b/Semestr 2/algebra/lista9/46.jpg
deleted file mode 100644
index f04c4ed..0000000
--- a/Semestr 2/algebra/lista9/46.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/48.jpg b/Semestr 2/algebra/lista9/48.jpg
deleted file mode 100644
index 988cf50..0000000
--- a/Semestr 2/algebra/lista9/48.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/50.jpg b/Semestr 2/algebra/lista9/50.jpg
deleted file mode 100644
index d4afb6d..0000000
--- a/Semestr 2/algebra/lista9/50.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad10.jpg b/Semestr 2/algebra/lista9/zad10.jpg
deleted file mode 100644
index 6c7137a..0000000
--- a/Semestr 2/algebra/lista9/zad10.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad10bpoprawka.jpg b/Semestr 2/algebra/lista9/zad10bpoprawka.jpg
deleted file mode 100644
index 73f79c2..0000000
--- a/Semestr 2/algebra/lista9/zad10bpoprawka.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad11.jpg b/Semestr 2/algebra/lista9/zad11.jpg
deleted file mode 100644
index 2fb3cb1..0000000
--- a/Semestr 2/algebra/lista9/zad11.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad12.jpg b/Semestr 2/algebra/lista9/zad12.jpg
deleted file mode 100644
index 152c3a4..0000000
--- a/Semestr 2/algebra/lista9/zad12.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad13.jpg b/Semestr 2/algebra/lista9/zad13.jpg
deleted file mode 100644
index 6404ef0..0000000
--- a/Semestr 2/algebra/lista9/zad13.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad6.jpg b/Semestr 2/algebra/lista9/zad6.jpg
deleted file mode 100644
index e392b4b..0000000
--- a/Semestr 2/algebra/lista9/zad6.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad8a.jpg b/Semestr 2/algebra/lista9/zad8a.jpg
deleted file mode 100644
index 37a64a5..0000000
--- a/Semestr 2/algebra/lista9/zad8a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad8b.jpg b/Semestr 2/algebra/lista9/zad8b.jpg
deleted file mode 100644
index 1864fe6..0000000
--- a/Semestr 2/algebra/lista9/zad8b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/lista9/zad9.jpg b/Semestr 2/algebra/lista9/zad9.jpg
deleted file mode 100644
index bababf7..0000000
--- a/Semestr 2/algebra/lista9/zad9.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/z1a-skonwertowany.pdf b/Semestr 2/algebra/z1a-skonwertowany.pdf
deleted file mode 100644
index a4d4941..0000000
--- a/Semestr 2/algebra/z1a-skonwertowany.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad101213.jpg b/Semestr 2/algebra/zad101213.jpg
deleted file mode 100644
index e3bf7e2..0000000
--- a/Semestr 2/algebra/zad101213.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad14.jpg b/Semestr 2/algebra/zad14.jpg
deleted file mode 100644
index 95a8c95..0000000
--- a/Semestr 2/algebra/zad14.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad2;3;6;7;11;21.pdf b/Semestr 2/algebra/zad2;3;6;7;11;21.pdf
deleted file mode 100644
index 6eb52f7..0000000
--- a/Semestr 2/algebra/zad2;3;6;7;11;21.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad2;6;7;9.pdf b/Semestr 2/algebra/zad2;6;7;9.pdf
deleted file mode 100644
index 1a64f57..0000000
--- a/Semestr 2/algebra/zad2;6;7;9.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad5;7;8;9;16.pdf b/Semestr 2/algebra/zad5;7;8;9;16.pdf
deleted file mode 100644
index c20a41e..0000000
--- a/Semestr 2/algebra/zad5;7;8;9;16.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/algebra/zad7;8;11;15.pdf b/Semestr 2/algebra/zad7;8;11;15.pdf
deleted file mode 100644
index 2b1e160..0000000
--- a/Semestr 2/algebra/zad7;8;11;15.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/Analiza_last_gwiazdka.pdf b/Semestr 2/analiza/Analiza_last_gwiazdka.pdf
deleted file mode 100644
index 72d3041..0000000
--- a/Semestr 2/analiza/Analiza_last_gwiazdka.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf b/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf
deleted file mode 100644
index 99b3e17..0000000
--- a/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf b/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf
deleted file mode 100644
index b3814dc..0000000
--- a/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf b/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf
deleted file mode 100644
index 7c37d85..0000000
--- a/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/Lista7;21pkt.pdf b/Semestr 2/analiza/Lista7;21pkt.pdf
deleted file mode 100644
index e7328d9..0000000
--- a/Semestr 2/analiza/Lista7;21pkt.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf b/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf
deleted file mode 100644
index 82894fd..0000000
--- a/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/LISTA3;zad11.jpg b/Semestr 2/analiza/lista11/LISTA3;zad11.jpg
deleted file mode 100644
index 19c129d..0000000
--- a/Semestr 2/analiza/lista11/LISTA3;zad11.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/l11z8l12z1.jpg b/Semestr 2/analiza/lista11/l11z8l12z1.jpg
deleted file mode 100644
index 2766310..0000000
--- a/Semestr 2/analiza/lista11/l11z8l12z1.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/l11z9.jpg b/Semestr 2/analiza/lista11/l11z9.jpg
deleted file mode 100644
index b38f822..0000000
--- a/Semestr 2/analiza/lista11/l11z9.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/l12z2.jpg b/Semestr 2/analiza/lista11/l12z2.jpg
deleted file mode 100644
index 835dd21..0000000
--- a/Semestr 2/analiza/lista11/l12z2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/l12z3.jpg b/Semestr 2/analiza/lista11/l12z3.jpg
deleted file mode 100644
index 38e4ac8..0000000
--- a/Semestr 2/analiza/lista11/l12z3.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/l12z7.jpg b/Semestr 2/analiza/lista11/l12z7.jpg
deleted file mode 100644
index 396f123..0000000
--- a/Semestr 2/analiza/lista11/l12z7.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/szwarc26.06.jpg b/Semestr 2/analiza/lista11/szwarc26.06.jpg
deleted file mode 100644
index 6d6cb60..0000000
--- a/Semestr 2/analiza/lista11/szwarc26.06.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad11b.jpg b/Semestr 2/analiza/lista11/zad11b.jpg
deleted file mode 100644
index 68ad10b..0000000
--- a/Semestr 2/analiza/lista11/zad11b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad1a-e.jpg b/Semestr 2/analiza/lista11/zad1a-e.jpg
deleted file mode 100644
index e1eb2f5..0000000
--- a/Semestr 2/analiza/lista11/zad1a-e.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad1f2.jpg b/Semestr 2/analiza/lista11/zad1f2.jpg
deleted file mode 100644
index 30395f2..0000000
--- a/Semestr 2/analiza/lista11/zad1f2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad2.jpg b/Semestr 2/analiza/lista11/zad2.jpg
deleted file mode 100644
index 60183a4..0000000
--- a/Semestr 2/analiza/lista11/zad2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad3.jpg b/Semestr 2/analiza/lista11/zad3.jpg
deleted file mode 100644
index 9be3db6..0000000
--- a/Semestr 2/analiza/lista11/zad3.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad4.jpg b/Semestr 2/analiza/lista11/zad4.jpg
deleted file mode 100644
index 2535e05..0000000
--- a/Semestr 2/analiza/lista11/zad4.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad465.jpg b/Semestr 2/analiza/lista11/zad465.jpg
deleted file mode 100644
index fcfdda3..0000000
--- a/Semestr 2/analiza/lista11/zad465.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad7a.jpg b/Semestr 2/analiza/lista11/zad7a.jpg
deleted file mode 100644
index 5c045d9..0000000
--- a/Semestr 2/analiza/lista11/zad7a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/lista11/zad7b.jpg b/Semestr 2/analiza/lista11/zad7b.jpg
deleted file mode 100644
index 5308651..0000000
--- a/Semestr 2/analiza/lista11/zad7b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad12.jpg b/Semestr 2/analiza/zad12.jpg
deleted file mode 100644
index 4da6d95..0000000
--- a/Semestr 2/analiza/zad12.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad3;5.jpg b/Semestr 2/analiza/zad3;5.jpg
deleted file mode 100644
index bacf11a..0000000
--- a/Semestr 2/analiza/zad3;5.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad6;8a.jpg b/Semestr 2/analiza/zad6;8a.jpg
deleted file mode 100644
index eec9653..0000000
--- a/Semestr 2/analiza/zad6;8a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad8b1.jpg b/Semestr 2/analiza/zad8b1.jpg
deleted file mode 100644
index e16c886..0000000
--- a/Semestr 2/analiza/zad8b1.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad8b2.jpg b/Semestr 2/analiza/zad8b2.jpg
deleted file mode 100644
index 224a6e6..0000000
--- a/Semestr 2/analiza/zad8b2.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/analiza/zad8c.jpg b/Semestr 2/analiza/zad8c.jpg
deleted file mode 100644
index 91b1be1..0000000
--- a/Semestr 2/analiza/zad8c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/cnf.rkt b/Semestr 2/racket/cnf.rkt
deleted file mode 100644
index 67bd70f..0000000
--- a/Semestr 2/racket/cnf.rkt
+++ /dev/null
@@ -1,188 +0,0 @@
-#lang racket
-
-(define (var? t) (symbol? t))
-
-(define (neg? t)
- (and (list? t)
- (= 2 (length t))
- (eq? 'neg (car t))))
-
-(define (conj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'conj (car t))))
-
-(define (disj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'disj (car t))))
-
-(define (lit? t)
- (or (var? t)
- (and (neg? t)
- (var? (neg-subf t)))))
-
-(define (prop? f)
- (or (var? f)
- (and (neg? f)
- (prop? (neg-subf f)))
- (and (disj? f)
- (prop? (disj-left f))
- (prop? (disj-right f)))
- (and (conj? f)
- (prop? (conj-left f))
- (prop? (conj-right f)))))
-
-(define (make-conj left right)
- (list 'conj left right))
-
-(define (make-disj left right)
- (list 'disj left right))
-
-(define (make-neg f)
- (list 'neg f))
-
-(define (conj-left f)
- (if (conj? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- CONJ-LEFT" f)))
-
-(define (conj-right f)
- (if (conj? f)
- (caddr f)
- (error "Złe dane ze znacznikiem -- CONJ-RIGHT" f)))
-
-(define (disj-left f)
- (if (disj? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- DISJ-LEFT" f)))
-
-(define (disj-right f)
- (if (disj? f)
- (caddr f)
- (error "Złe dane ze znacznikiem -- DISJ-RIGHT" f)))
-
-(define (neg-subf f)
- (if (neg? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- NEG-FORM" f)))
-
-(define (lit-var f)
- (cond [(var? f) f]
- [(neg? f) (neg-subf f)]
- [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)]))
-
-(define (free-vars f)
- (cond [(null? f) null]
- [(var? f) (list f)]
- [(neg? f) (free-vars (neg-subf f))]
- [(conj? f) (append (free-vars (conj-left f))
- (free-vars (conj-right f)))]
- [(disj? f) (append (free-vars (disj-left f))
- (free-vars (disj-right f)))]
- [else (error "Zła formula -- FREE-VARS" f)]))
-
-(define (gen-vals xs)
- (if (null? xs)
- (list null)
- (let*
- ((vss (gen-vals (cdr xs)))
- (x (car xs))
- (vst (map (λ (vs) (cons (list x true) vs)) vss))
- (vsf (map (λ (vs) (cons (list x false) vs)) vss)))
- (append vst vsf))))
-
-(define (eval-formula f evaluation)
- (cond [(var? f)
- (let ((val (assoc f evaluation)))
- (if (not val)
- (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation)
- (cadr val)))]
- [(neg? f) (not (eval-formula (neg-subf f) evaluation))]
- [(disj? f) (or (eval-formula (disj-left f) evaluation)
- (eval-formula (disj-right f) evaluation))]
- [(conj? f) (and (eval-formula (conj-left f) evaluation)
- (eval-formula (conj-right f) evaluation))]
- [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)]))
-
-(define (falsifable-eval? f)
- (let* ((evaluations (gen-vals (free-vars f)))
- (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations)))
- (ormap false? results)))
-
-(define (nff? f)
- (cond [(lit? f) true]
- [(neg? f) false]
- [(conj? f) (and (nff? (conj-left f))
- (nff? (conj-right f)))]
- [(disj? f) (and (nff? (disj-left f))
- (nff? (disj-right f)))]
- [else (error "Zła formuła -- NFF?" f)]))
-
-(define (convert-to-nnf f)
- (cond [(lit? f) f]
- [(neg? f) (convert-negation (neg-subf f))]
- [(conj? f) (make-conj (convert-to-nnf (conj-left f))
- (convert-to-nnf (conj-right f)))]
- [(disj? f) (make-disj (convert-to-nnf (disj-left f))
- (convert-to-nnf (disj-right f)))]
- [else (error "Zła formuła -- CONVERT" f)]))
-
-(define (convert-negation f)
- (cond [(lit? f)
- (if (var? f)
- (make-neg f)
- (neg-subf f))]
- [(neg? f) (convert-to-nnf (neg-subf f))]
- [(conj? f) (make-disj (convert-negation (conj-left f))
- (convert-negation (conj-right f)))]
- [(disj? f) (make-conj (convert-negation (disj-left f))
- (convert-negation (disj-right f)))]
- [else (error "Zła formuła -- CONVERT-NEGATION" f)]))
-
-(define (clause? x)
- (and (list? x)
- (andmap lit? x)))
-
-(define (clause-empty? x)
- (and (clause? x)
- (null? x)))
-
-(define (cnf? x)
- (and (list? x)
- (andmap clause? x)))
-
-(define (flatmap proc seq)
- (foldl append null (map proc seq)))
-
-(define (convert-to-cnf f)
- (define (convert f)
- (cond [(lit? f) (list (list f))]
- [(conj? f) (append (convert-to-cnf (conj-left f))
- (convert-to-cnf (conj-right f)))]
- [(disj? f)
- (let ((clause-left (convert-to-cnf (disj-left f)))
- (clause-right (convert-to-cnf (disj-right f))))
- (flatmap (λ (clause)
- (map (λ (clause2)
- (append clause2 clause)) clause-left))
- clause-right))]))
- (convert (convert-to-nnf f)))
-
-(define (falsifable-clause? clause)
- (cond [(clause-empty? clause) true]
- [(lit? (findf (λ (l) (equal?
- l
- (convert-to-nnf (make-neg (car clause)))))
- clause)) false]
- [else (falsifable-clause? (cdr clause))]))
-
-(define (falsifable-cnf? f)
- (define (neg-value lit)
- (if (var? lit)
- (list lit false)
- (list (neg-subf lit) true)))
- (ormap (λ (clause) (if (falsifable-clause? clause)
- (map neg-value clause)
- false))
- (convert-to-cnf f))) \ No newline at end of file
diff --git a/Semestr 2/racket/cw.rkt b/Semestr 2/racket/cw.rkt
deleted file mode 100644
index f1e706f..0000000
--- a/Semestr 2/racket/cw.rkt
+++ /dev/null
@@ -1,57 +0,0 @@
-#lang racket
-
-(define (accumulate op initial sequence)
- (if (null? sequence)
- initial
- (op (car sequence)
- (accumulate op initial (cdr sequence)))))
-
-(define (horner-eval x coefficient-sequence)
- (accumulate (lambda (this-coeff higher-terms)
- (+ this-coeff (* x higher-terms)))
- 0
- coefficient-sequence))
-
-
-(define (accumulate-n op init seqs)
- (if (null? (car seqs))
- null
- (cons (accumulate op init (map car seqs))
- (accumulate-n op init (map cdr seqs)))))
-
-(define (count-leaves t)
- (accumulate + 0 (map (lambda (x)
- (if (not (pair? x))
- 1
- (count-leaves x))) t)))
-
-(define (flatmap proc seq)
- (accumulate append null (map proc seq)))
-
-(define (prime? x) (= (modulo x 2) 1))
-
-(define (prime-sum? pair)
- (prime? (+ (car pair) (cadr pair))))
-
-(define (make-pair-sum pair)
- (list (car pair) (cadr pair) (+ (car pair) (cadr pair))))
-
-(define (enumerate-interval low high)
- (if (> low high)
- null
- (cons low (enumerate-interval (+ 1 low) high))))
-
-(define (unique-pairs n)
- (flatmap (lambda (i)
- (map (lambda (j) (list j i))
- (enumerate-interval 1 (- i 1))))
- (enumerate-interval 1 n)))
-
-(define (prime-sum-pairs n)
- (map make-pair-sum
- (filter prime-sum? (unique-pairs n))))
-
-(define (is-eq-s? s triplet)
- (= s (accumulate + 0 triplet)))
-
-(define \ No newline at end of file
diff --git a/Semestr 2/racket/deriv.rkt b/Semestr 2/racket/deriv.rkt
deleted file mode 100644
index 0eef9d2..0000000
--- a/Semestr 2/racket/deriv.rkt
+++ /dev/null
@@ -1,47 +0,0 @@
-#lang racket
-
-(define (variable? x) (symbol? x))
-
-(define (same-variable? v1 v2)
- (and (variable? v1) (variable? v2) (eq? v1 v2)))
-
-(define (=number? exp num)
- (and (number? exp) (= exp num)))
-
-(define (make-sum a1 a2)
- (cond ((=number? a1 0) a2)
- ((=number? a2 0) a1)
- ((and (number? a1) (number? a2) (+ a1 a2)))
- (else (list '+ a1 a2))))
-(define (sum? x)
- (and (pair? x) (eq? (car x) '+)))
-(define (addend s) (cadr s))
-(define (augend s) (caddr s))
-
-(define (make-product m1 m2)
- (cond ((or (=number? m1 0) (=number? m2 0)) 0)
- ((=number? m1 1) m2)
- ((=number? m2 1) m1)
- ((and (number? m1) (number? m2)) (* m1 m2))
- (else (list '* m1 m2))))
-(define (product? x)
- (and (pair? x) (eq? (car x) '*)))
-(define (multiplier p) (cadr p))
-(define (multiplicand p) (caddr p))
-
-(define (deriv exp var)
- (cond ((number? exp) 0)
- ((variable? exp)
- (if (same-variable? exp var) 1 0))
- ((sum? exp)
- (make-sum (deriv (addend exp) var)
- (deriv (augend exp) var)))
- ((product? exp)
- (make-sum
- (make-product (multiplier exp)
- (deriv (multiplicand exp) var))
- (make-product (deriv (multiplier exp) var)
- (multiplicand exp))))
- (else
- (error "Nieznany rodzaj wyrazenia -- DERIV" exp))))
- \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/rozw2.txt b/Semestr 2/racket/egzamin/rozw2.txt
deleted file mode 100644
index a70232e..0000000
--- a/Semestr 2/racket/egzamin/rozw2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Zasada indukcji dla \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad1.bak b/Semestr 2/racket/egzamin/zad1.bak
deleted file mode 100644
index 6f1f7b4..0000000
--- a/Semestr 2/racket/egzamin/zad1.bak
+++ /dev/null
@@ -1 +0,0 @@
-#lang racket
diff --git a/Semestr 2/racket/egzamin/zad1.rkt b/Semestr 2/racket/egzamin/zad1.rkt
deleted file mode 100644
index a90d2fd..0000000
--- a/Semestr 2/racket/egzamin/zad1.rkt
+++ /dev/null
@@ -1,300 +0,0 @@
-#lang racket
-
-;; ZADANIE 1
-;; =========
-
-;; W tym zadaniu rozważamy język WHILE (w formie z grubsza
-;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o
-;; lokalnym zakresie.
-
-;; Zadanie polega na dodaniu do języka procedur definiowanych na
-;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie
-;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o
-;; dowolnym wybranym przez siebie modelu działania. W tym celu należy:
-;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów
-;; · rozszerzyć procedurę parsowania
-;; · rozszerzyć ewaluator
-;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia
-;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić
-;; w komentarzu, podobnie jak niniejsze polecenie.
-
-;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele
-;; sensownych rozwiązań które stosowały liczne języki imperatywne w
-;; historii — nie jest treścią zadania znalezienie *najlepszego*,
-;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur
-;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto
-;; pokazać że ma się tego świadomość w słownym opisie jego działania.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct call-expr (name args) #:transparent)
-(struct return-expr (val) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - / > < = >= <=)))
-
-(define (keyword? x)
- (member x '(skip while if := func call return)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(var-expr x)
- (and (symbol? x)
- (not (keyword? x)))]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-(struct skip () #:transparent)
-(struct assign (id exp) #:transparent)
-(struct if-cmd (exp ct cf) #:transparent)
-(struct while (exp cmd) #:transparent)
-(struct comp (left right) #:transparent)
-(struct var-in (name expr cmd) #:transparent)
-(struct function (name args cmd) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))]
- [(while e c) (and (expr? e) (cmd? c))]
- [(comp c1 c2) (and (cmd? c1) (cmd? c2))]
- [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))]
- [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]))
-
-(define (prog? p)
- (cmd? p))
-
-(define (parse-expr p)
- (cond
- [(number? p) (const p)]
- [(and (symbol? p)
- (not (keyword? p)))
- (var-expr p)]
- [(and (list? p)
- (= 3 (length p))
- (operator? (car p)))
- (binop (first p)
- (parse-expr (second p))
- (parse-expr (third p)))]
- [(and (list? p) ; <------ wywołanie funkcji
- (= (length p) 3)
- (eq? (first p) 'call)
- (symbol? (second p))
- (list? (third p)))
- (call-expr (second p) (map parse-expr (third p)))]
- [else false]))
-
-(define (parse-cmd q)
- (cond
- [(eq? q 'skip) (skip)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (second q) ':=))
- (assign (first q) (parse-expr (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'while))
- (while (parse-expr (second q)) (parse-cmd (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'var)
- (list? (second q))
- (= (length (second q)) 2))
- (var-in (first (second q))
- (parse-expr (second (second q)))
- (parse-cmd (third q)))]
- [(and (list? q) ; <------ funkcje
- (= (length q) 4)
- (eq? (first q) 'func)
- (symbol? (second q))
- (list? (third q))
- (andmap symbol? (third q)))
- (function (second q) (third q) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 2)
- (eq? (first q) 'return))
- (return-expr (parse-expr (second q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-comp (map parse-cmd q))]
- [else false]))
-
-(define (desugar-comp cs)
- (if (null? (cdr cs))
- (car cs)
- (comp (car cs)
- (desugar-comp (cdr cs)))))
-
-(define (value? v)
- (number? v))
-
-(struct mem (xs) #:transparent)
-
-(define (mem-lookup x m)
- (define (assoc-lookup xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cdar xs)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane
- (define (assoc-lookup xs)
- (cond
- [(null? xs) #f]
- [(eq? x (caar xs) #t)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-update x v m)
- (define (assoc-update xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cons (cons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (mem (assoc-update (mem-xs m))))
-
-(define (mem-alloc x v m)
- (mem (cons (cons x v) (mem-xs m))))
-
-(define (mem-drop-last m)
- (cond
- [(null? (mem-xs m))
- (error "Deallocating from empty memory")]
- [else
- (mem (cdr (mem-xs m)))]))
-
-(define empty-mem
- (mem null))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]
- ['< (lambda (x y) (if (< x y) 1 0))]
- ['> (lambda (x y) (if (> x y) 1 0))]
- ['= (lambda (x y) (if (= x y) 1 0))]
- ['<= (lambda (x y) (if (<= x y) 1 0))]
- ['>= (lambda (x y) (if (>= x y) 1 0))]
- ))
-
-;; zał: (expr? e) i (mem? m) jest prawdą
-;; (value? (eval e m)) jest prawdą
-(define (eval e m)
- (match e
- [(const v) v]
- [(var-expr x) (mem-lookup x m)]
- [(binop op l r)
- (let ((vl (eval l m))
- (vr (eval r m))
- (p (op->proc op)))
- (p vl vr))]
- [(call-expr name args)
- (match (mem-lookup name m)
- [(clo func-args cmd)
- (if (= (length args) (length func-args))
- (let* ([func-mem (assign-values args func-args m)]
- [final-mem (eval-cmd cmd func-mem)]
- [ret (mem-lookup 'RETURN final-mem)])
- (if ret
- ret
- (error "No return statement in function" name)))
- (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))]
- [else (error "Undefined function" name)])]))
-
-(define (assign-values args func-args mem)
- (if (null? args)
- mem
- (assign-values (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) mem))))
-
-
-(struct clo (args cmd))
-
-;; zał: (cmd? c) (mem? m)
-;; (mem? (eval-cmd c m))
-(define (eval-cmd c m)
- (if (mem-lookup 'RETURN m)
- m
- (match c
- [(skip) m]
- [(assign x e) (mem-update x (eval e m) m)]
- [(if-cmd e ct cf) (if (= (eval e m) 0)
- (eval-cmd cf m)
- (eval-cmd ct m))]
- [(while e cw) (if (= (eval e m) 0)
- m
- (let* ((m1 (eval-cmd cw m))
- (m2 (eval-cmd c m1)))
- m2))]
- [(comp c1 c2) (let* ((m1 (eval-cmd c1 m))
- (m2 (eval-cmd c2 m1)))
- m2)]
- [(var-in x e c) (let* ((v (eval e m))
- (m1 (mem-alloc x v m))
- (m2 (eval-cmd c m1)))
- (mem-drop-last m2))]
- [(function name args cmd)
- (mem-alloc name (clo args cmd) m)]
- [(return-expr val)
- (mem-update 'RETURN (eval val m) m)]
- [_ (error "Unknown command" c "— likely a syntax error")])))
-
-
-(define (eval-prog p m)
- (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m))))
- (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))])
- (match (mem-lookup 'main final-mem)
- [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))]))))
-
-(define WHILE_FACT
- '({func decr (x)
- {(x := (- x 1))
- (return x)}}
- {func main ()
- {(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (call decr (t)))})
- (return i)}}
- ))
-
-(define TEST
- '({func decr (x) (return (- x 1))}
- {func main ()
- (var (x 1)
- {(x := (+ x 1))
- (return (call decr (x)))})}))
-
-(define TEST2
- '({func decr (x) (return (- x 1))}
- {func main () (return (call decr (3)))}))
-
-(define TEST3
- '({func sth (x)
- {(i := -1)
- (return x)}}
- {func main ()
- {(i := 2)
- (return (call sth (i)))}}))
-
-(define TEST4
- '(func f ()
- {return 1}))
-
-(define (fact n)
- (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))])
- (eval-prog (parse-cmd WHILE_FACT) init-env)))
-
diff --git a/Semestr 2/racket/egzamin/zad1a.bak b/Semestr 2/racket/egzamin/zad1a.bak
deleted file mode 100644
index a90d2fd..0000000
--- a/Semestr 2/racket/egzamin/zad1a.bak
+++ /dev/null
@@ -1,300 +0,0 @@
-#lang racket
-
-;; ZADANIE 1
-;; =========
-
-;; W tym zadaniu rozważamy język WHILE (w formie z grubsza
-;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o
-;; lokalnym zakresie.
-
-;; Zadanie polega na dodaniu do języka procedur definiowanych na
-;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie
-;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o
-;; dowolnym wybranym przez siebie modelu działania. W tym celu należy:
-;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów
-;; · rozszerzyć procedurę parsowania
-;; · rozszerzyć ewaluator
-;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia
-;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić
-;; w komentarzu, podobnie jak niniejsze polecenie.
-
-;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele
-;; sensownych rozwiązań które stosowały liczne języki imperatywne w
-;; historii — nie jest treścią zadania znalezienie *najlepszego*,
-;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur
-;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto
-;; pokazać że ma się tego świadomość w słownym opisie jego działania.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct call-expr (name args) #:transparent)
-(struct return-expr (val) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - / > < = >= <=)))
-
-(define (keyword? x)
- (member x '(skip while if := func call return)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(var-expr x)
- (and (symbol? x)
- (not (keyword? x)))]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-(struct skip () #:transparent)
-(struct assign (id exp) #:transparent)
-(struct if-cmd (exp ct cf) #:transparent)
-(struct while (exp cmd) #:transparent)
-(struct comp (left right) #:transparent)
-(struct var-in (name expr cmd) #:transparent)
-(struct function (name args cmd) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))]
- [(while e c) (and (expr? e) (cmd? c))]
- [(comp c1 c2) (and (cmd? c1) (cmd? c2))]
- [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))]
- [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]))
-
-(define (prog? p)
- (cmd? p))
-
-(define (parse-expr p)
- (cond
- [(number? p) (const p)]
- [(and (symbol? p)
- (not (keyword? p)))
- (var-expr p)]
- [(and (list? p)
- (= 3 (length p))
- (operator? (car p)))
- (binop (first p)
- (parse-expr (second p))
- (parse-expr (third p)))]
- [(and (list? p) ; <------ wywołanie funkcji
- (= (length p) 3)
- (eq? (first p) 'call)
- (symbol? (second p))
- (list? (third p)))
- (call-expr (second p) (map parse-expr (third p)))]
- [else false]))
-
-(define (parse-cmd q)
- (cond
- [(eq? q 'skip) (skip)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (second q) ':=))
- (assign (first q) (parse-expr (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'while))
- (while (parse-expr (second q)) (parse-cmd (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'var)
- (list? (second q))
- (= (length (second q)) 2))
- (var-in (first (second q))
- (parse-expr (second (second q)))
- (parse-cmd (third q)))]
- [(and (list? q) ; <------ funkcje
- (= (length q) 4)
- (eq? (first q) 'func)
- (symbol? (second q))
- (list? (third q))
- (andmap symbol? (third q)))
- (function (second q) (third q) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 2)
- (eq? (first q) 'return))
- (return-expr (parse-expr (second q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-comp (map parse-cmd q))]
- [else false]))
-
-(define (desugar-comp cs)
- (if (null? (cdr cs))
- (car cs)
- (comp (car cs)
- (desugar-comp (cdr cs)))))
-
-(define (value? v)
- (number? v))
-
-(struct mem (xs) #:transparent)
-
-(define (mem-lookup x m)
- (define (assoc-lookup xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cdar xs)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane
- (define (assoc-lookup xs)
- (cond
- [(null? xs) #f]
- [(eq? x (caar xs) #t)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-update x v m)
- (define (assoc-update xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cons (cons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (mem (assoc-update (mem-xs m))))
-
-(define (mem-alloc x v m)
- (mem (cons (cons x v) (mem-xs m))))
-
-(define (mem-drop-last m)
- (cond
- [(null? (mem-xs m))
- (error "Deallocating from empty memory")]
- [else
- (mem (cdr (mem-xs m)))]))
-
-(define empty-mem
- (mem null))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]
- ['< (lambda (x y) (if (< x y) 1 0))]
- ['> (lambda (x y) (if (> x y) 1 0))]
- ['= (lambda (x y) (if (= x y) 1 0))]
- ['<= (lambda (x y) (if (<= x y) 1 0))]
- ['>= (lambda (x y) (if (>= x y) 1 0))]
- ))
-
-;; zał: (expr? e) i (mem? m) jest prawdą
-;; (value? (eval e m)) jest prawdą
-(define (eval e m)
- (match e
- [(const v) v]
- [(var-expr x) (mem-lookup x m)]
- [(binop op l r)
- (let ((vl (eval l m))
- (vr (eval r m))
- (p (op->proc op)))
- (p vl vr))]
- [(call-expr name args)
- (match (mem-lookup name m)
- [(clo func-args cmd)
- (if (= (length args) (length func-args))
- (let* ([func-mem (assign-values args func-args m)]
- [final-mem (eval-cmd cmd func-mem)]
- [ret (mem-lookup 'RETURN final-mem)])
- (if ret
- ret
- (error "No return statement in function" name)))
- (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))]
- [else (error "Undefined function" name)])]))
-
-(define (assign-values args func-args mem)
- (if (null? args)
- mem
- (assign-values (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) mem))))
-
-
-(struct clo (args cmd))
-
-;; zał: (cmd? c) (mem? m)
-;; (mem? (eval-cmd c m))
-(define (eval-cmd c m)
- (if (mem-lookup 'RETURN m)
- m
- (match c
- [(skip) m]
- [(assign x e) (mem-update x (eval e m) m)]
- [(if-cmd e ct cf) (if (= (eval e m) 0)
- (eval-cmd cf m)
- (eval-cmd ct m))]
- [(while e cw) (if (= (eval e m) 0)
- m
- (let* ((m1 (eval-cmd cw m))
- (m2 (eval-cmd c m1)))
- m2))]
- [(comp c1 c2) (let* ((m1 (eval-cmd c1 m))
- (m2 (eval-cmd c2 m1)))
- m2)]
- [(var-in x e c) (let* ((v (eval e m))
- (m1 (mem-alloc x v m))
- (m2 (eval-cmd c m1)))
- (mem-drop-last m2))]
- [(function name args cmd)
- (mem-alloc name (clo args cmd) m)]
- [(return-expr val)
- (mem-update 'RETURN (eval val m) m)]
- [_ (error "Unknown command" c "— likely a syntax error")])))
-
-
-(define (eval-prog p m)
- (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m))))
- (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))])
- (match (mem-lookup 'main final-mem)
- [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))]))))
-
-(define WHILE_FACT
- '({func decr (x)
- {(x := (- x 1))
- (return x)}}
- {func main ()
- {(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (call decr (t)))})
- (return i)}}
- ))
-
-(define TEST
- '({func decr (x) (return (- x 1))}
- {func main ()
- (var (x 1)
- {(x := (+ x 1))
- (return (call decr (x)))})}))
-
-(define TEST2
- '({func decr (x) (return (- x 1))}
- {func main () (return (call decr (3)))}))
-
-(define TEST3
- '({func sth (x)
- {(i := -1)
- (return x)}}
- {func main ()
- {(i := 2)
- (return (call sth (i)))}}))
-
-(define TEST4
- '(func f ()
- {return 1}))
-
-(define (fact n)
- (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))])
- (eval-prog (parse-cmd WHILE_FACT) init-env)))
-
diff --git a/Semestr 2/racket/egzamin/zad1a.rkt b/Semestr 2/racket/egzamin/zad1a.rkt
deleted file mode 100644
index a587359..0000000
--- a/Semestr 2/racket/egzamin/zad1a.rkt
+++ /dev/null
@@ -1,314 +0,0 @@
-#lang racket
-
-;; ZADANIE 1
-;; =========
-
-;; W tym zadaniu rozważamy język WHILE (w formie z grubsza
-;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o
-;; lokalnym zakresie.
-
-;; Zadanie polega na dodaniu do języka procedur definiowanych na
-;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie
-;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o
-;; dowolnym wybranym przez siebie modelu działania. W tym celu należy:
-;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów
-;; · rozszerzyć procedurę parsowania
-;; · rozszerzyć ewaluator
-;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia
-;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić
-;; w komentarzu, podobnie jak niniejsze polecenie.
-
-;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele
-;; sensownych rozwiązań które stosowały liczne języki imperatywne w
-;; historii — nie jest treścią zadania znalezienie *najlepszego*,
-;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur
-;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto
-;; pokazać że ma się tego świadomość w słownym opisie jego działania.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct call-expr (name args) #:transparent)
-(struct return-expr (val) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - / > < = >= <=)))
-
-(define (keyword? x)
- (member x '(skip while if := func call return)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(var-expr x)
- (and (symbol? x)
- (not (keyword? x)))]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-(struct skip () #:transparent)
-(struct assign (id exp) #:transparent)
-(struct if-cmd (exp ct cf) #:transparent)
-(struct while (exp cmd) #:transparent)
-(struct comp (left right) #:transparent)
-(struct var-in (name expr cmd) #:transparent)
-(struct function (name args cmd) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))]
- [(while e c) (and (expr? e) (cmd? c))]
- [(comp c1 c2) (and (cmd? c1) (cmd? c2))]
- [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))]
- [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]))
-
-(define (prog? p)
- (cmd? p))
-
-(define (parse-expr p)
- (cond
- [(number? p) (const p)]
- [(and (symbol? p)
- (not (keyword? p)))
- (var-expr p)]
- [(and (list? p)
- (= 3 (length p))
- (operator? (car p)))
- (binop (first p)
- (parse-expr (second p))
- (parse-expr (third p)))]
- [(and (list? p) ; <------ wywołanie funkcji
- (= (length p) 3)
- (eq? (first p) 'call)
- (symbol? (second p))
- (list? (third p)))
- (call-expr (second p) (map parse-expr (third p)))]
- [else false]))
-
-(define (parse-cmd q)
- (cond
- [(eq? q 'skip) (skip)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (second q) ':=))
- (assign (first q) (parse-expr (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'while))
- (while (parse-expr (second q)) (parse-cmd (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'var)
- (list? (second q))
- (= (length (second q)) 2))
- (var-in (first (second q))
- (parse-expr (second (second q)))
- (parse-cmd (third q)))]
- [(and (list? q) ; <------ funkcje
- (= (length q) 4)
- (eq? (first q) 'func)
- (symbol? (second q))
- (list? (third q))
- (andmap symbol? (third q)))
- (function (second q) (third q) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 2)
- (eq? (first q) 'return))
- (return-expr (parse-expr (second q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-comp (map parse-cmd q))]
- [else false]))
-
-(define (desugar-comp cs)
- (if (null? (cdr cs))
- (car cs)
- (comp (car cs)
- (desugar-comp (cdr cs)))))
-
-(define (value? v)
- (number? v))
-
-(struct mem (xs) #:transparent)
-
-(define (mem-lookup x m)
- (define (assoc-lookup xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cdar xs)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane
- (define (assoc-lookup xs)
- (cond
- [(null? xs) #f]
- [(eq? x (caar xs) #t)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-update x v m)
- (define (assoc-update xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cons (cons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (mem (assoc-update (mem-xs m))))
-
-(define (mem-alloc x v m)
- (mem (cons (cons x v) (mem-xs m))))
-
-(define (mem-drop-last m)
- (cond
- [(null? (mem-xs m))
- (error "Deallocating from empty memory")]
- [else
- (mem (cdr (mem-xs m)))]))
-
-(define empty-mem
- (mem null))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]
- ['< (lambda (x y) (if (< x y) 1 0))]
- ['> (lambda (x y) (if (> x y) 1 0))]
- ['= (lambda (x y) (if (= x y) 1 0))]
- ['<= (lambda (x y) (if (<= x y) 1 0))]
- ['>= (lambda (x y) (if (>= x y) 1 0))]
- ))
-
-;; zał: (expr? e) i (mem? m) jest prawdą
-;; (value? (eval e m)) jest prawdą
-(define (eval e m)
- (match e
- [(const v) v]
- [(var-expr x) (mem-lookup x m)]
- [(binop op l r)
- (let ((vl (eval l m))
- (vr (eval r m))
- (p (op->proc op)))
- (p vl vr))]
- [(call-expr name args)
- (match (mem-lookup name m)
- [(clo func-args cmd)
- (if (= (length args) (length func-args))
- (let* ([func-mem (assign-values args func-args m)]
- [final-mem (eval-cmd cmd func-mem)]
- [ret (mem-lookup 'RETURN final-mem)])
- (if ret
- ret
- (error "No return statement in function" name)))
- (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))]
- [else (error "Undefined function" name)])]))
-
-(define (assign-values args func-args mem)
- (define (iter args func-args new-mem)
- (if (null? args)
- new-mem
- (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem))))
- (iter args func-args mem))
-
-
-(struct clo (args cmd))
-
-;; zał: (cmd? c) (mem? m)
-;; (mem? (eval-cmd c m))
-(define (eval-cmd c m)
- (if (mem-lookup 'RETURN m)
- m
- (match c
- [(skip) m]
- [(assign x e) (mem-update x (eval e m) m)]
- [(if-cmd e ct cf) (if (= (eval e m) 0)
- (eval-cmd cf m)
- (eval-cmd ct m))]
- [(while e cw) (if (= (eval e m) 0)
- m
- (let* ((m1 (eval-cmd cw m))
- (m2 (eval-cmd c m1)))
- m2))]
- [(comp c1 c2) (let* ((m1 (eval-cmd c1 m))
- (m2 (eval-cmd c2 m1)))
- m2)]
- [(var-in x e c) (let* ((v (eval e m))
- (m1 (mem-alloc x v m))
- (m2 (eval-cmd c m1)))
- (mem-drop-last m2))]
- [(function name args cmd)
- (mem-alloc name (clo args cmd) m)]
- [(return-expr val)
- (mem-update 'RETURN (eval val m) m)]
- [_ (error "Unknown command" c "— likely a syntax error")])))
-
-
-(define (eval-prog p m)
- (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m))))
- (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))])
- (match (mem-lookup 'main final-mem)
- [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))]))))
-
-(define WHILE_FACT
- '({func decr (x)
- {(x := (- x 1))
- (return x)}}
- {func main ()
- {(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (call decr (t)))})
- (return i)}}
- ))
-
-(define (fact n)
- (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))])
- (eval-prog (parse-cmd WHILE_FACT) init-env)))
-
-(define TEST
- '({func decr (x) (return (- x 1))}
- {func main ()
- (var (x 1)
- {(x := (+ x 1))
- (return (call decr (x)))})}))
-
-(define TEST2
- '({func decr (x) (return (- x 1))}
- {func main () (return (call decr (3)))}))
-
-(define TEST3
- '({func sth (x)
- {(i := -1)
- (return x)}}
- {func main ()
- {(i := 2)
- (return (call sth (i)))}}))
-
-(define TEST4
- '(func f ()
- {return 1}))
-
-(define TEST5
- '({func f1 (x y z)
- (return y)}
- {func f2 (x y z)
- (return (+ (+ x y) z))}
- {func main ()
- {(if (> 4 3)
- (var (x 2)
- (return (call f1 (1 x 3))))
- (x := 5))
- (return (call f2 (x 3 4)))}}))
- \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad1b.bak b/Semestr 2/racket/egzamin/zad1b.bak
deleted file mode 100644
index a587359..0000000
--- a/Semestr 2/racket/egzamin/zad1b.bak
+++ /dev/null
@@ -1,314 +0,0 @@
-#lang racket
-
-;; ZADANIE 1
-;; =========
-
-;; W tym zadaniu rozważamy język WHILE (w formie z grubsza
-;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o
-;; lokalnym zakresie.
-
-;; Zadanie polega na dodaniu do języka procedur definiowanych na
-;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie
-;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o
-;; dowolnym wybranym przez siebie modelu działania. W tym celu należy:
-;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów
-;; · rozszerzyć procedurę parsowania
-;; · rozszerzyć ewaluator
-;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia
-;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić
-;; w komentarzu, podobnie jak niniejsze polecenie.
-
-;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele
-;; sensownych rozwiązań które stosowały liczne języki imperatywne w
-;; historii — nie jest treścią zadania znalezienie *najlepszego*,
-;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur
-;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto
-;; pokazać że ma się tego świadomość w słownym opisie jego działania.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct call-expr (name args) #:transparent)
-(struct return-expr (val) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - / > < = >= <=)))
-
-(define (keyword? x)
- (member x '(skip while if := func call return)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(var-expr x)
- (and (symbol? x)
- (not (keyword? x)))]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-(struct skip () #:transparent)
-(struct assign (id exp) #:transparent)
-(struct if-cmd (exp ct cf) #:transparent)
-(struct while (exp cmd) #:transparent)
-(struct comp (left right) #:transparent)
-(struct var-in (name expr cmd) #:transparent)
-(struct function (name args cmd) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))]
- [(while e c) (and (expr? e) (cmd? c))]
- [(comp c1 c2) (and (cmd? c1) (cmd? c2))]
- [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))]
- [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]))
-
-(define (prog? p)
- (cmd? p))
-
-(define (parse-expr p)
- (cond
- [(number? p) (const p)]
- [(and (symbol? p)
- (not (keyword? p)))
- (var-expr p)]
- [(and (list? p)
- (= 3 (length p))
- (operator? (car p)))
- (binop (first p)
- (parse-expr (second p))
- (parse-expr (third p)))]
- [(and (list? p) ; <------ wywołanie funkcji
- (= (length p) 3)
- (eq? (first p) 'call)
- (symbol? (second p))
- (list? (third p)))
- (call-expr (second p) (map parse-expr (third p)))]
- [else false]))
-
-(define (parse-cmd q)
- (cond
- [(eq? q 'skip) (skip)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (second q) ':=))
- (assign (first q) (parse-expr (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'while))
- (while (parse-expr (second q)) (parse-cmd (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'var)
- (list? (second q))
- (= (length (second q)) 2))
- (var-in (first (second q))
- (parse-expr (second (second q)))
- (parse-cmd (third q)))]
- [(and (list? q) ; <------ funkcje
- (= (length q) 4)
- (eq? (first q) 'func)
- (symbol? (second q))
- (list? (third q))
- (andmap symbol? (third q)))
- (function (second q) (third q) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 2)
- (eq? (first q) 'return))
- (return-expr (parse-expr (second q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-comp (map parse-cmd q))]
- [else false]))
-
-(define (desugar-comp cs)
- (if (null? (cdr cs))
- (car cs)
- (comp (car cs)
- (desugar-comp (cdr cs)))))
-
-(define (value? v)
- (number? v))
-
-(struct mem (xs) #:transparent)
-
-(define (mem-lookup x m)
- (define (assoc-lookup xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cdar xs)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane
- (define (assoc-lookup xs)
- (cond
- [(null? xs) #f]
- [(eq? x (caar xs) #t)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-update x v m)
- (define (assoc-update xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cons (cons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (mem (assoc-update (mem-xs m))))
-
-(define (mem-alloc x v m)
- (mem (cons (cons x v) (mem-xs m))))
-
-(define (mem-drop-last m)
- (cond
- [(null? (mem-xs m))
- (error "Deallocating from empty memory")]
- [else
- (mem (cdr (mem-xs m)))]))
-
-(define empty-mem
- (mem null))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]
- ['< (lambda (x y) (if (< x y) 1 0))]
- ['> (lambda (x y) (if (> x y) 1 0))]
- ['= (lambda (x y) (if (= x y) 1 0))]
- ['<= (lambda (x y) (if (<= x y) 1 0))]
- ['>= (lambda (x y) (if (>= x y) 1 0))]
- ))
-
-;; zał: (expr? e) i (mem? m) jest prawdą
-;; (value? (eval e m)) jest prawdą
-(define (eval e m)
- (match e
- [(const v) v]
- [(var-expr x) (mem-lookup x m)]
- [(binop op l r)
- (let ((vl (eval l m))
- (vr (eval r m))
- (p (op->proc op)))
- (p vl vr))]
- [(call-expr name args)
- (match (mem-lookup name m)
- [(clo func-args cmd)
- (if (= (length args) (length func-args))
- (let* ([func-mem (assign-values args func-args m)]
- [final-mem (eval-cmd cmd func-mem)]
- [ret (mem-lookup 'RETURN final-mem)])
- (if ret
- ret
- (error "No return statement in function" name)))
- (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))]
- [else (error "Undefined function" name)])]))
-
-(define (assign-values args func-args mem)
- (define (iter args func-args new-mem)
- (if (null? args)
- new-mem
- (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem))))
- (iter args func-args mem))
-
-
-(struct clo (args cmd))
-
-;; zał: (cmd? c) (mem? m)
-;; (mem? (eval-cmd c m))
-(define (eval-cmd c m)
- (if (mem-lookup 'RETURN m)
- m
- (match c
- [(skip) m]
- [(assign x e) (mem-update x (eval e m) m)]
- [(if-cmd e ct cf) (if (= (eval e m) 0)
- (eval-cmd cf m)
- (eval-cmd ct m))]
- [(while e cw) (if (= (eval e m) 0)
- m
- (let* ((m1 (eval-cmd cw m))
- (m2 (eval-cmd c m1)))
- m2))]
- [(comp c1 c2) (let* ((m1 (eval-cmd c1 m))
- (m2 (eval-cmd c2 m1)))
- m2)]
- [(var-in x e c) (let* ((v (eval e m))
- (m1 (mem-alloc x v m))
- (m2 (eval-cmd c m1)))
- (mem-drop-last m2))]
- [(function name args cmd)
- (mem-alloc name (clo args cmd) m)]
- [(return-expr val)
- (mem-update 'RETURN (eval val m) m)]
- [_ (error "Unknown command" c "— likely a syntax error")])))
-
-
-(define (eval-prog p m)
- (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m))))
- (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))])
- (match (mem-lookup 'main final-mem)
- [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))]))))
-
-(define WHILE_FACT
- '({func decr (x)
- {(x := (- x 1))
- (return x)}}
- {func main ()
- {(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (call decr (t)))})
- (return i)}}
- ))
-
-(define (fact n)
- (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))])
- (eval-prog (parse-cmd WHILE_FACT) init-env)))
-
-(define TEST
- '({func decr (x) (return (- x 1))}
- {func main ()
- (var (x 1)
- {(x := (+ x 1))
- (return (call decr (x)))})}))
-
-(define TEST2
- '({func decr (x) (return (- x 1))}
- {func main () (return (call decr (3)))}))
-
-(define TEST3
- '({func sth (x)
- {(i := -1)
- (return x)}}
- {func main ()
- {(i := 2)
- (return (call sth (i)))}}))
-
-(define TEST4
- '(func f ()
- {return 1}))
-
-(define TEST5
- '({func f1 (x y z)
- (return y)}
- {func f2 (x y z)
- (return (+ (+ x y) z))}
- {func main ()
- {(if (> 4 3)
- (var (x 2)
- (return (call f1 (1 x 3))))
- (x := 5))
- (return (call f2 (x 3 4)))}}))
- \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad1b.rkt b/Semestr 2/racket/egzamin/zad1b.rkt
deleted file mode 100644
index 628619f..0000000
--- a/Semestr 2/racket/egzamin/zad1b.rkt
+++ /dev/null
@@ -1,482 +0,0 @@
-#lang racket
-
-
-
-;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem
-;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu,
-;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania.
-;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich
-;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem
-;; i nie udostępniałem nikomu swojego rozwiązania.
-
-;; ZADANIE 1
-;; =========
-
-;; W tym zadaniu rozważamy język WHILE (w formie z grubsza
-;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o
-;; lokalnym zakresie.
-
-;; Zadanie polega na dodaniu do języka procedur definiowanych na
-;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie
-;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o
-;; dowolnym wybranym przez siebie modelu działania. W tym celu należy:
-;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów
-;; · rozszerzyć procedurę parsowania
-;; · rozszerzyć ewaluator
-;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia
-;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić
-;; w komentarzu, podobnie jak niniejsze polecenie.
-
-;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele
-;; sensownych rozwiązań które stosowały liczne języki imperatywne w
-;; historii — nie jest treścią zadania znalezienie *najlepszego*,
-;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur
-;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto
-;; pokazać że ma się tego świadomość w słownym opisie jego działania.
-
-
-
-
-
-
-
-;; Postanowiłem, że struktura programów w moim języku będzie miała trochę z pythona i trochę z C.
-;; Istotną decyzją którą podjąłem jest to, że wszystkie funkcje w naszym języku muszą zwracać
-;; jakąś wartość (zawsze zwracają inta), łącznie z funkcją main, przy pomocy dyrektywy "return".
-;; To, co zwraca main, jest tym co zwraca
-;; cały program (z małym wyjątkiem, ale o tym później). Okazało się, że takie podejście
-;; do sprawy jest bardzo wygodne -- nie musiałem się dzięki temu nawet przejmować
-;; osobnym implementowaniem funkcji rekurencyjnych, wzajemnie rekurencyjnych
-;; czy nawet zagnieżdżonych, a do tego można definiować funkcje w dowolnej kolejności!
-;; Co więcej, funkcje przyjmują dowolnie wiele argumentów, również 0.
-;; On top of that, do funkcji można przekazywać cokolwiek co ewaluuje się do wartości
-;; Czyli mozna przekazywać wartości zmiennych, jak i dowolne wyrażenia!
-
-;; Oto przykładowy kod, po którym raczej jasno widać w jak wygląda nowa składnia:
-(define BINOM '({func main ()
- (return (call binom (N K)))}
- {func fact (t)
- (if (= t 0)
- (return 1)
- ({func decr (x) (return (- x 1))}
- (return (* t (call fact ((call decr (t))))))))}
- {func binom (n k)
- (if (= k 0)
- (return 1)
- (var (num (call fact (n)))
- (var (den (* (call fact (k)) (call fact ((- n k)))))
- (return (/ num den)))))}
- ))
-(define (bin n k)
- (eval-prog (parse-cmd BINOM) (mem-alloc 'i 1 (mem-alloc 'N n (mem-alloc 'K k empty-mem)))))
-;; Specjalnie trochę pokomplikowałem, ale widać featury naszego języka.
-
-;; Jak to w ogóle działa?
-
-;; Za każdym razem, kiedy definiuję funkcję, to do środowiska dodaję parę (nazwa funkcji . clo),
-;; gdzie clo jest takim quasi-domknięciem, jest to po prostu struktura trzymająca nazwy
-;; argumentów funkcji oraz jej ciało. Właśnie takie podejście bardzo dobrze
-;; załatwiło łatwość w definiowaniu funkcji rekurencyjnych oraz wzajemnie rekurencyjnych i
-;; zagnieżdżonych -- żadna funkcja nie zostanie wywołana, dopóki nie wywołam maina,
-;; a tego wywołam dopiero po zewaluowaniu wszystkich definicji (tym samym dodaniu ich do środowiska).
-
-;; Takie podejście ma trochę problemów, chyba największym z nich jest to, że nie ma możliwości
-;; zmiany wartości globalnych wewnątrz funkcji. Tj. możemy je zmieniać, ale zmiany będą
-;; widoczne jedynie w jej lokalnym zakresie.
-;; W zasadzie nie jest to aż tak bolesne -- globalne zmienne możemy traktować po prostu
-;; jak argumenty wywołania funkcji main.
-
-;; Wywoływać funkcję mogę tylko za pomocą specjalnego wyrażenia call,
-;; które jako pierwszy argument
-;; przyjmuje nazwę funkcji, a jako drugi przyjmuje listę argumentów.
-;; Żeby wiedzieć jak działa call, spójrzmy najpierw jak działa return.
-
-;; return napisane jest tak, że jeśli w jakimkolwiek miejscu funkcji
-;; się na niego trafi, to reszta funkcji nie jest już wywoływana
-;; (czyli tak jakbyśmy sie spodziewali). Jak on w sumie działa?
-;; Na samym początku eval-prog, zanim zacznę w ogóle ewaluować definicje funkcji,
-;; dodaje do środowiska specjalną zmienną o nazwie RETURN o wartości #f.
-;; Jeśli w funkcji gdziekolwiek wywołam returna, to
-;; zmieniam wartość RETURN w środowisku na to, co chcę zwrócić.
-;; W eval-cmd za każdym razem sprawdzam jaka jest wartość RETURN.
-;; Jeśli jest to #f, to pracuje jakby nigdy nic, a jeśli jest to coś innego,
-;; to po prostu zwracam aktualne środowisko.
-;; Zatem funkcja zwraca środowisko, w którym zmienna RETURN
-;; ustawiona jest na wynik jej obliczenia.
-
-;; Teraz już prosto widać, że jedyne co robi call, to szuka ciała funkcji
-;; w środowisku i wywołuje ją dla podanych argumentów, dostaje od tej
-;; funkcji środowisko, a następnie odzyskuje wartość RETURN w zwróconym
-;; przez nią środowisku. Dzięki temu po wywołaniu funkcji
-;; wewnątrz innej funkcji nie zmienią się wartości żadnych zmiennych (w tym globalnych).
-;; Jest to dosyć podobne do pythona -- tam inty są immutable i nie można ich wysłać przez
-;; referencję. Ale możemy to robić jeśli się uprzemy np. tak:
-;; {func decr (x)
-;; (return (- x 1))}
-;; {func main ()
-;; {(i := (call decr (i)))
-;; (return i)}
-;; Uruchomienie takiego programu ze zmienną globalną i zwróci oczywiście i-1.
-
-;; Mały problem którego za bardzo nie umiem rozwiązać jest taki, że jeśli gdzieś poza
-;; jakąkolwiek funkcją wywołam return, to wartość którą tam zwrócę będzie
-;; wartością dla całego programu, bo zmienna RETURN w środowisku zmieni swoją wartość
-;; na coś innego od #f i niestety main nawet się nie wykona (na samym wstępie stwierdzi,
-;; że coś zostało już zwrócone). Widać to w TEST10. Generalnie co za tym idzie,
-;; między definicjami funkcji mogą być jakieś instrukcje, które zostaną
-;; wywołane razem z ewaluacją programu, zanim zostanie wywołany main.
-
-;; Dodatkowe informacje umieściłem w komentarzach w odpowiednich miejscach pliku.
-;; Na dole umieściłem kilka testów które pokazują co jak działa.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct call-expr (name args) #:transparent) ;; wywołanie funkcji
-
-(define (operator? x)
- (member x '(+ * - / > < = >= <=)))
-
-(define (keyword? x)
- (member x '(skip while if := func func-rec call return))) ;; kilka nowych słów kluczowych
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(var-expr x)
- (and (symbol? x)
- (not (keyword? x)))]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [(call-expr n a)
- (and (symbol? n)
- (list? a)
- (andmap expr? a))]
- [_ false]))
-
-(struct skip () #:transparent)
-(struct assign (id exp) #:transparent)
-(struct if-cmd (exp ct cf) #:transparent)
-(struct while (exp cmd) #:transparent)
-(struct comp (left right) #:transparent)
-(struct var-in (name expr cmd) #:transparent)
-(struct function (name args cmd) #:transparent) ;; dodane funkcje, funkcje rekurencyjne oraz return
-(struct funcrec (name args cmd) #:transparent)
-(struct return-stat (exp) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))]
- [(while e c) (and (expr? e) (cmd? c))]
- [(comp c1 c2) (and (cmd? c1) (cmd? c2))]
- [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))]
- [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]
- [(funcrec f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))]
- [(return-stat exp) (expr? exp)]))
-
-(define (prog? p)
- (cmd? p))
-
-(define (parse-expr p)
- (cond
- [(number? p) (const p)]
- [(and (symbol? p)
- (not (keyword? p)))
- (var-expr p)]
- [(and (list? p)
- (= 3 (length p))
- (operator? (car p)))
- (binop (first p)
- (parse-expr (second p))
- (parse-expr (third p)))]
- [(and (list? p) ; <------ wywołanie funkcji
- (= (length p) 3)
- (eq? (first p) 'call)
- (symbol? (second p))
- (list? (third p)))
- (call-expr (second p) (map parse-expr (third p)))]
- [else false]))
-
-(define (parse-cmd q)
- (cond
- [(eq? q 'skip) (skip)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (second q) ':=))
- (assign (first q) (parse-expr (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'while))
- (while (parse-expr (second q)) (parse-cmd (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'var)
- (list? (second q))
- (= (length (second q)) 2))
- (var-in (first (second q))
- (parse-expr (second (second q)))
- (parse-cmd (third q)))]
- [(and (list? q) ; <------ funkcje
- (= (length q) 4)
- (eq? (first q) 'func)
- (symbol? (second q))
- (list? (third q))
- (andmap symbol? (third q)))
- (function (second q) (third q) (parse-cmd (fourth q)))]
- [(and (list? q) ; <------ return
- (= (length q) 2)
- (eq? (first q) 'return))
- (return-stat (parse-expr (second q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-comp (map parse-cmd q))]
- [else false]))
-
-(define (desugar-comp cs)
- (if (null? (cdr cs))
- (car cs)
- (comp (car cs)
- (desugar-comp (cdr cs)))))
-
-(define (value? v)
- (number? v))
-
-(struct mem (xs) #:transparent)
-
-(define (mem-lookup x m)
- (define (assoc-lookup xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cdar xs)]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (mem-xs m)))
-
-(define (mem-update x v m)
- (define (assoc-update xs)
- (cond
- [(null? xs) (error "Undefined variable" x)]
- [(eq? x (caar xs)) (cons (cons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (mem (assoc-update (mem-xs m))))
-
-(define (mem-alloc x v m)
- (mem (cons (cons x v) (mem-xs m))))
-
-(define (mem-drop-last m)
- (cond
- [(null? (mem-xs m))
- (error "Deallocating from empty memory")]
- [else
- (mem (cdr (mem-xs m)))]))
-
-(define empty-mem
- (mem null))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]
- ['< (lambda (x y) (if (< x y) 1 0))]
- ['> (lambda (x y) (if (> x y) 1 0))]
- ['= (lambda (x y) (if (= x y) 1 0))]
- ['<= (lambda (x y) (if (<= x y) 1 0))]
- ['>= (lambda (x y) (if (>= x y) 1 0))]
- ))
-
-;; zał: (expr? e) i (mem? m) jest prawdą
-;; (value? (eval e m)) jest prawdą
-(define (eval e m)
- (match e
- [(const v) v]
- [(var-expr x) (mem-lookup x m)]
- [(binop op l r)
- (let ((vl (eval l m))
- (vr (eval r m))
- (p (op->proc op)))
- (p vl vr))]
- [(call-expr name args) ;; <------ ewaluacja wywołania funkcji
- (match (mem-lookup name m)
- [(clo func-args cmd)
- (if (= (length args) (length func-args)) ;; <------ sprawdzanie arnosci
- (let* ([func-mem (assign-values args func-args m)]
- [final-mem (eval-cmd cmd func-mem)]
- [ret (mem-lookup 'RETURN final-mem)])
- (if ret
- ret
- (error "No return statement in function" name)))
- (error "Arity mismatch, function" name "takes" (length func-args) "arguments, got" (length args)))]
- [else (error "Undefined function" name)])]))
-
-(define (assign-values args func-args mem) ;; <------ przypisanie wartosci do argumentow funkcji
- (define (iter args func-args new-mem)
- (if (null? args)
- new-mem
- (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem))))
- (iter args func-args mem))
-
-
-(struct clo (args cmd)) ; <----- tak trzymana jest funkcja w środowisku, tj. jako lista nazw argumentow i cialo funkcji
-
-;; zał: (cmd? c) (mem? m)
-;; (mem? (eval-cmd c m))
-(define (eval-cmd c m)
- (if (mem-lookup 'RETURN m) ; <----- jeśli RETURN jest na coś ustawione, to chcemy zrwócic pamięc
- m
- (match c
- [(skip) m]
- [(assign x e) (mem-update x (eval e m) m)]
- [(if-cmd e ct cf) (if (= (eval e m) 0)
- (eval-cmd cf m)
- (eval-cmd ct m))]
- [(while e cw) (if (= (eval e m) 0)
- m
- (let* ((m1 (eval-cmd cw m))
- (m2 (eval-cmd c m1)))
- m2))]
- [(comp c1 c2) (let* ((m1 (eval-cmd c1 m))
- (m2 (eval-cmd c2 m1)))
- m2)]
- [(var-in x e c) (let* ((v (eval e m))
- (m1 (mem-alloc x v m))
- (m2 (eval-cmd c m1)))
- (mem-drop-last m2))]
- [(function name args cmd) ; <------ dodanie ciała funkcji do środowiska
- (mem-alloc name (clo args cmd) m)]
- [(return-stat val) ; <------ zmiana wartości zmiennej RETURN
- (mem-update 'RETURN (eval val m) m)]
- [_ (error "Unknown command" c "— likely a syntax error")])))
-
-
-;; program ewaluowany jest tak
-;; ewaluowane są wszystkie definicje funkcji, wtedy
-;; ręcznie szukam definicji main i ewaluuje jej ciało i zwracam to co zwróci main.
-;; zakładam, że main nie przyjmuje żadnych argumentów.
-(define (eval-prog p m)
- (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m))))
- (match (mem-lookup 'main final-mem)
- [(clo args cmd)
- (let ((res (mem-lookup 'RETURN (eval-cmd cmd final-mem))))
- (if res res (error "No return statement in main")))])))
-
-(define WHILE_FACT
- '({func decr (x)
- {(x := (- x 1))
- (return x)}}
- {func main ()
- {(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (call decr (t)))})
- (return i)}}
- ))
-
-(define (fact n)
- (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))])
- (eval-prog (parse-cmd WHILE_FACT) init-env)))
-
-(define TEST
- '({func decr (x) (return (- x 1))}
- {func main ()
- (var (x 1)
- {(x := (+ x 2))
- (return (call decr (x)))})}))
-(define (test) (eval-prog (parse-cmd TEST) empty-mem))
-
-(define TEST2
- '({func decr (x) (return (- x 1))}
- {func main () (return (call decr (3)))}))
-(define (test2) (eval-prog (parse-cmd TEST2) empty-mem))
-
-; nie da się zmienić wartości zmiennej globalnej, zmienne są wysyłane przez kopie
-(define TEST3
- '({func sth (x)
- {(i := -1)
- (return x)}}
- {func main ()
- {(i := 2)
- (return (call sth (i)))}}))
-(define (test3) (eval-prog (parse-cmd TEST3) (mem-alloc 'i 3 empty-mem)))
-
-; nie ma maina, wywala błąd
-(define TEST4
- '(func f ()
- {return 1}))
-(define (test4) (eval-prog (parse-cmd TEST4) empty-mem))
-
-; funkcje wieloargumentowe
-(define TEST5
- '({func f1 (x y z)
- (return y)}
- {func f2 (x y z)
- (return (+ (+ x y) z))}
- {func main ()
- {(if (> X 3)
- (var (x 2)
- (return (call f1 (1 x 3))))
- (x := 5))
- (return (call f2 (x 3 4)))}}))
-(define (test5) (eval-prog (parse-cmd TEST5) (mem-alloc 'x -1 (mem-alloc 'X 4 empty-mem))))
-
-; Działa rekurencja!!
-(define TEST6
- '({func f (x)
- (if (= x 0)
- (return 1)
- (return (* x (call f ((- x 1))))))}
- {func main ()
- (return (call f (X)))}))
-(define (test6) (eval-prog (parse-cmd TEST6) (mem-alloc 'X 5 empty-mem)))
-
-; kolejnośc deklaracji funkcji nie ma znaczenia, można zagnieżdżać funkcje
-(define TEST7
- '(
- {func main ()
- (return (call f (2)))}
- {func f (x)
- (return (call f1 (x)))}
- {func f1 (x)
- {{func local-fun (x)
- (return (+ 1 x))}
- (return (call local-fun (x)))}}))
-(define (test7) (eval-prog (parse-cmd TEST7) empty-mem))
-
-; instrukcje poza jakimikolwiek funkcjami sa wykonywane przed wywołaniem main
-(define TEST8
- '({func main ()
- (return i)}
- (i := 2)))
-(define (test8) (eval-prog (parse-cmd TEST8) (mem-alloc 'i 1 empty-mem)))
-
-; nic nie zwraca main, wywala błąd
-(define TEST9
- '(func main ()
- (i := 1)))
-(define (test9) (eval-prog (parse-cmd TEST9) (mem-alloc 'i 1 empty-mem)))
-
-; return poza jakąkolwiek funkcją jest wynikiem programu
-(define TEST10
- '({func main ()
- (return i)}
- (i := 2)
- (return -1)))
-(define (test10) (eval-prog (parse-cmd TEST10) (mem-alloc 'i 1 empty-mem)))
-
-
-; arity mismatch
-(define TEST11
- '({func main ()
- (return (call decr ()))}
- {func decr (x)
- (return (- x 1))}))
-(define (test11) (eval-prog (parse-cmd TEST11) empty-mem))
diff --git a/Semestr 2/racket/egzamin/zad2.bak b/Semestr 2/racket/egzamin/zad2.bak
deleted file mode 100644
index 02e2ae0..0000000
--- a/Semestr 2/racket/egzamin/zad2.bak
+++ /dev/null
@@ -1,119 +0,0 @@
-#lang racket
-
-;; ZADANIE 2
-;; =========
-
-;; W tym zadaniu przyjrzymy się pierwszemu "językowi programowania"
-;; który widzieliśmy na zajęciach: wyrażeniom arytmetycznym. Ich
-;; prostota przejawia się przede wszystkim tym że nie występują w nich
-;; zmienne (a w szczególności ich wiązanie) — dlatego możemy o nich
-;; wnioskować nie używając narzędzi cięższych niż te poznane na
-;; wykładzie.
-
-;; W tym zadaniu będziemy chcieli udowodnić że nasza prosta kompilacja
-;; do odwrotnej notacji polskiej jest poprawna. Konkretniej, należy
-;; · sformułować zasady indukcji dla obydwu typów danych
-;; reprezentujących wyrażenia (expr? i rpn-expr?)
-;; · sformułować i udowodnić twierdzenie mówiące że kompilacja
-;; zachowuje wartość programu, tj. że obliczenie wartości programu
-;; jest równoważne skompilowaniu go do RPN i obliczeniu.
-;; · sformułować i udowodnić twierdzenie mówiące że translacja z RPN
-;; do wyrażeń arytmetycznych (ta która była zadaniem domowym;
-;; implementacja jest poniżej) jest (prawą) odwrotnością translacji
-;; do RPN (czyli że jak zaczniemy od wyrażenia i przetłumaczymy do
-;; RPN i z powrotem, to dostaniemy to samo wyrażenie).
-;; Swoje rozwiązanie należy wpisać na końcu tego szablonu w
-;; komentarzu, podobnie do niniejszej treści zadania; proszę zadbać o
-;; czytelność dowodów!
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - /)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-
-(define (value? v)
- (number? v))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]))
-
-;; zał: (expr? e) jest prawdą
-;; (value? (eval e)) jest prawdą
-(define (eval e)
- (match e
- [(const v) v]
- [(binop op l r)
- (let ((vl (eval l))
- (vr (eval r))
- (p (op->proc op)))
- (p vl vr))]))
-
-(define (rpn-expr? e)
- (and (list? e)
- (pair? e)
- (andmap (lambda (x) (or (number? x) (operator? x))) e)))
-
-
-(struct stack (xs))
-
-(define empty-stack (stack null))
-(define (empty-stack? s) (null? (stack-xs s)))
-(define (top s) (car (stack-xs s)))
-(define (push a s) (stack (cons a (stack-xs s))))
-(define (pop s) (stack (cdr (stack-xs s))))
-
-
-(define (eval-am e s)
- (cond
- [(null? e) (top s)]
- [(number? (car e)) (eval-am (cdr e) (push (car e) s))]
- [(operator? (car e))
- (let* ((vr (top s))
- (s (pop s))
- (vl (top s))
- (s (pop s))
- (v ((op->proc (car e)) vl vr)))
- (eval-am (cdr e) (push v s)))]))
-
-(define (rpn-eval e)
- (eval-am e empty-stack))
-
-(define (arith->rpn e)
- (match e
- [(const v) (list v)]
- [(binop op l r) (append (arith->rpn l) (arith->rpn r) (list op))]))
-
-(define (rpn-translate e s)
- (cond
- [(null? e)
- (top s)]
-
- [(number? (car e))
- (rpn-translate (cdr e) (push (const (car e)) s))]
-
- [(operator? (car e))
- (let* ((er (top s))
- (s (pop s))
- (el (top s))
- (s (pop s))
- (en (binop (car e) el er)))
- (rpn-translate (cdr e) (push en s)))]))
-
-(define (rpn->arith e)
- (rpn-translate e empty-stack)) \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad2.rkt b/Semestr 2/racket/egzamin/zad2.rkt
deleted file mode 100644
index e549f07..0000000
--- a/Semestr 2/racket/egzamin/zad2.rkt
+++ /dev/null
@@ -1,186 +0,0 @@
-#lang racket
-
-;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem
-;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu,
-;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania.
-;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich
-;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem
-;; i nie udostępniałem nikomu swojego rozwiązania.
-
-;; ZADANIE 2
-;; =========
-
-;; W tym zadaniu przyjrzymy się pierwszemu "językowi programowania"
-;; który widzieliśmy na zajęciach: wyrażeniom arytmetycznym. Ich
-;; prostota przejawia się przede wszystkim tym że nie występują w nich
-;; zmienne (a w szczególności ich wiązanie) — dlatego możemy o nich
-;; wnioskować nie używając narzędzi cięższych niż te poznane na
-;; wykładzie.
-
-;; W tym zadaniu będziemy chcieli udowodnić że nasza prosta kompilacja
-;; do odwrotnej notacji polskiej jest poprawna. Konkretniej, należy
-;; · sformułować zasady indukcji dla obydwu typów danych
-;; reprezentujących wyrażenia (expr? i rpn-expr?)
-;; · sformułować i udowodnić twierdzenie mówiące że kompilacja
-;; zachowuje wartość programu, tj. że obliczenie wartości programu
-;; jest równoważne skompilowaniu go do RPN i obliczeniu.
-;; · sformułować i udowodnić twierdzenie mówiące że translacja z RPN
-;; do wyrażeń arytmetycznych (ta która była zadaniem domowym;
-;; implementacja jest poniżej) jest (prawą) odwrotnością translacji
-;; do RPN (czyli że jak zaczniemy od wyrażenia i przetłumaczymy do
-;; RPN i z powrotem, to dostaniemy to samo wyrażenie).
-;; Swoje rozwiązanie należy wpisać na końcu tego szablonu w
-;; komentarzu, podobnie do niniejszej treści zadania; proszę zadbać o
-;; czytelność dowodów!
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (operator? x)
- (member x '(+ * - /)))
-
-(define (expr? e)
- (match e
- [(const v)
- (integer? v)]
- [(binop op l r)
- (and (operator? op)
- (expr? l)
- (expr? r))]
- [_ false]))
-
-
-(define (value? v)
- (number? v))
-
-(define (op->proc op)
- (match op
- ['+ +]
- ['- -]
- ['* *]
- ['/ /]))
-
-;; zał: (expr? e) jest prawdą
-;; (value? (eval e)) jest prawdą
-(define (eval e)
- (match e
- [(const v) v]
- [(binop op l r)
- (let ((vl (eval l))
- (vr (eval r))
- (p (op->proc op)))
- (p vl vr))]))
-
-(define (rpn-expr? e)
- (and (list? e)
- (pair? e)
- (andmap (lambda (x) (or (number? x) (operator? x))) e)))
-
-;; mój kod
-(define (parse-expr q)
- (cond
- [(integer? q) (const q)]
- [(and (list? q) (= (length q) 3) (operator? (first q)))
- (binop (first q) (parse-expr (second q)) (parse-expr (third q)))]))
-
-(struct stack (xs))
-
-(define empty-stack (stack null))
-(define (empty-stack? s) (null? (stack-xs s)))
-(define (top s) (car (stack-xs s)))
-(define (push a s) (stack (cons a (stack-xs s))))
-(define (pop s) (stack (cdr (stack-xs s))))
-
-
-(define (eval-am e s)
- (cond
- [(null? e) (top s)]
- [(number? (car e)) (eval-am (cdr e) (push (car e) s))]
- [(operator? (car e))
- (let* ((vr (top s))
- (s (pop s))
- (vl (top s))
- (s (pop s))
- (v ((op->proc (car e)) vl vr)))
- (eval-am (cdr e) (push v s)))]))
-
-(define (rpn-eval e)
- (eval-am e empty-stack))
-
-(define (arith->rpn e)
- (match e
- [(const v) (list v)]
- [(binop op l r) (append (arith->rpn l) (arith->rpn r) (list op))]))
-
-(define (rpn-translate e s)
- (cond
- [(null? e)
- (top s)]
-
- [(number? (car e))
- (rpn-translate (cdr e) (push (const (car e)) s))]
-
- [(operator? (car e))
- (let* ((er (top s))
- (s (pop s))
- (el (top s))
- (s (pop s))
- (en (binop (car e) el er)))
- (rpn-translate (cdr e) (push en s)))]))
-
-(define (rpn->arith e)
- (rpn-translate e empty-stack))
-
-
-;; W kilku miejscach pozwoliłem sobie zapomnieć że symbol operatora i operator
-;; to nie to samo, ale nie ma to znaczenia w kontekście dowodów.
-;; Przez ES oznaczam empty-stack
-;;
-;; Zasada indukcji dla expr:
-;; Dla dowolnej własności P, jeśli
-;; · zachodzi P((const x)) dla dowolnego x oraz
-;; · dla dowolnych e1, e2 oraz operator op jeśli zachodzi P(e1), P(e2)
-;; to zachodzi P((binop op e1 e2))
-;; to dla dowolnego e, jeśli zachodzi (expr? e) to zachodzi P(e)
-;;
-;; Zasada indukcji dla rpn (ale tego wg rpn-expr?):
-;; Dla dowolnej własności P, jeśli
-;; · zachodzi P(x) dla dowolnej liczby lub opeartora x oraz
-;; · dla dowolnej listy liczb lub operatorów xs oraz dowolnej liczby lub
-;; operatora x, jesli zachodzi P(xs), to zachodzi P((cons x xs))
-;; to dla dowolnej listy xs liczb lub operatorów zachodzi P(xs)
-;;
-;;
-;; Tw. 1: Jeśli spełnione jest (expr? e), to (eval e) ≡ (rpn-eval (arith->rpn e))
-;;
-;; D-d. Skorzystamy z zasady indukcji dla wyrażeń.
-;; · Weźmy dowolną liczbę x. Wtedy jeśli e ≡ (const x), to zachodzi
-;; (eval (const x)) ≡ x ≡ (rpn-eval '(x)) ≡ (rpn-eval (arith->rpn (const x)))
-;; · Weźmy dowolne e1, e2 spełniające naszą tezę oraz jakiś operator op. Wtedy
-;; (eval (binop op e1 e2)) ≡
-;; (op (eval e1) (eval e2)) ≡ [Z definicji eval-am]
-;; (eval-am '() (push (op (eval e1) (eval e2)) ES)) ≡
-;; (eval-am '(op) (push (eval e2) (push (eval e1) ES))) ≡ [Z założenia indukcyjnego]
-;; (eval-am '(op) (push (rpn-eval (arith->rpn e2)) (push (eval e1) ES))) ≡
-;; (eval-am (append (arith->rpn e2) '(op)) (push (eval e1) ES)) ≡ [Z założenia indukcyjnego]
-;; (eval-am (append (arith->rpn e1) (arith->rpn e2) '(op)) ES) ≡
-;; (rpn-eval (append (arith->rpn e1) (arith->rpn e2) '(op))) ≡ [Z definicji arith->rpn]
-;; (rpn-eval (arith->rpn (binop op e1 e2)))
-;; Pokazaliśmy oba warunki indukcji dla wyrażeń, zatem twierdzenie prawdziwe jest
-;; dla dowolnego wyrażenia e spełniającego (expr? e).
-;;
-;; Tw. 2: Jeśli spełnione jest (expr? e), to (rpn->arith (arith->rpn e)) ≡ e
-;;
-;; D-d. Skoryzstamy z indukcji dla wyrażeń.
-;; · Weźmy dowolną liczbę x. Wtedy dla e ≡ (const x) zachodzi
-;; (rpn->arith (arith->rpn e)) ≡ (rpn->arith '(x)) ≡ (const x)
-;; · Weźmy dowolne e1, e2 dla których twierdzenie zachodzi oraz operator op. Wtedy
-;; (rpn->arith (arith->rpn (binop op e1 e2))) ≡ [Z definicji arith->rpn]
-;; (rpn->arith (append (arith->rpn e1) (arith->rpn e2) '(op))) ≡
-;; (rpn-translate (append (arith->rpn e1) (arith->rpn e2) '(op)) ES) ≡ [Z zał. (arith->rpn e1) ewaluuje się do liczby]
-;; (rpn-translate (append (arith->rpn e2) '(op)) (push e1 ES)) ≡ [Z zał. (arith->rpn e2) ewaluuje się do liczby]
-;; (rpn-translate '(op) (push e2 (push e1 ES))) ≡ [Z definicji rpn-translate]
-;; (rpn-translate '() (push (binop op e1 e2) ES)) ≡
-;; (binop op e1 e2)
-;; Pokazaliśmy oba warunki indukcji dla wyrażeń, zatem twierdzenie jest prawdziwe
-;; dla dowolnego e spełniającego (expr? e).
diff --git a/Semestr 2/racket/egzamin/zad3.bak b/Semestr 2/racket/egzamin/zad3.bak
deleted file mode 100644
index 20115e9..0000000
--- a/Semestr 2/racket/egzamin/zad3.bak
+++ /dev/null
@@ -1,4 +0,0 @@
-#lang racket
-
-
-
diff --git a/Semestr 2/racket/egzamin/zad3.rkt b/Semestr 2/racket/egzamin/zad3.rkt
deleted file mode 100644
index 9bfed02..0000000
--- a/Semestr 2/racket/egzamin/zad3.rkt
+++ /dev/null
@@ -1,347 +0,0 @@
-#lang racket
-
-;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem
-;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu,
-;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania.
-;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich
-;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem
-;; i nie udostępniałem nikomu swojego rozwiązania.
-
-;; ZADANIE 3
-;; =========
-
-;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do
-;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych
-;; programów.
-
-;; Przypomnijmy, że gramatyka bezkontekstowa składa się z
-;; · skończonego zbioru *symboli nieterminalnych*
-;; · skończonego zbioru *symboli terminalnych*
-;; · wybranego nieterminalnego symbolu startowego
-;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista
-;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych
-
-;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki,
-;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego
-;; możemy użyć skończonej liczby produkcji z gramatyki przepisując
-;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej
-;; produkcji).
-
-
-;; Przykład: poprawne nawiasowania
-
-;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który
-;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych
-;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane
-;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!):
-;; S ->
-;; S -> SS
-;; S -> (S)
-
-;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę
-;; gramatykę zapisać tak (dbając trochę bardziej o wizualne
-;; oddzielenie symboli terminalnych i nieterminalnych):
-;; S ::= "" | SS | "(" S ")"
-;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z
-;; powtarzających się lewych stron.
-
-;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione
-;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów)
-;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu
-;; startowego i przepisujemy:
-;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()())
-
-
-;; Zadanie cz. 1
-
-;; Zdefiniuj reprezentację gramatyki jako typu danych w
-;; Rackecie. Warto zastanowić się co można uprościć względem definicji
-;; matematycznej — w szczególności możemy założyć że dowolne napisy
-;; (typu string) są ciągami symboli terminalnych, i że nie musimy
-;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji
-;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest
-;; najwygodniejsza.
-
-;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i
-;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc
-;; sensownie przetestować swoje rozwiązanie!
-
-
-;; "Optymalizacja" gramatyk
-
-;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć
-;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli
-;; nieterminalnych, których nie da się wyprowadzić z symbolu
-;; startowego, lub symboli nieterminalnych z których nie da się
-;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego
-;; symboli nieterminalnych). Przykładowo, do naszej gramatyki
-;; moglibyśmy dodać symbole P i Q, i produkcje:
-;; S -> ")(" P
-;; P -> PP "qed"
-;; Q -> "abc"
-
-;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak
-;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu
-;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z
-;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa,
-;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego
-;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy
-;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które
-;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i
-;; te, z których nie da się ułożyć słowa terminalnego (tj. są
-;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy
-;; takie symbole, dostaniemy oczywiście gramatykę początkową.
-
-
-;; Zadanie cz. 2
-
-;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania
-;; napisz dwie procedury: cfg-unreachable, znajdującą symbole
-;; nieterminalne które są nieosiągalne z symbolu startowego, i
-;; cfg-unproductive, znajdującą symbole nieterminalne które nie są
-;; produktywne. Następnie użyj tych procedur żeby zdefiniować
-;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z
-;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie
-;; produkcje.
-
-;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem
-;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu
-;; decyzje), a także zaimplementowane w cz. 2. algorytmy.
-
-
-
-
-
-
-;; Zadanie 1
-
-;; Reprezentacja jest docyś prosta, mianowicie stworzyłem struktury
-;; terminal, non-terminal, rule oraz grammar. Dwa pierwsze to
-;; po prostu jednoelementowe struktury utrzymujące nazwę symboli.
-;; grammar to dwuelementowa struktura, jej pierwszym elementem
-;; jest symbol startowy, a następnym produkcja, czyli lista reguł (listof rule),
-;; a reguły to dwuelementowe struktury (symbol niterminalny - lista nonterminali lub termianli).
-;; Generalnie dzięki temu, że mam te struktury terminal oraz non-terminal
-;; to symbol nieterminalne i temrinalne mogą być czykolwiek. Dodatkowo
-;; dla uproszczenia w miejscach, gdzie mam pewność że chodzi mi o
-;; symbol nieterminalny, to nie opakowuję go w strukturę.
-;; Przykładowo rules w gramatyce może wyglądać tak:
-;; (list
-;; (rule 'S (list (terminal "")))
-;; (rule 'S (list (non-terminal 'S) (non-terminal 'S)))
-;; (rule 'S (list (terminal "(") (non-terminal 'S) (terminal ")"))))
-;; Oczywiście symbol nieterminalny nie musi być racketowym symbolem, może być czymkolwiek.
-;; Podobnie z symbolami terminalnymi. Proszę również zauważyć, że dzięki
-;; strukturom non-terminal oraz terminal te same racketowe obiekty mogą być jednocześnie
-;; terminalami oraz nieterminalami!
-;; W tych parach na pierwszym miejscu nie jest non-terminal, tylko po prostu cokolwiek
-;; no i oczywiście mam wtedy pewność że musi być to non-terminal, nie ma potrzeby
-;; żeby pakować go również w tę strukturę.
-
-
-;; Postanowiłem napisać parser (make-cfg q), generuje on gramatyki w bardzo konkretny sposób,
-;; trochę ograniczo to czym mogą być symbole nieterminalne oraz terminalne,
-;; ale nie wydaje mi się że i tak składnia jest bardzo wygodna i mało ograniczająca.
-
-;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu
-;; przedstawionego w treści zadania.
-;; np. gramatyka nawiasowania będzie wyglądać następująco:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")"))
-;; ale mogłaby wyglądać też tak:
-;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")"))
-;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania:
-;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc"))
-;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar
-;; na drugim miejscu ma symbol startowy
-;; następnie następuje lista produkcji w formacie:
-;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem -->
-;; Zalety:
-;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych
-;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak
-;; jak terminalne, tj. "S" nie jest tym samym co 'S.
-;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać
-;; dodatkowe reguły dla jakiegoś nieterminala,
-;; - parser jest całkiem łatwy w implementacji
-;; Wady:
-;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich
-;; zbyt wiele. Jest tak dlatego, że np. tutaj (S ::= SS) nie chodzi mi o symbol SS, tylko
-;; o sąsiadujące symbole SS (jednak gdyby nie używać parsera to normalnie moglibyśmy
-;; mieć wieloznakowe symbole nieterminalne!).
-
-;; Dla przykładu taka gramatyka:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]"))
-;; będzie reprezentowana następująco:
-;; (grammar
-;; 'S
-;; (list
-;; (rule 'S (list (terminal "")))
-;; (rule 'S (list (non-terminal 'S) (non-terminal 'S)))
-;; (rule 'S (list (terminal "(") (non-terminal 'S) (terminal ")")))
-;; (rule 'S (list (non-terminal 'Q)))
-;; (rule 'Q (list (terminal "")))
-;; (rule 'Q (list (non-terminal 'Q) (non-terminal 'S)))
-;; (rule 'Q (list (terminal "[") (non-terminal 'Q) (terminal "]")))))
-
-;; Cała reprezentacja :D
-(struct non-terminal (sym) #:transparent)
-(struct terminal (sym) #:transparent)
-(struct rule (nt xs) #:transparent)
-(struct grammar (start rules) #:transparent)
-
-
-;; PARSER
-(define SEPARATOR '--)
-
-(define (split-at-symb symb xs)
- (define (iter left right)
- (cond
- [(null? right) (cons left null)]
- [(eq? symb (car right)) (cons left (cdr right))]
- [else (iter (cons (car right) left) (cdr right))]))
- (let ([res (iter null xs)])
- (cons (reverse (car res)) (cdr res))))
-
-(define (split-by-separator xs)
- (let ([res (split-at-symb SEPARATOR xs)])
- (if (null? (cdr res))
- res
- (cons (car res) (split-by-separator (cdr res))))))
-
-;; PARSER SKŁADNI KONKRETNEJ DO JEJ REPREZENTACJI
-(define (make-cfg q)
- (cond
- [(and (list? q) (eq? 'grammar (first q)))
- (grammar (second q) (append-map make-cfg (cddr q)))]
- [(and (list? q) (eq? '::= (second q)))
- (let ([nt (first q)]
- [rules (split-by-separator (cddr q))])
- (map (lambda (x) (rule nt x)) (map make-prod rules)))]))
-
-(define (symbol->list s)
- (map string->symbol
- (map string
- (string->list (symbol->string s)))))
-
-(define (make-prod xs)
- (cond
- [(null? xs) null]
- [(string? (car xs)) (cons (terminal (car xs)) (make-prod (cdr xs)))]
- [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-prod (cdr xs)))]
- [else (error "Invalid syntax in production" xs)]))
-
-
-(define sample '(S ::= "" -- SS -- "(" S ")"))
-(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]")))
-(define sample3 '(grammar S
- (S ::= A B -- D E)
- (A ::= "a")
- (B ::= "b" C)
- (C ::= "c")
- (D ::= "d" F)
- (E ::= "e")
- (F ::= "f" D)))
-
-(define (sample-grammar) (make-cfg sample3))
-
-;; zadanie 2
-
-;; korzystam z algorytmów przedstawionych w tej książce:
-;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51
-;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive
-;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne
-;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza,
-;; a jest bardzo nieistotną zmianą koncepcyjną.
-;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable
-
-;; cfg-productive działa w ten sposób:
-;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę
-;; Jakąś regułę nazywamy produktywną, jeśli składa się z terminali lub produktywnych nieterminali
-;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne
-;; wg definicji zadania, a cała reszta jest produktwna.
-
-;; Algorytm znajdowania produktywnych nieterminali:
-;; Mamy listę produktywnych nieterminali P, początkowo pustą
-;; 1. Stwórz nową listę P'
-;; 2. Przejdź po liście reguł
-;; -> jeśli dana reguła jest produktywna (wg P), dodaj jej nieterminal do P'
-;; 3. Jeśli P != P', zrób P := P' i wróć do 1.
-;; 4. Zwróć P
-
-;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego
-;; używamy w jakiejś regule, ale ten nieterminal nie ma zdefiniowanej żadnej reguły,
-;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne.
-
-;; Algorytm znajdowania osiągalnych nieterminali:
-;; Traktujemy nitereminale jak wierzchołki w grafie a reguły jako listy sąsiedztwa.
-;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminala
-;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne.
-
-;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale,
-;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna.
-;; Wydaje się to w miarę sensowne -- pierszy algorytm to takie odcinanie liści i odcyklanie
-;; grafu, a ten drugi to po prostu DFS.
-
-;; przydatne predykaty -- na productive-nt mam listę symboli niterminalnych
-;; (nie struktury non-terminal, tylko te symbole!)
-;; które wiem że są produktywne.
-;; productive? sprawdza, czy nietermial jest produktywny
-;; to drugie sprawdza czy reguła jest produktywna
-;; (czyli czy składa się z produktywnych nonterminali lub terminali)
-(define (productive? p productive-nt)
- (or (terminal? p) (member (non-terminal-sym p) productive-nt)))
-(define (rule-productive? r productive-nt)
- (andmap (lambda (x) (productive? x productive-nt)) r))
-
-;; zwraca listę produktywnych symboli (nie nonterminali!)
-(define (cfg-productive g)
- (define (find-productive-nt productive-nt rules)
- (cond
- [(null? rules) (remove-duplicates productive-nt)]
- [(rule-productive? (rule-xs (car rules)) productive-nt)
- (find-productive-nt (cons (rule-nt (car rules)) productive-nt) (cdr rules))]
- [else (find-productive-nt productive-nt (cdr rules))]))
- (define (iter productive-nt)
- (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))])
- (if (equal? productive-nt new-prod-nt)
- productive-nt
- (iter new-prod-nt))))
- (iter null))
-
-;; zwraca listę osiągalnych symboli
-(define (cfg-reachable g)
- (define (iter verts vis)
- (cond
- [(null? verts) vis]
- [(member (car verts) vis) (iter (cdr verts) vis)]
- [else (iter (cdr verts) (dfs (car verts) vis))]))
- (define (dfs v vis)
- (let* ([rules (filter (lambda (r) (eq? (rule-nt r) v)) (grammar-rules g))]
- [verts (append-map (lambda (r) (rule-xs r)) rules)]
- [verts (filter non-terminal? verts)]
- [verts (map non-terminal-sym verts)])
- (iter verts (cons v vis))))
- (dfs (grammar-start g) null))
-
-
-;; robi z gramatyki g gramatykę regularną
-(define (cfg-optimize g)
- (let* ([productive-nt (cfg-productive g)]
- [productive-rules (filter (lambda (r)
- (rule-productive? (rule-xs r) productive-nt))
- (grammar-rules g))]
- [new-g (grammar (grammar-start g) productive-rules)] ; <----- nowa gramatyka, bez nieproduktywnych
- [reachable-nt (cfg-reachable new-g)] ; reguł i symboli nieterminalnych
- [res-g (grammar (grammar-start new-g) (filter ; <----- dobra gramatyka
- (lambda (r) (member (rule-nt r) reachable-nt))
- (grammar-rules new-g)))])
- res-g))
-
-(define (test) (cfg-optimize (make-cfg sample3)))
-
-;; Pokazanie że symbole nie muszą być racketowymi symbolami :)
-(define (test2) (cfg-optimize
- (grammar '()
- (list (cons '() (list (terminal '())))
- (cons '() (list (terminal "(") (non-terminal '()) (terminal ")")))
- (cons '() (list (non-terminal '()) (non-terminal '())))))))
- \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad3a.bak b/Semestr 2/racket/egzamin/zad3a.bak
deleted file mode 100644
index 81570d0..0000000
--- a/Semestr 2/racket/egzamin/zad3a.bak
+++ /dev/null
@@ -1,298 +0,0 @@
-#lang racket
-
-;; ZADANIE 3
-;; =========
-
-;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do
-;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych
-;; programów.
-
-;; Przypomnijmy, że gramatyka bezkontekstowa składa się z
-;; · skończonego zbioru *symboli nieterminalnych*
-;; · skończonego zbioru *symboli terminalnych*
-;; · wybranego nieterminalnego symbolu startowego
-;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista
-;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych
-
-;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki,
-;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego
-;; możemy użyć skończonej liczby produkcji z gramatyki przepisując
-;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej
-;; produkcji).
-
-
-;; Przykład: poprawne nawiasowania
-
-;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który
-;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych
-;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane
-;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!):
-;; S ->
-;; S -> SS
-;; S -> (S)
-
-;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę
-;; gramatykę zapisać tak (dbając trochę bardziej o wizualne
-;; oddzielenie symboli terminalnych i nieterminalnych):
-;; S ::= "" | SS | "(" S ")"
-;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z
-;; powtarzających się lewych stron.
-
-;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione
-;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów)
-;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu
-;; startowego i przepisujemy:
-;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()())
-
-
-;; Zadanie cz. 1
-
-;; Zdefiniuj reprezentację gramatyki jako typu danych w
-;; Rackecie. Warto zastanowić się co można uprościć względem definicji
-;; matematycznej — w szczególności możemy założyć że dowolne napisy
-;; (typu string) są ciągami symboli terminalnych, i że nie musimy
-;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji
-;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest
-;; najwygodniejsza.
-
-;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i
-;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc
-;; sensownie przetestować swoje rozwiązanie!
-
-
-;; "Optymalizacja" gramatyk
-
-;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć
-;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli
-;; nieterminalnych, których nie da się wyprowadzić z symbolu
-;; startowego, lub symboli nieterminalnych z których nie da się
-;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego
-;; symboli nieterminalnych). Przykładowo, do naszej gramatyki
-;; moglibyśmy dodać symbole P i Q, i produkcje:
-;; S -> ")(" P
-;; P -> PP "qed"
-;; Q -> "abc"
-
-;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak
-;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu
-;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z
-;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa,
-;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego
-;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy
-;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które
-;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i
-;; te, z których nie da się ułożyć słowa terminalnego (tj. są
-;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy
-;; takie symbole, dostaniemy oczywiście gramatykę początkową.
-
-
-;; Zadanie cz. 2
-
-;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania
-;; napisz dwie procedury: cfg-unreachable, znajdującą symbole
-;; nieterminalne które są nieosiągalne z symbolu startowego, i
-;; cfg-unproductive, znajdującą symbole nieterminalne które nie są
-;; produktywne. Następnie użyj tych procedur żeby zdefiniować
-;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z
-;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie
-;; produkcje.
-
-;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem
-;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu
-;; decyzje), a także zaimplementowane w cz. 2. algorytmy.
-
-
-
-
-
-
-;; Zadanie 1
-
-;; Postanowiłem napisać parser, bo bez tego zadanie wydaje mi się dosyć ubogie
-;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu
-;; przedstawionego w treści zadania.
-;; np. gramatyka nawiasowania będzie wyglądać następująco:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")"))
-;; ale mogłaby wyglądać też tak:
-;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")"))
-;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania:
-;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc"))
-;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar
-;; na drugim miejscu ma symbol startowy
-;; następnie następuje lista produkcji w formacie:
-;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem -->
-;; Zalety:
-;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych
-;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak
-;; jak terminalne, tj. "S" nie jest tym samym co 'S.
-;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać
-;; dodatkowe produkcje dla jednego symbolu nieterminalnego, np. (S ::= "") (S ::= SS)
-;; - parser jest łatwy w implementacji
-;; Wady:
-;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich
-;; zbyt wiele
-
-;; Reprezentacja gramatyki: podczas parsowania gramatyki symbole i stringi wewnątrz produkcji
-;; reprezentowane są przez struktury terminal oraz non-terminal. Cała gramatyka to
-;; struktura dwuelementowa - pierwszym jest symbol startowy, a drugim lista par <symbol . produkcja>
-;; Taka decyzja właśnie pozwoliła na to, że zaproponowana przeze mnie składania konkretna jest
-;; bardzo prosta do sparsowania - wystarczy każdą produkcję podzielić ze względu na separator '--
-;; i do czegoś podobnego do środowisk dodawać po prostu odpowiednie pary.
-;; dla przykładu taka gramatyka:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]"))
-;; będzie reprezentowana następująco:
-;; (grammar
-;; 'S
-;; (production
-;; (list
-;; (list 'S (terminal ""))
-;; (list 'S (non-terminal 'S) (non-terminal 'S))
-;; (list 'S (terminal "(") (non-terminal 'S) (terminal ")"))
-;; (list 'S (non-terminal 'Q))
-;; (list 'Q (terminal ""))
-;; (list 'Q (non-terminal 'Q) (non-terminal 'S))
-;; (list 'Q (terminal "[") (non-terminal 'Q) (terminal "]")))))
-;; Prosze zauważyć, że np. SS zostało zamienione na dwa sąsiednie nieterminalne symbole S
-;; (to właśnie powód, dlaczego symbole nieterminalne mogą być jedynie jednoznakowe).
-
-;; Zdecydowałem się dodać strukturę production, bo wtedy łatwo można na niej operować
-;; pisząc funkcje production-add, czy production-lookup itp.
-
-
-(struct non-terminal (sym) #:transparent)
-(struct terminal (sym) #:transparent)
-(struct grammar (start rules) #:transparent)
-
-(define SEPARATOR '--)
-
-(define (split-at-symb symb xs)
- (define (iter left right)
- (cond
- [(null? right) (cons left null)]
- [(eq? symb (car right)) (cons left (cdr right))]
- [else (iter (cons (car right) left) (cdr right))]))
- (let ([res (iter null xs)])
- (cons (reverse (car res)) (cdr res))))
-
-(define (split-by-separator xs)
- (let ([res (split-at-symb SEPARATOR xs)])
- (if (null? (cdr res))
- res
- (cons (car res) (split-by-separator (cdr res))))))
-
-(define (make-cfg q)
- (cond
- [(and (list? q) (eq? 'grammar (first q)))
- (grammar (second q) (append-map make-cfg (cddr q)))]
- [(and (list? q) (eq? '::= (second q)))
- (let ([nt (first q)]
- [rules (split-by-separator (cddr q))])
- (map (lambda (x) (cons nt x)) (map make-prod rules)))]))
-
-(define (symbol->list s)
- (map string->symbol
- (map string
- (string->list (symbol->string s)))))
-
-(define (make-prod xs)
- (cond
- [(null? xs) null]
- [(string? (car xs)) (cons (terminal (car xs)) (make-prod (cdr xs)))]
- [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-prod (cdr xs)))]
- [else (error "Invalid syntax in production" xs)]))
-
-
-(define sample '(S ::= "" -- SS -- "(" S ")"))
-(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]")))
-(define sample3 '(grammar S
- (S ::= A B -- D E)
- (A ::= "a")
- (B ::= "b" C)
- (C ::= "c")
- (D ::= "d" F)
- (E ::= "e")
- (F ::= "f" D)))
-
-;; zadanie 2
-
-;; korzystam z algorytmów przedstawionych w tej książce:
-;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51
-;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive
-;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne
-;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza,
-;; a jest bardzo nieistotną zmianą koncepcyjną.
-;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable
-
-;; cfg-productive działa w ten sposób:
-;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę
-;; Jakąś zasadę nazywamy produktywną, jeśli składa się z terminali oraz produktywnych nieterminali
-;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne
-;; wg definicji zadania, a cała reszta jest produktwna.
-
-;; Algorytm znajdowania produktywnych nieterminali:
-;; Mamy listę produktywnych nieterminali P, początkowo pustą
-;; 1. Stwórz nową listę P'
-;; 2. Przejdź po liście produkcji
-;; -> jeśli dana produkcja jest produktywna (wg P), dodaj jej nieterminal do P'
-;; 3. Jeśli P != P', zrób P := P' i wróć do 1.
-;; 4. Zwróć P
-
-;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego
-;; używamy w jakiejś produkcji, ale ten nieterminal nie ma zdefiniowanej swojej produkcji
-;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne
-
-;; Algorytm znajdowania osiągalnych nieterminali:
-;; Traktujemy nitereminale jak wierzchołki w grafie a zasady jako listy sąsiedztwa.
-;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminalu
-;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne.
-
-;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale,
-;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna.
-
-(define (productive? p productive-nt)
- (or (terminal? p) (member (non-terminal-sym p) productive-nt)))
-(define (rule-productive? r productive-nt)
- (andmap (lambda (x) (productive? x productive-nt)) r))
-
-(define (cfg-productive g)
- (define (find-productive-nt productive-nt rules)
- (cond
- [(null? rules) (remove-duplicates productive-nt)]
- [(rule-productive? (cdar rules) productive-nt)
- (find-productive-nt (cons (caar rules) productive-nt) (cdr rules))]
- [else (find-productive-nt productive-nt (cdr rules))]))
- (define (iter productive-nt)
- (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))])
- (if (equal? productive-nt new-prod-nt)
- productive-nt
- (iter new-prod-nt))))
- (iter null))
-
-(define (cfg-reachable g)
- (define (iter verts vis)
- (cond
- [(null? verts) vis]
- [(member (car verts) vis) (iter (cdr verts) vis)]
- [else (iter (cdr verts) (dfs (car verts) vis))]))
- (define (dfs v vis)
- (display v)
- (newline)
- (let* ([rules (filter (lambda (r) (eq? (car r) v)) (grammar-rules g))]
- [verts (append-map (lambda (r) (cdr r)) rules)]
- [verts (filter non-terminal? verts)]
- [verts (map non-terminal-sym verts)])
- (iter verts (cons v vis))))
- (dfs (grammar-start g) null))
-
-(define (cfg-optimize g)
- (let* ([productive-nt (cfg-productive g)]
- [productive-rules (filter (lambda (r)
- (rule-productive? (cdr r) productive-nt))
- (grammar-rules g))]
- [new-g (grammar (grammar-start g) productive-rules)]
- [reachable-nt (cfg-reachable new-g)]
- [res-g (grammar (grammar-start new-g) (filter
- (lambda (r) (member (car r) reachable-nt))
- (grammar-rules new-g)))])
- res-g))
- \ No newline at end of file
diff --git a/Semestr 2/racket/egzamin/zad3a.rkt b/Semestr 2/racket/egzamin/zad3a.rkt
deleted file mode 100644
index eaa6645..0000000
--- a/Semestr 2/racket/egzamin/zad3a.rkt
+++ /dev/null
@@ -1,301 +0,0 @@
-#lang racket
-
-;; ZADANIE 3
-;; =========
-
-;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do
-;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych
-;; programów.
-
-;; Przypomnijmy, że gramatyka bezkontekstowa składa się z
-;; · skończonego zbioru *symboli nieterminalnych*
-;; · skończonego zbioru *symboli terminalnych*
-;; · wybranego nieterminalnego symbolu startowego
-;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista
-;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych
-
-;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki,
-;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego
-;; możemy użyć skończonej liczby produkcji z gramatyki przepisując
-;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej
-;; produkcji).
-
-
-;; Przykład: poprawne nawiasowania
-
-;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który
-;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych
-;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane
-;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!):
-;; S ->
-;; S -> SS
-;; S -> (S)
-
-;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę
-;; gramatykę zapisać tak (dbając trochę bardziej o wizualne
-;; oddzielenie symboli terminalnych i nieterminalnych):
-;; S ::= "" | SS | "(" S ")"
-;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z
-;; powtarzających się lewych stron.
-
-;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione
-;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów)
-;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu
-;; startowego i przepisujemy:
-;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()())
-
-
-;; Zadanie cz. 1
-
-;; Zdefiniuj reprezentację gramatyki jako typu danych w
-;; Rackecie. Warto zastanowić się co można uprościć względem definicji
-;; matematycznej — w szczególności możemy założyć że dowolne napisy
-;; (typu string) są ciągami symboli terminalnych, i że nie musimy
-;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji
-;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest
-;; najwygodniejsza.
-
-;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i
-;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc
-;; sensownie przetestować swoje rozwiązanie!
-
-
-;; "Optymalizacja" gramatyk
-
-;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć
-;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli
-;; nieterminalnych, których nie da się wyprowadzić z symbolu
-;; startowego, lub symboli nieterminalnych z których nie da się
-;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego
-;; symboli nieterminalnych). Przykładowo, do naszej gramatyki
-;; moglibyśmy dodać symbole P i Q, i produkcje:
-;; S -> ")(" P
-;; P -> PP "qed"
-;; Q -> "abc"
-
-;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak
-;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu
-;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z
-;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa,
-;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego
-;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy
-;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które
-;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i
-;; te, z których nie da się ułożyć słowa terminalnego (tj. są
-;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy
-;; takie symbole, dostaniemy oczywiście gramatykę początkową.
-
-
-;; Zadanie cz. 2
-
-;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania
-;; napisz dwie procedury: cfg-unreachable, znajdującą symbole
-;; nieterminalne które są nieosiągalne z symbolu startowego, i
-;; cfg-unproductive, znajdującą symbole nieterminalne które nie są
-;; produktywne. Następnie użyj tych procedur żeby zdefiniować
-;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z
-;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie
-;; produkcje.
-
-;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem
-;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu
-;; decyzje), a także zaimplementowane w cz. 2. algorytmy.
-
-
-
-
-
-
-;; Zadanie 1
-
-;; Postanowiłem napisać parser, bo bez tego zadanie wydaje mi się dosyć ubogie
-;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu
-;; przedstawionego w treści zadania.
-;; np. gramatyka nawiasowania będzie wyglądać następująco:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")"))
-;; ale mogłaby wyglądać też tak:
-;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")"))
-;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania:
-;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc"))
-;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar
-;; na drugim miejscu ma symbol startowy
-;; następnie następuje lista produkcji w formacie:
-;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem -->
-;; Zalety:
-;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych
-;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak
-;; jak terminalne, tj. "S" nie jest tym samym co 'S.
-;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać
-;; dodatkowe produkcje dla jednego symbolu nieterminalnego, np. (S ::= "") (S ::= SS)
-;; - parser jest łatwy w implementacji
-;; Wady:
-;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich
-;; zbyt wiele
-
-;; Reprezentacja gramatyki: podczas parsowania gramatyki symbole i stringi wewnątrz produkcji
-;; reprezentowane są przez struktury terminal oraz non-terminal. Cała gramatyka to
-;; struktura dwuelementowa - pierwszym jest symbol startowy, a drugim lista par <symbol . produkcja>
-;; Taka decyzja właśnie pozwoliła na to, że zaproponowana przeze mnie składania konkretna jest
-;; bardzo prosta do sparsowania - wystarczy każdą produkcję podzielić ze względu na separator '--
-;; i do czegoś podobnego do środowisk dodawać po prostu odpowiednie pary.
-;; dla przykładu taka gramatyka:
-;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]"))
-;; będzie reprezentowana następująco:
-;; (grammar
-;; 'S
-;; (production
-;; (list
-;; (list 'S (terminal ""))
-;; (list 'S (non-terminal 'S) (non-terminal 'S))
-;; (list 'S (terminal "(") (non-terminal 'S) (terminal ")"))
-;; (list 'S (non-terminal 'Q))
-;; (list 'Q (terminal ""))
-;; (list 'Q (non-terminal 'Q) (non-terminal 'S))
-;; (list 'Q (terminal "[") (non-terminal 'Q) (terminal "]")))))
-;; Prosze zauważyć, że np. SS zostało zamienione na dwa sąsiednie nieterminalne symbole S
-;; (to właśnie powód, dlaczego symbole nieterminalne mogą być jedynie jednoznakowe).
-
-;; Zdecydowałem się dodać strukturę production, bo wtedy łatwo można na niej operować
-;; pisząc funkcje production-add, czy production-lookup itp.
-
-
-(struct non-terminal (sym) #:transparent)
-(struct terminal (sym) #:transparent)
-(struct grammar (start rules) #:transparent)
-
-(define SEPARATOR '--)
-
-(define (make-cfg q)
- (cond
- [(and (list? q) (eq? 'grammar (first q)))
- (grammar (second q) (append-map make-cfg (cddr q)))]
- [(and (list? q) (eq? '::= (second q)))
- (let ([nt (first q)]
- [rules (split-by-separator (cddr q))])
- (map (lambda (x) (cons nt x)) (map make-rules rules)))]
- [else (error "MAKE-CFG -- Parse error, unknown token" q)]))
-
-(define (make-cfg start rules)
- (grammar start (make-rules rules)))
-
-(define (make-rules xs)
- (cond
- [(null? xs) null]
- [(string? (car xs)) (cons (terminal (car xs)) (make-rules (cdr xs)))]
- [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-rules (cdr xs)))]
- [else (error "Invalid syntax in production" xs)]))
-
-(define (split-at-symb symb xs)
- (define (iter left right)
- (cond
- [(null? right) (cons left null)]
- [(eq? symb (car right)) (cons left (cdr right))]
- [else (iter (cons (car right) left) (cdr right))]))
- (let ([res (iter null xs)])
- (cons (reverse (car res)) (cdr res))))
-
-(define (split-by-separator xs)
- (let ([res (split-at-symb SEPARATOR xs)])
- (if (null? (cdr res))
- res
- (cons (car res) (split-by-separator (cdr res))))))
-
-(define (symbol->list s)
- (map string->symbol
- (map string
- (string->list (symbol->string s)))))
-
-(define sample '(S ::= "" -- SS -- "(" S ")"))
-(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]")))
-(define sample3 '(grammar S
- (S ::= A B -- D E)
- (A ::= "a")
- (B ::= "b" C)
- (C ::= "c")
- (D ::= "d" F)
- (E ::= "e")
- (F ::= "f" D)))
-
-;; zadanie 2
-
-;; korzystam z algorytmów przedstawionych w tej książce:
-;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51
-;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive
-;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne
-;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza,
-;; a jest bardzo nieistotną zmianą koncepcyjną.
-;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable
-
-;; cfg-productive działa w ten sposób:
-;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę
-;; Jakąś zasadę nazywamy produktywną, jeśli składa się z terminali oraz produktywnych nieterminali
-;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne
-;; wg definicji zadania, a cała reszta jest produktwna.
-
-;; Algorytm znajdowania produktywnych nieterminali:
-;; Mamy listę produktywnych nieterminali P, początkowo pustą
-;; 1. Stwórz nową listę P'
-;; 2. Przejdź po liście produkcji
-;; -> jeśli dana produkcja jest produktywna (wg P), dodaj jej nieterminal do P'
-;; 3. Jeśli P != P', zrób P := P' i wróć do 1.
-;; 4. Zwróć P
-
-;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego
-;; używamy w jakiejś produkcji, ale ten nieterminal nie ma zdefiniowanej swojej produkcji
-;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne
-
-;; Algorytm znajdowania osiągalnych nieterminali:
-;; Traktujemy nitereminale jak wierzchołki w grafie a zasady jako listy sąsiedztwa.
-;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminalu
-;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne.
-
-;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale,
-;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna.
-
-(define (productive? p productive-nt)
- (or (terminal? p) (member (non-terminal-sym p) productive-nt)))
-(define (rule-productive? r productive-nt)
- (andmap (lambda (x) (productive? x productive-nt)) r))
-
-(define (cfg-productive g)
- (define (find-productive-nt productive-nt rules)
- (cond
- [(null? rules) (remove-duplicates productive-nt)]
- [(rule-productive? (cdar rules) productive-nt)
- (find-productive-nt (cons (caar rules) productive-nt) (cdr rules))]
- [else (find-productive-nt productive-nt (cdr rules))]))
- (define (iter productive-nt)
- (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))])
- (if (equal? productive-nt new-prod-nt)
- productive-nt
- (iter new-prod-nt))))
- (iter null))
-
-(define (cfg-reachable g)
- (define (iter verts vis)
- (cond
- [(null? verts) vis]
- [(member (car verts) vis) (iter (cdr verts) vis)]
- [else (iter (cdr verts) (dfs (car verts) vis))]))
- (define (dfs v vis)
- (display v)
- (newline)
- (let* ([rules (filter (lambda (r) (eq? (car r) v)) (grammar-rules g))]
- [verts (append-map (lambda (r) (cdr r)) rules)]
- [verts (filter non-terminal? verts)]
- [verts (map non-terminal-sym verts)])
- (iter verts (cons v vis))))
- (dfs (grammar-start g) null))
-
-(define (cfg-optimize g)
- (let* ([productive-nt (cfg-productive g)]
- [productive-rules (filter (lambda (r)
- (rule-productive? (cdr r) productive-nt))
- (grammar-rules g))]
- [new-g (grammar (grammar-start g) productive-rules)]
- [reachable-nt (cfg-reachable new-g)]
- [res-g (grammar (grammar-start new-g) (filter
- (lambda (r) (member (car r) reachable-nt))
- (grammar-rules new-g)))])
- res-g))
- \ No newline at end of file
diff --git a/Semestr 2/racket/l10z18/solution.bak b/Semestr 2/racket/l10z18/solution.bak
deleted file mode 100644
index 02eb770..0000000
--- a/Semestr 2/racket/l10z18/solution.bak
+++ /dev/null
@@ -1,363 +0,0 @@
-#lang racket
-
-;; Składnia abstrakcyjna
-(struct const (val) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct let-expr (id bound body) #:transparent)
-(struct letrec-expr (id bound body) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct lambda-expr (arg body) #:transparent)
-(struct app-expr (fun arg) #:transparent)
-
-(define (keyword s)
- (member s '(true false null and or if cond else lambda let letrec)))
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n)
- (boolean? n)
- (null? n)
- (string? n))]
- [(var-expr id) (symbol? id)]
- [(let-expr x e1 e2 ) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(letrec-expr x e1 e2) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(if-expr eb et ef) (and (expr? eb)
- (expr? et)
- (expr? ef))]
- [(lambda-expr x e) (and (symbol? x)
- (expr? e))]
- [(app-expr ef ea) (and (expr? ef)
- (expr? ea))]
- [_ false]))
-
-;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna)
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(string? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (const null)]
- [(and (symbol? q)
- (not (keyword q)))
- (var-expr q)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'let)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'letrec)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'and))
- (desugar-and (map parse (cdr q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'or))
- (desugar-or (map parse (cdr q)))]
- [(and (list? q)
- (>= (length q) 2)
- (eq? (first q) 'cond))
- (parse-cond (cdr q))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'lambda)
- (list? (second q))
- (andmap symbol? (second q))
- (cons? (second q)))
- (desugar-lambda (second q) (parse (third q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-app (parse (first q)) (map parse (cdr q)))]
- [else (error "Unrecognized token:" q)]))
-
-(define (parse-cond qs)
- (match qs
- [(list (list 'else q))
- (parse q)]
-
- [(list (list q _))
- (error "Expected 'else' in last branch but found:" q)]
-
- [(cons (list qb qt) qs)
- (if-expr (parse qb) (parse qt) (parse-cond qs))]))
-
-(define (desugar-and es)
- (if (null? es)
- (const true)
- (if-expr (car es) (desugar-and (cdr es)) (const false))))
-
-(define (desugar-or es)
- (if (null? es)
- (const false)
- (if-expr (car es) (const true) (desugar-or (cdr es)))))
-
-(define (desugar-lambda xs e)
- (if (null? xs)
- e
- (lambda-expr (car xs) (desugar-lambda (cdr xs) e))))
-
-(define (desugar-app e es)
- (if (null? es)
- e
- (desugar-app (app-expr e (car es)) (cdr es))))
-
-;; Środowiska
-(struct blackhole ())
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs)
- (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (let ((v (mcdr (car xs))))
- (if (blackhole? v)
- (error "Jumped into blackhole at" x)
- v))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v env)
- (define (assoc-update xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (set-mcdr! (car xs) v)]
- [else (assoc-update (cdr xs))]))
- (assoc-update (environ-xs env)))
-
-;; Domknięcia
-(struct clo (arg body env))
-
-;; Procedury wbudowane, gdzie
-;; proc — Racketowa procedura którą należy uruchomić
-;; args — lista dotychczas dostarczonych argumentów
-;; pnum — liczba brakujących argumentów (> 0)
-;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur
-;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność
-;; procedury jest ustalona z góry
-(struct builtin (proc args pnum) #:transparent)
-
-;; Pomocnicze konstruktory procedur unarnych i binarnych
-(define (builtin/1 p)
- (builtin (lambda (x) (return (p x))) null 1))
-(define (builtin/2 p)
- (builtin (lambda (x y) (return (p x y))) null 2))
-
-;; Procedury
-(define (proc? v)
- (or (and (clo? v)
- (symbol? (clo-arg v))
- (expr? (clo-body v))
- (environ? (clo-env v)))
- (and (builtin? v)
- (procedure? (builtin-proc v))
- (andmap value? (builtin-args v))
- (natural? (builtin-pnum v))
- (> (builtin-pnum v) 0))))
-
-;; Definicja typu wartości
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (null? v)
- (string? v)
- (and (cons? v)
- (value? (car v))
- (value? (cdr v)))
- (proc? v)))
-
-;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom)
-
-(define start-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- env-empty
- `((+ ,(builtin/2 +))
- (- ,(builtin/2 -))
- (* ,(builtin/2 *))
- (/ ,(builtin/2 /))
- (~ ,(builtin/1 -))
- (< ,(builtin/2 <))
- (> ,(builtin/2 >))
- (= ,(builtin/2 =))
- (<= ,(builtin/2 <=))
- (>= ,(builtin/2 >=))
- (not ,(builtin/1 not))
- (cons ,(builtin/2 cons))
- (car ,(builtin/1 car))
- (cdr ,(builtin/1 cdr))
- (pair? ,(builtin/1 cons?))
- (null? ,(builtin/1 null?))
- (boolean? ,(builtin/1 boolean?))
- (number? ,(builtin/1 number?))
- (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x)))))
- (string? ,(builtin/1 string?))
- (string-= ,(builtin/2 string=?))
- ;; and so on, and so on
- )))
-
-;; Efekt
-
-(define (effect-builtin/1 p)
- (builtin p null 1))
-(define (effect-builtin/2 p)
- (builtin p null 2))
-
-(define effect-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- start-env
- `((choose ,(effect-builtin/2 (lambda (x y) (list x y))))
- )))
-
-(define (bind c k) (append-map k c))
-
-(define (return x) (list x))
-
-;; Ewaluator
-(define (eval-env e env)
- (match e
- [(const n)
- (return n)]
-
- [(var-expr x)
- (return (env-lookup x env))]
-
- [(let-expr x e1 e2)
- (bind (eval-env e1 env) (lambda (v1)
- (eval-env e2 (env-add x v1 env))))]
-
- [(letrec-expr f ef eb)
- (let ((new-env (env-add f (blackhole) env)))
- (bind (eval-env ef new-env) (lambda (vf)
- (env-update! f vf new-env)
- (eval-env eb new-env))))]
-
- [(if-expr eb et ef)
- (bind (eval-env eb env) (lambda (vb)
- (match vb
- [#t (eval-env et env)]
- [#f (eval-env ef env)]
- [v (error "Not a boolean:" v)])))]
-
- [(lambda-expr x e)
- (return (clo x e env))]
-
- [(app-expr ef ea)
- (bind (eval-env ef env) (lambda (vf)
- (bind (eval-env ea env) (lambda (va)
- (match vf
- [(clo x e env)
- (eval-env e (env-add x va env))]
- [(builtin p args nm)
- (if (= nm 1)
- (apply p (reverse (cons va args)))
- (return (builtin p (cons va args) (- nm 1))))]
- [_ (error "Not a function:" vf)])))))]))
-
-(define (eval e)
- (eval-env e effect-env))
-
-
-;; Przykladowy program
-
-(define PROGRAM
- '((if (choose true false) (lambda (x) x) (lambda (x) (+ x 1))) (choose 1 2)))
-
-
-;; REPL — interpreter interaktywny (read-eval-print loop)
-
-;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera"
-;; i komendę wyjścia "exit" ...
-(struct letrec-repl (id expr))
-(struct let-repl (id expr))
-(struct exit-repl ())
-
-;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i
-;; prostą obsługę błędów
-(define (parse-repl q)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Parse error! ")
- (displayln (exn-message exn)))])
- (cond
- [(eq? q 'exit) (exit-repl)]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'let))
- (let-repl (second q) (parse (third q)))]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'letrec))
- (letrec-repl (second q) (parse (third q)))]
- [else (parse q)])))
-
-;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej
-;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie
-;; kończył działanie całego interpretera!
-(define (eval-repl c env continue)
- (define (eval-with-err e env)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Error! ")
- (displayln (exn-message exn)))])
- (eval-env e env)))
- (match c
- [(exit-repl)
- (void)]
-
- [(let-repl x e)
- (let ((v (eval-with-err e env)))
- (if (void? v)
- (continue env)
- (continue (env-add x v env))))]
-
- [(letrec-repl f e)
- (let* ((new-env (env-add f (blackhole) env))
- (v (eval-with-err e new-env)))
- (if (void? v)
- (continue env)
- (begin
- (env-update! f v new-env)
- (continue new-env))))]
-
- [_
- (let ((v (eval-with-err c env)))
- (unless (void? v)
- (displayln v))
- (continue env))]))
-
-;; I w końcu interaktywny interpreter
-(define (repl)
- (define (go env)
- (display "FUN > ")
- (let* ((q (read))
- (c (parse-repl q)))
- (if (void? c)
- (go env)
- (eval-repl c env go))))
- (displayln "Welcome to the FUN functional language interpreter!")
- (go start-env)) \ No newline at end of file
diff --git a/Semestr 2/racket/l10z18/solution.rkt b/Semestr 2/racket/l10z18/solution.rkt
deleted file mode 100644
index 7adcea4..0000000
--- a/Semestr 2/racket/l10z18/solution.rkt
+++ /dev/null
@@ -1,409 +0,0 @@
-#lang racket
-
-;; Składnia abstrakcyjna
-(struct const (val) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct let-expr (id bound body) #:transparent)
-(struct letrec-expr (id bound body) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct lambda-expr (arg body) #:transparent)
-(struct app-expr (fun arg) #:transparent)
-
-(provide parse eval norm)
-
-(define (keyword s)
- (member s '(true false null and or if cond else lambda let letrec)))
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n)
- (boolean? n)
- (null? n)
- (string? n))]
- [(var-expr id) (symbol? id)]
- [(let-expr x e1 e2 ) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(letrec-expr x e1 e2) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(if-expr eb et ef) (and (expr? eb)
- (expr? et)
- (expr? ef))]
- [(lambda-expr x e) (and (symbol? x)
- (expr? e))]
- [(app-expr ef ea) (and (expr? ef)
- (expr? ea))]
- [_ false]))
-
-;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna)
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(string? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (const null)]
- [(and (symbol? q)
- (not (keyword q)))
- (var-expr q)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'let)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'letrec)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'and))
- (desugar-and (map parse (cdr q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'or))
- (desugar-or (map parse (cdr q)))]
- [(and (list? q)
- (>= (length q) 2)
- (eq? (first q) 'cond))
- (parse-cond (cdr q))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'lambda)
- (list? (second q))
- (andmap symbol? (second q))
- (cons? (second q)))
- (desugar-lambda (second q) (parse (third q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-app (parse (first q)) (map parse (cdr q)))]
- [else (error "Unrecognized token:" q)]))
-
-(define (parse-cond qs)
- (match qs
- [(list (list 'else q))
- (parse q)]
-
- [(list (list q _))
- (error "Expected 'else' in last branch but found:" q)]
-
- [(cons (list qb qt) qs)
- (if-expr (parse qb) (parse qt) (parse-cond qs))]))
-
-(define (desugar-and es)
- (if (null? es)
- (const true)
- (if-expr (car es) (desugar-and (cdr es)) (const false))))
-
-(define (desugar-or es)
- (if (null? es)
- (const false)
- (if-expr (car es) (const true) (desugar-or (cdr es)))))
-
-(define (desugar-lambda xs e)
- (if (null? xs)
- e
- (lambda-expr (car xs) (desugar-lambda (cdr xs) e))))
-
-(define (desugar-app e es)
- (if (null? es)
- e
- (desugar-app (app-expr e (car es)) (cdr es))))
-
-;; Środowiska
-(struct blackhole ())
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs)
- (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (let ((v (mcdr (car xs))))
- (if (blackhole? v)
- (error "Jumped into blackhole at" x)
- v))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v env)
- (define (assoc-update xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (set-mcdr! (car xs) v)]
- [else (assoc-update (cdr xs))]))
- (assoc-update (environ-xs env)))
-
-;; Domknięcia
-(struct clo (arg body env))
-
-;; Procedury wbudowane, gdzie
-;; proc — Racketowa procedura którą należy uruchomić
-;; args — lista dotychczas dostarczonych argumentów
-;; pnum — liczba brakujących argumentów (> 0)
-;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur
-;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność
-;; procedury jest ustalona z góry
-(struct builtin (proc args pnum) #:transparent)
-
-;; Pomocnicze konstruktory procedur unarnych i binarnych
-(define (builtin/1 p)
- (builtin (lambda (x) (return (p x))) null 1))
-(define (builtin/2 p)
- (builtin (lambda (x y) (return (p x y))) null 2))
-
-;; Procedury
-(define (proc? v)
- (or (and (clo? v)
- (symbol? (clo-arg v))
- (expr? (clo-body v))
- (environ? (clo-env v)))
- (and (builtin? v)
- (procedure? (builtin-proc v))
- (andmap value? (builtin-args v))
- (natural? (builtin-pnum v))
- (> (builtin-pnum v) 0))))
-
-;; Definicja typu wartości
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (null? v)
- (string? v)
- (and (cons? v)
- (value? (car v))
- (value? (cdr v)))
- (proc? v)))
-
-;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom)
-
-(define start-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- env-empty
- `((+ ,(builtin/2 +))
- (- ,(builtin/2 -))
- (* ,(builtin/2 *))
- (/ ,(builtin/2 /))
- (~ ,(builtin/1 -))
- (< ,(builtin/2 <))
- (> ,(builtin/2 >))
- (= ,(builtin/2 =))
- (<= ,(builtin/2 <=))
- (>= ,(builtin/2 >=))
- (not ,(builtin/1 not))
- (cons ,(builtin/2 cons))
- (car ,(builtin/1 car))
- (cdr ,(builtin/1 cdr))
- (pair? ,(builtin/1 cons?))
- (null? ,(builtin/1 null?))
- (boolean? ,(builtin/1 boolean?))
- (number? ,(builtin/1 number?))
- (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x)))))
- (string? ,(builtin/1 string?))
- (string-= ,(builtin/2 string=?))
- ;; and so on, and so on
- )))
-
-;; Efekt
-
-(define (effect-builtin/1 p)
- (builtin p null 1))
-(define (effect-builtin/2 p)
- (builtin p null 2))
-(define (effect-builtin/3 p)
- (builtin p null 3))
-
-
-(define effect-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- start-env
- `((flip ,(effect-builtin/3 (lambda (p x y) (list (cons p x) (cons (- 1 p) y)))))
- (uniform ,(effect-builtin/1 (lambda (x) (let ((l (/ 1 (length x))))
- (map (lambda (x) (cons l x)) x)))))
- )))
-
-;; c to lista par (pstwo, wartość)
-;; k to funkcja która przyjmuje wartość i coś z nią robi sobie i zwraca listę par (pstwo, wartość)
-
-(define (bind c k)
- (append-map
- (lambda (x) (let ((pstwo (car x))
- (val (cdr x)))
- (map
- (lambda (x) (cons (* pstwo (car x)) (cdr x)))
- (k (cdr x)))))
- c))
-
-(define (return x) (list (cons 1 x)))
-
-;; Ewaluator
-(define (eval-env e env)
- (match e
- [(const n)
- (return n)]
-
- [(var-expr x)
- (return (env-lookup x env))]
-
- [(let-expr x e1 e2)
- (bind (eval-env e1 env) (lambda (v1)
- (eval-env e2 (env-add x v1 env))))]
-
- [(letrec-expr f ef eb)
- (let ((new-env (env-add f (blackhole) env)))
- (bind (eval-env ef new-env) (lambda (vf)
- (env-update! f vf new-env)
- (eval-env eb new-env))))]
-
- [(if-expr eb et ef)
- (bind (eval-env eb env) (lambda (vb)
- (match vb
- [#t (eval-env et env)]
- [#f (eval-env ef env)]
- [v (error "Not a boolean:" v)])))]
-
- [(lambda-expr x e)
- (return (clo x e env))]
-
- [(app-expr ef ea)
- (bind (eval-env ef env) (lambda (vf)
- (bind (eval-env ea env) (lambda (va)
- (match vf
- [(clo x e env)
- (eval-env e (env-add x va env))]
- [(builtin p args nm)
- (if (= nm 1)
- (apply p (reverse (cons va args)))
- (return (builtin p (cons va args) (- nm 1))))]
- [_ (error "Not a function:" vf)])))))]))
-
-(define (eval e)
- (eval-env e effect-env))
-
-
-;; Przykladowy program
-
-(define PROGRAM
- '((if (choose true false) (lambda (x) x) (lambda (x) (+ x 1))) (choose 1 2)))
-
-
-;; REPL — interpreter interaktywny (read-eval-print loop)
-
-;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera"
-;; i komendę wyjścia "exit" ...
-(struct letrec-repl (id expr))
-(struct let-repl (id expr))
-(struct exit-repl ())
-
-;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i
-;; prostą obsługę błędów
-(define (parse-repl q)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Parse error! ")
- (displayln (exn-message exn)))])
- (cond
- [(eq? q 'exit) (exit-repl)]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'let))
- (let-repl (second q) (parse (third q)))]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'letrec))
- (letrec-repl (second q) (parse (third q)))]
- [else (parse q)])))
-
-;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej
-;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie
-;; kończył działanie całego interpretera!
-(define (eval-repl c env continue)
- (define (eval-with-err e env)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Error! ")
- (displayln (exn-message exn)))])
- (eval-env e env)))
- (match c
- [(exit-repl)
- (void)]
-
- [(let-repl x e)
- (let ((v (eval-with-err e env)))
- (if (void? v)
- (continue env)
- (continue (env-add x v env))))]
-
- [(letrec-repl f e)
- (let* ((new-env (env-add f (blackhole) env))
- (v (eval-with-err e new-env)))
- (if (void? v)
- (continue env)
- (begin
- (env-update! f v new-env)
- (continue new-env))))]
-
- [_
- (let ((v (eval-with-err c env)))
- (unless (void? v)
- (displayln v))
- (continue env))]))
-
-;; I w końcu interaktywny interpreter
-(define (repl)
- (define (go env)
- (display "FUN > ")
- (let* ((q (read))
- (c (parse-repl q)))
- (if (void? c)
- (go env)
- (eval-repl c env go))))
- (displayln "Welcome to the FUN functional language interpreter!")
- (go start-env))
-
-
-(define prog '(if (flip 0.3 true false) "wygrana" "przegrana"))
-
-
-(define (norm xs)
- (define sum (lambda (xs) (foldl + 0 xs)))
- (define carlist (lambda (xs) (map car xs)))
- (define (iter xs res)
- (cond
- [(null? xs) res]
- [(member (cdar xs) (map cdr res)) (iter (cdr xs) res)]
- [else (let* ((cur (cdar xs))
- (pstwa (filter (lambda (x) (equal? (cdr x) cur)) xs)))
- (iter (cdr xs) (cons (cons (sum (carlist pstwa)) cur) res)))]))
- (iter xs null))
-
-
-(define DICE-MANY
- '(letrec [from-to (lambda (x n)
- (cons x
- (if (= x n)
- null
- (from-to (+ 1 x) n))))]
- (let [dice (lambda (x) (uniform (from-to 1 6)))]
- (letrec [dice-many (lambda (n) (if (= n 0)
- 0
- (+ (dice 0) (dice-many (- n 1)))))]
- (dice-many (dice 0)))))) \ No newline at end of file
diff --git a/Semestr 2/racket/l11/rozw.bak b/Semestr 2/racket/l11/rozw.bak
deleted file mode 100644
index cda82ce..0000000
--- a/Semestr 2/racket/l11/rozw.bak
+++ /dev/null
@@ -1,2 +0,0 @@
-#lang racket
-
diff --git a/Semestr 2/racket/l11/rozw.rkt b/Semestr 2/racket/l11/rozw.rkt
deleted file mode 100644
index e45e403..0000000
--- a/Semestr 2/racket/l11/rozw.rkt
+++ /dev/null
@@ -1,776 +0,0 @@
-#reader(lib"read.ss""wxme")WXME0109 ##
-#|
- This file uses the GRacket editor format.
- Open this file in DrRacket version 7.6 or later to read it.
-
- Most likely, it was created by saving a program in DrRacket,
- and it probably contains a program with non-text elements
- (such as images or comment boxes).
-
- http://racket-lang.org/
-|#
- 33 7 #"wxtext\0"
-3 1 6 #"wxtab\0"
-1 1 8 #"wximage\0"
-2 0 8 #"wxmedia\0"
-4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0"
-1 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0"
-1 0 68
-(0
- #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr"
- #"lib\"))\0"
-) 1 0 16 #"drscheme:number\0"
-3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0"
-1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0"
-1 0 93
-(1
- #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni"
- #"pclass-wxme.ss\" \"framework\"))\0"
-) 0 0 43 #"(lib \"collapsed-snipclass.ss\" \"framework\")\0"
-0 0 19 #"drscheme:sexp-snip\0"
-0 0 29 #"drscheme:bindings-snipclass%\0"
-1 0 101
-(2
- #"((lib \"ellipsis-snip.rkt\" \"drracket\" \"private\") (lib \"ellipsi"
- #"s-snip-wxme.rkt\" \"drracket\" \"private\"))\0"
-) 2 0 88
-(3
- #"((lib \"pict-snip.rkt\" \"drracket\" \"private\") (lib \"pict-snip.r"
- #"kt\" \"drracket\" \"private\"))\0"
-) 0 0 55
-#"((lib \"snip.rkt\" \"pict\") (lib \"snip-wxme.rkt\" \"pict\"))\0"
-1 0 34 #"(lib \"bullet-snip.rkt\" \"browser\")\0"
-0 0 25 #"(lib \"matrix.ss\" \"htdp\")\0"
-1 0 22 #"drscheme:lambda-snip%\0"
-1 0 29 #"drclickable-string-snipclass\0"
-0 0 26 #"drracket:spacer-snipclass\0"
-0 0 57
-#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0"
-1 0 26 #"drscheme:pict-value-snip%\0"
-0 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0"
-1 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0"
-2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0"
-1 0 18 #"drscheme:xml-snip\0"
-1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0"
-1 0 21 #"drscheme:scheme-snip\0"
-2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0"
-1 0 10 #"text-box%\0"
-1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0"
-1 0 1 6 #"wxloc\0"
- 0 0 81 0 1 #"\0"
-0 75 1 #"\0"
-0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9
-#"Standard\0"
-0 75 12 #"Courier New\0"
-0 16 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24
-#"framework:default-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15
-#"text:ports out\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 119 34 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1
--1 2 15 #"text:ports err\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17
-#"text:ports value\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1
--1 2 27 #"Matching Parenthesis Style\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1
--1 2 1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37
-#"framework:syntax-color:scheme:symbol\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-38 #"framework:syntax-color:scheme:keyword\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2
-38 #"framework:syntax-color:scheme:comment\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 204 221 170 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37
-#"framework:syntax-color:scheme:string\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-35 #"framework:syntax-color:scheme:text\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-39 #"framework:syntax-color:scheme:constant\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 49
-#"framework:syntax-color:scheme:hash-colon-keyword\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-42 #"framework:syntax-color:scheme:parenthesis\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 178 178 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36
-#"framework:syntax-color:scheme:error\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36
-#"framework:syntax-color:scheme:other\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2
-16 #"Misspelled Text\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2
-38 #"drracket:check-syntax:lexically-bound\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 50 163 255 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28
-#"drracket:check-syntax:set!d\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2
-37 #"drracket:check-syntax:unused-require\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2
-36 #"drracket:check-syntax:free-variable\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31
-#"drracket:check-syntax:imported\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 166 0 255 0 0 0 -1 -1 2 47
-#"drracket:check-syntax:my-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 192 203 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50
-#"drracket:check-syntax:their-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 50 205 50 0 0 0 -1 -1 2 48
-#"drracket:check-syntax:unk-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2
-49 #"drracket:check-syntax:both-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 240 230 140 0 0 0 -1 -1 2
-26 #"plt:htdp:test-coverage-on\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27
-#"plt:htdp:test-coverage-off\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 205 92 92 0 0 0 -1 -1 4 1
-#"\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 4 4 #"XML\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 2 37 #"plt:module-language:test-coverage-on\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2
-38 #"plt:module-language:test-coverage-off\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 205 92 92 0 0 0 -1 -1 0 36
-#"mrlib/syntax-browser:subtitle-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 100 149 237 0 0 0 -1 -1 0
-42 #"mrlib/syntax-browser:focused-syntax-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 50 205 50 0 0 0 -1 -1 4 1
-#"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 4 1 #"\0"
-0 -1 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 191 255 0 0 0 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 191 255 0 0 0 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 152 251 152 0 0 0
--1 -1 4 32 #"widget.rkt::browser-text% basic\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 4 59
-#"macro-debugger/syntax-browser/properties color-text% basic\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 58 1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 190 190 190 0 0 0 -1 -1 2
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 185 220 113 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 155 255 155 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 116 116 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 18 67 155 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 30 70 190 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 75 135 185 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 208 208 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 116 116 255 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 125 255 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 143 15 223 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 165 0 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 141 19 5 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 244 194 71 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 127 0 0 0 -1 -1 4
-1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 86 86 86 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 255 255 0 31 31 -1 -1
-4 1 #"\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 255 255 0 -1 -1
- 0 475 0 28 3 12 #"#lang racket"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 7 #"require"
-0 0 24 3 1 #" "
-0 0 14 3 15 #"racket/contract"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 17 3 13 #";;; Zadanie 1"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 8 #"suffixes"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 3 #") ("
-0 0 14 3 6 #"listof"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 5 #")))) "
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 2 #"if"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"null?"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 6 #" "
-0 0 14 3 4 #"null"
-0 0 24 29 1 #"\n"
-0 0 24 3 7 #" ("
-0 0 14 3 4 #"cons"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 2 #" ("
-0 0 14 3 8 #"suffixes"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 5 #")))))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 17 3 13 #";;; Zadanie 2"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 8 #"sublists"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 3 #") ("
-0 0 14 3 6 #"listof"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 6 #")))) "
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 2 #"if"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"null?"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 7 #" ("
-0 0 14 3 4 #"list"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"null"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 7 #" ("
-0 0 14 3 10 #"append-map"
-0 0 24 29 1 #"\n"
-0 0 24 3 8 #" ("
-0 0 15 3 6 #"lambda"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"ys"
-0 0 24 3 3 #") ("
-0 0 14 3 4 #"list"
-0 0 24 3 2 #" ("
-0 0 14 3 4 #"cons"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"car"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 2 #") "
-0 0 14 3 2 #"ys"
-0 0 24 3 2 #") "
-0 0 14 3 2 #"ys"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 8 #" ("
-0 0 14 3 8 #"sublists"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 5 #")))))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 17 3 13 #";;; Zadanie 3"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 17 #"autistic-identity"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"x"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 2 #" "
-0 0 14 3 1 #"x"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"create"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"comb"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"next"
-0 0 24 3 1 #" "
-0 0 14 3 3 #"beg"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 3 #") ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 4 #" (("
-0 0 14 3 4 #"comb"
-0 0 24 3 2 #" ("
-0 0 14 3 4 #"next"
-0 0 24 3 1 #" "
-0 0 14 3 3 #"beg"
-0 0 24 3 2 #") "
-0 0 14 3 3 #"beg"
-0 0 24 3 3 #")))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 7 #"compose"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"bc"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"ab"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 3 #") ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 3 #") ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"c"
-0 0 24 3 3 #")))"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 15 3 6 #"lambda"
-0 0 24 3 2 #" ("
-0 0 14 3 1 #"x"
-0 0 24 3 3 #") ("
-0 0 14 3 2 #"bc"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"ab"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"x"
-0 0 24 3 4 #"))))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"ident"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"f"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"a"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"a"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 1 #"f"
-0 0 24 3 1 #" "
-0 0 14 3 8 #"identity"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 17 3 13 #";;; Zadanie 4"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 12 #"broken-contr"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"x"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"b"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 12 #"broken-contr"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"x"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 17 3 13 #";;; Zadanie 5"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 15 #"define/contract"
-0 0 24 3 2 #" ("
-0 0 14 3 9 #"foldl-map"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"f"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 14 #"parametric->/c"
-0 0 24 3 2 #" ["
-0 0 14 3 1 #"F"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"A"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"L"
-0 0 24 3 3 #"] ("
-0 0 14 3 2 #"->"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"->"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"L"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"A"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"cons/c"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"F"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"A"
-0 0 24 3 3 #")) "
-0 0 14 3 1 #"A"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"L"
-0 0 24 3 3 #") ("
-0 0 14 3 6 #"cons/c"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"listof"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"F"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"A"
-0 0 24 3 4 #"))) "
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 15 3 6 #"define"
-0 0 24 3 2 #" ("
-0 0 14 3 2 #"it"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"ys"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 5 #" ("
-0 0 14 3 2 #"if"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"null?"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 14 3 4 #"cons"
-0 0 24 3 2 #" ("
-0 0 14 3 7 #"reverse"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"ys"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 15 3 3 #"let"
-0 0 24 3 3 #" [("
-0 0 14 3 1 #"p"
-0 0 24 3 2 #" ("
-0 0 14 3 1 #"f"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"car"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"a"
-0 0 24 3 3 #"))]"
-0 0 24 29 1 #"\n"
-0 0 24 3 11 #" ("
-0 0 14 3 2 #"it"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"p"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 15 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 15 #" ("
-0 0 14 3 4 #"cons"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"car"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"p"
-0 0 24 3 2 #") "
-0 0 14 3 2 #"ys"
-0 0 24 3 5 #")))))"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 2 #"it"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"a"
-0 0 24 3 1 #" "
-0 0 14 3 2 #"xs"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"null"
-0 0 24 3 2 #"))"
-0 0
diff --git a/Semestr 2/racket/l11/solution.bak b/Semestr 2/racket/l11/solution.bak
deleted file mode 100644
index 3ae167a..0000000
--- a/Semestr 2/racket/l11/solution.bak
+++ /dev/null
@@ -1,18 +0,0 @@
-#lang racket
-
-(require racket/contract)
-
-(provide (contract-out [square square/c]))
-(provide square/c)
-
-(define square/c (-> number? (not/c negative?)))
-
-(define (square x) (* x x))
-
-
-(define with-labels/c (parametric->/c [a b] (-> (-> a b))
-
-(define (with-labels f xs)
- (if (null? xs)
- null
- (cons (list (f (car xs)) (car xs)) (with-labels f (cdr xs))))) \ No newline at end of file
diff --git a/Semestr 2/racket/l11/solution.rkt b/Semestr 2/racket/l11/solution.rkt
deleted file mode 100644
index 55e4ba6..0000000
--- a/Semestr 2/racket/l11/solution.rkt
+++ /dev/null
@@ -1,35 +0,0 @@
-#lang racket
-
-(provide (contract-out
- [with-labels with-labels/c]
- [foldr-map foldr-map/c]
- [pair-from pair-from/c]))
-(provide with-labels/c foldr-map/c pair-from/c)
-
-
-(define with-labels/c (parametric->/c [a b] (-> (-> a b) (listof a) (listof (cons/c b (cons/c a null?))))))
-
-(define (with-labels f xs)
- (if (null? xs)
- null
- (cons (list (f (car xs)) (car xs)) (with-labels f (cdr xs)))))
-
-
-
-(define foldr-map/c (parametric->/c [x a f] (-> (-> x a (cons/c f a)) a (listof x) (cons/c (listof f) a))))
-
-(define (foldr-map f a xs)
- (define (it a xs ys)
- (if (null? xs)
- (cons ys a)
- (let [(p (f (car xs) a))]
- (it (cdr p)
- (cdr xs)
- (cons (car p) ys)))))
- (it a (reverse xs) null))
-
-
-(define pair-from/c (parametric->/c [x fx gx] (-> (-> x fx) (-> x gx) (-> x (cons/c fx gx)))))
-
-(define (pair-from f g)
- (lambda (x) (cons (f x) (g x)))) \ No newline at end of file
diff --git a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep b/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep
deleted file mode 100644
index 6d38ce0..0000000
--- a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep
+++ /dev/null
@@ -1 +0,0 @@
-("7.6" racket ("b51d3a36a64d34c7978bfc22f2a5fe674cee1cb6" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt"))
diff --git a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo b/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo
deleted file mode 100644
index ef91f9a..0000000
--- a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/l11z20/graph.bak b/Semestr 2/racket/l11z20/graph.bak
deleted file mode 100644
index 9f4d79d..0000000
--- a/Semestr 2/racket/l11z20/graph.bak
+++ /dev/null
@@ -1,97 +0,0 @@
-#lang racket
-
-(provide bag^ graph^ simple-graph@ graph-search^ graph-search@)
-
-;; sygnatura dla struktury danych
-(define-signature bag^
- ((contracted
- [bag? (-> any/c boolean?)]
- [empty-bag (and/c bag? bag-empty?)]
- [bag-empty? (-> bag? boolean?)]
- [bag-insert (-> bag? any/c (and/c bag? (not/c bag-empty?)))]
- [bag-peek (-> (and/c bag? (not/c bag-empty?)) any/c)]
- [bag-remove (-> (and/c bag? (not/c bag-empty?)) bag?)])))
-
-;; sygnatura: grafy
-(define-signature graph^
- ((contracted
- [graph (-> list? (listof edge?) graph?)]
- [graph? (-> any/c boolean?)]
- [graph-nodes (-> graph? list?)]
- [graph-edges (-> graph? (listof edge?))]
- [edge (-> any/c any/c edge?)]
- [edge? (-> any/c boolean?)]
- [edge-start (-> edge? any/c)]
- [edge-end (-> edge? any/c)]
- [has-node? (-> graph? any/c boolean?)]
- [outnodes (-> graph? any/c list?)]
- [remove-node (-> graph? any/c graph?)]
- )))
-
-;; prosta implementacja grafów
-(define-unit simple-graph@
- (import)
- (export graph^)
-
- (define (graph? g)
- (and (list? g)
- (eq? (length g) 3)
- (eq? (car g) 'graph)))
-
- (define (edge? e)
- (and (list? e)
- (eq? (length e) 3)
- (eq? (car e) 'edge)))
-
- (define (graph-nodes g) (cadr g))
-
- (define (graph-edges g) (caddr g))
-
- (define (graph n e) (list 'graph n e))
-
- (define (edge n1 n2) (list 'edge n1 n2))
-
- (define (edge-start e) (cadr e))
-
- (define (edge-end e) (caddr e))
-
- (define (has-node? g n) (not (not (member n (graph-nodes g)))))
-
- (define (outnodes g n)
- (filter-map
- (lambda (e)
- (and (eq? (edge-start e) n)
- (edge-end e)))
- (graph-edges g)))
-
- (define (remove-node g n)
- (graph
- (remove n (graph-nodes g))
- (filter
- (lambda (e)
- (not (eq? (edge-start e) n)))
- (graph-edges g)))))
-
-;; sygnatura dla przeszukiwania grafu
-(define-signature graph-search^
- (search))
-
-;; implementacja przeszukiwania grafu
-;; uzależniona od implementacji grafu i struktury danych
-(define-unit graph-search@
- (import bag^ graph^)
- (export graph-search^)
- (define (search g n)
- (define (it g b l)
- (cond
- [(bag-empty? b) (reverse l)]
- [(has-node? g (bag-peek b))
- (it (remove-node g (bag-peek b))
- (foldl
- (lambda (n1 b1) (bag-insert b1 n1))
- (bag-remove b)
- (outnodes g (bag-peek b)))
- (cons (bag-peek b) l))]
- [else (it g (bag-remove b) l)]))
- (it g (bag-insert empty-bag n) '()))
- )
diff --git a/Semestr 2/racket/l11z20/graph.rkt b/Semestr 2/racket/l11z20/graph.rkt
deleted file mode 100644
index ec19576..0000000
--- a/Semestr 2/racket/l11z20/graph.rkt
+++ /dev/null
@@ -1,100 +0,0 @@
-#lang racket
-
-(provide bag^ graph^ simple-graph@ graph-search^ graph-search@)
-
-;; sygnatura dla struktury danych
-(define-signature bag^
- ((contracted
- [bag? (-> any/c boolean?)]
- [empty-bag (and/c bag? bag-empty?)]
- [bag-empty? (-> bag? boolean?)]
- [bag-insert (-> bag? any/c (and/c bag? (not/c bag-empty?)))]
- [bag-peek (-> (and/c bag? (not/c bag-empty?)) any/c)]
- [bag-remove (-> (and/c bag? (not/c bag-empty?)) bag?)])))
-
-;; sygnatura: grafy
-(define-signature graph^
- ((contracted
- [graph (-> list? (listof edge?) graph?)]
- [graph? (-> any/c boolean?)]
- [graph-nodes (-> graph? list?)]
- [graph-edges (-> graph? (listof edge?))]
- [edge (-> any/c any/c edge?)]
- [edge? (-> any/c boolean?)]
- [edge-start (-> edge? any/c)]
- [edge-end (-> edge? any/c)]
- [has-node? (-> graph? any/c boolean?)]
- [outnodes (-> graph? any/c list?)]
- [remove-node (-> graph? any/c graph?)]
- )))
-
-;; prosta implementacja grafów
-(define-unit simple-graph@
- (import)
- (export graph^)
-
- (define (graph? g)
- (and (list? g)
- (eq? (length g) 3)
- (eq? (car g) 'graph)))
-
- (define (edge? e)
- (and (list? e)
- (eq? (length e) 3)
- (eq? (car e) 'edge)))
-
- (define (graph-nodes g) (cadr g))
-
- (define (graph-edges g) (caddr g))
-
- (define (graph n e) (list 'graph n e))
-
- (define (edge n1 n2) (list 'edge n1 n2))
-
- (define (edge-start e) (cadr e))
-
- (define (edge-end e) (caddr e))
-
- (define (has-node? g n) (not (not (member n (graph-nodes g)))))
-
- (define (outnodes g n)
- (filter-map
- (lambda (e)
- (and (eq? (edge-start e) n)
- (edge-end e)))
- (graph-edges g)))
-
- (define (remove-node g n)
- (graph
- (remove n (graph-nodes g))
- (filter
- (lambda (e)
- (not (eq? (edge-start e) n)))
- (graph-edges g)))))
-
-;; sygnatura dla przeszukiwania grafu
-(define-signature graph-search^
- (search))
-
-;; implementacja przeszukiwania grafu
-;; uzależniona od implementacji grafu i struktury danych
-(define-unit graph-search@
- (import bag^ graph^)
- (export graph-search^)
- (define (search g n)
- (define (it g b l)
- (cond
- [(bag-empty? b) (reverse l)]
- [(has-node? g (bag-peek b))
- (it (remove-node g (bag-peek b))
- (foldl
- (lambda (n1 b1) (bag-insert b1 n1))
- (bag-remove b)
- (outnodes g (bag-peek b)))
- (cons (bag-peek b) l))]
- [else (it g (bag-remove b) l)]))
- (it g (bag-insert empty-bag n) '()))
- )
-
-;; otwarcie komponentu grafu
-(define-values/invoke-unit/infer simple-graph@) \ No newline at end of file
diff --git a/Semestr 2/racket/l11z20/solution.bak b/Semestr 2/racket/l11z20/solution.bak
deleted file mode 100644
index 6f1f7b4..0000000
--- a/Semestr 2/racket/l11z20/solution.bak
+++ /dev/null
@@ -1 +0,0 @@
-#lang racket
diff --git a/Semestr 2/racket/l11z20/solution.rkt b/Semestr 2/racket/l11z20/solution.rkt
deleted file mode 100644
index e3ad81f..0000000
--- a/Semestr 2/racket/l11z20/solution.rkt
+++ /dev/null
@@ -1,245 +0,0 @@
-#lang racket
-
-(require "graph.rkt")
-(provide bag-stack@ bag-fifo@)
-
-;; struktura danych - stos
-(define-unit bag-stack@
- (import)
- (export bag^)
-
- (define (bag? b)
- (and (cons? b)
- (eq? (car b) 'stack)))
-
- (define empty-bag (cons 'stack null))
-
- (define (bag-empty? b)
- (null? (cdr b)))
-
- (define (bag-insert b val)
- (cons 'stack (cons val (cdr b))))
-
- (define (bag-peek b)
- (cadr b))
-
- (define (bag-remove b)
- (cons 'stack (cddr b)))
-)
-
-;; struktura danych - kolejka FIFO
-(define-unit bag-fifo@
- (import)
- (export bag^)
-
- (define (bag? b)
- (and (list? b)
- (eq? (length b) 3)
- (eq? (first b) 'queue)))
-
- (define empty-bag
- (list 'queue null null))
-
- (define (bag-empty? b)
- (and (null? (second b)) (null? (third b))))
-
- (define (bag-insert b val)
- (list 'queue (cons val (second b)) (third b)))
-
- (define (bag-peek b)
- (let ((insq (second b))
- (popq (third b)))
- (cond
- [(null? popq) (last insq)]
- [else (first popq)])))
-
- (define (bag-remove b)
- (let ((insq (second b))
- (popq (third b)))
- (cond
- [(null? popq) (list 'queue null (cdr (reverse insq)))]
- [else (list 'queue insq (cdr popq))])))
-)
-
-;; otwarcie komponentów stosu i kolejki
-
-(define-values/invoke-unit bag-stack@
- (import)
- (export (prefix stack: bag^)))
-
-(define-values/invoke-unit bag-fifo@
- (import)
- (export (prefix fifo: bag^)))
-
-;; testy w Quickchecku
-(require quickcheck)
-
-;; liczba zapytań na test quickchecka
-(define TESTS 1000)
-
-
-;; TESTY DO KOLEJKI
-
-;; xs to lista jakichś liczb, queries to rodzaj wykonywanych operacji
-;; 0 - popuje na listę pops
-;; 1 - insertuje na queue
-;; jest nie ma nic na kolejce/stosie i dostajemy 0, to nic nie robimy
-;; jesli queries albo xs są puste to po prostu kończymy obsługiwanie zapytań
-;; na koncu sprawdzamy, czy (reverse pops) jest prefiksem xs
-
-
-(define (check-queue xs queries)
- (define (iter xs queries queue pops)
- ;; (display queue)
- ;; (newline)
- (if (or (null? queries) (null? xs))
- (reverse pops)
- (cond
- [(and (eq? (car queries) 0) (not (fifo:bag-empty? queue)))
- (iter xs (cdr queries) (fifo:bag-remove queue) (cons (fifo:bag-peek queue) pops))]
- [else (iter (cdr xs) (cdr queries) (fifo:bag-insert queue (car xs)) pops)])))
- (define (is-prefix? xs ys)
- (if (null? xs)
- #t
- (and (equal? (car xs) (car ys)) (is-prefix? (cdr xs) (cdr ys)))))
- (is-prefix? (iter xs queries fifo:empty-bag null) xs))
-
-;; sprawdzenie czy nasza funkcja testująca w ogóle działa
-(define check-queue-test (lambda () (check-queue (list 1 2 3 4 5 6 7 8) (list 0 1 1 1 0 0 0 1 1 0 1 0 1 0 0))))
-
-;; testowanie kolejki
-(define-unit queue-tests@
- (import bag^)
- (export)
-
- (quickcheck
- (property ([xs (choose-list (choose-real -100000 100000) TESTS)]
- [ops (choose-list (choose-integer 0 1) TESTS)])
- (check-queue xs ops))))
-
-(invoke-unit queue-tests@ (import (prefix fifo: bag^)))
-
-
-;; TESTY DO STOSU
-
-;; niestety tutaj nie jest tak kolorowo, na kolejce
-;; dokładnie wiemy jaka jest koljeność popowanych, na stosie to dosyć dowolne.
-;; Z drugiej strony jego implementacja jest dużo prostsza, więc testy też nie muszą
-;; być bardzo rygorystyczne.
-
-(define (check-stack xs)
- (define (insert-list stack xs)
- (if (null? xs)
- stack
- (insert-list (stack:bag-insert stack (car xs)) (cdr xs))))
- (define (clear-stack stack pops)
- (if (stack:bag-empty? stack)
- pops
- (clear-stack (stack:bag-remove stack) (cons (stack:bag-peek stack) pops))))
- (equal? xs (clear-stack (insert-list stack:empty-bag xs) null)))
-
-
-;; testowanie stacka
-(define-unit stack-tests@
- (import bag^)
- (export)
- (quickcheck
- (property ([xs (choose-list (choose-real -100000 100000) TESTS)])
- (check-stack xs))))
-
-(invoke-unit stack-tests@ (import (prefix stack: bag^)))
-
-
-
-;; testy kolejek i stosów
-(define-unit bag-tests@
- (import bag^)
- (export)
-
- ;; test przykładowy: jeśli do pustej struktury dodamy element
- ;; i od razu go usuniemy, wynikowa struktura jest pusta
- (quickcheck
- (property ([s arbitrary-symbol])
- (bag-empty? (bag-remove (bag-insert empty-bag s)))))
-
- ;; Sprawdzenie własności wspólnych dla obu struktur
- (quickcheck
- (property ([s arbitrary-symbol])
- (equal? s (bag-peek (bag-insert empty-bag s)))))
-)
-
-;; uruchomienie testów dla obu struktur danych
-
-(invoke-unit bag-tests@ (import (prefix stack: bag^)))
-(invoke-unit bag-tests@ (import (prefix fifo: bag^)))
-
-
-
-;; TESTOWANIE PRZESZUKIWAŃ
-
-;; otwarcie komponentu grafu
-(define-values/invoke-unit/infer simple-graph@)
-
-;; otwarcie komponentów przeszukiwania
-;; w głąb i wszerz
-(define-values/invoke-unit graph-search@
- (import graph^ (prefix stack: bag^))
- (export (prefix dfs: graph-search^)))
-
-(define-values/invoke-unit graph-search@
- (import graph^ (prefix fifo: bag^))
- (export (prefix bfs: graph-search^)))
-
-;; graf testowy
-(define test-graph
- (graph
- (list 1 2 3 4)
- (list (edge 1 3)
- (edge 1 2)
- (edge 2 4))))
-
-(define test-graph2
- (graph (list 1) null))
-
-(define test-graph3
- (graph (list 1 2 3 4 5 6 7 8 9 10)
- (list (edge 1 2)
- (edge 1 3)
- (edge 2 3)
- (edge 3 2)
- (edge 3 5)
- (edge 6 5)
- (edge 5 7)
- (edge 5 8)
- (edge 7 9)
- (edge 8 9)
- (edge 9 10)
- (edge 1 10)
- (edge 10 1))))
-
-
-(define test-graph4
- (graph (list 1 2 3 4 5 6)
- (list (edge 1 2)
- (edge 2 3)
- (edge 3 4)
- (edge 4 5)
- (edge 5 6))))
-
-;; uruchomienie przeszukiwania na przykładowym grafie
-(bfs:search test-graph 1)
-(dfs:search test-graph 1)
-
-(bfs:search test-graph2 1)
-(dfs:search test-graph2 1)
-
-(bfs:search test-graph3 1)
-(dfs:search test-graph3 1)
-
-(bfs:search test-graph3 6)
-(dfs:search test-graph3 6)
-
-(bfs:search test-graph4 1)
-(dfs:search test-graph4 1)
-
-
diff --git a/Semestr 2/racket/l13/oceny.txt b/Semestr 2/racket/l13/oceny.txt
deleted file mode 100644
index 9f17cad..0000000
--- a/Semestr 2/racket/l13/oceny.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-1 sem
-
-MDM - 5 5
-AO - 5
-AM 1 - 5 5
-LDI - 5 5
-MIA - 5
-
-8 * 5
-
-
-2 sem
-
-Topologia - 5 3
-Analiza - 4 4
-MP - 5 5
-PPS - 5
-Algebra - 5 5 \ No newline at end of file
diff --git a/Semestr 2/racket/l13/rozw.rkt b/Semestr 2/racket/l13/rozw.rkt
deleted file mode 100644
index b4094db..0000000
--- a/Semestr 2/racket/l13/rozw.rkt
+++ /dev/null
@@ -1,79 +0,0 @@
-#lang typed/racket
-
-
-;;; zadanie 1
-
-(: prefixes (All (a) (-> (Listof a) (Listof (Listof a)))))
-(define (prefixes xs)
- (if (null? xs)
- (list null)
- (cons xs (prefixes (cdr xs)))))
-
-
-
-;;; zadanie 2
-
-(struct vector2 ([x : Real] [y : Real]) #:transparent)
-(struct vector3 ([x : Real] [y : Real] [z : Real]) #:transparent)
-
-(define-type Vector (U vector2 vector3))
-(define-predicate vector? Vector)
-
-
-(: square (-> Real Nonnegative-Real))
-(define (square x)
- (if (< x 0) (* x x) (* x x)))
-
-
-;;; pierwsza wersja
-
-(: vector-length (-> Vector Nonnegative-Real))
-(define (vector-length v)
- (if (vector2? v)
- (match v [(vector2 x y) (sqrt (+ (square x) (square y)))])
- (match v [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))])))
-
-
-;;; druga wersja
-
-(: vector-length-match (-> Vector Nonnegative-Real))
-(define (vector-length-match v)
- (match v
- [(vector2 x y) (sqrt (+ (square x) (square y)))]
- [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))]))
-
-
-
-;;; zadanie 4
-
-(struct leaf () #:transparent)
-(struct [a] node ([v : a] [xs : (Listof (Tree a))]) #:transparent)
-
-(define-type (Tree a) (node a))
-(define-predicate tree? (Tree Any))
-
-
-(: flat-map (All (a) (-> (-> (Tree a) (Listof a)) (Listof (Tree a)) (Listof a))))
-(define (flat-map f xs)
- (if (null? xs)
- null
- (append (f (car xs)) (flat-map f (cdr xs)))))
-
-(: preorder (All (a) (-> (Tree a) (Listof a))))
-(define (preorder t)
- (match t
- [(node v xs)
- (cons v (flat-map preorder xs))]))
-
-;;; (preorder (node 1 (list
-;;; (node 2 (list
-;;; (node 3 '())
-;;; (node 4 '())))
-;;; (node 5 '())
-;;; (node 'x (list
-;;; (node 't (list
-;;; (node 'z '()))))))))
-
-
-;;; zadanie 6
-
diff --git a/Semestr 2/racket/l13/solution.rkt b/Semestr 2/racket/l13/solution.rkt
deleted file mode 100644
index 61804b3..0000000
--- a/Semestr 2/racket/l13/solution.rkt
+++ /dev/null
@@ -1,124 +0,0 @@
-#lang typed/racket
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(provide parse typecheck)
-
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type Value (U Real Boolean))
-(define-type ArithOp (U '+ '- '/ '* '%))
-;;; (define-type ModOp '%)
-(define-type CompOp (U '= '> '>= '< '<=))
-(define-type LogicOp (U 'and 'or))
-(define-type BinopSym (U ArithOp CompOp LogicOp))
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-(define-predicate expr? Expr)
-(define-predicate value? Value)
-(define-predicate arith-op? ArithOp)
-;;; (define-predicate mod-op? ModOp)
-(define-predicate comp-op? CompOp)
-(define-predicate logic-op? LogicOp)
-(define-predicate binop-sym? BinopSym)
-(define-predicate let-list? (List Symbol Any))
-
-(: parse (-> Any Expr))
-(define (parse q)
- (match q
- [_ #:when (value? q) (const q)]
- [_ #:when (eq? q 'true) (const true)]
- [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!!
- [_ #:when (symbol? q) (var-expr q)]
- [`(,s ,e1 ,e2)
- #:when (and (eq? s 'let) (let-list? e1))
- (let-expr (car e1)
- (parse (cadr e1))
- (parse e2))]
- [`(,s ,eb ,et ,ef)
- #:when (eq? s 'if)
- (if-expr (parse eb)
- (parse et)
- (parse ef))]
- [`(,s ,e1 ,e2)
- #:when (binop-sym? s)
- (binop s
- (parse e1)
- (parse e2))]
- [else (error "Parse error" q)]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(define-type EType (U 'real 'boolean))
-(define-predicate EType? EType)
-
-(struct environ ([xs : (Listof (Pairof Symbol EType))]))
-(define env-empty (environ null))
-
-(: env-add (-> Symbol EType environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-
-(: env-lookup (-> Symbol environ EType))
-(define (env-lookup x env)
- (: assoc-lookup (-> (Listof (Pairof Symbol EType)) EType))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-(: check-op (-> Expr Expr EType EType environ (U EType #f)))
-(define (check-op e1 e2 arg-type ret-type env)
- (if (and (eq? (typecheck-env e1 env) arg-type)
- (eq? (typecheck-env e2 env) arg-type))
- ret-type
- #f))
-
-(: typecheck-env (-> Expr environ (U EType #f)))
-(define (typecheck-env e env)
- (match e
- [(const val)
- (cond
- [(real? val) 'real]
- [(boolean? val) 'boolean])]
- [(var-expr id) (env-lookup id env)]
- [(binop op e1 e2)
- (cond
- [(arith-op? op) (check-op e1 e2 'real 'real env)]
- [(comp-op? op) (check-op e1 e2 'real 'boolean env)]
- [(logic-op? op) (check-op e1 e2 'boolean 'boolean env)])]
- [(let-expr id e1 e2)
- (let ((id-type (typecheck-env e1 env)))
- (if id-type
- (typecheck-env e2 (env-add id id-type env))
- #f))]
- [(if-expr eb et ef)
- (let ((eb-type (typecheck-env eb env)))
- (if (not (eq? eb-type 'boolean))
- #f
- (let ((et-type (typecheck-env et env))
- (ef-type (typecheck-env ef env)))
- (if (eq? et-type ef-type) ;;; nie trzeba sprawdzac czy ktores z nich to #f
- et-type ;;; jesli tak jest, to i tak sie na pewno zwroci #f
- #f))))]))
-
-(: typecheck (-> Expr (U EType #f)))
-(define (typecheck e)
- (typecheck-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/l13/zad6.rkt b/Semestr 2/racket/l13/zad6.rkt
deleted file mode 100644
index 1dcfbfc..0000000
--- a/Semestr 2/racket/l13/zad6.rkt
+++ /dev/null
@@ -1,132 +0,0 @@
-#lang typed/racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type Value (U Real Boolean))
-(define-type BinopSym (U '+ '- '/ '* '% '= '> '>= '< '<= 'and 'or))
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-
-(define-predicate expr? Expr)
-(define-predicate value? Value)
-(define-predicate binop-sym? BinopSym)
-(define-predicate let-list? (List Symbol Any))
-
-(: parse (-> Any Expr))
-(define (parse q)
- (match q
- [_ #:when (value? q) (const q)]
- [_ #:when (eq? q 'true) (const true)]
- [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!!
- [_ #:when (symbol? q) (var-expr q)]
- [`(,s ,e1 ,e2)
- #:when (and (eq? s 'let) (let-list? e1))
- (let-expr (car e1)
- (parse (cadr e1))
- (parse e2))]
- [`(,s ,eb ,et ,ef)
- #:when (eq? s 'if)
- (if-expr (parse eb)
- (parse et)
- (parse ef))]
- [`(,s ,e1 ,e2)
- #:when (binop-sym? s)
- (binop s
- (parse e1)
- (parse e2))]
- [else (error "Parse error" q)]))
-
-;;; (define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ ([xs : (Listof (Pairof Symbol Value))]))
-(define env-empty (environ null))
-
-(: env-add (-> Symbol Value environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-
-(: env-lookup (-> Symbol environ Value))
-(define (env-lookup x env)
- (: assoc-lookup (-> (Listof (Pairof Symbol Value)) Value))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(: arith-op (-> (-> Real Real Real) (-> Value Value Value)))
-(define (arith-op op)
- (lambda (x y) (if (and (real? x) (real? y))
- (ann (op x y) Value)
- (error "Wrong args for arithmetic operator" op x y))))
-
-(: mod-op (-> (-> Integer Integer Integer) (-> Value Value Value)))
-(define (mod-op op)
- (lambda (x y) (if (and (exact-integer? x) (exact-integer? y))
- (ann (op x y) Value)
- (error "Wrong args for modulo operator" op x y))))
-
-(: logic-op (-> (-> Boolean Boolean Boolean) (-> Value Value Value)))
-(define (logic-op op)
- (lambda (x y) (if (and (boolean? x) (boolean? y))
- (ann (op x y) Value)
- (error "Wrong args for logic operator" op x y))))
-
-(: comp-op (-> (-> Real Real Boolean) (-> Value Value Value)))
-(define (comp-op op)
- (lambda (x y) (if (and (real? x) (real? y))
- (ann (op x y) Value)
- (error "Wrong args for comparator" op x y))))
-
-
-(: op->proc (-> BinopSym (-> Value Value Value)))
-(define (op->proc op)
- (match op ['+ (arith-op +)] ['- (arith-op -)] ['* (arith-op *)] ['/ (arith-op /)]
- ['% (mod-op modulo)]
- ['= (comp-op =)] ['> (comp-op >)] ['>= (comp-op >=)] ['< (comp-op <)] ['<= (comp-op <=)]
- ['and (logic-op (lambda (x y) (and x y)))]
- ['or (logic-op (lambda (x y) (or x y)))]))
-
-(: eval-env (-> Expr environ Value))
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!!
- (eval-env et env)
- (eval-env ef env))]))
-
-(: eval (-> Expr Value))
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-;;; (define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/l14z22/solution.bak b/Semestr 2/racket/l14z22/solution.bak
deleted file mode 100644
index 0d4f164..0000000
--- a/Semestr 2/racket/l14z22/solution.bak
+++ /dev/null
@@ -1,70 +0,0 @@
-#lang racket
-
-(require racklog)
-
-(provide solve)
-
-;; transpozycja tablicy zakodowanej jako lista list
-(define (transpose xss)
- (cond [(null? xss) xss]
- ((null? (car xss)) (transpose (cdr xss)))
- [else (cons (map car xss)
- (transpose (map cdr xss)))]))
-
-;; procedura pomocnicza
-;; tworzy listę n-elementową zawierającą wyniki n-krotnego
-;; wywołania procedury f
-(define (repeat-fn n f)
- (if (eq? 0 n) null
- (cons (f) (repeat-fn (- n 1) f))))
-
-;; tworzy tablicę n na m elementów, zawierającą świeże
-;; zmienne logiczne
-(define (make-rect n m)
- (repeat-fn m (lambda () (repeat-fn n _))))
-
-;; predykat binarny
-;; (%row-ok xs ys) oznacza, że xs opisuje wiersz (lub kolumnę) ys
-(define %row-ok
- (%rel ()
-;; TODO: uzupełnij!
- ))
-
-;; TODO: napisz potrzebne ci pomocnicze predykaty
-
-;; funkcja rozwiązująca zagadkę
-(define (solve rows cols)
- (define board (make-rect (length cols) (length rows)))
- (define tboard (transpose board))
- (define ret (%which (xss)
- (%= xss board)
-;; TODO: uzupełnij!
- ))
- (and ret (cdar ret)))
-
-;; testy
-(equal? (solve '((2) (1) (1)) '((1 1) (2)))
- '((* *)
- (_ *)
- (* _)))
-
-(equal? (solve '((2) (2 1) (1 1) (2)) '((2) (2 1) (1 1) (2)))
- '((_ * * _)
- (* * _ *)
- (* _ _ *)
- (_ * * _)))
-
-(equal? (solve '((4) (6) (2 2) (2 2) (6) (4) (2) (2) (2))
- '((9) (9) (2 2) (2 2) (4) (4)))
- '((* * * * _ _)
- (* * * * * *)
- (* * _ _ * *)
- (* * _ _ * *)
- (* * * * * *)
- (* * * * _ _)
- (* * _ _ _ _)
- (* * _ _ _ _)
- (* * _ _ _ _)))
-
-;; TODO: możesz dodać własne testy
-
diff --git a/Semestr 2/racket/l14z22/solution.rkt b/Semestr 2/racket/l14z22/solution.rkt
deleted file mode 100644
index 480c772..0000000
--- a/Semestr 2/racket/l14z22/solution.rkt
+++ /dev/null
@@ -1,87 +0,0 @@
-#lang racket
-
-(require racklog)
-
-(provide solve)
-
-;; transpozycja tablicy zakodowanej jako lista list
-(define (transpose xss)
- (cond [(null? xss) xss]
- ((null? (car xss)) (transpose (cdr xss)))
- [else (cons (map car xss)
- (transpose (map cdr xss)))]))
-
-;; procedura pomocnicza
-;; tworzy listę n-elementową zawierającą wyniki n-krotnego
-;; wywołania procedury f
-(define (repeat-fn n f)
- (if (eq? 0 n) null
- (cons (f) (repeat-fn (- n 1) f))))
-
-;; tworzy tablicę n na m elementów, zawierającą świeże
-;; zmienne logiczne
-(define (make-rect n m)
- (repeat-fn m (lambda () (repeat-fn n _))))
-
-;; predykat binarny
-;; (%row-ok xs ys) oznacza, że xs opisuje wiersz (lub kolumnę) ys
-(define %row-ok
- (%rel (xs ys zs n)
- [(null null)]
- [(xs (cons '_ ys))
- (%row-ok xs ys)]
- [((cons n xs) ys)
- (%stars ys n)
- (%cut-first-n ys zs n)
- (%row-ok xs zs)]))
-
-
-(define %suffix
- (%rel (xs ys x)
- [(xs xs)]
- [((cons x xs) ys)
- (%suffix xs ys)]))
-
-(define %cut-first-n
- (%rel (xs ys n yl)
- [(xs xs 0)]
- [(xs ys n)
- (%suffix xs ys)
- (%is #t (= (- (length xs) (length ys)) n))]))
-
-
-;; usun n pierwszych elementow z xs
-(define (suffix xs n)
- (if (= n 0)
- xs
- (suffix (cdr xs) (- n 1))))
-
-
-;; sprawdza czy pierwsze n elementów listy to gwiazdki (dokladnie n)
-(define %stars
- (%rel (xs m n)
- [(null 0)]
- [((cons '_ xs) n)
- (%is n 0)]
- [((cons '* xs) n)
- (%is m (- n 1))
- (%stars xs m)]))
-
-(define %board-ok
- (%rel (xss xs yss ys)
- [(null null)]
- [((cons xs xss) (cons ys yss))
- (%row-ok xs ys)
- (%board-ok xss yss)]))
-
-;; funkcja rozwiązująca zagadkę
-(define (solve rows cols)
- (define board (make-rect (length cols) (length rows)))
- (define tboard (transpose board))
- (define ret (%which (xss)
- (%= xss board)
- (%board-ok rows board)
- (%board-ok cols tboard)))
- (and ret (cdar ret)))
-
-
diff --git a/Semestr 2/racket/l15/kacp.bak b/Semestr 2/racket/l15/kacp.bak
deleted file mode 100644
index ff2a2bc..0000000
--- a/Semestr 2/racket/l15/kacp.bak
+++ /dev/null
@@ -1,55 +0,0 @@
-#lang racket
-
-(define (run-concurrent . thunks)
- (define threads (map thread thunks))
- (for-each thread-wait threads))
-
-(define (random-sleep)
- (sleep (/ (random) 100)))
-
-(define (with-random-sleep proc)
- (lambda args
- (random-sleep)
- (apply proc args)))
-
-(define (make-serializer)
- (define sem (make-semaphore 1))
- (lambda (proc)
- (lambda args
- (semaphore-wait sem)
- (define ret (apply proc args))
- (semaphore-post sem)
- ret)))
-
-(define (table)
- (random-sleep)
- (define forks (list (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)))
- (define (pick-fork i)
- (random-sleep)
- (semaphore-wait (list-ref forks i)))
- (define (put-fork i)
- (random-sleep)
- (semaphore-post (list-ref forks i)))
- (define (dispatch m)
- (cond [(eq? m 'pick-fork) pick-fork]
- [(eq? m 'put-fork) put-fork]
- [else (error "Unknown request -- TABLE"
- m)]))
- dispatch)
-
-(define dtable (table))
-
-(define (philosopher dining-table number)
- (define my-turn (make-serializer))
- (define (eat)
- (display number)
- (newline)
- ((dining-table 'pick-fork) number)
- ((dining-table 'put-fork) number)
- ((dining-table 'pick-fork) (modulo (+ number 1) 5))
- ((dining-table 'put-fork) (modulo (+ number 1) 5)))
- (my-turn eat)) \ No newline at end of file
diff --git a/Semestr 2/racket/l15/kacp.rkt b/Semestr 2/racket/l15/kacp.rkt
deleted file mode 100644
index bd484f1..0000000
--- a/Semestr 2/racket/l15/kacp.rkt
+++ /dev/null
@@ -1,59 +0,0 @@
-#lang racket
-
-(define (run-concurrent . thunks)
- (define threads (map thread thunks))
- (for-each thread-wait threads))
-
-(define (random-sleep)
- (sleep (/ (random) 100)))
-
-(define (with-random-sleep proc)
- (lambda args
- (random-sleep)
- (apply proc args)))
-
-(define (make-serializer)
- (define sem (make-semaphore 1))
- (lambda (proc)
- (lambda args
- (semaphore-wait sem)
- (define ret (apply proc args))
- (semaphore-post sem)
- ret)))
-
-(define (table)
- (random-sleep)
- (define forks (list (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)))
- (define (pick-fork i)
- (random-sleep)
- (semaphore-wait (list-ref forks i)))
- (define (put-fork i)
- (random-sleep)
- (semaphore-post (list-ref forks i)))
- (define (dispatch m)
- (cond [(eq? m 'pick-fork) pick-fork]
- [(eq? m 'put-fork) put-fork]
- [else (error "Unknown request -- TABLE"
- m)]))
- dispatch)
-
-(define dtable (table))
-
-(define (philosopher dining-table number)
- (define my-turn (make-serializer))
- (define (eat)
- (display "Zaczynam ")
- (display number)
- (newline)
- ((dining-table 'pick-fork) number)
- ((dining-table 'put-fork) number)
- ((dining-table 'pick-fork) (modulo (+ number 1) 5))
- ((dining-table 'put-fork) (modulo (+ number 1) 5))
- (display "Koncze ")
- (display number)
- (newline))
- (my-turn eat)) \ No newline at end of file
diff --git a/Semestr 2/racket/l15/solution.bak b/Semestr 2/racket/l15/solution.bak
deleted file mode 100644
index 03ab86a..0000000
--- a/Semestr 2/racket/l15/solution.bak
+++ /dev/null
@@ -1,7 +0,0 @@
-#lang racket
-
-
-
-(define (run-concurrent . thunks)
- (define threads (map thread thunks))
- (for-each thread-wait threads)) \ No newline at end of file
diff --git a/Semestr 2/racket/l15/solution.rkt b/Semestr 2/racket/l15/solution.rkt
deleted file mode 100644
index 915502e..0000000
--- a/Semestr 2/racket/l15/solution.rkt
+++ /dev/null
@@ -1,85 +0,0 @@
-#lang racket
-
-(provide philosopher)
-
-;; Do debugu
-
-(define (run-concurrent . thunks)
- (define threads (map thread thunks))
- (for-each thread-wait threads))
-
-(define (random-sleep)
- (sleep (/ (random) 100)))
-
-(define (with-random-sleep proc)
- (lambda args
- (random-sleep)
- (apply proc args)))
-
-(define (make-serializer)
- (define sem (make-semaphore 1))
- (lambda (proc)
- (lambda args
- (semaphore-wait sem)
- (define ret (apply proc args))
- (semaphore-post sem)
- ret)))
-
-(define (make-table)
- (define forks (map (lambda (x) (make-semaphore 1)) '(0 1 2 3 4)))
- (define (get-fork i)
- (list-ref forks i))
- (define (pick-fork i)
- (random-sleep)
- (semaphore-wait (get-fork i)))
- (define (put-fork i)
- (random-sleep)
- (semaphore-post (get-fork i)))
- (define (dispatch m)
- (cond [(eq? m 'pick-fork) pick-fork]
- [(eq? m 'put-fork) put-fork]
- [else (error "Unknown request -- MAKE-TABLE" m)]))
- dispatch)
-
-;(define dining-table (make-table))
-
-;(define (repeat proc n)
-; (if (> n 0)
-; (begin
-; (proc)
-; (repeat proc (- n 1)))
-; #f))
-;
-;(define (hungry nr x)
-; (lambda () (repeat (lambda () (philosopher dining-table nr)) x)))
-
-;; Rozwiązanie:
-
-(define forks-sem (map (lambda (x) (make-semaphore 1)) '(0 0 0 0 0)))
-
-(define (get-fork i)
- (list-ref forks-sem i))
-
-(define (is-free? i)
- (semaphore-try-wait? (get-fork i)))
-
-(define (put-fork dining-table i)
- ((dining-table 'put-fork) i)
- (semaphore-post (get-fork i)))
-
-(define (philosopher dining-table i)
- (define left-fork i)
- (define right-fork (modulo (+ i 1) 5))
- (define (loop)
- (if (is-free? left-fork)
- (if (is-free? right-fork)
- (begin
- ((dining-table 'pick-fork) left-fork)
- ((dining-table 'pick-fork) right-fork)
- (put-fork dining-table left-fork)
- (put-fork dining-table right-fork))
- (loop))
- (begin
- (semaphore-post (get-fork left-fork))
- (loop))))
- (loop)) \ No newline at end of file
diff --git a/Semestr 2/racket/l7z12/solution.rkt b/Semestr 2/racket/l7z12/solution.rkt
deleted file mode 100644
index 089dee4..0000000
--- a/Semestr 2/racket/l7z12/solution.rkt
+++ /dev/null
@@ -1,95 +0,0 @@
-#lang racket
-
-(provide (struct-out const)
- (struct-out binop)
- (struct-out var-expr)
- (struct-out let-expr)
- (struct-out pos)
- (struct-out var-free)
- (struct-out var-bound)
- annotate-expression)
-
-;; ---------------
-;; Jezyk wejsciowy
-;; ---------------
-
-(struct pos (file line col) #:transparent)
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (loc id e1 e2) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr loc x e1 e2)
- (and (pos? loc) (symbol? x) (expr? e1) (expr? e2))]
- [_ false]))
-
-(define (make-pos s)
- (pos (syntax-source s)
- (syntax-line s)
- (syntax-column s)))
-
-(define (parse e)
- (let ([r (syntax-e e)])
- (cond
- [(number? r) (const r)]
- [(symbol? r) (var-expr r)]
- [(and (list? r) (= 3 (length r)))
- (match (syntax-e (car r))
- ['let (let* ([e-def (syntax-e (second r))]
- [x (syntax-e (first e-def))])
- (let-expr (make-pos (first e-def))
- (if (symbol? x) x (error "parse error!"))
- (parse (second e-def))
- (parse (third r))))]
- [op (binop op (parse (second r)) (parse (third r)))])]
- [else (error "parse error!")])))
-
-;; ---------------
-;; Jezyk wyjsciowy
-;; ---------------
-
-(struct var-free (id) #:transparent)
-(struct var-bound (pos id) #:transparent)
-
-(define (expr-annot? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr-annot? l) (expr-annot? r))]
- [(var-free x) (symbol? x)]
- [(var-bound loc x) (and (pos? loc) (symbol? x))]
- [(let-expr loc x e1 e2)
- (and (pos? loc) (symbol? x) (expr-annot? e1) (expr-annot? e2))]
- [_ false]))
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) false]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-(define (annotate-expression-env e env)
- (match e
- [(const r) (const r)]
- [(binop op l r) (binop op (annotate-expression-env l env) (annotate-expression-env r env))]
- [(var-expr x) (let ((pos (env-lookup x env)))
- (if pos
- (var-bound pos x)
- (var-free x)))]
- [(let-expr loc x e1 e2) (let-expr loc x (annotate-expression-env e1 env) (annotate-expression-env e2 (env-add x loc env)))]))
-
-(define (annotate-expression e)
- (annotate-expression-env e env-empty))
-
-(define (test) (annotate-expression (parse #'(let [x 5] (let [x (* x y)] (+ x y))))))
diff --git a/Semestr 2/racket/l7z13/solution.rkt b/Semestr 2/racket/l7z13/solution.rkt
deleted file mode 100644
index 0a0278a..0000000
--- a/Semestr 2/racket/l7z13/solution.rkt
+++ /dev/null
@@ -1,104 +0,0 @@
-#lang racket
-
-(provide (struct-out const) (struct-out binop) (struct-out var-expr) (struct-out let-expr) (struct-out var-dead) find-dead-vars)
-
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct var-dead (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(var-dead x) (symbol? x)]
- [(let-expr x e1 e2) (and (symbol? x) (expr? e1) (expr? e2))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-; ---------------------------------- ;
-; Wyszukaj ostatnie uzycie zmiennych ;
-; ---------------------------------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "unbound identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-erase x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "unbound identifier" x)]
- [(eq? x (caar xs)) (cdr xs)]
- [else (cons (car xs) (assoc-lookup (cdr xs)))]))
- (if (env-lookup x env)
- (environ (assoc-lookup (assoc-lookup (environ-xs env))))
- (environ (assoc-lookup (environ-xs env)))))
-
-
-(define (find-dead-vars-env e env)
- (match e
- [(const r) (cons (const r) env)]
- [(var-expr x) (if (env-lookup x env)
- (cons (var-expr x) env)
- (cons (var-dead x) (env-add x true env)))]
- [(binop op l r) (let* ((right-expr (find-dead-vars-env r env))
- (r (car right-expr))
- (env (cdr right-expr))
- (left-expr (find-dead-vars-env l env))
- (l (car left-expr))
- (env (cdr left-expr)))
- (cons (binop op l r) env))]
- [(let-expr x e1 e2) (let* ((right-expr (find-dead-vars-env e2 (env-add x false env)))
- (e2 (car right-expr))
- (env (env-erase x (cdr right-expr)))
- (left-expr (find-dead-vars-env e1 env))
- (e1 (car left-expr))
- (env (cdr left-expr)))
- (cons (let-expr x e1 e2) env))]))
-
-(define (find-dead-vars e)
- (car (find-dead-vars-env e env-empty)))
-
-
-(define (sample2) (find-dead-vars (let-expr 'x (const 3)
- (binop '+ (var-expr 'x)
- (let-expr 'x (const 5) (binop '+ (var-expr 'x) (var-expr 'x)))))))
-
-(define (test1) (find-dead-vars (parse '(let (x 3) (let (x (* x (+ x x))) (+ x x))))))
-(define (test2) (find-dead-vars (parse '(let (x 2) (let [x (let [x (+ x 2)] x)] x)))))
-(define (test3) (find-dead-vars (parse '(let [x 2] (+ (let [x (+ 2 x)] (* 3 x)) x)))))
-(define (test4) (find-dead-vars (parse '(let [x 2] (let [x (+ x 3)] (* x x))))))
-(define (test5) (find-dead-vars (parse '(let [x 2] (+ x (let [x (+ 2 x)] x))))))
-(define (test6) (find-dead-vars (parse '(let [x 2]
- (let [y (let [x (* x (+ x x))]
- (let [y (* x x)]
- (+ y 2)))]
- (+ x (* y y)))))))
-(define (test7) (find-dead-vars (parse '(let [x (let [x (let [x 2] (+ x x))] (+ x x))] (+ x x)))))
-;;; (define (test7) (find-dead-vars (parse '(let [x (let [x (let [x 2] (let (x 2) (+ x x)))] (+ x x))] (+ x x)))))
-(define (test8) (find-dead-vars (parse '(let [x 2] (let [x 2] (+ x x)))))) \ No newline at end of file
diff --git a/Semestr 2/racket/l8z14/solution.bak b/Semestr 2/racket/l8z14/solution.bak
deleted file mode 100644
index b51383a..0000000
--- a/Semestr 2/racket/l8z14/solution.bak
+++ /dev/null
@@ -1,155 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/l8z14/solution.rkt b/Semestr 2/racket/l8z14/solution.rkt
deleted file mode 100644
index 59556cf..0000000
--- a/Semestr 2/racket/l8z14/solution.rkt
+++ /dev/null
@@ -1,201 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(provide eval parse)
-
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-(struct apply-expr (f xs) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [(apply-expr f xs) (and (expr? f) (expr? xs))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (> (length q) 0) (list? q) (eq? (first q) 'list))
- (parse-list (cdr q))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'apply))
- (apply-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-(define (parse-list q)
- (if (null? q)
- (null-expr)
- (cons-expr (parse (car q)) (parse-list (cdr q)))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(apply-expr e1 e2)
- (let ([xs (eval-env e2 env)])
- (eval-env (eval-apply e1 (reverse xs)) env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval-apply e xs)
- (if (null? xs)
- e
- (app (eval-apply e (cdr xs)) (const (car xs)))))
-
-(define (eval e) (eval-env e env-empty))
-
-;; testy wspólnie z Karolem Ochmanem
-
-(define program1
- '(apply (lambda (x y) (+ x y))
- (cons 1 (cons 2 null))))
-(define program2
- '(apply (lambda (x y z) (+ x (+ y z)))
- (cons 1 (cons 2 null))))
-(define program3
- '(apply (lambda (x y) (lambda (z) (+ x (+ y z))))
- (cons 1 (cons 2 (cons 3 null)))))
-(define program4
- '(apply (lambda (x y) (+ x y))
- (cons 1 (cons 2 (cons 3 null)))))
-(define program5
- '(let [f (lambda (x y z) (+ z (+ x y)))]
- (apply (f 3) (cons 1 (cons 2 null)))))
-(define program6
- '(let [f (lambda (x) x)]
- (apply (f 4) null)))
-(define program7
- '(apply (lambda (q w e r t y u i o p a s d f g h j k l) 3)
- (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1
- (cons 1 (cons 1 (cons 1 (cons 1 (cons 1
- (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 null)))))))))))))))))))))
-(define program8
- '(apply (lambda (q w e r t y u i o p a s d f g h j k l) 3)
- (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1
- (cons 1 (cons 1 (cons 1 (cons 1 null))))))))))))))) \ No newline at end of file
diff --git a/Semestr 2/racket/l8z15/solution.bak b/Semestr 2/racket/l8z15/solution.bak
deleted file mode 100644
index cdc84f9..0000000
--- a/Semestr 2/racket/l8z15/solution.bak
+++ /dev/null
@@ -1,187 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-(provide parse eval)
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-(struct odr (e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (match (env-lookup x env)
- [(odr e env) (eval-env e env)]
- [f f])]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (odr e1 env)
- (odr e2 env))]
- [(car-expr e) (let ([p (eval-env e env)])
- (match (car p)
- [(odr e env) (eval-env e env)]))]
- [(cdr-expr e) (let ([p (eval-env e env)])
- (match (cdr p)
- [(odr e env) (eval-env e env)]))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (odr e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-;;; Testy wspólnie z Karolem Ochmanem
-
-(define (test-eval program) (eval (parse program)))
-
-(define program1
- '((lambda (x) (+ 3 3)) (/ 5 0)))
-(define program2
- '(let [if-fun (lambda (b t e) (if b t e))]
- (if-fun true 4 (/ 5 0))))
-(define program3
- '(car (cdr (cons 1 (cons 2 (cons 3 (cons 4 null)))))))
-(define program4
- '(car (cons (+ 3 4) (/ 5 0))))
-(define program5
- '(cons (+ 5 6) (- 4 3)))
-(define program6
- '(car (cdr (cdr (car (cons (cons (/ 0 0) (cons (/ 0 0) (cons 1 (/ 0 0)))) (cdr (cons (/ 0 0) null))))))))
-;;; (test-eval program)
-;;; (test-eval program1)
-;;; (test-eval program2)
-;;; (test-eval program3)
-;;; (test-eval program4)
-;;; (test-eval program5)
-;;; (test-eval program6) \ No newline at end of file
diff --git a/Semestr 2/racket/l8z15/solution.rkt b/Semestr 2/racket/l8z15/solution.rkt
deleted file mode 100644
index 54b6cd3..0000000
--- a/Semestr 2/racket/l8z15/solution.rkt
+++ /dev/null
@@ -1,182 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-(provide parse eval)
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-(struct odr (e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (match (env-lookup x env)
- [(odr e env) (eval-env e env)]
- [f f])]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (odr e1 env)
- (odr e2 env))]
- [(car-expr e) (let ([p (eval-env e env)])
- (match (car p)
- [(odr e env) (eval-env e env)]))]
- [(cdr-expr e) (let ([p (eval-env e env)])
- (match (cdr p)
- [(odr e env) (eval-env e env)]))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (odr e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-
-;;; Testy wspólnie z Karolem Ochmanem
-
-(define (test-eval program) (eval (parse program)))
-
-(define program1
- '((lambda (x) (+ 3 3)) (/ 5 0)))
-(define program2
- '(let [if-fun (lambda (b t e) (if b t e))]
- (if-fun true 4 (/ 5 0))))
-(define program3
- '(car (cdr (cons 1 (cons 2 (cons 3 (cons 4 null)))))))
-(define program4
- '(car (cons (+ 3 4) (/ 5 0))))
-(define program5
- '(cons (+ 5 6) (- 4 3)))
-(define program6
- '(car (cdr (cdr (car (cons (cons (/ 0 0) (cons (/ 0 0) (cons 1 (/ 0 0)))) (cdr (cons (/ 0 0) null))))))))
-;;; (test-eval program)
-;;; (test-eval program1)
-;;; (test-eval program2)
-;;; (test-eval program3)
-;;; (test-eval program4)
-;;; (test-eval program5)
-;;; (test-eval program6) \ No newline at end of file
diff --git a/Semestr 2/racket/l9/zad4.rkt b/Semestr 2/racket/l9/zad4.rkt
deleted file mode 100644
index 7b5e0bc..0000000
--- a/Semestr 2/racket/l9/zad4.rkt
+++ /dev/null
@@ -1,202 +0,0 @@
-#lang racket
-
-; Do fun.rkt dodajemy rekurencyjne let-y
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct letrec-expr (id e1 e2) #:transparent) ; <----------------- !!!
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent)
-(struct lam (id e) #:transparent)
-(struct citation (q) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(letrec-expr x e1 e2) ; <------------------------------------ !!!
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))]
- [(lam id e) (and (symbol? id) (expr? e))]
- [(citation q) true]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? 'quote (first q))) (citation (second q))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'letrec)) ; <!!!
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda))
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q))))
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q)
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e)
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct blackhole () #:transparent) ; <------------------------- !!!
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env)))) ; <-------------- !!!
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) ; <---------------------------- !!!
- (match (mcdr (car xs))
- [(blackhole) (error "Stuck forever in a black hole!")]
- [x x])]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v xs) ; <---------------------------------- !!!
- (define (assoc-update! xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) (set-mcdr! (car xs) v)]
- [else (env-update! x v (cdr xs))]))
- (assoc-update! (environ-xs xs)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v)
- (blackhole? v))) ; <---------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(citation q) q]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(letrec-expr x e1 e2) ; <------------------------------------ !!!
- (let* ([new-env (env-add x (blackhole) env)]
- [v (eval-env e1 new-env)])
- (begin
- (env-update! x v new-env)
- (eval-env e2 new-env)))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)]
- [(app f e)
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(letrec
- [fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))]
- (letrec
- [even-odd
- (cons
- (lambda (x)
- (if (= x 0) true ((cdr even-odd) (- x 1))))
- (lambda (x)
- (if (= x 0) false ((car even-odd) (- x 1)))))]
- (let [even (car even-odd)]
- (let [odd (cdr even-odd)]
- (even (fact 6)))))))
-
-(define PROGRAM
- '(letrec [from-to (lambda (n k)
- (if (> n k)
- null
- (cons n (from-to (+ n 1) k))))]
- (letrec [sum (lambda (xs)
- (if (null? xs)
- 0
- (+ (car xs) (sum (cdr xs)))))]
- (sum (from-to 1 36)))))
-
-(define (test-eval) (eval (parse PROGRAM))) \ No newline at end of file
diff --git a/Semestr 2/racket/l9/zad7.rkt b/Semestr 2/racket/l9/zad7.rkt
deleted file mode 100644
index 207162d..0000000
--- a/Semestr 2/racket/l9/zad7.rkt
+++ /dev/null
@@ -1,340 +0,0 @@
-#lang racket
-
-;; Składnia abstrakcyjna
-(struct const (val) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct let-expr (id bound body) #:transparent)
-(struct letrec-expr (id bound body) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct lambda-expr (arg body) #:transparent)
-(struct app-expr (fun arg) #:transparent)
-(struct display-expr (e) )
-
-(define (keyword s)
- (member s '(true false null and or if cond else lambda let letrec display read)))
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n)
- (boolean? n)
- (null? n)
- (string? n))]
- [(var-expr id) (symbol? id)]
- [(let-expr x e1 e2 ) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(letrec-expr x e1 e2) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(if-expr eb et ef) (and (expr? eb)
- (expr? et)
- (expr? ef))]
- [(lambda-expr x e) (and (symbol? x)
- (expr? e))]
- [(app-expr ef ea) (and (expr? ef)
- (expr? ea))]
- [_ false]))
-
-;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna)
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(string? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (const null)]
- [(and (symbol? q)
- (not (keyword q)))
- (var-expr q)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'let)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'letrec)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'and))
- (desugar-and (map parse (cdr q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'or))
- (desugar-or (map parse (cdr q)))]
- [(and (list? q)
- (>= (length q) 2)
- (eq? (first q) 'cond))
- (parse-cond (cdr q))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'lambda)
- (list? (second q))
- (andmap symbol? (second q))
- (cons? (second q)))
- (desugar-lambda (second q) (parse (third q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-app (parse (first q)) (map parse (cdr q)))]
- [else (error "Unrecognized token:" q)]))
-
-(define (parse-cond qs)
- (match qs
- [(list (list 'else q))
- (parse q)]
-
- [(list (list q _))
- (error "Expected 'else' in last branch but found:" q)]
-
- [(cons (list qb qt) qs)
- (if-expr (parse qb) (parse qt) (parse-cond qs))]))
-
-(define (desugar-and es)
- (if (null? es)
- (const true)
- (if-expr (car es) (desugar-and (cdr es)) (const false))))
-
-(define (desugar-or es)
- (if (null? es)
- (const false)
- (if-expr (car es) (const true) (desugar-or (cdr es)))))
-
-(define (desugar-lambda xs e)
- (if (null? xs)
- e
- (lambda-expr (car xs) (desugar-lambda (cdr xs) e))))
-
-(define (desugar-app e es)
- (if (null? es)
- e
- (desugar-app (app-expr e (car es)) (cdr es))))
-
-;; Środowiska
-(struct blackhole ())
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs)
- (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (let ((v (mcdr (car xs))))
- (if (blackhole? v)
- (error "Jumped into blackhole at" x)
- v))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v env)
- (define (assoc-update xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (set-mcdr! (car xs) v)]
- [else (assoc-update (cdr xs))]))
- (assoc-update (environ-xs env)))
-
-;; Domknięcia
-(struct clo (arg body env))
-
-;; Procedury wbudowane, gdzie
-;; proc — Racketowa procedura którą należy uruchomić
-;; args — lista dotychczas dostarczonych argumentów
-;; pnum — liczba brakujących argumentów (> 0)
-;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur
-;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność
-;; procedury jest ustalona z góry
-(struct builtin (proc args pnum))
-
-;; Pomocnicze konstruktory procedur unarnych i binarnych
-(define (builtin/1 p)
- (builtin p null 1))
-(define (builtin/2 p)
- (builtin p null 2))
-
-;; Procedury
-(define (proc? v)
- (or (and (clo? v)
- (symbol? (clo-arg v))
- (expr? (clo-body v))
- (environ? (clo-env v)))
- (and (builtin? v)
- (procedure? (builtin-proc v))
- (andmap value? (builtin-args v))
- (natural? (builtin-pnum v))
- (> (builtin-pnum v) 0))))
-
-;; Definicja typu wartości
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (null? v)
- (string? v)
- (and (cons? v)
- (value? (car v))
- (value? (cdr v)))
- (proc? v)))
-
-;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom)
-
-(define start-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- env-empty
- `((+ ,(builtin/2 +))
- (- ,(builtin/2 -))
- (* ,(builtin/2 *))
- (/ ,(builtin/2 /))
- (~ ,(builtin/1 -))
- (< ,(builtin/2 <))
- (> ,(builtin/2 >))
- (= ,(builtin/2 =))
- (<= ,(builtin/2 <=))
- (>= ,(builtin/2 >=))
- (not ,(builtin/1 not))
- (cons ,(builtin/2 cons))
- (car ,(builtin/1 car))
- (cdr ,(builtin/1 cdr))
- (pair? ,(builtin/1 cons?))
- (null? ,(builtin/1 null?))
- (boolean? ,(builtin/1 boolean?))
- (number? ,(builtin/1 number?))
- (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x)))))
- (string? ,(builtin/1 string?))
- (string-= ,(builtin/2 string=?))
- ;; and so on, and so on
- )))
-
-;; Ewaluator
-(define (eval-env e env)
- (match e
- [(const n)
- n]
-
- [(var-expr x)
- (env-lookup x env)]
-
- [(let-expr x e1 e2)
- (let ((v1 (eval-env e1 env)))
- (eval-env e2 (env-add x v1 env)))]
-
- [(letrec-expr f ef eb)
- (let* ((new-env (env-add f (blackhole) env))
- (vf (eval-env ef new-env)))
- (env-update! f vf new-env)
- (eval-env eb new-env))]
-
- [(if-expr eb et ef)
- (match (eval-env eb env)
- [#t (eval-env et env)]
- [#f (eval-env ef env)]
- [v (error "Not a boolean:" v)])]
-
- [(lambda-expr x e)
- (clo x e env)]
-
- [(app-expr ef ea)
- (let ((vf (eval-env ef env))
- (va (eval-env ea env)))
- (match vf
- [(clo x e env)
- (eval-env e (env-add x va env))]
- [(builtin p args nm)
- (if (= nm 1)
- (apply p (reverse (cons va args)))
- (builtin p (cons va args) (- nm 1)))]
- [_ (error "Not a function:" vf)]))]))
-
-(define (eval e)
- (eval-env e start-env))
-
-
-;; REPL — interpreter interaktywny (read-eval-print loop)
-
-;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera"
-;; i komendę wyjścia "exit" ...
-(struct letrec-repl (id expr))
-(struct let-repl (id expr))
-(struct exit-repl ())
-
-;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i
-;; prostą obsługę błędów
-(define (parse-repl q)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Parse error! ")
- (displayln (exn-message exn)))])
- (cond
- [(eq? q 'exit) (exit-repl)]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'let))
- (let-repl (second q) (parse (third q)))]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'letrec))
- (letrec-repl (second q) (parse (third q)))]
- [else (parse q)])))
-
-;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej
-;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie
-;; kończył działanie całego interpretera!
-(define (eval-repl c env continue)
- (define (eval-with-err e env)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Error! ")
- (displayln (exn-message exn)))])
- (eval-env e env)))
- (match c
- [(exit-repl)
- (void)]
-
- [(let-repl x e)
- (let ((v (eval-with-err e env)))
- (if (void? v)
- (continue env)
- (continue (env-add x v env))))]
-
- [(letrec-repl f e)
- (let* ((new-env (env-add f (blackhole) env))
- (v (eval-with-err e new-env)))
- (if (void? v)
- (continue env)
- (begin
- (env-update! f v new-env)
- (continue new-env))))]
-
- [_
- (let ((v (eval-with-err c env)))
- (unless (void? v)
- (displayln v))
- (continue env))]))
-
-;; I w końcu interaktywny interpreter
-(define (repl)
- (define (go env)
- (display "FUN > ")
- (let* ((q (read))
- (c (parse-repl q)))
- (if (void? c)
- (go env)
- (eval-repl c env go))))
- (displayln "Welcome to the FUN functional language interpreter!")
- (go start-env)) \ No newline at end of file
diff --git a/Semestr 2/racket/l9z16/solution.rkt b/Semestr 2/racket/l9z16/solution.rkt
deleted file mode 100644
index 0af169d..0000000
--- a/Semestr 2/racket/l9z16/solution.rkt
+++ /dev/null
@@ -1,42 +0,0 @@
-#lang racket
-
-(provide lcons lnull lnull? lcar lcdr)
-
-
-(define (lcons x f) (mcons x f))
-
-(define lnull null)
-
-(define lnull? null?)
-
-(define (lcar xs) (mcar xs))
-
-(define (lcdr xs)
- (let ([x (mcdr xs)])
- (cond [(not (mpair? x)) (set-mcdr! xs (x))]))
- (mcdr xs))
-
-(define (from n)
- (lcons n (lambda () (from (+ n 1)))))
-
-(define nats
- (from 0))
-
-(define (lnth n xs)
- (cond [(= n 0) (lcar xs)]
- [else (lnth (- n 1) (lcdr xs))]))
-
-(define (lfilter p xs)
- (cond [(lnull? xs) lnull]
- [(p (lcar xs))
- (lcons (lcar xs) (lambda () (lfilter p (lcdr xs))))]
- [else (lfilter p (lcdr xs))]))
-
-(define (prime? n)
- (define (factors i)
- (cond [(>= i n) (list n)]
- [(= (modulo n i) 0) (cons i (factors (+ i 1)))]
- [else (factors (+ i 1))]))
- (= (length (factors 1)) 2))
-
-(define primes (lfilter prime? (from 2))) \ No newline at end of file
diff --git a/Semestr 2/racket/l9z17/solution.rkt b/Semestr 2/racket/l9z17/solution.rkt
deleted file mode 100644
index 5e98036..0000000
--- a/Semestr 2/racket/l9z17/solution.rkt
+++ /dev/null
@@ -1,266 +0,0 @@
-#lang racket
-
-; Do programming.rkt dodajemy instrukcje
-
-(provide eval-while parse-while env-empty env-lookup)
-
-;;; We współpracy z Kacprem Soleckim
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct letrec-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent)
-(struct lam (id e) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n) (string? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(letrec-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))]
- [(lam id e) (and (symbol? id) (expr? e))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(string? q) (const q)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'letrec))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda))
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q))))
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q)
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e)
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct blackhole () #:transparent)
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (match (mcdr (car xs))
- [(blackhole) (error "Stuck forever in a black hole!")]
- [x x])]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v xs)
- (define (assoc-update! xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) (set-mcdr! (car xs) v)]
- [else (env-update! x v (cdr xs))]))
- (assoc-update! (environ-xs xs)))
-(define (env-update x v xs) ; <---------------------------------- !!!
- (define (assoc-update xs)
- (cond [(null? xs) (list (mcons x v))]
- [(eq? x (mcar (car xs))) (cons (mcons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (environ (assoc-update (environ-xs xs))))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent)
-(struct let-var (v) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (string? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v)
- (blackhole? v)))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- ['eq? eq?]
- [_ false]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (let-var (eval-env e1 env)) env))]
- [(letrec-expr x e1 e2)
- (let* ([new-env (env-add x (blackhole) env)]
- [v (eval-env e1 new-env)])
- (begin
- (env-update! x v new-env)
- (eval-env e2 new-env)))]
- [(var-expr x) (let ((f (env-lookup x env)))
- (if (let-var? f) (let-var-v f) f))]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)]
- [(app f e)
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve (merge-let-vars env fun-env)))]))]))
-
-(define (merge-let-vars env1 env2)
- (define (iter xs env)
- (if (null? xs)
- env
- (let ((cur-var (car xs)))
- (if (let-var? (mcdr cur-var))
- (iter (cdr xs) (env-add (mcar cur-var) (mcdr cur-var) env))
- (iter (cdr xs) env)))))
- (iter (reverse (environ-xs env2)) env1))
-
-(define (eval e) (eval-env e env-empty))
-
-; ---------------------------------------------------------------- !!!
-
-(struct skip () #:transparent)
-(struct assign (x e) #:transparent)
-(struct if-cmd (eb ct cf) #:transparent)
-(struct while (eb cb) #:transparent)
-(struct comp (c1 c2) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd eb ct cf) (and (expr? eb) (cmd? ct) (cmd? cf))]
- [(while eb ct) (and (expr? eb) (cmd? ct))]
- [else false]))
-
-(define (parse-while q)
- (cond
- [(eq? q 'skip) (skip)]
- [(null? q) (skip)]
- [(and (list? q) (= (length q) 3) (eq? (second q) ':=))
- (assign (first q)
- (parse (third q)))]
- [(and (list? q) (= (length q) 4) (eq? (car q) 'if))
- (if-cmd (parse (second q))
- (parse-while (third q))
- (parse-while (fourth q)))]
- [(and (list? q) (= (length q) 3) (eq? (car q) 'while))
- (while (parse (second q))
- (parse-while (third q)))]
- [(and (list? q) (= (length q) 2))
- (comp (parse-while (first q))
- (parse-while (second q)))]
- [(and (list? q) (> (length q) 2))
- (comp (parse-while (first q))
- (parse-while (cdr q)))]
- [else (error "while parse error")]))
-
-(define (eval-while e env)
- (match e
- [(skip) env]
- [(assign x e)
- (env-update x (eval-env e env) env)]
- [(if-cmd eb ct cf)
- (if (eval-env eb env)
- (eval-while ct env)
- (eval-while cf env))]
- [(while eb cb)
- (if (eval-env eb env)
- (eval-while e (eval-while cb env))
- env)]
- [(comp c1 c2) (eval-while c2 (eval-while c1 env))]))
-
-; zakladamy, ze program startuje z pamiecia w ktorej
-; aktwna jest zmienna t
-(define WHILE_FACT
- '{(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (- t 1))})})
-
-(define (fact n)
- (let* ([init-env (env-add 't n env-empty)]
- [final-env
- (eval-while (parse-while WHILE_FACT) init-env)])
- (env-lookup 'i final-env)))
-
-(define prog1 '{(x := 5)
- (f := (let [x 50] (lambda (y) (+ x y))))
- (x := 10)
- (z := (f 0))}) \ No newline at end of file
diff --git a/Semestr 2/racket/leftist.rkt b/Semestr 2/racket/leftist.rkt
deleted file mode 100644
index 78319e4..0000000
--- a/Semestr 2/racket/leftist.rkt
+++ /dev/null
@@ -1,105 +0,0 @@
-#lang racket
-
-(provide make-elem elem-priority elem-val empty-heap heap-insert heap-merge heap-min heap-pop heap-empty?)
-
-(define (inc n)
- (+ n 1))
-
-;;; tagged lists
-(define (tagged-list? len-xs tag xs)
- (and (list? xs)
- (= len-xs (length xs))
- (eq? (first xs) tag)))
-
-;;; ordered elements
-(define (make-elem pri val)
- (cons pri val))
-
-(define (elem-priority x)
- (car x))
-
-(define (elem-val x)
- (cdr x))
-
-;;; leftist heaps (after Okasaki)
-
-;; data representation
-(define leaf 'leaf)
-
-(define (leaf? h) (eq? 'leaf h))
-
-(define (hnode? h)
- (and (tagged-list? 5 'hnode h)
- (natural? (caddr h))))
-
-(define (make-hnode elem heap-a heap-b)
- (if (< (rank heap-a) (rank heap-b))
- (list 'hnode elem (+ (rank heap-a) 1) heap-b heap-a)
- (list 'hnode elem (+ (rank heap-b) 1) heap-a heap-b)))
-
-(define (hnode-elem h)
- (second h))
-
-(define (hnode-left h)
- (fourth h))
-
-(define (hnode-right h)
- (fifth h))
-
-(define (hnode-rank h)
- (third h))
-
-(define (hord? p h)
- (or (leaf? h)
- (<= p (elem-priority (hnode-elem h)))))
-
-(define (heap? h)
- (or (leaf? h)
- (and (hnode? h)
- (heap? (hnode-left h))
- (heap? (hnode-right h))
- (<= (rank (hnode-right h))
- (rank (hnode-left h)))
- (= (rank h) (inc (rank (hnode-right h))))
- (hord? (elem-priority (hnode-elem h))
- (hnode-left h))
- (hord? (elem-priority (hnode-elem h))
- (hnode-right h)))))
-
-(define (rank h)
- (if (leaf? h)
- 0
- (hnode-rank h)))
-
-;; operations
-
-(define empty-heap leaf)
-
-(define (heap-empty? h)
- (leaf? h))
-
-(define (heap-insert elt heap)
- (heap-merge heap (make-hnode elt leaf leaf)))
-
-(define (heap-min heap)
- (hnode-elem heap))
-
-(define (heap-pop heap)
- (heap-merge (hnode-left heap) (hnode-right heap)))
-
-(define (heap-merge h1 h2)
- (cond
- [(leaf? h1) h2]
- [(leaf? h2) h1]
- [else (let ((h1-min (heap-min h1))
- (h2-min (heap-min h2)))
- (if (< (elem-priority h1-min) (elem-priority h2-min))
- (make-hnode h1-min (heap-merge (hnode-left h1) (hnode-right h1)) h2)
- (make-hnode h2-min h1 (heap-merge (hnode-left h2) (hnode-right h2)))))]))
-
-;;; check that a list is sorted (useful for longish lists)
-(define (sorted? xs)
- (cond [(null? xs) true]
- [(null? (cdr xs)) true]
- [(<= (car xs) (cadr xs)) (sorted? (cdr xs))]
- [else false]))
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep
deleted file mode 100644
index 6e0cfbb..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep
+++ /dev/null
@@ -1 +0,0 @@
-("7.6" racket ("f0a57e86828cdab35eaad454d5deb80353172518" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt"))
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo
deleted file mode 100644
index 748fec9..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep
deleted file mode 100644
index 0926afc..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep
+++ /dev/null
@@ -1 +0,0 @@
-("7.6" racket ("e0347fa7e89f59bc97c197db02b440f666222428" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt"))
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo
deleted file mode 100644
index eccc7f7..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep
deleted file mode 100644
index 9810b4c..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep
+++ /dev/null
@@ -1 +0,0 @@
-("7.6" racket ("ae3a6974cdd4582f480927d9968aad2f495b7fc4" . "33b0c09c14dce6a2115d810ac3d0f25a9dce3205") #"C:\\Users\\franc\\Documents\\lista5\\props.rkt" (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt"))
diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo
deleted file mode 100644
index ca1ab20..0000000
--- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep b/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep
deleted file mode 100644
index 0926afc..0000000
--- a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep
+++ /dev/null
@@ -1 +0,0 @@
-("7.6" racket ("e0347fa7e89f59bc97c197db02b440f666222428" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt"))
diff --git a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo b/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo
deleted file mode 100644
index eccc7f7..0000000
--- a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/racket/lista5/julita/props.rkt b/Semestr 2/racket/lista5/julita/props.rkt
deleted file mode 100644
index 204b108..0000000
--- a/Semestr 2/racket/lista5/julita/props.rkt
+++ /dev/null
@@ -1,52 +0,0 @@
-#lang racket
-
-(provide conj conj-left conj-right conj?
- disj disj-left disj-right disj?
- neg neg-subf neg?
- var?)
-
-
-(define (conj p q)
- (list 'conj p q))
-
-(define (conj-left f)
- (second f))
-
-(define (conj-right f)
- (third f))
-
-(define (conj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'conj (car t))))
-
-
-(define (disj p q)
- (list 'disj p q))
-
-(define (disj-left f)
- (second f))
-
-(define (disj-right f)
- (third f))
-
-(define (disj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'disj (car t))))
-
-
-(define (neg x)
- (list 'neg x))
-
-(define (neg-subf x)
- (second x))
-
-(define (neg? t)
- (and (list? t)
- (= 2 (length t))
- (eq? 'neg (car t))))
-
-
-(define (var? t)
- (symbol? t))
diff --git a/Semestr 2/racket/lista5/julita/solution.bak b/Semestr 2/racket/lista5/julita/solution.bak
deleted file mode 100644
index b3dda94..0000000
--- a/Semestr 2/racket/lista5/julita/solution.bak
+++ /dev/null
@@ -1,164 +0,0 @@
-#lang racket
-
-;;Praca grupowa:
-;;Dawid Holewa
-;;Julita Osman
-;;Aleksandra Stępniewska
-
-(require "props.rkt")
-(provide falsifiable-cnf?)
-
-;Ponieważ formuła w cnf to konjunkcja klauzul
-;a klauzula to alternatywa literałów
-;to formuła w tej postaci jest tautologią
-;wtedy i tylko wtedy gdy
-;wszystkie klauzule w niej występujace sa zawsze prawdziwe (też są tautologiami)
-;w przeciwnym razie, formulę taką da się zanegować;
-;zatem nasz pomysł polega na tym, aby
-;1)sprawdzic czy formula jest tautologia
-;2)jesli tak to zwracamy fałsz
-;3)wpp. pierwsza z klauzul, która nie jest tautologia
-;(zatem jest mozliwa do zanegowania i jednocześnie neguje cała formułe w cnf)
-;"przesuwamy" na początek listy reprezentującej cnf
-
-;dodatkowo to czy klauzula jest tautologią nie musimy sprawdzać wykonując wartościowanie
-;możemy skorzystać z własności alternatywy
-;klauzula bedzię zawsze pawdziwa tylko jeśli conajmniej jedna ze zmiennych występuje jednoczesnie ze swoją negacją
-
-;Falsifiable, która sprawdza każde wartościowania
-;sprawdza 2^(ilosc zmiennych w całym wyrażeniu) wartosciowań,
-;podczas gdy
-;falsifiable, która opiera się na strukturze cnf
-;przechodzi po cnf, aż do napotkania pierwszej
-;mozliwej do zanegowania klauzuli
-;zatem w najroszym przypadku przejdziemy po całym cnf
-;ale zawsze wartosciowania negujacego formule szukamy tylko dla jedenej klauzuli
-;zauważmy,ze jeśli formuła jest tautologią to oszczędzamy bardzo dużo czasu nie rozpartując wszystkich wartosciowań, tylko wypisujac odrazu falsz
-
-;Ta druga jest więc efektywniejsza
-
-(define (lit? f);; a lub ~a
- (or (var? f) ;;a
- (and (neg? f);;~a
- (var? (neg-subf f)))))
-
-(define (lit-pos v)
- v)
-
-(define (lit-neg v)
- (neg v))
-
-(define (lit-var l) ;;a-->a ~a-->a
- (if (var? l)
- l
- (neg-subf l)))
-
-(define (lit-pos? l)
- (var? l))
-
-(define (to-nnf f)
- (cond
- [(var? f) (lit-pos f)]
- [(neg? f) (to-nnf-neg (neg-subf f))]
- [(conj? f) (conj (to-nnf (conj-left f))
- (to-nnf (conj-right f)))]
- [(disj? f) (disj (to-nnf (disj-left f))
- (to-nnf (disj-right f)))]))
-
-(define (to-nnf-neg f)
- (cond
- [(var? f) (lit-neg f)]
- [(neg? f) (to-nnf (neg-subf f))]
- [(conj? f) (disj (to-nnf-neg (conj-left f))
- (to-nnf-neg (conj-right f)))]
- [(disj? f) (conj (to-nnf-neg (disj-left f))
- (to-nnf-neg (disj-right f)))]))
-
-(define (mk-cnf xss)
- (cons 'cnf xss))
-
-(define (clause? f)
- (and (list? f)
- (andmap lit? f)))
-
-(define (cnf? f)
- (and (pair? f)
- (eq? 'cnf (car f))
- (list? (cdr f))
- (andmap clause? (cdr f))))
-
-(define (to-cnf f)
- (define (join xss yss)
- (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss)))
-
- (define (go f)
- (cond
- [(lit? f) (list (list f))]
- [(conj? f) (append (go (conj-left f))
- (go (conj-right f)))]
- [(disj? f) (join (go (disj-left f))
- (go (disj-right f)))]))
- (mk-cnf (go f)))
-
-
-(define (contain-both-literals? claus)
- (define (aux to-check)
- (cond [(empty? to-check) #f]
- [(neg? (car to-check))
- (if (memq (neg-subf (car to-check)) claus)
- #t
- (aux (cdr to-check)))]
- [else (aux (cdr to-check))]))
- (aux claus))
-
-
-;; sprawdza czy ktorakolwiek z klauzul z listy reprezentujacej cnf
-;; zawiera chociaz jedną parę zmiennej i jej negacji
-;; zwraca liste pusta jesli cnf jest tautologia
-;; zwraca liste z pierwsza klauzule nie bedaca tautologia "przesunieta" na poczatek (possible-to-neg)
-(define (has-both big-set)
- (define (possible-to-neg big-set x) ;;przesuwa x-ty element listy big-set na poczatek
- (define x-ty (list-ref big-set x))
- (append (list x-ty) (remove x-ty big-set)))
- (define (aux iter big-set)
- (if (= iter (length big-set))
- '()
- (if (contain-both-literals? (list-ref big-set iter)) ;;sprawdzamy czy iter klauzula cnf ma wystapienie a i ~a jednoczesnie
- (aux (+ iter 1) big-set)
- (possible-to-neg big-set iter))))
- (aux 0 (cdr big-set))) ;;(cdr big-set) bo to cnf czyli pierwszy element listy to edykieta 'cnf
-
-
-(define (falsifiable-cnf? t)
- (define tt (to-cnf (to-nnf t)))
- (define f (has-both tt))
- (if (empty? f)
- #f
- (find-valuation f)))
-
-
-(define (valuate f sigma)
- (define (insigma-proc lista result)
- (cond [(null? lista) result]
- [(insigma-proc (cdr lista) (append result (list (lit-var(caar lista)))))]))
- ;; insigma ---> lista zmiennych z wartosciowania pierwszej klauzuli:
- (define insigma (insigma-proc sigma '()))
- (define (aux insigma otherclause sigma)
- (cond [(null? otherclause) sigma]
- [(if (memq (lit-var (car otherclause)) insigma)
- (aux insigma (cdr otherclause) sigma)
- (if(neg? (car otherclause))
- (aux (append insigma (list(car otherclause)))
- (cdr otherclause)
- (append sigma (list(list (lit-var(car otherclause)) 1))))
- (aux (append insigma (list(car otherclause)))
- (cdr otherclause)
- (append sigma (list(list (car otherclause) 0))))))]))
- (if (empty? f)
- sigma
- (valuate (cdr f)
- (aux insigma (car f) sigma))))
-
-(define (find-valuation f)
- (valuate f '()))
-
diff --git a/Semestr 2/racket/lista5/julita/solution.rkt b/Semestr 2/racket/lista5/julita/solution.rkt
deleted file mode 100644
index da87bf9..0000000
--- a/Semestr 2/racket/lista5/julita/solution.rkt
+++ /dev/null
@@ -1,164 +0,0 @@
-#lang racket
-
-;;Praca grupowa:
-;;Dawid Holewa
-;;Julita Osman
-;;Aleksandra Stępniewska
-
-(require "props.rkt")
-(provide falsifiable-cnf?)
-
-;Ponieważ formuła w cnf to konjunkcja klauzul
-;a klauzula to alternatywa literałów
-;to formuła w tej postaci jest tautologią
-;wtedy i tylko wtedy gdy
-;wszystkie klauzule w niej występujace sa zawsze prawdziwe (też są tautologiami)
-;w przeciwnym razie, formulę taką da się zanegować;
-;zatem nasz pomysł polega na tym, aby
-;1)sprawdzic czy formula jest tautologia
-;2)jesli tak to zwracamy fałsz
-;3)wpp. pierwsza z klauzul, która nie jest tautologia
-;(zatem jest mozliwa do zanegowania i jednocześnie neguje cała formułe w cnf)
-;"przesuwamy" na początek listy reprezentującej cnf
-
-;dodatkowo to czy klauzula jest tautologią nie musimy sprawdzać wykonując wartościowanie
-;możemy skorzystać z własności alternatywy
-;klauzula bedzię zawsze pawdziwa tylko jeśli conajmniej jedna ze zmiennych występuje jednoczesnie ze swoją negacją
-
-;Falsifiable, która sprawdza każde wartościowania
-;sprawdza 2^(ilosc zmiennych w całym wyrażeniu) wartosciowań,
-;podczas gdy
-;falsifiable, która opiera się na strukturze cnf
-;przechodzi po cnf, aż do napotkania pierwszej
-;mozliwej do zanegowania klauzuli
-;zatem w najroszym przypadku przejdziemy po całym cnf
-;ale zawsze wartosciowania negujacego formule szukamy tylko dla jedenej klauzuli
-;zauważmy,ze jeśli formuła jest tautologią to oszczędzamy bardzo dużo czasu nie rozpartując wszystkich wartosciowań, tylko wypisujac odrazu falsz
-
-;Ta druga jest więc efektywniejsza
-
-(define (lit? f);; a lub ~a
- (or (var? f) ;;a
- (and (neg? f);;~a
- (var? (neg-subf f)))))
-
-(define (lit-pos v)
- v)
-
-(define (lit-neg v)
- (neg v))
-
-(define (lit-var l) ;;a-->a ~a-->a
- (if (var? l)
- l
- (neg-subf l)))
-
-(define (lit-pos? l)
- (var? l))
-
-(define (to-nnf f)
- (cond
- [(var? f) (lit-pos f)]
- [(neg? f) (to-nnf-neg (neg-subf f))]
- [(conj? f) (conj (to-nnf (conj-left f))
- (to-nnf (conj-right f)))]
- [(disj? f) (disj (to-nnf (disj-left f))
- (to-nnf (disj-right f)))]))
-
-(define (to-nnf-neg f)
- (cond
- [(var? f) (lit-neg f)]
- [(neg? f) (to-nnf (neg-subf f))]
- [(conj? f) (disj (to-nnf-neg (conj-left f))
- (to-nnf-neg (conj-right f)))]
- [(disj? f) (conj (to-nnf-neg (disj-left f))
- (to-nnf-neg (disj-right f)))]))
-
-(define (mk-cnf xss)
- (cons 'cnf xss))
-
-(define (clause? f)
- (and (list? f)
- (andmap lit? f)))
-
-(define (cnf? f)
- (and (pair? f)
- (eq? 'cnf (car f))
- (list? (cdr f))
- (andmap clause? (cdr f))))
-
-(define (to-cnf f)
- (define (join xss yss)
- (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss)))
-
- (define (go f)
- (cond
- [(lit? f) (list (list f))]
- [(conj? f) (append (go (conj-left f))
- (go (conj-right f)))]
- [(disj? f) (join (go (disj-left f))
- (go (disj-right f)))]))
- (mk-cnf (go f)))
-
-
-(define (contain-both-literals? claus)
- (define (aux to-check)
- (cond [(empty? to-check) #f]
- [(neg? (car to-check))
- (if (memq (neg-subf (car to-check)) claus)
- #t
- (aux (cdr to-check)))]
- [else (aux (cdr to-check))]))
- (aux claus))
-
-
-;; sprawdza czy ktorakolwiek z klauzul z listy reprezentujacej cnf
-;; zawiera chociaz jedną parę zmiennej i jej negacji
-;; zwraca liste pusta jesli cnf jest tautologia
-;; zwraca liste z pierwsza klauzule nie bedaca tautologia "przesunieta" na poczatek (possible-to-neg)
-(define (has-both big-set)
- (define (possible-to-neg big-set x) ;;przesuwa x-ty element listy big-set na poczatek
- (define x-ty (list-ref big-set x))
- (append (list x-ty) (remove x-ty big-set)))
- (define (aux iter big-set)
- (if (= iter (length big-set))
- '()
- (if (contain-both-literals? (list-ref big-set iter)) ;;sprawdzamy czy iter klauzula cnf ma wystapienie a i ~a jednoczesnie
- (aux (+ iter 1) big-set)
- (possible-to-neg big-set iter))))
- (aux 0 (cdr big-set))) ;;(cdr big-set) bo to cnf czyli pierwszy element listy to edykieta 'cnf
-
-
-(define (falsifiable-cnf? t)
- (define tt (to-cnf (to-nnf t)))
- (define f (has-both tt))
- (if (empty? f)
- #f
- (find-valuation f)))
-
-
-(define (valuate f sigma)
- (define (insigma-proc lista result)
- (cond [(null? lista) result]
- [(insigma-proc (cdr lista) (append result (list (lit-var(caar lista)))))]))
- ;; insigma ---> lista zmiennych z wartosciowania pierwszej klauzuli:
- (define insigma (insigma-proc sigma '()))
- (define (aux insigma otherclause sigma)
- (cond [(null? otherclause) sigma]
- [(if (memq (lit-var (car otherclause)) insigma)
- (aux insigma (cdr otherclause) sigma)
- (if(neg? (car otherclause))
- (aux (append insigma (list(car otherclause)))
- (cdr otherclause)
- (append sigma (list(list (lit-var(car otherclause)) true))))
- (aux (append insigma (list(car otherclause)))
- (cdr otherclause)
- (append sigma (list(list (car otherclause) false))))))]))
- (if (empty? f)
- sigma
- (valuate (cdr f)
- (aux insigma (car f) sigma))))
-
-(define (find-valuation f)
- (valuate f '()))
-
diff --git a/Semestr 2/racket/lista5/prop.rkt b/Semestr 2/racket/lista5/prop.rkt
deleted file mode 100644
index 6f1f7b4..0000000
--- a/Semestr 2/racket/lista5/prop.rkt
+++ /dev/null
@@ -1 +0,0 @@
-#lang racket
diff --git a/Semestr 2/racket/lista5/props.bak b/Semestr 2/racket/lista5/props.bak
deleted file mode 100644
index 1a5659a..0000000
--- a/Semestr 2/racket/lista5/props.bak
+++ /dev/null
@@ -1,71 +0,0 @@
-#lang racket
-
-(provide var?
- neg?
- conj?
- disj?
- conj
- disj
- neg
- conj-left
- conj-right
- disj-right
- disj-left
- neg-subf)
-; (require "solution.rkt")
-
-(define (var? t) (symbol? t))
-
-(define (neg? t)
- (and (list? t)
- (= 2 (length t))
- (eq? 'neg (car t))))
-
-(define (conj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'conj (car t))))
-
-(define (disj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'disj (car t))))
-
-(define (lit? t)
- (or (var? t)
- (and (neg? t)
- (var? (neg-subf t)))))
-
-(define (conj left right)
- (list 'conj left right))
-
-(define (disj left right)
- (list 'disj left right))
-
-(define (neg f)
- (list 'neg f))
-
-(define (conj-left f)
- (if (conj? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- CONJ-LEFT" f)))
-
-(define (conj-right f)
- (if (conj? f)
- (caddr f)
- (error "Złe dane ze znacznikiem -- CONJ-RIGHT" f)))
-
-(define (disj-left f)
- (if (disj? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- DISJ-LEFT" f)))
-
-(define (disj-right f)
- (if (disj? f)
- (caddr f)
- (error "Złe dane ze znacznikiem -- DISJ-RIGHT" f)))
-
-(define (neg-subf f)
- (if (neg? f)
- (cadr f)
- (error "Złe dane ze znacznikiem -- NEG-FORM" f)))
diff --git a/Semestr 2/racket/lista5/props.rkt b/Semestr 2/racket/lista5/props.rkt
deleted file mode 100644
index 204b108..0000000
--- a/Semestr 2/racket/lista5/props.rkt
+++ /dev/null
@@ -1,52 +0,0 @@
-#lang racket
-
-(provide conj conj-left conj-right conj?
- disj disj-left disj-right disj?
- neg neg-subf neg?
- var?)
-
-
-(define (conj p q)
- (list 'conj p q))
-
-(define (conj-left f)
- (second f))
-
-(define (conj-right f)
- (third f))
-
-(define (conj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'conj (car t))))
-
-
-(define (disj p q)
- (list 'disj p q))
-
-(define (disj-left f)
- (second f))
-
-(define (disj-right f)
- (third f))
-
-(define (disj? t)
- (and (list? t)
- (= 3 (length t))
- (eq? 'disj (car t))))
-
-
-(define (neg x)
- (list 'neg x))
-
-(define (neg-subf x)
- (second x))
-
-(define (neg? t)
- (and (list? t)
- (= 2 (length t))
- (eq? 'neg (car t))))
-
-
-(define (var? t)
- (symbol? t))
diff --git a/Semestr 2/racket/lista5/skrr/solution.bak b/Semestr 2/racket/lista5/skrr/solution.bak
deleted file mode 100644
index 72c7f36..0000000
--- a/Semestr 2/racket/lista5/skrr/solution.bak
+++ /dev/null
@@ -1,135 +0,0 @@
-#lang racket
-
-(provide falsifiable-cnf?)
-(require "props.rkt")
-
-(define (prop? f)
- (or (var? f)
- (and (neg? f)
- (prop? (neg-subf f)))
- (and (disj? f)
- (prop? (disj-left f))
- (prop? (disj-right f)))
- (and (conj? f)
- (prop? (conj-left f))
- (prop? (conj-right f)))))
-
-(define (lit-var f)
- (cond [(var? f) f]
- [(neg? f) (neg-subf f)]
- [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)]))
-
-(define (free-vars f)
- (cond [(null? f) null]
- [(var? f) (list f)]
- [(neg? f) (free-vars (neg-subf f))]
- [(conj? f) (append (free-vars (conj-left f))
- (free-vars (conj-right f)))]
- [(disj? f) (append (free-vars (disj-left f))
- (free-vars (disj-right f)))]
- [else (error "Zła formula -- FREE-VARS" f)]))
-
-(define (gen-vals xs)
- (if (null? xs)
- (list null)
- (let*
- ((vss (gen-vals (cdr xs)))
- (x (car xs))
- (vst (map (λ (vs) (cons (list x true) vs)) vss))
- (vsf (map (λ (vs) (cons (list x false) vs)) vss)))
- (append vst vsf))))
-
-(define (eval-formula f evaluation)
- (cond [(var? f)
- (let ((val (assoc f evaluation)))
- (if (not val)
- (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation)
- (cadr val)))]
- [(neg? f) (not (eval-formula (neg-subf f) evaluation))]
- [(disj? f) (or (eval-formula (disj-left f) evaluation)
- (eval-formula (disj-right f) evaluation))]
- [(conj? f) (and (eval-formula (conj-left f) evaluation)
- (eval-formula (conj-right f) evaluation))]
- [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)]))
-
-(define (falsifiable-eval? f)
- (let* ((evaluations (gen-vals (free-vars f)))
- (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations)))
- (ormap false? results)))
-
-(define (nff? f)
- (cond [(lit? f) true]
- [(neg? f) false]
- [(conj? f) (and (nff? (conj-left f))
- (nff? (conj-right f)))]
- [(disj? f) (and (nff? (disj-left f))
- (nff? (disj-right f)))]
- [else (error "Zła formuła -- NFF?" f)]))
-
-(define (convert-to-nnf f)
- (cond [(lit? f) f]
- [(neg? f) (convert-negation (neg-subf f))]
- [(conj? f) (conj (convert-to-nnf (conj-left f))
- (convert-to-nnf (conj-right f)))]
- [(disj? f) (disj (convert-to-nnf (disj-left f))
- (convert-to-nnf (disj-right f)))]
- [else (error "Zła formuła -- CONVERT" f)]))
-
-(define (convert-negation f)
- (cond [(lit? f)
- (if (var? f)
- (neg f)
- (neg-subf f))]
- [(neg? f) (convert-to-nnf (neg-subf f))]
- [(conj? f) (disj (convert-negation (conj-left f))
- (convert-negation (conj-right f)))]
- [(disj? f) (conj (convert-negation (disj-left f))
- (convert-negation (disj-right f)))]
- [else (error "Zła formuła -- CONVERT-NEGATION" f)]))
-
-(define (clause? x)
- (and (list? x)
- (andmap lit? x)))
-
-(define (clause-empty? x)
- (and (clause? x)
- (null? x)))
-
-(define (cnf? x)
- (and (list? x)
- (andmap clause? x)))
-
-(define (flatmap proc seq)
- (foldl append null (map proc seq)))
-
-(define (convert-to-cnf f)
- (define (convert f)
- (cond [(lit? f) (list (list f))]
- [(conj? f) (append (convert-to-cnf (conj-left f))
- (convert-to-cnf (conj-right f)))]
- [(disj? f)
- (let ((clause-left (convert-to-cnf (disj-left f)))
- (clause-right (convert-to-cnf (disj-right f))))
- (flatmap (λ (clause)
- (map (λ (clause2)
- (append clause2 clause)) clause-left))
- clause-right))]))
- (convert (convert-to-nnf f)))
-
-(define (falsifiable-clause? clause)
- (cond [(clause-empty? clause) true]
- [(lit? (findf (λ (l) (equal?
- l
- (convert-to-nnf (neg (car clause)))))
- clause)) false]
- [else (falsifiable-clause? (cdr clause))]))
-
-(define (falsifiable-cnf? f)
- (define (neg-value lit)
- (if (var? lit)
- (list lit false)
- (list (neg-subf lit) true)))
- (ormap (λ (clause) (if (falsifiable-clause? clause)
- (map neg-value clause)
- false))
- (convert-to-cnf f))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista5/skrr/solution.rkt b/Semestr 2/racket/lista5/skrr/solution.rkt
deleted file mode 100644
index e8efbc9..0000000
--- a/Semestr 2/racket/lista5/skrr/solution.rkt
+++ /dev/null
@@ -1,88 +0,0 @@
-#lang racket
-
-(require "props.rkt")
-(provide falsifiable-cnf?)
-
-(define (lit? f)
- (or (var? f)
- (and (neg? f)
- (var? (neg-subf f)))))
-
-(define (lit-pos v)
- v)
-
-(define (lit-neg v)
- (neg v))
-
-(define (lit-var l)
- (if (var? l)
- l
- (neg-subf l)))
-
-(define (lit-pos? l)
- (var? l))
-
-(define (to-nnf f)
- (cond
- [(var? f) (lit-pos f)]
- [(neg? f) (to-nnf-neg (neg-subf f))]
- [(conj? f) (conj (to-nnf (conj-left f))
- (to-nnf (conj-right f)))]
- [(disj? f) (disj (to-nnf (disj-left f))
- (to-nnf (disj-right f)))]))
-
-(define (to-nnf-neg f)
- (cond
- [(var? f) (lit-neg f)]
- [(neg? f) (to-nnf (neg-subf f))]
- [(conj? f) (disj (to-nnf-neg (conj-left f))
- (to-nnf-neg (conj-right f)))]
- [(disj? f) (conj (to-nnf-neg (disj-left f))
- (to-nnf-neg (disj-right f)))]))
-
-(define (mk-cnf xss)
- (cons 'cnf xss))
-
-(define (clause? f)
- (and (list? f)
- (andmap lit? f)))
-
-(define (cnf? f)
- (and (pair? f)
- (eq? 'cnf (car f))
- (list? (cdr f))
- (andmap clause? (cdr f))))
-
-(define (to-cnf f)
- (define (join xss yss)
- (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss)))
- (define (go f)
- (cond
- [(lit? f) (list (list f))]
- [(conj? f) (append (go (conj-left f))
- (go (conj-right f)))]
- [(disj? f) (join (go (disj-left f))
- (go (disj-right f)))]))
- (mk-cnf (go f)))
-
-(define (clause-empty? x)
- (and (clause? x)
- (null? x)))
-
-(define (falsifiable-clause? clause)
- (cond [(clause-empty? clause) true]
- [(lit? (findf (λ (l) (equal?
- l
- (to-nnf (neg (car clause)))))
- clause)) false]
- [else (falsifiable-clause? (cdr clause))]))
-
-(define (falsifiable-cnf? f)
- (define (neg-value lit)
- (if (var? lit)
- (list lit false)
- (list (neg-subf lit) true)))
- (ormap (λ (clause) (if (falsifiable-clause? clause)
- (map neg-value clause)
- false))
- (convert-to-cnf f))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista5/sol2.rkt b/Semestr 2/racket/lista5/sol2.rkt
deleted file mode 100644
index d037472..0000000
--- a/Semestr 2/racket/lista5/sol2.rkt
+++ /dev/null
@@ -1,90 +0,0 @@
-#lang racket
-(provide falsifiable-cnf?) (require "props.rkt")
-
-
-(define (falsifiable-cnf? p)
- ;literał
- (define (lit? p)
- (or (var? p)
- (and (neg? p) (var? (neg-subf p)))
- ))
-
- (define (lit-pos? p)
- (if (lit? p)
- (var? p)
- (error "not a literal" p)
- ))
-
- (define (lit-var p)
- (cond
- [(not (lit? p)) (error "not a literal" p)]
- [(lit-pos? p) p]
- [else (neg-subf p)]
- ))
-
- (define (contr p)
- (if (lit? p)
- (if (neg? p) (neg-subf p) (neg p))
- (error "not a literal" p)
- ))
-
- ;konwertowanie
- (define (convert-to-cnf p)
- (define (convert-to-nnf p)
- (cond
- [(lit? p) p]
- [(and (neg? p) (conj? (neg-subf p)))
- (let ((A (neg-subf p)))
- (disj (convert-to-nnf (neg (conj-left A))) (convert-to-nnf (neg (conj-right A)))))]
- [(and (neg? p) (disj? (neg-subf p)))
- (let ((A (neg-subf p)))
- (conj (convert-to-nnf (neg (disj-left A))) (convert-to-nnf (neg (disj-right A)))))]
- [(and (neg? p) (neg? (neg-subf p))) (convert-to-nnf (neg-subf (neg-subf p)))]
- [(conj? p) (conj (convert-to-nnf (conj-right p)) (convert-to-nnf (conj-left p)))]
- [(disj? p) (disj (convert-to-nnf (disj-right p)) (convert-to-nnf (disj-left p)))]
- [else (error "not a proposition" p)]))
-
- (define (flatmap proc seq)
- (foldr append null (map proc seq)))
-
- (define (merge a b)
- (flatmap (lambda (c) (map (lambda (c2) (append c c2)) b)) a))
-
- (define (convert p)
- (cond
- [(lit? p) (list (list p))]
- [(conj? p) (append (convert (conj-left p)) (convert (conj-right p)))]
- [(disj? p) (let* ((L (convert (disj-left p))) (R (convert (disj-right p))))
- (merge L R))]
- [else (error "it should never be here" p)]
- ))
-
- (map (lambda (c) (remove-duplicates c)) (convert (convert-to-nnf p))))
-
- ;prawdziwa funkcja
- (define cnf (convert-to-cnf p))
-
- (define (falsifiable-clause? c)
- (cond
- [(null? c) #t]
- [(eq? #f (member (contr (car c)) c)) (falsifiable-clause? (cdr c))]
- [else #f]
- ))
-
- (define (falsified-clause c)
- (if (null? c)
- null
- (cons (list (lit-var (car c)) (not (lit-pos? (car c)))) (falsified-clause (cdr c)))
- ))
-
- (define (falsified-val p)
- (cond
- [(null? p) false]
- [(falsifiable-clause? (car p)) (falsified-clause (car p))]
- [else (falsified-val (cdr p))]
- )
- )
- (falsified-val cnf))
-
-
-;złożoność wykładnicza tak jak falsible-eval ale często w praktyce szybsza jak nie ma za dużo alternatyw. \ No newline at end of file
diff --git a/Semestr 2/racket/lista5/solution.bak b/Semestr 2/racket/lista5/solution.bak
deleted file mode 100644
index 72c7f36..0000000
--- a/Semestr 2/racket/lista5/solution.bak
+++ /dev/null
@@ -1,135 +0,0 @@
-#lang racket
-
-(provide falsifiable-cnf?)
-(require "props.rkt")
-
-(define (prop? f)
- (or (var? f)
- (and (neg? f)
- (prop? (neg-subf f)))
- (and (disj? f)
- (prop? (disj-left f))
- (prop? (disj-right f)))
- (and (conj? f)
- (prop? (conj-left f))
- (prop? (conj-right f)))))
-
-(define (lit-var f)
- (cond [(var? f) f]
- [(neg? f) (neg-subf f)]
- [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)]))
-
-(define (free-vars f)
- (cond [(null? f) null]
- [(var? f) (list f)]
- [(neg? f) (free-vars (neg-subf f))]
- [(conj? f) (append (free-vars (conj-left f))
- (free-vars (conj-right f)))]
- [(disj? f) (append (free-vars (disj-left f))
- (free-vars (disj-right f)))]
- [else (error "Zła formula -- FREE-VARS" f)]))
-
-(define (gen-vals xs)
- (if (null? xs)
- (list null)
- (let*
- ((vss (gen-vals (cdr xs)))
- (x (car xs))
- (vst (map (λ (vs) (cons (list x true) vs)) vss))
- (vsf (map (λ (vs) (cons (list x false) vs)) vss)))
- (append vst vsf))))
-
-(define (eval-formula f evaluation)
- (cond [(var? f)
- (let ((val (assoc f evaluation)))
- (if (not val)
- (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation)
- (cadr val)))]
- [(neg? f) (not (eval-formula (neg-subf f) evaluation))]
- [(disj? f) (or (eval-formula (disj-left f) evaluation)
- (eval-formula (disj-right f) evaluation))]
- [(conj? f) (and (eval-formula (conj-left f) evaluation)
- (eval-formula (conj-right f) evaluation))]
- [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)]))
-
-(define (falsifiable-eval? f)
- (let* ((evaluations (gen-vals (free-vars f)))
- (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations)))
- (ormap false? results)))
-
-(define (nff? f)
- (cond [(lit? f) true]
- [(neg? f) false]
- [(conj? f) (and (nff? (conj-left f))
- (nff? (conj-right f)))]
- [(disj? f) (and (nff? (disj-left f))
- (nff? (disj-right f)))]
- [else (error "Zła formuła -- NFF?" f)]))
-
-(define (convert-to-nnf f)
- (cond [(lit? f) f]
- [(neg? f) (convert-negation (neg-subf f))]
- [(conj? f) (conj (convert-to-nnf (conj-left f))
- (convert-to-nnf (conj-right f)))]
- [(disj? f) (disj (convert-to-nnf (disj-left f))
- (convert-to-nnf (disj-right f)))]
- [else (error "Zła formuła -- CONVERT" f)]))
-
-(define (convert-negation f)
- (cond [(lit? f)
- (if (var? f)
- (neg f)
- (neg-subf f))]
- [(neg? f) (convert-to-nnf (neg-subf f))]
- [(conj? f) (disj (convert-negation (conj-left f))
- (convert-negation (conj-right f)))]
- [(disj? f) (conj (convert-negation (disj-left f))
- (convert-negation (disj-right f)))]
- [else (error "Zła formuła -- CONVERT-NEGATION" f)]))
-
-(define (clause? x)
- (and (list? x)
- (andmap lit? x)))
-
-(define (clause-empty? x)
- (and (clause? x)
- (null? x)))
-
-(define (cnf? x)
- (and (list? x)
- (andmap clause? x)))
-
-(define (flatmap proc seq)
- (foldl append null (map proc seq)))
-
-(define (convert-to-cnf f)
- (define (convert f)
- (cond [(lit? f) (list (list f))]
- [(conj? f) (append (convert-to-cnf (conj-left f))
- (convert-to-cnf (conj-right f)))]
- [(disj? f)
- (let ((clause-left (convert-to-cnf (disj-left f)))
- (clause-right (convert-to-cnf (disj-right f))))
- (flatmap (λ (clause)
- (map (λ (clause2)
- (append clause2 clause)) clause-left))
- clause-right))]))
- (convert (convert-to-nnf f)))
-
-(define (falsifiable-clause? clause)
- (cond [(clause-empty? clause) true]
- [(lit? (findf (λ (l) (equal?
- l
- (convert-to-nnf (neg (car clause)))))
- clause)) false]
- [else (falsifiable-clause? (cdr clause))]))
-
-(define (falsifiable-cnf? f)
- (define (neg-value lit)
- (if (var? lit)
- (list lit false)
- (list (neg-subf lit) true)))
- (ormap (λ (clause) (if (falsifiable-clause? clause)
- (map neg-value clause)
- false))
- (convert-to-cnf f))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista5/solution.rkt b/Semestr 2/racket/lista5/solution.rkt
deleted file mode 100644
index 67964d8..0000000
--- a/Semestr 2/racket/lista5/solution.rkt
+++ /dev/null
@@ -1,140 +0,0 @@
-#lang racket
-
-(provide falsifiable-cnf?)
-(require "props.rkt")
-
-(define (prop? f)
- (or (var? f)
- (and (neg? f)
- (prop? (neg-subf f)))
- (and (disj? f)
- (prop? (disj-left f))
- (prop? (disj-right f)))
- (and (conj? f)
- (prop? (conj-left f))
- (prop? (conj-right f)))))
-
-(define (lit? t)
- (or (var? t)
- (and (neg? t)
- (var? (neg-subf t)))))
-
-(define (lit-var f)
- (cond [(var? f) f]
- [(neg? f) (neg-subf f)]
- [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)]))
-
-(define (free-vars f)
- (cond [(null? f) null]
- [(var? f) (list f)]
- [(neg? f) (free-vars (neg-subf f))]
- [(conj? f) (append (free-vars (conj-left f))
- (free-vars (conj-right f)))]
- [(disj? f) (append (free-vars (disj-left f))
- (free-vars (disj-right f)))]
- [else (error "Zła formula -- FREE-VARS" f)]))
-
-(define (gen-vals xs)
- (if (null? xs)
- (list null)
- (let*
- ((vss (gen-vals (cdr xs)))
- (x (car xs))
- (vst (map (λ (vs) (cons (list x true) vs)) vss))
- (vsf (map (λ (vs) (cons (list x false) vs)) vss)))
- (append vst vsf))))
-
-(define (eval-formula f evaluation)
- (cond [(var? f)
- (let ((val (assoc f evaluation)))
- (if (not val)
- (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation)
- (cadr val)))]
- [(neg? f) (not (eval-formula (neg-subf f) evaluation))]
- [(disj? f) (or (eval-formula (disj-left f) evaluation)
- (eval-formula (disj-right f) evaluation))]
- [(conj? f) (and (eval-formula (conj-left f) evaluation)
- (eval-formula (conj-right f) evaluation))]
- [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)]))
-
-(define (falsifiable-eval? f)
- (let* ((evaluations (gen-vals (free-vars f)))
- (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations)))
- (ormap false? results)))
-
-(define (nff? f)
- (cond [(lit? f) true]
- [(neg? f) false]
- [(conj? f) (and (nff? (conj-left f))
- (nff? (conj-right f)))]
- [(disj? f) (and (nff? (disj-left f))
- (nff? (disj-right f)))]
- [else (error "Zła formuła -- NFF?" f)]))
-
-(define (convert-to-nnf f)
- (cond [(lit? f) f]
- [(neg? f) (convert-negation (neg-subf f))]
- [(conj? f) (conj (convert-to-nnf (conj-left f))
- (convert-to-nnf (conj-right f)))]
- [(disj? f) (disj (convert-to-nnf (disj-left f))
- (convert-to-nnf (disj-right f)))]
- [else (error "Zła formuła -- CONVERT" f)]))
-
-(define (convert-negation f)
- (cond [(lit? f)
- (if (var? f)
- (neg f)
- (neg-subf f))]
- [(neg? f) (convert-to-nnf (neg-subf f))]
- [(conj? f) (disj (convert-negation (conj-left f))
- (convert-negation (conj-right f)))]
- [(disj? f) (conj (convert-negation (disj-left f))
- (convert-negation (disj-right f)))]
- [else (error "Zła formuła -- CONVERT-NEGATION" f)]))
-
-(define (clause? x)
- (and (list? x)
- (andmap lit? x)))
-
-(define (clause-empty? x)
- (and (clause? x)
- (null? x)))
-
-(define (cnf? x)
- (and (list? x)
- (andmap clause? x)))
-
-(define (flatmap proc seq)
- (foldl append null (map proc seq)))
-
-(define (convert-to-cnf f)
- (define (convert f)
- (cond [(lit? f) (list (list f))]
- [(conj? f) (append (convert-to-cnf (conj-left f))
- (convert-to-cnf (conj-right f)))]
- [(disj? f)
- (let ((clause-left (convert-to-cnf (disj-left f)))
- (clause-right (convert-to-cnf (disj-right f))))
- (flatmap (λ (clause)
- (map (λ (clause2)
- (append clause2 clause)) clause-left))
- clause-right))]))
- (map (lambda (clause) (remove-duplicates clause)) (convert (convert-to-nnf f))))
-
-(define (falsifiable-clause? clause)
- (cond [(clause-empty? clause) true]
- [(lit? (findf (λ (l) (equal?
- l
- (convert-to-nnf (neg (car clause)))))
- clause)) false]
- [else (falsifiable-clause? (cdr clause))]))
-
-(define (falsifiable-cnf? f)
- (define (neg-value lit)
- (if (var? lit)
- (list lit false)
- (list (neg-subf lit) true)))
- (ormap (λ (clause) (if (falsifiable-clause? clause)
- (map neg-value clause)
- false))
- (convert-to-cnf f))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista5/xd.bak b/Semestr 2/racket/lista5/xd.bak
deleted file mode 100644
index d814e10..0000000
--- a/Semestr 2/racket/lista5/xd.bak
+++ /dev/null
@@ -1,4 +0,0 @@
-#lang racket
-
-(require "solution.rkt")
-
diff --git a/Semestr 2/racket/lista5/xd.rkt b/Semestr 2/racket/lista5/xd.rkt
deleted file mode 100644
index 64ce78c..0000000
--- a/Semestr 2/racket/lista5/xd.rkt
+++ /dev/null
@@ -1,4 +0,0 @@
-#lang racket
-
-(require "solution.rkt")
-(require "props.rkt")
diff --git a/Semestr 2/racket/lista6/lista8/kappa.py b/Semestr 2/racket/lista6/lista8/kappa.py
deleted file mode 100644
index f359d5c..0000000
--- a/Semestr 2/racket/lista6/lista8/kappa.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import pylab
-
-a = int(input("podaj liczbe: "))
-b = int(input("podaj liczbe: "))
-
-x = range(-10, 11)
-y = []
-for i in x:
- y.append(a * i + b)
-pylab.plot(x, y)
-pylab.title('Wykres f(x) = a*x - b')
-pylab.grid(True)
-pylab.show()
diff --git a/Semestr 2/racket/lista6/lista8/zad1.bak b/Semestr 2/racket/lista6/lista8/zad1.bak
deleted file mode 100644
index 0960f21..0000000
--- a/Semestr 2/racket/lista6/lista8/zad1.bak
+++ /dev/null
@@ -1,98 +0,0 @@
-#lang racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))] ; <----------------- !!!
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef) ; <--------------------------------------- !!!
- (and (expr? eb) (expr? et) (expr? ef))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)] ; <---------------------------- !!!
- [(eq? q 'false) (const false)] ; <---------------------------- !!!
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!!
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(define (value? v)
- (or (number? v) (boolean? v)))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!!
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!!
- (eval-env et env)
- (eval-env ef env))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad1.rkt b/Semestr 2/racket/lista6/lista8/zad1.rkt
deleted file mode 100644
index 1cd6b0b..0000000
--- a/Semestr 2/racket/lista6/lista8/zad1.rkt
+++ /dev/null
@@ -1,104 +0,0 @@
-#lang racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))] ; <----------------- !!!
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef) ; <--------------------------------------- !!!
- (and (expr? eb) (expr? et) (expr? ef))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)] ; <---------------------------- !!!
- [(eq? q 'false) (const false)] ; <---------------------------- !!!
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!!
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'and))
- (if-expr (parse (second q))
- (parse (third q))
- (const false))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'or))
- (if-expr (parse (second q))
- (const true)
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(define (value? v)
- (or (number? v) (boolean? v)))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!!
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!!
- (eval-env et env)
- (eval-env ef env))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad4.bak b/Semestr 2/racket/lista6/lista8/zad4.bak
deleted file mode 100644
index 503099d..0000000
--- a/Semestr 2/racket/lista6/lista8/zad4.bak
+++ /dev/null
@@ -1,114 +0,0 @@
-#lang racket
-
-; Do boolean.rkt dodajemy pary
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent) ; <------------------- !!!
-(struct car-expr (e) #:transparent) ; <------------------- !!!
-(struct cdr-expr (e) #:transparent) ; <------------------- !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] ; <----------- !!!
- [(car-expr e) (expr? e)] ; <---------------------------------- !!!
- [(cdr-expr e) (expr? e)] ; <---------------------------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) ; <- !!!
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) ; <-- !!!
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) ; <-- !!!
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env) ; <---------------- !!!
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))] ; <--------------------- !!!
- [(cdr-expr e) (cdr (eval-env e env))])) ; <------------------- !!!
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(car (if true (cons 1 2) false)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad4.rkt b/Semestr 2/racket/lista6/lista8/zad4.rkt
deleted file mode 100644
index 7934435..0000000
--- a/Semestr 2/racket/lista6/lista8/zad4.rkt
+++ /dev/null
@@ -1,118 +0,0 @@
-#lang racket
-
-; Do boolean.rkt dodajemy pary
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent) ; <------------------- !!!
-(struct car-expr (e) #:transparent) ; <------------------- !!!
-(struct cdr-expr (e) #:transparent) ; <------------------- !!!
-(struct is-pair (e) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] ; <----------- !!!
- [(car-expr e) (expr? e)] ; <---------------------------------- !!!
- [(cdr-expr e) (expr? e)] ; <---------------------------------- !!!
- [(is-pair e) (expr? e)]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) ; <- !!!
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) ; <-- !!!
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) ; <-- !!!
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'pair?))
- (is-pair (parse (second q)))]))
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env) ; <---------------- !!!
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))] ; <--------------------- !!!
- [(cdr-expr e) (cdr (eval-env e env))] ; <------------------- !!!
- [(is-pair e) (cons? (eval-env e env))]))
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(car (if true (cons 1 2) false)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad5.bak b/Semestr 2/racket/lista6/lista8/zad5.bak
deleted file mode 100644
index 6f1f7b4..0000000
--- a/Semestr 2/racket/lista6/lista8/zad5.bak
+++ /dev/null
@@ -1 +0,0 @@
-#lang racket
diff --git a/Semestr 2/racket/lista6/lista8/zad5.rkt b/Semestr 2/racket/lista6/lista8/zad5.rkt
deleted file mode 100644
index 721f5bf..0000000
--- a/Semestr 2/racket/lista6/lista8/zad5.rkt
+++ /dev/null
@@ -1,151 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct unop (op e) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (symbol? (first q)))
- (unop (first q) (parse (second q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- ['not not] ['car car] ['cdr cdr]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(unop op e) ((op->proc op) (eval-env e env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad6.bak b/Semestr 2/racket/lista6/lista8/zad6.bak
deleted file mode 100644
index 721f5bf..0000000
--- a/Semestr 2/racket/lista6/lista8/zad6.bak
+++ /dev/null
@@ -1,151 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct unop (op e) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (symbol? (first q)))
- (unop (first q) (parse (second q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- ['not not] ['car car] ['cdr cdr]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(unop op e) ((op->proc op) (eval-env e env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zad6.rkt b/Semestr 2/racket/lista6/lista8/zad6.rkt
deleted file mode 100644
index c7ea9f0..0000000
--- a/Semestr 2/racket/lista6/lista8/zad6.rkt
+++ /dev/null
@@ -1,171 +0,0 @@
-#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct unop (op e) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(unop op e) (and (symbol? op) (expr? e))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (cedar? f)
- (let ((letters (string->list (symbol->string f))))
- (and (> (length letters) 2)
- (eq? (first letters) #\c)
- (eq? (first (reverse letters)) #\r)
- (andmap (lambda (x) (or (eq? x #\a) (eq? x #\d)))
- (cdr letters)))))
-
-(define (get-cedar letters xs)
- (cond [(eq? (car letters) #\r) xs]
- [(eq? (car letters) #\a) (unop 'car (get-cedar (cdr letters) xs))]
- [(eq? (car letters) #\d) (unop 'cdr (get-cedar (cdr letters) xs))]))
-
-(define (cedar f xs)
- (let ((letters (string->list (symbol->string f))))
- (get-cedar (cdr (reverse letters)) xs)))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (eq? (length q) 2) (symbol? (first q))
- (cedar? (first q)))
- (cedar (first q) (parse (second q)))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (symbol? (first q)))
- (unop (first q) (parse (second q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- ['not not] ['car car] ['cdr cdr]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(unop op e) ((op->proc op) (eval-env e env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/lista8/zadanie.rkt b/Semestr 2/racket/lista6/lista8/zadanie.rkt
deleted file mode 100644
index 0960f21..0000000
--- a/Semestr 2/racket/lista6/lista8/zadanie.rkt
+++ /dev/null
@@ -1,98 +0,0 @@
-#lang racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))] ; <----------------- !!!
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef) ; <--------------------------------------- !!!
- (and (expr? eb) (expr? et) (expr? ef))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)] ; <---------------------------- !!!
- [(eq? q 'false) (const false)] ; <---------------------------- !!!
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!!
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(define (value? v)
- (or (number? v) (boolean? v)))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!!
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!!
- (eval-env et env)
- (eval-env ef env))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-(define (test-eval) (eval (parse program))) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/solution.bak b/Semestr 2/racket/lista6/solution.bak
deleted file mode 100644
index 0805991..0000000
--- a/Semestr 2/racket/lista6/solution.bak
+++ /dev/null
@@ -1,27 +0,0 @@
-#lang racket
-
-(provide (struct-out complex) parse eval)
-
-(struct complex (re im) #:transparent)
-
-(define value?
- complex?)
-
-;; Ponizej znajduje sie interpreter zwyklych wyrazen arytmetycznych.
-;; Zadanie to zmodyfikowac go tak, by dzialal z liczbami zespolonymi.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /]))
-
-(define (eval e)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval l) (eval r))]))
-
-(define (parse q)
- (cond [(number? q) (const q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q) (parse (second q)) (parse (third q)))])) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/solution.rkt b/Semestr 2/racket/lista6/solution.rkt
deleted file mode 100644
index 59bdecd..0000000
--- a/Semestr 2/racket/lista6/solution.rkt
+++ /dev/null
@@ -1,73 +0,0 @@
-#lang racket
-
-(provide (struct-out complex) parse eval)
-
-(struct complex (re im) #:transparent)
-
-(define value?
- complex?)
-
-(define (comp-plus x y)
- (let ((x-re (complex-re x))
- (x-im (complex-im x))
- (y-re (complex-re y))
- (y-im (complex-im y)))
- (complex (+ x-re y-re) (+ x-im y-im))))
-
-(define (comp-minus x y)
- (let ((x-re (complex-re x))
- (x-im (complex-im x))
- (y-re (complex-re y))
- (y-im (complex-im y)))
- (complex (- x-re y-re) (- x-im y-im))))
-
-(define (comp-mult x y)
- (let ((x-re (complex-re x))
- (x-im (complex-im x))
- (y-re (complex-re y))
- (y-im (complex-im y)))
- (complex (- (* x-re y-re) (* x-im y-im)) (+ (* x-re y-im) (* x-im y-re)))))
-
-(define (comp-mod2 x)
- (let ((x-re (complex-re x))
- (x-im (complex-im x)))
- (complex (+ (* x-re x-re) (* x-im x-im)) 0)))
-
-(define (comp-mod x)
- (let ((mod2 (comp-mod2 x))
- (x-re (complex-re x)))
- (complex (sqrt x-re) 0)))
-
-(define (comp-div x y)
- (let* ((mod2 (complex-re (comp-mod2 y)))
- (x-re (complex-re x))
- (x-im (complex-im x))
- (y-re (complex-re y))
- (y-im (complex-im y))
- (real (+ (* x-re y-re) (* x-im y-im)))
- (imag (- (* x-im y-re) (* x-re y-im))))
- (complex (/ real mod2) (/ imag mod2))))
-
-
-;; Ponizej znajduje sie interpreter zwyklych wyrazen arytmetycznych.
-;; Zadanie to zmodyfikowac go tak, by dzialal z liczbami zespolonymi.
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (imaginary-unit? c)
- (eq? c 'i))
-
-(define (op->proc op)
- (match op ['+ comp-plus] ['- comp-minus] ['* comp-mult] ['/ comp-div]))
-
-(define (eval e)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval l) (eval r))]))
-
-(define (parse q)
- (cond [(number? q) (const (complex q 0))]
- [(imaginary-unit? q) (const (complex 0 1))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q) (parse (second q)) (parse (third q)))])) \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/zad11/solution.bak b/Semestr 2/racket/lista6/zad11/solution.bak
deleted file mode 100644
index f449481..0000000
--- a/Semestr 2/racket/lista6/zad11/solution.bak
+++ /dev/null
@@ -1,36 +0,0 @@
-#lang racket
-
-(provide (struct-out const) (struct-out binop) rpn->arith)
-
-;; -------------------------------
-;; Wyrazenia w odwr. not. polskiej
-;; -------------------------------
-
-(define (rpn-expr? e)
- (and (list? e)
- (pair? e)
- (andmap (lambda (x) (or (number? x) (member x '(+ - * /))))
- e)))
-
-;; ----------------------
-;; Wyrazenia arytmetyczne
-;; ----------------------
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (arith-expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r)
- (and (symbol? op) (arith-expr? l) (arith-expr? r))]
- [_ false]))
-
-;; ----------
-;; Kompilacja
-;; ----------
-
-(define (rpn->arith e)
- (error "TODO: Uzupelnij tutaj"))
-
-; Mozesz tez dodac jakies procedury pomocnicze i testy \ No newline at end of file
diff --git a/Semestr 2/racket/lista6/zad11/solution.rkt b/Semestr 2/racket/lista6/zad11/solution.rkt
deleted file mode 100644
index a44afe4..0000000
--- a/Semestr 2/racket/lista6/zad11/solution.rkt
+++ /dev/null
@@ -1,58 +0,0 @@
-#lang racket
-
-(provide (struct-out const) (struct-out binop) rpn->arith)
-
-;; -------------------------------
-;; Wyrazenia w odwr. not. polskiej
-;; -------------------------------
-
-(define (rpn-expr? e)
- (and (list? e)
- (pair? e)
- (andmap (lambda (x) (or (number? x) (member x '(+ - * /))))
- e)))
-
-;; ----------------------
-;; Wyrazenia arytmetyczne
-;; ----------------------
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-
-(define (arith-expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r)
- (and (symbol? op) (arith-expr? l) (arith-expr? r))]
- [_ false]))
-
-;; ----------
-;; Kompilacja
-;; ----------
-
-(struct stack (xs))
-
-(define empty-stack (stack null))
-(define (empty-stack? s) (null? (stack-xs s)))
-(define (top s) (car (stack-xs s)))
-(define (push a s) (stack (cons a (stack-xs s))))
-(define (pop s) (stack (cdr (stack-xs s))))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /]))
-
-(define (eval-am e s)
- (cond [(null? e)
- (top s)]
- [(number? (car e))
- (eval-am (cdr e) (push (const (car e)) s))]
- [(symbol? (car e))
- (eval-am (cdr e)
- (push (binop (car e) (top (pop s)) (top s))
- (pop (pop s))))]))
-
-(define (rpn->arith e)
- (eval-am e empty-stack))
-
-
-; Mozesz tez dodac jakies procedury pomocnicze i testy \ No newline at end of file
diff --git a/Semestr 2/racket/luk.rkt b/Semestr 2/racket/luk.rkt
deleted file mode 100644
index cc319a5..0000000
--- a/Semestr 2/racket/luk.rkt
+++ /dev/null
@@ -1,137 +0,0 @@
-#lang typed/racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-(provide parse typecheck)
-
-(define-type Value (U Boolean Real))
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type ArithSymbol (U '+ '- '* '/))
-(define-type LogicSymbol (U 'and 'or))
-(define-type CompSymbol (U '< '= '> '<= '>=))
-(define-type BinomSymbol (U ArithSymbol LogicSymbol CompSymbol))
-
-(define-type Binop-list (List BinomSymbol Any Any))
-(define-type Let-list (List 'let (List Symbol Any) Any))
-(define-type If-list (List 'if Any Any Any))
-
-(define-predicate Binop-list? Binop-list)
-(define-predicate Let-list? Let-list)
-(define-predicate If-list? If-list)
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinomSymbol] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-(define-predicate Value? Value)
-(define-predicate Expr? Expr)
-(define-predicate BinomSymbol? BinomSymbol)
-(define-predicate ArithSymbol? ArithSymbol)
-(define-predicate LogicSymbol? LogicSymbol)
-(define-predicate CompSymbol? CompSymbol)
-(define-predicate BinomValue? BinomValue)
-
-
-
-(: parse (-> Any Expr))
-(define (parse q)
- (cond
- [(real? q) (const q)]
- [(eq? q 'true) (const true)] ; <---------------------------- !!!
- [(eq? q 'false) (const false)] ; <---------------------------- !!!
- [(symbol? q) (var-expr q)]
- [(Let-list? q)
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(If-list? q) ; <--- !!!
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(Binop-list? q)
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [else (error "Blad parsowania" q)]))
-
-
-
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-(define-type EType ( U 'real 'boolean ) )
-(define-type Env (Listof (Pairof Symbol EType)))
-(define-predicate Env? Env)
-(struct environ ([xs : Env]))
-
-(: env-empty environ)
-(define env-empty (environ null))
-(: env-add (-> Symbol EType environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(: env-lookup (-> Symbol environ (U EType #f)))
-(define (env-lookup x env)
- (: assoc-lookup (-> Env EType))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-
-(: typecheck (-> Expr (U EType #f)))
-(define (typecheck q)
- (: give (-> Expr environ (U EType #f)))
- (define (give q envi)
- (cond
- [(const? q) (if (boolean? (const-val q)) 'boolean 'real)]
- [(var-expr? q) (env-lookup (var-expr-id q) envi)]
- [(let-expr? q)
- (let ([p (give (let-expr-e1 q) envi)]) (if (false? p) #f (give (let-expr-e2 q) (env-add (let-expr-id q) p envi))))]
- [(binop? q)
- (cond
- ([ArithSymbol? (binop-op q)] (if (and (eq? 'real (give (binop-l q) envi)) (eq? 'real (give (binop-r q) envi))) 'real #f))
- ([LogicSymbol? (binop-op q)] (if (and (eq? 'boolean (give (binop-l q) envi)) (eq? 'boolean (give (binop-r q) envi))) 'boolean #f))
- ([CompSymbol? (binop-op q)] (if (and (eq? 'real (give (binop-l q) envi)) (eq? 'real (give (binop-r q) envi))) 'boolean #f))
- [else #f])]
- [(if-expr? q)
- (if (and (eq? 'real (if-expr-eb q))
- (eq? (give (if-expr-et q) envi) (give (if-expr-ef q) envi)))
- (give (if-expr-et q) envi)
- #f)]
- [else #f]))
-
-
- (give q env-empty))
-
-
-
-(define program2
- '(if true
- (let [x 5] (+ 5 false))
- (/ 2 2)))
-
-(define program3
- '(let [x (+ 2 3)]
- (let [y (< 2 3)]
- (+ x y))))
-
-(define program4
- '(let [x (and true true)] x))
-
-(define wtf
- '(and true true))
-
-(typecheck (parse program2))
-(typecheck (parse program3))
-(typecheck (parse program4))
diff --git a/Semestr 2/racket/rac.rkt b/Semestr 2/racket/rac.rkt
deleted file mode 100644
index 8300208..0000000
--- a/Semestr 2/racket/rac.rkt
+++ /dev/null
@@ -1,371 +0,0 @@
-#reader(lib"read.ss""wxme")WXME0109 ##
-#|
- This file uses the GRacket editor format.
- Open this file in DrRacket version 7.6 or later to read it.
-
- Most likely, it was created by saving a program in DrRacket,
- and it probably contains a program with non-text elements
- (such as images or comment boxes).
-
- http://racket-lang.org/
-|#
- 33 7 #"wxtext\0"
-3 1 6 #"wxtab\0"
-1 1 8 #"wximage\0"
-2 0 8 #"wxmedia\0"
-4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0"
-1 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0"
-1 0 68
-(0
- #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr"
- #"lib\"))\0"
-) 1 0 16 #"drscheme:number\0"
-3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0"
-1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0"
-1 0 93
-(1
- #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni"
- #"pclass-wxme.ss\" \"framework\"))\0"
-) 0 0 43 #"(lib \"collapsed-snipclass.ss\" \"framework\")\0"
-0 0 19 #"drscheme:sexp-snip\0"
-0 0 29 #"drscheme:bindings-snipclass%\0"
-1 0 101
-(2
- #"((lib \"ellipsis-snip.rkt\" \"drracket\" \"private\") (lib \"ellipsi"
- #"s-snip-wxme.rkt\" \"drracket\" \"private\"))\0"
-) 2 0 88
-(3
- #"((lib \"pict-snip.rkt\" \"drracket\" \"private\") (lib \"pict-snip.r"
- #"kt\" \"drracket\" \"private\"))\0"
-) 0 0 55
-#"((lib \"snip.rkt\" \"pict\") (lib \"snip-wxme.rkt\" \"pict\"))\0"
-1 0 34 #"(lib \"bullet-snip.rkt\" \"browser\")\0"
-0 0 25 #"(lib \"matrix.ss\" \"htdp\")\0"
-1 0 22 #"drscheme:lambda-snip%\0"
-1 0 29 #"drclickable-string-snipclass\0"
-0 0 26 #"drracket:spacer-snipclass\0"
-0 0 57
-#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0"
-1 0 26 #"drscheme:pict-value-snip%\0"
-0 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0"
-1 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0"
-2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0"
-1 0 18 #"drscheme:xml-snip\0"
-1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0"
-1 0 21 #"drscheme:scheme-snip\0"
-2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0"
-1 0 10 #"text-box%\0"
-1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0"
-1 0 1 6 #"wxloc\0"
- 0 0 64 0 1 #"\0"
-0 75 1 #"\0"
-0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9
-#"Standard\0"
-0 75 12 #"Courier New\0"
-0 26 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24
-#"framework:default-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15
-#"text:ports out\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1
--1 2 15 #"text:ports err\0"
-0 -1 1 #"\0"
-1 0 -1 -1 93 -1 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17
-#"text:ports value\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1
--1 2 27 #"Matching Parenthesis Style\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1
--1 2 1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37
-#"framework:syntax-color:scheme:symbol\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38
-#"framework:syntax-color:scheme:keyword\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2
-38 #"framework:syntax-color:scheme:comment\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37
-#"framework:syntax-color:scheme:string\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 35
-#"framework:syntax-color:scheme:text\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39
-#"framework:syntax-color:scheme:constant\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 49
-#"framework:syntax-color:scheme:hash-colon-keyword\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42
-#"framework:syntax-color:scheme:parenthesis\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36
-#"framework:syntax-color:scheme:error\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36
-#"framework:syntax-color:scheme:other\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 16
-#"Misspelled Text\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2
-38 #"drracket:check-syntax:lexically-bound\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28
-#"drracket:check-syntax:set!d\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37
-#"drracket:check-syntax:unused-require\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36
-#"drracket:check-syntax:free-variable\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31
-#"drracket:check-syntax:imported\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47
-#"drracket:check-syntax:my-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50
-#"drracket:check-syntax:their-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48
-#"drracket:check-syntax:unk-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2
-49 #"drracket:check-syntax:both-obligation-style-pref\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2
-26 #"plt:htdp:test-coverage-on\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1
-#"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27
-#"plt:htdp:test-coverage-off\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1
-#"\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 4 4 #"XML\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 2 37 #"plt:module-language:test-coverage-on\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 38
-#"plt:module-language:test-coverage-off\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 0 36
-#"mrlib/syntax-browser:subtitle-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 36 36 140 255 255 255 -1
--1 0 42 #"mrlib/syntax-browser:focused-syntax-color\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 34 139 34 255 255 255 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 4 1 #"\0"
-0 -1 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1
--1 4 1 #"\0"
-0 71 1 #"\0"
-1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1
--1 2 1 #"\0"
-0 70 1 #"\0"
-1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 148 0 211 0 0 0 -1
--1 2 1 #"\0"
-0 -1 1 #"\0"
-1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1
--1 0 1 #"\0"
-0 -1 1 #"\0"
-0 12 -1 -1 -1 -1 -1 -1 0 0 1 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 2 1 #"\0"
-0 -1 1 #"\0"
-0 12 -1 -1 -1 -1 -1 -1 0 0 1 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0
--1 -1 2 1 #"\0"
-0 -1 1 #"\0"
-1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 4 1
-#"\0"
-0 -1 1 #"\0"
-1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 255 255 0 -1 -1
- 0 122 0 28 3 12 #"#lang racket"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 6 #"define"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"fringe"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 15 3 4 #"cond"
-0 0 24 3 3 #" (("
-0 0 14 3 5 #"null?"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 2 #") "
-0 0 14 3 4 #"null"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 10 #" (("
-0 0 14 3 3 #"not"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"pair?"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 4 #")) ("
-0 0 14 3 4 #"list"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 14 3 4 #"else"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"append"
-0 0 24 3 2 #" ("
-0 0 14 3 6 #"fringe"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"car"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 2 #"))"
-0 0 24 29 1 #"\n"
-0 0 24 3 23 #" ("
-0 0 14 3 6 #"fringe"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"tree"
-0 0 24 3 6 #"))))))"
-0 0 24 29 1 #"\n"
-0 0 24 29 1 #"\n"
-0 0 24 3 1 #"("
-0 0 15 3 6 #"define"
-0 0 24 3 2 #" ("
-0 0 14 3 7 #"subsets"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"s"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 3 #" ("
-0 0 14 3 2 #"if"
-0 0 24 3 2 #" ("
-0 0 14 3 5 #"null?"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"s"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 7 #" ("
-0 0 14 3 4 #"list"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"null"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 7 #" ("
-0 0 15 3 3 #"let"
-0 0 24 3 3 #" (("
-0 0 14 3 4 #"rest"
-0 0 24 3 2 #" ("
-0 0 14 3 7 #"subsets"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"cdr"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"s"
-0 0 24 3 4 #"))))"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 14 3 7 #"display"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"s"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 14 3 7 #"newline"
-0 0 24 3 1 #")"
-0 0 24 29 1 #"\n"
-0 0 24 3 9 #" ("
-0 0 14 3 6 #"append"
-0 0 24 3 1 #" "
-0 0 14 3 4 #"rest"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"map"
-0 0 24 3 2 #" ("
-0 0 15 3 6 #"lambda"
-0 0 24 3 2 #" ("
-0 0 14 3 1 #"x"
-0 0 24 3 3 #") ("
-0 0 14 3 4 #"cons"
-0 0 24 3 2 #" ("
-0 0 14 3 3 #"car"
-0 0 24 3 1 #" "
-0 0 14 3 1 #"s"
-0 0 24 3 2 #") "
-0 0 14 3 1 #"x"
-0 0 24 3 3 #")) "
-0 0 14 3 4 #"rest"
-0 0 24 3 5 #")))))"
-0 0 24 29 1 #"\n"
-0 0 24 3 2 #" "
-0 0
diff --git a/Semestr 2/racket/solution.rkt b/Semestr 2/racket/solution.rkt
deleted file mode 100644
index 3643668..0000000
--- a/Semestr 2/racket/solution.rkt
+++ /dev/null
@@ -1,14 +0,0 @@
-#lang racket
-
-(provide heapsort) (require "leftist.rkt")
-
-(define (heapsort xs)
- (define (create-heap xs res)
- (if (null? xs)
- res
- (create-heap (cdr xs) (heap-insert (cons (car xs) (car xs)) res))))
- (define (heap-to-list h)
- (if (heap-empty? h)
- null
- (cons (elem-val (heap-min h)) (heap-to-list (heap-pop h)))))
- (heap-to-list (create-heap xs empty-heap))) \ No newline at end of file
diff --git a/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg b/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg
deleted file mode 100644
index 3e15629..0000000
--- a/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg b/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg
deleted file mode 100644
index cf85459..0000000
--- a/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg b/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg
deleted file mode 100644
index d650007..0000000
--- a/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg b/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg
deleted file mode 100644
index 824dacf..0000000
--- a/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg b/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg
deleted file mode 100644
index 8ce9801..0000000
--- a/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf b/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf
deleted file mode 100644
index 468dd99..0000000
--- a/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf
+++ /dev/null
@@ -1,3629 +0,0 @@
-%PDF-1.7
-%
-1 0 obj
-<<
-/AcroForm 2 0 R
-/Lang (pl-PL)
-/MarkInfo <<
-/Marked true
->>
-/Metadata 3 0 R
-/Pages 4 0 R
-/StructTreeRoot 5 0 R
-/Type /Catalog
-/ViewerPreferences 6 0 R
-/OpenAction 7 0 R
->>
-endobj
-8 0 obj
-<<
-/Author (Kkudalla)
-/CreationDate (D:20200706133743+02'00')
-/Creator <4D6963726F736F6674AE20576F726420646C61204D6963726F736F667420333635>
-/ModDate (D:20200706133807+02'00')
-/Producer <4D6963726F736F6674AE20576F726420646C61204D6963726F736F667420333635>
->>
-endobj
-2 0 obj
-<<
-/DA (/Helv 0 Tf 0 g )
-/DR <<
-/Encoding <<
-/PDFDocEncoding 9 0 R
->>
-/Font <<
-/Helv 10 0 R
-/MyriadPro-Regular 11 0 R
-/ZaDb 12 0 R
->>
->>
-/Fields [13 0 R]
-/SigFlags 3
->>
-endobj
-3 0 obj
-<<
-/Length 3324
-/Subtype /XML
-/Type /Metadata
->>
-stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c017 91.164374, 2020/03/05-20:41:30 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:xmp="http://ns.adobe.com/xap/1.0/"
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
- <pdf:Producer>Microsoft® Word dla Microsoft 365</pdf:Producer>
- <dc:format>application/pdf</dc:format>
- <dc:creator>
- <rdf:Seq>
- <rdf:li>Kkudalla</rdf:li>
- </rdf:Seq>
- </dc:creator>
- <xmp:CreatorTool>Microsoft® Word dla Microsoft 365</xmp:CreatorTool>
- <xmp:CreateDate>2020-07-06T13:37:43+02:00</xmp:CreateDate>
- <xmp:ModifyDate>2020-07-06T13:38:07+02:00</xmp:ModifyDate>
- <xmp:MetadataDate>2020-07-06T13:38:07+02:00</xmp:MetadataDate>
- <xmpMM:DocumentID>uuid:AF6C3520-A81E-46E5-BE7E-22ACA2CA4797</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:39ce6e44-37dc-4684-94d5-a1c3cb352be5</xmpMM:InstanceID>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?>
-endstream
-endobj
-4 0 obj
-<<
-/Count 2
-/Kids [14 0 R 15 0 R]
-/Type /Pages
->>
-endobj
-5 0 obj
-<<
-/IDTree 16 0 R
-/K [17 0 R]
-/ParentTree 18 0 R
-/ParentTreeNextKey 2
-/RoleMap 19 0 R
-/Type /StructTreeRoot
->>
-endobj
-6 0 obj
-<<
-/DisplayDocTitle true
->>
-endobj
-7 0 obj
-<<
-/Type /Action
-/S /JavaScript
-/JS (this.print\({bUI:true,bSilent:false,bShrinkToFit:true}\);)
->>
-endobj
-9 0 obj
-<<
-/Differences [24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39
-/quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash
-/florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft
-/quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron
-/dotlessi /lslash /oe /scaron /zcaron 160 /Euro 164 /currency 166
-/brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron
-/degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior
-/ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde
-/Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute
-/Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
-/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute
-/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis
-/igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde
-/odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
-/Type /Encoding
->>
-endobj
-10 0 obj
-<<
-/BaseFont /Helvetica
-/Encoding 9 0 R
-/Name /Helv
-/Subtype /Type1
-/Type /Font
->>
-endobj
-11 0 obj
-<<
-/BaseFont /MyriadPro-Regular
-/Encoding /WinAnsiEncoding
-/FirstChar 0
-/FontDescriptor 20 0 R
-/LastChar 255
-/Subtype /Type1
-/Type /Font
-/Widths [500 500 500 500 500 500 500 500 500 500
-500 500 500 500 500 500 500 500 500 500
-500 500 500 500 500 500 500 500 500 500
-500 500 212 230 337 497 513 792 605 188
-284 284 415 596 207 307 207 343 513 513
-513 513 513 513 513 513 513 513 207 207
-596 596 596 406 737 612 542 580 666 492
-487 646 652 239 370 542 472 804 658 689
-532 689 538 493 497 647 558 846 571 541
-553 284 341 284 596 500 300 482 569 448
-564 501 292 559 555 234 243 469 236 834
-555 549 569 563 327 396 331 551 481 736
-463 471 428 284 239 284 596 282 513 282
-207 513 356 1000 500 500 300 1156 493 255
-894 282 553 282 282 207 207 354 354 282
-500 1000 300 619 396 255 863 282 428 541
-212 230 513 513 513 513 239 519 300 677
-346 419 596 307 419 300 318 596 311 305
-300 553 512 207 300 244 355 419 759 759
-759 406 612 612 612 612 612 612 788 580
-492 492 492 492 239 239 239 239 671 658
-689 689 689 689 689 596 689 647 647 647
-647 541 531 548 482 482 482 482 482 482
-773 448 501 501 501 501 234 234 234 234
-541 555 549 549 549 549 549 596 549 551
-551 551 551 471 569 471]
->>
-endobj
-12 0 obj
-<<
-/BaseFont /ZapfDingbats
-/Name /ZaDb
-/Subtype /Type1
-/Type /Font
->>
-endobj
-13 0 obj
-<<
-/AP <<
-/N 21 0 R
->>
-/DA (/MyriadPro-Regular 0 Tf 0 Tz 0 g)
-/F 132
-/FT /Sig
-/MK <<
->>
-/P 15 0 R
-/Rect [415.34 499.989 518.347 549.339]
-/Subtype /Widget
-/T (Signature2)
-/Type /Annot
-/V 22 0 R
->>
-endobj
-14 0 obj
-<<
-/Contents [23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R]
-/CropBox [0 0 595.2 841.8]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.2 841.8]
-/Parent 4 0 R
-/Resources <<
-/ExtGState <<
-/GS10 31 0 R
-/GS11 32 0 R
->>
-/Font <<
-/F1 33 0 R
-/F2 34 0 R
-/F3 35 0 R
-/F4 36 0 R
-/F5 37 0 R
-/F6 38 0 R
-/F7 39 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
->>
-/Rotate 0
-/StructParents 0
-/Tabs /S
-/Type /Page
->>
-endobj
-15 0 obj
-<<
-/Annots [13 0 R]
-/Contents 40 0 R
-/CropBox [0 0 595.2 841.8]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.2 841.8]
-/Parent 4 0 R
-/Resources <<
-/ExtGState <<
-/GS10 31 0 R
-/GS11 32 0 R
->>
-/Font <<
-/F1 33 0 R
-/F2 34 0 R
-/F3 35 0 R
-/F4 36 0 R
-/F5 37 0 R
-/F7 39 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
->>
-/Rotate 0
-/StructParents 1
-/Tabs /S
-/Type /Page
->>
-endobj
-16 0 obj
-<<
-/Names [(Note 1) 41 0 R]
->>
-endobj
-17 0 obj
-<<
-/K [42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R
-52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R
-62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 41 0 R 68 0 R 69 0 R 70 0 R
-71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R
-81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R
-91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R]
-/P 5 0 R
-/S /Document
-/Type /StructElem
->>
-endobj
-18 0 obj
-<<
-/Nums [0 [100 0 R 101 0 R 102 0 R 103 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R
-51 0 R 52 0 R 53 0 R 104 0 R 105 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R
-60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 106 0 R 107 0 R 108 0 R
-109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R
-119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 68 0 R 69 0 R 70 0 R
-71 0 R 126 0 R 127 0 R 73 0 R 74 0 R 75 0 R 128 0 R 76 0 R 129 0 R 77 0 R
-130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R]
- 1 [136 0 R 137 0 R 78 0 R 79 0 R 80 0 R 138 0 R 139 0 R 140 0 R 82 0 R 83 0 R
-84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 141 0 R 142 0 R 90 0 R 91 0 R 92 0 R
-93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R]
-]
->>
-endobj
-19 0 obj
-<<
-/Annotation /Sect
-/Artifact /Sect
-/Chart /Sect
-/Chartsheet /Part
-/Diagram /Figure
-/Dialogsheet /Part
-/Endnote /Note
-/Footer /Sect
-/Footnote /Note
-/Header /Sect
-/InlineShape /Sect
-/Macrosheet /Part
-/Slide /Part
-/Textbox /Sect
-/Workbook /Document
-/Worksheet /Part
->>
-endobj
-20 0 obj
-<<
-/Ascent 952
-/CapHeight 674
-/CharSet (/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis)
-/Descent -250
-/Flags 32
-/FontBBox [-157 -250 1126 952]
-/FontFamily (Myriad Pro)
-/FontFile3 143 0 R
-/FontName /MyriadPro-Regular
-/FontStretch /Normal
-/FontWeight 400
-/ItalicAngle 0
-/StemV 88
-/Type /FontDescriptor
-/XHeight 484
->>
-endobj
-21 0 obj
-<<
-/Length 7
-/BBox [0.0 0.0 103.007 49.3506]
-/Resources <<
-/XObject <<
-/FRM 144 0 R
->>
->>
-/Subtype /Form
-/Type /XObject
->>
-stream
-/FRM Do
-endstream
-endobj
-22 0 obj
-<<
-/ByteRange [0 148276 206888 135679]
-/Contents <30826F0406092A864886F70D010702A0826EF530826EF1020101310F300D06096086480165030402010500300B06092A864886F70D010701A0820DAD308206943082047CA00302010202141A5734B0D472D251E1D37CFE3D796AC117102490300D06092A864886F70D01010D0500306F310B300906035504061302504C311D301B060355040A0C144E61726F646F77792042616E6B20506F6C736B693126302406035504030C1D4E61726F646F77652043656E7472756D20436572747966696B61636A693119301706035504610C10564154504C2D35323530303038313938301E170D3137303231343132323631395A170D3238303231343233353935395A306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F4365727430820222300D06092A864886F70D01010105000382020F003082020A0282020100D0F7EAC0E3C610864FF50A76823A98316BAB7F62BAE9ACC87C6BCACBD45CDE6539990F480FC14CBC2578762236229D8C7A0A96BB19DE7DD6B24C4AF83F7CD22A8DDD67C61FA595D711B92C33089C6274AF15CBF99AAFF628C3035CF3381BF9D343B7AB54861E812D6D0BD606AAB494FF3213B35D0E3DDF25B8282D301B0B19748548DDC4CA00B597D89E606FB6AA46386CC4F6574D77F26B5A93C4024905415D30D89AF4FD45C3E577C0E3A09BC89CE95FB350AD44BBF156053F2269BA4958230AA8C7E3A3F83C1A1F5691941371F28AD0539B621A2AD239E8BB744275CDA956D6519D726091782F58A91081DE53CC8ABAEC72B0DA8F4ADAE0D1047883EE0D831016C709319A76A8D4E6FE6F088E5D9E5C42413D79F7C9392F2C6D19EEFC054D6685CE8089D2E1C5CCD2EBD47F0966CB6701CF05E012C84EAD6D00FA7F797956E2A55BBF8019EF1CFE1C0401979ED852ACB789B26453DE8BA56416A2E2836231457C0A002302979BA7F73D322C5B71B5444315D0323D0F50AD0AEC5F47F6F88B14FCFA6A6EB5841D42130B5B6112B380F45B8DD7B0C9FF6EBA0DE17CC4F17F560A39D120A6DB06A731E88E45013C14210A841300C096D3A647050341A252933360AEC26EB6DE2E419791B74B4EA1FF1A0280B30EB904BB427E92ACCC6C36F19960C87557A0AC2DE74EBD682816EB38A1FDA4C6EB7B9D0C66E28028C58D9A761B0203010001A382012630820122300F0603551D130101FF040530030101FF3081AC0603551D230481A43081A1801429B3C8C4DFA387F866051258FD462AB8980D7987A173A471306F310B300906035504061302504C311D301B060355040A0C144E61726F646F77792042616E6B20506F6C736B693126302406035504030C1D4E61726F646F77652043656E7472756D20436572747966696B61636A693119301706035504610C10564154504C2D35323530303038313938821440F8F78AB0E364105691C8D9E02CF8C1C6400A4630310603551D200101FF0427302530230604551D2000301B301906082B06010505070201160D7777772E6E63636572742E706C300E0603551D0F0101FF040403020106301D0603551D0E0416041474627099FF1B603BC464B5841FA3150C5CCB5FBD300D06092A864886F70D01010D050003820201007FA1A8393E66C6D57B7A372DB71A7CB0335A77A5C394660F6C3D33931E42A25FA7ACD09F5751276C6840A5FD787468A795B68A8C44F2D195FAA3BFFE48AEB100495DB87AEC76F87B0AE5F8992B217C31C8E3C4EAF9CCEF41AFF0F5B214CEBD22F2ED9FB94C77E947F58D22F9063D3B2A8B8E55B478AA4DAEED3571C70AC31836A3EBECB2F5B5C6590817F1FB629FAF0699FE4CC1312FB01D50EE8D1A8F352582AB69AAA14FDE77C824D51BC722A092BFDB94737A001E3F4521F7268611ABEE5F6F423B8788AAD3496660809564452C174583AFAE84297E460EB56FDE4A47534D946255A3DA43862BEE8EC265013C0260ED039D76A7EF0EB35411EB997A47BB5C7BB1763B458CAD98B5CC3457150576231263EE3D6EACC2DF24C888DF9CC135088BE1B25E51CB031F739A5542815658BABC4DD3EE120A8DC77837E43ED3CA03382916363D5939FBDADD13AB04B20EFB1A956604CBD53EE66461442CA65D55B52A05D50E9BE575F9BB6E96EB9B21A33254E6A87ED5248670BFC11DD7ABEE4F38555C9FE3D8896A49D201768F031ED506589A5DE3B4205B58BDB96A5E68AE3CAE57A3181AC697B9C4F0FE654BBE8D5C9B453BE021F38A3E524C2321EE7D1B908791472F8E7E12803D1BC08CBCE5843FA69CABE0B2137CFDC6FB00E1FBED8B6274CA377D851F41EF3655DB229F778C004DB027A5F805DF844C7B0CB09F21FAC5E1D130820711308204F9A003020102020B51434130335F0200040400300D06092A864886F70D01010B0500306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274301E170D3139303831393039323932375A170D3231303831383039323932375A30733122302006035504030C1941445249414E41204557454C494E41204D454459C583534B41311A301806035504050C11504E4F504C2D38303037313130383036353112301006035504040C094D454459C583534B413110300E060355042A0C0741445249414E41310B300906035504060C02504C308201A2300D06092A864886F70D01010105000382018F003082018A028201810097B18BD986A1CC9EF8163917F6ECC60D9D3EAC7266A4562EC61011591BE7118EB1BA94D3A86100BF05D410876698C1AD52F382358A28EF00F26F3E6AF26F86F78EF4EE24B96F4395DC408E6E18FAADA9F09EC5F3C47B007709FBB22783818C084C34B6E05F2C3EFBF3E5131F43F6FFEDC31750D911F753D7A9AD3AD4C6B3C0C1C379B7F5B93908D7EE5691C1E0D0C0E334943C65B47AFEA66EE5CB81A86461BBA4BB92363266A35B1D6B903F7BD342EB1B5463E90D6FEDED6E9B6F7382945FB0B88F8D8AB7AD4852CD4406CD2FD9FC9CBE99449BEBE608EC05A363BB0FF9147B066157E045C7A965852F379F2F7A36674F1894D57ACA5417074E0DAAA27D008477C0778C38CA88DAD6A6DEE9FE110F5CC5004D40274DB3CE8F084324E8E371518349339E19DE449A97AEE4517ADF5A4BD44F0595D1660575A1619EBFC77E9FA3261CCFEE30B0E508E1470719F93C148DE5A0821074AE7468E40B1E04B7320F4D2A60787B5D7BA679666E44AB7580111579FB17DE2E6948CB88C5C38C0695E4EB0203010001A382022830820224301F0603551D2304183016801474627099FF1B603BC464B5841FA3150C5CCB5FBD301D0603551D0E041604149B410D4D610FB58C12AF87E64658A00A50F02DBB300F0603551D130101FF04053003010100300E0603551D0F0101FF0404030206403081D70603551D200101FF0481CC3081C93081B1060A2A84680186F87F0102023081A2303006082B060105050702011624687474703A2F2F7777772E6575726F636572742E706C2F7265706F7A79746F7269756D2F306E06082B0601050507020230620C60436572747966696B617420777973746177696F6E79207A676F646E6965207A207A61736164616D69206F706973616E796D69207720646F6B756D656E63696520506F6C6974796B6120436572747966696B61636A6920776572736A6120322E303009060704008BEC4001023008060604008F7A010230310603551D1F042A30283026A024A0228620687474703A2F2F63726C2E6575726F636572742E706C2F71636130332E63726C307B06082B06010505070101046F306D302806082B06010505073001861C687474703A2F2F63726C2E6575726F636572742E706C2F4F4353502F304106082B06010505073002863568747470733A2F2F6575726F636572742E706C2F7075622F507261776F2F51434130335F4575726F636572745F323031372E646572303706082B06010505070103042B30293008060604008E4601013008060604008E4601043013060604008E4601063009060704008E46010601300D06092A864886F70D01010B05000382020100A383702A04DD1450F0B2B864D20CC314D405F80400F730A8D5B2E655AF12E656EFE76CAD4FA528E7CDE08C8688FFC33149132B18C10801EAF095C221EDB494CEF54643EAA0474FEBDCE4F4AE8ECCA634D162E0C0584C58357CF643FA00CF6A8318A3CCE94AFB26B79DB3D8FDA6AF6A5954376CB888789A2C681E430510B09F526A05C437B742D2986490E867BBB630260CB38ACFEDB1914E4148B29F40BA937171B2526D8E3BCE3E8F0F2475E22D45B45A3213E69A23DB126B0CE635D63D86145807B17C14F37500B147B3FFE26A5C6BBCEB8976083285F3D0C1982E3A162CD7E8702D172DADD4204BC94D131F8C2CDDF152361F15CE73E33177996BEE537AB9ED4B6B46F8C3509BC309468BC1012CA68D7C8BDA8870C5855440FF01318B5F955BA513B1454C80F4651C2A329836FEF680106EF47DF0CC70EE8A101B061BC50A9CDDD5C936FC5CC119137E89B17BD9A7DB936E74B9E8CDBBB728953B7831A2DD954EF92148C3BCA8C22006D1CBA79D383F9A5C915B6C721D46134C307BE59026F779D90DD2F69DC8D4F6E1E072855FF2368D611627F3925C3706D491D58C35E1809866D1A8C6D89D887D381D8828BEBBE16A39310387EDC94D6B6AD2150DE7134036FB7A4BA34761ABE66A2EC42D86F53ACA59A277ACA40C5C292E6919DCB55B6B04D87D60BE1436EC62F57FBE3DC941F2FB5ACE402D5203AE60F97B004EB7933182611B30826117020101307E306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274020B51434130335F0200040400300D06096086480165030402010500A0825EEE301806092A864886F70D010903310B06092A864886F70D010701302F06092A864886F70D010904312204202185C186075BD6983C93408D3816E6C8D99987A15F2BEB7666EA73EC13645AFB30825E9F06092A864886F72F01010831825E9030825E8CA0825E8830825E8430825E8030825C68020101300D06092A864886F70D01010B0500306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274170D3230303730363035303030315A170D3230303730373035303030315A30825B91302402023634170D3138303230313130313333395A300F300D0603551D1501010004030A0105302402023633170D3138303230313130313335325A300F300D0603551D1501010004030A0105302402023639170D3138303230323132303031375A300F300D0603551D1501010004030A010130250203313132170D3138303532323134303633335A300F300D0603551D1501010004030A010530250203313936170D3138303730333130323735375A300F300D0603551D1501010004030A010130250203333239170D3138303730393134323634375A300F300D0603551D1501010004030A01053026020431313332170D3138303732353037343532345A300F300D0603551D1501010004030A01053026020431313238170D3138303732353037343634315A300F300D0603551D1501010004030A010530250203353436170D3138303930333038343531395A300F300D0603551D1501010004030A01033026020431383237170D3138303930353134333731355A300F300D0603551D1501010004030A01003026020431383236170D3138303930363037313634355A300F300D0603551D1501010004030A01043026020431383235170D3138303930363037313734355A300F300D0603551D1501010004030A01043026020431343437170D3138303931323131343733345A300F300D0603551D1501010004030A010430250203343739170D3138303931333035343032305A300F300D0603551D1501010004030A01053026020432343935170D3138303931393035313935385A300F300D0603551D1501010004030A01043026020433373330170D3138313032393132333432375A300F300D0603551D1501010004030A01043026020432373439170D3138313130353038313334305A300F300D0603551D1501010004030A01053026020433383134170D3138313130383132323533335A300F300D0603551D1501010004030A01043026020431303633170D3138313130383132323534305A300F300D0603551D1501010004030A01043026020436353436170D3139303131313132333931355A300F300D0603551D1501010004030A01043026020434363939170D3139303131353138313632325A300F300D0603551D1501010004030A01013026020433333232170D3139303131363133343735325A300F300D0603551D1501010004030A0105302402023833170D3139303133303133343033355A300F300D0603551D1501010004030A010530250203353139170D3139303230373130353331355A300F300D0603551D1501010004030A01013026020433343632170D3139303230383130343235315A300F300D0603551D1501010004030A01013026020437383832170D3139303232323038343332395A300F300D0603551D1501010004030A01013026020439363937170D3139303232373133343833315A300F300D0603551D1501010004030A01013026020435373232170D3139303331353039313030355A300F300D0603551D1501010004030A01043026020435373234170D3139303331353039313034305A300F300D0603551D1501010004030A0104302702053130313839170D3139303331353039313132355A300F300D0603551D1501010004030A0104302702053130363835170D3139303331353039313235305A300F300D0603551D1501010004030A01053026020439303233170D3139303331353039313435335A300F300D0603551D1501010004030A010530250203333832170D3139303332373039333133395A300F300D0603551D1501010004030A0101302D020B51434130335F0104070205170D3139303431353038303431395A300F300D0603551D1501010004030A01043026020435393133170D3139303431353038303534345A300F300D0603551D1501010004030A0104302D020B51434130335F0101050908170D3139303431363131333035345A300F300D0603551D1501010004030A0105302D020B51434130335F0105000409170D3139303432393039333635335A300F300D0603551D1501010004030A0101302D020B51434130335F0104060106170D3139303530373037303833335A300F300D0603551D1501010004030A0101302D020B51434130335F0104050800170D3139303530383131353634375A300F300D0603551D1501010004030A0104302D020B51434130335F0105050803170D3139303530383131353734315A300F300D0603551D1501010004030A0101302D020B51434130335F0105040801170D3139303530383131353830345A300F300D0603551D1501010004030A0101302D020B51434130335F0104070907170D3139303530383131353832325A300F300D0603551D1501010004030A0101302D020B51434130335F0104060806170D3139303530383131353930385A300F300D0603551D1501010004030A0101302D020B51434130335F0104020407170D3139303530383131353935345A300F300D0603551D1501010004030A0101302D020B51434130335F0104020103170D3139303530383132303032355A300F300D0603551D1501010004030A0105302D020B51434130335F0104020606170D3139303530383132303034375A300F300D0603551D1501010004030A01013026020431373734170D3139303530383132303131335A300F300D0603551D1501010004030A01013026020431373736170D3139303530383132303133315A300F300D0603551D1501010004030A01013026020433383434170D3139303530383133303235325A300F300D0603551D1501010004030A01013026020435333432170D3139303530393038343934395A300F300D0603551D1501010004030A01013026020432343631170D3139303531333131333432355A300F300D0603551D1501010004030A0101302702053130373836170D3139303532393039323435325A300F300D0603551D1501010004030A01043026020436323332170D3139303630373038323032305A300F300D0603551D1501010004030A01013026020431343332170D3139303631383039303333315A300F300D0603551D1501010004030A0101302D020B51434130335F0108010704170D3139303731353038323834305A300F300D0603551D1501010004030A0105302D020B51434130335F0108010505170D3139303731353038323834395A300F300D0603551D1501010004030A0105302D020B51434130335F0108060605170D3139303830313132343132335A300F300D0603551D1501010004030A0104302D020B51434130335F0106010108170D3139303830313132343432365A300F300D0603551D1501010004030A0101302D020B51434130335F0109070406170D3139303830313132343533375A300F300D0603551D1501010004030A0104302D020B51434130335F0109070302170D3139303830313132343630315A300F300D0603551D1501010004030A0104302D020B51434130335F0102010609170D3139303830313132343633345A300F300D0603551D1501010004030A0105302702053130343036170D3139303830313132343835375A300F300D0603551D1501010004030A0104302D020B51434130335F0105080608170D3139303830323131313635315A300F300D0603551D1501010004030A0104302D020B51434130335F0101060503170D3139303830353132313632385A300F300D0603551D1501010004030A0105302D020B51434130335F0108010707170D3139303830363037313835325A300F300D0603551D1501010004030A0101302D020B51434130335F0107090503170D3139303832393130333335375A300F300D0603551D1501010004030A0101302D020B51434130335F0103020407170D3139303833303133313435365A300F300D0603551D1501010004030A0104302D020B51434130335F0101090500170D3139303932343037323532375A300F300D0603551D1501010004030A0101302D020B51434130335F0201070703170D3139303932373039303835345A300F300D0603551D1501010004030A0101302D020B51434130335F0103040508170D3139313030383039323735325A300F300D0603551D1501010004030A01053026020439343537170D3139313032333039303430345A300F300D0603551D1501010004030A0105302D020B51434130335F0202040602170D3139313032333039303735305A300F300D0603551D1501010004030A0105302D020B51434130335F0106000304170D3139313032333039313033355A300F300D0603551D1501010004030A0101302D020B51434130335F0202000105170D3139313032333039313430395A300F300D0603551D1501010004030A0104302D020B51434130335F0107020008170D3139313130383037353532385A300F300D0603551D1501010004030A0105302D020B51434130335F0202070308170D3139313130383037353535385A300F300D0603551D1501010004030A0101302D020B51434130335F0108040708170D3139313130383037353632355A300F300D0603551D1501010004030A01033026020431383437170D3139313131353131313835375A300F300D0603551D1501010004030A01043026020431323233170D3139313131353131313930355A300F300D0603551D1501010004030A01043026020433353234170D3139313131353131323330315A300F300D0603551D1501010004030A01053026020433353531170D3139313131353131323331305A300F300D0603551D1501010004030A0105302D020B51434130335F0105060807170D3139313132303131303531375A300F300D0603551D1501010004030A0101302D020B51434130335F0103000405170D3139313132353134343532345A300F300D0603551D1501010004030A01013026020437353436170D3139313132383039303834305A300F300D0603551D1501010004030A0105302D020B51434130335F0107020606170D3139313231323133303635345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040609170D3139313231333039333933335A300F300D0603551D1501010004030A0105302D020B51434130335F0200030900170D3139313231373134333234315A300F300D0603551D1501010004030A0105302D020B51434130335F0201020704170D3139313231373134333332365A300F300D0603551D1501010004030A0105302D020B51434130335F0201060100170D3139313231383131323634355A300F300D0603551D1501010004030A0105302D020B51434130335F0201070309170D3139313233303130303732375A300F300D0603551D1501010004030A0101302D020B51434130335F0201070306170D3139313233303130303831395A300F300D0603551D1501010004030A01013026020433333233170D3139313233303130303931385A300F300D0603551D1501010004030A0105302D020B51434130335F0103070606170D3139313233303130303935375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030509170D3139313233303130313132355A300F300D0603551D1501010004030A0104302D020B51434130335F0203090705170D3230303130333131303234315A300F300D0603551D1501010004030A0105302D020B51434130335F0204010605170D3230303130333131303330315A300F300D0603551D1501010004030A0103302D020B51434130335F0200090606170D3230303131303130313132315A300F300D0603551D1501010004030A0104302D020B51434130335F0105080501170D3230303131343132303733305A300F300D0603551D1501010004030A0101302702053131343630170D3230303131343132323832395A300F300D0603551D1501010004030A01013026020437383430170D3230303131373039333633385A300F300D0603551D1501010004030A0101302D020B51434130335F0108040302170D3230303132303037313333375A300F300D0603551D1501010004030A01013026020436303130170D3230303132303133353433345A300F300D0603551D1501010004030A0101302D020B51434130335F0203020404170D3230303132303231343730395A300F300D0603551D1501010004030A0101302D020B51434130335F0203020500170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020501170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020508170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020605170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020800170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020805170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020807170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020809170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020900170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020901170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203020902170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203030002170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203030005170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030103170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030107170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030200170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030205170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030206170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030302170D3230303132303231343731365A300F300D0603551D1501010004030A0101302D020B51434130335F0203030504170D3230303132303231343731365A300F300D0603551D1501010004030A0101302D020B51434130335F0203030608170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030609170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030700170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030802170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203030808170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203030909170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203040002170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040004170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040101170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040200170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040206170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040208170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040306170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040309170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040400170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040401170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040403170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040404170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040405170D3230303132303231343732335A300F300D0603551D1501010004030A0101302D020B51434130335F0203040407170D3230303132303231343732335A300F300D0603551D1501010004030A0101302D020B51434130335F0203040409170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040509170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040602170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040607170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040608170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040700170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040702170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040708170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040709170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040803170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040900170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040902170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040905170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050004170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050108170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050203170D3230303132303231343732395A300F300D0603551D1501010004030A0101302D020B51434130335F0203050207170D3230303132303231343732395A300F300D0603551D1501010004030A0101302D020B51434130335F0203050300170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050401170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050404170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050405170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050503170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050509170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050600170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050605170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050607170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050706170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050707170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050708170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050800170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050801170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050807170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050808170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050900170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050901170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050905170D3230303132303231343733365A300F300D0603551D1501010004030A0101302D020B51434130335F0203050907170D3230303132303231343733365A300F300D0603551D1501010004030A0101302D020B51434130335F0203050908170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203050909170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203060000170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203060003170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060007170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060009170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060102170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060103170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060200170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060301170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060306170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060401170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060403170D3230303132303231343734315A300F300D0603551D1501010004030A0101302D020B51434130335F0203060405170D3230303132303231343734315A300F300D0603551D1501010004030A0101302D020B51434130335F0203060406170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060601170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060604170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060605170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060608170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060609170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060700170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060705170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060806170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060807170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060808170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060900170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060908170D3230303132303231343734365A300F300D0603551D1501010004030A0101302D020B51434130335F0203070003170D3230303132303231343734365A300F300D0603551D1501010004030A0101302D020B51434130335F0203070005170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070007170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070009170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070102170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070107170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070200170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070201170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070206170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070306170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070308170D3230303132303231343735305A300F300D0603551D1501010004030A0101302D020B51434130335F0203070400170D3230303132303231343735305A300F300D0603551D1501010004030A0101302D020B51434130335F0203070403170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070508170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070601170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070605170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070701170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070705170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070706170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070709170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070800170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070802170D3230303132303231343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0203070803170D3230303132303231343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0203070806170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070808170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070901170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070904170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080000170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080002170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080009170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080100170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080103170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080104170D3230303132303231343735385A300F300D0603551D1501010004030A0101302D020B51434130335F0203080108170D3230303132303231343735385A300F300D0603551D1501010004030A0101302D020B51434130335F0203080200170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080203170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080205170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080206170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080207170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080208170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080304170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080308170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080400170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080402170D3230303132303231343830325A300F300D0603551D1501010004030A0101302D020B51434130335F0203080505170D3230303132303231343830325A300F300D0603551D1501010004030A0101302D020B51434130335F0203080507170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080602170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080604170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080608170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080701170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080704170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080706170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080902170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080904170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080906170D3230303132303231343830365A300F300D0603551D1501010004030A0101302D020B51434130335F0203090005170D3230303132303231343830365A300F300D0603551D1501010004030A0101302D020B51434130335F0203090101170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090106170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090107170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090204170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090206170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090207170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090301170D3230303132303231343830395A300F300D0603551D1501010004030A0101302D020B51434130335F0203090303170D3230303132303231343830395A300F300D0603551D1501010004030A0101302D020B51434130335F0203090400170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090404170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090407170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090509170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090600170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090702170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090704170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090800170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090805170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090902170D3230303132303231343831335A300F300D0603551D1501010004030A0101302D020B51434130335F0203090903170D3230303132303231343831335A300F300D0603551D1501010004030A0101302D020B51434130335F0203090905170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0203090906170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0203090909170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000003170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000103170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000104170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000106170D3230303132303231343831365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000109170D3230303132303231343831365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000200170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000207170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000304170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000305170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000306170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000307170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000308170D3230303132303231343831395A300F300D0603551D1501010004030A0101302D020B51434130335F0204000401170D3230303132303231343831395A300F300D0603551D1501010004030A0101302D020B51434130335F0204000403170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000404170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000406170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000409170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000500170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000501170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000505170D3230303132303231343832325A300F300D0603551D1501010004030A0101302D020B51434130335F0204000507170D3230303132303231343832325A300F300D0603551D1501010004030A0101302D020B51434130335F0204000606170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000608170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000609170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000702170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000705170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000708170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000806170D3230303132303231343832355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000809170D3230303132303231343832355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000900170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000901170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000907170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000908170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000909170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204010003170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204010004170D3230303132303231343832385A300F300D0603551D1501010004030A0101302D020B51434130335F0204010006170D3230303132303231343832385A300F300D0603551D1501010004030A0101302D020B51434130335F0204010100170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010203170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010206170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010209170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010300170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010303170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010305170D3230303132303231343833315A300F300D0603551D1501010004030A0101302D020B51434130335F0204010308170D3230303132303231343833315A300F300D0603551D1501010004030A0101302D020B51434130335F0204010406170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010500170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010503170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010505170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010601170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010602170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010604170D3230303132303231343833345A300F300D0603551D1501010004030A0101302D020B51434130335F0204010608170D3230303132303231343833345A300F300D0603551D1501010004030A0101302D020B51434130335F0204010700170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010801170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010805170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010900170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204010905170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204010908170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020007170D3230303132303231343833375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020100170D3230303132303231343833375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020102170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020105170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020106170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020207170D3230303132303231343833395A300F300D0603551D1501010004030A0101302D020B51434130335F0204020209170D3230303132303231343833395A300F300D0603551D1501010004030A0101302D020B51434130335F0204020302170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020304170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020308170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020309170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020401170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020406170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020501170D3230303132303231343834325A300F300D0603551D1501010004030A0101302D020B51434130335F0204020503170D3230303132303231343834325A300F300D0603551D1501010004030A0101302D020B51434130335F0204020504170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020602170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020603170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020605170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020607170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020609170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020701170D3230303132303231343834355A300F300D0603551D1501010004030A0101302D020B51434130335F0204020702170D3230303132303231343834355A300F300D0603551D1501010004030A0101302D020B51434130335F0204020704170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020706170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020709170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020805170D3230303132303231343834375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020807170D3230303132303231343834375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020902170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030001170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030002170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030003170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030005170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030006170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030102170D3230303132303231343835305A300F300D0603551D1501010004030A0101302D020B51434130335F0204030106170D3230303132303231343835305A300F300D0603551D1501010004030A0101302D020B51434130335F0204030200170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030202170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030205170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030207170D3230303132303231343835325A300F300D0603551D1501010004030A0101302D020B51434130335F0204030208170D3230303132303231343835325A300F300D0603551D1501010004030A0101302D020B51434130335F0204030301170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030303170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030402170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030403170D3230303132303231343835345A300F300D0603551D1501010004030A0101302D020B51434130335F0204030409170D3230303132303231343835345A300F300D0603551D1501010004030A0101302D020B51434130335F0204030500170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030503170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030505170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030506170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030602170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030604170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030700170D3230303132303231343835375A300F300D0603551D1501010004030A0101302D020B51434130335F0204030702170D3230303132303231343835375A300F300D0603551D1501010004030A0101302D020B51434130335F0204030704170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030708170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030802170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030908170D3230303132303231343835395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040001170D3230303132303231343835395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040003170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040005170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040006170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040008170D3230303132303231343930315A300F300D0603551D1501010004030A0101302D020B51434130335F0204040009170D3230303132303231343930315A300F300D0603551D1501010004030A0101302D020B51434130335F0204040100170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040103170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040106170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040206170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040301170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040302170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040305170D3230303132303231343930345A300F300D0603551D1501010004030A0101302D020B51434130335F0204040306170D3230303132303231343930345A300F300D0603551D1501010004030A0101302D020B51434130335F0204040404170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040407170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040501170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040504170D3230303132303231343930365A300F300D0603551D1501010004030A0101302D020B51434130335F0204040602170D3230303132303231343930365A300F300D0603551D1501010004030A0101302D020B51434130335F0204040604170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040605170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040606170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040700170D3230303132303231343930385A300F300D0603551D1501010004030A0101302D020B51434130335F0204040705170D3230303132303231343930385A300F300D0603551D1501010004030A0101302D020B51434130335F0204040803170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040909170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204050001170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204050006170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050102170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050104170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050109170D3230303132303231343931315A300F300D0603551D1501010004030A0101302D020B51434130335F0204050200170D3230303132303231343931315A300F300D0603551D1501010004030A0101302D020B51434130335F0204050508170D3230303132303231343931325A300F300D0603551D1501010004030A0101302D020B51434130335F0204050609170D3230303132303231353031325A300F300D0603551D1501010004030A0101302702053130313437170D3230303133313039313331335A300F300D0603551D1501010004030A0101302D020B51434130335F0204080005170D3230303231303131343733375A300F300D0603551D1501010004030A0104302D020B51434130335F0106000309170D3230303231303133343535315A300F300D0603551D1501010004030A0101302D020B51434130335F0105080600170D3230303231343038323133355A300F300D0603551D1501010004030A01043026020439383139170D3230303231373039333332385A300F300D0603551D1501010004030A0101302D020B51434130335F0206080005170D3230303231383131323031335A300F300D0603551D1501010004030A01013026020437303233170D3230303231383131323133375A300F300D0603551D1501010004030A0101302D020B51434130335F0102020100170D3230303231383135313534375A300F300D0603551D1501010004030A0104302D020B51434130335F0109070001170D3230303231393230333135345A300F300D0603551D1501010004030A0105302D020B51434130335F0207070501170D3230303232313039323832365A300F300D0603551D1501010004030A0101302D020B51434130335F0206020709170D3230303330323132313533375A300F300D0603551D1501010004030A0104302D020B51434130335F0103020900170D3230303330323132313634385A300F300D0603551D1501010004030A0104302D020B51434130335F0206070000170D3230303330323132313830315A300F300D0603551D1501010004030A01053026020436323036170D3230303330353130323932375A300F300D0603551D1501010004030A01013026020433333235170D3230303330353130323933385A300F300D0603551D1501010004030A01013026020431323035170D3230303330353130323934395A300F300D0603551D1501010004030A01013026020431323732170D3230303330353130333030325A300F300D0603551D1501010004030A0101302702053130323039170D3230303330353130333031385A300F300D0603551D1501010004030A0101302D020B51434130335F0203020704170D3230303330353130333033385A300F300D0603551D1501010004030A0101302D020B51434130335F0204080705170D3230303330353130333035395A300F300D0603551D1501010004030A01013026020431323833170D3230303330353130343634335A300F300D0603551D1501010004030A01013026020431333333170D3230303330353130343635345A300F300D0603551D1501010004030A01013026020431323939170D3230303330353130343730345A300F300D0603551D1501010004030A0101302D020B51434130335F0105020401170D3230303330353130343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0105090800170D3230303330353130343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0106040907170D3230303330353130343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0200060802170D3230303330353130343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0200070807170D3230303330353130343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0105080905170D3230303330353131333834315A300F300D0603551D1501010004030A01053026020436393333170D3230303330353131343034355A300F300D0603551D1501010004030A0105302D020B51434130335F0207050607170D3230303330363133343135375A300F300D0603551D1501010004030A0104302D020B51434130335F0103070504170D3230303330393039303030315A300F300D0603551D1501010004030A0101302D020B51434130335F0208070608170D3230303331363135323330305A300F300D0603551D1501010004030A01043026020432343134170D3230303331393038353132305A300F300D0603551D1501010004030A0101302D020B51434130335F0105030106170D3230303331393038353132375A300F300D0603551D1501010004030A0101302D020B51434130335F0209070202170D3230303430373131313031305A300F300D0603551D1501010004030A0105302D020B51434130335F0209080109170D3230303430383030333430335A300F300D0603551D1501010004030A0104302702053131303333170D3230303431323131313931315A300F300D0603551D1501010004030A0105302D020B51434130335F0208060309170D3230303431323131333335305A300F300D0603551D1501010004030A0101302D020B51434130335F0106090001170D3230303431323131333535355A300F300D0603551D1501010004030A0101302702053131313538170D3230303431323131333730315A300F300D0603551D1501010004030A0101302D020B51434130335F0105020707170D3230303431323131333732305A300F300D0603551D1501010004030A0101302D020B51434130335F0200030708170D3230303431353133333330365A300F300D0603551D1501010004030A0105302D020B51434130335F0108010702170D3230303432303039353232335A300F300D0603551D1501010004030A0104302702053131333736170D3230303432323132343231325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060707170D3230303432383133313330315A300F300D0603551D1501010004030A0101302D020B51434130335F0205010707170D3230303530383039343634305A300F300D0603551D1501010004030A01013026020437303835170D3230303531393037333931395A300F300D0603551D1501010004030A01053026020437303932170D3230303531393037333932375A300F300D0603551D1501010004030A0105302D020B51434130335F0105050604170D3230303532383037323033365A300F300D0603551D1501010004030A0105302D020B51434130335F0104040300170D3230303532393131343635315A300F300D0603551D1501010004030A0101302D020B51434130335F0105010403170D3230303532393132343230385A300F300D0603551D1501010004030A0101302D020B51434130335F0302020006170D3230303630313132353830385A300F300D0603551D1501010004030A01013026020433313837170D3230303630313133313231335A300F300D0603551D1501010004030A0101302D020B51434130335F0103050403170D3230303630313133313433315A300F300D0603551D1501010004030A0101302D020B51434130335F0209030900170D3230303630323039333530315A300F300D0603551D1501010004030A0101302D020B51434130335F0109000401170D3230303630383038353930395A300F300D0603551D1501010004030A0105302D020B51434130335F0207070604170D3230303630383039303130335A300F300D0603551D1501010004030A0105302D020B51434130335F0203080803170D3230303630383039353435355A300F300D0603551D1501010004030A0105302D020B51434130335F0200000909170D3230303631363133313333355A300F300D0603551D1501010004030A0104302D020B51434130335F0202060504170D3230303631363133323231365A300F300D0603551D1501010004030A0101302D020B51434130335F0302070509170D3230303631393038313130355A300F300D0603551D1501010004030A01013026020437343930170D3230303631393132313034335A300F300D0603551D1501010004030A0101302D020B51434130335F0103030104170D3230303632353037353830355A300F300D0603551D1501010004030A0101302D020B51434130335F0105060003170D3230303632363039303433355A300F300D0603551D1501010004030A0101302D020B51434130335F0204090804170D3230303632363133313435315A300F300D0603551D1501010004030A0105302D020B51434130335F0202040901170D3230303633303039313234345A300F300D0603551D1501010004030A0101302D020B51434130335F0107010409170D3230303730313131323230345A300F300D0603551D1501010004030A0101302D020B51434130335F0107010408170D3230303730313131323233325A300F300D0603551D1501010004030A0101302702053130393830170D3230303730323039353032345A300F300D0603551D1501010004030A0101302D020B51434130335F0208090202170D3230303730323039353131305A300F300D0603551D1501010004030A0101302D020B51434130335F0301010703170D3230303730323039353132305A300F300D0603551D1501010004030A0101302D020B51434130335F0302070008170D3230303730323131303333305A300F300D0603551D1501010004030A01013026020432373035170D3230303730323134343234395A300F300D0603551D1501010004030A0101A030302E301F0603551D2304183016801474627099FF1B603BC464B5841FA3150C5CCB5FBD300B0603551D140404020209E2300D06092A864886F70D01010B050003820201009ACB2F9ED10767FEEF30E615A6B24AD45AE5F648B45F9D3B15C3CEB331585B3C6077CD116CC689CDD3DC3812A6E4E1C5395FB8C2F5CE97F3AD24D090FA3E3B5841C7C5610F72625D609B91DB193F5ED1931637DD819454E911501E15DDC4F4E1C4D9E08EC760191A9A8DFE823758D02ED8C98D0B66D0FA28E79CCA5B1C9A931CF5F93B411B2468090C0C84E6129A86938E09CBF02B750602E2E397CCB6365C2585F7A0FBB575C101A938B2C52A009D0F2F3BFEC05F891132159667D359EF5117F51B6458C7D68DECFEBF7E04683002F0797B444E02A50EC2A8ACFADF5A3A743CCEF17214F2657439A02DFEA66F5EF8CA4C576C8F7FF8EC4CA08F9FC3A46A0C10343CDF28B092CE03905E87BFC19B23C49F655AA99198CF58F80D0E3AB1800494D21CB610CE155230987A673F8E3580012E363F9A8103ADFA5EB6A0DD5575E78EC93A626585877FA2A91A39AC32BF3AD7E3D82824ADF1157B2E8B79285B08C5800FA6FF97AAE6194B1BB9A92E27D57BF7F439AC2D32612BA7B6775E6EE05389DEA2976896BA57EC4577EBC27B2CAE7716391EA73B9E1E2F8C158DED624383533129691AFB9C8CEEF16F29988DED179886060FCFE5C1A843D94555EE4A9B1F24C7D4D4B0581621E75E6A963334B37C57EB369D3DC27B348B8CD8686E1D2059BBDCD61D9C6E0FED2BFAA32847F33E84FEA3056381199B7766DDF123FD148942C8C0300D06092A864886F70D01010B0500048201802ACBFB8158F5D6D5D44714C61B26A8CF619A9243B4E7A40FAEA7A8988994F67E17056D4D58BFD8BF3B56B4D88F4A86658F2B0CBC83376E1B25975DC2928353C3D0B8C1C5F6A3304AF60D8A64D552E2D48A5EED88C0FA9FC5E97D255DF8730A2EA207EA58033D00387916359EC6049E8577C0009467F4F801A8B4D0A3289282D11B8B4E237F5F3F104DFBF18B1C00145073CD9E0113646C73C347E8F121D33530A3D80C3E965E523EA368C6A9D9DA71FE1B3A5A0DEA901733356B4099F0F9859D567EFC3B27B8D09030D441067A7F68898AF59D0998CC57B8D9D4BE12477B86E3B5EF5628F0255F377F4F0E15F849EB683123A89AD04836D111715C051DA54FE396B1565B09DBE0FECC33E41373CDB186A97509FD92FE22DAFF2F43240D2B9F57D29C8958585AC60B68A686F457945388DA9983DFB48EF0D2179115424B509977B68722F0576C989ADA21B6563D30A6B104427C355281B0EE6FE88E65A3063B09527F8A93A07D2A4323BCD492DC598DA4FB460868F198BC25FB36B1432FFE053D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>
-/Filter /Adobe.PPKLite
-/M (D:20200706133807+02'00')
-/Name <FEFF00410044005200490041004E00410020004500570045004C0049004E00410020004D00450044005901430053004B0041>
-/Prop_Build <<
-/App <<
-/Name /Adobe#20Acrobat#20Reader#20DC
-/OS [/Win]
-/R 1313024
-/REx (2020.009.20067)
-/TrustedMode true
->>
-/Filter <<
-/Date (May 4 2020 00:13:06)
-/Name /Adobe.PPKLite
-/R 131104
-/V 2
->>
-/PubSec <<
-/Date (May 4 2020 00:13:06)
-/NonEFontNoWarn true
-/R 131105
->>
->>
-/SubFilter /adbe.pkcs7.detached
-/Type /Sig
->>
-endobj
-23 0 obj
-<<
-/Length 2094
-/Filter /FlateDecode
->>
-stream
-HWKo7 {MFh@j7#q#w#o_*cD аf+v]__X11na_^.{`&.={xsyػˋˋ=0˃e?]^
-99PiS2fX
-fOqf YӮ[3w1 :u1efNcB~Ɍ"+nUa%|-,Uuf<F9
-\ 0c!!)
-P *#C'NkO:7:zeQLGuܔtmX< oTHXd!b} :bHF HYr?:JnȒ8~ X &`JaG6##Gd)y/6tMl'
-v1,(
-
-4n\ьm˺T&Q heLI\܅DV!6Lk`´ah->Dƃ
-LbBUaJQUDA*l*_pRI 2SEL"q5l{BJ#Psp4YLќ]+FH‹4F(GZF"q\HT`3U+8 >:kbcf^j`ӟyJNH-ŒA(jȖ$*$Z<rJ.k/JmGA9+C7`nAr_%n-LܠEM@&*j$>>qyQ7Mb~
-i NҶ,'qgsLG]oP3jݏY
-־8k<N{0v]__Xa3[g vcU\o|6wyS
-endstream
-endobj
-24 0 obj
-<<
-/Length 1924
-/Filter /FlateDecode
->>
-stream
-HW[o6~7GiX)ı +aPH$] h~9$m6fڠIQhl)f ,Xa\v~u4hXhooGPh/ @z#yn/f~bG2
-Z=pD Lyj7Ubsƞd^=c ;=RVM(k<}Aۆ{İC-v iRZiMIZr;A~1C֒#n᭎>otAS. cCx_۾vin\d4;liFh&O)⽹'z[9EHfMEQ:ɯfJzYxQYJUN_50ޔ{Rj/ߴo/[\6˶s- \_;xÇwemgⵏBѭd:.icR&ٱ(K8
-tB?vpUDn$h=JWS澮;)EwT) Mm)5(h(p.( -d⋙+[ٺڼ4 ڰk( `אElI
-Tab)IQjqT__3rI5bI$Am +m׹vm4^GO7ZYw856Ix]Pʥk-|ǀcO6 n3,Dj'G-W7FA,L% Ӭ+
-I5gL5{FV⚪Bmrmf+5*(6ZDA䭖[]
-}a뀴u#+or\WÌG[_U5~a~&/v?\Ӱ4l U%{LQ$We_b\WI)$T?DI)4%^yJ̨|Ʊ:@x 
-F}NW rSzVR
-RhATq@b
-:7].+cKzō.1?m E2ﱾ?_L9tj~njyv/Of.Бfu< !,D[M"$3aS<BH4d2e‰OFd|?pNy Dx2,j[ILOG
-endstream
-endobj
-25 0 obj
-<<
-/Length 1762
-/Filter /FlateDecode
->>
-stream
-HWKo6/AUe"X d::wҒ^ g87srqr\\\PBi-ECeፑr\Ca8駧Du傁(mX`a\b_Y5wZꈝ[q(a c;ƚ4`cV\ki<q@%P܁gͺ_|6k=xN(w)߬vNLwS-mtփ6JĪ6TNƹόh}[-sOni]q:;Hq}ɾx^oTJRk]gQ?!D䨳imX>F!zwc0c_T~Lv` N:Spnq NfJ7$LfB;޸jsM0ZWOrw~T톍\mӥ=$%cD]k
-FeNV޶z훯X}F{WqKƞW8d(18NOOeu \>F E .~Fk
-n6kP
-Jsnr,%z&M+9ہʦ{R֦"@um) Ĩb>m3c9M9 E*/irrnGn&]$ ϐ$-̈́H9|;LnQq=>uo7ޢE4Om={vo6q8919\T9@:~('`0i{G.$du~ ~e:#%<8Avo2M6^~-w˜2mh>(܇{3w̡rkAe„,RP9S%vR-IA5ѥ |&QI,˵b6iY0z0.ḷU:<.
-}Ji\rLA+VIƕڥdJ`lҼFȾ ]iU֝9DQ1o H^~0Y Cc>'92֯'0D
-endstream
-endobj
-26 0 obj
-<<
-/Length 1859
-/Filter /FlateDecode
->>
-stream
-HW[k7~_ǙQt3`@ <y8'MSL뫣*%k6a3ڣs9tvsqLeAJ̐jynΜC
-[._n7ԉD+&XStީCIKݘ퇛WFV^ϗ|'<'1%r!] 1N-GzB޵JXKֲedі<o+R]NI/G/ZAԝG\`K6.!wnIHXwnFwz{AekK+ "˖ 51$O{q/4N(=mg=mA/ӄ6Nl=9\-OCl"Z1qeNj)y {/Hʱ0D+I*eEZM\+qn%#SR4~, R|'.w= <zrh[tvޡ1aaj> V
-tiҨƒd5.V׵n`ܼQ}{f oE7Vn4Q3
-~unaהUo~e7Lp[0w{`{ o#<£y&9߃GaVT*a"k+Ҿj통)W҇>Bȱ\sge\ޥDaͷѕk7!gh=t]r#b39Y5lOa 3]"Qĕ,I#Iܱ$ml<m?O#2 ~p2AҩpNfed]৞,4OOB(~ٔjݾo]prEj:jUic:?BB /GZPkOG:*%&hitU~G.<S3^R.M=%N%~=PbOnV N[RTa+_J 2NF3 3Zޒ-iK$׷T;lG*7ch6v,Z݂8c-t+itd,]XrDOBPLep*бhl؂xA#^o@c{!Glj.sC<6,Q](\ ~8<L
-Nq<
-x5eEWݜ+Ρnv}F'luӄ.x&r? QzMTvRXAH 3JyT:0& /Ϝ'P׊%ͮ%#1ϗ{qe3N\&@3:p߾.īczG6 R; 2+f 
-endstream
-endobj
-27 0 obj
-<<
-/Length 1950
-/Filter /FlateDecode
->>
-stream
-HWmk9nGzY 9zh!>J[wzF/+i%Ǎ7)4w%hgm:ܮWo֫׫61# QCXBWW%v~\,m#RЖD%8a^lOw
->Ilx^e[u}Kl
-
--.j&
-o<ׅ>x lNa,9g cwcb3
-@F^ΐ#܈Mp(J0)#qQWjTk5cGᾩo"(SRܟ3L;UIlB~16yΕTn|!A^Ny+XIeuEߣB*mh+J#k<
-s)*VA>!@kryyq3ړ{rȹnI-mdmZz* TPevg)[Hvg6}݊Nn_chV=9*LR>xya}At 0ˆ ׇd>PQUVFEm%?08BOGˢ4Lu0u-/qј*a5c_m }ڪ͇-JJn>ov6ߡڽ[Ĵ+8
-+Au->=N2~le:]vZY:tIM0-dyOFM9采k>Nt
-SFеi<޿(ZE[ 
-vg{۟ٲnZqT_\A}Zg-x
-lygIT%SThbjcp\ Jzh=egH{kH&1f\ʊ# e '%^˩ħ-(=l6SFH09Q0G='d=rS/D)[)(4f?<֋(݆yo9^޳`07J FŚyxb є젰bʝ!aFW2sS "΄ %VlY$ 菖0HZx^ZP-3Gnv"Ȑ&+PqA'\@3$AF?B}O)U$B8],2@ɱOCm,F|6J }>.Y[
-bGc>~8(:ł~Cp~HSbƌފY Υ'fr=FX*_)% D"ܐT,As#ێ''"5]N
-endstream
-endobj
-28 0 obj
-<<
-/Length 1978
-/Filter /FlateDecode
->>
-stream
-HW[O7~_Ǚc|[B#V)R&4&=xC`\;: !vPJ᳗#~uLç2Q _.χ/GˣͯG5&GkeAH̐khtw9[6
-]y XPĹ&uԮaלӪswDn8(e>ܜ=|q>[8:vKǪ=n83XTeu.^F''ǯƟϑÀGt1$pkC ݣ뷍<r׭ XÚ V$X;y<
-’Tm[]kkZ׽؈C\hzyklmO@
-8O/tU^ wٺN">
-<tWv X;"9#3~ KhN5$X ,E 0jS\nWpp0B!r1\ ]312㺌u%9BF_WHa@g#:\0<yvԁa{tyQɒJV*egoX{j+;=CIFTOr%9+GЭ'=Ѝn]JD_̮@'6֊LDgtyJ9QqZ BDzTWd5 Ɉ»L䱚ĝ't.ݙBvGJj.YxeܟphiN6S=lv{bxo3U32'Y4&ºB{G.*8^;Mx>($EUN ހip,m595}!P@ 7A1S r–a+R*z p/ ų!ɪ t3(ާ(%GPZeg
-6kJ%tvKX T*q*q޺zY<y2AZ'A\fߟ.@,EKȳ+O_&/r
-ӧ.GU9B䜽2QbQtŔᎧ#CY)G CUaH6 w~jQ.mDd٬@OUhSF
-OLqq>%j`> ; a/xkjXy
-M a)kts{dЊ~hI@3pk^s13YŔ«醹[U"M}))m{ξd3OC޿köƭ"F_`?B|XZ
-꽟YA
-endstream
-endobj
-29 0 obj
-<<
-/Length 2000
-/Filter /FlateDecode
->>
-stream
-HWnF}G
-٢FgV 5iC|+:nICjhzNp{kRsjr5k~C7?-V`gA7?" l20)Gk,П⮬T|/kɊJKUˊeR+hЃ}>ٔŻRTiTVמrw8IuʋNڪrB:!\-J(TP_ZjZFWWAW-: &0lx&b`3=.fkV =/nYMfGA̚
-rV#lIT`-1 jy9Mh$Vz⍥?>>
-K 2=^?! 3j0ln`ƆL1-U!+ A~x= xxѾP%ϹY})pljH@9 C`H\"['î.*"" #YM7I,';"FuK} ^n0OenRT-˥*o
-wl xV [~B3ޛX̻RMc#v7x^GLpVbt}sP=QNU锲)l)<-x`1MXqO#]H7NZ@0xn,hsVZUAW-: #*im7J sUfEMV.].IW=JW{2-}`t0ؗ ۮ1:v܂}"oJ_JJVJG)ҙRv gC85K$; rU{8o쀗jDID:PEd-dHc.3Jok9/ hU5+b2 ʯ,AaٿByitdz'oy_(؞7nIC ݓmCB\=r餿>,v</ Q)
-J2ҍ!5rf4{nw<3HpI7cf I2,
-endstream
-endobj
-30 0 obj
-<<
-/Length 1872
-/Filter /FlateDecode
->>
-stream
-HW[k7~_0;#2 {[bHЇqBnH׉ 8rsVo_W|,](u]-
-Z4}Cx!kFdq^GYѲa(Nb:ډB-.ޮW ӂ!u
-NK6{U3rXS{x6(Z>5Uë̅7ߚ*; U=D+6;e^w4hus Ypu*{V1'o
-Fi U@AܲYr_MDĐ*[A_MDM#QU6*i0\']&H&FWZTfqlZ Ű ^aRX%J043~Tsמ8m褭k#zF $Zrr H5Q8rgbғr6@a|]@&h75w:Y#ŋz"aKW
-\vcb?㨉ȺEK6LYZSݺ((UMѥjcάy&B5 ߪ)v'59Tsc<֢'5gC<pHjT*ǗgEˇ8= ykR4#Hh2M1FGAbq’fH_H=Ĉ,Ɂ@8X#
-sn٤ZǯޗpO:xijŌ+8*YD/fUqU'L=l20~ࢉ0
-$BSzaI\ClRv-=r[Gx@dZ| '@6 kX6QڡFw.{"Hܹފ Cw4XOΚpNGN=zKN4r$8FԎc`mgp
-c 6ʣs ha#CuCP3 5iLENXU95mЗgB䵉0N5%L锇|%*L'؄P.6%L()/qxF 9<oSN(`,3z ~4dHgs*k|'w^,wiOǕ)\&~6^, $ciǀyd55H2GX,;MM'R\蠮+:VgQ/…fȼu01tzIlTwKN5yzh~}8#٨23bJ<5״#AlD֤~ ;0|Ak 3 "\Vrs ,0( Rn-z7cYw| k_?< pC^VL|/PFKå ~s G-^R *?gq{ǘ: =yuԌ ?qѩ$z])d>~餆4
-endstream
-endobj
-31 0 obj
-<<
-/BM /Normal
-/Type /ExtGState
-/ca 1
->>
-endobj
-32 0 obj
-<<
-/BM /Normal
-/CA 1
-/Type /ExtGState
->>
-endobj
-33 0 obj
-<<
-/BaseFont /BCDEEE+Calibri-Bold
-/DescendantFonts [145 0 R]
-/Encoding /Identity-H
-/Subtype /Type0
-/ToUnicode 146 0 R
-/Type /Font
->>
-endobj
-34 0 obj
-<<
-/BaseFont /BCDFEE+Calibri-Bold
-/Encoding /WinAnsiEncoding
-/FirstChar 32
-/FontDescriptor 147 0 R
-/LastChar 122
-/Name /F2
-/Subtype /TrueType
-/Type /Font
-/Widths [226 0 0 0 0 0 0 0 0 0
-0 0 258 306 267 0 507 507 507 507
-507 507 507 507 507 0 276 0 0 0
-0 0 0 606 0 529 0 488 459 637
-0 0 0 547 423 874 659 676 532 0
-0 473 495 0 0 906 0 520 0 0
-0 0 0 0 0 494 0 418 537 503
-0 474 0 246 255 480 246 813 537 538
-0 537 355 399 347 537 0 745 0 474
-397]
->>
-endobj
-35 0 obj
-<<
-/BaseFont /BCDGEE+Calibri
-/Encoding /WinAnsiEncoding
-/FirstChar 32
-/FontDescriptor 148 0 R
-/LastChar 122
-/Name /F3
-/Subtype /TrueType
-/Type /Font
-/Widths [226 0 0 0 0 0 0 0 303 303
-0 0 250 306 252 0 507 507 507 507
-507 507 507 507 507 507 268 268 0 0
-0 0 0 0 0 0 0 488 0 631
-0 252 0 0 0 0 646 662 517 0
-543 459 487 0 0 890 0 0 0 0
-0 0 0 0 0 479 525 423 525 498
-305 471 525 230 239 455 230 799 525 527
-525 0 349 391 335 525 0 715 0 453
-395]
->>
-endobj
-36 0 obj
-<<
-/BaseFont /BCDHEE+Calibri
-/DescendantFonts [149 0 R]
-/Encoding /Identity-H
-/Subtype /Type0
-/ToUnicode 150 0 R
-/Type /Font
->>
-endobj
-37 0 obj
-<<
-/BaseFont /ArialMT
-/Encoding /WinAnsiEncoding
-/FirstChar 32
-/FontDescriptor 151 0 R
-/LastChar 32
-/Name /F5
-/Subtype /TrueType
-/Type /Font
-/Widths [278]
->>
-endobj
-38 0 obj
-<<
-/BaseFont /BCDIEE+Wingdings-Regular
-/DescendantFonts [152 0 R]
-/Encoding /Identity-H
-/Subtype /Type0
-/ToUnicode 153 0 R
-/Type /Font
->>
-endobj
-39 0 obj
-<<
-/BaseFont /TimesNewRomanPSMT
-/Encoding /WinAnsiEncoding
-/FirstChar 32
-/FontDescriptor 154 0 R
-/LastChar 32
-/Name /F7
-/Subtype /TrueType
-/Type /Font
-/Widths [250]
->>
-endobj
-40 0 obj
-<<
-/Length 4181
-/Filter /FlateDecode
->>
-stream
-x]o.@~+ orQA|m4E Eu__]@rwp2L_|ӄWO鿷7a'<Y :iN>yۛ/lhOd3rRl4[6w_~y{3Z|we79D8X X߭3h%-Z(po /l1Lp7㧇;{53ω4<dC\Lcbս}yPAl[ r;q :0/m6ϘP~.^*75 F[KF082D`tk9z%+(4h9ԛU[/UvY3t6{r0T2H] L~,A$lh
-VDS$yCHj{Ò]` 3w \F@Bʀijxzr8z͡JK3]{T0uGhN",DYmj4 }OZ)
- '&0HHY-.8F CĎTKVa*
-Z"'07InM]Jaƃ^CW @lHR
-w"v%`ux[]"C}%.7ƌAVYNI ;stSgZ}0N߻)a-Wd5=.frlPDD̯%ڝ>Xi}-V_?]!kO ehF"h<$ ˱<-sEE]"J,lۄ-1Zh8eX< c}<4EWXcx\YP HhqThq s)_ֺ!,]h~TŝBUYR5pMYWsXuX m'z`݇A&&>cdpXt͓ج☉bS0Eu>h*@f"FxqCy`3ko|ke B#d8mw*RfiCoNP@x"Kf${d_HWwԏCʮ$-tvrʠ{[i^[F2Upjk";ƪ41y!}W^=y:JfC}XH@
-\!L99WJȧk" hWseChj \“ WLPgKS 4t98@eKCb} R5@ftD\ZX+s[;T(`$$k.K%#ǩN! L]\-*A˴աVX]h5iyJ~6^$}EFRtjiEgq2x1Y"BWS瑘I]ݮ j8BKcY+gb=dE2k7JYu׸uٟBֵ3AnGl
-Z]:KJf`AiџhVMUlJDC5p95 fѪٝ7fj{uK|(yG#Po%]=ߋfF u@*8wk
->v^bP$N3[PfNɒY:].d&G4ƦY/1#Vf3N?
- lıT6 Si#EmX[n 4k`hqQ̸Cl|2qeVӃо]Ah&桐h>`NjPba;tw,n
-嚉o~+c=%Y}~xc~dǥ28/?$iX{pv9<rTӵ{Xu`UkNnF[zm"ŢӪ<, :VY*kW`ǑaޘŝIlx(VI٤C?%;G$&BI G'&8%'xqR,Ȟ>"뷠WG86gԝ[JaȢJ?!–M&Aqf _>UgXcXdzkgvMOT]X;?σL5v Vz:
-mb{G|f{IRx&!+loҽXV0Y
-W٘ ͆0 gNpA;A0ће-jk>zܹIg
-$NM C
-
-endstream
-endobj
-41 0 obj
-<<
-/ID (Note 1)
-/K [131 0 R 132 0 R 133 0 R 134 0 R 135 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /Footnote
-/Type /StructElem
->>
-endobj
-42 0 obj
-<<
-/K [100 0 R 101 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-43 0 obj
-<<
-/K [102 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-44 0 obj
-<<
-/K [103 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-45 0 obj
-<<
-/K [4]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-46 0 obj
-<<
-/K [5]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-47 0 obj
-<<
-/K [6]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-48 0 obj
-<<
-/K [7]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-49 0 obj
-<<
-/K [8]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-50 0 obj
-<<
-/K [9]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-51 0 obj
-<<
-/K [10]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-52 0 obj
-<<
-/K [11]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-53 0 obj
-<<
-/K [12]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-54 0 obj
-<<
-/K [104 0 R 105 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-55 0 obj
-<<
-/K [15]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-56 0 obj
-<<
-/K [16]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-57 0 obj
-<<
-/K [17]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-58 0 obj
-<<
-/K [18]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-59 0 obj
-<<
-/K [19]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-60 0 obj
-<<
-/K [20]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-61 0 obj
-<<
-/K [21]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-62 0 obj
-<<
-/K [22]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-63 0 obj
-<<
-/K [23]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-64 0 obj
-<<
-/K [24]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-65 0 obj
-<<
-/K [25]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-66 0 obj
-<<
-/K [26]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-67 0 obj
-<<
-/A 155 0 R
-/K [156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R
-166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-68 0 obj
-<<
-/K [47]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-69 0 obj
-<<
-/K [48]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-70 0 obj
-<<
-/K [49]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-71 0 obj
-<<
-/K [50]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-72 0 obj
-<<
-/A 173 0 R
-/K [174 0 R 175 0 R]
-/P 17 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-73 0 obj
-<<
-/K [53]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-74 0 obj
-<<
-/K [54]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-75 0 obj
-<<
-/K [55]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-76 0 obj
-<<
-/K [57]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-77 0 obj
-<<
-/K [59]
-/P 17 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-78 0 obj
-<<
-/K [2]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-79 0 obj
-<<
-/K [3]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-80 0 obj
-<<
-/K [4]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-81 0 obj
-<<
-/A 176 0 R
-/K [177 0 R 178 0 R 179 0 R]
-/P 17 0 R
-/Pg 15 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-82 0 obj
-<<
-/K [8]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-83 0 obj
-<<
-/K [9]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-84 0 obj
-<<
-/K [10]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-85 0 obj
-<<
-/K [11]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-86 0 obj
-<<
-/K [12]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-87 0 obj
-<<
-/K [13]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-88 0 obj
-<<
-/K [14]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-89 0 obj
-<<
-/A 180 0 R
-/K [181 0 R 182 0 R]
-/P 17 0 R
-/Pg 15 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-90 0 obj
-<<
-/K [17]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-91 0 obj
-<<
-/K [18]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-92 0 obj
-<<
-/K [19]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-93 0 obj
-<<
-/K [20]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-94 0 obj
-<<
-/K [21]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-95 0 obj
-<<
-/K [22]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-96 0 obj
-<<
-/K [23]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-97 0 obj
-<<
-/K [24]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-98 0 obj
-<<
-/K [25]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-99 0 obj
-<<
-/K [26]
-/P 17 0 R
-/Pg 15 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-100 0 obj
-<<
-/K 0
-/P 42 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-101 0 obj
-<<
-/ActualText ( )
-/K [1]
-/P 42 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-102 0 obj
-<<
-/ActualText ( )
-/K [2]
-/P 43 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-103 0 obj
-<<
-/ActualText ( )
-/K [3]
-/P 44 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-104 0 obj
-<<
-/K 13
-/P 54 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-105 0 obj
-<<
-/ActualText ( )
-/K [14]
-/P 54 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-106 0 obj
-<<
-/K [27]
-/P 156 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-107 0 obj
-<<
-/K [28]
-/P 157 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-108 0 obj
-<<
-/K [29]
-/P 158 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-109 0 obj
-<<
-/K [30]
-/P 159 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-110 0 obj
-<<
-/K [31]
-/P 160 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-111 0 obj
-<<
-/K [32]
-/P 161 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-112 0 obj
-<<
-/K [33]
-/P 162 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-113 0 obj
-<<
-/K 34
-/P 183 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-114 0 obj
-<<
-/K [35]
-/P 184 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-115 0 obj
-<<
-/K [36]
-/P 185 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-116 0 obj
-<<
-/K [37]
-/P 186 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-117 0 obj
-<<
-/K [38]
-/P 164 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-118 0 obj
-<<
-/K [39]
-/P 165 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-119 0 obj
-<<
-/K [40]
-/P 166 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-120 0 obj
-<<
-/K [41]
-/P 167 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-121 0 obj
-<<
-/K [42]
-/P 168 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-122 0 obj
-<<
-/K [43]
-/P 169 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-123 0 obj
-<<
-/K [44]
-/P 170 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-124 0 obj
-<<
-/K [45]
-/P 171 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-125 0 obj
-<<
-/K [46]
-/P 172 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-126 0 obj
-<<
-/K [51]
-/P 174 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-127 0 obj
-<<
-/K 52
-/P 187 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-128 0 obj
-<<
-/K 56
-/P 188 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-129 0 obj
-<<
-/K 58
-/P 189 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-130 0 obj
-<<
-/K 60
-/P 190 0 R
-/Pg 14 0 R
-/S /Span
-/Type /StructElem
->>
-endobj
-131 0 obj
-<<
-/K [61]
-/P 41 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-132 0 obj
-<<
-/K [62]
-/P 41 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-133 0 obj
-<<
-/K [63]
-/P 41 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-134 0 obj
-<<
-/K [64]
-/P 41 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-135 0 obj
-<<
-/K [65]
-/P 41 0 R
-/Pg 14 0 R
-/S /P
-/Type /StructElem
->>
-endobj
-136 0 obj
-<<
-/K [0]
-/P 191 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-137 0 obj
-<<
-/K [1]
-/P 192 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-138 0 obj
-<<
-/K [5]
-/P 177 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-139 0 obj
-<<
-/K [6]
-/P 178 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-140 0 obj
-<<
-/K [7]
-/P 179 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-141 0 obj
-<<
-/K [15]
-/P 181 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-142 0 obj
-<<
-/K [16]
-/P 182 0 R
-/Pg 15 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-143 0 obj
-<<
-/Length 55207
-/Filter /FlateDecode
-/Subtype /Type1C
->>
-stream
-H\V t׼_wvb)j!$<HB18M'̈́ٙdv$DkQQz* RSBAJ)(H"E<jyH)̝YIf̢H(
-j E1r"J_ <NGn`Af¶tN!>E0DX Cad$RLEJH5R#" iFd$t iEC N/Q4r P[hzZA2ځ>cY/-m;ww]Iyڿοٿf
- LM-p/8kՠ/( `O/JpKpOp!4Bq}PWКжо{ X!6Ucc  ۀbاE5I6|8>
-/Yxށw=c*x?߅GgWB!NB<b! B#SDKb=-#q8B'+u%q%#d9YBN%+r.9mdI|#_&_'7oȷCQy<G~N^#oP(ER5HMSUTu%QF^j%<OP;=A0u:E.S7уBN 8m^z2^Oo;?{}}0!}>EB/We(f3Ōg1̴1bQf9$yyg^a~żlb2ۙf/9aN2+
-~aU! 
-'3?/
-`q8R-+N9bCQU1%.{ŕ/u-O~xTxA"~)/
-3pIpk3dxMx{)ȑ"/D6GG>\ DQ:*FFGGESYhKԈvGWD<fY%f6K<?)cK␗D-NWbԮLCooMwyyUuKSפؗ6B`ҶT61)UJV PK2&j<evnlvxE-zeI.RrD\$+VEi.1Y%D-i gD4pLhN ;a 6f%hp'b{,gB8ppT2<:oU=)u'x9tY6RJ"uJ['L6mqcIAC\`n }"DŽ,d]ӓIEoܤmLv[ߛ\vɰWry\Ekqfc[CY\7rȑEPndf#72rݤ-7 2r:< Z/u-8bB9dkv-:j:]u(#ŎrfҶve犹)#?.kzRѲxB<m'< C@G<8㉇q\_Klg<8㍷έqD9&&ɸF]1UJNFrR7aY/0)z@]Պ:Jײ )&g7Bnb&-sb ~ɆI;Ғj%ckwPMi}MR-+V!VySԸbmc!YqIMc˪)%ԮHٰҤdJu.Vu bŗ#NrWb0UW8pU8*\DqIITԸlb3s˪*wUSʩZTRupp">*QdqcKjak$\8~BXך1IUJuN:چ[ks!倊#O-).m== pFX1W1XFJI5ZḊ1dܷu.(+`y`46k/gv 6wǻcw}5Z"&*DIS
-ITIQi+RJmRTU+4j@Q:s?{wJ0̹={h4-"F#,Q1d$&ܘɤ&3+垏W<:( 1D:k '&xR'gsp lB:x-Xt:ӳ9)Xg5+BF, ˺M<!u2?2YξBw2ǝ.Œ倈=9q1KQUܻ t?Mԝhu,XV:񸡚ct) *xJcNX= =#ց1EtZv3zl/qK[iKl
-N]ݩ3stSE@4s0\Ɛ3٘[K&=A$D%b~~ L[Lf)[
-M6r3
-gzvAEQvfEvBd̝On龍iQ9/_|."v)pPs6',6XA㥑i|4
-&@LBiQi4&,CC /A^y %K /A^!#G<y>|#G<y>|)))))))))))))))) 'O ?A~ 'O? AVN5Ԭ+#y׽%^v2o4'Wo4
-MFхQSSSSSSSӨӨӨӨӨӨӨӨ Q.D]u!Bԅөөөөөөөө S LAxh44A&DO@JJJJJJJFFFFFFFF]u!Bԅ Q.DNNNNNNNN]0a
-A=]V۸mCva(w|X.SAlFx.'s2D>2CX𪳪ȝfTQM><)Lzf?^_qU棟I2Z7wHc4;sn'hy#,v,7cv='{;1qJnvȂ.\ӾQS1L8M;_&CSpD'SV,\^qmd#L{2|sdN)#cFDB)Ғsp0S'dZ,%`98I9g1#5*HAIVRrrII˽v[fZ2&'-(;̤,37)js1ytn`@'(*Ŝ0w;^܏QTc(!AQ\zQu⻘g`ދ`(Y'Q&`Aǂ>7h^9X۰/cQZ.Q',i’XrqKXKkKϠeQ$~Pve(߉(GXփeOa<,?`EVXq+`e
-Pщ?XkbX;)*O-ۅuX*W`/AC6njQ T@4{~kPmTjZPӅQ| 5PV6Z AU~x Gl
-b(6}Ӹ||[4PE.ԟB4 .4@MSyx
-d7[8|A9  *_C @!pͧ| -}hy0bQl;ma
-|y3z+у+߃2w,,~I,cK7,sbTgsxVسb"+βҁ[Xi6 +UXuCXšI!`6'xZ+ֺv ko#PO`$̺1+'hA۲>\ʆlxleL,&濳ًWbÖil`
-9?pK.bK^RH]Hj!iCG.R<]˥\q'Wΐ#}yd##̿U-Wݹj KETJv'"'G\kVJ]ɝIn9\wF'gEy#! 7sc?(\Ma87fnS$:sk2
-c=)؉Ps<wSҏԊ@J([@Y e{q(_Ey]Tb*QTQL|*7PYŃq<8ăTj<UG)<<# Q=x'x2'x򔿾 -^F]~$>55f:5!ԤQS3O? /y񌗿W*u0- ovv8o <xw e% ~KΝ4}
-ʨq,>S'䉸fl4{,J\QG>.cĢX<ar(H+%oic&mmki{TMv5bW։UhƋ&GY/*0[:/ytrNyb*yW. (DKtwk/6b)b{IlŮ ;w*ݮ}{׋vZNڋP-QQ#q8qrLqT-=HXFzႱ4mhn sR+!tiRMT귙׫mbe!)F25&zsK[1]ouYiTWz*㵻>^]>*iQNxgci
-6U$ź!pS*M:D4pj[\LP2w4l)ڽV2٘B1ĆeT7ruFɣow[C箲oMVۭ_~׭*ҳݳUj(hk_G\**=Ir⏘gs}WF45#~ wdQ3K?[djha8'6}h*͛8%ʌTEJLjt27*@XX+W\zj Fo긱`di<Mcֵ.hjԈ>^ǎ}o-;|N3\'ѪE宮2~otjrvlt:499}MΟd*mpZϝNiu|]_fyf{_8\
-cEWJuddXA,R ^uZT<1`'1BwmLAЎfMLh-`R1SP'6 !P
-A`8:Iy o;5WcMsb8H?C (O2 '1Xe($Q#m*Z&D%Ÿ$?Y$W@\
-^ [wQ? DVkE cHikE `qo/8H"`5Z:>t/` l)(x֔:2;g ~乑K:pCB.\?$+ /D:s;LdVާ_yElWnrIwV2aQrV>aE诣l|MG3KdѸWrhmqc]D@
-5맖o@J ⱐ[`юR1M"ebTk
-"2rsܜ,JT
-)Jf;<36v` |MRLyg%Lha@ Բv] 6 P VX z܊:`67vs۶ͤf_P(عIѽFQgqD<M"wٲ@S%~s˄<ˠpA7L4
-'). O $1gaS
-FA *j`jHs85 r65_ûix0+æe<J.۔I33P3V=p|)Uvٕ7ڥ.?Ndf\*Ty@ȰLQo",ȱb>I؟k
-,x´Y+xޅ%?Y7W ?'fSQ;OhmX>hap4q
-T3{'
-bq)"|("$C;{Cc~!"<Ϟ bp|;\hp'nMh!ofq?=#ȩnjb]M:ANdS@cK/'.]ؕҊr+n3BS'QڊFL_)kո3|㺲[51%l`o5yd8;E%_$C].gE.ӻEo{×/Hu1V*tcM\(uLv`^ʺ'd.aCc8φ%oNOc%Owre 7sT': Z6=(iRejVjqIvЍZS # qEׅثNf$+ :b!0 0z74d _n<78׍
-:|'4ꆃn-g2@~7F`n*4U&Ssb4]IUeIîvh EY"*4 68idQ&Ȫ"F (7;hH#
-q9㭞מ3s2U{wؐc9} @,O<ȧ
-y@,A霥>x0@o>0߹BQꄴHZF߁Wwx@ب h]}rġ?^`YDy
-8QhxMB^
-iPM$H4řl?E5s 0Fξc\MG$#d 0X( _{]W{z)JGlc/9lIW8_o
-[p s%{=S~!’3#XsoXA^b׍rDT;\0|uijCl"SKOaFpfٽƝX]W Q/qYU̳
-\_dϬJ=gˮe:˖~k:C}~v;F?j-Zףlc7/64!o]6=iM:qu=,WA;-wnpt?x<lw\t;m+) )3^$ՊXA ~\Q9"f ` fOLV"dam+|V"*54;IG@R0IDGtw杖k8}оqK. !s#/|kVIU>z=<
-֕7R,|𹎤#zJ
-7䞸b~I:2-n8v& IX6}]B/狅e /  r!r
-W[q:eeT#8JI؊Ÿ ~#V{DWR,NGNJ?8$1aK~#}P@Wck"o- MRU{
-j9 55ZgӶ0&22aq5W5 :PMHd\&
-i O~
-߭
-O[;W7 @),1oѻH <|Lqt
-ͲE.yl 3wknVj'.7^C"'S8!=)-37},uJ-'w’jT C8̂bX Vdh !kd=fv.,8ϪZP㴬>p-1igtButW=!<pfvgD}%ũ)l^'HXirQ( ,;إ= +ᕄZI=Zd7t\fQ;+.3m#[0͝uW';A(J=x7:S~΋UTܺ{3N~^p@B6;)#Q%x/"5 ,?6_zvC xեo“Ul*&&!\MNX§(c_TW{PSWo6t:Y{Am}퀏
-uO B
-"H 1H@%+H<ް,
-Vj"[Cw93;;;q
-ۃEMݭ=+{Z>t(JK,hk<BCDtNg>>yF5 :7mx\ >`8 >ؼ#Wk?,oۏ?|+3cʷD3? xO^W
-(pỏhm;4kB4'!¼.mv}rWdd\鲫1oƔo b|
-K+|#n7X"M-S)Ҡ_ÐG/
-3+
-pOa &RU^'W\ˇ008ZgO{" :b(IDr
-38@Gp|dfA,nKB4
-\-L#'(wsB yv曙
-;&_puCvϙ\*"G8%c[Єtj2I&y&`r9kX# v !>d7,Y )-.ʝ`BuA7ԅ $T]LOq#\=ÚfMg]v?`: sy| U%7UHϔ$<Բa$y”SL͇^!v|[0;xx*53LEU- %'KH=wSrm K-G^~6#̅*Ef hD[sq>d{ Z4xXjq9[
- C@Hnz~⛽Ƽ
-!jy&3;$ -pp +kjD#CXA.Cz$ȭP+
-y
-kf=w/)ڛSyƺJ-hoh1WϏ7' x_vY?)V"XP%DBҫߦ8X/RMҢsyIZeӲeRefYe67"1R6yǶ=$5& e;?jQ4Q}`E&ミ̖%DSgP' u=Վ`UC;K%"ᙺ;֌IJ1
-,:F =dal Sy NM@>Ť\whMS2#X8(zy̅RG+6D.8lpLA2}-1g;M. h)hͷd5qb/\i%knOTaH]{*Jxf7Nks"rG<c@$xïIݤ,''{g[K Dm~V j ڝ~
-Mg'zQz) &MKRT+ڵ y^ :V48 el>=0[<FI]1ro,-
-l<=cg0A.~jTi꒎^]=NC
-RS^Wnx8m$+^uI58Qd\ <-EN<4n1x=6؏Z+-;(rٟc9~Ud@p׉ cb]QMY<i{nAh.zj[i(HSZyPAkw "򐧀j־YO;Ós2};ݹw2oNUR}Jj$_jn:xIJ{:%$褢OAE`4#8ɕ> Q/e*<NU=wgAt{p7c5eء.8y%#ލ2G8|W'*׭_}ۆhcES,IPxp+['WTaJ":\HCVd=*2A9O=3Fxy#^ 7_ @H4_$ 'c"x?uX
-DZ`0|-)ryNdWLbuڏJK(EN-pt@sHbzX9b+)gܛ\+,Tvg6xć;}]6HTV/}o.26qxj7O)xL
- pLA>M2 |`UO=D P
- /B4G1<OX_֤ZEE%UHơ^>׸ylweR)<嗡`P;khK6]ł?==ݞnn;\XצR%*~!! 賍jEEت\qnŢYTh=T¯Ewje13Aid6/#7᤯Jpk̾/e[835f35朶$|xӉ/BFB Y٫qqc!0vjh]`
-t]l0e
-FsYd6t=: #
-Wq}ۇ{n RN"43bFfD9ӌzPlXuW0g7<y^Jʉ<e91n8pZ%ßĝ)Y&S%N_ w ҆WWkϚ{o HIEflKQ*ow߱^v]J~"6WlSP\\J8'_rAFDȖB 40p;cS `6F["#7-[F&=b}35Q\?}6=+79i26uaBI[9zgG5N&g'ceS:>]ZNΥ@LPuv~E(nڹŖ1V*}$&Г 'c#*7HKU谈½3_~Owt?ã-08<`[RYZ~]E?oos(^fSkس<]YyAThhldV ?XN{:46LW{TtJ΋E=uي6vX.//`@ N^Ds qq_?O'ɎK%U9 DqL*ggLlom$]-|!Y[
-oӅ7G\ 'F!(NPF"4 3nDT]($4B9{$} z{q:tcdz 屐"_0~"*,@7Ӈbp4bh*L$e'˙S^ Fd޹FFyJ['>:&Y#qT|('"i_*+z#<<c'v`yY' &D%E_ X/s@Z3 '^W?PzA=Jws߽Wz客\#v93HĢo_ra!etj*1.Ec
-bI\>Yh 2(.(`r#MU%0 pHcayEd˓pJo
-ph
-hw%v9"[}4P{ sZ<^zXZb{P):.8tJeϺz DO-`)FU+|W)
-W
-Faj*?_H%$(
-y.$= Uъw4(<E
->|L@V&Obq060~[<"hdolKcMe_W"=z4bwz?R mZXy{h5/>GR
-xdeaq.{\ r̋C&T =${P)Cq37Sxh&zACwoЏ:-CZ7";4m![&0 W|~AB
-$)
-\5SM;)Z?UQȀ{2ֽB[G
->g9ӐQV^F^VLR&*D&:>3<
-(\V(  Ԇs0l g_LN-^߆6>-`"(ON!y$qQsvC:&{I2%7#+MIL a)'‘.?!WC,<f?;X%"sENMOwk;gK\G[+GJ}8}bw(7`n
-wvͲ~Y)Una~sI̭cEprb;j..o Qg"D+Jiw;tIm-}ۼ#*:T ;0!`1ZP/ )<CL=nuTE ]Qa2 G+_zq:Jgdgε
-A]}_͍z!L6"K ON[G9_tVԹ\NN(76t8dLj HLJ 4u{9Ttdd `%l/l_<2ӏ#7ٴȝ'SA--j' R
-p~&=N:joma/qE=EhWRމEGAB훆[!
-^җK C7%>jp-p(s.>x{ouD4݋SVc
- jlDx{#ė}Ty'yʜn<zvHL:F]z#T608RQ-)7J:K*kQgJjFgNt~߷}
-㑶ojɋ;bX╢k 4e
-i(˥ ocV:q^)x5`#NpΨ*zٹGK5xE[Aޱ;rwN NCKY28p! 1L!8a 5!FF``7Ff/KYNFh꿂aQI|D%/%[G6%XT13`dr@&7[K;\&~7
-{SL[<AasGe(8bD+~KT# MЗRqtL:=h5U&0y:=6{テ~lzH{>ۋg÷/Ctp<U|#e?bHAkX دŅ*'ELINqy
-4m ?d*ȔF BU޹x*j98;FLg)JM)UH W *pkd sE0۠me;rr^!Js2 < dnbdΔ89SyYm4~>cȨ [#E<<e^Yg[A/(E c9c;LWCx+ljz+=Bk<׍LtL
-uT*(d#%҃4,7:c.ғ^ W/@;RK#qm#FWNl{Xay|y>'='3ik|}uv¹ںؔ42!CklPcCv[4/c Ӊ=(ك~9"gIJ8˫†ÔWm "ū{NazRfȒb,_+hQY 1Ӯ "WΧ]&đbMcaTŖCfA!I
-/>stiƹ̣q% fJD
-nCB6vg=MndاĀX&kQ;G^I9r‡Q|l%{aGaC`D V:eh!Vuyޣ6rFa9a'kMVҶjgɣt*(}j*v4t}\KkZY+v$a*v7BkJ L
-٫TmU* j*EC*M b27.m#؊hقphGDe7- "
-ȾE@iȈaiE1<bZa.|wsjŲP 5SIڪ&m k$_Tim~1ϡJ,cn| szOdW%zߓMzCi ҅.Gh/a`VD j:ca>͔BJ|8e$!ħFW,aBSϞI CTwQ,n04Jl:ɲgV"@5|mƦ7l:.qE6wVSy3
-Z!\][lG;0~5D $%
-fh2gHx:&h<%EA}ᗇ6*YIJM7,/z,t~s[{aLZwf5q˱>gr%kJr{r%}մWAgż]$5
-9\ {tYƲ# MHI1N><B Gua#1o[r>MR%^jc3ұ|4ȋiMl0E98WV+:%67`YA kqKՔmexT‚bՋ#Ѽx"QQ,ťIdҡe0vUc|҄j>-i^""iJ5P|7~ؿ;9-K ~0X
-Ga1sQ]%soN dfbZy[V "v/VkƃUS{P<`>GfR$R;ݦdhw[8_UɗIۥDf
-?[7.f/>Dg$
-
-w+n2w?fC)*MQV(8{Q"3ŽjU7fʣߚLIZdo)!tf":"T
-V&*i܄BDv]9jWScc[xT_1I7h.#B$5rLME:#=%A~~tj/h%{_?5ThyyDG0T߽KO+F\ }F0&a8! 37h
-&v-pߩwPƬyHJ9/!>8m~i %hD_ˠU}G{~Qu9&KsVLebAn,k7b}F\cM`TV@+j}Z]K*, tZpHTk]iDLPH/jBV֌|TIӀb eHY~8c4LFYlp+1:_a旒d5cky^bo<q<rS«4*+ CHUD0T.2L4,
- ϥѱEI'Sb8j< M DPbDf`F<'!(VGjc~c^0 ;Zpx
-"9x7\BcBY殢yK^gd #b3DUҴ~~Usϩ"#j<8
- ix ,ߚ[];ǠO6# Bp ջ˾G]<.4`? g/tONU'Ծ1 à?6CTG*ӦvHCN1OGp_uk8/>SUwɕ4]V#"ѻjӦvàHgujzgu3hy iKbl!蝖]i@֗F= Ym{ 6x.<~j`~,{HLp="g 3+c0m33wX+Zz6qa܃(Süb`k,n3ɽ.u.@Ȉ6t̻,P9tBU1.XrjihR<}qqal!/oc?-ݸ@,)3)#=a>f<e
-(U
-h@~
-?0q]&oa^;_+݁mZԖ| u$ R~2}Xa=Cr/{oA{SGxn/.s^B?۫)j^7w_@z:6L
-BwEɛļ%y}/͵l
-)8D$p @ue-7I9x2Im`1G֜%=ị]4Mv#[ x5,>,BKG[Ƨ&?dM \psVWX1|&>e1(Ѯ~n\KZP11'm^2Ml˕VqD-) F#>v$r?BYY8?2- +M#&;r 0CcBMOA>]Ǭ$e )hn:IzMX>,#1: ìF6
-3cF x0փޫ)PHV#àeº'JHXU'qSlS`xf<t)cn,1p;@lcH$^bE9A)G"lĚh~4;1@* E?DYU3mq!AIK3
-P/(B8Be3aZMƩ`'):.=.wq;`#kr "aNT]"J]݃-ZLMH${PSWp$Z:rwŶlgv}QPA@ 
-k›(O1`F^ԲʶElkgC=77DQG&ssOrr>F%^/kԆMjڰqeA)x
-Kq<Nf]B0̒șB&q騫?Q_7vӶ]>v2Yv|$LTЁcGNE Û<L`
-y`R6*X*N,Q;U*n/U-j
-
-Iu| ?JRUrRE[Z8G; "S`INXR3!cNNu.)SD|hFłT2VΨZb^16 V9$Ui-G`[_ZVj(,bUHHΪ|U)vVYYujQsZ ,P di;33Vh&mZz95x#!*ikm 5&Ծs?g88
--&cQ S!sj11RX`̆^ h֘q0RV71Lm6<L98IaKMܑiq ;إQZ-.!%|2V귗b)UPJ(C~B ,9C `M[zKPV3SA1Lţ0T`)MH1LjԶVQ%jxo{XSא %8'i(Oȓ)r#Ou'0O`ZE{<I榬]6
-+,xѨq^Td(NHGHE0i$s6p6_<N\-g@ֵb)pi4&&(v &3?()`"i1p MYfiQ4tpć}bEW@qjx
-+0d SSe SX+zL+0f<,(>aZ#aMG?;fYwf8%,('f<`Y<YocGB\ \ax,PATPRbYbRl5G-yUb+V4EUy <SPYcHMy4/_Ix 'W{tB$=꓄H!!(zFiP,J2ϛVGIxbc:z}ix4b"(D@ȕh$dșhJ=%I M]+IXI6ع
-=Y-ZkP'뀉ͮ_tp`F7q==hO]jtV;Ц3FU)R4 d
-Xv{I/1dp"
-d"0la[|!@C%6$g}?鞶Z',-px*p^P Yjօ;+V?0T{6T㷮SYߺ!noĉ;[-( "؇Z'Jۘ)͎1QMMt[oYϞS]P"3 ejj=I8mVUjcϮmGuy q+20[9GT`0f9+VW(AiԜ ~FOe^l^,׈"-+_ŃKS[ϼ(}!πߧ➌r*^NW=ZRR蓩td}J&_*.O<u<޲"./Q5h /S/. ,¿"H3  3A_
-5+1 *8 YWc3_R*EfVRzahNE 1
-D9<E$#H.ᨉ p-V>$dЄH8Er)ʐY" 6V}7ҙ^WB$dj]Z隨 XIeLAtYV5!؝ƆٞF#!mm:TȵG)IED05*}sIou>[ztq#?ګ4(+ XcC/yE\&3j4FpP 8T\ @d]ATn#MPtd@Qy UsTƱj]}}9'mT jЦQpX . "bl*h , |.]Po͍j-|v/uzU;`,]f _0z>k{յ7np+kLFzB:Z]V!iiWtz}] gcr#2v+:h
-M<Iޠ3;lPfQ> щq߹PLѢ]^*^yͅrpg<OEFq^ۉԠ4 !7KM"al]b`ceILLlHH4'2NRktrVyJhdw5 >ת b%fGqiwW >i+Li
->|742O"e+~T#B{7$'e΁n8A~)hj!v{7h%EV*]|Ą7O+1GB8N JDx>S!v䄅PTe- M:<I5I#4$V$IݛbhOD
-e4r@ ᷮHFH)^ׇ!^ AG84 1kgg5FaÎQ``<d ̐fۢ36OH׀Kqj}#'&DY BQQ9ǐ2dlJPll?W BBC."=(L1vT?UU וftSA].⨲l.`ٮRF6>*R$e]=AuvDz0K9k։耼21l>C9Zʙ/9!2 1ēU*8$q1q
-V7'ؗimm6%#e&tidM=~]Ȟ!RB'7b{"&844zccu;2B|>mQh W4sH@ד[fZ4ޚˑ?(u/CklRJilVEGj3
-d )g9qI+,`8.+W8i4ڒAj>]&\xE>|HłPK!V*Ho ‡T9LmΠ5˞Ar[tyjR!G县&$V)+hj`ar O /I#}"4$ "T;:]d [ nr>Fѷ&0d4/gf?N_'R[Z!԰5l(Ϝ{`HNˏ*ghh! ж:(g(DU$qEࠢc
- (&ޛ D7 e)o$YzTW)Z~ N`Trk,j kkw߈~ fN!qsEeeY\ "B9iWbu9Ysiſ uL FXqB>F{H^W. qXs{!G*gQ rA,Zr Wd;3÷ΕpGe1mQn#{Bߔ<0\n/ uTry ];
-:M7Eut\q6O"3IW[i04Z'cѭb[* 籌ǞWSKU"zڨp[pѬHYbQNMKa*R[B9+p;ᐱ.n^H
-SAAZ ^$TJP!?u_w=NqQJ-SO wD$p
-{*#!ؔ[@}EܠznwacE|q?ܯ0'$עoҨ|.
-.Q SO`cbkk,tRcRbJl(F@ȶ_ZX#f'j}BU=~B㡦k~mA_ (*s {?+-.7Q]>f
-aK<{agx0f'<XB[ilՐOx4H6w`LX;R&0 UNOh|0{t*6*i03ǔ1B~ws03ʭ9kiEC:O:P.93V;$x)J~VyB ?
-9Il,RztRPKT|( }PU/aЅv/\<vfXViXr @ȷv}-iU2'';P
-a١UcKӄ[{OT],H,Rn$K<${F<}V5Ü7JU~
-i;ѤpÀ0p&;Pt&QF.grI\Ɛ/}On"_&';Qᙟ,<MLWvrP੣7pz/('mZ ޢc/V*W8R:l,[au;Z! ռPPtg8Ca^ >c%/^Edn'BsBeF#ӥ>zfXy zD&7covb_p@|]EV X] :!BDPFaXht")T
-N0I%F=NxDFǼ=$뚼Hio^Wˍֿ(>?$U$R˸". ]IJYj±cx(]֣IITrGEe9I{ذT(O_ګ4(+J&8<iP$m*
-Zj2 (
-
-4݀ 4fX]dPd]@h!fk2SsVcj,gWwι;S슔t:qLQVܥ UToH5Da\3z
-aN>4Aaz;MB%ґH*?ƶG+Ϸ}|S^[Ewaø ;Q: vA3?XtH_cO}B%_ts_W(;D?oXB4 -FMaQIeb FWȘh!ɣa4kr6'֒T%/hmd}XMfD'dˏ0/Q ;'O){zgj`YYyR!S_浪5&4T?c Sd#[浳grp)i
-QY_hzEctpdhD(G޳ykOO\^`ȣdrVA(xS,ח! 0nH~HI=
-h y56F]<+;|yJПi<q3'v] 'B|DNgawa
-r@x0+&U4ԗc2 wɗiY8d
-&?#*n<PMGr:`K.7a!82H]| ;
-KWH2bKћIdhv9OYkpܙ\]Vfv>E"b}T@AdmflkyL?Z
-1v`;& Dr߫$?|Q)΢eBG+8``8H Q;zCϿ2!\KŔU[GDSSrW]g{U wROӔh4P6QFW#bu6|8oByS"Wi5є:} 9tnt^sfj7GUw648.~IKXGogh+CXoR\MpT\˳^ţ5TҸ=Ly} `NRcI䝪KN~B
-+PRϤPV3fY]a>G8(룻`[$k`Ψ_Mw!UYVWU4c4
-dϋ.a
-a 1D! Ihގc;/2rIu09C4,{i=Op5[FFn"z,z?rUi蔤*80/Hg#[cu`8SMDhK'Պy^\kÐoAMe͕fxK|ryqDCOe#j
-awC f7΢:$.pBsހDl>!hG$ ыќ$v<ބ`D Y宫9m$fB\\-a?^//m+;YH46VDJF]5 ӊs偙\3Mu VKs0KDwǖxOxUkAM5{%lb|"}EaχTa}mkn0F/Y#,`
-n7I0Is$yHBNT+c|cXv:M,ZZTrQ=+=S{5ufqp/g{٘k:>ve+n[BҭA "/*/MWE@A
-]Vc잛pfDDpqG==;ww% lQ^..qr\a~悼PG++S&G܃qF; u۵x@dʄŞPlxW(+BT)ijQ;q (@~:[7)n N}9(0/zWzf\F~z|I_ 4uERq&>.tAZ{yx4# e`hFVB.2<DD(H&Kh5ZPZ@:X_ĚIbƱKēz$qytczϖaF.|Gc<6AUFͤZy%·d w5Dgx&_ _=qVǟlqOqŴ? њ^ -l6Z\a6=@aϦ%I:7s{|'/:eArͲ&,.l쪛* u"1V74 f[37cVŋjՠ[tɚ6N{bh?e,[_z"'W%yzzOƨ Ŋ:nnq/<ck4sa נ72~D5db`T01B^P٪k>aDuIwRGHXv-^%5M-!_Oڣvv)#sEsqz;)tw:F_bctINAQ2_ȕ2L,rp'n<ǰ5 |_12'u妚7N5I1XmL\Hw<Xw^W_Z
-4"}Dh*w]U5v&1;HYlB,cSsd$!6`O'""ig&iK4Ɩi(EPpga腭-uE#6qcP+w8 ӏ \hPͥiJqRoOvtIv~q
-ˉR0KLtQ0WeB^Y$`9v (dpn`a.ǿ,RgAL?XQvS2c 7>?=[AjCÂ4+}jG2r̳<R"Sfg(z&;T=k š?]\yEZ9.͖+| %&~k}#<EntyXGf*M^VtT^yw<Fń TӠ \sM&قdI`rʺ=G]fB^$Bv$
-ydG
-82[ZD~d-H᭫ҕoCU3<6я;PdU%جN!-aIf $Q#,a1ƬQ\̝hʒ[`!gɮe4>(5L{d.0
-NW'T pOV
-t*,y?j97G`&а vb6/61Ƀ4_tk a~
-%4کfhgɓ< ڌCs 52X>h@H$ACd pŖqۿ<#<*7HXJLK6MoNXo֫=tdge'k2RMH"]MJfL.!vm+ 1%!*J2 nvFcηyη3s8ggZ.St0֌8R#^"oE V[G; uT/~u7q+^d
-˘ܕaz)O(_0C9II^&-Cݏ&÷ cb ^M &)9iMh=<M{mE0CZaCV} re+㧏4:pAmrW0 |:üS#&8!tF0Y;j>*p5V5$+05É&x yH~r×mUEL%G,%NqlQzΉ7M]Wmܚ
-c
- 8j;zaJ6@jBA/=H،NhT[HW5Xj
-3$̐q^yfs0יJzsKra&]CpXG0 jZ?]}=Ba-Lm=e oNWA@+J"G2uC ƙa-
-CJI! :GCچX4Iz2T'(a:^xW`hpFa#$?O$7ldH8"0 fvB<M8atiB G#ڋxWb0 e0UA/ka_僄j[nLa{|{0
-^Ҙj0YJ5[ߐn) #
-S8߆Z7 [z΍J5̼,ZSzy[PР,>웋yKf#U!똵_!VNi.!L<LtET4w2ԛ+]zXur,9^Nfe$g>&R[g0}FۼՆnb5%ߧd{`,fg'9!LjU߈
-b@`r*k$'eOkڬ L7LsZfK.$T)\fq4 z(jZglfmmB_
-R`7S5JM΅]IMdM=\A f1r B"ڰヅd+}\uhҨ$L8mU0nW\]EEWE ( ""DdQ#ƠM5zKΙ]3'vWn}_]u4JnnY7DjLh0"DT2mI^p,x17xi1Fqv6D RSSuYHEyk^8<QVhQIIWE_gm:!K͔ޢ?&$KִzobDv /Q5:a1a{3^a+Ŷ4K| Ah<?} s*A }Y]vV|,D|9ЇvR!!Xw$#6#.΄d1b,=g31DxَҰQC
-AvU]`hǣO֞
- MKjʊwDd1? I=Nb4zb_|9h4l=( =Ra~ tjLJ㙺> yk[WA0ኇ|8FRc,Дxw0N҇ԋR㙈0rƲ??}!)47:j^c'6#k8wn@zڸ}H<wfOhvmans(?6=1E6SjØeY.Ͻ*9'BJda̍¸#b5GYjlL .mu`x`/-C$IBe
- 0AUrlj 桩r0I8D75$R&-0<議
-k"Ck;&#y4
-I4VGšH LpwBjɈt, |XʊHDߺ_UEmLkģCs'jrd)bSQ}X|6bU q) 9V^X4kȚ6ҝ5ePduYS
-k݉4T ]<OƎU;0o]0~-vb/N;U5L9!cAqa䗃}_O~Ȫ G:/9H) !sG|Kw-pd;+ =}AEw%A~X +WU ǚ;(_578`m*:?۲8
-
-R9ήj.zݗ\vGUlD. MTrv];Hʯ8 #vF̕^;MUm }) HJ>- xǩ"Tr׀w՚B(d2Ki֠ld iʼ;y.l-[䧤{WHARYVF#Vx`$eD
-!
-Fj@j>sB!pBy {axn߻
-ݺ]F 9burfI 5=L}
-#<;P|/GބukQ1: *EQvX%2!`hQŅa e?8Ev8T
-ꌶ7̏/*SxΜ9+y{?
-GBR2|Q$PN8SC6MJUJH`C+
-v{;MY[+-6NT3XJU0Q[Zwlagw#YkWՏ7VDP9]u/- f}hcka2c"*erˆ7N8%d4|H<爮zW EUFi
-LJAP(~4Q_fUn@<(JFYHY*2ryno_Zǟ`81 nBӓZбTeWg2١}GZ8j/v~L81 wZ.րCUe[1.9Ȧјg;2硉gA"#B尘k "7w5`6Fy"*戹{ixE C9jbSqYtCrGa<YX~<J|ϵO,꧇J%2[ɀXy>#*//ԝO`(Ln3;ڀ%y6>%Dw$'_:ᒾsn$"t$N |?
-QDDz;\ JwZʵRLMV'#qehC%n|,&ơ(C'@ᐺL0`t# ׀
-+b
-Y"W_aQ3(~7
-amõ[)}k@S^UYSX] g7+
-ܾw].{ TtYP h?fd'7!5;6\݊YGc>?%kV O23Uﭒǩ:ӭm~#5l # 
-d.n񒐌h'@HyĖLB_eߩ OXf#ZRάHb&g0n΍C&QQOmA;ߑYe5{<6CMCДKQN<&]-K*I"ȳu^
-DC3o|_@ryccNlZzSe=֌})I'h*ӟo!9H-hbse2/yh}3HaFS/Ӡc?h `hNb~: 'kx^ҨBYonyoZfPoXZ%{2g %D \0g ߜ7H,dD<_:Bĵ`jp,^$~3
-Zb6Dza#}8P^}v5x\Td:\Ozb\AfboɦiVއo uWӫW E}MAZ+Q"{yXo7mE#<a.f 9p<090/ᣥB;[ǰcskF[qd:!ð^a6IUK5?ӫ 5j*nω/fā{bnfOeZ)#Ω}eO Ʃ1T,w`)Xߪ25Tq&nP:??
-+\Tr)`@V4*]}ѱ_jwѿ2g&}b =5xy.4M)y.yk4`6Wd&2,5zaӤ\
-f.m)ڨa">|W?̯ x*I1{>
-cx 4~h?{7it7 _[Ghvc~1Y%GK8*;. r;dA=M7VcD l 8XP}J5׊-\q38q3==>~?[uOzʒSԓ'beZE 4cǼᓇ` '&>T72,4ŨbJQ<?D!.q`cf"Ve9zݦ.d(|˶]s
-d^B8q+C$A<&zyohI.ي| 4 )s*g33$se~7s<lE00[,P}>XmmV`R`b~xQّʓ}'^]pCmDE^愈 :d<'LiJb k$ ?WM-snnS]N)#% ~z%U 925Zu<V,Ʃil/k^8T.ȟ.89T+* Ȥ#[9Ovf&T`H|C+n1&*e}7lm?2/=8:q~M>B9Zhl~}5e((<_zSJZ~Sl2e÷ ^j ܇g+NUk7u h<hu5z ~:'|Ȝl9}
-=W
-%Bd o>q࢜M|C?8̱ӊ+7UwI5&- +ˎ ǃFbEhXrrEY(II QSv::_=~4N:iKX7 Chvt`C=QkfwIMG3fӿEj!д9˂ѦzBڔ)oeQ=
-!%в~XK̠نp J Ip _v">ɉkt?hu6\U/oX[TSتRSWFqFn0#9jI]v^xێjuM𚜽NBed
-0-_%?Kf@ŨmPwarI76nSoetT% -4o>^uiAD%Q[ؚ\\>#C!:5G1  r$J֕JHj) L.ن50R*ːgoՖ8Ik.!vՆ\12,GXevQ
-  f.c(]GL@v_TjU+&Hg>%(Q%"5(LZEfEF9; cl?lĀm7XMЎI#2䀬_[a&z3akD9o._XN+>Yۋ74/b;hxO&B0i2r
-(ªm]Zm}TRB $ 
-(!(<*7@|Tef~t߽nk3;o>GLIU j`udRpxIpi1n?ΦoOyw寳W~Oopu.W JD^#Q` +z`C:xEg(ccB1->TqޗVK0lZu2-CpK+ݓw.̛Gy`ex9c;hfnˍ@֝i)8qs/(&lk\
-LW3"l M=7TژƀގěZNu;fZD>jEjē#<L`ѯ!@"CvB.vy~톹Nݷf?e%٪  zg&=مLI-v=aa7)-hNTSes|v]ZWhS@t ^9|* =R#,)m6V$6an ڍ!L{DW/ܲH;Sa{3S((8KU!򂈲TL]Omc'l[T? }}htoT[V۫
-CQ \0-I-j8jzm|
-IUaq6{`&|e}}e#'7`$egs5;%+TFa!Gky "Ô_ptMY\N8ξ9F?Lxvzx^ZyibCp$2G[YHqư 'a1#`Sĸ5<}9 omr!NŖ ĝjjSxԦIJɌR|fr!Y$dWә*,6 ՐV{?YC 3X,<EdՖd,&B[aj
-*+<7|g$HONȢ3xFl1iE<k<M1"ʉ
-j.GWs׈:; A-!IOkҥ_P4I_FT^
-޳!"Ww`g8e&{Jz7
-spY{;PUOzKH')Խ![xRİ-$g1)kj#b+ ƲIrc}R023<V^RH7""B谽!RL"-V PI4p0 {CcF긺_n~dl&5˷gɝrqT&Pmv؈R0<{8 gA}.p杻/b
-*O%X.:3XO3݋LdMyc}18*nZvY*5PxA#K4Yݠ
-oJZ^Qû{ߏo^Z]>}1Z wsV0í밿g.e(.Aѫ/sRI}F\0~淝BSMZsU.;U0
-=dcX[ &>=>r$"<S^2YtUvo I$yTkb`Bwru?LX'˅e
-}/zVU$hh' a2³iUv饃$
-~⇆
-(eWp\;e7@z 4AAhb5Ϟ? 쌶q{JJq&Ch\G06>H;;۫gFlk3+}9{`95S6r4nt(7u)P0f.}U>kϚc] &^Sm<7n\W D[^#]a2Z;O0n|)(wV0pϛUm`
-?g
-|ǎ]By@welCrf< 9%:͌ΈV@9Sy6b=%^HJKbcshmn
--kjzPNBΖB=!bZ{-to%gEԑs"~v3#PͣG9EC1dz`Ko%&-bȀ1LTIB#ڃ0d՘F-vE8XFN66
-U. 8`x tX6@] Vq85w]8L'{wN#f$d6Ty^AVB؃ȰÞ1'׎^l8
-_wNnAթSuU+f-IIΊȣ1GKt iFF8@KI(STq+F\M2![&xl:.;N{fn9gfnf!z+b{?mwϥމ!Ľf
-UVr&:^f 0kn^n067q
-< EbIUwѺ_akf7 ƴ~imDk)4=EVr&W4Iò@_NH!0yKмjKР
-v 7^2J7ܔ:TJo65^gs2XzhdaYaz-ѐ* rhe[-bEMI\qܖE0|+? 1@0 0eK`:-hnQ2֐& ,"YE*êN+pRsp;LUH!ƎdR4OX+UpLX)Zugk
-WJo&D-\ed?
-fz WVX9lYGt:!ce)Jjj]Jqת4G~aŮ!%Horb^4PIA_hU+"F!{ISH^>R
-N֭wk+UDQ|<TDD+!(mO+c !hTȣP0_CX>8M:?{(2`*80Gl
-lx7.8z9UH|b(n+q{X=(Z=54mxˮ |28U5^Gn//EnԱ2JV--; ,z8_'hmnl؉@_jO+Ot!<"|`~bJWhp B^
-EQnj }0!-0~J v8{I_^[*=%+ح.* eX|e\?3޴;L+A&1IR
-QuuG/,|-b0#sFcl+CNItߴFV
-lnմ7hyo1@,8V!,-dOg$[b -rLimtMP V*_SF?2#,we|$;>; 8Lv/g&%G1Ў-Eh 0&0pJEEij,َ BS@_wzME:GH 1'm \ݑ8Y<F_,T9$LLKԺ{۫γ"̈́dS_] rOMgHi187k묃1oV`3Rw/_к-fƛh^G 
-J2[Y꥚U`1=42N'Lٿ,&#c-;"}?oy ~nޯV93.829{!+ERyruWF
-c Ι§y90 :YEQ!8"Gۺ:#yqa!dيwTKxx@wlC9_^vM'ܹe zM]S |_ErP,.ZfX/32]zrhR™h>!҆5#`^ȏ}'1A M?GCR?Pk'#@&aYM%& EMX-?xc!6>%Ec~Dq,p"QAixx+VT*q$ 6#3mGYr
-endstream
-endobj
-144 0 obj
-<<
-/Length 36
-/BBox [0.0 0.0 103.007 49.3506]
-/Filter /FlateDecode
-/Resources <<
-/XObject <<
-/n0 193 0 R
-/n2 194 0 R
->>
->>
-/Subtype /Form
-/Type /XObject
->>
-stream
-H*T0T0
-
-endstream
-endobj
-145 0 obj
-<<
-/BaseFont /BCDEEE+Calibri-Bold
-/CIDSystemInfo 195 0 R
-/CIDToGIDMap /Identity
-/DW 1000
-/FontDescriptor 196 0 R
-/Subtype /CIDFontType2
-/Type /Font
-/W [0 [507]
- 3 [226 606]
- 14 [606]
- 18 [529]
- 28 [488]
-38 [459 637]
- 47 [267]
- 58 [331]
- 60 [547]
- 62 [423]
-68 [874 659]
- 75 [676]
- 87 [532]
- 90 [563]
- 94 [473]
-100 [495]
- 104 [653]
- 116 [906]
- 122 [520]
- 127 [478]
-258 [494]
- 268 [494]
- 271 [537 418]
- 282 [537]
- 286 [503]
-295 [503]
- 336 [474]
- 349 [246]
- 361 [255]
- 364 [480]
-367 [246]
- 371 [264]
- 373 [813 537 537]
- 381 [538]
- 393 [537]
-395 [537 355]
- 400 [399]
- 410 [347]
- 437 [537]
- 449 [745]
-455 [474]
- 460 [397]
- 463 [397]
- 853 [258]
- 855 [276 267]
-863 [435]
- 867 [435]
- 882 [306]
- 884 [498]
- 913 [498]
-1004 [507 507 507 507 507 507 507 507 507]
-]
->>
-endobj
-146 0 obj
-<<
-/Length 516
-/Filter /FlateDecode
->>
-stream
-x}K0^޻JƎcP$ C]UwC#$2a='G*)X;mw]86m쥻ʊ=5mDsQ70V粏b]{޵.Z,DO^wO˺;(j$~{kg"\})ي^voۋy_[! b+ۓr'l[OǨ}e˜R =S:ۄuD $9Z9sU=JjmymtŽZ6 (f (5ԇ3qm'mT'J8*OKD>AvBIdbiDŽaL` JcOLȩ )\Q͠$ h3|L4'@A.A-
-}7p_9@ UYdЯ]RzcrH'{ɄּW@&f؛C|>_޺Buu7nB BhZ֧QD
-endstream
-endobj
-147 0 obj
-<<
-/Ascent 750
-/AvgWidth 536
-/CapHeight 750
-/Descent -250
-/Flags 32
-/FontBBox [-519 -250 1263 750]
-/FontFile2 197 0 R
-/FontName /BCDFEE+Calibri-Bold
-/FontWeight 700
-/ItalicAngle 0
-/MaxWidth 1781
-/StemV 53
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-148 0 obj
-<<
-/Ascent 750
-/AvgWidth 521
-/CapHeight 750
-/Descent -250
-/Flags 32
-/FontBBox [-503 -250 1240 750]
-/FontFile2 198 0 R
-/FontName /BCDGEE+Calibri
-/FontWeight 400
-/ItalicAngle 0
-/MaxWidth 1743
-/StemV 52
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-149 0 obj
-<<
-/BaseFont /BCDHEE+Calibri
-/CIDSystemInfo 199 0 R
-/CIDToGIDMap /Identity
-/DW 1000
-/FontDescriptor 200 0 R
-/Subtype /CIDFontType2
-/Type /Font
-/W [0 [507]
- 3 [226]
- 28 [488]
- 38 [459 631]
- 47 [252]
-60 [520]
- 62 [420]
- 69 [646]
- 75 [662]
- 87 [517]
-90 [543]
- 94 [459]
- 100 [487]
- 104 [642]
- 115 [567 890]
-127 [468]
- 258 [479]
- 268 [479]
- 271 [525 423 423]
- 282 [525]
-286 [498]
- 295 [498 305]
- 336 [471]
- 346 [525]
- 349 [230]
-361 [239]
- 364 [455]
- 367 [230]
- 371 [248]
- 373 [799 525 525]
-381 [527]
- 383 [527]
- 393 [525]
- 396 [349]
- 400 [391 391]
-410 [335]
- 437 [525]
- 448 [452 715]
- 455 [453]
- 460 [395]
-463 [395]
- 853 [250 268 268 252]
- 863 [418]
- 867 [418]
- 882 [306]
-884 [498]
- 894 [303 303 307 307]
- 913 [498]
- 1004 [507 507 507 507 507 507 507 507 507 507]
-]
->>
-endobj
-150 0 obj
-<<
-/Length 585
-/Filter /FlateDecode
->>
-stream
-xUˮ0^. EH R}iWUD}7P %щg̜avz`ᗾ-v`纩z{kҲM V}ע B|{=46XYކ^6U{s_پn.{vtu6Aʞ]EZrpu>,;$adʶ(m_4{Rݓft.=Y+g͹dX=J 3C?>(G9tD*2BQ bh$%Vt J7wZdP!%!-@ BpEB!^G@^?!Dtzx{f3g}`;Q 퀨BEz 4Y@l 07H5/(Ƨ>+$j85OIHϋS<dwFŀ' XO1Sd]|9B)3A/EzbL
-W(AgT#bG\Z]VtR̆FYvI2"5+c-ٛ3_f*z\R9ǝ9B.b[7n?
-endstream
-endobj
-151 0 obj
-<<
-/Ascent 905
-/AvgWidth 441
-/CapHeight 728
-/Descent -210
-/Flags 32
-/FontBBox [-665 -210 2000 728]
-/FontName /ArialMT
-/FontWeight 400
-/ItalicAngle 0
-/Leading 33
-/MaxWidth 2665
-/StemV 44
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-152 0 obj
-<<
-/BaseFont /BCDIEE+Wingdings-Regular
-/CIDSystemInfo 201 0 R
-/CIDToGIDMap /Identity
-/DW 1000
-/FontDescriptor 202 0 R
-/Subtype /CIDFontType2
-/Type /Font
-/W [0 [500]
- 131 [458]
-]
->>
-endobj
-153 0 obj
-<<
-/Length 226
-/Filter /FlateDecode
->>
-stream
-x]Mj0 >̔B!M{
- gKԑO9VNԩmڻrD%T]qIua;!{uqFJP z1`ΉvEsOalpDc MJYQHSh^燶-=s{Pve<e%H ok!f*oF
-endstream
-endobj
-154 0 obj
-<<
-/Ascent 891
-/AvgWidth 401
-/CapHeight 693
-/Descent -216
-/Flags 32
-/FontBBox [-568 -216 2046 693]
-/FontName /TimesNewRomanPSMT
-/FontWeight 400
-/ItalicAngle 0
-/Leading 42
-/MaxWidth 2614
-/StemV 40
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-155 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-156 0 obj
-<<
-/K [106 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-157 0 obj
-<<
-/K [107 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-158 0 obj
-<<
-/K [108 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-159 0 obj
-<<
-/K [109 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-160 0 obj
-<<
-/K [110 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-161 0 obj
-<<
-/K [111 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-162 0 obj
-<<
-/K [112 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-163 0 obj
-<<
-/K [183 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-164 0 obj
-<<
-/K [117 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-165 0 obj
-<<
-/K [118 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-166 0 obj
-<<
-/K [119 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-167 0 obj
-<<
-/K [120 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-168 0 obj
-<<
-/K [121 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-169 0 obj
-<<
-/K [122 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-170 0 obj
-<<
-/K [123 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-171 0 obj
-<<
-/K [124 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-172 0 obj
-<<
-/K [125 0 R]
-/P 67 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-173 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-174 0 obj
-<<
-/K [126 0 R]
-/P 72 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-175 0 obj
-<<
-/K [187 0 R]
-/P 72 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-176 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-177 0 obj
-<<
-/K [138 0 R]
-/P 81 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-178 0 obj
-<<
-/K [139 0 R]
-/P 81 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-179 0 obj
-<<
-/K [140 0 R]
-/P 81 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-180 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-181 0 obj
-<<
-/K [141 0 R]
-/P 89 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-182 0 obj
-<<
-/K [142 0 R]
-/P 89 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-183 0 obj
-<<
-/K [113 0 R 203 0 R]
-/P 163 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-184 0 obj
-<<
-/K [114 0 R]
-/P 203 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-185 0 obj
-<<
-/K [115 0 R]
-/P 203 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-186 0 obj
-<<
-/K [116 0 R]
-/P 203 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-187 0 obj
-<<
-/K [127 0 R 204 0 R]
-/P 175 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-188 0 obj
-<<
-/K [128 0 R 205 0 R]
-/P 206 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-189 0 obj
-<<
-/K [129 0 R 207 0 R]
-/P 208 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-190 0 obj
-<<
-/K [130 0 R 209 0 R]
-/P 210 0 R
-/Pg 14 0 R
-/S /LBody
-/Type /StructElem
->>
-endobj
-191 0 obj
-<<
-/K [136 0 R]
-/P 209 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-192 0 obj
-<<
-/K [137 0 R]
-/P 209 0 R
-/Pg 15 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-193 0 obj
-<<
-/Length 10
-/BBox [0.0 0.0 100.0 100.0]
-/Resources <<
->>
-/Subtype /Form
-/Type /XObject
->>
-stream
-% DSBlank
-
-endstream
-endobj
-194 0 obj
-<<
-/Length 308
-/BBox [1.0 1.0 102.007 48.3506]
-/Filter /FlateDecode
-/Resources <<
-/ColorSpace <<
-/CS0 [/ICCBased 211 0 R]
->>
-/Font <<
-/C0_0 212 0 R
-/T1_0 11 0 R
->>
-/ProcSet [/PDF /Text /ImageC]
-/XObject <<
-/Im0 213 0 R
->>
->>
-/Subtype /Form
-/Type /XObject
->>
-stream
-HdQ[K0~ϯ8osri> /x *խ뺉_o:.B Hr4rڒ͏fkݕmQ6|m4Dz:Cz7@dlؽ5ӂk@,WV2\_*do5^L^rE+<}e~BB3z m-8[vUWEWW%w78KSm+C8Ifm<
-9Ƈ$tNPG\!?
-endstream
-endobj
-195 0 obj
-<<
-/Ordering (Identity)
-/Registry (Adobe)
-/Supplement 0
->>
-endobj
-196 0 obj
-<<
-/Ascent 750
-/AvgWidth 536
-/CapHeight 750
-/Descent -250
-/Flags 32
-/FontBBox [-519 -250 1263 750]
-/FontFile2 197 0 R
-/FontName /BCDEEE+Calibri-Bold
-/FontWeight 700
-/ItalicAngle 0
-/MaxWidth 1781
-/StemV 53
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-197 0 obj
-<<
-/Length 51744
-/Filter /FlateDecode
-/Length1 133000
->>
-stream
-x \T> fx000 /QPaD@M >KTQ4+er51-nyǽeIYi Y37`kZ{} 
-Fg7> ׿-,JGAu_N8K' _{6; CpJ7Zb0s3\[T~Мf[0l'UbTW*Gߪe
-FZ_gg }㩶Sz_k}.* =ro_xT^[Ҩ3YvlSVi^<"mg Q8Oǹzf_l6(-Ex
-c0^("%(wYĖhvagxiz
-z `; :W%#ϰh,m)y_ H@ ":clxG^O)l,L{wo *={Dj=;Ez>X;-9$m4%Bu ՉZZZ:X[.17BxR)b L_8R7@%cPkPNE-G:RzhmP,},
-;]`3
-M-,z͠΃a)["= 3hb8}S`x \1t(r&,c/&aJƳq1\ H a~$  H@$  H@g?ge9S|xY93  H@$  H@#H@r&a#H@$  H@$  H@z924*A1֡CjGFZZxއh H@$  H@$  H@$  H@.'$ >$%cx?:5d$ @ 0 ƀ΅0fB3,`d
-rX)+cwr%&vzsdn2/6Lo,_a,_ ll}/~?lly>\-&xozӠQRx}_ ~yPV}uɯUiNӫ?5#lxԳKsyBV)]JVH;hCFJ^0 f
-,g ezLly]ĖkulgKl3BV"6BRJ*)H
-ԒFJ:P؉S_$ ;9 }s.~-~#jopZ+
-ʍ<cXƝr$|c1hlȦIds6.H10xܖ幤nVK}
-Y-X[ԺՖnKJnW`Q Ϥz S\`dEޤu%7%V:ij_:qG0>px]U:ܶe;[rR# .\f+uS:y;Pi)e6Vޑ%̒+ߛx+SƱA,Fbgu$Ghz3F[tdGd.+>-1USm ~oIE/9`zGdJ_ ckpYLu,ƓZnIn]<-AKV.ֶy,I&},7&wƆS }NdsKK
- ]`! P!xN̆;PD;LC]z
-Ro%ńË́RPB(& )G";EQ<p'^TQńZ4jh9Q*pB%aPN(#$hfB"DH 8B,!Mr܁@qԟqBcGQU[QOP?Ec\P_A}A} EP>چW PW_/#\B1EIaANFh$L%4 S   u\8PKl꾄,B&!NH#X 6) AA"A 0#q/ҋډ-Կ@} Կ蝨WW+-6p.\t2feUD2#eLyIRś:KEś95fgmgGňi 5@m{6GX+oh"\fI͚ 6wJ g3!{>3~^[秤Wp~*;Vs6m=o޼6{fb5-uTu~4n z=#:7B
-)9U
-_wp[d,,~,
-\Љ{@
-Zvq</\r#;tn1ͰRX b,c:XzX7pup3mp;;0wݰWw-r)/G`3>a? , ->Vm[ ׌\'`r'. OӸ{pemϟٓ^x^/W>k. Ͻ7p[6Op>.| г=ɏ|ޗK[8ug,1NS|nWvyչ_3_-+P<1~ דxzo5GV?~GUPw/K<U#{Փ[t¿PdgãO.Euxٻ?a4WJ|w? G[<O-G0wTˏ qnSJ:_0D<:iUb
-3-352 JuJpZ`Y,1# YKVUb Ka(flWD"f2c:~?+DK_b˲e
-s aJ=B$l-ce0"!ŕ9`b2h*yKǽY(ō >F% A0
-΁ݠcw^^VVW4f0W .G$K?*0DJ?x/
-/
-ڳs! kDR)d/Z[,˷ZCٖ_пX5 bR,<eXޑ",IX`щAAbIge)HSHAJQJ+(8H~UF&#;SNr\nBWqrN#(J7E҅!xU!Dݧh::5.>1#=.=d )/iBHK GOjuD(FmIVda5?u:L hYզ%X,&.
-,1aNbJJJ¢  )'ŵXI1s]w/;y%s s yYEk&&BDKZПBE,bԪUF +4is;J~Q-y+ 6ojJH1#$\#)XK QD.lZM@()3m%w 7 tL'#G )EFcF7΅J;cA0PzJ֌Q7Z̏M5) qIq8k2H?ҐdڱGȄ0mJ K/
-KMϊgѧ#2ĭ1IdhǷޯ$‚w쵴<@ k$v\%FjcwˎlG8\%6c;gԥFmVPpouPI+*Q%ˮz1?`̨V:$86|zŨ%,1ܮSkذ蔤K>qZKY/)c@\'[<N1jKknr q1:Nܓ>}BFY6cۘN'zPIggldv{Xaݮ@Hlg/K€ɁL2ɩC;.J7I:8DP`:s5<ܹ3
-ީooAY1W0$`]QUɷ)xƥ mdž#Ϝcw|{m2V*ON2dC=2("e-Fk4QqG_urt5>+nCK2fsɸ՟Z!,d7L\kZI֫JH/S؛=,t8[oB,c،1rHc#v>ϯ#uS0&^140'EDNcJ73!|57QfV7u!qvF M-DPsg 4g [XgZXL^ܚ&s8 2mlZozA(,I[r޼m1i7JgTI,R\)]0禥'jb;bWDi [ѱ}^C+xG j jCJZcGTp:F!бDu8y03~yg*y`&6<[caq|{FA+OA6͡egGj[LL\0m[JVH)jbv
-21:_ /7/h{!O/<CNz,|d4q!GRy&!;5%;^+t^+%f''g' mf-X.1c@j1-mp3
-ov/+Cd}RBChS`JDZdElӀ<aVadF-Y)FƖ,F?|SL<d 3)qM#LyzxMbtv&K^fzlEт$i-N?}5?#%tkEm-% I-&,Xfd5݇j:]g֙YS3&raZU(x
-0{HHp|ט?" j=4oK }7b\ϖ<
-ݞjSVU;C-Uk?uTa I2\)rOgt s-2|}{dqI%.^ >܅Gg`H2*ZK[ׇ6Yȏd[|oʖS߅$y$]Ԋ9'6'j.lϮtQ ^j u6v?vUtS\}4Ó;}.2Mo3dw /dC׷ԭG`apx‘T?I)5=.g7cjI&ӂm
-o(oMZd*퓛F81_WuZ{Ujy˫}/J%y.o`;@a 63g"b cOhҁl!t_2!Vi},K6Izf(>U\w=?9` ;БdiGnC%oUP寴tk;Od&2f'R2#>4u4?8ݼ`ܗ-Dy-FEO0:uο ) .g w1N\xF(4|Vm[ 4cL\+8V&Ae%ag ͬFsua W1T,NEdž֞;ִi$4Bl+mٹ;1 Mק ٶsp }pw61:Pg<k_䣓ު\FȘ&Γ+~@ѯW;ZFD 7+E *!5,0w :>}QO=9DJGo`8[w$5c[ S0ͿK|0 2;8XZCcI0 Y,^si G_?҉!Tޱim?&Ҿ/܋u*f@3jE֜4J1H[,ƀݹ^q tN3XE㋤.0ICT/YCAz *[/9Ų H.fx^?&TW+V$&*lOE~@=c)f&i35!5cYx%NSP\K{I*,z<u
-]niN}ŁPLd$ z f,zY
-2}\YM#46L]%ic]a6_Դ#I9?}H5volwo{I*yLƪn8$ςUGbz֮WNem)gЕ9ʴ/#WY|SX*Q
-?/s
-,a[X 3}oI1Ol6G5*ĊjƊO7S؊, `*a |QT~Z)s F;>pyln֢d}:Z7A
-ç;QB".Tz@G-53hخ3ֳ+bj܉Q=W5k)E#kUw غMCVuM>ON|GLJ^hͫ =U d?8>Gy˴4=ړ%٢ >v:QCs)vJؓQf-O?*$xP6j(] *#zOb<UVD 5ep5p\"wMgNu3zֿoœ1+Z"U:dȦë"Z.i:O(i3 :w'`4$^;k3 d7夕)e6G.
-ߝAe
-޴oU3 ӭ,0X*@NU|q.!]mU[]OS쉩l16 ]IIVmwIv8"qb_|_ݘuM,e {d`3\k<)z]N{ Sr "Gaou< Xzv=S]+._Om tdӖѬV% D6uxZ:_Ě._뎏FV'X1> 1Gҭ\ۏ߳:,*g|z4:|Ɂ9g`:HtFkj1M l/l`Gl'i`>6mF ˱&B`]U&%;7nKd"2 I;rJNAD.A #^z OSչ8h]Ou~`;cIx`YۚDJi3mF9[Z?} ]1<>6YÃTL h#_*sjs9IO*
-͉1IXf3
-tȢgђHrRKS"}Z V:U''7N
-KA(n]mE;A-װ&mBJS }j+ֹu(
-/ {[w=)M Mk#69+nO@g@cvF^gs[\V?VL9%X> ZDV#N=t㦎,r*+c} Ill P(ө\\ S- "]eSV&Q ʊ:[M]aMSxAaH `MNYwH6]Kt͍P)=Q/.W™U0+FԼϯn>s'M~9v{%6$#|ۄpH{0'E8AZ!6d|eCJϑZ U&
- ;/wV 5-VjDR[>~SxxMV@10޼o#}?*=IC,lm k_|D^ɷ7 pJAZHY#'dwf_ n3ro"MnSf_t!zWoy$8MxH}IKn`B}U5N%P*U'Ȏߒ[|&5O[vdj0ˤѥWF6w'^>![
-.'{oLB %%B"Oέ_
-rXc؏|܇܋95`O#r 1G'ۓ#qPï稃C[^HVhmFRdiy{ oZ.̠擒J8NVQ3 mw@4 bQkmڶ.;=1U~9ҪUb%!h=;5jOx9[JbuzVK>5tǢ\5L|to Ŝ)匘k;z&tT*jYWíuV7me9W$0mF `D[diOUmʞY(v{R;D hG!'SB`IN%*m!
-EV;BnH
-pZ>8}Wkǝoߴ165`Pv˩֩*Ak*z79l>V<ZA!cӌu䙶^Q\6
-ٔNnvR) Kћ&uD0[nkdu6F˘Q$(N}b$q:ȣApFJ#ϸEVD?A0qT?8XSpܦ |~CK&o8T$mn 3“@L药pэ*w 5 3y`U]ϲ~=ՁMu{xWWÿewiթO9Fh`ovD-m-JԤ-x2
-J q|=|zm)RBz
-aoT* \sf6J6_o[v5b\bZLdVƎAEm\@:ܺHT)k?[o?Sj
-]k~luZ*as,
-Gƒk 5c"B2Y*
-JW'b
-t6#j~=O%wA{)0e-ctTl;jk5`r_5܊
-
-I~]
-Φ395bNɍ.-`7;B%!O"""E۰nqq
-֮.B"JǐaxCas|?~w;cX.~t\W3IiIP_ga67jl
-6v"?Qh(,SS ?$
-g<gKőBSz\-~,%44PoĦ5NAߴ3۷>)Z34vR32;9d#]c+"@oXpƘ/a[gWC>g,Xy,T+0B=FDZ'*R)k#0:Yð[d7dо|xr
-s e0?;*
-̇=F\ѴypOysb[Ahk,@iy(U/ Г$] R
-M<omʃv`Se,EE7`
-SZÁTH$.%0M6,kB  VV"i,蕏5bY($P hLB&_׎Y2 xy
-5'! F
-]ipw|F؀=v. csX'~Tz/? w@>hojFP/M
-n}-㾺YtW`jS
-&L'UB<?$^\`QT/āeV X3FS(7vQd4>h
-)+ٲ^tZ{qC~bJ(B\Fpy604y\KWp%vKMF'hvopq'ۙ4?WX4Bƚm-gt<v߫:j[{wb1?ÚG8PlF{yz*}/Ŷ3GWƚ>63ϹDT&P^F[m>A^XS06ִמ[|&%NhT)xLhJ9 <^{6bvF>PWqb ,3m|pfe?K<Kh+|Z_"/\yƂe"U)\$H{UO4LvE(TΤ-Y"3sJG9(9Nm5i(Q742RHZ,d4m Y`X8Urf~Y؛z]c |7.**#a7ml/D{lЇm~=MJZ_jmJ$j2\D!.pbυ-H/YbX9'NY8⯀/Ee~SA^ari41 <{,SO>HXަ㏆G-<O-AQtmQfkSC{H$ط`̗t  Eb;Rq,QhI{X+eFIBa1d>٧ {Kibr"{}YY>ݻ\!zriUQk$A4 JS^7
-&~$$# q6,6luy7 o70
-`kcjXJOU/Z?-į+t`W}dLXdփkC֊F}cdaok6 MW=!5FmoA3W']}^]{t2ȍt hN9 )G3xؘ_a2')s$?/g7y5/&Q-(k:w\ N՘U}"ktN6,R}/tvs&o1cROl범`R[q
-N8D|>ĘܡOy}1A}zާ̴M8)\&S{&_6m~V<PRbv~^~5:b@˔WEwD1M)6yuWx]ifE5}/_-;45ͮ$#3*N2vn>Nm3 WR9WT"L9a+[vXY
-) ߟNQserQRRb]oEVvp23Qp%,l #ѥ$e m~W_
-G} RamvIMj8jyc#l2**ա7dL"/;`_y2(¢3@5JǞf=/ksT
- ?]@3u,H.+G*ۯiV W o.$l67_rPd(l=reIYҡq
-ct%ЂΔYFNfG8u>iս69b>9x!*CN.C#>wR{8-P8ǩd_qMKᴎ^
-j_д~㔊QMڷ" r
-Qt:h<>x/[_}ZbK8N0eS+cA\Dia'`b#N]5mcJ--Sh _3*RTIq'#l3~AX3O( HLO '.ы_!1%b)&Xԛuҹ#ő֑BCrOs[׈`Nɾ[Ƭ>S7lS-/sm8FnG'"`+O+IeH k|8Q_
-*3
-e]*T#B?/ ;
-<bߟ mhAjN+aغl쎘WErFZH$mY{:OCkHi; *TWz4VK9jgoFWE2V.̂'XF4Z1h_ſUr<Y9[yMnyR.M%ђĨQ-7h w\Q8>6xxN r{̃j~еFȺXvU_}OWÑVm.
-p]$Bͣib6VhhNٞ+w,_V>:^n_,U-< G,yOFc||ڊnΪ }X{b
-_{e1W!yO \+kN
-QZ _8\Wʆ8Rՠ1'G6S>c6K<m72ŨCWgښV7wyXG l{IdܤFu Z+=)w®BoeǦn[m:*8a (EoY`l^^nvUրpturdi_oٵ( ,+LA։!K+2K KaMkQ([-?4.:"->-hbu_[%ߠyhZNgTwhq
-`Î$q\156W~uó댝iOHu:5<uꌭG] ]֗]Չ_'}]>߽&޴eZF-䢎FevXe9c]KvTmajj]HxT0mW"89P+
-JQ?Xg΂2[NG@ո0.~E`P CdGiٱ,/02U(yyGid >}w>MB&i(f擋Ң$9aň'Bm gҋ^t2T+lRm3<魀i
-h~Ƶ ^
-"s_eǶt\l'$ \L$925bOTdv'l-$oN,J%&ʼnun k<~lwY{ȰeiGUv۱=f3ooSZ
-%UIv`!Tog3e*3*qr^Fnn/V͍JSzw&i)7.+*b#?q&8czKt\r۬%loi6ezX ߃ 5id@*_>Ťd] fA2ګ,W-sFp׫q@j7[ܷCMѢ#]7vK2\e넦.k~4Hoi`{e_۸le-9ɬ[eu/[ww u;ɘ9|i_)ْgxt)1ym!j?'sjk{g؉;5Xiм8!bpwÇ/~Wߵ*Z~
-x#$ YںY,?[pvN 0^YlO!_hDQ^u J/g|Ixh(\fܤ ulVdķN)I.79(AqLUᘶ`~a%C=|ZSuBGnw5qyf[Eh&T
-5C-7HƟ0K]퉡궢TX:d_z}u\_q4*lY,^.eB mB\|oXE;: sK+;.rеZ&9#7VyzvMttޖ5%ݱuiV!*/Zls޲нkq)k9-dM,%lHρ%u 0wP4ks&d+y"oԱ<{ 3 ćd̡LPNX[҇H/j
- ѮXsD?1Uwπrs,<:4r.}P&f
-XnAX[˙s 43˯%onP~bCZhG`΄&Z6tzm-oCyǿ=-w<3:_Dm&yy<xr}A[
-fe#gKg4D+3Xͼ
-?y@
-є+ҜhkE8!1x20]|96Y;&U/p{ըn]'"RӯOrI1T(2 m+w~ducj]~+
-!+ϧF[DsfȖջ捻}_thD/*
-ʌk+S3 I xwd%t ҖjƠd(Giuƛ{*n/hK&^dj͙)StPՉ9 giWUh>l?։jpa7=Y6`7N|y^
-(NG@ޜTM! J*n׺C=>n ,
-K2f-{,M!N4N׎cY3,Xc dzj*F5>%]';
-8DE@
-Tž.(> 9J P,F>C$Rsi2;KD"#5om] ,@lnM[> WRbv?l)9nYbn@_w;@6ᮦC. [XΡwS{h=ot%=hWۢA?oC%Zt}v8Fh%}c1 HMs|>n#[ns-3xzI/ƽ\j\z:6]{`pw>QWd]v֮(GkYCSOr;a&x"?/H/9IrW8I$_~Y;7$`Q)$7X(k
-sPU%OۗIQ9[UuuUwW/Ll 3 3# "kHr㻆h\eP4h>͋7k_јD<{Nu0H;hW>;o;մ`4z߄yFڳW".,1#}.""N?m(脗ymdu乑^}VW;ώ߾d/TS{n/\y˲xowwỶd"rܙX ώWu.ؑtT{f:;=)Xp4:Zj#5Do=9dq,O->f9Kn*=7?ugo4.rG'}{yev {7c[\5eCuVfh/C\$Qz!_߄!)`崇HJ ZjDnbk?A=WMbe[] l%`UHb{ jѫgٻ:ky^8}+栵ֶ/
-Xzh)6^ v vAmyߑ_Fw}>VgS^mnKdm!-jUrx{+wvmZ\mHgN/aMxa \:^65hdwM+v^7Ujejfmd@JD?Ԉ+dJhag5ʙۆ;ΫH*3OT
-{Ҋn ^tHwb9/Rw
-\1\0q1 dFNl`o`W%.KN&%et11'4zay. 2 ̤?{pR󑇶RM8kkmV39_]t$kԪIEzg#c{>Y;rG
-[iduF*a9m-E`.cRMȍ߂-2%s r 4g>ϞL<ţ7fsU_u%B>B,F+O].<>%q9fHObI%֚#v8┰(jR
-f"P[X7p B6#!<눥rDSOW1Uu@3祉OͺWV+P5E6}kco{zP!ҙt4sw;*Buӽ?{҄=7{V{PZb@
-b)=>(
-!Ϧ|ɡɔASpWb}& 6J
-,-Xpt"$٬k"]˘lQߠ~#3R28~3?p-wN"JQYS PQ > R@-j
-T @)G3<%}D~. p^NmLf@Y9"(\O;Xm5#wS eeRḄSzS3& Ã ƃ6 J6a5$l9Ou^:0s ̈́\b1[uVVH}םź>X|{Pkn75cA^ yOse^L_yTjSN4q%;C^!ڕ-f>؟)m-$ŴuOh6r:{ސJ!;]`(MsV
-t8)VsuNR+ `%xig8f4)=Rъ[A׷DzJSk5Gxf*/5<B-<2}]Oڿqn?#$>c7[:Z1&?j<K)'?|yrU .t:b+P̙v\34~mjkfax,jc)#7Y#X
-IԚ<b"r7 }HSD('C6>+qxoGA3s S`bYs p_bƾ}vYXp|{>1h=r{fiag+EΈ.tW|ĪKb*-Je 3CW_If%EM!qCDSwq~R8sĊW^x_9bXJ8n`qz5N>+ȵz cR: {cD'aDɣ
-~鴶<$kCͪ8wS7|8H>rޢM}N+/=h4ZWت۵,[zks2%=\>/[3 f֖Gꌕ8Q^I~h`Ra~]kz10Q5}PE ^;hV!y@S
-pۃnUjv&cMc;ϋPNTQQ◽yF ]m^cF[2sf+5ƟsE_60n5j@-^1p&
-H{1bj[r$'CzQ#/2 G_(q/~u|Vno)֍~@կuytgz}ݼʚ{RZ艻AcV{Q=_ܚG|)=調s>Jii$
-/LVqn520Zg>D<v50֫5UUM`P׼A1w"g'S`=] Fr'w ҧnD 8K8Fb}|͕W0#ƫ?|2oI2YFQ}3`盜h:zV=!(˛70+, )3/;\Q(L3V?LIDoҞ;vGz[[w87$JY˛Ƌ]0za`~tn<o5#AݍZBzuʁZ,JK5@[J^7F*ҒER*G-o9V|5kp1YK,S]Khb+HeF Kqbq9q5qy_kWlnpupvp63ͫg
-}WovyrshӖ[zٿ3wecbq1lVw)CjwR݋.۹E^&ϥ%5˝oxRB>Q&hU5gy<s8<t#_
-{l>?~= kOr 
-Y #J(o$bk x4.Dnd
-Ы\Р7᯽\R |z xB]]mJT&,r`w1u jDl x85b'&,.IF$EN<[^AW|Q7gU YO$cB҂TȲ[VT#qyqמ"/,eūgVf^+ GF7>'
-O&u֬f>UlG?yp`o|/<Oc^pc I$"]@FtDmς̉cy
-OT QM/Si+ϪߗkD?B
-$ MgݾyՃ ,]K+e܍n7T_%|noY \B#2,aE ~J ,Z6O
-*J5TXr <o1%\Y();ė[ yJy4+[` 8Tze5"JWZU*7\kT*C`G~Py 1A
-@;Ws"y:um\{=ռI\@Fz3xl'Դp{"`᛬eR1bDW&ыlYPfUs'). e{I5Iޜ.xh!YcK6$?@oyzH AFâOÑt!2I1&
-ch4U#FfaOL*<0?X)D8PĻѝp;HA_ q;|~Š1t)D 9lbb΅y"IN){Dfkf&bТ)HX.ZQ`PE]c${h ~FKi#hńqA ǣ5{mߊa4 F ccV qx1Ā_"6/jM/K 3="ڪ`6܊Ϗ{? G33,#Uj]VO<VoW
-XZqm4
-ŶA^h|e0zSc<&\[O2xˁRlsJ$(jO9)S*ۡzvѬ2xѵnč2.dc18h'D|/k#s/pH3e93śX
-a#b^2akGʼn'mʀ{LƇ1<$?4ےߒ^Lfx+"Bx_\T-?)hMt1OEfR\((f͜&vOx޶Fm3J
-:w{ޤ|v'p3*5eu ݴc+/2kE@RA^QG4#4̄PcєggY{|ᨫk5X5{125;w3[Źlɪv^e65bx S{aHՇE,fJ;xb֭bХCtZ{052|Wf6DBYf:W 4KQUY>Gvp^CU]HCsHq'Ѹ#ʃͣqn59P|{wsޚYgkXӟhPFg̕k
-p`QԻQ*ϵ}&`34Ӹe zV5ow]鲀#3]v|d7N$W rw-޼:ɻ)dAGi7pm/s%)thtY)K`2HJ-&B8˙8ꠍ>{v/C#"A qN$w&!IRhle4F :o50Dq0-%ִړVjᬻopqJPݕŪWۿt \?(9#1;Nc\,ML(o4.Cϯ-UEx(,
-B"]C]]kP9M?6#hMϼ~5YO*f g`t$ol\nw4+frI S
-BB7i-S#tpziZVk']sI)`>c ./ؓ_iew:FWUe B{v.4kHFb:;F蔂)5Чg'B˪s.,xߊLQ14M35v*s:%]}E fWJ#8f$Pι w%N
-B< C:::φΦIt l~ IVh?-Ho/0jdBM{U+}2Y:,GJ) Ȇй^CY؜nU nݲ9sKBI]|Ggl%{UΜ_Rk2/4D)(a3 0:L3ݬݶfݶmftڌ|7ʲ&&Ιy3 y~};qjnd(}i)f%O>1wIg?K2 .V&.yԣl$L,c"a@KM0Y3v攱?wQٜ>aTq?Np8qԤcGJTϞ0-wȷS<Ӧ7O&CHv%~̈́_6DQw.arˈrTyT鈊ZȢMDwsf_u6*5o&ƜM""ӎIBqEbVa0ȨyBcrbSN LI,cbiYN3Q9tsX9q'O˄'e|{1IL:&.LVH:kY;kgTs3eS?arQYst2hk#91,37R,ߓ$??k+g]r>-Toꗖ\ #ig]sHޜ?z9;g\.3yH d3 syN2ĈDܺc7rgY ![v^y^<E=zS/>Wl90֍6u/y-d璝 [liһn_}Y _Zk+[|DQb(S2dZIjI /xtBeƲ}R>|uV8Vt\rcCn⁊*vVx⭊qח I* *|
-|e{ʷ*߭<XY7c6jYr#o͋K\PnG}tjHŻWO^]5A*!5-\{M%.q˿̋K\%.qK\24؞AUKu$;suĵqK\%.qK\q˿p5KqGG7k@l 'V_j \qBR[wR[mP%Hm-wWR[ljۤ^-[Om)A'XS[9^{Z9R[)Jm;|VrF=R[#R[3R[-0Km-7F/ef 3Ε&pFNCqJpfm3k3Y gf86Ùάpfm3k3Yڦxf8?̉\:gҸLsn8O5XZOqR0y "WsAs 7݉&.*(6tsM%rtGZ5?>iµbf 7i^LCkEk>D[/]^-Fl= F)Ǹ9=[~fȨ0G'y*]16
-W= N.JkE:1u9zQ?|Vqe(Pow;~pc{RHڱjBCU6(_7k$9^KƩF#$)A%M}bXiV.+_w/YHݕ R [ff ɄZ)sUuXk!Xy0c8z%|*2jqGFzz=)ќNQ Mzx2 程ƚd? FZDo=/X6Dd9BP7/8`OB?ONNn5rσtTgE֟8C'NbH\l=vH&̲.O;5X2U8$ʼҼ-Yᣖ R!N-Ir.&C54Hl0j cY+6 1]#h湟P#Q{DfȄ"іW˵!sdY痲"v)^f0-.o괋V7YWE퐣<<b!
-?F#>$T%`'bN$Oord@qrP>Y䩛2C9Ř<v$qn_ Y;63;D#rv zRkALO/B݈^ZG'}HVzޙW]Oꓓmn0=dV(^)2Q2C1w޹%IU7z|:dfu2|5 gBҰueiIT#`<*\;vΐ;ٚt:@?LGCucqݱxS$?vYySD$œ`=
-7^)t^F,}GO9S\^~XDS nn;%:o/5t; M<=##gSC,NZ}ґW\ݒU7W{蓂{߲]{(k'dN~b#Ofr!~LVs2-.餪2JRx"6ȼK'j ϼ=itc?G4O WNN+1gGG1N|RK}fωjЫVXUI~|O@ R/Xt?Yl1^NR:R1U3+h.FcE4?FCXqLG)ދЯ5.ia}tk܅t+ѕTrUZG
-I{ l"\Ş!
-3YZq1P
-莲e+|i6 >b??"vIfSf3]%XWFϦ>3kygXdWR!1"B^eS 5QrK0[NOb\K=-Y%̈E*zCP%䢽?K"ؕwfKiU*_C+=+"R,Kwhe ɣˬQc ۏ69"ϯ"}<.l ,4閴Lq}!1M=]S
-+L1廪7]bW=CtMrH4[fȯd׊vXѥZ_ }kA<n#J;bA_} K:]1Tnt-.誫r9.at~
-ݞ`J
-v BK]-Vܞ&U!K [4Õ^'
-QA!Zhx| b-u~#$b` p |b/_X审F!Wc׻RDAm);| QNm#AF,]D
-A]UJNIF5!xߑ zG(\L7@jݎ#Ȗ$ Fc2&!`(v7(Z@Hrc
-Ɋ|@>yP(CK%rH4JHpHp8
-X
-墯
-K@b-{A >N<C쬦=@&hX&UfP"8Z2nRiy&DdR䷋⯇CZJX' A)Ka*HݬTFxlH#!Mh/qQN(e,H~o>Kq C ʰh2E
-֒35Gd`F"Ϗ@oˊ+KbAXRZ ך+N.CzXQP_\ĊJ8O.& KJeebqXEKŸg{"PRU`-#ʖ[Ks^\PXP^,yP-d(.KVY}.brkQ9"֕eمtڗS\RYZ$\/.̵bpe/.TNavd17{y+ZJ2ɺ|+~S^P\D).*/E7^G.((&٥eb'pbY8$"XB+ʬQ[rمUF.]b4h6р?xE/A#GWC?&щT Q
-M4s^
-_s|~c/rc"dכLd`;dd׏E֫SN!Oѣ^)7t?T<MC!.梔ZPnGh~íp/l7
-GF{n>ďq|?Kb~51~#[ =eokn~ %N#w|Bw)_+& KӄB"KPDX(B@V)\M&s/w _)z;Ê׊}7·O#>
-$ F06&\
-l6kf?9lzAl
-V \ l~ l~l6C`5l`3؜l*`6Jn61l͗~XܩP`c6`6mz`s;5y<lؼ
-`6A`ln66
-b",
-l~l6ہS`*lo+v>GN|!!|)$ `lV
-S3"`ج6F`s5l6W`)9&TJBaV8]pf!o3R`Sl&l
-5?)QLW+rxf l
-oE·ʵ_S6 G
-N+VJ{jh*9JZիqZփ#owkС`[tW3J{Dk_WW_wWWlpoy̨-Ŵ
-
-׵˻rb}jV8,&Z'0pd n`jusw?ݫSp:@1  Nٸ<L5gj-.y1S..xݥQ B;Y-pje¬[z4AKP5n&4t蕽^\P.j*xj3JaP!
-NM)ԃZӭT* (=Supݵ^A൪m۶RY-IHVbYtfn75ͽZ ?Tb![U$2‹-R p0,.j["L?ѡUZM|,'N`,;5|=T[DO㵆9kuQNQtI ']ը5rZc⳹!-FYZ#!E?:5R L&ՠ?nX$LDZzNm8J̄nAvEFhPkAF#K젥&Ӄb@[8'HS:FX%pR{$DO #H4#O#"et-lY'hEgl4@'Cj'n^كL[!
-0eNH?iy1R]aKޘ>:N@]>XQZaVSn!pH_IuIN8e^4֪֚
-%e^X)4eRՃ{\fHf36?B!V9h2I{,lQ-QўYf6yN EgPʌ3dіGz#7Bna쭛   iВElPX~pa)#!u{.}A'{DYYȩz!鄴҉([wIrun ~G::G/[ZN4K/ˏ~"OܥnRU5;1l1[enJZ4 3=M3o6hxxZtSHF:kXz7lD2'&HwaP`Pm%(Q::hAI2
-1i86oqy,5PT ;I L4f7 Q"f㳲<vم-=4R,ccdf28#ͦQrFqrK=htA/1]-20ߴf5P``F[ؠ M=׺JG 8;Y j[t+޾]{;` ==i⍭olݷiFZ z`$ajaIab;:۩o= Z;Ji֡J!7~Wwy葑i1-(͒VPL951JrІæt6Bs݀t wն t7[ qesh)%
-\ٍ
-Kk ~L(큁C4ehLLyڗVsA_/n22A{!<٠<
-TY
-{0O%15lݭBϙLpd<j!1iyt!>lΤ^ 6M ؓI0g*Teq6fNdƄFUlA!;Тg3)xӐ댼.qx`7<n"{*#E"!/}p {B)Eu'ŝrAy4 Ufs+Ҫl3($tIbPNȤF2)h"HTR/X !7iIFKZ
-%]4Z΄TetlkRZwV4YJzscV;t#b-4T芄HM-FVLlw'o-퇚ִ$AI њڤ&O-4pz5R;%+I;;`Jud1)I|{
-hG+Z&󦍲$AhMY:&ZƓ#~u/meF:׬/d[&nJg9ג17sUft-?XfȼaryqIit٬;ћYEkYt[2ζLaѣ2(KV,¼DzEswⷞvi߱y3گi}ãkZmybےok.jݕ7.x>}OoznYW{c/Vl_~v_Gi4~};{+Růڳ{/2/=XSfrSu杧zޣ~8{cxCKLދ~zFzuϘoU>z켥?}?vV`ʜ}в<7ޓS_m~<c|WOymW|~p xQY&
-e4lѢU
-aHLqܛr{_s=7ެny(t/;jr'O?>4v,xuuҴC)ƪܚ}Noc~Jٷ־忿'K'~;'eޑ*mWOkjʗwf<է|;噳_yiɳ]n=7]w)'/޻,Xe.>6_~ی%2y'[ɼ$ka]mE>>V$S7o&\niS(cĔ?o% 2r,jx,"2~R%kX 4Z2,iiV͢]KgON0vNm֦lkvܖ=kM?;eM7?<߱qϸ>{#ǔJ?xޯk{eIWޒsc|1ι|Ug)/,wlxHo^%~1񡹇/]恛>8pڮ9g'?rfU~l_޸W&~~=B=.a횹U~hW:xߙ8>]_gC5}=RWxg\tWo|3fVn&&r2jSrgՕl~:X7_}gGoSEYb?iXIW5zfl%-}#2j>kιUsfI9+sY̹isCJ`Qꭶߞq֎^Wz8b
-"]b$0ߵm%c%@{L \aJL r-B#1|4*x>JgMs&[)]}?G\+8nnd'YK7Pɾ˒[CY2HgedeYoIɖ.
-%=Cʽyuyrs^tkQ>oʴNcPj
-np)y]?6*@1*_ɬR3ѦgŅ?K&ZʶT02c*Y.JtQ k
-Cݭ44"u:O  3k!-PИm"S)vq+Ght峍5\Z Btȣ bǐq0±h2n+ي["p%fBj5́C/bs݄Nw O:~~]OSGvjݘ'zİsQ>wf p o9ui.n>~n^dˢ0 uYTt*>kTdml5 |{W\X <u@{nϤ_ji>Wɡ=Q<+ {XgւJ-9G]QEo*韗VOmHS\j>J
-杝ֿIhxBR"ֹk/`o4M*#`pH3cIr/IIWi 塌7XWijMw5rNi0Θ|F=^ĬF _0lx i"Ș
-Nǡ,#AY<czJl xS"eW AIt+T3bB|ښdSoII#_w=a0`āWBn!N]D(@f+|c}Hg~37B &>@O=ta.G%7#"?O=W*;)gR~4U
-i Y͚/zsܻ+GżxQ9*bzCh׋z2׫sUۣF]qn('ъӉuS5=w1*pBLIu^?˔(VAIm<#yK=Cs QA1.^E:m ß%o(8<Yo~pA
-ԃ+mGd= CfRUv?!TtzV\ 3&Utm/˃h+^9E9rXErIzp;ܿmz܆S V#g6&RxnX>ДДeB܊Ox-‚ZrH81\+ӓI'KYv*n#U+*R.J|7O9&tuƲC޵vqQ -~G8aD`rG=DL)yP9vGl (X( /? |8ohPA6P
-ٽnan4ә'0@Q u4&[|L 6kfv,=x?JFs+F*][3 C :("VحW0vU/,4`.`ʲc1j~i^~K V۳iYR*^٠w?n(:n $v?Ӽ^60a:2M|jd*_?9zHRF?6[ԉx
-mg
- O/O'?M$gKJ
-fCҙS2UCZm>OaMJzN4k\u,(Saih6LriKgjqW Ejh{ހTnuLt5V_XZ0XSUbJn<1%1OK#>}2l%qUS։F%#S" #  d&f 9q(yGtOU|ma) u&V8;twQ_2%-LĪi8xǛ=D┲6[c6^cV7V8Y"cf/:LXS_R
-zJEckY~󈛢iTYr>&}lxz5VG)3L]pX@~~nPg4/ZЏ76=ku21\󳲙:߆n+>oABgOTl  hd9͡ 3R hIv_m+!:₹FjwEkPmϯhG/ _8J
-
-8B0LBa?=Cg'6S@d\?Е
-endstream
-endobj
-198 0 obj
-<<
-/Length 63774
-/Filter /FlateDecode
-/Length1 158956
->>
-stream
-x}|TU{LʐI%d3ɐ
-UڗHBԁP_Gibk֢;hoORIOs͇$_
-TP5h9ZszBM hJݫ>}WZFVN^AQI?Lԍ0LYWTK h!&]$./D%< qX/1x^E^WtI6Ma&j
-7E"MQ&-(,ɐւL6.iS_2?x3pemg͍4j>;؍ߙ)D+0[L7U/mWF#֧7x+eY:;Bgǿzvx֮YΩ}Ƭڙ3jOZ>erY[2qBqcǜV4zy=9Nzʐكݫg4gR|=nM&gϨ2#Giw%m~\c
-#>҃GDz8s(R]CihB"ʊ}ݥ.^C1)HؐHME WARm/*\EM92"ϝWѫ'5GDBFB7Ä!C5d~=?WHM-5|g[\dBWsϝMizEfTrϯWP^t?&Ý$ ӝ_t ~sjy==AOX'R4!_iBC/5UMGX㴋;,k2gIʜFsx;U>$tW};wU+k<o%>'SkAs,WV`4Yxw.`DQ$X秊`)VA엫";(rvP]?~P2
-|3
-G5 ϑbJݾRvh.h(-VOsi*ć;w(2x\FR>ܡ.p
-C+Ճ7RfhHGji*ot9omSC}v5*ov v~jr. U>Α*KO΅OC5K>$ƻ|wk3'&xEEe>iWIIgsOV -k0ӡa%G=JeeIOK, aλ?.ퟞNճJQ%yث8܅n *[Z75{<M *j`_4GU7':Op,mR(*EU6q2;_@Z^EnisWv<W^ LȚ& a5;<DFpAϪ|Z4ٹ !U-&h|V5rt`9v
-
-Gh=$X)O%
-=r#kd"2,"oʨ1fiF:<sR:/H(T `v5J硫21YMq Mp/);mdAߖ>o7. ;[C02X.Zȣ08ZZp/Mmc8;O?rFҦ#əzZ wSv<_V!6Zz|+3֛@*ݣ F%pѱ}R]ե2
-]oe mkڨ~J`ffdd.ȳk +S'jrC(<BжǪ囎Ŏ
- +
-28ms3U}!xPqU(:+`<g|qUlKpS)u-x1ͨq 'Ͼ)mn>n$|tW+ y1n.?"3܄#oSFդ
-e<JRQ2U80<]\nI?1erը=W!~L1rbBOS`U9di_+Q~,PcCF80==IԞ
-K^[ස& _?
-~0!?PT5p+:`٨IP$ |Xl
-4id140(r9o80paL2 SpLL2 3ZNfԇ+bz1dd:Swn\uS:ٕ͔U2 S
-Sg&Sr y,SR y#S";yvhvv`1Eq^$SS8Y,LaNA@bIg)DVF8_3p3S c i"N}ӷ f˴bcLsgSpcvsއL}0.é
-t<f$L5W^azC^bz/0=ӳ |I'v1#cL;GfCL2=#s~1m $ɠf&?ӽL[a̴@"kqr'w;mL2t3MLnnZgejr w'K9o=%L3c#/TL3Ǵ6P ZH:iu a ^Pc XHZɴ/rg1- $Tr%L150-dZUs3@󸲹9i6L\-L .^T͑ULә**1MAsϦ0MAqեܐt$n˵0MdTe ry į !ELQ4@y@*P^ - g00 .N@L)!43ebFb|2
-O%2%031r.`gg4S&SGFrd;ÙL04s:$=)q0y +~`~O
--2"_ysB? SY'm'l3PϨq1Ӻ
-r`p'$b∙u9/ùFOwg;Wl9Fٛ++7F++VbӊVxb"{yڴ̻ԻػdbZ .557,llD~ 4j7zM^_X7]QhiݹѥY^o睿iw93Y3fzgdW{k6U{{++Ӳ˽S7{dy'o*f#~Rv׻;1;aSw\XXdyOT=;jHBoO]u 9DnDZDcCNv&k=;qļN:]INz)I$Yv)ӱGBJ'91%3`ՙ(N t[M$8 uA3 J2Z4o?/O2~M5 qq; xK%Fzͺu[O 7x *5!4sꂆ>ϩ;=QKv-:ZDGFkht>&?Z;}Fۜ6M~D 9nQK
-#7'r\+DSx8qr˙ cꂅ7RA&3W~/Xj0Ҕai ` soO7Gw7yjR88hV+r,`X, B`p&0
-`0(
-  ` 0
-
-Ol:PٳΥ5xjto.8Bbz]z|]Jz@tŵt+ 5t݈5#.FC܇Iнt1U55/399XncŇfk%.iSbQpejDr-d-+#{oy|\ff5RR= rVՍnPF#} JYa({nDuXU[IO۩Vޱ[!z
-yvy_0| ?#-8$=Yz ^4>Fez^ >O Ǐ`ƿ?3s2%_ZxJ">ppRcm?Sk=xs7dƩ@NLch,]_{l$q} ^Gpȅ;D4aQ-׶:s|pŬWdٿ{1fpV^o'>ٶE 19'.ǣYա3_|1d[*bRc w,0wZom@<L?ÝA3|;+0MeaJwΤ~.09)tC{XtKnZM++H{kƦ$&Xg{syStկj.IN:%uԤ8)2hDuϟr`mBgYGx^/-r֛~.ƀd?o2Oxx+E"[cؙ!^a\w5P4ϬɊ<8+
-?9è 2D6Y|[8LVC x9ILZ.FԴ1K&#acVl0Mp豚"L#bVg79ݜXG|#zp{d`_kCKͭW7Zm̗%.8_q W\pϖB]R,ָNa-ִN^ Ԭ]1J i2x[shE5fԬ% c4JNJbF
- ﮸Hݑ ?f1a"'#iE9's$;-?0⤈(0$6lh7VM,Y-g):8KfI-"b[ZaG`ѳ9k\M^ÓV3zy.VpKu_'+1Zg"zl<1KCUƲڕvF1r/'w8(F.3yiieʞl݋r
-U3_1Gk#c#bL^=L*k$GƥY3zgmzd槤i]
-9go|s:xoG3L:: Z Eܞ D'Y<s};N,2x9 |Nr'voMXw
-_~hraIGTFoDFȵmBj15:>UDI
-DFF7spb a!_,iwDj$9Plcjr+b=8H8+ںZzE-nYڒYEA$Y)cCY C! ɐ=&ؖ-p3<f>3y^yHbcUj/@2{s99VxA=k P:p/\Zx%k6w`R%fUjPX5(V
-++q1Ҍ*YIt1~U6ҔY[8aOg*8A Z239\'zTy)`ZA6j'uutZ_p4q99998}zC롇CZ==Pҋ'THa7?1_%i*!b
-ѳY1H:ZN{Pfb4Xb }80NPj@]{us0e~q\8b4p受?]] qi_^*jNڰ f;z7kF.ݢnA{a/Œ#pI^"`1}9N9:00_r: E SJ6H{6V~e̹ᰵ5!_b]c޸+L[;m
-x`o 5X|J8;
-=GB6ɀ)lxC,i`RZӾeO פ;]{]7 5 -&}#tOvc&a#2ހgHcK;gF-TEg8lXK$X9;/=bN N NujvՅT [LAć#Hw;`[7t?nA/<Q}a7bN/vjYć08r
-1sG91'Z!t+l`ikkk^QP*5! P˲_,\-gƎ)$˦Ni]/ d4X> /MN.Ν-v ){ضe[=25>*AƐhnY+?8BL(斷gWku C<2 {u]孙lۊݐᚁ9Xg!;s`t!B܏@F'#H$K/uFK0j&({ޗR !+[0
-c
-M¦Aa{ ?lEƄ1N8@SSTEH0 /Թ+-rKUx{VN^q[GSo|깻o? uTg
-XX
-<t8̡XHw.8{lbHMʗ9uА"HA~XA36(3"ϐŵ,.%BQF#FL,8RlnEFx^gr
-Z^alV<qpDDQ
-zHZ87њīn?M R@8j9ViVtKqY.!
-hEj5.Z6nu5,)hqqg BFՑ_]A|+\"r3Ml~l* h]D G0ޠv\!a~]D|",s7MfJZJMiJ>f.U2 ..⏿tWĪ)?jOtc4_|~+Pfp|&0jlMVfr@8aq*~^W<3րU98E{GW(QU0Q^x ΁CLq#>
-:FpK.Yt
-Lf,]Y?{pFL$lso6RV,)[?f2RsmϞfz^c^MLOp'Z:VʞS5U\
-vP\3G&AK{IFs$ϸ"1 wQ)i@Ϥv[%ȐGR=A$&g^xƮC!x`pc(ک ) 0%e1
-&@]PU菫؈w.C 鮅Jl& S\`+YI\z|`lb{>o9_~ߩuzG >mjjŐ~_A a#J:R HTCFc8\?ch75&0Z)l [:y<tΥ7Y[`QoGn~lf͊eH.0wX~ُW Kcl<|1Uh(JdfT #վ\^t,?g@ SoV gf,3hee4^.6ߗzX!>fh"j3 h.@pGjKcX# @G4"  04o_z&kXv@OۦVqutJMciC.!HcX;%z
-aϰ Gq~G9DŽlQxDg˩іZTQy6[Ѧ"u&gco ox-h=ecgU;fj\I!T'~ 8w\rJFXѥjnx&l;jkM,K.dLkjB zIBKjln4+T2R n
-'#p:s(ꠃÓg3h'^}P>J(
- ~T9Wo%VZGYlm'5'4. [.Cu J0 WX 22o f͒ 5*
-§`NtU(zIkQ&JoCU*~̑?laH<C
-R]bрa1CX
-9Y6k?Z6@X5nn_A  ko7 <m;Ɏ m
-ǫ;;?AT u&gLX"se=kXֆEUAFߨhV VK~ඦֶT
-=[{j2WN :q<-~RZJc}ܬz'޹KoS1mMηÉ#
-dv^)ܰJQJs$uZ%ee
-eg6n\<sq<ƂPpmHhi&
-CDPP_TzAn!ӐI ŅkbBa
-0ƩSAt;S>s!'QSg:t^)߁t"=~Û:^,`&^ei ;x"b^&<=HZ<'oau}w( $mA24FyM: [Ǒ ʃ˭ղRmɞƐl\ֶ Ný*x!#kV-_:C3Au&%_}*8% -Ƴ:`2t`^_^^X u+nǦ1h B(GwrqbO=P ie}ɑ$QRh!-ɖڳѳˆ!
-+
-MD2*T"z^W$-@/P+j*eG(p|DF!+egK;Lt+J/W13pz<ףM$cW@ӪE.JoH1pC(>_VU/t/vb(6BBύ@w`ȶeG^Kl4c#cDTa0 pr7g~`UٚlJTn/(H!3 uLj<#)a
-([
-Fܣ1
-sżnD᪺d]0W/+)럭ST/22?.>B\L
-
-h~{EJ-We7@5ЊB3ЦϮVJ65SKFsWkZ
-n(`tX-1NS/mܤ>Ar/"o-o_BֲVwm|r3#c''Je6M<yW`|z^)w,GG ߒrp4"o;FR+NxXM44
-2T>ޔe;g{z [ Ml+3{$g8p}qWe\}9H=PsX6(QxCz{fzXhp+w񁴆w jJk&YZ4_}?LF6"؎ܶgj `{?X>-װZa1L^
-|^DV4;8=g(W@.y9YXڴ*k@܊r+&/նcT+`Q&v2茸7
-Cwu#KJWOJF[T
-'QOј'>"ȏk%!l y=BudlAXy-˾gO:XIT
-S@|M
-+)t:1% 򛔿ŊLLmUd*ڛ2}eYǍÃ_yYWω}O֫񣓄NJ7#LLlNs{!uO>rѣ۪,y6P֋B H,Ls$XuFvcc58~|ȲQ4 -U̼O Q>ʾJ:-F)W*tt>TrŃ
-K|p9B) DԸ1G DCE XhxW Dc1=)|"4 swMul=o,d~u7@ޟ"pλ뉪sjֶ<m5[®C.Xޞ}KØ2PP ;#]Nڰ;8qִJX~sMZ|Ǎ^tq'7b
-G-|M,Y56@4Cާas"hߔԯ^R (֯}5+IװmJ 7w^oy
-0⽟,? c9I=U#B*x7H1/YA
-q]H7ӖzDϗMD{?D !yO-zG!ĴVЭI1d~`*^sW[^hX.4+*ʾ9ҳ\EhptjoU
-*?k)Z:o䈲@ԊM7{<A=thQƶz:T>m=+
-*݁8돛1f.6'Kh(2 y,.L+fRu]F1O/J
-~(3
-@VAew)Mx8GxTGx*ܦ«m-@ϛUjI#FjXY6
-{5t`
-xW{`ԏ;ncd]gOkLȠnFP}|4
-K%+#K\L qWm495XLi󄭎\wh5gG] HU*ҒZ޾g4f jJM ^04fKSrfw%aDm^ղjQPg($ 0Yr9Q 5Te Q0^If~٫~øٸ۸`$6 ?Ƙybm6`/ 30#mI=)`90F1dl
-5.C)c^ k+t *R'OI_.׽ƉֈCJڟ*ʞ;y}\4~}
-+ ZSݧ$T6ԡW % uW]iă*r QI%^"R(À;}CSH(;']0jcduǶoy6)Ո2((uD<>4k}@EEX I d@3nc2_boB11ⱡ-Xq>+!P!3\ Kti iXmfsWW51hŠݸbh2FJOx'hr>Ao#KU9h:{ЇZLC9j8*!m4*}
-mެP&0y6Q>j,:Ia]eUsWm7=xlzԮ6xo'
-Hn™&n7J%̶^)y'Hb2>;ek*ٲ 6\6QAL*ڨLW۵&
-p\.܎>v<1PNPkq6.8[`g$1`>I B0@ [G%|EAt.~#!?Wa7hQQ8N-7Q m=^N]OJ YCAi}?%Œn-);#FQ7,8K5"TExbh|Yv:qS9eiSR|e 'h3G4F[>U 4
-,B 㠉,b-3Fns>]@A3D.ƞEw2X?un Qe!rwYO3x.Su&yT4|%IX9Á3S3ȐZ\wG94PI(X-\RlkHZ((gd?5㋏s#[uhd0UL}FOB*U
-jtHI:2L֙Ɛl==ٻ1
-ґn[kj3S,}" jYOETc,l
-Wf<ֳ<gXLs)E؊vp3^`9V4cN |,xԦ\P@>>j
-`;vL:=gQ75Z޳zOHe,r#o| *G,`4`69Td)f֋|w$&,j _R.Z- ;#cg n*g
-¨x5v[k_y g٩VN%Q<C)e$L5
-WnU0À#X;i2@߿e4e2US~XʞxĿ:c?&[Z2>4e
-'zHbNdX` _}*Hڤ>M/?KןxxhKH=O /(S/ LS1KzWA0ysW`:!]<{$jQU|b@邹L ZLJ9A_vx#'-\ 1`?;bpy!Y<N
-'zKFSE˞8G!.f=Li04J`5F
- ' fP& 
-vHL5i.l˰㟁
-Xy-jE`O8j@WR˾V!mÀos Vš]WA1ͼ߁!j2(
-M6wB|fy3aׂ;3Ywԡ o(VJ6s럊-m@|\j4)Nr$
-
-hJf0՞P5.
-8
-;f+Y N)
-@+u%7AkZ61wfcIFթ7F-u 7dg"zI [Oc!_ b64#Y
-K/Ko~'ʵcg9l֜G#QUZ_a#@sßo{FN33gT.SI3vvQRR2qd| ӘM
-fScHE&l Fn
-RRi8]8I~,#F6*ĭvX nFL^ZZ@Ӛ&дZ
-i'% ?]mA\J۴ۖP,sf$[vۇ'3sf9sYޡkg{bJZoݩS;Raw3Z\ҩfō6FCW|CPlx,Ƣ$ƪBOczV$0Id4`(F!~#\ݑD?=gӂ5,(LSQr7/lS;M~4
-<7\2ւH<K%-S\]ӻ;ӅSTnЏ䱥/{Ӳwot9e2HB#!9bNciR]å,ϑ918㞅2ĥ}X:U\Z:Zaʵ
-1n5)}wy$) RYs: M c*vy2z)H^mB+?p ˽FŘjח"a`(4VK#S(YVA0xYz6hdX,aެ\Mr,O݃;bAD d3L THJbho[ e@]Jc%1l)o/~  CЧ
-p]崌( ._I})b7mnSɂt1zQL Xq:נ~_EuJ
-2??'lxE໎%:-ͷ S8,r
-5M
-7@?&Nd O\!4` W]Q*|G?V3л\_
-0兄`V"/
-|6
-1R8'/+>Zn"˄
-v|^*J¢Kh)S =<+dlHhpG+z!3Fե U2#
--0(ƀ o WKzl\IAg3QnEc)
-g󉓫9u 6#[[e ,,,9A;v>qǶ(?A $?V11#JȩG'ӤޛI7m@HJ3Ab N*d6-NRֱV~1e6r Z"ZhUP蛤Ҁl~̄h\m[ X=P1>K*IߜiCf-@(XK6us[LݗIpA )(fSH/@Z=5YvUoo96m|Avigk{&޼nڿt;ж#}y7mu:uJkkW-=ѱo]u7:\0:9 f
-EEQr' .gE7?3HCRȭWkz&N9X)Whvj菷݇9&3s8 z
-pҫ1a DLh0aELhHcB߄ W<Ԧgzjs-[kUц &
-Ą?8+Sъק`>cDkҌ1 Aݟf60]?F&l_\J+E?F*܀LPPHz v!Pd=\ (o 0A yz) "?E, `T*$ 0
-5Nq`r^˄Qhw>8B2h3hmf
-o)Ŋ7w-@<"ěDh: ,1|D
-
-
-Uݹ
-nm-8! @iK
-@GqZ 3 y\目0Aߣ)I2E0yQL?a0 W(SH}D1RLqǷ\Cwo4Er_[S$'7|ego;{HJ>wZHZPYDk(󗬍-1B·Wzo3}Oy
-%`=hjL=]Mh݆p~C
-=`ЮEv巩| K~D+)l\Q jQBe wGK;cJ BY) j>LQɘO׀\QqB|4.EyR\ޅsOblhoPE%;̹n;gКo࢓BHRY!wݱ
- v
-VA c(9dgX𶂱
-Ȑ&2\?dÎ>m[/Ys3PgYcͯ_LkZy=o$^ՉLLȚW8oyh;ޜ[07eQ
-x=ː'pز
-ƂM
-Ij>JO[~?WXѪ|.@C
-y' ,xzA?
-eKi~[bykX^sS`֢ݫܨ4ڒ?|[pˣ-;ז߱.i)<~{{jNeҚX%C il>,΃EΩZ[\busH'H;:,
-@ 7};C>R.w{wrOSk3;祇ǟrtNx2ɳRpVsI}0:I'}~bdULbQ3tߠ_ttE,
-Y:Ws9M 5n;
-! ~
-vXR~ 3kjX
-[ rx#NLsXFWdKPXC!1G0 ECcw[!QKHj^ ԓBA! Tx=ͿKNe1c%') *4VCTN_Iszj01*ǂC8-[:P b WatBҠ?JL3#ʫ꺏tօT@alao0Ȓulclv񎟍1 6Fn fwTY?тO/;{wtXq\Vzt>Z,}߮=-GsShG ՄH\yp:)\
-(h{ÜE.LAg+1~uկr1Հ6K`b0QTӥU 艌qrlFiHW #aL5 n KF?yYU))4 ECķdnFoѮd슫Do﶑]1
-φ& 6<{}}t},RdƃFU
-4<"II/^E 쫑E'
-ZJ S@ a7@P>AD
-4 r_+}iJЉXQ||N٩ W<(՞2bBAo*g%4JOA F$@5l00,*Z2Y͟_ ɟ`HA!:{3kpcm68[
-ؾ)R{NJVO8 ߝ/)ޑȇj&Wh䳤ܧ~[R~ {4Z=4)RcXc<y}Nl)LE˂Bͥ
-Sb4߈7_$oR6gr庵oTmbePCjl~yF;t-a z RS~Ơ%|<W^<^YXʙ.JNA]F+vl9zԬFo?XFCCP;I;T=ΑıyBʾл_*PMv\5M^ E=֛}ڻ7#pM^bL|U5oe Ѭ JG .
-А<^Y06Xt';fә;/yld,.B fm_9j[%vv#[YHzr Yx[wO]oRhr~ڐuhc<mӳhk jِso{۝/ԣ~Aޏq#xRWj1?RMDR ;PZa:,CzY Z
-<NZ_nE"x_pyjٵCޖY!qLu#ޓ%!9\<ckhKMkZ9U64g4!2:@k̟z^ 킞)|ƯEuE9i̲Mo2J13U섑(EN&Tyns ~DheWTsPnB[\|=;BYOkC:b$k -&ݶa8ֶSmV),8uU9
-0. H2H6")4qT?+s/Hu &W *ߺߜFkjo3$HIQ P5MAoТNߢܨS;D'qPM%q?}p6p'$d gJP#$n{1Tmґ*9Ӯn*ܥuQl\ZvVO"B``t3Muk+n ]0[\<<u=BM?ݜAm} V(j/22è0ZM$ǕIE2_^QIs!g T*6IUuɹfTY4W3mK7!Mf#n[Rtl$U mtGwcEp~
-P%MHrϳ7 iMhfLd6++΢*moTwMCMŠMX;֣qXaXaXa603=,NzoFTw^Rg$cc 0P -vwInhj(MCw >t"<ƔttȱXadFx8XO|haŶVlt-(rGGBdDZ -!8t ɄvaTdraCL_E^ Fǘ>aǨۑ
-ٕ7/LMȘ5dED1Ɋedah H\ӊ0,>c>|>O
-ID</,[}"鞰;zVQxh5~+%>>_]6PdZk|J7F
-=LD?g+TFA뎃^HC~
-=)v5E`%IMɣ<V
-ơdQJJ~ʩSǥQǭQ_N48NѬ,"tC-Jd6& bqq,o%vu7n mՏ,0/ *6[[ۺ`XX[::=v;En:0t 5WxWRۘH}v_;^yt"s6sSfBg
->7 \.ş81l1\/㛵u]|(GP{P]@'+݌>w#ljy1[L$W$kOkmó5Ry( f1 B-N3-M;s2:56͞##-t4z.gnT#dF ^F# [9# ޠV<80J4ApHwSsьw~[~A^@G/r$_Bu6_%Ġ|2YCPwU,)0{N'<iW /l)l18{xU}4eSi#0SzIu9:k81AxV\yi79&_4)#Wh
-iuC&^4MBwͻCc0ycuυ\?ӱ\tFN3io-Nh2yZ"ΈρӠ[*j]m.ߢ>0HN$Thz@ S(w-iQh%]SMz9$@"cvDfh$3ΟFZOfF6&CHv"i"*^G^QNYӚky*0-G8Ϸ-tUs:vK̰/`ik%bOڳ6-l8X[Hwxh~w:~kT܊˺г*Qo% E@$uL[PNF. 8\9]%"@D8PFk欓-fِ6]NwR
-j?}ʧf
-LHd1vff%ZgԾZyID"E@ c)Lgf?9tAte0NW3t5354Ҟfm2W839
- ~&#b X6l5Y1v+9y9$5lKP "}
-T3h8bwfm;<L8dlwoT{XKs]!q"*<*^f( Q7t:v`WERΩZZ<#zc
-Lf@[&gkgY12FyR-9Yog ,
-Z!KLguѺRYV c%fHZ~}91l^J]4Z :q&gN
-w2ZYNjŶ]qSa
-<+/LyI;X5
-.3_&yٹK h· Fx$1!+@yveL_eN(dlq`<%ZJ[O7$vXkK}H]fQE3h$mgr{NmI ;װaujRkZsQyDs"ofwv.4[6<|U?>_>H-ֵHpqBZAABZ98m܈A16,l NW`P^Hq|o\1_:srdJ\ R[?ΈACGZIW{.wQQ"J ( '=D2:'[Zɝ&8e[;qi?:lq
-={sB0T't1YAc&W~YYˢ3= w;M$s1OxLf$'qsK!@u /mKE٠LŽ)$ZўlȬwo<j$_<qܫ-=yܳz骧h+#,᎕O#a_?S{`8 ʧbX"I  ?$!Owb;zҥXO]Ş:MfTLT5Yuu 9
-V4kYG,G帝V\83~_jŅE3 ^"𼡂hN>C%PɲA<{Gȥ<R= @Z :'א&Gy&x;4݇.~ZEQ/)1Ze!bv#Exh
-@kg7.c,A\-1ʱU
->U?&zd]@\޻db7wĞAͶBo1Ló-}חw;8̭7D(\6
-5Ud.,viR
-Bg
-$3h8>ikkljCF6}Rd3zI|d[pƝfg m<__ 8,ʵ S?vYu ,q ]spVZZPv6Jñލ=>f>p T% _oY9\vuU2l6&б ]fWݨGѨm<l 9@c3k 
-az4ʈϠÙL
-'F SϨ`Nŷ6|㊖M]N-a,=Ri:Ngؽpgm<MI%0,m
-hFCInNd8f ,lܯ tBu@{hN.y4Jq>1W\YyxU b|-L\h &n L;'7t8"dǺzTO[Ɠ(6uzS%b8\׾f{pk@.l&) (yDUPAyNW ?dw63f޳r3 əe'ܒpD1:T."FD0Dd|Ϙi4;KuI%Kv_Z~p+w n\}c pɍX7۱cTt@xϓoOŞV)Y+ ቶ>B,q4n˞\ \T8k BPAdQH_f3hwg-x3RUG-һm#Kpu|s`Jc5zx9:i5ى+;PeMKP9ifc_%3?g0 2Ae~F(5jQWyCڒY^?з܁)> j '[}&hY|h]>вŷ\獍l)-7(:PGnC6ulhk?Žskk:YlüEgzLk<-z[6Po&^xNF?z. DMMج\@oa#7XE3&
-:"KdrNSR!Tk첆,EWm銖NJuR=hM<m;BVxmEkIjޙGU.$ aM3d!ldYLf&dfDY4b@AMVPZҚm]+wιw|yvC<{9:DLlڴ <\|n7-˸csPUMO ~1&Kزd˲ ЕBAӫ͸tҵ9[.LhXQ[>]:+99 ;X5tYE^4sƲŗNhyK>#q㹌QӣxK9fjugG4Sfd{ͩ⒉?y)Ր*_:~b:9K@m27U4{vVhVAMrv;Cuk;kO~^~i˭V/*YWV»6n_g)_j,ɞBZrϹfϴ.c;ϫ'ul2aŽmm^3aVeI
-/0}%[MpKJ]βNȴk-Iix^Zђ>uҲڕ|Ku%Sl]vĥ3 ?
-4a) K66{r1M#֟zLcc G+(T\?7m ӦOZw@{`ѾXR%Κ0DMxO|~p(D센8yjl?>Nv1OS)G W+10=b")d- RoLTNSD3!wC^g򻋮h{TxS&[wFI&.S'NΨʻϕ;L^?"S &N yɌãec4tq~qΕK:W2LgO$'=wVTSDѲpEfo"%uKV-}o٘,*s%
-*eT,Wr+G^?-+_^k,㊬P)ª-)n񼒩%K^Yz PvYqO~6kmd]/;+TqR9r}垤$ K|YUՓZ?Se#dxjMڛkQ7j߮ &uƤ>"q;ŏ6ͷn\uWmmr nh8cSߵukߤoJoyrvg;?odzvyo5>Wofu`B`zু} 0x2Lׂ 2\2۞ٱz;.8ɤs\knu;T{^tݛw;v{vN^מ/X^ /,\.WW]ֽ^q{]{[<$%)IIʿt @v\sw~/t웾u߳7T%%)IIJRo'$%)IIJRW=={C,8p'.7ƗVۇ6OrSR$%)IIJR$%)I җ
-,.&)
-f"a*߅KU"7G\VōQseM\ۡ\qջ岞]r E ڻ岉)bg*c
-%yN;"N"q\VōQs;&]˭x@. s岞3g! |ut4l&L%Ser91"ǓuMHˌ3+3ά8*n ʚvƙgVfYqfeƙgVNI͐.ˌ-,B.
-9
-WR#Z\\;FTA :NZrh6:fj/t^e)j[L~;Zvhcy혇ppkQkA+m}zkמ&AVވjJt6:z7@[0IIhom\l"t>/庂#\\+$$[h{([
-7 B!]]_YcsH^hcՉZ;J!Ae)@YY&Ŵ؜^"Kg }*҄m`u{kb,+j_nWfi㗭t)dF?] -CxBĪVcy^+~͘Y>zu(F:2fqz[vshf&J5tRmrV+{2Y?ۗ
-N4$>,>ټyFevAi,fJ4<4X˞N,ckg6lポ|>9+Zd%l-iAɕ蓇^G])={W|Urs˹!#=4GY;ӮD;;̙d/]' rWgӝӲSFё5*/hnOndWh#1B˕u^5*wΓ7-bO5t@6JGCItOw xO9s =f^b+{6]s@>}
-\,̯Gtع)?:"JNN\c!?k{g>o6oQM<9qe-{TvS؏C
-ܣ֭{EM$R0S[RwyyĝFjK>ڢ{K;Qڠu/]82IvʱG4ho+'Nq#qgGS1N[ZK唉?SΉrJ]A+^5̵gGzvEo\1JPۈӲMBAԊZL3NmP)3J7WINj0Ƚtbh#k
-g<QzIy ͂lJ!3YZv)D茊e@k2O/ʨ%6ʈh&: aQ9zƸZ:Y[IP~bj9G^+Gl{!U(RjM_!~Vr z Q;Jk)bYm9VvP% Pך(R-FgRrUv^ly/k:FϺzb1e+zH ^fl8K|domQZaZzyB(bWmtiFl/-,̗*܎/k
-I>odxwsK((ո3'pKU~흾5 ;$ٲX˖jTj:|h]kJm <z|iv=<#0.n6B-.N*w;\ޠkt$Wkt9%k#9 =ƀaZ}Py MRݡ)򸤀0
-CCVu@
-s䲇pap`\v?6OJo[+AW*JAv.
-:Bٽݕ# JvohÖ2 >/ XK$D]VOfbxȇ KK؀V6qG=
-؝V{`;YҨg64;|X
-攷9yEiM B\iU N9`tgd(Fz` ,{pҗ#mX
-g%[reKNwf~ڱ@;N*
-~ (&2Ck8l;po6G
-! *VPYn̂ $@"kz|vg"=;Cr}# 8]ddLO$eɆi!R`rD 1YF-5ڃf
-ed_pys~msI-#s<l/u DIp<x`ڇ54%ŝ& ʄDRM6'Hc3[j
- A 6c̈́1XaGqkD(v?U@!eyCvO"V+ʙy"'͆lG,isl݈J ?es]vRaDd$OoÂ-4`o4^bAI>eSIS#[|Fm/qQNr(j#8X̏N7 őv\/DB%sS` 9] k[hL آi
-m5Ru}MuUm1/ʲʒR\Q\Y#mRTR[y9Vk}U՛j֔IUEh\] lˋTXTa"[*UӻXZL0 
-ʪ*2
-*jP*kꢷn,-Ζl5eHIM*}L A-%z}mq̖b[9tՒ$?H~,&?},`_ɏ5?`x @y#ď:ɏ $?&_1bǍdp.A%\⿗z5Mi2#l))d{x o6 Nk/tq?M#UZMK96+p+:$lGq7!u-#>DN{>'^'YW rJ~ x}ow;|IK . 4=aV% 9aQ(*ū:!lS WG#ϋ{ۄo
-?~&-*#8$| +{Y8]8_|_?aBH܀*
-f0~fYqH4YE`
-l9i^c
-Zl>Y cj;u `0̎` >^ϧ0*0[f!n0}`v}̾ fOl|`$L+#
-
-̶`v l?f78=
-f?'e0{>m M1S|K\*-*0kl?f_`#0{38fi`6Y`D ̾70{~7lgY&-B0l;]fK`v=fOK`& {_fY.
-'<_ 4N_(_:UXtj {rǐN _/R'O{#JG7:!YVz{6MCo*{tjNEt+
-NUTe6댜-uKkk!RXJg35:zzZXC&ԨxO,vAtg8Щb 4ކgHtIr 1 qD'Jlx)&z@jtSq).yv\~kx35]Fyj24pbԪ8Ykz[4jN驮${=z<^ VU=Bx'z5g0q FG0T4<äq;L]]݇<ɋJ5k8A:D/VI\ GOUXg_o5*p>%EJC?,D+~NfTWQ{AXeXg64<h)ũ*ӉVة,7
-VyҎ^z^g<>rB11̴N_ԅ Z
-3Ӆup|iX]4HGCPqzX(;Ob#X`[Dq42*hnmO6-n󅛑 aFJ֣5r2뇫 ,LC%sG9VcX̡9Tb1Gz1G{S ƜU-rUnppFz-?յ G^fM(]z7Epez3NusVz/F$ GZOO7UՐZN=k/jbzN'
-lx#>4F^B $"&Yג[4A5? N~ti?RT:jx-9τ; *Πƥ#ڝd;Б4 },85o ,6!>ZqjL!nŨneZj*;}HkhezAbJ,T &HT",Nk,Y燉 :$nĭ Jq"*`zVְX0 ݰ*5gД /* ڳ)"oPKq+R`Le0q5DKFRjm) U*ޠ%Ǵ&DZ4,H$Zc5dmFVViiN /IJNւ`fLG|tt>3 h31\j0 ?Hшt҆M{V+zorv6y` )HZa0DŠ*%"۠ FCq T= k-oг*ZJLAs3c|.09㈑ݒrƢ#ňj'|ڨ$4]+;SFx-v0 ڙ yҖcƸ,AOg'ku8˰Jָ%qqԺT_{)6E>b5Iq`
-_dmnɀ"4/eZ0h{U*zV;7r
-Έ&Z݉Xe/ahFe%lH+r&lgL
->9yԩ8o7#C"! G#'"&#oJ]ɣ" k"39:4p\?YD)옖ќ08~$#vQK"c\*d67T)7Мstl:tj%WtdX2,&='̇EN1qB؎gw7ƫ_GT@E\+i
-U ` pDh
-D ٍ;v?ESTEkV-Į-'ӧN 7]zO{u/ثe-KҘ2h)ni2y8It<ibͧ@q,LS#vK e4d4A7N{ƔaI<Y") @yA K"}F6|ѫ h& jj-kjj:գ y<ӽWkx\Ff6(a`$_6%k$\Cid/ 3vL>Ew\4Pvd8m9
-,x
-h'K庸.1\k!tFƔ} kQ^LǸqd(M; /Ivy1u
-4]t\⒁r1<r%eT}Rm.Q9ai[vpGe6ΐrW;#.'g_{nU<BY{t7i(9p&TPO6#kO(bUElqT5{Ixn/C!K("qÉ͑3k"zlB^\\wl/mzx
-#bհݻpE7I*\w v X=F7$k]hzpeiCk/RLz)UlXvv!_d
-=/*k@n|r JTl%T~
-tMA PB\?Ucga * (3O=í0)Pbc J}Gj*aޗI%ϛ)smZ,PsS& ~QRթ8թu}1ęׁ6n.$q];;pRVf+WrZ`.٢,Mj!k\ ҽxIz6 t:vMݩ%[n@ {=~S$Td#T>r0z;Oh>R}Ihlxr3xE|lJ33#!]/g.ߨο-ZyrV/UCuucw~?k`50/Oy;_aj0"POlhp<-gc7U d+J4:^$­ۄnw4SL0J;`i\ lME?A9꜔toàWلw<ṛ9sBzXv~Xz'4֤Go e i\B
-
-VTе95"(Oa 6~VUB!oX4|Xqo;':y[1Xs@A;ǖ
-T`<R&
-8r?K 
-_kr =B0;47%TP&n1Q ֣
-B l1t
-Prwd| ^T^ejY =^ӄ\긽23"egh* VWH d(Ue}2\)kٵV5tՏnyQ<͟V}ݨ%HࢳT.;1q6Aevs1$5`MRvn_e+:<R s@U=FwwzW'tx
-)0 tB|+O#hfCy3[0ӌ`~AOZPNPb`,.B.NJ߁Ð`D/z>5\zKIL$N}-oi fAOiJL-Ob^^C0L..( ~5~RϦL‰(
-o={_\
-endstream
-endobj
-199 0 obj
-<<
-/Ordering (Identity)
-/Registry (Adobe)
-/Supplement 0
->>
-endobj
-200 0 obj
-<<
-/Ascent 750
-/AvgWidth 521
-/CapHeight 750
-/Descent -250
-/Flags 32
-/FontBBox [-503 -250 1240 750]
-/FontFile2 198 0 R
-/FontName /BCDHEE+Calibri
-/FontWeight 400
-/ItalicAngle 0
-/MaxWidth 1743
-/StemV 52
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-201 0 obj
-<<
-/Ordering (Identity)
-/Registry (Adobe)
-/Supplement 0
->>
-endobj
-202 0 obj
-<<
-/Ascent 899
-/AvgWidth 890
-/CapHeight 771
-/Descent 205
-/Flags 32
-/FontBBox [0 205 1359 771]
-/FontFile2 214 0 R
-/FontName /BCDIEE+Wingdings-Regular
-/FontWeight 400
-/ItalicAngle 0
-/MaxWidth 1359
-/StemV 89
-/Type /FontDescriptor
-/XHeight 250
->>
-endobj
-203 0 obj
-<<
-/A 215 0 R
-/K [184 0 R 185 0 R 186 0 R]
-/P 183 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-204 0 obj
-<<
-/A 216 0 R
-/K [206 0 R]
-/P 187 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-205 0 obj
-<<
-/A 217 0 R
-/K [208 0 R]
-/P 188 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-206 0 obj
-<<
-/K [188 0 R]
-/P 204 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-207 0 obj
-<<
-/A 218 0 R
-/K [210 0 R]
-/P 189 0 R
-/Pg 14 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-208 0 obj
-<<
-/K [189 0 R]
-/P 205 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-209 0 obj
-<<
-/A 219 0 R
-/K [191 0 R 192 0 R]
-/P 190 0 R
-/Pg 15 0 R
-/S /L
-/Type /StructElem
->>
-endobj
-210 0 obj
-<<
-/K [190 0 R]
-/P 207 0 R
-/Pg 14 0 R
-/S /LI
-/Type /StructElem
->>
-endobj
-211 0 obj
-<<
-/Length 2612
-/Alternate /DeviceRGB
-/Filter /FlateDecode
-/N 3
->>
-stream
-xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺
-E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI
-6'~khu_
-Ⱦhs2z \nLA"S dr%,߄lt
-4.0,` 3p
-A1vjp
-K0ށiABZyCAP8C@&*CP=#t] 4}a
-ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8
-FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK
-.3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 <y}'ZZ։6i{L{ӝ-?|gKϑ9w~Bƅ:Wt>ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc'
-O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf
-endstream
-endobj
-212 0 obj
-<<
-/BaseFont /UAQXCA+MyriadPro-Regular
-/DescendantFonts [220 0 R]
-/Encoding /Identity-H
-/Subtype /Type0
-/ToUnicode 221 0 R
-/Type /Font
->>
-endobj
-213 0 obj
-<<
-/Length 65922
-/BitsPerComponent 8
-/ColorSpace [/ICCBased 211 0 R]
-/Filter /DCTDecode
-/Height 540
-/Interpolate true
-/Subtype /Image
-/Type /XObject
-/Width 1182
->>
-stream
-
-
-%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
-
-$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
-`pP 㞴APEPE1QK7
-(H')9#</^sQE
-1B'(=~
-9
-(
-(
-)h֟@R@B'j
-("Ee\-PEPE48)
-IɧE
-*=_ 3jp ~\P
-ke*)
-6lb(RE
-ZjlN(((KE
-()%v%@{oJMܻqJhi1Ө(ٷt Ҟ^AC(`T
-()k޷u
-(
-(?(h qN+[(%y1]ۜ
-(
-("UC1& ʻtIӊ!dv'Zec$NGt,@#PKp52i@(T1q
-
-12p;(J{sN
-ae\q>
-u
-J
-y97HF$r:}
-(
-(
-z"C=M/:3$([va_wL830 pB
-H>d "9\=hj(E
-; SCpzuE
-B28
-r1O~uvݭ "Gfg! rrI|-|9wm).@FNrTlpqN>4PFJ;Gj(68'>v
-@{R@Q@Q@惜 P
-
-M|9SFFZiTƲ`JF=O
-B)h((0J}Pij4WԔ
-6u<F$c8c5ko&eaL1I<حzRn1~Až}kL^
-
- cAx>x](P@'
-(ݎM--
-(
-(
-(1P$B)8'(>{4=
-
-,V$ zRs|zI}.pr:k{AOY[셜ݘ@ܧ޹cweˍIS+z
-(
-Ջ.
-{Nӯ|/k$f5B6A s^ai-p'
-8 Hz
-KWu>zP6zv=?u=
-F$ <2M
-(
-(
-(PHsN
-(
-cH\=Pߵ5
-(
-(
-(
-(E
-(
-)r0i
-=G_
-\``
-
- ݐzt_ٛ:pLrw\qg
-8
-)|si
-Z
-j:)(X0sS袀=:S
-(
-(
-NԴ
-Q,j<,v&{'خ<[wFvʖ<>3[X&A67Ic$c?~+yc޾H~}qO ,_Gl1 cc
-~3Z&bP Y?9\a=T9=+ޫ7Eѵ=CS?o7ڙPl+I\_Cqg2Ļ
-*
-(
-()hJZ
- Xgojs€IKE
-L?1NÀH@XzW^$^֠nT,\{c5|F-㨭屾80n|Z嗉P]FhUP(с2P<rog\i=P{{(!""а\
-v 4QE
-(
-NԴPEPEPEPEP(LRQ:q^yGR@W ?rJO{U({x;}֯Ɲv:6 8 sg]Dɡ[\[D$Kt=f:{׿O5dG n$n;HX9|K_saž
-O-㞵xI4k}H]V'
-q 1ؑ˫N㝤OZV|\+B+HF@c;ofߌVi,FUdn]܎KwIG @A;zvl˒\
- m
-(
-*7ʡ2qҮ'rE p
-ʥ?U&sLhwW` 'CO4
-*]F>S
-z`
-(
-j''֝E
-(
-(
-(
-@sKE
-z_&8fڥ"e-20@:֠)-Z xmC)yK\4"p11Sr?JZ(M+z=SDVT'=RRq
-
-1Ǹfc4 
-(
-(
-(G:(5p'X9
-+?Fh~B_qۮ1__A-4'F -A9W$# :! AK Yԫ];I }s
- @6qj9_j
-LR@Q@v @MxCFz@\(k9
-ܣp d)<_o6 l_?<}%[%zʱ|3
-`k
-pkڿ,ͮ}V}.T\@4k{B=G-L  G
-|F~-Zjow,ooR0H!'
-4h~6u(@!
-(
-(
-(
-w#֥
-(E
-٬hVyx`s^7^fK!
-ʪqN o 񝖡YOmǴ$TrN
-0pdC~T`0)W/٣/e?/3 3VA8_$w.O"3b#6G@ ?ZJ##ʡxRDtaÍ(ٵ me-K  )Ԝmlw_jf[Yգ4=F0I"oY<KŖM3M
-6Kc+D1\F , =?
-Hx
-C
-(
-(
-(-PL)NsDv
-,FeKD"3@=Z4} a]j-w,d@'~aMAf08Ag
-HG,r;N=E
-AuixmWT\淖Pssa_KMY5ܣΙw Xu぀8{Sj8Ҵ G6̱&9` =?ּ?ktב*̩ 67 `t$:=>kb2EQ,@@ cI9}񖶞!5-:r Yx=V;iG1-ԕbIڄa\`85"d 9b2{=M
-re 9þ!𰍭VS߸
-.Fr}YGbi4뤘!
-(
-wϳs?:
-C;j1qGקOZ3x~2:+>kW^̈́lkn^}(ԼtxtxX bAP#_ռ\S4[p1?xg/ o v@9\B5~̚ЫIo8v fg23@UM֝@Q@ zЪN#߸'
-
-O[Z|km]P
-b=8&-֠),
-oMrI
-nm}LUɄTr7|p=5KƷn֬rIprG_
-AΏ6 ƎM!،
-]א '$tw/ēwЋ C
-G'ndhq
-:J3&21־j79*v#]bXs;4io#^B-rr^H־̂xI gWNȹ arC+)T}σ(mi.)V2\z (ָ4Q@܌4
-e
-z`TI u3E
-7jlid207;g,zxOuc{p_eAw:hpӢU\}zn\gE< ֥yTLj؍PT)
-
-;GUb%QEA{
-Gi
- 9G#f&\#GpsӚb'u ^}> G-S.
-:M:(5@n0˞+MgG4Ǖ6E?p
-y$qj*2`B8-֕֏28 ;h
--Z'I; f"̹`/#$Ҽ55}Vf9(\gf=-UZ}@!'T kn-ĖN$<0'=ը.<:7p3Hb@#$~f5)t RCeul"\+rI*;dRIᑂH
-(
-( uhݏߧN?((
-(4PI8KE
- qQW+/l[ǑA]'8
-
-MGMGKR1Ce)
-l rs_U]chb6Eɹ(:d9 +A;آ-A<)"r˗0{OEPUA,/V(Mx-=ϵKQJ`8(ׄ-|m~;1PT
-`gWM>h)#2@h' q
-^%b
-DYswҾIDY2oƍb֛ o.y':M扡[iyBdr$
-֏M6+>dgA( d`ޓŨ<a
-ILPv+O|*skoٌNT~9VӓtNdmlE*J
-!\+<ZjDd1.
-8
-r
-" 8}kSiZ٦vKGln 7
-
-A8=k
-xXϱ ̸ 6鑌 u ,…Lr52a֗KLKtAA@Zda;>9?V~-o&Ą A~;zk$Q{d$ m8]2H=L5 BNoX̹S90O?^h3g.4_
-#qR[]8+P9.w#L3e=:8W^eG2p,ɒ1 A0z~L7M"C8#I2x$lg-Xpz⾭<A
-(
-){z&4eGuR($}X!,5Soy
-CUPqzTF0o`Bnչ٦g! X 32rpq
-͵u4q5I ,intw2' #*Z\KGッz^]LƅuH|<#@xWXӼ?nɛ(.ۇ%N:g#h/Y,aA.Hf<qII=J·v]/GoM{wǠ$԰ԧH>uK)@?h#[kĻuUvp9pJ ;dyk;=B35:(Yx 㸯uK\^[cb! O@={w_Z]f[hKiQb@/U݂#}?ThWImlQ;++)\dAȯuf<Mah? 4M_D5j$G[!rN?1?^ٯ/
-Rgsc`pGՒU^8ԕ$ҾP_+'c<`2)
-}.<Ymỻ6*VF9°遑#>ƿfe\; Q+.#\q^SfaZZl-A;7
-=n}9Eх,\gV l€>A~a!w
-T
-G#=0|%<jxWa{Lzs ki8}Gy
-H d̀u<p "XM&ˏ3n8<c~jtH5:5Iu@[L6
- ^
-fX
-u9%-$UKH8v<]9EGCTdp987Կg/><jbd
-u-:楱].G5Lɇ~}G
-NT߃ Gu;cH%w !q:Wt ?6T
-
-Lap3QHr
-0gӞh1⑜ zmﭚ!,nۀ8'<d}kjO
-
-3;sw
-+ɒ
-Ir<OJ
-9pI:^Eo'U
-n@ Vڭ9<]X2F1gJ
-?QxRZn{,
-In sOL`P_xj-kڏo iyVy['Nkٓᗈ>oZ.!x&
-hP@N9{oR$xv
-G8
-̖t1\RA9W
-2cIQ@2XC 7ln'=:q~7_n4aL:}ko]7xjދ}X
-x#$)U8-獅XBQ?J洝CZ`!ӵ+VXGJB6  9#2j]FCe铴rZ2[2(v`YpH#+/ VYad!cTyG99=SOOBa-&h'rb
-7E|]Μd*ŗw#
-
-|vF%<O_xP,H"F OR0FOi~ |ggskuR8F
-'`6z P6=F}x%bIfT>?ᗁl)=K*bc'83c'&@sK@VbR
-`sAT
-Z
-,}ps0=(w.v7Yv$cbk"l7n"@&P#=3_X@?\or@ S>f?U
-
-AKE
-2@
-[;{@Vj
->2OZҚFF4E~ξ*ݕaaf Ch~vVzgY&9ʄ=(n
-p[i#88~y/l 'Z
-vemḺ'<U(((( &BxYO0A?UַF@#9q뚱ޡ0 62p}(j)di
- n--KE
-/!&:22ɯ ovͺn/!WϓCd+EqE1F离jܾƁQPm
-~Kqፚ\H`8O  d䌜WDѫ'Ҁ?'<O_Ne- 9ԐTz
-S qkS_֋;6լ⸍l8 r<u<Z˘'
-
-
-(
-*<1`Au%
-%
-Gt 3K bC0:u 
-Z
-j[1,YUX,Ar
-?fKZ^*,J* s@ ȯ! qL*@88MYm(Z(
-(
-(n
-9
-*V`q9OʮPEPEPEPE0 1ot
-ʬrӭ}
-]GtF]IⴿxՉT7 }G ὇L(
-(t
-(
-(=N
-NPEPEPMfUn;S(((ʬ[xQ@ H1(7{ԜRQX_
-ǭKUQ), 4 Cn`dtC!\5Ԁ>
-) 35n$ 1@QE
-t=jJ9
-SAҀ=o>ڶw\$Ld޾WĽoZ4cV`
-(
-(
-(
-(
-)"
-k0PXT3ES%s~t33H#5vqN(
-BW-%(B|~AX[jzj$qހ)iN(o6㚒
-:QE
-w II
-(RGz
-C959ba g
-^B  ׌xAk;pd-
-
-@Q@Q@Q@3sd$N_vG
-E
-
-+*
-(#(d|Av=]N*J2 AuNkvTh\_
-(
-)~PEPM #Ҡi,;xac>4
-(
-CqKE
-t:W
-O>
-x4dg#o֧%aE>P9
-9q@ M{zSr8!ԁJ:R@Q@ y)Q@Q@Q@Q@Q@4 өh64(((u
-Z
-(
-)`:
-(
-(
-(#7zT
-Zit[/#Ig
- ɑG瓟ҤbAP;w8FbH['Ҁ's:OU.m-8I
-8 0Ak?_u_z$9\.6gy<Nk>[KXmGq6HR'VH/!$'
-el _ĺgror, S #$@`եY[h܁`
-(
-(
-(2R3
-FCKak8<r$O=MZ >RrCOOś{[hao"GRFldK=O:󙣖AfG 1 kce;hs$)pͿf@!NA ׼CamtԞ[b""^@c׹vm
-(
-(
-(
-(
-@sA
-(?((RE
-nI8$O˜V)@9M:
-(H##-
-(
-(
-*$$mcT
-v}p+NjtmfC
-UHsАk摦C;~'g?1Tlq
-(
-(
-(
-(
-(8돥
-(
-(
-(
-(
-(
-) u
-((h *rzqM9PEPG9
-(
-A3KM
-ϵ. owQr@$=rzV^64"d|+oN@#PWōwۙ#bN\#ڼWPOEz
-r
-(
-*6#
-((
-(
-(
-(
-(
-(
-*!"L] ?K@Q@R`@ PG֟E
-(
-(QE
-(=8lqޝQ!ރ<J(
-E
-(
-(+(Qݾӏ<S?LT0(_3ܟV(
-(
-16g>((#Q@Q@(
-(
-(
-(?
-endstream
-endobj
-214 0 obj
-<<
-/Length 6918
-/Filter /FlateDecode
-/Length1 14180
->>
-stream
-x; tǵ3V⿍`1X6 N+imm,i!G i܆~6 I!Ik8iB{i{ھ4ѓ6Ρӗ3+`rrN^w;3wB2kzu\G`ZO@
-~.&cyDO=P̭i Yvdփ6` /? h-_ 2)/#ĽW=gwـ4E$_ w~DykR@>*"tUfH Gfڐ ~HC`)̧oGߎf^k˟=oջV Ǐ7Mڟ>UtOo:fR|@+M q&1c<ctHr(9heh 82#+M"//fĕ-\ŋOZcNYBc5hsZ%:tEr^q{_<S'ie(+@<ip)T J JtYʱtS;p^,r!!\^.>93E[7P)ڥZr5l^P_W Q|YҊ%6qW/).*,͙f,faw 񊁸¾qc5%R" uƉMK0] ӕ9*!vw |>I
-ovc
-!
-0KN%VѺzZb-X9lk5jZ&+g(wsݽqwevz8}uq}=uK+~&1?wgId'3wSdV'Z
-nd*TɭmS>ùʿm>?Ln z_& 5@a>FЧ݁
-BnwhZLiit w;͝kf
-w| sut̝D?%!-+ē\b?C/
-
-<{эfZni>0:AOc.GA;q ow>{ |
-f3.o^~'/<ݼO?lh:lz536ǩ,,҄aƒ7kP1
-Eb(5B+= iҔ4-݁o^/wD<xM<Iq?MN^\ 5zOCݦh'=|:æ3|z=./$=?-Ą >On-D_`EE8pYYkgEQ0i/ wFTFh1 G~#Bp@]c[jg9's&ڷ]Wېk-hj/+ΑZ6Ϝ1O _ =4Yiy%6{[ƷjKߗ[|\*nr .eiaE3g.)_fiBbYedaunN\q޻p[qtdsjj%gܼbe08IG[\qK]m1EP+⦆BPTHGM+*싅fټ_.ss3*1&Njuʦ,yY掬VoXUP?4o4 <֛*ҹ[gǪnN87'U~U 23-ed,%z?ذNVmGУkq+Jvvً ֘'eλ6 %^}z.G;/Xغ|Rۚ}=%]٣%K%tM' U;'[@I+nq 9SM<n K+.h\'ւ`),(.* }1`51E TuЇiz.,tDصܰ˄9 cwx¢k9^x >Wpn UnC[T\;V`zUC_ ZEWgL}<fimgVXvMRo5Emcv|ֽ*+_g'<Gg[hDU"wjF˖-wԚy(3liUM]}ÊƦ-m,ܺ,+.ߗW$ВYKWf4V/[^նjgd5pwe,7f#R]xہҜtP޹@"c3jq0Z)
-9/g]% bɛ,!i%67
-q M4f
-*7@NQZBJ6dCQ(ThH(+,GDuPTLKH=#@Rq` J ʄWBYñpD0Ue2SҤO
-'(̤~yw$8'*Й G U"[&s7LdϰK
-FIeJ HCwY[3~0xC <bMC:(j/ )@<CŢTD;
-VɜaI "j!c79Ȫ L
-%(5bl# Rb7rY/Ř*i'Ԭ%a'ʯx ai„`%ف3Dp*$ZbPD/)I #2QIī?[N38*#
- Q/@D^xk~
-p  ( upENW[ |QhC Ɔ´'C+x{s;0[=H#tRj
- L{L"«S2U.}ETZԦc#uT,N!JQz 8s)]*T"0F9jyD|0ht̋tU
-1F,ۥg=,(5#ܔ_?MYKVd6;>chq.ͅu &0DF:Qgŝ+$V-N&C)Cv %[Rs~CVDnZ5n~j~v9K}VR!:›-e5oĚgj#Nvw9~A_ N5E?Aݒv\_#_htD
-ᾟ&$iJ?~NBb2yE$ $.ڒtT"
-endstream
-endobj
-215 0 obj
-<<
-/ListNumbering /Square
-/O /List
->>
-endobj
-216 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-217 0 obj
-<<
-/ListNumbering /Decimal
-/O /List
->>
-endobj
-218 0 obj
-<<
-/ListNumbering /LowerAlpha
-/O /List
->>
-endobj
-219 0 obj
-<<
-/ListNumbering /LowerAlpha
-/O /List
->>
-endobj
-220 0 obj
-<<
-/BaseFont /UAQXCA+MyriadPro-Regular
-/CIDSystemInfo 222 0 R
-/DW 1000
-/FontDescriptor 223 0 R
-/Subtype /CIDFontType0
-/Type /Font
-/W [425 [658]
-]
->>
-endobj
-221 0 obj
-<<
-/Length 231
-/Filter /FlateDecode
->>
-stream
-H\j0 ~
-Cq21aXpl%3,QC~:?[Ҽ4'8-B'Uy.v4QieJ86UU?E/;^+;dOnvc)Au {ftݧ ̿kܗalp8Ec BUVHAߨ߆]]OWNPvf<y9C֣~
-endstream
-endobj
-222 0 obj
-<<
-/Ordering (Identity)
-/Registry (Adobe)
-/Supplement 0
->>
-endobj
-223 0 obj
-<<
-/Ascent 952
-/CIDSet 224 0 R
-/CapHeight 674
-/Descent -250
-/Flags 4
-/FontBBox [-157 -250 1126 952]
-/FontFamily (Myriad Pro)
-/FontFile3 225 0 R
-/FontName /UAQXCA+MyriadPro-Regular
-/FontStretch /Normal
-/FontWeight 400
-/ItalicAngle 0
-/StemV 88
-/Type /FontDescriptor
-/XHeight 484
->>
-endobj
-224 0 obj
-<<
-/Length 15
-/Filter /FlateDecode
->>
-stream
-Hj` 8
-endstream
-endobj
-225 0 obj
-<<
-/Length 520
-/Filter /FlateDecode
-/Subtype /CIDFontType0C
->>
-stream
-H|OhAgjv5bA]R{1?J5`,j,Ke۝k0MRW#DA APE Bj($"^>}= 2
-endstream
-endobj
-226 0 obj
-<<
-/Length 597
-/ID [<20356CAF1EA8E546BE7E22ACA2CA4797> <A6C79E772A68E946B1318464DC3158E1>]
-/Info 8 0 R
-/Root 1 0 R
-/Type /XRef
-/Size 227
-/Index [0 226]
-/W [1 3 0]
-/Filter /FlateDecode
->>
-stream
-x ]hu9f;i624Z 1@g۳gE7V,<laJ *Th<:^n뺯w_!@~%OKujV$<*$ۄ';ByT* ϔ6K(!<_PRcPlmr viû[u j>NCK9= GKqnƙ=c/_ uG}}ګZt:S+5
-mоKe=g=g=w:tD?|M_kvCjwгQ|MizSN?B_2/~?U\t ~}8aw~çdwu F5QgNk8i78Ym^fo'9Ήω #SĦ??[Ɖ=;mYb{fB̽Z&v3Z$va%vmV~&voT~"lP/o_޾^zktQDo}E(RZ 2m!M$Ud2I_)kj[e$%GnT'ڡ.r]#]iЙ
-endstream
-endobj
-startxref
-360498
-%%EOF
diff --git a/Semestr 2/topo/FraMalCzęść1.pdf b/Semestr 2/topo/FraMalCzęść1.pdf
deleted file mode 100644
index 1be118c..0000000
--- a/Semestr 2/topo/FraMalCzęść1.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/FraMalCzęść2.pdf b/Semestr 2/topo/FraMalCzęść2.pdf
deleted file mode 100644
index 4b52abf..0000000
--- a/Semestr 2/topo/FraMalCzęść2.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf b/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf
deleted file mode 100644
index 299d001..0000000
--- a/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad1a.jpg b/Semestr 2/topo/zad1a.jpg
deleted file mode 100644
index 062fa49..0000000
--- a/Semestr 2/topo/zad1a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad1aa.jpg b/Semestr 2/topo/zad1aa.jpg
deleted file mode 100644
index 7a56efb..0000000
--- a/Semestr 2/topo/zad1aa.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad1b.jpg b/Semestr 2/topo/zad1b.jpg
deleted file mode 100644
index 6cc23fa..0000000
--- a/Semestr 2/topo/zad1b.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad1c.jpg b/Semestr 2/topo/zad1c.jpg
deleted file mode 100644
index 62722b9..0000000
--- a/Semestr 2/topo/zad1c.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2a.jpg b/Semestr 2/topo/zad2a.jpg
deleted file mode 100644
index d3c8cd4..0000000
--- a/Semestr 2/topo/zad2a.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2bc.jpg b/Semestr 2/topo/zad2bc.jpg
deleted file mode 100644
index 1feefd1..0000000
--- a/Semestr 2/topo/zad2bc.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2da.jpg b/Semestr 2/topo/zad2da.jpg
deleted file mode 100644
index fad050d..0000000
--- a/Semestr 2/topo/zad2da.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2db.jpg b/Semestr 2/topo/zad2db.jpg
deleted file mode 100644
index ca8122c..0000000
--- a/Semestr 2/topo/zad2db.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2dc.jpg b/Semestr 2/topo/zad2dc.jpg
deleted file mode 100644
index bd8ee14..0000000
--- a/Semestr 2/topo/zad2dc.jpg
+++ /dev/null
Binary files differ
diff --git a/Semestr 2/topo/zad2dd.jpg b/Semestr 2/topo/zad2dd.jpg
deleted file mode 100644
index 709e10c..0000000
--- a/Semestr 2/topo/zad2dd.jpg
+++ /dev/null
Binary files differ