From 105bca7c1f9b8a72732462052e40ea0908a3df0a Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 6 Nov 2025 21:49:12 -0800 Subject: [PATCH] Add a cache for FONTSAVAILABLE on files Simplifies Sketch --- sources/FONT | 200 +++++++++++++++++++++++----------------------- sources/FONT.LCOM | Bin 69328 -> 69830 bytes 2 files changed, 102 insertions(+), 98 deletions(-) diff --git a/sources/FONT b/sources/FONT index 6e40fa42..e5ea0bb5 100644 --- a/sources/FONT +++ b/sources/FONT @@ -1,13 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Oct-2025 19:43:25" {WMEDLEY}FONT.;621 286216 +(FILECREATED " 6-Nov-2025 13:54:22" {WMEDLEY}FONT.;623 285863 :EDIT-BY rmk :CHANGES-TO (VARS FONTCOMS) - (FNS MONOSPACEFONTP) + (FNS FONTSAVAILABLE) - :PREVIOUS-DATE "13-Oct-2025 21:33:14" {WMEDLEY}FONT.;620) + :PREVIOUS-DATE "20-Oct-2025 09:54:15" {WMEDLEY}FONT.;622) (PRETTYCOMPRINT FONTCOMS) @@ -66,12 +66,12 @@ (FNS FONTSAVAILABLE FONTEXISTS? \SEARCHFONTFILES FLUSHFONTSINCORE FINDFONTFILES SORTFONTSPECS ) (FNS MATCHFONTFACE MAKEFONTFACE FONTFACETOATOM) - (INITVARS \FONTSINCORE \FONTEXISTS?-CACHE \DEFAULTDEVICEFONTS) + (INITVARS \FONTSINCORE \FONTEXISTS?-CACHE \FONTSAVAILABLEFILECACHE \DEFAULTDEVICEFONTS) [COMS (GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) (INITVARS \UNITWIDTHSVECTOR) (FNS \UNITWIDTHSVECTOR) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR] - (DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO FONTSPEC) + (DECLARE%: DONTCOPY [EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO FONTSPEC) (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH \FGETIMAGEWIDTH \FSETIMAGEWIDTH) @@ -79,8 +79,7 @@ \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR CHARSETPROP) (PROP ARGNAMES CHARSETPROP) (CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR)) - (SLUGCHARSET (ADD1 \MAXCHARSET))) - (MACROS LEGACYFONTS)) + (SLUGCHARSET (ADD1 \MAXCHARSET] (MACROS INDIRECTCHARSETP)) (FNS FONTDESCRIPTOR.DEFPRINT FONTCLASS.DEFPRINT) (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) @@ -2795,7 +2794,8 @@ (DEFINEQ (FONTSAVAILABLE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 25-Sep-2025 18:39 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 6-Nov-2025 13:50 by rmk") + (* ; "Edited 25-Sep-2025 18:39 by rmk") (* ; "Edited 30-Aug-2025 13:55 by rmk") (* ; "Edited 28-Aug-2025 14:43 by rmk") (* ; "Edited 23-Aug-2025 10:51 by rmk") @@ -2810,48 +2810,63 @@ (* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if CHECKFILESTOO? is NIL, only fonts in core will be considered. If ONLY, fonts in memory will be ignored. ") - (DECLARE (GLOBALVARS \FONTSINCORE)) - (LET ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE))) - (if (EQ '* (fetch (FONTSPEC FSDEVICE) of FONTSPEC)) - then - (* ;; + (DECLARE (GLOBALVARS \FONTSINCORE \FONTSAVAILABLEFILECACHE)) + (LET + ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) + FILEFONTS) + (if (EQ '* (fetch (FONTSPEC FSDEVICE) of FONTSPEC)) + then + (* ;;  "The results for each device will be grouped together, because the sort happens in the clause below") - (for I in IMAGESTREAMTYPES join (FONTSAVAILABLE FONTSPEC NIL NIL NIL (CAR I) - CHECKFILESTOO?)) - else (SPREADFONTSPEC FONTSPEC) (* ; "For easier matching code") - (SORTFONTSPECS (UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?) - [COLLECTMULTI \FONTSINCORE - (FUNCTION (LAMBDA (FM S FC R D FONT) - (DECLARE (USEDFREE $$COLLECT)) - (CL:WHEN - [AND (OR (EQ FAMILY FM) - (EQ FAMILY '*)) - (OR (EQ SIZE S) - (EQ SIZE '*)) - (MATCHFONTFACE FACE FC) - (OR (EQ ROTATION R) - (EQ ROTATION '*)) - (OR (EQ DEVICE D) - (EQ DEVICE '*] - (push $$COLLECT - (create FONTSPEC - FSFAMILY _ FM - FSSIZE _ S - FSFACE _ FC - FSROTATION _ R - FSDEVICE _ D)))]) - (CL:WHEN CHECKFILESTOO?(* ; + (for I in IMAGESTREAMTYPES join (FONTSAVAILABLE FONTSPEC NIL NIL NIL (CAR I) + CHECKFILESTOO?)) + else + (SPREADFONTSPEC FONTSPEC) (* ; "For easier matching code") + (SORTFONTSPECS + (UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?) + [COLLECTMULTI \FONTSINCORE + (FUNCTION (LAMBDA (FM S FC R D FONT) + (DECLARE (USEDFREE $$COLLECT)) + (CL:WHEN [AND (OR (EQ FAMILY FM) + (EQ FAMILY '*)) + (OR (EQ SIZE S) + (EQ SIZE '*)) + (MATCHFONTFACE FACE FC) + (OR (EQ ROTATION R) + (EQ ROTATION '*)) + (OR (EQ DEVICE D) + (EQ DEVICE '*] + (push $$COLLECT + (create FONTSPEC + FSFAMILY _ FM + FSSIZE _ S + FSFACE _ FC + FSROTATION _ R + FSDEVICE _ D)))]) + (CL:WHEN CHECKFILESTOO? (* ;  "apply the device font lookup function.") - (LET [(FN (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE - 'FONTSAVAILABLE)) - (FUNCTION \SEARCHFONTFILES] + (SETQ FILEFONTS (SGETMULTI \FONTSAVAILABLEFILECACHE FAMILY SIZE FACE ROTATION + DEVICE)) - (* ;; "Until all the device functions take a FONTSPEC") + (* ;; "APPEND the cache value because of the SORT") - (CL:IF (EQ 1 (NARGS FN)) - (APPLY* FN FONTSPEC) - (APPLY* FN FAMILY SIZE FACE ROTATION DEVICE))))]) + (APPEND (if (NULL FILEFONTS) + then (LET [(FN (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE + 'FONTSAVAILABLE)) + (FUNCTION \SEARCHFONTFILES] + + (* ;; "Until all the device functions take a FONTSPEC") + + (SETQ FILEFONTS (CL:IF (EQ 1 (NARGS FN)) + (APPLY* FN FONTSPEC) + (APPLY* FN FAMILY SIZE FACE ROTATION + DEVICE))) + (SPUTMULTI \FONTSAVAILABLEFILECACHE FAMILY SIZE FACE + ROTATION DEVICE (OR FILEFONTS 'NONE)) + FILEFONTS) + elseif (NEQ FILEFONTS 'NONE) + then FILEFONTS)))]) (FONTEXISTS? [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOCOERCIONS) (* ; "Edited 26-Sep-2025 10:10 by rmk") @@ -3154,6 +3169,8 @@ (RPAQ? \FONTEXISTS?-CACHE NIL) +(RPAQ? \FONTSAVAILABLEFILECACHE NIL) + (RPAQ? \DEFAULTDEVICEFONTS NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -3422,19 +3439,6 @@ (CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR)) (SLUGCHARSET (ADD1 \MAXCHARSET))) ) -(DECLARE%: EVAL@COMPILE - -(PUTPROPS LEGACYFONTS MACRO ((F . FORMS) (* ; - "Execute FORMS in a legacy font environment") - (RESETLST - (RESETSAVE \FONTSINCORE NIL) - (RESETSAVE \FONTEXISTS?-CACHE) - (RESETSAVE DISPLAYFONTCOERCIONS) - (RESETSAVE DISPLAYCHARCOERCIONS) - (RESETSAVE DISPLAYFONTEXTENSIONS '(DISPLAYFONT)) - (RESETSAVE DISPLAYFONTDIRECTORIES (MEDLEYDIR "fonts>displayfonts>")) - (PROGN F . FORMS)))) -) (* "END EXPORTED DEFINITIONS") @@ -4650,44 +4654,44 @@ (ADDTOVAR LAMA FONTCOPY) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (12132 21845 (CHARWIDTH 12142 . 12927) (CHARWIDTHY 12929 . 14446) (STRINGWIDTH 14448 . -15541) (\CHARWIDTH.DISPLAY 15543 . 15956) (\STRINGWIDTH.DISPLAY 15958 . 16382) (\STRINGWIDTH.GENERIC -16384 . 21843)) (21846 28366 (DEFAULTFONT 21856 . 23141) (FONTCLASS 23143 . 25305) (FONTCLASSUNPARSE -25307 . 26206) (FONTCLASSCOMPONENT 26208 . 26796) (SETFONTCLASSCOMPONENT 26798 . 27240) ( -GETFONTCLASSCOMPONENT 27242 . 28364)) (30045 54426 (FONTCREATE 30055 . 33300) (FONTCREATE1 33302 . -35917) (FONTCREATE.SLUGFD 35919 . 37401) (\FONT.CHECKARGS 37403 . 43993) (\FONT.CHECKARGS1 43995 . -48518) (\FONTCREATE1.NOFN 48520 . 48734) (FONTFILEP 48736 . 49624) (\READCHARSET 49626 . 54424)) ( -54427 61344 (\FONT.CHECKARGS 54437 . 61027) (\CHARSET.CHECK 61029 . 61342)) (61345 64428 ( -COERCEFONTSPEC 61355 . 64426)) (66498 67288 (MAKEFONTSPEC 66508 . 67286)) (67289 75466 (COMPLETE.FONT -67299 . 69822) (COMPLETEFONTP 69824 . 70447) (COMPLETE.CHARSET 70449 . 73134) (PRUNESLUGCSINFOS 73136 - . 74061) (MONOSPACEFONTP 74063 . 75464)) (75505 83426 (FONTASCENT 75515 . 75899) (FONTDESCENT 75901 - . 76386) (FONTHEIGHT 76388 . 76790) (FONTPROP 76792 . 82703) (\AVGCHARWIDTH 82705 . 83424)) (84083 -84991 (FONTDEVICEPROP 84093 . 84989)) (85037 85891 (EDITCHAR 85047 . 85889)) (85937 98127 ( -GETCHARBITMAP 85947 . 87071) (PUTCHARBITMAP 87073 . 89231) (\GETCHARBITMAP.CSINFO 89233 . 91249) ( -\PUTCHARBITMAP.CSINFO 91251 . 98125)) (98128 118608 (MOVECHARBITMAP 98138 . 100032) (MOVEFONTCHARS -100034 . 103994) (\MOVEFONTCHAR 103996 . 108839) (\MOVEFONTCHARS.SOURCEDATA 108841 . 114946) ( -\MAKESLUGCHAR 114948 . 117483) (SLUGCHARP.DISPLAY 117485 . 118606)) (119541 139679 (FONTFILES 119551 - . 121384) (\FINDFONTFILE 121386 . 123103) (\FONTFILENAMES 123105 . 124100) (\FONTFILENAME 124102 . -128085) (\FONTFILENAME.OLD 128087 . 131036) (\FONTFILENAME.NEW 131038 . 133295) (FONTSPECFROMFILENAME -133297 . 137398) (\FONTINFOFROMFILENAME.OLD 137400 . 139677)) (139946 175749 (FONTCOPY 139956 . 145019 -) (FONTP 145021 . 145320) (FONTUNPARSE 145322 . 147041) (SETFONTDESCRIPTOR 147043 . 148507) ( -\STREAMCHARWIDTH 148509 . 152673) (\COERCECHARSET 152675 . 155270) (\BUILDSLUGCSINFO 155272 . 158895) -(\FONTSYMBOL 158897 . 159547) (\DEVICESYMBOL 159549 . 160418) (\FONTFACE 160420 . 167610) ( -\FONTFACE.COLOR 167612 . 174532) (SETFONTCHARENCODING 174534 . 175747)) (175750 196301 (FONTSAVAILABLE - 175760 . 180615) (FONTEXISTS? 180617 . 184595) (\SEARCHFONTFILES 184597 . 187682) (FLUSHFONTSINCORE -187684 . 190857) (FINDFONTFILES 190859 . 194073) (SORTFONTSPECS 194075 . 196299)) (196302 199725 ( -MATCHFONTFACE 196312 . 197127) (MAKEFONTFACE 197129 . 197969) (FONTFACETOATOM 197971 . 199723)) ( -199953 200445 (\UNITWIDTHSVECTOR 199963 . 200443)) (215788 217855 (FONTDESCRIPTOR.DEFPRINT 215798 . -217377) (FONTCLASS.DEFPRINT 217379 . 217853)) (221684 224474 (\CREATEKERNELEMENT 221694 . 222052) ( -\FSETLEFTKERN 222054 . 222545) (\FGETLEFTKERN 222547 . 224472)) (224475 234111 (\CREATEFONT 224485 . -225924) (\CREATECHARSET 225926 . 229862) (\INSTALLCHARSETINFO 229864 . 233198) ( -\INSTALLCHARSETINFO.CHARENCODING 233200 . 234109)) (234433 235797 (\FONTRESETCHARWIDTHS 234443 . -235795)) (236427 246474 (\CREATEDISPLAYFONT 236437 . 238286) (\CREATECHARSET.DISPLAY 238288 . 243997) -(\FONTEXISTS?.DISPLAY 243999 . 246472)) (246475 261340 (STRIKEFONT.FILEP 246485 . 247373) ( -STRIKEFONT.GETCHARSET 247375 . 252967) (WRITESTRIKEFONTFILE 252969 . 257880) (STRIKECSINFO 257882 . -261338)) (261371 277688 (MAKEBOLD.CHARSET 261381 . 265030) (MAKEBOLD.CHAR 265032 . 266784) ( -MAKEITALIC.CHARSET 266786 . 270459) (MAKEITALIC.CHAR 270461 . 272807) (\SFMAKEBOLD 272809 . 275033) ( -\SFMAKEITALIC 275035 . 277686)) (277689 281838 (\SFMAKEROTATEDFONT 277699 . 279100) (\SFROTATECSINFO -279102 . 279739) (\SFROTATEFONTCHARACTERS 279741 . 280121) (\SFROTATECSINFOOFFSETS 280123 . 281836)) ( -281839 283220 (\SFMAKECOLOR 281849 . 283218))))) + (FILEMAP (NIL (12098 21811 (CHARWIDTH 12108 . 12893) (CHARWIDTHY 12895 . 14412) (STRINGWIDTH 14414 . +15507) (\CHARWIDTH.DISPLAY 15509 . 15922) (\STRINGWIDTH.DISPLAY 15924 . 16348) (\STRINGWIDTH.GENERIC +16350 . 21809)) (21812 28332 (DEFAULTFONT 21822 . 23107) (FONTCLASS 23109 . 25271) (FONTCLASSUNPARSE +25273 . 26172) (FONTCLASSCOMPONENT 26174 . 26762) (SETFONTCLASSCOMPONENT 26764 . 27206) ( +GETFONTCLASSCOMPONENT 27208 . 28330)) (30011 54392 (FONTCREATE 30021 . 33266) (FONTCREATE1 33268 . +35883) (FONTCREATE.SLUGFD 35885 . 37367) (\FONT.CHECKARGS 37369 . 43959) (\FONT.CHECKARGS1 43961 . +48484) (\FONTCREATE1.NOFN 48486 . 48700) (FONTFILEP 48702 . 49590) (\READCHARSET 49592 . 54390)) ( +54393 61310 (\FONT.CHECKARGS 54403 . 60993) (\CHARSET.CHECK 60995 . 61308)) (61311 64394 ( +COERCEFONTSPEC 61321 . 64392)) (66464 67254 (MAKEFONTSPEC 66474 . 67252)) (67255 75432 (COMPLETE.FONT +67265 . 69788) (COMPLETEFONTP 69790 . 70413) (COMPLETE.CHARSET 70415 . 73100) (PRUNESLUGCSINFOS 73102 + . 74027) (MONOSPACEFONTP 74029 . 75430)) (75471 83392 (FONTASCENT 75481 . 75865) (FONTDESCENT 75867 + . 76352) (FONTHEIGHT 76354 . 76756) (FONTPROP 76758 . 82669) (\AVGCHARWIDTH 82671 . 83390)) (84049 +84957 (FONTDEVICEPROP 84059 . 84955)) (85003 85857 (EDITCHAR 85013 . 85855)) (85903 98093 ( +GETCHARBITMAP 85913 . 87037) (PUTCHARBITMAP 87039 . 89197) (\GETCHARBITMAP.CSINFO 89199 . 91215) ( +\PUTCHARBITMAP.CSINFO 91217 . 98091)) (98094 118574 (MOVECHARBITMAP 98104 . 99998) (MOVEFONTCHARS +100000 . 103960) (\MOVEFONTCHAR 103962 . 108805) (\MOVEFONTCHARS.SOURCEDATA 108807 . 114912) ( +\MAKESLUGCHAR 114914 . 117449) (SLUGCHARP.DISPLAY 117451 . 118572)) (119507 139645 (FONTFILES 119517 + . 121350) (\FINDFONTFILE 121352 . 123069) (\FONTFILENAMES 123071 . 124066) (\FONTFILENAME 124068 . +128051) (\FONTFILENAME.OLD 128053 . 131002) (\FONTFILENAME.NEW 131004 . 133261) (FONTSPECFROMFILENAME +133263 . 137364) (\FONTINFOFROMFILENAME.OLD 137366 . 139643)) (139912 175715 (FONTCOPY 139922 . 144985 +) (FONTP 144987 . 145286) (FONTUNPARSE 145288 . 147007) (SETFONTDESCRIPTOR 147009 . 148473) ( +\STREAMCHARWIDTH 148475 . 152639) (\COERCECHARSET 152641 . 155236) (\BUILDSLUGCSINFO 155238 . 158861) +(\FONTSYMBOL 158863 . 159513) (\DEVICESYMBOL 159515 . 160384) (\FONTFACE 160386 . 167576) ( +\FONTFACE.COLOR 167578 . 174498) (SETFONTCHARENCODING 174500 . 175713)) (175716 196655 (FONTSAVAILABLE + 175726 . 180969) (FONTEXISTS? 180971 . 184949) (\SEARCHFONTFILES 184951 . 188036) (FLUSHFONTSINCORE +188038 . 191211) (FINDFONTFILES 191213 . 194427) (SORTFONTSPECS 194429 . 196653)) (196656 200079 ( +MATCHFONTFACE 196666 . 197481) (MAKEFONTFACE 197483 . 198323) (FONTFACETOATOM 198325 . 200077)) ( +200349 200841 (\UNITWIDTHSVECTOR 200359 . 200839)) (215435 217502 (FONTDESCRIPTOR.DEFPRINT 215445 . +217024) (FONTCLASS.DEFPRINT 217026 . 217500)) (221331 224121 (\CREATEKERNELEMENT 221341 . 221699) ( +\FSETLEFTKERN 221701 . 222192) (\FGETLEFTKERN 222194 . 224119)) (224122 233758 (\CREATEFONT 224132 . +225571) (\CREATECHARSET 225573 . 229509) (\INSTALLCHARSETINFO 229511 . 232845) ( +\INSTALLCHARSETINFO.CHARENCODING 232847 . 233756)) (234080 235444 (\FONTRESETCHARWIDTHS 234090 . +235442)) (236074 246121 (\CREATEDISPLAYFONT 236084 . 237933) (\CREATECHARSET.DISPLAY 237935 . 243644) +(\FONTEXISTS?.DISPLAY 243646 . 246119)) (246122 260987 (STRIKEFONT.FILEP 246132 . 247020) ( +STRIKEFONT.GETCHARSET 247022 . 252614) (WRITESTRIKEFONTFILE 252616 . 257527) (STRIKECSINFO 257529 . +260985)) (261018 277335 (MAKEBOLD.CHARSET 261028 . 264677) (MAKEBOLD.CHAR 264679 . 266431) ( +MAKEITALIC.CHARSET 266433 . 270106) (MAKEITALIC.CHAR 270108 . 272454) (\SFMAKEBOLD 272456 . 274680) ( +\SFMAKEITALIC 274682 . 277333)) (277336 281485 (\SFMAKEROTATEDFONT 277346 . 278747) (\SFROTATECSINFO +278749 . 279386) (\SFROTATEFONTCHARACTERS 279388 . 279768) (\SFROTATECSINFOOFFSETS 279770 . 281483)) ( +281486 282867 (\SFMAKECOLOR 281496 . 282865))))) STOP diff --git a/sources/FONT.LCOM b/sources/FONT.LCOM index 98ce344aaf2ef4e25885aec7ccea12b2960ab033..51df1d80e9db78543ecff84c1265f3ca325d9620 100644 GIT binary patch delta 1518 zcmaKsPi)&%9LM9d+gc}alPpV!#Y{zlqsuOW+w=qrpjGeZtS}B7WQB))@ z6G$8g;=B30>F9Fc&#(~Mc4Q|cKos@LVH!ucz_XLGZW^^Ezt8XezP~@u zmVb9Y9lm{S_`+%e#FFvqYbBoLE5McKD#9GkU)(yCE*F8$@nQ*`JKuM*(j3Rlani-@ ziRTXP&&zTxQaMSWk<@uS1VPqjB6BIUO-0M zmRDrGDc74?5#~%wThY<7T~bLJQi^@3HPSbSC#aJYzwRmkqV(^q=esyu(=`> zTC!pxn+DxbbxTv)N<+46t!);GZ^5wfUPL7UXPA>%VRS+t68fAG2<`p)1pbE!<6lBF zPL4f|qq`?Y_7mbicTeEg$2{2=V`+SAOi9rj{kJzLFr(_W*_77+LsTKMbI~X9JJDwd z-6r&hzgLQ-F26ZUCGkdVnm8uoLzV*NNco5lYAF$Fl^_j#3)Fd3=iCtx;+b=Mx^Dq6vPGm^wxm=1;>k>|9SQ zUhQ&K&|C7NX1B>_Z?)G<%`O7x#QXauosr z+OyWFrQkO&1l%Qm4Gz}f!FtqP!k2cYxLbErUziMLx}AiJk`79EN_}v?w5z|@|0vh=w>CHZPW^{}>}a4M%nD#5tL^`3rl!~+ zh!QLtIx+|eupyhKW~e*}tOT}f+em@3Sp5&n>^|0bN!(|iL=MC}FM%Oji#Bkg2nuSF z8PaYoH`_XJtO#CR(?TZ9O1N^P)DtJP+B(>WNE+&5+I|wMh?w^OzI`CTCxpGHX{1+9%dwc)@ delta 1067 zcmZuw&rcgi6!sWmVC}VyK?IZpUI~rtD5g8!HLR`t@UlDD>#ld*-33Z&5G786L@trI z6Dg;pQd=}ieQA(#=&=b3p=u*V7K#)pidt3ex#}gC^iaVcP^q&65mf44-uK@7-uJ#) z&AfWl`Rl{Zujl&lWY)R1md#1IJm5l6k&C(f#_EM3oB?69NY2gnog!2 z+plM!Sa->+>CAXpgUK)z`N($;7iGDKl|Tha+q1c4?K1zJrEGwMpB zOt%t4482b1wEgxZLt{yut|ZSg^hNRteZ$e;Nxk)D1O>aQy`@3J^y-$z%^0Rjbl-7J z;(^fG6wmc$x#!~^!l^QSk?LxFDxf~5T1uXy_fzLY=2SC`SvCb} zE~n7_)L3gzK*7%(>1%XjH8?(NE=18~y4yF>Q*#XB+Kf-%^(}S*?+euKUus>Bp$HOM zU&YYy_V4|f&GktzYg(CjKD!Pzf4)w<421sZLZL`Wo6-&OM2LO8xTDexvk%=2(!Hlj zyH|?L#kbBh(NC3?X46DOj0CMl$2YZ|n6T4Dy}4nGB_KSOw3y;`;mo)rsyw4$ClOn~n`wEr6}LWe;#(1>LdO zd+}>CmTy8q1^xtFrw)@cUEj$zu_{BuBbuvMf>!Xl*x