summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-08 16:48:48 +0000
committerKarl Berry <karl@freefriends.org>2009-05-08 16:48:48 +0000
commit019d7b11f4db961bf3ba2a4d0fb77735d67bf22c (patch)
tree96332ec21c1d89b21a71474e41db88a5c1a0cde5
parente466b85f007f70bae104d8fe0c9173a0707d1626 (diff)
texcount 2.2 (6may09)
git-svn-id: svn://tug.org/texlive/trunk@13012 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/texk/texlive/linked_scripts/ChangeLog5
-rw-r--r--Build/source/texk/texlive/linked_scripts/Makefile.am2
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/texcount/texcount.pl (renamed from Build/source/texk/texlive/linked_scripts/texcount/TeXcount.pl)427
-rw-r--r--Master/texmf-dist/doc/support/texcount/QuickReference.pdf754
-rw-r--r--Master/texmf-dist/doc/support/texcount/QuickReference.tex16
-rw-r--r--Master/texmf-dist/doc/support/texcount/TeXcount.pdfbin147012 -> 148874 bytes
-rw-r--r--Master/texmf-dist/doc/support/texcount/TeXcount.tex16
-rwxr-xr-xMaster/texmf-dist/scripts/texcount/texcount.pl (renamed from Master/texmf-dist/scripts/texcount/TeXcount.pl)427
8 files changed, 937 insertions, 710 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/ChangeLog b/Build/source/texk/texlive/linked_scripts/ChangeLog
index beaba4b46b0..f254495b394 100644
--- a/Build/source/texk/texlive/linked_scripts/ChangeLog
+++ b/Build/source/texk/texlive/linked_scripts/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-08 Karl Berry <karl@tug.org>
+
+ * Makefile.am (nobase_dist_script_SCRIPTS): TeXcount.pl is now
+ texcount.pl.
+
2009-04-11 Karl Berry <karl@tug.org>
* Makefile.am (nobase_dist_script_SCRIPTS): add accfonts scripts.
diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.am b/Build/source/texk/texlive/linked_scripts/Makefile.am
index 20877952a41..74267c1ac87 100644
--- a/Build/source/texk/texlive/linked_scripts/Makefile.am
+++ b/Build/source/texk/texlive/linked_scripts/Makefile.am
@@ -83,7 +83,7 @@ nobase_dist_script_SCRIPTS = \
purifyeps/purifyeps \
splitindex/perl/splitindex.pl \
svn-multi/svn-multi.pl \
- texcount/TeXcount.pl \
+ texcount/texcount.pl \
texdirflatten/texdirflatten \
texloganalyser/texloganalyser \
thumbpdf/thumbpdf.pl \
diff --git a/Build/source/texk/texlive/linked_scripts/texcount/TeXcount.pl b/Build/source/texk/texlive/linked_scripts/texcount/texcount.pl
index 8b68e4984c0..96fac5cd220 100755
--- a/Build/source/texk/texlive/linked_scripts/texcount/TeXcount.pl
+++ b/Build/source/texk/texlive/linked_scripts/texcount/texcount.pl
@@ -2,12 +2,13 @@
use strict;
use warnings;
use Term::ANSIColor;
+use Encode;
use POSIX qw(locale_h);
use locale;
setlocale(LC_CTYPE,"no_NO");
-my $versionnumber="2.1";
-my $versiondate="2008 Nov 02";
+my $versionnumber="2.2";
+my $versiondate="2009 Apr 30";
###### Set CMD specific settings and variables
@@ -19,14 +20,18 @@ my $showsubcounts=0;
my $htmlstyle=0;
my $includeTeX=0;
my $briefsum=0;
-my $totalflag=0;
my @sumweights;
-my $globalworkdir="";
+my $utf8flag=0;
# Global variables
my $blankline=0;
+my $errorcount=0;
+
+# CMD specific global variables
+my $totalflag=0;
my @filelist;
my $workdir;
+my $globalworkdir="";
###### Set global settings and variables
@@ -118,7 +123,7 @@ my %TeXgroup=('document'=>1,'letter'=>1,'titlepage'=>0,
'abstract'=>1,'quote'=>1,'quotation'=>1,'verse'=>1,'minipage'=>1,'verbatim'=>1,
'description'=>1,'enumerate'=>1,'itemize'=>1,'list'=>1,
'theorem'=>1,'lemma'=>1,'definition'=>1,'corollary'=>1,'example'=>1,
- 'math'=>6,'displaymath'=>7,'equation'=>7,'eqnarray'=>7,
+ 'math'=>6,'displaymath'=>7,'equation'=>7,'eqnarray'=>7,'align'=>7,
'figure'=>-1,'float'=>-1,'picture'=>-1,'table'=>-1,
'tabbing'=>0,'tabular'=>0,'thebibliography'=>0,'lrbox'=>0);
@@ -161,7 +166,7 @@ $STYLES[1]={%{$STYLES[0]},
'grouping'=>'red','document'=>'red','mathgroup'=>'magenta',
'state'=>'cyan underline','sumcount'=>'yellow'};
$STYLES[2]={%{$STYLES[1]},
- 'command'=>'green','exclgroup'=>'yellow','exclmath'=>'yellow',
+ 'command'=>'green','exclcommand'=>'yellow','exclgroup'=>'yellow','exclmath'=>'yellow',
'ignore'=>'cyan'};
$STYLES[3]={%{$STYLES[2]},
'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow',
@@ -170,10 +175,15 @@ $STYLES[4]={%{$STYLES[3]}};
### Word regexp pattern list
# List of regexp patterns that should be analysed as words.
+# Use @ to represent a letter, will be substituted with $LetterPattern.
+my @WordPatterns=('(@+\.)+@+\.?','@+([\-\']@+)*');
my $specialchars='\\\\(ae|AE|o|O|aa|AA)';
my $modifiedchars='\\\\[\'\"\`\~\^\=](\w|\{\w\})';
-my @WordPatterns=('(\w+\.)+\w+\.?','\w+([\-\']\w+)*');
-my @WordPatternsRelaxed=('([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\})+');
+my $LetterPattern='\w';
+my $LetterPatternRelaxed='([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\}|\{\w\})';
+my %NamedWordPattern;
+$NamedWordPattern{'chinese'}='\p{script=Han}';
+$NamedWordPattern{'japanese'}='(\p{script=Han}|\p{script=Hiragana}|\p{script=Katakana})';
### Macro option regexp list
# List of regexp patterns to be gobbled as macro option in and after
@@ -183,6 +193,7 @@ my @MacroOptionPatternsRelaxed=('\[[^\[\]\n]*\]');
###### Main script
+
###################################################
MAIN(@ARGV);
@@ -200,13 +211,14 @@ sub MAIN {
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");}
+ conditional_print_help_style()
+ || print_error("No files specified.","p","error");
} else {
conditional_print_help_style();
my $totalcount=parse_file_list(@toplevelfiles);
conditional_print_total($totalcount);
}
+ Report_ErrorCount();
Close_Output();
}
@@ -265,9 +277,18 @@ sub parse_options_parsing {
elsif ($arg eq '-noinc') {$includeTeX=0;}
elsif ($arg eq '-dir') {$globalworkdir=undef;}
elsif ($arg=~/^-dir=(.*)$/) {$globalworkdir=$1;}
+ elsif ($arg=~/^-(utf8|unicode)$/) {$utf8flag=1;}
+ elsif ($arg=~/^-(ch|chinese|zhongwen)$/) {
+ $utf8flag=1;
+ @WordPatterns=($NamedWordPattern{'chinese'},@WordPatterns);
+ }
+ elsif ($arg=~/^-(jp|japanese)$/) {
+ $utf8flag=1;
+ @WordPatterns=($NamedWordPattern{'japanese'},@WordPatterns);
+ }
elsif ($arg eq '-relaxed') {
@MacroOptionPatterns=@MacroOptionPatternsRelaxed;
- @WordPatterns=@WordPatternsRelaxed;
+ $LetterPattern=$LetterPatternRelaxed;
}
else {return 0;}
return 1;
@@ -307,9 +328,9 @@ sub option_sum {
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;}
+ if ($arg eq '-brief') {$briefsum=1;}
+ elsif ($arg eq '-total') {$totalflag=1;}
+ elsif ($arg eq '-1') {$briefsum=1;$totalflag=1;$verbose=-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();}
@@ -329,7 +350,8 @@ sub parse_options_output {
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;}
+ elsif ($arg =~ /^\-showstates?$/ ) {$showstates=1;}
+ elsif ($arg =~ /^-(q|-?quiet)$/ ) {$verbose=-1;}
else {return 0;}
return 1;
}
@@ -361,7 +383,7 @@ sub parse_file {
my $fpath=$f;
$fpath=~s/^((.*[\\\/])?)[^\\\/]+$/$1/;
if (!defined $tex) {
- #print_error("File not found or not readable: ".$f."\n");
+ print STDERR "File not found or not readable: ".$f."\n";
formatprint("File not found or not readable: ".$f."\n","p","error");
} else {
parse($tex);
@@ -377,22 +399,26 @@ sub parse_file {
return $filetotalcount;
}
+
######
###### Subroutines
######
-###### Option handling
+###### CMD specific implementations
-# Apply options to set values
-sub Apply_Options {
- %STYLE=%{$STYLES[$verbose]};
- if ($htmlstyle>1) {html_head();}
+
+sub add_file_to_list {
+ my $fname=shift @_;
+ push @filelist,$workdir.$fname;
}
-# Close the output, e.g. adding HTML tail
-sub Close_Output {
- if ($htmlstyle>1) {
- html_tail();
+sub print_with_style {
+ my ($text,$style,$colour)=@_;
+ #if ($utf8flag || $htmlstyle) {utf8::encode($text);}
+ if ($htmlstyle) {
+ print "<span class='".$style."'>".$text."</span>";
+ } else {
+ print Term::ANSIColor::colored($text,$colour);
}
}
@@ -415,7 +441,22 @@ sub conditional_print_total {
}
}
-###### TeX File handle
+###### Option handling
+
+
+# Apply options to set values
+sub Apply_Options {
+ %STYLE=%{$STYLES[$verbose]};
+ if ($utf8flag) {binmode STDOUT,':utf8';}
+ if ($htmlstyle>1) {html_head();}
+ foreach (@WordPatterns) {
+ s/\@/$LetterPattern/g;
+ }
+}
+
+
+###### TeX code handle
+
sub TeXfile {
my $filename=shift @_;
@@ -423,6 +464,30 @@ sub TeXfile {
return TeXcode($file,$filename);
}
+sub read_file {
+ my $filename=shift @_;
+ if ($utf8flag) {
+ open(FH,"<:utf8",$filename) || return undef;
+ } else {
+ open(FH,"<".$filename) || return undef;
+ }
+ if ($verbose>0) {
+ formatprint("File: ".$filename."\n",'h2');
+ $blankline=0;
+ }
+ my @text=<FH>;
+ close(FH);
+ my $latexcode=join('',@text);
+ if ($utf8flag) {
+ $latexcode =~ s/^\x{feff}//;
+ }
+ return $latexcode;
+}
+
+###### Parsing routines
+
+
+# Make TeXcode handle
sub TeXcode {
my ($texcode,$filename,$title)=@_;
my %TeX=();
@@ -454,20 +519,7 @@ sub TeXcode {
return \%TeX;
}
-sub read_file {
- my $filename=shift @_;
- open(FH,"<".$filename."") || return undef;
- if ($verbose) {
- formatprint("File: ".$filename."\n",'h2');
- $blankline=0;
- }
- my @text=<FH>;
- close(FH);
- return join('',@text);
-}
-
-###### Parsing routines
-
+# Parse LaTeX document
sub parse {
my ($tex)=@_;
if ($htmlstyle && $verbose) {print "<p class=parse>\n";}
@@ -477,6 +529,7 @@ sub parse {
if ($htmlstyle && $verbose) {print "</p>\n";}
}
+# Parse one block or unit
sub parse_unit {
# Status:
# 0 = exclude from count
@@ -542,52 +595,7 @@ 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,$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}) {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,$status,6,'\)');
- } elsif ($next eq '\[') {
- # math display
- parse_math($tex,$status,7,'\]');
- } elsif ($next eq '\def') {
- # ignore \def...
- $tex->{'line'} =~ s/^([^\{]*)\{/\{/;
- flush_next($tex);
- print_style($1.' ','ignore');
- parse_unit($tex,-2);
- } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) {
- # include file: queue up for parsing
- parse_include_file($tex,$status,$addsuffix);
- } elsif (defined ($substat=$TeXmacro{$next})) {
- # macro: exclude options
- 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)
- inc_count($tex,$status,$substat);
- set_style($tex,'word'.$status);
- } elsif ($next =~ /^\\[^\w\_]/) {
- } else {
- gobble_option($tex);
- }
+ parse_macro($tex,$next,$status,$substat);
} elsif ($next eq '$') {
# math inline
parse_math($tex,$status,6,'$');
@@ -601,16 +609,56 @@ sub parse_unit {
}
}
-sub gobble_option {
- my $tex=shift @_;
- flush_next($tex);
- foreach my $pattern (@MacroOptionPatterns) {
- if ($tex->{'line'}=~s/^($pattern)//) {
- print_style($1,'option');
- return $1;
+sub parse_macro {
+ my ($tex,$next,$status,$substat)=@_;
+ if (my $label=$BreakPoints{$next}) {
+ if ($tex->{'line'}=~ /^[*]?(\s*\[.*?\])*\s*\{(.+?)\}/ ) {
+ $label=$label.': '.$2;
}
+ add_subcount($tex,$label);
+ }
+ set_style($tex,$status>0?'command':'exclcommand');
+ if ($next eq '\begin' && $status!=-2) {
+ parse_begin_end($tex,$status);
+ } elsif (($status==-1) && ($substat=$TeXfloatinc{$next})) {
+ # text included from float
+ set_style($tex,'command');
+ gobble_macro_parms($tex,$substat);
+ } elsif ($status==-9 && defined ($substat=$TeXpreamble{$next})) {
+ # parse preamble include macros
+ set_style($tex,'command');
+ 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,$status,6,'\)');
+ } elsif ($next eq '\[') {
+ # math display
+ parse_math($tex,$status,7,'\]');
+ } elsif ($next eq '\def') {
+ # ignore \def...
+ $tex->{'line'} =~ s/^([^\{]*)\{/\{/;
+ flush_next($tex);
+ print_style($1.' ','ignore');
+ parse_unit($tex,-2);
+ } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) {
+ # include file: queue up for parsing
+ parse_include_file($tex,$status,$addsuffix);
+ } elsif (defined ($substat=$TeXmacro{$next})) {
+ # macro: exclude options
+ 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)
+ inc_count($tex,$status,$substat);
+ set_style($tex,'word'.$status);
+ } elsif ($next =~ /^\\[^\w\_]/) {
+ } else {
+ gobble_option($tex);
}
- return undef;
}
sub parse_tc {
@@ -635,7 +683,10 @@ sub parse_tc {
elsif ($instr eq 'header') {$TeXheader{$macro}=$param;$TeXmacro{$macro}=$param;}
elsif ($instr eq 'macroword') {$TeXmacroword{$macro}=$param;}
elsif ($instr eq 'preambleinclude') {$TeXpreamble{$macro}=$param;}
- elsif ($instr eq 'group') {$TeXmacro{'begin'.$macro}=$param;$TeXgroup{$macro}=$option;}
+ 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;}
@@ -715,13 +766,24 @@ sub parse_include_file {
my $fname=$1;
if ($addsuffix==2) {$fname.='.tex';}
elsif ($addsuffix==1 && ($fname=~/^[^\.]+$/)) {$fname.='.tex';}
- #if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;}
- if ($includeTeX) {push @filelist,$workdir.$fname;}
+ if ($includeTeX) {add_file_to_list($fname);}
} else {
print_style($&,'ignored');
}
}
+sub gobble_option {
+ my $tex=shift @_;
+ flush_next($tex);
+ foreach my $pattern (@MacroOptionPatterns) {
+ if ($tex->{'line'}=~s/^($pattern)//) {
+ print_style($1,'option');
+ return $1;
+ }
+ }
+ return undef;
+}
+
sub gobble_options {
while (gobble_option(@_)) {}
}
@@ -774,7 +836,7 @@ sub next_token {
if ($type==0) {
print_style($next,'comment');
} elsif ($type==9) {
- if ($verbose) {line_return(1,$tex);}
+ if ($verbose>0) {line_return(1,$tex);}
} else {
return $next;
}
@@ -797,9 +859,10 @@ sub get_next_token {
# 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,'\%+TC:\s*endignore\b[^\r\n]*',666))) && return "%TC:endignore";
+ (defined ($next=get_token($tex,'\%+TC:[^\r\n]*',666))) && return $next;
+ (defined ($next=get_token($tex,'\%[^\r\n]*',0))) && return $next;
+ (defined ($next=get_token($tex,'(\r|\n|\r\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;
@@ -830,6 +893,7 @@ sub get_token {
###### Count handling routines
+
sub new_count {
my ($title)=@_;
my @cnt=(0,0,0,0,0,0,0,0);
@@ -944,6 +1008,7 @@ sub add_subcount {
###### Printing routines
+
sub set_style {
my ($tex,$style)=@_;
if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;}
@@ -977,11 +1042,7 @@ sub print_style {
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);
- }
+ print_with_style($text,$style,$colour);
if ($state) {
print_style($state,'state');
}
@@ -994,9 +1055,12 @@ sub print_style {
sub print_error {
my $text=shift @_;
- line_return(1);
- print_style("### ".$text." ###",'error');
- line_return(1);
+ $errorcount++;
+ if ($verbose>=0) {
+ line_return(1);
+ print_style("!!! ".$text." !!!",'error');
+ line_return(1);
+ }
}
sub formatprint {
@@ -1021,12 +1085,87 @@ sub flush_next {
$tex->{'style'}='-';
}
+
+# Close the output, e.g. adding HTML tail
+sub Close_Output {
+ if ($htmlstyle>1) {
+ html_tail();
+ }
+}
+
+
+# Report if there were any errors occurring during parsing
+sub Report_ErrorCount {
+ if ($errorcount==0) {return;}
+ if ($briefsum && $totalflag) {print " ";}
+ if ($htmlstyle) {
+ print_error("Errors:".$errorcount,"p","error");
+ } else {
+ print "(errors:".$errorcount.")";
+ }
+}
+
+
+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',"exclcommand","macro in excluded region");
+ 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="&nbsp;&nbsp;....&nbsp;&nbsp;".$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;
+}
+
###### HTML routines
+
+
sub html_head {
+ print "<html>\n<head>";
+ if ($utf8flag) {
+ print "\n<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">";
+ }
print '
-<html>
-<head>
<style>
<!--
body {width:auto;padding:5;margin:5;}
@@ -1035,6 +1174,7 @@ body {width:auto;padding:5;margin:5;}
.word2 {font-weight: 700;}
.word3 {font-style: italic;}
.command {color: #c00;}
+.exclcommand {color: #f99;}
.option {color: #cc0;}
.grouping, .document {color: #900; font-weight:bold;}
.mathgroup {color: #090;}
@@ -1071,6 +1211,8 @@ sub html_tail {
###### Help routines
+
+
sub print_version {
print "TeXcount version ".$versionnumber.", ".$versiondate.'.';
}
@@ -1091,6 +1233,7 @@ Options:
-v4 Same as -v3 -showstate
-showstate Show internal states (with verbose)
-brief Only prints a brief, one line summary of counts
+ -q, -quiet Quiet mode, no error messages (use is discouraged!)
-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
@@ -1114,6 +1257,18 @@ Options:
-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.
+ -utf8, -unicode Turns on Unicode (UTF-8) for input and output. This
+ is automatic with -chinese, and is required to handle
+ e.g. Korean text. Note that the TeX file must be save
+ in UTF-8 format (not e.g. GB2312 or Big5), or the
+ result will be unpredictable.
+ -ch, -chinese, -zhongwen Turns on support for Chinese characters.
+ TeXcount will then count each Chinese character as a
+ word. Automatically turns on -utf8.
+ -jp, -japanese Turns on support for Japanese characters. TeXcount
+ will count each Japanese character (kanji, hiragana,
+ and katakana) as one word, i.e. not do any form of
+ word segmentation. Automatically turns on -utf8.
-codes Display output style code overview and explanation.
This is on by default.
-nocodes Do not display output style code overview.
@@ -1199,7 +1354,6 @@ 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();
}
@@ -1235,52 +1389,3 @@ Rdland 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="&nbsp;&nbsp;....&nbsp;&nbsp;".$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
index 0661b721af4..146b8595e07 100644
--- a/Master/texmf-dist/doc/support/texcount/QuickReference.pdf
+++ b/Master/texmf-dist/doc/support/texcount/QuickReference.pdf
@@ -16,7 +16,7 @@ endobj
/Subtype/Type1
/Name/F1
/FontDescriptor 9 0 R
-/BaseFont/ZDNJCT+NimbusRomNo9L-Regu
+/BaseFont/MVLJLK+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
@@ -39,7 +39,7 @@ endobj
/Subtype/Type1
/Name/F2
/FontDescriptor 12 0 R
-/BaseFont/JGUGLT+CMSY10
+/BaseFont/NSJRDV+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
@@ -61,7 +61,7 @@ endobj
/Subtype/Type1
/Name/F3
/FontDescriptor 15 0 R
-/BaseFont/PILQXE+NimbusRomNo9L-Medi
+/BaseFont/QZBNFR+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
@@ -85,7 +85,7 @@ endobj
/Subtype/Type1
/Name/F4
/FontDescriptor 18 0 R
-/BaseFont/MTDDJC+NimbusMonL-Regu
+/BaseFont/IESHQM+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
@@ -109,7 +109,7 @@ endobj
/Subtype/Type1
/Name/F5
/FontDescriptor 21 0 R
-/BaseFont/RZRCUW+NimbusMonL-ReguObli
+/BaseFont/EBPJJD+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
@@ -133,7 +133,7 @@ endobj
/Subtype/Type1
/Name/F6
/FontDescriptor 24 0 R
-/BaseFont/EFLDGF+NimbusMonL-Bold
+/BaseFont/ARYKSQ+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
@@ -156,7 +156,7 @@ endobj
/Subtype/Type1
/Name/F7
/FontDescriptor 27 0 R
-/BaseFont/AFCVQE+CMSY6
+/BaseFont/FJIVFI+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
@@ -174,16 +174,19 @@ endobj
30 0 obj
<<
/Filter[/FlateDecode]
-/Length 1758
+/Length 1896
>>
stream
-xڕXKs6WH͘ߏ&N͌DBk
-PA2Eю{bp|ν>8ܾz8AF];A$q<'iܾsons2hD\^D3}-E;5}H(OIIa㚑VP8ް揾.^fgbZwLb AIeǝ! PO1b p$'I7 /}}+[+T($Cj)7GTʞ1RhOziΒ0~UT饰`ޱǑ˓ae8p|K½[ q,"щ>5!LIʏ$VTk0f.3юfRֻ vx-=[ng-F,C4_F顂d9BH[K[k1-L
-:O($PE:Z7F>׋¥})A'J\˚w-*`lm|hKo({9o֜qg
-ШA}YdHyR#(}4O3Sc
-Vc&yptiAó4a!߮
-G0Z193%5yw:N"ڋDvDVUuka:;L2S^ڲE)*~ TX&z9pOk7n>YBVHGVehn`ZH;)ղoؑKCWnR3$M
-򬜥CӘ1M,e4J3T: 1hLk Vs<m#Ħ|Sҿ98_>`Sv^ۦj'aQLַp)) ٘q#E*xsM=F]|ATW3E S=.)kMG +Q,=o syN
+xڕXKs۶WpI͘(AtN&L&Nog,hP
+q|=
+Jŀ;s'6냗
+RJsɞ({,|u`O{ލ8XC#?͝ۅiawa@ϱP3|J>%~-ByyD
+!Vx8 ? 5li݆V,Rty6ع9V&]GXA8NQ8b;c'
+Sڠ΋|/L^$e!;݋u@TG/6y>1BepGcE@ P3crd{; \aݨQun} ,v<ƋY7-NZ"g$(` dPݢOf T$3xw#!wI^.694%@ϙ8N[[wuƕɒ
+GtSͻo/"4Zb{~f? nډ0ztOQD$ܶ-IѴ+=au@"мEne8&i^`?8W+%9ES7_6daa:#yC6o$Rp]ټWgWTmvQFűLeQfѼn^GvQi&=)bRf>
+E8Yd*-(Y/.
+,b&tV?)`d@qOk!k+j>l"n;SoGN^{围HSEMwṳ9veLs9Px7
+D4mwgOTrOgoc0
endstream
endobj
32 0 obj
@@ -210,7 +213,7 @@ endobj
/Subtype/Type1
/Name/F8
/FontDescriptor 36 0 R
-/BaseFont/XNWCOG+NimbusMonL-BoldObli
+/BaseFont/OQNBWV+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
@@ -233,7 +236,7 @@ endobj
/Subtype/Type1
/Name/F9
/FontDescriptor 39 0 R
-/BaseFont/WQYJPP+CMMI10
+/BaseFont/RRCJKY+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
@@ -248,50 +251,23 @@ endobj
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
+41 0 obj
<<
/Filter[/FlateDecode]
-/Length 2691
+/Length 2325
>>
stream
-xڥˮu߯Ц
-D
-Sg-|k;kю3`j DV4oH>B#+ }@\2fM78!(Cal[ ~8c)B~fJj7M2ۅ>G}h휷.]{:cūd
-^ q2ȈJ (U=c  fgaur(V Rx]y#фmѵ2 R-Z|
-?SnyN~ZBH50AhuIxԐQ5 g,r%~;6C]잧kDdۦ||mN_7XV'}%|j1KP6To"z5s\:{V$Ҙ PoHм
-n
-4 ZMAWn؅ Œ3pe(~I恦!OE2i֭oU0jvƚ5h}08ccsZXYatS-4B:,eQcvNb3+V
-b>Apq{ " G^ L0M]ak}c2[7\PqwLP`~ 4*sU!u{9y\X47 F'w$\eBk<
-rg CjI
-8Cڢ&-ĎdH}
-qZ'$#pqEۂzX8KەkRW CRx%g#u<N֍dO{{#
->آx {c Pӑ)k &E,]Q)O snJY|W NmJMQSɛX؆C|VnqHetb83h[X,<=0)bD6 p&"%,~)t
-h}5' Ǜk(\9mkQkl\4J}ث:N>ݶ2ƥ l19PAeK '2euU|b 0+whMs`F=NN$'xd rl^ +}ckU5[SL 2XC`<Oჶ-^LNeyLhAiT-u}US[
-'ÝYS%޻!QgU_Ǝ(8t@*,lb*[.*{ZqۜDWE(&ʧY~mnyYq^#)zL2 ES-Csۧaq3~WH_{dRZz{NN,WDX,6leP ֜'sG &IݤNP]dhv?m0 <^DC&^VSςn%a ,AU5 N(Z?їIX w8IW`Vepڨ=>"ӻ(2DGPBv(j¤yRw!Sv?]<|Uetnp5F BP zPWW}/
+xڥYY6~_d͑DK0$L X{mkF:[)ђ42OxŪ9na͇x,0Y٩Xf+Nw]ثk۩mϺ~C @*JyclwAy-cJqnKӫ*N7VˋAw=睝hfХBs5'ݣ`]d"EP&"|?(`Ef[%2 h1>_KN-O}+gIdwk&i#FJ}}?U0?l`gL"đʵd12W4Ed RkeX_;9|’Ov+GRj4sxl-57r+@~V"Ȱ/u7|6P6<=UzF3^9ɶu;v<H%5O. grc0PֺfKWZ" )bRj*2B0cC{԰|am}C 򠦽im
+?64vάwʘY(]y omko]ʛBFapY<Ad(z^34"F*t/GU G'3NpbF*Ei#`2{r01D4$Lc%X 3Gt+Krȟ㣕Ċ>Yͷ+Q#+,Ix#qψKA` (ZG!x@fJj3MVo
+ c)W܎8 ,̕ȥcLJ R0rDu#A7qmuwߐJT::!h*:];^86':(˥Ǥ2(,򥁗~;6K䆻F' "S)oouIhi mR,\"{ë^ΑC5+.Pۢ;"
+Ej9<E9lA bZc)-2N&ٽ-9¨b29ʬK ʔRS([d[(ǓyfmxM/Bە'МV8fxp1/uޟԧ_%,eZK: 4 zM+va9cq]T"nQd4@Eo-$xƦo
+Z]qݎXS\(<4qo͸!!^%k
+>GQ"=o
+P)m M4/,tڸ 2ѩtwyi=a2_S&QsɛX$.R9uG# iFlNkX,ΰGdzt1>Gp&A(+4 `R
+c'XwJuoy瘿"2G<w)% rS]ɃIM'crNvLsf^pm ~Mw:&?LLrW݇1r0`B!$db^qo_O
endstream
endobj
-45 0 obj
+42 0 obj
<<
/F6 25 0 R
/F1 10 0 R
@@ -300,28 +276,50 @@ endobj
/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
+/Font 42 0 R
+>>
+endobj
+47 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F10
+/FontDescriptor 46 0 R
+/BaseFont/ZZIIWZ+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
48 0 obj
<<
/Filter[/FlateDecode]
-/Length 1436
+/Length 2069
>>
stream
-x}WKs6WHD0 ޚiҦg:
-^mDeIT4&1ɵUSG^S$mz
-#p_.\(,Nؕp{/\
-YJ\,I`{N')֤i4:
-̰p'.C9k N/‰,1acݵ'%4xM*sIm$J+>`æ,T{%){5 ( pSB(6_K%g5~[^ƨ2hXuɷqpPJ ;QʲYg߭"Sq(ZbU ɒ(U oGWAظ{]ӼN$gȋ{jnm:4԰1Rx%̍uVmI:ȫsm"};cu%C˳릹VL2IG_ZOgyAr`>5&]4x'q 7݁n ΰ1v;p8#}hU"[sZZNIa.6 $XLߎkhu-[H ltJM]뒥;bn @^GgeK:z]Tx(XI;zݢH¿Ss|=gVK=on<8#H mҖ?ѮU]{SY#p=|­b QʔK2${!Eg4HB/eF2u{Dxgye:KMf\zË\c43PSv20S߆Ikl["Пx@&sزD QPj^*PQ S:R v~h*
-@:\2a;9`gYWԭH#hb;@Jkld~r\ˍk=Fb9Q)vsu>֓n05a9ی_sbXF*(RrH?l^oc>;47膗@D<K
+x}X˒+F$]\mH%BR!)\ $$F³~inbǛˆqlS2ϛLd84K2ˌ&USs~tZDӵUBqlSMl:#I㵿5o>UQ6U<B7[tOitk&^^C.Ua6$Q% ƴHak3@anF7fp5gO4ҀG
+-l<nW<Dnu}lztG')#FMo}pn
+ Q7 wbT*OсEv^sYCy(=h.dQIԓbRGi֑mh0U]umNW^,*#8zr$k= p鬈H'[ZZer.y<W;(BCT3Luo'G/r?U֚0 , y*;@΃S|GDjzp2JL0vrl MJM'u؂\{`>03 VN\Z6)l;U黑cZUERF^lmϿ:HA]tNuom%:GBi"[{ӝ{V'g*Sru:aK?dњ[azXKy»J $->(С8*QE'@Fo6I5
+H‹*Y J}WRpg) ^ZCmCy
+HDW(2/
+WzvΒȋ^L4j ~PP6^\熪m߹K EX=$8;U)I2ms
+G,9>'st֡ Hf66UagNԺ\]ssmj\Aiʁb(,%WN'܀ݗOGkm,ՃZ3T-S EAf#Wj&?ˆ`;F<WW"CsZYRk<Kfɚs~h[,&/[HM59 n|2,Y*㱃[d <K!S 8,CbHjN[[@ה ]έTK:Y8{z)$PΝJϙ*n5np)F@{2ړF@ۥ*5g55b=+C%Ř>#57PaR AK셀Qzr@?%C >DDĊL?%h)3RUG!}<S~y1k<9*\"YaS|9z2
+es\ffb4AGIg( FpŽ2 a!ǼuVt o QoT O ]˵е V㶀>4 ܖ9B}1)qUW,𗀄g1H \)ȗBWP}w<0O'<V dCJ6 5_zbj^@}d}PN
+<L(eshygIX
endstream
endobj
49 0 obj
@@ -329,9 +327,12 @@ endobj
/F6 25 0 R
/F1 10 0 R
/F4 19 0 R
+/F5 22 0 R
+/F10 47 0 R
+/F2 13 0 R
>>
endobj
-47 0 obj
+44 0 obj
<<
/ProcSet[/PDF/Text/ImageC]
/Font 49 0 R
@@ -344,7 +345,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-168 -281 1000 924]
-/FontName/ZDNJCT+NimbusRomNo9L-Regu
+/FontName/MVLJLK+NimbusRomNo9L-Regu
/ItalicAngle 0
/StemV 85
/FontFile 8 0 R
@@ -355,102 +356,90 @@ endobj
<<
/Filter[/FlateDecode]
/Length1 1662
-/Length2 19288
+/Length2 19695
/Length3 532
-/Length 20223
+/Length 20636
>>
stream
-xڬct}&v*mtR1*vGضmtl3}?̜y;e|k_k:= 3uuQsSvSdRts!PQI8[& ~9@ `CH88z:-@
-dffbfkڛ[8-_e0'&p[eao3ۮgѓT`[_r=%G\ `besob ?J& g@olJ?Hٛ93; {?_;M{"q;!ׁ[^XXxX!Dï3l3.G4; o)@۹1v/TP'7|e?.?c1}!"zфx;e
-l' yeۓA:>EH$Ӂi!lװ)5?YFN;c>WL^㎽,\U"j0;ǣ}$ɴVU/ΊC$!tbǒ Aw_vLr*cwQrWwkH~` 5/ݠx5@
-K8= Y"A/$mRiw\6
-=B8 olO!cc<E9R5܎)NDEҋSԜ_zc eE><a#HeY_V" xw}GKIhI+9QS@s詞aqew#
-s,)AVPMZ0}hC7" [2땴ȇwbJVWG-n+T GrBPxhޙto`ң_z?RV`Ǚ`<$۴Z\6}]vtD)p:W;2$^x{ēP"_Z6hgfmB` 2R==(.&{-{ 5 /]S8xzB/ <]b^G*
-H?;q,U3Iɢ}fܝK:Αl'Q| &ԭ1@ ӾuCN[8;K~R]9"WI<ajR^aHʸ!%BoSm@6=vC L終[f!~u?ag#c+-IVL `d;``E;(_>"^rZۑ$p822a]=}5*")(S!m63_#qD\y0m|F˒/ JMYo2LnhUqF!x-L3W_屲~q'E&VɌ¢N4oDAuP[ݍ:շ[Q:Z*5/yYX)EQ-qCۢ,x/':*|iup&^|l,_ B}4̕P lR?'rfI2Ǎ'xҼcs\kۼo`ɴw -VnAdfj-Ve&lKǷ;@VYCM>x]πDHuWU6t;&h*epor*o(*ajNS[wʂeTޯ& e.>x"l˄
-#k/ԿPjMݬ,T`
-]&T.V5Y/TZ ET&N˃bЫǚͧPi[. y~$:fA6EE~N ~(nM~?7W\@9t/a@!k؍{]5Gycuj@sПD[@El'\#RuL
-^>J^
-gOd@
-@l/7Hu4VzeH#OFV`T7M[+fN!b)sh&QWOZqfU0hZ59;Ċ?]գ@b76h3k]:8 M#A4E72 DS{kwɧ m5:7S㜒7KϻcgiFj_Q}Bٞx(bIbHx3㦲Ȝdq/Ee?Sq&Tv̿vn+`ckr|ē)RܜrGrdOMf=L{98 >UYlCy~%ծR˟0X &/߄yagewZ0"Y:*
-(qQjk#vv$:n9}HfPAG삂Z5GYg_ھdD63pGy' {c^3,.Ќjo3eC 8ҡ,2,{[ø5''-\,wV6:;EcZ#buP߹(,g*yW:gT2r -/2_y.aToW>:vt!R e5$B5"6>P02KW΋߈FJ氷2ғWKT@,\{HQvRriҵ<ݚ4$Uy6MK9Θ%luHbeYdoptd~NSelMPFo{% }/ {T+tD\ZD)4~ޱc̹r<q>y^P5[/8dHCQHP׺~:t^w 76O W']EGVMԲb[(L1^{Xꆃ&8hP`WP: yR: f%սFfܞft>yԽo8SΠ$g\v''d΋*9PcqB:n>)[af yK&DJE]&cz)wͲ4ݞp~PO H#Lc5KDW9TF%9yxACDni¼K_^0v6
-;W\M'VxiQ*.y
-į%)/ܸfF2@U< ʊ<{ 1ӌbn="/<fۡ8_;m9-T m Ktag3zGbjE7JSF2Bo@ӵK KH$eQi6u?uDS
- {o|^62Yw[y3v9P`f+WԚP1ݣvqC8º0
-@9E'U eYFucКM?h]I/҄fD=Z, HzDN>jH()L9h`vtt2|AvLK@76c('6#Nyc@ݭs'=B8҈cSMw2$61&D>Ԋtbbi[_,& 8},j߬!3{#Ryy E#ۛBY&iMM9ӟ>D/:#~+g`>Ղ}X#;<Sz*JPJ,O0qgH2>;2oclI
-G FRz}H-c`?yfP{\; (xS$'1N5f].)D"!?~Tj g`e1yL#sF&cDǦD[2ǴsizK3c%fnl+ҩv#X6t@'L[jsUf#4[_CXJ}$>
- ՇT^+5% Ѡ]{n־}?vux&znj}K_ Gw%_lIz9BJ3qAO !R |[9eע5MC<݋>ք)[wKdKe{n5Q 3<*8*!]_Ҹb<H;u[X.fBM /z2^}<Y<Ƿsցɒ#-Vtkq)*Zz>@I)P\zU
-HA
-T*_maBwpG)MCqthB
-ZW/PJG]Zx3}
-*I=ykFHU{(m
-5b1̪VE=9<RG<7bPQFc<s3vz3-:U(#`*<_E}VP\m! i \X4Ƃajfb,p4|^>mx|{lFݟPf`'qj Qu: k~Dm59ݜfqa
-Yje\VpwSjZ1mۇ5L|Q!'S
-}Aؼ붢MYf;כa KwMaJb{LPMi.\'{$<s6Vr_CРWݜVZVC{=G,SzPNm
-1_Zswp55$h=t[%"23, g}ÎVϏK8GQmqj5.,gQ+I@B
-`rO()
-wn5T}DL
-sL F{ {qeC#a "CDs(SX)t߃
-4]bɜYPшON.x*.+F+, Pf=xH@<z@4J™ҳB:9 dKG  L$]+ARNS|9AWq2'I0a3ﴈv'6vw>-%b(lٻZ 1o{ȃB` i>w傪q߱fr,4Lqݏjp#,_F#!OibOg+t 9 2dE(NOWxd\Άoh3`H}Eu@p
-!.2؅ÃY KAF:h Kڢ$C5qbA7 7shKY]y qK] fpaȅ@Kc)Ϗ;Yo )!J6-b_!LӐc?EU&o щ|Fhr<縋O[Y֎!uMXwb9KE/-;Ș.b
- 귚<X'Vˉ6ྕ@1rU,||gGVRc)Gx
-cqnz MrE*"3,HM6B446fqϲaTk۟9AB>$@2Qyz؃$J$fCuᭋdkyi;-nP[kQr"7XsHa&. -tB24Sry_k ҷ&}! `d+8%" j,דeـ 0 ˜A=`lgS ˅
-)XW=n *Ҽ YqZYFFϞƝv D+he VF:=o$cDEB7Qj',^F
-X*작0ԗ mlWblA/%]ߔ*S<
-$GIY_Mm*:×~YvJ#vocM:k#y(2Z9="\1<*(Ϝ8{@DF χGr̰TXJ"H.(7+*Cm
-
-ol_S v(y mЅi$@Ua^kUѳс%<3*#;X gmCZV74FU?]UO]
-`qjCc(zj+)#mX2 Q<'*{+z/ۍrB 뇀Bu7' o|Ԅ)? df<!]j3.Ctvu%T!>8ISv%) ihm" OmFsѦ^(L4M e/IsNMGt`eB|L[W҈3X<^KoHFi:վ2жOF>:sZ<N0bSdA<
-MiL<lJU%aiNwX~rb ˟,ԑA_S#pnDA1mz͑X\v%檿_XpNC,c#9v_x,%V (,*(6”M!+lq<[97+ Gڕ.{1Eoé/x0(ȍŠ$6 QQCj\.
-{+Cb}K~Z,^抺Ny* 7?L{?7j?opQ#*Bp-gujȌY0G_IRR&[!
-nlug//r0"WJ6'
-J)יvףxJV糢
-bzyJk > }8kSkL |2כXN#?&_h(~(|sYX{MLnZ~CҾ{H ,^'r gvP
-vYiކOy&{d>ꞪץX% P J zp$ߣdga}>9TVYh33XEn4lYMvgS}wahm+u-P$^J:*Nop@Yz<ϩ'~zР
-ϞG6h #YԊR#
-`,.yL,dӠF*V>`O%^LGEwJ:ys&V"Hhl1ETGrZ`Ma
-aY~͞L
-<63"N:Nva,˙fpK<c7<&!Mo_r4M~݁#$tXՈ>b|ˮB8RxceʷqO6?v[x\S}c<-9w-jcO7M
-U%ҡO_aCJS+7@1#V(< ]Y@Kr<^UO+$,W @vX%(+IZ5i؁7I-%t8ksfOJebε aǭSk;CjFEk}:YlD7
-Y͌g>$sƱmK:AKN~42yæRoCԍ,v|ßtSe))aTnU7BX@'k_t|7nZ~{c|nt&`xɐ- QZz8ѐӠgGu\ ;}#Dߥ,S2Ц
-^/)1zvU(`0LTv 1zT.B$<Ro&vo*C4% |`ixr%< 
-EuM~G } gpXG[,
-S<6[~u`EےMc
-Fom)(ĄOA*
- gU%4XklmYJt|3c//BMOe0+ftSFPZt:|LOd6K)(l~ܒ4࿥ 8@ʪq3>-IP1aML&~0h&ӹocHg(*R'@xhB~CPz>ܮPØ{& 9S I%)t(#SjdNo@Ir'tS4?sALYC^;|3fZv'"2{qĆ3֐ /<}9H@4DY_ kdx}I-PFP)JUbBbF=5Y#:W$i>cmHW]=/@@3 ḵ-?Ye2cśG)ؼ孄=\{#-u3e ۦ|נ'XΏZ¢]@IQb
-q 2cH)I=4hi*@J|"i㒠X] ÔUoW!1@HەAHmGY*9tss&!m?61N*A[rIsjBnoN
-ʳ|:wve"ha٠p4?
-ϸ{bh7u}XV~gh}T7<뿳,mmWӟS+(8;4x6qG QdYd`4|V#.p7*dȽIqO1ticpvD.KXKM+G29Yvq<
-u닥u[<?H_DtZ^a`'
-NC𾜙W8q(a>ΜirL{EdTX挶" ]?P:?kgqk
-E&~$N6xsҩ{&v~&t?:-On:Џuk4`;7w͇ʎ9§:_<8rD1zC(*#\N0R94 ?5Q#&vwzGYpu<27.ڼeIN}fI>Gw0Ǽp6a*[L\}F&җ3h~_iTeX^.~]e
-[e"gtRvOPc*
-j 't
-
-/`tmC Y,watlfi`)#ͰxwfS9_v)˂#|rd\l f%3EoYl]vhR9*"Z"ns_5Hoãʪ{UFiTM14*bؒ173b$cny
-7noQ5zdb)='6!W2eϤexu >Дp0p*^Co;:{_@Iq3;aOך9鼇&8o|S_] drݺB|nu7Ok`K?l_8YlMVrTwu2? 1jPd{-x/[z n)9yZ\qSؐM@fWMFbLB/<D ,M^k46ry?>)+iEb|LqHyQwa˨9.Ԝk7a; 7}JB2Z6Yޢh4"e'n;џJDڪCā- =W[jsW$ce_sz*lq
-/d} 9}!2b^6zF/u8v1zUN$x4N=< ٝmnfUF\ 7:oy)9+>dD{ $6J]Fo8g>. 9%; -qW 0`S୿gH{ſDk#^}4o*~+ʙf!Ҵ_ po0?+T1dHD@ AfI{w0 cK9fQn@]KKǘ󇮒!VܾgbJ\[\b6{RvgqPPWTbD:JxMf䵑H܏>W \;1?CR;=rW,ز:'ZCpFеfT(ש&߻l'eeak EҠPuJ^Ոfa6>_s@Θ'5蟽X]x1;""Ko131]t]KD<Y8R$hRc>U_ 1O~D'\zi!r-usbK^sT ">2pz Nr#R9FZ%ی^$*
-ӱC<L.g:i({\%V[2!5JsNFbɀ)8Ϧ׈uH.P(|ceLf;_5Ӿl46ze' l=
-8-ڈzupt4=lջ ť(j)/}:w%5keLMlL*0>M"mU8ْYECɴkG;`>hh}5!n}>\") `d0ڜ}%y$!\̸Ճ |'Z W~Sy֩
-}$^- <M_ȿNA2U(׋u >Ap86$t),p몐L:XaJf(L9 e2Ӗd@{0ߏ9m.JYq YOݒ{MP԰}:0I>y~ᅵ'z|b:{8޼SI!u($5E<2S8[ۖZi֊Z9<P~JTne0s@zu(č隲 kOᮠn:矱F(1>rN93#UY1xa3"cP(&ڢZ/aeKD>#f2HQ2`dU}5!_lٜ4
-s#/e-轙<9@,×iU j1!D]Ε Q>xKm޺#GzbwRAlW[Ʃ3ѧ^^nl8$,Ic
-]B1_XrlXUǚa(dKhVѐ-jcii,տZ[N[tHXYb_aK!r4F ڙ8twwwv8]wČ:5Lw}6tw1ݼy?S!8
-y/u&D q뗺Qfov;G{pݞj3Nue4%TLpŴè^uW2svØI5}^Ym
-نA$Q'pp0/ZY!4\dkٟlDOQ8l[ !zc.
-h?n3 p&x[7;\dimr&l NM']?qtQ9W2j"Fҋ}U6aw}Rɫ>E8Ux $aq.ыy3yra£P̻S!qY}:|5zwr
-_EstD1d PJ7S?n2x5
-Ȳ5;1/nλ89.#P X\YnW9 $ӏXOys닮
-M)U["
-e`MVݾa$kag
- z=$y՘a
-l*:w|/WBo5xF 4d7 TV$Vv8@9^:mZu}&:VJqS= b*gB $ze8n qauG2m ۜMt1TSQm^$T+.=Tpg:UsLfTqsÕQ 2nX`F3(m Z*ֆ[dpSzY HS]6l\a+@ג)%0-Xn箑'F kBQ
-o xMTfCd ,RH}b <(:#*zʠwdxOfiNL;WɷwHƴ骞TK}<
-Ow`q'_g K"cv &Jz=3PZf5a+
-<}[#dL\l2[m%ANpt4k]'s&+W&ػO' meyc8GN`H-;`i/6W,SD6 ͐UĩY0m`07SUp =Վpp>fsD8-p3_@Yzs`#2u
-d1{\^صڮG̫<Z_}9>q~N]3Yuaw0T7C1Tףt17# .˦(ܼ51|
-)0j% ѸkYѻǫE>8Ԗg58Q˅E<87f7>dI\~
-h΋ZM"loEUep+/YCܱ3|9lXz᫇Lb
-zwM-ozJ'isI6gK`XPPWibWBN%w1YI} xs3 l @l)]\ۈ?琶yd(jhk<3ye|iBBF>S%!EǕVE0CQ7!l??[%})w
-j& `f?^
+xڬct}&ul;۶S1*vǶٱm;cw:L33g|9joZEI(j`b.`bdeb(L\]TxU-] 1Ȝen07Xyyy)@K+FCU?$
+fajhltq
+/Ժ*~諜9BqBv!UE&/<S|J-HI"|ly$qY*jixktGbL8 ɋ]5Ulo1QP=(gZ1"Sl/ ~Eո~l>g'klT6 I z^7
+} kJbVP䗜-zn{b2Du%p;n$0->Ft)o}qԏ.A&[+D)9\6\}oZp!WybɀS\6qΒB,@SZ|M[z 4a)A*^c/
+@ZFgEH=&O)b28:~zVKgʜyDί6y6!h"lIGt V,3Zh1LGYk߇ȞcWE^Ug?(6Lܬew\'T.Pwԃ1.^۾EUGT( t'N*bjG-'HP9j.,~Q/in;5g@657&M#~N+=~nm~
+4E?7\@Gya0@akŸֱ;^UGojT.f ?Q˾Sg=ƩE@e3llb#uL?oS7 <#3xԢB yV$84c.OK-&ƶ2"PJkWbE"q}e(iؒ?Yԑ3Av)^o{_#uݥt2\[C\"MF65EAlWd!MBCُX+SY0\/n8%ѡ ei r~ҧy
+uIeJb(9;CM?EX|&?,o [7\͹\ #[˗0*{mTcY"ehYrc7HAYZŽ761F%o`h$w
+LkV@nn[,Tv*̚Xξ]\Y.Bڙ߀?Ze!
+@=Q
+M)|.s˶0ӑPA`&w H#L}5[XwTf:œ%YX~cDNY㟢 ^v6q|{߻ޖ]bL'Vxiu*/,rrCkZ6Ach钾ddkW-`kDt7U,'vi8>xڹ6q)c>w >\-~Z^Z>~Vx'38L '?#Y
+[?ԾT芋j+KSd@Э$g<!&u?$u4zLXBZ'uldwZκiChsOZr@RT$?:k8|]'&\I
+`rn1Btv`4 Ǵ- HR
+kBQzG5!$K fW`<ݍ¶B׆9&㠌CnINۑ#±..d5\'+AxXxχuzn(\lL˖;y=.U+Tޝ$FN!CtԦ+o7V-ʲsX!fKP?crST y6c:dt'u_Oj
+Z
+c}<Pwy1bF#֧HFrs%
+Hi!fTY|p,v
+**=bHxmЉ1*}SȜu@֖EPN2 B{M3aۗJ ߿}BipZnE޾w"D L]JGq^dX\2Հ;bL<. !J-ߟQj$-j"?WZ bGUpkZX^>6l׬K&%NقyF\x|64"׭]8,c܃gt֪zdXˤ<Y
+WƮPa뎤)53 .IR·.͔Vf)LOQ>*f]LπM{\p5`h>Հ,Pm68E3jeV4mgP>%+9jOwhL12a ! wH}8 odJչե}7E_CJni1F#GhZ +,}ea;&3 lci6,vۥ?*K{:K}2u6^͐6n/6Zלԏ-9/cƘ_
+$°,yq0uU{IV3bĎFpahF/!D%-<{|]Ч%D 2Kh=jc`2UU^ZZ2u
+@u,J]lC3m{G6]> ;8l[$](;sP!u[);9g @m%,uj<VF:\{$;#0"M&"܇ \>=18-էR6}n}QRP */d"j1wJ,C5i .Jn!^CSaAY9 eIT1oڬJOa>F䍎 oql H!s.U77\PxhK,]`m- x=.1AqZT+u믢^uwbAi)n9lAїV}3S&$S<ai/>𖦹C f)$j* i [r2~Vrk,22pj4^ 1]!4^eq>r~ M̕o0e5PГ4m/sSq7Kc :}a
+ ܎ƹ_w9efO!:Z&_%׬@ECO~'"RbF5k+"uZ~7tdӚG5Ov?)Qu8͸bd;䟏gya}@VPO;I0%><3~+(tFo}Y!̝ oaw#XԼ^(u>}1lGgL?oeԇ){Q}?k7ORY~T:0,1|ww pU30
+6GP":/D|NO m
+_@a/&o;mOu,F= #û9S|POt?b=m8k/%?*K)XAּ"M:@7"_ ~ǃYJ6?.MLiXʽ}tY4>+ML%珓f?T|HJȚ4A.:j0o)^
+LAy3i `qvpu+\Z,NW S>p$j`$kvU#cS9zšk;Z٪I  K|'bCjyI+m~D73 *9cSZaAoq
+#@OŸS^xO{MS/c\ Y;s[z6K(ss:N*u³]CGѶ#i7'4}wgK=CY\G0<7g6bEʦe=Jp}rSQ&
+4jvmzK:
+.LcҐ }:p]zwLn5F5>y\QhcRa:x
+ ]{Iz.6|1AG>5z+LbR`1P=\PT'n`/R">F3~9EUU/:Dn@b#( a Vɼ3KY9tq驂 tp!@ǒ?cOTtYm!Zkl996d_!X#}^(O^[„#ҊD*kk? +wLZ֍!uOua9KF3,;oIϛc^6=[&V$*jL^(W N\RvyЀ̥8S:ΣW&˶' E,DԑgYB&R$4.:®e㼉?Ri\HDe8:OO"+4w嗅n&3IqƭPiCĦC0U1_\cMy84_S`$Sr65Z-qQm(a08^m¤.dB8|s ^]EL纃0!IveA5Tƴa1$YFbHFuE=#sI8D$_a\u{+C%1"oK!뙽Zxm-'k$㌇J6Q9By؆J]$)hIoPw c2})
+yrQ
+#gELA3bM!屯Y-
+ўvRZG" ^hNg46gP.Hq𑉼͔_xc
+2H7PǾF0q܅2!#c+9Fkvg-2s.d.~6ECzQqyYLiQ'n,kNl)WR[%}'b7NeDvud*<Nr;KC=K>ޙl>ȼ.g9j b=5Z;{=dl"F]cb1sT7)V㸩d\j4_z"CFuyZb
+rcE`Nlns=U#񾈂Q.'$ ~j̆w'"ȃ]_hހ9{A뱚l+c_([;' Zv8QPȮHxmȚ3ӌo/ NںPonw> E؆\m_Z'q_=Mw:]wɤ@F؎gyĺ1<բU˓3NnÄ|*en~|g`F>Fr5K9˻<{5=}{PU] i^y4L-tS,,|\>&Τ 
+VjhsVW쾮/nE4ęznڌ0l8Z*A{F]2[U׊\O υ:9G<ڟYcDtr ghF" V_qF~;_& ̄g}칩70;]&unLܻGepb?s$SH׽|*j5%
+ŤUvU,V GI{ŭCE)cg&r}SkG0jPX<fckcOM ;apzݗd6:SQN݆ޠ/׷@?xi+qYvV ᄛ0CYzo? ͩ4~~W˙ƢC2踖
+#YЌV%
+~=9KBi Dv.9Hh]<&$T J0=9o^:Ci_:pb1LeV$ᄩmz,5[&|k*x ^iO@zoANӵI?
+]]V &D'AuG{c"my'[q0^:s< xs6l琶䒔9M r|{PrX]h~8ύU|r6S)
+
+[2.p7 rEOo
+aQ:ZRScFm6ѸƉ:̳֊|bWH&Y<U}m̈r<a>f<)G'kS:\ˋ/--?(LJhV6O`J /De[ȡg62oxe}k_yZt;1&!D(&r[~̧)_L'AZyzHk=,Qp2yn}Ck>ә0;S`~h4>Dq3a1+Q+vɏ\&f<<Dϥ7 c
+> *2,nWX Pv95}]d0hFJ|q}ώğ LC<jĭZOK4\V&1|IRH
+#ΊEpb82_d D0L)w|vлJLz8J+J2~:TImXN3#
+4>t랷Y3
+yݱ|id uC@U%ਗ਼vWMƍ M^rq"#2&Ή*Ydø*$q#ilm&k&jڜ=~| $SE`m * cp[4,Z)|*
+BH݉`8y5NrҾ"n@Jh)w|E-jԮ4[zhba(zG:+qĩ
+܏N 18FъP?}2tͳb1*@>w8UKPd$8S:4q 8d`˜e,deMUYM,V;sA#G: %R:mp{{$G#o*܃X.1g"'DI_O*ᔝtyfN58 #J~ȿ/qXsԅ+ v0rut^QWibCaDǺa@9$"/FC1ܚ̯,-c^|,bX}l"9-GY0:a Q/]÷TCĭw|@fK*huA]jʍ*H&G|ITf&9S;>5&銍F9{,t=l=+K-BlSIwZaCZ^XH7Pu+L.m^lfPP{n`xuaFn:34upx\b54ɭͦ4ay <Sߚi~9"6Ȉg.I2_M> :+2 Eeeݥj n &g2&5ao>jV[4ݩG=\i/"\Aʭ^DZ@m&чYq=ﬔ)s%0~|:: |0 !dLqx`Lb}ժ[x,m |[l'z>YEy륤H}QA]0@s r
+Uoco l8,bÍ-+DYK>Q8̷W<
+Ω2>[-K݈C%rR~Ga'3By״,lFU1/ *V77?7W(Q [r4{zˍ<K"=Z/ C=;aK=;LD N=ʙTb͖rC@a^8US[bA~#}֚n=|: =r.5"xy(*2aǿjn0͉'! '(<c@r%CdR4Eų,o-ޗȆC"KP{TGh#cZr
+)mxXUn/ A:NWXB
+?]ƠDZRtH63*C]YUFć|Nqƀ
+yH(rb*FĴyhy݃TT+?Z|96^ _~1@AnΡ+|@+ jɾ#S
+/9;jk[c"mS)GOIJEIrA]b4N*֠ztr1#7&!W"u׸udm .p(p2A]+
+\A}qefM?.PJR#icv ,  O!׬ɲX26"x"6^R(_gP7],@lBQXQMuY=lzF?|NO4Ed*]yK^zmqK^#[2=pUh#TUZ#\5)cQ<'zp-2,wZ5
+H؍N-}{y'~羄ǥH''+`g
+=iPOp&(R)wKjT?>;"[FDvجF2̕oWH^M$>5+dlP{M`$%Ǹ+ʣTy޾!^̎\yJMwNAu dNY=}f\MJ!t-
+:UKVm`\:,Y)os15U xgu,~AX^|.ʡMm2kl+IVUrBE0@X5nB+@n9r˧߼2sKBʖEa?X[G{FWy26Ȇ[ߡFcV!LWkZmss.FPP OEy>"f>$d"/كZ6Z_*WH^p4B}&6ue|8bu"%p{B,(֞{y4wH.8K86wL;gAXK|
+^3n55l/.m-1ە̃G7Ú.EӐF߿ÏTSʋ0,Q.4d&W:%הq?>VBչ`A?6M),
+
+uma3;fs2ԫFaҵK1Z'd $#sz<0CU_]@T s!XUObviaWe,îc>.cM(a&O!X^|겕Iƌg=+ JtISx~1ε*l!0=Ȟ,Gl _-S0Ba6!j58lOVA߼aD+tת*f.oשO95C?E̗EձD=יΪdlf*|ċk `uGN,s#p*&3b;/ǍɇT"shpM?лQ
+[9)giKO{pR2C_a}IW;5m Ls@.;S%AN,]AAs"WX&x ݇P*B<b*2$+dWHa]/RFZ/ÂATIwkT#˽g+I7z-T[8#44)o[t
+0XOG,^#!ܿO"sa"i{C
+D)eaй,3q˃e BxES@AsWê2aSuRf1>DEyBC6ڂJwy,ƥX҅5s_y,vlif.t?K_Nia}F7<N3IRNc֟㑓hdhtܲ3nۼEg#[SbӲ+I)rj2~,Wx=+;JswC>|N$>sлL;Qo[igdUfhTW.1<iL=
+|;gL-Skٜii>dEɵmZ&~C;%o*lg!ޜ#g0(ޅ~,@djOl4z6 }wvX翵_mM0VF!= ptʤ AnTs8)'n`z>w"
+ Q~
+?vWIwyYJ Q[E\ $D]U3篨]R*a<q :u/l zUK| [T~Z'r%uxLk=[
+5sg<u8Nn墉CR h͞0,) XshpkKGo
+Yj
+x6T0%)p;ή!|?jcK
+fP29чq_ՌFKCo-MI?w
+.U="P>oՈX^=Y')<Ύc(m*7/5b֬(U̳8nDnT0c5/?%q4i%d]JFJVJ(LXVB8 e dTqSyUMRJ/޸Iq?
+ :(<L? K=Bw,|0*@0+?4tPU^|V'@fO+uc%G)'=3r5A5ڕ$$\!JsI`)J
+]$UgD֚u赛
+L{hx@'^#bd1<D&9~Xns{r^bQw v
+9J_[hD
+1H(SmM lGEBAw4(۩ggIl1wat]Vo.aGI)
+V}ڔ
+?$~^S-s)~&ڝn7Tj\J-8bzj8\d)?ʇul-&BepNwxl{5jg9rVGhCcRe6ydw x/cJwX[^x{F}l{9ƑzW*4%ɟX,5qqۍ4dԛ% Q/.ֆ-d|Q`ŶT^OkƘtmEyxLEJUKpEhr@E닇\aŊGS_x䈺/NC7%I:.>4qy?7QD(~X0%E)/WajF~Lİf5{O2gZ~au봼EPiA'ujuhʢWuБ99R nС'wV[SHv"v'>Cn+R95pFn
+TQO=.
endstream
endobj
12 0 obj
@@ -460,7 +449,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-29 -960 1116 775]
-/FontName/JGUGLT+CMSY10
+/FontName/NSJRDV+CMSY10
/ItalicAngle -14.035
/StemV 85
/FontFile 11 0 R
@@ -473,15 +462,15 @@ endobj
/Length1 802
/Length2 803
/Length3 533
-/Length 1383
+/Length 1382
>>
stream
-xRkPWU`Q;ժjQ @ !eInf6H`,2(Ў@XD OKR TANJ
- t??|; @b* 'E2(u~ (Pri18Ez` tPW|mGw*RGp,v_2
-m)8|{4㰿 8)Z
-~ٳ-}eeaIخ$^p>Kwy}hW/{SWYNEs:p|bt v~9*Rn`x,a&$@EY%tn&OLWCNYB񉇽7tyK݃G[m8BPz]?p={k+s5YޏNxATqvw ]32q!W<
-ӎW
-_3-un|SʲsOZ/HUD*iJ7سV<~`5oFᅯDʐH1 hiQ-צt[`-3 oUXt!m J婙aV?Qjz(_>%D_?Q@F@f(FGp8
+xRkPWUWvU6CC$7ae $8BQhB,R PTcE SNuz{s˛ vaЋXks~
+0<My,tP7`|
+P'
+M)h I5hȨ9]`!sTi9T "9-Xߨ]KC"\5T~بp\E Za!h9dT)F5fqQJkl j
+F>|;lm'B%9
+c.2hrLA<5=lEjZLoڦ^\d$VL H
endstream
endobj
15 0 obj
@@ -491,7 +480,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-168 -341 1000 960]
-/FontName/PILQXE+NimbusRomNo9L-Medi
+/FontName/QZBNFR+NimbusRomNo9L-Medi
/ItalicAngle 0
/StemV 140
/FontFile 14 0 R
@@ -507,58 +496,58 @@ endobj
/Length 15624
>>
stream
-xzctefUmTPVl۶mFŨ8s=Ow{5c|&9MA bbkqb`adYX9;*Z2|X
-mtκ0S{2=$>qչ).50e
-*9=vȝׁ*((
-.6j(ƺGB^%tb庝YGBȢ$}9/ MmA@Hɪ3AKS٨d7+6lfn**1
-^&S/DG]`}Fa4'E#^]n>Lpe8TCKȠ>ZʪfBwlzoF ƍpb{%B 1=3dcucWe
- 6R
-%P*ҕƤEKb pFaψڰٱ%X_W.1gF IU?rm 'a'BglD௝",ql V0Z5&|YbVoSX8bxjdJ x>=>2SS /AEDlm25F[ҐOCM{uEM`ĚiF5*a\.e&JP'~#ߟˁѰx}hr+Tl{('N@)" 8Χഄ3ר9j,A mw[#[ϥPр
-Sb 1%#3{ bS
-5RԫvK"g"<;87s\0ҋxujD~Kw# }ʃ1gj>ɦ#aU
-,)[ϔ8nnEJ$yi7*rfFZ cU5.K]sr+>
-16L鞕jxkTKt6ߦ|7~
-2Dm {;"v<^)UªC@ 522N#S^> аnq~sqrcXZ>*1 H'~{ﮍZ$ߡ|"+du)niυA?}T  ǟ\ߑGRު
-?lNABwo|'XO\9j:,Aqt
-/<pQZVf Znj゚!Lǁ3 [?N3"I$SڡXc˨CYDL"V1#֜/5Ba< 5Zbi/MM8Ua-IoY*@@B* <6QkB%7u!/ 0AD
-6:|awF՛Jk@- e PctBM_.<̱Q M?b/9iF⡼$m}$캡q(+u%SjϖN')J~G*v
-K(S LȚ5=) $\i gjJûu5ۚ`C.FA>iU/4feONHlpxr[ ni//"n`( #0Z*ٚ왟%v*lܾŌ`I|v'aaѫű_)2^p.el*YʃKǃ )4d+&aCQP-.=ߜUUqVIV)̀.Of6UMZNh.'ym)f2%~.K8^k?Dޣ|^_m7EQz"PzSRDx4/4[W8 UEnIVԒf%Y\ܽr놌\6:Vw[o<01<d>Cj3
-kHFL7l~QQ% MD@T7,Fddc.<'^E;Bp=P#Du'4go9*\uPkƇʹ4 CFqQƈ%g"+Q9r|#ڤcwj2T,!>n5(`C|nnCJϬ024'9ըmq+2h5VV8,fs6dEq! ݙ좜J/ҡC8h1Lh Qrg?y-WUq(MO͔,x"C7gFl3C.BXEg~pN,dܩ;giٝcڴ5IT,::|kT0n
-*-H(>QIjc#1NlqBtYrޙJ a 5{r~lQ $+2CdQC?K%;Vs)K9$
-V"utF} OWO1&6#9"|:xd!qQT^gxIb]",ڎ<;\Gyi7@fF${,^ R=_Cgg\𨯯b_`t͛<DgV͞
-kp(:0~Յ;Ѷn 8՝P}S|tٽq5 M> cIpu~&*aAyK&5 OOWNЏO#(%;NZkUajGuo0~a|8eC)8$7u/3=̇gѹ] m$
-V+Regٚ,̊'藕.hw5^_~ 嗌@h Ush.ŘIT2PnͭhyEd
-x{a(*yhڕKlVV ^$25}2켤 ݌ס+?U 1)\6.[Y>/4fJ$q,C{/#YhokA7Xe{Ѱ %R֓:-kϵi*P#H==OʣiaojP*o'RkDB)Z)8ʾ?Y`yH:+%!7>l P FlzIL}2r 910
-<b1;W1AqRnT98ݷNMDIv#wC۲eXf"ۺO'PӪz%8SV䅏!kŀ+d<=bLں&M|$KX~=ch &z=CrXOk*rUdXp
-U LQm|c5[Tk xkJrW^(HD}i@ 1PYׯq=M?{vbR>h!Ea t]$탷ZHmF h{PN% d2o\eN2D,!]nZIEÔll]W[~
- P FQ +s9x'*ſR2P ɛԁr x&REOPoBhi2%0Zmg
-!B"%, lɰcf0Btm\j.ؑ MtCLހ
-q5gڐ_ I!op𬈮>xz\S2`[I*ƾ4[qg=RDʻ:IF
-_(W˕RrLÎm?~d^Ngg{)i
-Yb$bXZ,]sڽ"T;bqMv`?AOܲ
--O/lP
-Y#V5/m9į= mt%r:^%Ej&KyWuGHYQ>p)D@5 sA'Dq0\?ɼ- <Ĩ8r7 v9UX&>6~u/ɱIl1k YS^`]ц=h; eͿ~%^;٩p{rѩ4
-o\!Ǹ q}"1C'ChhP -!{Ԉ(.N@g]gښl#b\)[!0lFi`wVׇ}>
-,!tw~ 6'$Q!%NOƶ<?'-9 !h 1Dv>*v nOKNJ0MvFOwd c&sLsdD3pypaR0Iۻ߽.fPx?J~ {ɶxH*I^!h[wdKߛM]Y?qv1Jˑ2`|XsP< _0}1|ɕC\SCB9,vsrdMjs* [!ZIV>005)!JU˓/I)ZJD}zQU1zµ}䧫5 'wP9(hǽ9-bZUCQ Ć~43 5(~yK׆cpQi#:=N:Tja7 w.:ޞlDP|0cXvs|+ܝ<F_d9@!4928lP sc}AYگCkH+Cr0CnCnEҷ UpޢӍyYzYeNFN~$)̽u+Ɔ
-b/UkܭY΢Y<IGV
-X#ߴ{31'ʴ6Rfe\ɧ
-IQ+ÀSP: JG })A{BP+Z.c捔 ?̢<W:vۅBf!fxh7 X^{f#GKn>{g7 1GG}׍-޳FL~m6\TqӪKnN fmi,Y쐫p_vEH !t"}(pѕ* ^cTg ilͼNQk)Y]蒧&% dp0Q_FS0 S=8#x.g^j wjKΕ
-3"*=v{Ԓuڶk-Yx+hBSU5Azj"LP 38,=f%mr6Hh7Ml,`V$U:Bm81xhZhb+ ʚ)+ꈇuk5M"CfsY_Z=JR(S—sh~6]`퐥#3-q &<`|Πνe~ȒEH_w۵.BCQLnNPY&$#R}
-avS`zt[PEi:~"[TAYw ّ! T*(L:xCG8| wN9"mB47,_b4HʉH{ڧyV 5r% k{ߛAbobPv4,sѽ9/-ANXEr"FֹT~Wƹ"0^Qqz{|<xH
-xwGSRxtW$~܉O~4a#}&tj ̀i'V5<, J_Ȅm8a=eqρ6Z*ކc=uQ+ě c3$.zn χ<y'LǵD@\$
-d,@Ob|ݫߏA=N$Qq)YM}SK!p< %/I'6RXSy<c|qp WoZWDcV2pUidR%]N`. P:0* ]U7 '4-a^V}sϢS+846:ymݤoss IfYQCn|B Gln
-\vJlEW-su_Rhl,cSbyI9E7\BL@I?G7,Fo@*+LNFˉjPW*@.XwH,, )J/ 4Mƃls Cedļ!l8Si<TI
-T:i1Yq[4
-zz٧Oת<Λo#%Zs&]=iv`q% +.QbW(dnqs&G[LeI< Bxӟ_6.zvMh`1
-U*n{2 tdociXJ"+quxx'J)quo 07*:I@KO_[td&sl cTOPf3:T+COE O@]oկ #5߸5$S, Nh&|[)|1qNG_GO]񋌛uM8aH-!&,Uϩ=P~jq,8V+vNBt4zBv
-W"xaPK'R@pȒn#2G|,鰰_3@H 0s\ |^g6NF:8/%Pf_|eG+GO>m v"(`hs`vONjb kZb[+o0=,:<1r8n W @D`'>I}t-5o4= e$´(^h(."܏N~/g,̢ eB-"cGhG>5 *C+e680\pE7$:W*rGK?3
-kx%ԮԸJ&rǩ| 'r1iv*Nm^5 }ns6 0^#<C3SCИR a)-6y _ sE8#uE|K<,=dN vWP/8uO]*Q! 9覽yKC*8-~ӿ=+$ @j`&rn$~G b9f X[A@l' &2&ê_3atA+^VD%G,4^bWVmh YBozZh%ϣZs{}N"OVdt*L,1#Y (>`̤ε$]Z ~RNr1IǸMf<qo-vWR>A/x7vq&U _kP ^#ѴTHþS+lB}cJE.ƪU'aw{]+(}7q؟?
-df%gSn"_QfE9VG9K̕ZfgI< DǚrÉ`l'ま-wt4k7I:/Xw?=;L|ѽV*Aς17 W]we_Y:x]#ea=Jҗ ^ zG8Y}kyѱv49=Y ×U&M*TCN*)kCڎ[nւI2mZ KrQP3"Jj bRLwVmXT力
--FT `~_lκv̐˭J53zN'O@Q4緣@+߅+7uHBD7h|/NMA© ^VO1,3W?X! :W;2QH@%Î#y-=lkn ±Mh.4Qg߼Bn#k6)= =Ҧ:L#w`)[KG@P|;WhYRǯELT/@f*"sJČa%]i4/T_8>eՠ&
-!c׍L,r
-^O?dĶUn82C_6a3gjC) *jR(R=5e,sR#3
- ӵQ7mi fj$i4-!WCk}|g̻m.tV?4ݴ 8yT|Db (EV6eo|gSv@ BE6ni턊#<~1d
-a۸E -@Uq!pXtꢿOe&Fypj&TLkHe<oaHu+F-R_ ߎ04<S&ToS9]׽զ1S͑L](Ay
+xzctefUmTPVl۶mFŨ8s=Ow{5c|&9MA bbkqb`adYX9;*Z2|X
+``0|p2{ob 7C' WęYNt拍_sdhcgC?۩X;oß{9ʿ@+$~ ӺEi6ǹe.Gh^FLESfVAsttQ{r" $O}t|9ŬB0
+6Nܘi2mh?i]^zTXw׌
+<(q{1TbN1u" ħKv&s5zG>5$
+rz5c]#!ɒ~:vrά#!dQ>͜慦 YA $dU͙)lTx637AW[rᘆq۩B"#.>ʂ0y^Ϣl/.Fl8C2*!LQdc-ey3;J6wַF F|j1:屫2
+3XNǎKN -};E*P7y4|?-sJ"x3yÙ/% t,I_ϻP}kpǢ/@q}RrهIC*Gj? 3#Gs&Ĭ7}`}cdԢ$ew
+ٻPdY)^5E#pí F_Pv#f/-ZT+>6l 0Z^AEh"_GqmYXHj'Soq^yN{jŎKDS8Z{=K"}_P9rIfEƚMo1viuaՓ9YJjp ZﴼǾM͒"$0tMi,] a\q%G)TYf^.O@X%3§TǔU}G21ޒ{}$zA#y|d
+"n~!U {ݻ\.Fak{Q`m6ɩV_,*crGJh9V ChUjdvf6yn=ZqK_ѫo[h%wGCjowO8uTU]*S~CC[lq.}4OA$I:>g"sOH_D8QpLJhE1r_FX\2;%Ed<mBu@IB/bߩ%! #ZJ!AyZ-X}&6!+ -fȍjOBaG,֒5 (TV]zGF͗Tfˣ"U\b
++6lsx+L/QGˤ7\_5"G,Q5xJ(^|?JTcҢy%18r߰g^
+Pmؿ 3*Bv0HX d3q"QX^8B6w+j>sY,O)NDGX]`<J2I[I^uFd?y)R{UPRVIo "H"6xq-iȧ=&0jb̴kC0~y2~R%(ڑZhXJ<>4_n^*y=ߓ^'}SpZkT?z5 }6;ӭ˭wFEh@4 7PaXkϲ%m-τf,|a
+\L{
+:5j"?vx{I>A瘳D5dSى*gJx~O@Qyh "%ټ93`Rʱ9UzGt?W]SgA5{NP:mcoS>i?}bzʆJ~Xs;k* abi˄U\i'L)c/ hX~89VrLis{WKf9ԉ1UL-WieRF?wF~P>KrҴʾA*Oȏ|_CMoUc6h w!7E'OD58t:{pZQcLf-d\qX!}C@OV1&)YvTͮ
+e#Wԫqu{OSR EH/gr3d{˝hTlݐ&ǝV= I[|RH169DRW+g>Z^n'I|y b\a
+_8%t<;pe49
+Fҳ3H\k&Ņ
+ћM҇B*ӎat )D4c5+i鍭ƀ'JUܾ:N`eMBBk/Ñ6&Tf rFp$=x"\V*)[
+M~Ж2B1Br\/FxuJ(~\Gn^gsPV
+Ј>
+v8Cj5gKݓC J ?#C;E
+k!tDԡr+9Jax
+h[YlŅfN)t>|:k^G&q`]:P
+unAJ Wټ%oԚX Q+'XǧXq'*0a570>Js”wHi`γ\?6N)|JynnlMfJNoC/?
+[]KF 494`YcbLӤ{ * R{eU7V]E<Ţ
+ /Nw>L~v^RnЕ*kR.c,ɇQR3ZB8!^mDF,7 ʊhX偆}pQx )J}떵ڴG̑^$ОYXܧmp0`r{(G7֓r )5kBoRGge_ß,W<d6T#V6=$Y&>9X
+کvBUQb2YMs1Jm]&h~ >d~,hgKTuDT9'еHtuZ9*z`Q Cb8%Rl't݃,ui1s7QX)tdg3PRwI^Tk_c茫ܕ"]-LRH-J4#0& ܝ#a2Tc*OW
+(6>ڀS1ܚ-p <I5%Fǂ+R/L$jEs,ʈոxᦟ=Z1["O.[Q-M#=({hq V^x7Q'
+rl`Ԑ.\7{-"MJRaJ i_6+-jS(qX9 qrq~) ^}(Mh@y݃U~9ۅe<mkezǧwS(7|jo!M4 vYq_v63^@r$nq–n]&W~EPϜQ eΐ乊8ՂEVP{jf!T d j1N\3H!6D\.5ˏ
+…A!L
+&o@
+S,`tCu o`0]wʽ,RpqqA]RkiEr(hy( K2/b,W#1ehy=Dd57B7qC,L񡿴Us+3K:[2
+&^C@)ek쫐t7Qr}ݠi*mGzFP/);.@ 3+Nq>#
+㟓yd4p Qed;uE_f7'%f'Ռuw|ȦE;'D21iaa2<0$Zv]^hmZzu(i<%dIV<sM/4-}_C],P8J@HT[aUt(/Ǎ{! .)!!Y;׹r|{9&hOnӭ
+@W$+W hTv*I-hCwAxOm=ȨAl Z}>՚S\( j~ޜ1*!`ڨbCH?ҙӌ?ѼYmk1(lÞ HDuu*S5ఛ};K NoO6"Ej(>1K,9PxNKHi/2oϜ N]ٜTthWяѹ`1>ʇ,Wڡ5!{xF!7!7"ۆ*8oiF,,2'q#'?t:ە cC
+*6trJXE<4m-4Æce͔TuWMKxɚ&ӡH3gz z/pr%ixԩoK9r4sm.Nv㙖8y
+aBhoc>gP 2?d"$kh/˻Z
+!(`i&MA7'Le|Kw~ӑyAF0AO
+)UNY}Utq-4Vf-N*͠HZt*CCGbh&C|!D#grW;6! drX/T1z]$yDjS<ǚJYK5=͠pI7cq(hr9^x@KA,"9j# zTV*?+fj ߃d [W=yp><$gjx{A9坙بfV;)W)CZGejρX:o+?tiz'\Ͱ>Xq fd}ӋNFT vxWdSKŶݰ2~tZ@iwI[-AUaoȱѺ ̈́iX|XC<LjZD" GMep2' ՊG A'ywY8,d 쀾H{̩Oy[)S<X1y87+q"A+`4y).Y0U (uXsgbJv*{\0/gѩhis6znR׷9ùۄu3tج(!?Z>Z!#Q7^.XW;V6IR¢˺d/R)`6@Z1)`ټpoܢ~@.}zb!I&o ك{|? ~ q'D5+r Nn$A_&9nqb6Q)Cc
+Їށ~Mt$
+%Qadr|P$ 'F
+@rNAʎЉ!hL)XMMBq/P҅9By"ú"P@JK2d^F+(I X|Ft_Į̨hGt<ۥYՈ
+zFŘl}0fRZ^p.k)wl'{qJ9Ƙc܁&3뷖;+)L|c<~8B@An({KihZx*a߇t6!\kwJ1ڢ_cU]׀qժ0=.V|8xyOUsqz|qR|Β鳋gz
+UP)CC/@(`J3Gv@+ ⣜q%J-QY$gcMDG0Cg@H;[:ŵe
+AkY^As xgAZu+ԮxrgsM瑲lKNX#ML\>V5X^;XAEܬ˪J&NP!n'{`޵!Jmȋj-EkA$]6PX%O9ێ((h5{1);R G^rMM
+a!;~$->ATүOp('{XnPnvbOoyւJ'e y߈A?[?
+SEMQTm-n=㪄uA>gy3}D֧ f3jF!,! FK
+lppD0zk|g]BEfHntP=e'擧\ z(DsQBSNÛH$Rf]
+v:nZ_Es<N*fHNˍkr "KO+7B>3);[d"MvBő@qKp C[}2MFϏ
+0@m\kyD`8}zrDN:u'2n~~<sN{] 5r*&MOk20gm\|)үoGHscڊ))ߜ^jS)DL. <<v?l#nQcnoR@4|È[hǔ٥V`,XfrNUv
+ږ=g'|'V R#`|
+:' J)|򉅷C-'fO">R"8/!Q ->n)#p42xh(tL?7
+fx܄PC﯑Ǵc-tv0BT= 0HY@y2o#1)&ͪcOfA#:YLP( Ug;ߨ$)xX
+g<20Y
endstream
endobj
18 0 obj
@@ -568,7 +557,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-12 -237 650 811]
-/FontName/MTDDJC+NimbusMonL-Regu
+/FontName/IESHQM+NimbusMonL-Regu
/ItalicAngle 0
/StemV 41
/FontFile 17 0 R
@@ -584,7 +573,7 @@ endobj
/Length 17916
>>
stream
-xڬUPݲ%[,pw(uP[{nߗ"9rd+( l
+xڬUPݲ%[,pw(uP[{nߗ"9rd+( l
̊9"Mn) T9ڟc+J_xxh ڂ6|$<9 ‘+sޙ:rmv~ۯeJ9)#֪O?D8瑧]@XE؄o?PRkh rg=ޭR+n*;*E-h qFvC/gY6d =eeix;@ vc]pY!bM}5 @i/QAdڜFs"Jg(q.3p-D'ek.~1l!T\~uVfkeb|_bug렛&cۤ&ACTY/gP<Kcú
Qȃ+v2#c{s4ojfNw$ y"}
kF IvmT#{Q~e~Fd\1oD
@@ -651,7 +640,7 @@ Mo}2l9zg 0|ȢΟYȈ1zC^S}㔺V &A"埂l7
7?51~HƧ0_f`RM<Cp@]|sޞ,*/j*/S#Sw(㵁U9]O#۳ XaC}:00wƙVk`h!iS#Ul9+J>3VyxeYl܋žIc3`9Й_H"蹏2!zW~HvL7ڄ Mo$KX6Upç˞t7(H66xRW5WJDSURzwy gP!$φ rVt-CP QKoxo1:a?"[sA> *dr̽j?C=Kl\Zw?:ZqB0 T҉y!z-}4^8HwC%|/WV:ܪ7>mE~4ǐMעdĺx?[E8{[ܛ85!Hc꾞~zb⊦%@]4S֒13֔ }"r`*v "0k1cfIMjQ? bCzDh-EրUvD;rQP- ]G9Sa鍒(*u!-4KQ&ڄA2;ټ8W j Updbs}fC3}dz'38<E3Q]sO9T!bQk0RC"]G2AK3L:m{W#],?I6j'n6<( ?EKݐ4L߾EԶnBǝ7Y⑆#C
Z>ֱ%U_&׭Ũ2moGn !rQIJ^Uk]=moV|gO'+z4 .,ްuF}Fac-Sl]6xF2=;2ʸAz??u\U(m2%hظn%ZZXUjxK:(M0}
Eh *P@lIO9<Y?s{hTMКK&ubov-Q5'^0K^I3æ]n.Nf;Ѫz9i|WS.T9S­S 8t.|W߭h|SrfƵղύ:{r`=sb߻\0EfԧJL[VsO]W`/B* /RU[nS~^b7A5{-5E=|*"iQѺTg$U-w\u]ӥsM/#pʴWv?ꃉ2~Q<URLߣiVNM胫SǼZN OEc2ȧ:yk}bܜ
-k"s?y}`̇Oxo|ʛry;5[b77/غ nUλd-t͹ZWlM6Rq(ߍ)f+ѻ3$;vQ&]ߣQlu߰׻^?}+ iɓ[N/KfԠ/`sÃǛ<o#K?>3KZ;RkβB2?j|/ϝ/aӅ M׬WV9D=Tc2Yw(^aWrQGy9S W\>]Prˆ>֗'z.DbVڿnWZ`]4G_[*"s?c,at6eqk 'Ml-Vf09If[kNf^oWwO5*/`/M0bYQ֠_Z'>Y*q~{t~w7}v"GsNzzI{^[kX%W] "VL=|v}wn/~\cES<&]1lj.#=oiRx^u$wPfV4D$gBv3W<dH}K;sDo9]-W{Wjr9GGINۆiIenG- Q^z}) 2.F=~q_=V:gl=j:]3N\ s~]f!*BM[eSgO8j$͆FWebFGO^a3$Sz-S|7N%J}Flr^1U2ޣ趆kԀaa@rNjbQI~nbQ6
+k"s?y}`̇Oxo|ʛry;5[b77/غ nUλd-t͹ZWlM6Rq(ߍ)f+ѻ3$;vQ&]ߣQlu߰׻^?}+ iɓ[N/KfԠ/`sÃǛ<o#K?>3KZ;RkβB2?j|/ϝ/aӅ M׬WV9D=Tc2Yw(^aWrQGy9S W\>]Prˆ>֗'z.DbVڿnWZ`]4G_[*"s?c,at6eqk 'Ml-Vf09If[kNf^oWwO5*/`/M0bYQ֠_Z'>Y*q~{t~w7}v"GsNzzI{^[kX%W] "VL=|v}wn/~\cES<&]1lj.#=oiRx^u$wPfV4D$gBv3W<dH}K;sDo9]-W{Wjr9GGINۆiIenG- Q^z}) 2.F=~q_=V:gl=j:]3N\ s~]f!*BM[eSgO8j$͆FWebFGO^a3$Sz-S|7N%J}Flr^1U2ޣ趆kԀaa@rNjbQI~nbQ6
endstream
endobj
21 0 obj
@@ -661,7 +650,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-61 -237 774 811]
-/FontName/RZRCUW+NimbusMonL-ReguObli
+/FontName/EBPJJD+NimbusMonL-ReguObli
/ItalicAngle -12
/StemV 43
/FontFile 20 0 R
@@ -679,7 +668,7 @@ endobj
stream
xweT\].-ܡqwwwwwhN=|s;̯Y:ԮsTEQ (PٛՀVnfv Rh
rt0u
-`wjzjՄ{+jx9G[?9z>3rع
+`w̒b*rrՄ{+jx9G[?9z>3rع
ʚ&kr'םa4cq3)Yh6jXF9joGbqM;atC6>UBګ8.:/:=kMꮠnCI[t ]+Y/|TCe1JhR")5Gu5]0\d8jf_J*r?f̻j%͈@)>;JS_~s樐Ax3 lK @mY +n {1OSҭ+BYAlob}U)IBT[cOFsSKƫ`$^ c6/JdUԕӻ&c8nDȞidY{l% #^oUcsoƴkY)ࢦYF삱ňr'Ks+DgP?`цm}؁CHŽяY}YՒ^h:?Fi׶O5a6_:MkM!C:.^ Vݾ$}=<Oܯy~zpgJ/X?'uHV:#bYvs‹ΆR^ ?~*ƱWACBM:u
[&vuƫrƙ:#>S'ȟ;'ID:FCGBm6c<?BJ) 4
2 +Eev+,Y>|"2Zmr[9( kO4ƠN˩VzT:~P] 1.. ,KPMԀ/Y6"Ö0.Yn +Vί%Ԟ,e<YFF^cCN?pm!0HƭPqnngm'hӟff~y(Qܯc#*;kfтkpJ~.ѲkUkts KqR(-bkm|zV3˶*0''VӺs56^"nc]
@@ -722,7 +711,7 @@ V-4]-j*uFߍ-nYUw_!à-:lIN͜Q
Ve&%Bm]ɐ:6Ѥ}\R lKJ]Lϳ/QOؕ79ZܲsPRP5.,|@iC:QAmlCL kK Ϋ;V Bcj kH2%JʵiOq(y.1IA;)/'?0*nȢTDEb{'-e>RahaqV*ّxE |ĊcUIڝvT-j3_4m`Yr| Ś+|E|.4_<#tWOaY*xlkf~ f,:]E8O
QkYHouJڜH¬IYGOPy[ᨂJw lLGZ\0:O.ҿ7+{)-
&Uj<&Bl'"|ozO( 34o}
-ތ ?A$;D2E{G2^B.y!'
+ތ ?A$;D2E{G2^B.y!'
endstream
endobj
24 0 obj
@@ -732,7 +721,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-43 -278 681 871]
-/FontName/EFLDGF+NimbusMonL-Bold
+/FontName/ARYKSQ+NimbusMonL-Bold
/ItalicAngle 0
/StemV 101
/FontFile 23 0 R
@@ -743,70 +732,79 @@ endobj
<<
/Filter[/FlateDecode]
/Length1 1638
-/Length2 17083
+/Length2 17670
/Length3 532
-/Length 18014
+/Length 18601
>>
stream
-xڬeX]%wqgn݂;$h
-489J|
-r_V#hd1Q:Z=YtqqJ_VswW׿zkm\
-
-juDOg7 m#1d
-Ձ%lHuEsg݂?×h&Uod*ivQL ߩD:SBWB^?[fm#$ zϝ1[~3dSɠgoAY,D\:ySP:'yHȨ~SQ@n244Dmܠf=GAٽ&BTޕ:}[UgW%on~PݚJ˹W15ľAThtնכ-!@S~5Rl#C).WHVYG֍A=JHiR $& M`MkΗlF&bT\^Q2[꜍#a?m_7cOtb ~,;tY{$边!"7 jWՖ{Qoܻ;zw".=
- E-\*ڍ 6eFLR)_ Y _3Zu~MH_"k\D(g~B*)B' ,@jcN{ՒkG$ zԬ}\tvtIB[ %g[ BX#gX(ѝq͆T?/
-<V(9Tsժ'7dXO舴ܝ+mrLni3$l; KKVw(I Y
-> @}A+ZMtD3]zbv?T]'@S3),Q^_H~A:ƒf,\\8tYgnBb cYtօfT:eur8@lvX rÔ=*bǮ]^F+1ˋzme*{ʓGdDm {wl?~TžCe"nZv׺Iͩ84/TBTF|H2<kpO@j
-b鸎n\y:mH$CY݇ftʮd#u4[@L2ax~vĦƯS:4UY 3[c~1y,,6M Z5*?R站xآf%y/NeW _)I6lsaH§Ĭߕ#ݖLCqU_8q(r? R)XFhη1u66g5Djp gFWTlCxhGZ
-|{ИYGvs`zYk&el5m#8-SԮ|c1.ب7zQs+IE20AB(ӌϗ_Y o+ӌD}a)fjLs)B &<)󧕣wcG2m Q1Ȟ}*zVãQgdMSqv&O:gț/>4f:MiG7
-CjgY֖ 6%pho6xcs}Vy/3&{B'Wswԝ h} <S=<"*m0?)X~H+!nÑn,2k{"ItżOa1aB73&B@|OC? 1
-^}^K`S5U '`Hy[Y7={7>H,2@:,з\}2=?x-?&>x6~9?tb2 8bp&Jitf4=V~öUZdz=sxbujx]B .6uf G>q@$;ΩzIyf҅#M[oШ|?P{ iF0_5#P_X>C;#|% urWI0OYwZR[T!hWb}ɺT,=mFL|Vu!>gLZ̐!n< \ڰgi7u[l͢桮cs
-+o9x;LqMl z}3IʨSoh\`n4ΦwJnrP` jƄñ!ZKT.72$gFp&$ذTӂ;k R o{5;
-hTm:*#Y /lejq=x]RVtC MTj<\L?M [QDLFC\Y _;kNvL?U."n~Rʨ eXTnT -J^ҹ\.~Nm7n4 6@Fk,ʮ:)
-gҹKN!ws2]aQ h۾1^WbS]Hf<'!hf"^|ͥb[
-XGN)DO$Z<$fi
- 
-\Q _QY&ТG$9@%We4c PKDk\2ĢĦһDvlHZ9GKɼ9.X4JB &H
-1j<ZM]71ll Iȥ4T{tEOo[o>] :fW"Oc#:spى^su_6Y
-6;dd2tzR.B1k5<LhL#yχB.Y`~Q}޺^WC8X(gA%o3?HmOwh _6E}>pC{|&27IUԎG)w n7ar}vGnټ$ˡC
- G\ckdmS.0݉
-)N*]T@-Ϥg
-W׍x3uA2Heԙ8|c@ᯍ?HHIJAAVtW
-N>&gϵxhȅʏ3w{ZL=Rl ߡWlLч5$eظFu|VQB@3{8qmx".Ƃ2 CW Q6QxNvX&1] d@8l;
-`a; .+Dr9y?(m{)B6<`.iFH5D1-Q˨-)9h1DŶz\(pgД]`H͑ަ
-W1d}GJpfyy0/ ',' ݚIpP5e"ؓȘӧ
-tȍk6W-b Ƥ#k ~YY>2u4,oMoWZȢ<=L
-Wդ~_sW&DNI({x-ZgI'F?jr
-G ;O2S4vɬU><vLC*̭g߮P!J-:RLH9EzAEV@KD'ňjsț:_!(#vޛSsܺAٌ]#$%Gҧ =Ngч` B8>0{⻥puxp!Nno^M^1{{*{C3,dnߪ,+Z,<>bR.Dxo){IS$2{`4!ݪI ,/.J ʔ =뤭_sL\P7i\~ +vשI=4aw
-6/F狿T~vG{e7ưNFŮqoەKڈu aQ3W5wsK*H&R3pvK9die~ ?s!,)=C+66]}kYs/9Tˬsx@Òc$(bUg1(pF\tFB$>v\CÏ"gVq1"dHa2+DBK`uyjsߗ1ft!k#?,ӱN:x{}KtB
-J>⼎ܧ4T 4,cG'1}Z9Xucu'\?gb~6H9D8q
-Iu4\+^A7L3tcK1S bYV#^?IIqBg[6(![IU"..y 瓁q yG^>OGZ[e'Trlw-|X8}5[9'2[P˘'HdYN%C'MӄvAz)y<T:v,`1B&)ZS|OY}7†}dd%'JWXZ CH{bkG]43F>HWXAu+Lckο߅e˚q7})9WpPVatƔ
-tHg:&i
-BQ+M+\NE հݡjpTΧ wWD7ʓ;@wxǘΊ%kEb+?yܲѽ-~R]*n<Q*(,#ofHDezq*zQk5huy5uo^}L>LmhEL2IS٢ćUR[Oljz9prs){EKhUE˶v
-'0[u>K$~%uvU<t T3#VI0L{ER(I/%ʇE%;wFm;ˇ}=3(px&M?@e3ڇp.hwj:P7cBD.MB?^g)F^lt >hy]:n7(@ǧkd7h|T]׍4G?Jӛҙ~Ֆ gK׍mTČ:V,/:8eX'Y?oֈU8uDĵ$& 02;p/ZK;^ǶUwWpX48tfB,oU);Ijȥ vp-{dGqe}n_.` l/!-[R*`冹poR9񂘘tPƏ21ǟRG0
- ECq(|b{-}K_A$vϰ7ʊ#7X~HjC۪,,)(iqbt:֧Mik_uϗmr>Ɠ
-~fMMd'&}ᤩOL.i}boNv'<dѠ8{#p N9)GzAOUn#!mUùhr9~!D֢Q}.wd@sTb*{Eh#2Cu}M%ߵаN\\\/4uSh#)^"{p|gl i*Wl/a|IF #ySR+UQOp>͡@%0*A]9֣tsnw&|Rb |^U{V1M<j/'͘`|%q#TEjD#ݟLE\|p"e\BUm$t.E]IjؓF~ %Bf~:ȖiHV|P=z*(騢?h@. Nanmh7: {
-tϞPWCjU<Ѧ+5ǏYFr+1"pwp H>W\3n}/J$+j
-M_0;bǃJ]7cI)|Kz>x߰bPNTTB5 /DǦ|=ô9.)r1Ֆs.x_W!Դr
-nO5M%th+% $^tq{4K ҇k)H u .2槚6>7 o,GwD^DO^ 8u4\Xy@
-6!cLn# gۄ0&'p+e\\#U9fF%-41SPV nv*C4WQ,HŅb,
-JPu"xc<A_p٢ղdPwrzY YNJ
->(㮵'1lT$!HD}m2tvʌvf)źjL`Poh,PBTj_ Rx<acuiXW:i.yM 7Q/;F혴ҥH& u֣$
-m p&G9XR_m (<X 2|n
-9`)W(Vi)^ʹp9y۔Y
-fF8^Xl/` qތLg:^Q I]KK?"A" H^ R3lѿE>~=ShSHz=~Dq\%`KWkVC;aq(a2?- 2fOVYN=5{p:ME{7%l:w=>AacJ"\M‹ 73ogE7 TyZHk2;W ca]RnpfOn=_@ {9eߤn].V {cDjX黨FPyAj(<ٞdw 击)ޓ!G,ѱZH`HX"-Ev/+ Mjpl:}wUȾ Rw|<أiބ;A On48j;sX͊N@bz%l<w}xg M]| ?N-b_-qx<Jmm;w!֠nP_Ϯ+DGM}J<Ɔn~2NBU#H߄0^t h`2\Ne*70۱;ӿK]Lš=7Ôl9֜Pg>fpNDY΋\M'V9Fy-~'INxvoŌ|_6
-_ #W*0)GWȁH0;9'jv rI?
-^٘R2'ԍa/50^g<y?~(T'wܱFU) JmA`]ب1+4ksTw±7[CUd],rZ$&y*}X" ֐**>!bV5y˥U30bD YGBS[yyHw)#N)HfEK8|"^=k*o"P
-N
-k(n᭙^ɨpِtF _!QrNqZ@E~Tt.ЇS>Cb-5,zxb3cuA]E[ѹ#dk(C3R+8nvbK&Q \͋0IL7E=x"#b,3`"-_^snj:Q)Sv h/s-&Hf@-, [uKf<|4(nvI+7LpD >:,FQ+vJ~f0)]-.G\{E bswʲ[iIscįѿöpymQ.Ea)D7 Vpv%~4x)[i}38lSퟝ%*:Ģk.zzdLE69;q35$O^qJ"׽0]TDo]ŏ5
- Ob,Vh]NTfGޜV/*Gh8/愨d`'u:B 5ZVbݙS sۖj>ׁ{3h9:~YĈ.aLKc(
-Yeh+I>~my]} IB0K33<A;< Ûf|hHnX
-Tmܘ3I5msU*rsBۮɶ!454Gn1+|3l,-l=.:q#J^J"2:ӍjZ
-"zf;܍q$l!.MуĬ5릶bB-sk & ۹cFeJI0NnWJZ #`j֑Hj_M+tevf=z1LKo4T.C2K#E|Oq?V+{VĕOmǔ*W&h\if) Yo&Զz߮pX\ O2߿g<7RjrlEHv֮Aځz5(M1ODmU6PUYh5ݢ6'ٻin@
-nѶ~#u*"(c势 :GFfC2q8&3ч<f@}JBgiK_.}̨ՙ+ /
-sQC^{*?8IB/ϝ]"β **25xkֻJ
-%7%`^3ɠb Fs>}?o "[p:*l* Va$dͩ7q 9$=v)UB[DN,Q\ ax FU1b8 F9<WlQXҋa#h'r&7OU"qR . d%;>]KyM]EmsdOP_y]y&Jfȍԇ_s/ԍ̋EbXɉz}@a M
-w s=M悐 `U~nL @ZZD'aaXb7+c4ATQ,RQmcv'{f@!@nS8`a]Myp, g~ vL? \lߣݖ
+xڬeX]%@p6!;ظlK  ns{nXϳfUQjY{/JR%U3{
+ n
+tEp
+8m: 6e#@Y&'k!s:-#ݘ=*MsE!AWoum:>@<BNDE{'%Vl\
+govu|QKJhb/&*V
++F@ ֳ )RhNlo>}Q#d$|Z I}Z/֎Znr$%[pv [Rbʿ묱 uE6Xk
+#Oe<ce_9O#au6Ntܜ9h˪6}+8P6FQ%|gO3k:a~xKGرCN6?n a
+n6*;JgGrv'#yx>z2i- ;.3գ\p_R0^gqK:hÈyJ)Yý|MUw0c(͂@Wf>"\ds˦YRD#:Ƀ~XBމ;рZ_&9feϿoב-0|d$
+ ICI]C}Y0,Ll=3LjL@<"7+KPG^OR$u&_JJ?)uy kwM5F buO" (T+ÌϢGTC\R*H߶`\yZ#'eA84jO}dJs'C4e~K=k%؅Ռ^`9*>v}8`<kK%qzg2E*z:ү؟ůwaGᆋӢl5S@k{?݃=pzZ`8A=. YHPc,Hvt\B bѻu[L]Z>HT "wi0%O-dzUs&=~X5+!;ьPuT9Y&x]Nٰ xX9%b!7eKA,ߣeμv}&
+}*LdiTQC%"!sF__]Cr m9Tl%N"K=7`,6~(o /! +AivAZ kޤ0ѯy)5ɺu珡*%T{2[)r$ >AN1$2ѕ8Q ɩ*^r\gUdI1$.DEHbLV
+Ocpk|cO5Z`Urh?!Qx0N D,*b#ԧ~dz w@-Z,zXOu3
+/dilJ.czE/(+~EqӿbXac[;޺,J@7TMm^3,1]u]
+x,7e6Ɇx"^w50UxYr~P}֠
+Fl"~נ;_w\ޤGb@ƶ*UghP#8H0F T`ya |rݾԧt,<Ϳ%|4ڈ[Q
+ٱWd.4k] b@ ഊbЭ Z~pg9 D;uLȇB[\a3 {y{+L8h-C* gf+s܃giY bii2$>,x?_"҈w&TOEooNd(AdǝN$:BO[ׁMxv<8*^mi۾۟p,(Ҏw<&/Ϸ-ϛ*< Q1%1_v{ [ P Sf%s◷ FmhIojeo
+Wnhn9P䥝ǵՆx8}-lu˶s<Un4Q[0 Nx՜R\tx}UlM.4Tܞ1`}%Dcœ I !p:I8KnV0>Av+P%mFfh|PP+ m&ݽճ!^AUzN
+sV DYPjGyyg2R nw¾"_fd~VB޾]
+<L
+C"8@zƀ|e&@ӥ)g-?L;[ܜn3 6!8SAmg`6i*e/N)TU&fw!"s@o\lm{ [9^#&j:FT> &=ۿ\ԍDݰu`ƘaAO^uTeInagK-mUxaXL#
+۷mݡ[؃eM]Faљ`uX&uaw+Lqw{~?)L=b')jb:}6)3& K|P)$Cn`1 }kk WrKK丛5v(M,@^%>nݕh,~KB!kxl8DhbQp97I-vV`FpFuj%Ӊ~ enVC3`ֶ8s4>(ۻ+jc< EܻL
+'J)z5I=3y񩃮#QC7˽-Nae$kXFwz-Kn{NvF̹!rgsO#!.f}*
+s#^Ɉ*Ozղ0'Z3@k32.)-15kvs`65.9%kwhT;XZKkDӭ2\^U
+g/Cѵ
+\-]dw-򫘔^@6d)+׃6# {/9].*OXTpD&o| g[ BdݗTfZR4aq0 8}>F?d_Xr.ТR^{6~jiuQ؛v8dXD|L;м62C׃'e{
+r&%4bm?*=t`=Fi0:hD(1 U
+1=>=}_K I`FOa"qv $RPFR}ujp4yȬOrX.hxT$z?;ce1QF<p|
+/R[G
+xqےEKa4!X|IP?B)\H.-hJ97^D֚܅ o㡓1I0
+gl(t:sDы:ݚvk3Omj:,wB)S~DLQDSv|(vBo4 cJ'VQRhN§ _nE 1|45 |ڢᄴs> {.bG&M{tzlh03J$줁7wR̯ѯ_/z}:RѐA,v򲊙NqwIDWiu?HD Co坄&l|뗸<RLۺچFXęC=F*Tт:{i`3_wi^QZ )˸o׍uXR]:f
+1GB{Y+zݨ,q@&[64$;SCV$ P:m1-|d!q($7- HXAM`eR 7A?\2ͦzg H痡-$3*u\VT힃s ;r5xdf[{.p~>?%VR]f?f=oܮTWNɘQ}[?:P;+m`͑Nh}c \g2
+ -*HqzNlML0MOA{_^cRt~Te=!fIirḿS΁`6 -﹓F
+/~U H} o^v
+ln=1٦PY&*Hx\
+[ EPry-wψYƿLq|cV_iN%nt+[ЍnFS%3Q4tgzdr&l;ßS6|7wl&@{h8̾q'[A,j.fBpL(`:?C4h 5CA{R+iIDy>R=^K>WbffV2d ]l:MUmA
+Si=k?ؑeJҙ99|a筂,kcOۚxN>A!Ha oXooaR0lieCAE?ϸ쉱& +>>qӲFVi8/]{Lw@O8
+ߥԗ#e$1\}T6T784
+٬ݬUVh~da
+&>p"6䑊=r|S[p)v<fWh.(0[Bz>8\Sj>Pu/ zlˊ &(zЄ ?*8'Ak)N%a-'ѬOB\$pn9ͧ#EWjdT]}'s]N2{(qwb,6ʡ[5LkmKr='sB@%hiCc1}DSk>"2DO&PW6R,i?7A:JgP̙< y,jKrh@e/jNM%2k *Ť"mZzNr!~4H2j(`6pA.\;1&ŃCn&<i GprNSh%.ũ`6)HN'%luҋ7!ܮqJEKo/ŋpZC
+yKZ$?GB}WPaC/0.t*g<e C[zAXF83$ҖRNN }0xZ ^%U^R-4ʳ㜡aFB~퉌C^Nn&fu'{?뷗m|4w.R)P'7bIO]<tZսk1ܓѵ#_;Q*^j "CxQb#UE'BJ;q<kk:(o޼y"Sj!t+qg]򬠊(ߘu|J9y $VN58knYBq?pykr~k$NCvVm)H5xBs1\VOkz]ȱ[^Ѕkxhxb@nJ=cD͚
+du F/$U3E %))GU%/BgՃdk,h74qůO땢apэ[~ -GƜe]{v1?(pld]lg
+)hw=vUD zSHTw]:cqBgun˜~*||N^bNfZEo*~羔8wB2"{pE-`Uբoq
+%S{׶n>9 giA*DI4Z)~Ѥ5Ïp-4
+RT!ӡ'?}X3*I)XV|
+)}+MOg եb;!?gyoaR?EfuS.{N72H!a,TZ/|B ;F|T5^kbɎ$@뚲=Ed
+ xV\%ys xn|$l1z&UfcOAҸ߹v g{#*ԏN]}BC9cA)wGt,KW5!eНtV9]Z
+-.:ސ4Oȍl=(qwܧRO!%NAviJ5
+2+\Y8}I&41{zUkucdZg5͡b>2dx+􉋃zR>*t"= _d*?;()NDv>޹V50g<:xR<:[^\vwc6Q) 6fRplxˬw͟o"^h|;ud.z4([Pyy F\j&
+yO] u&eCǨE`c&/=*b} 1r'n|m郵GTԮw;9m@ae8ZiO*&:iSjFH)M)C唌
+u[0ZQZ~qqYt$w#;"[+["@Ɋ[QIWh}CDz)!vVHVӣaEa6N_QJ<txBzsyqryoN`xq'ߒ
+o)3sM'c!Q6FA: l9
+<|QݑΩp >Y,gwsb < .v&铞δTqc0=}R(9?fz'9992}
+2ܰcFxX
+x@\tY
+ʕfC77Nߊ3a%d$}h3Ikwԍs>PCk0
+A2̑{vDMMjj
+5?H´WWy!VPM1}1fyui5&nT]4_'46~h{<t/ڶRk[
+?y`9XX#EJaCm 6h} һzsPp(mҵB@I J'9C†\C#[YUӏxG S<^S#Z.uM,}YF| +&nUK|B%K+G0tw%]9r Am
+%pP_p):>Ab䏻$wHO>FyM>ss(dx` &:~Q Ǒ9ĜYDz߭-9&ى'*GAΡGz&DiK+>U;a+P1Cr[yϵ~wkoirk*g Ùo/
+aPVh1U~=ΐ|Z8S
+Lr~1Ψ*V{z5u\)u,a\(8sO3-݄oQlِ eMs,*%Z,F"0
+dB=&GԻra Y&cx{?]HdU25!vB){`g1ģzc4ϫ20lnzvܛ~pz:4??n(0?9L( c5Au PE=^ͧ^jb !yu騈Jȱ<0StJB_Gܮ hh
+״_[Ac:Ri`ʎ{=1H~F[\j@C閣5ɞU]4:xDpm)Ω>|NqQ9]S,0b&HBuC -'ff"AaM->@g]lBfϲ?K+.cB|~Û3Vae+ ^ŝy'SH鎷Vkԓ|a;}/4 Vn\5 V DD˥JƦ0@?y6O&}٪zpZp\X Ɛpum͔6t&p_8VĘpHe``YnI8XA:X!1wo5gEMhncG/K6k<c
+bS tkIb)2H;4%'*K:F#fH
+rlPu_uw",QE6)m ra] ^G9 ؛7Vdx?|Jv!@]u+H
+ 1j!&=nt<BՍ4ڢtmqg6z-O7c>UWz~֝x5Xj ߖx݂:಄wXsc2ޕ]ͱU!݌׺#UE!ۖuI;FiU'Q>MAWE?[6j*Qeg5G;2"mV};*E`v%:O[Ï~2 }lNoD7!*Uٷq}>'&6I a
+ӟ n1z0 Yfk/~@J:~Q7|!5Ϋ F1G9.)}g-_jlp^:HU͆WH,?X2n ؓCQn`dRkk-aJ*8E~4~\MQ-֓>RbCؕliBz_> ̛B[Mx=f0`*O1x
+u]e[8^0Ir_F* ׍.i7!XW4s/=otZ)W2Liwl^RVo+/L=o}v~}+ 3K/j'H
+[
endstream
endobj
27 0 obj
@@ -816,7 +814,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-4 -948 1329 786]
-/FontName/AFCVQE+CMSY6
+/FontName/FJIVFI+CMSY6
/ItalicAngle -14.035
/StemV 93
/FontFile 26 0 R
@@ -832,13 +830,11 @@ endobj
/Length 1321
>>
stream
-xRkPWAŵvUJE n UB*5KiPus,lva IBUyA*GkV|P.Pw=]W(\,! 0!(`BquUH90__ ȍZI
-L%:)d@,I4Py@CSb
-Qzxa4IZ )Y (/%H@*HZ
-Z^vACZWnI?N2\|Ot,ρ^#ܵ,32/~+#7sat{)">I2ug8A_UEGz4L/=bڷatC9ۘM[tK.=4*kRco~Ь56gJ^5Z?s7}FӡGjK7k6K<qZQ;k}lR
-R DW_KX9sÈP¸'gT}iKâ_:+oU٥** _>;.p1二='
-y!X~rJ!dwJf_ ?o߸wyƈ|QQ߹~KL+~朧xē1&YJ5vٸl2ÔnO&:
-Zft/4*\q|~ZTݑ|CӧI^I6+]Qd>)q%hY\sz;*>X_?!@Pg9F'
+xRiPGA1 QH "1"QqY
+ n (x!B(^ H<HY*J4#$@h2 `/?}kwpPe`愘jM`"qwd!Α s`J%TF=d
+u P Ƥא )/xZ,@ u8Olo\ 6RTn[sz $edBJPK CHBE)Tz2%4Cm8@S)piP+|zF! C;$EZ @߰jM͇Ēf(oɐf%i=
+J4vݘw~`iٙ{B^W4i]֙RW\jMthΙč0$,Ω~Z"1Ȼ;#V;bbǜe{0"TKS{x<LjH8m_Xs cwfrW6l \duRod־VWI
+ݭپs.ŵˏsܸwiȒqq؎~CL+>Lw;~8!Z)8dvֱ{MvnL0Ӗ ǃ=n%'M<fmv>!S^I1;|dUsLKN_ɳ@vT2 xS_?!@Pg9ƀ
endstream
endobj
36 0 obj
@@ -848,7 +844,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-61 -278 840 871]
-/FontName/XNWCOG+NimbusMonL-BoldObli
+/FontName/OQNBWV+NimbusMonL-BoldObli
/ItalicAngle -12
/StemV 103
/FontFile 35 0 R
@@ -869,7 +865,7 @@ xweTm&N4=[ XN.';wwXۙo53l>OUuUwi
)@NMKKO_.
G1Ș@
-!kwJ虘P9
+!kwJ虘P9
δ&~ED0↏aAx
-koΘٙ-x͸+`A'pyk>
|Nt!ۅqYcF//nV
@@ -908,7 +904,7 @@ en}'LǼ"Մo&_ψ׫B&`JJuZs۽hUHr<Oq0os
ĩ޲~l2[TvTeXVz 9$5-9vpPw?J垹(r2YZB0L=_M(nWpJ1L$uմt'Խ!~ͧP %"c3yd¯Ҡ!oC\['cogJz6#C+Pب
6x8_tb/8Gx,]?3֠!su6`&TrgMǸq:$Zu&T)}~]Y,=53r~l'P)k K({?û'lXrJj֨?r92/;zPW/ZM8-ό:( 4mG,Z[V )@}PeK(foq&, =xUarEkԝDJ'}Q3;۴.lHTGtMmM9Io;RP F4Y+u dAs^;z Xu6;ϚŃ&RW,SgVW:dD2m~-I9#ѩy7
d%u߫S/XԕE5– ;dDR͝8)a
-N
+N
endstream
endobj
39 0 obj
@@ -918,7 +914,7 @@ endobj
/Ascent 850
/Descent -200
/FontBBox[-32 -250 1048 750]
-/FontName/WQYJPP+CMMI10
+/FontName/RRCJKY+CMMI10
/ItalicAngle -14.04
/StemV 72
/FontFile 38 0 R
@@ -934,36 +930,31 @@ endobj
/Length 1823
>>
stream
-x}8ǩɜMs#ČcXRC4f<yk$jeJZKE"Wnꐲ^BQi 9C۵ױsu}ycb":a
-z{{R
-`A0ZD͓|I!f
-$ E"!1ăpr
-Ya..YmQS2h# ؒ4j+
-!D }a4TA\l56鲽K?yl83@@
-77bbLbz[-4GرY v٣qa~˝~f盞u$W5qtw8yEwݐ!Ӈ]tׯ\g{43*TecTw]C5},2FArA ?f}ź3(^._
-܅qz[6<M'*IM-Op1_n&^ ~y^,kz麑op bHiOs:**>rеR!DTO9>mM|h|qI'Ạlt{~m &7`v;FcAZ2~Gc__"K ]l"L&
-ʩH=M$.~nRU+hnK6KFm6OYF#M:II̺/?ҏEWE˾"6 Ύ Fu8K彀&#Av:Rp{^KT`R+G#O+WY 9{45fަ)< \g鯫V^tHj:3oqtۘX_N5Z8+r
-}LXn2G0V/4\Z{+6Sj*D͍HX^JU%v"qkQ*i;~}FSBw ^1
-iaS4VyC4uqqJvXSˎhm&K1l-=!*D[8d}X(MY,^Vj)<6a&0ء58ӗ{~P%8uNn:Fc)!HqُtO7Tz隞]OcJh(x1AK"̕ (f3>neUf̼޴AO[V+xV53Aw&=>Y5D=Eə6^GGɓD3[G3k t+_nK٬e" 9yZ<SgT#ea*?OH
-w<U{0ڹd%Sta0h0I$r=/ONkrfHv;7w/i} )62i~7 ,UrZL?]>Aoigf~ k4$yFx%2mҟL5 &ha>W .łh0
-'x
+x}8ǩ&,!f0%ƒ Ҙy';/ɆuRRr:PmZBk}hZ{9\yޟ{?>LW 1L$Ӂ556vBl1,@\bvv!+k@m6T,c0/B L]VTT a^lqp|p`HK+[DAKbd9b`k偄
+lPS6? K
+lH45fˑ"^Є0*I!6tι4
+ùǼ>OtG
+׿7bJM]{e[-lGزtVɽqad~N˝~FuDΗڽ5qGiyEw]!]Fiޯ^gT&R>uwyGn̍kL4ۥr坃g~ucx7PR=~3/3
+l橛Y]k# +ȚU1üwM M<8h%u#脐1=Ͼ⠠(Uf]jJ[Z-~cS.25MrϿd''#JSn5\vd:iSs?RɿEVAxafd3IKr+t&3"Q`4 e#ٖd^+S Y+/ԫiY?nfUgVn:oQ<OLbԍn$..80;6QT-w (wA[H%{~Ӱ$KWw+GY 9y85f֦)/\gᯭR^/tPj:3oqyw[Y]J;-r
+}d4Pݝd&(Ppq>/ӼkO o饛47"ci:)Wڗ؊ĭE' o=CtMY J2FzX;|ڍd1auooϾ/c/vxRҊ"nԵț.,NXJ=1JVcԾ6j˦R Kþ+wO(lZJES2r J-Mmvh F.T@O0vU/׽^>ޘCEHmӯo#M5茽"p#|?*xݘ+OPӳm3|S*p#{iF^o B.+׺?隙FNb/` s]`஼t#нq"i#F+_lI٬a, :Zj=SkPT
+~2p|)1ܹD%SxS}~x x$ԗ'#4z1AU';wVS;Ɨ>مe=Ynl\蓀?YZł*ح[&.蠵433Fro=h,#~uג鏧MjB]ǰU +JGIbA[lb
endstream
endobj
-42 0 obj
+46 0 obj
<<
/Type/FontDescriptor
/CapHeight 850
/Ascent 850
/Descent -200
/FontBBox[-251 -250 1009 969]
-/FontName/MWYZOO+CMR10
+/FontName/ZZIIWZ+CMR10
/ItalicAngle 0
/StemV 69
-/FontFile 41 0 R
+/FontFile 45 0 R
/Flags 4
>>
endobj
-41 0 obj
+45 0 obj
<<
/Filter[/FlateDecode]
/Length1 820
@@ -972,28 +963,25 @@ endobj
/Length 3719
>>
stream
-xy8j31cٕ2-y0̢"{TlYK"K)E$f|:?:<s~>~=Ji`N.@Bʀ08\",EQ,
-E(`JDcA/
-Q1WǩN֦MTntMָCw9j
-(*~ʢDcwRW urr,
-?{>h9h<;P;NKKx2j*Zg>P-h /Uja yrἒ UMh1' ONոv;`m,&X+c<4YR~nܵ*g/l:Wp]F{8z')R.{½z|΅Nc -e R7zq\3!e#[o(a۷U/\+|hYS1NOm3]~:1[O#9\:Ӟ]*0A3چy6!&m(vsGNf+S}fZf{vq S2>ªt=rR"Ԭ~10F" '`!,B*S Ơ;;Glng8rb]׆څ|"4֍uD‘%ڀ".^.>IMkLOMDoeYY^m{,XWJ ~ٷV~4}UvD%0io݋Z}ɛ 떐}oD:,:=+mTL7JxiO:<0F+XJIaHFyk %1EDWw^GhMRCIIѺ<>#貀ǺR%0f0>^o-ۧW%?' @֙"6倸>ePE<= V"?8Wr.~j}{:ҧ)--ud}kLw$& ֬L_UoKqE7)=cBqtbd> (O,~ jfyqvRʡ谣"\[TJaS 7|=#O󖹘_PPO|Sy $Nyy}(Wұg
-lAb21a_o%&PN.ܚ҅&w[vh5
-1f6.GgFW4j>OG<az<ݐmQoXt]20=&s
-MG\yևWbX +Db;l(+ Ba(Ps-JC73`eD"d/kFÿ-'N&P|{o9ȼmlzv}JNwfHXވ=QِĴ1*zt$FdqFА"iwzpr g?/6f$k[q88SJ4='̫3|;u sS:oMQbڙUԹKnmCȵw'{.9m0qz }ּ뗣Aq,zHmX+A|rvI'kalȹ
-_&诬x?0A#뷋gܽ:6_L)Ή!pX0FO0aR5ݶw .]Brn_!?+f\7-*v\(ZӘ{^*ݫhxF0Wh0k
-8QV"׫]O
-,Q>9f|F`6%D|5°7K6̵~;"ej@f; e9őS}J#>[o]kꍶT|
-Sc/`3[}91trGafʤL
-uTVo][֚j,{)ҿ~bo[(@K{O^ּ-
-w$ݺ iy|JE⁍j$Δ
-܎j?)΃EZ檜ZjyCYW$MƳ*~P$6|lOTnc,# PQ*fp=殶RptܑΓϐ? (Ɓ(G!&
+xy8j31cɒ+ed'[̃a͌]dȞ=-[R)!N E7~uu;y纯|z>-
+52A=""!Tm  `pDTT(X"AEU:&OUQAUQ>$ ЖhA"
+^[|#w$
+m @k H<Qe@$ @H
+,Vi$rǵ~2r6Hp@ʍiN^
+U2h#q/&MV[..m;& 4Y ?ڊIlLY⟩zUJv>j< U\ݐTw.?9lWgϫyTU=Aԛ'.h{u%n0YB,o1`ѩ-ReE`\Ge<zoX;`5T-PRO6꽥yUu-) ֶ<72?7-.$h"9%vG{#KɄSȽ`[K
+#+wOZe.Kh^1Cmwi8 qy͖vԀWX4WLłɬrojJ8kJ޶Im:2YN3s+ʨz9yMy0|N饅[ :j#C-p3xWrZ@Wm=?rlKve}%G>0.NQbZBPU Y?l0cZdne ͮJ+UqNngqxiCszt}bdlxZwqsӂt˻쌰qV˫ɺL F݂|垩kn[MBg;Ǽ&g)梞Xt]Xa󟫸]6%DYi*D {#D:G^npC!2-VYTH|Bm{ |X|: xce늗!iGjYy;YbTza,yjv"0fRU*k`)%~enr=y(m4h"}uVjet+Ej)۶ntJԬ_W"҇kgfu߷$d7>)qz%شPhF4XH5sjZg x+hEQYM}Q#ȓ 0$FxҎÍ+5bg킚Ve^Ӳh Mɍ'Lϕ 1
+t]}y[u2BQj$g(-ڭBiL7ԲR
+n}T@1޺\Qfe$—l^8[Dv aOZ)oZaZPx{^>LgpwdZ
+~fJ?W]JxJ<-г26sUCKs
+|k8#|UaL(V;:veh›Sjo܂\ۿפ{A6BG.T{U4yƊ=W;W!&-6+ kc[a׈n\~zBM쑍/j"܊h>9ƝMmUwRciɔc띗MF2ʟMVl!}j.?:HHWHE 1u;:C Ab1-/9"/?Q
+"A #
endstream
endobj
1 0 obj
<<
-/Creator( TeX output 2008.11.02:2000)
+/Creator( TeX output 2009.04.30:0556)
/Producer(dvipdfm 0.13.2d, Copyright \251 1998, by Mark A. Wicks)
-/CreationDate(D:20081102200036+01'00')
+/CreationDate(D:20090430055633+01'00')
>>
endobj
5 0 obj
@@ -1008,14 +996,14 @@ endobj
<<
/Type/Page
/Resources 34 0 R
-/Contents[29 0 R 4 0 R 44 0 R 31 0 R]
+/Contents[29 0 R 4 0 R 41 0 R 31 0 R]
/Parent 3 0 R
>>
endobj
-46 0 obj
+43 0 obj
<<
/Type/Page
-/Resources 47 0 R
+/Resources 44 0 R
/Contents[29 0 R 4 0 R 48 0 R 31 0 R]
/Parent 3 0 R
>>
@@ -1024,7 +1012,7 @@ endobj
<<
/Type/Pages
/Count 3
-/Kids[5 0 R 33 0 R 46 0 R]
+/Kids[5 0 R 33 0 R 43 0 R]
/MediaBox[0 0 595 842]
>>
endobj
@@ -1075,58 +1063,58 @@ 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
+0000128711 00000 n
+0000129521 00000 n
+0000129182 00000 n
+0000129374 00000 n
+0000128875 00000 n
+0000011433 00000 n
0000000009 00000 n
-0000019099 00000 n
-0000018900 00000 n
+0000019515 00000 n
+0000019316 00000 n
0000001823 00000 n
-0000039633 00000 n
-0000039438 00000 n
+0000040462 00000 n
+0000040267 00000 n
0000002961 00000 n
-0000041331 00000 n
-0000041129 00000 n
+0000042159 00000 n
+0000041957 00000 n
0000003895 00000 n
-0000057268 00000 n
-0000057072 00000 n
+0000058096 00000 n
+0000057900 00000 n
0000005039 00000 n
-0000075504 00000 n
-0000075301 00000 n
+0000076332 00000 n
+0000076129 00000 n
0000006172 00000 n
-0000088687 00000 n
-0000088490 00000 n
+0000089515 00000 n
+0000089318 00000 n
0000007309 00000 n
-0000107011 00000 n
-0000106818 00000 n
+0000108426 00000 n
+0000108233 00000 n
0000008442 00000 n
-0000127859 00000 n
+0000129274 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
+0000129324 00000 n
+0000011334 00000 n
+0000128976 00000 n
+0000016058 00000 n
+0000110064 00000 n
+0000109860 00000 n
+0000011494 00000 n
+0000122753 00000 n
+0000122559 00000 n
+0000012631 00000 n
+0000013560 00000 n
+0000015959 00000 n
+0000129079 00000 n
+0000019254 00000 n
+0000124878 00000 n
+0000124690 00000 n
+0000016120 00000 n
+0000017022 00000 n
+0000019165 00000 n
+0000129456 00000 n
+0000129478 00000 n
+0000129499 00000 n
trailer
<<
/Size 53
@@ -1134,5 +1122,5 @@ trailer
/Info 1 0 R
>>
startxref
-128201
+129616
%%EOF
diff --git a/Master/texmf-dist/doc/support/texcount/QuickReference.tex b/Master/texmf-dist/doc/support/texcount/QuickReference.tex
index 8bd0fb55c97..e6aeaf3eee8 100644
--- a/Master/texmf-dist/doc/support/texcount/QuickReference.tex
+++ b/Master/texmf-dist/doc/support/texcount/QuickReference.tex
@@ -7,10 +7,10 @@
\include{macros}
-\title{\TeXcount{}\footnote{Copyright 2008 Einar Andreas Rdland, distributed
+\title{\TeXcount{}\footnote{Copyright (2008-2009) of Einar Andreas Rdland, distributed
under the \LaTeX{} Project Public Licence (LPPL).}~
Quick Reference Guide\\
-Version 2.1
+Version 2.2
}
\begin{document}
@@ -42,6 +42,10 @@ where \code{texcount} refers to the TeXcount Perl-script, and the options may be
\option[-brief]Only prints a one line summary of the counts.
+\option[-q, -quiet]Quiet mode, does not print error messages. Use is
+discouraged, but it may be useful when piping the output into another
+application.
+
\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.
@@ -60,6 +64,14 @@ where \code{texcount} refers to the TeXcount Perl-script, and the options may be
\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified.
+\option[-utf8, -unicode]Turn on Unicode (UTF-8) support.
+
+\option[-ch, -chinese, -zhongwen]Turn on Chinese mode in which Chinese
+characters are counted. Switches on UTF-8 mode.
+
+\option[-jp, -japanese]Turn on Japanese mode in which Japanese
+characters (kanji and kana) are counted. Switches on UTF-8 mode.
+
\option[-html]Output in HTML format.
\option[-htmlcore]Only HTML body contents.
diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
index 72f71722a9c..d40319268d1 100644
--- a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
+++ b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.tex b/Master/texmf-dist/doc/support/texcount/TeXcount.tex
index 3ec27f73368..78296cc2847 100644
--- a/Master/texmf-dist/doc/support/texcount/TeXcount.tex
+++ b/Master/texmf-dist/doc/support/texcount/TeXcount.tex
@@ -9,11 +9,11 @@
%\parindent=0pt\parskip=8pt
-\title{\TeXcount\footnote{Copyright 2008 Einar Andreas Rdland, distributed
+\title{\TeXcount\footnote{Copyright (2008-2009) of Einar Andreas Rdland, distributed
under the \LaTeX{} Project Public Licence (LPPL).}\\
\Large
Perl script for counting words in \LaTeX{} documents\\
-Version 2.1}
+Version 2.2}
\author{Einar Andreas Rdland}
\begin{document}
@@ -100,6 +100,10 @@ where the options may be amongst the following:
\option[-brief]Only prints a one line summary of the counts.
+\option[-q, -quiet]Quiet mode, does not print error messages. Use is
+discouraged, but it may be useful when piping the output into another
+application.
+
\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.
@@ -118,6 +122,14 @@ where the options may be amongst the following:
\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified.
+\option[-utf8, -unicode]Turn on Unicode (UTF-8) support.
+
+\option[-ch, -chinese, -zhongwen]Turn on Chinese mode in which Chinese
+characters are counted. Switches on UTF-8 mode.
+
+\option[-jp, -japanese]Turn on Japanese mode in which Japanese
+characters (kanji and kana) are counted. Switches on UTF-8 mode.
+
\option[-html]Output in HTML format.
\option[-htmlcore]Only HTML body contents.
diff --git a/Master/texmf-dist/scripts/texcount/TeXcount.pl b/Master/texmf-dist/scripts/texcount/texcount.pl
index 8b68e4984c0..96fac5cd220 100755
--- a/Master/texmf-dist/scripts/texcount/TeXcount.pl
+++ b/Master/texmf-dist/scripts/texcount/texcount.pl
@@ -2,12 +2,13 @@
use strict;
use warnings;
use Term::ANSIColor;
+use Encode;
use POSIX qw(locale_h);
use locale;
setlocale(LC_CTYPE,"no_NO");
-my $versionnumber="2.1";
-my $versiondate="2008 Nov 02";
+my $versionnumber="2.2";
+my $versiondate="2009 Apr 30";
###### Set CMD specific settings and variables
@@ -19,14 +20,18 @@ my $showsubcounts=0;
my $htmlstyle=0;
my $includeTeX=0;
my $briefsum=0;
-my $totalflag=0;
my @sumweights;
-my $globalworkdir="";
+my $utf8flag=0;
# Global variables
my $blankline=0;
+my $errorcount=0;
+
+# CMD specific global variables
+my $totalflag=0;
my @filelist;
my $workdir;
+my $globalworkdir="";
###### Set global settings and variables
@@ -118,7 +123,7 @@ my %TeXgroup=('document'=>1,'letter'=>1,'titlepage'=>0,
'abstract'=>1,'quote'=>1,'quotation'=>1,'verse'=>1,'minipage'=>1,'verbatim'=>1,
'description'=>1,'enumerate'=>1,'itemize'=>1,'list'=>1,
'theorem'=>1,'lemma'=>1,'definition'=>1,'corollary'=>1,'example'=>1,
- 'math'=>6,'displaymath'=>7,'equation'=>7,'eqnarray'=>7,
+ 'math'=>6,'displaymath'=>7,'equation'=>7,'eqnarray'=>7,'align'=>7,
'figure'=>-1,'float'=>-1,'picture'=>-1,'table'=>-1,
'tabbing'=>0,'tabular'=>0,'thebibliography'=>0,'lrbox'=>0);
@@ -161,7 +166,7 @@ $STYLES[1]={%{$STYLES[0]},
'grouping'=>'red','document'=>'red','mathgroup'=>'magenta',
'state'=>'cyan underline','sumcount'=>'yellow'};
$STYLES[2]={%{$STYLES[1]},
- 'command'=>'green','exclgroup'=>'yellow','exclmath'=>'yellow',
+ 'command'=>'green','exclcommand'=>'yellow','exclgroup'=>'yellow','exclmath'=>'yellow',
'ignore'=>'cyan'};
$STYLES[3]={%{$STYLES[2]},
'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow',
@@ -170,10 +175,15 @@ $STYLES[4]={%{$STYLES[3]}};
### Word regexp pattern list
# List of regexp patterns that should be analysed as words.
+# Use @ to represent a letter, will be substituted with $LetterPattern.
+my @WordPatterns=('(@+\.)+@+\.?','@+([\-\']@+)*');
my $specialchars='\\\\(ae|AE|o|O|aa|AA)';
my $modifiedchars='\\\\[\'\"\`\~\^\=](\w|\{\w\})';
-my @WordPatterns=('(\w+\.)+\w+\.?','\w+([\-\']\w+)*');
-my @WordPatternsRelaxed=('([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\})+');
+my $LetterPattern='\w';
+my $LetterPatternRelaxed='([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\}|\{\w\})';
+my %NamedWordPattern;
+$NamedWordPattern{'chinese'}='\p{script=Han}';
+$NamedWordPattern{'japanese'}='(\p{script=Han}|\p{script=Hiragana}|\p{script=Katakana})';
### Macro option regexp list
# List of regexp patterns to be gobbled as macro option in and after
@@ -183,6 +193,7 @@ my @MacroOptionPatternsRelaxed=('\[[^\[\]\n]*\]');
###### Main script
+
###################################################
MAIN(@ARGV);
@@ -200,13 +211,14 @@ sub MAIN {
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");}
+ conditional_print_help_style()
+ || print_error("No files specified.","p","error");
} else {
conditional_print_help_style();
my $totalcount=parse_file_list(@toplevelfiles);
conditional_print_total($totalcount);
}
+ Report_ErrorCount();
Close_Output();
}
@@ -265,9 +277,18 @@ sub parse_options_parsing {
elsif ($arg eq '-noinc') {$includeTeX=0;}
elsif ($arg eq '-dir') {$globalworkdir=undef;}
elsif ($arg=~/^-dir=(.*)$/) {$globalworkdir=$1;}
+ elsif ($arg=~/^-(utf8|unicode)$/) {$utf8flag=1;}
+ elsif ($arg=~/^-(ch|chinese|zhongwen)$/) {
+ $utf8flag=1;
+ @WordPatterns=($NamedWordPattern{'chinese'},@WordPatterns);
+ }
+ elsif ($arg=~/^-(jp|japanese)$/) {
+ $utf8flag=1;
+ @WordPatterns=($NamedWordPattern{'japanese'},@WordPatterns);
+ }
elsif ($arg eq '-relaxed') {
@MacroOptionPatterns=@MacroOptionPatternsRelaxed;
- @WordPatterns=@WordPatternsRelaxed;
+ $LetterPattern=$LetterPatternRelaxed;
}
else {return 0;}
return 1;
@@ -307,9 +328,9 @@ sub option_sum {
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;}
+ if ($arg eq '-brief') {$briefsum=1;}
+ elsif ($arg eq '-total') {$totalflag=1;}
+ elsif ($arg eq '-1') {$briefsum=1;$totalflag=1;$verbose=-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();}
@@ -329,7 +350,8 @@ sub parse_options_output {
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;}
+ elsif ($arg =~ /^\-showstates?$/ ) {$showstates=1;}
+ elsif ($arg =~ /^-(q|-?quiet)$/ ) {$verbose=-1;}
else {return 0;}
return 1;
}
@@ -361,7 +383,7 @@ sub parse_file {
my $fpath=$f;
$fpath=~s/^((.*[\\\/])?)[^\\\/]+$/$1/;
if (!defined $tex) {
- #print_error("File not found or not readable: ".$f."\n");
+ print STDERR "File not found or not readable: ".$f."\n";
formatprint("File not found or not readable: ".$f."\n","p","error");
} else {
parse($tex);
@@ -377,22 +399,26 @@ sub parse_file {
return $filetotalcount;
}
+
######
###### Subroutines
######
-###### Option handling
+###### CMD specific implementations
-# Apply options to set values
-sub Apply_Options {
- %STYLE=%{$STYLES[$verbose]};
- if ($htmlstyle>1) {html_head();}
+
+sub add_file_to_list {
+ my $fname=shift @_;
+ push @filelist,$workdir.$fname;
}
-# Close the output, e.g. adding HTML tail
-sub Close_Output {
- if ($htmlstyle>1) {
- html_tail();
+sub print_with_style {
+ my ($text,$style,$colour)=@_;
+ #if ($utf8flag || $htmlstyle) {utf8::encode($text);}
+ if ($htmlstyle) {
+ print "<span class='".$style."'>".$text."</span>";
+ } else {
+ print Term::ANSIColor::colored($text,$colour);
}
}
@@ -415,7 +441,22 @@ sub conditional_print_total {
}
}
-###### TeX File handle
+###### Option handling
+
+
+# Apply options to set values
+sub Apply_Options {
+ %STYLE=%{$STYLES[$verbose]};
+ if ($utf8flag) {binmode STDOUT,':utf8';}
+ if ($htmlstyle>1) {html_head();}
+ foreach (@WordPatterns) {
+ s/\@/$LetterPattern/g;
+ }
+}
+
+
+###### TeX code handle
+
sub TeXfile {
my $filename=shift @_;
@@ -423,6 +464,30 @@ sub TeXfile {
return TeXcode($file,$filename);
}
+sub read_file {
+ my $filename=shift @_;
+ if ($utf8flag) {
+ open(FH,"<:utf8",$filename) || return undef;
+ } else {
+ open(FH,"<".$filename) || return undef;
+ }
+ if ($verbose>0) {
+ formatprint("File: ".$filename."\n",'h2');
+ $blankline=0;
+ }
+ my @text=<FH>;
+ close(FH);
+ my $latexcode=join('',@text);
+ if ($utf8flag) {
+ $latexcode =~ s/^\x{feff}//;
+ }
+ return $latexcode;
+}
+
+###### Parsing routines
+
+
+# Make TeXcode handle
sub TeXcode {
my ($texcode,$filename,$title)=@_;
my %TeX=();
@@ -454,20 +519,7 @@ sub TeXcode {
return \%TeX;
}
-sub read_file {
- my $filename=shift @_;
- open(FH,"<".$filename."") || return undef;
- if ($verbose) {
- formatprint("File: ".$filename."\n",'h2');
- $blankline=0;
- }
- my @text=<FH>;
- close(FH);
- return join('',@text);
-}
-
-###### Parsing routines
-
+# Parse LaTeX document
sub parse {
my ($tex)=@_;
if ($htmlstyle && $verbose) {print "<p class=parse>\n";}
@@ -477,6 +529,7 @@ sub parse {
if ($htmlstyle && $verbose) {print "</p>\n";}
}
+# Parse one block or unit
sub parse_unit {
# Status:
# 0 = exclude from count
@@ -542,52 +595,7 @@ 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,$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}) {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,$status,6,'\)');
- } elsif ($next eq '\[') {
- # math display
- parse_math($tex,$status,7,'\]');
- } elsif ($next eq '\def') {
- # ignore \def...
- $tex->{'line'} =~ s/^([^\{]*)\{/\{/;
- flush_next($tex);
- print_style($1.' ','ignore');
- parse_unit($tex,-2);
- } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) {
- # include file: queue up for parsing
- parse_include_file($tex,$status,$addsuffix);
- } elsif (defined ($substat=$TeXmacro{$next})) {
- # macro: exclude options
- 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)
- inc_count($tex,$status,$substat);
- set_style($tex,'word'.$status);
- } elsif ($next =~ /^\\[^\w\_]/) {
- } else {
- gobble_option($tex);
- }
+ parse_macro($tex,$next,$status,$substat);
} elsif ($next eq '$') {
# math inline
parse_math($tex,$status,6,'$');
@@ -601,16 +609,56 @@ sub parse_unit {
}
}
-sub gobble_option {
- my $tex=shift @_;
- flush_next($tex);
- foreach my $pattern (@MacroOptionPatterns) {
- if ($tex->{'line'}=~s/^($pattern)//) {
- print_style($1,'option');
- return $1;
+sub parse_macro {
+ my ($tex,$next,$status,$substat)=@_;
+ if (my $label=$BreakPoints{$next}) {
+ if ($tex->{'line'}=~ /^[*]?(\s*\[.*?\])*\s*\{(.+?)\}/ ) {
+ $label=$label.': '.$2;
}
+ add_subcount($tex,$label);
+ }
+ set_style($tex,$status>0?'command':'exclcommand');
+ if ($next eq '\begin' && $status!=-2) {
+ parse_begin_end($tex,$status);
+ } elsif (($status==-1) && ($substat=$TeXfloatinc{$next})) {
+ # text included from float
+ set_style($tex,'command');
+ gobble_macro_parms($tex,$substat);
+ } elsif ($status==-9 && defined ($substat=$TeXpreamble{$next})) {
+ # parse preamble include macros
+ set_style($tex,'command');
+ 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,$status,6,'\)');
+ } elsif ($next eq '\[') {
+ # math display
+ parse_math($tex,$status,7,'\]');
+ } elsif ($next eq '\def') {
+ # ignore \def...
+ $tex->{'line'} =~ s/^([^\{]*)\{/\{/;
+ flush_next($tex);
+ print_style($1.' ','ignore');
+ parse_unit($tex,-2);
+ } elsif (defined (my $addsuffix=$TeXfileinclude{$next})) {
+ # include file: queue up for parsing
+ parse_include_file($tex,$status,$addsuffix);
+ } elsif (defined ($substat=$TeXmacro{$next})) {
+ # macro: exclude options
+ 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)
+ inc_count($tex,$status,$substat);
+ set_style($tex,'word'.$status);
+ } elsif ($next =~ /^\\[^\w\_]/) {
+ } else {
+ gobble_option($tex);
}
- return undef;
}
sub parse_tc {
@@ -635,7 +683,10 @@ sub parse_tc {
elsif ($instr eq 'header') {$TeXheader{$macro}=$param;$TeXmacro{$macro}=$param;}
elsif ($instr eq 'macroword') {$TeXmacroword{$macro}=$param;}
elsif ($instr eq 'preambleinclude') {$TeXpreamble{$macro}=$param;}
- elsif ($instr eq 'group') {$TeXmacro{'begin'.$macro}=$param;$TeXgroup{$macro}=$option;}
+ 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;}
@@ -715,13 +766,24 @@ sub parse_include_file {
my $fname=$1;
if ($addsuffix==2) {$fname.='.tex';}
elsif ($addsuffix==1 && ($fname=~/^[^\.]+$/)) {$fname.='.tex';}
- #if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;}
- if ($includeTeX) {push @filelist,$workdir.$fname;}
+ if ($includeTeX) {add_file_to_list($fname);}
} else {
print_style($&,'ignored');
}
}
+sub gobble_option {
+ my $tex=shift @_;
+ flush_next($tex);
+ foreach my $pattern (@MacroOptionPatterns) {
+ if ($tex->{'line'}=~s/^($pattern)//) {
+ print_style($1,'option');
+ return $1;
+ }
+ }
+ return undef;
+}
+
sub gobble_options {
while (gobble_option(@_)) {}
}
@@ -774,7 +836,7 @@ sub next_token {
if ($type==0) {
print_style($next,'comment');
} elsif ($type==9) {
- if ($verbose) {line_return(1,$tex);}
+ if ($verbose>0) {line_return(1,$tex);}
} else {
return $next;
}
@@ -797,9 +859,10 @@ sub get_next_token {
# 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,'\%+TC:\s*endignore\b[^\r\n]*',666))) && return "%TC:endignore";
+ (defined ($next=get_token($tex,'\%+TC:[^\r\n]*',666))) && return $next;
+ (defined ($next=get_token($tex,'\%[^\r\n]*',0))) && return $next;
+ (defined ($next=get_token($tex,'(\r|\n|\r\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;
@@ -830,6 +893,7 @@ sub get_token {
###### Count handling routines
+
sub new_count {
my ($title)=@_;
my @cnt=(0,0,0,0,0,0,0,0);
@@ -944,6 +1008,7 @@ sub add_subcount {
###### Printing routines
+
sub set_style {
my ($tex,$style)=@_;
if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;}
@@ -977,11 +1042,7 @@ sub print_style {
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);
- }
+ print_with_style($text,$style,$colour);
if ($state) {
print_style($state,'state');
}
@@ -994,9 +1055,12 @@ sub print_style {
sub print_error {
my $text=shift @_;
- line_return(1);
- print_style("### ".$text." ###",'error');
- line_return(1);
+ $errorcount++;
+ if ($verbose>=0) {
+ line_return(1);
+ print_style("!!! ".$text." !!!",'error');
+ line_return(1);
+ }
}
sub formatprint {
@@ -1021,12 +1085,87 @@ sub flush_next {
$tex->{'style'}='-';
}
+
+# Close the output, e.g. adding HTML tail
+sub Close_Output {
+ if ($htmlstyle>1) {
+ html_tail();
+ }
+}
+
+
+# Report if there were any errors occurring during parsing
+sub Report_ErrorCount {
+ if ($errorcount==0) {return;}
+ if ($briefsum && $totalflag) {print " ";}
+ if ($htmlstyle) {
+ print_error("Errors:".$errorcount,"p","error");
+ } else {
+ print "(errors:".$errorcount.")";
+ }
+}
+
+
+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',"exclcommand","macro in excluded region");
+ 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="&nbsp;&nbsp;....&nbsp;&nbsp;".$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;
+}
+
###### HTML routines
+
+
sub html_head {
+ print "<html>\n<head>";
+ if ($utf8flag) {
+ print "\n<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">";
+ }
print '
-<html>
-<head>
<style>
<!--
body {width:auto;padding:5;margin:5;}
@@ -1035,6 +1174,7 @@ body {width:auto;padding:5;margin:5;}
.word2 {font-weight: 700;}
.word3 {font-style: italic;}
.command {color: #c00;}
+.exclcommand {color: #f99;}
.option {color: #cc0;}
.grouping, .document {color: #900; font-weight:bold;}
.mathgroup {color: #090;}
@@ -1071,6 +1211,8 @@ sub html_tail {
###### Help routines
+
+
sub print_version {
print "TeXcount version ".$versionnumber.", ".$versiondate.'.';
}
@@ -1091,6 +1233,7 @@ Options:
-v4 Same as -v3 -showstate
-showstate Show internal states (with verbose)
-brief Only prints a brief, one line summary of counts
+ -q, -quiet Quiet mode, no error messages (use is discouraged!)
-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
@@ -1114,6 +1257,18 @@ Options:
-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.
+ -utf8, -unicode Turns on Unicode (UTF-8) for input and output. This
+ is automatic with -chinese, and is required to handle
+ e.g. Korean text. Note that the TeX file must be save
+ in UTF-8 format (not e.g. GB2312 or Big5), or the
+ result will be unpredictable.
+ -ch, -chinese, -zhongwen Turns on support for Chinese characters.
+ TeXcount will then count each Chinese character as a
+ word. Automatically turns on -utf8.
+ -jp, -japanese Turns on support for Japanese characters. TeXcount
+ will count each Japanese character (kanji, hiragana,
+ and katakana) as one word, i.e. not do any form of
+ word segmentation. Automatically turns on -utf8.
-codes Display output style code overview and explanation.
This is on by default.
-nocodes Do not display output style code overview.
@@ -1199,7 +1354,6 @@ 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();
}
@@ -1235,52 +1389,3 @@ Rdland 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="&nbsp;&nbsp;....&nbsp;&nbsp;".$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;
-}
-