From b2b9da19aaaaaa5abb07dc5782ea11f3e88e9561 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Mon, 8 Jul 2019 21:05:34 -0400 Subject: [PATCH] convert to rscons --- .gitignore | 2 ++ Makefile | 69 ++++++++++------------------------------------------- Rsconscript | 27 +++++++++++++++++++++ config.mk | 45 ---------------------------------- rscons | 20 ++++++++++++++++ 5 files changed, 61 insertions(+), 102 deletions(-) create mode 100644 Rsconscript delete mode 100644 config.mk create mode 100755 rscons diff --git a/.gitignore b/.gitignore index 63af480..fb65b6b 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,5 @@ tests/test_tide bin/tsed bin/tframe bin/anvil +.rscons* +build/ diff --git a/Makefile b/Makefile index 284a617..4bd11bc 100644 --- a/Makefile +++ b/Makefile @@ -1,66 +1,21 @@ -CC = ./acc -INCS = -Iinc/ -BINS = bin/tide bin/registrar bin/edit bin/fetch bin/pick bin/tsed bin/tframe bin/anvil -TEST_BINS = tests/libedit -MAN1 = docs/tide.1 +.PHONY: all config build clean distclean install uninstall -LIBEDIT_OBJS = \ - src/lib/buf.o \ - src/lib/utf8.o \ - src/lib/job.o \ - src/lib/view.o \ - src/lib/draw.o \ - src/lib/shortcuts.o \ - src/lib/mouse.o \ - src/lib/x11.o \ - src/lib/x11_gc.o \ - src/lib/x11_sel.o +all: build -include config.mk +config: + ./rscons configure -.PHONY: all docs clean install uninstall test - -all: $(BINS) test - -docs: - ronn --roff docs/*.md +build: + ./rscons build clean: - find . -name '*.[oad]' -delete - find . \( -name '*.gcno' -o -name '*.gcda' \) -delete - $(RM) $(BINS) $(TEST_BINS) flaws.txt + ./rscons clean + +distclean: + ./rscons distclean install: - cp -f bin/* $(PREFIX)/bin + ./rscons install uninstall: - rm -f $(PREFIX)/bin/tide - rm -f $(PREFIX)/bin/xcpd - -test: $(TEST_BINS) - for t in $(TEST_BINS); do ./$$t || exit 1; done - -bugs: - make clean - scan-build make - -gcov: - make clean - make GCOV=1 test - -libedit.a: $(LIBEDIT_OBJS) - $(AR) $(ARFLAGS) $@ $^ - -tests/libedit: tests/libedit.o tests/lib/buf.o tests/lib/utf8.o libedit.a -tests/test_tide: libedit.a - -# define implicit rule for building normal binaries -bin/%: src/%.o libedit.a - $(LD) -o $@ $^ $(LDFLAGS) - -# define implicit rule for building tests binaries -tests/%: tests/%.o - $(LD) -o $@ $^ $(LDFLAGS) - -# load generate dependencies --include src/*.d src/lib/*.d tests/*.d tests/lib/*.d + ./rscons uninstall diff --git a/Rsconscript b/Rsconscript new file mode 100644 index 0000000..5273fb4 --- /dev/null +++ b/Rsconscript @@ -0,0 +1,27 @@ +configure do + check_c_compiler "clang", "gcc" +end + +build do + env = Environment.new + env["CC"] = "./acc" + env["CPPPATH"] += %w[ + . inc + /usr/X11/include + /usr/X11/include/freetype2 + ] + env["LIBPATH"] += %w[. /usr/X11/lib] + + # Build library and binaries + env.Library("libtide.a", glob("src/lib/**/*.c")) + (glob("src/*.c") - ["src/term.c"]).each do |src| + bin = File.basename(src).sub(/\.[^\.]$/,'') + env.Program("bin/#{bin}", [src, "libtide.a"]) + end + + # Build and run unit tests + env.Program("tests/libedit", %w[tests/libedit.c tests/lib/buf.c tests/lib/utf8.c libtide.a]) + env.Command("", "tests/libedit", + "CMD" => ["${_SOURCES}"], + "CMD_DESC" => "TEST") +end \ No newline at end of file diff --git a/config.mk b/config.mk deleted file mode 100644 index 9d91e0a..0000000 --- a/config.mk +++ /dev/null @@ -1,45 +0,0 @@ -# Customize this file to fit your system - -# number of threads/cores to use -MAKEFLAGS += -j - -# Install location -PREFIX = $(HOME) - -# OSX X11 Flags -INCS += -I/usr/X11/include \ - -I/usr/X11/include/freetype2 \ - -I. -LIBS += -L. -L/usr/X11/lib - -# Linux Freetype2 Flags -INCS += -I/usr/include/freetype2 - -# Compiler Setup -CC = ./acc -CFLAGS = -g -O2 -MMD $(INCS) -CFLAGS += -Wno-missing-field-initializers -Wno-implicit-fallthrough -Wno-unknown-pragmas - -# Linker Setup -LD = $(CC) -LDFLAGS = $(LIBS) - -# Archive Setup -AR = ar -ARFLAGS = rcs - -# Clang - Enable Sanitizers -#CFLAGS += -g -fsanitize=address,undefined -#LDFLAGS += -g -fsanitize=address,undefined - -# GCC - Enable Sanitizers -#CFLAGS += -g -fsanitize=address,undefined -#LDFLAGS += -g -fsanitize=address,undefined -lasan - -# GCC/Clang Profiling -#CFLAGS += -pg -#LDFLAGS += -pg - -# GCC/Clang Coverage -#CFLAGS += -g -O0 --coverage -#LDFLAGS += -g -O0 --coverage diff --git a/rscons b/rscons new file mode 100755 index 0000000..bcc9723 --- /dev/null +++ b/rscons @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby +script = File.join(File.dirname(__FILE__), ".rscons-2.0.0beta1-c55eace7d7ce856b7f6460730da3e705.rb") +unless File.exists?(script) + if File.read(__FILE__, mode: "rb") =~ /^#==>(.*)/ + escaped_compressed = $1 + unescaped_compressed = escaped_compressed.gsub("#4", "\0").gsub("#3", "\r").gsub("#2", "\n").gsub("#1", "#") + require "zlib" + inflated = Zlib::Inflate.inflate(unescaped_compressed) + File.open(script, "wb") do |fh| + fh.write(inflated) + end + else + raise "Could not decompress." + end +end +load script +if __FILE__ == $0 + Rscons::Cli.run(ARGV) +end +#==>xœí}ksɒèw~EÑp@2² sîîFhð`Æ63ìLØÌNV–Zv$µ¶»eìk´¿ýff½²ݒyLœ»{‰#4ÔõÈÊÊÊÊÊÊÊʺwwgY;gÙ|'_Šbyv}g–—ÓT—£|^ÞB}?Ÿ—| 1šËR<}*Êt:¡!ŽO߉]‘|Hûg‰J§ñ©Èª´•å±5KËrxž¶U.äçƒQ>Í ¨([ë‹i6VY>ïBîڔELlbªuçÙô™ÉpÀ©ºÏ aÛ\:›ßù²Bt“\r´,Št^Y4±Ÿ¼É´ÌŠt\›¯ºÜM‡£ €/>Ï>³\juÖÍÊÁðYë¤*²ùyÛÉbšÍÓ#4Ϻ%P¦j%æIGl?‰–£fŸ²êbÍÇ鵈9‘}ö*Pۘ'î:tpòÝîCA§¿‘:’°6)è“v]#3>zAsؑ 7V:•‰§Š\eöR±-žlØyp,ê ¬ã£:‰c¿A'ý”tZú´#3ËT̼ÄOé\ô`~ä©>‡Ó ÿñ¯Of>*²úy‘¦ó×Vÿ¡¦úu:æŸ~\Wý¯5ÕϦ˔c_SýÕTŸÁTWÃ×Tÿ—šê£ëá|ƒÖÿµ¦ú§ ”ëI÷ou}ϧc>x±êOê«óÁ«©^7pX^Mõځƒê|ðjª×#3VçƒWS½nà°:¼šêu‡ÕùàÕTo¸ulS7jEZ¦UÏÄäL œo÷k31X#1þ8(O}õº¨šœmØþ;Ë»R)¬Í_Ùå°Ò¸¢Õ%#4Áãß~þûàí«çï^¿»ÿ%vf€è§†BëðÍïýäÝáñëäTìÂP^Ui1KÚâÁñ—OýI6ÉÅèbX G~²HGÙpzÚÍæ£érœbƒÝ²VÝIu½`j“GK(UU×Ï"}Õ¿äÿø/þ-Òÿ\“ˆX' ´=©Ý=·zAVU1ŽF0lÀ½P5ó#2ÌÕE‘Çe,ó2-ÎrÕÊ’)f Yɞͳ#2ÈK´ê͞#2Œý[•M»ãÉ KùÀmÊ"((öû°8I«î<ý¤3òEZP¿0ÛË;[fÓñ ¬Òä=¾ÃIˆ™ª­|ÑáÙqÓÙ¼r±ÄjªlG”£"[T s/#2&iônV¦àƒ¢TÙ,…ôwðÇ[ƒ ù#1ÒUÐÖ͗fôeUŠäáۊ‡÷nL‰ÕCqïF·³Jßù° Q\Š]Ãr¤Oø#3(•U¹øÂªŠ¼òÏr>Öû R "ôu>Jû pä$;_*úŒ‡Õ09µ©é89uf¿ƒ‘šMœîpYåX5P p`,ФqhÊå|ôÄdSÐI=Kˆûe¬]t%µßù?ÒQ%f˲g©°}“¬(¡Ñá|,4ª"+Å8+‡gÓt*~¾ÖºFŒ#1u\ª A#1Ó#2úÙ®#1‡s4M‡ŽJ ~!CO^P'65)ëC·« !“è&Ž™NÃA•Œ÷%*á.çÈ&±N»#1þÛüã<ÿ4·m÷Ÿh²PKt;íˆ3ÞýžÄûÔÝÇ¥"8\”Àb»²Ä6—&¦Dד£|¶˜‚•â#4˯DëÞ#3 ßI^̆Õ@'`-õÑ^µuÇlWŠË@&ž§Õ`ž^U+x#1¢–ù'ѪUãÀêjá8¿ÌŠ|>­¥›ÚßeæÙr”¶ð6) E-§À Pت!2Q<ÂÔ.kV«Ù§ùyt•u5DUÏ2‡ÑÏÒóÌò±/ù&ÃlJZÜlÃ^¢ò úVÚi™FMjm·’åôOPÇEŽËrTQÒÂ(1Z¦âglí°(P±ü :`Ê¡eH©TŠù;´ì@¡®Òô:JWíÐ.Öδ'5DDÂñ¹>B#2\JñÌ.ð4pEْsÙöZ¦ÛŽËÒ0Šùe:™-ùŸEëйxf6˜xٖFÔ´©Q•Yj=§7Ÿ‡@‚ÏâLžՆôse‘Óu¯kð3ù-óËb‰sG/žˆ±ÁäúY¬8“ÖAV#4sT„«-2¡ÿ°û°#1v»Ov³×(…ÀjÅ *ðJŠ/@5螺?Äw8cñ¡öE{ãpËɈ@*X§*˜‚FSàmd )>ðŤeJÔ#3>B,jûŗ^€l‚ÿ¬œÄžøÓ1ÒÀºÕRЇíx@$I½Å\¯Šå×Nõ`¥WÀŒå³  \!*̰R˜rüDö进ühgêÆÉ÷=%ŽÞÇw¾?ËlĖRÃ¥v?ڊîÐpǙVΞ³%a÷z‡/žÿöêÝ`ÿèÍÉ»ãßöß½åÙ`N°<}¨Ã)§Íòc†fRˆxÅè!æ8‡T€1`ƒ‡P†EµWÉdPC’˜šz#1s-¸¸ìCò©øüÙѱmÆ#1Ëá~0Ót}(á†SâFê3þD$²É@‘úl<ž¸ö#3E#4\ %~4D{Åy^Õ5$IÓ'Láßééi#3@Çl:!ÔȌ¹=,FIØnöªÍdÿū翜À¶¼¯ÀµNã¥_¬/íR F%˜æ{œ#4÷n´ÈKöß¾áüöøðÅË÷I{åÍ =Â}Uîå›CÄå>뇍”QFÀo@#3ék{LX•×e‘çÕ·@KƒÚxÜj|ÕØ½|³¿ÑÀ½}þî׆Qó ¾zùó«—oþ÷zÈP°‰B°/7‚º_ÏÙ<ß]ŸÊYd¼°ŠCñÈye‚¶ •qþ©Œµ´9”…4Ð_t‘æÛvêj0ÏO4˜ûO´GE'i7A›ÖC³Hm mQ#38ucp]iÁÃUôY+Ùf•MÈZçÑ-ál8/Š!lip©Æeš'r‘µ¥ží«!.]m¹:m%fa/gZŒªïàbX^#4­ Wùà",Ѕ†JÚ£ή[zPªd»p(i)#4ƒ²*­Bé^ÏÎòi[<“iór‡"¤3›zžQ1_VéaÑÑ ™I#3’÷n†¤¹iÈ+fqŒQa³}—Z0iû±ÙIfgTèa–N†Ëi¥w1ø_?èÔěYÓë(VHܹ-›Ø“‚e™r°Ä`-'—|çðæàëlÆUWvÏÊ69§#3T};¼LÏZ‡Ê”Ä(¬ö ¶d¸ëÉô6օ$Ó(.#1X…(@)—x”ÄÀÙ"v`dZI®|„AÈ Å#1FR¹çSK³uÃÄÁh6v÷Ք hæä×ÃW¯œ51 JàҐ´aƒ%Z#2(#4=ìŒ˜ùÉöȁӧ‚‚W»–(ŸQl 4Ì*#3¨V¤ç/º‹¦Õß2}ëÕëSy”åLlç]TV¢t Ü(&Ù4]¢©/t¦Pßtr’å#2„²4ÉT󩕦´A,†ÕEÀL˜&`ƒt¹\¤…ÖzI» 0«š¡÷<2¤y2–SæË~DzÈÊËH痱dãÝá7‘ÓA:™€¤Žæ{‡ƒq[œ11É®XSz_uNsўê/¡’Lm€6(Ád£§4˄O“¥&¶ÉãV =ÞQÏù„OI6¨¤;otMªS4_蝽µ‹8 |Šâ¨lm .`¡YXBáéŸÎVT뿜£t9Ÿ0Þ#13Xš•[,ÕÎ.–8†,:œ&Œ”a 9¾Å”ÙŒUm[yA‹ô<&ÕÀ–iŚbõœÁÙ)Þ <¥O{®3ÌJ ï.²R(ãvöÈ/Ó¢ÈÆãtü+†è{@C›D(Í«@¨ÓS›¨lSyhCDžÌޓ§¹XñL#2#4™&ׁq:§é©J4à÷YR™žgB;ùH¹³BÞ«¤lWߨàÞ@…^#4a協،Ž{!?#3³j0ɋ־L'C¾é¨¤£‡c;¤j†ãa1þbêi´ðŒSþÒ­^~á»Ç%¶ô€’Ç!ËÅ#4ôtP—Ògv¾ïَÉjb$;E˜-ÆY}Õ©‘Z‚ùüZ°è|=W8Ì>޳b°héÃ&j¦8/θ £îù´nÚL²9­-`l|n7 {úPN¡*}B63KçÕè{¦CRÁçizI‘ÁUoÕB…ÊÃB¡¿ñä¢#1èϳi>úhxØ©¤r¾ýBê(…úE:+Cßáªv˞¨øxЄÞÚs;°¥ú±éÈ-kºx*~…h-#3rÑMç£ Ç9º–¢&×r±wªi8‰5jF ^qR=}ªÖ´†•¦ŽÙ½³‘h X<Ïóð6š|§HÁQnY]g¬–ž#2nَøfé¼.#4BÂÍç³ÏtòqÖEÝhEÇå#3SÝõ@ƒa‰«ºò/#4¬³©r1c›*(DIH]ì#4Œ1ó?°([ŒQ¥²Œ[vÉݳ«…È#1ъŒrߒ¨ßFcÌÐØN§Ï¤@ºàÛ»5°.Êcô}ûìnö©/%Þr‹6m8iÒD³K‹G, ÏVPHe¤ãûRËè&ñ“ãkó¦Ù(½ÛzÌð -h £»càúá.7Õ²˜;Üîõ””-Ìciâ«ïpNiûùr*ðˆ³†¨hÎÑ#3X·Úoó²Ì0e”£åtXÃ9×Vq KQlå»dÖlgÇÙyZV;³ñ¿$Ñ=®IûG™Ï“5· ~?<>yyôo±üÐ}Ü}|–VÃ'IƒÝ7›Êýçû¿^¼|uˆµ»•£eTväí¯Goþ>*X¢G ½¤q?í9Gë’qÒ®g}gc"#1¸—`î…=#3é­õÏà~Ë4RCv#1Š#4÷@óô&KÃöÈ ´7úX.gjú®FdšçA…Ô¹Lw”æs£pO`ÛS‚‚DN¬Š¶]²ËXD;"ù”È•`ra¥Ï䂪[ÿ~rô¦‹fë–ßnRä¸Ê«& ÓºQ‚’Ïo\WŠ”¬¶ÎÇl#4#1¤ì^æ;"M:s¨2oâ’F#1ÊöRãôlyî[g¥ïÕ;i1^k %¥ã¤™–E°E#3aû/²#2ú ‹ÊjXästÐüèÞAp¸F.úþuîª{šI“ÓîŰDê=kBòþ®éímûZ]¤ »2ì¬ȱ±0O¤;´Dâ4sŽÎݾG{éëí> LßoÁ¨y(ï•y“óOã+øLçx‰m~ÄSœJ'ŠÔ³”ÊCÅJ 1òOa —Lr²K*ÐÊÖë½>ø—îEz%:½µ×‡EߗٴôÁSP#2rÍm’”ŠŠ_Ái’‡JÛl¦#3J”r0˜àö¼ÔNÖ2±;.Ä#3(œ£Ïb<ê'T ¬ ×¶Sd£Š*ž†.±Ü´ù}ǁ£¦À£8Ï.›IaƒBèϙO„³ó2¢„¬XlQ¤—Y¾,c忞åÝ,Eº–ö0%S­ØÖÆäVHËvÄ÷û$éþߘ|Ökû4°%Z¥2õ9*:úêGãJÈ#2ªøÎ«¢G6tuPXÕÑò+§‡ýµzÖÇï¦Ëo3έ\gu°Æ„St‹ÝP?n¸šàÚíh8Åq•6éCœ€¡0ˆêñtòÀ@å½O6Ó-:Nu͸Xߣ™S$2r%bònTOr›ªØñsæ#1Ó¦íÖX¹Äs´òaµÖÈåö?côM_„t÷®aQ•|jËú§L|‚é[Iª–ÝsÓ'°ÏÝ»îM§p÷£ì˜Æ›,>·ú_z.PÀ)ÜzÐ#1»Ox6¥Oað5>Óâ’^tՅò(ØéøðaçtÇ)"ý߬?sà§»EÒá¥*û™ açm¹¬ šÙµÂå¬-¬Lø6æNB¶+t6”çŸèaÄ-tæz›9&w¶¸Êwϖl7Ü`x¶‚!,ܕø„ÊF^ËEÕÅKÞ#2ï}˜ß»Ñ•Ÿ¤žç›ðT=à2š‚ѱމ¹Mz%73;ú²5¯vˆ>æ’bÑlMÇ2ÚT°¾‰:“ƒ~,×A7±´'’â,±Lp·æ³Ç}æàÄÓágNÆÈ¯Á¼±ªaµ,Ã*Ê Ãñíòò”Ø ó¥ëdŠX¿#2…ê-}!ö‚ã!aÑuNèMê©W0¸‚ø„bo97sãRŸ^󆟉>û<=»“T@ýZ VÓ¸½°Ú*Kß=ÜÒíwĖ’€ÚA%½JGË#2éºe} ¶xë†r0~ýèÒ6>· 6µÙÚbmÇMïMþ‘þ­ >Åî\/U]@OÅáÕ(¥®üX#1‚}ï,3¶æZ¿”7nŒ"SjQ¤“ìJ¡@©ÓD.·÷)/>ª8 N €¯v‚@8¡ŽbÀ0qr>˜݈H#4¾)§¡ÂZržàyəñ]u~Mp‘&ÉÌäò¦aø|²dÙˆ¤½ A‡]ïy(· M·Ê[ìJA¢Ù#2÷ð‰¹bÀ°{Ýn—ß%àځ‚¨VbUÁ‚ºaPœ(J'iUiÃùØ(•×#4€0¤(]ãAVې$­­‡[Ré@ޕÖÅÛ'¿vd9¥À咏ëeԈ`&Ø+ÿ›°øúÈaèº!Ûç5YÌ#4_\×#1œ2 ˜;Ekk4i¼õÀK#2'ûX)‹§FûBW!#23M#4øfYH¬þò©?@æÍ-Êò ÁºÆåd4b›CP.8šI¦=ÐDÒBi,P–œÇ°Ä<éh²h—ÉžÐP"¹ºúš#3å!â2‰I¯‡iå5HÏçÅpæ-˜´ióukÖ7É|“e³¤[,>žoK2ë%Bév%RÕpÏc¾½=’×··§Ù™Ñ଒Ü7h(·FMOÔ á·öžÒ]t„Tû1’H\ÔåœQ°ž‹t61åyHA¹ Ð-¤–]ãn[Ã\ªW+&‰/hgђÿ©U:j²^Ë7ûBá£è€­ÉZÕlrŽ¤ëŽ´fVçÊ"ž>Ý>~ï‘I“[.ièø¥tµ”©&Q½@6±æ< ¹O¨eâ)xÇ£•‡"¿…É×à Oµc*V QgH,Ö?T1Êè}õy*½˜?§Ÿ)®®Œä—'?â¿øOÀà_:~]y#4I·³#4åç\EfÍIZ¹ñÍ%ÇȎ5ÒC4m–&›Æ ¯ÎãèÚ]¢|LеH;µ’Ï^ê犅nÒ4Ôï@Bá‰w4\€HHÿÚÚ#2†Åmïð*«TelSþB׬Œ·¦ëHMZ¶Ý ÙÜ~U=ϔÎaQÌó^ïðÍÑáû¶Y?A ŸüðoþÉ §:MÜâÄ7²”ÚåÉ©Ÿûî ¶ ‰gæºK™ aaLÂ%s£À ¯˜6õÈðþ¦]ҁվ¨OÙ$#2‹ú¸¸Lkc.ÖÁQ1Ýè´éF5ƒŠ³•Ÿ¤ÐQÏ7¤²#27çÅtˆ#4%2³©%?ô J>÷ò‚õ(tâɔ©tâpÅg]CáæpŸÍȰ =ÃY¬Ÿnk d G—m7ªÒWÝöêÆXbs“„ðÏe§67‹Ž“I¾œ栗å1Sù‹ÀrèÁ]9ü8—>R¼tš3žŽXáÁ¶É\«ÌZ6—ø¸ÛVíâ:?µM|t“0™±ÞÊ÷M¡»™iæôÒcº(z©¦¾ÿà;º¹oyÕȍ:Q`¾¸ æÅÊÏ2’4*"‹l4Ð!tYÕg )DÎž'o_î#1¥šŸ´0zgòüXÚ‡…²BŠV Þý›çÇ+ÿR#4aü©LôSY-W§¦®Œ3¬j£Ò䜄&QHt›øÛ#1Ü#48­úùß~{ý–ú$³ÈÈ#2 ·ñ9ݲLg9k{[†_35<Þ› NPKû‰q/u—Ô í<›š§+¯Âñü¶£ó*FÕW‡#2ÓÉ4½Jl¢×õ©èšK¯˜í$P됮ö{Œ†)ë¡ÃE‘|•Ø<ö‹Ìœ²Ìp0ìù.Oá,7Ôõ'ÉäüìQŠåyäÈ5Ö³ EÊ·l«Üº]—¢Z 4Ýp-jõì<ï°9ßÞhV‡#2Œ0i|z×Jߎx0!çòöœ×8ԓòÕ:\¢ÙòÅHƒ#2øàuœ#4j–)õÍ0)óz=½‚õz'Ùl1MÖ±h$Ó{pDvH„(6·úòÀ?öJ”¢š‡U8ÓÑ×PâÌÕ#4#3y·*\²<ÅækIªüÀá“IvÕqûƆ޾gP-xêN¸¥“{76!xÍ@Ð5»L®œÒP—®ĔSP¢§°Â]¦ò•1µò¡kÄ>Ú¥v{•tÏËåY+ùð¿v’ðÈ¢ÈYD w‰î6F×W5yäï*:“fÉ#4weÂõ«1…tX*„…å‹&q€j#4°¨«nz%Ê×[ðÓ;u”`óNj­z»‰k6…™¼ÔUÌ{€†·jG_7K¾½"#1*ÈlO[‡[¬¬G®XàeËàUwY±1à|Y›¿ ±“UêüKKÀÀdx|Ο€°u6íÆ¬Ä÷CÃbÒÙÔ÷*òµà ´QŒƒ°‰G»Êæ8ú?îÝܼÛ/þñ—© ‰,i×íVÙî&Bèm/-‡E‘Ëuˆ‡ÆâÏl¨ý`l÷ȆÁ ÛIÏ fY‰÷GZòS…x`"Ö*qÆëI¥õђO?¿c^“Þœ[@m.ìù-uÑsoS#1Jî™,4!Îk–öûßÄ#2œ’ßæé$*Ã#4KZe…Ö]0*uO=ê PÈÁ<ùɏtߍ ž˜³Ï·É¨ÆêÛÆ¦• \S“)¨¨ÓõôùËÉÙãŸ}X4à%kº'u'°AÝGF£ ˜ì6¿ÝŒä]½FCíët†ü*da徖à-ßN Õ56j5¼ÔÝ¢±çkÅN=Nö)çÅ­2ÙݮԜ¢{Þ|Y-–•ÜKŠÝšÝóš}30ÎÀL×¼ÒUa…X+=¾*±ÔØ|rq$"½ȩ̀#2Ò^ÇÛ#3äÎ *ŽƪÞ衽â‡c«Á¢öZŒ‰¿¿ÔìÓ´4Ù¥$:é]õ`çÕ¡IR:›/Yܜ=ûà‰»¨ˆ·°@êªb²th‹ã© £Óp^1­ÝîúÇ+æaŠ)ÿd%>Ù'“[ž“A¥È¦òh¤åüì#2ëuÂO€œ³-f$kl›C;” MeŽ"W¹â7ÆC²ˆmd9'è©Y„ÙN”C¯†ñÁÑ3‡hÍՒ^þÏü5ÍôÃK0©r»ð”ʼïkèñ^Õy…¶‰â¡†×e`”‚ºŠÎ²öÌ™6„äïœ_³c,#2ògY_EZºþ~ÊØ{£SÄà|бÇÚºÁá¡á(M5(vÙv9­?¤[sœ©¤5Wk«\CK±ÒìAädSµ AÿP;?´Â¡Ï¸Æ­æEGägÿh:·}‘yYgm¯=Fæs/<¡²ýǧž^ ²û­x#1^‘]ÍC¹E©è‹<ӑûÈfËþÆ ¿o¬ yƒ²Ð0Q8Ikå6ÓÒbkUtM˜çsǹZÖI¡|ý˜^—6ʘLåtº«äÝpš]¦Ïb=ôNxžœrR#3z“ -@@Q?;ãçšrsPþ#3#2ѦnËÁ»Ý%FC›í«ãKCZ¯CuKIP®á#4­fm ƒVîÞeŽÿ±hҙë„l3G&”Ú½Óóu—VÖ™€f Ãwüçoÿ´øG#4§ë½?Ä?£ ‡Ë*GOݖþ‚Ô9x¯~FAÉ}ÆÏ5PCÉ©t.•0½xÃg ÍøéoÑ>jÕ õ|šŸá«žlŒæLp™ &hK¥^­#2¦#2×É|•ïSÉÔ.ZÈ?eÕųV²³µåÄV1 É÷c§éki²ÁÇûŠ.uAÕlב…x«zB•LĞý·M^sÊò£¹ZF·´öJJ{O¡Õ2¾¡AÎ {<™Ôû `ßTëùïu‚,[5È7ԛœ‡iêá„h#15Y&̼Ÿ±Àý4FY¥³%Syظ7d¼¡Ìk±"’1ÉýƱ-qªÚcVÑóÙiڒy{ãå;ù0d§¯Y,»¨Æ÷˜ìaKk}ùCOšò³)20VU¥nkÙ/å£ÃìÅKUX™æÝ×±®Ì)l5Z<’#4äIÍ)¿]Ù¤–ƒêªT¡h†À–$M¨aEµ¢26ÉÈÝ_53˜ggã¡ß4“žVë—ø60ŸØòâAtciDüVãÆöº0Qê­úLθ÷h;+ó鲒®³þ‘ÜÅ#1Lñ—ҝ÷¿Ÿµžõ>|êµŸÑ  ñé剨ЕîI³º)ÇÉ=œP§ºæ0ý£ÕÝzÖn=íÿñÓ食ÚðÕ¾ïàM¯Ùá¹ÛØØÂÝÒ÷€¿eeÉæ‹YÙ“§r'ð“»ñÄ¢#4«7dæÕ0¬%tkjatø°#2ň¯©Ayµ+`ßíê–OIå­p#4!o>_~—òïÚqìë sŒ]Ó¡£ÞÜR(YñyôYŒh?”;xM÷ὛÑê!^Ô‰•t}(†ûNéÇ û å»ۉøãðÍïýäøcœ#3Þ¼ûõøðùÁ ê<Ä.Ə\Q›£ûO(NiT¥w¦£ŸÉyßëAC/^þÒO.Ð_?/“SXw¦Ù|y册UÍZ›ì Û-–Ù|’'ín9Î[;¨mV^|(·z;mڈ#3ÌÊOÙüs0k‰ÿñi–ÀE?ñf9;K‹£É«ü<™ùVC/ÅهþƒèT[j—è¶QKCŸŽÛñ°P‘ë\DËërTMÅö\\|êÎc‰Ì×5é8þRxØè?‰rš¸›†„>HàS´ßÊPr9§B!bF¼uþL c%ZÐÏ<Øl,Øʧndm€Ì,äe]š°æ´[.¦™|k»×äÁÉáÛçÇÏß·k#4XS€I½þì󖺎B”©n­ùK¦ª¼@Ԏ³›sÑÅïäzË#1#3•d¦t:\”h#4É`¿ª>l£°r etŽØ­},¶Ä¿>†=‰+¨T‰í]U Ñ?¦ȅ¥t{dð#4R- ]ÁR¦ vеSU²;JÍû®Âžù& g<‰“ëËo7køX]ˆ¸5…CÀ듳€ªÈjVÒ)¬:µ*/?:v‘‹H2Õ¨l1^TºÔ‡Oíi-+‡¯’Á½›ûOVðÏîk#1WʋúcÙpê­åQ#2&<ÀÞ¢4y³‰ô³Q^Ë}O_â&õáC“h—8BF††U1¥y‹?<Û#4åi¯ýá,~÷Ý%@·ãŠ‚xKA‚â؂/% þØpw«'}ÿ@7TםI  UDI3TdPïi=è• ²®pqEH#3ëd‹l2Dî€Â¦X'ùl2cé’•ÆØúr{3¨°õƒØ>¾~ÔùëÉ­H½V%7&¤è¨ð.Jáá«¿ƒªýèBñ9ªm¬(¾ãn× 4©/F’v¼¼]r"«¾ù(祄ƒîZòGâ=¤!¦ø I"J«¥Êñ.ᝏû„°¼I©Ë®(ÊÙíj€¾~ËgÃ*iËAw˜¦t8õà|Á‚#2²(™-FœÖ¬=$i‚u†ºm¸ÜvË;STÜ3ëé—àŒÿÓÞìz`uÚ(êD#1QYÄþÐjÒ?m}L¯™ Cƒµ¾,ß¶J¡íuë¿FÁÚÖtŠ'MÁxKAkЧqš. ÖZº.eDõÈ¢3°ßö•ù˜å÷#4Ú?3­T¿Ê|u¿û§»-ýä‚Ïxìuƒ ^ Íõã‡~q:Ù7Þ#1tZC¤fï3K`ûjvf#4ñ®Å^æÕÜnT™hòmõ°^;D_?QFâ5œS¼]²#3º…ùˆ’ÄÎ~3)\Ümw!÷Wž.ç՝f³˜,¶Ëò:OâäÖFžÐÈwØè’m·¶¢:¡á#2'zÃR™Þ… Ó=ÂÚôÁ½e#1ÿë(ÝbÀíìdk‘ù*…lÒɜk² Óï¸iõÿX>jXÕÚ¡Pg”Ńû|#2Ç[ûcȼðHªÂh ´˜Rµ£ÄàÑs—Åu©UtQxÔܰ©7ž./?ë*2añ™ÖX؊\^®ðɤÓ*Y­‚¯§×€'‡sl!€Ù  °QïX¤CR§#1Å:LÞ¢ïu]%œëQ {étʯݤáÔºê~œƒ:Xsͺº^¤êž5Җ&øJ´&E>“©tª©=01ÊཟÃLv{í£3 _—ùdYsô#2ÚYäúŽb}Ȭáö4¸W-Ù`Ýð‡ò-˜wâÍËÿú[ ƒÓ(>qÙ#3‡ ©¡‡É$#1[Þª| Udcc1 ‡^LÌ#2o$¶:Š—UÜãøpv´™æ'›ŒÃ™qó­Wk°@ #4¼:g¥ÐPÓ@E>UéÔåI¼¨\`êµEn8ª¹i&…öÚ,œŽö·æŠ[|µCžÖ˜¼%ÀÑr^^d“*Äø!FCTt¦ã+&|7,—‹+zýôÅê ¶º¶yҏ*aì§Žb:ÐI\Ÿ¿ÀFmÎCš7\Îh%b* Ÿ†¶Ÿ›íÕüø‰¸Û¢j½}4TtÔoyVe¾×êç…Î ûm"Ó«”—¨TM§î—_í•|ÿ\}¡{€úx[¤êÄÇ$0Ç‡Þ ÙuëË4 YVîImˆñT/çhl¦Ï™Âc¥Pë;?Z¬°$ºgóœ‡TŠ¥;ߊ²å8L81½\Ǘݹ>êÞ*sb3ðèb#4‹ %=Ôɧ‚an‚î|èöÿèžnÝßÁWQm—€¸p–×e•ÎpWӄ>†ýƒB2ºÉbŽá,p? «âŸD½Ï• ±ååQwAÏÇö©6àLA0uåq•åŸ=  åd~í’íÑËõÞ ™üã^å «¹_úöä×ÃW¯’S²9 wñŒ€’-}ú¼ôm{”¸£5ä•T9XLÓÄqm€AŽ:7È[—¤¼Hb8à’5Y°ŸŒfô¨ïNP¸Y¬i$¶Lº..òø]Úµì¥J?ÝáØ/'šfæŒ{C (.©TáõÉßOvVkyÀXÎNÒùe¢8ÿgÌ}ƒ¬í²òŠlºLÀöš?‚0|ã™Bõˬ>‘w[Üì ozYãá£nøIs‚J{]esm`PiéÍï_u4LfH}!¼qðtÂ)iNsöT!w¤•?+«ò™ þÙOôs1‰gÅÓg tÙ8v’ÔXß%þÅ7òïéí鐚°j”âÌt(ž7‡¸ÑëÝͶ]~ÃÒqÐÃ-_Zà}Ý©u¾å Éùgg¤z„Þ˘s—cUgÜúèÆNÆ?”d={é즀bû˜þšŒ4å&ڸ–Wó°#4½å23=6Ch’ýÀëþ`;ñہq†3¯+F…¡ îYãCÀ¹?êÇI±Ç'|#4‰gƎ“Ì5ý"Ùb·å6ß±´”•QÏÿ^ÔÉSTÈrá@b›4vÒ'÷oœ'ÃV‰ÎÆmшÖ³|³¡ë‡åÑ«‚ƒi‡Í_ßøa0!ÂȲQ¸,oÜÔÊ5ûˆÇÆ rhêÂOB4\#4]hì6!öSöQGµ 柖괉µfÅ^Go}£õóeµó*›ã#30¡=^UÜވ÷œf­öJ¹º¢mR»×puÅ3ê®u˜} FMÖZ|óh?,ìx(‚Ð>~åÛj_¤EXg/,VNùR‹Æ«¢Îk“?Ddz÷zÌÏÎíD>¤¾O#1ŒhV—ú#4‚Åâdk¤Fşg²ä:¾ ìëC‚íÅc‚éUPu¤&°WŒ/þāVö `IñÞ\Q„ÝhMi™£{’M\…Ð'ït\+þïÝLés…ìKèÙ5–çþˆ©–­f%"æ ç.¯* ‘¬ås#3kÛÜÙõt÷ð³q`ô˜‡ÅÃ4?Åÿ&ldÄÐ6jˆBøÂ#4—ÓÊÇ2Xp¾b½W´4#1J%=*Îû¯j8"§‰YLjW#1k;¢™s¿ñ¬T÷øp-Ç·³œ{´µÓ0> ý)hñtgÛF£º¡繖‘ÿV›”„žÕòÞWZfÈôV©“Ζè_Ò9]w‚Á¦Wi‘|-6öÁ¶:t襷#3ð!;EÑèiëí¥T`iÚLÕn£ÐÛ[1Œ;õ«õ“ ú´ÔM¥p"ÙXn‚†¿¹vÑy¾á4Säøq¢­ɺ!„ñ%íUG’è'P”ö“ýÄìIç!þ8“·ô['ïŽ~{çÙBÍÛD2<àií¢n!D±v¹8Ɔº_«Ídz0²ë˜*r3ý6|¶¸Ž2³y7]ƒÑ^&ùXh!îuEA@ب£@;v{sºÎTð@܍ß3WE[‰ª„f”x;Áý°‘h©Ú)d+à×xêN9‚ƒ¬Ä·Ê(¸‚Ót~^]ˆŸÄ“6ðmT¹’ÈëZ›•z›Šî!!þ~–8¹8>ÓsZô„»#1A½·-áÌr€ºJ“îƒ#3DWŒü~#4†¾€AGM¼¢RŒV;[[;[0G佨o^ŽÞ½~þnÿ×v˜#3oÄÆ&1’1¯üI¨£‹Evy†cP Ky\;ATv×¹3Àõ¦å,FòæR®iÝWàNå†^Ž":u«ÖWá)ODóŽYul Å(€N:íHFwLƒ†šÕù IÛçéSеâ“âÆÂ–Äj)þá«í°§Jo¯¤ÝP¤!j¹À{¹ãal€e;ʯAEÂSÁÃ) ­c„‘¡¿¯!ÈÊ »l 1°©#2ù<$ld{2S“ÉØî%{$÷‘ÀÊH޲;Z´Ì uè ”ÏËIà‡–¬µ,zgbucº!~n#1-_lÆÄ­–¡~zÊc/ ßåÝz/n¹«cìŏ_¬9o›?qY7mþ7Zßõ¹ïX÷-ºÔvéŠe#3§š¡:-ŠÆ8#40!¥¾ò¤åÀC1œâ¡ëµ0Õ-#1zÐ`( †IG…IpcWË?¾$#3¤v(S’}ýðñØ2UƒˆO~Ãã†BÃ'í#3o6ñÉ`~ÍÜ2oöÎì+7]/OžŸ¼¾ÅöÙvõ›m4ذhÿÕÁ,ùv›iå0 ™v6†æ^/8Eˆ?CîÉÌ0Y[ã`4¢'GŽ•vCɵž…š#3ÙM²îË·ÿ¡ít'>?ޜ ց51&k6S5ÃbtÚöWI¿‹É!ݐÚ6ñ¨à.QMºÍ.޺ͮÅÀu¬ùJŽ‹LJ )Ûܒ«\ùY”ëí›ûïßÛÓ6å âºÔ-ƒڋdaoÛh§s“{pøö—Ã7Íá8¼ý&pû1h®ë…š-oßÁ|9ìïӜ¡FšKJè‰tÇf¿É\#3Wˆ3BƒÀ-\Ú·ûoßÖ¯K›ä‡ÒÃΊïr:ÿ]í¿êœóöK–_À=0»Ñ‘^~ÒR #1¶fyáìÃÔ^Ø5ªzߤÝOºuVVó2Þ.{~~y2́_,7™Â8ô#3®’üÉz*÷æP޾͝#3Ăï"׬ˆþéjCî"rhêŠ4WyLi‹¾:ˆßȺ=;6þY˜´s£u#33žüúêåÏ ˜×rãfĉhÐh7O™Ý /pÜ¥·¼ZÝ­ö³VÿÓGíû+Ü÷}xrïÆ€^}øðCR?kþÄiM”ünóš_útvó.|ù?ùuãY#1òçùí•à¦Iœ^UÅpà…HI%5Õî‹;‘á*#1è…ãù΂½yì 7Ôì÷#4í)¨…0FP‘·€quL£«#1רŸµÛFÏ gƒ­^¥£–º6õ`ÏG(N5I®^O“Iš1¼ê—=äºç'Jsšmžš´XD*•*Ë#2„À{J<7a!FΤÿ'« £ýýzŒ(/Ž‘õóø": T¨oWå~Aˍ=}ÿ¾¡«”YÓ"ßöq75ûThÂIg VT÷ö4:h•ƒú19hÀä`ÿËÉӄŽÊ½=BXQRï0vËëùHŸ?«>òAJîüvòü—CÈúôðèŝßЍ5î?^‰>ž §Z¸žŠ¾95à¿Mþ;¿8z ß¶_tÄö6LêOÛê»¶œ@*â™åËRÈ7~„±­ÉÐ^é=]±½occáSÐ#4]ŠW½@ .Ò颹*•àõ#2±ôêèkStã]ú”õÒJƎ¦ 墕O&zŠ¡ƒ.X#1Ò¶/;í³¼L½v—s¡r¦×wî™ÈßH2Ï;ÒWü[T©~K⎺©)ˆ'½òôÎ@MùczJõ9› Qj-+:#4ÑøÆØÓ1ðv@˜=Õ@:;pî}HÅIÖ©à»(ª¸dA<ÌæÒr^ë7“§a‘·Z-´;–䜭ÏÝéÇ!¦¾íÒ§a¿¿-¥=ödñǶÜ2ìÊ펃$‚p0Rû' fgY;Ó|„×>ïÈæèýC¼AÔæ*^õîöœ.‹|bši,aàß»‰šø×+hÅE®·?ÍHÅÑádtìýã—oßa„¿|êËò¡ö»[œ21Œ-j(VÌw#4¿ðø™oÿâ¬&•®ÊAé¼L§y3Wߒf¯÷r~ ZæøH]åúId9©Î»‹%L,ï† N ’´>F?4n}Â]Èp<H±;4yÐm˜ûëR‘!|MUÙßNØlÜEa#1Løzºè+i/£}馃…Ö>[äŠRê€}§Hu#4_iBÜ#1>ø‹:û\Uœj·iÔJç3)¥ðòX-jò(´zN5c.7¹æ1vÇa;®3¨M€›#4ՎL‹6"³èX›~­U¢K¤÷ž.@[ûân]]Ïü`N§WJáS¾ ï„ç‚—/+ã‚÷ÂÙücÌÂL<OÐ]Úo*Yµ{#3¾wÚò!%>7¿´Î¢#3br0@Ýf0@'Ìû(µ#4[šÝϏù½M¥ÿ/ϐBÌ -- 2.52.0