diff options
author | Karl Berry <karl@freefriends.org> | 2008-11-20 16:56:11 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-11-20 16:56:11 +0000 |
commit | c0c091e5b6a1e5cc7816178df4d725290b8364ab (patch) | |
tree | 206ea9c94063a415d517e5f5cd115615e0f78484 | |
parent | 2ef1581f8d9e92ff91fb3bf3907af849c01c86bc (diff) |
texcount 2.1 (19nov08)
git-svn-id: svn://tug.org/texlive/trunk@11374 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-x | Build/source/texk/texlive/linked_scripts/TeXcount.pl | 1026 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/QuickReference.pdf | 1138 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/QuickReference.tex | 121 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/README | 5 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/TeXcount.pdf | bin | 139639 -> 147012 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/TeXcount.tex | 166 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/texcount/macros.tex | 39 | ||||
-rwxr-xr-x | Master/texmf-dist/scripts/texcount/TeXcount.pl | 1026 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 3 |
9 files changed, 2872 insertions, 652 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/TeXcount.pl b/Build/source/texk/texlive/linked_scripts/TeXcount.pl index 1ed70fc8a56..8b68e4984c0 100755 --- a/Build/source/texk/texlive/linked_scripts/TeXcount.pl +++ b/Build/source/texk/texlive/linked_scripts/TeXcount.pl @@ -2,15 +2,33 @@ use strict; use warnings; use Term::ANSIColor; -#--- --- ---# use POSIX qw(locale_h); use locale; setlocale(LC_CTYPE,"no_NO"); -my $versionnumber="2.0"; -my $versiondate="2008 Feb 10"; +my $versionnumber="2.1"; +my $versiondate="2008 Nov 02"; -#--- --- ---# +###### Set CMD specific settings and variables + +# Options and states +my $verbose=0; +my $showcodes=1; +my $showstates=0; +my $showsubcounts=0; +my $htmlstyle=0; +my $includeTeX=0; +my $briefsum=0; +my $totalflag=0; +my @sumweights; +my $globalworkdir=""; + +# Global variables +my $blankline=0; +my @filelist; +my $workdir; + +###### Set global settings and variables ### Macros for headers # Macros that identify headers: i.e. following token or @@ -109,10 +127,10 @@ my %TeXgroup=('document'=>1,'letter'=>1,'titlepage'=>0, my %TeXfloatinc=('\caption'=>[3]); ### Macros for including tex files -# Allows \macro{file} or \macro file. If the value is 1, the filetype .tex will -# be added if file is without a filetype; if the value is 0, this will not be -# done. -my %TeXfileinclude=('\input'=>0,'\include'=>1); +# Allows \macro{file} or \macro file. If the value is 0, the filename will +# be used as is; if it is 1, the filetype .tex will be added if the +# filename is without filetype; if it is 2, the filetype .tex will be added. +my %TeXfileinclude=('\input'=>1,'\include'=>2); ### Count labels # Labels used to describe the counts @@ -120,113 +138,284 @@ my @countlabel=('Files','Words in text','Words in headers', 'Words in float captions','Number of headers','Number of floats', 'Number of math inlines','Number of math displayed'); -# Styles +### Break points +# Definition of macros that define break points that start a new subcount. +# The values given are used as labels. +my %BreakPointsOptions; +$BreakPointsOptions{'none'}={}; +$BreakPointsOptions{'part'}={%{$BreakPointsOptions{'none'}},'\part'=>'Part'}; +$BreakPointsOptions{'chapter'}={%{$BreakPointsOptions{'part'}},'\chapter'=>'Chapter'}; +$BreakPointsOptions{'section'}={%{$BreakPointsOptions{'chapter'}},'\section'=>'Section'}; +$BreakPointsOptions{'subsection'}={%{$BreakPointsOptions{'section'}},'\subsection'=>'Subsection'}; +$BreakPointsOptions{'default'}=$BreakPointsOptions{'subsection'}; +my %BreakPoints=%{$BreakPointsOptions{'none'}}; + +### Print styles +# Definition of different print styles: maps of class labels +# to ANSI codes. Class labels are as used by HTML styles. my @STYLES=(); my %STYLE; $STYLES[0]={'error'=>'bold red'}; $STYLES[1]={%{$STYLES[0]}, 'word1'=>'blue','word2'=>'bold blue','word3'=>'blue', 'grouping'=>'red','document'=>'red','mathgroup'=>'magenta', - 'state'=>'cyan underline'}; + 'state'=>'cyan underline','sumcount'=>'yellow'}; $STYLES[2]={%{$STYLES[1]}, - 'word0'=>'yellow','word-1'=>'yellow', 'command'=>'green','exclgroup'=>'yellow','exclmath'=>'yellow', 'ignore'=>'cyan'}; $STYLES[3]={%{$STYLES[2]}, - 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow','fileinclude'=>'bold green'}; + 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow', + 'fileinclude'=>'bold green'}; $STYLES[4]={%{$STYLES[3]}}; -# Options and states -my $verbose=0; -my $showstates=0; -my $htmlstyle=0; -my $blankline=0; -my $includeTeX=0; -my $briefsum=0; +### Word regexp pattern list +# List of regexp patterns that should be analysed as words. +my $specialchars='\\\\(ae|AE|o|O|aa|AA)'; +my $modifiedchars='\\\\[\'\"\`\~\^\=](\w|\{\w\})'; +my @WordPatterns=('(\w+\.)+\w+\.?','\w+([\-\']\w+)*'); +my @WordPatternsRelaxed=('([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\})+'); -#--- --- ---# +### Macro option regexp list +# List of regexp patterns to be gobbled as macro option in and after +# a macro. +my @MacroOptionPatterns=('\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\]'); +my @MacroOptionPatternsRelaxed=('\[[^\[\]\n]*\]'); -## SHORT HELP AND INFO -if (!defined @ARGV) { - print_version(); - print_syntax(); - print_reference(); - exit; -} elsif ($ARGV[0]=~/^(\-(h|\?|\-?help)|\/\?)$/) { - print_help(); - exit; -} elsif ($ARGV[0]=~/^\-?\-version$/) { - print_version(); - exit; -} elsif ($ARGV[0]=~/^\-?\-license$/) { - print_license(); - exit; -} - -# PROCESS ARGUMENTS AND FILES -my $totalcount=new_count(); -my @toplevelfiles; -my @filelist; -foreach my $arg (@ARGV) { - if ($arg eq '-noinc') {$includeTeX=0; next;} - if ($arg eq '-inc') {$includeTeX=1; next;} - if ($arg eq '-brief') {$briefsum=1; next;} - if ($arg eq '-v0') {$verbose=0; next;} - if ($arg eq '-v1') {$verbose=1; next;} - if ($arg eq '-vv' || $arg eq '-v2') {$verbose=2; next;} - if ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3; next;} - if ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1; next;} - if ($arg =~ /^\-showstate/ ){$showstates=1; next;} - if ($arg =~ /^\-html/ ) { - $ENV{'ANSI_COLORS_DISABLED'} = 1; - $htmlstyle = $arg eq '-htmlcore' ? 1 : 2; - if ($htmlstyle>1) {html_head();} - next; - } - if ($arg=~/^\-(nocol|nc$)/) { - $ENV{'ANSI_COLORS_DISABLED'} = 1; - next; - } - if ($arg=~/^\-/) { - print 'Invalid opton '.$arg."\n"; +###### Main script + +################################################### + +MAIN(@ARGV); + +################################################### + + +######### +######### Main routines +######### + +# MAIN ROUTINE: Handle arguments, then parse files +sub MAIN { + my @args=@_; + my @toplevelfiles=Parse_Arguments(@args); + Apply_Options(); + if (scalar(@toplevelfiles)==0) { + if ($showcodes>1) {print_help_style();} + else {print_error("No files specified.","p","error");} + } else { + conditional_print_help_style(); + my $totalcount=parse_file_list(@toplevelfiles); + conditional_print_total($totalcount); + } + Close_Output(); +} + +# Checks arguments, exits on exit condition +sub Check_Arguments { + my @args=@_; + if (!@args) { + print_version(); print_syntax(); + print_reference(); + exit; + } elsif ($args[0]=~/^(\-?\-(h|\?|help)|\/(\?|h))$/) { + print_help(); + exit; + } elsif ($args[0]=~/^\-?\-(ver|version)$/) { + print_version(); exit; + } elsif ($args[0]=~/^\-?\-(lic|license)$/) { + print_license(); + exit; + } + return 1; +} + +# Parses arguments, sets options (global) and returns file list +sub Parse_Arguments { + my @args=@_; + Check_Arguments(@args); + my @files; + foreach my $arg (@ARGV) { + if (Parse_Option($arg)) {next;} + if ($arg=~/^\-/) { + print 'Invalid opton '.$arg."\n"; + print_syntax(); + exit; + } + $arg=~s/\\/\//g; + push @files,$arg; + } + return @files; +} + +# Parse individual option parameters +sub Parse_Option { + my $arg=shift @_; + return parse_options_parsing($arg) + || parse_options_sums($arg) + || parse_options_output($arg) + || parse_options_format($arg) + ; +} + +sub parse_options_parsing { + my $arg=shift @_; + if ($arg eq '-inc') {$includeTeX=1;} + elsif ($arg eq '-noinc') {$includeTeX=0;} + elsif ($arg eq '-dir') {$globalworkdir=undef;} + elsif ($arg=~/^-dir=(.*)$/) {$globalworkdir=$1;} + elsif ($arg eq '-relaxed') { + @MacroOptionPatterns=@MacroOptionPatternsRelaxed; + @WordPatterns=@WordPatternsRelaxed; + } + else {return 0;} + return 1; +} + +sub parse_options_sums { + my $arg=shift @_; + if ($arg=~/^-sum(=(.+))?$/) {option_sum($2);} + elsif ($arg=~/^-(sub|subcounts?)(=(.+))?$/) {option_subcount($3);} + else {return 0;} + return 1; +} + +sub option_subcount { + my $arg=shift @_; + $showsubcounts=1; + if (!defined $arg) { + %BreakPoints=%{$BreakPointsOptions{'default'}}; + } elsif (my $option=$BreakPointsOptions{$arg}) { + %BreakPoints=%{$option}; + } else { + print STDERR "Warning: Option value ".$arg." not valid, using default instead.\n"; + %BreakPoints=%{$BreakPointsOptions{'default'}}; } - $arg=~s/\\/\//g; - push @toplevelfiles,$arg; } -%STYLE=%{$STYLES[$verbose]}; -for my $file (<@toplevelfiles>) { + +sub option_sum { + my $arg=shift @_; + if (!defined $arg) { + @sumweights=(1,1,1,0,0,1,1); + } elsif ($arg=~/^(\d+(,\d+){0,6})$/) { + @sumweights=split(',',$1); + } else { + print STDERR "Warning: Option value ".$arg." not valid, ignoring option.\n"; + } +} + +sub parse_options_format { + my $arg=shift @_; + if ($arg eq '-brief') {$briefsum=1; return 1;} + elsif ($arg eq '-total') {$totalflag=1; return 1;} + elsif ($arg eq '-1') {$briefsum=1;$totalflag=1;} + elsif ($arg eq "-html" ) {option_no_colours();$htmlstyle = 2;} + elsif ($arg eq "-htmlcore" ) {option_no_colours();$htmlstyle = 1;} + elsif ($arg=~/^\-(nocol|nc$)/) {option_no_colours();} + elsif ($arg eq '-codes') { + $showcodes=2; + if ($verbose==0) {$verbose=3;} + } + elsif ($arg eq '-nocodes') {$showcodes=0;} + else {return 0;} + return 1; +} + +sub parse_options_output { + my $arg=shift @_; + if ($arg eq "-v0") {$verbose=0;} + elsif ($arg eq "-v1") {$verbose=1;} + elsif ($arg eq '-vv' || $arg eq '-v2') {$verbose=2;} + elsif ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3;} + elsif ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1;} + elsif ($arg =~ /^\-showstates?$/ ){$showstates=1;} + else {return 0;} + return 1; +} + +# Parse file list and return total count +sub parse_file_list { + my @filelist=@_; + my $listtotalcount=new_count("TOTAL COUNT"); + for my $file (<@filelist>) { + my $filetotalcount=parse_file($file); + add_count($listtotalcount,$filetotalcount); + } + return $listtotalcount; +} + +# Parse file and included files, and return total count +sub parse_file { + my $file=shift @_; + $workdir=$globalworkdir; + if (!defined $workdir) { + $workdir=$file; + $workdir =~ s/^((.*[\\\/])?)[^\\\/]+$/$1/; + } @filelist=($file); + if ($htmlstyle) {print "\n<div class='filegroup'>\n";} + my $filetotalcount=new_count("SUM COUNT FOR ".$file); foreach my $f (@filelist) { my $tex=TeXfile($f); my $fpath=$f; - $fpath=~s/^(.*[\\\/])[^\\\/]+/$1/; + $fpath=~s/^((.*[\\\/])?)[^\\\/]+$/$1/; if (!defined $tex) { - print "File not found or not readable: ".$f."\n"; + #print_error("File not found or not readable: ".$f."\n"); + formatprint("File not found or not readable: ".$f."\n","p","error"); } else { parse($tex); - print "\n"; - print_count($tex->{'count'},'FILE: '.$f); - print "\n"; - add_count($totalcount,$tex->{'count'}); + my $filecount=add_subcount($tex); + if (!$totalflag) { + print_count($filecount); + print "\n"; + } + add_count($filetotalcount,$filecount); } } + if ($htmlstyle) {print "</div>\n\n";} + return $filetotalcount; } -if (${$totalcount}[0]>1) { - print "\n"; - formatprint('Total','h1'); - print_count($totalcount,'SUM'); + +###### +###### Subroutines +###### + +###### Option handling + +# Apply options to set values +sub Apply_Options { + %STYLE=%{$STYLES[$verbose]}; + if ($htmlstyle>1) {html_head();} } -if ($htmlstyle>1) { - html_tail(); + +# Close the output, e.g. adding HTML tail +sub Close_Output { + if ($htmlstyle>1) { + html_tail(); + } } +sub option_no_colours { + $ENV{'ANSI_COLORS_DISABLED'} = 1; +} +# Print count (total) if conditions are met +sub conditional_print_total { + my $sumcount=shift @_; + if ($totalflag || get_count($sumcount,0)>1) { + if ($totalflag && $briefsum && @sumweights) { + print total_count($sumcount); + } else { + if ($htmlstyle) { + formatprint("Total word count",'h2'); + } + print_count($sumcount); + } + } +} -######### -######### Subroutines -######### +###### TeX File handle sub TeXfile { my $filename=shift @_; @@ -235,7 +424,7 @@ sub TeXfile { } sub TeXcode { - my ($texcode,$filename)=@_; + my ($texcode,$filename,$title)=@_; my %TeX=(); $TeX{'filename'}=$filename; if (!defined $filename) { @@ -245,204 +434,39 @@ sub TeXcode { } else { $TeX{'filepath'}=''; } + if (defined $title) {} + elsif (defined $filename) {$title="FILE: ".$filename;} + else {$title="Word count";} $TeX{'line'}=$texcode; $TeX{'next'}=undef; $TeX{'type'}=undef; $TeX{'style'}=undef; $TeX{'printstate'}=undef; $TeX{'eof'}=0; - $TeX{'count'}=new_count(); - $TeX{'count'}[0]++; + my $countsum=new_count($title); + $TeX{'countsum'}=$countsum; + my $count=new_count("_top_"); + $TeX{'count'}=$count; + inc_count(\%TeX,0); + my @countlist=(); + $TeX{'countlist'}=\@countlist; + $countsum->{'subcounts'}=\@countlist; return \%TeX; } -sub set_style { - my ($tex,$style)=@_; - if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;} -} - -sub flush_style { - my ($tex,$style)=@_; - set_style($tex,$style); - flush_next($tex); -} - -sub line_return { - my $blank=shift @_; - if ($blank>$blankline) { - if ($htmlstyle) {print "<br>\n";} else {print "\n";} - $blankline++; - } -} - -sub print_style { - my ($text,$style,$state)=@_; - (($verbose>=0) && (defined $text) && (defined $style)) || return; - my $colour; - ($colour=$STYLE{$style}) || return; - if (($colour) && !($colour eq '-')) { - if ($htmlstyle) { - print "<span class='".$style."'>".$text."</span>"; - } else { - print Term::ANSIColor::colored($text,$colour); - } - if ($state) { - print_style($state,'state'); - } - $blankline=-1; - } -} - -sub print_error { - my $text=shift @_; - line_return(1); - print_style("### ".$text." ###",'error'); - line_return(1); -} - -sub formatprint { - my ($text,$tag,$class)=@_; - my $break=($text=~s/\n$//); - if ($htmlstyle && defined $tag) { - print '<'.$tag; - if ($class) {print " class='".$class."'";} - print '>'.$text.'</'.$tag.'>'; - } else { - print $text; - } - if ($break) {print "\n";} -} - sub read_file { my $filename=shift @_; open(FH,"<".$filename."") || return undef; if ($verbose) { - #line_return(1); formatprint("File: ".$filename."\n",'h2'); $blankline=0; } - my @text=(); - while (my $line=<FH>) { - push @text,$line; - } + my @text=<FH>; close(FH); return join('',@text); } -sub next_token { - my $tex=shift @_; - my ($next,$type); - if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});} - $tex->{'style'}=undef; - while (defined ($next=get_next_token($tex))) { - $type=$tex->{'type'}; - if ($type==0) { - print_style($next,'comment'); - } elsif ($type==9) { - if ($verbose) {line_return(1);} - } else { - return $next; - } - } - return $next; -} - -sub flush_next { - my $tex=shift @_; - if (defined $tex->{'next'}) { - print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'}); - } - $tex->{'printstate'}=undef; - $tex->{'style'}='-'; -} - -sub get_next_token { - # Token (or token group) category: - # 0: comment - # 1: word (or other forms of text or text components) - # 2: symbol (not word, e.g. punctuation) - # 3: macro - # 4: curly braces {} - # 5: brackets [] - # 6: maths - # 999: end of line or blank line - # 666: TeXcount instruction (%TC:instruction) - my $tex=shift @_; - my $next; - (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next; - (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next; - (defined ($next=get_token($tex,'\n',9))) && return $next; - (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next; - (defined ($next=get_token($tex,'(\w+\.)+\w+\.?',1))) && return $next; - (defined ($next=get_token($tex,'\w+([\-\']\w+)*',1))) && return $next; - (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next; - (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next; - (defined ($next=get_token($tex,'[\{\}]',4))) && return $next; - (defined ($next=get_token($tex,'[\[\]]',5))) && return $next; - (defined ($next=get_token($tex,'\$\$',6))) && return $next; - (defined ($next=get_token($tex,'\$',6))) && return $next; - (defined ($next=get_token($tex,'.',999))) && return $next; - (defined ($next=get_token($tex,'[^\s]+',999))) && return $next; - $tex->{'eof'}=1; - return undef; -} - -sub get_token { - my ($tex,$regexp,$type)=@_; - if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");} - if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});} - if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) { - $tex->{'next'}=$1; - $tex->{'type'}=$type; - return $1; - } - return undef; -} - -sub new_count { - my @count=(0,0,0,0,0,0,0,0); - # files, text words, header words, float words, - # headers, floats, math-inline, math-display; - return \@count; -} - -sub count_word { - my ($count,$type,$word,$style,$verb)=@_; - ($word) || ($word=""); - ($style) || ($style=0); - ($verb) || ($verb=0); - if ($type>0) {${$count}[$type]++;} - if ($verb >= $verbose) { - } -} - -sub print_count { - my ($count,$header)=@_; - if ($briefsum) { - if ($htmlstyle) {print "<p class='count'>\n";} - print ${$count}[1]."+".${$count}[2]."+".${$count}[3]. - " (".${$count}[4]."/".${$count}[5]."/".${$count}[6]."/".${$count}[7].") ". - $header; - if ($htmlstyle) {print "</p>\n";} - return; - } - if ($htmlstyle) {print "<dl class='count'>\n";} - if (defined $header) { - formatprint($header."\n",'dt','header'); - } - for (my $i=1;$i<8;$i++) { - formatprint($countlabel[$i].': ','dt'); - formatprint(${$count}[$i]."\n",'dd'); - } - if ($htmlstyle) {print "</dl>\n";} -} - -sub add_count { - my ($a,$b)=@_; - for (my $i=0;$i<8;$i++) { - ${$a}[$i]+=${$b}[$i]; - } -} +###### Parsing routines sub parse { my ($tex)=@_; @@ -471,7 +495,6 @@ sub parse_unit { print_error("CRITICAL ERROR: Invalid parser status!"); exit; } - my $count=$tex->{'count'}; my $substat; if ($showstates) { if (defined $end) { @@ -509,7 +532,7 @@ sub parse_unit { } elsif ($tex->{'type'}==1) { # word if ($status>0) { - ${$count}[$status]++; + inc_count($tex,$status); set_style($tex,'word'.$status); } } elsif ($next eq '{') { @@ -519,25 +542,31 @@ sub parse_unit { set_style($tex,'ignore'); } elsif ($tex->{'type'}==3) { # macro call + if (my $label=$BreakPoints{$next}) { + if ($tex->{'line'}=~ /^[*]?(\s*\[.*?\])*\s*\{(.+?)\}/ ) { + $label=$label.': '.$2; + } + add_subcount($tex,$label); + } set_style($tex,'command'); if ($next eq '\begin' && $status!=-2) { - parse_begin_end($tex,$count,$status); + parse_begin_end($tex,$status); } elsif (($status==-1) && ($substat=$TeXfloatinc{$next})) { # text included from float gobble_macro_parms($tex,$substat); } elsif ($status==-9 && defined ($substat=$TeXpreamble{$next})) { # parse preamble include macros - if (defined $TeXheader{$next}) {${$count}[4]++;} + if (defined $TeXheader{$next}) {inc_count($tex,4);} gobble_macro_parms($tex,$substat,1); } elsif ($status<0) { # ignore gobble_option($tex); } elsif ($next eq '\(') { # math inline - parse_math($tex,$count,$status,6,'\)'); + parse_math($tex,$status,6,'\)'); } elsif ($next eq '\[') { # math display - parse_math($tex,$count,$status,7,'\]'); + parse_math($tex,$status,7,'\]'); } elsif ($next eq '\def') { # ignore \def... $tex->{'line'} =~ s/^([^\{]*)\{/\{/; @@ -546,14 +575,14 @@ sub parse_unit { parse_unit($tex,-2); } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) { # include file: queue up for parsing - parse_include_file($tex,$count,$status,$addsuffix); + parse_include_file($tex,$status,$addsuffix); } elsif (defined ($substat=$TeXmacro{$next})) { # macro: exclude options - if (defined $TeXheader{$next}) {${$count}[4]++;} + if (defined $TeXheader{$next}) {inc_count($tex,4);} gobble_macro_parms($tex,$substat,$status); } elsif (defined ($substat=$TeXmacroword{$next})) { # count macro as word (or a given number of words) - ${$count}[$status]+=$substat; + inc_count($tex,$status,$substat); set_style($tex,'word'.$status); } elsif ($next =~ /^\\[^\w\_]/) { } else { @@ -561,10 +590,12 @@ sub parse_unit { } } elsif ($next eq '$') { # math inline - parse_math($tex,$count,$status,6,'$'); + parse_math($tex,$status,6,'$'); } elsif ($next eq '$$') { # math display (unless already in inlined math) - if (! $end eq '$') {parse_math($tex,$count,$status,7,'$$');} + if (!(defined $end && $end eq '$')) { + parse_math($tex,$status,7,'$$'); + } } if (!defined $end) {return;} } @@ -573,21 +604,32 @@ sub parse_unit { sub gobble_option { my $tex=shift @_; flush_next($tex); - if ($tex->{'line'} =~ s/^(\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\])//) { - print_style($1,'option'); - return $1; + foreach my $pattern (@MacroOptionPatterns) { + if ($tex->{'line'}=~s/^($pattern)//) { + print_style($1,'option'); + return $1; + } } return undef; } sub parse_tc { my ($tex)=@_; + my $next=$tex->{'next'}; set_style($tex,'tc'); - if ($tex->{'next'}=~/^\%+TC:\s*(\w+)\s+([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) { - my $instr=$1; - my $macro=$2; - my $param=$3; - my $option=$5; + flush_next($tex); + if (!($next=~s/^\%+TC:\s*(\w+)\s*// )) { + print_error('Warning: TC command should have format %TC:instruction [macro] [parameters]'); + return; + }; + my $instr=$1; + if ($instr=~/^(break)$/) { + if ($instr eq 'break') {add_subcount($tex,$next);} + } elsif ($next=~/^([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) { + # Format = TC:word macro + my $macro=$1; + my $param=$2; + my $option=$4; if ($param=~/^\[([0-9,]+)\]$/) {$param=[split(',',$1)];} if (($instr eq 'macro') || ($instr eq 'exclude')) {$TeXmacro{$macro}=$param;} elsif ($instr eq 'header') {$TeXheader{$macro}=$param;$TeXmacro{$macro}=$param;} @@ -596,24 +638,34 @@ sub parse_tc { elsif ($instr eq 'group') {$TeXmacro{'begin'.$macro}=$param;$TeXgroup{$macro}=$option;} elsif ($instr eq 'floatinclude') {$TeXfloatinc{$macro}=$param;} elsif ($instr eq 'fileinclude') {$TeXfileinclude{$macro}=$param;} + elsif ($instr eq 'breakmacro') {$BreakPoints{$macro}=$param;} else {print_error("Warning: Unknown TC command: ".$instr);} - } elsif ($tex->{'next'}=~/^\%+TC:\s*(\w+)/) { - my $instr=$1; - print_error("Warning: Unknown TC command: ".$instr); + } elsif ($instr eq 'ignore') { + tc_ignore_input($tex); + } else { + print_error("Warning: Invalid TC command format: ".$instr); } } +sub tc_ignore_input { + my ($tex)=@_; + set_style($tex,'ignore'); + parse_unit($tex,-3,"%TC:endignore"); + set_style($tex,'tc'); + flush_next($tex); +} + sub parse_math { - my ($tex,$count,$status,$substat,$end)=@_; + my ($tex,$status,$substat,$end)=@_; my $localstyle=$status>0 ? 'mathgroup' : 'exclmath'; - if ($status>0) {${$count}[$substat]++;} + if ($status>0) {inc_count($tex,$substat);} set_style($tex,$localstyle); parse_unit($tex,0,$end); set_style($tex,$localstyle); } sub parse_begin_end { - my ($tex,$count,$status)=@_; + my ($tex,$status)=@_; my $localstyle=$status>0 ? 'grouping' : 'exclgroup'; flush_style($tex,$localstyle); gobble_option($tex); @@ -635,11 +687,11 @@ sub parse_begin_end { if ($status<=0 && $status<$substat) {$substat=$status;} if (($status>0) && ($substat==-1)) { # Count float - ${$count}[5]++; + inc_count($tex,5); } if ($status>0 and $substat>3) { # count item, exclude contents - ${$count}[$substat]++; + inc_count($tex,$substat); $substat=0; } parse_unit($tex,$substat,'\end'); @@ -653,7 +705,7 @@ sub parse_begin_end { } sub parse_include_file { - my ($tex,$count,$status,$addsuffix)=@_; + my ($tex,$status,$addsuffix)=@_; $tex->{'line'} =~ s/^\{([^\{\}\s]+)\}// || $tex->{'line'} =~ s/^\s*([^\{\}\%\\\s]+)// || return; @@ -661,8 +713,10 @@ sub parse_include_file { if ($status>0) { print_style($&,'fileinclude'); my $fname=$1; - if ($addsuffix && ($fname=~/^[^\.]+$/)) {$fname.='.tex';} - if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;} + if ($addsuffix==2) {$fname.='.tex';} + elsif ($addsuffix==1 && ($fname=~/^[^\.]+$/)) {$fname.='.tex';} + #if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;} + if ($includeTeX) {push @filelist,$workdir.$fname;} } else { print_style($&,'ignored'); } @@ -710,7 +764,264 @@ sub new_status { return $substat; } -### HTML context +sub next_token { + my $tex=shift @_; + my ($next,$type); + if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});} + $tex->{'style'}=undef; + while (defined ($next=get_next_token($tex))) { + $type=$tex->{'type'}; + if ($type==0) { + print_style($next,'comment'); + } elsif ($type==9) { + if ($verbose) {line_return(1,$tex);} + } else { + return $next; + } + } + return $next; +} + + +sub get_next_token { + # Token (or token group) category: + # 0: comment + # 1: word (or other forms of text or text components) + # 2: symbol (not word, e.g. punctuation) + # 3: macro + # 4: curly braces {} + # 5: brackets [] + # 6: maths + # 9: line break in file + # 999: end of line or blank line + # 666: TeXcount instruction (%TC:instruction) + my $tex=shift @_; + my $next; + (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next; + (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next; + (defined ($next=get_token($tex,'\n',9))) && return $next; + (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next; + foreach my $pattern (@WordPatterns) { + (defined ($next=get_token($tex,$pattern,1))) && return $next; + } + (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next; + (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next; + (defined ($next=get_token($tex,'[\{\}]',4))) && return $next; + (defined ($next=get_token($tex,'[\[\]]',5))) && return $next; + (defined ($next=get_token($tex,'\$\$',6))) && return $next; + (defined ($next=get_token($tex,'\$',6))) && return $next; + (defined ($next=get_token($tex,'.',999))) && return $next; + (defined ($next=get_token($tex,'[^\s]+',999))) && return $next; + $tex->{'eof'}=1; + return undef; +} + +sub get_token { + my ($tex,$regexp,$type)=@_; + if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");} + if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});} + if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) { + $tex->{'next'}=$1; + $tex->{'type'}=$type; + return $1; + } + return undef; +} + +###### Count handling routines + +sub new_count { + my ($title)=@_; + my @cnt=(0,0,0,0,0,0,0,0); + my %count=('count'=>\@cnt,'title'=>$title); + # files, text words, header words, float words, + # headers, floats, math-inline, math-display; + return \%count; +} + +sub inc_count { + my ($tex,$type,$value)=@_; + my $count=$tex->{'count'}; + if (!defined $value) {$value=1;} + ${$count->{'count'}}[$type]+=$value; +} + +sub get_count { + my ($count,$type)=@_; + return ${$count->{'count'}}[$type]; +} + +sub total_count { + my ($count)=@_; + my $sum=0; + for (my $i=scalar(@sumweights);$i-->0;) { + $sum+=get_count($count,$i+1)*$sumweights[$i]; + } + return $sum; +} + +sub print_count { + my ($count,$header)=@_; + if ($briefsum && @sumweights) { + print_count_total($count,$header); + } elsif ($briefsum) { + if ($htmlstyle) {print "<p class='briefcount'>";} + print_count_brief($count,$header); + if ($htmlstyle) {print "</p>\n";} + } else { + print_count_details($count,$header); + } +} + +sub print_count_with_header { + my ($count,$header)=@_; + if (!defined $header) {$header=$count->{'title'};} + if (!defined $header) {$header="";} + return $count,$header; +} + +sub print_count_total { + my ($count,$header)=print_count_with_header(@_); + if ($htmlstyle) {print "<p class='count'>".$header;} + print total_count($count); + if ($htmlstyle) {print "</p>\n";} + else {print ": ".$header;} +} + +sub print_count_brief { + my ($count,$header)=print_count_with_header(@_); + my $cnt=$count->{'count'}; + print ${$cnt}[1]."+".${$cnt}[2]."+".${$cnt}[3]. + " (".${$cnt}[4]."/".${$cnt}[5]."/".${$cnt}[6]."/".${$cnt}[7].") ". + $header; +} + +sub print_count_details { + my ($count,$header)=print_count_with_header(@_); + if ($htmlstyle) {print "<dl class='count'>\n";} + if (defined $header) { + formatprint($header."\n",'dt','header'); + } + if (get_count($count,0)>1) { + formatprint($countlabel[0].': ','dt'); + formatprint(get_count($count,0)."\n",'dd'); + } + if (@sumweights) { + formatprint('Sum count: ','dt'); + formatprint(total_count($count)."\n",'dd'); + } + for (my $i=1;$i<8;$i++) { + formatprint($countlabel[$i].': ','dt'); + formatprint(get_count($count,$i)."\n",'dd'); + } + my $subcounts=$count->{'subcounts'}; + if ($showsubcounts && defined $subcounts && scalar(@{$subcounts})>1) { + formatprint("Subcounts: text+headers+captions (#headers/#floats/#inlines/#displayed)\n",'dt'); + foreach my $subcount (@{$subcounts}) { + if ($htmlstyle) {print "<dd class='briefcount'>";} + print_count_brief($subcount); + if ($htmlstyle) {print "</dd>";} + print "\n"; + } + } + if ($htmlstyle) {print "</dl>\n";} +} + +sub add_count { + my ($a,$b)=@_; + for (my $i=0;$i<8;$i++) { + ${$a->{'count'}}[$i]+=${$b->{'count'}}[$i]; + } +} + +sub add_subcount { + my ($tex,$title)=@_; + add_count($tex->{'countsum'},$tex->{'count'}); + push @{$tex->{'countlist'}},$tex->{'count'}; + $tex->{'count'}=new_count($title); + return $tex->{'countsum'}; +} + +###### Printing routines + +sub set_style { + my ($tex,$style)=@_; + if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;} +} + +sub flush_style { + my ($tex,$style)=@_; + set_style($tex,$style); + flush_next($tex); +} + +sub line_return { + my ($blank,$tex)=@_; + if ($blank>$blankline) { + if ((defined $tex) && @sumweights) { + my $num=total_count($tex->{'count'}); + print_style(" [".$num."]","sumcount"); + } + linebreak(); + $blankline++; + } +} + +sub linebreak { + if ($htmlstyle) {print "<br>\n";} else {print "\n";} +} + +sub print_style { + my ($text,$style,$state)=@_; + (($verbose>=0) && (defined $text) && (defined $style)) || return 0; + my $colour; + ($colour=$STYLE{$style}) || return; + if (($colour) && !($colour eq '-')) { + if ($htmlstyle) { + print "<span class='".$style."'>".$text."</span>"; + } else { + print Term::ANSIColor::colored($text,$colour); + } + if ($state) { + print_style($state,'state'); + } + $blankline=-1; + return 1; + } else { + return 0; + } +} + +sub print_error { + my $text=shift @_; + line_return(1); + print_style("### ".$text." ###",'error'); + line_return(1); +} + +sub formatprint { + my ($text,$tag,$class)=@_; + my $break=($text=~s/\n$//); + if ($htmlstyle && defined $tag) { + print '<'.$tag; + if ($class) {print " class='".$class."'";} + print '>'.$text.'</'.$tag.'>'; + } else { + print $text; + } + if ($break) {print "\n";} +} + +sub flush_next { + my $tex=shift @_; + if (defined $tex->{'next'}) { + print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'}); + } + $tex->{'printstate'}=undef; + $tex->{'style'}='-'; +} + +###### HTML routines sub html_head { print ' @@ -718,13 +1029,11 @@ sub html_head { <head> <style> <!-- -body {width:100%;padding:5;margin:5 10 5 5;} +body {width:auto;padding:5;margin:5;} .error {font-weight:bold;color:#f00;font-style:italic;} -.parse {font-size: 80%; background: #eef;} .word1,.word2,.word3 {color: #009;} .word2 {font-weight: 700;} .word3 {font-style: italic;} -.word-1 {color: #66c;} .command {color: #c00;} .option {color: #cc0;} .grouping, .document {color: #900; font-weight:bold;} @@ -735,14 +1044,19 @@ body {width:100%;padding:5;margin:5 10 5 5;} .tc {color: #999; font-weight:bold;} .comment {color: #999; font-style: italic;} .state {color: #990; font-size: 70%;} +.sumcount {color: #999; font-size: 80%;} .fileinclude {color: #696; font-weight:bold;} dl.count {background: #cfc; color: 009;} -dl.count dt.header {font-weight: 700; font-style: italic; float: none;} -dl.count dt {clear: both; float: left;} -dl.count dd {font-weight: 700;} +dl.count dt.header {font-weight: bold; font-style: italic; float: none;} +dl.count dt {clear: both; float: left; margin-right: .5em;} +dl.count dd {font-weight: bold;} +dl.count dd.briefcount {font-weight: 700; clear: both; font-size:80%; font-weight:normal; margin-left:8pt;} .warning {color: #c00; font-weight: 700;} -.parse, .count {border: solid 1px #999; margin: 0pt; padding: 4pt;} +.parse, .count, .stylehelp, .filegroup {border: solid 1px #999; margin: 0pt; padding: 4pt;} +.parse {font-size: 80%; background: #eef;} .parse {border-bottom:none;} +.stylehelp {font-size: 80%; background: #ffc; margin-bottom: 8pt;} +.filegroup {background: #efe; margin-bottom: 8pt;} --> </style> </head> @@ -755,8 +1069,7 @@ sub html_tail { print '</body></html>'; } - -### HELP AND INFO +###### Help routines sub print_version { print "TeXcount version ".$versionnumber.", ".$versiondate.'.'; @@ -767,18 +1080,43 @@ sub print_syntax { Syntax: TeXcount.pl [options] files Options: + -relaxed Uses relaxed rules for word and option handling: + i.e. allows more general cases to be counted as + either words or macros. -v Verbose (same as -v3) -v0 Do not present parsing details -v1 Verbose: print parsed words, mark formulae -v2 More verbose: also print ignored text -v3 Even more verbose: include comments and options + -v4 Same as -v3 -showstate -showstate Show internal states (with verbose) -brief Only prints a brief, one line summary of counts + -sum, -sum= Make sum of all word and equation counts. May also + use -sum=#[,#] with up to 7 numbers to indicate how + each of the counts (text words, header words, caption + words, #headers, #floats, #inlined formulae, + #displayed formulae) are summed. The default sum (if + only -sum is used) is the same as -sum=1,1,1,0,0,1,1. + -sub, -sub= Generate subcounts. Option values are none, part, + chapter, section or subsection. Default (-sub) is set + to subsection, whereas unset is none. (Alternative + option name is -subcount.) -nc, -nocol No colours (colours require ANSI) - -inc Include tex files included in the document - -noinc Do not include included tex files (default) -html Output in HTML format -htmlcore Only HTML body contents + -inc Include tex files included in the document + -noinc Do not include included tex files (default) + -total Do not give sums per file, only total sum. + -1 Same as -brief and -total. Ensures there is only one + line of output. If used in conjunction with -sum, the + output will only be the total number. (NB: Character + is the number one, not the letter L.) + -dir, -dir= Specify the working directory using -dir=path. + Remember that the path must end with \ or /. If only + -dir is used, the directory of the parent file is used. + -codes Display output style code overview and explanation. + This is on by default. + -nocodes Do not display output style code overview. -h, -?, --help, /? Help --version Print version number --license License information @@ -821,6 +1159,37 @@ ensure that words in the text has been interpreted as such, whereas mathematical formulae and text/non-text in begin-end groups have been correctly interpreted. +Parsing instructions may be passed to TeXcount using comments +in the LaTeX files on the format + %TC:instruction arguments +where valid instructions for setting parsing rules, typically +set at the start of the document (applies globally), are: + %TC:macro [macro] [param.states] + macro handling rule, no. of and rules for parameters + %TC:macroword [macro] [number] + macro counted as a given number of words + %TC:header [macro] [param.states] + header macro rule, as macro but counts as one header + %TC:breakmacro [macro] [label] + macro causing subcount break point + %TC:group [name] [parsing-state] + begin-end-group handling rule + %TC:floatinclude [macro] [param.states] + as macro, but also counted inside floats + %TC:preambleinclude [macro] [param.states] + as macro, but also counted inside the preamble + %TC:fileinclue [macro] [rule] + file include, add .tex if rule=2, not if rule=0 +The [param.states] is used to indicate the number of parameters +used by the macro and the rules of handling each of these: format +is [#,#,...,#] with one number for each parameter, and main rules +are 0 to ignore and 1 to count as text. Parsing instructions +which may be used anywhere are: + %TC:ignore start block to ignore + %TC:endignore end block to ignore + %TC:break [title] add subcount break point here +See the documentation for more details. + Unix hint: Use \'less -r\' instead of just \'less\' to view output: the \'-r\' option makes less treat text formating codes properly. @@ -830,6 +1199,7 @@ options or the output will be riddled with colour codes. Instead, you can use -html to produce HTML code, write this to file and view with your favourite browser. '; + print_help_style(); print_reference(); } @@ -864,3 +1234,53 @@ The script has LPPL status "maintained" with Einar Andreas Rødland being the current maintainer. '; } + +sub print_help_style { + if ($verbose<=0) {return;} + formatprint("Format/colour codes of verbose output:","h2"); + print "\n\n"; + if ($htmlstyle) {print "<p class='stylehelp'>";} + help_style_line('Text which is counted',"word1","counted as text words"); + help_style_line('Header and title text',"word2","counted as header words"); + help_style_line('Caption text and footnotes',"word3","counted as caption words"); + help_style_line("Ignored text or code","ignore","excluded or ignored"); + help_style_line('\documentclass',"document","document start, beginning of preamble"); + help_style_line('\macro',"command","macro not counted, but parameters may be"); + help_style_line("[Macro options]","option","not counted"); + help_style_line('\begin{group} \end{group}',"grouping","begin/end group"); + help_style_line('\begin{group} \end{group}',"exclgroup","begin/end group in excluded region"); + help_style_line('$ $',"mathgroup","counted as one equation"); + help_style_line('$ $',"exclmath","equation in excluded region"); + help_style_line('% Comments',"comment","not counted"); + help_style_line('%TC:TeXcount instructions',"tc","not counted"); + help_style_line("File to include","fileinclude","not counted but file may be counted later"); + if ($showstates) { + help_style_line('[state]',"state","internal TeXcount state"); + } + if (@sumweights) { + help_style_line('[sumcount]',"sumcount","cumulative sum count"); + } + help_style_line("ERROR","error","TeXcount error message"); + if ($htmlstyle) {print "</p>";} + print "\n\n"; +} + +sub help_style_line { + my ($text,$style,$comment)=@_; + if ($htmlstyle) { + $comment=" .... ".$comment; + } else { + $comment=" .... ".$comment; + } + if (print_style($text,$style)) { + print $comment; + linebreak(); + } +} + +# Print output style codes if conditions are met +sub conditional_print_help_style { + if ($showcodes) {print_help_style();} + return $showcodes; +} + diff --git a/Master/texmf-dist/doc/support/texcount/QuickReference.pdf b/Master/texmf-dist/doc/support/texcount/QuickReference.pdf new file mode 100644 index 00000000000..0661b721af4 --- /dev/null +++ b/Master/texmf-dist/doc/support/texcount/QuickReference.pdf @@ -0,0 +1,1138 @@ +%PDF-1.2 +7 0 obj +<< +/Type/Encoding +/Differences[1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 11/breve/minus +14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal +147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis +161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] +>> +endobj +10 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F1 +/FontDescriptor 9 0 R +/BaseFont/ZDNJCT+NimbusRomNo9L-Regu +/FirstChar 1 +/LastChar 255 +/Widths[333 556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 +0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 +278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 +722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 +722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 +500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 +444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 +333 722 0 0 722 0 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 +564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 +889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 +722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 +500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500] +>> +endobj +13 0 obj +<< +/Type/Font +/Subtype/Type1 +/Name/F2 +/FontDescriptor 12 0 R +/BaseFont/JGUGLT+CMSY10 +/FirstChar 33 +/LastChar 196 +/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 +275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 +611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 +820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 +666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 +500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 +444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 +777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 +777.8 777.8 1000 1000 777.8 777.8 1000 777.8] +>> +endobj +16 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F3 +/FontDescriptor 15 0 R +/BaseFont/PILQXE+NimbusRomNo9L-Medi +/FirstChar 1 +/LastChar 255 +/Widths[333 556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 +0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 +278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 +722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 +722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 +833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 +500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500 1000 333 1000 +389 333 722 0 0 722 0 333 500 500 500 500 220 500 333 747 300 500 570 333 747 333 +400 570 300 300 333 556 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722 +722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778 +722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444 444 444 278 278 +278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 500 556 500] +>> +endobj +19 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F4 +/FontDescriptor 18 0 R +/BaseFont/MTDDJC+NimbusMonL-Regu +/FirstChar 1 +/LastChar 255 +/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0 +0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600 +600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 +600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +>> +endobj +22 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F5 +/FontDescriptor 21 0 R +/BaseFont/RZRCUW+NimbusMonL-ReguObli +/FirstChar 1 +/LastChar 255 +/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0 +0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600 +600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 +600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +>> +endobj +25 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F6 +/FontDescriptor 24 0 R +/BaseFont/EFLDGF+NimbusMonL-Bold +/FirstChar 1 +/LastChar 255 +/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0 +0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600 +600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 +600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +>> +endobj +28 0 obj +<< +/Type/Font +/Subtype/Type1 +/Name/F7 +/FontDescriptor 27 0 R +/BaseFont/AFCVQE+CMSY6 +/FirstChar 33 +/LastChar 196 +/Widths[1222.2 638.9 638.9 1222.2 1222.2 1222.2 963 1222.2 1222.2 768.5 768.5 1222.2 +1222.2 1222.2 963 365.7 1222.2 833.3 833.3 1092.6 1092.6 0 0 703.7 703.7 833.3 638.9 +898.1 898.1 963 963 768.5 989.9 813.3 678.4 961.2 671.3 879.9 746.7 1059.3 709.3 +846.3 938.8 854.5 1427.2 1005.7 973 878.4 1008.3 1061.4 762 711.3 774.4 785.2 1222.7 +883.7 823.9 884 833.3 833.3 833.3 833.3 833.3 768.5 768.5 574.1 574.1 574.1 574.1 +638.9 638.9 509.3 509.3 379.6 638.9 638.9 768.5 638.9 379.6 1000 924.1 1027.8 541.7 +833.3 833.3 963 963 574.1 574.1 574.1 768.5 963 963 963 963 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 963 379.6 963 638.9 963 638.9 963 963 +963 963 0 0 963 963 963 1222.2 638.9 638.9 963 963 963 963 963 963 963 963 963 963 +963 963 1222.2 1222.2 963 963 1222.2 963] +>> +endobj +30 0 obj +<< +/Filter[/FlateDecode] +/Length 1758 +>> +stream +xÚXKsÛ6Ÿ÷WðHÍßÎä&Nž±§ÍDBk +PA2²úë»ÀEÑ{Çîb÷ÛÝp|âûÎœ£>8¿ÜŸz8AFÂÀ¹];Aà$qŒ<'iìÜŸ»soßns2ÂhDò\^êÁD©3}-EÏ;5ñê}H(OÒÌIIâaãVP8Þ°æŸ.^î¶fñÁgâ»úºbZwLbÇAI ·ü¹Àe²Ç! POä1b¥Ç²p$'Iš7/ð}ß}+¶[Ê+TÓÔÜ(»$¶Öâ©ÎCj)7ÞÑGTŒ÷Êóßãº1«RØhOziÎÇÎ0~üUÆàT饰`Þ±ÇËae8p|œæÎàÛÂKÂœ[×
ÉqŒ,"ÑìýÜ>5!LIÁ§Ê¢â$V¹TÁkñü0¿f.3 Ñ»f²ñÚRÖ»î×vÙxè-=à¥[ÁïÛn²g-F,ÂØÝC4_Ó¿FùøìÞ÷é¡d±9BH[¡ÝK·¥[k1Íû-äL +:ÑåOšÐ(û$PEÅ:Z7Fö>×Â¥}ÓÍ)A'Jç\Ëw-*Òá`ÖëlÄî£Ìm©|hKå¶o({òð9åoÖqgÍ +þКýAÀŒ· }ÙÊYdÒHyÞöR#(ÓáÆð}Ý4øO 3SÉõùc¢ +²ÓVæÄc&yptç¡iýøßAó4£aÃ!Œß® +GÃÈÝ0Z193»%5yw:§Nå"Ú¡Dvö³æªDV§ŒÌÌUu»kèa:;ËL¡2S^Ú²ÃE)Î*~ ÐTX&z9p
OÉþékÕ7n>ÎYBÇVHÖÐGVeh®n`šýZ¢ÉH;)Õ²oرÚKCWnÁR±3Ëü¶Žâ$MÛ +€ò¬¥CµûÓ1M,õÅeý4Jœâª3€T©: 1hLkÞ ËVºÝs<mð®#çÄŠªå|SÒ¿98_>`šÔÐSvø^ÛŠÌjÅ'
ôaQèLÖ·p)¶×)«¥œ ÙÔq#ÙÂE³*µx®®sÜM·=çFÁ±]|¶äATñëíïWÇ¥3¡E S=¥ç€.òÅ)kMG
+Q,=o ²syëøÐ÷N +endstream +endobj +32 0 obj +<< +/F1 10 0 R +/F2 13 0 R +/F3 16 0 R +/F4 19 0 R +/F5 22 0 R +/F6 25 0 R +/F7 28 0 R +>> +endobj +6 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 32 0 R +>> +endobj +37 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F8 +/FontDescriptor 36 0 R +/BaseFont/XNWCOG+NimbusMonL-BoldObli +/FirstChar 1 +/LastChar 255 +/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0 +0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600 +600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 +600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +>> +endobj +40 0 obj +<< +/Type/Font +/Subtype/Type1 +/Name/F9 +/FontDescriptor 39 0 R +/BaseFont/WQYJPP+CMMI10 +/FirstChar 33 +/LastChar 196 +/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 +500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 +750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 +762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 +388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 +298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 +465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4 +639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5 +570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8] +>> +endobj +43 0 obj +<< +/Type/Font +/Subtype/Type1 +/Name/F10 +/FontDescriptor 42 0 R +/BaseFont/MWYZOO+CMR10 +/FirstChar 33 +/LastChar 196 +/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 +500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 +750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 +680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 +277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 +500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 +500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 +777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 +277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 +277.8 500] +>> +endobj +44 0 obj +<< +/Filter[/FlateDecode] +/Length 2691 +>> +stream +xڥˮÛÆu߯Њ +D +Sg°-€Ù|k€;»ôkÑ3`€jú¡DÅV€³²4ŠoH¡ñœ¥Ã>Áô×B#á+€ }@\2ÇfÖãM7ÃÆ8Á©!(ãCal®Œ[òàä ~È8c)BÐ~×f¬J€j7M2Û
>G«}hí·.]{£:cÅ«d +^ ¬q2ÈJ (U=cÏÉfgaužrï(V¥ŸRï°x¡ï]óŠ¬y#óºÑmµ¥Ñµ2ºý«R-ÜëZ| +?SnyîÚñNÞ~±ùäåZBH50AhßïuåêIxÔQ¶®¶ÛÆ5
Ãgß,«r%~È;©6Cä]£ì§kÙÙÆDªÄdøÞÛŠ||mN_Ç7×XVŠ'}%|ÉÔj ö1K©P6ToÅ"ÁzÃÔ5ªs§óßè\:{V$ÒÕPo°HÈÐŒÿ +n +4Â
Z©MAÑWnØ
Â3ãp ¿ë¢ÂËÆìeð(È~IæŠ!äOóE2iÖoúìU0êjvÜÆÂì5¹Šh}0Ü8Þcècðèµùs¹øáãZXYatSÔ-¹4Bê:,ØeQúcvNÏb3Î+°VùÁ +ü³Øb>íApq{¯
"Âó G^ü² Lª0M]ak}c2[7\óPqwåÂL€Pê`¢ú»~
È4*sUâøÜ!€u{9¥y\ë¯íX47¹F'wù$\eµàÔäBkÝ<¿ž +Írg CjµI±Êû +8¢CÚ¢&Ü-®ÄdH}òóü +ñqþZ'®ÙšÒ$#pqÄéEŠÛz€XºÔ8øKÛkR£W CRx%g#óÉu<NÖdO¡ñØé{§{Ò# +>Ø¢ÌÜx{ÙcPâÓô³)ù»øçk &E,ú
ð]Q³)ºO snJ·Y|WÖ÷ Nþ¹mJžMÖÝQSÉXØC€|VnÙqâþHetb83h®[ÔX,á<=È0õô)ºèbàDôÎ6 ãp&"%Ú,Ý~)åt +h¡}µ³5'Çk(Œ\äôôË9mkQkl\4²J}Ø«:N>ݶ2Æ¥
lá19P¶€ÂŸAÄeK'2¡ŠeuU|žbè0+whüMs`ÔFÍ=®NN$'xdÁµrl^ ±ç+}¿cï÷¶çkU³5õ[ÛóSL÷¶Ž¯2X·CâÕ`<Øö÷¬±ÔÿœžOá¶-^ŠL°ËÚNÑÏeâyLh ©Aiª¹áT-áuµ}¬US[ +'ÐÃÛYSŸ%Þ»!QgßÓÝÁ€U_ÆÂ(Ò8tô@*,£lb*[Ü.*ö{ËZ¬qÛDÛWE(¡&ʧÓYðþ»~mnyâYq^#þ·)zL§á2 ÙEÑS-CÒóþÅs
ÎÛ§€þÕaqêÉôŒ3~WH§_{dR°Zz{NN,åWDX£,ó6©ÓðþÜleP¶¢Ö'sµG &IÝ€NPü]Àdò±hÕvÚ?m0¥ÙÌß<æàâò^DCî&^èVSÉÔÏnð%óÁŸìa Ò ¢,AU²5 ÖNà(çZ?ÑñIë¡X¶Ë ±¥w8¿IW`ÓVÁÿeäpÙÚšäÅ=>Äóµ"¿ÓÓ»±(2ÿÄæDGP·Bv(ÄjŒÂ€yìR×w!SŠv?ùÊ]âÙ<|ÖU£¯eôÿt°ÿ×nùp5FžBP zPüWWßÿò}ú/ +endstream +endobj +45 0 obj +<< +/F6 25 0 R +/F1 10 0 R +/F3 16 0 R +/F4 19 0 R +/F5 22 0 R +/F8 37 0 R +/F9 40 0 R +/F10 43 0 R +/F2 13 0 R +>> +endobj +34 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 45 0 R +>> +endobj +48 0 obj +<< +/Filter[/FlateDecode] +/Length 1436 +>> +stream +xÚ}WKsÛ6Ÿ÷WèHÍD0 ¯ÞiÒŠg:ç +õ^mÒDeI¢ÊT4©&1ÑɵUS·G^õSã$mäzá +#p_Â.\ñ(üÇÈ,NØpŒ{/¬ä\ +¡Y§¢J\£§,I`»{NóÈá'À)Ö€i4: +ÌÀ«®õÌ°p'.C9kôNž/æÃÂ,1ôaïÎcݵòðÅ'À²%Ü4èx¡ÓMî€*sI¯æÛmæ$J¬+>Œ`Ê,TÀ{°¡%)Œ{Ú5þ
(ÊôÑpSßB¬(€6_ØK%áÇg5~[^Æš2høøXuûéÉ·ãŸqÃpP
Jó¹ª;Q¹Ê²YÒÎëög÷߬"Sqº(ZÔüÀµbUº
É(ÃU¡oGW·Aþ âØž{ôï]ÓŒð²íäîN$§«°âÓùÁgÈ®¯Â{jàÜÌêèÏnmôì×:Ÿ¯4Ô°1Räx¿%ÌÎùuøVmI:òÈ«£ºsm«"};ÖcãÒuåþãÞÅ%µ
Cíá˳늹VLª2IG_ZÞOÈÍgyÁArøò`>ä5&ø]4xÞ'Ðq
ïïÝàÉ©7òÝ¿¹n
ΰÙð1Åv;pà÷8°#}hU"[sóZáZN¹Ia.œ6ç® Ž µ$XL¢ßkhuûá-è[µHªÕlöÒÃtJ®»M]€Þ륲;ÈÑbnš @ü^G µÁŒgå ŒeKÑ:æŸõ±ízÎèÚò§]TïÁx(¥ïXI®ÆÙÝ©;¹zÝ¢H¿SÞs|©=göÔÕVKÐ=Ôon«<8í#åH±°²Ž¶ä§Ô mŽÒØ?Ñ®U
]Í{SY# pÓØ=Á|žŒÂªb
æQÊKÐ2
${! E¢gÕ4HB/óeÄFåÉ2ªu{Dxgöye:KMf\zÃ\cÞÐ43PÆåS«v20SßI±ñk÷ÂÌl³
ŽãŠ["Ъxò®@&s«ÞزŸD QPj^*£PöªQñÙÌS:Rv~°h* +á@:\µ2Üa;9
Ž`³gYWâÃÔ¬Hå#hb;@ÞöôJ£klïd~Êír\Ëk°=F¿b9QÛ)vsŸu>Öén05a9Û_ùÍsøÆbXFÜ*â(áðÌRúørŸH?¯l^ôËÛðocùñ>àù;æÒÄöá4æá7Ÿè@·ªDØ<K +endstream +endobj +49 0 obj +<< +/F6 25 0 R +/F1 10 0 R +/F4 19 0 R +>> +endobj +47 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 49 0 R +>> +endobj +9 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-168 -281 1000 924] +/FontName/ZDNJCT+NimbusRomNo9L-Regu +/ItalicAngle 0 +/StemV 85 +/FontFile 8 0 R +/Flags 4 +>> +endobj +8 0 obj +<< +/Filter[/FlateDecode] +/Length1 1662 +/Length2 19288 +/Length3 532 +/Length 20223 +>> +stream +xÚ¬·ctä}·&Ûv*¶m»ãtR1*vGÛìضmÛètl»3}?ÏÌyÏ;óeæ|šµþ¿k_k:¹©
Ž= Ž3uuQs°SvàSdR³°tüs!PQI8[ö& ~¶
9@ÒÂÀÎ`ãããC H88z:-@ +dføfbû·fÿkÚ[8Ûí-þöö_e0±±²þ'ÐÌÆþ&pý[eaoþ3øÛ®ñgÑTÐ`øßØ[ªü§ã_rÿ=%óÿùøG\ÜÁàÍÄÆÍ`bçeû»ñ±súþobþí?ÞJ& g @ÿoâ¬lÿJÿ¿ÿþãõõ?ÁHÙ9ÿ3;ê {ó¿ãö?ÿ_;M{ «
äß"°³òqü;š«³óß!ø×ø[ÿñþ×^XXxX!Dïô3Þà¿l3Èôõ¹.¬ó¹Gì4Æ;·oŸ)³@ÎÛ¹1v/T·P'7Ã|e?.èñ?¶õcö©·Ÿ1}!"ïz÷Ñxž;Ðe +Žlܹ' y²ÒeÛÐëÿAÖý:æ>žºò¬öµéEHšÄ$ŸÓÓþi!l×°Æ)5?YÈFNõè;ÓcùãñÎ>áÚWÔLç ^ÝÀž«äãœ,\U"²jä0;Ç£}$æÉŽV¯U/öÎÚCõ€$!tbÇÚý Aõw¶_vLrŸ*cwQrWÁŸw¥÷køHúÃ~ÖÇ`5ï/Ý Ñxó5@ +úü¡K8Õ=£ÑÔ Y"A/$×mRiw\6 +è=B8 oåÍÃlïñO!Õcc<íEÄ9¥êôR5µÜ)NDœE¡ÅÒ«SÅæÔÔ_ŠzcÚÖ¶Þàe¡ñÕï²ìE>ú<ìaè#HeY_ŽV"
xw}ÊúGKIÈÖhIç²Ïù+ÉË9æ QS@sÐè©šžûa¬qew# Æ +s,î)AVýPMZ0}¡üìÇhÝC7" [¶»2ÅëŽÈwbûÈÛòJá°V¬WGÑ-€òn+Të
GrBâP¹xhù«ÚÞto`¡õÒ£ú£_zú?äRÍV¶`Ç`<É$ÛŽZ\6}]Œ¬výtÿ¡ºÓóD)pï·:ª¶åW;Þ2$
ë^xÛŒè{ÄPÑ"_·Z6hgfmà£ÈB¬` ×ö2ŽÕÑRà==þ(Ú.âÏ&ÿø{-ñçŒë{è5î /]ÓS8×ÜxùzB/ úø<]b^»GÖ*å +H?;q,Uª3IÉ¢}fµÜK:Îlåòë'Qð|&Ô1¬ç@ ÓÓŸïuCN[8á;K~R]³Šé9"WûI¶¥<µa¢jR§^aÈHµÇÊžÇ!³%²Bùo³Smø
@6=vC» L¬¬çµÃ[f!~æ¯u?a€g#òc+Š-µÆIVÏÏLÝ`ùd¹;Ê`áÕë`E;ð(_ÍËâ>"^ÓrZÛ$ÔpŽ82Ç2a]=ý}5ü*ï³"Þ)(À¿S!mü6ù3ØèËç_ÜëÑæ#qD\y0êm±¯¢|FË/ýŽ ÛýJMYëoêÄ¡2¹ðLŸnhÏU°qF!x-²ðLÔï3W_å±²×~÷qŸô'èEÜó×ùÝÇ&VŠÉ§Â¢Nìç4€oDAuÛäêPÜ[ݶ:÷Õ·÷[Q:ý®ùñZ*Äó5ù/yYX)¥ÝE÷QÆû®Òßê-Üq¢CÛ¢,ßx/ï
'©:*|iuòùp&^|löÆ,ãööÆ_¿Â×
«ÁBÞ}4ÌŽÒµPîlR®?€'ÒrfÚI¹2ÉÇ'
xÒŒÄcs»ºµ\kûÛŒöôÎo`ÉŽwöõ-VnAd÷©Äfj-VËÌe&lÇËKÇ·;@VºYCŽM>xúÓûÉ]ÏDHuW¬³ÚÛUì6t;&åh*eîp²Ûoüðr*o(*âa»jNS[wÊeT÷Þ¯ &¶ eõ.>x"lË +#k/Ô¿ÍP·jMݬ,äT`ŒºöŒ +Ïã]Ê&TÃ.ÑVöø5Y°Œ/åßTZ¿ŒÙééãµEŒT©õ&üNËbЫÇͧåÈPÙiê[.
y¬~$¯ßéÆî:Žf×A6EÕE·ŠÎóÃ~N«ÝÎ~(nM~Ž
?Ý7W\§@9ãÇt/¹a°@Íáü!k¥Ø¶±{]ª«Š5Gëycuj²Ÿº@sОùÀ¹£àóÌáDì[@¥Eâl'\Ê#RuºãLŸ +^>J^¢Šþ +€§gOúdÕ@É +@l/í7Hu4VzÉÏeH#èOFóóV°`Tµ7M£[+fN!Öb)òÈsh&QWOŽÊZq úfU0±íhZºÞ59;Ä?]Õ£@»b76h3šk]:¬8ÀM#Aÿ4E72Ü DS{kÇ®éwÿþ°±É§ öm5ñÆ:7Sã7KÏ»Øcg©iFjè_Š²QÕÚ}BÙÁxÙ(bíÂIbHxÃ3Á㊲Èdq
/Eeº?¿íSqŠÁÕÔ&ïTvÝÌ¿øvn+`ckr|Ä)RÜrGï×rìÙdOMfµ=º©L{9ùú×ù8þ ÝÄ>¬UÓY¿lCy~§%Õ®úRË0XÛúÉ&/߬yïagew¡Z0"ž¡ßY:* +(ª£ÂqQjk#vv$:þñn9ó}Hfàô«P AÜæGìáZö5øüïàªGYÉg_ÚŸdD6ØßÀ®3pÖGþ¬y'Œ{c^ºÌ3×,.ÐÄjo¬Ž3eCê8ÍÒ¡ß,í¿³Ã2¹,{[Þ5'º«'-å\Ø,wV6:;žEcñZ#µðbuñPß¹(,èg*¥°·yW:ÕgTÿÝÄ2¢rá-ä/2Î_yýó.aTo Wã>ñ:vÆÿt!R¯Äe
£ÙÇ5$ÖB5"6 >æP02ïKöÚWÓ¹ë¹èáβßÒFŽÃJÖøØæ°·¢2ÒWKϵðÈÒT§@Ú,
±\¬{HQîvöR¬rÖiŠÒµ¿©<µÝ4$UáØy¬áæ÷6MàøK9·Îñ%luHbeYd¡opÛÎÒòÛtd~ÜØþNÃSüeÀÐlMëËPFo{Ø% Êîé}/ {ŒT+tD\ZD)4~Þ±ºc²Ì¹r<qªô>y^ŽPã5[ÊØ/£8dÜHCQÍöHP׺~Œ:Àt^w©ôæù 7ù6O W']EGVMÔ²b[¿öÂ(L1Æ^Ü{Xê&ó8hÃP`WìPè:Äy³R:f%Õœ÷ÉÏFÂëfÜóºftßö>yµýªÔœôµžoÞËÔÕ8SæÎ ñ$õg\ø²v''dßÎ¥*9Pôcµq€¿BÂ:÷n>)[af©
yK»&ØD€J¯ôE]&ðcþØÑzÞ)»wËͲ²Õ4ùÝóëp~
PO HéÒ#LcùÚ5KþDõW9TFâ%9ÛÌæyŒxÝACäDèniÃïÂŒþñÎKü_^0v6± üû +ß;ßW\¢Mç'V¹ÝxiQÆáô*.y +į%)ä/øÔÜžfàF²2×à€@U<Ê<åÐ{âÌ 1ãÊÓbn="/<fØÛ¡ÅÀ8¯³»_;¥m9-T¹ m
áKtúa©ÀùágÙ3zGbÌðjûEÐ7ÇJÓSFø2Bo»@ÚÓµK KŸH$eÂQi6Óu?º×uèž¡DSµ +{ÎøoçØ¡Îð|^62YwÒÈ[yÕ3ÆØêv±9P«`øf+ÂWý§ÔP1ÖÝ£²vqC8º»0ÖÛ +@õ9óE'öæÀšU ØeYûFucÐÈM?øh]IÕ/Òýf÷D
«=Z,Þ H·zÈDNàØ>jH()µL9h`vtçÀÌýót2|úAvLKç@7ü6c(îÅá'î6#NÒyc@ŒÝìúÆïÀsíÁ'=B8ÈÿÒËËícSéMwÝ2$61±&£èðDæý>ÔÜtbbiÔ[_,¶&Œ
8å}³,ëójØ߬ôïÏé!Â3{#µRyy¡ïåE#ÚÛûB¬Yæ&iMùM9éäÓ«í>ãD/:#ÿä~Š²ñÌ+gŠäºæ`>üÕ¯þ}Xô#;ß<Âã¢ùSz*®JPŒJ,ØO0q³gHãÛ2>äì;ª2ocßlI +GÞËäù÷§òFR£zæ}Håá-cÁÖÈ`?yëàîfP{\;(èºßÉxS$§õœ'1áN5f].€¿§œ)ëD"!?Á~TjÉÑ gÏÖ`e1y©ÃL¬#ð÷
sF&òcæDÇŠçD[û2£ÇŽŸÜõsizöK3°Íc¥%ïfn±l+Ò©ªvØ#X6ãt@§'ðL[Ãjô¬öÁ¢sÖUÛÛf#¿4Ë[_C¹XJ}$> +ì
·ÌÕTî^+5%ýò ¥Ñ ]Ç{nÖŸ£}ÿŸÑ©Ú?vux&ãÄÉznžj}§KÆÂ_
îóGwâ%_lIz9×ýáBJ3qAOÅý¥âÛ!R ö|[9¥eáÕó×¢5ÃúMCŽ<ÝêÕ>©·øÖ)[ðüÕwÏðKÏúdÂÚõýKe{Ìðônò5QÆõª3<Ùå*8å*!ìü]Ô£¢_Òžbà<¡ñHã;u¶[X.fB€M
/²z÷2Ò^}<Åø©Yô°<Ç·ìÁsÀíÖÉ#-ŒøVýßàtkqÀ)šÑ*ZŽ£èzï>š@·I)PË\œzóU
³ž¥ +HAìœñ +ÛTþ*_ømî¶ažBwpG)MCqšt¿âËhBê€ +ÿèñZàW/PJG]ÚÂZx3} +*éI=ëyøÅìkFŠH£U¯{(®m +5èìûŒbß1¡ÌªÔÑVE=9Ž¢âóý<€RG<7àµbçñPšîQFÎc<s3Ãvzº3- :Už(#Ò`*<_œÖùE¹æ}VP\m©! iöí
Þ\³®X»4Æajfb÷¡ÃØ,ép4|^šþµ>m¿x|{õÕí± lâF²œÝPfÌþ`ï'ÜqÈjQu³ : Ûkø~ÖœDm5ù9ÝfŠ°ÿ¬à£íqŽa +YjeüŽï\äVpÃÃïwÆSÅÿjZü1mÛØÓ5©L|Q!¢õâ'ÜS§Ë +}AÂ،붢MYf;×ÂaÑ ÛKúíwÂÈM¹aJbÕ{LPMi.Ú\äã'÷ËÝ{ÀÍÀ$Ì<s6¥ì÷ðÃVê÷rñ_CÐ °€WÓ÷ÝVœçZV£îúÃC{=ÙG,SzüPÏô£Nm +1_ØZswp5ë5Ó$鮢h=t[%"23,
Ìg}àÃV£œÏK8GQ¬mµqjª5·œ€¹.ð,ÙgQ+I®ù@øB +`rÅõóŽÉO()
+ôwn5ì»Tõúª}DL +ÐsL
F{{áqe¡C#aÔ "C¢ïDŽs(SXõ)tß +4]ÛÐbºÉYPñÑOßN.ÛxÀò*.+Fóœ¬+,
Pfá=ò×êÄxêÇHò¥¿@<Óz@4·ÈJÂÇÒ³þB:ð«Ïá9 ·«ãdKG û
L$]+AR®NS|ÃÜçÚ9AWq2Þ'öºîÒ¢I0µå
a3v'Ëè6»v€õµÃÕw>É-%éòêb(¬l«Ù»µZôé1èÂošŒ{°ùÈB`iÀ>wåªqß±frùµ,µ4LqÝjp#,_F©#!OËiŠ«bíOg+t9ã2dE(N¹ÄOýWÚŠx©ÃdÖ\ŠÍÎoŒh3õ`H}Eu@p +!Õ.2ÜØ
ºÃYŒKáªàÂAFÚÜ:òh
ÂÂK²Ú¢$ÁËì¢ï÷C5ÝqbA7 î¥È7Ì©ÜshK«Y]yòåq©üK]Ïfpa§È
@ô§âßKÎc)ÏÔ;ôYo)!ÚëìÙÙJ6-äb_À!LæØçó Óúc?¯EU&oŸá×À Ѷ|Fá©èhr<çžšŽOò[YÖ!uMXìwbÝ9KE©¢
/Ò÷-;îÈâ.b +
Îéßê·²<Xº'V¥äßË¡×6àŸ@1šËr€U,«ž||g¬GáVRcô)GÝàÕÍô«õx
Ù +cßìqnÔzMørÑEä*"æÈ×â3ï,HúM6B¯¯446ÐfñqϲaÞT÷þkÛ9A¬B>$@²Å2èQ·yzØ$ÙJ$ÕféCåuáÙÜdÒkyi;-ønÚPø[©ñèkQÑÚÌrà"7ßXs£H®a&.Â
-tB2ÜöÏ4Sr¿öûæÀy_kÒ·&Ü}Å! `d+Û8%"Ë
j,®×e«Ù¹0® ÿËA=`ÞÙlgáS
óË
Þ +)ÕXW=n ä*ÒŒÙì YqŽèûòZYÈFFÏÆv» ŸD+hŠeÛ VáøF:=ÑoèÕ$ý±©cDŠÀE®ŸB¹7Qj',^F +ÊX*Ðì0Ô mlþ°àWblA/%Ê]ÜÝߎ*Sö<ñ +$°GŒIY_Mm*ÿÆ:ÃÌ~áYvJÄ#v¡ocÉM:k#y²(Ã2îZœã9
="¹\1<Ç*(ÀåÀ°šÛãÏ8{Ô@»ÉDòF
Ï¥GrÌ°TXÀJ"H.Ž(ã7+*Cm +³Ä +»ol£_S v(yËì mÐ
i$@Uæa^Ž«ëkÂUѳÑ÷%<3É*®#Ô;ŠXÓ«ìgmCZ¡¶ªVÑ74ÄâôF¬Uò?]öÌUœOÜ] +µ`õüœžqíjCc(ýz°j+Ž)å#mûŒåÊÄßµX2 Qª<'©¡â*{+žz/µÛrBëBuÔíé7ó'
o|ö Ô)? dïf<!]j3.C²tév·u%T!>ã
8ñIôÐS
¢ävõ%)çiãÛhœm"
OmFÉîsÑŠ^(L4M« eÂ/Iï±àísÈÙNMG€ÚÛt
`ëËeýB|L[WÞÒ3X£<^¬»K ¶ÀoÄÉÔÓöHFi:¯ÕŸ2×ÚжOêõFÁ>:sZ<NÊ0b°SdA<Ë +MiL<lJU% aiNwX~rÑ÷b
Ëþï,ÔA_SíÍû#êpn¿žŠûÚDìA1mÿzÍ£X\vŽ%檿Ã_áXpNÞC,°cÄ#9v_xßãº,Ú%VÔ(,*¥(6ÂMò!+lqÂýº<Ðÿ[ë¯Ë9Ó7+çGÚÌÖî.ç{1Eoé/x0(£ÈëÛÂÔ$6
QQÔÕCjº\. +»{+Cbð}K~Zø,ð^溩ÜN¶yÜÚò€å* Ö7?€L{²?7j?oépíìõQô#*Bp-ŸgujÈY0G_ÌIRßRÙ&[!¢ã¥ +ÑðÕn»lšàíuåg/Áàä/rß0·"WäJ¥6' +Júð)·¬×v×£xâëœJŽòVç³¢»ù +bzyJkÆ>à}8k®âùSk¡âLÔÅ|2׌XN#?û&_hø(~(ÆÉ|sYßX{MLÀn§éZ~íâÝCÒŸ£{×H,^'rÎgv©€P +vYiÞ÷Oyõ&Ê{d>žêªŸ¥âÚ×¥áX%² ëPÑãJ ·ìzp$ߣdg÷a}¬>õê²ó9TVYú²h33ÃXŒEén4÷lYÄMøvgÿÎàÔSã¯ÃÕ}üwa³·hm+u-»P$^J€äÜßÞ:*NÄoípœ²@ØYzÔÍï<÷³Ï©'~z¥ùÐ +çÏÆÁŠžGòèŒ6h¿éÉ#³YÔRÁ#« Ðö +ü`,Ù.ÕyáL,ëdÓ F÷Ö*V>`O%^L¹GEæíwJø:ÚyÐsÚè&œîòVœ"Hhžl¡ÁÕ1EÌÊTGîrZÞøà`Ma +aYÐ~ÍL +<Â63"õN:ÉÙNÛva,Ëf¿öÞpK<c°7æ<&ÉÞ!Mo_réåýèìÀî4M³í~ÝÔÑÁ#$tçXÕ>b|ÈâË®B8RxceÊ·qø²O6?Ê÷«šv§[x\
ôS}âc<¥-9wã-jcO§É7ÊM +U%Ò¡O_ïÁaCº³ÆÍ×JS+èÉ7@Š©1#V(<]Y©@Kùr<ß^UO+$³Þ,ŸW²èÑ@vX%üå(+³æIëZÊ5iعí7I-£å%tó8žksÏfšÃOJe³åbÚε¥þ aŠÇSØâk;CjF«Eåk}±:Yé€l§íDÿŸ7 +YÍ»g>Ùï$¢sƱmKŒ:AKN~4±2ÜyœÃŠÆRßÝoëCÔ¢£,vÔÆ|ëÀtSe))aTöàÏnUž7ÂBX@«ó'kî_·t|7£nZ~âÃ{õcÈ|nøt&`xçÉͯÛ-QZ
ùzŠùÃ8õÑÓ g»ìGu®\
;}ñ#DÍߥý,S2ÉÑЊ® +Û^óÁ/²)1¡òêzvUÝÉ(`0LTvÙí £1zõT¿°ÍÂ.B²÷$þ<éâÕRo€&âvoÞÕ*C ã»4% |è¯÷Î`ï¿iûxr%<é óÌ +EÒuñÚ£MÁž~¶£úG} gpXäòÊG[µ®, +S<6[ýÍé¡~u`EªŠ¿ÛýMÕÁcÒ +Fom)(ÌÄOA±ô* +ô gØÞÕU%4þÎûXšõÁïklmŠõYÑJØät|3c/¢Â/BMOe²0+f©t¬ÅûSôÓF§PZt:|ÉLOdº«6ÁûK)ô(l~ÍÜÁ4²Ùà¿¥Ý 8@ʪqŠý3õ>õðš-šIåP1Š¶a¹»MLš&~0èÈh&Ó¹oûÞæÉÎcŒÑHÄŪßg(úË*R'Ê@xhBÁ~CPzê>Ü®PÓñ§{&ºáûÕ ª¯Ùç9¹SßÿI¢Ü%)t(#SjdNoÔþ@ÞI
ár'ùt¶Sü Ï4?°©sAÌL«YC^ë;¥Õž|Á3fZþv'"2§³{²qèÄ3Úæ¡øÖË ÐÃ/<}9úHÒ@4DYÅ_Ñû ©kídx¥Ý}µI¿¢-çõ×ÏPFP)JUbBÁb¹FÙ×=5ÇY#:šW$i û>£Ãìcm£ØÒHW¥]=Ž/à@@3»kŠÌ±-¹?Ye2cìźG)ÿØŒ¥å£çü=\{ª¥â#-ïuÑ3e
¹ŽÛŠ| ÷Œ× ²'X³ÏÎZ¢ã]ö@IQÛb° +³q 2ðíÄcHÑ)çIÞÊ=4ôhi*@¿J|ö"iã XùÅË]èð Ãü·ïUoWœ!¹1@H»ÛAØH¿màGYž*ÊÈë²ô9îìtÐsõéšàs¬ð&!Îm?ä61µüíNå*üA¬Ñáð[réäíÀ£ýüIsÄÛú×jžBnoNÞ +ʳÿ|:üwveØÉ"±¥hžÁ
¯aÙ p4ù? +šÝÏž{íbh7u}XªÑVŸ~góâþ©ÁùhÙ}T€¥ï7<Ùûª±ë¿³,mÝmšWÓ¥S¶ùµå+òÌ(8;4xŽâé6¢qGÐQþšødìÐëYdÅÇ`4|ÒVî#.p7Î*¥dŠñ ÈœIqOì1§ticëïpÉÁvD°.ŒKõòXÉKM+G29ÃYvÝqæÌô< +uë¥u[ù<?H_Dt¿Z«»±^aÍ`' +ÏNCùððŸWÀ«8éq(að>ÎirLÅ{EdÿTøXæ¶"à¬
]?P:?kgäq±kïµÿõ£ +ËE&~õðÄô$ŒÉN6xsÒ©ºÑ{ç&övúšû~§&t?:-On:£©ÈÐuk4ë¡`;ßô7÷wÎñÍÊì9¢À§:_üž<8rÂD
1zCüœåð(É*#à\ªã³ùN0R94
?5Q#&vwzGYpuæ<¬2öö7.ÚŒŠeIN}fI>Gw²Ô0ÇŒp6aÊú*Å[ôßÝüLÝ\} FØè&¬ïŸÒ¡Û3h~_i TãeX^Ûí.ëÒ~]ìÞe +[îÞeÆë"êgtRêv·OÁPÉøí ÅcŸì* +ój¢žÂõœðÇø'št +ß +Âñûû¯/`ù³ÆtmCýñŒðYè
,·watláë³fiÎ`¡)#ÁÍ°xwfSœ9_v)ñíòË#|Šrd\Ülïf%3ŽEÞoYl]÷ÞävühR9*Æ"¥¥ãZ"¡nâŒÍæså_5HáoãʪØÆ{ñUFiTM²1§4*übÚ ·Ø¬â17ù3bœ$õcùnyÓ +7ØnoÙQó5ßzd¶bþ)='òð6©áÖ!ÇWâ2eÏ€exª°uÉ
>йÚp0põä*¬^C¿o;º:¢{«Ñ_@ÕIq3;®ÞaøO×Àù9ôÖéŒ&8o|S_]ôdír²ÝºB|ÛnuÀ7ØOkßõ`Kµ?l_ù·8Ylæî×M¯âVÞrTw¯æÂÁøu2×?ï 1ûjPd÷®{Ö-x/óõ[z
ïnÝ)9yžZ\çqSØM@ÚfïWM¿¶«Fäœbò·LBœ/í¿<D
·¿,M×û^kÿ¢46Îry?ü>Ø)È+iEîÎÇb|LÝùqHy€Qºw¿a¢Ëš9.ÞÔkº7a;ê
7}J³BÅ2Z6YÇûÞ¢h4"ßí¯äe'n;ÑÅJDÚª°ŽãCÄ- á=W©[êðŸœÀjÃsW¥$ceÁ_sz*ûlq +£/dí׫¹Å} ð9è}Í!2böÂ^6zF/u8°v1zµU³ÒN$xêé4Nõ=¯Â<ÈÙû¶mÌnfUÿFž\Ø 7³:ýoyÝ)ÏÇ9+>dD{
ãÐ$Þ6J]Fož8gÓ>Ó.
×í9É%Œ;
-¯qWÊ0`¬Sà¿»gH{ÀÅ¿¢éãDk#^×}4Îæo*~è+Êõf!ÒŽÿŽà_
po0Á?¡+ÌT1dîHDï÷÷@AfI{w0 ±cKð9§ÔfQòn@Š]K®KùÇçó®²þ!VÜŸgbJ\[\öb6À÷ì{RŸèàvgqPÃôPWT bÊæD:Jñxù׿ÞMfõäµ³HÜ·ãêä³>W Ÿ°ü\ãó;ž1áÑ?Cù§R;=žÎrÙÉéW,زŒ:î'ýZñŽCpFеfT(ËשŽ&Ÿß»Èl'eÏ€eaÈk EÒ PóuJü^Õfa6Ãè>á_ís@Î'5òÈèœXçÀ]Žx÷1Êê;""K³o13€1
]t¢]ËÁÖKŒD<YÖ8Ró$¯hRc>Uö_òº€ÑË
»1O~ÙD'¶\ÿ©§zi!òr-±uøsbïKØê^sTëËÈÐø">2ùp¯¥ž¬zØ NÔr#R9éÏF¬ÙZ%Û^Ò$* +²Ó±ðÏüCÈÉ<ÌL.g:i¡ÞË(åÀ{Ëú\%¹Vî[2!©¬5JsNFªìÛbÉ)8ÏŠç×uõ§H.ØP(|ÍceLf;_Ï5«£ÌÓŸl4î6²ze'l= +8¬-»ð¬Úzupt¬4=lœñÇÕ»œö
äúåŠûÅ¥(öÜj)/ªÃ}°÷Ó:Ò÷w%úŽ5kÑe¯LMžlL€ß*0>MÙõ"mUÌ8ÙYÙáEìñCÍÉýÉŽkG;øá`>hÞh}5¶!Ènµå}>ãË\")`ØÓd¿«Ú0Ú·}%©šÃy$!Ž\Ìž»ÕŒ |'ZWµ~SyÖ© +}$Á^Ö-¢ÄÖ <Mß_È¿NëA2ÇU(©¢×öuåÜ>ÊôÆApÀ8òŸ6$t¥¹)Ç,pÚëªÀèøÍöL±ý:XèaÌ×Jf(L9š
e2ÓìdÞ°¬@{Ó0ß9m.JÝYq÷îYõOÝà{ôMÔóPÔ°}Œ:0ÂáÔIÒª>éy~á
µ'©z²É|b·:Œ¶{í8ÙÞŒØSÝI!uô($5Eç<®§2²¯àÁÂSö³á8[ÛZËiÖZ9î<P÷~JâTne0£s@êzuèý(ÄÞé²k¿ÃOá® ¢n·:ç±F€×(1>rúÏNÚ93#UYî1x³éa3°úí"ªcíP(Ñ&Ú¢Z/aÃeÁìK×D>#ófî2H»Q2èÌ`ädÇU}5!Ùô_lÊÙ4 +Ís#Þ/çeèÞ-Ç蜚<Ê9@ã,µøÃiUô
j1þ!D§]ÎQ>üxâ¶ù×KÖãmÞº#GzÏbwRAlŒW²§[Æ©Ý3ðѧ^ó¥Í^nl¯8$·,Ic +·]ŽB1ÂòûÄ_¡Xr¥®ÌlXÎææU¯ÁÄæ²Ça(ôdKhVÑ-j«cii,Õ¿ñèZ[Nôé[žÑtHþXÚYÄbõÿž_ÔaK
êš°!r4æFÀýôßÚë8Àútwww×äîv8]wâÄ:5Lw}ÅÄÇÜä6ítwÎ1ÝŒÄûÛûy?àS!8 +yœ/u&D qëºQúfo«µv;³¯Gã{pÝ«j3üNuúÆe4»Ä%TÿùLøpÅŽñéÚ^³Ô÷uWŽ2ýsvÃIÙ5Ð}^YÁm +Ù
Aöì$®ûQêôó'ãppØëÚ0/úZY!4ìÑ\ŽdkÙül¯ÆD§ïù
ÍOÝQÊ8Äl[!Çz³c. Þ +h?Ôn3·°°p&²§x[7·;\diñÕmÔ×r&ùlå Ù²ÞNØM']§?qå§ï©ÀtQœ9öW2j"ÍéFÒ}Uì6èaw¹}RÉ«> Eñ8Uµx ã·$ðÅaqÇÀ.æÑyÄ3¥yÚra£Pöïý±Ì»þS!qY}å:|5zïwrÓ +_¹£EÔstDï¥Þ1d œPJ7Sã?äìn2x5û +þȲÖÍâ5à;1/ºnλ89.#PêX\YnÝW9$ÓóXOóyäê¬s®§ë® +§ÓßM)U[±º" +že`MVÝŸÄúŸÚaÉÿ±$kaÑõg +¯z=õÐ$yÕaø +l*:wµ|/ŸöWBo5xõF¢ 4¢d7ôÔ±Tòá÷Vê$Vv€8Ì@öÌÕÚÿ9^êíÄ:mZåuØ}&¶:VJìqŠ¶S=í©b*gž²BÃ$zeŒà8ön
ûŸqaêñuGß2m ÛôMtÐ1ÉTÜSQ£mÚ^ºëÎ$äßÆÚT+¢Ðþ.=ØTpg:Uÿà¯sLfëTqsçíÃQìñ2nX`F3(úmZð*ŽœÖ[dºpSzúYè HýSï]6éö¯l\[ÓîWa«+äò@×)¹%0á°-ŠªùXn£ç®ðÞ'ãœáôF
kBQ +o úï€áxMTfÝCd ,RHò}b²<(ž:žÁ±#*ÜzÊ wdþþx
O¿ófi×NL;WÓÉ·wºËÿHÆŽÀ²»ö£éªTKó}<Ï +Ow÷`q'ö_
g¬ùÙK"¶cv© &áJz=3 P¢Zf³5®a+Œ +Á<}å[#d»L\lÍîô2[mä%ANápt£4k¶]'øsÉá&+ÏW&Ø»ó O'mîõeyøèÖc8G
þ¹ÓN`ùËHËê-;Ÿ`i/úï6ŸWêøö,·SåËD·6 ÍÕUÇðÄ©ÁY0Ìm€`ž0÷º7å×SU§p =çÕÒpp¥Òøõ>fsD¿ Ä8øã-ìp·3_@üYzs`¢#2ïu +Êâd®1ùñëé{\^صڮÈóþÎGÌ«ô©<Z_}9Ò>q~Nõê]ùÇ3ÈéY±uawÑ0ØT7C©ò1T£×£Ÿt17Ì#Áéÿ.«ËŠ(ÀÜŒô5û1| +)Ÿ0²ÃÊj% ÑžkYÞ÷«ÄÔàѻǫEßä>8Ôªg58QéË
îE<8Î7
f7>dI\~ +ÿhœ©ÁÍòÚñ¿ÎZÂMðß"ûlÏoèEUep+·ï/YCܱ3ã|»¯9lXz¯ÊÊ᫱Låb +ŠzwMð-oØzJ'isI6ÂÀgœ§æÊK`XPãPWìói£åbòWþBºäÇN%w©ÊÌ1ŸÎYÔI}xâs3îÈ°Îlæ§Ø@l)]\ÛÛº?ÝÑ綵y±d(j¬Çhk<3yîe|£i¬BBÂF>ð»ñåS%ÌÄ!¶EÇÒVŽ¯©EËô0ŠÚ÷CÒQ¯7!÷Äö¿l??[²%}ª)áw +ój&Ð
`Ýf?ºª^
+endstream +endobj +12 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-29 -960 1116 775] +/FontName/JGUGLT+CMSY10 +/ItalicAngle -14.035 +/StemV 85 +/FontFile 11 0 R +/Flags 68 +>> +endobj +11 0 obj +<< +/Filter[/FlateDecode] +/Length1 802 +/Length2 803 +/Length3 533 +/Length 1383 +>> +stream +xÚíRkPWÆU£`Q;ÕªåjQ°@ !eInÂÊf6H`,
2¢(Ð@XD¥ OKÅ R© TÅAÇ +t§Ø?þëôÞ?÷ï»ç|÷;» @bí*§Â 'E2Ö(uî~
(PÂárÝi18Ez`tšPW |mGŸÃáw*RGãÊp,v_2Ì +Óm)£ä8©¶|{Ñ4Šã°¿ø 8)Z +Ý~¹Ù³-Ã}eeaI¶ªØ®ß$^ñpàÂ>KåŒwyø}ÜhWÖÎ/¿{SØWñôôYÕNEáÍs:ï¬èp|bt£ vìâ~9ÀÍÔïñª*RnäÒ`x®,aÿ×&$÷Ö@Eñ³ìY%tÚìnï&OçþóLÏWâCNYÚBòøœàñœ7tyšøñŠKÝœGòûÊ[Íæçåm8ŽÒBPz]?ép=¿{k+ñØ®
sÒ5YÞNù»€ÇûxAõþT®qvw× Óã]3£2ºçqå!W< +Ó³Wšó +éÞÍ_§3¢¶-un|Sì€Ê²çsOZöÏò×/ÊéHUñ±D¯*çi
J7سV<¯~`5oFÂá
¯ŽDÊHæ1 žêhòòÜiQë-׊tŽ[€ç`»-3·þÄ «¿ŒØoUŽôŸXõté!³»÷mµè ÛJå©a«V?÷QÛjzÃÜ(š_Ö>ýª%Dþåâü_à?Q@F@f(FGp8ÛÆ +endstream +endobj +15 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-168 -341 1000 960] +/FontName/PILQXE+NimbusRomNo9L-Medi +/ItalicAngle 0 +/StemV 140 +/FontFile 14 0 R +/Flags 4 +>> +endobj +14 0 obj +<< +/Filter[/FlateDecode] +/Length1 1658 +/Length2 14737 +/Length3 532 +/Length 15624 +>> +stream +xÚízcteí¶fìUámTP±îVlÛÛ¶mÛFÅš8éúŸsï=·Owÿé{õè5ÆcœÏ|&Þ9öMA¢ Ì bbk°µqb`adæÈYX9;*ÙZËÙòÈ2|X +õmtκ0ŒS{2=$>Åí¬ôÕ×ÆqÏÕ¹)€€®£. 5ùòÃ0e +®å*9=v®ÉÈ×*ã((þç +í.å6õj(ƺýGB^%ÃýtìbåºYGBÈ¢$}9/ÍMmÿA¢³@H÷ɪ3AKS®·Ùšd7+ð6lfn*¯*·äàÃ1
ã +^&¶S/DÐGì]`}FaòŒ4'ÎåE#Ø^»¡]n>LÙpÈe8TÀCK£È Ç>ZʪófBwlzï¬oF¿Æp©ùb×{û%B 1Ô=3dcu°ËcWße Ëê +6»Éæ³RþŒ +%Pàœø*ŒÒšÆ€EóÊKbpåF¿aÏœ Ú°Ù±ã%X_W.Û1gF
IU?ìrm'a'°ÈBglãD௣°Œ",qlïV0Z5Õ&|æ²üYîbVÅoSX±8€»bÁxjdJÜ
·xŒ>÷=ýë>É2ûS§ò÷S€öª €¬žßþ/ÂAEDlám©ñ25âF[ÒOCËM{uEM`ÔÄûi¡ñù×F5*a\üò.ùeŽý&€JPË'~ýµ#ÿµ¹ãßËÑ°xŠ}hö¿¿rÜ+ œTòl{(å¿'œN@ËÇ)"Ëû 8ΧàŽ3Æך9úõj,Aú ómÀwŠ[×#[ïÞÏ¥PÐÕÑ +ŠSb 1%é#œ3{Ôb÷S +5òÜRÅÁÔ«vK"g¯"<ºŠ;õÚ8ï7s£«\ž0ÒöxõšujÕD~Kw#íÎñöçÍ}ÊÎ1gj>·ÉŠ²#a
ùU +,)[Ïð8ýn·£òÐnEJ$³yßi7*rfFÁZ¥ûçýcU5.K]sr+> +1Ôš«ô6Léj¯š»ŠžÏxÌkTKçò÷ tÚÆ6ߊ|7Ò~ +û2ÅôDm
üÜ{;"±æv<^)€×UæªÅCéÓ@ áù5ª22¹ÒNÀ#ðSÆ^> аnýâq~s¬ÆåÒæö²¯ÒqÍršëcªXZ>®ÐÓ*1ÝùËH¥'~{ï®Zý$ß¡|"Ò+åþdu)náõ¥iÏ
ßA?}
T £Ç\ßGùŸRÞª +?ÆlÈÑNAîBÚwo|'XO\9j:,Açqèt +ÈÄ/<€p£QªZVfZÖÖnjïŸ!L€ÇøÓ3ãÝ
[
?Ní3Š"I$ÁSÚ¡XcéÎËšÈãCàYËÀ©DìL"VîÀ¢1#Öàì/5Búa<µ«÷
5ZÍbi/MM8¹°èUaý-IªoøY*@¢õ@B*¿ìÎÜ <6QkÿBÏ%7uÉ!/ú0A£D +6:|aïwFÜÕJký@¡- e
PctåB¹ŠïM×_.ð<ë̱QüM?b/ú9¹ÜüiœÎFçâ¡Œ$m }$캡q(+u%SÔjÐÏN¥»')J~ G*v +K(S¶Õ
LÚÈ5õ=äÕ)
$\Š¶i þgjJûu5Ûè`úÝCò.Fô×AÛ>iU/4fþ¯eü£²ØOÈå¥åèNHlöpü¥xìãù§r[¬niåù//"n`Ž(#0Z*ÉÌÙì%v*ºlÜŸàÅ`ØIãê|vÝ'aažÑ«Å±Ì_)2^p.elÍ*ðÑÙYÊKÇÉê¢ )4ºd+&aCQPª-.=ßU°UqVIV)ÌÓ.OÜf6UÉMZNÇh.Õ'yÞm)Öf2%~§¬¡Ò.K8ž^k?DÞ£|^_Ám7úáE¬Qðz"PzSëRÚDÛÊx4/æÂ4Œ[®W8è UÿEðnûÀI¶VïÔf%ÚY\ÙÜœÙrîöÅàë\6¯:âVw¹º[åoî<0ñ1ö<d>öCj3Ÿ +kÛHÚ°ªé¡áFL7êl~¹Q®Qò% MÊÆD¹@òöTÛðŠÃ7,ÀFdd¹èc».ü<'^EÚÁí;ÿBp
=P#îD©¥u¹'4goû9*ÃÜ\uåPkÆʹ
4
CäFqQžÆ²%g"+Q9µr³|šºéŒ#®Ú€cwŠÍj2 ïT¡,!>nà5(`C|°·înnCŸJÓϬ¡û0ôç×2¡á4'9ÕšöümÏÅq«+2úh5ØVV±8,§fsá6ûÀÊdÞEq!óÝì¢Ù©J/ëÒ¡CçÎ8h1¹ìLh
Q€Ïrg?yËæË-çíÃò×äWÑUq(MO¬ÜÍ®,x"¶§žC7Îg¬Fl3C.BöXÍEågà~pNåü,²dŠÜ©;gúi¯µÙßcÚŽö5ð ËÁIT,:¿:Á÷¯ºº|ÅkT°0n +*€-Hð(>QIjÁc#Å1NlqBtYrÞJaÑ 5Ó{rÐ~õlQ»×$æ+2CèdÁÎQé©C?ÄKå%Å;Vösà)K¯9$ +V"÷¿utÏF}Ï §õO×ùWúO1ú©&€ßÞ6É#9"|:xÂ÷úöŠÌÚõÕd¢ç!óqQ®Š§ØTÕ^gxIbáø®]Ç",ÄÚ<;Ø\Gyüìi7@³fF±$ô{,^šRï=_æCÔçg®ŒÔgí·ÈØÄ\𚯯b_ž`ítÍ<ÙûDgVÍ +kp¿Ü(:0~ßÕ
÷;£Ñ¶³Øn»Í8Ž¯ÕPÃ}·Sè|øtÖøÙœäqß5
M¬ã>c§ÏÁžÛI»pu~¡ë&Ü*aA®²yëÕKß&©5±Ú¢ OO¹ØWN°ÐO#°(%Ø;ãNZkUaÂjâGë®çuo0~a|€8æÂe÷C
)ï8$ç7úu/Ò3å=ÌÁgѹ]Üm$ +V+§RøòÜÜegÙ,Ì'è.£ÞhwØ5^_~í· »ôå@h éUshÀ.³ÇèÅŠI÷T2€öÊPªnͺhyêEìd +xž{a(*ÉyŸhæäíÚKl¹ÙVÚV¥îÅ ^$2ïÒ5}2ý쌀 ݩס+?ðUè÷×ê÷Ý1)€\Œ²ÛÇ6.[Y>/4»ßñ£€fJµ$q,CŒÚúû{Ö/ö#YhoÞkA7Xñeó{Ñ°Ê
û%à¢ðRÖú:Ö-kϵi*P#œH ==æõ³ú±žOÛÊ£áþiaîoÁäjÍ÷P*o¬'åÈRÂÁkD×Bù)
ÞZ)¥Î8êÊŸ?Y®`yÈH:+%ò!7>lø
©P F¬lz€I²L}2r 91°ÂÙ®å×0 +ëò<Ãb€1¢;W1AqªöÑRnT98Ý·Œ¿¿NM£DIvó#ðw¿¢CÛ²óêeüX€fŽ§"ÛºO€'PÓªz%8ŽSíVû
û«ä
£!ÏkÅ+d²<=ù ÉçbLÚº&ÍMÐü|É$KóýX~=cÑhÏ š&z=C뱩rXOÜÁå¡kâéêŽþ*r»UdõXÁ¢Äp +ÕUÆŽá
·ç¯LQm|Ž§cž5[úáTk xÂkJrW€þ^(°HDõ}ëißÕ@íÜ
æÚý1òPYׯ«q=ÒñÂM?{öŽvbR·>h!EòÛ×a
t]$í·¢ZHméFh{PN%
öÐâdß2¬»œïñØo\e£N2äDÙÀ,š!èÝ]Ž¹nöZìIáE€ÆÃlÓÖ¿lð]œW [~Õ +ŠP âFQ±+sÎé9x'*Å¿áãåâüR2žœúP þöÉÑÔèóº«òýrô·Ëx&ÛÖÊôREOïŠPºÙåoùÔÞBhi2%í²âŸ0°íZm²g +!B"šÈ%,Œílå¯É°Ôc»¹f0Btmäž\j.ØMtCLÞ +q5ºêgÚ_
ÀI!ÉopŒæð¬®Ý>xzºÁíŽ\SîÓ2·£é`[ïI*îÍþ¥®éÆŸÚå4[Öq¹g =R÷D®Ê»µþÉ:IÉF +_(WÓËRräLýÃm?žÍݳ~dòüö^®Ngg{)ªòi© +Yb$bÀºXZ,ÚÄ]sÚœ"¢Tù;bqMv`œ?±ÎA¶O²Ü² +-O¥üÅ/lP +YÙ#V5¬Ä/mŸ9 ÑįÓ=±°m§µ·tœí%èr:^%Ej&
äKÊyÿWuGHYñÍËQ>p)Dí@5°¿ôésÙA'Dq0\î×ÿé?ÉŒ-<Äš±§ 8Ér7Ôîv¹9U§àXÐ&þ>6~ùu/ɱI¢ìl1k YëíS^`¢¥]ÏŸÑí=ûhµ; ÎeÍ¿~%^é;Ù©ïÅp{ºrÑ©û4þ +ïo\!Çž÷åqÏý}Íä"ÿ1CÌ'õCh¢ÔhPßúÇåª- !ÑÛÖéÃ{Ô(Ä.ÁNç@Ðg]gñ£®ÚlŸŒ#bä\Ô)[û!0lÀûœFi¬`wžV×}>Ý +,ç!tw~
·å6'ñ$ÙQÙÝà°!ÜÈÉ%¯NOƶ¥Ï<Æ?'-9æóÄÓ!Èhà Ó1¢ÊDÉvê>í¿*v
ÍÍnOâ²ÃKÌNJ«ë¢ï0ùMvFOªÅwdÖ c&sÓLsãÃÂdD3pypaR0I¬µìÚÛ»Ößœ.ÑfÛµÎõêPÒxøœ?J~ó
{ɶ¬xHç*I^!hÒ[ÂwûŸdKßûM]»Y?Š¡ò¡qv×1J ˲©2¶`Ã|ç«XséP<Í
ö_0â}÷1|÷óÏÉCŠ\SíCBâï9²,v®såøördMjsÑþÜ*
§[ ®â!ZIV®>å¯÷éÑâ0š05ç)í!JUÈËÔù/Iõã)ZÐöîJDñ}ÚzQU1Ùzµµû¬}䧫5§'wë¹P9æÕ(ühÇœ9-bZUCÀŽQ
Ĺãõ~þ4€3§5(~Êù£y³ÚàK£Ï×cpQâiåù#Ø:=N¶:êêTŠjÀa7
ú wÔ.:ÞlDÔP|0cêXvs |+úñþÜì·Ó<F«_dÞ9@!4º³9÷©è28lÑP¯¢ ¢sÍÁc}óAYÚ¯ŽCkH+Cörñ0åCnâCnEÒ·
ãUpÞ¢ÓÜÓØyYzY°eNãFN~$Â)þèÌœuà·+Æ +b/ïU¢kÜY΢Y<ÓIGŸäéV +ÎXŒ#ߎþ{å3©Ÿ»1°×'ÊŽ6Rfe·\£çɧà +IQ¹+åÃSÎÕþú P©œ:ÝÙJæG}Æù)ÐÉA«{B³«PÌ+·ÜZ.óâc©æ
?æ§Ì¢<W:vÛ
ãBf!fxÂh7X^{fÆ«#GKêôn>íºš
žö{gã71©»GGÙ}üè×-¥ÈÜìÞ³FÊL©~Ùø·ém6\äTèqŠÓªãKnN ®f°mi±,ÈõYÛì«pùý_ºáv³ÞÃEüí«ñH
ì!t"ø}(ùpê×ÑÖ* ì^ÎcTg û¯ilÍŒNQ±
ÛþkÒ)þ²èºÉY²]è§&%Σµdµp0Q_ÊÆFSÙ0S=8#xõ.ôgÎ^Åj
wjKÆÎø +3÷Å"*¯Ž=«v{ÔuÚ¶ø
µk-Yðxï©+hùBSU5Azj÷"L€PðœŽ38,äÊ=f·®Ñü¢²ÃÄ%mrñ6žñHŒhè7MŽúÝûâlž,éÄä`V$¥U:B×mèä8ú°°Ã1¡xhÚZhb+óÑ
ÇÊ)+»©êÛu¯øìýökñ5M"ŠCfÎôsõøÛYÇ_àäZ=JêÓRéñ(šSßžsäh~§çÚ6]`€í¥#Æ3-
qøó¶ &Â<`
ÐÞÆ|Î Îœeþ~ÈEHÖÐà_wÛµ.BCºQçÁÉÁºµÓLnNPYÊù&$àïüŠ#»Rœóî} +avSÌÿª`²úªèzãt[PEi:~Ì"[TAYwÙ!ŽéT*ÄÐ(L:ñïøxCêGÏä8®|
·å¿wNÁ9"mBÈÐå°4Å7,_šbô4»ŸãHòÊH{ÕÚ§¡yV³5²rù% kú{ßAábÉobÇâPÐv£å4,œsÑœðêµ9üãáñ/þ-éANÁX®ÁEr"ÕFîõÖ¹©¬T~èWƹÍ"Ô0^QŸq¿Éz¶®{òÞá|<xHÎÜÕñ +xwÂGËS®RŽãÊÔx±tÞŽW$~èÒôÜO~Û¹4a#}&t±jâÍi'ÉV5<ÝûŽ©§ÿ,È»ý©ìJ_ñ¯È§ªm8ºa=eÏýèŽïqÏ6ÞÓî¶Z€ê«*ÃÞc=£uQ«+Ä cÓê3±$.øz±n Ï<
y'LǵD@\$È +ÄËàd,@Ob|ݫûߵAîñ=Nòî²$ôQq¥õ)YãMÉØ}ÿôö°«SK÷!pÿò<%/I'û¶6RŠXSy°<§c|qóp÷WoZWâD€«ÄcVÀ2pUiòdRÐ%]Në³`.« P:ë°æÎÄ0í*]Uè7ö'žþ4-a^V}sÏ¢SÕ+8ÿ46ÑàÓ:yçÆmôÝ€®o«ss· I»ëfè°YQà©Cn¹Ž|ŽBö
äGl£nŒ +\°®vJlú¥EW-suÉàé_€RhÁl,µcÚSbÁ²yáÞØIÅ9žE7ü\úôØçÅBLÞ@I?²G±7,÷Fùþo@*+üLãNFËjPW*@å.XwÜH,,
)J/ ¬ŸÞ 4¡£MÆÿlsCÃe©Ýd£¿ãÄŒ!lú£8SÆôi ù
œü<Té¢I +T:šiºë1Y®qª[4 +¯ûzØÃzÙ§OªÓãת<áêÎo²#î¶ù³«%æZs&]Ð=i¯Ó×v`° óq% ñý+.QôôbÉW(dnq·¹sìôÝ&GÆÀ[LeI<Õðñ
BxõÓ×_Œèß6.ÓzÍv€Mhõïê·ØÉ`1 +U*n{Ð2Íí®
tdo¬Úå¿¡óñ£ci
ªÑôXJ"+Åquxx'J¢ø)quéo
0Ž¯±7ÂÈ*Šåø :I@ÒKOä_ç[td&ôþslcTOÏPêÝÛûÎâ÷ßf3:T+€COE O@]±±o¶Õ¯® #ö5ßž5÷û$S,Nìh&Õ|[)ñ÷ö|óÑ1ÿqNëGÔìÑø_G£OÄ]ñ§°ËÈØüuMíî°8öaH-!ε&,UÏ©=Pëô~jq,8ÆéÚÖÛV+vÒNBìt¡4ñœzÁB¥vÁ +WÚ"¥ìxaãPKóùïù'R@ÍpÌéȪnù#2G|À,é°°°_è3±@H 0ös\±|^g6NF:8óÑ/%Pf«_ê|Ìe÷ÜG+GÓOñ>m vëýÛ"Åå(®`hÑs`vO¡ÇbókZžb[äÌÊ+ío0=,:³<Èü1œróáž8«n®Ì
ëÎWìýþï Ú@ÇÆDÂ`Žª'>ÝIò}£t-®5o4=
Èe$ØçÂŽ(^hÝãÝ(.û"ÍÜN
è·~/gœŒü,€Ì¢ eB-"èöcGhG·ç>5Û
*CÉïÄ+¡e6Ó8ü0ò\ÉpE7$Ô:W*rGûô€Kå?3±±÷®Ú +¡k£x÷í%¿Ô®±ÔžJ&rÇ©| 'r1ivÓ*Å÷N®äám^5 ä}nàsâ60çÛåä^#<Cõ3S¡ÑCÐR°a)øÊã-6y
âÎï_ €s óôßE8#uÑE |K<,=dNÈôœv³WP¢°ø/8uéî¿ÈÛO]*ñQ!Ð
9芜y¶KC¥³*ªíŠð8é-~Ó¿Žå=+$@j©`&ùr¬n¶$Ý~Gb9fÝæÉXÉ[¢AÜ@l'¯î&¬2÷&ê_3atŠAú¢+è^îÿVåD%G,€4^º«bWVªýmhëYBÇozZhÖÌå%ªÏ£òÓÌÿüöZòûÐÆùÅØs{Ÿ¯ì}ÚN"OVêêdt*Lç×,õ1#YÙ (>û`̀ε$Œà]Z®×~RîØNöãr1IÇžöMf<àq×o-vòíûù÷WR>A·/øÆx«ýô7vq&ï
îU _ækñ¥ÝP ö^Í#ÒüÑŽ«ñTHÛßS+îélBð¹}§×îÈcJµE¿.ƪº®ãªU'aÐw{þ]¬ +(}ùè7qðÔóت? +ædãfÑíõøâ€ø%¯ÓgÅÏôª ÊSn"_ìQÀfìE9VôÅG9ãÇKÌZfg£³žI<
¡«ÏDÇrÃ`Îl'¯ãŸï-©w¶t4kÁ7IáË:Ë/Xw?=µß;LÒ׳|ÑœVç*AðîûÏŽ17ëÅWš]we_Yñ:xåÎæð]Ï#ea=JÙÒ°°
^z¹ûÏG8Y¹ìéÕÿ}ÁÌ£kÐyѱŒv4° íÆ9=µžYÃU&M¥*¡TCÜN*Í)öÁŒkÑCÚÛÕÈ[nÖÀIú»2m °Zà µ»Kr¶QP3"ëÑJj ÷bRL»Çw¶¥VmXõŒTå +Î-ØFáTà àæåó`¢õ~_×l£ùùκv©
ÌÜèÌË¡J53zŽËNÌ'O¹Ÿ
Æõ@Qæ4§ç·£@+ß
ŠÐ+7uHBÿ¥ÌD7ºh|ÓÔ/Ÿ³NMAê¿Â©« ^VñO1,€3»ö©úâéW?X!
Î:àWïÌ;2Qõ«H@%ÿ#y-Øü=lk°ÙnïÛ±Mh.Þ4ÅÒQg·¹ßŒâàBnå#Æk6§åš)=Ãø=ÌÒŠ:£LÛòÖ÷#w`)[KGòó@¡×èP|;WhYRǯELT/ð朮æ@¿f*"ØsJÄa%]¯¡ïŽùi4/âÀTÓ_8î>Üe°þöòÕ & +!cŠ×ªÉþLÇ,r +^O?dËĶÉØUn
ªç82CÝ_§6a3Äó¯ÌgŠjC)œ¢âÄ*jR(Rïì=5e²,åÞsªR#3³ + ÓµQŸÐù7ØîmifjÏ$iïŒæ4-!í¡WÃàCk}|gÌ»m.
¶ìtV?4¡ÝŽŸÒâ ç8yTÌ×ä|Db(EV6eo|gâÕSv·@ ÈBEÈá6þni¿í#<ã~ᶟí1ûd¬¡ +ÅaÛžE -Öîó@Uq!ÀpúÀõäXtꢿOeÜ&åýüFyæpöºj&åTLàÍkÖHe<oaîë»ÏHu+ÛžùF-R€_ ßåç0ÆÌ4<îµS&ToSŸ9]לøÕŠÞ1ÂSÍLÍ](Ay +endstream +endobj +18 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-12 -237 650 811] +/FontName/MTDDJC+NimbusMonL-Regu +/ItalicAngle 0 +/StemV 41 +/FontFile 17 0 R +/Flags 4 +>> +endobj +17 0 obj +<< +/Filter[/FlateDecode] +/Length1 1644 +/Length2 16974 +/Length3 532 +/Length 17916 +>> +stream +xÚ¬·UP¥Ý²%[áî, pw(ÜÝÝuáîîîîPž»[áî
îî·þœûôé{nßîó°"ÖÌÌ9rdñ+(Ó ØÅìléè +Ì9Øæ¶"MÛÎn) ŒT9¶ÔÚºcŸè°Ó«+ÏJ_ÙxxÑh Úù6š|$Ã<®9Ò¯ŽÂ+s«ûúŸÞ:ÑùrÄï«øúmëv¢¬³¶å«~Û¯eJÙ9)#åŸÖªO?«D§8œç§]@£ãŠXEØo?PRkh ír·gÃæŸ=¯¥ÞýR¢À+ün*ÄùáïÐ;*³Eð-¬h q÷FŸ
ÑvŸûãC/çgÐY6Üúüdº =¥÷eeióx;ý@îî vžcœ]pØY!bMž}õ·5š®êÈÌî
×@i/QAáÃdÚÔFs"èJg(qÀùŠÚ.3ãïþp-D'Àek.~œ1l!
T€\á~uÄÑVöæŒfŸÿÃÙkøéeøb|_bòuŽÎgøë º&cÛ€&ÕAÀC¶ÞðÏTYå/ܵgPê<¡KÐcú +óŽQ÷È+áÁ€ïvëžãª2šÒ#ìêåçc{sâôÏäÐüÆ4úojfNw$ÅyÑ£"}ÒØ +×àík€ÅöFË IãÌÏvmT#±{ØQ¶ü~e~FdÃ\Æ1oîµD +HÚ¢HŲ=Ån#Éç'Ì.
Ÿ2lÄlP%u1P°DoÔñõ8ü¿SÀqHုFpP-Lc6eŠë©óÉ?é÷€hN59V³ñT?I©
©Ë÷¥å{$r?zrÉܱÏ^ÀCAö춯÷Êü€þMR*S
NñU«åýZWÝÌxúA²F28Åhåµø-Mä³HŸ2ÿhÞ1 T?L1ÜóÑèY`Xð}í{Ä?»TÅQT4q(§5ØX+?#*ñOå³hߥ©ãL\§ÒjÉÁþ£Žµ
qb¥êG'Mèi]UFDªØî¹5`RYÄ ^rPQ8Æòž +gJZ€óMéS*`7'Eo8ÚìthSmÚ[¬@EÃ)éùÛàiž®AèÆ<.=¹ybàrªZÚ3b3UÔxAq &Ò2hPÊPºŸî·;ÉþlM§Vs +µÃÂpxœÃQør I0a¹Asbw:)OúOj͵8z1OŠÙ+mcŠ¬³€œhF'žÙã;õ@&O'Ýò*k_2Ž¯n¡GQ4ÄîŠoíûýÌsõFõ6ÈÝÃ0²ê¥ï.Rn@xÑÛ% +¶"Uz%ItÿVmì-ëðFgJ Ÿä6CGÊóŽӿàŸêXR.ÐïÜ<O³ÂïÃiÝôË-áåÍ&üšá6-ô§nö*éÖHë@ì#ÅFªò©²xÏ+鵟M§Ln1èªQÕ¶vί[<{µ·©hé0ÞéCLë(
pÌqÔßÆ?Ùñ0@vé×ÇQPÒòîÕ5º'Ö9ìx¶v°$Æø¢ÌN=;/4¿,ñeŒ'HdFm¡«J4mØ9÷P,.rÛœ{éãG1ñEÖ^jiöwÏØœjç¶,àO Yû
ðHŸÚyŠNßHpýØÜ*øѱéÖá¬)¹Š +:Ht!ìùÃÏßçòñ?2Y8«å*± +ëU¥,èÄÊïì-Ùø1Úä³ÃUŽ¡ò+œicY)Â;cÍæòloà¥de9=D0÷pLïxf6u;*?ÎmÓæ÷+x5VÇ*{òQÙ(Ñßì*
óýM,ÏÉðš¡OBŽ
OÑgìŸ}6~µQRw°ð[ª¿W Äfš}l±4̶áÅÆÅl5¹]'Œ`ù|·¹ªH÷]s[uŠsêd:qJKC-hb«èyü-ZsÍ8×Ôš\µÏ¬27ÛuÝ071ͳ!?,0ºcKeçQ"i·Òù'²7šzü©Òã +Ø.л°ù¹©IzÖ{4ùBV_IlÝáS
éâ`{ážQ1ìË9c*íu7_ÿvla¶4ô~»®ý"%ù
ÍX)(0HXEÐ-.WŠf pÅ?MúÁo±Iªóx8óŒœËŠe +k³€õgË¥ÀªµÏKouÄJ=«n +JEæï"Æ%ö¶ÌHm»Bù9×ðG|û±d_KaxPJTq{Ç ¹€ô2UWÇ
ã +K(zÑøu7a×=êÂÑ|P¡XÇxšðÖù¶°ß{úUPÜØÆ+MðU}ŠjpY
ÅO2Uð`j'úÂj9m«ãsAmIÊ;Y[bËýØøÉê6º»
GeM§Cý»K/»råæu#I¹ì-Z)óÙ<ºS
[ŽÁÁ·'ÎZÒíþ®çR¬ÒE€q\LžF+JIá"Ý3åB;
ºjÖoöúÄ%8ùyµ`Z ³ +pzBçž*ouâÄlTÓ®z:ü GVšº1Ï`G{ +Š7ÕœGF$õŠYsÙýÀåo}ÅPgls6¬³ + ÙýlÉáɬŠÓýÆ{Àk=MAÓN¹/ÈNšYôÎÂÙkî¬Ç]ª¹ÜöõQè÷*MGý +RrÑÑ«Î;cl({dÅÊŠÄ=[úŸ@¬oø¢mw<i Åqøs\YÄÆ¡çC\7WöñË,ü² /ߟè®!ÎAàèî&«¡
òd8 cT$J_ŸÇî=e2t%e#øÑ÷ß~Î>¬MdÄ&ÃÛ-HÆ|4! âûcà\ÓàpH5LÇ£Å,¡
-flž^ËÆj5zêoTÉ¢TI'G»IîL!@µ}AÇÏqÐåÿ[
¶ïN©ÔÔú-MkŠqbß«^%$tMà~l=é=9§Õ3ìlÚÚÅ_žÌ<ö +{ÕÐóÃŒæšuŒvyZ.a[µKÒyÛÇø€1ö>×<ËôwEÓmôCažŒàgiêÒ»\çîB,Þôغ<\²ád5ª€GK%Þr%8¢jÛö +wÔ°cíZ¯&Ó_4è-èÓåx^Ôl€ºGÖ(<æq±£šnKѬPn±}7ShÞqíÓÜïîT7enXåtcÄÎp$m²ÃS®2{Åá«Hq²¶xBv.øO\(`Èp¯Q$[%jïŸa:ñ@J¡qá"öƵäÍ2Uô +{Z8¢€Û:È©ù**DHB|P|vøXß²M3lY<¿BÚáuH%jŒ2ï¢xÄ^+-=0õÔÁDT?uQm1ŽM*5úÝ*:fì¬X@úšŒ¥h0M|;u*ÁJþÅÀ,_|;ÿàÍØá6¯6»íôíù0÷Ñ -nc®l¿EOBt`_¡r3CεL:§cÖ3©§é;-npsvržPz&·ðw'ßß)~áߪðÈWhzÎÍ8uÆ4÷Œ«|!ÅA
ŸË¹c³`š8NP4ló÷·Ñ`°ÊÅÍçn/¿'C8YRÌ*.8+ÛïOUL÷È2UôMd8Þ|CíWH{?×2N¿uíSTuÂÒ÷ªTݳrâwÉÑÑôšsG_eŽ
êøÞã"ž1ü?nò7^¶Fÿ°CÅÑâËÁ² Ø
ñ}÷ +ík9 XééïÀúIÛ
+Nn]Dª$öÞèá*Õ·to#nåÎ{ñmöw0µïÂ+#KO!1œJhn3&~7áô®`e;PU?ödÔŒ,·à({D7+ÖO}/×·N¶k>.`€éß?1 +¹ãëx]ä%;;
ã«
?®É]©E÷Ï»ï£sŒ,,os/¡øT}âf`·ÑìDç|
b +m5okfÉØQ²ô}1T¶öWÆ +Ô碀^hÚBº4ÉgéËq-ŽŒÒ.ÿüÀ h( +ºSòrûõÑ9Ò.hiÓ3>Ý÷û#»/^÷zÉýzyTt~^zzï ?þ0V«3zsÕ}»nUB_Àì``Œ²Rm¢§·¢íkxd'±{tb]³FD¡v2 ]%N`ä Ž?àIvlmÉ÷#qÖ)f²Gèæ4À49ÔcÆçPÌm<£§Œq7G®%í`¬xgj*0@mÊáÏÓGŸÐ +
@%l7£é¿šaà§Ð§uÐ=±Ý§FYaí€t &ŒnQ€ÐR»!ßÊaL£îÔè/ÍLtØ\ +Yoßdó¯
^x.Ÿ¢ +¬ô§'ROÜF£o·Éÿ X!ØKç
û
CÃséаð
^3ìpε^8)ÇAGR8=Ê0Iì'Î)úžG£lëéä;¬3Õü (ì¥iÝHNwxšì±PnEûVùð®«ÍöìÚ.| ZPŒõº¯·jÒ?zl$öÊÔÈŸ6uaãsJdÿQz¬LmMÌFuTØM¯ŠhFgtÀòÃ"v¥%Hi|²`¥³Rµ/W^5ðIAm`z6'9NâÍØ:sDÇqÄ!/ÚùWc<Ôh&KoÖÎÞ!ž]Q:è·?ʪêùÛÉ¡ÕWjê^Lm=4¡®ÌƬl-á9jvXâ¢6ëÂS€?üÈNÕG/ûm·q/ glÿ~k²öqÔd[)j
IïŽkªÖ¯QxÂuûcß< T=0ЫK*Æí5V¢}âBöÁá+§ðº03-wv.bãä|~E?HÂÖe|Æ2?{ÙÌÜu*ÂxrøÎÏ +,œ}ÚvüÒÜXO[
zj#÷Ä,ÏòP&ÑwQQ³5Q¡M<à¬B!Ô¥R¥<óîϯ5ën$Ëk~ +ã$Çlrüɲs +hYº0£îcÊ(@ +KM£µ2öÒª¶.}TupÄŒ<K²É¿9:CWyûýéUí»×ª2íúÙ8ýé"yZAG¿j÷§W£aÈÂ\Ð
lè €÷>%ͳ_lÆ° h®à=Ò
nÛÈ^ÃMVtA;?ðe#ùù7jðyFã÷º Îý§É×ê¿MJ#ãO*U~Ø?Ëì³þB.¢OIRÿÎJï˶0Aæ`žoŒi1œ¬[Ú¶Þpʲõ;ó-iA%Hc6ñúYöü'ø Ðñ×ÞŸùuûvãÃ#JÁã$6j^»¡ñ +_îå"ýFðrxÌïB׊-£ÿ¬Ùä`:8ŠõÖÁ&¢äßbðz}ß,*ºhS@üÄU7ß<÷+ÔﺌýRK0MLÔ>ã°ìý»*{Ý (=çH¶*ÉÑRéÌ«¯m +À ÏqÒH2J£ªPYÅáõ5âûÅ!è)n÷ÇñeVòm?¥¥÷"1*JÍi9ÙËÆ>8%íÑr¢ÄÞàÎêÀ6I3Ì^ÁȺ^åLrYT(ßD÷Ós×ÓÄ"€$UýÃñ³
Þ¯c
¡±Ø
vë~ø¿ZÍÔä&4U¹ŠYHà#äÙÆ^*øwkàòön÷ εºL1]Šv qöIàví:&f -ÎÅ\ø¬/÷Ìâ6f#Ûù¡|³Mî¢Zm2ZŠÝchOJŠ7gVCmçêc5PÆ:4€±~ÞzØA!DAØ;磷gÓØ¿«I)ÖÝgDNÔ'ó$»í³LyÖÇtEÄw&kqoxEh,ö!IÇ÷°(ßš¯üxUÀB²âa$9P\Dd[syÀ2z% à"G¢Oñ÷v¶Cëd~Y¿=²5-ežºNY =.$جïÿÄË7Ód2éKñÌ%zM +ëD¢¥?DÚv?ü³Â/ÉK·ò]bÔ§å¿
žÑp²(Kc±²wšr©V5¥Vi'®+w)_žÀÔÅê<ZtÐŽž#9gÉsVméßP÷ðõ;óÊüIýŽÈc=9}/(Ôt³&·8¬Fó·/Bžð@³ñ{ðÍàmÃWáïØdCzh~*²B +ßCÚ]%åd²fæÛÆ:ëÛÒ +"-©oøf_XÇ~j6ªPù4¥Pa¬ õH +F:v
ÔÔâwSs6ËCRa¿k$Da72CŠÒÛòrÔŸ@Ì-ÁVÄÙ þIòc/Nj°¡ð°šeÆ*õKÞ>µ¶\s¿ï"ôlÓÈaTZ&D\£LOkÖÓÍkÊÞ}åÞZ,><%5É~
œÑ#Í1MNKACNïÉ0*)e~k×í×ñqžFgIÖÝW8s=m\göê ÐP«íjê
ØÙÔÛ2(W¹ê°á`N®DMŽQË0¯ð~ ×,cœHrŒ:»¿Á·×³ÝD/êQÿæÐâ,Éh®°{€±Ñý°Â?ãRb,JcÞûpTFµá:®mÒ÷\y©Bc×æ ñŒ/¢
\OLqÔŒ ãùxÈÐ-W?ÕB2úþö Si£J×c4ýxuÃÁr^ÄÈò¬gÙû¢ÂY%jKD8Ãb»?îÛ9ïæ@úñs*®ùFÃûkP(Xms<À§¬š +%>8sïµ
ÍÞâ;Dúù2åz
|gí5±¹?AžžKÕâ5H<ÈÙ ?ïØY:ÀK©6¬4c%Û
7CcªØèÕIÞäMœ1c${yéÍ|·íNLc} +¡¢³à. eÛ¹šlŽ|-sÖêk*Uó"QdHH¹(Å[¥ïÇs·{=ÔèQÂÙÃÝå2-òÝRŸ
)Z¢ +â3:uFò&'Õ¿»³RÃ2Gºº¶f°¡žBÓyZù9ù<ñùCò +žùîÙÁØœ¥r/1úP^µàáÃ%~ß8_ìõ#«¥ßZXž8
ÝêüHÜPEäôvØfÏCQŒ-|=ïõ7`öãekÖ@ÌNwEâ±%÷ÕfCî7Ñ0=·\&?ZIw㥲áÓl¬7¯rëvôÄÎûg{dÞRÜÔü Dö
šòŒ¡îÚ;ÙßñíODväÔzg®ýBxïlÊW[jÉDÚ·Ÿµ|uìúDÉà7šRp9d?pJqå£6@dÝ 2$ûÇŒ}¹hé
'{3hL×n*aTüçK|öS¬'*DÅè~&ŽXšhmV¢B¢|Á90µëé^¶5mŠ +5Ô{?ŠQn7ÅbòcG¯K9ÙïÎmØ¢¡4Èñm0FÆÂéM±U@E]C"ÉõßÉ0¡,Š1r /ª f
ä4@J+÷žú³3ËuÄHr +ÓævRgËÌ¡5yÒî÷·f`Z6Ê÷ò@rñ«Ð1úÚjvÚYîü6»€wi?YmpùõÏa°±jÔœâhÇ/Ñ"9øÓJsQ021°.«9§&K¥æ¿Ž!~{(¯¥=jbF«L©¶¥±séd1iñ¢ª +3¬/øqN +šŒI{Ü2E}óÍèfiWvô²4ŠÄ +Ê+äãùœÎjÉSRê¥hz±Dœ/Üæ*\"6PÚö$ÃòÒêkÌ Þ·Ÿ±z:ú²«éÆhêd]¢<~H®HNìFÜcJ_¥0+ÞÛ!Þ²E¡*úËü,l2iis<Lõì¹jŒiÉ=6] ¬yÔëŸ&qûŒõgÐ ¬®ªn±6ºfFÚ~çù³ûú÷€ÌÁ¡ëHô¢ +üFŸw&úCŽººHÐë2dœs;œ b;¿Ñ&×^Dá{Xy=®õ-ñÚ"ªï!Áùñ¹kbKi~Eb1°![¹ØûsÅWWH,¶chÑÈH¿]âBéÀlsQªŠ±ýZú"Úy¯©¯þjøR¡èe¥¬E!ŽuÍ
°
ÿè_ÊëuD$'#®J<ÎeïÊô0fq§bL£?2èetÀ:§¯ÌÌg<«.{ãB,ךÆ÷þž<cîJ ºç[až=Ã'ÒhéojªsÑuùcº2-kA1-nÙy,r^ÉÎ;íïæ©_\ŸÐ8k1ØtÒt5}j°:ÎÿDÇBuw³Â%`oêÀr¶±:zGå绹ºÀçî[R}AW6·øÐg{åÖöxy%Ð ¬[M¢'îðäUTâØFJ&FM}íÎb×X€fÄo¿$¡ÊÒªõòK±[ZB3ä$`תìù0ïýhÐ]b)Êyx»éž®¢ËáÞãù(bþ
Á`Ä[ûæo¥ÊY ^×xÚ=v|5#ôywú3ÁÕl +`Ö¶ÄñÍ Úf +n÷OÌToCŠ·yG+Ô&ï·Ù+ØFäEŸó81;Ö'Î)ql?[Ço]S&SlšfƺY§|¬Áœû¢1g¡@MåAY³lA!³Ï|_¶ºé}5SÏ,lQ<R°_ +bpÞ1IÊ +MoÌ}2l9òzgØî©
¡0|È¢éÎY€È§¡
°1ãšzC^Sñ±}ãºV£
±Æ&µA"âåãlõ7<4ïðlô,AÒ(LõÙµKÊòžË +!3\]vÇ3E ¶¬$Dãï($²%îÖɪL^#ÆtÛd3LwwüèçtRŒa6 +}üœ8ÞÆCÃôÒejzX!ê}8>o)å +õô2 +²R³ÍŽF_Žíøj&NCÒ|±{Ôß\~A«fŠ7ÕÑ¿çÁÕ«1÷#Ël)^PxNQh?¯úŠê>~Š¥FßÒz`»==5ÆT%U9ã R\ž`ÉÕëADÁlèG@Ã-àHERl³ïûlÔ÷%"sî>6ìÊÎk²Îx[[9/ýÖz-Ì JC>j(Õû
ï/GËä%ÃosØ<z<·WÄßfJ;_9Ã~-N¥^œgÜÀuÁ¥Âs«÷£Õ O~)_Ìz«ëK:ýjküblÀïÞtPôY> ý8ÜVbÛl÷¯áË&±6EùxÏaØÚcqÞ`$µQUuM:';}7÷·¢ÿûp="SÃóŽ;ï÷Ò,øaÝëùô%¶p"Ï÷?ybÔÂ{ñ LbÚÚš ºoõ)£ÈþmØÞ%VAÅÙAZžµ@§hÓ÷Á×a¢_Ñ@RìýFçÁ8ñkËÝ$ªhK<$îDå6¯ðØôÓûW¹çµïÍõcÝ$Ñw [M¶ø û«I|áþnmž +8÷èS{sáØ»G§uÑÑŸ(5µþOãprNšPÄ«®Ke%; +0tâ;_;Ž§%¹¿GÚHaûZölG +Îvà _1.§IKwà
.j[¹vZ +{R°àÁ4ÜÌm3ߧ眢П\BQN*÷×à(G8:cKwÄ-éü°hñ³
Â
#ee¥u{Rør«+<ï +ýVWà|GÔÒ<
± +åºÎàëw\MÇõ€Âe +Û7?ýÔã51~õËþHƧ0_
fÙï`R²êMº<CËp@¶]¬|sÞáË,*/»²j*Ç/Sý#šSw(ÊãµñU9]ï¿O#Û³«ËXª¡õaæCá}:0Ñâ0ÃwÆýVÀÑk`hÂÏÑ!ûiÌSï®#ÿúUÞl9+J>Î3Vy»í€µxeþYl¹šõÜÂIõcœ3`9óÐ_¯H"蹡2!ØÎý¯íçz»¹©W~HvL7Ú ñMÑÏoð$KX6ÔåUp¢Ã§áËt7ö°(H6ý6xø²§R§W§5WJDSUÿÍýÏR¶zêþwyö ÒßgP!$ëïÏ rVt-æCP
QKŸoxoí1:
a¶?"Û[ÓsAÌ>*drÌœj?ÜC=Kl\šZwÊ?š:Zq£ÊB0 ¥¶TøÒyÚ!¶ñ·zÍþ®-}±¬íæ²4ð°Ú^è8»ÇÁHËwæCŠñ%¹|/²WŠV:¯Üª7>êõ©mEþ~¿4Ç¿žM×¢Ÿdĺx?ý[E8¿{[û»Üù85Û!HÇcÎ꟰~êzbóžâŠžÍ%û±@¢öª]âÞ4S¹ªÖ13Ö}"ùâ÷ÛÀrÈ`*¡vŸÞ"0k1²ÚóØc³fIMjQ?
bCzà Dh£-§ÎâªÚEÖËUvôD;rQ©P-Ô]Gæì9 S¬Éaí錱(µ*u¶Ã!õÐ-4KÇQ&ÚÅÉAó2Øé ;ÙŒ8±Wùµ
ñÐjÑôÔïëUpdbÙsÈ}fC3}d°Šzô
'38Èë±ë<šé E3Q·]sÞOÌËò9T!bÅQk0RåC©á±"]ðGûç2òAK¹3ØêL¶²:m{W#],äŽ?I6¿j'»n6<(Ù
?óEîéêçKÝå4šLãߟ÷EÔ¶nïêB¿ÌåÇ7
ÞYâòØ#C +²¢Zã>
Ö±ù€©ý%U_&Ö×Åšü2ŒË°÷ÆmoÉGÓíäüýÝnÒ
!ÿÑrÖë¥Q±ïÁIJ^ïU³k]þ¯=ómoVÝ|°gO'¿+z4øÐ.,Þ°uFª}Fac-SÖÑl]6xÙûôF2=;2ÊžÃA€
ïz??u\U(m2%hØžn®%ZZXU¶îjxK:(ÿÌMÃ0} +§Eh óŒý*¬ûP@lIúO9<Yý?s{hT÷M⶷ÐK§&uÞboÂvà-ïQþ5»'^ž£à0K^I3·ÃŠñó]îïÕnõ¢·Ý.Nfð;ѪÀíz9iéé§Öý|ªWûS.ÕT9SÂS« 8t.¿ŠÑ|ŸWßÍhÈ| Sr¡f¥ÆµõËÕ²þÏ:{ŒrŽ`ÜÄ=ëÏìsð¯ØÓbßß»ÝüÃç\0EfóÔ§JLª[VsO²°Ì]Wã`/ŒâBÿ£* /œ£RUÞ[nÞS~^b¿7Aéê5ëº{-§ß5E=×|*"iQѺTÙ×Ïg®òŠ$î¯U
ü¶-w¶µ\Øì³Êu]Ó¥sM/ïêÛÖ#pÊŽWÃv?ê2~Q«<Uïò®RLߣiñVŸNMè«àÆSÇöÇŒ©ZúNÔõ çÝOÛEúc€·2ȧ:Œäyk}bïÜ +k"s?ëŒéy}`Ì¥³çÛOxúoó|þàÊrÿÿyÆ;àð5[b77/øغ ÑnâUλ÷üúز dýâ-Îßt͹¶ZééWÈlM6ïíñöRóÚq(ß)fÛ+Ñ»3$šì;àvQ&ù]ߣÕQlÛu¶ß°×»^¡?}þ+÷iÉ[N°/KfŸºÔ /`üìsÇÃÇÓï<oÉØþÂþ¶ÈÁ#åKµž£?>ºè
Ôë3÷ÕöKZÔóÕöªõ¹³¿ÞÍ;²ÅRkœÎ²ö§B2?»j|ü/Ïøš/aÓ
M׬ÿéúÑWV9D=ËT€cù2ÎY¶®çÂw(®^aWróÖQÕÒÅæÚÑGy9SW\«ø>]ÀžPr÷ÃêË>Ö'z.ûDÁbÁVÿ£ÁÚ¿ú÷nWZ`œó]ŽÖ4ÇGÉ_ôö[äÿôû*"Á°Šæí¶s?c,õatþ6íeÚqîºk'Mû¯lÌ-×Vf09IfÊ[ÁkNÝf^À³ÛoßW¶žwöOö5Ë*/`¬/MÝÿË0bYQßÖ _Z'÷óŽ>Yß*§µqµ»±~¡€å{ótÓ~ìåßw¬7}v"GðñséNÎzzIÄ{Î^õù[ïkþªÛXõù%Wâ] µœ"ÞÇ×ÙVLô=œ|æv§}wæçÄn/~÷Þ\£ÕcE¹Sõ<&¥Œ]1µêlšÓj.é#í=oÌ×i¬Rx^u·$ùwPfV4¯Dº$g§é»Bv»ïÊ3Wÿ<dªº®è HÕ}íÕK;sºùDoê9]Ù-©W{Wjr9¿GGINÛÄiÆIenGï-¹Q^zøã})¯ö2㢢.ÔéFË=~¡ýqçõ_=±ûV:gló=j:]3ÁäN\ðö©µ
éœs~]fêÊ!*úB¹M÷[e«ÝSëœgûOžº8·ö«øÞjŸ$ÛÀÚúÍFäWàebFGîÿ¹»ìúíO^aó3$®ž¯SzÓ-ÙâSØ|7Nâ%J}ÇçÉFÌÊlrÜÖ^1U2Þ£è¶
kÔaa@rNjbQI~nbQ6 +endstream +endobj +21 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-61 -237 774 811] +/FontName/RZRCUW+NimbusMonL-ReguObli +/ItalicAngle -12 +/StemV 43 +/FontFile 20 0 R +/Flags 68 +>> +endobj +20 0 obj +<< +/Filter[/FlateDecode] +/Length1 1662 +/Length2 11975 +/Length3 532 +/Length 12869 +>> +stream +xÚíweT\].Á-Ü¡qwwwwwhNîîÁ=ž»»îäòŸßÌ|s¿;¿î̯»îY«Ï:»ä©ÚõÔ®sTEQÔÂÑ(åèàÊÈÊÄÂPÙ¹ÕVnÊfv À»RÜhê +rt0uòŽ +è`ñ¯é¿ÓõwòÌjzjâÚôÿÕý©Ê{+žjx9ÿG[ÑÑâ?9z>3r±ÙعÜÜ +Êî&kr'»×
ÔëŒaÚò4ã¹ä©c÷q3Ù)YäÏÛhß6jXF9jâoG¢ÌbqM±ú;¿atC³÷6ÊÛ>UÈB·šäÚ«ú8Ñ.:/:€ç=kÄMê® ÊÝnCI[·Útñ¶
]+ Yú/¢|T€Ce1JhRí©Þ"Œ)5ÍG¢uåã5]µä0¥ž\œd8jÐfŒâ_J*Õrð?fÌ»ÒjÇ%®ÍÕ@)>õÀ;Jêê©ÉS_º~ã»èäsæšàAØx3 lK @mâYëË Ø+n{1OSÒ+æðBY
Aýl©o¥b}ÎU)IB³
šÌºT[ÃcOêFÃþÄsSKÆ«à·`µ$^€€ ³±ücš¥Í6/íJdŽÒ¬U°ÔÓ»š&Ðcå8nDÈidŒðÓÀY{l% #^¯úäoU£cõÏsÙoòÆŽõkY€)ࢊYì±Fì±ÅÞÏr'KÖøs+DgÙP?¢`Ñm}ÒïØCêÐýÄHŒÂ©ÑY}©YÕ^hËÃ:µ?Fåõªi׶ŽOì5a6¥û_óâ:ó×MkMð!Cß:«.^
·VõÝŸä$š}=<°Oܯyª®Ì~ŒÿšãzpgJ/X?'óuHVÉ:¯à#ïbYûëvsüÂÎçR^ ºÃË?~*ÆƱšìWACBÁMüÀ°:u +[©&êv·uÆ« rÆ:#>ÖS'È;'I¹¯ñD:£FÜCGBm6c< òãáü?ÁBJÓ)ßáÑ4õ +2»õ+çîEðe¿âvÿê+ ³,ÆY>Ÿßã|"2Zmr[ô9(kåŠÄåO4Æ NëË©ãVzº¢»ŽT:ÿ¶ã~ÍÔPà] 1..Óú,KPMêÔ/Y6"
®ÝÃ0.Yn +Vúί%Ô,e<ÁYFšîF^c£ïC¡NÁŸñ?pŒmõ¢é!0HÆPqÁ
Ãnng
mÜ'hŸõÖÓfäf~yÉ(ÖQܯc#Î×Ò*;kÏûÆfüçÑ
µøàŽÅkŽ×òÝñpJ~.ѲìkUkts KûqRÔ(ñ-bkÓmÏ|®ÒzVÀ3ÓÚø˶*ô°0''VÓºô»s56€ñð^"¯n·c]± +ÜÚc Zj®üžÙKaT
ª¹Štìæž³`ióc{SoËMi:Y¢|XÝ*Z:9;·&b¥tï+«èÙûßvÈÖý~1ͯÝsc);gb¢)¶¢ß?uo]>NG¹Cf +Hb8×#BÂëØÆjJÈhÝŒµRÿiÆŠlÔ;3|íØmø¹Ñ
9œ
®Èš×rÜM©Ú?ìçsäo§ÚÂÆ÷/
YjEå¯×:Ô4=ÙT=§±6bafp˲êÓ:B+Ë=×ÙÕúõª-uë©;TSPFÙª6Ÿ<pØèö â[ü0?àtO`7Sv:á0·Õ5«¹ ó·¶Öfíx²72"鲩žÕè»>QiÇ2ÁSKñH\| +,ÌÂÄtú:tmË·ÊOÓ|ÿ*J¿Å?D) ÂÌý@Ø1Uöï3/5¹åæÓèÇ¡zÔðø°P
Ð2uò®þ1ã +KÿÅÏ2KË
®©,êöcãW?Ê9b
ãa×7üo±Ø¿F»Ÿ&Ãtáö{}ãèßߎ°BíÕôH÷]fÉ$¿Åª×ª-rHU^C'»
šB.¹`>tó®XhóIVSÉT¥ZÒ<X[;ÄUIZD5ÏÖãw€
áè7lÔà*O?2}Ëï¿èç,þDk~$ÚåJ(¡SÙ¿Lç§^÷+*ÙýŒ?o]OêÿY&0;úÊEY¬ì¥v3~C·þËaÙR/4!çÆ +«±úpK¬õ&ùúW&R¿dY¿ÔŸ0!뜺)ì +þNgDù%Mü±!Iw +
VŽZù'I<Òª6uþvd6n/òyç3ÁN6×!ðp.ùØa}+.é÷ +ñô(ÌÄçzÈö1qßòüðèNáPáëùÎâÅ.íK; =W5Î¥ù`+¡<«Â*ÉsSÓPaú_WÇ>¡âÆ6ãÝ¥þ÷$6¿±E!âhwyãÜNæ}RÄÏD-r}±ntŸ®T/Î%bimÉ2ÞWà6 +6B-z%9bµªüh',ŒÒ7ÒE9ÔLûœ'hp¥tñ@jË0_AL5îv!&ní~
0b¡!ÆÈ2Ó_«ýÔÎ6 ¹%ª_] +dFòö±Ìò5cE&\(H2ÞoöAÑ æ3Ϭ7MéÝcªuûéÜú<{aÊØB<ž*o趮znÆ0Uô¥aÙéhXõâ|!ãÏqÁÜ~ÞŠ:Èk(Ô£c*8Š +ÛDV²°uÛÏ°µ©°¶fsÓ¢YÝ^Z8Uk+ic
€®Ïæq®ÑŽGµ·5}öÓaô,ßs{ÉÃ"œõg`~¬&Ð¥{éN€òÏÐÄÀR¿ë·Üô ã§* +8Íæz[œð>H0jtÞ^$È
"d
w_ÔíU;_ºµáîùBEüdt¬ã¯šI
Ä¢`T§KhòÉ |N©øS<€RŠG<C &RTÜjCýÙ1òn0!ȲŽµ'3å^'ǺÔÙŠ2Ÿdp(È?þpdP fh-ÿhâøJìq$`+Š !êÁaÍ"y;¹bñåÆŒúgdÁ#]YtÐzvÏË@Ê¢¶ÜÞëÉéÖÿuódÏ,éGšØÇ*»ÍK"öVá#~?w5±§ö +iðCtSõ \ÿüýi@ ÙÔŸ5-êyŸÁWöAd:€ÑÝe>í4Ø=yr£×¢YZÕp#ìÏõR«2ºÎÚ}ÖÚJ8!F/wùYŽ4úxöVÛw
ºÔcZú-%±y1Í€MD|Óí'Sûp"ózÃýd@üR`€HëôÊyÿý.«k%Ä#\üìÌæð1e]žÛ ~ºL~µv«ÔÍçÙÁ®K5vrh-X³&#P%óW®Ü +âž9/4² Ã?Ž~Žý?IÌÜci²Ä9îRT¬CÜOçlÓ[v×ç¯^ÏÀ 2ʟƵõ4ÙW3ÜÚLáöTD{tM?Ž€'àŽ1yda¬eß ßÕŒ&o[€û&žqŽŸ¥e¬oàpšõXPk,®Åúêy.D,äCµî¹AÌĬûšöÞLÞ +p}-ìókú*nª¥º>
'Ziœôþ§»õÅ:änŠŸ"«ù
\}BÑBYK¹}YxýKÊÖVÃm¶,§@åÄxÄ¢öEìq§¹íY<y#$£YlÁ
"ÖÀ%òáúfÀ·ª€€0=ÕþÑUÇÚì*>*Jºå&×Q4_N@'0Ô7õ3çÝd+ûö²ª%V¢9!êçRù0÷B¶or'èArÛQóØ=_/Ysa««æž =JcŸtGlç\`©fÈC+^åûúºÑÿäœþúfWCd³¶vGšŠâ42ø£BH&,+pfy:±tyyeK'nhÒ_€ŸV,»}>æ«Y`óÁiÏ;Ð!n©ÿyó¢n³Ö~bC§¬Qtþ}Ð
}C¹KôîÂhØÛð÷ºFtÙv³ÍØ]Œsy©ëÂË||.^Æà mÇ1$a³É +ñææA}ðÍ`ydS,
{×gc Ì®
µÄiß¡µÃ±dEË «¢.ž0:ʯô¥ÂüÁ©ßûnqYY*DeÜnúWŒèöÉ¢=dº0q¢wßÃ˵ɫ{$êpBÍ°Åk_,ß?Tõ[:îBF¿qcfñÿ`·±ô+Ú]3VŒï°Ñ€?¿Dàâ=³Ús×}£ðž+WdeZaÚÃùa ;jé\/\»
§Û|5;#Tèú> ¶Máûp³YÍevsÄcïVÅò%@€ûx0Ë +äAcóµÅÖëÄå(Ó|
`ì+²ºâüÆ:qÇàMÚ+ØÊ,äÑd°T7T(ŒÌªÚßɹwÒnÏŽFüUûPµóâ5BüBòCk,òÐ +<nO( ŽwTyo8'Káþ}§[»-%¶6÷(oÍÍn÷méB_qm ²Óðš(exšßòùõŠfq¬)¹gs &}çõäH=sqcS>IÈc°.?Hñ
Ûh ±`$ßëwÞ5iQç+V5gÈÉ7Ecþûn³ãNÛ +_â +€}ïɪñz¢ádFpõäì=5^ýIJËËhSLüp^3À5zÿíªçn uÿ¡;é<úRW Á|šüïÔŠÅŒ¶VGdTä.iÚÓ'Õ€×UFe+¢€Ž*ñE}ÖÝDÑùC*÷éF>
MÚ2CT/=«ÄìµÝÄéfݪ§2ØôÕæßU\§[Éu¿ð&à©,c%R|û<eÕš
u
ž÷:p!÷¢R»@À®ôIkp[Iôw³åöŽ\Îg¢þ®À¬¹HEf²OQŒNV°ôEä¹tÕ4öééñiE*®xÒeùåo,ï©Q¡Ã\ž=`ûÞ2PF§cT/RdNÆÀž|¶%¹NwgƬ
Îìßÿ +ÕúN¡ê¢ZÎ]Õ¯ŒÃ£\ë}ó@.uy©c8â/å¢Â¢aGlÝg¿}*s-NFìg±è*Øñózy4SüÍ¥`£
ØUKžbNç
ls=³kž/Õ§Sxœ¯"->ÜÜ4W>@7%HryŸØaA«&ó 1K×Ï
®qy%ÅWhÐã§h¬z!õ³ džÚÞOÃTf'Žº)Ì¿Ë®IÂ&j1³./q5[¢iÚ¹8°{°òoOðÜúWüMítpF°)¹p¥äðbºFh¯EÅÜ +3ðÐ#£BÄe8Uüûæã"kÏžµirºBš1q/÷`€Â QdA/Ÿ' +j9׶çqQšõ[LÏDØLÕùcœ§2¢[ +ZÈ :õ_EuÕZ¹ÄjÜøâR¥2?·¹ÆfïØýû§a=ueëTH·Èwµj·Û€ñ¹(!aûyÔ?ùêqvhý¿6%:ûJFÚ%æPOÙDœô_eqÀ·ê}ù^°©ÑÕZl°Þ\wêÛkÓ{ÌXd¶|øgœR+TTð£Ñ #7zï\°i5Å3:ÐküãAÈÕà°û^õí,úOÎwÒ(XL£ +:R²ý DÊ
YÇÖŒæµÿ°Œ.Ù=)öì!Èvͳ:Ã(ÐWyCdÄÔb®7Ö<8xûL5©1÷¢ÐºG«u¿m7²û«9ëšh^M/®®Æ1ùc¥Ú÷Âî ,1Ý\µD;EI# ð¹/òBV}µE3Ò#nè°ä×Ó[±ö 4÷PÞÏüC®8€$ÍgZuÁZèò8'°B|e4ìcEúc©k8³FUë¹?¿[RʵfWm¶šú:ºmg×ÇVÚáô2ñeº?î¿1ÃæѺZlâüFyôª=
ßöxr36fk#;èàå?¹RMtólÙÎPÅÇÃuBuf±HlöR~ý8Âø6·±,{ärê×úóa5
÷qÙZª_IIK[.²&=¹Dæø0'
_<+©gùÁ³L)oý{ÀéÝ4Õº²c|vjr
+>$ÝMã8S±¢ Úïx61"4âgU%2Ÿïù)¢ø©äp ¬µ*S«À¬+ëþ,dß$÷FÂÔDÊùà°¿¥ÿ柮á 2¢K
X*æËpÁeæ³qØtí@ÖÒØÏì6+U¥ ŸnCqôåç(9MtÚ>aŸ: +Kíçå=#B#¯×ÝzRçØ TJsJÊd©VÑ*&'©Öòrç
YªÏSý"õ~ÐÜ€øžÓ$Ñ®7ùìêA
|ÂiâLÓb3ÏæZåxU÷}ÉùŸIÌWc zº«MúÛœïŸ\à_ÚϪ;çévõù!5)°ÿê6}€(ñÌa'ÕV§xÒìÂl$eô»'3tǶ©ÀÃœGT·u@EbYÎ9o|qHÇíæ·BhÛ<XÖ\ŒÀ \ö2¹v¹~uý8Ïú!ãòhYÍ »(wŠ»Ýϧžµúgÿ¬µ67}ÁñØ%PKYF$«çÁFyb ØHÕu.³#¿ÂÕ +,OÅFNLþc°Ø°à:Žó÷
zqvðv6}ðr^¹ì¯;ü'°çCÇ*¡r=^Óõ~T?>® # àÎæ^]Œ*a==CvòÂv8_2KÝ£nžzLËv¥³J5ñÔuC0ºÎÕ3ÜÿÅ:E`²@ð6®-š±t Þfs¯Ì]èŸv>âLS2ºØµTó^æ4ìHë÷œÎÜÒAËÌÉDCaŒl¢ÔHÞ>Îâ%Í }2Å>zïyéwUwSdX9EªIòsf©šbÖ³ü4VB*q Îáï(µd!/gb6Ó7$úHJº°Ç#ì#ôºZf4eXÝ_óüÚNVbOàT÷V:\}EX:63¡·Jï?`_J?~œB:Hv- ñÑuäJ/ºXø}p§§§ñÜWW(Dï+æß»C3ÊÿsôóZ-N>ÓŒ£ã©
.·C÷¡¶bMvw
$l»)|k$`e±œñEHwìAªü@F¬,2ÅPÁzå`ùiL)Lë[âÚ"Ã}Í~¡T$WRêãøýZ±×d»áÆül(Ô~ݪÆéá¯ÔàäWÔPØ!7÷:Lÿ#h¯
ì×g4ªÛùÃARx ÿ#"'2;%Ó9k +nÊéEäùb<A%aÄ°ùþŽ9%ô·,<
÷áâíÀîŽó\r®EbþyR×sD¡š%jŠ\µò:×cðÖeø1lÛ\¢Çº»rdôY376¯}g¹É¢-n®K×[Š]Ž4Øæ0
Äq¢_šÝÚ +°§vÏhë_.=z7àn#ŽªÊÙwj¹ÇiJ¹
à +àJü'ß®UöáðŽAáã7b<¬{Ö4U!)/šcŒoè%}ÞÜOàÀúãÝ~V©kUK«ž·ÓÔQœÏŸç$šŠÃë2ÚR¬xwyý
c÷o#+"¶ÎÃ?<¡ÚœQ!7WÊÀÌ|bßKí¥ å$£.€R,ì"àô$)Á6ÀË/Ï[}d#šbà8smoÛzɺŠ]×o÷N»ôSö÷Ž2Ï#NÞ#©RŠžóoN{¯;R]ÑÖ2gÍg²Hº§~ŒéÑeÆ9Žü²tµVö +-UmóZNr-Ùã
=ܬcf5@/Ä?=5l@ÛÆÁqí©ùylû1ÞjdÂ7}FÑÕ@ÆMâTã#óP©ŸU0èwR|ÓY¡÷7Þ§t»ÈÏŸÄÈdßøÚ`j¬¿KµùS +!sï¢Ç;`Ôd×i
éÆœ/Ô÷èù'ò§-!k+i¬«ÞŸêg÷ÆQ .GÌQÉÐè+Ôî&äX]±Fã¡ +2ñ÷>-z
÷§LrEeõèÃ6Lõ¯\ÂòßpŸ*'(Á]i¬+çu(õ®Æ²ó5VBòþ¡ôôÑL6cç<ð'H¥cb«M>0YKËž¹ãáFØÞjvŒ)±®°bãö+Ïm +m«9° CQB7ï@yuxÏS€Âé¯À¯ÿõóàn¿ý²cÛõVuÆŽ@bp<Ú>XêÉjçmز+y 7cœZŒ7ä©vÀ¶¿é£XS'ö^Óif ª7®ºÏoMLöÔÉH×mÔé.6ñaÃñWb©š Xöân-¥w¶žàÑ +V-4À]Úòøò-¬jÌ*u§F«äÓß-ënYüU³Ïw_ê!à -:ål¬ºªà¶äI£NÍQè·· júAuÈWus"[)ÅW{æv¯*³=3!œÝæ Ú·l_6)Öšp +ØÇðÇVe&%§ÜîñBÕm€œØ]ŠúÉÁµ:6£Ñ€}Þ\¬R
ûlü£úKèJºº]Lúæϳš/QO¹Ø79îÉZܲ²Ós«PáRÏÜP°5.,|Ý@iÃÎëC:QAm·lCLkKΫë;êëVì üäíËBc×j¬ëú
kóäH2Ì%«»§JʵiáåOq€(³yª.1IA;Ð)/ãÛûµ'?0*nÈ¢øTDEÄbÐ{Œ'ž-×eè>RahÙ÷ŠaÖqV*ÙxEÍÚ |ÄcUIÚ¬ßv¯T-²jšÉí3ã_4Èøêm±`YŒrà| Å+|øE|.ºœü4_<#ýtWŸOîaúªûY*xäòlkfîÿ~ã¹ Ëùè©ÃfõÚ,³:]©E±8O +QòµkYHÉouðJ£ÚH¬³·áIÏYËGºOP®Æyô[ášJw
lLGËZ\0:OÉ.èÝÒ¿7ó+Ý{)§-ù +àÁ&¹ÖUjõ<&Bl'"ñ¹ÿ|µoÿzüØìO(34¯oÆ} +Þ ³?ßèA$;€üªD2E{GÆêÕ2^B.å¿y!þÿ' +endstream +endobj +24 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-43 -278 681 871] +/FontName/EFLDGF+NimbusMonL-Bold +/ItalicAngle 0 +/StemV 101 +/FontFile 23 0 R +/Flags 4 +>> +endobj +23 0 obj +<< +/Filter[/FlateDecode] +/Length1 1638 +/Length2 17083 +/Length3 532 +/Length 18014 +>> +stream +xÚ¬·eX]ÝÒ%w÷»»»»»³qgãnÁÝÝÝÝ»;$hÐ +4Ù89J| +rµñèÿ
õ_ÿç¿Vÿ#éhîdñÏ1Q:Zü=YÿËðÿÓtŽqqÊJü
ë_VswW׿zÿkümÈÿ\ÿë + +j®u°£DëOg 7m#1þ®ád +«»ùÕé%ÒlHuEsÙgÝ?ª¬ÒÃh÷©§&»Uodá*ivüQLß©°D:SB÷W¿Bþ^?[fm#®¥$
ÆzÏÊ1[~3dS¬É ügo¿AY,D
\Ë:y¢SP:À'yHÈš~SQ@ûÔÁ¬ûná24ÿß4DmãÜ ÙõçfŠ=Gù©AòÙœ&£ÒØB¿TÞâ:}¹[üU¿ügÊW%·on~PòÝø¢J˹WÂÉÉÛ1ùÆ5ÄŸŒÌAThtÕ¶×-!@S~ù5R±ül#õÅÁÁC§Ð).Wð¢åìH§VYGÖAÂ=œJõHéiR²ÑñÜÝ$¥Ô& þM`ßMkâÎl©FßÁ&bT\Ñ^ÐQ2Í[ùê#®æaÃþ?m_öÏ7ÊæcOtb~÷ä,¡;¶ÅtY{$€èŸ¹Š!"7
ñÊjW¯ŒžÌÕ{ÚQoÜ»ÔÉËã;zØwŒ".= +
E£-¯\¿*áÆÚ ¯¯×6óeF«LR)«Â_¹Y_3Z·Õu~M¹H_Öý"k€\D(Òg~ÊB*)B'
,@ýjõcN{ôÕkGÏ$ß²zÔ¬×}\tvtÅIB[Á žã%gÅ[çôÐýëB¥X#ñgXÝÙ(Ñq¶ÍºâìT?/ +<V©ÆÀ°(ÙÇ9áTsÕª¢€'7ôª»dæÍXÞO莮ܷ®žÓ+märLùŒ©ni3$lóöôÉëá;«¹KKÄVøw(ïášÌI œ©Y +>@Ê}A¢+ZMtìúêD3]zbý
v?T]€'Ãò@Sû3ô),Qš^ŒŒ_Hýè~A
ý:Âf,ÔÎ\ç\8tYgnBºÊØ㞢bß×cºÉåYtÖ
÷féìT:°eùøur8@¡élvÀXªrÃ=õ*¹Þð©bÇ®]^µF+Ö1Ëz§m Öe*Å{©èÊÎGÂòdDmš{éwl?Û~TÅ·ïÂCÅúe"önãÓZÜÀ÷³óŠvý§ª×ºåIÍ©ÒÆ84/TB²œTF|ÝHÙ2<÷k£pOúú
ÜÁ@jõ +bÓéžná\íðy:ïºßmº±ñH$CYÝftÊ®ÆÇËdû#©uÁ4[@Lý2aáx~
vÍÄŠáƯS:Žžÿ4UYÞàÒ3[ûc±~1¢òy,ý«ûž,ë6¶ª÷M³Zæ5ø*»Ü×?Rîç«xÀ¬Ø¢äf%y/ŽNeªÆWõù ž_ )åI6îËlïsaH§Ĭ°Äß·»÷ÁîÂî#ÝÝ€î£LêÇáìC¶qU_³æ8Ðq(rì? R)œX¿óFh§Î·1u66gè5DjpgàFøWTõŽlCx÷hG£ñèZ +î|¯{ÐYž¥Gv¬s`zYk¢&Øel¢5€mÐ#×ó8¡-ÓÓSÔ®þú|c1.Øš7šúzQs+IEùìœè2òªÑËï0A§B(ÓÏáß_Š·ðšY
o+íÓñD}ïaë¡)f¡jÕðLsðÈ)BÙÙ&Ý<)Çó§£wc¯»ÊGò2ÙmÆç²Q1
ÜÈîòê§þÚÌ·ù}¯*³£zV³Ã£QgdMÒSqvž¢Á¶&âO·:°ŒgÈ/>Áôç4f:îMiüG7® +£Céj
gì·YÖ 6á%pÕhoº6xcs}ÆVŠyÂ/œ3&Ö{¢B'ßÍãµWsŸwÎÔ
hÏ} <ŸSÃ=<ï"õ*m0·ô?œ)X~ÐÆH+!nöÊßnÈ,2öÿâÞkž{ñæ€"ItžÅŒOa·
1ÑaB73É&B@É|OC?ì
¢ùñÝ1 +ë^€Õ}^KÑá`S5ÊUÇ '¡¥×Ñõ`Hy[Y7=ñ{ä7>H,2œ§³@þ:,з\}2=µ?x²µ-?&©>x6~ì9³?tb«Ø2ãµ8òb«õp&àûJ¿i¥tfî4=Vì~éö¶è€ÈüUZÆdèµßzà=sx
±b
áuÑjÛx]íëýB.6uüºßfG>°q@£µé$á;ΩázIÁyÏfÒ
#¥¡M[oК|ß?¢Póá{Áï ýiF0_ì5í#èÇP_X>ðC§;ë#|%Ç åurÍWI0OYwZÄR[T!hWÐb}ɺØóTð,=ám©ÏÒFþL|òìVŸuáÅ!õ§>gÂæLZ°Ìë«!žn<Ÿ
\Ú°gië7u[l͢桮Žcs +ùÊ+o9ä x;õ¥¹LÖqÀäMl zõŸ¡}ã×3íIÊšSŸòoh©\`âÎn4ΊwJïnr¿P²áà`Ú òÔüjÆñÎ!èŸÇZKT°.7Ð2$°gFp&à¹$ÎØ°TœÓ;ªk
RŽŒóoÀ{5;è +ïÊhT×òm©Ä:Ì*#Y³ò«³ ŸÈñ/íá¯líòežj·×q
®Þ=x]ýR€VútéøC
ÛÆMTjáîá<\ÄL?M ýý[çíQåDLFC\ÀYÇ÷_;kÞNvLí?U."n¯É~R£Êš eÝXTnT -J^·«Ò¹\Ê.ü~Nüm7n4
6€°@FÁký,ÛãøâÌËÊ®Ð:)Õä +gÔÐÒ¹K¯N!ìwsÕ2]àaQ«hÛŸ1œ^îWbS]ÈHf<À'î!h¶ÔÇf¶ØÐ"ð^
|þžÍ¥¥b
[Ä ±ÀÎ +XÜÓGþNòç)D¥O$ÉêŽùœZ<Ï$â±fi +º± ãÑÝ× +¥\äQ ô_QÍYÈ&éÈТG$9@%WeÕ4c
ùPKÅDÊkŸ²ì¬\2²Ä¢ÄŠ¿Ò»Dvl¯ôýäÓHZÒ9ëþÑGùKÖÉŒ©Ü9»Ü.X4JB &þHûÆÄÄÁ +£¹1ãj<ZªM]Œ71lÒl ÷IÈ¥4ªœàT{ûtEOoµÌ[Ðäo>§Ý]£Ÿ ×Ð:³ý¶áöfW¢Š"ïOc#:¢sp°Ù^suî_6YåÜ +6;dd2tzR.B1ëkîÉ5Ž<ÒLÚÀïÌhÍúL#yÏþ¬ÛB.ÊôY`~QÏ}Þºû^WC8ïX(gA%±ùËoþ3?÷HÃñŒ¢mOwh _6Eªù÷}ŠÒ>pCÑ×Â{|&27ÔIUÔÊG²)wáýµ«n7a·ÌîršÑ}¶Óv¹G«nÉÙŒ$Ë¡ÇÎC + G\c²kdÑmS.0çøòÝ +)»N·*]T@-«úÏ€Ãg¿ +õËÌW×x3uA2ñ×Hæù«âŸïòÛeéÔ8|Ãòc@ýá¯?ÌâHHIÙîJAAÞêÖ¢»®VtW +N>Ú&gþ¬ÏµÇxª¡háÈ
ïÊÒÄÏ3¢¶w{ãZL=ÇRšl â[³ùnß¡WlŒLÑ5³$eú©ØžFuÀ|VýQðB©À@3Ã{8Èûq
mx".°Æ2° ÃôÂCW Q6Qx«ÈÚÙNœvXÔ&1]ùd@8l;ä +` ŽËaå;ŠÕ .+¶Dª§r9y?(m{)B¬6<š`±¢.
iFH5D1ž-ÊÍËï±QËš-ñ)9êÉh1DþÚÓŶz\(pgÐ]`ðH®ÍŽÎÞŠ +øW³1d}GJëpfÐÀyy0Ë/ ö'º,ë'îÝIpòPÎ5e"ØÈ«Ó§»¡ +tÈk6ÉW¢-à ïbÆ€#k÷~YïY÷œ>¿å¢2ÚëËäØíãuôÚ4,âo¡MÐoõWZÈ¢<=Lš +W ÿÕ€~_sW&°DŸÃN»ÍI({x-ZÕgçÁ×I'ÚíFÑÓ?jr +G üøÞ;OÄ2S4v³ü©É¬Uë><vLCºÁø â*Ìgœß®P!§J-:R®ÖLŸÉH9E»äzAªÀÌîEµV@KD'Åj ŸsÈä:_è!(#¥vÞSsܺAõëÙ]óÅ#$ì%GÝÒ§Ý÷©=ô¥¶NòêgáÑ`
B¬³8ÕÎóé>0{ÿËÓ⻥puxp!Nno^MÆ^¿1Å{ù{*{C3,¯dnߪ,Áé+ZÌ,»éì<äöÿß>bRó.DÜú÷xo)îì¬{
IïS$Èö2{`¿µ4!°ÝªIÍ
,/.JçÊ Ä=ë€_ïªsL\P7i\~ +vâשúI€=ô4âaw +ôþ6/Á¯Fç¿ŠT~ìvG«ç{eõ7Æ°NFÛÅ®q±oÛâúKÈÚu³á«aQ3W5wsìäŠK*H&ßR3ÎÀpvKÝúïêìêŸ9d iÏe~ ¹?s¡Þ!Ø,êë)³=Ê®Cßñ+Â66÷]}kYßèsö/Š9¢æ TˬsÚxÛÅêâ@Ãc$(ÏbŸàUgç1(pòïF\t²FBÖûò$>vµð á\ýCÃ"gßVÞq1ÞßÝ"d HÙa2+ÇDBK»`uÏyjsß1ft!k#?¿ð¢,Ó±ÅòÕNéî¹:ðóßx{}KtB +J>âŒÜ§4T 4,ìœcG'1Ù»ø}Z9XôucýuÇ'÷òšºÌçÕ\?áÁÜgö÷bî~î6H9D8²q +õIu×4\+»©å¶^®A7ŸLÅ3æþ¶ùtcK1SÓbÆY
VŸôÞ#÷©^?ûä®ðÒIIqBg[·Ž6(Ð![²æ¿IU"..ºéyŽÂà ùçá¡þ±¿€qàyž·G^>¢OG±Z[e'Tr¢ÅÇlw-ìþ|¥X²8}Šó5[Õ9'æÔ2ÄË[ÕùPË'ŒÕHdÑýYN%C²'€ßMÓúvAÊz)yÕþÇ<TíÌ:v,`1äB€&)ZÄS|OY}º7§Â}ddë%'JWXZ³
C£¶¹ÉH{bºkíGäÑÈ]4ß3£ü¯FÚ>HWXAòu+L÷ck¯Î¿ß
eËqû7Š}Ú)9ùW¬ý€pÞPËVÁatÆ +×tHg:º«&Âi +B£ÕêÐÔØQ+M+\«NEœ¿ø ëÑÕ°Ý¡jp
TÎ§å ŠwìŠWD7Ê;ª@wÏxÇÎ%kEÓb+?ÊëçÔy÷ܲÕÑœ-~R]*n<Q£©Á*(,ÄïÜ#oŸðæfÐHŒDìâezq*zQkò5huüy5æûuo^}L>LmhEºÁL2IºµSÌðÙ¢ôÄUðR[Oljz9prÃsº){ EKhó±UE˶íãv¹ +'0á[u>©K$~ÇäŒò%uŒvU¡<ÿt® §áTßëŽ3ÊÙ#éVIøüÎÚ0LÇ{ERÓ(ßIÇï€/Úœ%ÊE%;ÞwFÏšm;³Ë}à÷ê=ò3Ä(péŠx&ºMýøý?í@e3Úp.²hwjÃü:ÓP7cBD.ýMBîÜ?^g)F«§äæý^lt ý>hÑy¿]:n€ªì7Ô(à@ǧkd7¥îh|àTÍ]×4Gä?JÛÊÓîÒ~Õ¿æ gK×mT»ÄÌ:³V,/:¡8ÝòeXÓÂ'œY§Í?oÖU8÷¢uDŽÁĵì$&0µ¡ý2åªì;pìó/ÙïZïK;^¡àǶUwWpX48tßfÕËB,oU);ûIjÈ¥á«v€p-×Ëèõ{dG€áóqe}Ùn_.ðÆ`¡ì
ŸÍl/!-[R¯ò*çñ`å¹pêÅËüoèR9¹ãœñÞàtPƪ¥2ïŒë1ÇRGó0 +ECŒq(|«bš{·-¢}ãK_Aé$vþ¬üáÏ°7Êž°ðÍ#öŠ7X~HÁïåîjCŒÛª,ðó,ø·õ)Û(iqbt:ÇÖ§ÄMÊÍikÉÂïÀâìÈá_ÏuëìÏmrè>èÆ +š~f°MõMd'Ü&} ဩÆOôÕLçÓÊ.i}boãúNþv'ÁÁÎ<dÍÑ ò8{§#pÔ ¬Nª9)®÷G¶z A²žOUnÀ#
!mUáªòùhÏñrñö9~Œ³Ì!DÖ¢Qí}Ü.wÚd@sðTb*â·{EŒóµŠ¬ÓóþÙh#2CÚu}Àá«M»%ߵаN§µ\áø\\ØÃ/4uS¶h#)·^ûÝ"Ûþï{Úüp¶|Õgl iå*ÿÀWl/îÿ»Õa|IFÉø #ÕySóRž+UØQOæp펚ê°õ>Í¡±ª×@ëð%0*«A]Ø9Ö£óÖtsnw&§¡Û|¬©ëRb |ê
^U÷{ÄV1ýMÙ<÷ÏéjË/'ÉÍ`üçý|%ñq¥Ãì#TEjD#ÝÎLE\|p"e\BUm$t.E]¥ïIjØFý~
Í%Bfí
~œ:ÈiÞHVÁ|PÁ=±zêÂ*á(¬éš¢§?h@Ýá.
Na önmh7Ú:¥{ô +tÏPÐWCµj±U<ÆÑŠ+àÍÆ5ÇYFû¶rå+1î"àpw³ößëp ¥Hí>W\3n}/åJ¬Ž$+
jöÂù +M_¹0;bÇJ]î7žc«I)|¡Kzä>ïxß°b²«PNTTB5ûÁÕÈôÈò
/þðÜD£©£ÇŠª|=ÃŽÄ9
.)rª1ŽÕøâs.Èx_W!îÔŽþÍrá +nŸO5€M%t®¯ÁæÌçh+æ%
é
¶Ç$^tqüÖÑ{üö4K¿
ÒšØËkñä)œH
u .ïðÑ2£·æ§6>7îo,¯ÄGwDŸÕ^¯ÓDO^ö8ëu4ž\ÜXy@»Ì +ñ6°!ôcLnº# ÓgÛ0³
ÖÛû&³µ¶'pÀ±Ð+éeøê\ð\á#U9fò¶FÀ%Þü-4Æ1SPV¥ nêv*ØâCªá4WQ,HöÅ
bÏ, +ÑèÖJÌPuï"Áxòþ¹c<öA_pÙ¢Õ²¹ŸŸdPwrzù÷óY¶ÿÓYNÀJ +>Š(㮵áÊ'1ýlÉTº$×!ŠŠHD}mš2ÊtvÊÎvfå)ªÅºójL±`ÍÒP€oh,PþœBšòÜÇTÓæôj»ªÓ_
öRx<acušiX»ŸW:i€.yM±ÈÞ 7»ÏQ»¶/;Fà펣ҥÑþH& ³uÖ£îÈõ$ +mô¹µ¢pÅÒ&G9ÛXR_m ±ç(ª<X
Ý2ï ä|ÃnšÉ +9¿`)W±°(ViïÌ)Ð^ÍŽ£pïé9yÛYý +ÔfF8^Xl£Ó/` ×ÙqÞëLg:Ù^³Q
ÅàI]¯ÿKýòK?Þ"A¯Ê"·
ñH^ ñRÕûæ¹3lÑ¿E>~=ü§ShœSÏÇ
ßHÍèzØ=~Dìßq\ÌÌ%±`K¬WkœVåC;šðÊÈaqá(Àaû2?-ì2æfOVñŸÀYN¯=5{p°°:€MEÓ{7%®ªl:®w©=>AacçJ¥"\MŒÂòí 73Š£o¯gŽE7¹
Ty©ÃZHŒÓkï2;WïcaîÁ]R§énpåfœOn=ÖíñÚ_@
{9ìe߀nç].Vå{cÕDjÊX黚øFPyAj(°<Ù§ðÈdwòå»)Þ!Gó,ÛѱZH÷`HX"-Eív/+þ ŽšMœ·±jp§öl:ÿ}¹ý¯wÍUÈŸŠ Rw|<Ø£iÞŠÐ;¡A ñÛÌOèÃnËñ¬48ÿÕjøÍàùö;säXÍNí¯@î
bìz%l<²w}x¬gM]|?N-bæ_-»qx«<JmšmÍ÷÷;³ŒÃÁîw!Ö nP®_µÏ®Ž+¬DGM}Jîµß<œÆnã~2NB¡U#Hß0^t
äÙàòØh`÷2œµÛÎÝ\Ne*å70õÛ±;Ó¿K]ßLÅ¡=7Ãël9¿Öê Pg>f²Âp·¹ÁœN§DšYÎß»ÜêÓ\ì¶M'¹VºŸ9FÃyö-óŽ
µ~'¿INÈxv
oÅ|§_×6 +_
#WøË*ì0ê)GWÈŠ»H¹0ô«;9'åjvâ
íÀÏõrI?³ +Ý^ÙÒåR2'
ÇÔa/5º0^g¯<ßyÀ·Œ?~(Tô'wܱ®F
Uç¹)·JëmòAÆ`]Øš1+õÚ4ksTwã±èü£ôô§7[€úCUd]ÜÄ,rÁŒZî$©¥µ·&y*}ÆX²"
Ö**¥>!bV5ŒðyË¥ÉUŸ¡3ù³0öbD® çÑøY¢G«BÀšÐýS¶[yyHwéœú)ðà#N)ãH¯fEKÁúï8|"^=k*oßï"÷PÇ +Nžð +¶âÕk(ná^ÉšpØÙtµÈF
©_¿!äñÜQrÿNï£úÉq·ŠZå@EœþÁ~TtÜ.€ÐS>ÁÛCbÉ-€5,¹zxüb3Œ¯cuA]E[ÁØѹ#d€±k
(·C²°3ÔR+8ÿŒnŸëÅvb«K&QÓ\Í0IL7ÅE=x"#bþ,3`žÌ"-_^œsnŠŸj:ÆQ)SÕvh/sÿ-&ÉHf@-ïþ,¹¹
Õ[ÕÖuýÐKÇfÌúï¿ü<|4Ãñ£(ìnvÁIÁôÕ+ô7÷¯Lpü¡D >:üÞ,FéQ+vJ~f0Ú)]
-Û×.šG\{EüâÚðbèøsõ¯çÎw·Íʲ[œiIsº¯cįѿö©Äà£pyímQŠÁ÷Þ.Eaé)ÑD7ÑÁÖáVp³vœÐ%~±4x)ñ[°çiý}3Û8¿€¿élSí%*: ÌÄ¢Ík.z¥zdLE6
9Éø;Á¢qÞ35°ì€$O^q«õJõ"לè0É]ËáTDo¿êúŸ]óáÅ5ñþ + àO»Ïb,žòçVh]N¡¹æTfGšÞôV/*Gh8ÍÎÛþî/æšdæÿÐáò`ì'u:ìB5ZÉÜVbßßêÝS sŒÛ»jÃÛ>ì×{3ÐhŸ9Œ:~ÄÊÔYªÄÔ.a LÛÆÊæKc( +Yeh+ÒI¯>~myõ]}ŠóIB0K¶3ö3<Aö·;<Ãfÿ|hHnXíôÏ +TmÜ3¬I5msñUö*ßrsB¶Ýç²ÞÛ®Ôɶü!4Ó5ö4Gnõó1á§+¿|3l,·î-Úl=œö.¹:ïq#¢ÌJ^©òJ"ÞÌ2Ò:Ój§Z +Â"ðËzŠfâ;ܲqŠÇ$l!².M¢ÑĬ5늶bB-¿sk& ùÛ¹ìcFeÌJóIÝ0NÂnÁæñ£WæéJZ€ #`jÖŸHjÆëå_Mœ+tevfå=ÿÎÈz1Lò§Koí4TÀ.C2àK#E|éOq?øVµ¡¯+Âå{áVÄÏáÇOmÝÇ*£W&h¡\¡if)ž¥ßYo&°üÔ¶ázß®pXŽì\ ØøO2ùý·ß¿ÛÎg<Õ7ÌRØíjr«ýlEþHävôù¡Ö®AêÔÚz5²ÐÓÆ(ÊM1ÃÙøOÂDømU¯6PµUYh5ÿµÝ¢6Ö'ÂÙ»åÿi·nÿ@ +n³ªÑ¶à~ü#àuÈ*»"û(cå¿ØÙ :ÎGFfC2qòóß8»&3£Ñ<f°·@û}J¶ÿÜBùgi¿òäK_.ñ}Ìš£Õ+ / +sQC^{*ŽÒ?å8IBÀï/Ï]Ë"βù **Žá25xkµÖ»ÑJ +%³7%`^3É œb¥ÑFs>úî}?o ø"[çpõí:*ø³l*
§ÑVa$ºdÍ©7q
9ý$š=Îúœv)éì³UB»[DN®Û,ÏQ\âÎÿaéóõúò¡xŒë
FU1ûÞÚbü8 ÃËÖèF9£<WÊlõQX±ÒÔaº#»¯h'ÓrÑ&7µOÑUáË"øqRÅ. d%;>Œ¡óÄ]ÚKy
¡ìMÃ]EmµsdOPüõìªà_yø]yÙ&JÃfŸÈÔ¿_s/ÔÓÌ
EbXÉz}š@ûa ïáÑ ÚÇŸM +Õw Šs=ÝMÈËæ
`ÌÁôU~nLšþ@ZZDò'±¯aøaXbš7+c¶4ŒATãQ,RQÄmÍcvÜ'è{ífå£@!@nSÓ8®`a]M°yp,¢¶êg~ê× vãè¿Lõà?à ÁžØøš\lžêß£Ý +endstream +endobj +27 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-4 -948 1329 786] +/FontName/AFCVQE+CMSY6 +/ItalicAngle -14.035 +/StemV 93 +/FontFile 26 0 R +/Flags 68 +>> +endobj +26 0 obj +<< +/Filter[/FlateDecode] +/Length1 779 +/Length2 751 +/Length3 533 +/Length 1321 +>> +stream +xÚíRkPWAŵv UÇJE Én UB*5ÈKiPÁus,lva³ IøBªUyøAꬣ¢*Gëk
V|ÀPŽÚ.PÇû§Óîý³ßwÎ=÷Üó]W§ð(\Í,
!Í 0!æÊ(`BquU°çHÂ9è0__ÈZI +L
%µ:ž)Š÷³d@®,Ià4Pâêy§@C³Sìßb +Qãüzý·xÈaÁ4ÁšIZÄ)ÀY· (/%H@*HZ
Í +§ZŸ°ó^ÀèÄvA¥CŒÿÁ÷ZW²nIî?N·ïúœŽ2þÑ÷\²|Oÿt,Ï^Ù#ܵ¹ÄêÓ,
3õ2Àµ/×~³ÿ+é#7úÕþñsat{¶)çû">IÞ2u§ãóægâÅøØ8Aèìë«_€øŽUEGzŠ4LË/±=ÐbÚ·Œæ»atCîû9ÛM[ÎÎtÈK.ë=4*kþóRco~ЬÞÆ56gJ^5€ÉZ¹?sª7}ÒFÓ¡¹GjÏKÿ7Êk6KÃ<Åq¥ªZºQÜÂ;k}l·îÛRÄ +R ïïDÚÓW_KXþ£æ9söùòîÃòPù®šÂžÃãäº'gàT}ÂiKÝúâ_:ä+oUöÙ¥ßý**· °_³º§>;.p1¿çäº='« +Øy!ÃÏX¥·ô~r°J©ËÓ!¯dŸw·®¯ÓJýf_Ò?o×ÞèµßžwöyÆèâ©ÎÄÓ|QQß¹Øöç®~KL+ô~槵«ùxÊ×óÄ1&ëYÇJî5vÙžlº2ÃnO&:§ +Zft»/4¥*\q|Õ~ëZTæÝñ|ôC¶Ó§®I^ŸI6¶ž¬×+]Qd>²ª)qŠ%h§õ¯öäY\s z;*>Xç
þËù_à?!@Pg9F³ò'
ÉÂ +endstream +endobj +36 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-61 -278 840 871] +/FontName/XNWCOG+NimbusMonL-BoldObli +/ItalicAngle -12 +/StemV 103 +/FontFile 35 0 R +/Flags 68 +>> +endobj +35 0 obj +<< +/Filter[/FlateDecode] +/Length1 1656 +/Length2 11490 +/Length3 532 +/Length 12378 +>> +stream +xÚíweTm&Nà4ÆÝ=ž[ XãNãîîîî.»'ž;wwXÞ÷ÛoöÛù53¿ölî>OÙUu×Uwõi +ez!#ž5È
3³2ptµ±¡¶±47°4ŒØ)(DìAú`3kQ}0 2ÌÌ +«œ)@¥ª€NMKK÷OÍ_. + +ïG1Ȭ@Ô +¬ÿÞ!kwJèÿP9¹ÌÀŠ +€ÎŽ&¢Ñ~EÖÔöÂDýí»0¯ô±â¯aAx +¡-€kÎoÎÙ-ÀxÍžËý+`Aü'pyk®¡¶ž> +é|N¥òÙt!èÛ
£qYcFŽ®Æ//ÊnØVº +øÆ7TÇÒ(²?gß9 ÑNËpU°3ÖºKÈ~ò+u1¢|:GM!¿«j¬ü4<ÙSÚ±·Œ0| +eÞÎôŒ>îgB·ÄÓ _µ©$
[î^lŒá Ž/¿à¥}±ÔÄvªš?_¢6ÛLVf0µ9èFæXõD³ÉYðôÔ2iqj)
ìö{³ý§#£§ø~±wŒM!ÿŸNI¯RN:lÅÝ +ßq·?ÚU"
±ç +2OZ£|R~ù9'¹
\¢Žp€ÉÛða² jv³uPØ/q_©ªÆ!c)jK÷ÐÎþ¬ÈËĺÇÞÎûÙ5Å +
uË%e¥C +ùÔùW
xÉÊFLêê7
$ýiýÆ¢îæX%e:P,;I~Zd±NyÙÞ:û1à*}µÉŒø€åž]we'îùGðïû?rÅÏÈK`üÇžÛ"kç®ÆQÓq1j+h«.ÞûXÜ-Fš+ûžGfV9U) +Êd:öZuzñ:>KgIúE}¢€Œ\cÜûóPP~Œ±ÑÆQ pÅSóVCšãýxíÌ^[Óc³ì¹þXI,ÃÒÝTß2Wyf^øç1âvãRw?iÌV-þµY.·a©ôKäÎu}íçü¹K^>ÃOÓ€e3D÷ýn((äcA¡Ôè߶,Tu.ßðÂ)ÙðëQJ3d"ܧûiª#<+íù)*Uª{`QŽÖ2Ï£×@%§hÑ«rÌ-°9b-~ÌÛ"IMÎksí¬°Ì©ì8UjÚQ
UÓFV|Û}{vªÝ¥ÜžsjT +œŸÕŒ®Â1ò} tœ± ©=[nÔèS2Ò'Å=_ÂY vcìÖÙEvß{éQ\~ÛC»Ž5N!Z+0ygÀ5L9Å«fÂ+E;Á^ÿߪ¡/{שiÆØ-±ýËæ¥}%z +ÍáÛöeJ)8_Õù§ö\f5B¶ÑU7¡Ñgfå%œÒÅW
ùwúÆÚÍ8ò; +««uKÓÔæù³a +¡œbÇ{2d3ÅŽfæát-Ú4[Mgd;üWÔœŸÿø«nòÖùçŠPuµ3ÍÎõ ^qbCsY7~îMÔ®/ÕTë¿03©ŸvKÛ`³,e®ïúÏcddkWæªÌXZË+ðÎjO^z|8ü+ð8¡ÍT¿§å³f"Lšè1¬/ÎgûÝâPZYJŒ3{ÞɪmcõG¥ðd3£€Š6ÜöBh×àh{Ý-/'FŒÞÜR7tÑ+ÎòÀ°œrk¿mœVlÆ«<FkÕH€+]sïWÝ*Ò\pwÕtرópÅ.ÿWÊJÿÙYØ9iénŸehëza¹VI
7øÑ$ö%OhϲÑÇ&,¡CoŒS¶¿pfred +z`œ³G7D»SÜ?õQ5Œãqã|lVlÉ1¿bõI<Ý×ÞÕ+úhæØú#Ìë%l¯'bìé6³·Í"óe¶µ1ÄñýªÒ\Ÿdö)1¬ŽB>IGô3Æüøò*ì8çÑÈÈ8hù§zpw³ÌêwjþÇŒçgK%Þ±]8BßÇeüPºN¶#@y\CkHU.¡¶íšñb¹ë7I·L§ñ/}ëšð<ŠÛÝìgjÈu%xâ8ÙÇgŠ(XSŽÀ¶€?õ¥8Ñ(h-ý|7MÄbRIÃú<ü«â²Y)¢¿ØÜéԵó·öÃ[h`Ž7VÉÛ.S¶qd.y©ÊŸDmáIÄ;nÌBÆ/Üo©ègŒøi©f'q]€ünmUBAKeaÈ/£.óxð^±ÈÛ$Æ(51G?ÿ£ø@Ï0+±µ¬Þ.ت·nüÖaªìåÇWäAÍNÚýK^ÌzÓýš®±x<JìYïŸø¹9Ã|³ª©L¹Î2ÞD!å1)·tí+
B9?u°&OVþFöº%WÙÆ.ÅðiœüYŸÐZFbj¿âÇÁn_ÐMïb~œË,ôïÁÓvNõiÿÕèdCÒ2J&]yç4Šr¡³OOuÕÆ{ÝûØív°©]ÓTÒ×$¡î]/Øñî»kI_£*8#Cü +¬=î³úõ¢AKÓÔX=ò}âS}Dæ×^«T±_!cO
°YÒµW9»
ÌêÅfl,¬ó¶)èú>ÈCIdÃyÆÅEÆZ°Ý§6÷Ô»rxîÓ÷!áø祟d\?ÿ}¥¡O QS¡²úFGuðúdbðüùWü)qKÏúëœó ôÒo;ÃFú iS_®åk·«¥ÚåÓ\Ya%ªŠoCùÂê »úáxѬÝ(õÝ>ÅiçUD{TwLÔtVòŒ/ÝÅÅ(=7æ©ä(rÈÄ©J>d ÛŠžáRA9}^ŸË>w¯Tò3pÞ_áŒ^91#kŸLiRÐF«w1*Æñ#Tô¬ŠO/3ÆÕu?¢±ŒBºÙûvó%rÀñiDÇO}ŠïÀÖ£'f4R¯ +CóÕ ï{©Írà;Ä4tóPÿRià9Cu.Á¯œm§Ub7ÎúäÏ¡ÅÎ×[1KåÃ/ª
`ŸF-*KîYüÉ.;x]/ÃÛFMg&9ºG;ѬwÍ3#ð\n t1×8:1qÈ9Sáû¹v·oºÞí³Sã¬gýrUøÜ_É79Eº_~ªP\Ô?* +?ÙËõó¶4÷Ç7°uk;é+%¶±`ljçAÿ^°J
Él.ͪº³Lí«³üVð°eèöù%!Å=w²V®}[ž{§·!©Ž·<QÙ¶ßÉÒŸ
âŸ6 +ÈìV
gÍ¡I£MÉf[6+¡Â!ú82f»{Ž³¢iµÌî3Ò_Ã;ú-Î"Âæ®#ûéŽÂbvj=Ê9oí*¬©«ÓºùL¬œ÷UÕô;
-ì|ò?$éÚ¥`ðµð7R¢ìnb?u#}âkôÝ;nnOÝíìÔ +CNsZÕ€]2Iã?œ|Ø HQ·ûu6œ3?ôªÂ¶£ÖÅŒs*uqãQÈÃnN_UÏýJAnjrZ|âR}EŸ>Ûzs
îÖì·ÐœQR%j÷ج€mìžê<R
JêAZÚ§óy?ŸFJð7Û5>É-ÊDŽÖðÍ¥k7À"6Ç} +©ÈªDîg^jLÁŒéøQl¯1ìnCfs )ô!sÕm9Èù\绺ø>gDÁ31œâô}(¥³P!äo»
ý5O
!;œ!€É,eâ¹³,
G£*M^Ìä¬Õž +.8ge£0âPÌÔŽäÕ:ä +Â>àBiì4êÄ¢*ÖÜÔïUY;x¯7õw` ÓÍó?gjôªÓÔvJFè;NŒv[2ŸÖÂYæðÊ
±ÿþ¥±;Ñ"£-p²mŒèâæ~a
[wú+%)Á2/A}¡Y=Èü$áÉTÒ
UAypØè ô«ÇêAB¶ÄnÚÓÓMzõŒÌÈOy|a©ÃRÀJµëðÂÆØHæÎôb&SékN¹×§œ¯d<uzÒélðîÚ(}v¡Ü2PòQ²åóV5WS»/ŒxÜ{(N@¬ ø
õ&×îóÑÝ4\Pâ£â;/| F_Å[ùnì7,b[¯7%6ÒE5"3©P.€#Ë]Ìg@IBÞd纀óSÍ:<Ðõ(U*Á/íãŠkäóWðË:ïÑË»DÑrLÒ=lÔ§GÿQá4aÇ¢7GŠy3ocH..[;Lµ¥Äö©~î¢1ý¹šcS<œÏ1ï6¶ñMøF8?ù*SEúåC²á8ùFsçU»â°ÿ7$FxuÛ?I÷(AÓ¯Ûr0ÿ¥QfJªcõ!ÐØž ©CxèÜKïûŽwy*{8
(Ï'ÂìO±¥§Ä6&9s:Ù4ÝÆ}W> +qMw;fZÅØpeÇTêEWs8 PEÓ8š\7Õºô#Œ°tè
hÉÎ;ç ÿ°õ§Á:ÞÞkyÆÜsb=³ú%JGÜá÷y'u·Uy+'íõ +P&õÅŸ!væOªÙ#çñiÀâ¯Í¡c"õxàä¯uêÔ9®dkw¡âBÿPDÓÝß{ó ñìYŸ4'8>%/ G®âq¢ÉÍΞ&ÌÆAbA=1:?KÊìÜ°ÌíÕÊ6¡$áÍöIß.ÌCÚªA|Tª/&¹*$I&(£á?Ù$ ìÆ]vfŽWKÙå»Îïòü)]Û5£ÍøSØ!åšjoCbÂDN+ô€ÇÓx[°Ÿ
VÓ~xî×'îMþ Ê4í\Å èu~[¬ÆBqê-dG»üú³õA©àÌÙD1üŒ1£QÛÝüÞŽ¢öN7Éb·<Œ>¬Öñmš/ÑÚ±2ú?fŸ7'9e¯kL]ØWåñ$3}îg€}.DÏþÒÚ¢qÀHr¥4T Ó'üI)VèDºlÌ0é
·@ï¶ÇøcœÚÌÐÅk<ÆGغ{[O»ôÌ-Í'8!F;[Ô8-µA²e'YÌ£ÏeŠKý?èëÛxm+J>*`š^K«òÉIIT
C%¯Ñªù]?xÙ{aÄË×røíátøÃŽqö;ýXŽž xÓ±»ü<¿ïØ5À®ËÑôcŸ±êÃXØ]xU¯[36Ô ñubDÕóæªcqï÷*ÊËlq?
ºá-ã,v6*IÎàû_!èq!K¿:RÀå ]ëÕ?:%;e¡¬'áåbýf'ÓšÖeáä)Ç~mPgÉyý¯PZ¢QÇFýn]f)eò¶Ž¶×Ì`U$? +÷5eéÏ®,¢/C»Tá:$ý93Á@ó"¶âihïÅ<Ð¥¥ÑZKZF_ÑŽOÀÅÏc^Û¶h#.ì + +µ!qJa +FQNŽn9K6ÕšñÇËzZ ÕŸ&LDz'3óÎ
ÊRmÛ2WÛßÂ[þ9ÀmjVsÝ¢!è°ÁÎÝjv°4yÉ YXo!*Ò¬pB9uý±7Ý'~ 0j3$+€-õ¬»îU*v!Õ]Šf»Õµz_c:>Ö[KðdiÍ^vÖŽSûÖä +æ+LòÁb\°ªUHvìýÒ'O¥Ào^öéêô9ÏÀUyœµåu`ç/6m,@4UÖÅÑÓ§
Àz@,nCžs³³ _Ý6 ?¹°a
ÐCÇÑÝ×w"¹&Ñ׎6ŠRg7Cø'òO +Ú¥§cHœ`+! +eŽn} ð'¯÷LöÇÇŒ"Õ¡o&_ÓÏ׫ÂàBªé&`š«å
JJuÚZsÛœhUHrÉ<®ðûÌOq0oòšs÷ñ ±î?ÛTöù +PWËf="Ź&ëtkw +äõY1®ÉZ«8É" CxâãWè_ÿw;Ÿr0Ž¥Z§ÈÁ)òíÁ1Ç
œøásrw|$ÙDwó 8ÍCdRý5= z@&V²@MPËbMú,0ÍûÄk±i»óÔ€Ÿëd5QGêºc[wÙQ.Ç8³çx³#ö£ðKd»ælÖÂsäqB
ô_©áL®ZÛÝKl"ížÎþšMÆ1³j*À~#B|CÔé«áýÞ+|LL¶ÛhÎ%#Ûä¶ÚøNòn>oûšçNðx²ŽÍàrWÓèkß¿ú°Ñ~Ì+£qH
_DS
§ÃÌRÿÀ-Aðð&ÑTBZêhàØÓ|ãìÛ;k³`j
åÚÏ0öÅ Zóí;bAf|€µ$ÛéåêÀ¡îkÀw&gÀ +Üß÷R
^;Ø_>ŒÕDâÈ!Éê¥ýn£Pù~/_â±Q2W>ËxoÅfB\¹bJxקßHu-ÏŠ/H`p9·>»íüòÀøD!{.»Ãí.-}Èöü£MÆRGa@0WË8¹G:ÿØc7<ïÚ8×*
Ÿ=$圀 93€FPžÏê(æTRFåOÝ_ÝÓá¢pÞ§ªútM~¬júvÀ0yH«è«Š#öaÖaÂ]ÆDóïßÝðdëûvøÏË€Ú×3\ç^`úeKiÅt.71.ä¿Ñx%ÈŸkÚ£xÅï°ëzfŽéɳ~³oµmíg)ߥ£frøu]çC>ÁÌùÔsâÍñ¯à¯]îPãòÒ0_v¡É¶®Ÿò26ö¢Rê l
FdøHCb;ë^¢qÕüëÅ,¥¯Š4*ú6|S¬øç°ŽrìCŸrc8õUêDRßQ9(9#0L€UÙ¿T²Öúü(Óµ@m#s[_fÀ¿ôýû¯FìëïKéïµ@ñë]RÛj` ºÊç¥ÅvDÑÛ\h¥+üíýÓ.>ÝkÖ_»¶VÁÐñ"
C';óÅì¬ë|}qOéU 6¶ÚÐe~*Ê+ÓJŒeÔmFuèFÙt©ßeõç=`w%¯cµb¹¯ùJ9Þ¿ ŽæzÇ:¿ÄGq>ºÆcèé4ón»êIþB«RT_ârÿ3±q\p S§SÅhRŸuª«ôá(ÙÁåÀö1LÇma!^-mx1CÍðŒýÊ7®dhB¥.Kr©C¿qïÅÖQ7Rû S^oÞ`Ò]cÈ KÈÜîg@ªßaU·ì4Ï°7Aï©>Æ,RkÏŸßÒ3ºž&Â2·6S®çlÈ
vžÚ:|=kßcçV<÷ú{uÏ Ùæ±0ËÒhêœ=)ìOûø:}
øšºpX,Õr»~ðp
9ÞÙ`Æ Á£xÏ0Œ {Ag°ç»åïtôõ%×ÞÂú_ŽÃÙ#¢aÖèî€òiëÉ'šœ:ÃF z^%Že/oS`d$¿*÷.(ENUÊJ«ÕçÈ=FõÞd=0pûuu`²;Fàõª[²iݺ
8*.)%^?Ñ1ñeVºU§mÏ`"ÍÅŽ€xæêï'KIö*ÈâÃÏÉÈø1'Ôã? ÙNwdjy"õÃ
¡ð·UõŠ°â¢óå,¡àïÂH"s˳iSQé³M;îûcHè_ü,»àÚÚËÌ?œKIÝùº.L>GüÔü}ÎcÔã;žð ±ÂL°It§ŒäÁhÍ1ëGõì0ÂÖ°â·ßUYxÉÆ»PeÏÂbßúƧȎ3³)Hº1sLw:
3×lÎÌm(ËPçí
вGªÔ?¿ERU»¬|]®B!`7ÐÒŠ=ØœóT³WÓmóÙNuÇZáŒúÖéTðö1·ÛS`eå;Èœ¯ÓäàópÄn¯¢æ4é°ïvÝžÁª51%²QIBÑt)!€Ðí87 jÊ +§ÛÄ©øÞ²~ðl×2[TvTeXVüÐzÌòËŸÿ9ö$5æéÏ-9vÖpPêw?Jå¹åÅ(rùò2ÙðYZ¬B0òLŸõ=_¯M(®nWpJú1L ²$u¢ÕŽtõ'Ôœà!±~ŽÍ§P÷ %æ"îc3y®ÉdËÂ¯Ò !oC\['coégJªýz®Ž6«#Cè+¡ßPØšíÏ +6÷x8_±t¢béÝ/8Gx,]ÚÈ?ÐÖ3Ö !ø÷sªu6`&ºTrgMÇžqÌ:$ºZºu&ñÄT)Ä}~]Y,øå=5Ø3rµ³Š±~l'P¬)kK¢({?ûè'ïlŸèÐXrJj×Öš?ùr92/š;zPWÄ/Z¢þÐðM8-Ï :(4ÍÆm
¥ùG,Zª[÷ÊôV)@}PeýôK(föoqš&ú,=xòUa£rÉEíãkõÔDÓJ'}Q3;üÛŽ.lHTG·Çt·õMmM9Iäo;åRßPF4áYë+u
d±œüÀçÑþµAsÀÓ^ê;z
¯Xu6;îϳ§Å«é©&RçW,ŸSgVWïóÜ:ŒßdD2m~ò×Å-±ÏãI£ñÜ9ù#Ñ©y7 +Ùdí%èÑÒêuŸß«S/XÔðóâîE5Â
Û;ÆdæDŸRÍ8)¬÷ÑÝa +»ó¥Ní¬ +endstream +endobj +39 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-32 -250 1048 750] +/FontName/WQYJPP+CMMI10 +/ItalicAngle -14.04 +/StemV 72 +/FontFile 38 0 R +/Flags 68 +>> +endobj +38 0 obj +<< +/Filter[/FlateDecode] +/Length1 775 +/Length2 1246 +/Length3 533 +/Length 1823 +>> +stream +xÚí}8éÇ©±ÉMÚs³#Äc·ÄXRCã4f<ÏØyk$j×eòJ¹ZKEÂ"ïWÊÑnê²^BQŽi 9¢ÎCÛµ×±çsÿÎuçû÷û}ïïýyŸ÷cbäË":óa» +žz{{RÈ +ð`®A0µZÁòDÂöŸÍÄ|I!¡åf«€æ +$E¶"!1º ÑÄp»r±Ì +Yéaÿø..YÑÆmQS2h¶äøú#ðÈÓ
Øé4ºíj+ +!DŒúÿ }šÃa4TA\l56鲜K?yþó l83Ÿ¹@Òö@ò +óÄ7Ÿ7ÉbËbLçÝbzå[-í4GرYv£ÞÙ£µq©aäª~ÎËŽò~fçu$ÇÎWºœ5qÇtéÆw8yÓÍEw«ÝñÒ!Ó]ºtׯï\g{43*T©öŸ»²ÜeóìcýTw]ÖÆC5ŠÍ}Ú,¯ó²òí2ÌFî¢òArËòÎAü§³?åf}Äøź3œ(š©^.öö_¿Ï +ùÜ
qz[6óÌÝ<ÛáïõMýýÝ'í*IáM-©OÁpÄ1ö_nù»¥
&^î~Œy^ë,kò²zéºopbÈÃHiOásïê®:*©*ꧩûã>œÖàrеRóöþ!DßØTý«äO9»Ì>mM|¬hüó¯|æqù©IÒ'ÊAÆÌ£lýtµ{~m
&7âÒ`v;FcäAZ2~þGcœŽ©þ¹_ð«×ä_ü"K§ Œ°]»l"øœøLÒ&¯Ü +ÍñÊ©Hê=M$.Í~nòRU+höèÄìßnK²š«ìçíç6ªKFõºm6íOŠYFìêìÙê#M:çII̺ñ/?ÒÂEWEŒ©ËŸ"6 Î
ù€Fuæ8Kåœ&#ªÃýëAævÐ:æRpÉ{ü^ýKØT`RÄ+G¹#O+WÔYý9Ý×{45fÞŠ)< ®\g鯫VÐ^¯¹ÖtH¯ðëjÑ:€3¬oq×ùtÛX_NÕï5äZ8ß+rì +}LXšøîn2G0VàöÄ/4\Z{ºÅ+î6ï®÷SëÃj*DéŠÍHÔX^JüU¥î%ë»v"qkQ*öiÃæ;ò~¯}FSÖBwúŠ^1Á +iÛa±ÃS4Vyš©CÙ4uqqÂJÂêvê«XSËÓúÚhm¯&K1l-®Ü=!*D Ž[Ô8d}X(MYðÊ,^Vj)<µšµð6a&0Ø¡58Ó»ß{ª§~Pÿ%¯8ÉÜuN³€n÷ÆÏ:ûàFcö)!å·H¿qìÙtõžOþŠ7öTzÔÒéóýšÌò] OcJh(®x1AKÏ"Ì
(íèÛfð3>ùn§eUàföîÓ̌ގAOÂ[VÍ+¯õxVÓ53Aw&=>ÄYìÛ5¬ßÁDç»ÀÀ=EÉ6^G GÉDÒñ3€Ùõ[G3k tŸê+_nÔK¯Ù¬e" 9yZé<ïS·ÛgT#ea*Ì?OÊH +w<ýUâÃÇ{·Ž©0÷Ϝڹåd%ðS»ta0h0Šþ°ýÈîð¢I$r=¹/ON€kõrŠfHv;þ¶Ù7w/i}ºË)6ºÜØ2iµ~Ñ7ªŽ
,Š°ŸUrZ·LÆ?Í]>ÙAoiÆgf~Ì
â¶ßþkÉ4$ÅõyFÃxëï%2mÒLñÕ5ï&h
ºéa«þ>ÀWÿËûÿ .âÅh0 +ý'»x +endstream +endobj +42 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-251 -250 1009 969] +/FontName/MWYZOO+CMR10 +/ItalicAngle 0 +/StemV 69 +/FontFile 41 0 R +/Flags 4 +>> +endobj +41 0 obj +<< +/Filter[/FlateDecode] +/Length1 820 +/Length2 3101 +/Length3 533 +/Length 3719 +>> +stream +xÚíy8ï¿Çíj¢Ä3²1cÉÙ2ö-ûy0Ì¢±ì"{öT¶lYK¥ì"KÙ)E²$ùf÷ê|¿ç:ýÎ?ç:ÿë<ÏsÝ×ý~>÷ç~=ûJi`N .@BÀÊÒ08\",¬EQ, ¢Ê +â©EÐ(`JDcA/ +Q1WØÇ©NÄÍÖŠMTntªMÖžCwå9jæ×îŒ +º¬(ñ*~ðºÊ¢ÞDcwRßWuìrëãr»Ù, +?{§×>h9ÍÍÂh<;ÝP;ëNŸÁKKÁŒÌäÕä¿x2j*Zgéç>ûPŒ-h» /Uíja³yrçÝæòáö³ŠáŒUâû©Mh1º'
Ož¬NŠÛÕžóÓv;®`»úm
,ÍÁ&§Æäå¢ÕÙX+Àø³³øc<Ì4YäR¢~Înܵ¯*g/µÓl:Wp]F{8ÍzšÆØ'Ç)åêRÜ.{Âœz|Î
ŠNãcÜ-eâ ²íꎺžøùR7€záqÿ\Ïõû¹3!eÍô#[¯èo(äÆaÛ·¢íUž/÷©ªÓÆð\ç+|hYSÛ1NñOm3]~:1[±Oÿ#Š9\Ö:³¶Ó]ä*0A3Ú¿y6Èžäž!îõ&œmá(v«ÓÜsåGNùf+ÉSÂ}fÇZîf{vqS¿2>¥ŒÂªt²=rÙR"Ô¬ Û~10F"ÿ£ì
šÌÇÇ'`ãœ!Ç,B*üÊS¬ŸÆ Ê;;GlÄnÖûgÜ8r°bù]ËúÝî׳ó©Ú
|"Í4ÖuDÂÝ%Ú".^.>IMþkLOœªMÅûD²÷øoeYšY^mÎ{,XòWÍJ
ßÓ~ÍÙ·çÒàV~4}UvD%0ýÆioÝZÞ}ÉëáÉ}oËÆD¿:,:=°+¥±m±TŽL7±JxðiOŒö:<Ä0óÒF+Ø©XJš¥I¿ÐêëaHÈë÷ºFyô¢k ûÿÞû¶ÎåŽ%1EäDWwà^G²ÔhíÉM
RCŸI£ÎIñýѺ<>#èè²ÇºR%òë0f0å¥>ËåÙ^¹oãÒÄ-ÃÛ§÷¬²W%?'÷@¯ÖÊÞ"õž6ðåž>ÏeÉPœE<=°Î
V"ÉÞ?Š8Wr©è.~j}{:§Ò§)-ÎÃÜ-ud}kLwÇ$ù&
Ö¬ŒÍL_UoÍKµqE7ï)=×cBqtébdìÝ> (³O,ù~ «¢ójfyqêvR©¶Ê¡è°£Ë"Ï\ô[TÿJaS 7|ÑÞ=ð#Oæó¹_¿PžéPÚO|üSy$NyyÆ}šÕ(¹WÒ±g
+lAb¿È2ü1ë€a_ýo%&îPN.°ÜŽ¿Ò
èÇáä&w¬[v÷¯hÒ5 +1fÆ6.GÏgFWú4÷ïÔj>ËO³·ºG<
ÐÌaz±<ÝmQoXÒt·]ìŸ20ãà=¶Ý& sþù÷ôÜà +
¢±ìM§G\yžÖWb
Xªû+ D·b¢;l(+
BµaÌ(P¿ìs-JèÁøžCü¥»æ÷7Õ£3ò`eD"d/käFÛÿ-Â'N&ŠP
|{o9ÈŒæmlzv}áJNó®ÛwfHèòXäûͧÞ=èQÙÄŽ£ã1¥*Åzt$ØFšdú±ùqF¡éÐ"iwµòŽzépŽr
Þg?/±6fºÃ$±k[Úq8œ©ø8SíJ4='õåü·ÙÌ«áÑ3ô|£;uósS:o»M×QbÒþÚ»UôóÔ¹ÄÕK³¿àËnmÛCȵçœw'ê{.¥9·m0qzŸä·}ðÜóÂÝ֌룣¶AŸþqùÝäé,€zHžÚmX+A|r¢ìÊËvI'žkö°aŸlȹ± +_&诬ªx?€¹0A#Úë·ŠgÜœç:Û6§_ÏL)Îø¬!¢pXª0óÔé÷FO0aRÓÑÞ5«Ý¶wß.]BŒ€ròn_É!Ôé?+fï\7-*v\Ÿ¹Ð(ZÑÓ{^*Ý«h¬ÿxFÂ0ôWhä0§å¡k +8šQVÊ"׫]Ož +,Q>øºž9ÄÅ÷Œãf|F`°6%ÌD¥ÿ|5ì°7K6
§Žç̵~ŒÎî;ý"ej@fÿÎ;µe9ŸÅºS}ÏJ#ý>[o]kê¶T|í +êSc/÷`3ÌÏ[Îê}9©Œ1tãrGêaÒîfÊ€·»L +uŸTâ¶Vå¡Íoì][Ö©jó,{æ)Ò¿~¡bo»[(@K€{Oø^ÖŒ-Î +w»Ê$¡Ýºiy|JE¹âŸÉjÙæÆ$òη +Üj?ù)«ÎEÊïZÇÁæªZjyÓCöñÀåêYñŽýœW$MƳ*Ì~áåPé$
6|l¯OTÿÎnc, # ßPQé*ñûâfp=å殶äèRpœtÜÎÏ?Áÿäÿü(Æ(
GÜ!Ö&
+endstream +endobj +1 0 obj +<< +/Creator( TeX output 2008.11.02:2000) +/Producer(dvipdfm 0.13.2d, Copyright \251 1998, by Mark A. Wicks) +/CreationDate(D:20081102200036+01'00') +>> +endobj +5 0 obj +<< +/Type/Page +/Resources 6 0 R +/Contents[29 0 R 4 0 R 30 0 R 31 0 R] +/Parent 3 0 R +>> +endobj +33 0 obj +<< +/Type/Page +/Resources 34 0 R +/Contents[29 0 R 4 0 R 44 0 R 31 0 R] +/Parent 3 0 R +>> +endobj +46 0 obj +<< +/Type/Page +/Resources 47 0 R +/Contents[29 0 R 4 0 R 48 0 R 31 0 R] +/Parent 3 0 R +>> +endobj +3 0 obj +<< +/Type/Pages +/Count 3 +/Kids[5 0 R 33 0 R 46 0 R] +/MediaBox[0 0 595 842] +>> +endobj +29 0 obj +<< +/Length 1 +>> +stream + +endstream +endobj +31 0 obj +<< +/Length 1 +>> +stream + +endstream +endobj +4 0 obj +<< +/Length 33 +>> +stream +1.00028 0 0 1.00028 72 769.82 cm +endstream +endobj +50 0 obj +<< +>> +endobj +51 0 obj +null +endobj +52 0 obj +<< +>> +endobj +2 0 obj +<< +/Type/Catalog +/Pages 3 0 R +/Outlines 50 0 R +/Threads 51 0 R +/Names 52 0 R +>> +endobj +xref +0 53 +0000000000 65535 f +0000127296 00000 n +0000128106 00000 n +0000127767 00000 n +0000127959 00000 n +0000127460 00000 n +0000011295 00000 n +0000000009 00000 n +0000019099 00000 n +0000018900 00000 n +0000001823 00000 n +0000039633 00000 n +0000039438 00000 n +0000002961 00000 n +0000041331 00000 n +0000041129 00000 n +0000003895 00000 n +0000057268 00000 n +0000057072 00000 n +0000005039 00000 n +0000075504 00000 n +0000075301 00000 n +0000006172 00000 n +0000088687 00000 n +0000088490 00000 n +0000007309 00000 n +0000107011 00000 n +0000106818 00000 n +0000008442 00000 n +0000127859 00000 n +0000009364 00000 n +0000127909 00000 n +0000011196 00000 n +0000127561 00000 n +0000017211 00000 n +0000108649 00000 n +0000108445 00000 n +0000011356 00000 n +0000121338 00000 n +0000121144 00000 n +0000012493 00000 n +0000123463 00000 n +0000123275 00000 n +0000013422 00000 n +0000014324 00000 n +0000017089 00000 n +0000127664 00000 n +0000018838 00000 n +0000017273 00000 n +0000018783 00000 n +0000128041 00000 n +0000128063 00000 n +0000128084 00000 n +trailer +<< +/Size 53 +/Root 2 0 R +/Info 1 0 R +>> +startxref +128201 +%%EOF diff --git a/Master/texmf-dist/doc/support/texcount/QuickReference.tex b/Master/texmf-dist/doc/support/texcount/QuickReference.tex new file mode 100644 index 00000000000..8bd0fb55c97 --- /dev/null +++ b/Master/texmf-dist/doc/support/texcount/QuickReference.tex @@ -0,0 +1,121 @@ +\documentclass{article} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{a4wide} +\usepackage{times} + +\include{macros} + + +\title{\TeXcount{}\footnote{Copyright 2008 Einar Andreas Rødland, distributed +under the \LaTeX{} Project Public Licence (LPPL).}~ +Quick Reference Guide\\ +Version 2.1 +} + +\begin{document} + +\maketitle + +\section{Command line options} + +Syntax for running \TeXcount{}: +\codeline{texcount \textit{[options] [files]}} +where \code{texcount} refers to the TeXcount Perl-script, and the options may be amongst the following: +\begin{description} +\def\option[#1]{\item[\quad\code{#1}]} +\def\alt#1{[#1]} + +\option[-v]Verbose (same as -v3). + +\option[-v0]No details (default). + +\option[-v1]Prints counted text, marks formulae. + +\option[-v2]Also prints ignored text. + +\option[-v3]Also includes comments and options. + +\option[-v4]Same as \code{-v3 -showstate}. + +\option[-showstate]Show internal states (with verbose). + +\option[-brief]Only prints a one line summary of the counts. + +\option[-total]Only give total sum, no per file sums. + +\option[-1]Same as specifying \code{-brief} and \code{-total}, and ensures there will only be one line of output. If used with \code{-sum}, the output will only be the total number. + +\option[-sub\alt{=\ldots}, -subcount\alt{=\ldots}]Generate subcounts. Valid option values are \code{none}, \code{part}, \code{chapter}, \code{section} and \code{subsection} (default), indicating at which level subcounts are generated. + +\option[-sum\alt{=n,n,\ldots}]Produces total sum, default being all words and formulae, but customizable to any weighted sum of the seven counts (list of weights for text words, header words, caption words, headers, floats, inlined formulae, displayed formulae). + +\option[-nc, -nocol]No colours (colours require ANSI). + +\option[-relaxed]Relaxes the rules for matching words and macro options. + +\option[-inc]Include tex files included in the document. + +\option[-noinc]Do not include included tex files (default). + +\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified. + +\option[-html]Output in HTML format. + +\option[-htmlcore]Only HTML body contents. + +\option[-codes]Display an overview of the colour codes. Can be used as a separate option to only display the colour codes, or together with files to parse. + +\option[-nocodes]Do not display overview of colour codes. + +\option[-h, -?, --help, /?]Help. + +\option[--version]Print version number. + +\option[--license]License information. + +\end{description} + + +\section{\TeXcount{} instructions embedded in \LaTeX{} documents} + +Instructions to \TeXcount{} can be given from within the +\LaTeX{} document using \LaTeX{} comments on the format +\codeline{\%TC:\textit{instruction [name] parameters}} +where the name is use for instructions providing macro handling rules to give the name of the macro or group for which the rule applies. + +\begin{description}\def\option#1{\item[\bigcode{#1}]} + +\option{ignore}Indicates start of a region to be ignored. End region with the TC-instruction \code{endignore}. + +\option{break \textit{title}}Break point which initiates a new subcount. The title is used to identify the following region in the summary output. + +\end{description} + +\subsection{Adding macro handling rules} + +The macro handling rules all take the format +\codeline{\%TC:\textit{instruction name parameters}} +where the name indicates the macro (with backslash) or group name for which the rule applies. + +\begin{description}\def\option[#1]{\item[\bigcode{#1}]} + +\option[macro]Define macro handling rule for specified macro. Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text. + +\option[macroword]This defines the given macro to represent a certain number of words, where the number is given as the parameter. + +\option[header]Define macro to give a header. This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}. + +\option[breakmacro]Specify that the given macro should cause a break point. Defining it as a header macro does not do this, nor is it required of a break point macro that it be a header (although I suppose in most cases of interest it will be). + +\option[group]This specifies a begin-end group with the given name (no backslash). It takes two further parameters. The first parameter speficies the macro rule following \code{\bs{begin}\{\textit{name}\}}. The second parameter specifies the parser status with which the contents should be parsed: e.g. $1$ for text (default rule), $0$ to ignore, $-1$ to specify a float (table, group, etc.) for which text should not be counted but captions should, $6$ and $7$ for inline or displated math. + +\option[floatinclude]This may be used to specify macros which should be counted when within float groups. The handling rules are spefified as for \code{macro}, but like with \code{header} an array parameter should be provided and parameters that should be counted as text in floats should be specified by parsing status 3. Thus, a macro that takes one parameter which should be counted as float/caption text should take the parameter \code{[3]}. + +\option[preambleinclude]The preamble, i.e. text between \code{\bs{documentclass}} and \code{\bs{begin}\{document\}}, if the document contains one, should generally not be included in the word count. However, there may be definitions, e.g. \code{\bs{title}\{title text\}}, that should still be counted. In order to be able to include these special cases, there is a preambleinclude rule in which one may speficy handling rules for macros within the preamble. Again, the rule is speficied like the \code{macro} rules, but since the default is to ignore text the only relevant rules to be specified require an array. + +\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 0 if the file name should be used as provided, 1 if file type \code{.tex} should be added to files without a file type, and 2 if the file tyle \code{.tex} should always be added. + +\end{description} + +\end{document} diff --git a/Master/texmf-dist/doc/support/texcount/README b/Master/texmf-dist/doc/support/texcount/README index fb8d53764fc..45512130d2f 100644 --- a/Master/texmf-dist/doc/support/texcount/README +++ b/Master/texmf-dist/doc/support/texcount/README @@ -1,8 +1,9 @@ -TeXcount.pl is a Perl script that counts the number of words in the +TeXcount is a Perl script that counts the number of words in the text of LaTeX files. It has rules for handling most of the common macros and provides colour coded output indicating which parts have been counted. Go to http://folk.uio.no/einarro/Comp/texwordcount.html for more information or to access the script online as a web service. -The package is distributed under the LaTeX Project Public License. +The package, i.e. the script and all accompanying files, is +distributed under the LaTeX Project Public License. diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf Binary files differindex c4dad88f01e..72f71722a9c 100644 --- a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf +++ b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.tex b/Master/texmf-dist/doc/support/texcount/TeXcount.tex index a460d8be924..3ec27f73368 100644 --- a/Master/texmf-dist/doc/support/texcount/TeXcount.tex +++ b/Master/texmf-dist/doc/support/texcount/TeXcount.tex @@ -8,21 +8,12 @@ %\parindent=0pt\parskip=8pt -%TC:macroword \TeXcount 1 -\newcommand\TeXcount{{\TeX}count} - -\newcommand\code[1]{\texttt{\small#1}} -\newcommand\bigcode[1]{\texttt{#1}} -\newcommand\codeline[1]{\begin{quote}\code{#1}\end{quote}} -\newcommand\bs[1]{$\backslash$#1} -\newcommand\URL[1]{\texttt{\small #1}} - -%TC:macro NB 1 -\newcommand\NB[1]{\marginpar{\textsf{\tiny#1}}} \title{\TeXcount\footnote{Copyright 2008 Einar Andreas Rødland, distributed under the \LaTeX{} Project Public Licence (LPPL).}\\ -Perl script for counting words in \LaTeX{} documents} +\Large +Perl script for counting words in \LaTeX{} documents\\ +Version 2.1} \author{Einar Andreas Rødland} \begin{document} @@ -71,7 +62,7 @@ In general, while \TeXcount{} does the parsing in some detail, it does not do it Another issue is that, since \TeXcount{} does not know how to expand macros, it cannot handle macros like \code{\bs{maketitle}}. Instead, it will count \code{\bs{title}\{title text\}} when it occurs. -For users of languages containing letters other than A to Z, there may be an additional challenge. The script relies on Perl to recognize words as sequence of letters, and must therefore know which characters are considered to be letters. The Perl locale may be changed (as of now this is hard-coded!) to accommodate this, but this does not work for special letters encoded using \TeX{} or \LaTeX{} macros or codes: e.g. \code{\bs{aa}} and \code{\bs{"}a} will not be understood to be letters in the present implementation, whereas \code{\aa} and \code{\"a} will. +For users of languages containing letters other than A to Z, there may be an additional challenge. The script relies on Perl to recognize words as sequence of letters, and must therefore know which characters are considered to be letters. The Perl locale may be changed (as of now this is hard-coded!) to accommodate this, but this does not work for special letters encoded using \TeX{} or \LaTeX{} macros or codes: e.g. \code{\bs{aa}} and \code{\bs{"}a} will not be understood to be letters in the present implementation, whereas \code{\aa} and \code{\"a} will. I have added a relaxed mode where some special character and character modifying macros are allowed as parts of words, which may be activated with the option \code{-relaxed}. \section{Syntax and options} @@ -87,45 +78,103 @@ Under Windows, running \code{texcount} from the command line suffices if \code{t Alternatively, if the above methods do not work, you may have to execute it more exclicitly under Perl using \code{perl texcount.pl}. You then need to have the \code{perl} executable file in the path or give the explicit path. I will simply write \code{texcount} in this manual for the code to execute the script. Then, the syntax becomes -\codeline{texcount [options] [files]} +\codeline{texcount \textit{[options] [files]}} where the options may be amongst the following: -\begin{description}\def\option[#1]{\item[\quad\code{#1}]} -\option[-v]Verbose (same as -v3) -\option[-v0]No details (default) -\option[-v1]Prints counted text, marks formulae -\option[-v2]Also prints ignored text -\option[-v3]Also includes comments and options -\option[-v4]Same as \code{-v3 -showstate} -\option[-showstate]Show internal states (with verbose) -\option[-brief]Only prints a one line summary of the counts -\option[-nc, -nocol]No colours (colours require ANSI) -\option[-inc]Include tex files included in the document -\option[-noinc]Do not include included tex files (default) -\option[-html]Output in HTML format -\option[-htmlcore]Only HTML body contents -\option[-h, -?, --help, /?]Help -\option[--version]Print version number -\option[--license]License information +\begin{description} +\def\option[#1]{\item[\quad\code{#1}]} +\def\alt#1{[#1]} + +\option[-v]Verbose (same as -v3). + +\option[-v0]No details (default). + +\option[-v1]Prints counted text, marks formulae. + +\option[-v2]Also prints ignored text. + +\option[-v3]Also includes comments and options. + +\option[-v4]Same as \code{-v3 -showstate}. + +\option[-showstate]Show internal states (with verbose). + +\option[-brief]Only prints a one line summary of the counts. + +\option[-total]Only give total sum, no per file sums. + +\option[-1]Same as specifying \code{-brief} and \code{-total}, and ensures there will only be one line of output. If used with \code{-sum}, the output will only be the total number. + +\option[-sub\alt{=\ldots}, -subcount\alt{=\ldots}]Generate subcounts. Valid option values are \code{none}, \code{part}, \code{chapter}, \code{section} and \code{subsection} (default), indicating at which level subcounts are generated. + +\option[-sum\alt{=n,n,\ldots}]Produces total sum, default being all words and formulae, but customizable to any weighted sum of the seven counts (list of weights for text words, header words, caption words, headers, floats, inlined formulae, displayed formulae). + +\option[-nc, -nocol]No colours (colours require ANSI). + +\option[-relaxed]Relaxes the rules for matching words and macro options. + +\option[-inc]Include tex files included in the document. + +\option[-noinc]Do not include included tex files (default). + +\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified. + +\option[-html]Output in HTML format. + +\option[-htmlcore]Only HTML body contents. + +\option[-codes]Display an overview of the colour codes. Can be used as a separate option to only display the colour codes, or together with files to parse. + +\option[-nocodes]Do not display overview of colour codes. + +\option[-h, -?, --help, /?]Help. + +\option[--version]Print version number. + +\option[--license]License information. + \end{description} If more than one file is given, \TeXcount{} will perform the count on each of them printing the results for each, then print the total sum at the end. -\subsection{Details} +\subsection{Parsing details} -By selecting one of the \code{-v} options, you can choose how much detail is printed. This is useful for checking what \TeXcount{} counts. +By selecting one of the \code{-v} options, you can choose how much detail is printed. This is useful for checking what \TeXcount{} counts. The option \code{-showstate} shows the internal state and is for debugging purposes only. -The output is colour coded with counted text coloured blue, other colours for other contexts. The colour coding is made using ANSI colour codes. These should work when printed directly to Linux xterm window, but need not work if piped through \code{more} or \code{less}: with \code{less} you need to use the option \code{-r} for the colours to be shown correcly. Under Windows or other operating systems, the ANSI colour codes cannot be expected to work, in which case the option \code{-nocol} (\code{-nc}) may be used to turn off colour coding; instead I recommend using HTML output which can be viewed in a browser. +The output is colour coded with counted text coloured blue, other colours for other contexts. The colour coding is made using ANSI colour codes. These should work when printed directly to Linux xterm window, but need not work if piped through \code{more} or \code{less}: with \code{less} you need to use the option \code{-r} for the colours to be shown correcly. + +Under Windows or other operating systems, the ANSI colour codes cannot be expected to work, in which case the option \code{-nocol} (\code{-nc}) may be used to turn off colour coding; instead I recommend using HTML output which can be viewed in a browser. To print the details encoded as HTML code, use the option \code{-html}; alternatively, with \code{-htmlcore} only the HTML body is printed. On Windows, I suggest using the options \code{-html -v} to get full detail, save this to a HTML file, e.g. using \codeline{texcount -html -v texfile.tex > details.html} and then view the details.html file in a browser. +\subsection{Summary information} + +By default, \TeXcount{} outputs counts of text words, header words, caption words, number of headers, number of floats/figures, number of inlined formulae, and number of displayed formulae, and lists each of these counts. To shorten this to a one-line format, specify \code{-brief}. + +To get \TeXcount{} to produce a total count, specify \code{-sum}: this will compute the sum of all words plus the number of formulae. A customized sum may be computed by speficying \code{-sum=n,n,\ldots} with up to seven numbers separated by commas giving the weight (0=don't count, 1=count once) of each of the seven counts: e.g. the default is equivalent to \code{-sum=1,1,1,0,0,1,1}. To count words only, use \code{-sum=1,1,1}. Higher weights may also be used, e.g. to count displayed formulae or floats/figures as a given number of words. + +Specifying \code{-sum} has two main effects: the cumulative sum is added to the output in verbose formats, and the sum is added to the summary. If combined with \code{-brief}, the option \code{-total} is automatically set, resulting in a one line output containing only the total sum. + +For adding subcounts e.g. by sections, the option \code{-sub} (or \code{-subcount}) may be used. By default, this produces subcounts by part, chapter, section and subsection which are listed in a brief format. One may, however, specify \code{-sub=} followed by \code{part}, \code{chapter}, \code{section}, or \code{subsection} (default when given without value). Break points which initiate a new subcount may also be specified within the \LaTeX{} document using \code{\%TC:break name}. + +If included files are included in the count (\code{-inc}), counts per file will be produced followed by a total count. To suppress per file counts, the option \code{-total} may be used. + \subsection{Parsing options} -If the option \code{-inc} is used, \TeXcount{} will automatically count documents that are included (using \code{\bs{input}} or \code{\bs{include}}. As when giving a list of files to count, it will print the sum per file and a total sum at the end. +\TeXcount{} uses regular expressions to identify words and macro options. By default, these are moderately strict, but can be relaxed using the option \code{-relaxed}. This allows more general document elements to be identified as words or macro options, which may sometimes be desired, but may also have undesirable effects, so check the verbose output to verify that \TeXcount{} has counted the appropriate elements. + +Macro options, i.e. \code{[\ldots]} after macros and macro parameters are ignored. Since \TeXcount{} has no specific knowledge of which macros take options, this is a general rule. In order to avoid that uses of [\ldots] that are not macro options are mistaken as such, \TeXcount{} makes some restrictions on what may be contained in such an option. By default, this restriction is relatively strict under the assumption that it is better to count a few macro options as words than risk large fragments of text to be ignored. However, if your document contains macro options with more complicated values (e.g. certain special characters or macros), using \code{-relaxed} may help handle these correctly. + +By default, \TeXcount{} does not allow special characters or macros to be part of words. This may cause problems if character modifiers or some special characters are used which are entered as macros. The \code{-relaxed} option makes the word recognition regular expression somewhat more general. -The default is \code{-noinc} indicating that included documents are not counted. +\subsection{File inclusion} +If the option \code{-inc} is used, \TeXcount{} will automatically count documents that are included (using \code{\bs{input}} or \code{\bs{include}}. As when giving a list of files to count, it will print the sum per file and a total sum at the end. The default is \code{-noinc} indicating that included documents are not counted. + +By default, \TeXcount{} assumes paths are relative to the working directory. Alternatively, an explicit path may be given using \code{-dir=path}. Note that the path must end in the path delimiter symbol (depending on the operating system, \code{/} under Linux, \textbackslash under Windows). If only \code{-dir} is used, the path of the first file given will be used. + +Note that included documents are analysed as separate files: the text of included documents are thus not included where the \code{\bs{input}} or \code{\bs{include}} is located. This has two consequences. First, since word counts are produced per file, subcounts f.ex. by chapter will only include the text in the same file as the \code{\bs{chapter}} macro. Secondly, if TC-instructions to \TeXcount{} are embedded in the \LaTeX{} document, e.g. defining additional macro handling rules, these take effect in the order they are parsed by \TeXcount{}. Since included documents are parsed after the parent document, definitions in the parent document will be in effect for the included documents; definitions made in the included documents will only be in effect for subsequently included documents, not in the parent or previously included documents. \section{What \TeXcount{} counts} @@ -150,9 +199,9 @@ A very few rules are hard-coded, e.g. that text between \code{\bs{documentclass} \TeXcount{}, the reason being that the rule originally only gave the number of parameters to ignore following a given macro.) -\item[header]Macros that are specified to be counted as headers. In fact, this only indicates that the macro should cause the number of headers to be increased by one; a rule is added to the macro-rule to count the following parameter as header text. +\item[header]Some macros are specified to be counted as headers. This initially only indicates that the macro should cause the number of headers to be increased by one, but an additional rule is added to the macro-rule to count the following parameter as header text. -\item[group]For groups enclosed by \code{\bs{begin}\{\textit{name}\}} and \code{\bs{end}\{\textit{name}\}}, there are rules specifying how the contents should be interpreted. A macro rule is added for \code{begin\textit{name}} (without the backslash!) which is \TeXcount{}'s internal representation of \code{\bs{begin}\{\textit{name}\}}. +\item[group]For groups enclosed by \code{\bs{begin}\{\textit{name}\}} and \code{\bs{end}\{\textit{name}\}}, there are rules specifying how the contents should be interpreted. A macro rule is added for \code{begin\textit{name}} (without the backslash!) which is \TeXcount{}'s internal representation of \code{\bs{begin}\{\textit{name}\}}. Some special characters will be ignored if following \code{\textit{name}}, e.g. \code{\bs{begin}\{equation*\}} will be treated as \code{\bs{begin}\{equation\}} since \code{*} is ignored. \item[macroword]This type of rule indicates that the macro itself represents one or more words. Initially, \code{\bs{LaTeX}} and \code{\bs{TeX}} are defined with values 1 indicating that each represents one word. @@ -160,7 +209,7 @@ parameters to ignore following a given macro.) \item[float inclusion]Within floats (begin-end groups defined with parsing status $-1$) there may be texts that should still be counted: in particular captions. These are specified with the float inclusion rule. -\item[file include]If \code{-inc} is specified, included files will also be parsed and the total presented at the end. Initially, \code{\bs{input}} and \code{\bs{include}} trigger file inclusion, but more macros may be added here. +\item[file include]If \code{-inc} is specified, included files will also be parsed and the total presented at the end. Initially, \code{\bs{input}} and \code{\bs{include}} trigger file inclusion, but more file inclusion macros may be added. \end{description} @@ -177,7 +226,34 @@ More critically, since \TeXcount{} does not really know which macros take option More advanced macros are not supported and can potentially confuse \TeXcount{}. In partcular, if you define macros that contain unbalanced begin--end groups, this will cause problems as \TeXcount{} needs to keep track of these to know where different groups start and end. -\section{Adding your own rules} +\section{\TeXcount{} instructions in the \LaTeX{} document} + +It is possible to give some instructions to \TeXcount{} from within the +\LaTeX{} document. The general format of these instructions are +\codeline{\%TC:\textit{instruction [name] parameters}} +where the name parameter is used with macro handling instructions to specify the macro or group name for which the rule applies. + +Note that the comment should be on a separate line, and that instructions are case sensitive. + +\subsection{Ignoring segments of the file} + +The TC-instruction \code{ignore}, later canceled by \code{endignore}, may be used to turn of all counting in a segment of the \LaTeX{} file. The ignored segment should thus be started by +\codeline{\%TC:ignore} +end ended by +\codeline{\%TC:endignore} +causing all text inbetween to be ignored. Note that \TeXcount{} still parses this text and may be affected by unbalanced brackets. + +\subsection{Adding subcount break points} + +By specifying \code{-sub}, \TeXcount{} can produce subcounts, e.g. per section. Alternatively, or in addition, explicit break points can be entered in the \LaTeX{} document using the TC-instruction \code{break}. These take the form: +\codeline{\%TC:break \textit{title}} +A title (or name) may be given to identify the break point. + +If you define new section macros or macros you wish to cause a break point, these may be specified using the TC-instruction \code{breakmacro}: +\codeline{\%TC:breakmacro \textit{macro} \textit{label}} +This defines the given macro to cause a break point, and uses the given label to indicate the type of break (e.g. Section, Chapter, etc.). + +\subsection{Adding macro handling rules} Adding your own macro handling rules is relatively simple. Although editing the script is possible, and not too difficult, this has the disadvantage that the modifications will be lost if updating to a new version of \TeXcount. A better and more flexible solution is to include instructions to \TeXcount{} in the \LaTeX{} documents, alternatively to make a definition file in which new macro handling rules are defined. @@ -193,9 +269,13 @@ The instructions may be one of the following: % \begin{description}\def\option[#1]{\item[\bigcode{#1}]} -\option[macro]Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text. +\option[macro]Define macro handling rule for the given macro. Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text. + +\option[macroword]This defines the given macro to represent a certain number of words, where the number is given as the parameter. + +\option[header]Define macro to give a header. This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}. -\option[header]This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}. +\option[breakmacro]Specify that the given macro should cause a break point. Defining it as a header macro does not do this, nor is it required of a break point macro that it be a header (although I suppose in most cases of interest it will be). \option[group]This specifies a begin-end group with the given name (no backslash). It takes two further parameters. The first parameter speficies the macro rule following \code{\bs{begin}\{\textit{name}\}}. The second parameter specifies the parser status with which the contents should be parsed: e.g. $1$ for text (default rule), $0$ to ignore, $-1$ to specify a float (table, group, etc.) for which text should not be counted but captions should, $6$ and $7$ for inline or displated math. @@ -203,7 +283,7 @@ The instructions may be one of the following: \option[preambleinclude]The preamble, i.e. text between \code{\bs{documentclass}} and \code{\bs{begin}\{document\}}, if the document contains one, should generally not be included in the word count. However, there may be definitions, e.g. \code{\bs{title}\{title text\}}, that should still be counted. In order to be able to include these special cases, there is a preambleinclude rule in which one may speficy handling rules for macros within the preamble. Again, the rule is speficied like the \code{macro} rules, but since the default is to ignore text the only relevant rules to be specified require an array. -\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 1 if filetype \code{.tex} should be added if the file is without a filetype, 0 if it should not. +\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 0 if the file name should be used as provided, 1 if file type \code{.tex} should be added to files without a file type, and 2 if the file tyle \code{.tex} should always be added. \end{description} diff --git a/Master/texmf-dist/doc/support/texcount/macros.tex b/Master/texmf-dist/doc/support/texcount/macros.tex new file mode 100644 index 00000000000..09e304c736f --- /dev/null +++ b/Master/texmf-dist/doc/support/texcount/macros.tex @@ -0,0 +1,39 @@ +%% LaTeX macros + +%TC:macroword \TeXcount 1 +\newcommand\TeXcount{{\TeX}count} + +\newcommand\code[1]{\texttt{\small#1}} +\newcommand\bigcode[1]{\texttt{#1}} +\newcommand\codeline[1]{\begin{quote}\code{#1}\end{quote}} +\newcommand\bs[1]{\textbackslash#1} +\newcommand\URL[1]{\texttt{\small #1}} + +%TC:macro NB 1 +\newcommand\NB[1]{\marginpar{\textsf{\tiny#1}}} + + +\makeatletter + +\renewcommand\@maketitle{% +\newpage\null\vskip 2em% +\begin{center}% +\let\footnote\thanks +{\LARGE \@title \par}% +\end{center}% +\par +\vskip 1.5em +} + +\renewcommand\abstractname{ABSTRACT} +\renewenvironment{abstract}{% + \begin{center}% + {\bfseries\large\abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \vskip 4pt + \bfseries +}{ +\vskip 0.5em +} + +\makeatother diff --git a/Master/texmf-dist/scripts/texcount/TeXcount.pl b/Master/texmf-dist/scripts/texcount/TeXcount.pl index 1ed70fc8a56..8b68e4984c0 100755 --- a/Master/texmf-dist/scripts/texcount/TeXcount.pl +++ b/Master/texmf-dist/scripts/texcount/TeXcount.pl @@ -2,15 +2,33 @@ use strict; use warnings; use Term::ANSIColor; -#--- --- ---# use POSIX qw(locale_h); use locale; setlocale(LC_CTYPE,"no_NO"); -my $versionnumber="2.0"; -my $versiondate="2008 Feb 10"; +my $versionnumber="2.1"; +my $versiondate="2008 Nov 02"; -#--- --- ---# +###### Set CMD specific settings and variables + +# Options and states +my $verbose=0; +my $showcodes=1; +my $showstates=0; +my $showsubcounts=0; +my $htmlstyle=0; +my $includeTeX=0; +my $briefsum=0; +my $totalflag=0; +my @sumweights; +my $globalworkdir=""; + +# Global variables +my $blankline=0; +my @filelist; +my $workdir; + +###### Set global settings and variables ### Macros for headers # Macros that identify headers: i.e. following token or @@ -109,10 +127,10 @@ my %TeXgroup=('document'=>1,'letter'=>1,'titlepage'=>0, my %TeXfloatinc=('\caption'=>[3]); ### Macros for including tex files -# Allows \macro{file} or \macro file. If the value is 1, the filetype .tex will -# be added if file is without a filetype; if the value is 0, this will not be -# done. -my %TeXfileinclude=('\input'=>0,'\include'=>1); +# Allows \macro{file} or \macro file. If the value is 0, the filename will +# be used as is; if it is 1, the filetype .tex will be added if the +# filename is without filetype; if it is 2, the filetype .tex will be added. +my %TeXfileinclude=('\input'=>1,'\include'=>2); ### Count labels # Labels used to describe the counts @@ -120,113 +138,284 @@ my @countlabel=('Files','Words in text','Words in headers', 'Words in float captions','Number of headers','Number of floats', 'Number of math inlines','Number of math displayed'); -# Styles +### Break points +# Definition of macros that define break points that start a new subcount. +# The values given are used as labels. +my %BreakPointsOptions; +$BreakPointsOptions{'none'}={}; +$BreakPointsOptions{'part'}={%{$BreakPointsOptions{'none'}},'\part'=>'Part'}; +$BreakPointsOptions{'chapter'}={%{$BreakPointsOptions{'part'}},'\chapter'=>'Chapter'}; +$BreakPointsOptions{'section'}={%{$BreakPointsOptions{'chapter'}},'\section'=>'Section'}; +$BreakPointsOptions{'subsection'}={%{$BreakPointsOptions{'section'}},'\subsection'=>'Subsection'}; +$BreakPointsOptions{'default'}=$BreakPointsOptions{'subsection'}; +my %BreakPoints=%{$BreakPointsOptions{'none'}}; + +### Print styles +# Definition of different print styles: maps of class labels +# to ANSI codes. Class labels are as used by HTML styles. my @STYLES=(); my %STYLE; $STYLES[0]={'error'=>'bold red'}; $STYLES[1]={%{$STYLES[0]}, 'word1'=>'blue','word2'=>'bold blue','word3'=>'blue', 'grouping'=>'red','document'=>'red','mathgroup'=>'magenta', - 'state'=>'cyan underline'}; + 'state'=>'cyan underline','sumcount'=>'yellow'}; $STYLES[2]={%{$STYLES[1]}, - 'word0'=>'yellow','word-1'=>'yellow', 'command'=>'green','exclgroup'=>'yellow','exclmath'=>'yellow', 'ignore'=>'cyan'}; $STYLES[3]={%{$STYLES[2]}, - 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow','fileinclude'=>'bold green'}; + 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow', + 'fileinclude'=>'bold green'}; $STYLES[4]={%{$STYLES[3]}}; -# Options and states -my $verbose=0; -my $showstates=0; -my $htmlstyle=0; -my $blankline=0; -my $includeTeX=0; -my $briefsum=0; +### Word regexp pattern list +# List of regexp patterns that should be analysed as words. +my $specialchars='\\\\(ae|AE|o|O|aa|AA)'; +my $modifiedchars='\\\\[\'\"\`\~\^\=](\w|\{\w\})'; +my @WordPatterns=('(\w+\.)+\w+\.?','\w+([\-\']\w+)*'); +my @WordPatternsRelaxed=('([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\})+'); -#--- --- ---# +### Macro option regexp list +# List of regexp patterns to be gobbled as macro option in and after +# a macro. +my @MacroOptionPatterns=('\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\]'); +my @MacroOptionPatternsRelaxed=('\[[^\[\]\n]*\]'); -## SHORT HELP AND INFO -if (!defined @ARGV) { - print_version(); - print_syntax(); - print_reference(); - exit; -} elsif ($ARGV[0]=~/^(\-(h|\?|\-?help)|\/\?)$/) { - print_help(); - exit; -} elsif ($ARGV[0]=~/^\-?\-version$/) { - print_version(); - exit; -} elsif ($ARGV[0]=~/^\-?\-license$/) { - print_license(); - exit; -} - -# PROCESS ARGUMENTS AND FILES -my $totalcount=new_count(); -my @toplevelfiles; -my @filelist; -foreach my $arg (@ARGV) { - if ($arg eq '-noinc') {$includeTeX=0; next;} - if ($arg eq '-inc') {$includeTeX=1; next;} - if ($arg eq '-brief') {$briefsum=1; next;} - if ($arg eq '-v0') {$verbose=0; next;} - if ($arg eq '-v1') {$verbose=1; next;} - if ($arg eq '-vv' || $arg eq '-v2') {$verbose=2; next;} - if ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3; next;} - if ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1; next;} - if ($arg =~ /^\-showstate/ ){$showstates=1; next;} - if ($arg =~ /^\-html/ ) { - $ENV{'ANSI_COLORS_DISABLED'} = 1; - $htmlstyle = $arg eq '-htmlcore' ? 1 : 2; - if ($htmlstyle>1) {html_head();} - next; - } - if ($arg=~/^\-(nocol|nc$)/) { - $ENV{'ANSI_COLORS_DISABLED'} = 1; - next; - } - if ($arg=~/^\-/) { - print 'Invalid opton '.$arg."\n"; +###### Main script + +################################################### + +MAIN(@ARGV); + +################################################### + + +######### +######### Main routines +######### + +# MAIN ROUTINE: Handle arguments, then parse files +sub MAIN { + my @args=@_; + my @toplevelfiles=Parse_Arguments(@args); + Apply_Options(); + if (scalar(@toplevelfiles)==0) { + if ($showcodes>1) {print_help_style();} + else {print_error("No files specified.","p","error");} + } else { + conditional_print_help_style(); + my $totalcount=parse_file_list(@toplevelfiles); + conditional_print_total($totalcount); + } + Close_Output(); +} + +# Checks arguments, exits on exit condition +sub Check_Arguments { + my @args=@_; + if (!@args) { + print_version(); print_syntax(); + print_reference(); + exit; + } elsif ($args[0]=~/^(\-?\-(h|\?|help)|\/(\?|h))$/) { + print_help(); + exit; + } elsif ($args[0]=~/^\-?\-(ver|version)$/) { + print_version(); exit; + } elsif ($args[0]=~/^\-?\-(lic|license)$/) { + print_license(); + exit; + } + return 1; +} + +# Parses arguments, sets options (global) and returns file list +sub Parse_Arguments { + my @args=@_; + Check_Arguments(@args); + my @files; + foreach my $arg (@ARGV) { + if (Parse_Option($arg)) {next;} + if ($arg=~/^\-/) { + print 'Invalid opton '.$arg."\n"; + print_syntax(); + exit; + } + $arg=~s/\\/\//g; + push @files,$arg; + } + return @files; +} + +# Parse individual option parameters +sub Parse_Option { + my $arg=shift @_; + return parse_options_parsing($arg) + || parse_options_sums($arg) + || parse_options_output($arg) + || parse_options_format($arg) + ; +} + +sub parse_options_parsing { + my $arg=shift @_; + if ($arg eq '-inc') {$includeTeX=1;} + elsif ($arg eq '-noinc') {$includeTeX=0;} + elsif ($arg eq '-dir') {$globalworkdir=undef;} + elsif ($arg=~/^-dir=(.*)$/) {$globalworkdir=$1;} + elsif ($arg eq '-relaxed') { + @MacroOptionPatterns=@MacroOptionPatternsRelaxed; + @WordPatterns=@WordPatternsRelaxed; + } + else {return 0;} + return 1; +} + +sub parse_options_sums { + my $arg=shift @_; + if ($arg=~/^-sum(=(.+))?$/) {option_sum($2);} + elsif ($arg=~/^-(sub|subcounts?)(=(.+))?$/) {option_subcount($3);} + else {return 0;} + return 1; +} + +sub option_subcount { + my $arg=shift @_; + $showsubcounts=1; + if (!defined $arg) { + %BreakPoints=%{$BreakPointsOptions{'default'}}; + } elsif (my $option=$BreakPointsOptions{$arg}) { + %BreakPoints=%{$option}; + } else { + print STDERR "Warning: Option value ".$arg." not valid, using default instead.\n"; + %BreakPoints=%{$BreakPointsOptions{'default'}}; } - $arg=~s/\\/\//g; - push @toplevelfiles,$arg; } -%STYLE=%{$STYLES[$verbose]}; -for my $file (<@toplevelfiles>) { + +sub option_sum { + my $arg=shift @_; + if (!defined $arg) { + @sumweights=(1,1,1,0,0,1,1); + } elsif ($arg=~/^(\d+(,\d+){0,6})$/) { + @sumweights=split(',',$1); + } else { + print STDERR "Warning: Option value ".$arg." not valid, ignoring option.\n"; + } +} + +sub parse_options_format { + my $arg=shift @_; + if ($arg eq '-brief') {$briefsum=1; return 1;} + elsif ($arg eq '-total') {$totalflag=1; return 1;} + elsif ($arg eq '-1') {$briefsum=1;$totalflag=1;} + elsif ($arg eq "-html" ) {option_no_colours();$htmlstyle = 2;} + elsif ($arg eq "-htmlcore" ) {option_no_colours();$htmlstyle = 1;} + elsif ($arg=~/^\-(nocol|nc$)/) {option_no_colours();} + elsif ($arg eq '-codes') { + $showcodes=2; + if ($verbose==0) {$verbose=3;} + } + elsif ($arg eq '-nocodes') {$showcodes=0;} + else {return 0;} + return 1; +} + +sub parse_options_output { + my $arg=shift @_; + if ($arg eq "-v0") {$verbose=0;} + elsif ($arg eq "-v1") {$verbose=1;} + elsif ($arg eq '-vv' || $arg eq '-v2') {$verbose=2;} + elsif ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3;} + elsif ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1;} + elsif ($arg =~ /^\-showstates?$/ ){$showstates=1;} + else {return 0;} + return 1; +} + +# Parse file list and return total count +sub parse_file_list { + my @filelist=@_; + my $listtotalcount=new_count("TOTAL COUNT"); + for my $file (<@filelist>) { + my $filetotalcount=parse_file($file); + add_count($listtotalcount,$filetotalcount); + } + return $listtotalcount; +} + +# Parse file and included files, and return total count +sub parse_file { + my $file=shift @_; + $workdir=$globalworkdir; + if (!defined $workdir) { + $workdir=$file; + $workdir =~ s/^((.*[\\\/])?)[^\\\/]+$/$1/; + } @filelist=($file); + if ($htmlstyle) {print "\n<div class='filegroup'>\n";} + my $filetotalcount=new_count("SUM COUNT FOR ".$file); foreach my $f (@filelist) { my $tex=TeXfile($f); my $fpath=$f; - $fpath=~s/^(.*[\\\/])[^\\\/]+/$1/; + $fpath=~s/^((.*[\\\/])?)[^\\\/]+$/$1/; if (!defined $tex) { - print "File not found or not readable: ".$f."\n"; + #print_error("File not found or not readable: ".$f."\n"); + formatprint("File not found or not readable: ".$f."\n","p","error"); } else { parse($tex); - print "\n"; - print_count($tex->{'count'},'FILE: '.$f); - print "\n"; - add_count($totalcount,$tex->{'count'}); + my $filecount=add_subcount($tex); + if (!$totalflag) { + print_count($filecount); + print "\n"; + } + add_count($filetotalcount,$filecount); } } + if ($htmlstyle) {print "</div>\n\n";} + return $filetotalcount; } -if (${$totalcount}[0]>1) { - print "\n"; - formatprint('Total','h1'); - print_count($totalcount,'SUM'); + +###### +###### Subroutines +###### + +###### Option handling + +# Apply options to set values +sub Apply_Options { + %STYLE=%{$STYLES[$verbose]}; + if ($htmlstyle>1) {html_head();} } -if ($htmlstyle>1) { - html_tail(); + +# Close the output, e.g. adding HTML tail +sub Close_Output { + if ($htmlstyle>1) { + html_tail(); + } } +sub option_no_colours { + $ENV{'ANSI_COLORS_DISABLED'} = 1; +} +# Print count (total) if conditions are met +sub conditional_print_total { + my $sumcount=shift @_; + if ($totalflag || get_count($sumcount,0)>1) { + if ($totalflag && $briefsum && @sumweights) { + print total_count($sumcount); + } else { + if ($htmlstyle) { + formatprint("Total word count",'h2'); + } + print_count($sumcount); + } + } +} -######### -######### Subroutines -######### +###### TeX File handle sub TeXfile { my $filename=shift @_; @@ -235,7 +424,7 @@ sub TeXfile { } sub TeXcode { - my ($texcode,$filename)=@_; + my ($texcode,$filename,$title)=@_; my %TeX=(); $TeX{'filename'}=$filename; if (!defined $filename) { @@ -245,204 +434,39 @@ sub TeXcode { } else { $TeX{'filepath'}=''; } + if (defined $title) {} + elsif (defined $filename) {$title="FILE: ".$filename;} + else {$title="Word count";} $TeX{'line'}=$texcode; $TeX{'next'}=undef; $TeX{'type'}=undef; $TeX{'style'}=undef; $TeX{'printstate'}=undef; $TeX{'eof'}=0; - $TeX{'count'}=new_count(); - $TeX{'count'}[0]++; + my $countsum=new_count($title); + $TeX{'countsum'}=$countsum; + my $count=new_count("_top_"); + $TeX{'count'}=$count; + inc_count(\%TeX,0); + my @countlist=(); + $TeX{'countlist'}=\@countlist; + $countsum->{'subcounts'}=\@countlist; return \%TeX; } -sub set_style { - my ($tex,$style)=@_; - if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;} -} - -sub flush_style { - my ($tex,$style)=@_; - set_style($tex,$style); - flush_next($tex); -} - -sub line_return { - my $blank=shift @_; - if ($blank>$blankline) { - if ($htmlstyle) {print "<br>\n";} else {print "\n";} - $blankline++; - } -} - -sub print_style { - my ($text,$style,$state)=@_; - (($verbose>=0) && (defined $text) && (defined $style)) || return; - my $colour; - ($colour=$STYLE{$style}) || return; - if (($colour) && !($colour eq '-')) { - if ($htmlstyle) { - print "<span class='".$style."'>".$text."</span>"; - } else { - print Term::ANSIColor::colored($text,$colour); - } - if ($state) { - print_style($state,'state'); - } - $blankline=-1; - } -} - -sub print_error { - my $text=shift @_; - line_return(1); - print_style("### ".$text." ###",'error'); - line_return(1); -} - -sub formatprint { - my ($text,$tag,$class)=@_; - my $break=($text=~s/\n$//); - if ($htmlstyle && defined $tag) { - print '<'.$tag; - if ($class) {print " class='".$class."'";} - print '>'.$text.'</'.$tag.'>'; - } else { - print $text; - } - if ($break) {print "\n";} -} - sub read_file { my $filename=shift @_; open(FH,"<".$filename."") || return undef; if ($verbose) { - #line_return(1); formatprint("File: ".$filename."\n",'h2'); $blankline=0; } - my @text=(); - while (my $line=<FH>) { - push @text,$line; - } + my @text=<FH>; close(FH); return join('',@text); } -sub next_token { - my $tex=shift @_; - my ($next,$type); - if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});} - $tex->{'style'}=undef; - while (defined ($next=get_next_token($tex))) { - $type=$tex->{'type'}; - if ($type==0) { - print_style($next,'comment'); - } elsif ($type==9) { - if ($verbose) {line_return(1);} - } else { - return $next; - } - } - return $next; -} - -sub flush_next { - my $tex=shift @_; - if (defined $tex->{'next'}) { - print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'}); - } - $tex->{'printstate'}=undef; - $tex->{'style'}='-'; -} - -sub get_next_token { - # Token (or token group) category: - # 0: comment - # 1: word (or other forms of text or text components) - # 2: symbol (not word, e.g. punctuation) - # 3: macro - # 4: curly braces {} - # 5: brackets [] - # 6: maths - # 999: end of line or blank line - # 666: TeXcount instruction (%TC:instruction) - my $tex=shift @_; - my $next; - (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next; - (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next; - (defined ($next=get_token($tex,'\n',9))) && return $next; - (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next; - (defined ($next=get_token($tex,'(\w+\.)+\w+\.?',1))) && return $next; - (defined ($next=get_token($tex,'\w+([\-\']\w+)*',1))) && return $next; - (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next; - (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next; - (defined ($next=get_token($tex,'[\{\}]',4))) && return $next; - (defined ($next=get_token($tex,'[\[\]]',5))) && return $next; - (defined ($next=get_token($tex,'\$\$',6))) && return $next; - (defined ($next=get_token($tex,'\$',6))) && return $next; - (defined ($next=get_token($tex,'.',999))) && return $next; - (defined ($next=get_token($tex,'[^\s]+',999))) && return $next; - $tex->{'eof'}=1; - return undef; -} - -sub get_token { - my ($tex,$regexp,$type)=@_; - if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");} - if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});} - if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) { - $tex->{'next'}=$1; - $tex->{'type'}=$type; - return $1; - } - return undef; -} - -sub new_count { - my @count=(0,0,0,0,0,0,0,0); - # files, text words, header words, float words, - # headers, floats, math-inline, math-display; - return \@count; -} - -sub count_word { - my ($count,$type,$word,$style,$verb)=@_; - ($word) || ($word=""); - ($style) || ($style=0); - ($verb) || ($verb=0); - if ($type>0) {${$count}[$type]++;} - if ($verb >= $verbose) { - } -} - -sub print_count { - my ($count,$header)=@_; - if ($briefsum) { - if ($htmlstyle) {print "<p class='count'>\n";} - print ${$count}[1]."+".${$count}[2]."+".${$count}[3]. - " (".${$count}[4]."/".${$count}[5]."/".${$count}[6]."/".${$count}[7].") ". - $header; - if ($htmlstyle) {print "</p>\n";} - return; - } - if ($htmlstyle) {print "<dl class='count'>\n";} - if (defined $header) { - formatprint($header."\n",'dt','header'); - } - for (my $i=1;$i<8;$i++) { - formatprint($countlabel[$i].': ','dt'); - formatprint(${$count}[$i]."\n",'dd'); - } - if ($htmlstyle) {print "</dl>\n";} -} - -sub add_count { - my ($a,$b)=@_; - for (my $i=0;$i<8;$i++) { - ${$a}[$i]+=${$b}[$i]; - } -} +###### Parsing routines sub parse { my ($tex)=@_; @@ -471,7 +495,6 @@ sub parse_unit { print_error("CRITICAL ERROR: Invalid parser status!"); exit; } - my $count=$tex->{'count'}; my $substat; if ($showstates) { if (defined $end) { @@ -509,7 +532,7 @@ sub parse_unit { } elsif ($tex->{'type'}==1) { # word if ($status>0) { - ${$count}[$status]++; + inc_count($tex,$status); set_style($tex,'word'.$status); } } elsif ($next eq '{') { @@ -519,25 +542,31 @@ sub parse_unit { set_style($tex,'ignore'); } elsif ($tex->{'type'}==3) { # macro call + if (my $label=$BreakPoints{$next}) { + if ($tex->{'line'}=~ /^[*]?(\s*\[.*?\])*\s*\{(.+?)\}/ ) { + $label=$label.': '.$2; + } + add_subcount($tex,$label); + } set_style($tex,'command'); if ($next eq '\begin' && $status!=-2) { - parse_begin_end($tex,$count,$status); + parse_begin_end($tex,$status); } elsif (($status==-1) && ($substat=$TeXfloatinc{$next})) { # text included from float gobble_macro_parms($tex,$substat); } elsif ($status==-9 && defined ($substat=$TeXpreamble{$next})) { # parse preamble include macros - if (defined $TeXheader{$next}) {${$count}[4]++;} + if (defined $TeXheader{$next}) {inc_count($tex,4);} gobble_macro_parms($tex,$substat,1); } elsif ($status<0) { # ignore gobble_option($tex); } elsif ($next eq '\(') { # math inline - parse_math($tex,$count,$status,6,'\)'); + parse_math($tex,$status,6,'\)'); } elsif ($next eq '\[') { # math display - parse_math($tex,$count,$status,7,'\]'); + parse_math($tex,$status,7,'\]'); } elsif ($next eq '\def') { # ignore \def... $tex->{'line'} =~ s/^([^\{]*)\{/\{/; @@ -546,14 +575,14 @@ sub parse_unit { parse_unit($tex,-2); } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) { # include file: queue up for parsing - parse_include_file($tex,$count,$status,$addsuffix); + parse_include_file($tex,$status,$addsuffix); } elsif (defined ($substat=$TeXmacro{$next})) { # macro: exclude options - if (defined $TeXheader{$next}) {${$count}[4]++;} + if (defined $TeXheader{$next}) {inc_count($tex,4);} gobble_macro_parms($tex,$substat,$status); } elsif (defined ($substat=$TeXmacroword{$next})) { # count macro as word (or a given number of words) - ${$count}[$status]+=$substat; + inc_count($tex,$status,$substat); set_style($tex,'word'.$status); } elsif ($next =~ /^\\[^\w\_]/) { } else { @@ -561,10 +590,12 @@ sub parse_unit { } } elsif ($next eq '$') { # math inline - parse_math($tex,$count,$status,6,'$'); + parse_math($tex,$status,6,'$'); } elsif ($next eq '$$') { # math display (unless already in inlined math) - if (! $end eq '$') {parse_math($tex,$count,$status,7,'$$');} + if (!(defined $end && $end eq '$')) { + parse_math($tex,$status,7,'$$'); + } } if (!defined $end) {return;} } @@ -573,21 +604,32 @@ sub parse_unit { sub gobble_option { my $tex=shift @_; flush_next($tex); - if ($tex->{'line'} =~ s/^(\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\])//) { - print_style($1,'option'); - return $1; + foreach my $pattern (@MacroOptionPatterns) { + if ($tex->{'line'}=~s/^($pattern)//) { + print_style($1,'option'); + return $1; + } } return undef; } sub parse_tc { my ($tex)=@_; + my $next=$tex->{'next'}; set_style($tex,'tc'); - if ($tex->{'next'}=~/^\%+TC:\s*(\w+)\s+([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) { - my $instr=$1; - my $macro=$2; - my $param=$3; - my $option=$5; + flush_next($tex); + if (!($next=~s/^\%+TC:\s*(\w+)\s*// )) { + print_error('Warning: TC command should have format %TC:instruction [macro] [parameters]'); + return; + }; + my $instr=$1; + if ($instr=~/^(break)$/) { + if ($instr eq 'break') {add_subcount($tex,$next);} + } elsif ($next=~/^([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) { + # Format = TC:word macro + my $macro=$1; + my $param=$2; + my $option=$4; if ($param=~/^\[([0-9,]+)\]$/) {$param=[split(',',$1)];} if (($instr eq 'macro') || ($instr eq 'exclude')) {$TeXmacro{$macro}=$param;} elsif ($instr eq 'header') {$TeXheader{$macro}=$param;$TeXmacro{$macro}=$param;} @@ -596,24 +638,34 @@ sub parse_tc { elsif ($instr eq 'group') {$TeXmacro{'begin'.$macro}=$param;$TeXgroup{$macro}=$option;} elsif ($instr eq 'floatinclude') {$TeXfloatinc{$macro}=$param;} elsif ($instr eq 'fileinclude') {$TeXfileinclude{$macro}=$param;} + elsif ($instr eq 'breakmacro') {$BreakPoints{$macro}=$param;} else {print_error("Warning: Unknown TC command: ".$instr);} - } elsif ($tex->{'next'}=~/^\%+TC:\s*(\w+)/) { - my $instr=$1; - print_error("Warning: Unknown TC command: ".$instr); + } elsif ($instr eq 'ignore') { + tc_ignore_input($tex); + } else { + print_error("Warning: Invalid TC command format: ".$instr); } } +sub tc_ignore_input { + my ($tex)=@_; + set_style($tex,'ignore'); + parse_unit($tex,-3,"%TC:endignore"); + set_style($tex,'tc'); + flush_next($tex); +} + sub parse_math { - my ($tex,$count,$status,$substat,$end)=@_; + my ($tex,$status,$substat,$end)=@_; my $localstyle=$status>0 ? 'mathgroup' : 'exclmath'; - if ($status>0) {${$count}[$substat]++;} + if ($status>0) {inc_count($tex,$substat);} set_style($tex,$localstyle); parse_unit($tex,0,$end); set_style($tex,$localstyle); } sub parse_begin_end { - my ($tex,$count,$status)=@_; + my ($tex,$status)=@_; my $localstyle=$status>0 ? 'grouping' : 'exclgroup'; flush_style($tex,$localstyle); gobble_option($tex); @@ -635,11 +687,11 @@ sub parse_begin_end { if ($status<=0 && $status<$substat) {$substat=$status;} if (($status>0) && ($substat==-1)) { # Count float - ${$count}[5]++; + inc_count($tex,5); } if ($status>0 and $substat>3) { # count item, exclude contents - ${$count}[$substat]++; + inc_count($tex,$substat); $substat=0; } parse_unit($tex,$substat,'\end'); @@ -653,7 +705,7 @@ sub parse_begin_end { } sub parse_include_file { - my ($tex,$count,$status,$addsuffix)=@_; + my ($tex,$status,$addsuffix)=@_; $tex->{'line'} =~ s/^\{([^\{\}\s]+)\}// || $tex->{'line'} =~ s/^\s*([^\{\}\%\\\s]+)// || return; @@ -661,8 +713,10 @@ sub parse_include_file { if ($status>0) { print_style($&,'fileinclude'); my $fname=$1; - if ($addsuffix && ($fname=~/^[^\.]+$/)) {$fname.='.tex';} - if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;} + if ($addsuffix==2) {$fname.='.tex';} + elsif ($addsuffix==1 && ($fname=~/^[^\.]+$/)) {$fname.='.tex';} + #if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;} + if ($includeTeX) {push @filelist,$workdir.$fname;} } else { print_style($&,'ignored'); } @@ -710,7 +764,264 @@ sub new_status { return $substat; } -### HTML context +sub next_token { + my $tex=shift @_; + my ($next,$type); + if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});} + $tex->{'style'}=undef; + while (defined ($next=get_next_token($tex))) { + $type=$tex->{'type'}; + if ($type==0) { + print_style($next,'comment'); + } elsif ($type==9) { + if ($verbose) {line_return(1,$tex);} + } else { + return $next; + } + } + return $next; +} + + +sub get_next_token { + # Token (or token group) category: + # 0: comment + # 1: word (or other forms of text or text components) + # 2: symbol (not word, e.g. punctuation) + # 3: macro + # 4: curly braces {} + # 5: brackets [] + # 6: maths + # 9: line break in file + # 999: end of line or blank line + # 666: TeXcount instruction (%TC:instruction) + my $tex=shift @_; + my $next; + (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next; + (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next; + (defined ($next=get_token($tex,'\n',9))) && return $next; + (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next; + foreach my $pattern (@WordPatterns) { + (defined ($next=get_token($tex,$pattern,1))) && return $next; + } + (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next; + (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next; + (defined ($next=get_token($tex,'[\{\}]',4))) && return $next; + (defined ($next=get_token($tex,'[\[\]]',5))) && return $next; + (defined ($next=get_token($tex,'\$\$',6))) && return $next; + (defined ($next=get_token($tex,'\$',6))) && return $next; + (defined ($next=get_token($tex,'.',999))) && return $next; + (defined ($next=get_token($tex,'[^\s]+',999))) && return $next; + $tex->{'eof'}=1; + return undef; +} + +sub get_token { + my ($tex,$regexp,$type)=@_; + if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");} + if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});} + if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) { + $tex->{'next'}=$1; + $tex->{'type'}=$type; + return $1; + } + return undef; +} + +###### Count handling routines + +sub new_count { + my ($title)=@_; + my @cnt=(0,0,0,0,0,0,0,0); + my %count=('count'=>\@cnt,'title'=>$title); + # files, text words, header words, float words, + # headers, floats, math-inline, math-display; + return \%count; +} + +sub inc_count { + my ($tex,$type,$value)=@_; + my $count=$tex->{'count'}; + if (!defined $value) {$value=1;} + ${$count->{'count'}}[$type]+=$value; +} + +sub get_count { + my ($count,$type)=@_; + return ${$count->{'count'}}[$type]; +} + +sub total_count { + my ($count)=@_; + my $sum=0; + for (my $i=scalar(@sumweights);$i-->0;) { + $sum+=get_count($count,$i+1)*$sumweights[$i]; + } + return $sum; +} + +sub print_count { + my ($count,$header)=@_; + if ($briefsum && @sumweights) { + print_count_total($count,$header); + } elsif ($briefsum) { + if ($htmlstyle) {print "<p class='briefcount'>";} + print_count_brief($count,$header); + if ($htmlstyle) {print "</p>\n";} + } else { + print_count_details($count,$header); + } +} + +sub print_count_with_header { + my ($count,$header)=@_; + if (!defined $header) {$header=$count->{'title'};} + if (!defined $header) {$header="";} + return $count,$header; +} + +sub print_count_total { + my ($count,$header)=print_count_with_header(@_); + if ($htmlstyle) {print "<p class='count'>".$header;} + print total_count($count); + if ($htmlstyle) {print "</p>\n";} + else {print ": ".$header;} +} + +sub print_count_brief { + my ($count,$header)=print_count_with_header(@_); + my $cnt=$count->{'count'}; + print ${$cnt}[1]."+".${$cnt}[2]."+".${$cnt}[3]. + " (".${$cnt}[4]."/".${$cnt}[5]."/".${$cnt}[6]."/".${$cnt}[7].") ". + $header; +} + +sub print_count_details { + my ($count,$header)=print_count_with_header(@_); + if ($htmlstyle) {print "<dl class='count'>\n";} + if (defined $header) { + formatprint($header."\n",'dt','header'); + } + if (get_count($count,0)>1) { + formatprint($countlabel[0].': ','dt'); + formatprint(get_count($count,0)."\n",'dd'); + } + if (@sumweights) { + formatprint('Sum count: ','dt'); + formatprint(total_count($count)."\n",'dd'); + } + for (my $i=1;$i<8;$i++) { + formatprint($countlabel[$i].': ','dt'); + formatprint(get_count($count,$i)."\n",'dd'); + } + my $subcounts=$count->{'subcounts'}; + if ($showsubcounts && defined $subcounts && scalar(@{$subcounts})>1) { + formatprint("Subcounts: text+headers+captions (#headers/#floats/#inlines/#displayed)\n",'dt'); + foreach my $subcount (@{$subcounts}) { + if ($htmlstyle) {print "<dd class='briefcount'>";} + print_count_brief($subcount); + if ($htmlstyle) {print "</dd>";} + print "\n"; + } + } + if ($htmlstyle) {print "</dl>\n";} +} + +sub add_count { + my ($a,$b)=@_; + for (my $i=0;$i<8;$i++) { + ${$a->{'count'}}[$i]+=${$b->{'count'}}[$i]; + } +} + +sub add_subcount { + my ($tex,$title)=@_; + add_count($tex->{'countsum'},$tex->{'count'}); + push @{$tex->{'countlist'}},$tex->{'count'}; + $tex->{'count'}=new_count($title); + return $tex->{'countsum'}; +} + +###### Printing routines + +sub set_style { + my ($tex,$style)=@_; + if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;} +} + +sub flush_style { + my ($tex,$style)=@_; + set_style($tex,$style); + flush_next($tex); +} + +sub line_return { + my ($blank,$tex)=@_; + if ($blank>$blankline) { + if ((defined $tex) && @sumweights) { + my $num=total_count($tex->{'count'}); + print_style(" [".$num."]","sumcount"); + } + linebreak(); + $blankline++; + } +} + +sub linebreak { + if ($htmlstyle) {print "<br>\n";} else {print "\n";} +} + +sub print_style { + my ($text,$style,$state)=@_; + (($verbose>=0) && (defined $text) && (defined $style)) || return 0; + my $colour; + ($colour=$STYLE{$style}) || return; + if (($colour) && !($colour eq '-')) { + if ($htmlstyle) { + print "<span class='".$style."'>".$text."</span>"; + } else { + print Term::ANSIColor::colored($text,$colour); + } + if ($state) { + print_style($state,'state'); + } + $blankline=-1; + return 1; + } else { + return 0; + } +} + +sub print_error { + my $text=shift @_; + line_return(1); + print_style("### ".$text." ###",'error'); + line_return(1); +} + +sub formatprint { + my ($text,$tag,$class)=@_; + my $break=($text=~s/\n$//); + if ($htmlstyle && defined $tag) { + print '<'.$tag; + if ($class) {print " class='".$class."'";} + print '>'.$text.'</'.$tag.'>'; + } else { + print $text; + } + if ($break) {print "\n";} +} + +sub flush_next { + my $tex=shift @_; + if (defined $tex->{'next'}) { + print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'}); + } + $tex->{'printstate'}=undef; + $tex->{'style'}='-'; +} + +###### HTML routines sub html_head { print ' @@ -718,13 +1029,11 @@ sub html_head { <head> <style> <!-- -body {width:100%;padding:5;margin:5 10 5 5;} +body {width:auto;padding:5;margin:5;} .error {font-weight:bold;color:#f00;font-style:italic;} -.parse {font-size: 80%; background: #eef;} .word1,.word2,.word3 {color: #009;} .word2 {font-weight: 700;} .word3 {font-style: italic;} -.word-1 {color: #66c;} .command {color: #c00;} .option {color: #cc0;} .grouping, .document {color: #900; font-weight:bold;} @@ -735,14 +1044,19 @@ body {width:100%;padding:5;margin:5 10 5 5;} .tc {color: #999; font-weight:bold;} .comment {color: #999; font-style: italic;} .state {color: #990; font-size: 70%;} +.sumcount {color: #999; font-size: 80%;} .fileinclude {color: #696; font-weight:bold;} dl.count {background: #cfc; color: 009;} -dl.count dt.header {font-weight: 700; font-style: italic; float: none;} -dl.count dt {clear: both; float: left;} -dl.count dd {font-weight: 700;} +dl.count dt.header {font-weight: bold; font-style: italic; float: none;} +dl.count dt {clear: both; float: left; margin-right: .5em;} +dl.count dd {font-weight: bold;} +dl.count dd.briefcount {font-weight: 700; clear: both; font-size:80%; font-weight:normal; margin-left:8pt;} .warning {color: #c00; font-weight: 700;} -.parse, .count {border: solid 1px #999; margin: 0pt; padding: 4pt;} +.parse, .count, .stylehelp, .filegroup {border: solid 1px #999; margin: 0pt; padding: 4pt;} +.parse {font-size: 80%; background: #eef;} .parse {border-bottom:none;} +.stylehelp {font-size: 80%; background: #ffc; margin-bottom: 8pt;} +.filegroup {background: #efe; margin-bottom: 8pt;} --> </style> </head> @@ -755,8 +1069,7 @@ sub html_tail { print '</body></html>'; } - -### HELP AND INFO +###### Help routines sub print_version { print "TeXcount version ".$versionnumber.", ".$versiondate.'.'; @@ -767,18 +1080,43 @@ sub print_syntax { Syntax: TeXcount.pl [options] files Options: + -relaxed Uses relaxed rules for word and option handling: + i.e. allows more general cases to be counted as + either words or macros. -v Verbose (same as -v3) -v0 Do not present parsing details -v1 Verbose: print parsed words, mark formulae -v2 More verbose: also print ignored text -v3 Even more verbose: include comments and options + -v4 Same as -v3 -showstate -showstate Show internal states (with verbose) -brief Only prints a brief, one line summary of counts + -sum, -sum= Make sum of all word and equation counts. May also + use -sum=#[,#] with up to 7 numbers to indicate how + each of the counts (text words, header words, caption + words, #headers, #floats, #inlined formulae, + #displayed formulae) are summed. The default sum (if + only -sum is used) is the same as -sum=1,1,1,0,0,1,1. + -sub, -sub= Generate subcounts. Option values are none, part, + chapter, section or subsection. Default (-sub) is set + to subsection, whereas unset is none. (Alternative + option name is -subcount.) -nc, -nocol No colours (colours require ANSI) - -inc Include tex files included in the document - -noinc Do not include included tex files (default) -html Output in HTML format -htmlcore Only HTML body contents + -inc Include tex files included in the document + -noinc Do not include included tex files (default) + -total Do not give sums per file, only total sum. + -1 Same as -brief and -total. Ensures there is only one + line of output. If used in conjunction with -sum, the + output will only be the total number. (NB: Character + is the number one, not the letter L.) + -dir, -dir= Specify the working directory using -dir=path. + Remember that the path must end with \ or /. If only + -dir is used, the directory of the parent file is used. + -codes Display output style code overview and explanation. + This is on by default. + -nocodes Do not display output style code overview. -h, -?, --help, /? Help --version Print version number --license License information @@ -821,6 +1159,37 @@ ensure that words in the text has been interpreted as such, whereas mathematical formulae and text/non-text in begin-end groups have been correctly interpreted. +Parsing instructions may be passed to TeXcount using comments +in the LaTeX files on the format + %TC:instruction arguments +where valid instructions for setting parsing rules, typically +set at the start of the document (applies globally), are: + %TC:macro [macro] [param.states] + macro handling rule, no. of and rules for parameters + %TC:macroword [macro] [number] + macro counted as a given number of words + %TC:header [macro] [param.states] + header macro rule, as macro but counts as one header + %TC:breakmacro [macro] [label] + macro causing subcount break point + %TC:group [name] [parsing-state] + begin-end-group handling rule + %TC:floatinclude [macro] [param.states] + as macro, but also counted inside floats + %TC:preambleinclude [macro] [param.states] + as macro, but also counted inside the preamble + %TC:fileinclue [macro] [rule] + file include, add .tex if rule=2, not if rule=0 +The [param.states] is used to indicate the number of parameters +used by the macro and the rules of handling each of these: format +is [#,#,...,#] with one number for each parameter, and main rules +are 0 to ignore and 1 to count as text. Parsing instructions +which may be used anywhere are: + %TC:ignore start block to ignore + %TC:endignore end block to ignore + %TC:break [title] add subcount break point here +See the documentation for more details. + Unix hint: Use \'less -r\' instead of just \'less\' to view output: the \'-r\' option makes less treat text formating codes properly. @@ -830,6 +1199,7 @@ options or the output will be riddled with colour codes. Instead, you can use -html to produce HTML code, write this to file and view with your favourite browser. '; + print_help_style(); print_reference(); } @@ -864,3 +1234,53 @@ The script has LPPL status "maintained" with Einar Andreas Rødland being the current maintainer. '; } + +sub print_help_style { + if ($verbose<=0) {return;} + formatprint("Format/colour codes of verbose output:","h2"); + print "\n\n"; + if ($htmlstyle) {print "<p class='stylehelp'>";} + help_style_line('Text which is counted',"word1","counted as text words"); + help_style_line('Header and title text',"word2","counted as header words"); + help_style_line('Caption text and footnotes',"word3","counted as caption words"); + help_style_line("Ignored text or code","ignore","excluded or ignored"); + help_style_line('\documentclass',"document","document start, beginning of preamble"); + help_style_line('\macro',"command","macro not counted, but parameters may be"); + help_style_line("[Macro options]","option","not counted"); + help_style_line('\begin{group} \end{group}',"grouping","begin/end group"); + help_style_line('\begin{group} \end{group}',"exclgroup","begin/end group in excluded region"); + help_style_line('$ $',"mathgroup","counted as one equation"); + help_style_line('$ $',"exclmath","equation in excluded region"); + help_style_line('% Comments',"comment","not counted"); + help_style_line('%TC:TeXcount instructions',"tc","not counted"); + help_style_line("File to include","fileinclude","not counted but file may be counted later"); + if ($showstates) { + help_style_line('[state]',"state","internal TeXcount state"); + } + if (@sumweights) { + help_style_line('[sumcount]',"sumcount","cumulative sum count"); + } + help_style_line("ERROR","error","TeXcount error message"); + if ($htmlstyle) {print "</p>";} + print "\n\n"; +} + +sub help_style_line { + my ($text,$style,$comment)=@_; + if ($htmlstyle) { + $comment=" .... ".$comment; + } else { + $comment=" .... ".$comment; + } + if (print_style($text,$style)) { + print $comment; + linebreak(); + } +} + +# Print output style codes if conditions are met +sub conditional_print_help_style { + if ($showcodes) {print_help_style();} + return $showcodes; +} + diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index f93e6920085..c24e495bea7 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -209,7 +209,8 @@ my @WorkingTLP = qw( t-angles t2 Tabbing tableaux tablists tablor tabulary tabvar talk tamethebeast tdsfrmath ted templates-fenn templates-sommer tengwarscript - tensor termlist teubner tex-ewd tex-gyre texilikecover texmate + tensor termlist teubner tex-ewd tex-gyre texcount + texilikecover texmate texpower texshade textcase textfit textopo textpath textpos theoremref thesis-titlepage-fhac |