.$F.Z<)ýPL_x.7xjr ލ7oLtdLIA;6(kqy6(Xz:~+hC->'4)9̊ TG|Gd?_Ћ N#(+ĠADF9eJqE }%'E6uJ˅h͜Iv|H~Jܶû@7'A^u9j$`x29K0>.]`c[Eƹ!C*7ՅD ׼; &U>ǯPybsc apj_JPL|BZA#(?s %%hH=Tcm~27VB0=;q HYa3?wo@ЂT}yUtmL2 A0n上[W*yV/08Ҵcs2.ؼdc#s2bt>GUVC /Mdhs$ GɜFl7P;[J8\˓N+9WMUoG C*KOEFͤE'>summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/application/configurer.rb4
-rw-r--r--lib/puppet/application/string.rb2
-rw-r--r--lib/puppet/string/action.rb2
-rw-r--r--lib/puppet/string/catalog.rb4
-rw-r--r--lib/puppet/string/catalog/select.rb2
-rw-r--r--lib/puppet/string/certificate.rb6
-rw-r--r--lib/puppet/string/config.rb1
-rw-r--r--lib/puppet/string/configurer.rb2
-rw-r--r--lib/puppet/string/facts.rb2
-rw-r--r--lib/puppet/string/report.rb2
-rwxr-xr-x[-rw-r--r--]spec/unit/application/configurer_spec.rb0
-rwxr-xr-xspec/unit/string/action_builder_spec.rb4
-rwxr-xr-xspec/unit/string/indirector_spec.rb4
-rw-r--r--spec/unit/string/option_spec.rb2
-rwxr-xr-xspec/unit/string_spec.rb8
15 files changed, 23 insertions, 22 deletions
diff --git a/lib/puppet/application/configurer.rb b/lib/puppet/application/configurer.rb
index b440098ee..be018338f 100644
--- a/lib/puppet/application/configurer.rb
+++ b/lib/puppet/application/configurer.rb
@@ -5,8 +5,8 @@ class Puppet::Application::Configurer < Puppet::Application
should_parse_config
run_mode :agent
- option("--debug","-d")
- option("--verbose","-v")
+ option("--debug", "-d")
+ option("--verbose", "-v")
def setup
if options[:debug] or options[:verbose]
diff --git a/lib/puppet/application/string.rb b/lib/puppet/application/string.rb
index aa369e669..0a6a798ce 100644
--- a/lib/puppet/application/string.rb
+++ b/lib/puppet/application/string.rb
@@ -83,7 +83,7 @@ class Puppet::Application::String < Puppet::Application
def actions(indirection)
return [] unless string = Puppet::String[indirection, '0.0.1']
string.load_actions
- return string.actions.sort { |a,b| a.to_s <=> b.to_s }
+ return string.actions.sort { |a, b| a.to_s <=> b.to_s }
end
def load_applications
diff --git a/lib/puppet/string/action.rb b/lib/puppet/string/action.rb
index 9e82f4d5d..ff419c090 100644
--- a/lib/puppet/string/action.rb
+++ b/lib/puppet/string/action.rb
@@ -14,7 +14,7 @@ class Puppet::String::Action
@string = string
@name = name.to_sym
@options = {}
- attrs.each do |k,v| send("#{k}=", v) end
+ attrs.each do |k, v| send("#{k}=", v) end
end
# Initially, this was defined to allow the @action.invoke pattern, which is
diff --git a/lib/puppet/string/catalog.rb b/lib/puppet/string/catalog.rb
index 0ddd83176..c6de47708 100644
--- a/lib/puppet/string/catalog.rb
+++ b/lib/puppet/string/catalog.rb
@@ -2,7 +2,7 @@ require 'puppet/string/indirector'
Puppet::String::Indirector.define(:catalog, '0.0.1') do
action(:apply) do
- invoke do |catalog|
+ invoke do |catalog, options|
report = Puppet::Transaction::Report.new("apply")
report.configuration_version = catalog.version
@@ -23,7 +23,7 @@ Puppet::String::Indirector.define(:catalog, '0.0.1') do
end
action(:download) do
- invoke do |certname,facts|
+ invoke do |certname, facts, options|
Puppet::Resource::Catalog.terminus_class = :rest
facts_to_upload = {:facts_format => :b64_zlib_yaml, :facts => CGI.escape(facts.render(:b64_zlib_yaml))}
catalog = nil
diff --git a/lib/puppet/string/catalog/select.rb b/lib/puppet/string/catalog/select.rb
index 52c77d3ce..a8f4480cd 100644
--- a/lib/puppet/string/catalog/select.rb
+++ b/lib/puppet/string/catalog/select.rb
@@ -1,7 +1,7 @@
# Select and show a list of resources of a given type.
Puppet::String.define(:catalog, '0.0.1') do
action :select do
- invoke do |host,type|
+ invoke do |host, type, options|
catalog = Puppet::Resource::Catalog.indirection.find(host)
catalog.resources.reject { |res| res.type != type }.each { |res| puts res }
diff --git a/lib/puppet/string/certificate.rb b/lib/puppet/string/certificate.rb
index 7b2e5f397..53f731e81 100644
--- a/lib/puppet/string/certificate.rb
+++ b/lib/puppet/string/certificate.rb
@@ -4,7 +4,7 @@ require 'puppet/ssl/host'
Puppet::String::Indirector.define(:certificate, '0.0.1') do
action :generate do
- invoke do |name|
+ invoke do |name, options|
host = Puppet::SSL::Host.new(name)
host.generate_certificate_request
host.certificate_request.class.indirection.save(host.certificate_request)
@@ -12,7 +12,7 @@ Puppet::String::Indirector.define(:certificate, '0.0.1') do
end
action :list do
- invoke do
+ invoke do |options|
Puppet::SSL::Host.indirection.search("*", {
:for => :certificate_request,
}).map { |h| h.inspect }
@@ -20,7 +20,7 @@ Puppet::String::Indirector.define(:certificate, '0.0.1') do
end
action :sign do
- invoke do |name|
+ invoke do |name, options|
Puppet::SSL::Host.indirection.save(Puppet::SSL::Host.new(name))
end
end
diff --git a/lib/puppet/string/config.rb b/lib/puppet/string/config.rb
index ae1a408cf..49a1688fc 100644
--- a/lib/puppet/string/config.rb
+++ b/lib/puppet/string/config.rb
@@ -3,6 +3,7 @@ require 'puppet/string'
Puppet::String.define(:config, '0.0.1') do
action(:print) do
invoke do |*args|
+ options = args.pop
Puppet.settings[:configprint] = args.join(",")
Puppet.settings.print_config_options
nil
diff --git a/lib/puppet/string/configurer.rb b/lib/puppet/string/configurer.rb
index a6ea74b6a..2520d4188 100644
--- a/lib/puppet/string/configurer.rb
+++ b/lib/puppet/string/configurer.rb
@@ -2,7 +2,7 @@ require 'puppet/string'
Puppet::String.define(:configurer, '0.0.1') do
action(:synchronize) do
- invoke do |certname|
+ invoke do |certname, options|
facts = Puppet::String[:facts, '0.0.1'].find(certname)
catalog = Puppet::String[:catalog, '0.0.1'].download(certname, facts)
report = Puppet::String[:catalog, '0.0.1'].apply(catalog)
diff --git a/lib/puppet/string/facts.rb b/lib/puppet/string/facts.rb
index 73acb0df6..31298813b 100644
--- a/lib/puppet/string/facts.rb
+++ b/lib/puppet/string/facts.rb
@@ -6,7 +6,7 @@ Puppet::String::Indirector.define(:facts, '0.0.1') do
# Upload our facts to the server
action(:upload) do
- invoke do |*args|
+ invoke do |options|
Puppet::Node::Facts.indirection.terminus_class = :facter
facts = Puppet::Node::Facts.indirection.find(Puppet[:certname])
Puppet::Node::Facts.indirection.terminus_class = :rest
diff --git a/lib/puppet/string/report.rb b/lib/puppet/string/report.rb
index 55a008533..5b617e49e 100644
--- a/lib/puppet/string/report.rb
+++ b/lib/puppet/string/report.rb
@@ -2,7 +2,7 @@ require 'puppet/string/indirector'
Puppet::String::Indirector.define(:report, '0.0.1') do
action(:submit) do
- invoke do |report|
+ invoke do |report, options|
begin
Puppet::Transaction::Report.terminus_class = :rest
report.save
diff --git a/spec/unit/application/configurer_spec.rb b/spec/unit/application/configurer_spec.rb
index 621039bcc..621039bcc 100644..100755
--- a/spec/unit/application/configurer_spec.rb
+++ b/spec/unit/application/configurer_spec.rb
diff --git a/spec/unit/string/action_builder_spec.rb b/spec/unit/string/action_builder_spec.rb
index 0229fe44d..fde010d51 100755
--- a/spec/unit/string/action_builder_spec.rb
+++ b/spec/unit/string/action_builder_spec.rb
@@ -6,7 +6,7 @@ require 'puppet/string/action_builder'
describe Puppet::String::ActionBuilder do
describe "::build" do
it "should build an action" do
- action = Puppet::String::ActionBuilder.build(nil,:foo) do
+ action = Puppet::String::ActionBuilder.build(nil, :foo) do
end
action.should be_a(Puppet::String::Action)
action.name.should == :foo
@@ -24,7 +24,7 @@ describe Puppet::String::ActionBuilder do
end
it "should require a block" do
- lambda { Puppet::String::ActionBuilder.build(nil,:foo) }.
+ lambda { Puppet::String::ActionBuilder.build(nil, :foo) }.
should raise_error("Action :foo must specify a block")
end
diff --git a/spec/unit/string/indirector_spec.rb b/spec/unit/string/indirector_spec.rb
index 89306c416..da5f569dc 100755
--- a/spec/unit/string/indirector_spec.rb
+++ b/spec/unit/string/indirector_spec.rb
@@ -33,8 +33,8 @@ describe Puppet::String::Indirector do
Puppet::String::Indirector.should be_action(method)
end
- it "should just call the indirection method when the '#{method}' action is invoked" do
- @instance.indirection.expects(method).with(:test, "myargs")
+ it "should call the indirection method when the '#{method}' action is invoked" do
+ @instance.indirection.expects(method).with(:test, "myargs", {})
@instance.send(method, :test, "myargs")
end
end
diff --git a/spec/unit/string/option_spec.rb b/spec/unit/string/option_spec.rb
index fc7b8329b..f4f62ec37 100644
--- a/spec/unit/string/option_spec.rb
+++ b/spec/unit/string/option_spec.rb
@@ -5,7 +5,7 @@ describe Puppet::String::Option do
describe "#optparse_to_name" do
["", "=BAR", " BAR", "=bar", " bar"].each do |postfix|
- { "--foo" => :foo, "-f" => :f,}.each do |base, expect|
+ { "--foo" => :foo, "-f" => :f }.each do |base, expect|
input = base + postfix
it "should map #{input.inspect} to #{expect.inspect}" do
option = Puppet::String::Option.new(string, input)
diff --git a/spec/unit/string_spec.rb b/spec/unit/string_spec.rb
index 7f7489e2e..ddf855475 100755
--- a/spec/unit/string_spec.rb
+++ b/spec/unit/string_spec.rb
@@ -41,7 +41,7 @@ describe Puppet::String do
end
it "should instance-eval any provided block" do
- face = Puppet::String.new(:string_test_block,'0.0.1') do
+ face = Puppet::String.new(:string_test_block, '0.0.1') do
action(:something) do
invoke { "foo" }
end
@@ -52,15 +52,15 @@ describe Puppet::String do
end
it "should have a name" do
- Puppet::String.new(:me,'0.0.1').name.should == :me
+ Puppet::String.new(:me, '0.0.1').name.should == :me
end
it "should stringify with its own name" do
- Puppet::String.new(:me,'0.0.1').to_s.should =~ /\bme\b/
+ Puppet::String.new(:me, '0.0.1').to_s.should =~ /\bme\b/
end
it "should allow overriding of the default format" do
- face = Puppet::String.new(:me,'0.0.1')
+ face = Puppet::String.new(:me, '0.0.1')
face.set_default_format :foo
face.default_format.should == :foo
end
֛k :ukeJ!C23RBaq[!+5fȣe򙪽{ C t M>$KCr =uK /K#CVmCx,&-q~xç>0: 4`KIīleyp//ˈSeaGXSiB@(Ux򩱈w.bH7釥,dX93(9>@&Ю%k5QIke?}ƥZHY5 ć^ 8bbFita`ػ ńlNBDWλUU)N=$WW:_Zc&Z-+X͑qs¡kXwKQ06341~?'o dO!@CDc,v@-}a{yXN~-CM*&V4mfUwdE&1ԹD*_"c=z| Szo:,O(?x9nnOW%ek،O$Ϗb8ǛڳK[:;$$*&ht+n;m}8 #Rph_ZO\ۘ/Oz_D %Sle\H_d\U!E6>z:80ћmޣA3[6w@Gp55x}3C?6tenqINj37/a^qu^c^Z`)IwFDxju*j}GՊrޕ vo0l~\4KAO uB? oH`* gWNU?> Tqթ%vkŹ=^_8𸩜4}Xwzu0+^cN敮70bBy/PJV~/ {.!k m؛N> ӽD%鬹!-W;6hu`J+"Ⱥd\s?+uȭnxM2Ny<]M*д~]9s֎ A5ay{huND:c1,'Q`FKM uɞ#WoYHN\;)]PePRΧ%OP%1skuãw>}qx 0H2氒1keqօNzt5[ ^aͩ"ioeaUyZO Nz3pfz<<j D{IhȊ"iԁ :a0îsոEWE_nKuA̘9͇R[')M f08]yw t!]&4Qި۾GMˢO2W $-H&֯T[*=? nrr̼vd@8Hmc` z&K(UDžWE;0Th8{[qh $<5[ uAS@:1O+Ds5Sh hИ¦Gɰ#rY89Y)% thTbXHP;sq4}B 鮯Zo.XvR/[#!6X6sHR.'<-K%`Lo^̻.ڿڥe'EY:1tV mY'ޢ;wb[2w!2lfK'!DCk^o5׭6SKfO:u,9iU(D&N~{hj~^"HBYm/` |&_6 :ˬpd[2qO;5oQ2>%NG6&oۼZAo3վ+ W{FT#moc!=Z+wf(]FGUc2zF^xՈ!,lS$ Qy psoi(Yyy3B95:/MSxYz `$S?pw'8$]Q~%.b56cMc}N FQ,9JI5HYް=CA'+̴vc m o\Md۷AnٳBhs7ş^uU:FبIDp./O} MÍ{ozcBQ!Uhz@nn!F =]7jNa۹r$ rwIY% D'+lm#nߔC +21!>8vl 3=C}-l~7|J71B /1<|%SVvܮ E>ULd?j ~ r:?&qH,.OYwOӐQ^mH+;,Dܮ1͝ގ?o|$-} oGRC eS?ul_9y8kZj7{q j=˒]KQ:6_*MAbc}R9ߌZr0HLZcXvڊ<_V۶l?" /cCXjTCRZ'0e&F&M]}F xr;!'ӰP'W d.Ă2z`Fs;e.B̌Zcf9ó"c}v!3H.Y(nnAjj(Ywnz}ݾHޚ)Ӻ2mTg ,z%U7KR>,Ӟs'X4c1Y(sf=yC5S>2d$vċDMp?tSП˴ rhtBWj7I2^$ CzHpCr 'ͱYqy|-]*щδ=/q,; 3*<e0$t˃I Mm1ȸFz_Jpk%HA)(3O?vmwd#Rl|1@:(3s/TH/#FIzETf(pTe"l}DCE$oū4E[^5ANmL\7@NaydRSoeP̃0fP,) 3M`6D&9˽,I8AA mG5Tm!".)-;q9gacZpͮw< ܐZY2cV2a-1s6?qE'`"Gi&uaHޏx6gX1ۓ`߬P/.e/K{5̓3jHa3Odžmx=胗ִw1vxK=\7]bP&][8!֌5k7f zwnH=MF'-$Hؔog."*d7LZQ.fF숥;Y椵Hl_;[FG-${뤪VՑ"9;`eQQMۚXxgK-S(!/p^OS{/QGZjۯvtQ&OraY`Cnf$jCYeeg|>R>1 muZ\YĮFAmvm7,*a;# I+5CX}s_?t}dt? Ub}Bzit'0KwBOԵu6pFhR["{Co8BonȒ]Ga'od_zw5kyYIs5pkqV#suEC~y7s7,kYrA>0kf1S]6v$=xUnO&Uҧ[rkH||>* ĕT*^;e1ţ/Ao;:^r=j&̮'6BRBYQ⋫*&P*兠sK&|ۊxLL!34nw!F|^ЪAS sv!R\ <(AxҶNRlp$ٚb#,uB̉#}^YWi7tF_wD"s;$سZ"vQ~} sL,' 7XVؓTSue$'-TptShܕ$|_%IsCMyAn]9T3,*/3iE]` #"9.#)2\6BW2슄]Trvg-aƹ-@ؼ2%0A;3!,w t{C9x"\,mcjqXwXE؊ք%i?\0cy+M2YЃŝ~iU=Gy5@(NretBO^p9!>U_Re?j]T*ѓ /~%Khmնy{K,?V#-'osB abώ%IZV~r5r昇~Ug@ `'Gn?ǃ.k?zֽ"cSӖ]<ʄp5yוuT$AP,`l C/2.*M6?s`rHl!ffq?il$s!P}fEQJS/v$ȢnEѕţ| )WTzHhpUcˆoL WG8 ]mO,@i3 l~q<$ֈBHBBܯ8S_Q4ww!Gـ0[C$~$=8Y&zR^;^V/YqCђv ,+kƬ|9lb5s2o|r"">{cEhD\FQ7v_f;׀32+Y [EcYvtMjĖ8 Ue$·^\ 2ק@ysP(Ud7@9QڕJXYnҳ JkO]QrE; c!31v-ʜvvƒZ5JdT\?qOw#zU+>6C. @![?Fnnhg719|US(صd "9_fܭ]&i{$z Y-PeOч Mf'23oCH !bqDu+J^YjӞۜzur_w[vU%?Kxד C5q?@Y-gbg*x?s4XE3)JTG4l,)G.QNX- N6gWmUb|s*c!%v/NmExG};&"@1Ÿ͖cE25)(vtf7!<]@-f)ެ{TOs5Gԝ=rO6 ɴ a9y%^֏-vcq@Y R?86*،-MsmS#AWPMBԮ5) CҮ(bO3^]3$S;Ӆ>Yx]cgR} . }#.Qq:j>~3RCrH ](_Ex)zTvp|Bq+Do|~1|N:4CU! t |@r(DOָ*{"ZlBCdPC`MfN -GBW磎!"`t&g~ѱOR!E=Qf"*NWB1 Q R%Ndǒ*$?S`wx҉`0>[.f( f=^ķdt7z(D rWˑ9M3laиF5mb>0b,IȆq.0E V_zK6[%;DR:{wpG#g`19핯:9X& ڠwɋ,bY9oW2w0u L'6 7TȘxpO~jH_X~$?xqgŕnY%[ D5UAs@e#nh-)" ct}\T +W;Ӏ>6E,759mu@{vƯGgqݡ٬(9N4\qa6ܤ$GZ'<ev5mJ} e ~u!9nN(4ݹXGrƛ$\ B!8GNK4"D&8c P\E{jip2X)`ZBpdn ؔ4L)ʄG[l c* "}! jLG <]6ߓP62ܷV EN+YCH 2ӏ_0Ͳg(͋rMf #Kջ 5d-N~pTnap߃]+1m3iei+V>|4(2nMwԴ4Pe >jK"&;{캓;.,k~g=0SRR|]gU3S`prTt0,PƸ&ۂ\E4ƾ'l?TxS|Xַ$Pl\ tآ(Nɶ7[ M`×!|V?uIr/0weL *TSAP_Rt&ցS 7`s HSe' =-L6Sœ?zq+[T r~y'=Z"UWd?j6 3g~:f^pO5i HsV .o(\жػԜ?p ~ eL!>4-Ԣ)a|P*$..3'!= _B'9wC;Ґk^>zS-h[M]gg$ ?h=Te)B]II%B|pD7C6) Ɲ@=vLgw:U3ɞ&jJUK&鶂KؠUߌXn&?[0BkΛ(;1W0 cQJܧΎ"'F_2clG!݃60c\Y`WXS="B wr3|xjT[ drM1.=CȄƥt}ءUGɆ'\^2R+$f¾<Η>3k#ic<7*Bb Ԥ'q р楶d'#SyȮ;r_1 hZ3D񐍖^ӕ~cO%fp ˚&룤.ڹ(y{ "m^șcY(/+iY e%7EL;Mqbp+ @m+ZT5 ?ɸ tG773Wx2fH)#;AZ2t UVyjx"NR o[zS|5w,m}$s_y\H ٹSX VYj RE:$(e>svGj%LJu6xGQYNmtp\s@_'zk*Pzhʋj8E&ɖ[RX SiNΏGjEua(eBO)v)%`}˖ 3ow$gI]umkܷ-2bxq@ (l[pE pA񛐥P VPLj`9nOD@[=ܨ2=N4'쩼d\Y㑁{3 +!} |ޘŴspSj{M4əI"I_Im^X>]RkM.2oR`|0{R R@DVikQ;ݫg5oib#2_,nJ<I{dVqqKNW6\ֵ-%'4\p;ph1(73yaHJVR㫯[#kkb dja/v norxn& <<^B6r/2PkRNl՜Z%"0\eDC7 YU' 19)Y$Ni(B`պlzO^Ecepwykf@"ɠ_V%~Yf ogP'L [Fyf`5S\HR2-+7e[߬1)k]EtHDXD> qG؉2 y KV Shmzt( =OTQcsJ"c@gvzpX#=gVLjY$*[j Q<aV  @9&* uy0-gB7Cn7iYglò^D>6Dc LLuҠrr$AE.:1&B;nPm8an\YׇR ԞA*4J ISK" Rt\{au|N`90BUjT'fʖZP v)YKEl| pt/I>kaQHML޺! ΛiQ=m`'{As 11Xz)u]H`fsܼ4;QG xF^# GtFVv8VpףZ𢂦oq{ҧ&V?Mt`wqVYC&0P$###^9ޓMf݌4d?Íptbdj >/'kZvWci^Jvܠ3R=ˆ|PcprVayΒAw@O2#, 1e-tEcAfZo?6{*|툯&մbi+Ɂ[+|PNΠȰϠp(lB??РMtL ݆3v&&\䈼:xe7=*  )S-Ɏ2՚9YkH1YVHڨ&P7ӂ >/o^^u.V/GK"h^*,n,F{d6?@}P6zM͎$-r5LX{gX2p5M$ )B6sc15@sf>d kj j-n@J5!ωtId4_ b҉49&g&nZ2%lGN%oHAdyRHtvT=oL2/W,A׎>r#r=EH]<'&. n(n|CHBdo=^S;9diTzzHS e={HzH@#d%CShi=QӉcq֭;n|Vӆ暒NG&cc/^3j;tT),r5rEc}9&\+]* gx yJd٥n^4ޣMuT"w̓Cމۧ!o7ܿF@HAuO տqT(ssP6N!oa#刅v{%%:wsم}3^XGEc=S"_ j`Jj`+y_Ϊ#A04-߂ (5C6 Þz5HÐ t@?Y -6 {kj*HA8Wekr O(qS]0D',p튁nּ)I0yIinCl%${Cంh" r}B6lEڂB_JcԫIbH3C)^:aĠYhf f2 tOm$p:f.Ijn@ĦF~7 (&>^ MdqƪlfTg {eΉ//_Ю`䈹u;2_E[Z5zz>rNu1q>lvwE)KRCن+͊@䚹`%EY@ X"}lde}Te ~ksǷ bcbyͳ^.!L==q s1^n[!Ӭ!QATN57t3TNB}a nj2nP6nwQTOSYӄٔiZ\DEl1ivr"? P @KDY {Jܮ5z%aQQqٙמB^(v9>&ypۦר( kɿd̸sBt#^))z\2v?F01=:?ލBzx;1T7ȉ< *('BߴNnSK"lT_ l2O;Gǡ@lzWܟܽZIj?t>yN<]% ϚnD]J?}$RN@kAz, \].=EM!-Ȕ2C57J*Wn4ijHo<Z\!i^9&^Q;Ⱥֶ`mteMDj*"f8h,cĐEh"6Oĩ2 ^DOΡ ja^::r/&mL yoFcb=65{j|tv+}4;(ZoP [tB6g Ob#In]}C{)_"x"LЕcf 沎͢hG hzs\<;A*;hr]ChE d܃-o%V%ĨMK˗(qby3B0vkhwo2<3+ʂ݌x7ƌ D#I1 b^?G^ȑ\E)@u_49A~1~eyg(^BhTjfFHwrtloZ2O>D:=^Ko#]8F :t<r<5z yH}k(S370{?Qt=A)Z::p0(_|CVLdJE1Մ_Le1\l ͣtCl^ Fi;DU^^ CYw EEjj^ҼHKݫmY1(b~F;*r7a+:F͆w|U>+3E*헬 Rawi=ݎ1IgCպJ:+<Bt3!lmBsdfu",Lkoe]Y GdH9T!g(/]JN\JlWԚA~[[yQGj;?#Ν g:MB/F1ok|D"9ԚuвA4` .'Kuﴬf1o߭ڀ=uq꫰9T*. GC3]p!\߭#aaW( Dv_yG P >O%`Q1NmA?=d x|]KP+-Gjc {^ w[ NG!cx]sN9f*泊JwWYVY|tmGf:,&Fɿ1gŻ.<|QPd(2Lz`ekdj.5U7 v3@cf{Ry Fc7U W(@qcg£%Hk8 SOSzBdo ax|ki;#<^N&(=I 9}mJcG6JԇY]I'WPSqo*htn~XȌ~\}曙)?+'TU͢ ^Z|ۭBhB3ty$"3@3cqR$[ˊmWYHߥ^Ap9KpLTD6a2&gǝ\bG2*Թnȼw;y; Nſ/AxB;!` 6_lk%ZQu%aÝhTBTA6 2f J<<̱ԼUd,:b",85%Q/Iv;/v1&bUtU-_/Ms1 ۈ޼J7L.o@9Ri>)OZ_ײsj.bkl6K;m D d' z!m<تIO!5DDz'O:9LwEVl&e9_lӇ;!:eAQo,.aNG fwg*,_#grD`S ~Hoa(]c$,1 ~`+y ewu&ȩ樶חmI+֬xhf.z^^1>2DZXA_Oc:fx W8e'G-Jp 񄝓혾>©JRc(]Ⅽp v9\ ъBUo"n|ňRMxczdŦ0^y(%A&i $DB.<[5g܍/U:r{>pcY*[3dX9jjR4lsdȟQ}G<Y&Q"J{vc+~BuV <*o10D| :\$ lL8٥Ra.C``,ޓpq  ;]}\QF])G7覲=b^m ZI5j &ޏB,.PX<7{5 n. {g ?*"xȥ rLsr2͏G$2th>Oz}N&-! 2{=_% sлEvbF][k< Jf.tv:.Jp~0҅λ*z"0ZpnV10`8Pop*Ϝx,RxX  EvPJǿ9X>, 9{BգS`y I7Xhk3s/ꖑ?/1ދz ?#r+Aso{~J+eTHaMX4(.MD2!:S᪏Rq#,LpGWEb沉M?G67;֨uِ~ oh 8N'$IE2O$hhmTNX8V4ҧX;]4^Upnc7ǒ# ܵ)m~G2>(fBen?,{>} ҉{cުЧqhi<^q: udlZ{7Y,##dKO)"Kxrv':rLטc++ݮLo|lk{'Ɯk:0~ Eq捳zZX9 HҰtYVw3!4Wi@LIΘ IZ|,)'aO>u5DJ)yʜiS'K)MֻguR B8Y7!?f/&p4亐!:WG%e o5*2:3VHd#r'I ECHFKKAS 08@FrؔnM/ Jh[bIĉdg]՝Ӟm: [*. IJ9aS*>㹳B7~2WrC:< xո,t6+((19$ߡԺzHmEPwX&o?% x͟Ϝ"c#GIgC`e*5.:I~`z !AyD1f8N.p@7v&a8ee$<ժ.-<z;|hC.A:21Y{ u9 n3 BR\ìfA̔c:W\p4|+aRL>c|NU,Ro~;|MGsbMK Tn{I>Cݭ#S0ic~!)7)JM9u82 ^Ōs(}Bdsq뻳29Mj9mrG>mfAd-΍]w]Ψ3׌N/@,i QV@ˈ DƝ!c+RKhMfIӛ\xwI` =|w%磐T mL+|AomsFPۨNq#q/J@E$-z:G;U8XD1+$j앲##r:$S~iOV|o+1^$ZAnA%y0A7i~7cAi2"9GH$]U{ z J!I1^p}Ρ!iq^ҹ%'}z9S94•swySY%`#$/-ժUwѓBJĝ,~?j7ĸoC`B:Ln1s;24kÉj0.tpm,ͳ*Y ?vXr/ l2gr\ 3'"|85d&K+1.yPyoijE+ F{.3'srŇ5(Oaű-lD@4[ZEOSN`y(1BP3%EA~Ha%V`$Dw=B ]v,mgYP^&gA5HUmB1x)wEzY +O˒܈+1WU7v>Km%A}j+$.6AL\ krmWgpmS4ޭ@w-zF6.&}zUMnѓìeQk8#vAiWy( }.އA>X u)p&N`$dtkyVs-Ƌzd&Ppz_xHl,d4JuK Z!ֆɬ,ȭ+ͭ!;ZN< q)bTWU< )([hӓ&% eǮZ=C]92|xzBQ`~CH0S:e̦R\WG .)Z/L` f%wom󉤞xdҠS7KII*Տ' 鉝\=peZ*z8 G7n[Ր'w=gL-ܣ44όcgO;8v5*v}~bvPL)$p [63*:[Q{O4oA+C Q@pRlQF]GysM ߂7d+{GETmH{'(yk3ktoy_H7l:.vV(=>$A %0 .ٽCy6׾7\Uzfʉ' .F4;DC䌫+Q`j*|+ V+0܃͛'@R69jr %Tpu =֨NGJ>.evR/f\g:T¿Mpk-x+7v ##$r; >"D,g }A2qcрrgT @&v&QDqNi"wߞQ&mYVL@/*}~, {%jb+3畴 8cj`*=-CRlv4nM0=8V"bsHk E)mSBD;/{D|3^MF߉6wUpMD-X: &áיQt6/iY^ONag x@ Ҭ;=QՕ!nzǂ pٛe](U))rͽI'LyN EրMuA-;XSWn*`Щ"h{M]Դ40F"-Gh[4f|e~eHϒ 4nF`yV .D31 !]yapgnS5 )ez"F^ } XtT^&`y0խZrkiԠldZX2 Q0Fxo@d+6- 4iLF5rCQν_O7:Xd7--3eKGnS4/ֿGժ$$}pD @_Ԩ⟗TXlI Q9" n/9,OƧ sߺhZ;L.s n G=4PZۇ$W}.h9'| i?HsHXn EC |:og#,.V"BBzS=GCYdejV]* <텨VQ ;A&`$MsLdYxjX3]q EN;_7)S>GJySUDd Ɖ25@@"kҝ.:# - 1605ψB4Ea,j(ٜȗCqt@0)DuȖ/G]0\:Tsٺ'qSsy2e a@PX,d%,?UZ!tּ Ax2; vU3ܶր̍'{6x~R_g ekOV^'ak#7NF~ _^ uɨ3R1ikGjQTک!=Gwyo.v2kZY2bmnbSo_Db.j%KXV8X8ZD=jҙQ *>zXZ=eװ]nbjl'̹xʓ:p1(ܓ7b,2ƛ+AZǠ2xJDkhHZ]p  UѢ!4eE7 (i *Vk0#܎Bj+?O)"mZ1z&c>iT @8uc/E3;KY CN^C8H,xHR!PvqJ}`O#Cc1|ݐ^hh3/v9k_CH62|shf@poшDm(&tzbc#+"9og i"MlN@GMcr*iTPfPǕC F1CNuseAjB;M/tO/d$0%]D.w#Z/)ˢܾC2zT't1Q Le?v.#t3m~:\2'&~>:ၧ 8AwKev2GxkMꭶ@ANϖծTTb \INDYwFȖLj͌rkn9!JpI4Doo\N$l\yO~5*%4je"$Ʋ˽eg{Ia~KLvm>K.^5uΛ )#;ސ,<[-J!XVk(uq}%}ZKl!xlI7 M6i޿t fΚRøn40SLFlw\lU]OuNQBӉ؜I*uι܌MBT(Ӂ]5c7Rbb#za~axl(f&7ŏE-Y`X/1:{#ao~lÉM%F0sBԻp1 oQH V/|6*@/)@ Zx5gOXyYi(ZRqjdlpuDe 'O!,0Y󆂻K_cꃛ B[] @;e x0'asxc~`%dźv'J%?s'$c굆r~HV$gaݷo)buKEKT,/+R~K!IVh@"RJIdj[Z-jm}i+yC-蛏|%=$B Qt.i_/ՕiK;%ub7@]$ V<>jOY%?EL>@zdlT9lgc }YX0(PD^\a|˝*fQe{lV ; /v^# !OJ _{8/K ptެP+y8s&u}_}E -/Vv(z|vdSUI4g ӓN352 .#~"e1}3mO$0 W:9 q:\8\𶑗U/֋0HQbH& /."$\&2':Q`fK>]@\l&}q.+M[@X)቏zEY:Yz[Dq-˴hhX(5Cf/g~w~،;|کe9%Z]7D=BX""GV\3NΘBTBTE_:j%,7_h̼|Nf'4 dUC: hV96pKϒ8}+ SCk汀xRLG[)9{wUj!t*Ӷ!Ɇ1]h@b\(:theIx'o5tzU3zbiM.3m @#o1O0LdI\[NV&)K`I-bc?* -} 7^{(Pdϟ-|ou}CEeW1 ,ȧ86\h O s27?iB2ƠB Nr _AzZ7'et_AgHoefxrI,,ށf%'̪+hP̖9ف`{ԅ΅'>T }}'Dm^Eƀ%Jf R\?R ~>2&P !3r2OYYZnz,\gs-H{%6F1T^m님A TCA(>3'1mԬhv^{D (>*+ͲVe\[%(*3Kg PF2l 6C&"M XXl }3r+μ Id ,I5gF{5Y۞@{T倞kZxmiSWFF {!a'eih@ʉ O[TjwU! 5 !?z 6W}䴬s 8؄Xȑ9X-fi>"V3ެ[Cqdo8du?&pHIIGEwY1oaOr 7Ir~@ЗǂՅ~CDTHGz@J@?K$XcXd4`ܟ:2ӗI9D1-2#=r1!@jkr# + yQrrᘆ&1xv"q۲=pD|}&F/:j4oZ No{ؿ Q-jpx)5҃b awEV m0 LuzȺ'FTt)(.} 3Y%LȨNKcB=oAVϹvٽ\!´/uﯨ"s%JOHQ:=uٖoMȬe?ɧ}bsȽ؋[֫9"H7{K @WV8Z&{2^ZiڸUkɂ6D[f2膢Jw5euxHW#N3]e݋ctdWYcY41nhMQ_I_V6d5hu_/a0 $ "}nQ((TAX٭8]v K-12|YOMT 9jw1G{\U Z5nx}sIJv+nݠ@0>8s?!2ZIV@Gc]eHnYsqLX ;6;pp mD-$[1+z^dFOU^muEzWĒ*ρbcxC66D銣x$le*[O:V$emc!μ} 8Wݨ;jJ Q$b~7HӕP L̍!/?iMX9C!͹1Έ *bmOˀ1ʹ5O TSԄ8&\5-ihm[-!*Tada66 KWPK2o ,g N0 thb[XxPi($4A=HC~a{u ?sYU\LO6М9(һ=zlxҍwf< ಋ_c O,a fu9B^# (hhpO 1qvtM&ǯ,⻆U%:I$➏`v#/VWP+0Xl)I;Xiiyg{ǪoLç^Wb͉I { >!k-%eE.5G#c!}³oWn߃a[?xcY~ϒgyd՝SLZ#So&ցSM;>QaS<Y:(q 4Yepї|cZ%~n+U4 tb.BZf[t0/ux@s{;R?{}=/`