summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/dtc/Makefile2
-rw-r--r--scripts/gdb/linux/Makefile2
-rw-r--r--scripts/kconfig/expr.c2
-rw-r--r--scripts/kconfig/expr.h5
-rw-r--r--scripts/kconfig/symbol.c6
-rwxr-xr-xscripts/link-vmlinux.sh9
-rwxr-xr-xscripts/make_fit.py3
-rwxr-xr-xscripts/mksysmap28
8 files changed, 18 insertions, 39 deletions
diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile
index a18657072541..b47f4daa4515 100644
--- a/scripts/dtc/Makefile
+++ b/scripts/dtc/Makefile
@@ -3,7 +3,7 @@
# *** Also keep .gitignore in sync when changing ***
hostprogs-always-$(CONFIG_DTC) += dtc fdtoverlay
-hostprogs-always-$(CHECK_DT_BINDING) += dtc
+hostprogs-always-$(CHECK_DTBS) += dtc
dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
srcpos.o checks.o util.o
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile
index d77ad9079d0f..fd1402c0a1a1 100644
--- a/scripts/gdb/linux/Makefile
+++ b/scripts/gdb/linux/Makefile
@@ -5,7 +5,7 @@ ifdef building_out_of_srctree
symlinks := $(patsubst $(src)/%,%,$(wildcard $(src)/*.py))
quiet_cmd_symlink = SYMLINK $@
- cmd_symlink = ln -fsn $(patsubst $(obj)/%,$(abspath $(srctree))/$(src)/%,$@) $@
+ cmd_symlink = ln -fsn $(patsubst $(obj)/%,$(src)/%,$@) $@
always-y += $(symlinks)
$(addprefix $(obj)/, $(symlinks)): FORCE
diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c
index a290de36307b..4d95fce5f9a7 100644
--- a/scripts/kconfig/expr.c
+++ b/scripts/kconfig/expr.c
@@ -476,7 +476,7 @@ static struct expr *expr_join_or(struct expr *e1, struct expr *e2)
return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
}
}
- if (sym1->type == S_BOOLEAN && sym1 == sym2) {
+ if (sym1->type == S_BOOLEAN) {
if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
(e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
return expr_alloc_symbol(&symbol_yes);
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
index d965e427753e..fa50fc45622e 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
@@ -302,11 +302,6 @@ static inline int expr_is_yes(struct expr *e)
return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
}
-static inline int expr_is_no(struct expr *e)
-{
- return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
-}
-
#ifdef __cplusplus
}
#endif
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index aa0e25ee5119..0e439d3d48d1 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -14,6 +14,7 @@
struct symbol symbol_yes = {
.name = "y",
+ .type = S_TRISTATE,
.curr = { "y", yes },
.menus = LIST_HEAD_INIT(symbol_yes.menus),
.flags = SYMBOL_CONST|SYMBOL_VALID,
@@ -21,6 +22,7 @@ struct symbol symbol_yes = {
struct symbol symbol_mod = {
.name = "m",
+ .type = S_TRISTATE,
.curr = { "m", mod },
.menus = LIST_HEAD_INIT(symbol_mod.menus),
.flags = SYMBOL_CONST|SYMBOL_VALID,
@@ -28,6 +30,7 @@ struct symbol symbol_mod = {
struct symbol symbol_no = {
.name = "n",
+ .type = S_TRISTATE,
.curr = { "n", no },
.menus = LIST_HEAD_INIT(symbol_no.menus),
.flags = SYMBOL_CONST|SYMBOL_VALID,
@@ -820,8 +823,7 @@ const char *sym_get_string_value(struct symbol *sym)
case no:
return "n";
case mod:
- sym_calc_value(modules_sym);
- return (modules_sym->curr.tri == no) ? "n" : "m";
+ return "m";
case yes:
return "y";
}
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 7862a8101747..46ce5d04dbeb 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -179,10 +179,10 @@ kallsyms_step()
kallsyms_S=${kallsyms_vmlinux}.S
vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o}
- mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms ${kallsymso_prev}
+ mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms
kallsyms ${kallsyms_vmlinux}.syms ${kallsyms_S}
- info AS ${kallsyms_S}
+ info AS ${kallsymso}
${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \
${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \
-c -o ${kallsymso} ${kallsyms_S}
@@ -193,7 +193,7 @@ kallsyms_step()
mksysmap()
{
info NM ${2}
- ${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2} ${3}
+ ${NM} -n "${1}" | "${srctree}/scripts/mksysmap" > "${2}"
}
sorttable()
@@ -201,7 +201,6 @@ sorttable()
${objtree}/scripts/sorttable ${1}
}
-# Delete output files in case of error
cleanup()
{
rm -f .btf.*
@@ -282,7 +281,7 @@ if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then
${RESOLVE_BTFIDS} vmlinux
fi
-mksysmap vmlinux System.map ${kallsymso}
+mksysmap vmlinux System.map
if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then
info SORTTAB vmlinux
diff --git a/scripts/make_fit.py b/scripts/make_fit.py
index 3de90c5a094b..263147df80a4 100755
--- a/scripts/make_fit.py
+++ b/scripts/make_fit.py
@@ -190,7 +190,7 @@ def output_dtb(fsw, seq, fname, arch, compress):
Args:
fsw (libfdt.FdtSw): Object to use for writing
seq (int): Sequence number (1 for first)
- fmame (str): Filename containing the DTB
+ fname (str): Filename containing the DTB
arch: FIT architecture, e.g. 'arm64'
compress (str): Compressed algorithm, e.g. 'gzip'
@@ -211,7 +211,6 @@ def output_dtb(fsw, seq, fname, arch, compress):
fsw.property_string('type', 'flat_dt')
fsw.property_string('arch', arch)
fsw.property_string('compression', compress)
- fsw.property('compatible', bytes(compat))
with open(fname, 'rb') as inf:
compressed = compress_data(inf, compress)
diff --git a/scripts/mksysmap b/scripts/mksysmap
index 57ff5656d566..c12723a04655 100755
--- a/scripts/mksysmap
+++ b/scripts/mksysmap
@@ -1,22 +1,16 @@
-#!/bin/sh -x
-# Based on the vmlinux file create the System.map file
+#!/bin/sed -f
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# sed script to filter out symbols that are not needed for System.map,
+# or not suitable for kallsyms. The input should be 'nm -n <file>'.
+#
# System.map is used by module-init tools and some debugging
# tools to retrieve the actual addresses of symbols in the kernel.
#
-# Usage
-# mksysmap vmlinux System.map [exclude]
-
-
-#####
-# Generate System.map (actual filename passed as second argument)
-# The following refers to the symbol type as per nm(1).
-
# readprofile starts reading symbols when _stext is found, and
# continue until it finds a symbol which is not either of 'T', 't',
# 'W' or 'w'.
#
-
-${NM} -n ${1} | sed >${2} -e "
# ---------------------------------------------------------------------------
# Ignored symbol types
#
@@ -92,13 +86,3 @@ ${NM} -n ${1} | sed >${2} -e "
# ppc stub
/\.long_branch\./d
/\.plt_branch\./d
-
-# ---------------------------------------------------------------------------
-# Ignored kallsyms symbols
-#
-# If the 3rd parameter exists, symbols from it will be omitted from the output.
-# This makes kallsyms have the identical symbol lists in the step 1 and 2.
-# Without this, the step2 would get new symbols generated by scripts/kallsyms.c
-# when CONFIG_KALLSYMS_ALL is enabled. That might require one more pass.
-$(if [ $# -ge 3 ]; then ${NM} ${3} | sed -n '/ U /!s:.* \([^ ]*\)$:/ \1$/d:p'; fi)
-"
l` 5[ ڣ?pXߘOv}a+D;֯}j,2AL]UdF$!-fK[ vc$#yLHKqL-1du?ŵ)0a-ôa2$0GzT:̞ouRږ v'ZPj$ AI~9`]63m}k/0s8vSu`ݽQ}%Gf?~$i_? |2>EYL):vh-סsǰ"[.w9Z TՇK17Ӕ:BqN9-Cr<,$Ϙ-Bx Z0E6zصg!7|z xDR k w+ֳU5[/ g!גK(>bᅝNpҝ_B%) + }Q7]" zn=c*c@#pk ܇S& ׏-?wURO^ub52qP1 WSӯD <ׇӣrB@-Z‚U|9A߶^Х̈p2#X0ڈavGfb4;Z"t_gໂ##cL~}(zh p 馤ٚS4A?Z 3{ ^W&)@ZP`yn #D`TzF t B p t{͚`I9sך>d9qXCx#@b wEul]XNO_2[ w,ۡUwsucCl_GCX*AMs+^ @>''" +=ok쮴٧߿z"_n]7ysr n|ئ5zWT!jXl1'nĞG,gF6`-6Z מgn?U3 (D4RPke mm)狇T~>r&>jwLdZ܄( $_>`;cꋾ_cq)忭c~uӌ9?S/"LǙ>9F$UG?~~CߗDO_?qUsd\5npפD\؏6b,f.F8J2ޱ6u8_Q(9g{$C>e2# aMQ9K}ڗ|{[8XrJ˛MEJ@ ynlsgA\/@0g `}T nA#1pȌ\b:YAL ᒇ {"V|u+(=5 ~ DQ#ϑ,%(liB&q5~a ˊp[a~`r=ڙ6nV2Q5jay]r.Dž8QUqk 8d,QO1ХKVU`IS5X~wC|s ݭ c #0<8Ĭ-wĉI+iOOLvp-+1&<=s{9 h3 (!,^XsL0,5?gO &Se̽>"6M $U( CkP*l,%U)l颁"C99=Ppqsgqg:=g[e:yWMzͻ!1kmy[Ĵ ƶ}`uNom M}lB{, ;hO#a-9?vs4 ,}FyJJhL(%baN޷k5n֝|f#  :T>6C4rE3-q{CG_3A´ tJεl]d򢹬!K8ksa< h(R|EeK]ةas%}웣jюͿdJ,f}ߖ/fKTY.7%:ӯw{{_v.]P8//ldr37dgu4Kr{+4il ! 6磑Bd%d t6MY=[4j0`-Tp{BٛQ{nnJ 1g'GxsPs{B4jC\;Fk/2%ɖ\Rw5 p{F]M;kxWYNDasfJȽ.nCw wL /̩O|妨SLr*ZA4abm,CFw#h8 &h"$O<O^PXFGNPG܊!t3gҀ#UK6#%8XBG2Hs) H\X#wԀy{_ 8א+[|]޸20 swyɃ>B.]WXش!Ƹ-2R؉6cc0 ^m&Lb@QOĿXNaf4 PZ#l-g9JXϖU£>8 vM\<ږa4x~VITZAc͜&n\8Cjg9,Oufl:]4kUU#ll 2x9_rgA8l+Y%8髀B]jiݗ^=Id Rh:A< 8@1Sx&Y_Dzunټ/Np~ .b10"IO'dWCץOHm5oN]ѯ&I '܊̶߽\" Vfp7UUB-3bc*M> K@$Hī,^\ssƍ+7<]lBd Kkh/g20XP4(f<{ň% z9C)m߄/+c0jIP1UPjawGI@vq3]sð'NYդt$h6 F7garG>;(w˕|xʼnz| l"B/M:s:! {} ^Bam5w/R< =2IV`zrywDPPA"%;ȘXs68-^{ﺓ!no99C{7%Ru/f|핲_{杵s:#Ŋ-q%GMAPpv\ #TmF} s Yqj%l5lˋe֡MHv|+HK[8(Le6LZ=Yp4ar-kQ1 .q-2Dxk̏F°zftƥxԎ40q;]3hztlfPJ1fa-.>$5Fص$>8mM(573sOru-Œ29w 4$Ӻ4ۖBf+bqu=娗wqxmE\!FUE|h>^TLA]p)2hVj 5voEwSKvP׻ÿ8L~z8~!kC;L}v~E LS$rC8w3aM83~T_FY6![tX|4MC4Må^wL}5}4ǔib(- qt4^>NߒG*̆ϳ<EEh`xo{*F&[73awoeEtr]nkgz 6ӲW7C!_TsAkHuP ^rvzC8G 5#8'>O& ~4|&$?k[2?XI fZ,U%f+(6 =R3X7é,wǝ ,P ;.zXi1nqQu̥@rs??fу5gG;g\yvHBߏg|]﴿eyyk e^F,mmYMyo8?+S2H;8M ?.EN|m+] 4}ǵKM$ Ab0J,Te'L2CfED+ͯpU=-hq ܇;v$% xE_3+cd FƵCs5Z2Uҏd 8Px;=!'X6⺒^NwCo$f3ی5A}ʎn}NU76ei7IΎiݠ6uco;2]ԷC}Oӈ,@GBgXoq~E07*ZlXA)yJ뒑5E#OcBg/-U6z4hճ˚XB"}U+{|#%,^f  np:0z 9R`e(>c-]yCSP~ Dy KZKY% l tpswnvU\#PaOg! NU[ [mT4L#d4OttZpz^%4 ^om~,wwtz0k.R\3Q稴E܉-[!>F li,؊~tARTL׸vZ!I<:@3Youtb~_[GTm©"ޙUAuz1[V=sFDyo ߒ}hYorx (`ɩhcyD#.Un,M6mʶ5`S ( :K@]G ;HyO=*TȌa&|e/ -GĀBf(_dγty6]vwJ"cGe-˱*SL7kȶT3Xz/C>Q?F\=~x)XJ(qh+sF&H! QBU6t ;@=<V0 zMW?s(6nd#_3v ]4!za$Jz-N !y~qU~M@w8~~:?z/ ͓3=wgV*t2ې> Qڊ tYLcrͅ]IFh߄{sZ86Җ<ԟu^DފE07.Ij]'aQ# <96㿍`IR: 5mY"  E0gl}Q\ S'Ie:0b 05hGMF)J} Dw ˉ3J[e׼\ڸ>Zc8 #jPb nr=5pp•_Ydg4hd0C>͍ϧ]zCMcv`{qY(DJrtZd>} H;ߨLQQdQ<JdBeDI j₃TәJ,@ Z恋E  DdBKWK%l"وbwـiT2Gk>['4ÿmCxrLV =?J.IV)M¬|^Տ8S\QJ҄B5у(bh[t[<"BJ.L[ ț԰Ʉ. "H i6[U" < 3/g^Am؟7`>ބ朙 B!;JoйsOY1D`(maN,ۏdE(K{lS\oOv*Ըȿ\hl?fdJy[Jk]o]*ᔞ;HVD1()DrlH @gv& JMDɣqɯ_9BfeÉũb 8EI"ڀ }/W\M"魅G vG(U$gJ|^c5j<*Fs?>@g\_ Ptxl$NCp 9ΡR8î'OznO3L-vXVXY;)[iX|㵋z(*߯O-)X>6056i4[]t%n2g,ЏȜ5kIˣM|uE :>{_5R)Fs,k)BF+=ǰ?;¸n熾 ^.3*.O%fnvһGW8'G!edH0"-%;QПp{2I Ja0G\1Y mҋ:U ߉Í^Jțe?N6#rmdv!w%G0{-j:̟:>NJz LlWItkZ8aI۸to|HQ~1D@T:ND2H AX2U-(PIvL޹c4؄hyYig{3vi#yXBDNE]!-!'LĬxa />IG1dᇪ#cq`A/\D"̝O2U0e&P):q@͔ ovԹLm(ঽuVH4'TY[>!SUN**P`]puq0 } Ds( enaʳ9z ])B^ X5j*v%ѱ2hTS?l9](LL+K>H}E%7M"[TqHȢy5T LMDq@ү`J>;zzYJJn_ o?Zδo־zqLkw Y(5<Ј*uVod+v+D% &˜DːTc$"}.Bż?y;\&ҒD.Sιs{ƝC0ŒpۛTEԺ9D _e8+5X⭞b-o2nq8c!O; j_mcqƯ-6zPf5&$, /po#u6:GbP `y$=~ГRi?fSBT\<@| ag"| .r{4wH 8"Gѳ 䆂}BFx#ׅk9G\*H?rXL!ӏ·C`~ \s*!%b9Ql>iK MˍQ^2 RFHA gA2m~xP<*wOlgr<Pթ,[z Ofv4oB;D\.4J_yƱ`- gIǘ_{|AHaqJ^]j;o4Dt3rPP~G26KُlLP;Q? u'1hE$Ɨ_.(18 "ǖHq+Am#8h!{=Xl`R<޶|$ ^8P î(?ux"ɳ]&px ˆirg2˾.&rA EVGh icw$ pL܎.01<'%KBR5i}07܏_Zm|P.'~$(l[e0:JG5KDKH+3|~'XfNnF վ&_E.YԫicA癏JSgxFHZX/X;h_R-͛<~!+k֙r?q)(c6៙JZX'HcK(T6 _Paҷf!*Jנ>WW,-~YG wL$ . Мř JH͓29`B$Z&6~0<}o`F :這p?wH}Ek_XSyhX4H aIQr msiNc!a_<`"+@F/iLEQF egFt~ bUѐA;pXy l.c̬k4 8 6 ?x#SV?0|U+Ty<3PGUhmw !?#{]u~(bePĒ r,^L=,'+hfG(x4r<澹/]/*q gƐGN mpJ+0I 6P tjǝy{$] 0?LdCOmŻ!(TNWJ#V 鋛jM:/Bb}-;Ҿ|ӣ=؏  քg߱UU? / ^1\\I2E.`ƛY -L(ϵ ~&6%q0L X`wJ B0G@?5 !Dd7y_PjUIPI)˩ɑt9ArHZ!XdCF%^7W65SB=9)Yx>>6*-i*)%sxt*i,C=(F ?KQx ]0)%\N:OArYѹl蠨 :#hGx奏P3v:PePn`e;p+F$3e_cd -LIt!I r2ux(H%n Nt Ax8UN!`:({#a㠺Kȝr3f1sZ7(%|u[zp]DDxx F,iyi*J$w؟wPoLCە7YT:OҏP=v|(&El X~ .-ym_Y,=!4L(m@D(5wQf_|B! ".D]~%JN6 1]Nd6nTn1~)@1ŞJ7EH`TF 4B;t`7}%5f֨ fdhTFRrf&ˢꃟ6Ӓϳ#{E:281?/c8fa]gv@ժtQʾhS$3c{bT3VQn%=q0oV ; A[*K4gZqt  /9nx n!}+sLlތW=2^:W`Dd"@5dGg9хz ES \ cJlp 8E>0|@FC2H{?O&/k|;21úUϳ$+K^Q!>RӾsem#nI(J ,QUhGτ"R4I7NV$dC%+"P:ǒt*0D~Qzdi,a+n5 ro.Y4,Œ1bA- 5[SbhD3  C|_z5&1yq)zG^/C'`zs#Ux0POl#2pp.0̠I6$+SOЀۓSZN;@Ό&(09]nDZT YdIusi`I(ҩ x_7qR|j&EG*zm7|%yA~^{/d&1X?u̱/ 0.ِ|jHRF &e=`ߵEua4Ew#- Sl!Q$Ա~y7(#leQ3BTB;a"Xvz>C]V 9*ѲpW*9ʤHj$PL1_Ȫ 8獐: a@hzvxsr/Q1:/M:M3y5 : "rk ~lL91 h[6We~zB~ s8(b(8(ef!!a(Cѱ@4EGώAF1t4c 3hz.R5jG|N.ՕǍV& K@UP>~OuD߀@9sJvݚSvsu]3mZ$E^ i#Cg4L~΃6p_ĺ7Bɵ؟_MK22I&Nq\\k "UҷV.V_eX<ӊ6vh3O>nm>ɠ9~wN"]gFA> Jg ~=l-9 AH&Jp-{ZG BvDH^n(^`, Qf88sxKCp7?hӃm3~ha^F¢_Y9`gw5 4mͅ۰0 4X28; ,P)%n0 +Lvk;J2IUFFLlXn3L#f5#~ig+{5ji5o\Z51zV^fΟ.]Rlϴ9@?&=nq߭"A?v78PxeF~fbQ\MCL L{*wx&pzݾ<:uc1s1hV`ck\  d"2T|I}mzN@PqY>&^gBnDynȞK9oCq5 faU{H ;9|MBpje*A=)qu8gÓzds5f8#Mo?.{ӵ1ou #|$nQ/ 0s.ĻmF/{9VYϲT s3\?FJxv5LLC_ჟ9"[D!X^GݫxDXaa@iG 2UU2Ww6NU$Bf^aq$tE4 q~qGRvb\D>Y4k./N/7 g ~3IN?*nǔuOp;DI'hx $(zHl q3#u!H[T]JGeE Tyy3q Hl;.:,p'\1ȝA]3#b gP+45]4j,Xyw2E؝X gLYeX>|$XPw(DdySjN^N|c.58|caO _~<}\?`] [q˶i&L'̣䃓f[~IeN_L'D&17A>] hּW1Clu:Hipp}W 9)&>C'\WϜrH& o˒ -9aU^*C +;6B$p炡Mp >"G"ե=ֶ;H!j#-RWR!(7!U.= ӾaHɄ:b`+r˧ylj!6n"1brlU{RaQi@oppOb1!:6T H~qH0**YpUz5~cߏQ^Mt8w' 2}GxuNnJ(%,)(od1ۄ\!m'3ח{zG*~ e|nPQm(9+D$3~no*Lxg42Q)Uy |PgI[̐W>U ~Y``"?NLۏ sIEWP|{eϱS:e *߾a D- NFe[y/' Y((pyiPWp۳S,pLg0{ȰP*m`?w(|.~]Ǖ`5![V k \ LHWm/Mk~y6x@ TPx'?=km08X˨ Bl_.W,IBtڸ QcFw[ĝN삃 oPyOeZr OeWR^  7]Sڄ0} /+W'~7G 0ݷkL\^_껟W2W4ƒI$u)o?p~G<QuEDABlD$E0 ל*(l>EWu؎Iӯq('K;y1* P ;ڴd]b57;(`_ |u=|evN@q"ĢQecdI!x(Kq$밋%rUIZL(;؂rSj(;S^%QpX -2)Nbߞ5<yH|Z0hn$w= yk٘Q$n5B\81"~d9CuC?3ߢXs9UqQ9r e(fmF9]5B48!^Zxvxr"["DsR e!C21 RL?]효,A_? ӳQnN1sh .|,,tLXJp:יRI^kFxk8 ZOev:S9B'`k]Vfظ+XB3@Vſ]+`.(hoğ a7_U 9pқצֈRB*Ԣȅt܄"Y$"Ӧ ,l<$D*Qk+|}\<$xY  &x6>jT_ 5359 K .*+*%a,š qO0-R4{ !*~F-5վ`wn@րG܎VPLj$W7`N/P^|L3^;:g_H92i-}^ tPUg ׇ[Js0n<@XN tK*/jmA*gs߲h)hnu$%͓ arx&Em! ƅvWZ{CFDůml68շZ0( 8 `AlHB&E%P\v rrK3%P(תHwshvvU>χ~wmg!̙@Iʼ-hh]YÜC}FHƢLJ699u}xzݩTԶ(*=9➽P ~1pp#@Z̋-]ܿq*hC})̸ Y. /c[6`B-h0}17'JɆ2:BRؘ;ت)p>j,;w't$oW_٪EuF[[zaY?ۧvp8hOFKْ;Y/ &mrfNr`6XJF;Y0dyeg8RI(tDA\M.Fݏk4v?MG_e~bJ2ˋ?1w Q_YBf:rY{6KT=:%A'oP?o)mAk be&Io]@Ԗ 6Y U-B9-KebOƽiz*$(w#1I)`(at EXs \͖ W>q-_X/nMG: yRML8).A5+%67w"0j[5 < ءѡ m 8luap~'f)B0 σ2abIk&/?y%yq\C=CPB1u>\p0P4d=&DɳJV =nT[~wmw {/BjlQq%Po!C$<^H0d&\v/{vw/KoW'}1]j4?ڏYԹmP[lυK _OΰkDuԡU,V%" 4U!ਝ$qA۠#.7(+ y^{+Ÿ梮d(◠青|*v;𒌐-7±<é੾ >q^6e7ًa*2IS7HD|""&RqnݎϏr2IEt8/GX@%N\]Ϭܶpg\6U =.{܈2ٲ7oP|Cˮc99m؟uxǩ2ɓȪEBHV+VN@c.1XգޠBuZgl%NS˶ܰi)Q>7 /ybȾ5=DQL4Df8 @d$;0dZ|bݤY-z۵#QTQ*fFg/]祐 ԆBoG :~\B$)O5ztpczn[15~<[bԝ=5)BT dĠgQů[;H6F /\g"V@yNw1%^K 00_cHx3sG |T)T45s yABG#Odwr}:&=XkP:H'l:CQn"rG#]@CbSA [сG\ xTWS$o擯d2d-egV}+AcYMU@v#aC0K]`3HV5nuT>xynZn֫O8^KsoPiu|[ƨ2U|! |G:=C}7YUNa&%[B&lc-ް61or,@`ݠ% ?q5y=Q rͧLDEjNE7ȱuygO$v6s vC&Sep␸|KsVꆳ6$I'˽A.^jLLN} M&Π9m#F`.z#\i&;dx8UZzI&$Ge%9BM$jBƊښ#qx{wZkU(xsRۅ%xm9qYqEc$CΌ:$T}A9zP1QwVG"Їa:vCh< scc t;) ižP:7 Q7zP~VyϤ1<n̊Ku\njK (yvĨD/cyHdBf`lۏ(vVxk)]mkmƯ9LR R,0d02ض\W^n#c|q[;)L,<3o8^Ipx"N)C}PNx0a>N<1`E<SI[ia9p8-&3f4\q Ieݵim2ݻ9 %b6<-86ɞ:.`9rܦy07iE\s*&N`֚y,׀mbe^hݦ0};oS7SVAQ׃[* cY`ْ44}>l.>܁\l*׈^$_r'9'~O0oERTM+^F3:&{.dl]"Ē Ÿw;)iY@ᖨe!T() D㠳 F["P[#)th&WŰ8wsfnD$. v ":f>+ 8X *(kg-$*}(Tn )AbzcNcnpdƺ|EV'Py . |w}7llz@(,m ~(wQV24.Dzc64Qb:Dz!2E9jQi'2T%TXoPUl;!N ܄,Hh@n4̜(zaDCWb(}ys0Ác+)bop 'cQalܹԇB/hȈw)ȷdcԋ ;`,A$7A`~LE$AsgVͬ)8dj\?CJw=i<@NOAءN.3y <ϙO?Ȫz l]]s*{f~?*;,:r򊷳QTE k$|p. ~ŏUٝLOq RZ͉=UF$sZ 4\ =&Qjg$3SF Udևyp=Ss`.{ƀsoiWO~ۧ5>8\?pƨ? ^w.bņds 8:!Dn1Kǯٙ_/OT64jB1]+f Π@a܊z)ys($F}rXdaeO6 zZOgەqnVwf0DΜZ3"w3}5^7  }+v⚰ Xj54$<7fB@ ک{ ޮOǁmemZpyU+]Ɋ {h5ۦzw66w+,Ss&Od/L(/kc[a&HKXۮWm1LKXh2܂~ e/ZYҠ^.sʟ,~Q__ꦦ[2b2TҸ0A8`CF!u`!ĕhp5yGj \cR_Px;HZ7Z%V]dVq+iO3^e ̃x7:x[ ŗk(VsxzY=wm WAvH &(o Ni ? ̬=DD6a.Qk#>56{-%C>Zb[ !wov{3Y6M˧bꨙ$dR6jyi;w cC#0 ʨŠ񢍤xV(e} hSg\R3x[RS˜C>u7Yz9m( >RvY)Yyf8\ `|i܃Nş#14tDiK_?Wr>Os 1eu HT=ӊ9ڸTeۇ}3T%0j\|3oC$wh-jop9fMHkKNk܌Z o;>/s7;pkVAko OpPC1竢ggzRXY87=!~{h"hQD0fd*.P*߄bܣ3﷎.{:Pb5 ,6WQ h] n6 d\-]8ɟ 0!hyE^(!ɨs h8qVE%!:6ۗKіR-mcdٯC*AHpA> ﻍSY|W8tԮus}݊哜C cKZGX;ܕp[y>qd%UStJ86 ȟPF렇O;7]I6E W=YR62؎;@|GH 8[i To\!N&@xж>x:IPsQvZDl,҂kĬL l^M1A)Au.I ]zU52:aD#5EUikWq)eM1ZpD;lH@8 %Ys_o2}\`??)7q~!91gq:^7B:!ɐ }]*6B#)b.@`d/x "RWHMяW8Am8g!_ypÆ# ;B* -f3qqծ=[isqn^ Dbl*lrjJ's31+5`d wJe$8;!<E,(B QaX T#aG=hZ-\dg]P-y=ߨw4@ c̱d\􂐠=`E d{-ouN|0KðD}8"A)"@f~˗{j9,$K6ڬ(,V\cOAυyy=ڧN1~bRZw;Tg>_d UCɲ8Q$mb㬵 6C7ZqsT'abVN2ۻjMjlm3 Լ/;S#3 |ejz:M:{ޯ| *c>Ю"Qy>S TϺrQD@}Rw_Q<0qg _S9E->SoɅ%ۮ3Ẍ́!ٲͯJ`6]R] s}hV:fTao'?\?;ûEL@>0 AXy'٬%R7nN]D!b?6OʍAϕ9CYG~ЯLو:/f}:_Kc1;~o뎣ǣLګ0RjrDT@BOJ&R~6 )?9RDRTHU%KݔI2(!@b(c`x o0zH#'qB^1hRZ>? /X '_a?Ґ/~~f?{ښZ_ggyWbfC7c=Ub?X)qT.GQߪS>.}L5l˼27N)%W _3/{Ua*O-!{YS- ŐKF?gJfeyj8SϤL{T/Gy<rF%%-'PCZZ[Cmzu7fBWZ!Gy_u ֛afF|~t0nu55 o3vn8}`2 wǽ{Q7}w)}#q<0^=|fmOz.?T#=dOcpwwx6ۯ.)/e@a <[% mLg+eƗWtփm[pi -'qf~VV[!P;Oytڻe 1;luנ|^5s8 v~ nP lG~X~ #Vq]oXHST.veܝZ)y;FY0îQ8Jh_);QΠkn= o:{ɲ|wYb/ ,_ׯl{-!d,s;ĦNMeė8:E~3V $/cgR }A&qQ$#=y+Lkm^Q>( Cy \3ヨi/J|0JrZy9[ڜm{겈L\gQQe`]Gć`0X{vbp]sZNDF棺qLyy@>sMVÝzCfA/c0 osfŝrIYs>>sX̬hyA\X !~t"9Iᗽi<:~W0Z80cKCǯ\.= 9^I<꺺P!E8?Rvp×ᨒG#ô@,  A(IE^_8cF~NOIG',X`о{w>pgeuZ&$U.3/Ds&q޻lBRwkZ4^/2]V<wQpZٰ1ן^$(H/oՖ3|t8C(/aCIDTR4L$l2LCK:ST3mh(v;-u>H>bAFtIHB$d!"@93!HHhIH(&(N?.4 &^s;??v2z\Aa d`z;>`oe;Gv3:U9S`SPH5:w|fC:&b7{kke%fܯ f)*jLtm ~.Mdi$.'?@jha2Fl?#d'd+`??~г%Z}vN[@E/䓼pw싟u'UyuӛFg $<9rN|zrs8J $9^qfk`!}utq(U7owlkݺ\qwu 5Q'$o+~K?l m>|)+Pbt@W@t ,VGɐ#B!1"  r!m0;\Eh"W,TG@@ _e 9AѤPI B$ 6ZwC(>آ@Pe!!_8LsUXN|*yd"ͤSE@D0#xf!֡4ҏKT `81XC@*$fP7ɩխGYe>k~ q0>r׹a &eM9Ή+`,|D8*w|U*xg\{N**?78ːUf)zFךK]gd60 8yoXsi\P^>gMIi.eCL1"ryT@;.C^7v N@EE(7M@~6hH ͻˋt׏ǫtd-4U4 w8ϵ .U/D`*np3#-nvpFZ]w8xm D+ %AM$8SW(@^ 8p NK7iҔ%8zVM;od18F)HobV+$/7F/*6/w- x1 [7qv!uI #D iwK>Wf0cޛ鳗*3FX ~u(@¶^t"r{dzk]3#W [{˚ً 9Z13'yD_tP]S~ PvSW]{LuZ.l5ߓ^fejhX|]qw$ڊx98b[˘jk]39 /їc,2 ހIq&WbX? yC~I??j6ka#V\12~;~* ͚^[:O~AX|xK}Xr]Fy+R#p!;LH:Wb=zV7FJê ' z{% :( ՚+<*+rh&D,% V:plP2{4~b;4dl]LưcAd- IASAt͡*5X3 jZ0g)آ/|9|9|7D6kh-Yfɥ@6);%^2`+&.قzyRV\dиةkx+~ -_yͯOϏm__ptQj=oc@9F;.'+#Ss?N;㍽Տbi"!ЗqW O 'E_=(t.' W,Nd P 丈Nٽݼ^+t%7WE_dq0L1'*+ɿ)ep8EDqe-x_ډ`A/NhQxzDÏ򐽂h.0< (0an a@,}\I}3P|V V)m[2gkKR $Y#CMD, 3yrc6-A H\Ua`%AsE\Bb1x{x3H9Q><:hs `KR ]t<ssʃNlgGJT)FoHeG-?o|1›AoQ/9))tHj踉ٽTc_oӋR)8h>v[Aĝ<N@8;J # !O^7VƝag_Bxu`fuf-̿0:m㓃YF*w޳Lu3ܙAys|nqg83J?Ԇ :G!> z16gGy:,o)m<_:: .zO:x˃;/kLW)]dd9'uկsDQѫ̸S}y\-to`:^1m$97|~~G_)T|E4)n{3i|֮6H{F$FOcSR:2q~}I@ 'piƫOmбubl -'mH?#!T`C<W|&2M9\r=P‰iwqּ+B|;l@J7ʒV\9£aJfU.såo +s8:k 㣁p\5ٷ267p62֫{W/qG_%B=ѫy@ D#Ș,c2x ~P'sUq0u9P׷cvrV_Kխk'n+Wa^PM╓{}ڞ>©¬ W @~e6_>u#8={FU 7RſUN8yCmp}pٖ;:Vnv=d^ExMZ*kmy &)b.es+|z] r0_܃i2-mէEH峲ߓ7! Xp,/g'/u,1jx>&GCG  w=ۦn>:.۵IPD0Mϸ(zi QM}Fl4Gti~&Ě0J0`:6t~`XdWЧF+.|Ohj+@{"u`<<ۿ;+[f%1}OQ;2`lD\9k9ڢk˵9ZΊղw' v&&ԯ LPI9f K);ZlfkܫQMN+JDT(QAR Xu7.p"A+ιJ@t"_UFb:9;nxų Nև*y8y>ZٰW=,X1`(gH(V s0zәuva$6Mi].U"ߖ(X $ 'by We kM(~r&ضF#B'M4$5!(4XCZ}"H13nqWwvOhB@ @ufe"!>NP@_:w>?ewy߆O?9ұ+UOޜhY[_W-e_ۀ Gjghnbt?l@:$:m=O=by v.MQ4ck45]~S5E6Fk*5kԚݾ݈GnGB >gF8e$3E7;`3ϵrLBؽDhu8<`H\xnŪ殄h!֟^:9_}<\8Yqd#B6p.dМ/{Oj+U]A(tdۉ8#L0IkoX,dirVIttq}8qfχ u 8Ne׉% ${; ͺ@p͝Y8jm|Z+g3#p|8ۚl;49CGǨI :Z @Mh-E`P= "> ~_ϼnD 6/cԂq /ϙ5SNLA*j~[leVH$-ۨS 1D!~N/]Y=ǝMۼ~q0gӴ|q"u+ڃ҂ZKEu|tSyd|^ν}{HN: a r7Hh҄wʘ" ƨ WR1;nc/mx"DU?,Բߩ!g ^N/J"f1DKO ;f4y%ۅSPٻtdfXDݕuXݘ@٢JI507X8`/͢:F8()Bqs;3 T~o%L3SZ@p`Djۇ 8>8Vl҈ۭlE¿CIճ]c2x'S܇,ǀs9"Gu砫& '1s}]5,p 8Lj` \藽Y*XF>5sc&'2rFw0,oo yXlֵr}32ae$Dz)3~12a˝-b2;3 ?$6/}ؾ8~Xd t3wl zz/dvvĀLR0z$Ҥ.-lt_i|*7$2u[4s@:wu[ݣh /4>r 4ųm<`<|vigŎR[{ 3ε_+eB؛;-JJJ )[PQ2궺VyVc2&"LuFxpd,舙Ecwàq36vW)k}q ^gCy7Z[O2ݗ/NsU,24#Xƺ[/ vhLCߋemNn}X)HD*׵!\3o#нn<7%L۳Mvҏғ){UjkM3٭W ~(=[/ʋeT^L/fh Ö8FdU[C]ɤB+MդgA ,}ݷjiAJ*BԽ2r#[$(nG8(D&CLqOjG""i?n F IzLtX/b!\Q/,XWͽPO.qW@v BIp/K}!M$>-">Tm0C,d'g@E!(Reb& K^.~;}~DO7 (Mg-C}% 8V,@ )T\~:m$hoOܸC  ?ʏנLay1 8TDKtهͧvy8/Urzs #Ͽ=Bl;|iud$Q Pk už&kknY_ZK~TSm?IG?`7G  }F9wڐ#/-{w>7 pzK58K#N_$t]RL -?A AYZh;" KԲnM^Mug\bA $DFޱ+O//x0uAdIa zܡgsNLL;t|p> ELBTCu!CuXPƁu#o=6 +P4Aj $ v KZY{}'+,F%Xq␗>84:[|i+;_a7yd@Dwgp ]yg%ݹo75|wvNBSH0MU@ M%MQUUQ4CEL4 R(Fu5!L2LL4446-JR+(\YJ"8D!@RQQ TE!HP!HPU04TL"1P"" ׭mM/(K.}˕Zq;u#Ƨ7ǥyeھ+Wa-lN^*\;Y HQ[z|d' vJXp*[Hp vW5:@ $\P[f#";0g. 8gh;P54ȓ{:BU;u>3$DUl?in\lc~=4Dxj(+nj&2s u=+-j I%꾢-1Y5^]9CnxsMw~X *GOd9Vy|n6Wt'VEܞɊ=l@AqK""6SۈޯN@)pmyDz D:l-Hȶ` $"I=;q-aOuCѯ,f$s'F)M)*`'f.E y8PA8`&2ʇr mی~l=W(D;sv $$'$!tL9{㜴\7?wg-maP<;alʶHkMnrD^{u'+:FCO~:`,xG`'s6 'AZHF]!͟8c &IS#$D0%:\)!\@ Cº=j .*L@ʐ)JI)J)&P/`ɪXH +B"&A!L¿TgwdV uI kN?MRT!1RS%10TTMUUU UUQUHJ6@ Y@*VjPhjVX`fXX6y1~oȔHQ3EY3 %Q@E,PRL} |ДN7⃋4lG׉ֈ? `P;%]TUUUWᙗ VdtCP7Tpö8FQ1IU~8UziՀ $ J b*l^BkY-0䲪E S#tnbO)ҏ!f ,  3"A34DLȸjo-ua-[U=j艬:QjJR2:k d>Q왿ֱ7/v''a,AQe.!2}8x"G)ND8_.d*q[!E9[~鶃3 ˮ\۲ΏUCpo]Fÿncv="C_@`˃ QMP2DA驘y=GO8(Kò=̍p8gD5`+ ` ci m#jD %t"IQFJGR,Ply2|8?D}k c6wP`7~{++V.O◷`x1A`Xnq.m۰^Y l+;#4[6Lda2 B A@6Єj1>w:?7Nf'l?g&k/GV+di\=~˧κEp5Y&]غ#{wVM ?K{OGNJl|N ?tP]4Qۆ{-7,efГkk[krߡymWa=6gыcu.m#_lx#{DLwscV6M'G/{ßl=ݧ.}6A_D '6CmcTP"qG]{[p߿Wp!Sy'^HrZv'mOBW8@[t r;F;d4эo!U:YřlAIq1cdtK@5: z2倌봈` 3{!Pkk %ک搈^wsxKY̭蒞jsG[E B)/0 K)V7Jo ES #kO`iK G ͳxT3jo?ƿ]cgNd+@r/nMc|Lmi 03(X0L0RU5,ߜ}&^Tv\;T ޻5*PEgDcbֵZ