Date: Thu, 27 Mar 2014 19:46:12 +0800 From: Marcelo Araujo <araujobsdport@gmail.com> To: Rick Macklem <rmacklem@uoguelph.ca> Cc: FreeBSD Filesystems <freebsd-fs@freebsd.org>, Alexander Motin <mav@freebsd.org> Subject: Re: review/test: NFS patch to use pagesize mbuf clusters Message-ID: <CAOfEmZi_QEKTWQbeki2CCHbx5WG7-pSfV4scXae0=LG_jLq5gA@mail.gmail.com> In-Reply-To: <459657309.24706896.1395187612496.JavaMail.root@uoguelph.ca> References: <CAOfEmZhYCsA8bCHW2WGokSsFeLM3XbzaTOXJv=AWdpDEo7jLZg@mail.gmail.com> <459657309.24706896.1395187612496.JavaMail.root@uoguelph.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hello Rick,
We made few tests here, and we could see a little improvement for READ!
We are still double checking it. All our systems have 10G Intel Interface
with TSO enabled and we have those 32 transmit segments as limitation. We
ran the test for several times, and we didn't see any regression.
All our system is based on 9.1-RELEASE with some merges on NFS and IXGBE
from 10-RELEASE.
Our machine:
NIC - 10G Intel X540 that is based on 82599 chipset.
RAM - 24G
CPU - Intel Xeon E5-2448L 1.80Ghz.
Motherboard - Homemade.
Here attached there is a small report, from page number 18, you can see
some graphs that will make easier for you to see the results. So, let me
know if you want try anything else, any other patch and so on. I can keep
the environment for more 1 week and I can make more tests.
Best Regards,
2014-03-19 8:06 GMT+08:00 Rick Macklem <rmacklem@uoguelph.ca>:
> Marcelo Araujo wrote:
> >
> > Hello Rick,
> >
> >
> > I have couple machines with 10G interface capable with TSO.
> > Which kind of result do you expecting? Is it a speed up in read?
> >
> Well, if NFS is working well on these systems, I would hope you
> don't see any regression.
>
> If your TSO enabled interfaces can handle more than 32 transmit
> segments (there is usually a #define constant in the driver with
> something like TX_SEGMAX in it and if this is >= 34 you should
> see very little effect).
>
> Even if your network interface is one of the ones limited to 32
> transmit segments, the driver usually fixes the list via a call
> to m_defrag(). Although this involves a bunch of bcopy()'ng, you
> still might not see any easily measured performance improvement,
> assuming m_defrag() is getting the job done.
> (Network latency and disk latency in the server will predominate,
> I suspect. A server built entirely using SSDs might be a different
> story?)
>
> Thanks for doing testing, since a lack of a regression is what I
> care about most. (I am hoping this resolves cases where users have
> had to disable TSO to make NFS work ok for them.)
>
> rick
>
> >
> > I'm gonna make some tests today, but against 9.1-RELEASE, where my
> > servers are working on.
> >
> >
> > Best Regards,
> >
> >
> >
> >
> >
> > 2014-03-18 9:26 GMT+08:00 Rick Macklem < rmacklem@uoguelph.ca > :
> >
> >
> > Hi,
> >
> > Several of the TSO capable network interfaces have a limit of
> > 32 mbufs in the transmit mbuf chain (the drivers call these transmit
> > segments, which I admit I find confusing).
> >
> > For a 64K read/readdir reply or 64K write request, NFS passes
> > a list of 34 mbufs down to TCP. TCP will split the list, since
> > it is slightly more than 64K bytes, but that split will normally
> > be a copy by reference of the last mbuf cluster. As such, normally
> > the network interface will get a list of 34 mbufs.
> >
> > For TSO enabled interfaces that are limited to 32 mbufs in the
> > list, the usual workaround in the driver is to copy { real copy,
> > not copy by reference } the list to 32 mbuf clusters via m_defrag().
> > (A few drivers use m_collapse() which is less likely to succeed.)
> >
> > As a workaround to this problem, the attached patch modifies NFS
> > to use larger pagesize clusters, so that the 64K RPC message is
> > in 18 mbufs (assuming a 4K pagesize).
> >
> > Testing on my slow hardware which does not have TSO capability
> > shows it to be performance neutral, but I believe avoiding the
> > overhead of copying via m_defrag() { and possible failures
> > resulting in the message never being transmitted } makes this
> > patch worth doing.
> >
> > As such, I'd like to request review and/or testing of this patch
> > by anyone who can do so.
> >
> > Thanks in advance for your help, rick
> > ps: If you don't get the attachment, just email and I'll
> > send you a copy.
> >
> > _______________________________________________
> > freebsd-fs@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> > To unsubscribe, send any mail to " freebsd-fs-unsubscribe@freebsd.org
> > "
> >
> >
> >
> >
> > --
> > Marcelo Araujo
> > araujo@FreeBSD.org
>
--
Marcelo Araujo
araujo@FreeBSD.org
[-- Attachment #2 --]
%PDF-1.4
%
57 0 obj
<</Type /Catalog
/Pages 1 0 R
>>
endobj
58 0 obj
<</Type /Page
/Parent 2 0 R
/Resources <</ProcSets [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G0 59 0 R
>>
/XObject <</X0 60 0 R
>>
/Font <</F0 61 0 R
/F1 62 0 R
/F2 63 0 R
>>
>>
/MediaBox [0 0 612 792]
/Contents 64 0 R
>>
endobj
64 0 obj
<</Filter /FlateDecode
/Length 4190
>> stream
x\]
_q@ز(e/m3sƒǚO$[ߒwi>˗_Oj/^M&/?n_9}D#'J?) %eqXw_Gn%?Ώ?)eǷ=Q5j+"[DR"W!nE~!+
q\RIIeXhJ.ETTDArJI+!Ja3ҫ9mrKF]JJ!#S^#mB~vvn/Tv/띊JwO߭sf~=o\h?9]Jcgjk b+W/74X|WI]2! oP)[B*jޚ!۰WKW*|C 953dҪ`!xǦ?k#
BuO :*NP*
1g!-WoNj5Y*ja*Сl|b)#FfWݤ\y2S4-kZ FFjITS(Y!"8rUd7$TB$2\ZRVYD2Rv$Ds# @72@HA6>(w2 ŞJ.p<#/~t%.n%۠,F)~ Ql3?wGn$OOGg~'G{~2g~'~rg~~R9X\1#I$ @(POj*wx),7%z;,H45SA$@4CnkQD%I \-SChI)>#!-:Iau2/8xY߰}C#z,.$nS.TTഥ [|4P#9.B
0YΚ{j-8knިWJȋn,d .Ɵ}DOixF[3"2tc?yV#q`ܨ%T(K3R!P"Xj$aD-5IQhF%|jQLTύװP$orȥEK3HD .!0n)` F84 ]?_=Dg5=rEsʑ*Y!E@HR(Y~*T"Ja/KMRTCUеrՆsQt%44]a=aLJexZTVxQve4"ìjdt`{wi<qdHXh2*Ƣ o]H u l-L#ڊ?'-s
.Syeub}|ɣ@&Q#5BF&`h`6FG#Z.2v3Y 1r6?Qz̫Ԉ(!ޢy_Cj*dռ4Ue֯@|ZҚZbgk'b!]50"s_/kc4gkg=6D JdQ%&{gc<;ޜJ:*?x$-C/ZUT|CKeѱި6
Qec䍻#x43qtKt)V]jӽ>iFLE88
rumClxgwxF[Fl4ElMu_.49m]6̻>#Gɋa 44Yp
F B%ʒoo]߀ln%R3+s{aT#"|]
I8F{37-vZ<Z&@v]EJDC=Umqɸr77.}zgqэlj[/[|@،\+u
7r@hzz¨+B">.Df-B]gZ[ @R3lWgAnTϲWT/̀Z]l02<W"ڝo륷"c@i:@6i,W\,${a-T|#eQt"6no۰#`"u[OHY@6*6jdR$^11drmj֗[:tܺ@<ѯU/J=Bʪ]BZUU|BK
[`.U!UjI*gxL-q]k̉e#(Gh;2)Z"s)Z*[RoKd{Iͥv!I'-O, F7{9|1|~~6OZ
z.CEJڗdG,w{]J+nlPL#YOn<I%5ݘtS,U4iy?ڶ{u6c,M>$%2zZr/ 뺘W-^>ɊgDR)_7ꂣp%ãw'5i(~8WRd[d
6&p}
nCc9Q"įslBH,
yy bzJXt.W>٢3woR SQkF NE"15HRlDdllN'r<抅P ,KGī-gwɋx:},91WG_k1.AQa,Q
?zNϧ>աAFʺ|L@5t?M}g/ա$s?Q
Z->&AAy_.OW/ɭ)_㥢rZ641hFnI%倉~!%p.T>'4u͉4^UY;dϲzp}ND^ѰHt#27ٿ^H}=Plܬ
\&/c~z~lEuDtL | |!c"o+]{<YGWZlRGDh.Vkz<`Yi/떳xFH{@븊9bGItF4Zdama+Csag{.J}DipFHGy[hEwFj/`B^Fm_CDP)a!*Dz0,dLF3#F/ijć,ďoHMߴub ۆ-#6k>+C|'a[#Բ
Pp-pVF3u #fxtXcjknG
INܢLMx#0saQ7fT LJ(EcoՑmFB+]b!o>2ׂ[jxJqOW
<'^" ߟ48]}-8>"5/uVҡٕl 9o )2*PTsƷPho5~JHhDl%zBq&Q~r*}yFOTIHFYMG-OVW}F.ںXȶZ7*F-h!Է*ϘmdlzdlT90p-y7@6m)ʖ/轄轄轄轄轄轄Ěj,䂣7Y;o[s7Wn_jTO'
JK;HW\#
#0*fǃgOk^HA:b!݂M^Ϛ=}ř
gz&e!"*A\Dw ѡ*ZJۧNS7
ڶuP3,7چ/6!X 5(Pz ".AVl
-*%mM(~PݜRy@;7Z!~$OyNǟ !CmUIg?fT.wLA=T-e=$ue۹z_)CҴ
&wiJ&kTz9B**m=dlHs;bˋOw_ʊ 6 [=ۧaͷʏӣh"QSse4ZPS;ΏN5pF>G;C5f'gfX !fkpځ
endstream
endobj
59 0 obj
<</Type /ExtGState
/CA 1
/ca 1
/LC 0
/LJ 0
/LW 0
/ML 4
/SA true
/BM /Normal
>>
endobj
60 0 obj
<</Type /XObject
/Subtype /Image
/Width 622
/Height 180
/ColorSpace /DeviceRGB
/BitsPerComponent 8
/SMask 65 0 R
/Filter /FlateDecode
/Length 7053
>> stream
x}Uyq~DT*T
FQ(87'UVQ#bHq~2DieF[%:64If?eu9}/g{<Ü:k}8T*B٭kt-w8꽛/C'B;zfXrDrc&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁMt]6fl]v9W\g}i-/j'q1G:N퓧]egɕvze+[*#$b~ӶF%Nbڍ]7ȴ|eG>dp81q*_o}@3}u_-j-/I6|}*c=V̖8#Âl=5_shVkkۻ>ڻj&6Џz?嫟rMnrR_eDSt]քx]he2Kw4Ef[Q(`ŗZZm7X\*䬃exAbﺦ㆖rQȤ+Xmnc&Cm}OпAhךݦIՕЬ:u?^&%Kj_cfWm,`I
0U4
m4l,W0T5Ͻ65{5ZP4)ek֤奣DI_)ӭߴM#m|}G|I
;v%+VWaiIfQHڟn0)I$=bRgU"Txb]
;hG2uXR)ϪZ̢Jih2HXv~T؍--뮝{P:2K5ROڱ5+\QmdRc6pݬz9_!4D;&*qvՎkXj=8Rd6&
N֖p.I;xhF
u7ؤ/ky(=hRhҮ$2B]KlH[1\OftkՆ.T?֤zƚJѷH֫{LcR0<նζW`0)I$oRU9՜?suU*QSTo.]^5PC2}8[kRL)OERaU^dڍusLT_|դh+T~dnq_W5M'Lt2^k܉_/囧 '"d.'Zj1VjImi`8&%wۍjK"&1"jf>-v6d,wO+"IqY5Ӻ[]w.oL_qG`Ako$ӏ$]Z_c`[Ү^2ݴLrNT75sv7ߤv!5>acḟLHӥIU+=c
#y+b@&g3AUJ]&UQ
%N>7#SkT3xI-:'vǤ
y$ku.B3WOƆVjʎ
9ÚԽNI.m]ֽE;Cz%^Z?ګß{.$ݸ"fFuRJS5w|cR;]CPk@Q"\M*m-zϢڹvo;\_5,hǿ>F9&^;QdQu@>$6*b~Wεal#Jn"S'ZJw5t~ucR9R6͢5IOy2ofỏ}sIkMjg\r]!{J?>ȤV0퓉;C'IHӳ&/b_%:3fvF&{5}'v]SdI!_w}>Ti`RϤv"'\s3PvAp^/t uRפ6<?vB\6쮶Er?_Bmd$I͕9ELI5*~uMy;&3{34xB9gw\[FU*mKG3~vq|ڌu.W},tb:i[xXa@X:ԡQ8*êrtP~ᕆ%{.kc&
hXvip5s<v2`RHz֤]1EEF3N?3i|=P·ˡRzP`{'bm<-瘿RS7zewuqT&M*I7ZyuPtv?~O2.gTofcdU7R2vpZkq?ړ<[ͻ3]LN$yVs0)I$9UN-[ĭAsNuPy(M*SBY2KgKqUt0ˍV;ӕJ0]~}]FxII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8ILJ U
&%*N`RDB'0)xII"ʁ$P L
`RHr&o0)I$T9p7$8IWݨdYas1BZrHͤKVn:
DHGj&p rY[0)I$T9}i%ܿޅL-$D>0)&*L
IAB!0))orPLJʛD>0){U>^qPLJʛnT{[gB!0))oQlryoG8w̨}V}L
IW/cGA2gPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLI(I_ly.dcj:7 &%卫I?zMJ-?K5i%L6j0j=M۞&uc-7o%]vYç^+LJ`LΫϨ{[6t)9u[gxnzď[6>I(I?>lvYy{ؤ=ʹ<m6S'
csZ.}~m4Ɍ`RRw4#ԉaJX|mm4ɜӚ\=L=JjRԬ˳-1g_~ՔfZj;b`gIIyo-[yN{o&=h٪O
zQlh=bsnj¤{\|nMtsN:8[nC.ٰy}]kȹW=6/5E^57Vvs{kH[L]\֪헿~jz%:WпiֈQeR"
YsfczkNn\U/iZOjYd۰g6R1}mj}߮&~,iTŧmZ>fF;6?ܛZЃ-kӏy/]=~ؿz=z)fcn+ϭIJ2^WcƱl|lRpKOi֮15HG?@ʪY)MzJM&,,Bo1fɀB>9l憉a8Hw±a>.87_?J8cRkȤ!JmƤ`[[?4$ɭ֧f7f4N7-:x]l01'xjΌryJD&3W:[3&`Jm,~zӺJU
IsI['LZ*ɧMj_;kjj./iFvF5&/`{kMg+Ujqҥ&d֭clY>|7(Jf1ZsmUmCjǤksTk:@g({jܭ5ǤOIƵ_d#5v\x^{^6cҴ4$zjD9xѕHcRs뜙4,\
`_vL~<?jdzء+fοq)~43&cJskƤ=D'GR0WH36i|sFtMᛚ0tp|CLC%M0,ib8*WtL)Zxl.rj
\'au<hǎ?[C;{:)!}$]ʤr9+h殩֨ЃaoҬިqW<FRgd^pA2l{3ý\'3JskƤ\{mcRiEXqULYCNZfMµ_BMѿlS*Ұ1`'ujcنh\i{0cR Tx5D5юO*>#&~SMrژ{~gݿ+Yi[c=᪥iHuMfɏBYI5hǀ-Z,qz>Iܚ1t\<vIm+4V<mRW52&VmWj`5ӚănsLjlH`ܕX|cvVH9\;>숁sgsܻKlr+:ʎ69&(R*.M*/-]ԍ6jS^'pUИ4Ť{\|n]T#Jt6Ր;$)4T5d7iUtLj&!va֤ZVj({J21)ɿh'.XlmcR
nTE7ζolO++aϙ9ÿ7b=ft>.MzwoW7CI)͍ϣ=HLjW93W˲2_QȤ`<ж-
wedIK2k'k֙Qe㷘42-_lȤķgm/~JCN7;:t
iՉ^?ϯY3F&eLg֥̕I%vcj|ǑLW>{ҥIN86̒F&(OTOIn}q/(dRm84>[4Տ&P1j3I;l6&%}0v].F&5K~3myc"4o_%)fōf')5WݧvLƤNJs7\&#| 'w_58a`(ߤe}.8w{5 Ի[pg͙Yפ6SZbr'[3_QԤ0Y aCԿ
m8.o50W)UMZ=4*k=HcǟVry6&%}*=mo=ԓj5ԤI?ye NRoKڭGvӯO8u@5rJJ&|{FFJ+7tԋ+g)IWoX)dH}C!QWM`ԏbo8N:iKM:rZƧI7zz/ &[VئY=
mC䬰Z1+̭VU3kE,ğ,,j0`Rw&8alM2ڬo_R۲ASk*\9W:x$(isOR𰪺ՔaCmE9LifWYLAL
-0i7PLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJLIPLJʛnK%>gPLJʛnTz[k7\%B!0))oW$S}%+VB!0))orPLJʛD>0)&*L
IAB!0))orHӤW̘*BLh|ѽDHGj&Oo+5ä$$RI;[fcRFҩr˸>=B/DB'0)xII"ʁ$P L
`RHr&o0)I$T9p"T˦nkI*NP!esi
endstream
endobj
65 0 obj
<</Type /XObject
/Subtype /Image
/Width 622
/Height 180
/ColorSpace /DeviceGray
/BitsPerComponent 8
/Filter /FlateDecode
/Length 973
>> stream
x/lg,((00((4((((((0xwv'mj'E#tGYZr
=-Zx2SQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍$HS[:
=R3T6rzL'?vo]+;ORul;<J^_C).٧zVy묽xqS-/vjfҭ_mfWIv֞_J|NJNܮ6rڼUm6jFmwϙ[[[ӿM6:m'zj
[\_?lvEEvmmCfm{|Z?wjQA}~ztfme7չQK)A3P^Mh.Q|r|eU؛st4U]5COn~qDQ9oS6oS6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍6rFQ9j#Gm䨍F=m
endstream
endobj
61 0 obj
<</Type /Font
/Subtype /Type0
/BaseFont /TrebuchetMS-Bold
/Encoding /Identity-H
/DescendantFonts [66 0 R]
/ToUnicode 67 0 R
>>
endobj
62 0 obj
<</Type /Font
/Subtype /Type0
/BaseFont /ArialMT
/Encoding /Identity-H
/DescendantFonts [68 0 R]
/ToUnicode 69 0 R
>>
endobj
63 0 obj
<</Type /Font
/Subtype /Type0
/BaseFont /Arial-BoldMT
/Encoding /Identity-H
/DescendantFonts [70 0 R]
/ToUnicode 71 0 R
>>
endobj
66 0 obj
<</Type /Font
/FontDescriptor 72 0 R
/BaseFont /TrebuchetMS-Bold
/Subtype /CIDFontType2
/CIDToGIDMap /Identity
/CIDSystemInfo <</Registry (Adobe)
/Ordering (Identity)
/Supplement 0
>>
/W [0 [500 0 0 301.2695] 17 [367.1875] 18 36 585.9375 37 [595.2148 611.8164 0 568.8477 583.4961 0 0 278.3203 0 0 0 745.1172 667.4805 703.125 586.9141 0 610.8398 511.2305 0 677.7344 0 883.7891] 68 [532.7148 0 511.7188 580.5664 574.707 369.6289 501.9531 592.7734 298.3398 0 547.8516 294.9219 859.375 590.332 565.918 582.5195 0 427.2461 430.6641 396.4844 590.8203 527.3438 783.6914 0 533.6914]]
>>
endobj
72 0 obj
<</Type /FontDescriptor
/FontFile2 73 0 R
/FontName /TrebuchetMS-Bold
/Flags 4
/Ascent 938.9648
/Descent -222.168
/StemV 126.9531
/CapHeight 0
/ItalicAngle 0
/FontBBox [-100.5859 -269.5313 1129.8828 980.4688]
>>
endobj
73 0 obj
<</Length1 19216
/Filter /FlateDecode
/Length 11919
>> stream
x{{\UZɁ# 4ң\
x"\D4-kRUji43CQiͼX͔E)L5oMFr̩~yXgg^{u 5Tֽ`n?kK+Tku cR gTICM<WYؼ # %[f>~3LP]]YaѤu_?tpƇU+N>I]UMýj=Z`@l#_po1g_RQ[`y'Ϳeo Ok~KwZIY;ItVA>(qbwZx0?iA!(0+P}$| / Onq++!N=qh9HMॶ~3}R8PnC; d<Bp3mM9=KORt#T Oq"[s0UOmV[`+
Z7b**R!<GmD#N#zJNv_%'"@cwAM#0S5czeHV6ZG\8V0A+?JLi1J
0NJ3Ԗ ab;`44P OuӺ{$<pc wTv%p.i/оz匜G+2QBI$:ѾduwpG;r9&|hH HLZ(azJFc臭uJ9ȊG Kw,%c\bv#6!SmO˝%|^>IkQ@zQrFw%XF]=4C_|`/An{M-D>
zu(jHvG=uI)zګ՛a&\\\BvbͿvJzKdO=q5l蝓^e%s]ȁ$TN샗b7\'{K.;6Yn7F2\0\kO+^yAJz~1|_eۥT&H'ݽu(ϙkVYF(:"
^O%Z9nZwdu.L_r=\Fu/uP ;` }y!I;.=C%;`NJs,Gmw<
+AhUezo
LkZ=o:تICU|m`nxm;$"5t5z?J@}!5\3]Au/Pd(]E/O'јj̠wRO4^RCf@i!2b̉r3|w ~ԫatuZ'
Co?K>xȓxyɨh]T~wӸ{.R]pQ#5_I/a^$v}I@sdE>Vö4r`}Hh.?ϐʽTM*ϓ=7sΤ8)ℓ/)f
zm|jӏ
ְ{,y1Pc}=1}7h+˞!}PiݝX46Tد=CW5/L%`6Ŏz鱗z$YC!P$K4?P$+kpG"1}b^/8 )y)C>"c/s諳3?n|vNn^~k'N<e괢3f*.)=gnາ
7AªEk,]VWиiEsUׯ^su7[~պaͷv;{ݺmC}w~G<}O?SOO~_x_9rj?ozNp,մUৼq4܀k.fGktIUzH:&[)\L-Dzy<<<ў,Ogw]J|D|T|B%5'_ćKKɾԾg<CiNv>IsLs.=,lw[_4w<z~?ccz^@s1/ﱻCn ]tߵkEWއ}qP3z3gZζtyvY~,ڙNo= w,?]ta;q>-IV{Ň=m+?Ѳ,0
vGw Pp7| _m
l@3/`8Gãp,B%
ῠoTwp'mlEPa RxA=A4B,dVJj8ZN17Eg$bPB}<
hG:Q1]9B7~?v?
m 7~;F0}0b_1dILf
ST^3DI,#88`fea,E`
\,E17f1G1
c8I8p
;q8a7`.a>q"N84,8g,؉X8\uXXp>.J\UX
۰bkq .eXp6cdp^fc)x^Eh.6~
</ K N(??v5YW:tHJބhaM*Rry垶m oA*<Tc6O O(dAO֞J-[i$KSOntu
=my+7x-lovyH
7[֖ۏcP ,9w~zMJ̭X6uZInNl||l1Vݦ<5gٟ[9`^`%mRu$n6Л6pGѴʶoNn`/
VX;)g7@{;.¨Q G{D=8o!/>Kۺi%w̋= m<9i^[[nn[73$/~=mҀyyYQɛی6!
c}E9-aZI["
߃%ѭ͕^m9/O|,ﴒÐ}fO0J9mQٴ)r7,XWs$6_J+T]:Ō
br-QXUx;>],O 2Š؏ơ)17IkvAl|i|,<)mec9<?Z34Г[s?T14Fi>11v4IdThQw1S=%Jot?Zoto%b
ܤ{oPx6MhR'?NfPmyMM*u8n-Ӗu?9-6Gy5{',^+e(14ROnc~/nߏ.9kÌǗOm%=E-oH /{NʢB? :X!3f1e=Ҝq L#@0&gx\ A1,S&7h`h pmӖMO4=zM6`Y:vwcǃ;ߡzv%q֭Y5mkάQE՞[Vr_Si<E[ZZ${N\NjΖ9O䨐LITScEז`͍7z85{}h=JwmU7뺮tiEm9%o/m/b-
x-vzI֫JGxeU\x,Z_칡2Q7fϗ[ 9Ҝà41uu?,W|0])_WCKN3t'!H٫rrQtzSw:*._PgC }:N
4)}Sz2g/yK&l#0 Z)wO8Q^B983B)*;&9ʘ,~'P_aItAJ#|jyXQVq$e=//?>Yo#d~yB:*>eZS6g3i[yj6X
[NZs~~Q>kXI@
҃N
*v"vuu`jY"xg: 1:eEގߤ>Ƣ?d8N=}#FEETo}55b"v%(/ ~Ҥ1&1c:NԮ#-ީd;٨qU-{9 ϡt0
,S/KjEߠ(g%vs]tS8@@d VӹwE9VժpV8eZYY+Se@` 3pdo42h
#76xbgb&oCj6awAy~K9f-{,eL:Ir#}2rR\շﶾ}Z<jb`2%iN3>'2.,RT;g(Q1>F;:h-펷o>V1bכWF {ܴ|;V
M:fU.xC?][OSo~LMTKm0(gVIVdV٦6Yf,f v݂+M
&Dƕr8Ց8.*CHxdgWm'@;6x#Wzد$GHIU4LA*+V*"F>$Zt9mv4ypt8Gq<. ttq 9
:I$:g|dSHΆK
ZX%Ev?]ߞ\v|5wcs6;~*ٯ\כ$ qp@ƨ$dtlܶ$Vlk`saډ!.(I@nUՈHx=NH|M~=z_&C9gwMN
vw2
[Vx)3-ͫl}mTЮFA<<j{o_&mW Ћp)"7S+JjmhWZl9趴Z%:GC7&w 149]bOG'}&-r̄Fя3>#tZ(tmWZN^;ɤòER
C~Ln:<Mɔ~s(l/=,xO=fbҐGA$Zo6!bK"a_nU<f'k.I-AcFF4#UDldɷ$&Y}|2*kU|'0ي%jKeeEX
Qy4.8Nx]V4e`3;ڹigz@<^H `B!,@ 5.HWxzϭ{.>Miq?{כVӳWK?^o=\|gB0(λf$M G$Yn,+P`R
tz4dU W2x~˶_Z |Tpyyм&#YOGMwT>Xo[]Q~^BMRf΅
k!U
2 gRWWk1 .db tF>,ƹep')/(5K"c [,X@哆0楣 ?Q0YL[MmѶL[mMј%1IWdE<P5Եh-Y!UfN/Iҡ<CfZ5h5%1EQ&ɢ[-I3MI&ق-eKd6JۤQt^R&MvIr*UKK>!kr
f>1PV#&a2[`*`Q42y,lB:[JRiG`L
wDsB.̨kRyLL^\=N Ύ1i^#7u4g3QxAf
Y|,PR$hrt#&R%E2C-TLaj!r$*-j!lrH-BTlVwLZ0@Hq/~Bv=|m:FuaOu۷J;yIPJ"C-
JXX86K\SjNO0&HĞ$"
BbcDW M-J1%p2e` }=xgا8
[;)pa;1PcRSnhPɥ@5!Mu9!c|v`(IL fs8sMP|WtCzqY_8y%Spڗr~s :^
֚%USPsދLBL[`VZdG)n%I)J#F5ٜRD%f h]
y^tk5"PL#Ν.rFpՋp}X ծԛt'5[jgtى-U-D<n*,s;w9::UuFATr-Pjfe9HU&K<
7EU&(zU4>GCJL( ϛ0Z%)iø L"3=J ˈ aHI*$7jKD^={hK)Ϟo >7<d=g+xÆ?S}'?5%X!\k0ʿrd2ǘ9s.w'
znᆑ}0
NTgglEn
7+/ŭ/9
_J-"8\ 2k
5yISBUEn6S$$YS,yVE`HM2do355Se:2?cϿ}CJ6'3v`[tvLJ.^1<'q.5ytR;<|A>ɇ#JЎ8a8](r #?.gU0 ^j.AWDlJUVRm^L3YB~le@j~"wKܪTKaE+E#ڑt8JՎj9^ut|Ⰳ#Sd2/c-y;NY;*0x+8^!)1ODVG@*?gtE4t1%FxfM>rV<w>7S_As}#c^,nt /7Wͭm]f'!L1"7b&F(eB,[7$RgK:prf#burs=N8Uق8\3
Dz "ť)פt7
^'!w|K/.GpEs<b,Fw8ϻO}%?.f6)Wsߎ8jW\Ja&&ed9y>Xkնi40H/2ͲŬ zpd]YY':?ev3F -rR:F̸{ vcU:;o-_}AguRcC6E$UWlf%t~LA0N?{>})hBn/9p_x~xsxkp5]qfV6.AQyjxJit'Eڵ$IXUZ&khW 麸Q.,vQh;j(oE
]⣢B"iJ']ۍV&!zSs[fqK[LY
)g'}N%|LRώ4Y_eܵfc=i;WCML91HBHYQlW#3d##
!^Jf/Jɟ|7;{K)4,إRűWD;+}, W&[3I_Di#y})))-)rJorR_l}@[1dJD'kwDrw\t䈢̸8%x'!$M'.J]j#{+#\p|oQ>os(LlH
^q}n-tݙC4<MTߎz
g:xo!@n]#pIcN)--*UxşY:0ݽgG6uS~~{XSX7oZ]-iA+e~>O]u$}Rx3oM:"n6m/xz/.TrJY!6ivg*ZnWQPLKNuI'6UPyN|']sc1IW"5wba̙YW1tIڿX}VoٺnF=,:,9LBJ{`EbH$iRV::Z4U(HIf*;.PbEs<pcH:9K#tvb% nŧ}$KE]U,8a?3WB#lfPA.U&mGr>t-R$kQ7o0w"^#|N
ބ+Fߺ8~K/$zD=EC_ܮ8GJ#.iILyީ:=ztt4]єDG]QRQ(*άX-JIȯNn!2tWܐB7NϙՑJStM~3<v}K߳#Sy.gm0t V![N0j0+@
ٷЅG;oaKrꂖs]ˌGSlrPڹZۭJ U:9*
UUN99nS(M"$Rep8#DBgbډA|`_Bici
vwCo8+q18WA 8}_7yvM6Qo1zŬmg]MRMM3B|:tOr~|,.n#oVTy|g)/_It9Hsc,_˳b||$b[j;h;j3T$u!
C>Jkjf ̊Fh7.' =fߺ)/eGC9uފ<v8q.knu~3tw#+`Qozr) )AGۓXvn!I'vͮL0-㋩ii+`9ɇ*oQVEm;):iAQn9\n882)瑊(+e+@=w\CicS<=N_-% 銒
o[Zw]%kȮZ?>sV_39W=pu>RN^+?ff}K?k:W5II-pXػ
dHȌ``SiH5ANA#K쏔+ e۩ %?d-H_-={rC_^n,qw $.RTG '9/yB4-E2PV
r'3ɳҨg&7wyWt'[JF3߿s]rmH2GV%Iףj}[%jS2E$<b`kP_W *ʇGVEUr=ZT5'.8y%N,{v/&
vj&
hd&:&qikm6]3T-*7>)ePnłl'5k}LO"9Z፧,k78ƆEog8<`ѻ^7ףV/E&B]U+X{oFp]#sq.?<'nZN:ZJbZ%=$}:2iJ4I>a$)Z1:ba-;bBlaf7OIe&L6a˕
H`Rb&I05-A(td3GįW;D 9ރUC'6"9?5%J{v#خ#wTҠ=z32.LC}Fo\8k3b2R
x]@Gː _\z+6pS&b5!4p\axiLWhn*xXЏ-6p
,_`
ô&BNr,pՇk.CvNVΧ>7=ě^l2үc;8}~<*8?CNzC
E ?!NeDgി&EWq~}c(8A?9kj5p_8er/~e[/^FoLVCV6TU/$>jHϤ
-\^PbyͲC=jk=PXٰr
WW.Lv}h*iii-m0Ac5a@&tLoUu9Trh0XJ&4oB YzYzC6,:XI5aJ)P]6,TgTSCRJ-㠖ec6J*+\!V00jи+a<z(f nzB=ٓSJb\K=DgQRqS!Fv"EpiVTK[*xF(J!?9B*e/f5\ˉjHb1GP6|7<j~|f.%WXOߖ {ahi1?AXQXm?>>eRC
&C7C\/2X`Hj9{Ŀq֟Xc
V)[HK]泇v`+MZA_-o4f_)*
Md=T)gOxb13@qYՊYV
#vƨ}H-![һKUW0_^!VKlvQݻq;|!U>fcx=TEFa7.NLOƒ~ZB1b`?E~W#Cro0(hƝ` }#ܨ\jH?um\-"MTz3ƼR
/!;jzO5CH\~+ha?O/nf؛_,ȟSo?^ ~:Dw39N#_-gA(Sȅ_uEf?pVWi_-u$_Dj徠i
endstream
endobj
67 0 obj
<</Filter /FlateDecode
/Length 329
>> stream
x]n0E|"W"!4I%}@!Te_3CS k95F{QYr07']MSZ-FqahL?FUXw3x(~u
6W<ۛ0,)Nϝ}`1ʶ
ymU|@F
&IpBT%aլz
T^~uP$"$H)!9сD2#+`|7III+rrPPkAAj-2[$d'
<%yNll)TB<Õb= Y^20%8e0.y
endstream
endobj
68 0 obj
<</Type /Font
/FontDescriptor 74 0 R
/BaseFont /ArialMT
/Subtype /CIDFontType2
/CIDToGIDMap /Identity
/CIDSystemInfo <</Registry (Adobe)
/Ordering (Identity)
/Supplement 0
>>
/W [0 [750] 1 15 277.832 16 [333.0078 277.832 277.832] 19 31 556.1523 32 [583.9844] 33 37 666.9922 38 39 722.168 41 [610.8398 777.832] 49 [722.168] 54 [666.9922 610.8398 722.168] 66 69 556.1523 70 [500 556.1523 556.1523 277.832 556.1523 556.1523 222.168 222.168 500 222.168 833.0078] 81 84 556.1523 85 [333.0078 500 277.832 556.1523 500 722.168] 91 93 500]
>>
endobj
74 0 obj
<</Type /FontDescriptor
/FontFile2 75 0 R
/FontName /ArialMT
/Flags 4
/Ascent 905.2734
/Descent -211.9141
/StemV 87.8906
/CapHeight 715.8203
/ItalicAngle 0
/FontBBox [-664.5508 -324.707 2028.3203 1037.1094]
>>
endobj
75 0 obj
<</Length1 42552
/Filter /FlateDecode
/Length 22635
>> stream
xy|S?9s$mi4M
Mٺ JR@W)R(.,EJxzE\@TP\".~{E|f̜g9i Z(O4|;hd<8x\% O@8 7a`i=@#yT1aԨcǛak;s}%"Ј~m1bR
P:u{ďC8
;G\X;Ȑ*AgשiilY5'JʭjB[#6"Z~GKzxɃ #46 LA^Q)ڄD~
Y #aПnB"ua5-8EE8e]xmsZU.
`w`9Lob_)c~3; :f
`3x(=7bz kMe`!ay}|Β|Sס)+ s)gއX}tG !mXHށE&by9]vy.s1qHH
967|sN81vk/ _DelwbWȄRc (g ֊A@|:
'8^byD%lAs1q(_s3/)0zc
f-@,žsp]{b_7`^.q|<#somֽup`UΝ$o|Q9MXg<Rc"gQཷ9vHD4D\DlBE@}+(2eS
!MS33x06
&.8u:e*=='u D٪\p\V>:\f(5'Q{\+:T Fe}nM:
63!hS6@G6:
v p>X7D*ĵw5 2FynG~gMf'(n'yWNg)wTEqq''h3O8U\'Hcby9
5RF }bB1XO<y,#~ eNJr<Ѧa_$G:9M:Z'wRn2B*}Ņ(#~E9zDhF#D5M|^@N>ӱwȧN*{8͟Gn㸍vۙw[ڗm(QN>WQG;}8,$U-R?Cpo~ڨ?_K#堭b&ڳ͊Ph_e|jiq*A'{,+B88O q}$e0W8o &_8w22~$ *σj
Uh'N@ămPxmb\2mT!6ʏ
/pgJS'~buh\
>sǂ~@ZiPZ؎v!"M,EUގElB?6sD;' _˰lv]eP.{1y<19qR2`wQV=|
_$D(F#x#T3#MТŕѬ/dMLЀ}<-`;OJX, !Ɩt#̯,/ (v}6ۉQNR(_苺 wzJ9XGhXpǘi'}8^m8֛ߌO'.uӀ{/Bk{eBxlA'D:*t7l2ѐe+9NGĮHcl8~/m)Xb
⽺{wBL{\pYkA~"PWrH</˓w䱟o@Acocz 8sus
\وB?A|TbIHFi_a
L|Wx\)~rR=wߙs]</܊:9)`;wa{!MX #/uC)8Vf)1e2EwFsܼq_rb[;d #텴u)Q{q<%NǸg ;G /ne0r;q<#O`| A[rEC~ek#6aHTIX~"0e !Wڱl_*^%]c0/LLukn7"ka~* 8D?LD49x<o?[1Py!qu;u[>+B}=NOcJy,g%~Reı/ؙǯ<v+ҍHI2>|KQT=1)M?`BsEfdHB }~!AԂW% KLǺl{=Şeϳ=U9N/)~/^tRZH=xX%-H.}G?w;ɝ3-ܹVv ;<'c${ޞ'=[ilHMOv$';&N^|Fg9})t_/7W[[{ܷѷW;;;{w?o/$^]jq^mRMMs[UnWݭzf'7\{#|#'A%"F}&MC-gŰl [Vul{U%1$*F9瑂RrjRi綺ȹ4\;'ʹ1ȹsn\/79gBٓ+Jp8&V6gȹ797?Q8GjKnVn_ݷ7ni+dLׄF3}J*2%nlh.ڴ090FAghugnލ7>qƚ;nl7fߘwod|]ՙȩ'||4̽@z/sN?ܖsϮ>/gϢe>llٔ3=s3?|&9N_:}WO:NpzmN>r:tK?0N^+ߕw迾Z;r%MoOAUR#tEKw#È+Ɋ.a9Xh4;ZY?|[VajrXV،!Bu.<W_E+l_g`ކ0JG`8G[18/H O#e;
ca<J&@1LIPS`24QG`&+f,(9=jD P
7#OC
Day<G֣-HDCDG6:F6ȋ%l%v$/
ݤ)#KHKWH%ѓ b$&KGUrYJ^# HyA DA$IqDD"o'|_qI&wymKR1r|H>"O0BH%H}"9'|4Or\%B_3\#owH5AjH-IG?PJʨH%*SUS
i@TG4h,fҐSiDS+Q;u꤉4.L%4z>M.^sBaLX!<.<)EU.v ~5u-]( sKpY"L:NjzCZAޅ6؋%mevDnVe+g?!V^go7a{eG{}v}C}NSRS4;þ`g9v}ɾb_"}.#~bWU/3]cv~g?Y5rZF`/7qw*0<
BE݄BwG+/z W-b ˨/*+Hk2<q2
*rĊ$6BaP)lϦ!-bY[ -g+#?3<d=BTE{D E1xw)0QUjV1Mqxfw$8\nO7OW?-ޠaM226kӢe=۴m߾C{ԹKn{ջO`@AEaaG5zq0xR)SMGf̜5tΣs_p%K-_U?֬]3>~Mo~ŗlݶ]ر]{*{rWCU~y;~''N~N칻nx7v;ލƎwcǻ;[浺'eͲ234nAz ~T/śq j7ŚNQdId%m_Bر{c[
Bn,j{H澽fkf0R3x&1s!A;muW=azY;o;tYIwQ+6pFsH;?~ꨲvZM[o[ŤS!wnbmEMAAv!AHޣ_~Azo!TJ7!mHVq況%UeK+0(6x@0a
`Bև/c[x,6ͳeeݡ
=zïlK}cKz7:_.|&|V
1;lL.,=;w9wC{A;
wM1D:7)):Ouy{/
D=ԍ#95͡lhs?[ኌ[r>$0F,m{H>\NnޯKPZ-)n>zn$>莼\Т2C0*/wÐr6
hSUw'SZwf"/Jr7Q-B?ߩSeEQv}[.r{T(m?!FS4APPYgḂ$EU*JۇE#_6_W0C-[ޖmx2SeeE:7JPw?mf_e9GAB(,k+E*&DåAz{4teeeEe+åCnl?}Q61Np*$/-@^"-AD!+RL@FB\Uk`%%
3f\(T{/.="ݽj-"՚dEergT`~Aa"^ =Bx! EKBCa+\%r)^ܡĘ2ַ~
?_/a6=`kb=
Bs?gY4B!!#! d^'yJHON@Oa=CYN~%hM|ф5!dTҏ瘝_q\Z7@AOៀQ0uS'BH$9m Gƈ ;BEc7X~@+2(Bߧo+=BE}<xi#/ĺMDžF<D7
DaX|ȫpDXS苰I1-ʘ_-^ֻiпz-fſ|?o)LTLL L[oLᥒ>JJY@!!!`|lO!\HARړn"I,R:ҁ4@J4I髤9+nm)IJKHHi
)ufJ)7S!
Ӛ{Zepڃja%JHe{{"-2&HĆo2 M7!oxCBT! k'W(W^!W2+
CܥQtxdx'htƎ
'1$nI$,|kRp7AZM2JW$kZǓ ԑP4t;Ҍrg_lf(jwJKW]+)w\8mTJ[ܵRuXW>LgXrcx
v!` >s+9Еs5!"4l}ҩ7Iy`fdT0]^-M9].9QNͪXQҩ4*JR1U\>`dg SFʯ5pNS6Sj(t]$t
vNۄ:UឡfN!v KCtQ%AWI¼h~U!87YA,SlyL9ͥ(z
c-ZݩWжĂPO:~?_oH
Z{rUNR_X%_J=Uy=p"E=KSj#vSR:V7(uJ[aOc)#J#R^'Jtb$R8TqR_UE,Yeғ@џ?u6 Ӳ` (GLeqw-nECtPwxPo; ~n[[{+ӡ{VZ|aYv3~C(2n)S{VZ)hc1NloKmVƿا(\;:=jкAk~uߊ-۬dKM6<d
G+,<3<r
v%:zu
a[O)ԢLp3R[BAY2:ZJZPJ_CId2N)Ѩ K=KH=C6D[S(&Gi6)clJ<