diff options
82 files changed, 15572 insertions, 4253 deletions
diff --git a/ANNOUNCE.1.4.2 b/ANNOUNCE.1.4.2 new file mode 100644 index 0000000..6e9cc47 --- /dev/null +++ b/ANNOUNCE.1.4.2 @@ -0,0 +1,60 @@ +New in 1.4.2beta1: + +- Main customer view backported from 1.5, much nicer date/status view +- communigate_pro export +- hide display of disabled packages from agent type browse +- package search skips cancelled packages when searching by date range +- agent list now includes number of active and cancelled customers, links to + a list of the specified customers (should have as report...) +- popup calendar option added to date inputs +- access number list now includes number of accounts, links to a list of the + specified accounts +- Business::OnlinePayment "recurring_billing" flag is set for subsequent + credit card transactions; some processors (AuthorizeNet, others?) use this + to waive the CVV2 requirement. +- advertising source browse now includes the number of signups in + various time periods: today, past week, 30/60/90 days, 6 months, 1 year + and grand total. +- payment reports broken down by Visa/MC / Amex / Discover +- New report! A/R Aging Summary +- fix time online view for time/data charging for sqlradius_withdomain exports +- CVV2-capable w/schema changes + ALTER TABLE cust_main ADD paycvv varchar(4) NULL; + ALTER TABLE h_cust_main ADD paycvv varchar(4) NULL; + ./dbdef-create ivan +- fix html quoting problems editing complicated exports +- Explicit invoice terms ("payable upon receipt" / Net XX) and a calculated + due date if used +- remove spurious "Setup" printed on invoice line items on one-time package + charges +- typeset postscript invoices using LaTeX templates! +- sql_generic price plan for charging based on a configurable sql query +- per-agent reporting for packages +- system_usernames configuration value to prohibit modification/deletion of + specific usernames +- prepaid income report +- report: package definitions by # of active packages now includes suspended & cancelled packages +- new report: service definitions by # of active services +- self-service server! +- signup and passwd servers integrated into self-service server. selfservice server has simple Makefile support for multiple machines +- suspensions no longer change the password. make sure all your exports + have the ability to suspend accounts +- work around bug in FreeBSD pw(1) command which could corrupt passwd / master.passwd files +- shellcommands defaults now have commands for suspension and unsuspension on Linux and FreeBSD +- schema patchkits: tax, CVV, pkg_svc?, svc_forward? +- re-email invoice link +- sendmail import +- postfix export +- redid mail forward edit screen +- reworked customer view payment history: no longer splits up payments/credits +- removed separate package view (everything accessable from customer view) +- export module change - modules are now more self contained, easier to add + new exports +- ISPMan integration +- Do our own whois query instead of linking to geektools +- automatic synchronization of reverse-ARPA records +- expired credit card report +- per-agent invoice templates (VISPs...) + (per-agent email From: addresses in 1.5) +- per-package suspend +- in service definitions, shell field is now a dropdown of legal shells @@ -140,11 +140,13 @@ L<FS::msgcat> - Message catalogs =head1 Remote API modules +L<FS::SelfService> + L<FS::SignupClient> L<FS::SessionClient> -L<FS::MailAdminServer> +L<FS::MailAdminServer> (deprecated in favor of the self-service server) =head2 Command-line utilities diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index a42c306..81da5bc 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -275,7 +275,7 @@ sub order_pkg { $cust_pkg->reexport; } - return { error => '' }; + return { error => '', pkgnum => $cust_pkg->pkgnum }; } diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index eedac3f..be6e54a 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -108,6 +108,22 @@ sub exists { -e "$dir/$file"; } +=item config_orbase KEY SUFFIX + +Returns the configuration value or values (depending on context) for +KEY_SUFFIX, if it exists, otherwise for KEY + +=cut + +sub config_orbase { + my( $self, $file, $suffix ) = @_; + if ( $self->exists("${file}_$suffix") ) { + $self->config("${file}_$suffix"); + } else { + $self->config($file); + } +} + =item touch KEY Creates the specified configuration key if it does not exist. @@ -197,6 +213,18 @@ sub config_items { 'type' => 'textarea', } } glob($self->dir. '/invoice_latex_*') + ), + ( map { + my $basename = basename($_); + $basename =~ /^(.*)$/; + $basename = $1; + new FS::ConfItem { + 'key' => $basename, + 'section' => 'billing', + 'description' => 'Alternate Notes section for LaTeX typeset PostScript invoices. See the <a href="../docs/billing.html">billing documentation</a> for details.', + 'type' => 'textarea', + } + } glob($self->dir. '/invoice_latexnotes_*') ); } @@ -637,8 +665,8 @@ httemplate/docs/config.html { 'key' => 'report_template', - 'section' => 'required', - 'description' => 'Required template file for reports. See the <a href="../docs/billing.html">billing documentation</a> for details.', + 'section' => 'deprecated', + 'description' => 'Deprecated template file for reports.', 'type' => 'textarea', }, @@ -1200,6 +1228,28 @@ httemplate/docs/config.html 'type' => 'checkbox', }, + { + 'key' => 'svc_www-enable_subdomains', + 'section' => '', + 'description' => 'Enable selection of specific subdomains for virtual host creation.', + 'type' => 'checkbox', + }, + + { + 'key' => 'svc_www-usersvc_svcpart', + 'section' => '', + 'description' => 'Allowable service definition svcparts for virtual hosts, one per line.', + 'type' => 'textarea', + }, + + { + 'key' => 'global_unique-username', + 'section' => 'username', + 'description' => 'Global username uniqueness control: none (usual setting - check uniqueness per exports), username (all usernames are globally unique, regardless of domain or exports), or username@domain (all username@domain pairs are globally unique, regardless of exports)', + 'type' => 'select', + 'select_enum' => [ 'none', 'username', 'username@domain' ], + }, + ); 1; diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 292b30b..b620c01 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -462,6 +462,8 @@ To make a distinct duplicate of an FS::Record object, you can do: sub hash { my($self) = @_; + confess $self. ' -> hash: Hash attribute is undefined' + unless defined($self->{'Hash'}); %{ $self->{'Hash'} }; } @@ -1046,9 +1048,13 @@ sub ut_zip { $self->getfield($field); $self->setfield($field,$1); } else { - $self->getfield($field) =~ /^\s*(\w[\w\-\s]{2,8}\w)\s*$/ - or return gettext('illegal_zip'). " $field: ". $self->getfield($field); - $self->setfield($field,$1); + if ( $self->getfield($field) =~ /^\s*$/ ) { + $self->setfield($field,''); + } else { + $self->getfield($field) =~ /^\s*(\w[\w\-\s]{2,8}\w)\s*$/ + or return gettext('illegal_zip'). " $field: ". $self->getfield($field); + $self->setfield($field,$1); + } } ''; } diff --git a/FS/FS/UID.pm b/FS/FS/UID.pm index f56ba39..04b9620 100644 --- a/FS/FS/UID.pm +++ b/FS/FS/UID.pm @@ -16,7 +16,7 @@ use FS::Conf; @ISA = qw(Exporter); @EXPORT_OK = qw(checkeuid checkruid cgisuidsetup adminsuidsetup forksuidsetup - getotaker dbh datasrc getsecrets driver_name ); + getotaker dbh datasrc getsecrets driver_name myconnect ); $freeside_uid = scalar(getpwnam('freeside')); @@ -84,11 +84,8 @@ sub forksuidsetup { $ENV{'BASH_ENV'} = ''; croak "Not running uid freeside!" unless checkeuid(); - getsecrets; - $dbh = DBI->connect($datasrc,$db_user,$db_pass, { - 'AutoCommit' => 0, - 'ChopBlanks' => 1, - } ) or die "DBI->connect error: $DBI::errstr\n"; + + $dbh = &myconnect; foreach ( keys %callback ) { &{$callback{$_}}; @@ -100,6 +97,11 @@ sub forksuidsetup { $dbh; } +sub myconnect { + $dbh = DBI->connect( getsecrets, {'AutoCommit' => 0, 'ChopBlanks' => 1, } ) + or die "DBI->connect error: $DBI::errstr\n"; +} + =item install_callback A package can install a callback to be run in adminsuidsetup by passing diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 2639abf..4cc63d9 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -13,6 +13,8 @@ use Date::Format; use Mail::Internet 1.44; use Mail::Header; use Text::Template; +use File::Temp 0.14; +use String::ShellQuote; use FS::UID qw( datasrc ); use FS::Record qw( qsearch qsearchs ); use FS::cust_main; @@ -382,15 +384,23 @@ sub owed { $balance; } -=item send +=item send [ TEMPLATENAME [ , AGENTNUM ] ] Sends this invoice to the destinations configured for this customer: send emails or print. See L<FS::cust_main_invoice>. +TEMPLATENAME, if specified, is the name of a suffix for alternate invoices. + +AGENTNUM, if specified, means that this invoice will only be sent for customers +of the specified agent. + =cut sub send { - my($self,$template) = @_; + my $self = shift; + my $template = scalar(@_) ? shift : ''; + return '' if scalar(@_) && $_[0] && $self->cust_main->agentnum ne shift; + my @print_text = $self->print_text('', $template); my @invoicing_list = $self->cust_main->invoicing_list; @@ -1053,6 +1063,31 @@ sub batch_card { ''; } +sub _agent_template { + my $self = shift; + + my $cust_bill_event = qsearchs( 'part_bill_event', + { + 'payby' => $self->cust_main->payby, + 'plan' => 'send_agent', + 'eventcode' => { 'op' => 'LIKE', + 'value' => '_%, '. $self->cust_main->agentnum. ');' }, + }, + '', + 'ORDER BY seconds LIMIT 1' + ); + + return '' unless $cust_bill_event; + + if ( $cust_bill_event->eventcode =~ /\(\s*'(.*)'\s*,\s*(\d+)\s*\)\;$/ ) { + return $1; + } else { + warn "can't parse eventcode for agent-specific invoice template"; + return ''; + } + +} + =item print_text [ TIME [ , TEMPLATE ] ] Returns an text invoice, as a list of lines. @@ -1195,10 +1230,11 @@ sub print_text { sprintf("%10.2f", $balance_due ) ]; #create the template + $template ||= $self->_agent_template; my $templatefile = 'invoice_template'; - $templatefile .= "_$template" if $template; + $templatefile .= "_$template" if length($template); my @invoice_template = $conf->config($templatefile) - or die "cannot load config file $templatefile"; + or die "cannot load config file $templatefile"; $invoice_lines = 0; my $wasfunc = 0; foreach ( grep /invoice_lines\(\d*\)/, @invoice_template ) { #kludgy @@ -1320,8 +1356,10 @@ sub print_latex { @buf = (); #create the template + $template ||= $self->_agent_template; my $templatefile = 'invoice_latex'; - $templatefile .= "_$template" if $template; + my $suffix = length($template) ? "_$template" : ''; + $templatefile .= $suffix; my @invoice_template = $conf->config($templatefile) or die "cannot load config file $templatefile"; @@ -1351,7 +1389,7 @@ sub print_latex { $invoice_data{'notes'} = join("\n", map { my $b=$_; $b =~ s/\$(\w+)/$invoice_data{$1}/eg; $b } - $conf->config('invoice_latexnotes') + $conf->config_orbase('invoice_latexnotes', $suffix) ); $invoice_data{'footer'} =~ s/\n+$//; @@ -1469,17 +1507,17 @@ sub print_latex { $var; } - my $dir = '/tmp'; #! /usr/local/etc/freeside/invoices.datasrc/ - my $unique = int(rand(2**31)); #UGH... use File::Temp or something - - chdir($dir); - my $file = $self->invnum. ".$unique"; + my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc; + my $fh = new File::Temp( TEMPLATE => 'invoice.'. $self->invnum. '.XXXXXXXX', + DIR => $dir, + SUFFIX => '.tex', + UNLINK => 0, + ) or die "can't open temp file: $!\n"; + print $fh join("\n", @filled_in ), "\n"; + close $fh; - open(TEX,">$file.tex") or die "can't open $file.tex: $!\n"; - print TEX join("\n", @filled_in ), "\n"; - close TEX; - - return $file; + $fh->filename =~ /^(.*).tex$/ or die "unparsable filename: ". $fh->filename; + return $1; } @@ -1499,13 +1537,21 @@ sub print_ps { my $file = $self->print_latex(@_); - #error checking!! - system('pslatex', "$file.tex"); - system('pslatex', "$file.tex"); - system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ); + my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc; + chdir($dir); + + my $sfile = shell_quote $file; + + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 + or die "pslatex $file.tex failed: $!"; + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 + or die "pslatex $file.tex failed: $!"; + + system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0 + or die "dvips failed: $!"; open(POSTSCRIPT, "<$file.ps") - or die "can't open $file.ps (probable error in LaTeX template): $!\n"; + or die "can't open $file.ps: $! (error in LaTeX template?)\n"; unlink("$file.dvi", "$file.log", "$file.aux", "$file.ps", "$file.tex"); @@ -1536,19 +1582,30 @@ sub print_pdf { my $file = $self->print_latex(@_); + my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc; + chdir($dir); + #system('pdflatex', "$file.tex"); #system('pdflatex', "$file.tex"); #! LaTeX Error: Unknown graphics extension: .eps. - #error checking!! - system('pslatex', "$file.tex"); - system('pslatex', "$file.tex"); + my $sfile = shell_quote $file; + + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 + or die "pslatex $file.tex failed: $!"; + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 + or die "pslatex $file.tex failed: $!"; #system('dvipdf', "$file.dvi", "$file.pdf" ); - system("dvips -q -t letter -f $file.dvi | gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$file.pdf -c save pop -"); + system( + "dvips -q -t letter -f $sfile.dvi ". + "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ". + " -c save pop -" + ) == 0 + or die "dvips | gs failed: $!"; open(PDF, "<$file.pdf") - or die "can't open $file.pdf (probably error in LaTeX tempalte: $!\n"; + or die "can't open $file.pdf: $! (error in LaTeX template?)\n"; unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex"); @@ -1748,7 +1805,7 @@ sub _items_credits { #'description' => 'Credit ref\#'. $_->crednum. # " (". time2str("%x",$_->cust_credit->_date) .")". # $reason, - 'description' => 'Credit applied'. + 'description' => 'Credit applied '. time2str("%x",$_->cust_credit->_date). $reason, 'amount' => sprintf("%10.2f",$_->amount), }; @@ -1793,9 +1850,6 @@ The delete method. print_text formatting (and some logic :/) is in source, but needs to be slurped in from a file. Also number of lines ($=). -missing print_ps for a nice postscript copy (maybe HylaFAX-cover-page-style -or something similar so the look can be completely customized?) - =head1 SEE ALSO L<FS::Record>, L<FS::cust_main>, L<FS::cust_bill_pay>, L<FS::cust_pay>, diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index a62c44e..a3297ab 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -462,7 +462,10 @@ sub unsuspend { unless ( ! $self->getfield('susp') ) { my %hash = $self->hash; + my $inactive = time - $hash{'susp'}; $hash{'susp'} = ''; + $hash{'bill'} = ( $hash{'bill'} || $hash{'setup'} ) + $inactive + if $inactive > 0 && ( $hash{'bill'} || $hash{'setup'} ); my $new = new FS::cust_pkg ( \%hash ); $error = $new->replace($self); if ( $error ) { diff --git a/FS/FS/cust_refund.pm b/FS/FS/cust_refund.pm index aa81003..4a1037f 100644 --- a/FS/FS/cust_refund.pm +++ b/FS/FS/cust_refund.pm @@ -44,6 +44,8 @@ inherits from FS::Record. The following fields are currently supported: =item refund - Amount of the refund +=item reason - Reason for the refund + =item _date - specified as a UNIX timestamp; see L<perlfunc/"time">. Also see L<Time::Local> and L<Date::Parse> for conversion functions. @@ -221,6 +223,7 @@ sub check { $self->ut_numbern('refundnum') || $self->ut_numbern('custnum') || $self->ut_money('refund') + || $self->ut_text('reason') || $self->ut_numbern('_date') || $self->ut_textn('paybatch') || $self->ut_enum('closed', [ '', 'Y' ]) @@ -267,7 +270,7 @@ sub check { =head1 VERSION -$Id: cust_refund.pm,v 1.18.4.2 2002-11-19 09:52:02 ivan Exp $ +$Id: cust_refund.pm,v 1.18.4.3 2004-07-06 14:22:57 ivan Exp $ =head1 BUGS diff --git a/FS/FS/export_svc.pm b/FS/FS/export_svc.pm index da9ac69..a212949 100644 --- a/FS/FS/export_svc.pm +++ b/FS/FS/export_svc.pm @@ -2,7 +2,7 @@ package FS::export_svc; use strict; use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); +use FS::Record qw( qsearch qsearchs dbh ); use FS::part_export; use FS::part_svc; @@ -67,7 +67,144 @@ otherwise returns false. =cut -# the insert method can be inherited from FS::Record +sub insert { + my $self = shift; + my $error; + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + $error = $self->check; + return $error if $error; + + #check for duplicates! + my @checks = (); + my $svcdb = $self->part_svc->svcdb; + if ( $svcdb eq 'svc_acct' ) { + + if ( $self->part_export->nodomain =~ /^Y/i ) { + push @checks, { + label => 'usernames', + method => 'username', + sortby => sub { $a cmp $b }, + }; + } else { + push @checks, { + label => 'username@domain', + method => 'email', + sortby => sub { + my($auser, $adomain) = split('@', $a); + my($buser, $bdomain) = split('@', $b); + $adomain cmp $bdomain || $auser cmp $buser; + }, + }; + } + + unless ( $self->part_svc->part_svc_column('uid')->columnflag eq 'F' ) { + push @checks, { + label => 'uids', + method => 'uid', + sortby => sub { $a <=> $b }, + }; + } + + } elsif ( $svcdb eq 'svc_domain' ) { + push @checks, { + label => 'domains', + method => 'domain', + sortby => sub { $a cmp $b }, + }; + } else { + warn "WARNING: No duplicate checking done on merge of $svcdb exports"; + } + + foreach my $check ( @checks ) { + my @current_svc = $self->part_export->svc_x; + #warn "current: ". scalar(@current_svc). " $current_svc[0]\n"; + my @new_svc = $self->part_svc->svc_x; + #warn "new: ". scalar(@new_svc). " $new_svc[0]\n"; + my $method = $check->{'method'}; + my %cur_svc = map { $_->$method() => $_ } @current_svc; + my @dup_svc = grep { $cur_svc{$_->$method()} } @new_svc; + #my @diff_customer = grep { + # $_->cust_pkg->custnum != $cur_svc{$_->$method()}->cust_pkg->custnum + # } @dup_svc; + + + + if ( @dup_svc ) { #aye, that's the rub + #error out for now, eventually accept different options of adjustments + # to make to allow us to continue forward + $dbh->rollback if $oldAutoCommit; + + my @diff_customer_svc = grep { + my $cust_pkg = $_->cust_svc->cust_pkg; + my $custnum = $cust_pkg ? $cust_pkg->custnum : 0; + my $other_cust_pkg = $cur_svc{$_->$method()}->cust_svc->cust_pkg; + my $other_custnum = $other_cust_pkg ? $other_cust_pkg->custnum : 0; + $custnum != $other_custnum; + } @dup_svc; + + my $label = $check->{'label'}; + my $sortby = $check->{'sortby'}; + return "Can't export ". + $self->part_svc->svcpart.':'.$self->part_svc->svc. " service to ". + $self->part_export->exportnum.':'.$self->part_export->exporttype. + ' on '. $self->part_export->machine. + ' : '. scalar(@dup_svc). " duplicate $label". + ' ('. scalar(@diff_customer_svc). " from different customers)". + #": ". join(', ', sort $sortby map { $_->$method() } @dup_svc ) + ": ". join(', ', sort $sortby map { $_->$method() } @diff_customer_svc ) + ; + } + } + + #end of duplicate check, whew + + $error = $self->SUPER::insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + +# if ( $self->part_svc->svcdb eq 'svc_acct' ) { +# +# if ( $self->part_export->nodomain =~ /^Y/i ) { +# +# select username from svc_acct where svcpart = $svcpart +# group by username having count(*) > 1; +# +# } else { +# +# select username, domain +# from svc_acct +# join svc_domain on ( svc_acct.domsvc = svc_domain.svcnum ) +# group by username, domain having count(*) > 1; +# +# } +# +# } elsif ( $self->part_svc->svcdb eq 'svc_domain' ) { +# +# #similar but easier domain checking one +# +# } #etc.? +# +# my @services = +# map { $_->part_svc } +# grep { $_->svcpart != $self->svcpart } +# $self->part_export->export_svc; + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + ''; #no error +} =item delete @@ -108,6 +245,28 @@ sub check { ; } +=item part_export + +Returns the FS::part_export object (see L<FS::part_export>). + +=cut + +sub part_export { + my $self = shift; + qsearchs( 'part_export', { 'exportnum' => $self->exportnum } ); +} + +=item part_svc + +Returns the FS::part_svc object (see L<FS::part_svc>). + +=cut + +sub part_svc { + my $self = shift; + qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); +} + =back =head1 BUGS diff --git a/FS/FS/part_export/apache.pm b/FS/FS/part_export/apache.pm index b16b304..17fbabf 100644 --- a/FS/FS/part_export/apache.pm +++ b/FS/FS/part_export/apache.pm @@ -10,6 +10,9 @@ tie my %options, 'Tie::IxHash', 'user' => { label=>'Remote username', default=>'root' }, 'httpd_conf' => { label=>'httpd.conf snippet location', default=>'/etc/apache/httpd-freeside.conf', }, + 'restart' => { label=>'Apache restart command', + default=>'apachectl graceful', + }, 'template' => { label => 'Template', type => 'textarea', diff --git a/FS/FS/part_export/postfix.pm b/FS/FS/part_export/postfix.pm index c24cf19..4fd19ee 100644 --- a/FS/FS/part_export/postfix.pm +++ b/FS/FS/part_export/postfix.pm @@ -11,6 +11,11 @@ tie my %options, 'Tie::IxHash', 'aliases' => { label=>'aliases file location', default=>'/etc/aliases' }, 'virtual' => { label=>'virtual file location', default=>'/etc/postfix/virtual' }, 'mydomain' => { label=>'local domain', default=>'' }, + 'newaliases' => { label=>'newaliases command', default=>'newaliases' }, + 'postmap' => { label=>'postmap command', + default=>'postmap hash:/etc/postfix/virtual', }, + 'reload' => { label=>'reload command', + default=>'postfix reload' }, ; %info = ( diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm index 78f9e96..4f201cf 100644 --- a/FS/FS/part_export/shellcommands.pm +++ b/FS/FS/part_export/shellcommands.pm @@ -154,6 +154,7 @@ old_ for replace operations): <LI><code>$dir</code> - home directory <LI><code>$shell</code> <LI><code>$quota</code> + <LI><code>@radius_groups</code> <LI>All other fields in <a href="../docs/schema.html#svc_acct">svc_acct</a> are also available. </UL> END @@ -175,14 +176,25 @@ sub _export_delete { sub _export_suspend { my($self) = shift; - $self->_export_command('suspend', @_); + $self->_export_command_or_super('suspend', @_); } sub _export_unsuspend { my($self) = shift; - $self->_export_command('unsuspend', @_); + $self->_export_command_or_super('unsuspend', @_); } +sub _export_command_or_super { + my($self, $action) = (shift, shift); + if ( $self->option($action) =~ /^\s*$/ ) { + my $method = "SUPER::_export_$action"; + $self->$method(@_); + } else { + $self->_export_command($action, @_); + } +}; + + sub _export_command { my ( $self, $action, $svc_acct) = (shift, shift, shift); my $command = $self->option($action); @@ -228,6 +240,8 @@ sub _export_command { ); } + @radius_groups = $svc_acct->radius_groups; + $self->shellcommands_queue( $svc_acct->svcnum, user => $self->option('user')||'root', host => $self->machine, @@ -266,6 +280,9 @@ sub _export_replace { ); } + @old_radius_groups = $old->radius_groups; + @new_radius_groups = $new->radius_groups; + if ( $self->option('usermod_pwonly') ) { my $error = ''; if ( $old_username ne $new_username ) { @@ -280,6 +297,10 @@ sub _export_replace { if ( $old_dir ne $new_dir ) { $error ||= "can't change dir"; } + if ( join("\n", sort @old_radius_groups) ne + join("\n", sort @new_radius_groups) ) { + $error ||= "can't change RADIUS groups"; + } return $error. ' ('. $self->exporttype. ' to '. $self->machine. ')' if $error; } diff --git a/FS/FS/part_export/shellcommands_withdomain.pm b/FS/FS/part_export/shellcommands_withdomain.pm index 8a56bab..89ee95f 100644 --- a/FS/FS/part_export/shellcommands_withdomain.pm +++ b/FS/FS/part_export/shellcommands_withdomain.pm @@ -73,7 +73,7 @@ the same username with different domains. You will need to this.form.useradd_stdin.value = ""; this.form.userdel.value = "/usr/local/ispman/bin/ispman.delUser -d $domain $username"; this.form.userdel_stdin.value=""; - this.form.usermod.value = "/usr/local/ispman/bin/ispman.passwd.user $username\\\@$domain $new_quoted_password"; + this.form.usermod.value = "/usr/local/ispman/bin/ispman.passwd.user $new_username\\\@$new_domain $new_quoted_password"; this.form.usermod_stdin.value = ""; this.form.usermod_pwonly.checked = true; '> @@ -95,6 +95,7 @@ The following variables are available for interpolation (prefixed with <LI><code>$dir</code> - home directory <LI><code>$shell</code> <LI><code>$quota</code> + <LI><code>@radius_groups</code> <LI>All other fields in <a href="../docs/schema.html#svc_acct">svc_acct</a> are also available. </UL> END diff --git a/FS/FS/part_export/vpopmail.pm b/FS/FS/part_export/vpopmail.pm index 62fa8ba..0fc8266 100644 --- a/FS/FS/part_export/vpopmail.pm +++ b/FS/FS/part_export/vpopmail.pm @@ -24,12 +24,14 @@ tie my %options, 'Tie::IxHash', 'desc' => 'Real-time export to vpopmail text files', 'options' => \%options, 'notes' => <<'END' +This export is currently unmaintained. See shellcommands_withdomain for an +export that uses vpopmail CLI commands instead.<BR> +<BR> Real time export to <a href="http://inter7.com/vpopmail/">vpopmail</a> text files. <a href="http://search.cpan.org/dist/File-Rsync">File::Rsync</a> must be installed, and you will need to <a href="../docs/ssh.html">setup SSH for unattended operation</a> -to <b>vpopmail</b>@<i>export.host</i>. See shellcommands_withdomain for an -export that uses vpopmail commands instead. +to <b>vpopmail</b>@<i>export.host</i>. END ); diff --git a/FS/FS/part_export/www_shellcommands.pm b/FS/FS/part_export/www_shellcommands.pm index 6847f64..dd90937 100644 --- a/FS/FS/part_export/www_shellcommands.pm +++ b/FS/FS/part_export/www_shellcommands.pm @@ -10,13 +10,13 @@ use FS::part_export; tie my %options, 'Tie::IxHash', 'user' => { label=>'Remote username', default=>'root' }, 'useradd' => { label=>'Insert command', - default=>'mkdir /var/www/$zone; chown $username /var/www/$zone; ln -s /var/www/$zone $homedir/$zone', + default=>'mkdir $homedir/$zone; chown $username $homedir/$zone; ln -s $homedir/$zone /var/www/$zone', }, 'userdel' => { label=>'Delete command', - default=>'[ -n "$zone" ] && rm -rf /var/www/$zone; rm $homedir/$zone', + default=>'[ -n "$zone" ] && rm -rf /var/www/$zone; rm -rf $homedir/$zone', }, 'usermod' => { label=>'Modify command', - default=>'[ -n "$old_zone" ] && rm $old_homedir/$old_zone; [ "$old_zone" != "$new_zone" -a -n "$new_zone" ] && mv /var/www/$old_zone /var/www/$new_zone; [ "$old_username" != "$new_username" ] && chown -R $new_username /var/www/$new_zone; ln -s /var/www/$new_zone $new_homedir/$new_zone', + default=>'[ -n "$old_zone" ] && rm /var/www/$old_zone; [ "$old_zone" != "$new_zone" -a -n "$new_zone" ] && ( mv $old_homedir/$old_zone $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone ); [ "$old_username" != "$new_username" ] && chown -R $new_username $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone', }, ; @@ -32,9 +32,9 @@ Run remote commands via SSH, for virtual web sites. You will need to <LI> <INPUT TYPE="button" VALUE="Maintain directories" onClick=' this.form.user.value = "root"; - this.form.useradd.value = "mkdir /var/www/$zone; chown $username /var/www/$zone; ln -s /var/www/$zone $homedir/$zone"; - this.form.userdel.value = "[ -n "$zone" ] && rm -rf /var/www/$zone; rm $homedir/$zone"; - this.form.usermod.value = "[ -n "$old_zone" ] && rm $old_homedir/$old_zone; [ "$old_zone" != "$new_zone" -a -n "$new_zone" ] && mv /var/www/$old_zone /var/www/$new_zone; [ "$old_username" != "$new_username" ] && chown -R $new_username /var/www/$new_zone; ln -s /var/www/$new_zone $new_homedir/$new_zone"; + this.form.useradd.value = "mkdir $homedir/$zone; chown $username $homedir/$zone; ln -s $homedir/$zone /var/www/$zone"; + this.form.userdel.value = "[ -n \"$zone\" ] && rm -rf /var/www/$zone; rm -rf $homedir/$zone"; + this.form.usermod.value = "[ -n \"$old_zone\" ] && rm /var/www/$old_zone; [ \"$old_zone\" != \"$new_zone\" -a -n \"$new_zone\" ] && ( mv $old_homedir/$old_zone $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone ); [ \"$old_username\" != \"$new_username\" ] && chown -R $new_username $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone"; '> <LI> <INPUT TYPE="button" VALUE="ISPMan CLI" onClick=' diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm index 552019a..1812c61 100644 --- a/FS/FS/part_svc.pm +++ b/FS/FS/part_svc.pm @@ -6,6 +6,7 @@ use FS::Record qw( qsearch qsearchs fields dbh ); use FS::part_svc_column; use FS::part_export; use FS::export_svc; +use FS::cust_svc; @ISA = qw(FS::Record); @@ -21,8 +22,12 @@ FS::part_svc - Object methods for part_svc objects $record = new FS::part_svc { 'column' => 'value' }; $error = $record->insert; + $error = $record->insert( [ 'pseudofield' ] ); + $error = $record->insert( [ 'pseudofield' ], \%exportnums ); $error = $new_record->replace($old_record); + $error = $new_record->replace($old_record, '1.3-COMPAT', [ 'pseudofield' ] ); + $error = $new_record->replace($old_record, '1.3-COMPAT', [ 'pseudofield' ], \%exportnums ); $error = $record->delete; @@ -59,25 +64,40 @@ database, see L<"insert">. sub table { 'part_svc'; } -=item insert EXTRA_FIELDS_ARRAYREF +=item insert [ EXTRA_FIELDS_ARRAYREF [ , EXPORTNUMS_HASHREF ] ] Adds this service definition to the database. If there is an error, returns the error, otherwise returns false. -TODOC: +The following pseudo-fields may be defined, and will be maintained in +the part_svc_column table appropriately (see L<FS::part_svc_column>). + +=over 4 =item I<svcdb>__I<field> - Default or fixed value for I<field> in I<svcdb>. =item I<svcdb>__I<field>_flag - defines I<svcdb>__I<field> action: null, `D' for default, or `F' for fixed -TODOC: EXTRA_FIELDS_ARRAYREF +=back + +If you want to add part_svc_column records for fields that do not exist as +(real or virtual) fields in the I<svcdb> table, make sure to list then in +EXTRA_FIELDS_ARRAYREF also. + +If EXPORTNUMS_HASHREF is specified (keys are exportnums and values are +boolean), the appopriate export_svc records will be inserted. =cut sub insert { my $self = shift; my @fields = (); + my @exportnums = (); @fields = @{shift(@_)} if @_; + if ( @_ ) { + my $exportnums = shift; + @exportnums = grep $exportnums->{$_}, keys %$exportnums; + } local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; @@ -96,6 +116,8 @@ sub insert { return $error; } + # add part_svc_column records + my $svcdb = $self->svcdb; # my @rows = map { /^${svcdb}__(.*)$/; $1 } # grep ! /_flag$/, @@ -133,6 +155,20 @@ sub insert { } + # add export_svc records + + foreach my $exportnum ( @exportnums ) { + my $export_svc = new FS::export_svc ( { + 'exportnum' => $exportnum, + 'svcpart' => $self->svcpart, + } ); + $error = $export_svc->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; @@ -140,7 +176,7 @@ sub insert { =item delete -Currently unimplemented. +Currently unimplemented. Set the "disabled" field instead. =cut @@ -149,14 +185,14 @@ sub delete { # check & make sure the svcpart isn't in cust_svc or pkg_svc (in any packages)? } -=item replace OLD_RECORD [ '1.3-COMPAT' [ , EXTRA_FIELDS_ARRAYREF ] ] +=item replace OLD_RECORD [ '1.3-COMPAT' [ , EXTRA_FIELDS_ARRAYREF [ , EXPORTNUMS_HASHREF ] ] ] Replaces OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false. TODOC: 1.3-COMPAT -TODOC: EXTRA_FIELDS_ARRAYREF +TODOC: EXTRA_FIELDS_ARRAYREF (same as insert method) =cut @@ -187,6 +223,9 @@ sub replace { shift; my @fields = (); @fields = @{shift(@_)} if @_; + my $exportnums = @_ ? shift : ''; + + # maintain part_svc_column records my $svcdb = $new->svcdb; foreach my $field ( @@ -219,6 +258,39 @@ sub replace { return $error; } } + + # maintain export_svc records + + if ( $exportnums ) { + + #false laziness w/ edit/process/agent_type.cgi + foreach my $part_export ( qsearch('part_export', {}) ) { + my $exportnum = $part_export->exportnum; + my $hashref = { + 'exportnum' => $exportnum, + 'svcpart' => $new->svcpart, + }; + my $export_svc = qsearchs('export_svc', $hashref); + + if ( $export_svc && ! $exportnums->{$exportnum} ) { + $error = $export_svc->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } elsif ( ! $export_svc && $exportnums->{$exportnum} ) { + $export_svc = new FS::export_svc ( $hashref ); + $error = $export_svc->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + } + + } + } else { $dbh->rollback if $oldAutoCommit; return 'non-1.3-COMPAT interface not yet written'; @@ -326,6 +398,28 @@ sub part_export { qsearch('export_svc', { 'svcpart' => $self->svcpart } ); } +=item cust_svc + +Returns a list of associated FS::cust_svc records. + +=cut + +sub cust_svc { + my $self = shift; + qsearch('cust_svc', { 'svcpart' => $self->svcpart } ); +} + +=item svc_x + +Returns a list of associated FS::svc_* records. + +=cut + +sub svc_x { + my $self = shift; + map { $_->svc_x } $self->cust_svc; +} + =back =head1 BUGS diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 68a4863..b21fb65 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -352,9 +352,7 @@ END my $args; if ( $dangerous || $queue->job !~ /^FS::part_export::/ || !$noactions ) { - $args = encode_entities( join(' ', - map { length($_)<54 ? $_ : substr($_,0,32)."..." } $queue->args #1&g - ) ); + $args = encode_entities( join(' ', $queue->args) ); } else { $args = ''; } @@ -424,7 +422,7 @@ END =head1 VERSION -$Id: queue.pm,v 1.15.4.1 2004-03-03 13:44:27 ivan Exp $ +$Id: queue.pm,v 1.15.4.2 2004-05-04 18:44:49 ivan Exp $ =head1 BUGS diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index 4b51a36..f6698ef 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -33,6 +33,8 @@ use FS::radius_usergroup; use FS::export_svc; use FS::part_export; use FS::Msgcat qw(gettext); +use FS::svc_forward; +use FS::svc_www; @ISA = qw( FS::svc_Common ); @@ -191,8 +193,7 @@ The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be defined. An FS::cust_svc record will be created and inserted. The additional field I<usergroup> can optionally be defined; if so it should -contain an arrayref of group names. See L<FS::radius_usergroup>. (used in -sqlradius export only) +contain an arrayref of group names. See L<FS::radius_usergroup>. The additional field I<child_objects> can optionally be defined; if so it should contain an arrayref of FS::tablename objects. They will have their @@ -230,14 +231,6 @@ sub insert { $error = $self->check; return $error if $error; - #no, duplicate checking just got a whole lot more complicated - #(perhaps keep this check with a config option to turn on?) - - #return gettext('username_in_use'). ": ". $self->username - # if qsearchs( 'svc_acct', { 'username' => $self->username, - # 'domsvc' => $self->domsvc, - # } ); - if ( $self->svcnum && qsearchs('cust_svc',{'svcnum'=>$self->svcnum}) ) { my $cust_svc = qsearchs('cust_svc',{'svcnum'=>$self->svcnum}); unless ( $cust_svc ) { @@ -248,94 +241,12 @@ sub insert { $self->svcpart($cust_svc->svcpart); } - #new duplicate username checking - - my $part_svc = qsearchs('part_svc', { 'svcpart' => $self->svcpart } ); - unless ( $part_svc ) { + $error = $self->_check_duplicate; + if ( $error ) { $dbh->rollback if $oldAutoCommit; - return 'unknown svcpart '. $self->svcpart; - } - - my @dup_user = qsearch( 'svc_acct', { 'username' => $self->username } ); - my @dup_userdomain = qsearch( 'svc_acct', { 'username' => $self->username, - 'domsvc' => $self->domsvc } ); - my @dup_uid; - if ( $part_svc->part_svc_column('uid')->columnflag ne 'F' - && $self->username !~ /^(toor|(hyla)?fax)$/ ) { - @dup_uid = qsearch( 'svc_acct', { 'uid' => $self->uid } ); - } else { - @dup_uid = (); - } - - if ( @dup_user || @dup_userdomain || @dup_uid ) { - my $exports = FS::part_export::export_info('svc_acct'); - my %conflict_user_svcpart; - my %conflict_userdomain_svcpart = ( $self->svcpart => 'SELF', ); - - foreach my $part_export ( $part_svc->part_export ) { - - #this will catch to the same exact export - my @svcparts = map { $_->svcpart } - qsearch('export_svc', { 'exportnum' => $part_export->exportnum }); - - #this will catch to exports w/same exporthost+type ??? - #my @other_part_export = qsearch('part_export', { - # 'machine' => $part_export->machine, - # 'exporttype' => $part_export->exporttype, - #} ); - #foreach my $other_part_export ( @other_part_export ) { - # push @svcparts, map { $_->svcpart } - # qsearch('export_svc', { 'exportnum' => $part_export->exportnum }); - #} - - #my $nodomain = $exports->{$part_export->exporttype}{'nodomain'}; - #silly kludge to avoid uninitialized value errors - my $nodomain = exists( $exports->{$part_export->exporttype}{'nodomain'} ) - ? $exports->{$part_export->exporttype}{'nodomain'} - : ''; - if ( $nodomain =~ /^Y/i ) { - $conflict_user_svcpart{$_} = $part_export->exportnum - foreach @svcparts; - } else { - $conflict_userdomain_svcpart{$_} = $part_export->exportnum - foreach @svcparts; - } - } - - foreach my $dup_user ( @dup_user ) { - my $dup_svcpart = $dup_user->cust_svc->svcpart; - if ( exists($conflict_user_svcpart{$dup_svcpart}) ) { - $dbh->rollback if $oldAutoCommit; - return "duplicate username: conflicts with svcnum ". $dup_user->svcnum. - " via exportnum ". $conflict_user_svcpart{$dup_svcpart}; - } - } - - foreach my $dup_userdomain ( @dup_userdomain ) { - my $dup_svcpart = $dup_userdomain->cust_svc->svcpart; - if ( exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { - $dbh->rollback if $oldAutoCommit; - return "duplicate username\@domain: conflicts with svcnum ". - $dup_userdomain->svcnum. " via exportnum ". - $conflict_userdomain_svcpart{$dup_svcpart}; - } - } - - foreach my $dup_uid ( @dup_uid ) { - my $dup_svcpart = $dup_uid->cust_svc->svcpart; - if ( exists($conflict_user_svcpart{$dup_svcpart}) - || exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { - $dbh->rollback if $oldAutoCommit; - return "duplicate uid: conflicts with svcnum ". $dup_uid->svcnum. - " via exportnum ". $conflict_user_svcpart{$dup_svcpart} - || $conflict_userdomain_svcpart{$dup_svcpart}; - } - } - + return $error; } - #see? i told you it was more complicated - my @jobnums; $error = $self->SUPER::insert( 'jobnums' => \@jobnums, @@ -473,7 +384,7 @@ sub delete { if qsearch( 'svc_forward', { 'dstsvc' => $self->svcnum } ); return "Can't delete an account with (svc_www) web service!" - if qsearch( 'svc_www', { 'usersvc' => $self->usersvc } ); + if qsearch( 'svc_www', { 'usersvc' => $self->svcnum } ); # what about records in session ? (they should refer to history table) @@ -544,8 +455,8 @@ Replaces OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false. The additional field I<usergroup> can optionally be defined; if so it should -contain an arrayref of group names. See L<FS::radius_usergroup>. (used in -sqlradius export only) +contain an arrayref of group names. See L<FS::radius_usergroup>. + =cut @@ -621,6 +532,15 @@ sub replace { } + if ( $old->username ne $new->username || $old->domsvc != $new->domsvc ) { + $new->svcpart( $new->cust_svc->svcpart ) unless $new->svcpart; + $error = $new->_check_duplicate; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + $error = $new->SUPER::replace($old); if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -817,6 +737,15 @@ sub check { # $error = $self->ut_textn('finger'); # return $error if $error; + if ( $self->getfield('finger') eq '' ) { + my $cust_pkg = $self->svcnum + ? $self->cust_svc->cust_pkg + : qsearchs('cust_pkg', { 'pkgnum' => $self->getfield('pkgnum') } ); + if ( $cust_pkg ) { + my $cust_main = $cust_pkg->cust_main; + $self->setfield('finger', $cust_main->first.' '.$cust_main->get('last') ); + } + } $self->getfield('finger') =~ /^([\w \t\!\@\#\$\%\&\(\)\-\+\;\'\"\,\.\?\/\*\<\>]*)$/ or return "Illegal finger: ". $self->getfield('finger'); @@ -886,6 +815,123 @@ sub _check_system { ); } +=item _check_duplicate + +Internal function to check for duplicates usernames, username@domain pairs and +uids. + +If the I<global_unique-username> configuration value is set to B<username> or +B<username@domain>, enforces global username or username@domain uniqueness. + +In all cases, check for duplicate uids and usernames or username@domain pairs +per export and with identical I<svcpart> values. + +=cut + +sub _check_duplicate { + my $self = shift; + + #this is Pg-specific. what to do for mysql etc? + # ( mysql LOCK TABLES certainly isn't equivalent or useful here :/ ) + warn "$me locking svc_acct table for duplicate search" if $DEBUG; + dbh->do("LOCK TABLE svc_acct IN SHARE ROW EXCLUSIVE MODE") + or die dbh->errstr; + warn "$me acquired svc_acct table lock for duplicate search" if $DEBUG; + + my $svcpart = $self->svcpart; + my $part_svc = qsearchs('part_svc', { 'svcpart' => $svcpart } ); + unless ( $part_svc ) { + return 'unknown svcpart '. $self->svcpart; + } + + my $global_unique = $conf->config('global_unique-username'); + + my @dup_user = grep { $svcpart != $_->svcpart } + qsearch( 'svc_acct', { 'username' => $self->username } ); + return gettext('username_in_use') + if $global_unique eq 'username' && @dup_user; + + my @dup_userdomain = grep { $svcpart != $_->svcpart } + qsearch( 'svc_acct', { 'username' => $self->username, + 'domsvc' => $self->domsvc } ); + return gettext('username_in_use') + if $global_unique eq 'username@domain' && @dup_userdomain; + + my @dup_uid; + if ( $part_svc->part_svc_column('uid')->columnflag ne 'F' + && $self->username !~ /^(toor|(hyla)?fax)$/ ) { + @dup_uid = grep { $svcpart != $_->svcpart } + qsearch( 'svc_acct', { 'uid' => $self->uid } ); + } else { + @dup_uid = (); + } + + if ( @dup_user || @dup_userdomain || @dup_uid ) { + my $exports = FS::part_export::export_info('svc_acct'); + my %conflict_user_svcpart; + my %conflict_userdomain_svcpart = ( $self->svcpart => 'SELF', ); + + foreach my $part_export ( $part_svc->part_export ) { + + #this will catch to the same exact export + my @svcparts = map { $_->svcpart } $part_export->export_svc; + + #this will catch to exports w/same exporthost+type ??? + #my @other_part_export = qsearch('part_export', { + # 'machine' => $part_export->machine, + # 'exporttype' => $part_export->exporttype, + #} ); + #foreach my $other_part_export ( @other_part_export ) { + # push @svcparts, map { $_->svcpart } + # qsearch('export_svc', { 'exportnum' => $part_export->exportnum }); + #} + + #my $nodomain = $exports->{$part_export->exporttype}{'nodomain'}; + #silly kludge to avoid uninitialized value errors + my $nodomain = exists( $exports->{$part_export->exporttype}{'nodomain'} ) + ? $exports->{$part_export->exporttype}{'nodomain'} + : ''; + if ( $nodomain =~ /^Y/i ) { + $conflict_user_svcpart{$_} = $part_export->exportnum + foreach @svcparts; + } else { + $conflict_userdomain_svcpart{$_} = $part_export->exportnum + foreach @svcparts; + } + } + + foreach my $dup_user ( @dup_user ) { + my $dup_svcpart = $dup_user->cust_svc->svcpart; + if ( exists($conflict_user_svcpart{$dup_svcpart}) ) { + return "duplicate username: conflicts with svcnum ". $dup_user->svcnum. + " via exportnum ". $conflict_user_svcpart{$dup_svcpart}; + } + } + + foreach my $dup_userdomain ( @dup_userdomain ) { + my $dup_svcpart = $dup_userdomain->cust_svc->svcpart; + if ( exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { + return "duplicate username\@domain: conflicts with svcnum ". + $dup_userdomain->svcnum. " via exportnum ". + $conflict_userdomain_svcpart{$dup_svcpart}; + } + } + + foreach my $dup_uid ( @dup_uid ) { + my $dup_svcpart = $dup_uid->cust_svc->svcpart; + if ( exists($conflict_user_svcpart{$dup_svcpart}) + || exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { + return "duplicate uid: conflicts with svcnum". $dup_uid->svcnum. + "via exportnum ". $conflict_user_svcpart{$dup_svcpart} + || $conflict_userdomain_svcpart{$dup_svcpart}; + } + } + + } + + return ''; + +} =item radius @@ -907,6 +953,10 @@ Note that this is now the preferred method for reading RADIUS attributes - accessing the columns directly is discouraged, as the column names are expected to change in the future. +Internal function to check the username against the list of system usernames +from the I<system_usernames> configuration value. Returns true if the username +is listed on the system username list. + =cut sub radius_reply { @@ -1077,7 +1127,6 @@ sub attribute_since_sqlradacct { $self->cust_svc->attribute_since_sqlradacct(@_); } - =item get_session_history_sqlradacct TIMESTAMP_START TIMESTAMP_END Returns an array of hash references of this customers login history for the diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm index 45fcdd2..c0190fc 100644 --- a/FS/FS/svc_domain.pm +++ b/FS/FS/svc_domain.pm @@ -348,7 +348,8 @@ sub check { " (or unknown registry - try \$whois_hack)"; } - $recref->{action} =~ /^(M|N)$/ or return "Illegal action"; + $recref->{action} =~ /^(M|N)$/ + or return "Illegal action: ". $recref->{action}; $recref->{action} = $1; if ( $recref->{catchall} ne '' ) { diff --git a/FS/MANIFEST b/FS/MANIFEST index 3d12a40..bb594ae 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -27,7 +27,6 @@ bin/freeside-setup bin/freeside-sqlradius-radacctd bin/freeside-sqlradius-reset bin/freeside-sqlradius-seconds -bin/freeside-tax-report FS.pm FS/CGI.pm FS/InitHandler.pm diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 6ea27c0..e14ddad 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -7,7 +7,7 @@ use Fcntl qw(:flock); use POSIX qw(:sys_wait_h setsid); use Date::Format; use IO::File; -use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh); +use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh myconnect); use FS::Record qw(qsearch qsearchs); use FS::queue; use FS::queue_depend; @@ -51,7 +51,16 @@ $< = $FS::UID::freeside_uid; $> = $FS::UID::freeside_uid; $ENV{HOME} = (getpwuid($>))[7]; #for ssh -adminsuidsetup $user; + +$@ = 'not connected'; +while ( $@ ) { + eval { adminsuidsetup $user; }; + if ( $@ ) { + warn $@; + warn "sleeping for reconnect...\n"; + sleep 5; + } +} $log_file = "/usr/local/etc/freeside/queuelog.". $FS::UID::datasrc; @@ -75,18 +84,34 @@ while (1) { } $warnkids=0; - my $nodepend = driver_name eq 'mysql' - ? '' - : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - ' WHERE queue_depend.jobnum = queue.jobnum ) '; + unless ( dbh && dbh->ping ) { + warn "WARNING: connection to database lost, reconnecting...\n"; + + eval { myconnect; }; + + unless ( !$@ && dbh && dbh->ping ) { + warn "WARNING: still no connection to database, sleeping for retry...\n"; + sleep 10; + next; + } else { + warn "WARNING: reconnected to database\n"; + } + } #my($job, $ljob); #{ # my $oldAutoCommit = $FS::UID::AutoCommit; # local $FS::UID::AutoCommit = 0; $FS::UID::AutoCommit = 0; - my $dbh = dbh; - + + #assuming mysql 4.1 w/subqueries now + #my $nodepend = driver_name eq 'mysql' + # ? '' + # : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. + # ' WHERE queue_depend.jobnum = queue.jobnum ) '; + my $nodepend = 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. + ' WHERE queue_depend.jobnum = queue.jobnum ) '; + my $job = qsearchs( 'queue', { 'status' => 'new' }, @@ -95,25 +120,43 @@ while (1) { ? "$nodepend ORDER BY jobnum LIMIT 1 FOR UPDATE" : "$nodepend ORDER BY jobnum FOR UPDATE LIMIT 1" ) or do { - $dbh->commit or die $dbh->errstr; #if $oldAutoCommit; + # if $oldAutoCommit { + dbh->commit or do { + warn "WARNING: database error, closing connection: ". dbh->errstr; + undef $FS::UID::dbh; + next; + }; + # } sleep 5; #connecting to db is expensive next; }; - if ( driver_name eq 'mysql' - && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) { - $dbh->commit or die $dbh->errstr; #if $oldAutoCommit; - sleep 5; #would be better if mysql could do everything in query above - next; - } + #assuming mysql 4.1 w/subqueries now + #if ( driver_name eq 'mysql' + # && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) { + # dbh->commit or die dbh->errstr; #if $oldAutoCommit; + # sleep 5; #would be better if mysql could do everything in query above + # next; + #} my %hash = $job->hash; $hash{'status'} = 'locked'; my $ljob = new FS::queue ( \%hash ); my $error = $ljob->replace($job); - die $error if $error; + if ( $error ) { + warn "WARNING: database error locking job, closing connection: ". + dbh->errstr; + undef $FS::UID::dbh; + next; + } - $dbh->commit or die $dbh->errstr; #if $oldAutoCommit; + # if $oldAutoCommit { + dbh->commit or do { + warn "WARNING: database error, closing connection: ". dbh->errstr; + undef $FS::UID::dbh; + next; + }; + # } $FS::UID::AutoCommit = 1; #} diff --git a/FS/bin/freeside-selfservice-server b/FS/bin/freeside-selfservice-server index 864c2d4..c045893 100644 --- a/FS/bin/freeside-selfservice-server +++ b/FS/bin/freeside-selfservice-server @@ -8,7 +8,8 @@ # Proc::Daemon or somesuch use strict; -use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid ); +use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid + $keepalives ); use subs qw( lock_write unlock_write ); use Fcntl qw(:flock); use POSIX qw(:sys_wait_h setsid); @@ -24,11 +25,12 @@ use FS::Conf; use FS::cust_bill; use FS::cust_pkg; -$Debug = 1; # >= 2 will log packet contents, including potentially compromising - # information +$Debug = 1; # 2 will turn on more logging + # 3 will log packet contents, including passwords $shutdown = 0; $max_kids = '10'; #? +$keepalives = 0; #let clientd turn it on, so we don't barf on old ones $kids = 0; my $user = shift or die &usage; @@ -39,7 +41,6 @@ my $tag = scalar(@ARGV) ? shift : ''; my $pid_file = "/var/run/freeside-selfservice-server.$user.$machine.pid"; my $lock_file = "/usr/local/etc/freeside/selfservice.$machine.writelock"; -open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; &init($user); @@ -58,6 +59,7 @@ while (1) { warn "entering main loop\n" if $Debug; my $undisp = 0; + my $keepalive_count = 0; my $s = IO::Select->new( $reader ); while (1) { @@ -68,6 +70,12 @@ while (1) { my @handles = $s->can_read(5); unless ( @handles ) { &shutdown if $shutdown; + if ( $keepalives && $keepalive_count++ > 10 ) { + $keepalive_count = 0; + lock_write; + nstore_fd( { _token => '_keepalive' }, $writer ); + unlock_write; + } next; } @@ -89,7 +97,13 @@ while (1) { } warn "packet received\n". join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - if $Debug > 1; + if $Debug > 2; + + if ( $packet->{_packet} eq '_enable_keepalive' ) { + warn "enabling keep alives\n" if $Debug; + $keepalives=1; + next; + } #prevent runaway forking my $warnkids = 0; @@ -107,9 +121,12 @@ while (1) { warn "child $pid spawned\n" if $Debug; } else { #kid time - #get new db handle - $FS::UID::dbh->{InactiveDestroy} = 1; - forksuidsetup($user); + ##get new db handle + #$FS::UID::dbh->{InactiveDestroy} = 1; + #forksuidsetup($user); + + #get db handle + adminsuidsetup($user); my $type = $packet->{_packet}; warn "calling $type handler\n" if $Debug; @@ -120,8 +137,9 @@ while (1) { } $rv->{_token} = $packet->{_token}; #identifier - warn "sending response\n" if $Debug; + open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; lock_write; + warn "sending response\n" if $Debug; nstore_fd($rv, $writer) or die "FATAL: can't send response: $!"; $writer->flush or die "FATAL: can't flush: $!"; unlock_write; @@ -132,6 +150,7 @@ while (1) { } + &shutdown if $shutdown; warn "connection lost, reconnecting\n" if $Debug; sleep 3; @@ -181,6 +200,10 @@ sub init { #false laziness w/freeside-queued my $freeside_gid = scalar(getgrnam('freeside')) or die "can't setgid to freeside group\n"; + + open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; + chown $FS::UID::freeside_uid, $freeside_gid, $lock_file; + $) = $freeside_gid; $( = $freeside_gid; #if freebsd can't setuid(), presumably it can't setgid() either. grr fleabsd @@ -213,10 +236,12 @@ sub init { } sub shutdown { + &reap_kids; my $wait = 12; #wait up to 1 minute while ( $kids > 0 && $wait-- ) { warn "waiting for $kids children to terminate"; sleep 5; + &reap_kids; } warn "abandoning $kids children" if $kids; kill 'TERM', $ssh_pid if $ssh_pid; @@ -245,6 +270,8 @@ sub _do_logmsg { } sub lock_write { + warn "locking $lock_file mutex for write to write stream\n" if $Debug > 1; + #broken on freebsd? #flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!"; @@ -253,6 +280,8 @@ sub lock_write { } sub unlock_write { + warn "unlocking $lock_file mutex\n" if $Debug > 1; + #broken on freebsd? #flock($writer, LOCK_UN) or die "WARNING: can't release write lock: $!"; diff --git a/FS/bin/freeside-sqlradius-reset b/FS/bin/freeside-sqlradius-reset index 74f90a5..11cbe9e 100755 --- a/FS/bin/freeside-sqlradius-reset +++ b/FS/bin/freeside-sqlradius-reset @@ -1,4 +1,4 @@ -#!/usr/bin/perl -Tw +#!/usr/bin/perl -w use strict; use FS::UID qw(adminsuidsetup); @@ -12,9 +12,18 @@ adminsuidsetup $user; #my $machine = shift or die &usage; -my @exports = qsearch('part_export', { exporttype=>'sqlradius' } ); -push @exports, qsearch('part_export', { exporttype=>'sqlradius_withdomain' } ); - +my @exports = (); +if ( @ARGV ) { + foreach my $exportnum ( @ARGV ) { + foreach my $exporttype (qw( sqlradius sqlradius_withdomain )) { + push @exports, qsearch('part_export', { exportnum => $exportnum, + exporttype => $exporttype, } ); + } + } + } else { + @exports = qsearch('part_export', { exporttype=>'sqlradius' } ); + push @exports, qsearch('part_export', { exporttype=>'sqlradius_withdomain' } ); +} foreach my $export ( @exports ) { my $icradius_dbh = DBI->connect( @@ -47,8 +56,7 @@ foreach my $export ( @exports ) { } sub usage { - #die "Usage:\n\n sqlradius_reset user machine\n"; - die "Usage:\n\n freeside-sqlradius-reset user\n"; + die "Usage:\n\n freeside-sqlradius-reset user [ exportnum, ... ]\n"; } =head1 NAME @@ -57,12 +65,13 @@ freeside-sqlradius-reset - Command line interface to reset and recreate RADIUS S =head1 SYNOPSIS - freeside-sqlradius-reset username + freeside-sqlradius-reset username [ EXPORTNUM, ... ] =head1 DESCRIPTION Deletes the radcheck, radreply and usergroup tables and repopulates them from -the Freeside database, for all sqlradius exports. +the Freeside database, for the specified exports, or, if no exports are +specified, for all sqlradius and sqlradius_withdomain exports. B<username> is a username added by freeside-adduser. diff --git a/FS/bin/freeside-tax-report b/FS/bin/freeside-tax-report deleted file mode 100755 index d48da87..0000000 --- a/FS/bin/freeside-tax-report +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/perl -Tw - - -use strict; -use Date::Parse; -use Time::Local; -use Getopt::Std; -use Text::Template; -use Net::SMTP; -use Mail::Header; -use Mail::Internet; -use FS::Conf; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_bill; -use FS::cust_bill_pay; -use FS::cust_pay; - - -&untaint_argv; #what it sounds like (eww) -use vars qw($opt_v $opt_p $opt_m $opt_e $opt_t $opt_s $opt_f $report_lines $report_template @buf $header); -getopts("vpmef:s:"); #switches - -#we're at now now (and later). -my($_finishdate)= $opt_f ? str2time($main::opt_f) : $^T; -my($_startdate)= $opt_s ? str2time($main::opt_s) : $^T; - -# Get the current month -my ($ssec,$smin,$shour,$smday,$smon,$syear) = - (localtime($_startdate) )[0,1,2,3,4,5]; -$smon++; -$syear += 1900; - -# Get the current month -my ($fsec,$fmin,$fhour,$fmday,$fmon,$fyear) = - (localtime($_finishdate) )[0,1,2,3,4,5]; -$fmon++; -$fyear += 1900; - -# Login to the database -my $user = shift or die &usage; -adminsuidsetup $user; - -# Get the needed configuration files -my $conf = new FS::Conf; -my $lpr = $conf->config('lpr'); -my $email = $conf->config('email'); -my $smtpmachine = $conf->config('smtpmachine'); -my $mail_sender = $conf->exists('invoice_from') ? $conf->config('invoice_from') : - 'postmaster'; -my @report_template = $conf->config('report_template') - or die "cannot load config file report_template"; -$report_lines = 0; -foreach ( grep /report_lines\(\d+\)/, @report_template ) { #kludgy :/ - /report_lines\((\d+)\)/; - $report_lines += $1; -} -die "no report_lines() functions in template?" unless $report_lines; -$report_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", @report_template ], -) or die "can't create new Text::Template object: $Text::Template::ERROR"; - - -my(@cust_bills)=qsearch('cust_bill',{}); -if (scalar(@cust_bills) == 0) -{ - exit 1; -} - -# Open print and email pipes -# $lpr and opt_p for printing -# $email and opt_m for email - -if ($lpr && $main::opt_p) -{ - open(LPR, "|$lpr"); -} - -if ($email && $main::opt_m) -{ - $ENV{MAILADDRESS} = $mail_sender; - $header = new Mail::Header ( [ - "From: Account Processor", - "To: $email", - "Sender: $mail_sender", - "Reply-To: $mail_sender", - "Subject: Sales Taxes Invoiced", - ] ); -} - -my $comped = 0; -my $comped_tax = 0; -my $other = 0; -my $other_tax = 0; -my $total = 0; -my $taxed = 0; -my $untaxed = 0; -my $total_tax = 0; - -# Now I can start looping -foreach my $cust_bill (@cust_bills) -{ - my $_date = $cust_bill->getfield('_date'); - my $invnum = $cust_bill->getfield('invnum'); - my $charged = $cust_bill->getfield('charged'); - - if ($_date >= $_startdate && $_date <= $_finishdate) { - $total += $charged; - - # The following lines were used to produce rather verbose reports - #my ($sec,$min,$hour,$mday,$mon,$year) = - # (localtime($_date) )[0,1,2,3,4,5]; - #$mon++; - #$year -= 100 if $year >= 100; - #$year = "0" . $year if $year < 10; - - my $invoice_amt =0; - my $invoice_tax =0; - my $invoice_comped =0; - my(@cust_bill_pkgs)= $cust_bill->cust_bill_pkg; - foreach my $cust_bill_pkg (@cust_bill_pkgs) { - - my $recur = $cust_bill_pkg->getfield('recur'); - my $setup = $cust_bill_pkg->getfield('setup'); - my $pkgnum = $cust_bill_pkg->getfield('pkgnum'); - - if ($pkgnum == 0) { - # The following line was used to produce rather verbose reports - # push @buf, ('', sprintf(qq{%10s%15s%14.2f}, "$mon/$mday/$year", "Tax $invnum", $recur+$setup)); - $invoice_tax += $recur; - $invoice_tax += $setup; - } else { - # The following line was used to produce rather verbose reports - # push @buf, ('', sprintf(qq{%10s%15s%14.2f}, "$mon/$mday/$year", "Inv $invnum", $recur+$setup)); - $invoice_amt += $recur; - $invoice_amt += $setup; - } - - } - - my(@cust_bill_pays)= $cust_bill->cust_bill_pay; - foreach my $cust_bill_pay (@cust_bill_pays) { - my $payby = $cust_bill_pay->cust_pay->payby; - my $paid = $cust_bill_pay->getfield('amount'); - if ($payby =~ 'COMP') { - $invoice_comped += $paid; - } - } - - if (abs($invoice_comped - ($invoice_amt + $invoice_tax)) < 0.0001){ - $comped += $invoice_amt; - $comped_tax += $invoice_tax; - } elsif ($invoice_comped > 0) { - push @buf, sprintf(qq{\nInvoice %10d has inexpliciable complimentary payments of %14.9f\n}, $invnum, $invoice_comped); - $other += $invoice_amt; - $other_tax += $invoice_tax; - } elsif ($invoice_tax > 0) { - $total_tax += $invoice_tax; - $taxed += $invoice_amt; - } else { - $untaxed += $invoice_amt; - } - - } - -} - -push @buf, ('', sprintf(qq{%25s%14.2f}, "Complimentary", $comped)); -push @buf, sprintf(qq{%25s%14.2f}, "Complimentary Tax", $comped_tax); -push @buf, sprintf(qq{%25s%14.2f}, "Other", $other); -push @buf, sprintf(qq{%25s%14.2f}, "Other Tax", $other_tax); -push @buf, sprintf(qq{%25s%14.2f}, "Untaxed", $untaxed); -push @buf, sprintf(qq{%25s%14.2f}, "Taxed", $taxed); -push @buf, sprintf(qq{%25s%14.2f}, "Tax", $total_tax); -push @buf, ('', sprintf(qq{%39s}, "========="), sprintf(qq{%39.2f}, $total)); - -sub FS::tax_report::_template::report_lines { - my $lines = shift; - map { - scalar(@buf) ? shift @buf : '' ; - } - ( 1 .. $lines ); -} - -$FS::tax_report::_template::title = qq~SALES TAXES INVOICED for $smon/$smday/$syear through $fmon/$fmday/$fyear~; -$FS::tax_report::_template::title = $opt_t if $opt_t; -$FS::tax_report::_template::page = 1; -$FS::tax_report::_template::date = $^T; -$FS::tax_report::_template::date = $^T; -$FS::tax_report::_template::fdate = $_finishdate; -$FS::tax_report::_template::fdate = $_finishdate; -$FS::tax_report::_template::sdate = $_startdate; -$FS::tax_report::_template::sdate = $_startdate; -$FS::tax_report::_template::total_pages = - int( scalar(@buf) / $report_lines); -$FS::tax_report::_template::total_pages++ if scalar(@buf) % $report_lines; - -my @report; -while (@buf) { - push @report, split("\n", - $report_template->fill_in( PACKAGE => 'FS::tax_report::_template' ) - ); - $FS::tax_report::_template::page++; -} - -if ($opt_v) { - print map "$_\n", @report; -} -if($lpr && $opt_p) -{ - print LPR map "$_\n", @report; - print LPR "\f" if $opt_e; - close LPR || die "Could not close printer: $lpr\n"; -} -if($email && $opt_m) -{ - my $message = new Mail::Internet ( - 'Header' => $header, - 'Body' => [ (@report) ], - ); - $!=0; - $message->smtpsend( Host => "$smtpmachine" ) - or die "can't send report to $email via $smtpmachine: $!"; -} - - -# subroutines -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - $ARGV[$_] =~ /^([\w\-\/ :\.]*)$/ || die "Illegal argument \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-tax-report [-v] [-p] [-e] user\n"; -} - -=head1 NAME - -freeside-tax-report - Prints or emails sales taxes invoiced in a given period. - -=head1 SYNOPSIS - - freeside-tax-report [-v] [-p] [-m] [-e] [-t "title"] [-s date] [-f date] user - -=head1 DESCRIPTION - -Prints or emails sales taxes invoiced in a given period. - --v: Verbose - Prints records to STDOUT. - --p: Print to printer lpr as found in the conf directory. - --m: Email output to user found in the Conf email file. - --e: Print a final form feed to the printer. - --t: supply a title for the top of each page. - --s: starting date for inclusion - --f: final date for inclusion - -user: From the mapsecrets file - see config.html from the base documentation - -=head1 VERSION - -$Id: freeside-tax-report,v 1.4.4.1 2002-09-09 22:57:32 ivan Exp $ - -=head1 BUGS - -Yes..... Use at your own risk. No guarantees or warrantees of any -kind apply to this program. Parts of this program are hacked from -other GNU licensed software created mainly by Ivan Kohler. - -This is released under the GNU Public License. See www.gnu.org -for more information regarding this license. - -=head1 SEE ALSO - -L<FS::cust_main>, config.html from the base documentation - -=head1 AUTHOR - -Jeff Finucane <jeff@cmh.net> - -based on print-batch by Joel Griffiths <griff@aver-computer.com> - -=cut - @@ -23,6 +23,8 @@ FREESIDE_DOCUMENT_ROOT = /var/www/freeside #FREESIDE_DOCUMENT_ROOT = /var/www/htdocs/freeside #suse #FREESIDE_DOCUMENT_ROOT = /srv/www/htdocs/freeside +#apache +#FREESIDE_DOCUMENT_ROOT = /usr/local/apache/htdocs/freeside #deb, redhat, fedora, mandrake, suse, others? INIT_FILE = /etc/init.d/freeside @@ -37,6 +39,8 @@ HTTPD_RESTART = /etc/init.d/apache restart #HTTPD_RESTART = /usr/local/etc/rc.d/apache.sh stop; sleep 1; /usr/local/etc/rc.d/apache.sh start #openbsd #HTTPD_RESTART = kill -TERM `cat /var/www/logs/httpd.pid`; sleep 1; /usr/sbin/httpd -u -DSSL +#apache +#HTTPD_RESTART = /usr/local/apache/bin/apachectl stop; sleep 10; /usr/local/apache/bin/apachectl startssl FREESIDE_RESTART = ${INIT_FILE} restart @@ -53,9 +57,17 @@ QUEUED_USER=fs_queue FREESIDE_PATH = `pwd` SELFSERVICE_USER = fs_selfservice +#never run on the same machine in production!!! SELFSERVICE_MACHINES = localhost +# SELFSERVICE_MACHINES = www.example.com # SELFSERVICE_MACHINES = web1.example.com web2.example.com +#user with sudo access on SELFSERVICE_MACHINES for automated self-service +#installation. +SELFSERVICE_INSTALL_USER = ivan +SELFSERVICE_INSTALL_USERADD = /usr/sbin/useradd +#SELFSERVICE_INSTALL_USERADD = "/usr/sbin/pw useradd" + #--- #not changable yet @@ -147,6 +159,24 @@ install-init: s/%%%SELFSERVICE_MACHINES%%%/${SELFSERVICE_MACHINES}/g;\ " ${INIT_FILE} +install-selfservice: + [ -e ~freeside/.ssh/id_dsa.pub ] || su -c 'ssh-keygen -t dsa' - freeside + for MACHINE in ${SELFSERVICE_MACHINES}; do \ + scp -r fs_selfservice/FS-SelfService ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; perl Makefile.PL && make" ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\ + scp ~freeside/.ssh/id_dsa.pub ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo ${SELFSERVICE_INSTALL_USERADD} freeside; sudo install -D -o freeside -m 600 ./id_dsa.pub ~freeside/.ssh/authorized_keys" ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo install -o freeside -d /usr/local/freeside" ;\ + done + +update-selfservice: + for MACHINE in ${SELFSERVICE_MACHINES}; do \ + rsync -rlptz fs_selfservice/FS-SelfService/ ${SELFSERVICE_INSTALL_USER}@$$MACHINE:FS-SelfService ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; perl Makefile.PL && make" ;\ + ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\ + done + install: install-perl-modules install-docs install-init deploy: install @@ -190,12 +220,13 @@ clean: #these are probably only useful if you're me... -upload-docs: forcehtmlman - ssh pouncequick.420.am rm -rf /var/www/www.sisd.com/freeside/docs - scp -pr httemplate/docs pouncequick.420.am:/var/www/www.sisd.com/freeside/docs +#no more doc uploads from maintenance branch +#upload-docs: forcehtmlman +# ssh pouncequick.420.am rm -rf /var/www/www.sisd.com/freeside/docs +# scp -pr httemplate/docs pouncequick.420.am:/var/www/www.sisd.com/freeside/docs #release: upload-docs update-webdemo -release: upload-docs +release: cd /home/ivan/freeside1.4 #cvs tag ${TAG} cvs tag -F ${TAG} diff --git a/bin/apache.export b/bin/apache.export index f0a6bee..47863a9 100755 --- a/bin/apache.export +++ b/bin/apache.export @@ -51,7 +51,9 @@ foreach my $export ( @exports ) { } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); # warn $rsync->out; - ssh("root\@$machine", 'apachectl graceful'); + my $restart = $export->option('restart') || 'apachectl graceful'; + + ssh("root\@$machine", $restart); } diff --git a/bin/masonize b/bin/masonize index 475c9a6..169ba71 100755 --- a/bin/masonize +++ b/bin/masonize @@ -1,37 +1,43 @@ #!/usr/bin/perl -foreach $file ( split(/\n/, `find . -depth -print | grep cgi\$`) ) { +foreach $file ( split(/\n/, `find . -depth -print`) ) { + next unless $file =~ /(cgi|html)$/; open(F,$file) or die "can't open $file for reading: $!"; @file = <F>; #print "$file ". scalar(@file). "\n"; close $file; - system("chmod u+w $file"); - open(W,">$file") or die "can't open $file for writing: $!"; - select W; $| = 1; select STDOUT; + $newline = ''; #avoid prepending extraneous newlines $all = join('',@file); + $w = ''; + $mode = 'html'; while ( length($all) ) { if ( $mode eq 'html' ) { if ( $all =~ /^(.+?)(<%=?.*)$/s && $1 !~ /<%/s ) { - print W $1; + $w .= $1; $all = $2; next; } elsif ( $all =~ /^<%=(.*)$/s ) { - print W '<%'; + $w .= '<%'; $all = $1; $mode = 'perlv'; #die; next; } elsif ( $all =~ /^<%(.*)$/s ) { - print W "\n"; + $w .= $newline; $newline = "\n"; $all = $1; $mode = 'perlc'; + + #avoid newline prepend fix from borking indented first <% + $w =~ s/\n\s+\z/\n/; + $w .= "\n" if $w =~ /.+\z/; + next; } elsif ( $all !~ /<%/s ) { - print W $all; + $w .= $all; last; } else { warn length($all); die; @@ -41,7 +47,7 @@ foreach $file ( split(/\n/, `find . -depth -print | grep cgi\$`) ) { } elsif ( $mode eq 'perlv' ) { if ( $all =~ /^(.*?%>)(.*)$/s ) { - print W $1; + $w .= $1; $all=$2; $mode = 'html'; next; @@ -51,13 +57,13 @@ foreach $file ( split(/\n/, `find . -depth -print | grep cgi\$`) ) { } elsif ( $mode eq 'perlc' ) { if ( $all =~ /^([^\n]*?)%>(.*)$/s ) { - print W "%$1\n"; + $w .= "%$1\n"; $all=$2; $mode='html'; next; } if ( $all =~ /^([^\n]*)\n(.*)$/s ) { - print W "%$1\n"; + $w .= "%$1\n"; $all=$2; next; } @@ -66,5 +72,9 @@ foreach $file ( split(/\n/, `find . -depth -print | grep cgi\$`) ) { } + system("chmod u+w $file"); + select W; $| = 1; select STDOUT; + open(W,">$file") or die "can't open $file for writing: $!"; + print W $w; close W; } diff --git a/bin/postfix.export b/bin/postfix.export index 64d9738..dbb08ce 100755 --- a/bin/postfix.export +++ b/bin/postfix.export @@ -99,7 +99,7 @@ foreach my $export ( @exports ) { } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); # warn $rsync->out; - ssh("$user\@$machine", "newaliases"); + ssh("$user\@$machine", $export->option('newaliases') || 'newaliases'); # ssh("$user\@$machine", "postfix reload"); $rsync->exec( { @@ -107,8 +107,9 @@ foreach my $export ( @exports ) { dest => "$user\@$machine:". $export->option('virtual'), } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); # warn $rsync->out; - ssh("$user\@$machine", "postmap hash:/etc/postfix/virtual"); - ssh("$user\@$machine", "postfix reload"); + ssh("$user\@$machine", $export->option('postmap') + || 'postmap hash:/etc/postfix/virtual'); + ssh("$user\@$machine", $export->option('reload') || 'postfix reload'); } diff --git a/bin/postfix_courierimap.import b/bin/postfix_courierimap.import new file mode 100755 index 0000000..12c138b --- /dev/null +++ b/bin/postfix_courierimap.import @@ -0,0 +1,137 @@ +#!/usr/bin/perl -Tw + +use strict; +use vars qw(%part_svc %domain_part_svc); +#use Date::Parse; +use DBI; +use Term::Query qw(query); +use FS::UID qw(adminsuidsetup); #datasrc +use FS::Record qw(qsearch qsearchs); +use FS::svc_acct; +use FS::part_svc; +use FS::svc_domain; + +my $user = shift or die &usage; +adminsuidsetup $user; + +#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? + +$FS::svc_Common::noexport_hack = 1; +$FS::svc_domain::whois_hack = 1; + +### + +%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); + +die "No services with svcdb svc_acct!\n" unless %part_svc; + +print "\n\n", &menu_svc, "\n", <<END; +Enter part number to import. +END +my $mailbox_svcpart = &getpart; + +%domain_part_svc = map { $_->svcpart, $_ } + qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); + +die "No services with svcdb svc_domain!\n" unless %domain_part_svc; + +print "\n\n", &menu_domain_svc, "\n", <<END; +Enter part number for domains. +END +my $domain_svcpart = &getdomainpart; + +my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); +my $db_user = &getvalue("\n\nEnter the database user:"); +my $db_pass = &getvalue("\n\nEnter the database password:"); + +sub menu_svc { + ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; +} +sub menu_domain_svc { + ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; +} +sub getpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; + $^W=1; + $return; +} +sub getdomainpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; + $^W=1; + $return; +} +sub getvalue { + my $prompt = shift; + $^W=0; # Term::Query isn't -w-safe + my $return = query $prompt, ''; + $^W=1; + $return; +} + +print "\n\n"; + +### + +my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) + or die $DBI::errstr; + +my $sth = $dbh->prepare('SELECT username, password, crypt, name, domain FROM mailbox') + or die $dbh->errstr; +$sth->execute or die $sth->errstr; + +my $row; +while ( defined ( $row = $sth->fetchrow_arrayref ) ) { + my( $r_username, $password, $crypt, $finger, $r_domain ) = @$row; + + my( $username, $domain ); + if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { + $username = $1; + $domain = $2; + } else { + $username = $r_username; + $domain = $r_domain; + } + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { + 'domain' => $domain, + 'svcpart' => $domain_svcpart, + 'action' => 'N', + }; + unless ( $svc_domain->svcnum ) { + my $error = $svc_domain->insert; + if ( $error ) { + die "can't insert domain $domain: $error\n"; + } + } + + $password = $crypt if $password eq '*CRYPTED*'; + + $finger =~ s/Outdoor Power.*$/Outdoor Power/; + + my $svc_acct = new FS::svc_acct { + 'svcpart' => $mailbox_svcpart, + 'username' => $username, + 'domsvc' => $svc_domain->svcnum, + '_password' => $password, + 'finger' => $finger, + }; + + my $error = $svc_acct->insert; + #my $error = $svc_acct->check; + if ( $error ) { + if ( $error =~ /duplicate/i ) { + warn "$r_username / $r_domain: $error"; + } else { + die "$r_username / $r_domain: $error"; + } + } + +} + +sub usage { + die "Usage:\n\n postfix_courierimap.import user\n"; +} + + diff --git a/bin/sendmail.import b/bin/sendmail.import index 8a9de9f..a55616d 100644 --- a/bin/sendmail.import +++ b/bin/sendmail.import @@ -28,7 +28,7 @@ $forward_svcpart = 4; use vars qw($spooldir); $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/sendmail"; -mkdir $spooldir unless -d $spooldir; +mkdir($spooldir, 0755) unless -d $spooldir; print "\n\n", <<END; Enter the location and name of your Sendmail aliases file, for example @@ -39,7 +39,7 @@ my($aliases)=&getvalue(":"); use vars qw($aliases_machine $aliases_prefix); $aliases_machine = (split(/:/, $aliases))[0]; $aliases_prefix = "$spooldir/$aliases_machine"; -mkdir $aliases_prefix unless -d $aliases_prefix; +mkdir($aliases_prefix, 0755) unless -d $aliases_prefix; #iscp("root\@$aliases","$aliases_prefix/aliases.import"); iscp("ivan\@$aliases","$aliases_prefix/aliases.import"); @@ -53,8 +53,8 @@ my($virtusertable)=&getvalue(":"); use vars qw($virtusertable_machine $virtusertable_prefix); $virtusertable_machine = (split(/:/, $virtusertable))[0]; $virtusertable_prefix = "$spooldir/$virtusertable_machine"; -mkdir $virtusertable_prefix unless -d $virtusertable_prefix; -mkdir "$virtusertable_prefix/virtusertable.import" +mkdir($virtusertable_prefix, 0755) unless -d $virtusertable_prefix; +mkdir("$virtusertable_prefix/virtusertable.import", 0755) unless -d "$virtusertable_prefix/virtusertable.import"; #iscp("root\@$virtusertable/*","$aliases_prefix/virtusertable.import/"); diff --git a/bin/sqlradius.import b/bin/sqlradius.import new file mode 100644 index 0000000..e75f65b --- /dev/null +++ b/bin/sqlradius.import @@ -0,0 +1,152 @@ +#!/usr/bin/perl -Tw + +use strict; +use vars qw(%part_svc %domain_part_svc); +#use Date::Parse; +use DBI; +use Term::Query qw(query); +use FS::UID qw(adminsuidsetup); #datasrc +use FS::Record qw(qsearch qsearchs); +use FS::svc_acct; +use FS::part_svc; +use FS::svc_domain; + +my $user = shift or die &usage; +adminsuidsetup $user; + +#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? + +$FS::svc_Common::noexport_hack = 1; +$FS::svc_domain::whois_hack = 1; + +### + +%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); + +die "No services with svcdb svc_acct!\n" unless %part_svc; + +print "\n\n", &menu_svc, "\n", <<END; +Enter part number to import. +END +my $sqlradius_svcpart = &getpart; + +%domain_part_svc = map { $_->svcpart, $_ } + qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); + +die "No services with svcdb svc_domain!\n" unless %domain_part_svc; + +print "\n\n", &menu_domain_svc, "\n", <<END; +Enter part number for domains. +END +my $domain_svcpart = &getdomainpart; + +my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); +my $db_user = &getvalue("\n\nEnter the database user:"); +my $db_pass = &getvalue("\n\nEnter the database password:"); + +sub menu_svc { + ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; +} +sub menu_domain_svc { + ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; +} +sub getpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; + $^W=1; + $return; +} +sub getdomainpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; + $^W=1; + $return; +} +sub getvalue { + my $prompt = shift; + $^W=0; # Term::Query isn't -w-safe + my $return = query $prompt, ''; + $^W=1; + $return; +} + +print "\n\n"; + +### + +my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) + or die $DBI::errstr; + +my $sth = $dbh->prepare('SELECT DISTINCT UserName, Realm FROM radcheck') + or die $dbh->errstr; +$sth->execute or die $sth->errstr; + +my $row; +while ( defined ( $row = $sth->fetchrow_arrayref ) ) { + my( $r_username, $realm ) = @$row; + + my( $username, $domain ); + if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { + $username = $1; + $domain = $2; + } else { + $username = $r_username; + $domain = $realm; + } + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { + 'domain' => $domain, + 'svcpart' => $domain_svcpart, + 'action' => 'N', + }; + unless ( $svc_domain->svcnum ) { + my $error = $svc_domain->insert; + if ( $error ) { + die "can't insert domain $domain: $error\n"; + } + } + + my( $password, $finger, $group ) = ( '', '', '' ); + + my $rc_sth = $dbh->prepare( + 'SELECT Attribute, Value, Name, GroupName'. + ' FROM radcheck'. + ' WHERE UserName = ? and Realm = ?' + ) or die $dbh->errstr; + $rc_sth->execute($r_username, $realm) or die $rc_sth->errstr; + + foreach my $rc_row ( @{$rc_sth->fetchall_arrayref} ) { + my($attribute, $value, $name, $groupname) = @$rc_row; + if ( $attribute =~ /^((User|Crypt)-)?Password$/ ) { + $password = $value; + $finger = $name; + $group = $groupname; + } else { + #handle other params! + } + } + + my $svc_acct = new FS::svc_acct { + 'svcpart' => $sqlradius_svcpart, + 'username' => $username, + 'domsvc' => $svc_domain->svcnum, + '_password' => $password, + 'finger' => $finger, + }; + + my $error = $svc_acct->insert; + #my $error = $svc_acct->check; + if ( $error ) { + if ( $error =~ /duplicate/i ) { + warn "$r_username / $realm: $error"; + } else { + die "$r_username / $realm: $error"; + } + } + +} + +sub usage { + die "Usage:\n\n sqlradius.import user\n"; +} + diff --git a/bin/sqlradius.reimport b/bin/sqlradius.reimport new file mode 100755 index 0000000..89eb801 --- /dev/null +++ b/bin/sqlradius.reimport @@ -0,0 +1,156 @@ +#!/usr/bin/perl -Tw + +use strict; +use vars qw(%part_svc %domain_part_svc); +#use Date::Parse; +use DBI; +use Term::Query qw(query); +use FS::UID qw(adminsuidsetup); #datasrc +use FS::Record qw(qsearch qsearchs); +use FS::svc_acct; +use FS::part_svc; +use FS::svc_domain; + +my $user = shift or die &usage; +adminsuidsetup $user; + +#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? + +$FS::svc_Common::noexport_hack = 1; +$FS::svc_domain::whois_hack = 1; + +### + +%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); + +die "No services with svcdb svc_acct!\n" unless %part_svc; + +print "\n\n", &menu_svc, "\n", <<END; +Enter part number to import. +END +my $sqlradius_svcpart = &getpart; + +%domain_part_svc = map { $_->svcpart, $_ } + qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); + +die "No services with svcdb svc_domain!\n" unless %domain_part_svc; + +print "\n\n", &menu_domain_svc, "\n", <<END; +Enter part number for domains. +END +my $domain_svcpart = &getdomainpart; + +my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); +my $db_user = &getvalue("\n\nEnter the database user:"); +my $db_pass = &getvalue("\n\nEnter the database password:"); + +sub menu_svc { + ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; +} +sub menu_domain_svc { + ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; +} +sub getpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; + $^W=1; + $return; +} +sub getdomainpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; + $^W=1; + $return; +} +sub getvalue { + my $prompt = shift; + $^W=0; # Term::Query isn't -w-safe + my $return = query $prompt, ''; + $^W=1; + $return; +} + +print "\n\n"; + +### + +my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) + or die $DBI::errstr; + +my $sth = $dbh->prepare('SELECT DISTINCT UserName, Realm FROM radcheck') + or die $dbh->errstr; +$sth->execute or die $sth->errstr; + +my $row; +while ( defined ( $row = $sth->fetchrow_arrayref ) ) { + my( $r_username, $realm ) = @$row; + + my( $username, $domain ); + if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { + $username = $1; + $domain = $2; + } else { + $username = $r_username; + $domain = $realm; + } + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { + 'domain' => $domain, + 'svcpart' => $domain_svcpart, + 'action' => 'N', + }; + unless ( $svc_domain->svcnum ) { + die "new domain? wtf"; + my $error = $svc_domain->insert; + if ( $error ) { + die "can't insert domain $domain: $error\n"; + } + } + + my( $password, $finger, $group ) = ( '', '', '' ); + + my $rc_sth = $dbh->prepare( + 'SELECT Attribute, Value, Name, GroupName'. + ' FROM radcheck'. + ' WHERE UserName = ? and Realm = ?' + ) or die $dbh->errstr; + $rc_sth->execute($r_username, $realm) or die $rc_sth->errstr; + + foreach my $rc_row ( @{$rc_sth->fetchall_arrayref} ) { + my($attribute, $value, $name, $groupname) = @$rc_row; + if ( $attribute =~ /^(Crypt-)?Password$/ ) { + $password = $value; + $finger = $name; + $group = $groupname; + } else { + #handle other params! + } + } + + my @svc_acct = grep { $_->cust_svc->svcpart == $sqlradius_svcpart } + qsearch('svc_acct', { 'username' => $username, + 'domsvc' => $svc_domain->svcnum, } ); + + print "$r_username / $realm: $password / $finger: "; + if ( scalar(@svc_acct) == 0 ) { + print "not found\n"; + next; + } elsif ( scalar(@svc_acct) > 1 ) { + print "multiple matches found?!?!\n"; + next; + } else { + print "correcting password and name\n"; + } + + my $svc_acct = $svc_acct[0]; + my $new = new FS::svc_acct { $svc_acct->hash, '_password' => $password, 'finger' => $finger }; + my $error = $new->replace($svc_acct); + #my $error = $new->check; + die "$r_username / $realm: $error" if $error; + +} + +sub usage { + die "Usage:\n\n sqlradius.import user\n"; +} + diff --git a/conf/alerter_template b/conf/alerter_template index 4d8a012..5177e4e 100644 --- a/conf/alerter_template +++ b/conf/alerter_template @@ -1,8 +1,8 @@ Ivan Kohler -1339 Hayes St. -San Francisco, CA 94117 +12345 Test Lane +Truckee, CA 96161 { $first; } { $last; }: diff --git a/conf/invoice_latexfooter b/conf/invoice_latexfooter index 110b1e6..ee5d7e9 100644 --- a/conf/invoice_latexfooter +++ b/conf/invoice_latexfooter @@ -1,5 +1,5 @@ Ivan Kohler\\ -P.O. Box 1272\\ -Carnelian Bay, CA~~96140\\ +12345 Test Lane\\ +Truckee, CA~~96161\\ ivan@sisd.com~~~~+1 415 462 1624\\ Freeside - open-source billing - http://www.sisd.com/freeside\\ diff --git a/conf/invoice_latexnotes b/conf/invoice_latexnotes index dfd2fc2..46af6d6 100644 --- a/conf/invoice_latexnotes +++ b/conf/invoice_latexnotes @@ -3,7 +3,6 @@ %% \section*{\textsc{Notes}} \begin{enumerate} -\item PLEASE NOTE NEW ADDRESS! \item Please make your check payable to \textbf{Ivan Kohler}. \item If you have any questions please email or telephone. \end{enumerate} diff --git a/conf/invoice_template b/conf/invoice_template index e226d63..4b2c64b 100644 --- a/conf/invoice_template +++ b/conf/invoice_template @@ -4,8 +4,8 @@ Ivan Kohler -1339 Hayes St. -San Francisco, CA 94117 +12345 Test Lane +Truckee, CA 96161 { $address[0]; } diff --git a/conf/logo.eps b/conf/logo.eps index 8eb14e8..8091b03 100644 --- a/conf/logo.eps +++ b/conf/logo.eps @@ -1,1267 +1,13503 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.15 by Peter Kirchgessner -%%Title: /home/ivan/freeside/httemplate/images/mid-logo2.eps -%%CreationDate: Sun Oct 12 23:47:59 2003 -%%DocumentData: Clean7Bit +%!PS-Adobe-2.0 EPSF-2.0 +%%BoundingBox: 261 345 419 447 +%%HiResBoundingBox: 261.500000 345.500000 418.500000 446.500000 +%%Creator: xpdf/pdftops 3.00 %%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 140 157 +%%DocumentMedia: plain 612 792 0 () () %%EndComments -%%BeginPreview: 255 256 1 256 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000e04000000000000000000000000000000000000000 -% 0000000000000000000000c0e000000000000000000000000000000000000000 -% 0000000000000000000060604000000000000000000000000000000000000000 -% 0000000000000000000070e00000000000000000000000000000000000000000 -% 0000000000000000000020600008000000000000000000000000000000000000 -% 000000000000000000000060c03e03c000000000000000000000000000000000 -% 000000000000000000000060e07f07e040000000000000000000000000000000 -% 000000000000000000003060606306707e000000000000000000000000000000 -% 000000000000000000007830606306307f000006000000000000000000000000 -% 000000000000000000f8183060600c7063000002000000000000000000000000 -% 000000000000000001dc183060600e3063000000000000000000000000000000 -% 0000000000000000018c183070600c7063000050000000000000000000000000 -% 0000000000000000018c1c3060600c30c3000018000000000000000000000000 -% 000000000000000001800c1830600c60e700001c000000000000000000000000 -% 000000000000000001800c3830600c60c3000018000040000000000000000000 -% 000000000000000001c00c1870600c60c6000058300030000000000000000000 -% 000000000000000000c10e1830600c61c6000070340070000000000000000000 -% 000000000000000000ef0c1830600c61860000703f0060000000000000000000 -% 00000000000000000075061c30601c618e0000e06381f0000000000000000000 -% 00000000000000000043861830638c618c0001e06301f0000000000000000000 -% 00000000000000000001870c30631c618c000180c30380000000000000000000 -% 00000000000000000001820c30770ce38c000180c70300000000000000000000 -% 00000000000000000001c30c303e0fc30c000301860600000000000000000000 -% 00000000000000000000c30c1c1c0f831c0003038e0e00000000000000000000 -% 00000000000000000038c39e60000007180007030c0c00000000000000000000 -% 00000000000000000019c340000000011c0006031c1c0d000000000000000000 -% 0000000000000000001f8400000000000400060618181f000000000000000000 -% 0000000000000000000000000000000000000c0e307071c00000000000000000 -% 0000000000000000000000000000000000002c1c306061800000000000000000 -% 0000000000000000000000000000000000001c1860e0e3800000000000000000 -% 000000000000000000000000000000000000025860c1c3060000000000000000 -% 00000000000000000000000000000000000000f8c1c387020000000000000000 -% 0000000000000000000000000000000000000011c383ee07c000000000000000 -% 000000000000000000000000000000000000000183077c0fc000000000000000 -% 0000000000000000000000000000000000000001870e781ce000000000000000 -% 000000000000000000000000000000000000000006180070c000000000000000 -% 000000000000000000000000000000000000000007380060c000000000000000 -% 0000000000000000000000000000000000000000023000c0c000000000000000 -% 0000000000000000000000000000000000000000003101c00700000000000000 -% 0000000000000000000000000000000000000000003b83800fc0000000000000 -% 0000000000000000000000000008200000000000003f07001dc0000000000000 -% 0000000000000000000000017fffffd000000000000e0e0008c0000000000000 -% 00000000000000000000003fd5b5aabf4000000000001c0000c0000000000000 -% 0000000000000000000005eabf6f7feaf40000000000380041c0000000000000 -% 00000000000000000001ff5feadad55fafe0000000006003ff00000000000000 -% 0000000000000000000f55f55fbfbff57aba00000000200f1e00000000000000 -% 00000000000000000035ff5ff56aeaafd7ee80000000000e1c01800000000000 -% 000000000000000000ef55f55fdfbffabd5ba0000000003c380be00000000000 -% 000000000000000003baff5ff5756aafebf6e00000000038701f600000000000 -% 00000000000000000eefaaf55fdfdffabeadbc0000000070e03c700000000000 -% 00000000000000003bbaffaf40257557ebfbee0000000061c070300c00000000 -% 0000000000000000eeefaad00000affd5eaebba00000007381e0601c00000000 -% 0000000000000001bbbafd0000001aabf5fbeee00000003f0380e03c00000000 -% 00000000000000076eef4000000003feaf56bbbc0000000c0e0001f000000000 -% 0000000000000006dbba0000000000abfafdeeeb000000043c00079800000000 -% 0000000000000007b6e80000000000feafab5bbe8000000470000f1000000000 -% 00000000000000057d80000000000055fafef6eb8000000060003c0000000000 -% 00000000000001c3d74000000000007f57abadbee0000000e000780000000000 -% 0000000000000176bd00000000000055fd7efb6bb0000000c200e00380000000 -% 00000000000001ddea0000000000007f57d5aefee80000007e03c02380000000 -% 00000000000061775000000000000055fd7f7babbc0000003e1f803000000000 -% 000000000000bbdde00000000000007f57d5d6feea000000203e007000000000 -% 0000000000036d7600000000000001d5fd7f7dabbf80000001e007c000000000 -% 000000000005dbdc000000000000077f57d5d77eea80000001c00f0000000000 -% 00000000000f76b00000000000501ad5fd7f7dd5bfe0000003003c0200000000 -% 000000000015dde0000000017ffff7bf57d5d77f6ab000000300f80200000000 -% 00000000003f774000000017d5555d6afd7f7dd5dfe800000301e00700000000 -% 000000000055dd000000007d7ffff7dfabd5d77f75580000000f801e00000000 -% 00000000007f7400000001d7d5555d757ebf7dd5dff4000000be007800000000 -% 0000000000d5d8000000077d7ffff7dfd5ead77f755e000000fc00f000000000 -% 0000000001bf400000000dd7d5555d757f5fbdd5dff50000006003c1c0000000 -% 00000000036800000000377d7ffff7dfd5f56b7f755f800000201e3f20000000 -% 0000000006d0000060005dd7d5555d757f5fded5dff5400000003bf800000000 -% 0000000005000001c000777d7ffff7dfd5f575bf755fc0000000ffc000000000 -% 0000000000000002a000add7d5555d757f5fdf6adff560000001fe0000000000 -% 0000000000000007c000fb7d7ffff7dfd5f575dfb55fd0000007f000e0000000 -% 000000000000000d6000aed7d5555d757f5fdf756ff57000000b8007f8000000 -% 000000000000001bc001fbbd7ffff7dfd5f575dfdaafd8000000001fb8000000 -% 000000000000002eb00156ebd5555d757f5fdf7577fab400000000fc18000000 -% 000000000000003be001fdbebffff7dfd5f575dfdd57ec00000007f018000000 -% 000000000000006eb001576beaaaad757f5fdf7577fd5e0000003c31f0000000 -% 00000000000000dbe001fddebffffbdfd5f575dfdd57f5000000701fc0000000 -% 00000000000000f6a001ab75eaaaaeb57f5fdf7577fd5f000000601f00000000 -% 00000000000001adc0017edf5ffffbefd5f575dfdd57f5800000601800000000 -% 00000000000001fb4001d5b5f55556babf5fdf7577fd5f4000007e0000000000 -% 00000000000003578000bf7f5ffffdefeaf575dfdd57f58000003e0000000000 -% 00000000000002fd0000ead5f555575abfafdf7577fd5f600000140000000000 -% 00000002000003ab80005fbf5ffffdf7eafab5dfdd57f5c00000000000000000 -% 00000004000002fe0000156af555575d5fafef7577fd5f600000000000000000 -% 00000004000007ab00000fdfaffffdf7f57abadfdd57f5d00000000000000000 -% 000000040000057e000002b57aaaab5d5fd7efb577fd5f700000000000000000 -% 0000000c000007d5000001efd7fffef7f57d5aefdd57f5d80000000000000000 -% 0000000a000002be0000003abd5555ad5fd7f7bab7fd5f700000000000000000 -% 0000000c000007ea00000017ebffff7bf57d5d6fed57f5d80000000000000000 -% 8000001a0000055c000000055eaaaad6afd7f7dabbfd5f740000000000000000 -% 00000014000007f400000000f5ffffbdfabd5d77eeabf5dc0000000000000000 -% 8000001e000002ac000000001f55556b57ebf7dd5bfeaf740000000000000000 -% 00000034000007f800000000003fffdefd5ead77f6abfade00000020ffe00000 -% 8000003e000002a8000000000002aab5abf5fbdd5dfeafb4000000e0e0700000 -% 0000006b000001e00000000000017fef7eaf56b7f755faee000001f0c0300000 -% 8000005e000000400000000000002abad5fafded5dff57ba0000018060f00000 -% 00000075800000000000000000001fefbf57ab5bf755fd6e00000380e1e00000 -% 8000005f00000000000000000000155aeafd7ef6adff57db00000185e1c00000 -% 000000f5800000000000000000001ff7bfabd5affb55fd76000001ffe0000000 -% 0000005f40000000000000000000355d6afebf7aaeff57dd000000fe00000000 -% 800000f5c00000000000000000005ff7dfabead7fbaafd770000000000000000 -% 800000af70000000000000000000155d757ebfbd56ffabdd0000000049c00000 -% 000001fad000000000000000000007f7dfd5eaebfdaafeb70000003ffff80000 -% 800000afb800000000000000000002ad757f5fbeab7fabed0000007ffd580000 -% 000001faec00000000000000000001fbdfd5f56bfed57ebb800000e000180000 -% 80000157ba0000000000000000000056b57f5fdeabbfd5ee800000c000180000 -% 000001fd6f000000000000000000003defd5f575feeabf5b800000c000b80000 -% 80000157da800000000000000000000b5abf5fdf55bfeaf6800000f6fff00000 -% 000001fd77e00000000000000000000ef7eaf575ff6abfad8000007fffe00000 -% 80000157dd5000000000000000000003ad5fafdf55dfeafb0000001400000000 -% 000001fd77fe000000000000000000007bf57ab5ff755fae8000000000000000 -% 800001abdd55800000000000000000002eafd7ef55dff57b8000000003000000 -% 000001feb7fff80000000000000000001bfabd5aff755fd6800000d2ab000000 -% 80000155ed555780000000000000000006afebf7aadff57d800000ffffffe000 -% 000001ff5bfffd7fffffff400000000003fabead7fb55fd7000000fffffff000 -% 800001aaf6aaabdab6d555ffa00000000157ebfbd56ff57d8000000003047800 -% 000001ffaffffeb7edbfff56d400000001fd5eaebfdaafd70000000003001800 -% 800001557aaaabed5beaaafdbd0000000057f5fbeabffabd8000000007003800 -% 000001ffd7fffebbf6bfffab6be00000007d5f56bfeaafeb000000000000f000 -% 800001aabd5555eeafeaaafefebc00000017f5fdeabffabe8000000000008000 -% 000001ffebffff5bfabfffababeb0000001d5f575feaafeb0000007a00000000 -% 800001555eaaaaf6afeaaafefebfc0000017f5fdf55ffabe800000ffff000000 -% 000001fff5ffffadfabfffababeaa000000d5f575ff557eb000001d5ffffd000 -% 800001555f55557b57eaaafefebff000000bf5fdf55ffd5e0000008004fff000 -% 000000fff5ffffd7fd5fffababeaa800000eaf575ff557f5000000000003a000 -% 800001aaaf55557d57f5557efebffc000005fafdf55ffd5e0000000000010000 -% 000000fffaffffd7fd5fffd5abeaaa00000757ab5ff557f50000005000018000 -% 800000aaafaaaabd57f5557f7ebffe000005fd7ef55ffd5e000001ff00000000 -% 000000fffaffffebfd5fffd5d5eaab80000757d5aff557f400000381ffd00000 -% 8000005557aaaabeabf5557f7f5ffe800005fd7f7aaffd5c000001800ff00000 -% 0000007ffd7fffebfeafffd5d5f55580000757d5d7faabf40000018000500000 -% 8000005557d5555eabfaaabf7f5fff400005fd7f7d57feac000003fe00000000 -% 0000007ffd7ffff5feafffead5f555c00006abd5d7fd55f8000003bfe0000000 -% 8000002aabd5555f55faaabfbf5fff600005febf7d57ff5400000705ff000000 -% 0000003ffebffff5ff57ffeaeaf555c0000755ead7fd55f8000002003f000000 -% 8000002aabeaaaaf55fd555fbfafff600005ff5fbd57ff500000070001000000 -% 0000001ffebffffaff57fff56afaaac0000f55e02bfd55f0000005ff80000000 -% 8000001555eaaaafaafd555fdfafffa00005ff001eabff500000001ffc000000 -% 0000000fff5ffffaffabfff5757aaae0000f54000bfeaae000000000ffc00000 -% 8000000d55f55557aafeaaafdfd7ffa0000afe000eabffa00000000005c00000 -% 0000000bff5ffffd7fabfffab57d5560001fa80005feaac000000f0000800000 -% 80000006aaf55557d57eaaafefd7ffc0001578000755ff8000001fe000000000 -% 00000005ffaffffd7fd5fffababd5560001fd00002ff5540000038fc00000000 -% 80000003557aaaabd57f5557efebffc00015700003aaff800000303e00000000 -% 00000002ffd7fffebfd5fffd5abeaaa0003fc000037faa000000180610000000 -% 80000001aabd5555eabf5557f7ebffc0002aa00003d57e0000007f871e000000 -% 00000000ffebffff5feafffd5d5eaa80007fe01e02bfd400000043fe06000000 -% 80000000555eaaaaf55faaabf7f5ff800055407407eabc000000007e06000000 -% 000000007ff5fff7aff57ffead5f550000ffc05f055fe8000000801fce000000 -% 800000002aaf5542faafd555fbf5ff0000aaa07507f558000000e003fc000000 -% 000000003ffaffe1affabfff56af550001ffc05f055ff0000001f00078000000 -% 800000001557aaa17aafeaaafdfafe00015560750ff5500000017e0000000000 -% 000000000ffd7fc0d7fabfffab57a80003ffc01a0aafe00000000f8000000000 -% 800000000aabd5607d57eaaafefd7c0002aaa0101ffaa000000003e000000000 -% 0000000003febfd00bfd5fffababd00007ffe0002aaf80000000003f00000000 -% 800000000155eab00eabf5557efeb0000d5550003ffa00000000000fd0000000 -% 0000000001ff5fe805feafffd5abe0000bfff8006aae000000000001e0000000 -% 800000000055f5580355faaabf7e80001eaaac00dffa0000001f0000c0000000 -% 00000000007f5ff400ff57ffead5c00015fffa0175540000003fc000c0000000 -% 800000000015f55c00aafd555fbf40003f555703dff800000071e00dc0000000 -% 00000000001f5ff6003fabfff56a800055fffdaeb55000000060780f80000000 -% 800000000005f55d800afeaaafdf00007f555775ede0000000603e0600000000 -% 0000000000035ff74007abfffab40000d5fffddf58800000003c0f0000000000 -% 800000000000f55dd0003eaaafe80003bf555775c0000000000038f000000000 -% 0000000000002ff7780015fffaa00002eafffddf400000000000307800000000 -% 800000000000155dd6003f5557800007bfaaab75000000000000781800000000 -% 00000000000007f77da02afffd00000d6afffede0000000000001e1800000000 -% 80000000000000add76dffaaa800001fdfaaabb40000000000000f1800000000 -% 000000000000003b7ddb557ff0000035757ffeec00000000000003f800000000 -% 800000000000000ed777ffd54000006fdfd555b000000000000001f000000000 -% 0000000000000001bddd557fc00000fab57fff60000000000000000000000000 -% 80000000000000002b77ffd5500001afefd55580000000000000000000000000 -% 00000000000000000000017fa0000f7ababffe00000000010000000000000000 -% 800000000000000000000000000015d7efeaa80000000007c000000000000000 -% 00000000000000000000000000003f7d5abff4000000000ff000000000000000 -% 8000000000000000000000000000ead7f7eaa0000000000c3800000000000000 -% 0000000000000000000000000001bfbd5d59c0000000001c3c00000000000000 -% 80000000000000000000000000076aebf7c300000000003e0e00000000000000 -% 000000000000000000000000000ddfbead060000000000070700000000000000 -% 800000000000000000000000007b756bfa0c0000000000038380000000000000 -% 00000000000000000000000001aedfdea010000000000181c1e0000000000000 -% 8000000000000000000000005f7bb5700000000000000770387c000000000000 -% 000000000000000000000000f5d6ee8000000000000006383c1c000000000000 -% 800000000000000000000001af7da800000000000000061c0c0e000000000000 -% 0000000000000000000000037ad50000000000000000070e0f0e000000000000 -% 800000000000000000000001550000000000000000000306039e000000000000 -% 00000000000000000000000000000000000000000003c00381fc000000000000 -% 80000000000000000000000000000000000000000007e00780f4000000000000 -% 00000000000000000000000000000000000000000006700fe038000000000000 -% 800000000000000000000000000000000000001f80060038381f000000000000 -% 0000000000000000000000000000000000000019c0c7001c3803800000000000 -% 8000000000000000000000000000000000000038c183000e1801e00000000000 -% 0000000000000000000000000000000000000018078383070c00c00000000000 -% 800000000000000000000000000000000000001c00c1cf839c00000000000000 -% 000000000000000000000000000000000000001c40e0ff81f800000000000000 -% 800000000000000000000000000000000000000df06078c0f000000000000000 -% 0000000000000000000000000000000000000007f87060e00000000000000000 -% 80000000000000000000000000000000000000079c3800700000000000000000 -% 00000000000000000000000000000000000003838e0c02300000000000000000 -% 8000000000000000000000000000000000001181860e06300000000000000000 -% 000000000000000000000000000000000000f1e1c70607f00000000000000000 -% 80000000000000000000000000000000000030e0c30703e00000000000000000 -% 00000000000000000000000000000000000038e0e38300000000000000000000 -% 80000000000000000000000000000000000018f0618180000000000000000000 -% 000000000000000000000000000000000000187030c1c0000000000000000000 -% 8000000000000000000000000000000000000c7838e0e0000000000000000000 -% 0000000000000000000000000000000000000c1838e070000000000000000000 -% 800000000000000000000000000000000000061c0c3000000000000000000000 -% 000000000000000000000000000000000000070c0e3000000000000000000000 -% 800000000000000000000000000000000000030e06300c000000000000000000 -% 000000000000000000000000000000000000030607f01c000000000000000000 -% 800000000000000000000000000000000000038603e004000000000000000000 -% 0000000000000000000000000000000000000183028000000000000000000000 -% 80000000000000000000000000000000000001e3040000000000000000000000 -% 00000000000000000000000000000000000000e3800000000000000000000000 -% 80000000000000000000000000000000000000f7a00000000000000000000000 -% 0000000000000000000000000000000000000018000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -% 8000000000000000000000000000000000000000000000000000000000000000 -% 0000000000000000000000000000000000000000000000000000000000000000 -%%EndPreview +% EPSF created by ps2eps 1.54 %%BeginProlog -% Use own dictionary to avoid conflicts -10 dict begin +save +countdictstack +mark +newpath +/showpage {} def +/setpagedevice {pop} def %%EndProlog -%%Page: 1 1 -% Translate for offset -14.173228346456694 14.173228346456694 translate -% Translate to begin of first scanline -0 142.49763779527561 translate -124.99792789059263 -142.49763779527561 scale -% Image geometry -250 285 8 -% Transformation matrix -[ 250 0 0 285 0 0 ] -% Strings to hold RGB-samples per scanline -/rstr 250 string def -/gstr 250 string def -/bstr 250 string def -{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} -{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} -{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} -true 3 -%%BeginData: 46454 ASCII Bytes -colorimage -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -XoAOuhVQ9'JcF[.J,~> -XoAOuhVQ9'JcF[.J,~> -XoAOun*f,rJcF[.J,~> -XoAO;@nJ2/r;QiehWKIikl6/~> -XoAOD@o>%?r;QiehX?$qkl6/~> -XoAO\V3HYHr;Qimn*bi-kl6/~> -XoAOe[8IQprVlugN&d,Rs60K5~> -XoAOm[8Ij#rVlugN'`b[s60K5~> -XoAOmesq*#rVluo]o9XUs60K5~> -ZMt!hhWOk;",$qHhZ!NXk=Q"?hLY^ks*t~> -ZMt!hhXCFC",%L`hZ!NXk>DjOhLY^ks*t~> -ZN'pmrVlu-F-Q.mrrheTF,]R=s69Q6~> -Zi:-jCFP5@rr[o[6Jh_A"Rh:0V>#Q@l2Q8~> -Zi:-rCGCeHrr[ok6Jh_A"Rh:9XnRDHl2Q8~> -Zi:-rXb=Cdrr]ZMPjeVO"8BKfc@Q#Zs*t~> -Zi:-a.0rQErr\Js6Iu,8!U&<js6'E4~> -Zi:-a0c3O]rr\Js9%Nt@!Unlrs6'E4~> -Zi:-rKQECVrr]r]Pir#Fs6kO=kPp&~> -Zi:.%HSM&hrr_Eq+gq:K!pB%@qu6iVX_X0Xp\XsnpZL,jpOWAEs*t~> -Zi:.%KJB"qrr_F$.CK-SrpTaa"l?A&Phu03rri)Zf'i?as8W+L~> -Zi:.%[>`-(rr__:He//q!q5mXqu6igcE4eKp\Xsmp[@;6JcG`LJ,~> -Z2Xgmr;Ql^+UFV;rrf06CO=q:rs,r0&-rP%PkY.V#2Y#"+^1-!Jc>`MJ,~> -Z2Xgmr;Ql^.1i$KrrfH>CO=q:rs,r0(`3fNPkY.V#2Y#".9`81Jc>`MJ,~> -Z2Xgur;QlfHZR4+rrgWLXgRWrrrL]@rc8."^%_L*#4JsaH_naVJc>`MJ,~> -X8`:b(^QZ2rrej5#U/('rs)^5+[RU`1$AN8!G`8G#QZ*Frr32sKNc(G^#"YHJ,~> -X8`:j+V:1Crrej5(b+>?rs*$F.7u<31$AN8#'1=m&.g:mrr32sN*<pO`nlUQJ,~> -X8`:jKQG04rrg?DF+j#\rs,'8KTq.2N:6`F!3Q3@!IN,krs&52SC[/[mu%-q~> -Zi:1&]k^NJrr3)p@gIG\rri(m&0]X(rs6mn&=i4&0bBlSrs6Uf#]$8'#W_AQrs-hZ+XmsO>0cO8 -!q5=HU]5i~> -Zi:1&]k^NJrr3)p@h==mrri(u(b+&8rs6n!(nC'70c6G[rs6n!(i-6?&45jbrs-hb.5;Yo>0cO8 -s6fs^U]5i~> -Zi:1&eubIfrr3)pV/s'Drri)AF+i`Urs7e@F2mt2N-iSDrs7J.F03`PF,]kmrs._`KS4]*V<@7G -!r)0XU]5i~> -\c2Zur;Qr`@j)+]n,E=hHO)Xprr3)G3?c]Irs6:T+gq@,3=plCrs5G43S+5,(a8AHrs(Oi#U'`b -6LXCC"Rg\8SG/iZJ,~> -\c2Zur;Qr`@jqt!n,E=hKFg04rr3)G3@W8Qrs6Uf.CK3465Y[\rs5_D6Iu1=+XumYrs(Oq(b$:= -6LXCC"Rh"ASG/iZJ,~> -\c2[(r;QrhV1`odp\t0p[<%;qrr3)`N-jaers72&He/5cN,u]3rs6nsN9C5dH\D.lrs+L(F*i7T -PkXYH"S]<o`qQ;/J,~> -]Di#jV/rKrrVm#`HO)sprr3(I#W_AQrr_+E&=!1o'YP&$[K"fE#_`6XpN$UDn,Kd=+n,C0#<<&M -V1]C'[I=+uefb;kkG8-.~> -]Di#jX`LW5rVm#hHPfB3rr3(R&394Yrr_+M(mP%"'ZLt=[K#)U(khqhpN%0Tn,KdE.I[68#<<>U -Xb7N?[I=+uegVG.n"fu6~> -]Di$&cE5C\rVm#h[<%T$rr3).F,]kmrr__SHbKFY'\7VXf)OotF1)&JpT8M5p]&fkK_PHF#E3__ -cF&"Gf'iVAkCdo@n"fu6~> -]`/24+V4nj+hdjS"18[`^&J$6eds:Urr3)W63qr;rtN-`+gq@MhVRGqs7]\&>5/&]#U/[9rs6"U -+gq?i3=)/DrrhM+3J?jss*t~> -]`/24.1d=5.E;>d"18sp^&J$6eeg-err3)W8f2pSrtNHr.CK3UhVR`$s7]\.A,$"f(b+qQrs6"] -.CK2q3>e:Trrhe33K3F&s*t~> -]`/2UH[Bg\Hf"`$"4hgGf)G[OkBhmFrr3)hP]O83rrpu#He/5srpTme$2:9;V>(#'F+j;ers72& -K\$1[N-!#-rrhemN4nt]s*t~> -^&JB$3=%W\.0s,?rr3)W+X*uerr_+$#c7P#"5Z?MHiF$I]au?pqYplr=pS=+s,74,n,E=mV%>)h -s2I&1SFQU_n,NF^f(Ys>J,~> -^&JB,3=nMm0c4*_rr3)W.4MCurr_+,&?Ys3"5ZWeHiF$I`Y^/4qYplr=qG3<s,7dDn,E=mXV`e4 -s2I&9SFQU_n,NF^hY3fFJ,~> -^&JB,N,sr[KQE[Prr3)hKR;;Lrr__:F3adb"7MIq[Jp1.epDbpqYplrV/r1$s1NK,p\t0uc?"Zq -s5&]U`ps'/p\t0mkG&!,~> -^&JA`&.k]<N!L9&rVlpk#]p"F"4e:pV>gJshEhKprr3)6(`9[WrsAF'#[6]sN!LTqrr37o&5(gZ -c8cH4nc&Z;N7O[%J,~> -^&JA`(`9CTN#3_?rVlps(j#]V"5Y14XoA>&hF\W3rr3)?+X+8irsAF'&7b2/N#4#4rr37o(eWZb -c8c`<nc&ZDN7O[%J,~> -^&JB$F*l44]lSPOrVlq`F1)#I"6Y#PcMmhGn!%n$rr3)OH[F??rsAFrF/AX2]lSl$rr38DH^+"! -kDXK%nc&Zu^#u'gJ,~> -^&JA`&37c1hEiZ]rVm1-#[7!&s6!8cSGrNjkAq2]rr3)6&0\IXrtY93&<-YhN!Lm$s8VOk#\3o7 -V'.#Vnc&^);B^^es*t~> -^&JA`(cfV9hEirerVm1-&7bJ7s6!8kSGrNjmrK=mrr3)?(b)lhrtY93(l\LpN#4;<s8VOt(h<UG -V(!kfnc&^2;CR9ms*t~> -^&JB$F,\uUn!&LFrVm1oF/AX2s6lJ!`r>u?n#^rErr3)OH[F??rtY:)F1qVR]lSl$s8Vh`F/Ap: -`d<C5nc&^JS:n;Ds*t~> -^&JAh+V;?ekG@&(rVm23#VkNBs7^R?3W8saPRqX!s8TbL+gq1H'^&@2[K$8c#[6]ss6!PkHiO,! -#U/^;"7KD!>4;Iln)q+YJ,~> -^&JAh.2]bun#bI8rVm23&394Zs7^jW6N-ojPSe3)s8U(^.CK$P'^&@;[K$8c(g?D.s6j,.HiO,! -&1R,K"7KD)A+0Htn$W1G~> -^&JB$KR;;Mn':CrrVm2TF+j#^s7`pBN;`b_`cJ9Vs8UYsHe/&n'^qQ=f)Pc`F/AX2s6le*[K$97 -F+j&_"8A=,V=4Ebp[>NiJ,~> -^&J60;@%XDq>Uc7#RK;es6k:?1&_+YPRp14s8TbL(q'5?#e_B)^&R8!#`Sc_#gP.9[K#]:#W_DS -"18[GSGrNi]s[>%rrTlL]sdrk~> -^&J60;Ab)]q>Uc7&.m^us6k:G3W8saPSd$Ds8U(^+gq1H#f\;B^&RP)&<-Vg#gP.A[K#]B&45md -"18s_SGrNi`jP:.rrTlT`jYnt~> -^&J3/S9)+5rs@7tF79//pU,'qrVm2;H^*^ns42ODf)#CPhLp7,s6lJ!^&J$;kDXc=s7`X:N:?iL -epDJXrr3&Vf(\k;!nOL1[f:j~> -]`/(L#YORarrDNersI=;#`Sf`pOif,p\t1!S-V.#s8TbD+gq1H#dkfm[K#DM#`Sc_#d"pe^&R7E -#`S9Q"+(;6hZ!NY]i&@kkP+cO"Qu!uF5FG,J,~> -]`/(L(eX8qrrDNersI=;(l\LppP]qDp\t1!S/=93s8U(U.CK$P#dl*)[K#DM&=!1o#dkg)`rG3V -&<-,Y",%LOhZ!NY`_pU'n+ZVW"RhR0F5FG,J,~> -]`/)9F-QFtrrDfmrsIqJF1qVRpUtX,p\t1!`cI+%s8UYsHe/&n#hF?Lf)P2tF1qSQ#gRdDf)P2l -F1q)C"1<3/n,E=iesrT"n+Zhbn%FC^kICPB~> -]`/Mf#RJHMn(+"^n,NFN;@%(;rr]q`+iaN]$'Yu]cN!pX(a6<`rtMja(q'D,0aNa<s7`#p.G"O^ -+UFV.rr^gq#aG;f#3TbN@q12Cq>UTS8dIc/\Gq'~> -]`/Mf(_F^en(+=on,NFV=qGKKrr^7q.E;Ae$'Z8ecN!pa+XshqrtMji+gq@50bBTLs7`$#1"QBf -.2\TFrr^h$(mP"!#4H=^@q1JKq>UTS;A_aG\Gq'~> -]`/N*F*$4<pZKQ0p](9^S9(h3rr_,2Hf"c%$,(\EkPtS5H[F??rtO%2He/5cN,u]4s7aN[K]iC( -KQG0'rr_G2F1qPP#4J[IV5:lgq>UTdP]N)P\Gq'~> -]`/c(63q(t@lY\en,NFVCC!i$s8Tbe&>fC+$+1=)cN!pX(`9[WrtMja(qot40aNa<s6!kt;ZHd: -(a7K#rr\Js.CK-S!PKr]#QbQ0cMIPCV%=3?\,Us~> -]`/c(65X4/CH3gun,NFVCD]t<s8U(n(o@63$+1U:cN!pa+X+8irtMji+hdp=0bBTLs6j_7;ZHdB -+Xu"4rr\c.0t$u[!QHkn&-<\@cMIPCV&1&O\,Us~> -]`/c9P]N\@Xc.Ucp](9fX`L$$s8Ur7HcH'b$.aH^kPtS5H[F??rtO%2He/5cN,u]4s6le*SH&WG -H\CSPrr^8fK\$,%!T&M/Erp]QkPG2\`d<'X\,Us~> -]`/<,@gE>O#S77IXoA>,S.Hjps8UY1&=ib"$25St`rH(P&0\IXrtMja.F.tV0aO$Ds6j+sA,lRf -#Vk3,rrh1^#\3?&rs8@/#S:K]+UF&(rrgn5#YNCOs*t~> -]`/'%CCpI^!tZ:\[Jp14V&1Z4s8UY:(nCU*$25l'`rH(Y(b)lhrtMji1!]g^3=q_\s6j,.A,lRf -(bsn<rrh1^(i/U>rs8@7(`6au.1hI8rrgn5(eW)_s*t~> -]`/-/V/p^)rGqtarr3;EH\CS^s6#>f`r>uEpOnL^s8UYsHe/&n'\7VikPt"0F2n7[pSDr-s8TcR -N:6?;"Rhk%V>'uh#kt0:H_mikF1qJN"Qt_bPioOUJ,~> -]Di/$&0Wc3HU8!Zrr3)6.3ZD(rrZa:CZk]s,U!_hs8TbL+gq@Metp[ls-+'es8Uq)+jU,fhDkk< -s8REO;Xa2V"18[OSGiHohDkj_n*b<';WmuX!,MQ>!CFf9s*t~> -]Di/,(b%1CKL-Msrr3)60e'g8rr[$RC[_9&,UjS#s8U(^.CK3Uetp[ls-sous8Uq1.F.tnhEhdU -s8R`h;Xa2V"18s_SGiHohDlF"n*b</;WmuX"`kLl&44[Ps*t~> -]Di/VF+fLB[?Pa?rr3)OKS7qUrr]*=Xmc8hs*Gs0s8UYsHe/5skJl]bs2KDMs8VP@HftG/mu2>5 -s8TKJSG2US"4hgG`r5oDmu2=qp\1e2SF?CU!3Q6A!L2HNs*t~> -]DiDeHaUlVpOif,n,NFN63rPLrrZa:;Wn&Z,9[>Os8TbD+gq@MN"C[BmpcVqs8So,+m8n*c3O]q -s7\hcN:QuOpNm04kPbDePR&_ps6j+s>4;Fi#0nA/;A^Rb\Gq'~> -]DiDeHaUl^pOj)4n,NFN8f3NdrrZaJ;XaVb,:O1_s8U(U.CK3UN#7NRmqWb<s8T2<.Hga2c4Ci4 -s7]+sN:QuOpNm`Dn,<7mS.IF3s6jG7A+0Br#0nY@;B[Ks\Gq'~> -]DiE)[FX4's0Zp,p](9^P]OP;rr]*=SF?IW,D:-Os8UYsHe/5s]mIHmpSDqqs8UAkK^\s@kAt_$ -s7_b!^%21+pU,(,n,<7m`cHh%s7`%)V>'rg#3U>[S9oq?\Gq'~> -])Md)rVm2;.3Z_2s6!8cF8l1ACC!i$rr42d#`SNXs%3i]n(pABK`CLN#YP-sPR&Gqs8Tb<1#Drn -+UF>'rr_FN#]otE$/Ru[K_PM[+UF>2rs%=X#YNt1[C?0d~> -])Md)rVm2D0e(-Bs6ii&F8l1AEu7g<rr42l&<-A`s%4,en(pYRN;r?^&5*!&S.I.4s8U(M1#Ds! -.1ha7rr_FV&:=BU$/S8cK_PM[.2\<Jrs%=X(eWZA[C?0d~> -])Md)rVm2\KS84^s6lJ!XoA>&X`L$$rr43iF1q>Js-.lDp[=>f^&Ri'F-Q_)`cHLqs8UYkN:6f8 -KQFitrr__SF1(uH$1F+"[J0^PKQG03rs%q^F-Q.^f!k[0~> -[Jp?[64f+Trs=o$;VqHR]b!3Lrr3$C#`Sc_*Ff@8P_:1kPlLK:&37bn=pR.Os8QR7>4;LJ+X*uY -rr])'+jU&d$'Yu]cN!'C#X[,@rr\c&+f2RGJ,~> -[Jp?[8f3Ndrs=o$;VqHR`Y^_]rr3$K&<-Vg*FfXIP`.%.SH&>B(cfn1@h:Zhs8QjGA+0HS.4MCi -rr])7.F.nl$'Z8ef)P2S(dcgPrr\c..BTuWJ,~> -[Jp?lP]OP;rs?AcSF?LXhKt4Err3%HF1qSQ*Mmh9]tK)G`rH(PF,\uEV/qUas8T3BSG3'PH[F?7 -rr^8^K]i=6$,(\EkPt"QF-Pkdrr^8fK[-t)J,~> -[Jpg4=pS<ps8ST#0uj7nc57,#rr3%'#`Sc_*OQFa&.f+WhZ*Vh+UCD<#S;@Ws8Q7.>4;Kf&38>4 -rrZF1>4;Ij$J%NTK`D([+V9>$rr3,P3='Ep[/YX~> -[Jpg4@i/D4s8So,3QD+!c64%4rr3%'(l\Io!4D_A(Lu>%s2HK)6<Y3;K_PNH=qFm+s.pQ!f(/hC -=qG34rr3>^65Y[]s0X9eN;*>O"P,REC\P49J,~> -[Jpg4V/rL%s8U)[N8FU7kBh:$rr3%rF1qSQ&_;#EHZO8)n,NFEKQEBSF*"bgrs5HBSG3''H]7.Y -rr\d4V>'uh$KmXp^&S,`H[E0prr3,aN,u,q[/YX~> -\c3r<[B93'[1FM$s8U@f&>f.$c4CPpkP+.d&5mkgs6ldN+XpUXrr3Z#PT^SL(g>ern)mR[N;rp2 -&44t>rrgUj+e8<+rs=W$1"QBn@gF77rVlt@#U.L"s*t~> -\c3rD[B93'[1Fe4s8U@n(o@!,c57D+kP+.m&5n2$s6m'^.5>>qrr3Z#PURFd+_0C/n*a-kPlLcB -&5(OFrrgUr.@g/3rs=W-1"QBn@h:*GrVltH(b*b:s*t~> -\c3rDf%0TqeoQN$s8V8/HcGg[kBhR,n+Z:YF.BYps7ag'KS62jrr3Z+]nC`RH_p32p[=W!^&S,G -F-PkZrrhM<HcGgZrs?AcN9C68V/q=YrVlu-F*m)Vs*t~> -\c2q^#W_AReee[prr3NQ#\1QfV'-+[K[+pJKTr"PrVlldq>V#WPa&$-s7`?n&0\1Uk@5'MoD\sf -HO)@Orr3;f3=(!3s1KQ]Pl:Ub[4*8`p\k*np](!!s*t~> -\c2qg&45jcefbm4rr3NY(h:8)V(!6sK[+pJN0KjXrVlldq>V#_S<Tl=s7`X!(b)lmmpd2foD\sf -KGZGhrr3;n3=plDs2HK)Pl:Ub[4s+pp\k*np](!!s*t~> -\c2rCF,]knkBh:$rr3O_F/@IE`d;d/[HFrf]tMGKrVlllq>V#h`kBC\s7ag/F*l44n"kB=oD\sf -[<%;irr3;nN,uE,s5&*D^&@s6eqAC`p\k*np](!!s*t~> -\c3MS&."6XKErF.s6#m`+^/ZOXehl%hXBXal2M.JXdjIPs5$'JA&e99rrh1N#]ob>rs>2$.G"P! -=pQk6rr3,a=pRIXrVm&7CL^kEpUpNV~> -\c3MS(`84pN#3_Os6$3q.9^e_Xf\G-hXBpil2M.J[A@ris5$?bA&e99rrh1N(j#HNrs>2,1"QC) -@h:BGrr3,a=r9ThrVm&@CL_.MpUpNV~> -\c3MtHZQmh]lSPOs6msSKUf0af$;:dn+Z;>l2M.[cGm9Ks6l1nV;Ct>rrheTF0539rs?\dK]iC8 -V/qUYrr3,iV/qmirVm&XXehl6pUpNV~> -\c39)=pPs3(^O=%s5'9R`olOZpYYuVn,NFV`d:$fkOniWV&1&Wrr3>^3=(T<s1KQ]K_PKG"/R.X -V>^Dpc8#;(!>'Ujs*t~> -\c39)=r8DT+W+D>s5'9R`p`BjpYYuVn,NFVc@ef2n+H\_XW\jqrr3>^3>d_Ls2HK)K_PKG"/RFi -Xo88(c7p.Q&/]c,s*t~> -\c391V/q!JHZQ%Ps6mtYhXBq-pYYuVp](9fhR/TMn+H\_c@gPqrr3>oN,u],s5&*D[J0\#"3-"@ -cMdbDkD]C]!IM5es*t~> -\Glca;BZko;Vo7i"RfM"9'?3R$&fEUcN!Wl&44tIrr^gq#]'D=#i7QI+aZNe+kF@,J,~> -\Glca;CNb4;Vo7i"RfM*;XaVb$&f]]cN!Wt(eWBYrr^h$&9IgM#i7lb.=4Z(.Fu34J,~> -\GlcrS9oU9SEI`g"S\a6PjeVO$,(\EkPt:iF-Pkerr_G;F05E@#k*^nKXI%cK]g&KJ,~> -\,QHZrj;a__#FMf+UFqDrs@OS#\3&tej9XqrVltQ#U.4ers@kA&0[;4c9_e`^&NT~> -\,QHZrj;a__#FMn.1i?Trs@O[(h<%7ek-d4rVltY(b*K(rsA.I(b(^Dc:Sq#^&NT~> -\,QHkrmh)<_#FN"HZR4+rsA.YF/A@*kEL&$rVlu5F*ldCrsA/%H[EI#kEL%q^&NT~> -JcG?A"kIaJ#U.Lmrs=Vi(q'D<PRok+rr3).+V:1CrsJLj&.jNhs40LBK`:uOpVHl[~> -JcG?A"kIaR(b*c0rs=W$+gq@EPScF3rr3)..2\TSrsJLj&/^B#s40LRK`:uOpVHl[~> -JcG?A"m<#$F+i`Urs?A[He/5k]mG_$rr3)OH[Ed2rs?\dF1q>JkEL%qrr2um_>f#~> -JcG?A&b!DC.70m"s5#aA9)nqJ3=(TCrrhLg#YNtQrt!C8#ZBjcpOj)$f)Pd5V8gCPJ,~> -JcG?A&b!_T0g`#2s5$'Z9)nqJ3=q/Krrhdo(eWZart!C8(fKPspP]q<f)Pd=V8gCPJ,~> -JcG?A&bjkYKTsdVs6knfPlLdPN,u]3rrhe\F-Q.mrt":OF.D_!pUtX$kPtSN`nnT4J,~> -JcG9?&,3c%A'WAi&.l8Ls-*dLhZ!NlS08HWp](9^@gFg7s8ST+#__sPs7`$]f#.N<~> -JcG9?&,4).CX14q(`9[\s-+'ThZ!NlS1,;gp](9^CCi5Gs8So=&;9fXs7`$]f#.N<~> -JcG9?&,4qoV<@$]F*lL<s1NK4kPkJu`d<'`p](9fV/qUYs8U)cF1(cBs7aO'kJR=M~> -JcG3='DL\8;BZ<LkPsC!&;9NPs5#11A,cK9kCaBPCZk`K63oU&rr3/rS6E>WpVm/_~> -JcG3='DLt@;CNGdn,M62(l\4hs5#IIA,cK9mt;MpC[_;S65V`6rr3/rS7At`pVm/_~> -JcG0<'(>"RHZQ%Ps6knn^%_R,mt>bYrr3Ap[<ltsn,MR8F,];]rrr/:SCZlt`W(G~> -JcG*:$0R7F[K$8c&38>@rr[<J0tmSd$FM;g#U+9?@gFg7rr35tPT^ST+`$8\s*t~> -JcG*:$0R7F[K$8c(cg1Hrr[Tb0uj4m$FMT"&1M\OCD\eOrr35tS1,9u.<Fsts*t~> -JcG*:$1GQtf)Pc`H]7.err]BEN8FR6$J'lOF*k=XV/qUYrr35t`e8D[KWX^_s*t~> -JcG$8%Gq-b]f?X_p](9$.1haCrsR[U#WXmV#XT[GPkY1W#JD8d#VcSr[Dr5s~> -JcG$8%Gq-b`]4lpp](9$0bBTKrsR[](d^P+(d]Y_SG3$_#JDPt(blR=[Dr5s~> -JcG$8%Ia>shMcNhp](9EKQFj+rsJ4ZF,Z')F-M?!`r5oBeqA*cN,s?s`rCP~> -JcFp5(pu(APkY4@=pRIGs8Vh7#T0]#EtAT_6MLKZ$/SPc0pKs]#[6uCs*t~> -JcFp5(pu@QPkY4@@i.hhs8Vh7(a6$<Eu5`*9)&>b$/SPk3L%fm(g?[Ss*t~> -JcFp5(tO@e`qTN%V/qmas8VhqF*lL,Xa>,1PkY1W$1FC*N4nDEF.E!Fs*t~> -JcFm4(?^o[[K"N,&=ie#pQQ4#K_PN0V("a^rr3>V;@#;&s8So,6Jfc_J,~> -JcFm4(?^o[[K"N,(nCX+pRE';K_PN8V(kTnrr3>V;A_F>s8So46Jfc_J,~> -JcFm4(@Sr,f)OolF2n7[pVqQ,[J0^ic@hGFrr3>gS9'YGs8U)cPip*eJ,~> -JcFg2s5".`[36*ps8UA)&7aSqrrKO@rr3A_=pPCus8UqZ#YOj3s*t~> -JcFg2s5".`[4)s4s8UA2&8U/$rrKO@rr3A_=r8*@s8Uqc(eXPCs*t~> -JcFg2s6g?qepDc#s8V8@F/A@(s8U[LrsS:cF*#A$s6le*PkW5uJ,~> -JcF^/$._EKA*<Si#U.4brrDfmrsFtr&:<mGs+CppV8iOc~> -JcF^/$._E[A+0/%(b*c-rrDfmrsFu%(jk`Os,7d3V8iOc~> -JcF^/$0ROoV=4/TF+iEIrrDfmrsHG\F1(cBs1NK#`lA%/~> -JcF^/%/68@V>oBX#c7S$hWOh:"n.ru&;9NOrs6#!A*<mlkNC^Fs*t~> -JcF^/%/68HV>oB`&>fF,hWOh:"n.s)(khAWrs6#)A+0Htn)rQNs*t~> -JcF^/%/7bp`rGLKF2n7[n*g2S"o$#`HaWVIrrpu<V=4HarpS&1J,~> -JcF[.%/6Ums4.G]^&RhJCZkZr"IpV@;WmuX$-q`6s42Np;PiR$s*t~> -JcF[.%/6mus5":u^&RhJF6EN%"IpnX;XaP`$-q`6s42Np;Q]E4s*t~> -JcF[.%/8'As6"HEf)PKPXmc5g"NGe0SF?CU$0UdWs6$e[SBgTJs*t~> -SGs#ls8Vins7cQnp](9fdJjUKs8Up]#^ajD+X*uerrg=b#W^3*rrLD*rWiQBHfr]SJ,~> -SGs#ls8Vins7cQnp](9fdJjUKs8Upm&:;]U.4MCurrg=j&38&2rrLD3rYP\[Hgf8[J,~> -SGs#ls8Vins7cQnp](9fcMn1=F*"bP[<mSPrr3,XHZP//q#:BXN;dl"HaW=fs*t~> -JcFO*&+=QN#U'`b>2K;Zekuc6`q]Q>ek-K6@qu>UXj6rs~> -U]1>_rmh+iPk'b5V>\uprt"R>(`4\5(g>ers41'b3R7F"#i8/b3FchA(p2*`J,~> -U]1>_rmh+iPk'b5V>\uprt"k+F)u\LF/A@*s6#nnN8F@0#j7G!N2<XtF4SY:J,~> -WW)tmh>[KLg&DQ5KJ=W)F5Hrsekuc.^%_:$#JFWep\-u[F3af9~> -WW*1shU\3DHWpD'!%IFD$4nX@0fa<%Pg8.[g&DQ=KJ=o1Hf"f&elinF^%_:$#JFomp\-ukF3af9~> -WW*1shU\3DHWpD'!%IFD$4nX@0fa<%Pg8.[g&DQF[>]Hk[I=.qkF?UPf(\q=#M-$6p\0nn[Eef&~> -Y5eOrYQ#%"hR257s8V7K&.jN`q#:Zps7b^Vs5u]SPg9;Z~> -Y5eOr#4J[@=t(U+iX#Q-"BolCn*f'3%.E&\hY7'Mk=Q:&N;*,I$2=Jon,NFV64fC,s*t~> -Y5eOr#4J[@=t(U+iX#Q-"BolCn*f'3%/95AkP,#Vn!&0?^%_=%$2=Jon,NFVP]OO`s*t~> -Z2Xguc2Re<h#@TAhX>4c&;9iY$eCP`[HISiekubbXj6rs~> -Z2Xt$etmF[eHc:4CRi]Eh#@TIhX>Ls(kh\a$eCPh[I=.qel!%r[Eef&~> -Z2Xt$etmF[eHc:4CRi]Eh#IEC"S]$>HaWYK$g542f'iY=kF?U?cHcH?~> -[/U.#V#LYUF'9^uK]i43%I]NJ&-sG+kLNfB&:<Tcs*t~> -[/U=(]o6GM(srTl&0YPRf&$E2hK*0U(khASrseF]65UOgHgfNh(`7qhcMrC~> -[/U=(]o6GM(srTl&0YPRf&$E2n#`F5HaW>=rse_9P^@J)[I<:TF*k=`cMrC~> -\,QI&T`5/&3='E`qYq#nN$/HM3=laC=pP[mkKX$W~> -\,QU*hMb&Map8+]+_.YCi;Wqf3>cQ#qYq#nN%#;e3>`TS=r7g(kKX$W~> -\,QU*hMb&Map8+]+_.YCi;Wr2N,u,iqYq$!]mFgRN-fWRS9&bZn'1l_~> -])Md)SGr]2>'oH0rs/"G&-u1bs-3Kg!>p1\rrMlWe,Op~> -])Mp-kI#(S_[$?:F4Tg>rr^8NHft;+%.Aid(fJrbPSarC+aa+d!Vc'3s*t~> -])Mp-kI#(S_[$?:F4Tg>rr_,S[I="m#PYWQF.DFn^&E'RHaWbN!Vc'3s*t~> -JcF4!!p?*)r;R6#N"?7]f)PcX#RCugkPY>_]o6-bpXT:o~> -]DhurN(P8.#QcH%f&H]2n!qu,rse^](`5Tjs8TJD&/]c_r;Qo5P[g6Xec1.~> -]DhurN(P8.#QcH%f&H]2n&FPgrse_9HZPG7s8UYkF*k=`r;QoN]qraCec1.~> -JcF0u!;HEk%HiZn#YN\Js5$WZ#__C>rs._G0b=U-F6D-SJ,~> -^&J2tPT^mU#Qc/rhW+V9p\b%#mu/\,9%O%BhGOn%K^\m>#Nq%#(`4E;n(.Mh~> -^&J2tPT^mU#Qc/rhW+V9p\b%#n%F'hPir)HkF?U7[I=(o#Of?bHZOP9n(.Mh~> -JcG0<!;GIP%JPem#ZB7Rs41?Z&:=0Mrs@O[#REFo+V9>$qu6]kkMQ;i~> -^]+AdKK6IH"!N$:pYl,]pP]q+;V(mJeliV%Hh[L=$/SPs(d_CT(l\4drrMlWhuA3~> -^]+AdKK6IH"!N$:pYc&[]mFgjkPtSFV/p^cp\k*un!nH?N2;2K^%_C'!:ShFJ,~> -JcG-;!;GLQ%-KVV9%O%Beli=jHggt6$h(K,#RGM&s*G#<kPP8\pRJYLs*t~> -_>aSnPW?#T![3g&ir9GU3>bB>s8UYR(`7Vgrr3B#[9=CYF4UAE&45RWrrVqb[G_(8~> -_>aSnPW?#T![3g&ir9GUN,t6Hs8V8PF*k=hrr3B#etmG/[HIRtF-Q.jrrVr7f&6RY~> -_uB`2WrE(njSoUq&.lPTs6!8k.?s#prs\Y(.0qAekPtR@#W^K5rr`"K>3FlEJ,~> -_uBi5KJ=&##QYK7pM0h&#S>\q!t\)4pZ2>^[29b#s8VOc&2B^Drr3E$XYCYIPir)HPRok3qu6cm -N*>]/s*t~> -_uBi5KJ=&##QYK7pM0h&#S>\q!t\)4pZ2>^epDJps8VPXH\BE-rr3E$eqA*t^$l"$]lT.qqu6cm -]q"QMs*t~> -JcF!p$1Bk[CX/bC#W^3/rsdgg&-t#9s8Vi$.0s,?r;Qr`KJ<aRn)F@t~> -`;]kO;X"Gk+ZX=k^$k.Ws8V6`HXeMY#Q];/jo5YU3>cPWX\'EjcMdbPhI@*61!]h!pU)^m>4;Ch -"n.+!&9I="s*t~> -`;]kO;X"Gk+ZX=k^$k.Ws8V6`HXeMY#Q];/jo5Y]N,u,acBNC/kPbDin!nH?N9C6@pXY"=V=4?^ -"n/jXF1(c%s*t~> -W;cklmf*:]f)GaEk5P[5&/[,F#W]TsrrpDP&.i?brr3,P63o$JrVm,s]jhTZ0t$c8s*t~> -`r?,/KIQ6n"qW4]Pg8.[mf*Fac@ee$g^!sZ`qSWq#D<p;0e!Yo`r5o@c>*t.A&eNJ"P-0V0t$u[ -#PZ5J(`5!8pYu4'~> -`r?,/KIQ6n"qW4]Pg8.[mf*Fac@ee$g^!sZ`qSWq#ISW"N-fW)f)>UPhQ:jGV:PYG"Qu"jK\$,% -#PZfGHZP.spYu4'~> -JcEso#MsM5#RDU!p\t0r[4r4(A)@1a"QshLXnVhp#5<d2#RF>Ri;\<~> -a8Z4d=qL',";!Sif'hf%!p>4Rg^!p(V<7d_hK'MN&1Pp!rr3/00c1aChYmHWkAr)Sp\t0spP_*L -&5pg3s*t~> -a8Z4d=qL',";!Sif'hf%!p>4Rg^!p(V<7d^n#^qXF*m*Krrpu4F*"JPrVm#h[<pL!rr32s]o7#R -SEJi1J,~> -JcEpn"Ri0R3QD'u"l>am#VhS?rrMT>rr38m]ik[I+UCEki;\<~> -aSu;0A*sU)&5%oEiVrr83SOf?He.B["RiHZ3R7X("l>au(bq9OrrMT>rr38m`a]Ps.1ei&i;\<~> -aSu;0A*sU)&5%oEiVrr83SOf?He.B["S^3+N8FR6"n0HXF,[g/rrMlWrr38uetmG/KQECHi;\<~> -JcEjl$[Z(?s8V7t(^Na9p\"OlHT;?KCRbqZXl050~> -a8Z1!&Fg#.+`jLKhZ!Vr9%sUP>2JEA$[ZCHs8V7t+W*hZp\"OlKK0kmCRc4j[G_(8~> -a8Z1!&Fg#.+`jLKhZ!Vr9%sUP>2JEA$FQDms8VPiHZPFso`#3)N,s?J`d<'Xi;\<~> -[/U.#Qi@ELN4o8SCBt2UkP+]M$H?Qe#Vhk<n!&1^i;\<~> -a8Z1J)"S"8+`ks'g]%<"1"us7;V(%2$Jp`]s6j_?(h;b'pAYKF@i-%;SF>p2Hfs>eJ,~> -a8Z1J)"S"8+`ks'g]%<"1"us7;V(%2$Lb[bs6m(2F/A@"pAYKVV/p^:`qT5@[I<&RJ,~> -c2Re<rr2umS,WK_jo5IR(_CKGpAY?RN%##D>2J!5J,~> -c2S%CN-ikEs5uE8#QdVpn(7R?XUs4m![4*.jo5I[+W,"`pAY?RN%kk\>2J!5J,~> -c2S%CN-ikEs5uE8#QdVpn(7R?XUs4m![4*.jo5J'H[Dm`pAY?c]nCHRSEJW+J,~> -a8Z/6Jc>lA@gGEXpAY?1@h8nWPhu9:!lgb]j8XW~> -c2S%"0aJqUf(Vf2#Qc/bn(%F=k98Ob!>qs$rrhe+&457IrrL,TrYP[#hYR6R`hh8Hs*t~> -c2S%"0aJqUf(Vf2#Qc/bn(%F=k98Ob!>qs$rri(mF-Q.ers%>VHZOPIkPG2[hT"a=s*t~> -])Md)NrKCR@gGEXn"l!+r;R#rPUQkD9"jutrs$dKs7\Mb6KA)r~> -c2Rgq.K0SS.<AD^#QdW#pXK3Dk98La!?nT.rs8(/&5(gJV2Xm@rs/:_0c1Ho`qTH3#1!8KpGj'_ -j8XW~> -c2Rgq.K0SS.<AD^#QdW#pXK3Dk98La!?nT.rs8@qF-Q.f`kCj=rs&52KQD4!hYdBXkPtSVN-gfL -s*t~> -JcFX-!;G^W#IP]\69,SgHiF$MpUs01#Uu#4qu6k(XoJ,E#W^rFJ,~> -dJj@#[I=-co*>C@F6D!O!TtWY#Qc0>pZVV^[4)YZ3=m$\rr35t`_$dZ0pMG0rruZ7s7\5b3TL-i~> -dJj@#[I=-co*>C@F6D!O!TtWY#Qc0>pZVV^eqA+/N-fWRrr35thNWA.KY@-Wrs#"=s7_InN8sqg~> -JcE^h!p>4JrWim0^&S,hPW9!\;RQ8rrs.Ca6JhaUKXKk?J,~> -df0L%3?aXeN:dGX&5oXWrrLt"f*DC#V<Ipkmt;Mp&/\<Ys8Ur?3>`T2[J0Ru#MrWVhZ(9B[H%:;~> -df0L%3?aXeN:dGX&5oXWrrLt"f*DC#V<Ip\n$RNAEsnMhs8VQ$N,s?9f(](A#Oe1In,LtHf&Qd\~> -JcE[g%d0@/H]6PUs5$or#RH+?qYpfG8e</9s8ViQs*t~> -e,KX/8dG\WelqbQ!Z70bci3u\eHc1![HRW#n!o&aN7S%/hI@]?(kgcBrs-hI(b)<]s7bOQJ,~> -e,KX/8dG\WelqbQ!Z70bci3u\eHc1![HRW#n&DcC^$#Fqn"kAPF1(K5rs._OH[Ed4s7bOQJ,~> -NrK+RZMt-tN$/H<;V(aF#Of'9#RDS`hV\?`~> -eGfQp1&V@Y0e)l'!YAQ(ci4(@XVfOn!>q?ers%qN.1d=ohY[<Xn$R3J(b&tOhuA3~> -eGfQp1&V@Y0e)l'!YAQ(ci4(@XVfOn!>q?ers&52HZOP(kPP8apXZHfF*jbPhuA3~> -JcELb#3UX_#Vh"hqu6oXKII0D>,CE=s*t~> -ec,[$3V!FW.@fkQrrVA1+jpVs+e7Zo#4IL"&2Ajpqu6oXN%l.m>,C]Es*t~> -ec,[$3V!FW.@fkQrrVA1+jpVs+e7Zo#4K6PF,[Nqqu6oi[=iUJV8hu\s*t~> -_uB`2JcG`L"f3%I6FH:[rs/"h64aDGN9C3?s6&A@J,~> -f)Gd%9(E5h9%Na`rr_`'8eB>T!?nl5rroMJ&5'A!r;R#jX[3jA.?*`prrM<OiW"E~> -f)Gd%9(E5h9%Na`rr_`'8eB>T!?nl5rrp\pF-P8Mr;R#rcBNZsHbJnIs8VQHs*t~> -V>gPi[f6@%l2LnL=pSp4r;R#b```oZ+a`)DrrUbLhW"Qc~> -fDbls3V*LW+f4/t"8D9QhYY:mC]733K`/mlHT;Y^#Qbj5pZ_\\k?8^<n,31jn&AiS(b'ggr;QiL -;VpF5J,~> -fDbls3V*LW+f4/t"8D9QhYY:mC]733K`/mlHT;Y^#Qbj5pZ_\\n!nI$p\b$rn(sR]F+gsir;Qi] -SF>J;J,~> -`r?&5JcGZJ"5Z?MK`(iThJ48?&5oq)qu6`K+f42uJ,~> -f`)!/1%PYPA(LD7rsS:tPZh6N&-rOQ#S?h<!"d3W!?oJIrr_+M(khhe#MsMN&/\<Qn,*+deg[`\ -s*t~> -f`)!/1%PYPA(LD7rsS:tPZh6N&-rOQ#S?h<!"d3W!?oJIrr__SF1(rG#OedAF*jG.p\XslkCh.? -s*t~> -WrE(nR/[9WF#i+Vrs.DN3=#mNXloT]"o"6A#ZBO>s*t~> -g&D*(9(WAj+dD0Nrrr/)CH34C[Kln+n*9oTms@(Orr35[S2hDt3OS&Irrr.]3=o*Fj8XW~> -g&D*(9(WAj+dD0Nrrr/)CH34C[Kln+n*9oTpU,tKrr35l`f+t[N6^nhrrr/1N,tNXj8XW~> -JcELb$f9J's6$dn#RE/<hY[<XpWcAB#W\aUj8XW~> -gA_3:9(`Gk(kh)5rrUJ]0sCoa9&Ak5$f9J's6m@*(`4udhY[<XpWcAJ(ce_mj8XW~> -gA_3:9(`Gk(kh)5rrUJ]0sCoa9&Ak5$h*9Qs6nO/F*!;RkPP8apZIcfF,\E=j8XW~> -g]%9JJcG]K!;GdY#do?2CEWs#A%ha=#1e,f#U*^7iW"E~> -g]%?LKFmh_!BI:CrrVYR0s(]^C\R,o#do?2F"%YDA&eBF#1eH"&1M,GiW"E~> -g]%?LKFmh_!BI:CrrVYR0s(]^C\R,o#hHEHXa>,9V:PMC#3WCYF*jbPiW"E~> -JcEIa#Mqcr&-sGekPG2c[8I893OS>Us6%tos*t~> -g]%;=)"n49F5H!X!mX[\X9\hDXm5okhF]L>(b)lUqYpo1;A]s*[I=.qn(-S"J,~> -g]%;=)"n49F5H!X!mX[\X9\hDXm5okn!&KHF+i-5qYpoRS9&b1f(]4En)rd3J,~> -JcEF`"IpVYSEKbK%G#SD#U,/qs5'l).72nQs*t~> -h#@Dp+nl6C9#fok!PKq]#QYL^lMh!W.4LeMqYq#UHRTLTN:6f'Xa;chhW=cf~> -h#@Dp+nl6C9#fok!PKq]#QYL^lMh",H\BE-qYq#fXa>,B^%_QqcF&=ikN2_o~> -ci4">o`"pcJcG`L!o@F6qYq-$V+M")CUN$=N'\Zn#UuVEk5Tr~> -h>[N43V`p`&2B.,p[nIdp[@_R!QI-t#Q[i[li.%C@se(P&GN;!(`7>%hStLH.1d%FV>'-PJ,~> -h>[N43V`p`&2B.,p[nIdp[@_R!QI-t#Q[i[li.%TV7$1"&GOJ7F*k%?n(taBHZO7]`qSWqJ,~> -JcF4!!;GgZ!OZG7rt4+@+UBfUesp5!&-rOrH]2b'k5Tr~> -h>[J6q$7%"SC[92!oA:#o`"s;8u2doK_Og4!OZ_?rs@P@.2XduespM1rYPbmH^&=/k5Tr~> -h>[J6q$7%"SC[92!oA:#o`"s;8u2doK_Og4!S4+Ert4_-KQE*ckJj?OHZO7e[Cr^2k5Tr~> -JcE1Y'CVba#RF=<=pPBF+ZYLps8UrPhWFig~> -hZ!W>+oV`M&0Y5AcLLo;kG8_=f(K%Dmo#qe!>)*hrtFk'8f/+;CL\1m(b%e1`rH(qV;CA7J,~> -hZ!W>+oV`M&0Y5AcLLo;kG8_=f(K%Dmo#qe!>)*hrs/;DP]Lo9V5=04#_\/MhZ*WE`p`'iJ,~> -fDbjFJcFa0!oA8IrWici&-s+>KXL";i;\<~> -hZ!h>.8!L&Ph,TurrpDG(^MS9p&>'#&>KL33Srs!!oASZrX]>q(`4DgN4&-Ki;\<~> -hZ!h>.8!L&Ph,TurrpDG(^MS9p&>'#&>KL33Srs!!q3ODrc8='HZOOu^"2Z0s*t~> -[/U.#TDnocl2Lgm64j)$";!SH[GK^=J,~> -hZ!\tf&#l_rs#k[&-rOjf(T+EpKF6r!JL43rr]Z$&/bBX";j.X[GK^=J,~> -hZ!\tf&#l_rs#k[&-rOjf(T+EpKF6r!JL43rrL]8r,W!fN4mg2h#Dm~> -aSu87JcGBB$La3&#RCtb3J>*/qu6oietlkS;PiR>s*t~> -aSu>9XWdWK!@c=frrKeETa1Z9SEp1Vn!#:#&-OFBKZ<KXrs/#LX^b7,V<@%AJ,~> -aSu>9XWdWK!@c=frrKeETa1Z9SEp1^pUtopF*i7m[GLBLrs/;]cD@&$`p`*jJ,~> -JcE:\#*^8S6@6E7qYpZ\[=g:4#QSZ's*t~> -aSu:C+oDTH+jTf]!+VW,!BJ`srs"]:.8#9,n,!%en$S*/)#Y!GF6ERR~> -aSu:C+oDTH+jTf]!+VW,!BJ`srs$/`H^(qhp\Omln(+n*r,Vk?kPp&~> -JcE:\"Qu#hhY6mH%,S*a+V4nj;HcBu.D=sFJ,~> -ao;Cu+o2HEPkY1YeiB<-!.4&3"Qu#phY6mH"5^F`.K1.f;HcC(0uiGWJ,~> -ao;Cu+o2HEPkY1YeiB<-!.4&3"Rj%\n+Z\Y%.DK3KQD3]S>DHkK\kqmJ,~> -^]+<.JcGBB&GP@q;BZ;O+[U7is8V7K+gpP6J,~> -b5VM2>58F)>5.gl!R;j[#QZ+"jSoeckI"2:(`4\gHcH*cmn,%:kl6/~> -b5VM2>58F)>5.gl!R;j[#QZ+"jSoecn(+"^F*!#![GLr`n!&LVkl6/~> -bPqS:JcG$8"R!1G66Z=6![3fbrVluN3?bfos*t~> -bPqY<PSj3%!>+GhrrKeVSHo6okNDjJn$Rg@.K0k[.?r]frr^h4.CJC>J,~> -bPqY<PSj3%!>+GhrrKeVSHo6okNDjJn(+n2HiA'fKY?jQrr_GCHe.E\J,~> -[f6@%Jc>iP`a^1k#Rqqu+V:1<s8V888dIH.kl6/~> -bPqV"1%tqRSGE0cpPbUJ!?nl7rtEC^.2WU-.=3K\V>(#imt=:M3S*EoJ,~> -bPqV"1%tqRSGE0cpPbUJ!?nl7rrV&RK`6#qKWTTJ`r>uAn%Fs,N9BF)J,~> -JcE.X'=AAW#XWUXs7]CsA'Uod+UAW&Pir's~> -bPqQXp':Y_q#:>IRg9$ekN`'I[Jh!R6@7#XpJMQ<cE2.:(_A-\kPp&~> -bPqQXp':Y_q#:>IRg9$ekN`'\epDIZPdTBJpRH<,kK^2VF*iSRkPp&~> -[f6@%K)Z#23=n3(kPbDfPR&*T(^LC6CW>i+s*t~> -bl7^W)#"::9'?$M!V^Z(#QV9urrq7G(d`o=rVm4p&0WbO&/[`T`p`*jJ,~> -bl7^W)#"::9'?$M!V^Z(#QV9urrqkMH]5B$rVm5EF*iReF*!SJhY645J,~> -c2Re<Jc>`Em/I0a+X+8jrs71!#RCu.N8F$bs*t~> -c2Rh=HhRdH(p3Q4!Nd3.#Q[itm/I0a.4M\%rs71)&.f[NN8F$bs*t~> -c2Rh=HhRdH(p3Q4!Nd3.#Q[itm/I1-H\BuIrs7e7F)u\m^$k^Ws*t~> -JcE1Y#,N.c[HH`0rVm"I.;R5tir=N~> -c2Rgi.JF)K>4;4c!QHRX#QYLEm/I9l+YgCnn)"$C"GALFcL9cmJ,~> -c2Rgi.JF)K>4;4c!QHRX#QYLEm/I15H\BuLn,<7h[=k[FpYu4'~> -JcE1Y#ObOr3GVMZf)G^LhV\?`~> -c2Rd.pBUd2XnMbqk>I`S!D;hJrs/!j&41/19%O"As5)Z5J,~> -c2Rd.pBUd2XnMbqk>I`S!D;hJrs/:gF,[5kPir&Gs6nkFJ,~> -JcE.X!2]W"!>)Bes*t~> -cMmq69(rSl;Xa;Y!/-dH!?nT3rrJr5r=At2gAc[~> -cMmq69(rSl;Xa;Y!/-dH!?nT3rrC(;ErgX5gAc[~> -JcE.X#5>N88n59lgAc[~> -jSo7Fn*U,UehQn)!0$RM!T#8o#Q\H(mJdCb[;/BM[HH9DJ,~> -jSo7Fn*U,UehQn)!0$RM!T#8o#Q\H(m/I7?V3J+5n(Rel~> -JcCN*J,~> -jo5DF3Tof0!OWL6#QZ+;oD\in&=Wq+.Fu96J,~> -jo5DF3Tof0!OWL6#QZ+;oD\in&=Wq+.Fu96J,~> -j8T,RiVroPJcEdjJ,~> -jo5CiA,#Bj!0m3`!F#6hrrVY)&=Wq*N5,CC~> -jo5CiA,#Bj!0m3`!F#6hrrVY)&=Wq*N5,CC~> -j8T,RJcFs6!;F;/J,~> -k5PPP;IfIgrr?j/#QThRrrVY1+e/f=9)$.$J,~> -k5PPP;IfIgrr?j/#QThRrrVY1+e/f=9)$.$J,~> -JcCN*J,~> -k5PM..9c*<!$V+C!>riGrrVYk.@^YD[D;fm~> -k5PM..9c*<!$V+C!>riGrrVYk.@^YD[D;fm~> -JcEgk!;F>0J,~> -k5PL0#[6Tp!$V+C!BK$)rrL,;SHo7;pVHl[~> -k5PL0#[6Tp!$V+C!BK$)rrL,;SHo7;pVHl[~> -kPkPVhZ!TMmJd1\JcFL)J,~> -kPkYY3=&gTrr=5;#Q\H0mJd:_N%#=2#QZC*_>f#~> -kPkYY3=&gTrr=5;#Q\H0mJd:_N%#=2#QZC*_>f#~> -JcCN*J,~> -kPkY(#RFW#rr=5<#QYdElMgqBPVJj;!>qZLs*t~> -kPkY(#RFW#rr=5<#QYdElMgqBPVJj;!>qZLs*t~> -JcEdj!;FA1J,~> -kPkX*#RFW#rr=5<#QZ*gkl1_8N%q%4!H\"Ps*t~> -kPkX*#RFW#rr=5<#QZ*gkl1_8N%q%4!H\"Ps*t~> -`;]i3JcE^hJ,~> -kl1e2+UA?Wm/I&/q$7!npZDJYkEI,,&>f^6.HeSJJ,~> -kl1e2+UA?Wm/I&/q$7!npZDJYkEI,,&>f^6.HeSJJ,~> -JcCN*J,~> -kl1df+UA?Om/I&/q$6t9ir9+oN(Oqc#QZ*g_Z,,~> -kl1df+UA?Om/I&/q$6t9ir9+oN(Oqc#QZ*g_Z,,~> -l2LbX^&J*,Jc>cNkPVIKs*t~> -l2LeYHi=9O+m87m!$V.D!4Cec"S_)m;CSRN!0#b6!q37nrjD+mJ,~> -l2LeYHi=9O+m87m!$V.D!4Cec"S_)m;CSRN!0#b6!UnV<cKtR]~> -U&P,eM#RYA[>[F4.Js_XK]he'J,~> -l2LeI9)T"qkO&9L+o2HF3Ubi)"o$m!KK13X#QQ=5rrql!PX7Abr"oHfn*^4+~> -l2LeI9)T"qkO&9L+o2HF3Ubi)"o$m!KK13X#QQ=5rrqlB]p+J/r-JIPn*^4+~> -JcEai!;GdY"5^GU^&J$4c7/_urZMG38g+b)n*g:,~> -l2Lasr!3;)mJd/@q?R(cg&D3D`d:<$YQt7@pZhb\hR/lnrr3#E1&_a`.K<!B.2\$4n,In~> -l2Lasr!3;)mJd/@q?R(cg&D3D`d:<$YQt7@pZhb\n(,M8rr3#^K`6#uH\@':P^@bjp[A-4~> -JcDqR"Q!<*#]'G>%GjDW;KJtR^"2%M#X[D:s*t~> -l2La1r!3:4mJd3W)#OX?+jS[="6[[N9!JX%Xm>uihHD?FC]=>ChF\V_HaUl5hVN#b6Jh22J,~> -l2La1r!3:4mJd3W)#OX?+jS[="6[[N9!JX%Xm>uin!n`GXoA>0n!%m`Xj5e[kO56gPje)@J,~> -R/[0\Rf<QJ;@!gWF8c+@@gGuqrVm#pKEsp$n,In~> -l2L`]r!3<HcL1];mt;hi#S:e7e,KRFn#^(CZj6Yrm/I7G;@jZoHi<sHCD]t4rVm#pKFgK,n,In~> -l2L`]r!3<HcL1];mt;hi#S:e7e,KRFn#^(CZj6Yrm/I7PS9'%1Xo88%V/r0qr;Ql,F-Q.^s*t~> -c2Re<rVlllJcGcM!;Gm\"f3@ZK\#>brsWBC;Wn)[kIm*H#ZBjSs*t~> -lMgnJ&Gue7&>edo"o#,s3MlJqrrU2](q'\NA,#Bj"g'3sN7R1jrsWZ[;Wn)[kJi`Y(fKPcs*t~> -lMgnJ&Gue7&>edo"o#,s3MlJqrrU2](q'\NA,#Bj"jVIA^$"k_rsY`FSF?LXn(u'KF.D^fs*t~> -ao;A8bl7\;T`5/hHO)t$r;R6#PR'V=s8TJ]&-t"up[A-4~> -lMgk0q?R(2li.%LhY57o!r%oj[g3!phX:CHpNm`Dn,31ppQQ4]kPtRq0c1`^[J0.iJ,~> -lMgk0q?R(2li.%LhY57o!r%oj[g3!phX:CHpU,(,n,31ppUtX4n,NF=N,s'!f(\Y5J,~> -JcDtS'q?F%[GKK2F)+r&#RIj<s7\5k.F.\Us*t~> -lMgj2q?R*F`j>[Gmn1%p!AWHurtV%Q0t#lpX`JPe.2Wo0s8VgJ.5B-Bmf.e~> -lMgj2q?R*F`j>[Gmn1%p!AWHurtWP#N7RI\cE44FHZO8Zs8VhPKS8O_mf.e~> -JcDtS!T$0B#QPG6#QbPlf)G[NXkrg=s*t~> -lMgj"q$6t1Zi:'>+h%^X&=i.f%GjD_&/Yrq&.fZi&2Dc8rrT=Zp[%p1~> -lMgj"q$6t1Zi:'>+h%^X&=i.f!Ul9JErp]IkPkJ_cL:Mos*t~> -JcDqR!OXre#R<@V8pdD:`qSWqJ,~> -li."B3V`p](tQ+p!QHk%#QUC]rsZ:q&.f[F8kOc=Xj6\'s*t~> -li."B3V`p](tQ+p!QHk%#QUC]rrL]0rc8='Pa&T$f&$/`s*t~> -hu<]NJcF-t#Mukr^$"kQpYu4'~> -li."2+nu<DF8*0D!T$GU#QU+Trs.Dg[Ctbln+YiAJ,~> -li."2+nu<DF8*0D!T$GU#QU+TrrDNeec>1<pYu4'~> -JcDAB"8D!Ap[/!2~> -li.!f)#+@;&=g60!q36?[0Qe:n(n!GpZL`6mJh\~> -li.!f)#+@;&=g60!q36?[0Qe:n(n!Gp[@SFmJh\~> -JcDYJ%Hjj`V4=BPV0c*4F1(c2s*t~> -li-s+p':[ZcF3`R]fEM,!D;P:rseG!S?8<`S>Cm:;L>hGn,In~> -li-s+p':[ZcF3`R]fEM,!D;P:rseGJ`m2TL`l>EVS@-rBn,In~> -h>[KLJcF0u#1e,M.5;tpq%3Q3!tZ;rp[J35~> -li-s+o`tRQpU:)'kA(pE#QZsKli.":K`3\,.5CT7rt#5TK_P!9J,~> -li-s+o`tRQpU:)'kA(pE#QZsKli.FW[=j3lKS4DnF*htTHi8!eHaWV;s*t~> -m/I([JcE[g!QIb1#S/(5.60+30g]Yk@r"C:&A@T5J,~> -m/I+\C\.l5K^ZAL!q367\Hi4.kNr3M`_%*I&-F@90ff4f#YJlRCMQNZ&A@T5J,~> -m/I+\C\.l5K^ZAL!q367\Hi4.kNr3LhN[t[%ss7gN/WFKPc_'aXd!mRf'r]i~> -O8f4SUAkJe@gG)AH\A6n`W=B9rVluF63sFWs*t~> -m/I+C1%Y_Q&;9M\rrVr.9"G9/3Tof0"7L":3W=[:V8gg+`m2ldrVluF65Zios*t~> -m/I+C1%Y_Q&;9M\rrVr.9"G9/3Tof0"8AX5N;g3b`r+]nkPbD_kEL&5nGe"~> -gA_0IJcF@%"4d_`^&Id#s8VfqhEhLEnGe"~> -m/I+;+nGs@&:=/ZrrVY!&A&2J[I*treeet3rqH0es7ZWP8f4]"s*t~> -m/I+;+nGs@&:=/ZrrVY!&A&2J[I*ttkAt^qp\4C]s7ZWaP]P.>s*t~> -g&D'H[Jp7$V>gYK&.#]ArrVZ7^&>qT]o7#J&.lPEs*t~> -m/I+;+n5g=HhXrJ!r&f?]EeM>mJd:>(`9[YrseGB`l?<DcFo0`Eu5b6nGe"~> -m/I+;+n5g=HhXrJ!r&f?]EeM>mJd:OHZRd9rrMlWr8%Y/]sXt`Hf"8lJ,~> -MuNeOVZ.G#=pR-(CL_-q@js,]0ek+#&-rOQHggJ(J,~> -m/I+;+n5g>(jk_ZrrVr.;S<>9XmQ,pmpcnhF),Q4CMWf%"t:B+&/]c_nGe"~> -m/I+;+n5g>(jk_ZrrVr.;S<>9XmQ,jpRH;`r2g4#KT(SCN.cl`Erp]rp[J35~> -f)GaEJcFI(!nKsTr<W62"sG]M0g_`"n,In~> -m/I*V&F]r-&5(gR[Jp<k=qJFS!3PVf#1cB`(_@MqqA92]r\4IHXlo0QJ,~> -m/I*V&F]r-&5(gR[Jp<k=qJFS!3PVf!p>epr,_mb$?LQ@F*ik!N0MWVn,In~> -JcDkP%Gm%A8kN9OV59]YV4>Qis*t~> -m/I'=m0Eb:Pjc!Z!NdN\#QV!mrs%>=;Gp+sSGo>eXehl6l2Q8~> -m/I'=m0Eb:Pjc!Z!NdN\#QV!mrrqT!S<T87rPerb`l?m"s*t~> -e,KFB[f6@%VuHbkrT=1Tir=N~> -m/I'=lj*\19"ju-rrVr.9#1c5Xm5oipZM#.n+YiAJ,~> -m/I'=lj*\19"ju-rrVr.9#1c5Xm5odp\jR>s*t~> -JcDnQ!:TU\"8D!QpZqj0~> -m/I'4l3IJ/>.*h-rrUbm&AnbRXmH&fn+H\_p[@kNli2J~> -m/I'4l3IJ/>.*h-rrUbm&AnbRXmH&fp[nIdn+Z,IJ,~> -JcDnQ!K=_crr]Z4>1W$>J,~> -m/I'=kQh8%;Q\6QrrJr>`!?@Fm/I*F`qKE7[9@(kli2J~> -m/I'=kQh8%;Q\6QrrJr>`!?@Fm/I+"hY-sOesrT"li2J~> -bPqS:JcFm4!r$27pQPlPHOqX>p[@tQo`'F~> -m/I'=jTku<N2>D*\c2]D9#V&9XmQ,ipLA"4S-=Q_0uitVqY0X^J,~> -m/I'=jTku<N2>D*\c2]D9#V&9XmH)fV=qn3[<mS`s7uE]s*t~> -WrE4rs7cQfMuNhP;YCY5(_?ra+Xnip+Yb,p+XpU.p\4]<~> -m/I'4is5_u+YeZLPQTM*hQ?O:'".2skO7m&n*fH.n)s06s7cQfh>[N=9#_,:XmQ,ipJMRs(^)!! -(_A.q0aK3_.5<8+>/p=2s*t~> -m/I'4is5_u+YeZLPQTM*hQ?O:'".2skO7m&n*fH.n)s06s7cQfh>[N=9#_,:XmH&uS9'$uHZOOT -HZOOTH[BgTre(Q9KT(SCKS5lHpA]X~> -UAk5fNrK,X+o"&&0f^B_#UqJOq$7!M[J0]O~> -m/I'=g^!ru+X-Ob!"efH!AT9+N!$c=f(\,&!p=&:a9VdJm/I)a.J>b*.2WmV0e)o0!AV"Vs*t~> -m/I'=g^!ru+X-Ob!"efH!AT9+N!$c=f(\,&!p=&:a9VdJm/I*VK_C?.HZO7]N-kAA!K>V(s*t~> -JcGcM!;Ef!'DH"$cGn/T`m2lLcGn.V&1OI$V>GoKHSGe0kP5(-~> -m/I'=]*JTa.620jcL9cm!V^BN#QV!orri(3Pg7;Fc4\.BKGZG?cD?JYKT(kCKJ=$Jn+cp5~> -m/I'=]*JTa.620jcL9cm!V^BN#QV!nruIrLkMGCbhWO(YkMGC0H\BE%`kB'n]tLh]N,tNXq#>j~> -SGrT`PlCclf(T+TS.IF#s8Vinp](!fpOif4f(f8q~> -m/I'4[Km!Q8pg%$jSo8;9$%>=XmH&g[GLWW&=aRlcN!q=s7cQfs7_H`3S+!*J,~> -m/I'4[Km!Q8pg%$jSo8;9$%>=XmH&gf&uc,&B8dMkPtSVs7cQfs7a3JN9C!9J,~> -JcDGD".UMh`qo`8pB,aJ3S+!*J,~> -m/I'=ZNpXV>-6uLrrMR\b6S+lcJSX(S1-2<qZ$Ti"+(S>f(f8q~> -m/I'=ZNpXV>-6uLrrMR\b6S+lcJSX(`d<[$qZ$Ti"1<3/kP5(-~> -R/[0\MuNn1V6/qXrs$bY@j)+fn+cp5~> -m/I'=Ym:FT8u;:ErrKeVbQn5AkMQ:AhPI@Cqu6lGCL\e1C[_&uJ,~> -m/I'=Ym:FT8u;:ErrKeVbQn5AkMQ:AkJl*Aqu6l`V58idXnVVjJ,~> -JcGZJ!;E&a"gnUA&37Gus*t~> -m/I'4Y6Y4A;RPuWrrVqZ&BtI]3Tnrm"gnmQ(cfV1s*t~> -m/I'4Y6Y4A;RPuWrrVqZ&BtI]3Tnrm!7q-j!K>V(s*t~> -JcDkPrT=1TnG`X2;HfUApA]X~> -m/I'=X9\l"XmbNS!Tu2^#Q[Q\li.+VkO7U.nG`X:;HfUApA]X~> -m/I'=X9\l"XmbNS!Tu2^#Q[Q\li6qP!;H!_"Q#ZF`om'qJ,~> -JcDnQ!T%ns;?2(BV#e:(p&>'Up[nK9~> -m/I+"(p!uE&9H^mrrA;.#QZsKm/I+CF8f>IH_mj@XhFK%rrMT_o`'F~> -m/I+"(p!uE&9H^mrrA;.#QZsKm/I+TXo=gp[DpM3cIVa_rrMT_o`'F~> -OoGFUT`5&L;Z-k$&H3LJ&0We-3<`$>V6-T%rpL!an,K5lp]#a~> -m/I+;+fYeL3N`&ArrM:Cc3OE/m/I.D=r@5M!#Y\Y!Z3@@r](!WPl@cb[JoUtp[A-a[J0]O~> -m/I+;+fYeL3N`&ArrM:Cc3OE/m/I+TSGdO,HN8`tMuf0VrltMpr:^9mcIVaiJ,~> -JcDtS$1DX80j8's>$<Z[.0(Od#lQac6B$TKp]#a~> -m/I+;+fP_K&;9N<rrA;/#QUC^rr__*(btu!!*]=U!%IgW$Q'Ed(caTC3D,6hf(]2p~> -m/I+;+fP_K&;9N<rrA;/#QUC^rri(uF,ZXgV#d*FrIjrerJUiC]tNV's*t~> -O8f4SU]1GZP\[,orrMT6rk/<6rGr-X.2X3F)#OX?1"Q+!J,~> -m/I+;+fGYJ&;9fErrL+_cj0X`V="9bkEL%irVloecMkf`Xo3STCG?t]+X%C.(_@65f(]2p~> -m/I+;+fGYJ&;9fErrL+_cj0X`V="9bn%GjKrVlomkPj<FcF'd^Xf[8'H\?bDErh6_p]#a~> -JcDqR!r(mPp](9^s7ZrjhVQi?[9=+Q@rjufp]#a~> -m/I+L8uDpq&;9EM!U!)%#QZC2m/I.]n+ZSVs6p!^%.E'0f&!f<(`6b09%Nb:J,~> -m/I+L8uDpq&;9EM!U!)%#QZC2m/I.]n+ZSVr:g6[$0Ud.S9oUZ[?TkKs*t~> -JcD,;"e6`6s8V9Us*t~> -li-s+V?d57HggD&!UjgN#QZsKec,fC.8p3Gn+Qd3~> -li-s+V?d57HggD&!UjgN#QZsKec,fmH^t-9n+Qd3~> -m/I([JcE^h!Ul9PEs%rXf(\e9!khKQoDa=~> -m/I+\H_guK+gp_;!L+/C#Q[Qdm/I+TPl?"3SBf^[oD\m3;LA$8J,~> -m/I+\H_guK+gp_;!L+/C#Q[Qdm/I+\^&G,9`olOZoD\mCS@.tgJ,~> -JcDtS!Ul!G#RM%c3Eg4+hWOq5q#:BOkO\_(~> -li.!^(o7K=1$A!)!Ls_K#QThMrt"RW(`3f$(b%ITF1'lfs7c<g!T*;:s*t~> -li.!^(o7K=1$A!)!Ls_K#QThMrrMl-rGr9lKT)b0f'i)-p\=dgn+6R0~> -JcDtS#c/[]@s^O/+V=SX#pEeoXhE<SkG>l\s*t~> -li."2+f#ADN:-]Heeld?!4D1n$*>X"@s^O/.1d?q&.'dqF03I=n*d*mn,In~> -li."2+f#ADN:-]Heeld?!4D1n#gRdDV6uPPH[G^4$%&MNf&#Tan&F5Qs*t~> -JcEai!;Gm\%.A6C6Ke++hQ<Vq;F:<f"rJLM>'!$,n,In~> -li.":0r,'U1$A!)!$Tbr!>tRurseF<&45j[kMEVCHW!HQrX]8W.8")k9!.R^J,~> -li.":0r,'U1$A!)!$Tbr!>tRurs\Y0F-Q.fn)r!9[@EK[F8pRiPbkLHcL:d`~> -JcE"T"SZ[;9)&8`#k-s5[C'1).1lIa!BJa"s*t~> -lMgioUBgjQmf*81dKfh-m/I4_CD]\<r;R5pkMEVS@nJHe(_@NNf'iWh~> -lMgioUBgjQmf*81dKfh-m/I4_X`Ka$r;R#rn*eiYV3HZ3Erh6_n,In~> -JcDtS#c/[UCTY#$hXC=@#3W[Q;G(-Ln,In~> -lMgjCUBgl\hXCIE+jpVrN9gKLXXP*.XgR$Bn,!%gn%FZX8m:*?s*t~> -lMgjCUBgl\hXCIE+jpVrN9gKLc?jo?f%0<Yp\Omon(,1BPbmj;s*t~> -JcE"T!r&2rrWi]>6<\/pV=46[!pA/'n,In~> -lMgk@UBgl;Xmc8i+k$\t&?Y=!%/68/(_@5q6<\H,V=46[!q4_/n,In~> -lMgk@UBgl;Xmc8i+k$\t&?Y=!!r']]rGr.,S?9fVp\Fgjn)sH6s*t~> -M>mSMWrE7).1f*]+oVcI&-j@5>*Pl7p\3tQJ,~> -lMgnR+eo;DK_P!9!$Tes!@cmlrt;Fg&5m!e(`3f$(b%1CS?:ZBpZhd/~> -lMgnR+eo;DK_P!9!$Tes!@cmlrrp]$F-NMSrcA'c"cStkcKFrds*t~> -JcE%U%/4fK6LXs2c@ft2.4P3$"<f3t[I<J^J,~> -l2La!UBglDn+$DYmig-c!D;hJrtY9L(eX8shTh($;DBmC&.f[-0j;!Rm/MS~> -l2La!UBglDn+$DYmig-c!D;hIrsPrMPkY4@kIn!fKS9;F"FGfuf(\P2J,~> -JcE%U"8?jB>5S=-hT!6UHU8l!#RG57m/MS~> -l2LakUBglDkOJQQXUrqe!0ljM"8?jJ>5S=-hT!Q^HU9/1&.iXGm/MS~> -l2LakUBglDkOJQQXUrqe!0lgL!j-O6qu7&mhVPZJP_=C)F053's*t~> -JcE%U#krBG+e8#qs7cHk#4LF"[=iUcli2J~> -l2Le0&>TR4(uFf_!Ls_N#QZ*gm/I@cEtBdsn+ZkVr;QuihVPZ!F.DRrJ,~> -l2Le0&>TR4(uFf_!Ls_N#QZ*gli.3lF*kq$p](!crs&5dkLR>K`p<YT~> -l2LbXJcEpn!q0V1r<NU;H^rC4n*f?;J,~> -l2LeY>,)?'K^o'CS.P;u";iRB0d5Zb!E/CQrseF4(`3eq(h85hcIVIYjSs`~> -l2LeY>,)?'K^o'CS.P;u";iRB0d5Zb!E/CQrrVqkHi8!iV7">+kP+`3s*t~> -l2LbXP5bOV]Di&c3HIeQ+oV`P&1KVLH_nFEkPp&~> -l2LhZPRsVr!/0qC!V^C&#QbiH^&Hjic>t/m#QV9urrpt?F%SbJrX];O0fa#rXiBhms*t~> -l2LhZPRsVr!/0qC!V^C&#QbiH^&Hjic>t/m#QV9urrqSE[?QVsrc8<kKT)b8cJJ<Ys*t~> -JcFg2!;Fk?s-s>_hVPZ:F"nj:#R;1q;Hf%9hXBh2J,~> -kl1\H0r,'TK_#-Dk=YFR![4E/r;Qim`ZaUQ!>t:ks8ST&n(up/V/n@?(_@5q+Ycl)N8EF[m/MS~> -kl1\H0r,'TK_#-Dk=YFR![4E/r;Qim`ZaUQ!>t:ks8U(Dp[@S%`jLbPrGr3jKUemPn*g#;s*t~> -JcD_L#M,`9;F2fL&H2q9&6eH#J,~> -kPkNlU^-sRo)Aa(+nl6C;WmiT!0$1K!0#n:%+_PF;G&Ye(`3eq(g?;+J,~> -kPkNlU^-sRo)Aa(+nl6C;WmiT!0$1K!0#n:#NsCGS<S\RHi8!cSF$9+~> -JcE"T!RBQsrsAG_`heo'=qCs"m/MS~> -kPkOiU^-sRo)A]lpBUdCcM.>>mo&KX!>*iHrrLF%q#:Zpn&D2g>$;aS3UHcr~> -kPkOiU^-sRo)A]lpBUdCcM.>>mo&KX!>*iHrrM<Oq#:Zpn(u@'S=FqIN9pRp~> -kPkPVM#RJLaSuLY;COUmN6^nerrr/[kK[Ram/MS~> -kPkSW0r5-UN:[&MmooGk!N#ParrJr-m0E_jn*BuY`_nNO8rV'aq#:NlkNC-+K^A_h~> -kPkSW0r5-UN:[&MmooGk!N#ParrJr-m0E_jn*BuYhOK7XPeH8Sq#:Nln*fG9[I!pD~> -JcE+W$cY14&0V;b(cdhokP+uWV4?oPJ,~> -k5PFXV?d2>cL_&:k:-03!Ft<crrL\2mK`h:[Hmi#c8cFQ.2WmF6BoLYp\t8rSF$9+~> -k5PFXV?d2>cL_&:k:-03!Ft<crrL\2mK`h:[Hmi#hMcN&HZO7TN4n*:p\t9>`pE_U~> -JcE+W%"nm0Pbi^]&-rOjCVBNC!Uo4<s*t~> -k5PJ=3N!,`+m8Is!58.5!BK$/rrM:dmK`hcn*Bu^KFfT&V0ap6(_AE;`q]T6n*L()~> -k5PJ=3N!,`+m8Is!58.5!BK$/rrM:dmK`hcn*Bu^[<$]7cF&UXF*!#:hY@*Op[@JKJ,~> -JcE.X%duC`F8,_'eua!:#RF&Zir=N~> -jo5@?&?#j8)!CMj!0$^Z!>)[0rr@`?#QV!mrsnKX&:=0On(t0n.1d=ghW"Qc~> -jo5@?&?#j8)!CMj!0$^Z!>)[0rr@`?#QV!mrsnd^F05KBpZL,0HZO7mn)F@t~> -M>mSMXoANW#[6*ZrVm5]N%#$cp]%(:V<@(BJ,~> -jo5AE8uN!rF8,>,!TtX%#QS&urrA#H#QS&mrre8l>2K#PrsIVA0c5T<s/gXEkNMqr~> -jo5AE8uN!rF8,>,!TtX%#QS&urrA#H#QS&mrrf`NV=40WrsJ5.KQFQqs3A$ln*'e%~> -JcE.X#KBXI#XWmGf)G[VpNm04hY2's&6dBDs*t~> -jSo4MW<`MAV=X]fV%EG.!1`TZ!0$CQ!>)[(rs-PA&.hH\[GLo_$MSla9&B;`(`6H%l2Q8~> -jSo4MW<`MAV=X]fV%EG.!1`TZ!0$CQ!>)[(rs.DNF*!SRf'!#3$+4i=n+Wr*H^s9`s*t~> -JcGZJ!;H!_!;Fe=(@PaK.1caj+[U8$kN?"SC[_#*3=#n3l2Q8~> -jSo8L+fYeK+jT`[!V^+!#QUClrr`"lHggk3!JD$S#Q[Qdli.ahCND3I(_A,_He.ZS=qGK<pUrR( -&9I+9J,~> -jSo8L+fYeK+jT`[!V^+!#QUClrr`"lHggk3!JD$S#Q[Qdli.apV6,DtF)u\mXlo0AS9(h,pXY:E -F04^,J,~> -JcE1Y&)LLQs1O(X+V4nb.7+:GPl:UaKEqk?lMlA~> -j8T+UWX&W'n+?V\c8#)"!3Q2!"f3pZ#V"@&rr@`B#QZC*lMh+G>4;L2KM!]m&-O^S(`8M9rr\2k -(uFQXJ,~> -j8T+UWX&W'n+?V\c8#)"!3Q2!"f3pZ#V"@&rr@`B#QZC*lMhC`SF?L7]p*kjF*!#!F*#A"rr]ZM -F78DoJ,~> -JcG]K!;GdY!;G"C!q2AMrVm#`[=hEhrWiQBKY@Bb"2+sGhWk,k~> -j8T/C8ur:!&?YU)!r%?Zq$7!UhYmHTefjtt!K?dPrrM:dnH],AlMgqSS?;bi$KngM;A^5^&0Z_H -rr3)6&/a9hs*t~> -j8T/C8ur:!&?YU)!r%?Zq$7!UhYmHTefjtt!K?dPrrM:dnH],AlMgq[`m4P_"RjpLS9t6V!dh?+ -rr3)OF*$g8s*t~> -j8T,RJcF=$!nL8Wqu73$hR-6)#RCtr>+E90#U/'is*t~> -j8T2T[3=`>!>lBh#QZ+*o`"sT+nu<D1$AN8!MpA+#Q[Q\rr3#U3V!FV3To]-!o?h_qu73$hR-61 -&.f[5>,B5K&1QK$s*t~> -j8T2T[3=`>!>lBh#QZ+*o`"sT+nu<D1$AN8!MpA+#Q[Q\rr3#U3V!FV3To]-!p?*)qu73$kLQ/M -F)u\eSAsE^F*mB@s*t~> -JcE4Z"f2JJK\#norrh2l8hh1]#QYcql2Q8~> -ir9&JF6Nr4Hfq4KaTqm"oD\g(pBUdSkPbD]N"Gpn!@cn)rrK55o*>@6Xm,ihV&1Y7f(]%@"Q$gi -0d6N-!Z3)6l2Q8~> -ir9&JF6Nr4Hfq4KaTqm"oD\g(pBUdSkPbD]N"Gpn!@cn)rrK55o*>@6Xm,ih`cHg@kP+iQ"Rjp+ -N-kME!IM6=s*t~> -JcFa0!;G.G#k)77#RDl+[HIAc#M,_T.1f[QkNW"s~> -iVrr0+mTC:(tS`eKZXQ$+n,('!UiYT#QZ[CrVlo+)#OXBXoJFqF7KS:F6W]1mpd1O&2AjGn+ltg -etlk2(g<Hul2Q8~> -iVrr0+mTC:(tS`eKZXQ$+n,('!UiYT#QZ[CrVlo+)#OXBXoJFqF7KS:F6W]1pSE4XF+gsPn+ltg -kJj?OH^r+El2Q8~> -aSu87`r?&5Y5\gJ;RL9O#S8._Xn_nukLR?'kPp&~> -i;We9lNdYCp](9M;ToCJ(o@!!rrKMEpBUdSkPbD]mihW8"W4rQs6hu>#QZ*ol2Lk*;RL<>(]l-i -Xn_nukLRZ0kPp&~> -i;We9lNdYCp](9M;ToCJ(o@!!rrKMEpBUdSkPbD]mihW8"W4rQs6hu>#QZ*ol2M(HSCXf`F*iS: -cM7DAn)rQrkPp&~> -i;WfOJcFI(%I`K[s5'84&-rP6[FY*/s*t~> -i;WlQHP#QM!?pY*rrLt:bm4>Rn+?V\mo&ib!@cn'rrl"#+`h/$rr2tgnd#5Skl:\Os8N/WS3m2l -"%ouPpYPq#~> -i;WlQHP#QM!?pY*rrLt:bm4>Rn+?V\mo&ib!@cn'rrl"#+`h/$rr2tgnd#5Skl2+dn,NFV`ftgk -F-P8=pYPq#~> -`;]i3U&P,edJjO0PY)Jm(da2,n)44r~> -hu<`69'cf`[Jp1-pU)0j#QZ*goD\if)"n49&?Ym1"19:$kPbD]pIb#_!BK#rrs@PP8f/Bg8rV'a -i;\<~> -hu<`69'cf`[Jp1-pU)0j#QZ*goD\if)"n49&?Ym1"19:$kPbD]pIb#_!BK#rrsA/6P]LnmPeH8S -i;\<~> -JcE"T$2<;@=pPBF3ICMZs*t~> -hZ!W%+mfO8C]+25PShaQ!.4>;!UiYQ#QUClrrU31n,<7eXUt+1!>)*crsAGVS6?a@&35F<iW"E~> -hZ!W%+mfO8C]+25PShaQ!.4>;!UiYQ#QUClrrU31n,<7eXUt+1!>)*crr`#a`hiZU!fXP]iW"E~> -O8f4ST`5DFCEWrh+`"LKn"nn(s*t~> -h>[M?&FKf)+jU#c!NdNn#Q]#@oD\j!&G-5/>4;1b!T$H?#QTh<rsR+n.2WUFCUNX"Xkr7@J,~> -h>[M?&FKf)+jU#c!NdNn#Q]#@oD\j!&G-5/>4;1b!T$H?#QTh<rsS"lKQD3fXk)t8cL9rrJ,~> -h>[KLVZ-YjXoAas]k]V6#U*Au>5.4[J,~> -h>[QNKGa+_!/17L!NdNp#QZ[2oD\jc9(E5gF6E;t!Ls_n#Q\,cgA_NK]k]qO&1M+9>5.4[J,~> -h>[QNKGa+_!/17L!NdNp#QZ[2oD\jc9(E5gF6E;t!Ls_n#Q\,cgA_NSeuamPF*jakSG24HJ,~> -_#FE/Yl=^tcN!n#!:TU\#Nsrs.0q(hPii!r~> -h#@ED9'urc9'?-P!r&N.ed):"cLUu9[1Mm7!YB/Aq>UK8.J*lH3ToT*rn[YDp&>9chLmTp.8$,m -s*t~> -h#@ED9'urc9'?-P!r&N.ed):"cLUu9[1Mm7!YB/Aq>UK8.J*lH3ToT*s6g!Op\"Rdmfg+PF+fdt -k5Tr~> -`W#r4r;QckJcGcM#Nq$p#S:1IkOecVXW\7Gjo9i~> -g]%<21%#;JA,#p$!r&fGf*DAHo)AaR9(*#cV>C2m`[UNc!>r6.rs/"O0c1I*[I<bf"19QpSE9d$~> -g]%<21%#;JA,#p$!r&fGf*DAHo)AaR9(*#cV>C2m`[UNc!>r6.rs/#+KQD42f'i82"3uRH`o[5N~> -KDtrG]Dhnr&H)k9&:<"'rs%?Ks5$'RV<.`-~> -gA_3)3U[4S+g(V@!PMC`#QUCdrrVqZ+n#[;+gq7J!jtW3o`tRAV<@jaPSb5K(_@O2f(f7LhXCL$ -8f4\ls*t~> -gA_3)3U[4S+g(V@!PMC`#QUCdrrVqZ+n#[;+gq7J!jtW3o`tRAV<@jZ]mKZu!O_+crs%rds6l1n -cK5(V~> -JcG!7!;H!_!;G^W$e@WM9!sm<#S9"LhY[<XhJ5`kCChYsjo9i~> -g&D)u3U[4S9(2WV!o@DugB[g'f(8nBhD+C'"t@7cs7`W=oEYL0V>'3R$e@W]9!t0D(`58dhY[<X -hJ6#sEu6@6jo9i~> -g&D)u3U[4S9(2WV!o@DugB[g'f(8nBhD+C'"t@7cs7`W=oEYL0V>'3R$g3aqPh*j5F*ikRn,*+i -n#_i*Xa>EGjo9i~> -]Dhm*bPqS:]Di>c.0udMs6#=q#RE/ukPbD][3>MT!Z5G1jo9i~> -f`)!8.IRNC>2K,U!r&NGh$=#mN:[&MpIa`W";kpE8eCe(!"f&6!,L`s%F-[FV>pSYN%kk\0uiDT -rs,q\&/Ys%A+/OZJ,~> -f`)!8.IRNC>2K,U!r&NGh$=#mN:[&MpIa`W";kpE8eCe(!"f&6!,L`s%HiCccN!q5]o7#RN7RIr -rrL\trc8-fV=3OGJ,~> -PQ(XWo`"pc])Moa0aN-hrr3PC@jqZp>,C]fs5&uM+\J!^jSs`~> -fDbm&9(*#d;XaG]!o@]9i!9B-N;)uE!r%ojhZs9<PS!g"!F"[Krrgn-(jkHFrt)kR0c1a2Xmc;i -hOJ@18sJN"s*t~> -fDbm&9(*#d;XaG]!o@]9i!9B-N;)uE!r%ojhZs9<PS!g"!F"[KrrhMDF1(K9rt*bXKQDL:cM.A= -n&D2WPeHPHs*t~> -PlCaXX8`@lKFf;1f)G[ZkDU5`#U+lXs8Vi^cJJ<Us*t~> -f)Gd-Hg_4@A+06n"7ON5&E=#t.D>KIrrKeVhZsH9`pYnn#ZBO@rrqkM(b&YFrr3JsN$/`L.?*-` -s7c!-hY6(1J,~> -f)Gd-Hg_4@A+06n"7ON5&E=#t.D>KIrrKeVhZsH9`pYnn#ZBO@rrr/)H[DUPrr3Js]mFgAHbJnJ -s7c9Nn+YlBJ,~> -[f6@%M#RV7EtC@_rr3;M3=%r<&-s,;kMH5h~> -eGfQ.+n,a<;V(XC"S_)L3>grc!YB.uo)AaA1#E6A1#Ds1S/>Guj8T8=Eu6pgrr3;M3>b(T(`4E\ -n)"(p~> -eGfQ.+n,a<;V(XC"S_)L3>grc!YB.uo)AaA1#E6A1#Ds1S/>Guj8T8NXa?#irr3;fN,t5JHZOPI -n)"(p~> -eGfOCJcG!7!q2YmrVm7Y&.#u+KHUU<;SDh_s*t~> -eGfUE[5m^^!\(8?p\t<O[41AH![3Nko)AaR9&BmT1!]du!oBI1iVruJSAtO-$]Go>`nl@t&0Xrk -pYc(%~> -eGfUE[5m^^!\(8?p\t<O[41AH![3Nko)AaR9&BmT1!]du!oBI1iVruR`n(+g$FP5%hXA.2F*jG. -huA3~> -R/[0\o)A^aYQ#$o3=&ggs7a3:&-tnbi;\<~> -df0?nA+0a*+`$97rr>[W#Qd#op[\=cpOj+9#QZBoeGfsG3=oBos7a3:(`5m%i;\<~> -df0?nA+0a*+`$97rr>[W#Qd#op[\=cpOj+9#QZBoeGfsGN,tNhs7b*@HZPG?i;\<~> -dJj4@lMgkYj8T,RT)T8oHO'mD[I=.qpSB#=Hf4pS~> -dJj:BV(qHF"<i-Cn+Z_Z!UiYJ#Qbirp[S7bmt;P9#QZ[2eGg!PHPd;\[I=.qpSB;UHf4pS~> -dJj:BV(qHF"<i-Cn+Z_Z!UiYJ#Qbirp[S7bmt;P9#QZ[2e,KiaF*!Ssp](9f`e8E@i;\<~> -MZ3\NXoAgC@h8nhHbKIZpFur#i;\<~> -ci4'lCE`0Q$6`<+]tN;&f"H,9mK`hJ^$u%'pP][A#QZ[*df0`qCD[m;KZ=&lpG!M3i;\<~> -ci4'lCE`0Q$6`<+]tN;&f"H,9mK`hJ^$u%'pP][A#QZ[*df0a4V0d9:[GLr`pPa1$i;\<~> -cMmn=^]+<.X8`RjS3dJm.=9(S.0tmjs*t~> -cMn"@]k\JR#lc%N0j6R\&FKf)CX2GL!r%Wji!9?<`mF_nkF>-](bp]``\A<hi;\<~> -cMn"@]k\JR#lc%N0j6R\&FKf)CX2GL!r%Wji!9?<`mF_nn&CT5H\Af`hLos`i;\<~> -bl7\;eGfOCQN%9[S1tQ\&.f+-f&6RY~> -bl7e>c>+TU#Q];HnG`RYN#:IY!@cUErsA.a0b>0=&/[abi;\<~> -bl7e>c>+TU#Q];HnG`RYN#:IY!@cUErsAG>N,s&eF*!<'i;\<~> -NW0"QV>gb>CFKf3>.*8fJ,~> -ao;I_CH36e#Q];@nG`RaKFm)J!Y@uLb5V[cF"nLT>.*8fJ,~> -ao;I_CH36e#Q];@nG`RaKFm)J!Y@uLb5V\&Xb;%JV:OQ(J,~> -aSu87aSu87U]1Jc`kB(KhZ&*~> -aSuD;hR.,JhZs7(n*p>YpQQNQ#Q];8aSuD3`kB(KhZ&*~> -aSuD;hR.,JhZs7(n*p>YpQQNQ#Q];8aSuD;hU^9HhZ&*~> -`W#r4VuHbkTDsE~> -`W$5<kK]Sq8g,#_jp2#CV=4!T!q1dZi!9@1pRhJ9~> -`W$5<kK]Sq8g,#_jp2#CV=4!T!q1dZi!9@1pRhJ9~> -_#FE/XoACqT)X<~> -_#FZ6`kAKa@p2M'+mfO9&>f!u!p>LZi<TJrHhX-3J,~> -_#FZ6`kAKa@p2M'+mfO9&>f!u!p>LZi<TJrHhX-3J,~> -]`8$+NrK3pN/ZW4s*t~> -]`8$+!WV?]`W28#CB.!$#QlMkK\#eq!nLNdi!9@)n(n!G]p+c<`W(G~> -]`8$+!WV?]`W28#CB.!$#QlMkK\#eq!nLNdi!9@)n(n!Gf"Jcc`W(G~> -Zi:.%s7cQmp\+Uep[nIcpY>cKpYPoThHCHr&/^)ha8^Y~> -Zi:.%s7cQmpC$0QkO7U&kO7U&n+ZJS!r&3FhZs79pYPoNhHKmq![36ca8^Y~> -Zi:.%s7cQmpC$0QkO7U&kO7U&n+ZJS!r&3FhZs79pYPoTn!n`GH[E0pa8^Y~> -JcG0<!;G@M$28cP&5kLo(kgbes*t~> -PlCgJN#:IY![36khZ!oVHPd;l3>`omhT5_I~> -PlCgJN#:IY![36kh>[bgF*!k1F*k=`aT$b~> -JcG3=!;G@M$hrL4#\2`)KErD]f#drB~> -Q2^p*=r??,ruq@I!\(hWhZ!uXhDlE_hSt3c+\L>-s*t~> -Q2^p*=r??,ruq@I!\(hWh>[iNKQF!YhR.EOPip0gJ,~> -JcEso%I^,c&.!shs7_Hq#XZhZs*t~> -Qi@-MPTf/p#S8/4KGXt#0ui&L%I^Ds(_DB#s7_I$&44[bs*t~> -Qi@-MPTf/p#S8/4KGXt#0ui&L%JS/4HZQUps7a3RF-Pk1s*t~> -JcEso%b=fn&-riDp]'uH(^NIJbQ!(~> -R/[2`3T^SR&5o%LS/;M;CX1`8!nLObrYPpCp]'uP+W*PcbQ!(~> -R/[2`3T^SR&5o%LS/;M;CX1`8%d0@YF)u]Rs8Vi,HZPG.bQ!(~> -JcGQG!;G%D&EhX-V)\f1SH&WXN"?7TSG1;.J,~> -Rf<H/F!9ZO#u\1opSB#=+f4Y^rt+YMkG:0M0qA:Dmu/)#6Cdeps*t~> -Rf<H/F!9ZO#u\1opSB#=+f4Y^rt+Y^n&C<-KZ=&lpUtopN5kV:s*t~> -Sc8]aiVruRs7b+E!r(mPrr3G@3=$e)p]'uq8dH8mn':r`~> -Sc8fd`a^1T#RVD@[J0^qS08_A^"`Pgp[@kUrscY%&1OaUs7`on(a4k,cMrC~> -Sc8fd`a^1T#RVD@[J0^qS08_A^"WJdn,<7qer4ZscM.A5es(6&^%]hPJ,~> -JcG`L"8DiqpX]?Zer3ds`qTN5`\@`BSF?LXc:S?ZK_NgmJ,~> -TDo#V]lP@[#R_JI[J0_$pRE[)V=31=("S=RPg9%'s3<>9.AcM5s3=LR+cQ0As*t~> -TDo#V]lP@[#R_JI[J0_$pRE[)V=31="R!Ip`np^p%Gm%bHcGg[s6#VfHbK1"s*t~> -U&P,eZ2Y$93=lH-0t%#\%CK(F+_0^8s4019&=i49s*t~> -U&P5hS5LNo#Qu;KKY?jQrr_G;V;Br+#.6H.(_AF0rr3G8;A^iukPtS53=m$tn'M)b~> -U&P5hS5LNo#Qu;KKY?jQrr_G;V;Br+!S35/Erh6Nrr3GYS9opkn,NFNN,s?cpX&qj~> -V#LGhiW&rPqYpQig&D?78dI.T+UB7!rr3GrEsN%LhZ*W$@j)C]hU2@R~> -V#LSlc=8"/lj*k.(cc*.hWOY-qYpQig&D?78f09m.2XMArr3GrHPdSthZ*W$CFL)uhU2@R~> -V#LSlc=8"/lj*k.(cc*.hWOY-qYpQig&D?HP]Me[KQDLkrr3H%X`JQRn,NFNV0dQZkL'<[~> -V>gPiY5]ER+X*]VXYC)1[J0_$kBdaGA(L\[mu/(hK_NppJ,~> -V>gVkKH]^gruhMTHaV/^bPrL#.4M+f[4r4I[J0_$ms>lgA)@7cmu/D$K_NppJ,~> -V>gVkKH]^gruhMTHaV/^bPrL;H[Ed,cAZgtf(]4En$RL`V<@mYpUtop[J/,LJ,~> -JcF-t$G@T3^&Ri/+UBg9rr3DiEtAmd[K$9qHOq@?df4g~> -V>gRL&Fg#1&/\#dPfC__rsHFg0tmV]XXP)A^&J$?kAqIO>.+D1mt;6$`mXm;~> -V>gRL&Fg#1&/\#dPfC__rsI>1K\$1teqA+'f)G[Xn#^qXSC[`?pU,'qhU;FS~> -VZ-YjmJm4\_uC+a0aLt>s8TJM#[6]rrsS:[0aJr)p]%W<&A?NlJ,~> -VZ-\k;YCA&&/ZQ_H^*+Ep\2T*$cXn<>2K;Z[4)qrn,E=pn!#gD.CJpM[36C,df4g~> -VZ-\k;YCA&&/ZQ_H^*+Ep\2T*$f6h`V=4HaeqA+7p\t1#pUuN,Hd;BcepDJpdf4g~> -QN$sZ_Z'qf`npaqpREBM[Jp1/V(i6khYmH\[5eL9PeDDT1#C@YJ,~> -V>h'b3AENK3AENKCP7A;kNDTVs8U@LhZ*WMS1,nprr3,'0c4]_rVm2364bT9`d8OWhU;FS~> -V>h'b3AENK3AENKCP7A;kNDTVrrVB?n,E=h`d<Birr3,HN,u,arVm2TN,sZlhR.E`n'_5d~> -V>gPiq>UHh^AeStKK1JJV>pSiPa(&(rrr.]&.iX6rVm,10aJpO&-udns*t~> -V>gkrhU^Q7hU^Q7pV-Y8hLmmD8u;RfpQV3)rr3/rPSb6YhYmHZ[5edI0c1a;dJn^~> -V>gkrhU^Q7hU^Q7pV-Y8n$S+-PfEb'pVt5Arr3/r]mG+.n,<7keqA*kKR7d:dJn^~> -JcFF'$Kl11&.f*aV>(#ar;QfC6N.5kA*<gj#/)Gs#S:e.dJn^~> -JcFF'!Ujh&(^)"Yp](!crs$b@(_@O"n,<7j`\A;A&8U.Ms*t~> -JcFF'$Lb*<H[Bg\`qTN-r;Qf\Pl>_)V=4B_#2Y#[F*"JHdJn^~> -JcG!7"8CBSf(K%K[0Rq?PX5X1cMRVIc8c.A64a]DhYmHXkAq1G>2I[,J,~> -JcG!7"8CBShY$mS[1FdOS3e&IcMRVIc9`?b65U8LhYmHXmrK<_A)>W5J,~> -JcG!7"8D!0kOni\eoQMX`ftP'kPP8bkDXJ/P]LoJn,<7in$R4XV=2h3J,~> -JcG$8"n.C1+[W%!rs3BGA+0H26Bp[2rsI=L#T/6G@gEWUkPbDakA(>/A*;;?J,~> -JcG$8"n.C1.8$H1rs3ZWA+0H;6Bps:rsI=T&0Z_XCD[n(n,<7ikAqIWA+.kGJ,~> -JcG$8"o#]hH^)PDrs5`JV>(#HPeHP`rsIqRF*kU`V/q![n,<7in#^YPV=2k4J,~> -JcG'9#krZ_&.f*jSG2s]$MVj7s.ouEf)Pd$qu7&eHOq?ZkPs^\&.ip\rs7e'&-uIbp](!=s*t~> -JcG'9!r%?krYP\cV>'of$MVj7s.p8Uf)Pd,qu7&mHOqWbn,MQl&/]Kdrs8(/(`6H%p](!=s*t~> -JcG'9!Va#$HNS>9`qTE2$MW`Xs2K,5kPtSFqu7&m[<m86n,MjYF*k%ers8(qF*"2@p](!=s*t~> -JcG'9#gOS)N28iH.CK-S$.aH5hZ(kM#\2`drsR[e#XZ6)s6!l'+gq7J#Npap#U-%P^"346~> -JcG'9#gOk9N29,X0tmPc$.acFhZ(kU(h;FtrsR[e&5'Y9s6j_?.CK*R#Od=#&1O`h`n(0?~> -JcG'9#j6P]]uH:XN7Rt-$0S^mn,MR(F/A@#rsS:cF-P8Us6m(2K\$)$#Of'ZF+hiif%0kO~> -JcG'9&"EnShZ'u<0t$cUkF=j^[Jp1.PR%PZrVlrn^#&bg$J%NL3R7[)ej9XXqYp`$+UB6$f%0kO~> -JcG'9&"F1chZ'u<3OSV]n"i?"[Jp1.PSb7%rVlrn^#&bg$J%f\3R7[)ej:3hqYp`,.2XLLf%0kO~> -JcG'9&&r[Dn,LstK\#ntn&CTFf)G[O]lS8.rVlrnf'iV<$KmXpN9C6@kEL%iqYp`EKQDgCkLTZ`~> -JcG'9*h3KZ^&S,?hY7'EKMiWmC[_<'hJ3ZGV>(#QS0:5Mrr3=q+UC*As7_H`6I,H-"19QpV:GTr~> -JcG'9*h4&r^&S,?hY7'EKMis1C[_<'hK'M_XnVkaS1-eUrr3>%.1ehcs7_Hh9$[;5"19j,V:GTr~> -JcG'9*l`8Jf)Pd$n+ZkV[@DSbXnVkqn#^YacN!q5`d<s5rr3>FKQE+/s8TcRPiqoC"4i-P`mt*>~> -JcG'9"5Z$D>5S=(pV#.B(_E5:rtsoc#VjWU=qCrF>4;LkpREB43OQ7T#\3?!rrTU)pXT:o~> -JcG'9"5Z$LA,H91pV#.J+V:1Crtsoc(bs=e@i,ag>4;LkpREZL3OQ7](h<%1rrTU1pXT:o~> -JcG'9"7M1iV>L8spX\NIHZR4+rtt3hF,];FV0d9)V>(#ipVql-N7QR=F/AX,rrL]reGk%~> -JcG$8&;1T+^$isfHd;*[s6!8c6H9$)(:>S&;G%3+;@k"1p](9fV%<n].0pKeao?k~> -JcG$8&;1l;`p^p#Hd;*[s6!8k9$[G9(:>k6>"TVC;A^jAp](9fV&1%(0b>2(ao?k~> -JcG$8&@HS+hY5m7[HI;as6lJ!PhuE>(=n.[S<S)9S9oUrp](9f`d;c[KQDLcao?k~> -JcG$8&^EBB@s]@)#U,H,s8So=#]oJ6rsF\r#RD8ohHC16^&J$9pQR*<&0[Rbs*t~> -JcG$8&^E][@tZ9J(b(^Ds8T2M(j#0FrsF]%&/ZR;hI@*O^&J$9pRErT(b(urs*t~> -JcG$8$0R7gV6tYkF+h7+rrgVoF1(cArrBb3Es@<*n"k)Yf)G[NpVqmcHN;(,s*t~> -JcG!7!Nd4<#lcU\#U-VTrr[TR.CK0T$g2RB6H9'*ej9X/cMdbFpU-OBa8^Y~> -JcG!7$*>?^&/[,V(b)llrr[oc0t%#\$g2jR6I,W2ek-cOcMdbFpU-OJa8^Y~> -JcG!7!S2VsF8q1#F+i-Drr]ZMK\$/&$h(KMPhuH?kEL%PkPbD_pX[@Ia8^Y~> -JcG*:']..(mofu&9$YFC#YO:[s5$'J6Ke@J!oAmUrVm#.&.!(?_#Jo~> -JcG*:']..(mog869$YFK(eWuks5$?Z9(2cZ!oAmUrVm#.(_CKO_#Jo~> -JcG*:'^t5ZpRH;GPipnfF-Q.ns6l1nPjeVO!q3hZrVm#OF*"JX_#Jo~> -JcG0<&([7S>3Gq!#RHChs/chDPlC[cV'-Csp\t0mn,E=kp]']H&.kAIs*t~> -JcG0<&([R\A*<m3(_DZ+s/chLSGrNkXXOg7p\t0mn,E=kp]']H(`8dYs*t~> -JcG0<&*Ls&V=4H@F*#%ps4274`r>u?c@g8HrVlllrr32ss7a3RHcEl$J,~> -JcG9?)t3h,@gGuqs8VOk#V"s:pK@h_kPtSVHOqp>p\b$rhOO'7hEhd#_#Jo~> -JcG9?)t3h,CD]t<s8VOk(bt4RpKA+gkPtSVHPeKFp\b$rhOO'7hF\W3_#Jo~> -JcG9?)u'C4V/r0qs8Vh`F+j#^pSDqin,NF^[<%;Xp\b$rn&G,%n!%n$_#Jo~> -JcG?A#j7_Js8TbU&@MN;$)JIMPkY3[+V:1Crrh1=#YO:Yrs7e'+f4qQ0aN-As*t~> -JcG?A#k+:Rs8U(f(q'AC$*>?fPkY3[.1i$Krrh1F(eX8qrs7e/.Acda0c58Qs*t~> -JcG?A#k,dQs8Ur&He/2r$-mmE^&S,`H[Ed3rrheLF-Q.lrs8(qKZ<cCN,uDBs*t~> -JcGEC)#&A;+YhjRk=Q"`n,NFV@gGEXs5$ob6Iu/9"/Q87F8c+EpK@h>;F1X+f"h<9~> -JcGEC)#&\D.5B]Zmn+-pn,NFV@i.Phs5$or9%O"A"0ECOHi<sMpL>$`;G%cLf"h<9~> -JcGEC)#(_&H]7.fn!%mip](9fV/qmis6lJ!Pir&G"3tt7[Jg+2pSDqXS<S)AkJ7+J~> -JcGEC$g4po.1haDs-+'<cMmhM[36*Gp]%WE&=!1o"Qs8#+kHVl#/*#.#RDl<^]/f~> -JcGEC$h(L*0c6G\s-sWLcMmhM[4)r_p]%WM(nCU*"Qs83.G"It!QI/!(]c(E^]/f~> -JcGEC$h)ZlKR:`=s2K,,kPkJfepDb`p]&ftF2n4Z"Ri1.K]i=6#2Y;cF*!#J^]/f~> -JcG?A([kN5>3Gq:3=(T<s8V8/#W^cAs)SH<hZ!NXc7'<?hYmHXer4s/[J.H9J,~> -JcG?A([kiFA*<mC3>d_Ls8VP7(cgIQs*GSThZ!NXc7olOhYmHXer598[J.H9J,~> -JcG?A(\abISF?L@N,u],s8VPqF,]Sfs/g@,kPkJakCdoYn,<7ikIn:2f(ZrZJ,~> -JcG<@$(MPM[K#E*#W^K8rs@7*#b:qphB<GGrr3/rPSbR?p\b$ln+XNqJ,~> -JcG<@$(Mh][K#]:(dcgQrs@72(nCX+hC0"Wrr3/rPT_KPp\b$ln+XNqJ,~> -JcG<@$-%==f)P3@F,];]rs@kAF2n7[msBD`rr3/r]mG+Gp\b'kpV$TW~> -JcG<@$/RuSK_PM[+X*]]rsJLR#T0uLs+Cq,`r>u@pK@hWcF3b'~> -JcG<@$/S8kK_PMd.4MCursJLR(a6<es,7L<`r>u@pL>$pcF3b'~> -JcG<@$1F+"[J0^XH\B]Crs?)SHe/5s[<%#Xrr3,qV/qUY[f:j~> -JcG9?$$-A$f)PJ)#ZBjbrsI%3#]'27`]4<?n,E=jc7'#spYNF[J,~> -JcG9?$%!4<f)PJ2&6eQ%rsI%3(i/mG`]4TOn,E=jc7p/6pYNF[J,~> -JcG9?$+4i-kPt:8F.D^ursIqJF053:hMcNXp\t0rkCdoHp[>WlJ,~> -JcG9?$-j(f[K$8k#Vjp0rsJ4J&2ClupN$Th^&@s7N!KtuCZi8.J,~> -JcG9?$-j)![K$8k(bsV@rsJ4R&2D3)pNm`3^&@s7N#3C8F76[>J,~> -JcG9?$0QANf)Pc`F,];]rsJM6F,\uUpU,'qf)>UP]lSOsXm`h#J,~> -JcG9?$28KH6KeC30aMRnrsIU;#\3&tehIGGkPkJahGQ(Lf!ta1~> -JcG9?$28c`6LXsC0bAF)rsIUC&8Ub7hD#jgn,E=ihGQ@\hRNT9~> -JcG9?$2:iKPjeY@N,u-"rsJ4JF/A@*kDXJan,E=in!o'=kICPB~> -JcG6>#dkKd`rGdK#V#]O$$uq$^&S+c#U.LlrrT%1n$i=I~> -JcG6>#dkg!`rGdK&2F+_$%rj=^&S+c&1Pp'rrT=Bn$i=I~> -JcG6>#hF?LhZ*>PF+jJk$+4i$f)PcXF+i`TrrUL&pUC0Q~> -JcG6>$/SPcF8u9J.1i?Srs@OK#]'27c3O]hrVm#ps8UZi\c70~> -JcG6>$/SPsF8u9J0c7%krs@OS(i/mGc57,+rVm#ps8UZq\c70~> -JcG6>$0Rh"[K$9XKR;#CrsA.YF053:kAt^qrVm#ps8V9=\c70~> -JcG3=$'Yu]cMua!#[6Eirs5GE#__'2#RJ-@rr]YX+hbJeJ,~> -JcG3=$(MhmcMua!&7ao%rs5_U(kgbJ&/`+Xrr]Y`.D<=mJ,~> -JcG3=$-%=NkPs_8F.D^trs6nsF1(J^F*#q0rr^i*He,e.J,~> -JcG3=$-j\;SH&VZ&2D3'rs7dk#S9<G#X[DFrr[TR&?WPDJ,~> -JcG3=$-jtKSH&VZ(bs>7rs7dk(`5jo(dd*Vrr[Tb&@K+LJ,~> -JcG3=$0Qtg`rH(YH]6h[rs8(iF*j.)F-Q.jrr]ZMHd95&J,~> -JcG0<$"F6=kPsC*#__sNrrJr>rWiNZ[JKn*c?"@$])R9~> -JcG0<$#:AUkPsC2(khY^rs#SS(_@N=[JKn*c?"[-])R9~> -JcG0<$)M^5n,Mj@F1(c@rrLDlrc8+!f)#CKkH2/d])R9~> -JcG0<$,$lUV>pRK#W^c?rrq7G@rm"RY5a"~> -JcG0<$-!f!XoJE[&457Prrq7GCNG0cY5a"~> -JcG0<$.aHEcN!pXF,]SdrrqkUV6./oY5a"~> -JcG0<$0OV\C\RkS#S=ECrr_GCF1nXSJ,~> -JcG0<$0OnlC\RkS(`9[[rr__KF2k9\J,~> -JcG0<$1F+"XnVkYF*#q3rr_`'Xk'QQJ,~> -JcG-;%[75Bf(\#,#YNt)s8TdhWrIS~> -JcG-;%\+@bhY5k<(eWZ9s8U*qWrIS~> -JcG-;%`WRCkPt!lF-Q.Vs8UsEWrIS~> -JcG-;$cXV$6?>-m3B:9FpS\%A~> -JcG-;$dLI<6@1^03B:9NpS\%A~> -JcG-;$f6PXPc]mcN/X:PpS\%A~> -JcG-;!q2'ZrWiTTXhEnos*t~> -JcG-;$1Efi(_@N=XiBP#s*t~> -JcG-;!r'BTrc80pf&#kls*t~> -JcG*:#5=s80ltY/U]5i~> -JcG*:#5>6@0mh47U]5i~> -JcG*:#5?EFN32:;U]5i~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -JcCN*J,~> -%%EndData +%%Page 1 1 +/xpdf 75 dict def xpdf begin +% PDF special state +/pdfDictSize 15 def +/pdfSetup { + 3 1 roll 2 array astore + /setpagedevice where { + pop 3 dict begin + /PageSize exch def + /ImagingBBox null def + /Policies 1 dict dup begin /PageSize 3 def end def + { /Duplex true def } if + currentdict end setpagedevice + } { + pop pop + } ifelse +} def +/pdfStartPage { + pdfDictSize dict begin + /pdfFill [0] def + /pdfStroke [0] def + /pdfLastFill false def + /pdfLastStroke false def + /pdfTextMat [1 0 0 1 0 0] def + /pdfFontSize 0 def + /pdfCharSpacing 0 def + /pdfTextRender 0 def + /pdfTextRise 0 def + /pdfWordSpacing 0 def + /pdfHorizScaling 1 def + /pdfTextClipPath [] def +} def +/pdfEndPage { end } def +% separation convention operators +/findcmykcustomcolor where { + pop +}{ + /findcmykcustomcolor { 5 array astore } def +} ifelse +/setcustomcolor where { + pop +}{ + /setcustomcolor { + exch + [ exch /Separation exch dup 4 get exch /DeviceCMYK exch + 0 4 getinterval cvx + [ exch /dup load exch { mul exch dup } /forall load + /pop load dup ] cvx + ] setcolorspace setcolor + } def +} ifelse +/customcolorimage where { + pop +}{ + /customcolorimage { + gsave + [ exch /Separation exch dup 4 get exch /DeviceCMYK exch + 0 4 getinterval + [ exch /dup load exch { mul exch dup } /forall load + /pop load dup ] cvx + ] setcolorspace + 10 dict begin + /ImageType 1 def + /DataSource exch def + /ImageMatrix exch def + /BitsPerComponent exch def + /Height exch def + /Width exch def + /Decode [1 0] def + currentdict end + image + grestore + } def +} ifelse +% PDF color state +/sCol { + pdfLastStroke not { + pdfStroke aload length + dup 1 eq { + pop setgray + }{ + dup 3 eq { + pop setrgbcolor + }{ + 4 eq { + setcmykcolor + }{ + findcmykcustomcolor exch setcustomcolor + } ifelse + } ifelse + } ifelse + /pdfLastStroke true def /pdfLastFill false def + } if +} def +/fCol { + pdfLastFill not { + pdfFill aload length + dup 1 eq { + pop setgray + }{ + dup 3 eq { + pop setrgbcolor + }{ + 4 eq { + setcmykcolor + }{ + findcmykcustomcolor exch setcustomcolor + } ifelse + } ifelse + } ifelse + /pdfLastFill true def /pdfLastStroke false def + } if +} def +% build a font +/pdfMakeFont { + 4 3 roll findfont + 4 2 roll matrix scale makefont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16 { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /WMode exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16L3 { + 1 index /CIDFont resourcestatus { + pop pop 1 index /CIDFont findresource /CIDFontType known + } { + false + } ifelse + { + 0 eq { /Identity-H } { /Identity-V } ifelse + exch 1 array astore composefont pop + } { + pdfMakeFont16 + } ifelse +} def +% graphics state operators +/q { gsave pdfDictSize dict begin } def +/Q { end grestore } def +/cm { concat } def +/d { setdash } def +/i { setflat } def +/j { setlinejoin } def +/J { setlinecap } def +/M { setmiterlimit } def +/w { setlinewidth } def +% color operators +/g { dup 1 array astore /pdfFill exch def setgray + /pdfLastFill true def /pdfLastStroke false def } def +/G { dup 1 array astore /pdfStroke exch def setgray + /pdfLastStroke true def /pdfLastFill false def } def +/rg { 3 copy 3 array astore /pdfFill exch def setrgbcolor + /pdfLastFill true def /pdfLastStroke false def } def +/RG { 3 copy 3 array astore /pdfStroke exch def setrgbcolor + /pdfLastStroke true def /pdfLastFill false def } def +/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor + /pdfLastFill true def /pdfLastStroke false def } def +/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor + /pdfLastStroke true def /pdfLastFill false def } def +/ck { 6 copy 6 array astore /pdfFill exch def + findcmykcustomcolor exch setcustomcolor + /pdfLastFill true def /pdfLastStroke false def } def +/CK { 6 copy 6 array astore /pdfStroke exch def + findcmykcustomcolor exch setcustomcolor + /pdfLastStroke true def /pdfLastFill false def } def +% path segment operators +/m { moveto } def +/l { lineto } def +/c { curveto } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/h { closepath } def +% path painting operators +/S { sCol stroke } def +/Sf { fCol stroke } def +/f { fCol fill } def +/f* { fCol eofill } def +% clipping operators +/W { clip newpath } def +/W* { eoclip newpath } def +% text state operators +/Tc { /pdfCharSpacing exch def } def +/Tf { dup /pdfFontSize exch def + dup pdfHorizScaling mul exch matrix scale + pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put + exch findfont exch makefont setfont } def +/Tr { /pdfTextRender exch def } def +/Ts { /pdfTextRise exch def } def +/Tw { /pdfWordSpacing exch def } def +/Tz { /pdfHorizScaling exch def } def +% text positioning operators +/Td { pdfTextMat transform moveto } def +/Tm { /pdfTextMat exch def } def +% text string operators +/cshow where { + pop + /cshow2 { + dup { + pop pop + 1 string dup 0 3 index put 3 index exec + } exch cshow + pop pop + } def +}{ + /cshow2 { + currentfont /FontType get 0 eq { + 0 2 2 index length 1 sub { + 2 copy get exch 1 add 2 index exch get + 2 copy exch 256 mul add + 2 string dup 0 6 5 roll put dup 1 5 4 roll put + 3 index exec + } for + } { + dup { + 1 string dup 0 3 index put 3 index exec + } forall + } ifelse + pop pop + } def +} ifelse +/awcp { + exch { + false charpath + 5 index 5 index rmoveto + 6 index eq { 7 index 7 index rmoveto } if + } exch cshow2 + 6 {pop} repeat +} def +/Tj { + fCol + 1 index stringwidth pdfTextMat idtransform pop + sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16 { + fCol + 2 index stringwidth pdfTextMat idtransform pop + sub exch div + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16V { + fCol + 2 index stringwidth pdfTextMat idtransform exch pop + sub exch div + 0 pdfWordSpacing pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing add 0 exch + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj1 { + 0 pdfTextRise pdfTextMat dtransform rmoveto + currentpoint 8 2 roll + pdfTextRender 1 and 0 eq { + 6 copy awidthshow + } if + pdfTextRender 3 and dup 1 eq exch 2 eq or { + 7 index 7 index moveto + 6 copy + currentfont /FontType get 3 eq { fCol } { sCol } ifelse + false awcp currentpoint stroke moveto + } if + pdfTextRender 4 and 0 ne { + 8 6 roll moveto + false awcp + /pdfTextClipPath [ pdfTextClipPath aload pop + {/moveto cvx} + {/lineto cvx} + {/curveto cvx} + {/closepath cvx} + pathforall ] def + currentpoint newpath moveto + } { + 8 {pop} repeat + } ifelse + 0 pdfTextRise neg pdfTextMat dtransform rmoveto +} def +/TJm { pdfFontSize 0.001 mul mul neg 0 + pdfTextMat dtransform rmoveto } def +/TJmV { pdfFontSize 0.001 mul mul neg 0 exch + pdfTextMat dtransform rmoveto } def +/Tclip { pdfTextClipPath cvx exec clip newpath + /pdfTextClipPath [] def } def +% Level 2 image operators +/pdfImBuf 100 string def +/pdfIm { + image + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfImSep { + findcmykcustomcolor exch + dup /Width get /pdfImBuf1 exch string def + dup /Decode get aload pop 1 index sub /pdfImDecodeRange exch def + /pdfImDecodeLow exch def + begin Width Height BitsPerComponent ImageMatrix DataSource end + /pdfImData exch def + { pdfImData pdfImBuf1 readstring pop + 0 1 2 index length 1 sub { + 1 index exch 2 copy get + pdfImDecodeRange mul 255 div pdfImDecodeLow add round cvi + 255 exch sub put + } for } + 6 5 roll customcolorimage + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfImM { + fCol imagemask + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +end +xpdf begin +/F2_0 /Helvetica 1 1 +[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle + /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash + /zero/one/two/three/four/five/six/seven + /eight/nine/colon/semicolon/less/equal/greater/question + /at/A/B/C/D/E/F/G + /H/I/J/K/L/M/N/O + /P/Q/R/S/T/U/V/W + /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore + /grave/a/b/c/d/e/f/g + /h/i/j/k/l/m/n/o + /p/q/r/s/t/u/v/w + /x/y/z/braceleft/bar/braceright/asciitilde/bullet + /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl + /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet + /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash + /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis + /space/exclamdown/cent/sterling/currency/yen/brokenbar/section + /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron + /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered + /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown + /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla + /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis + /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply + /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls + /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla + /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis + /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide + /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] +pdfMakeFont +612 792 false pdfSetup +pdfStartPage +26.1663 -1.02141e-14 translate +0.9406 0.9406 scale +[] 0 d +1 i +0 j +0 J +10 M +1 w +0 g +0 G +q +[1 0 0 1 0 0] cm +[1 0 0 1 0 0] Tm +0 0 Td +0 g +328.715 366.945 10.4374 0.2006 re +f* +0 g +324.902 367.146 18.0648 0.2005 re +f* +0 g +322.292 367.346 23.2834 0.2006 re +f* +0 g +320.285 367.547 27.2978 0.2005 re +f* +0 g +318.278 367.747 31.3122 0.2006 re +f* +0 g +316.672 367.948 34.323 0.2006 re +f* +0 g +315.267 368.148 37.3338 0.2005 re +f* +0 g +313.862 368.349 39.9433 0.2005 re +f* +0 g +312.658 368.549 42.5525 0.2006 re +f* +0 g +311.453 368.75 44.9612 0.2006 re +f* +0 g +310.249 368.951 47.1691 0.2006 re +f* +0 g +309.245 369.151 49.377 0.2005 re +f* +0 g +308.242 369.352 50.5813 0.2005 re +f* +0 g +307.238 369.552 49.377 0.2006 re +f* +0 g +306.435 369.753 47.9719 0.2006 re +f* +0 g +305.432 369.953 47.3698 0.2006 re +f* +0 g +304.629 370.154 46.5669 0.2005 re +f* +0 g +303.826 370.355 46.1654 0.2006 re +f* +0 g +303.023 370.555 45.7641 0.2005 re +f* +1 g +348.787 370.555 13.8496 0.2005 re +f* +0.498 0 0.482 rg +362.637 370.555 2.2079 0.2005 re +f* +0 g +302.22 370.756 45.3626 0.2006 re +f* +1 g +347.583 370.756 13.8497 0.2006 re +f* +0.498 0 0.482 rg +361.433 370.756 4.2151 0.2006 re +f* +0 g +301.417 370.956 45.1618 0.2005 re +f* +1 g +346.579 370.956 13.6489 0.2005 re +f* +0.498 0 0.482 rg +360.228 370.956 6.2224 0.2005 re +f* +0 g +300.615 371.157 45.1619 0.2006 re +f* +1 g +345.776 371.157 13.4481 0.2006 re +f* +0.498 0 0.482 rg +359.225 371.157 7.8281 0.2006 re +f* +0 g +300.012 371.357 44.7605 0.2005 re +f* +1 g +344.773 371.357 13.4481 0.2005 re +f* +0.498 0 0.482 rg +358.221 371.357 9.6346 0.2005 re +f* +0 g +299.209 371.558 44.7604 0.2006 re +f* +1 g +343.97 371.558 13.2475 0.2006 re +f* +0.498 0 0.482 rg +357.217 371.558 11.2403 0.2006 re +f* +0 g +298.607 371.758 44.5597 0.2006 re +f* +1 g +343.167 371.758 13.0467 0.2006 re +f* +0.498 0 0.482 rg +356.214 371.758 13.0468 0.2006 re +f* +0 g +298.005 371.959 44.5597 0.2005 re +f* +1 g +342.565 371.959 12.8461 0.2005 re +f* +0.498 0 0.482 rg +355.411 371.959 14.4518 0.2005 re +f* +0 g +297.202 372.16 44.5597 0.2005 re +f* +1 g +341.762 372.16 12.846 0.2005 re +f* +0.498 0 0.482 rg +354.608 372.16 16.0576 0.2005 re +f* +0 g +296.6 372.36 44.5597 0.2006 re +f* +1 g +341.16 372.36 12.6454 0.2006 re +f* +0.498 0 0.482 rg +353.805 372.36 17.4625 0.2006 re +f* +0 g +295.998 372.561 44.359 0.2006 re +f* +1 g +340.357 372.561 12.6453 0.2006 re +f* +0.498 0 0.482 rg +353.002 372.561 18.8677 0.2006 re +f* +0 g +295.396 372.761 44.359 0.2006 re +f* +1 g +339.755 372.761 12.4446 0.2006 re +f* +0.498 0 0.482 rg +352.2 372.761 20.2726 0.2006 re +f* +0 g +294.794 372.962 44.359 0.2006 re +f* +1 g +339.153 372.962 12.2439 0.2006 re +f* +0.498 0 0.482 rg +351.397 372.962 21.6777 0.2006 re +f* +0 g +294.192 373.162 44.359 0.2005 re +f* +1 g +338.551 373.162 12.2439 0.2005 re +f* +0.498 0 0.482 rg +350.794 373.162 22.882 0.2005 re +f* +0 g +293.589 373.363 44.5597 0.2005 re +f* +1 g +338.149 373.363 11.8424 0.2005 re +f* +0.498 0 0.482 rg +349.991 373.363 24.2871 0.2005 re +f* +0 g +292.987 373.563 44.5598 0.2006 re +f* +1 g +337.547 373.563 11.8424 0.2006 re +f* +0.498 0 0.482 rg +349.389 373.563 25.4914 0.2006 re +f* +0 g +292.385 373.764 44.5597 0.2006 re +f* +1 g +336.945 373.764 11.8425 0.2006 re +f* +0.498 0 0.482 rg +348.787 373.764 26.6956 0.2006 re +f* +0 g +291.783 373.965 44.7605 0.2005 re +f* +1 g +336.543 373.965 11.6417 0.2005 re +f* +0.498 0 0.482 rg +348.185 373.965 27.6993 0.2005 re +f* +0 g +291.381 374.165 44.5597 0.2005 re +f* +1 g +335.941 374.165 11.6417 0.2005 re +f* +0.498 0 0.482 rg +347.583 374.165 28.9036 0.2005 re +f* +0 g +290.779 374.366 44.7605 0.2006 re +f* +1 g +335.54 374.366 11.4409 0.2006 re +f* +0.498 0 0.482 rg +346.981 374.366 30.108 0.2006 re +f* +0 g +290.378 374.566 44.5597 0.2006 re +f* +1 g +334.938 374.566 11.441 0.2006 re +f* +0.498 0 0.482 rg +346.379 374.566 31.1115 0.2006 re +f* +0 g +289.776 374.767 44.7605 0.2005 re +f* +1 g +334.536 374.767 11.4409 0.2005 re +f* +0.498 0 0.482 rg +345.977 374.767 32.1152 0.2005 re +f* +0 g +289.174 374.967 44.9611 0.2006 re +f* +1 g +334.135 374.967 11.2403 0.2006 re +f* +0.498 0 0.482 rg +345.375 374.967 33.1187 0.2006 re +f* +0 g +288.772 375.168 44.9612 0.2005 re +f* +1 g +333.733 375.168 11.0396 0.2005 re +f* +0.498 0 0.482 rg +344.773 375.168 34.323 0.2005 re +f* +0 g +288.371 375.368 44.9611 0.2006 re +f* +1 g +333.332 375.368 11.0396 0.2006 re +f* +0.498 0 0.482 rg +344.371 375.368 35.1259 0.2006 re +f* +0 g +287.768 375.569 45.1619 0.2006 re +f* +1 g +332.93 375.569 10.8389 0.2006 re +f* +0.498 0 0.482 rg +343.769 375.569 36.3302 0.2006 re +f* +0 g +287.367 375.77 45.1619 0.2006 re +f* +1 g +332.529 375.77 10.8388 0.2006 re +f* +0.498 0 0.482 rg +343.368 375.77 37.1331 0.2006 re +f* +0 g +286.765 375.97 45.3626 0.2005 re +f* +1 g +332.127 375.97 10.6382 0.2005 re +f* +0.498 0 0.482 rg +342.766 375.97 38.1367 0.2005 re +f* +0 g +286.363 376.171 45.3626 0.2005 re +f* +1 g +331.726 376.171 10.6381 0.2005 re +f* +0.498 0 0.482 rg +342.364 376.171 39.1403 0.2005 re +f* +0 g +285.962 376.371 45.3625 0.2006 re +f* +1 g +331.325 376.371 10.4375 0.2006 re +f* +0.498 0 0.482 rg +341.762 376.371 40.1439 0.2006 re +f* +0 g +285.561 376.572 45.3626 0.2006 re +f* +1 g +330.923 376.572 10.4374 0.2006 re +f* +0.498 0 0.482 rg +341.361 376.572 40.9468 0.2006 re +f* +0 g +284.958 376.772 45.5633 0.2005 re +f* +1 g +330.522 376.772 10.4374 0.2005 re +f* +0.498 0 0.482 rg +340.959 376.772 41.7496 0.2005 re +f* +0 g +284.557 376.973 45.7639 0.2006 re +f* +1 g +330.321 376.973 10.2368 0.2006 re +f* +0.498 0 0.482 rg +340.558 376.973 42.7532 0.2006 re +f* +0 g +284.156 377.173 45.764 0.2005 re +f* +1 g +329.92 377.173 10.2367 0.2005 re +f* +0.498 0 0.482 rg +340.156 377.173 43.5561 0.2005 re +f* +0 g +283.754 377.374 45.7641 0.2006 re +f* +1 g +329.518 377.374 10.2367 0.2006 re +f* +0.498 0 0.482 rg +339.755 377.374 44.3589 0.2006 re +f* +0 g +283.353 377.575 45.9648 0.2006 re +f* +1 g +329.317 377.575 10.0359 0.2006 re +f* +0.498 0 0.482 rg +339.353 377.575 45.1619 0.2006 re +f* +0 g +282.951 377.775 45.9647 0.2005 re +f* +1 g +328.916 377.775 10.036 0.2005 re +f* +0.498 0 0.482 rg +338.952 377.775 45.9647 0.2005 re +f* +0 g +282.55 377.976 45.9647 0.2006 re +f* +1 g +328.515 377.976 10.036 0.2006 re +f* +0.498 0 0.482 rg +338.551 377.976 46.7676 0.2006 re +f* +0 g +282.148 378.176 46.1655 0.2005 re +f* +1 g +328.314 378.176 9.8352 0.2005 re +f* +0.498 0 0.482 rg +338.149 378.176 47.5705 0.2005 re +f* +0 g +281.747 378.377 46.1655 0.2006 re +f* +1 g +327.912 378.377 9.8353 0.2006 re +f* +0.498 0 0.482 rg +337.748 378.377 48.3733 0.2006 re +f* +0 g +281.346 378.577 46.3662 0.2006 re +f* +1 g +327.712 378.577 9.6346 0.2006 re +f* +0.498 0 0.482 rg +337.346 378.577 49.1762 0.2006 re +f* +0 g +280.944 378.778 46.3662 0.2005 re +f* +1 g +327.31 378.778 9.6345 0.2005 re +f* +0.498 0 0.482 rg +336.945 378.778 49.9792 0.2005 re +f* +0 g +280.543 378.978 46.5668 0.2006 re +f* +1 g +327.11 378.978 9.4339 0.2006 re +f* +0.498 0 0.482 rg +336.543 378.978 50.7819 0.2006 re +f* +0 g +280.141 379.179 46.7676 0.2005 re +f* +1 g +326.909 379.179 9.4339 0.2005 re +f* +0.498 0 0.482 rg +336.343 379.179 51.3841 0.2005 re +f* +0 g +279.74 379.38 46.7677 0.2006 re +f* +1 g +326.507 379.38 9.4338 0.2006 re +f* +0.498 0 0.482 rg +335.941 379.38 52.187 0.2006 re +f* +0 g +279.338 379.58 46.9684 0.2006 re +f* +1 g +326.307 379.58 9.2331 0.2006 re +f* +0.498 0 0.482 rg +335.54 379.58 52.9899 0.2006 re +f* +0 g +278.937 379.781 46.9683 0.2005 re +f* +1 g +325.905 379.781 9.2331 0.2005 re +f* +0.498 0 0.482 rg +335.138 379.781 53.5921 0.2005 re +f* +0 g +278.736 379.981 46.9684 0.2006 re +f* +1 g +325.704 379.981 9.2331 0.2006 re +f* +0.498 0 0.482 rg +334.938 379.981 54.1942 0.2006 re +f* +0 g +278.335 380.182 47.1691 0.2005 re +f* +1 g +325.504 380.182 9.0324 0.2005 re +f* +0.498 0 0.482 rg +334.536 380.182 54.9971 0.2005 re +f* +0 g +277.933 380.382 47.3698 0.2006 re +f* +1 g +325.303 380.382 9.0323 0.2006 re +f* +0.498 0 0.482 rg +334.335 380.382 55.5994 0.2006 re +f* +0 g +277.532 380.583 47.3697 0.2005 re +f* +1 g +324.902 380.583 9.0324 0.2005 re +f* +0.498 0 0.482 rg +333.934 380.583 56.4022 0.2005 re +f* +0 g +277.331 380.783 47.3698 0.2006 re +f* +1 g +324.701 380.783 9.0324 0.2006 re +f* +0.498 0 0.482 rg +333.733 380.783 56.8036 0.2006 re +f* +0 g +287.367 380.984 37.1331 0.2006 re +f* +1 g +324.5 380.984 8.8316 0.2006 re +f* +0.498 0 0.482 rg +333.332 380.984 57.6066 0.2006 re +f* +0 g +287.367 381.185 36.9324 0.2005 re +f* +1 g +324.299 381.185 8.8316 0.2005 re +f* +0.498 0 0.482 rg +333.131 381.185 58.2087 0.2005 re +f* +0 g +287.367 381.385 36.5309 0.2006 re +f* +1 g +323.898 381.385 8.8317 0.2006 re +f* +0.498 0 0.482 rg +332.73 381.385 58.8108 0.2006 re +f* +0 g +287.367 381.586 36.3302 0.2005 re +f* +1 g +323.697 381.586 8.8317 0.2005 re +f* +0.498 0 0.482 rg +332.529 381.586 59.413 0.2005 re +f* +0 g +287.367 381.786 36.1295 0.2006 re +f* +1 g +323.497 381.786 8.6309 0.2006 re +f* +0.498 0 0.482 rg +332.127 381.786 60.2159 0.2006 re +f* +0 g +287.367 381.987 35.9288 0.2006 re +f* +1 g +323.296 381.987 8.6309 0.2006 re +f* +0.498 0 0.482 rg +331.927 381.987 60.6173 0.2006 re +f* +0 g +278.937 382.188 0.2007 0.2005 re +f* +1 g +279.138 382.188 8.2295 0.2005 re +f* +0 g +287.367 382.188 35.7281 0.2005 re +f* +1 g +323.095 382.188 8.4302 0.2005 re +f* +0.498 0 0.482 rg +331.525 382.188 61.4201 0.2005 re +f* +0 g +278.937 382.388 43.9575 0.2006 re +f* +1 g +322.894 382.388 8.4302 0.2006 re +f* +0.498 0 0.482 rg +331.325 382.388 61.8216 0.2006 re +f* +0 g +278.937 382.589 43.7569 0.2005 re +f* +1 g +322.694 382.589 8.4301 0.2005 re +f* +0.498 0 0.482 rg +331.124 382.589 62.4238 0.2005 re +f* +0 g +278.937 382.789 43.5561 0.2006 re +f* +1 g +322.493 382.789 8.2295 0.2006 re +f* +0.498 0 0.482 rg +330.722 382.789 63.2266 0.2006 re +f* +0 g +278.937 382.99 43.3554 0.2006 re +f* +1 g +322.292 382.99 8.2295 0.2006 re +f* +0.498 0 0.482 rg +330.522 382.99 63.628 0.2006 re +f* +0 g +278.937 383.19 43.1547 0.2005 re +f* +1 g +322.092 383.19 8.2294 0.2005 re +f* +0.498 0 0.482 rg +330.321 383.19 64.2303 0.2005 re +f* +0 g +278.937 383.391 42.9539 0.2006 re +f* +1 g +321.891 383.391 8.2295 0.2006 re +f* +0.498 0 0.482 rg +330.12 383.391 64.6317 0.2006 re +f* +0 g +278.937 383.591 42.7533 0.2005 re +f* +1 g +321.69 383.591 8.0287 0.2005 re +f* +0.498 0 0.482 rg +329.719 383.591 65.4345 0.2005 re +f* +0 g +278.937 383.792 42.5525 0.2006 re +f* +1 g +321.489 383.792 8.0288 0.2006 re +f* +0.498 0 0.482 rg +329.518 383.792 65.8359 0.2006 re +f* +0 g +278.937 383.992 42.3518 0.2006 re +f* +1 g +321.289 383.992 8.0288 0.2006 re +f* +0.498 0 0.482 rg +329.317 383.992 66.4381 0.2006 re +f* +0 g +278.937 384.193 42.1511 0.2005 re +f* +1 g +321.088 384.193 8.0287 0.2005 re +f* +0.498 0 0.482 rg +329.117 384.193 66.8396 0.2005 re +f* +0 g +278.937 384.394 41.9503 0.2005 re +f* +1 g +320.887 384.394 8.0288 0.2005 re +f* +0.498 0 0.482 rg +328.916 384.394 67.241 0.2005 re +f* +0 g +278.937 384.594 41.7497 0.2006 re +f* +1 g +320.687 384.594 7.828 0.2006 re +f* +0.498 0 0.482 rg +328.515 384.594 68.0439 0.2006 re +f* +0 g +271.109 384.795 0.2008 0.2006 re +f* +1 g +271.31 384.795 7.6273 0.2006 re +f* +0 g +278.937 384.795 41.5489 0.2006 re +f* +1 g +320.486 384.795 7.8281 0.2006 re +f* +0.498 0 0.482 rg +328.314 384.795 68.4453 0.2006 re +f* +0 g +270.707 384.995 0.6022 0.2006 re +f* +1 g +271.31 384.995 7.6273 0.2006 re +f* +0 g +278.937 384.995 41.3482 0.2006 re +f* +1 g +320.285 384.995 7.828 0.2006 re +f* +0.498 0 0.482 rg +328.113 384.995 69.0475 0.2006 re +f* +0 g +270.507 385.196 0.8029 0.2005 re +f* +1 g +271.31 385.196 7.6273 0.2005 re +f* +0 g +278.937 385.196 41.1475 0.2005 re +f* +1 g +320.084 385.196 7.828 0.2005 re +f* +0.498 0 0.482 rg +327.912 385.196 69.4489 0.2005 re +f* +0 g +270.306 385.396 1.0036 0.2006 re +f* +1 g +271.31 385.396 7.6273 0.2006 re +f* +0 g +278.937 385.396 40.9467 0.2006 re +f* +1 g +319.884 385.396 7.8281 0.2006 re +f* +0.498 0 0.482 rg +327.712 385.396 69.8504 0.2006 re +f* +0 g +269.904 385.597 1.4051 0.2005 re +f* +1 g +271.31 385.597 7.6273 0.2005 re +f* +0 g +278.937 385.597 40.7461 0.2005 re +f* +1 g +319.683 385.597 7.828 0.2005 re +f* +0.498 0 0.482 rg +327.511 385.597 70.4525 0.2005 re +f* +0 g +269.704 385.797 1.6058 0.2006 re +f* +1 g +271.31 385.797 7.6273 0.2006 re +f* +0 g +278.937 385.797 40.7461 0.2006 re +f* +1 g +319.683 385.797 7.6273 0.2006 re +f* +0.498 0 0.482 rg +327.31 385.797 70.8539 0.2006 re +f* +0 g +269.503 385.998 1.8065 0.2005 re +f* +1 g +271.31 385.998 7.6273 0.2005 re +f* +0 g +278.937 385.998 40.5453 0.2005 re +f* +1 g +319.482 385.998 7.6273 0.2005 re +f* +0.498 0 0.482 rg +327.11 385.998 71.2554 0.2005 re +f* +0 g +269.102 386.199 2.208 0.2006 re +f* +1 g +271.31 386.199 7.6273 0.2006 re +f* +0 g +278.937 386.199 40.3446 0.2006 re +f* +1 g +319.281 386.199 7.6273 0.2006 re +f* +0.498 0 0.482 rg +326.909 386.199 71.8576 0.2006 re +f* +0 g +268.901 386.399 2.4087 0.2005 re +f* +1 g +271.31 386.399 7.6273 0.2005 re +f* +0 g +278.937 386.399 40.1438 0.2005 re +f* +1 g +319.081 386.399 7.6274 0.2005 re +f* +0.498 0 0.482 rg +326.708 386.399 72.259 0.2005 re +f* +0 g +268.7 386.6 2.6094 0.2006 re +f* +1 g +271.31 386.6 7.6273 0.2006 re +f* +0 g +278.937 386.6 39.9431 0.2006 re +f* +1 g +318.88 386.6 7.6274 0.2006 re +f* +0.498 0 0.482 rg +326.507 386.6 72.6604 0.2006 re +f* +0 g +268.299 386.8 3.0108 0.2006 re +f* +1 g +271.31 386.8 7.6273 0.2006 re +f* +0 g +278.937 386.8 39.9431 0.2006 re +f* +1 g +318.88 386.8 7.4267 0.2006 re +f* +0.498 0 0.482 rg +326.307 386.8 73.0618 0.2006 re +f* +0 g +268.098 387.001 3.2115 0.2005 re +f* +1 g +271.31 387.001 7.6273 0.2005 re +f* +0 g +278.937 387.001 39.7425 0.2005 re +f* +1 g +318.679 387.001 7.4265 0.2005 re +f* +0.498 0 0.482 rg +326.106 387.001 73.6641 0.2005 re +f* +0 g +267.897 387.201 3.4123 0.2005 re +f* +1 g +271.31 387.201 7.6273 0.2005 re +f* +0 g +278.937 387.201 39.5417 0.2005 re +f* +1 g +318.479 387.201 7.4266 0.2005 re +f* +0.498 0 0.482 rg +325.905 387.201 74.0655 0.2005 re +f* +0 g +267.697 387.402 3.613 0.2006 re +f* +1 g +271.31 387.402 7.6273 0.2006 re +f* +0 g +278.937 387.402 39.341 0.2006 re +f* +1 g +318.278 387.402 7.4266 0.2006 re +f* +0.498 0 0.482 rg +325.704 387.402 74.4669 0.2006 re +f* +0 g +267.295 387.603 4.0144 0.2006 re +f* +1 g +271.31 387.603 7.6273 0.2006 re +f* +0 g +278.937 387.603 39.341 0.2006 re +f* +1 g +318.278 387.603 7.2259 0.2006 re +f* +0.498 0 0.482 rg +325.504 387.603 74.8683 0.2006 re +f* +0 g +267.094 387.803 4.2151 0.2006 re +f* +1 g +271.31 387.803 7.6273 0.2006 re +f* +0 g +278.937 387.803 39.1402 0.2006 re +f* +1 g +318.077 387.803 7.226 0.2006 re +f* +0.498 0 0.482 rg +325.303 387.803 75.4705 0.2006 re +f* +0 g +266.894 388.004 4.4159 0.2006 re +f* +1 g +271.31 388.004 7.6273 0.2006 re +f* +0 g +278.937 388.004 38.9395 0.2006 re +f* +1 g +317.876 388.004 7.226 0.2006 re +f* +0.498 0 0.482 rg +325.102 388.004 75.8719 0.2006 re +f* +0 g +266.693 388.204 4.6166 0.2005 re +f* +1 g +271.31 388.204 7.6273 0.2005 re +f* +0 g +278.937 388.204 38.7389 0.2005 re +f* +1 g +317.676 388.204 7.2258 0.2005 re +f* +0.498 0 0.482 rg +324.902 388.204 76.2734 0.2005 re +f* +0 g +266.492 388.405 4.8173 0.2005 re +f* +1 g +271.31 388.405 7.6273 0.2005 re +f* +0 g +278.937 388.405 38.7389 0.2005 re +f* +1 g +317.676 388.405 7.0251 0.2005 re +f* +0.498 0 0.482 rg +324.701 388.405 76.6748 0.2005 re +f* +0 g +266.292 388.605 5.018 0.2006 re +f* +1 g +271.31 388.605 7.6273 0.2006 re +f* +0 g +278.937 388.605 38.5381 0.2006 re +f* +1 g +317.475 388.605 7.0252 0.2006 re +f* +0.498 0 0.482 rg +324.5 388.605 77.0762 0.2006 re +f* +0 g +265.89 388.806 5.4195 0.2006 re +f* +1 g +271.31 388.806 7.6273 0.2006 re +f* +0 g +278.937 388.806 38.3374 0.2006 re +f* +1 g +317.274 388.806 7.0252 0.2006 re +f* +0.498 0 0.482 rg +324.299 388.806 77.4777 0.2006 re +f* +0 g +265.689 389.006 5.6202 0.2005 re +f* +1 g +271.31 389.006 7.6273 0.2005 re +f* +0 g +278.937 389.006 38.3374 0.2005 re +f* +1 g +317.274 389.006 7.0252 0.2005 re +f* +0.498 0 0.482 rg +324.299 389.006 77.8791 0.2005 re +f* +0 g +265.489 389.207 5.8209 0.2005 re +f* +1 g +271.31 389.207 7.6273 0.2005 re +f* +0 g +278.937 389.207 38.1367 0.2005 re +f* +1 g +317.074 389.207 7.0252 0.2005 re +f* +0.498 0 0.482 rg +324.099 389.207 78.2805 0.2005 re +f* +0 g +265.288 389.407 6.0216 0.2006 re +f* +1 g +271.31 389.407 7.6273 0.2006 re +f* +0 g +278.937 389.407 37.9359 0.2006 re +f* +1 g +316.873 389.407 7.0252 0.2006 re +f* +0.498 0 0.482 rg +323.898 389.407 78.682 0.2006 re +f* +0 g +265.087 389.608 6.2224 0.2006 re +f* +1 g +271.31 389.608 7.6273 0.2006 re +f* +0 g +278.937 389.608 37.9359 0.2006 re +f* +1 g +316.873 389.608 6.8245 0.2006 re +f* +0.498 0 0.482 rg +323.697 389.608 79.0835 0.2006 re +f* +0 g +264.886 389.809 6.4231 0.2005 re +f* +1 g +271.31 389.809 7.6273 0.2005 re +f* +0 g +278.937 389.809 37.7352 0.2005 re +f* +1 g +316.672 389.809 6.8245 0.2005 re +f* +0.498 0 0.482 rg +323.497 389.809 79.4849 0.2005 re +f* +0 g +264.686 390.009 6.6238 0.2006 re +f* +1 g +271.31 390.009 7.6273 0.2006 re +f* +0 g +278.937 390.009 37.5345 0.2006 re +f* +1 g +316.471 390.009 7.0252 0.2006 re +f* +0.498 0 0.482 rg +323.497 390.009 79.6856 0.2006 re +f* +0 g +264.485 390.21 6.8245 0.2005 re +f* +1 g +271.31 390.21 7.6273 0.2005 re +f* +0 g +278.937 390.21 37.5345 0.2005 re +f* +1 g +316.471 390.21 6.8245 0.2005 re +f* +0.498 0 0.482 rg +323.296 390.21 80.087 0.2005 re +f* +0 g +264.284 390.41 7.0252 0.2006 re +f* +1 g +271.31 390.41 7.6273 0.2006 re +f* +0 g +278.937 390.41 37.3338 0.2006 re +f* +1 g +316.271 390.41 6.8245 0.2006 re +f* +0.498 0 0.482 rg +323.095 390.41 80.4884 0.2006 re +f* +0 g +264.084 390.611 7.226 0.2006 re +f* +1 g +271.31 390.611 7.6273 0.2006 re +f* +0 g +278.937 390.611 37.1331 0.2006 re +f* +1 g +316.07 390.611 6.8244 0.2006 re +f* +0.498 0 0.482 rg +322.894 390.611 80.89 0.2006 re +f* +0 g +263.883 390.811 7.4267 0.2006 re +f* +1 g +271.31 390.811 7.6273 0.2006 re +f* +0 g +278.937 390.811 37.1331 0.2006 re +f* +1 g +316.07 390.811 6.8244 0.2006 re +f* +0.498 0 0.482 rg +322.894 390.811 81.0907 0.2006 re +f* +0 g +263.682 391.012 7.6274 0.2005 re +f* +1 g +271.31 391.012 7.6273 0.2005 re +f* +0 g +278.937 391.012 36.9323 0.2005 re +f* +1 g +315.869 391.012 6.8246 0.2005 re +f* +0.498 0 0.482 rg +322.694 391.012 81.492 0.2005 re +f* +0 g +263.281 391.213 8.0288 0.2005 re +f* +1 g +271.31 391.213 7.6273 0.2005 re +f* +0 g +278.937 391.213 36.9323 0.2005 re +f* +1 g +315.869 391.213 6.6238 0.2005 re +f* +0.498 0 0.482 rg +322.493 391.213 81.8935 0.2005 re +f* +0 g +263.08 391.413 8.2296 0.2006 re +f* +1 g +271.31 391.413 7.6273 0.2006 re +f* +0 g +278.937 391.413 36.7317 0.2006 re +f* +1 g +315.669 391.413 6.6237 0.2006 re +f* +0.498 0 0.482 rg +322.292 391.413 82.2949 0.2006 re +f* +0 g +262.879 391.614 8.4303 0.2006 re +f* +1 g +271.31 391.614 7.6273 0.2006 re +f* +0 g +278.937 391.614 36.5309 0.2006 re +f* +1 g +315.468 391.614 6.8245 0.2006 re +f* +0.498 0 0.482 rg +322.292 391.614 82.4957 0.2006 re +f* +0 g +262.679 391.814 8.631 0.2005 re +f* +1 g +271.31 391.814 7.6273 0.2005 re +f* +0 g +278.937 391.814 36.5309 0.2005 re +f* +1 g +315.468 391.814 6.6238 0.2005 re +f* +0.498 0 0.482 rg +322.092 391.814 82.8971 0.2005 re +f* +0 g +262.478 392.015 8.8317 0.2006 re +f* +1 g +271.31 392.015 7.6273 0.2006 re +f* +0 g +278.937 392.015 36.3302 0.2006 re +f* +1 g +315.267 392.015 6.6237 0.2006 re +f* +0.498 0 0.482 rg +321.891 392.015 83.2986 0.2006 re +f* +0 g +262.277 392.215 9.0324 0.2005 re +f* +1 g +271.31 392.215 7.6273 0.2005 re +f* +0 g +278.937 392.215 36.3302 0.2005 re +f* +1 g +315.267 392.215 6.6237 0.2005 re +f* +0.498 0 0.482 rg +321.891 392.215 83.4993 0.2005 re +f* +0 g +262.277 392.416 9.0324 0.2006 re +f* +1 g +271.31 392.416 7.6273 0.2006 re +f* +0 g +278.937 392.416 36.1295 0.2006 re +f* +1 g +315.066 392.416 6.6238 0.2006 re +f* +0.498 0 0.482 rg +321.69 392.416 83.9007 0.2006 re +f* +0 g +262.076 392.616 9.2332 0.2006 re +f* +1 g +271.31 392.616 7.6273 0.2006 re +f* +0 g +278.937 392.616 36.1295 0.2006 re +f* +1 g +315.066 392.616 6.423 0.2006 re +f* +0.498 0 0.482 rg +321.489 392.616 84.3022 0.2006 re +f* +0 g +261.876 392.817 9.4339 0.2005 re +f* +1 g +271.31 392.817 7.6273 0.2005 re +f* +0 g +278.937 392.817 35.9287 0.2005 re +f* +1 g +314.866 392.817 6.6238 0.2005 re +f* +0.498 0 0.482 rg +321.489 392.817 84.5029 0.2005 re +f* +0 g +261.675 393.018 9.6346 0.2006 re +f* +1 g +271.31 393.018 7.6273 0.2006 re +f* +0 g +278.937 393.018 35.9287 0.2006 re +f* +1 g +314.866 393.018 6.4231 0.2006 re +f* +0.498 0 0.482 rg +321.289 393.018 84.9043 0.2006 re +f* +0 g +261.474 393.218 9.8353 0.2005 re +f* +1 g +271.31 393.218 7.6273 0.2005 re +f* +0 g +278.937 393.218 35.7281 0.2005 re +f* +1 g +314.665 393.218 6.423 0.2005 re +f* +0.498 0 0.482 rg +321.088 393.218 85.3057 0.2005 re +f* +0 g +261.274 393.419 10.036 0.2006 re +f* +1 g +271.31 393.419 7.6273 0.2006 re +f* +0 g +278.937 393.419 35.7281 0.2006 re +f* +1 g +314.665 393.419 6.423 0.2006 re +f* +0.498 0 0.482 rg +321.088 393.419 85.5064 0.2006 re +f* +0 g +261.073 393.619 10.2368 0.2006 re +f* +1 g +271.31 393.619 7.6273 0.2006 re +f* +0 g +278.937 393.619 35.5273 0.2006 re +f* +1 g +314.464 393.619 6.423 0.2006 re +f* +0.498 0 0.482 rg +320.887 393.619 85.908 0.2006 re +f* +0 g +260.872 393.82 10.4375 0.2005 re +f* +1 g +271.31 393.82 7.6273 0.2005 re +f* +0 g +278.937 393.82 35.5273 0.2005 re +f* +1 g +314.464 393.82 6.423 0.2005 re +f* +0.498 0 0.482 rg +320.887 393.82 86.1087 0.2005 re +f* +0 g +260.671 394.02 10.6382 0.2006 re +f* +1 g +271.31 394.02 7.6273 0.2006 re +f* +0 g +278.937 394.02 35.3266 0.2006 re +f* +1 g +314.263 394.02 6.4231 0.2006 re +f* +0.498 0 0.482 rg +320.687 394.02 86.51 0.2006 re +f* +0 g +260.471 394.221 10.8389 0.2005 re +f* +1 g +271.31 394.221 7.6273 0.2005 re +f* +0 g +278.937 394.221 35.3266 0.2005 re +f* +1 g +314.263 394.221 6.2223 0.2005 re +f* +0.498 0 0.482 rg +320.486 394.221 86.9115 0.2005 re +f* +0 g +260.27 394.421 11.0396 0.2006 re +f* +1 g +271.31 394.421 7.6273 0.2006 re +f* +0 g +278.937 394.421 35.1259 0.2006 re +f* +1 g +314.063 394.421 6.423 0.2006 re +f* +0.498 0 0.482 rg +320.486 394.421 86.9115 0.2006 re +f* +0 g +260.27 394.622 11.0396 0.2006 re +f* +1 g +271.31 394.622 7.6273 0.2006 re +f* +0 g +278.937 394.622 35.1259 0.2006 re +f* +1 g +314.063 394.622 6.2223 0.2006 re +f* +0.498 0 0.482 rg +320.285 394.622 87.3129 0.2006 re +f* +0 g +260.069 394.823 11.2403 0.2005 re +f* +1 g +271.31 394.823 7.6273 0.2005 re +f* +0 g +278.937 394.823 34.9251 0.2005 re +f* +1 g +313.862 394.823 6.4231 0.2005 re +f* +0.498 0 0.482 rg +320.285 394.823 87.5137 0.2005 re +f* +0 g +259.868 395.023 11.4411 0.2006 re +f* +1 g +271.31 395.023 7.6273 0.2006 re +f* +0 g +278.937 395.023 34.9251 0.2006 re +f* +1 g +313.862 395.023 6.2224 0.2006 re +f* +0.498 0 0.482 rg +320.084 395.023 87.9151 0.2006 re +f* +0 g +259.668 395.224 11.6418 0.2005 re +f* +1 g +271.31 395.224 7.6273 0.2005 re +f* +0 g +278.937 395.224 34.7245 0.2005 re +f* +1 g +313.661 395.224 6.423 0.2005 re +f* +0.498 0 0.482 rg +320.084 395.224 88.1158 0.2005 re +f* +0 g +259.467 395.424 11.8425 0.2006 re +f* +1 g +271.31 395.424 7.6273 0.2006 re +f* +0 g +278.937 395.424 34.7245 0.2006 re +f* +1 g +313.661 395.424 6.2222 0.2006 re +f* +0.498 0 0.482 rg +319.884 395.424 88.5173 0.2006 re +f* +0 g +259.266 395.625 12.0432 0.2005 re +f* +1 g +271.31 395.625 7.6273 0.2005 re +f* +0 g +278.937 395.625 34.5237 0.2005 re +f* +1 g +313.461 395.625 6.423 0.2005 re +f* +0.498 0 0.482 rg +319.884 395.625 88.5173 0.2005 re +f* +0 g +259.266 395.825 12.0432 0.2006 re +f* +1 g +271.31 395.825 7.6273 0.2006 re +f* +0 g +278.937 395.825 34.5237 0.2006 re +f* +1 g +313.461 395.825 6.2224 0.2006 re +f* +0.498 0 0.482 rg +319.683 395.825 88.9186 0.2006 re +f* +0 g +259.066 396.026 12.2439 0.2006 re +f* +1 g +271.31 396.026 7.6273 0.2006 re +f* +0 g +278.937 396.026 34.5237 0.2006 re +f* +1 g +313.461 396.026 6.2224 0.2006 re +f* +0.498 0 0.482 rg +319.683 396.026 89.1194 0.2006 re +f* +0 g +258.865 396.227 12.4447 0.2005 re +f* +1 g +271.31 396.227 7.6273 0.2005 re +f* +0 g +278.937 396.227 34.323 0.2005 re +f* +1 g +313.26 396.227 6.2223 0.2005 re +f* +0.498 0 0.482 rg +319.482 396.227 89.5209 0.2005 re +f* +0 g +258.664 396.427 12.6454 0.2006 re +f* +1 g +271.31 396.427 7.6273 0.2006 re +f* +0 g +278.937 396.427 34.323 0.2006 re +f* +1 g +313.26 396.427 6.2223 0.2006 re +f* +0.498 0 0.482 rg +319.482 396.427 89.7216 0.2006 re +f* +0 g +258.463 396.628 12.8461 0.2005 re +f* +1 g +271.31 396.628 7.6273 0.2005 re +f* +0 g +278.937 396.628 34.1223 0.2005 re +f* +1 g +313.059 396.628 6.2223 0.2005 re +f* +0.498 0 0.482 rg +319.281 396.628 89.9223 0.2005 re +f* +0 g +258.463 396.828 12.8461 0.2006 re +f* +1 g +271.31 396.828 7.6273 0.2006 re +f* +0 g +278.937 396.828 34.1223 0.2006 re +f* +1 g +313.059 396.828 6.2223 0.2006 re +f* +0.498 0 0.482 rg +319.281 396.828 90.123 0.2006 re +f* +0 g +258.263 397.029 13.0468 0.2006 re +f* +1 g +271.31 397.029 7.6273 0.2006 re +f* +0 g +278.937 397.029 34.1223 0.2006 re +f* +1 g +313.059 397.029 6.0215 0.2006 re +f* +0.498 0 0.482 rg +319.081 397.029 90.5245 0.2006 re +f* +0 g +258.062 397.229 13.2475 0.2005 re +f* +1 g +271.31 397.229 7.6273 0.2005 re +f* +0 g +278.937 397.229 33.9216 0.2005 re +f* +1 g +312.858 397.229 6.2222 0.2005 re +f* +0.498 0 0.482 rg +319.081 397.229 90.7253 0.2005 re +f* +0 g +258.062 397.43 13.2475 0.2006 re +f* +1 g +271.31 397.43 7.6273 0.2006 re +f* +0 g +278.937 397.43 33.9216 0.2006 re +f* +1 g +312.858 397.43 6.0215 0.2006 re +f* +0.498 0 0.482 rg +318.88 397.43 90.926 0.2006 re +f* +0 g +257.861 397.63 13.4483 0.2005 re +f* +1 g +271.31 397.63 7.6273 0.2005 re +f* +0 g +278.937 397.63 33.7209 0.2005 re +f* +1 g +312.658 397.63 6.2222 0.2005 re +f* +0.498 0 0.482 rg +318.88 397.63 91.1267 0.2005 re +f* +0 g +257.661 397.831 13.649 0.2006 re +f* +1 g +271.31 397.831 7.6273 0.2006 re +f* +0 g +278.937 397.831 33.7209 0.2006 re +f* +1 g +312.658 397.831 6.2222 0.2006 re +f* +0.498 0 0.482 rg +318.88 397.831 91.3274 0.2006 re +f* +0 g +257.46 398.032 13.8497 0.2006 re +f* +1 g +271.31 398.032 7.6273 0.2006 re +f* +0 g +278.937 398.032 33.7209 0.2006 re +f* +1 g +312.658 398.032 6.0216 0.2006 re +f* +0.498 0 0.482 rg +318.679 398.032 91.7287 0.2006 re +f* +0 g +257.46 398.232 13.8497 0.2005 re +f* +1 g +271.31 398.232 7.6273 0.2005 re +f* +0 g +278.937 398.232 33.5201 0.2005 re +f* +1 g +312.457 398.232 6.2224 0.2005 re +f* +0.498 0 0.482 rg +318.679 398.232 91.7287 0.2005 re +f* +0 g +257.259 398.433 14.0504 0.2006 re +f* +1 g +271.31 398.433 7.6273 0.2006 re +f* +0 g +278.937 398.433 33.5201 0.2006 re +f* +1 g +312.457 398.433 6.0216 0.2006 re +f* +0.498 0 0.482 rg +318.479 398.433 92.1302 0.2006 re +f* +0 g +257.058 398.633 14.2511 0.2005 re +f* +1 g +271.31 398.633 7.6273 0.2005 re +f* +0 g +278.937 398.633 33.5201 0.2005 re +f* +1 g +312.457 398.633 6.0216 0.2005 re +f* +0.498 0 0.482 rg +318.479 398.633 92.3309 0.2005 re +f* +0 g +257.058 398.834 14.2511 0.2006 re +f* +1 g +271.31 398.834 7.6273 0.2006 re +f* +0 g +278.937 398.834 33.3194 0.2006 re +f* +1 g +312.256 398.834 6.2223 0.2006 re +f* +0.498 0 0.482 rg +318.479 398.834 92.3309 0.2006 re +f* +0 g +256.858 399.034 14.4519 0.2006 re +f* +1 g +271.31 399.034 7.6273 0.2006 re +f* +0 g +278.937 399.034 33.3194 0.2006 re +f* +1 g +312.256 399.034 6.0216 0.2006 re +f* +0.498 0 0.482 rg +318.278 399.034 92.7324 0.2006 re +f* +0 g +256.657 399.235 14.6526 0.2005 re +f* +1 g +271.31 399.235 7.6273 0.2005 re +f* +0 g +278.937 399.235 33.3194 0.2005 re +f* +1 g +312.256 399.235 6.0216 0.2005 re +f* +0.498 0 0.482 rg +318.278 399.235 92.9331 0.2005 re +f* +0 g +256.657 399.435 14.6526 0.2005 re +f* +1 g +271.31 399.435 7.6273 0.2005 re +f* +0 g +278.937 399.435 33.1187 0.2005 re +f* +1 g +312.056 399.435 6.2223 0.2005 re +f* +0.498 0 0.482 rg +318.278 399.435 92.9331 0.2005 re +f* +0 g +256.456 399.636 14.8533 0.2006 re +f* +1 g +271.31 399.636 7.6273 0.2006 re +f* +0 g +278.937 399.636 33.1187 0.2006 re +f* +1 g +312.056 399.636 6.0215 0.2006 re +f* +0.498 0 0.482 rg +318.077 399.636 93.3346 0.2006 re +f* +0 g +256.256 399.837 15.054 0.2006 re +f* +1 g +271.31 399.837 7.6273 0.2006 re +f* +0 g +278.937 399.837 33.1187 0.2006 re +f* +1 g +312.056 399.837 6.0215 0.2006 re +f* +0.498 0 0.482 rg +318.077 399.837 93.5353 0.2006 re +f* +0 g +256.256 400.037 15.054 0.2006 re +f* +1 g +271.31 400.037 7.6273 0.2006 re +f* +0 g +278.937 400.037 32.918 0.2006 re +f* +1 g +311.855 400.037 6.2222 0.2006 re +f* +0.498 0 0.482 rg +318.077 400.037 93.5353 0.2006 re +f* +0 g +256.055 400.238 15.2547 0.2005 re +f* +1 g +271.31 400.238 7.6273 0.2005 re +f* +0 g +278.937 400.238 32.918 0.2005 re +f* +1 g +311.855 400.238 6.0215 0.2005 re +f* +0.498 0 0.482 rg +317.876 400.238 93.9367 0.2005 re +f* +0 g +255.854 400.438 15.4555 0.2006 re +f* +1 g +271.31 400.438 7.6273 0.2006 re +f* +0 g +278.937 400.438 32.918 0.2006 re +f* +1 g +311.855 400.438 6.0215 0.2006 re +f* +0.498 0 0.482 rg +317.876 400.438 93.9367 0.2006 re +f* +0 g +255.854 400.639 15.4555 0.2005 re +f* +1 g +271.31 400.639 7.6273 0.2005 re +f* +0 g +278.937 400.639 32.7173 0.2005 re +f* +1 g +311.654 400.639 6.2222 0.2005 re +f* +0.498 0 0.482 rg +317.876 400.639 94.1375 0.2005 re +f* +0 g +255.653 400.839 15.6562 0.2006 re +f* +1 g +271.31 400.839 7.6273 0.2006 re +f* +0 g +278.937 400.839 32.7173 0.2006 re +f* +1 g +311.654 400.839 6.0216 0.2006 re +f* +0.498 0 0.482 rg +317.676 400.839 94.5388 0.2006 re +f* +0 g +255.653 401.04 15.6562 0.2006 re +f* +1 g +271.31 401.04 7.6273 0.2006 re +f* +0 g +278.937 401.04 32.7173 0.2006 re +f* +1 g +311.654 401.04 6.0216 0.2006 re +f* +0.498 0 0.482 rg +317.676 401.04 94.5388 0.2006 re +f* +0 g +255.453 401.241 15.8569 0.2005 re +f* +1 g +271.31 401.241 7.6273 0.2005 re +f* +0 g +278.937 401.241 32.5165 0.2005 re +f* +1 g +311.453 401.241 6.2224 0.2005 re +f* +0.498 0 0.482 rg +317.676 401.241 94.7395 0.2005 re +f* +0 g +255.252 401.441 16.0576 0.2005 re +f* +1 g +271.31 401.441 7.6273 0.2005 re +f* +0 g +278.937 401.441 32.5165 0.2005 re +f* +1 g +311.453 401.441 6.2224 0.2005 re +f* +0.498 0 0.482 rg +317.676 401.441 94.9402 0.2005 re +f* +0 g +255.252 401.642 16.0576 0.2006 re +f* +1 g +271.31 401.642 7.6273 0.2006 re +f* +0 g +278.937 401.642 32.5165 0.2006 re +f* +1 g +311.453 401.642 6.0216 0.2006 re +f* +0.498 0 0.482 rg +317.475 401.642 95.141 0.2006 re +f* +0 g +255.051 401.842 16.2583 0.2006 re +f* +1 g +271.31 401.842 7.6273 0.2006 re +f* +0 g +278.937 401.842 32.5165 0.2006 re +f* +1 g +311.453 401.842 6.0216 0.2006 re +f* +0.498 0 0.482 rg +317.475 401.842 95.3417 0.2006 re +f* +0 g +255.051 402.043 16.2583 0.2005 re +f* +1 g +271.31 402.043 7.6273 0.2005 re +f* +0 g +278.937 402.043 32.3158 0.2005 re +f* +1 g +311.253 402.043 6.2223 0.2005 re +f* +0.498 0 0.482 rg +317.475 402.043 95.3417 0.2005 re +f* +0 g +254.851 402.243 16.4591 0.2005 re +f* +1 g +271.31 402.243 7.6273 0.2005 re +f* +0 g +278.937 402.243 32.3158 0.2005 re +f* +1 g +311.253 402.243 6.2223 0.2005 re +f* +0.498 0 0.482 rg +317.475 402.243 95.5425 0.2005 re +f* +0 g +254.851 402.444 16.4591 0.2006 re +f* +1 g +271.31 402.444 7.6273 0.2006 re +f* +0 g +278.937 402.444 32.3158 0.2006 re +f* +1 g +311.253 402.444 6.0216 0.2006 re +f* +0.498 0 0.482 rg +317.274 402.444 95.7432 0.2006 re +f* +0 g +254.65 402.644 16.6598 0.2006 re +f* +1 g +271.31 402.644 7.6273 0.2006 re +f* +0 g +278.937 402.644 32.1151 0.2006 re +f* +1 g +311.052 402.644 6.2223 0.2006 re +f* +0.498 0 0.482 rg +317.274 402.644 95.9438 0.2006 re +f* +0 g +254.449 402.845 16.8605 0.2006 re +f* +1 g +271.31 402.845 7.6273 0.2006 re +f* +0 g +278.937 402.845 32.1151 0.2006 re +f* +1 g +311.052 402.845 6.2223 0.2006 re +f* +0.498 0 0.482 rg +317.274 402.845 95.9438 0.2006 re +f* +0 g +254.449 403.046 16.8605 0.2006 re +f* +1 g +271.31 403.046 7.6273 0.2006 re +f* +0 g +278.937 403.046 32.1151 0.2006 re +f* +1 g +311.052 403.046 6.2223 0.2006 re +f* +0.498 0 0.482 rg +317.274 403.046 96.1446 0.2006 re +f* +0 g +254.248 403.246 17.0612 0.2005 re +f* +1 g +271.31 403.246 7.6273 0.2005 re +f* +0 g +278.937 403.246 32.1151 0.2005 re +f* +1 g +311.052 403.246 6.2223 0.2005 re +f* +0.498 0 0.482 rg +317.274 403.246 96.1446 0.2005 re +f* +0 g +254.248 403.447 17.0612 0.2005 re +f* +1 g +271.31 403.447 7.6273 0.2005 re +f* +0 g +278.937 403.447 31.9144 0.2005 re +f* +1 g +310.851 403.447 6.423 0.2005 re +f* +0.498 0 0.482 rg +317.274 403.447 96.3453 0.2005 re +f* +0 g +254.048 403.647 17.2619 0.2006 re +f* +1 g +271.31 403.647 7.6273 0.2006 re +f* +0 g +278.937 403.647 31.9144 0.2006 re +f* +1 g +310.851 403.647 6.2223 0.2006 re +f* +0.498 0 0.482 rg +317.074 403.647 96.546 0.2006 re +f* +0 g +254.048 403.848 17.2619 0.2006 re +f* +1 g +271.31 403.848 7.6273 0.2006 re +f* +0 g +278.937 403.848 31.9144 0.2006 re +f* +1 g +310.851 403.848 6.2223 0.2006 re +f* +0.498 0 0.482 rg +317.074 403.848 96.7467 0.2006 re +f* +0 g +253.847 404.048 17.4626 0.2005 re +f* +1 g +271.31 404.048 7.6273 0.2005 re +f* +0 g +278.937 404.048 31.9144 0.2005 re +f* +1 g +310.851 404.048 6.2223 0.2005 re +f* +0.498 0 0.482 rg +317.074 404.048 13.6489 0.2005 re +f* +1 g +330.722 404.048 8.4302 0.2005 re +f* +0.498 0 0.482 rg +339.153 404.048 74.6676 0.2005 re +f* +0 g +253.847 404.249 17.4626 0.2005 re +f* +1 g +271.31 404.249 7.6273 0.2005 re +f* +0 g +278.937 404.249 31.7137 0.2005 re +f* +1 g +310.651 404.249 6.423 0.2005 re +f* +0.498 0 0.482 rg +317.074 404.249 12.2439 0.2005 re +f* +1 g +329.317 404.249 11.2403 0.2005 re +f* +0.498 0 0.482 rg +340.558 404.249 73.4633 0.2005 re +f* +0 g +253.646 404.449 17.6633 0.2006 re +f* +1 g +271.31 404.449 7.6273 0.2006 re +f* +0 g +278.937 404.449 31.7137 0.2006 re +f* +1 g +310.651 404.449 6.423 0.2006 re +f* +0.498 0 0.482 rg +317.074 404.449 11.0395 0.2006 re +f* +1 g +328.113 404.449 13.4483 0.2006 re +f* +0.498 0 0.482 rg +341.561 404.449 72.4597 0.2006 re +f* +0 g +253.646 404.65 17.6633 0.2006 re +f* +1 g +271.31 404.65 7.6273 0.2006 re +f* +0 g +278.937 404.65 31.7137 0.2006 re +f* +1 g +310.651 404.65 6.423 0.2006 re +f* +0.498 0 0.482 rg +317.074 404.65 9.8352 0.2006 re +f* +1 g +326.909 404.65 15.6561 0.2006 re +f* +0.498 0 0.482 rg +342.565 404.65 71.6568 0.2006 re +f* +0 g +253.445 404.851 17.8641 0.2005 re +f* +1 g +271.31 404.851 7.6273 0.2005 re +f* +0 g +278.937 404.851 31.7137 0.2005 re +f* +1 g +310.651 404.851 6.423 0.2005 re +f* +0.498 0 0.482 rg +317.074 404.851 8.8316 0.2005 re +f* +1 g +325.905 404.851 17.2619 0.2005 re +f* +0.498 0 0.482 rg +343.167 404.851 71.0546 0.2005 re +f* +0 g +253.445 405.051 17.8641 0.2006 re +f* +1 g +271.31 405.051 7.6273 0.2006 re +f* +0 g +278.937 405.051 31.7137 0.2006 re +f* +1 g +310.651 405.051 6.423 0.2006 re +f* +0.498 0 0.482 rg +317.074 405.051 8.0288 0.2006 re +f* +1 g +325.102 405.051 7.0251 0.2006 re +f* +0 g +332.127 405.051 6.2223 0.2006 re +f* +1 g +338.35 405.051 5.6201 0.2006 re +f* +0.498 0 0.482 rg +343.97 405.051 70.4526 0.2006 re +f* +0 g +253.445 405.252 17.8641 0.2005 re +f* +1 g +271.31 405.252 7.6273 0.2005 re +f* +0 g +278.937 405.252 31.513 0.2005 re +f* +1 g +310.45 405.252 6.4229 0.2005 re +f* +0.498 0 0.482 rg +316.873 405.252 7.6274 0.2005 re +f* +1 g +324.5 405.252 5.6201 0.2005 re +f* +0 g +330.12 405.252 9.8353 0.2005 re +f* +1 g +339.956 405.252 4.6165 0.2005 re +f* +0.498 0 0.482 rg +344.572 405.252 69.8504 0.2005 re +f* +0 g +253.245 405.452 18.0648 0.2006 re +f* +1 g +271.31 405.452 7.6273 0.2006 re +f* +0 g +278.937 405.452 31.513 0.2006 re +f* +1 g +310.45 405.452 6.4229 0.2006 re +f* +0.498 0 0.482 rg +316.873 405.452 7.0252 0.2006 re +f* +1 g +323.898 405.452 5.2187 0.2006 re +f* +0 g +329.117 405.452 12.0432 0.2006 re +f* +1 g +341.16 405.452 3.8136 0.2006 re +f* +0.498 0 0.482 rg +344.973 405.452 69.6497 0.2006 re +f* +0 g +253.245 405.653 18.0648 0.2006 re +f* +1 g +271.31 405.653 7.6273 0.2006 re +f* +0 g +278.937 405.653 31.513 0.2006 re +f* +1 g +310.45 405.653 6.4229 0.2006 re +f* +0.498 0 0.482 rg +316.873 405.653 6.4231 0.2006 re +f* +1 g +323.296 405.653 4.8172 0.2006 re +f* +0 g +328.113 405.653 13.8497 0.2006 re +f* +1 g +341.963 405.653 3.6129 0.2006 re +f* +0.498 0 0.482 rg +345.576 405.653 69.0475 0.2006 re +f* +0 g +253.044 405.853 18.2655 0.2006 re +f* +1 g +271.31 405.853 7.6273 0.2006 re +f* +0 g +278.937 405.853 31.513 0.2006 re +f* +1 g +310.45 405.853 6.4229 0.2006 re +f* +0.498 0 0.482 rg +316.873 405.853 5.821 0.2006 re +f* +1 g +322.694 405.853 4.8172 0.2006 re +f* +0 g +327.511 405.853 15.0539 0.2006 re +f* +1 g +342.565 405.853 3.4122 0.2006 re +f* +0.498 0 0.482 rg +345.977 405.853 68.8468 0.2006 re +f* +0 g +253.044 406.054 18.2655 0.2005 re +f* +1 g +271.31 406.054 7.6273 0.2005 re +f* +0 g +278.937 406.054 31.513 0.2005 re +f* +1 g +310.45 406.054 6.4229 0.2005 re +f* +0.498 0 0.482 rg +316.873 406.054 5.2188 0.2005 re +f* +1 g +322.092 406.054 4.6165 0.2005 re +f* +0 g +326.708 406.054 16.459 0.2005 re +f* +1 g +343.167 406.054 3.2115 0.2005 re +f* +0.498 0 0.482 rg +346.379 406.054 68.4453 0.2005 re +f* +0 g +252.843 406.255 18.4662 0.2005 re +f* +1 g +271.31 406.255 7.6273 0.2005 re +f* +0 g +278.937 406.255 31.3122 0.2005 re +f* +1 g +310.249 406.255 6.6237 0.2005 re +f* +0.498 0 0.482 rg +316.873 406.255 4.8174 0.2005 re +f* +1 g +321.69 406.255 4.6165 0.2005 re +f* +0 g +326.307 406.255 17.4626 0.2005 re +f* +1 g +343.769 406.255 3.0108 0.2005 re +f* +0.498 0 0.482 rg +346.78 406.255 68.0438 0.2005 re +f* +0 g +252.843 406.455 18.4662 0.2006 re +f* +1 g +271.31 406.455 7.6273 0.2006 re +f* +0 g +278.937 406.455 31.3122 0.2006 re +f* +1 g +310.249 406.455 6.6237 0.2006 re +f* +0.498 0 0.482 rg +316.873 406.455 4.2152 0.2006 re +f* +1 g +321.088 406.455 4.6165 0.2006 re +f* +0 g +325.704 406.455 18.4662 0.2006 re +f* +1 g +344.171 406.455 3.2115 0.2006 re +f* +0.498 0 0.482 rg +347.382 406.455 67.6425 0.2006 re +f* +0 g +252.843 406.656 18.4662 0.2006 re +f* +1 g +271.31 406.656 7.6273 0.2006 re +f* +0 g +278.937 406.656 31.3122 0.2006 re +f* +1 g +310.249 406.656 6.6237 0.2006 re +f* +0.498 0 0.482 rg +316.873 406.656 3.8138 0.2006 re +f* +1 g +320.687 406.656 4.6165 0.2006 re +f* +0 g +325.303 406.656 19.269 0.2006 re +f* +1 g +344.572 406.656 3.2116 0.2006 re +f* +0.498 0 0.482 rg +347.784 406.656 67.241 0.2006 re +f* +0 g +252.643 406.856 18.6669 0.2005 re +f* +1 g +271.31 406.856 7.6273 0.2005 re +f* +0 g +278.937 406.856 31.3122 0.2005 re +f* +1 g +310.249 406.856 6.8245 0.2005 re +f* +0.498 0 0.482 rg +317.074 406.856 3.0108 0.2005 re +f* +1 g +320.084 406.856 4.8172 0.2005 re +f* +0 g +324.902 406.856 20.0719 0.2005 re +f* +1 g +344.973 406.856 3.2116 0.2005 re +f* +0.498 0 0.482 rg +348.185 406.856 67.0402 0.2005 re +f* +0 g +252.643 407.057 18.6669 0.2006 re +f* +1 g +271.31 407.057 7.6273 0.2006 re +f* +0 g +278.937 407.057 31.3122 0.2006 re +f* +1 g +310.249 407.057 6.8245 0.2006 re +f* +0.498 0 0.482 rg +317.074 407.057 2.4086 0.2006 re +f* +1 g +319.482 407.057 4.8173 0.2006 re +f* +0 g +324.299 407.057 21.0755 0.2006 re +f* +1 g +345.375 407.057 3.0108 0.2006 re +f* +0.498 0 0.482 rg +348.386 407.057 66.8395 0.2006 re +f* +0 g +252.442 407.257 18.8677 0.2005 re +f* +1 g +271.31 407.257 7.6273 0.2005 re +f* +0 g +278.937 407.257 31.1115 0.2005 re +f* +1 g +310.048 407.257 7.0252 0.2005 re +f* +0.498 0 0.482 rg +317.074 407.257 2.0071 0.2005 re +f* +1 g +319.081 407.257 5.0181 0.2005 re +f* +0 g +324.099 407.257 21.4769 0.2005 re +f* +1 g +345.576 407.257 3.2116 0.2005 re +f* +0.498 0 0.482 rg +348.787 407.257 66.438 0.2005 re +f* +0 g +252.442 407.458 18.8677 0.2006 re +f* +1 g +271.31 407.458 7.6273 0.2006 re +f* +0 g +278.937 407.458 31.1115 0.2006 re +f* +1 g +310.048 407.458 7.0252 0.2006 re +f* +0.498 0 0.482 rg +317.074 407.458 1.405 0.2006 re +f* +1 g +318.479 407.458 5.2187 0.2006 re +f* +0 g +323.697 407.458 22.2798 0.2006 re +f* +1 g +345.977 407.458 3.2116 0.2006 re +f* +0.498 0 0.482 rg +349.189 407.458 66.2374 0.2006 re +f* +0 g +252.442 407.658 18.8677 0.2006 re +f* +1 g +271.31 407.658 7.6273 0.2006 re +f* +0 g +278.937 407.658 31.1115 0.2006 re +f* +1 g +310.048 407.658 7.0252 0.2006 re +f* +0.498 0 0.482 rg +317.074 407.658 1.0035 0.2006 re +f* +1 g +318.077 407.658 5.2188 0.2006 re +f* +0 g +323.296 407.658 22.882 0.2006 re +f* +1 g +346.178 407.658 3.2115 0.2006 re +f* +0.498 0 0.482 rg +349.389 407.658 66.0367 0.2006 re +f* +0 g +252.241 407.859 19.0684 0.2005 re +f* +1 g +271.31 407.859 7.6273 0.2005 re +f* +0 g +278.937 407.859 31.1115 0.2005 re +f* +1 g +310.048 407.859 7.0252 0.2005 re +f* +0.498 0 0.482 rg +317.074 407.859 0.4014 0.2005 re +f* +1 g +317.475 407.859 5.4194 0.2005 re +f* +0 g +322.894 407.859 23.6849 0.2005 re +f* +1 g +346.579 407.859 3.2116 0.2005 re +f* +0.498 0 0.482 rg +349.791 407.859 65.8359 0.2005 re +f* +0 g +252.241 408.06 19.0684 0.2006 re +f* +1 g +271.31 408.06 7.6273 0.2006 re +f* +0 g +278.937 408.06 31.1115 0.2006 re +f* +1 g +310.048 408.06 12.6454 0.2006 re +f* +0 g +322.694 408.06 24.0863 0.2006 re +f* +1 g +346.78 408.06 3.2114 0.2006 re +f* +0.498 0 0.482 rg +349.991 408.06 65.6353 0.2006 re +f* +0 g +252.241 408.26 19.0684 0.2005 re +f* +1 g +271.31 408.26 7.6273 0.2005 re +f* +0 g +278.937 408.26 31.1115 0.2005 re +f* +1 g +310.048 408.26 12.2439 0.2005 re +f* +0 g +322.292 408.26 24.8892 0.2005 re +f* +1 g +347.181 408.26 3.2115 0.2005 re +f* +0.498 0 0.482 rg +350.393 408.26 65.2338 0.2005 re +f* +0 g +252.04 408.461 19.2691 0.2006 re +f* +1 g +271.31 408.461 7.6273 0.2006 re +f* +0 g +278.937 408.461 31.1115 0.2006 re +f* +1 g +310.048 408.461 12.0432 0.2006 re +f* +0 g +322.092 408.461 25.2906 0.2006 re +f* +1 g +347.382 408.461 3.2115 0.2006 re +f* +0.498 0 0.482 rg +350.594 408.461 65.2338 0.2006 re +f* +0 g +252.04 408.661 19.2691 0.2006 re +f* +1 g +271.31 408.661 7.6273 0.2006 re +f* +0 g +278.937 408.661 30.9108 0.2006 re +f* +1 g +309.848 408.661 11.8425 0.2006 re +f* +0 g +321.69 408.661 25.8927 0.2006 re +f* +1 g +347.583 408.661 3.2116 0.2006 re +f* +0.498 0 0.482 rg +350.794 408.661 65.033 0.2006 re +f* +0 g +252.04 408.862 19.2691 0.2005 re +f* +1 g +271.31 408.862 7.6273 0.2005 re +f* +0 g +278.937 408.862 30.9108 0.2005 re +f* +1 g +309.848 408.862 11.6417 0.2005 re +f* +0 g +321.489 408.862 26.2943 0.2005 re +f* +1 g +347.784 408.862 3.4122 0.2005 re +f* +0.498 0 0.482 rg +351.196 408.862 64.6316 0.2005 re +f* +0 g +251.84 409.062 19.4698 0.2006 re +f* +1 g +271.31 409.062 7.6273 0.2006 re +f* +0 g +278.937 409.062 30.9108 0.2006 re +f* +1 g +309.848 409.062 11.2403 0.2006 re +f* +0 g +321.088 409.062 26.8963 0.2006 re +f* +1 g +347.984 409.062 3.4123 0.2006 re +f* +0.498 0 0.482 rg +351.397 409.062 64.6317 0.2006 re +f* +0 g +251.84 409.263 19.4698 0.2005 re +f* +1 g +271.31 409.263 7.6273 0.2005 re +f* +0 g +278.937 409.263 30.9108 0.2005 re +f* +1 g +309.848 409.263 11.0395 0.2005 re +f* +0 g +320.887 409.263 27.4986 0.2005 re +f* +1 g +348.386 409.263 3.2115 0.2005 re +f* +0.498 0 0.482 rg +351.597 409.263 64.431 0.2005 re +f* +0 g +251.84 409.463 19.4698 0.2006 re +f* +1 g +271.31 409.463 7.6273 0.2006 re +f* +0 g +278.937 409.463 30.9108 0.2006 re +f* +1 g +309.848 409.463 10.8389 0.2006 re +f* +0 g +320.687 409.463 27.6992 0.2006 re +f* +1 g +348.386 409.463 3.6129 0.2006 re +f* +0.498 0 0.482 rg +351.999 409.463 64.0296 0.2006 re +f* +0 g +251.639 409.664 19.6705 0.2006 re +f* +1 g +271.31 409.664 7.6273 0.2006 re +f* +0 g +278.937 409.664 30.9108 0.2006 re +f* +1 g +309.848 409.664 10.4374 0.2006 re +f* +0 g +320.285 409.664 28.3014 0.2006 re +f* +1 g +348.586 409.664 3.613 0.2006 re +f* +0.498 0 0.482 rg +352.2 409.664 64.0294 0.2006 re +f* +0 g +251.639 409.865 19.6705 0.2005 re +f* +1 g +271.31 409.865 7.6273 0.2005 re +f* +0 g +278.937 409.865 30.9108 0.2005 re +f* +1 g +309.848 409.865 10.2367 0.2005 re +f* +0 g +320.084 409.865 28.7029 0.2005 re +f* +1 g +348.787 409.865 3.6129 0.2005 re +f* +0.498 0 0.482 rg +352.4 409.865 63.8287 0.2005 re +f* +0 g +251.639 410.065 19.6705 0.2006 re +f* +1 g +271.31 410.065 7.6273 0.2006 re +f* +0 g +278.937 410.065 30.7101 0.2006 re +f* +1 g +309.647 410.065 10.2366 0.2006 re +f* +0 g +319.884 410.065 29.1043 0.2006 re +f* +1 g +348.988 410.065 3.613 0.2006 re +f* +0.498 0 0.482 rg +352.601 410.065 63.628 0.2006 re +f* +0 g +251.438 410.266 19.8713 0.2005 re +f* +1 g +271.31 410.266 7.6273 0.2005 re +f* +0 g +278.937 410.266 30.7101 0.2005 re +f* +1 g +309.647 410.266 10.036 0.2005 re +f* +0 g +319.683 410.266 29.5057 0.2005 re +f* +1 g +349.189 410.266 3.613 0.2005 re +f* +0.498 0 0.482 rg +352.802 410.266 63.4272 0.2005 re +f* +0 g +251.438 410.466 19.8713 0.2006 re +f* +1 g +271.31 410.466 7.6273 0.2006 re +f* +0 g +278.937 410.466 30.7101 0.2006 re +f* +1 g +309.647 410.466 9.8352 0.2006 re +f* +0 g +319.482 410.466 29.9072 0.2006 re +f* +1 g +349.389 410.466 3.6129 0.2006 re +f* +0.498 0 0.482 rg +353.002 410.466 63.4274 0.2006 re +f* +0 g +251.438 410.667 19.8713 0.2005 re +f* +1 g +271.31 410.667 7.6273 0.2005 re +f* +0 g +278.937 410.667 30.7101 0.2005 re +f* +1 g +309.647 410.667 9.6345 0.2005 re +f* +0 g +319.281 410.667 30.3086 0.2005 re +f* +1 g +349.59 410.667 3.613 0.2005 re +f* +0.498 0 0.482 rg +353.203 410.667 63.2266 0.2005 re +f* +0 g +251.438 410.867 19.8713 0.2006 re +f* +1 g +271.31 410.867 7.6273 0.2006 re +f* +0 g +278.937 410.867 30.7101 0.2006 re +f* +1 g +309.647 410.867 9.4337 0.2006 re +f* +0 g +319.081 410.867 30.5094 0.2006 re +f* +1 g +349.59 410.867 3.8137 0.2006 re +f* +0.498 0 0.482 rg +353.404 410.867 63.0259 0.2006 re +f* +0 g +251.238 411.068 20.072 0.2006 re +f* +1 g +271.31 411.068 7.6273 0.2006 re +f* +0 g +278.937 411.068 30.7101 0.2006 re +f* +1 g +309.647 411.068 9.233 0.2006 re +f* +0 g +318.88 411.068 30.9109 0.2006 re +f* +1 g +349.791 411.068 3.8136 0.2006 re +f* +0.498 0 0.482 rg +353.605 411.068 62.8252 0.2006 re +f* +0 g +251.238 411.268 20.072 0.2005 re +f* +1 g +271.31 411.268 7.6273 0.2005 re +f* +0 g +278.937 411.268 30.7101 0.2005 re +f* +1 g +309.647 411.268 9.0324 0.2005 re +f* +0 g +318.679 411.268 31.3121 0.2005 re +f* +1 g +349.991 411.268 3.8138 0.2005 re +f* +0.498 0 0.482 rg +353.805 411.268 28.7028 0.2005 re +f* +1 g +382.508 411.268 1.2043 0.2005 re +f* +0.498 0 0.482 rg +383.712 411.268 23.2835 0.2005 re +f* +1 g +406.996 411.268 1.6057 0.2005 re +f* +0.498 0 0.482 rg +408.602 411.268 8.0288 0.2005 re +f* +0 g +251.238 411.469 20.072 0.2006 re +f* +1 g +271.31 411.469 7.6273 0.2006 re +f* +0 g +278.937 411.469 30.7101 0.2006 re +f* +1 g +309.647 411.469 8.8316 0.2006 re +f* +0 g +318.479 411.469 31.5129 0.2006 re +f* +1 g +349.991 411.469 4.0144 0.2006 re +f* +0.498 0 0.482 rg +354.006 411.469 27.0972 0.2006 re +f* +1 g +381.103 411.469 3.8136 0.2006 re +f* +0.498 0 0.482 rg +384.917 411.469 20.4734 0.2006 re +f* +1 g +405.39 411.469 4.6166 0.2006 re +f* +0.498 0 0.482 rg +410.007 411.469 6.6237 0.2006 re +f* +0 g +251.238 411.67 20.072 0.2005 re +f* +1 g +271.31 411.67 7.6273 0.2005 re +f* +0 g +278.937 411.67 30.5094 0.2005 re +f* +1 g +309.446 411.67 8.8316 0.2005 re +f* +0 g +318.278 411.67 31.9144 0.2005 re +f* +1 g +350.192 411.67 4.0144 0.2005 re +f* +0.498 0 0.482 rg +354.207 411.67 26.2942 0.2005 re +f* +1 g +380.501 411.67 4.8173 0.2005 re +f* +0.498 0 0.482 rg +385.318 411.67 19.269 0.2005 re +f* +1 g +404.587 411.67 6.0216 0.2005 re +f* +0.498 0 0.482 rg +410.609 411.67 6.0216 0.2005 re +f* +0 g +251.037 411.87 20.2727 0.2006 re +f* +1 g +271.31 411.87 7.6273 0.2006 re +f* +0 g +278.937 411.87 30.5094 0.2006 re +f* +1 g +309.446 411.87 8.6308 0.2006 re +f* +0 g +318.077 411.87 32.3159 0.2006 re +f* +1 g +350.393 411.87 4.0144 0.2006 re +f* +0.498 0 0.482 rg +354.407 411.87 6.2223 0.2006 re +f* +1 g +360.63 411.87 9.6345 0.2006 re +f* +0.498 0 0.482 rg +370.264 411.87 9.6346 0.2006 re +f* +1 g +379.899 411.87 5.8208 0.2006 re +f* +0.498 0 0.482 rg +385.72 411.87 2.6093 0.2006 re +f* +1 g +388.329 411.87 0.2008 0.2006 re +f* +0.498 0 0.482 rg +388.53 411.87 6.2223 0.2006 re +f* +1 g +394.752 411.87 0.2007 0.2006 re +f* +0.498 0 0.482 rg +394.953 411.87 9.0324 0.2006 re +f* +1 g +403.985 411.87 7.2259 0.2006 re +f* +0.498 0 0.482 rg +411.211 411.87 5.4194 0.2006 re +f* +0 g +251.037 412.071 20.2727 0.2006 re +f* +1 g +271.31 412.071 7.6273 0.2006 re +f* +0 g +278.937 412.071 30.5094 0.2006 re +f* +1 g +309.446 412.071 8.4301 0.2006 re +f* +0 g +317.876 412.071 32.5166 0.2006 re +f* +1 g +350.393 412.071 4.0144 0.2006 re +f* +0.498 0 0.482 rg +354.407 412.071 6.2223 0.2006 re +f* +1 g +360.63 412.071 9.6345 0.2006 re +f* +0.498 0 0.482 rg +370.264 412.071 9.2331 0.2006 re +f* +1 g +379.497 412.071 2.8101 0.2006 re +f* +0.498 0 0.482 rg +382.307 412.071 1.6058 0.2006 re +f* +1 g +383.913 412.071 2.2078 0.2006 re +f* +0.498 0 0.482 rg +386.121 412.071 2.2079 0.2006 re +f* +1 g +388.329 412.071 6.6238 0.2006 re +f* +0.498 0 0.482 rg +394.953 412.071 8.6309 0.2006 re +f* +1 g +403.584 412.071 3.4123 0.2006 re +f* +0.498 0 0.482 rg +406.996 412.071 1.8065 0.2006 re +f* +1 g +408.802 412.071 2.6093 0.2006 re +f* +0.498 0 0.482 rg +411.412 412.071 5.4194 0.2006 re +f* +0 g +251.037 412.271 20.2727 0.2005 re +f* +1 g +271.31 412.271 7.6273 0.2005 re +f* +0 g +278.937 412.271 30.5094 0.2005 re +f* +1 g +309.446 412.271 8.2295 0.2005 re +f* +0 g +317.676 412.271 32.9179 0.2005 re +f* +1 g +350.594 412.271 4.0144 0.2005 re +f* +0.498 0 0.482 rg +354.608 412.271 6.0216 0.2005 re +f* +1 g +360.63 412.271 9.6345 0.2005 re +f* +0.498 0 0.482 rg +370.264 412.271 8.8317 0.2005 re +f* +1 g +379.096 412.271 2.2079 0.2005 re +f* +0.498 0 0.482 rg +381.304 412.271 3.4122 0.2005 re +f* +1 g +384.716 412.271 1.6057 0.2005 re +f* +0.498 0 0.482 rg +386.322 412.271 2.0072 0.2005 re +f* +1 g +388.329 412.271 6.6238 0.2005 re +f* +0.498 0 0.482 rg +394.953 412.271 8.2295 0.2005 re +f* +1 g +403.182 412.271 3.0108 0.2005 re +f* +0.498 0 0.482 rg +406.193 412.271 3.613 0.2005 re +f* +1 g +409.806 412.271 2.0071 0.2005 re +f* +0.498 0 0.482 rg +411.813 412.271 5.018 0.2005 re +f* +0 g +251.037 412.472 20.2727 0.2006 re +f* +1 g +271.31 412.472 7.6273 0.2006 re +f* +0 g +278.937 412.472 30.5094 0.2006 re +f* +1 g +309.446 412.472 8.0287 0.2006 re +f* +0 g +317.475 412.472 21.0756 0.2006 re +f* +1 g +338.551 412.472 2.81 0.2006 re +f* +0 g +341.361 412.472 9.2331 0.2006 re +f* +1 g +350.594 412.472 4.2151 0.2006 re +f* +0.498 0 0.482 rg +354.809 412.472 5.8209 0.2006 re +f* +1 g +360.63 412.472 9.6345 0.2006 re +f* +0.498 0 0.482 rg +370.264 412.472 8.4303 0.2006 re +f* +1 g +378.695 412.472 2.2079 0.2006 re +f* +0.498 0 0.482 rg +380.902 412.472 4.4158 0.2006 re +f* +1 g +385.318 412.472 1.405 0.2006 re +f* +0.498 0 0.482 rg +386.723 412.472 1.6057 0.2006 re +f* +1 g +388.329 412.472 6.6238 0.2006 re +f* +0.498 0 0.482 rg +394.953 412.472 7.8281 0.2006 re +f* +1 g +402.781 412.472 2.8101 0.2006 re +f* +0.498 0 0.482 rg +405.591 412.472 4.8172 0.2006 re +f* +1 g +410.408 412.472 1.8065 0.2006 re +f* +0.498 0 0.482 rg +412.215 412.472 4.6165 0.2006 re +f* +0 g +250.836 412.672 20.4734 0.2005 re +f* +1 g +271.31 412.672 7.6273 0.2005 re +f* +0 g +278.937 412.672 30.5094 0.2005 re +f* +1 g +309.446 412.672 8.0287 0.2005 re +f* +0 g +317.475 412.672 19.8713 0.2005 re +f* +1 g +337.346 412.672 5.0179 0.2005 re +f* +0 g +342.364 412.672 8.4303 0.2005 re +f* +1 g +350.794 412.672 4.215 0.2005 re +f* +0.498 0 0.482 rg +355.01 412.672 8.631 0.2005 re +f* +1 g +363.641 412.672 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 412.672 11.2403 0.2005 re +f* +1 g +378.494 412.672 2.0072 0.2005 re +f* +0.498 0 0.482 rg +380.501 412.672 5.018 0.2005 re +f* +1 g +385.519 412.672 1.4051 0.2005 re +f* +0.498 0 0.482 rg +386.924 412.672 1.4049 0.2005 re +f* +1 g +388.329 412.672 3.4123 0.2005 re +f* +0.498 0 0.482 rg +391.741 412.672 10.6381 0.2005 re +f* +1 g +402.379 412.672 2.8101 0.2005 re +f* +0.498 0 0.482 rg +405.189 412.672 5.6201 0.2005 re +f* +1 g +410.81 412.672 1.6058 0.2005 re +f* +0.498 0 0.482 rg +412.415 412.672 4.4158 0.2005 re +f* +0 g +250.836 412.873 20.4734 0.2006 re +f* +1 g +271.31 412.873 7.6273 0.2006 re +f* +0 g +278.937 412.873 30.5094 0.2006 re +f* +1 g +309.446 412.873 7.828 0.2006 re +f* +0 g +317.274 412.873 19.4698 0.2006 re +f* +1 g +336.744 412.873 6.2223 0.2006 re +f* +0 g +342.966 412.873 8.0287 0.2006 re +f* +1 g +350.995 412.873 4.2152 0.2006 re +f* +0.498 0 0.482 rg +355.21 412.873 8.4302 0.2006 re +f* +1 g +363.641 412.873 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 412.873 10.8389 0.2006 re +f* +1 g +378.092 412.873 2.2079 0.2006 re +f* +0.498 0 0.482 rg +380.3 412.873 5.6201 0.2006 re +f* +1 g +385.92 412.873 1.2043 0.2006 re +f* +0.498 0 0.482 rg +387.125 412.873 1.2043 0.2006 re +f* +1 g +388.329 412.873 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 412.873 10.4374 0.2006 re +f* +1 g +402.179 412.873 2.8101 0.2006 re +f* +0.498 0 0.482 rg +404.989 412.873 6.2223 0.2006 re +f* +1 g +411.211 412.873 1.405 0.2006 re +f* +0.498 0 0.482 rg +412.616 412.873 4.4159 0.2006 re +f* +0 g +250.836 413.073 20.4734 0.2006 re +f* +1 g +271.31 413.073 7.6273 0.2006 re +f* +0 g +278.937 413.073 13.0467 0.2006 re +f* +1 g +291.984 413.073 10.036 0.2006 re +f* +0 g +302.02 413.073 7.4267 0.2006 re +f* +1 g +309.446 413.073 7.6273 0.2006 re +f* +0 g +317.074 413.073 19.0683 0.2006 re +f* +1 g +336.142 413.073 7.2259 0.2006 re +f* +0 g +343.368 413.073 7.6273 0.2006 re +f* +1 g +350.995 413.073 4.2152 0.2006 re +f* +0.498 0 0.482 rg +355.21 413.073 8.4302 0.2006 re +f* +1 g +363.641 413.073 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 413.073 10.6382 0.2006 re +f* +1 g +377.892 413.073 2.2079 0.2006 re +f* +0.498 0 0.482 rg +380.099 413.073 6.0215 0.2006 re +f* +1 g +386.121 413.073 1.2043 0.2006 re +f* +0.498 0 0.482 rg +387.325 413.073 1.0036 0.2006 re +f* +1 g +388.329 413.073 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 413.073 10.036 0.2006 re +f* +1 g +401.777 413.073 3.0108 0.2006 re +f* +0.498 0 0.482 rg +404.788 413.073 6.8244 0.2006 re +f* +1 g +411.612 413.073 1.2043 0.2006 re +f* +0.498 0 0.482 rg +412.817 413.073 4.2152 0.2006 re +f* +0 g +250.836 413.274 20.4734 0.2005 re +f* +1 g +271.31 413.274 7.6273 0.2005 re +f* +0 g +278.937 413.274 13.0467 0.2005 re +f* +1 g +291.984 413.274 10.036 0.2005 re +f* +0 g +302.02 413.274 7.4267 0.2005 re +f* +1 g +309.446 413.274 7.4265 0.2005 re +f* +0 g +316.873 413.274 18.667 0.2005 re +f* +1 g +335.54 413.274 3.2115 0.2005 re +f* +0 g +338.751 413.274 2.8101 0.2005 re +f* +1 g +341.561 413.274 2.2079 0.2005 re +f* +0 g +343.769 413.274 7.4266 0.2005 re +f* +1 g +351.196 413.274 4.2151 0.2005 re +f* +0.498 0 0.482 rg +355.411 413.274 8.2295 0.2005 re +f* +1 g +363.641 413.274 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 413.274 10.4375 0.2005 re +f* +1 g +377.691 413.274 2.2079 0.2005 re +f* +0.498 0 0.482 rg +379.899 413.274 6.4229 0.2005 re +f* +1 g +386.322 413.274 1.0036 0.2005 re +f* +0.498 0 0.482 rg +387.325 413.274 1.0036 0.2005 re +f* +1 g +388.329 413.274 3.4123 0.2005 re +f* +0.498 0 0.482 rg +391.741 413.274 9.8352 0.2005 re +f* +1 g +401.576 413.274 3.0108 0.2005 re +f* +0.498 0 0.482 rg +404.587 413.274 7.2259 0.2005 re +f* +1 g +411.813 413.274 1.2044 0.2005 re +f* +0.498 0 0.482 rg +413.017 413.274 4.0144 0.2005 re +f* +0 g +250.836 413.475 20.4734 0.2006 re +f* +1 g +271.31 413.475 7.6273 0.2006 re +f* +0 g +278.937 413.475 13.0467 0.2006 re +f* +1 g +291.984 413.475 10.036 0.2006 re +f* +0 g +302.02 413.475 7.4267 0.2006 re +f* +1 g +309.446 413.475 7.4265 0.2006 re +f* +0 g +316.873 413.475 18.2655 0.2006 re +f* +1 g +335.138 413.475 3.0108 0.2006 re +f* +0 g +338.149 413.475 4.2151 0.2006 re +f* +1 g +342.364 413.475 1.8065 0.2006 re +f* +0 g +344.171 413.475 7.0252 0.2006 re +f* +1 g +351.196 413.475 4.4158 0.2006 re +f* +0.498 0 0.482 rg +355.612 413.475 8.0288 0.2006 re +f* +1 g +363.641 413.475 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 413.475 10.2367 0.2006 re +f* +1 g +377.49 413.475 2.208 0.2006 re +f* +0.498 0 0.482 rg +379.698 413.475 6.8244 0.2006 re +f* +1 g +386.522 413.475 1.0036 0.2006 re +f* +0.498 0 0.482 rg +387.526 413.475 0.8028 0.2006 re +f* +1 g +388.329 413.475 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 413.475 9.6345 0.2006 re +f* +1 g +401.376 413.475 3.0108 0.2006 re +f* +0.498 0 0.482 rg +404.386 413.475 7.6274 0.2006 re +f* +1 g +412.014 413.475 1.2042 0.2006 re +f* +0.498 0 0.482 rg +413.218 413.475 3.8138 0.2006 re +f* +0 g +250.836 413.675 20.4734 0.2005 re +f* +1 g +271.31 413.675 7.6273 0.2005 re +f* +0 g +278.937 413.675 13.0467 0.2005 re +f* +1 g +291.984 413.675 10.036 0.2005 re +f* +0 g +302.02 413.675 7.4267 0.2005 re +f* +1 g +309.446 413.675 7.2258 0.2005 re +f* +0 g +316.672 413.675 18.2655 0.2005 re +f* +1 g +334.938 413.675 2.8101 0.2005 re +f* +0 g +337.748 413.675 5.018 0.2005 re +f* +1 g +342.766 413.675 1.6057 0.2005 re +f* +0 g +344.371 413.675 6.8245 0.2005 re +f* +1 g +351.196 413.675 4.6165 0.2005 re +f* +0.498 0 0.482 rg +355.812 413.675 7.8281 0.2005 re +f* +1 g +363.641 413.675 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 413.675 10.036 0.2005 re +f* +1 g +377.289 413.675 2.2079 0.2005 re +f* +0.498 0 0.482 rg +379.497 413.675 7.2259 0.2005 re +f* +1 g +386.723 413.675 1.0036 0.2005 re +f* +0.498 0 0.482 rg +387.727 413.675 0.6021 0.2005 re +f* +1 g +388.329 413.675 3.4123 0.2005 re +f* +0.498 0 0.482 rg +391.741 413.675 9.4338 0.2005 re +f* +1 g +401.175 413.675 3.0108 0.2005 re +f* +0.498 0 0.482 rg +404.186 413.675 8.0288 0.2005 re +f* +1 g +412.215 413.675 1.2043 0.2005 re +f* +0.498 0 0.482 rg +413.419 413.675 3.613 0.2005 re +f* +0 g +250.635 413.876 20.6741 0.2006 re +f* +1 g +271.31 413.876 7.6273 0.2006 re +f* +0 g +278.937 413.876 16.0575 0.2006 re +f* +1 g +294.994 413.876 3.613 0.2006 re +f* +0 g +298.607 413.876 10.8389 0.2006 re +f* +1 g +309.446 413.876 7.0251 0.2006 re +f* +0 g +316.471 413.876 18.0648 0.2006 re +f* +1 g +334.536 413.876 2.8101 0.2006 re +f* +0 g +337.346 413.876 5.8208 0.2006 re +f* +1 g +343.167 413.876 1.6058 0.2006 re +f* +0 g +344.773 413.876 6.6237 0.2006 re +f* +1 g +351.397 413.876 4.4158 0.2006 re +f* +0.498 0 0.482 rg +355.812 413.876 7.8281 0.2006 re +f* +1 g +363.641 413.876 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 413.876 9.8353 0.2006 re +f* +1 g +377.089 413.876 2.4086 0.2006 re +f* +0.498 0 0.482 rg +379.497 413.876 7.4267 0.2006 re +f* +1 g +386.924 413.876 0.8028 0.2006 re +f* +0.498 0 0.482 rg +387.727 413.876 0.6021 0.2006 re +f* +1 g +388.329 413.876 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 413.876 9.2331 0.2006 re +f* +1 g +400.974 413.876 3.0108 0.2006 re +f* +0.498 0 0.482 rg +403.985 413.876 8.4302 0.2006 re +f* +1 g +412.415 413.876 1.2043 0.2006 re +f* +0.498 0 0.482 rg +413.62 413.876 3.4123 0.2006 re +f* +0 g +250.635 414.076 20.6741 0.2006 re +f* +1 g +271.31 414.076 7.6273 0.2006 re +f* +0 g +278.937 414.076 16.0575 0.2006 re +f* +1 g +294.994 414.076 3.613 0.2006 re +f* +0 g +298.607 414.076 10.6381 0.2006 re +f* +1 g +309.245 414.076 7.2259 0.2006 re +f* +0 g +316.471 414.076 17.6633 0.2006 re +f* +1 g +334.135 414.076 3.0108 0.2006 re +f* +0 g +337.146 414.076 6.423 0.2006 re +f* +1 g +343.568 414.076 1.405 0.2006 re +f* +0 g +344.973 414.076 6.4231 0.2006 re +f* +1 g +351.397 414.076 4.6165 0.2006 re +f* +0.498 0 0.482 rg +356.013 414.076 7.6274 0.2006 re +f* +1 g +363.641 414.076 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 414.076 9.6346 0.2006 re +f* +1 g +376.888 414.076 2.4086 0.2006 re +f* +0.498 0 0.482 rg +379.297 414.076 7.6274 0.2006 re +f* +1 g +386.924 414.076 1.0036 0.2006 re +f* +0.498 0 0.482 rg +387.928 414.076 0.4013 0.2006 re +f* +1 g +388.329 414.076 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 414.076 9.0324 0.2006 re +f* +1 g +400.774 414.076 3.0108 0.2006 re +f* +0.498 0 0.482 rg +403.784 414.076 8.8316 0.2006 re +f* +1 g +412.616 414.076 1.0036 0.2006 re +f* +0.498 0 0.482 rg +413.62 414.076 3.6129 0.2006 re +f* +0 g +250.635 414.277 20.6741 0.2005 re +f* +1 g +271.31 414.277 7.6273 0.2005 re +f* +0 g +278.937 414.277 16.0575 0.2005 re +f* +1 g +294.994 414.277 3.613 0.2005 re +f* +0 g +298.607 414.277 10.6381 0.2005 re +f* +1 g +309.245 414.277 7.0252 0.2005 re +f* +0 g +316.271 414.277 17.6633 0.2005 re +f* +1 g +333.934 414.277 3.0108 0.2005 re +f* +0 g +336.945 414.277 6.8245 0.2005 re +f* +1 g +343.769 414.277 1.405 0.2005 re +f* +0 g +345.174 414.277 6.423 0.2005 re +f* +1 g +351.597 414.277 4.6165 0.2005 re +f* +0.498 0 0.482 rg +356.214 414.277 7.4267 0.2005 re +f* +1 g +363.641 414.277 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 414.277 9.4339 0.2005 re +f* +1 g +376.687 414.277 2.6093 0.2005 re +f* +0.498 0 0.482 rg +379.297 414.277 7.828 0.2005 re +f* +1 g +387.125 414.277 0.803 0.2005 re +f* +0.498 0 0.482 rg +387.928 414.277 0.4013 0.2005 re +f* +1 g +388.329 414.277 3.4123 0.2005 re +f* +0.498 0 0.482 rg +391.741 414.277 8.8316 0.2005 re +f* +1 g +400.573 414.277 3.2116 0.2005 re +f* +0.498 0 0.482 rg +403.784 414.277 9.0323 0.2005 re +f* +1 g +412.817 414.277 1.0036 0.2005 re +f* +0.498 0 0.482 rg +413.82 414.277 3.4122 0.2005 re +f* +0 g +250.635 414.477 20.6741 0.2005 re +f* +1 g +271.31 414.477 7.6273 0.2005 re +f* +0 g +278.937 414.477 16.0575 0.2005 re +f* +1 g +294.994 414.477 3.613 0.2005 re +f* +0 g +298.607 414.477 10.6381 0.2005 re +f* +1 g +309.245 414.477 6.8245 0.2005 re +f* +0 g +316.07 414.477 17.6633 0.2005 re +f* +1 g +333.733 414.477 3.0108 0.2005 re +f* +0 g +336.744 414.477 7.4266 0.2005 re +f* +1 g +344.171 414.477 1.2043 0.2005 re +f* +0 g +345.375 414.477 6.2223 0.2005 re +f* +1 g +351.597 414.477 4.6165 0.2005 re +f* +0.498 0 0.482 rg +356.214 414.477 7.4267 0.2005 re +f* +1 g +363.641 414.477 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 414.477 9.2331 0.2005 re +f* +1 g +376.486 414.477 2.6094 0.2005 re +f* +0.498 0 0.482 rg +379.096 414.477 8.0287 0.2005 re +f* +1 g +387.125 414.477 1.0036 0.2005 re +f* +0.498 0 0.482 rg +388.128 414.477 0.2007 0.2005 re +f* +1 g +388.329 414.477 3.4123 0.2005 re +f* +0.498 0 0.482 rg +391.741 414.477 8.6309 0.2005 re +f* +1 g +400.372 414.477 3.2115 0.2005 re +f* +0.498 0 0.482 rg +403.584 414.477 9.4339 0.2005 re +f* +1 g +413.017 414.477 1.0036 0.2005 re +f* +0.498 0 0.482 rg +414.021 414.477 3.2114 0.2005 re +f* +0 g +250.635 414.678 20.6741 0.2006 re +f* +1 g +271.31 414.678 7.6273 0.2006 re +f* +0 g +278.937 414.678 16.0575 0.2006 re +f* +1 g +294.994 414.678 3.613 0.2006 re +f* +0 g +298.607 414.678 10.6381 0.2006 re +f* +1 g +309.245 414.678 6.8245 0.2006 re +f* +0 g +316.07 414.678 17.4626 0.2006 re +f* +1 g +333.533 414.678 3.0108 0.2006 re +f* +0 g +336.543 414.678 7.828 0.2006 re +f* +1 g +344.371 414.678 1.0036 0.2006 re +f* +0 g +345.375 414.678 6.2223 0.2006 re +f* +1 g +351.597 414.678 4.8173 0.2006 re +f* +0.498 0 0.482 rg +356.415 414.678 7.2259 0.2006 re +f* +1 g +363.641 414.678 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 414.678 9.0324 0.2006 re +f* +1 g +376.286 414.678 2.8101 0.2006 re +f* +0.498 0 0.482 rg +379.096 414.678 8.2294 0.2006 re +f* +1 g +387.325 414.678 0.8029 0.2006 re +f* +0.498 0 0.482 rg +388.128 414.678 0.2007 0.2006 re +f* +1 g +388.329 414.678 3.4123 0.2006 re +f* +0.498 0 0.482 rg +391.741 414.678 8.4302 0.2006 re +f* +1 g +400.171 414.678 3.4122 0.2006 re +f* +0.498 0 0.482 rg +403.584 414.678 9.4339 0.2006 re +f* +1 g +413.017 414.678 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.021 414.678 3.2114 0.2006 re +f* +0 g +250.635 414.878 20.6741 0.2006 re +f* +1 g +271.31 414.878 7.6273 0.2006 re +f* +0 g +278.937 414.878 16.0575 0.2006 re +f* +1 g +294.994 414.878 3.613 0.2006 re +f* +0 g +298.607 414.878 10.6381 0.2006 re +f* +1 g +309.245 414.878 6.6237 0.2006 re +f* +0 g +315.869 414.878 17.4626 0.2006 re +f* +1 g +333.332 414.878 3.0109 0.2006 re +f* +0 g +336.343 414.878 8.2294 0.2006 re +f* +1 g +344.572 414.878 1.0036 0.2006 re +f* +0 g +345.576 414.878 6.2224 0.2006 re +f* +1 g +351.798 414.878 4.6165 0.2006 re +f* +0.498 0 0.482 rg +356.415 414.878 7.2259 0.2006 re +f* +1 g +363.641 414.878 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 414.878 8.8317 0.2006 re +f* +1 g +376.085 414.878 3.0108 0.2006 re +f* +0.498 0 0.482 rg +379.096 414.878 8.2294 0.2006 re +f* +1 g +387.325 414.878 4.4159 0.2006 re +f* +0.498 0 0.482 rg +391.741 414.878 8.4302 0.2006 re +f* +1 g +400.171 414.878 3.2115 0.2006 re +f* +0.498 0 0.482 rg +403.383 414.878 9.8352 0.2006 re +f* +1 g +413.218 414.878 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.222 414.878 3.0108 0.2006 re +f* +0 g +250.435 415.079 20.8749 0.2006 re +f* +1 g +271.31 415.079 7.6273 0.2006 re +f* +0 g +278.937 415.079 16.0575 0.2006 re +f* +1 g +294.994 415.079 3.613 0.2006 re +f* +0 g +298.607 415.079 10.6381 0.2006 re +f* +1 g +309.245 415.079 6.4231 0.2006 re +f* +0 g +315.669 415.079 17.4625 0.2006 re +f* +1 g +333.131 415.079 3.0108 0.2006 re +f* +0 g +336.142 415.079 8.631 0.2006 re +f* +1 g +344.773 415.079 0.8028 0.2006 re +f* +0 g +345.576 415.079 6.2224 0.2006 re +f* +1 g +351.798 415.079 4.8172 0.2006 re +f* +0.498 0 0.482 rg +356.615 415.079 7.0252 0.2006 re +f* +1 g +363.641 415.079 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 415.079 8.8317 0.2006 re +f* +1 g +376.085 415.079 2.8101 0.2006 re +f* +0.498 0 0.482 rg +378.895 415.079 8.6309 0.2006 re +f* +1 g +387.526 415.079 4.2151 0.2006 re +f* +0.498 0 0.482 rg +391.741 415.079 8.2295 0.2006 re +f* +1 g +399.971 415.079 3.4122 0.2006 re +f* +0.498 0 0.482 rg +403.383 415.079 9.8352 0.2006 re +f* +1 g +413.218 415.079 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.222 415.079 3.0108 0.2006 re +f* +0 g +250.435 415.28 20.8749 0.2005 re +f* +1 g +271.31 415.28 7.6273 0.2005 re +f* +0 g +278.937 415.28 16.0575 0.2005 re +f* +1 g +294.994 415.28 3.613 0.2005 re +f* +0 g +298.607 415.28 10.6381 0.2005 re +f* +1 g +309.245 415.28 6.4231 0.2005 re +f* +0 g +315.669 415.28 17.2618 0.2005 re +f* +1 g +332.93 415.28 3.0108 0.2005 re +f* +0 g +335.941 415.28 15.8569 0.2005 re +f* +1 g +351.798 415.28 5.0179 0.2005 re +f* +0.498 0 0.482 rg +356.816 415.28 6.8245 0.2005 re +f* +1 g +363.641 415.28 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 415.28 8.631 0.2005 re +f* +1 g +375.884 415.28 3.0108 0.2005 re +f* +0.498 0 0.482 rg +378.895 415.28 8.6309 0.2005 re +f* +1 g +387.526 415.28 4.2151 0.2005 re +f* +0.498 0 0.482 rg +391.741 415.28 8.0288 0.2005 re +f* +1 g +399.77 415.28 3.4122 0.2005 re +f* +0.498 0 0.482 rg +403.182 415.28 10.2367 0.2005 re +f* +1 g +413.419 415.28 0.8028 0.2005 re +f* +0.498 0 0.482 rg +414.222 415.28 3.2116 0.2005 re +f* +0 g +250.435 415.48 20.8749 0.2006 re +f* +1 g +271.31 415.48 7.6273 0.2006 re +f* +0 g +278.937 415.48 16.0575 0.2006 re +f* +1 g +294.994 415.48 3.613 0.2006 re +f* +0 g +298.607 415.48 10.6381 0.2006 re +f* +1 g +309.245 415.48 6.2223 0.2006 re +f* +0 g +315.468 415.48 17.2619 0.2006 re +f* +1 g +332.73 415.48 3.2115 0.2006 re +f* +0 g +335.941 415.48 16.0575 0.2006 re +f* +1 g +351.999 415.48 4.8173 0.2006 re +f* +0.498 0 0.482 rg +356.816 415.48 6.8245 0.2006 re +f* +1 g +363.641 415.48 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 415.48 8.4303 0.2006 re +f* +1 g +375.684 415.48 3.2115 0.2006 re +f* +0.498 0 0.482 rg +378.895 415.48 8.8316 0.2006 re +f* +1 g +387.727 415.48 4.0144 0.2006 re +f* +0.498 0 0.482 rg +391.741 415.48 8.0288 0.2006 re +f* +1 g +399.77 415.48 3.4122 0.2006 re +f* +0.498 0 0.482 rg +403.182 415.48 10.2367 0.2006 re +f* +1 g +413.419 415.48 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.422 415.48 3.0108 0.2006 re +f* +0 g +250.435 415.681 20.8749 0.2005 re +f* +1 g +271.31 415.681 7.6273 0.2005 re +f* +0 g +278.937 415.681 16.0575 0.2005 re +f* +1 g +294.994 415.681 3.613 0.2005 re +f* +0 g +298.607 415.681 10.6381 0.2005 re +f* +1 g +309.245 415.681 6.2223 0.2005 re +f* +0 g +315.468 415.681 17.0612 0.2005 re +f* +1 g +332.529 415.681 3.2115 0.2005 re +f* +0 g +335.74 415.681 16.2582 0.2005 re +f* +1 g +351.999 415.681 5.018 0.2005 re +f* +0.498 0 0.482 rg +357.017 415.681 6.6238 0.2005 re +f* +1 g +363.641 415.681 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 415.681 8.4303 0.2005 re +f* +1 g +375.684 415.681 3.2115 0.2005 re +f* +0.498 0 0.482 rg +378.895 415.681 8.8316 0.2005 re +f* +1 g +387.727 415.681 4.0144 0.2005 re +f* +0.498 0 0.482 rg +391.741 415.681 7.828 0.2005 re +f* +1 g +399.569 415.681 3.613 0.2005 re +f* +0.498 0 0.482 rg +403.182 415.681 10.4374 0.2005 re +f* +1 g +413.62 415.681 0.8029 0.2005 re +f* +0.498 0 0.482 rg +414.422 415.681 3.0108 0.2005 re +f* +0 g +250.435 415.881 20.8749 0.2006 re +f* +1 g +271.31 415.881 7.6273 0.2006 re +f* +0 g +278.937 415.881 16.0575 0.2006 re +f* +1 g +294.994 415.881 3.613 0.2006 re +f* +0 g +298.607 415.881 10.6381 0.2006 re +f* +1 g +309.245 415.881 6.2223 0.2006 re +f* +0 g +315.468 415.881 16.8604 0.2006 re +f* +1 g +332.328 415.881 3.4123 0.2006 re +f* +0 g +335.74 415.881 16.2582 0.2006 re +f* +1 g +351.999 415.881 5.018 0.2006 re +f* +0.498 0 0.482 rg +357.017 415.881 6.6238 0.2006 re +f* +1 g +363.641 415.881 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 415.881 8.2295 0.2006 re +f* +1 g +375.483 415.881 3.2116 0.2006 re +f* +0.498 0 0.482 rg +378.695 415.881 9.0323 0.2006 re +f* +1 g +387.727 415.881 4.0144 0.2006 re +f* +0.498 0 0.482 rg +391.741 415.881 7.828 0.2006 re +f* +1 g +399.569 415.881 3.613 0.2006 re +f* +0.498 0 0.482 rg +403.182 415.881 10.4374 0.2006 re +f* +1 g +413.62 415.881 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.623 415.881 2.8101 0.2006 re +f* +0 g +250.435 416.082 20.8749 0.2006 re +f* +1 g +271.31 416.082 7.6273 0.2006 re +f* +0 g +278.937 416.082 16.0575 0.2006 re +f* +1 g +294.994 416.082 3.613 0.2006 re +f* +0 g +298.607 416.082 10.6381 0.2006 re +f* +1 g +309.245 416.082 6.2223 0.2006 re +f* +0 g +315.468 416.082 16.8604 0.2006 re +f* +1 g +332.328 416.082 3.2116 0.2006 re +f* +0 g +335.54 416.082 16.4589 0.2006 re +f* +1 g +351.999 416.082 5.2187 0.2006 re +f* +0.498 0 0.482 rg +357.217 416.082 6.4231 0.2006 re +f* +1 g +363.641 416.082 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 416.082 8.2295 0.2006 re +f* +1 g +375.483 416.082 3.2116 0.2006 re +f* +0.498 0 0.482 rg +378.695 416.082 9.0323 0.2006 re +f* +1 g +387.727 416.082 4.0144 0.2006 re +f* +0.498 0 0.482 rg +391.741 416.082 7.6273 0.2006 re +f* +1 g +399.368 416.082 3.613 0.2006 re +f* +0.498 0 0.482 rg +402.981 416.082 10.6381 0.2006 re +f* +1 g +413.62 416.082 1.0036 0.2006 re +f* +0.498 0 0.482 rg +414.623 416.082 2.8101 0.2006 re +f* +0 g +250.435 416.282 20.8749 0.2005 re +f* +1 g +271.31 416.282 7.6273 0.2005 re +f* +0 g +278.937 416.282 16.0575 0.2005 re +f* +1 g +294.994 416.282 3.613 0.2005 re +f* +0 g +298.607 416.282 10.6381 0.2005 re +f* +1 g +309.245 416.282 6.0216 0.2005 re +f* +0 g +315.267 416.282 16.8604 0.2005 re +f* +1 g +332.127 416.282 3.4123 0.2005 re +f* +0 g +335.54 416.282 16.6597 0.2005 re +f* +1 g +352.2 416.282 5.0179 0.2005 re +f* +0.498 0 0.482 rg +357.217 416.282 6.4231 0.2005 re +f* +1 g +363.641 416.282 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 416.282 8.0288 0.2005 re +f* +1 g +375.282 416.282 3.4123 0.2005 re +f* +0.498 0 0.482 rg +378.695 416.282 9.2331 0.2005 re +f* +1 g +387.928 416.282 3.8136 0.2005 re +f* +0.498 0 0.482 rg +391.741 416.282 7.6273 0.2005 re +f* +1 g +399.368 416.282 3.613 0.2005 re +f* +0.498 0 0.482 rg +402.981 416.282 10.8388 0.2005 re +f* +1 g +413.82 416.282 0.8029 0.2005 re +f* +0.498 0 0.482 rg +414.623 416.282 2.8101 0.2005 re +f* +0 g +250.435 416.483 20.8749 0.2005 re +f* +1 g +271.31 416.483 7.6273 0.2005 re +f* +0 g +278.937 416.483 16.0575 0.2005 re +f* +1 g +294.994 416.483 3.613 0.2005 re +f* +0 g +298.607 416.483 10.6381 0.2005 re +f* +1 g +309.245 416.483 6.0216 0.2005 re +f* +0 g +315.267 416.483 16.6597 0.2005 re +f* +1 g +331.927 416.483 3.613 0.2005 re +f* +0 g +335.54 416.483 16.6597 0.2005 re +f* +1 g +352.2 416.483 5.2187 0.2005 re +f* +0.498 0 0.482 rg +357.418 416.483 6.2223 0.2005 re +f* +1 g +363.641 416.483 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 416.483 8.0288 0.2005 re +f* +1 g +375.282 416.483 3.4123 0.2005 re +f* +0.498 0 0.482 rg +378.695 416.483 9.2331 0.2005 re +f* +1 g +387.928 416.483 3.8136 0.2005 re +f* +0.498 0 0.482 rg +391.741 416.483 7.4266 0.2005 re +f* +1 g +399.168 416.483 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.981 416.483 10.8388 0.2005 re +f* +1 g +413.82 416.483 0.2008 0.2005 re +f* +0.498 0 0.482 rg +414.021 416.483 3.4122 0.2005 re +f* +0 g +250.435 416.683 20.8749 0.2006 re +f* +1 g +271.31 416.683 7.6273 0.2006 re +f* +0 g +278.937 416.683 16.0575 0.2006 re +f* +1 g +294.994 416.683 3.613 0.2006 re +f* +0 g +298.607 416.683 10.6381 0.2006 re +f* +1 g +309.245 416.683 6.0216 0.2006 re +f* +0 g +315.267 416.683 16.6597 0.2006 re +f* +1 g +331.927 416.683 3.4123 0.2006 re +f* +0 g +335.339 416.683 16.8604 0.2006 re +f* +1 g +352.2 416.683 5.2187 0.2006 re +f* +0.498 0 0.482 rg +357.418 416.683 6.2223 0.2006 re +f* +1 g +363.641 416.683 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 416.683 7.8281 0.2006 re +f* +1 g +375.081 416.683 3.613 0.2006 re +f* +0.498 0 0.482 rg +378.695 416.683 9.2331 0.2006 re +f* +1 g +387.928 416.683 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 416.683 7.4266 0.2006 re +f* +1 g +399.168 416.683 3.8137 0.2006 re +f* +0.498 0 0.482 rg +402.981 416.683 14.4518 0.2006 re +f* +0 g +250.234 416.884 21.0756 0.2006 re +f* +1 g +271.31 416.884 7.6273 0.2006 re +f* +0 g +278.937 416.884 16.0575 0.2006 re +f* +1 g +294.994 416.884 3.613 0.2006 re +f* +0 g +298.607 416.884 10.6381 0.2006 re +f* +1 g +309.245 416.884 6.0216 0.2006 re +f* +0 g +315.267 416.884 16.459 0.2006 re +f* +1 g +331.726 416.884 3.613 0.2006 re +f* +0 g +335.339 416.884 16.8604 0.2006 re +f* +1 g +352.2 416.884 5.4194 0.2006 re +f* +0.498 0 0.482 rg +357.619 416.884 6.0216 0.2006 re +f* +1 g +363.641 416.884 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 416.884 7.8281 0.2006 re +f* +1 g +375.081 416.884 3.613 0.2006 re +f* +0.498 0 0.482 rg +378.695 416.884 9.2331 0.2006 re +f* +1 g +387.928 416.884 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 416.884 7.4266 0.2006 re +f* +1 g +399.168 416.884 3.8137 0.2006 re +f* +0.498 0 0.482 rg +402.981 416.884 14.4518 0.2006 re +f* +0 g +250.234 417.085 14.2511 0.2005 re +f* +1 g +264.485 417.085 25.8928 0.2005 re +f* +0 g +290.378 417.085 4.6165 0.2005 re +f* +1 g +294.994 417.085 3.613 0.2005 re +f* +0 g +298.607 417.085 10.6381 0.2005 re +f* +1 g +309.245 417.085 5.8209 0.2005 re +f* +0 g +315.066 417.085 16.6597 0.2005 re +f* +1 g +331.726 417.085 3.613 0.2005 re +f* +0 g +335.339 417.085 17.0611 0.2005 re +f* +1 g +352.4 417.085 5.2187 0.2005 re +f* +0.498 0 0.482 rg +357.619 417.085 6.0216 0.2005 re +f* +1 g +363.641 417.085 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 417.085 7.6274 0.2005 re +f* +1 g +374.881 417.085 3.6129 0.2005 re +f* +0.498 0 0.482 rg +378.494 417.085 9.4339 0.2005 re +f* +1 g +387.928 417.085 3.8136 0.2005 re +f* +0.498 0 0.482 rg +391.741 417.085 7.2259 0.2005 re +f* +1 g +398.967 417.085 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.781 417.085 14.6525 0.2005 re +f* +0 g +250.234 417.285 14.2511 0.2005 re +f* +1 g +264.485 417.285 25.8928 0.2005 re +f* +0 g +290.378 417.285 4.6165 0.2005 re +f* +1 g +294.994 417.285 3.613 0.2005 re +f* +0 g +298.607 417.285 10.6381 0.2005 re +f* +1 g +309.245 417.285 5.8209 0.2005 re +f* +0 g +315.066 417.285 16.459 0.2005 re +f* +1 g +331.525 417.285 3.6129 0.2005 re +f* +0 g +335.138 417.285 17.2619 0.2005 re +f* +1 g +352.4 417.285 5.4194 0.2005 re +f* +0.498 0 0.482 rg +357.82 417.285 5.8209 0.2005 re +f* +1 g +363.641 417.285 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 417.285 7.6274 0.2005 re +f* +1 g +374.881 417.285 3.6129 0.2005 re +f* +0.498 0 0.482 rg +378.494 417.285 9.6345 0.2005 re +f* +1 g +388.128 417.285 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 417.285 7.2259 0.2005 re +f* +1 g +398.967 417.285 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.781 417.285 14.8532 0.2005 re +f* +0 g +250.234 417.486 14.2511 0.2006 re +f* +1 g +264.485 417.486 25.8928 0.2006 re +f* +0 g +290.378 417.486 4.6165 0.2006 re +f* +1 g +294.994 417.486 3.613 0.2006 re +f* +0 g +298.607 417.486 10.6381 0.2006 re +f* +1 g +309.245 417.486 5.8209 0.2006 re +f* +0 g +315.066 417.486 16.459 0.2006 re +f* +1 g +331.525 417.486 3.6129 0.2006 re +f* +0 g +335.138 417.486 17.2619 0.2006 re +f* +1 g +352.4 417.486 5.4194 0.2006 re +f* +0.498 0 0.482 rg +357.82 417.486 5.8209 0.2006 re +f* +1 g +363.641 417.486 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 417.486 7.6274 0.2006 re +f* +1 g +374.881 417.486 3.6129 0.2006 re +f* +0.498 0 0.482 rg +378.494 417.486 9.6345 0.2006 re +f* +1 g +388.128 417.486 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 417.486 7.2259 0.2006 re +f* +1 g +398.967 417.486 3.8137 0.2006 re +f* +0.498 0 0.482 rg +402.781 417.486 14.8532 0.2006 re +f* +0 g +250.234 417.686 14.2511 0.2006 re +f* +1 g +264.485 417.686 25.8928 0.2006 re +f* +0 g +290.378 417.686 4.6165 0.2006 re +f* +1 g +294.994 417.686 3.613 0.2006 re +f* +0 g +298.607 417.686 10.6381 0.2006 re +f* +1 g +309.245 417.686 5.8209 0.2006 re +f* +0 g +315.066 417.686 16.2582 0.2006 re +f* +1 g +331.325 417.686 3.8137 0.2006 re +f* +0 g +335.138 417.686 17.2619 0.2006 re +f* +1 g +352.4 417.686 5.6201 0.2006 re +f* +0.498 0 0.482 rg +358.02 417.686 5.6202 0.2006 re +f* +1 g +363.641 417.686 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 417.686 7.4267 0.2006 re +f* +1 g +374.68 417.686 3.8136 0.2006 re +f* +0.498 0 0.482 rg +378.494 417.686 9.6345 0.2006 re +f* +1 g +388.128 417.686 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 417.686 7.0252 0.2006 re +f* +1 g +398.766 417.686 4.0144 0.2006 re +f* +0.498 0 0.482 rg +402.781 417.686 14.8532 0.2006 re +f* +0 g +250.234 417.887 14.2511 0.2006 re +f* +1 g +264.485 417.887 25.8928 0.2006 re +f* +0 g +290.378 417.887 4.6165 0.2006 re +f* +1 g +294.994 417.887 3.613 0.2006 re +f* +0 g +298.607 417.887 10.6381 0.2006 re +f* +1 g +309.245 417.887 5.6201 0.2006 re +f* +0 g +314.866 417.887 16.459 0.2006 re +f* +1 g +331.325 417.887 3.8137 0.2006 re +f* +0 g +335.138 417.887 17.2619 0.2006 re +f* +1 g +352.4 417.887 5.6201 0.2006 re +f* +0.498 0 0.482 rg +358.02 417.887 5.6202 0.2006 re +f* +1 g +363.641 417.887 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 417.887 7.4267 0.2006 re +f* +1 g +374.68 417.887 3.8136 0.2006 re +f* +0.498 0 0.482 rg +378.494 417.887 9.6345 0.2006 re +f* +1 g +388.128 417.887 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 417.887 7.0252 0.2006 re +f* +1 g +398.766 417.887 4.0144 0.2006 re +f* +0.498 0 0.482 rg +402.781 417.887 14.8532 0.2006 re +f* +0 g +250.234 418.087 14.2511 0.2006 re +f* +1 g +264.485 418.087 25.8928 0.2006 re +f* +0 g +290.378 418.087 4.6165 0.2006 re +f* +1 g +294.994 418.087 3.613 0.2006 re +f* +0 g +298.607 418.087 10.6381 0.2006 re +f* +1 g +309.245 418.087 5.6201 0.2006 re +f* +0 g +314.866 418.087 16.459 0.2006 re +f* +1 g +331.325 418.087 3.8137 0.2006 re +f* +0 g +335.138 418.087 17.4626 0.2006 re +f* +1 g +352.601 418.087 5.6201 0.2006 re +f* +0.498 0 0.482 rg +358.221 418.087 5.4195 0.2006 re +f* +1 g +363.641 418.087 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 418.087 7.4267 0.2006 re +f* +1 g +374.68 418.087 3.8136 0.2006 re +f* +0.498 0 0.482 rg +378.494 418.087 9.6345 0.2006 re +f* +1 g +388.128 418.087 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 418.087 7.0252 0.2006 re +f* +1 g +398.766 418.087 4.0144 0.2006 re +f* +0.498 0 0.482 rg +402.781 418.087 14.8532 0.2006 re +f* +0 g +250.234 418.288 14.2511 0.2005 re +f* +1 g +264.485 418.288 25.8928 0.2005 re +f* +0 g +290.378 418.288 4.6165 0.2005 re +f* +1 g +294.994 418.288 3.613 0.2005 re +f* +0 g +298.607 418.288 10.6381 0.2005 re +f* +1 g +309.245 418.288 5.6201 0.2005 re +f* +0 g +314.866 418.288 16.2583 0.2005 re +f* +1 g +331.124 418.288 4.0144 0.2005 re +f* +0 g +335.138 418.288 17.4626 0.2005 re +f* +1 g +352.601 418.288 5.6201 0.2005 re +f* +0.498 0 0.482 rg +358.221 418.288 5.4195 0.2005 re +f* +1 g +363.641 418.288 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 418.288 7.2259 0.2005 re +f* +1 g +374.479 418.288 4.0144 0.2005 re +f* +0.498 0 0.482 rg +378.494 418.288 9.6345 0.2005 re +f* +1 g +388.128 418.288 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 418.288 7.0252 0.2005 re +f* +1 g +398.766 418.288 4.0144 0.2005 re +f* +0.498 0 0.482 rg +402.781 418.288 14.8532 0.2005 re +f* +0 g +250.234 418.489 14.2511 0.2005 re +f* +1 g +264.485 418.489 25.8928 0.2005 re +f* +0 g +290.378 418.489 4.6165 0.2005 re +f* +1 g +294.994 418.489 3.613 0.2005 re +f* +0 g +298.607 418.489 10.8389 0.2005 re +f* +1 g +309.446 418.489 5.4193 0.2005 re +f* +0 g +314.866 418.489 16.2583 0.2005 re +f* +1 g +331.124 418.489 3.8137 0.2005 re +f* +0 g +334.938 418.489 17.6633 0.2005 re +f* +1 g +352.601 418.489 5.6201 0.2005 re +f* +0.498 0 0.482 rg +358.221 418.489 5.4195 0.2005 re +f* +1 g +363.641 418.489 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 418.489 7.2259 0.2005 re +f* +1 g +374.479 418.489 4.0144 0.2005 re +f* +0.498 0 0.482 rg +378.494 418.489 9.6345 0.2005 re +f* +1 g +388.128 418.489 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 418.489 7.0252 0.2005 re +f* +1 g +398.766 418.489 4.0144 0.2005 re +f* +0.498 0 0.482 rg +402.781 418.489 14.8532 0.2005 re +f* +0 g +250.234 418.689 14.2511 0.2006 re +f* +1 g +264.485 418.689 25.8928 0.2006 re +f* +0 g +290.378 418.689 4.6165 0.2006 re +f* +1 g +294.994 418.689 3.613 0.2006 re +f* +0 g +298.607 418.689 10.8389 0.2006 re +f* +1 g +309.446 418.689 5.4193 0.2006 re +f* +0 g +314.866 418.689 16.2583 0.2006 re +f* +1 g +331.124 418.689 3.8137 0.2006 re +f* +0 g +334.938 418.689 17.6633 0.2006 re +f* +1 g +352.601 418.689 5.8209 0.2006 re +f* +0.498 0 0.482 rg +358.422 418.689 5.2187 0.2006 re +f* +1 g +363.641 418.689 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 418.689 7.2259 0.2006 re +f* +1 g +374.479 418.689 4.0144 0.2006 re +f* +0.498 0 0.482 rg +378.494 418.689 9.6345 0.2006 re +f* +1 g +388.128 418.689 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 418.689 6.8244 0.2006 re +f* +1 g +398.566 418.689 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 418.689 14.8532 0.2006 re +f* +0 g +250.234 418.89 14.2511 0.2006 re +f* +1 g +264.485 418.89 25.8928 0.2006 re +f* +0 g +290.378 418.89 4.6165 0.2006 re +f* +1 g +294.994 418.89 3.613 0.2006 re +f* +0 g +298.607 418.89 10.8389 0.2006 re +f* +1 g +309.446 418.89 5.4193 0.2006 re +f* +0 g +314.866 418.89 16.0576 0.2006 re +f* +1 g +330.923 418.89 4.0144 0.2006 re +f* +0 g +334.938 418.89 17.6633 0.2006 re +f* +1 g +352.601 418.89 5.8209 0.2006 re +f* +0.498 0 0.482 rg +358.422 418.89 5.2187 0.2006 re +f* +1 g +363.641 418.89 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 418.89 7.2259 0.2006 re +f* +1 g +374.479 418.89 4.0144 0.2006 re +f* +0.498 0 0.482 rg +378.494 418.89 9.6345 0.2006 re +f* +1 g +388.128 418.89 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 418.89 6.8244 0.2006 re +f* +1 g +398.566 418.89 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 418.89 14.8532 0.2006 re +f* +0 g +250.234 419.09 14.2511 0.2005 re +f* +1 g +264.485 419.09 25.8928 0.2005 re +f* +0 g +290.378 419.09 4.6165 0.2005 re +f* +1 g +294.994 419.09 3.613 0.2005 re +f* +0 g +298.607 419.09 10.8389 0.2005 re +f* +1 g +309.446 419.09 5.4193 0.2005 re +f* +0 g +314.866 419.09 16.0576 0.2005 re +f* +1 g +330.923 419.09 4.0144 0.2005 re +f* +0 g +334.938 419.09 17.6633 0.2005 re +f* +1 g +352.601 419.09 5.8209 0.2005 re +f* +0.498 0 0.482 rg +358.422 419.09 5.2187 0.2005 re +f* +1 g +363.641 419.09 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 419.09 7.2259 0.2005 re +f* +1 g +374.479 419.09 4.0144 0.2005 re +f* +0.498 0 0.482 rg +378.494 419.09 9.6345 0.2005 re +f* +1 g +388.128 419.09 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 419.09 6.8244 0.2005 re +f* +1 g +398.566 419.09 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 419.09 14.8532 0.2005 re +f* +0 g +250.234 419.291 14.2511 0.2006 re +f* +1 g +264.485 419.291 25.8928 0.2006 re +f* +0 g +290.378 419.291 4.6165 0.2006 re +f* +1 g +294.994 419.291 3.613 0.2006 re +f* +0 g +298.607 419.291 10.8389 0.2006 re +f* +1 g +309.446 419.291 5.4193 0.2006 re +f* +0 g +314.866 419.291 16.0576 0.2006 re +f* +1 g +330.923 419.291 4.0144 0.2006 re +f* +0 g +334.938 419.291 17.6633 0.2006 re +f* +1 g +352.601 419.291 6.0216 0.2006 re +f* +0.498 0 0.482 rg +358.623 419.291 5.018 0.2006 re +f* +1 g +363.641 419.291 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 419.291 7.0252 0.2006 re +f* +1 g +374.279 419.291 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 419.291 9.6345 0.2006 re +f* +1 g +388.128 419.291 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 419.291 6.8244 0.2006 re +f* +1 g +398.566 419.291 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 419.291 14.8532 0.2006 re +f* +0 g +250.234 419.491 14.2511 0.2005 re +f* +1 g +264.485 419.491 25.8928 0.2005 re +f* +0 g +290.378 419.491 4.6165 0.2005 re +f* +1 g +294.994 419.491 3.613 0.2005 re +f* +0 g +298.607 419.491 10.8389 0.2005 re +f* +1 g +309.446 419.491 5.2187 0.2005 re +f* +0 g +314.665 419.491 16.2582 0.2005 re +f* +1 g +330.923 419.491 4.0144 0.2005 re +f* +0 g +334.938 419.491 17.6633 0.2005 re +f* +1 g +352.601 419.491 6.0216 0.2005 re +f* +0.498 0 0.482 rg +358.623 419.491 5.018 0.2005 re +f* +1 g +363.641 419.491 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 419.491 7.0252 0.2005 re +f* +1 g +374.279 419.491 4.2151 0.2005 re +f* +0.498 0 0.482 rg +378.494 419.491 9.6345 0.2005 re +f* +1 g +388.128 419.491 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 419.491 6.8244 0.2005 re +f* +1 g +398.566 419.491 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 419.491 14.8532 0.2005 re +f* +0 g +250.234 419.692 14.2511 0.2006 re +f* +1 g +264.485 419.692 25.8928 0.2006 re +f* +0 g +290.378 419.692 4.6165 0.2006 re +f* +1 g +294.994 419.692 3.613 0.2006 re +f* +0 g +298.607 419.692 10.8389 0.2006 re +f* +1 g +309.446 419.692 5.2187 0.2006 re +f* +0 g +314.665 419.692 16.2582 0.2006 re +f* +1 g +330.923 419.692 4.0144 0.2006 re +f* +0 g +334.938 419.692 17.6633 0.2006 re +f* +1 g +352.601 419.692 6.0216 0.2006 re +f* +0.498 0 0.482 rg +358.623 419.692 5.018 0.2006 re +f* +1 g +363.641 419.692 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 419.692 7.0252 0.2006 re +f* +1 g +374.279 419.692 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 419.692 9.6345 0.2006 re +f* +1 g +388.128 419.692 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 419.692 6.8244 0.2006 re +f* +1 g +398.566 419.692 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 419.692 14.8532 0.2006 re +f* +0 g +250.234 419.892 14.2511 0.2005 re +f* +1 g +264.485 419.892 6.6237 0.2005 re +f* +0 g +271.109 419.892 0.2008 0.2005 re +f* +1 g +271.31 419.892 7.6273 0.2005 re +f* +0 g +278.937 419.892 0.2007 0.2005 re +f* +1 g +279.138 419.892 11.2403 0.2005 re +f* +0 g +290.378 419.892 4.6165 0.2005 re +f* +1 g +294.994 419.892 3.613 0.2005 re +f* +0 g +298.607 419.892 10.8389 0.2005 re +f* +1 g +309.446 419.892 5.2187 0.2005 re +f* +0 g +314.665 419.892 16.0575 0.2005 re +f* +1 g +330.722 419.892 4.2151 0.2005 re +f* +0 g +334.938 419.892 17.6633 0.2005 re +f* +1 g +352.601 419.892 6.2223 0.2005 re +f* +0.498 0 0.482 rg +358.823 419.892 4.8173 0.2005 re +f* +1 g +363.641 419.892 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 419.892 7.0252 0.2005 re +f* +1 g +374.279 419.892 4.2151 0.2005 re +f* +0.498 0 0.482 rg +378.494 419.892 9.6345 0.2005 re +f* +1 g +388.128 419.892 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 419.892 6.8244 0.2005 re +f* +1 g +398.566 419.892 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 419.892 14.8532 0.2005 re +f* +0 g +250.234 420.093 21.0756 0.2006 re +f* +1 g +271.31 420.093 7.6273 0.2006 re +f* +0 g +278.937 420.093 16.0575 0.2006 re +f* +1 g +294.994 420.093 3.613 0.2006 re +f* +0 g +298.607 420.093 11.0396 0.2006 re +f* +1 g +309.647 420.093 5.018 0.2006 re +f* +0 g +314.665 420.093 16.0575 0.2006 re +f* +1 g +330.722 420.093 4.2151 0.2006 re +f* +0 g +334.938 420.093 17.6633 0.2006 re +f* +1 g +352.601 420.093 6.2223 0.2006 re +f* +0.498 0 0.482 rg +358.823 420.093 4.8173 0.2006 re +f* +1 g +363.641 420.093 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 420.093 7.0252 0.2006 re +f* +1 g +374.279 420.093 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 420.093 9.6345 0.2006 re +f* +1 g +388.128 420.093 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 420.093 6.8244 0.2006 re +f* +1 g +398.566 420.093 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 420.093 14.8532 0.2006 re +f* +0 g +250.234 420.294 21.0756 0.2005 re +f* +1 g +271.31 420.294 7.6273 0.2005 re +f* +0 g +278.937 420.294 16.0575 0.2005 re +f* +1 g +294.994 420.294 3.613 0.2005 re +f* +0 g +298.607 420.294 11.0396 0.2005 re +f* +1 g +309.647 420.294 5.018 0.2005 re +f* +0 g +314.665 420.294 16.0575 0.2005 re +f* +1 g +330.722 420.294 4.2151 0.2005 re +f* +0 g +334.938 420.294 17.8641 0.2005 re +f* +1 g +352.802 420.294 6.0215 0.2005 re +f* +0.498 0 0.482 rg +358.823 420.294 4.8173 0.2005 re +f* +1 g +363.641 420.294 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 420.294 7.0252 0.2005 re +f* +1 g +374.279 420.294 4.2151 0.2005 re +f* +0.498 0 0.482 rg +378.494 420.294 9.6345 0.2005 re +f* +1 g +388.128 420.294 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 420.294 6.8244 0.2005 re +f* +1 g +398.566 420.294 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 420.294 14.8532 0.2005 re +f* +0 g +250.234 420.494 21.0756 0.2006 re +f* +1 g +271.31 420.494 7.6273 0.2006 re +f* +0 g +278.937 420.494 16.0575 0.2006 re +f* +1 g +294.994 420.494 3.613 0.2006 re +f* +0 g +298.607 420.494 11.0396 0.2006 re +f* +1 g +309.647 420.494 5.018 0.2006 re +f* +0 g +314.665 420.494 16.0575 0.2006 re +f* +1 g +330.722 420.494 4.2151 0.2006 re +f* +0 g +334.938 420.494 17.8641 0.2006 re +f* +1 g +352.802 420.494 6.0215 0.2006 re +f* +0.498 0 0.482 rg +358.823 420.494 4.8173 0.2006 re +f* +1 g +363.641 420.494 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 420.494 7.0252 0.2006 re +f* +1 g +374.279 420.494 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 420.494 9.6345 0.2006 re +f* +1 g +388.128 420.494 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 420.494 6.8244 0.2006 re +f* +1 g +398.566 420.494 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 420.494 14.8532 0.2006 re +f* +0 g +250.234 420.695 21.0756 0.2006 re +f* +1 g +271.31 420.695 7.6273 0.2006 re +f* +0 g +278.937 420.695 16.0575 0.2006 re +f* +1 g +294.994 420.695 3.613 0.2006 re +f* +0 g +298.607 420.695 11.0396 0.2006 re +f* +1 g +309.647 420.695 5.018 0.2006 re +f* +0 g +314.665 420.695 16.0575 0.2006 re +f* +1 g +330.722 420.695 4.2151 0.2006 re +f* +0 g +334.938 420.695 17.8641 0.2006 re +f* +1 g +352.802 420.695 6.2222 0.2006 re +f* +0.498 0 0.482 rg +359.024 420.695 4.6166 0.2006 re +f* +1 g +363.641 420.695 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 420.695 7.0252 0.2006 re +f* +1 g +374.279 420.695 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 420.695 9.6345 0.2006 re +f* +1 g +388.128 420.695 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 420.695 6.8244 0.2006 re +f* +1 g +398.566 420.695 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 420.695 14.8532 0.2006 re +f* +0 g +250.234 420.895 21.0756 0.2006 re +f* +1 g +271.31 420.895 7.6273 0.2006 re +f* +0 g +278.937 420.895 16.0575 0.2006 re +f* +1 g +294.994 420.895 3.613 0.2006 re +f* +0 g +298.607 420.895 11.0396 0.2006 re +f* +1 g +309.647 420.895 5.018 0.2006 re +f* +0 g +314.665 420.895 16.0575 0.2006 re +f* +1 g +330.722 420.895 4.2151 0.2006 re +f* +0 g +334.938 420.895 17.8641 0.2006 re +f* +1 g +352.802 420.895 6.2222 0.2006 re +f* +0.498 0 0.482 rg +359.024 420.895 4.6166 0.2006 re +f* +1 g +363.641 420.895 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 420.895 7.0252 0.2006 re +f* +1 g +374.279 420.895 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 420.895 9.6345 0.2006 re +f* +1 g +388.128 420.895 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 420.895 6.8244 0.2006 re +f* +1 g +398.566 420.895 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 420.895 14.8532 0.2006 re +f* +0 g +250.234 421.096 21.0756 0.2005 re +f* +1 g +271.31 421.096 7.6273 0.2005 re +f* +0 g +278.937 421.096 16.0575 0.2005 re +f* +1 g +294.994 421.096 3.613 0.2005 re +f* +0 g +298.607 421.096 11.2403 0.2005 re +f* +1 g +309.848 421.096 4.8173 0.2005 re +f* +0 g +314.665 421.096 16.0575 0.2005 re +f* +1 g +330.722 421.096 4.2151 0.2005 re +f* +0 g +334.938 421.096 17.8641 0.2005 re +f* +1 g +352.802 421.096 6.2222 0.2005 re +f* +0.498 0 0.482 rg +359.024 421.096 4.6166 0.2005 re +f* +1 g +363.641 421.096 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 421.096 7.0252 0.2005 re +f* +1 g +374.279 421.096 4.2151 0.2005 re +f* +0.498 0 0.482 rg +378.494 421.096 9.6345 0.2005 re +f* +1 g +388.128 421.096 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 421.096 6.8244 0.2005 re +f* +1 g +398.566 421.096 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 421.096 14.8532 0.2005 re +f* +0 g +250.234 421.296 21.0756 0.2005 re +f* +1 g +271.31 421.296 7.6273 0.2005 re +f* +0 g +278.937 421.296 16.0575 0.2005 re +f* +1 g +294.994 421.296 3.613 0.2005 re +f* +0 g +298.607 421.296 11.2403 0.2005 re +f* +1 g +309.848 421.296 4.8173 0.2005 re +f* +0 g +314.665 421.296 16.0575 0.2005 re +f* +1 g +330.722 421.296 4.2151 0.2005 re +f* +0 g +334.938 421.296 17.6633 0.2005 re +f* +1 g +352.601 421.296 6.423 0.2005 re +f* +0.498 0 0.482 rg +359.024 421.296 4.6166 0.2005 re +f* +1 g +363.641 421.296 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 421.296 7.0252 0.2005 re +f* +1 g +374.279 421.296 4.2151 0.2005 re +f* +0.498 0 0.482 rg +378.494 421.296 9.6345 0.2005 re +f* +1 g +388.128 421.296 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 421.296 6.8244 0.2005 re +f* +1 g +398.566 421.296 4.2152 0.2005 re +f* +0.498 0 0.482 rg +402.781 421.296 14.8532 0.2005 re +f* +0 g +250.234 421.497 21.0756 0.2006 re +f* +1 g +271.31 421.497 7.6273 0.2006 re +f* +0 g +278.937 421.497 16.0575 0.2006 re +f* +1 g +294.994 421.497 3.613 0.2006 re +f* +0 g +298.607 421.497 11.2403 0.2006 re +f* +1 g +309.848 421.497 4.8173 0.2006 re +f* +0 g +314.665 421.497 16.0575 0.2006 re +f* +1 g +330.722 421.497 4.2151 0.2006 re +f* +0 g +334.938 421.497 17.6633 0.2006 re +f* +1 g +352.601 421.497 6.6237 0.2006 re +f* +0.498 0 0.482 rg +359.225 421.497 4.4159 0.2006 re +f* +1 g +363.641 421.497 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 421.497 7.0252 0.2006 re +f* +1 g +374.279 421.497 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 421.497 9.6345 0.2006 re +f* +1 g +388.128 421.497 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 421.497 6.8244 0.2006 re +f* +1 g +398.566 421.497 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 421.497 14.8532 0.2006 re +f* +0 g +250.234 421.697 21.0756 0.2006 re +f* +1 g +271.31 421.697 7.6273 0.2006 re +f* +0 g +278.937 421.697 16.0575 0.2006 re +f* +1 g +294.994 421.697 3.613 0.2006 re +f* +0 g +298.607 421.697 11.2403 0.2006 re +f* +1 g +309.848 421.697 4.8173 0.2006 re +f* +0 g +314.665 421.697 16.0575 0.2006 re +f* +1 g +330.722 421.697 4.2151 0.2006 re +f* +0 g +334.938 421.697 17.6633 0.2006 re +f* +1 g +352.601 421.697 6.6237 0.2006 re +f* +0.498 0 0.482 rg +359.225 421.697 4.4159 0.2006 re +f* +1 g +363.641 421.697 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 421.697 7.0252 0.2006 re +f* +1 g +374.279 421.697 4.2151 0.2006 re +f* +0.498 0 0.482 rg +378.494 421.697 9.6345 0.2006 re +f* +1 g +388.128 421.697 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 421.697 6.8244 0.2006 re +f* +1 g +398.566 421.697 4.2152 0.2006 re +f* +0.498 0 0.482 rg +402.781 421.697 12.0431 0.2006 re +f* +1 g +414.824 421.697 0.2008 0.2006 re +f* +0.498 0 0.482 rg +415.025 421.697 2.6093 0.2006 re +f* +0 g +250.234 421.898 21.0756 0.2005 re +f* +1 g +271.31 421.898 7.6273 0.2005 re +f* +0 g +278.937 421.898 16.0575 0.2005 re +f* +1 g +294.994 421.898 3.613 0.2005 re +f* +0 g +298.607 421.898 11.441 0.2005 re +f* +1 g +310.048 421.898 4.6166 0.2005 re +f* +0 g +314.665 421.898 16.0575 0.2005 re +f* +1 g +330.722 421.898 4.2151 0.2005 re +f* +0 g +334.938 421.898 17.6633 0.2005 re +f* +1 g +352.601 421.898 6.6237 0.2005 re +f* +0.498 0 0.482 rg +359.225 421.898 4.4159 0.2005 re +f* +1 g +363.641 421.898 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 421.898 7.2259 0.2005 re +f* +1 g +374.479 421.898 4.0144 0.2005 re +f* +0.498 0 0.482 rg +378.494 421.898 9.6345 0.2005 re +f* +1 g +388.128 421.898 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 421.898 6.8244 0.2005 re +f* +1 g +398.566 421.898 16.4591 0.2005 re +f* +0.498 0 0.482 rg +415.025 421.898 2.6093 0.2005 re +f* +0 g +250.234 422.099 21.0756 0.2006 re +f* +1 g +271.31 422.099 7.6273 0.2006 re +f* +0 g +278.937 422.099 16.0575 0.2006 re +f* +1 g +294.994 422.099 3.613 0.2006 re +f* +0 g +298.607 422.099 11.441 0.2006 re +f* +1 g +310.048 422.099 4.6166 0.2006 re +f* +0 g +314.665 422.099 16.0575 0.2006 re +f* +1 g +330.722 422.099 4.2151 0.2006 re +f* +0 g +334.938 422.099 17.6633 0.2006 re +f* +1 g +352.601 422.099 6.6237 0.2006 re +f* +0.498 0 0.482 rg +359.225 422.099 4.4159 0.2006 re +f* +1 g +363.641 422.099 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 422.099 7.2259 0.2006 re +f* +1 g +374.479 422.099 4.0144 0.2006 re +f* +0.498 0 0.482 rg +378.494 422.099 9.6345 0.2006 re +f* +1 g +388.128 422.099 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 422.099 7.0252 0.2006 re +f* +1 g +398.766 422.099 16.2583 0.2006 re +f* +0.498 0 0.482 rg +415.025 422.099 2.6093 0.2006 re +f* +0 g +250.234 422.299 21.0756 0.2005 re +f* +1 g +271.31 422.299 7.6273 0.2005 re +f* +0 g +278.937 422.299 16.0575 0.2005 re +f* +1 g +294.994 422.299 3.613 0.2005 re +f* +0 g +298.607 422.299 11.441 0.2005 re +f* +1 g +310.048 422.299 4.6166 0.2005 re +f* +0 g +314.665 422.299 16.0575 0.2005 re +f* +1 g +330.722 422.299 4.2151 0.2005 re +f* +0 g +334.938 422.299 17.6633 0.2005 re +f* +1 g +352.601 422.299 6.8245 0.2005 re +f* +0.498 0 0.482 rg +359.425 422.299 4.2151 0.2005 re +f* +1 g +363.641 422.299 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 422.299 7.2259 0.2005 re +f* +1 g +374.479 422.299 4.0144 0.2005 re +f* +0.498 0 0.482 rg +378.494 422.299 9.6345 0.2005 re +f* +1 g +388.128 422.299 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 422.299 7.0252 0.2005 re +f* +1 g +398.766 422.299 16.2583 0.2005 re +f* +0.498 0 0.482 rg +415.025 422.299 2.4086 0.2005 re +f* +0 g +250.234 422.5 21.0756 0.2006 re +f* +1 g +271.31 422.5 7.6273 0.2006 re +f* +0 g +278.937 422.5 16.0575 0.2006 re +f* +1 g +294.994 422.5 3.613 0.2006 re +f* +0 g +298.607 422.5 11.441 0.2006 re +f* +1 g +310.048 422.5 4.6166 0.2006 re +f* +0 g +314.665 422.5 16.0575 0.2006 re +f* +1 g +330.722 422.5 4.2151 0.2006 re +f* +0 g +334.938 422.5 17.6633 0.2006 re +f* +1 g +352.601 422.5 6.8245 0.2006 re +f* +0.498 0 0.482 rg +359.425 422.5 4.2151 0.2006 re +f* +1 g +363.641 422.5 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 422.5 7.2259 0.2006 re +f* +1 g +374.479 422.5 4.0144 0.2006 re +f* +0.498 0 0.482 rg +378.494 422.5 9.6345 0.2006 re +f* +1 g +388.128 422.5 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 422.5 7.0252 0.2006 re +f* +1 g +398.766 422.5 4.0144 0.2006 re +f* +0.498 0 0.482 rg +402.781 422.5 8.0287 0.2006 re +f* +1 g +410.81 422.5 4.2152 0.2006 re +f* +0.498 0 0.482 rg +415.025 422.5 2.4086 0.2006 re +f* +0 g +250.234 422.7 21.0756 0.2006 re +f* +1 g +271.31 422.7 7.6273 0.2006 re +f* +0 g +278.937 422.7 16.0575 0.2006 re +f* +1 g +294.994 422.7 3.613 0.2006 re +f* +0 g +298.607 422.7 11.6417 0.2006 re +f* +1 g +310.249 422.7 4.4159 0.2006 re +f* +0 g +314.665 422.7 16.0575 0.2006 re +f* +1 g +330.722 422.7 4.2151 0.2006 re +f* +0 g +334.938 422.7 17.6633 0.2006 re +f* +1 g +352.601 422.7 6.8245 0.2006 re +f* +0.498 0 0.482 rg +359.425 422.7 4.2151 0.2006 re +f* +1 g +363.641 422.7 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 422.7 7.2259 0.2006 re +f* +1 g +374.479 422.7 4.0144 0.2006 re +f* +0.498 0 0.482 rg +378.494 422.7 9.6345 0.2006 re +f* +1 g +388.128 422.7 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 422.7 7.0252 0.2006 re +f* +1 g +398.766 422.7 4.0144 0.2006 re +f* +0.498 0 0.482 rg +402.781 422.7 8.0287 0.2006 re +f* +1 g +410.81 422.7 4.2152 0.2006 re +f* +0.498 0 0.482 rg +415.025 422.7 2.4086 0.2006 re +f* +0 g +250.435 422.901 20.8749 0.2005 re +f* +1 g +271.31 422.901 7.6273 0.2005 re +f* +0 g +278.937 422.901 16.0575 0.2005 re +f* +1 g +294.994 422.901 3.613 0.2005 re +f* +0 g +298.607 422.901 11.6417 0.2005 re +f* +1 g +310.249 422.901 16.6597 0.2005 re +f* +0 g +326.909 422.901 4.0144 0.2005 re +f* +1 g +330.923 422.901 4.0144 0.2005 re +f* +0 g +334.938 422.901 12.0431 0.2005 re +f* +1 g +346.981 422.901 0.2008 0.2005 re +f* +0 g +347.181 422.901 5.4194 0.2005 re +f* +1 g +352.601 422.901 6.8245 0.2005 re +f* +0.498 0 0.482 rg +359.425 422.901 4.2151 0.2005 re +f* +1 g +363.641 422.901 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 422.901 7.4267 0.2005 re +f* +1 g +374.68 422.901 3.8136 0.2005 re +f* +0.498 0 0.482 rg +378.494 422.901 9.6345 0.2005 re +f* +1 g +388.128 422.901 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 422.901 7.2259 0.2005 re +f* +1 g +398.967 422.901 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.781 422.901 8.0287 0.2005 re +f* +1 g +410.81 422.901 4.2152 0.2005 re +f* +0.498 0 0.482 rg +415.025 422.901 2.4086 0.2005 re +f* +0 g +250.435 423.101 20.8749 0.2006 re +f* +1 g +271.31 423.101 7.6273 0.2006 re +f* +0 g +278.937 423.101 16.0575 0.2006 re +f* +1 g +294.994 423.101 3.613 0.2006 re +f* +0 g +298.607 423.101 11.6417 0.2006 re +f* +1 g +310.249 423.101 16.6597 0.2006 re +f* +0 g +326.909 423.101 4.0144 0.2006 re +f* +1 g +330.923 423.101 16.2583 0.2006 re +f* +0 g +347.181 423.101 5.4194 0.2006 re +f* +1 g +352.601 423.101 6.8245 0.2006 re +f* +0.498 0 0.482 rg +359.425 423.101 4.2151 0.2006 re +f* +1 g +363.641 423.101 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 423.101 7.4267 0.2006 re +f* +1 g +374.68 423.101 3.8136 0.2006 re +f* +0.498 0 0.482 rg +378.494 423.101 9.6345 0.2006 re +f* +1 g +388.128 423.101 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 423.101 7.2259 0.2006 re +f* +1 g +398.967 423.101 3.8137 0.2006 re +f* +0.498 0 0.482 rg +402.781 423.101 8.0287 0.2006 re +f* +1 g +410.81 423.101 4.0144 0.2006 re +f* +0.498 0 0.482 rg +414.824 423.101 2.6094 0.2006 re +f* +0 g +250.435 423.302 20.8749 0.2005 re +f* +1 g +271.31 423.302 7.6273 0.2005 re +f* +0 g +278.937 423.302 16.0575 0.2005 re +f* +1 g +294.994 423.302 3.613 0.2005 re +f* +0 g +298.607 423.302 11.8425 0.2005 re +f* +1 g +310.45 423.302 4.2151 0.2005 re +f* +0 g +314.665 423.302 8.4302 0.2005 re +f* +1 g +323.095 423.302 3.8136 0.2005 re +f* +0 g +326.909 423.302 4.0144 0.2005 re +f* +1 g +330.923 423.302 16.2583 0.2005 re +f* +0 g +347.181 423.302 5.4194 0.2005 re +f* +1 g +352.601 423.302 6.8245 0.2005 re +f* +0.498 0 0.482 rg +359.425 423.302 4.2151 0.2005 re +f* +1 g +363.641 423.302 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 423.302 7.4267 0.2005 re +f* +1 g +374.68 423.302 3.8136 0.2005 re +f* +0.498 0 0.482 rg +378.494 423.302 9.6345 0.2005 re +f* +1 g +388.128 423.302 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 423.302 7.2259 0.2005 re +f* +1 g +398.967 423.302 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.781 423.302 8.0287 0.2005 re +f* +1 g +410.81 423.302 4.0144 0.2005 re +f* +0.498 0 0.482 rg +414.824 423.302 2.6094 0.2005 re +f* +0 g +250.435 423.502 20.8749 0.2006 re +f* +1 g +271.31 423.502 7.6273 0.2006 re +f* +0 g +278.937 423.502 16.0575 0.2006 re +f* +1 g +294.994 423.502 3.613 0.2006 re +f* +0 g +298.607 423.502 11.8425 0.2006 re +f* +1 g +310.45 423.502 4.4157 0.2006 re +f* +0 g +314.866 423.502 8.2296 0.2006 re +f* +1 g +323.095 423.502 3.8136 0.2006 re +f* +0 g +326.909 423.502 4.0144 0.2006 re +f* +1 g +330.923 423.502 16.2583 0.2006 re +f* +0 g +347.181 423.502 5.2187 0.2006 re +f* +1 g +352.4 423.502 7.0252 0.2006 re +f* +0.498 0 0.482 rg +359.425 423.502 4.2151 0.2006 re +f* +1 g +363.641 423.502 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 423.502 7.4267 0.2006 re +f* +1 g +374.68 423.502 3.8136 0.2006 re +f* +0.498 0 0.482 rg +378.494 423.502 9.6345 0.2006 re +f* +1 g +388.128 423.502 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 423.502 7.4266 0.2006 re +f* +1 g +399.168 423.502 3.613 0.2006 re +f* +0.498 0 0.482 rg +402.781 423.502 8.0287 0.2006 re +f* +1 g +410.81 423.502 4.0144 0.2006 re +f* +0.498 0 0.482 rg +414.824 423.502 2.6094 0.2006 re +f* +0 g +250.435 423.703 20.8749 0.2006 re +f* +1 g +271.31 423.703 7.6273 0.2006 re +f* +0 g +278.937 423.703 16.0575 0.2006 re +f* +1 g +294.994 423.703 3.613 0.2006 re +f* +0 g +298.607 423.703 12.0432 0.2006 re +f* +1 g +310.651 423.703 4.215 0.2006 re +f* +0 g +314.866 423.703 8.2296 0.2006 re +f* +1 g +323.095 423.703 3.8136 0.2006 re +f* +0 g +326.909 423.703 4.0144 0.2006 re +f* +1 g +330.923 423.703 4.0144 0.2006 re +f* +0 g +334.938 423.703 8.0288 0.2006 re +f* +1 g +342.966 423.703 4.2151 0.2006 re +f* +0 g +347.181 423.703 5.2187 0.2006 re +f* +1 g +352.4 423.703 7.2259 0.2006 re +f* +0.498 0 0.482 rg +359.626 423.703 4.0144 0.2006 re +f* +1 g +363.641 423.703 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 423.703 7.6274 0.2006 re +f* +1 g +374.881 423.703 3.8137 0.2006 re +f* +0.498 0 0.482 rg +378.695 423.703 9.2331 0.2006 re +f* +1 g +387.928 423.703 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 423.703 7.4266 0.2006 re +f* +1 g +399.168 423.703 3.8137 0.2006 re +f* +0.498 0 0.482 rg +402.981 423.703 7.828 0.2006 re +f* +1 g +410.81 423.703 4.0144 0.2006 re +f* +0.498 0 0.482 rg +414.824 423.703 2.6094 0.2006 re +f* +0 g +250.435 423.904 20.8749 0.2005 re +f* +1 g +271.31 423.904 7.6273 0.2005 re +f* +0 g +278.937 423.904 16.0575 0.2005 re +f* +1 g +294.994 423.904 3.8137 0.2005 re +f* +0 g +298.808 423.904 11.8425 0.2005 re +f* +1 g +310.651 423.904 4.215 0.2005 re +f* +0 g +314.866 423.904 8.2296 0.2005 re +f* +1 g +323.095 423.904 3.8136 0.2005 re +f* +0 g +326.909 423.904 4.2151 0.2005 re +f* +1 g +331.124 423.904 3.8137 0.2005 re +f* +0 g +334.938 423.904 8.0288 0.2005 re +f* +1 g +342.966 423.904 4.2151 0.2005 re +f* +0 g +347.181 423.904 5.2187 0.2005 re +f* +1 g +352.4 423.904 7.2259 0.2005 re +f* +0.498 0 0.482 rg +359.626 423.904 4.0144 0.2005 re +f* +1 g +363.641 423.904 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 423.904 7.6274 0.2005 re +f* +1 g +374.881 423.904 3.8137 0.2005 re +f* +0.498 0 0.482 rg +378.695 423.904 9.2331 0.2005 re +f* +1 g +387.928 423.904 3.8136 0.2005 re +f* +0.498 0 0.482 rg +391.741 423.904 7.4266 0.2005 re +f* +1 g +399.168 423.904 3.8137 0.2005 re +f* +0.498 0 0.482 rg +402.981 423.904 7.828 0.2005 re +f* +1 g +410.81 423.904 4.0144 0.2005 re +f* +0.498 0 0.482 rg +414.824 423.904 2.6094 0.2005 re +f* +0 g +250.435 424.104 20.8749 0.2006 re +f* +1 g +271.31 424.104 7.6273 0.2006 re +f* +0 g +278.937 424.104 16.0575 0.2006 re +f* +1 g +294.994 424.104 3.8137 0.2006 re +f* +0 g +298.808 424.104 11.8425 0.2006 re +f* +1 g +310.651 424.104 4.215 0.2006 re +f* +0 g +314.866 424.104 8.4303 0.2006 re +f* +1 g +323.296 424.104 3.6129 0.2006 re +f* +0 g +326.909 424.104 4.2151 0.2006 re +f* +1 g +331.124 424.104 3.8137 0.2006 re +f* +0 g +334.938 424.104 8.0288 0.2006 re +f* +1 g +342.966 424.104 4.2151 0.2006 re +f* +0 g +347.181 424.104 5.2187 0.2006 re +f* +1 g +352.4 424.104 7.2259 0.2006 re +f* +0.498 0 0.482 rg +359.626 424.104 4.0144 0.2006 re +f* +1 g +363.641 424.104 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 424.104 7.8281 0.2006 re +f* +1 g +375.081 424.104 3.613 0.2006 re +f* +0.498 0 0.482 rg +378.695 424.104 9.2331 0.2006 re +f* +1 g +387.928 424.104 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 424.104 7.6273 0.2006 re +f* +1 g +399.368 424.104 3.613 0.2006 re +f* +0.498 0 0.482 rg +402.981 424.104 7.828 0.2006 re +f* +1 g +410.81 424.104 3.8137 0.2006 re +f* +0.498 0 0.482 rg +414.623 424.104 2.8101 0.2006 re +f* +0 g +250.435 424.305 20.8749 0.2005 re +f* +1 g +271.31 424.305 7.6273 0.2005 re +f* +0 g +278.937 424.305 16.0575 0.2005 re +f* +1 g +294.994 424.305 3.8137 0.2005 re +f* +0 g +298.808 424.305 12.0432 0.2005 re +f* +1 g +310.851 424.305 4.0143 0.2005 re +f* +0 g +314.866 424.305 8.4303 0.2005 re +f* +1 g +323.296 424.305 3.6129 0.2005 re +f* +0 g +326.909 424.305 4.2151 0.2005 re +f* +1 g +331.124 424.305 4.0144 0.2005 re +f* +0 g +335.138 424.305 7.8281 0.2005 re +f* +1 g +342.966 424.305 4.2151 0.2005 re +f* +0 g +347.181 424.305 5.2187 0.2005 re +f* +1 g +352.4 424.305 7.2259 0.2005 re +f* +0.498 0 0.482 rg +359.626 424.305 4.0144 0.2005 re +f* +1 g +363.641 424.305 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 424.305 7.8281 0.2005 re +f* +1 g +375.081 424.305 3.613 0.2005 re +f* +0.498 0 0.482 rg +378.695 424.305 9.2331 0.2005 re +f* +1 g +387.928 424.305 3.8136 0.2005 re +f* +0.498 0 0.482 rg +391.741 424.305 7.6273 0.2005 re +f* +1 g +399.368 424.305 3.613 0.2005 re +f* +0.498 0 0.482 rg +402.981 424.305 7.828 0.2005 re +f* +1 g +410.81 424.305 3.8137 0.2005 re +f* +0.498 0 0.482 rg +414.623 424.305 2.6093 0.2005 re +f* +0 g +250.435 424.505 20.8749 0.2006 re +f* +1 g +271.31 424.505 7.6273 0.2006 re +f* +0 g +278.937 424.505 16.0575 0.2006 re +f* +1 g +294.994 424.505 3.8137 0.2006 re +f* +0 g +298.808 424.505 12.0432 0.2006 re +f* +1 g +310.851 424.505 4.0143 0.2006 re +f* +0 g +314.866 424.505 8.4303 0.2006 re +f* +1 g +323.296 424.505 3.6129 0.2006 re +f* +0 g +326.909 424.505 4.4158 0.2006 re +f* +1 g +331.325 424.505 3.8137 0.2006 re +f* +0 g +335.138 424.505 7.8281 0.2006 re +f* +1 g +342.966 424.505 4.0143 0.2006 re +f* +0 g +346.981 424.505 5.2188 0.2006 re +f* +1 g +352.2 424.505 7.4266 0.2006 re +f* +0.498 0 0.482 rg +359.626 424.505 4.0144 0.2006 re +f* +1 g +363.641 424.505 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 424.505 8.0288 0.2006 re +f* +1 g +375.282 424.505 3.4123 0.2006 re +f* +0.498 0 0.482 rg +378.695 424.505 9.2331 0.2006 re +f* +1 g +387.928 424.505 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 424.505 7.828 0.2006 re +f* +1 g +399.569 424.505 3.4123 0.2006 re +f* +0.498 0 0.482 rg +402.981 424.505 7.828 0.2006 re +f* +1 g +410.81 424.505 3.8137 0.2006 re +f* +0.498 0 0.482 rg +414.623 424.505 2.6093 0.2006 re +f* +0 g +250.635 424.706 20.6741 0.2006 re +f* +1 g +271.31 424.706 7.6273 0.2006 re +f* +0 g +278.937 424.706 16.0575 0.2006 re +f* +1 g +294.994 424.706 3.8137 0.2006 re +f* +0 g +298.808 424.706 12.2439 0.2006 re +f* +1 g +311.052 424.706 3.8136 0.2006 re +f* +0 g +314.866 424.706 8.4303 0.2006 re +f* +1 g +323.296 424.706 3.4122 0.2006 re +f* +0 g +326.708 424.706 4.6165 0.2006 re +f* +1 g +331.325 424.706 3.8137 0.2006 re +f* +0 g +335.138 424.706 7.8281 0.2006 re +f* +1 g +342.966 424.706 4.0143 0.2006 re +f* +0 g +346.981 424.706 5.2188 0.2006 re +f* +1 g +352.2 424.706 7.4266 0.2006 re +f* +0.498 0 0.482 rg +359.626 424.706 4.0144 0.2006 re +f* +1 g +363.641 424.706 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 424.706 8.0288 0.2006 re +f* +1 g +375.282 424.706 3.4123 0.2006 re +f* +0.498 0 0.482 rg +378.695 424.706 9.2331 0.2006 re +f* +1 g +387.928 424.706 3.8136 0.2006 re +f* +0.498 0 0.482 rg +391.741 424.706 7.828 0.2006 re +f* +1 g +399.569 424.706 3.4123 0.2006 re +f* +0.498 0 0.482 rg +402.981 424.706 7.828 0.2006 re +f* +1 g +410.81 424.706 3.8137 0.2006 re +f* +0.498 0 0.482 rg +414.623 424.706 2.6093 0.2006 re +f* +0 g +250.635 424.906 20.6741 0.2005 re +f* +1 g +271.31 424.906 7.6273 0.2005 re +f* +0 g +278.937 424.906 16.0575 0.2005 re +f* +1 g +294.994 424.906 3.8137 0.2005 re +f* +0 g +298.808 424.906 12.2439 0.2005 re +f* +1 g +311.052 424.906 3.8136 0.2005 re +f* +0 g +314.866 424.906 8.4303 0.2005 re +f* +1 g +323.296 424.906 3.4122 0.2005 re +f* +0 g +326.708 424.906 4.6165 0.2005 re +f* +1 g +331.325 424.906 3.8137 0.2005 re +f* +0 g +335.138 424.906 7.8281 0.2005 re +f* +1 g +342.966 424.906 4.0143 0.2005 re +f* +0 g +346.981 424.906 5.2188 0.2005 re +f* +1 g +352.2 424.906 7.4266 0.2005 re +f* +0.498 0 0.482 rg +359.626 424.906 4.0144 0.2005 re +f* +1 g +363.641 424.906 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 424.906 8.2295 0.2005 re +f* +1 g +375.483 424.906 3.2116 0.2005 re +f* +0.498 0 0.482 rg +378.695 424.906 9.0323 0.2005 re +f* +1 g +387.727 424.906 4.0144 0.2005 re +f* +0.498 0 0.482 rg +391.741 424.906 8.0288 0.2005 re +f* +1 g +399.77 424.906 3.4122 0.2005 re +f* +0.498 0 0.482 rg +403.182 424.906 7.6273 0.2005 re +f* +1 g +410.81 424.906 3.613 0.2005 re +f* +0.498 0 0.482 rg +414.422 424.906 2.81 0.2005 re +f* +0 g +250.635 425.107 20.8748 0.2006 re +f* +1 g +271.51 425.107 7.4266 0.2006 re +f* +0 g +278.937 425.107 16.0575 0.2006 re +f* +1 g +294.994 425.107 4.0144 0.2006 re +f* +0 g +299.009 425.107 5.2187 0.2006 re +f* +1 g +304.227 425.107 2.208 0.2006 re +f* +0 g +306.435 425.107 4.8172 0.2006 re +f* +1 g +311.253 425.107 3.6129 0.2006 re +f* +0 g +314.866 425.107 8.4303 0.2006 re +f* +1 g +323.296 425.107 3.4122 0.2006 re +f* +0 g +326.708 425.107 4.8173 0.2006 re +f* +1 g +331.525 425.107 3.6129 0.2006 re +f* +0 g +335.138 425.107 7.8281 0.2006 re +f* +1 g +342.966 425.107 4.0143 0.2006 re +f* +0 g +346.981 425.107 5.018 0.2006 re +f* +1 g +351.999 425.107 7.6274 0.2006 re +f* +0.498 0 0.482 rg +359.626 425.107 4.0144 0.2006 re +f* +1 g +363.641 425.107 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 425.107 8.2295 0.2006 re +f* +1 g +375.483 425.107 3.4123 0.2006 re +f* +0.498 0 0.482 rg +378.895 425.107 8.8316 0.2006 re +f* +1 g +387.727 425.107 4.0144 0.2006 re +f* +0.498 0 0.482 rg +391.741 425.107 8.2295 0.2006 re +f* +1 g +399.971 425.107 3.2115 0.2006 re +f* +0.498 0 0.482 rg +403.182 425.107 7.6273 0.2006 re +f* +1 g +410.81 425.107 3.613 0.2006 re +f* +0.498 0 0.482 rg +414.422 425.107 2.81 0.2006 re +f* +0 g +250.635 425.308 20.8748 0.2005 re +f* +1 g +271.51 425.308 7.4266 0.2005 re +f* +0 g +278.937 425.308 16.0575 0.2005 re +f* +1 g +294.994 425.308 4.0144 0.2005 re +f* +0 g +299.009 425.308 4.8173 0.2005 re +f* +1 g +303.826 425.308 3.0108 0.2005 re +f* +0 g +306.837 425.308 4.4158 0.2005 re +f* +1 g +311.253 425.308 3.8137 0.2005 re +f* +0 g +315.066 425.308 8.2295 0.2005 re +f* +1 g +323.296 425.308 3.4122 0.2005 re +f* +0 g +326.708 425.308 4.8173 0.2005 re +f* +1 g +331.525 425.308 3.6129 0.2005 re +f* +0 g +335.138 425.308 7.8281 0.2005 re +f* +1 g +342.966 425.308 4.0143 0.2005 re +f* +0 g +346.981 425.308 5.018 0.2005 re +f* +1 g +351.999 425.308 7.6274 0.2005 re +f* +0.498 0 0.482 rg +359.626 425.308 4.0144 0.2005 re +f* +1 g +363.641 425.308 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 425.308 8.4303 0.2005 re +f* +1 g +375.684 425.308 3.2115 0.2005 re +f* +0.498 0 0.482 rg +378.895 425.308 8.8316 0.2005 re +f* +1 g +387.727 425.308 4.0144 0.2005 re +f* +0.498 0 0.482 rg +391.741 425.308 8.2295 0.2005 re +f* +1 g +399.971 425.308 3.2115 0.2005 re +f* +0.498 0 0.482 rg +403.182 425.308 7.6273 0.2005 re +f* +1 g +410.81 425.308 3.4122 0.2005 re +f* +0.498 0 0.482 rg +414.222 425.308 3.0108 0.2005 re +f* +0 g +250.635 425.508 20.8748 0.2006 re +f* +1 g +271.51 425.508 7.4266 0.2006 re +f* +0 g +278.937 425.508 16.0575 0.2006 re +f* +1 g +294.994 425.508 4.0144 0.2006 re +f* +0 g +299.009 425.508 4.6166 0.2006 re +f* +1 g +303.625 425.508 3.4122 0.2006 re +f* +0 g +307.038 425.508 4.4158 0.2006 re +f* +1 g +311.453 425.508 3.613 0.2006 re +f* +0 g +315.066 425.508 8.2295 0.2006 re +f* +1 g +323.296 425.508 3.2115 0.2006 re +f* +0 g +326.507 425.508 5.2187 0.2006 re +f* +1 g +331.726 425.508 3.4122 0.2006 re +f* +0 g +335.138 425.508 7.8281 0.2006 re +f* +1 g +342.966 425.508 3.8137 0.2006 re +f* +0 g +346.78 425.508 5.2186 0.2006 re +f* +1 g +351.999 425.508 7.6274 0.2006 re +f* +0.498 0 0.482 rg +359.626 425.508 4.0144 0.2006 re +f* +1 g +363.641 425.508 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 425.508 8.4303 0.2006 re +f* +1 g +375.684 425.508 3.2115 0.2006 re +f* +0.498 0 0.482 rg +378.895 425.508 8.6309 0.2006 re +f* +1 g +387.526 425.508 4.2151 0.2006 re +f* +0.498 0 0.482 rg +391.741 425.508 8.4302 0.2006 re +f* +1 g +400.171 425.508 3.2115 0.2006 re +f* +0.498 0 0.482 rg +403.383 425.508 7.4266 0.2006 re +f* +1 g +410.81 425.508 3.4122 0.2006 re +f* +0.498 0 0.482 rg +414.222 425.508 2.8102 0.2006 re +f* +0 g +250.635 425.709 20.8748 0.2005 re +f* +1 g +271.51 425.709 7.4266 0.2005 re +f* +0 g +278.937 425.709 16.0575 0.2005 re +f* +1 g +294.994 425.709 4.2151 0.2005 re +f* +0 g +299.209 425.709 4.4159 0.2005 re +f* +1 g +303.625 425.709 3.6129 0.2005 re +f* +0 g +307.238 425.709 4.4159 0.2005 re +f* +1 g +311.654 425.709 3.4122 0.2005 re +f* +0 g +315.066 425.709 8.0288 0.2005 re +f* +1 g +323.095 425.709 3.4122 0.2005 re +f* +0 g +326.507 425.709 5.2187 0.2005 re +f* +1 g +331.726 425.709 3.613 0.2005 re +f* +0 g +335.339 425.709 7.6273 0.2005 re +f* +1 g +342.966 425.709 3.8137 0.2005 re +f* +0 g +346.78 425.709 5.018 0.2005 re +f* +1 g +351.798 425.709 7.828 0.2005 re +f* +0.498 0 0.482 rg +359.626 425.709 4.0144 0.2005 re +f* +1 g +363.641 425.709 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 425.709 8.631 0.2005 re +f* +1 g +375.884 425.709 3.0108 0.2005 re +f* +0.498 0 0.482 rg +378.895 425.709 8.6309 0.2005 re +f* +1 g +387.526 425.709 4.2151 0.2005 re +f* +0.498 0 0.482 rg +391.741 425.709 8.6309 0.2005 re +f* +1 g +400.372 425.709 3.0108 0.2005 re +f* +0.498 0 0.482 rg +403.383 425.709 7.4266 0.2005 re +f* +1 g +410.81 425.709 3.4122 0.2005 re +f* +0.498 0 0.482 rg +414.222 425.709 2.8102 0.2005 re +f* +0 g +250.836 425.909 20.6741 0.2006 re +f* +1 g +271.51 425.909 7.4266 0.2006 re +f* +0 g +278.937 425.909 16.0575 0.2006 re +f* +1 g +294.994 425.909 4.2151 0.2006 re +f* +0 g +299.209 425.909 4.4159 0.2006 re +f* +1 g +303.625 425.909 3.6129 0.2006 re +f* +0 g +307.238 425.909 4.4159 0.2006 re +f* +1 g +311.654 425.909 3.4122 0.2006 re +f* +0 g +315.066 425.909 8.0288 0.2006 re +f* +1 g +323.095 425.909 3.2115 0.2006 re +f* +0 g +326.307 425.909 5.6201 0.2006 re +f* +1 g +331.927 425.909 3.4123 0.2006 re +f* +0 g +335.339 425.909 7.6273 0.2006 re +f* +1 g +342.966 425.909 3.8137 0.2006 re +f* +0 g +346.78 425.909 5.018 0.2006 re +f* +1 g +351.798 425.909 7.828 0.2006 re +f* +0.498 0 0.482 rg +359.626 425.909 4.0144 0.2006 re +f* +1 g +363.641 425.909 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 425.909 8.8317 0.2006 re +f* +1 g +376.085 425.909 3.0108 0.2006 re +f* +0.498 0 0.482 rg +379.096 425.909 8.4302 0.2006 re +f* +1 g +387.526 425.909 4.2151 0.2006 re +f* +0.498 0 0.482 rg +391.741 425.909 8.6309 0.2006 re +f* +1 g +400.372 425.909 3.0108 0.2006 re +f* +0.498 0 0.482 rg +403.383 425.909 7.2259 0.2006 re +f* +1 g +410.609 425.909 3.4123 0.2006 re +f* +0.498 0 0.482 rg +414.021 425.909 3.0108 0.2006 re +f* +0 g +250.836 426.11 20.6741 0.2006 re +f* +1 g +271.51 426.11 7.4266 0.2006 re +f* +0 g +278.937 426.11 16.0575 0.2006 re +f* +1 g +294.994 426.11 4.2151 0.2006 re +f* +0 g +299.209 426.11 4.4159 0.2006 re +f* +1 g +303.625 426.11 3.6129 0.2006 re +f* +0 g +307.238 426.11 4.6166 0.2006 re +f* +1 g +311.855 426.11 3.2115 0.2006 re +f* +0 g +315.066 426.11 8.0288 0.2006 re +f* +1 g +323.095 426.11 3.2115 0.2006 re +f* +0 g +326.307 426.11 5.6201 0.2006 re +f* +1 g +331.927 426.11 3.4123 0.2006 re +f* +0 g +335.339 426.11 7.6273 0.2006 re +f* +1 g +342.966 426.11 3.6129 0.2006 re +f* +0 g +346.579 426.11 5.2188 0.2006 re +f* +1 g +351.798 426.11 8.0287 0.2006 re +f* +0.498 0 0.482 rg +359.827 426.11 3.8137 0.2006 re +f* +1 g +363.641 426.11 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 426.11 8.8317 0.2006 re +f* +1 g +376.085 426.11 3.0108 0.2006 re +f* +0.498 0 0.482 rg +379.096 426.11 8.2294 0.2006 re +f* +1 g +387.325 426.11 4.4159 0.2006 re +f* +0.498 0 0.482 rg +391.741 426.11 8.8316 0.2006 re +f* +1 g +400.573 426.11 3.0108 0.2006 re +f* +0.498 0 0.482 rg +403.584 426.11 7.0252 0.2006 re +f* +1 g +410.609 426.11 3.2115 0.2006 re +f* +0.498 0 0.482 rg +413.82 426.11 3.2116 0.2006 re +f* +0 g +250.836 426.31 20.6741 0.2005 re +f* +1 g +271.51 426.31 7.4266 0.2005 re +f* +0 g +278.937 426.31 16.0575 0.2005 re +f* +1 g +294.994 426.31 4.4159 0.2005 re +f* +0 g +299.41 426.31 4.2151 0.2005 re +f* +1 g +303.625 426.31 3.8137 0.2005 re +f* +0 g +307.439 426.31 4.4158 0.2005 re +f* +1 g +311.855 426.31 3.4122 0.2005 re +f* +0 g +315.267 426.31 7.8281 0.2005 re +f* +1 g +323.095 426.31 3.2115 0.2005 re +f* +0 g +326.307 426.31 5.8208 0.2005 re +f* +1 g +332.127 426.31 3.2116 0.2005 re +f* +0 g +335.339 426.31 7.6273 0.2005 re +f* +1 g +342.966 426.31 3.6129 0.2005 re +f* +0 g +346.579 426.31 5.018 0.2005 re +f* +1 g +351.597 426.31 8.2295 0.2005 re +f* +0.498 0 0.482 rg +359.827 426.31 3.8137 0.2005 re +f* +1 g +363.641 426.31 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 426.31 9.0324 0.2005 re +f* +1 g +376.286 426.31 3.0108 0.2005 re +f* +0.498 0 0.482 rg +379.297 426.31 8.0287 0.2005 re +f* +1 g +387.325 426.31 4.4159 0.2005 re +f* +0.498 0 0.482 rg +391.741 426.31 9.0324 0.2005 re +f* +1 g +400.774 426.31 2.81 0.2005 re +f* +0.498 0 0.482 rg +403.584 426.31 7.0252 0.2005 re +f* +1 g +410.609 426.31 3.2115 0.2005 re +f* +0.498 0 0.482 rg +413.82 426.31 3.2116 0.2005 re +f* +0 g +250.836 426.511 20.6741 0.2006 re +f* +1 g +271.51 426.511 7.4266 0.2006 re +f* +0 g +278.937 426.511 16.0575 0.2006 re +f* +1 g +294.994 426.511 4.4159 0.2006 re +f* +0 g +299.41 426.511 4.2151 0.2006 re +f* +1 g +303.625 426.511 3.8137 0.2006 re +f* +0 g +307.439 426.511 4.6165 0.2006 re +f* +1 g +312.056 426.511 3.2115 0.2006 re +f* +0 g +315.267 426.511 7.8281 0.2006 re +f* +1 g +323.095 426.511 3.0107 0.2006 re +f* +0 g +326.106 426.511 6.2223 0.2006 re +f* +1 g +332.328 426.511 3.2116 0.2006 re +f* +0 g +335.54 426.511 7.4266 0.2006 re +f* +1 g +342.966 426.511 3.4122 0.2006 re +f* +0 g +346.379 426.511 5.2187 0.2006 re +f* +1 g +351.597 426.511 8.2295 0.2006 re +f* +0.498 0 0.482 rg +359.827 426.511 3.8137 0.2006 re +f* +1 g +363.641 426.511 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 426.511 9.2331 0.2006 re +f* +1 g +376.486 426.511 2.8101 0.2006 re +f* +0.498 0 0.482 rg +379.297 426.511 7.828 0.2006 re +f* +1 g +387.125 426.511 4.6166 0.2006 re +f* +0.498 0 0.482 rg +391.741 426.511 9.2331 0.2006 re +f* +1 g +400.974 426.511 2.8101 0.2006 re +f* +0.498 0 0.482 rg +403.784 426.511 6.8244 0.2006 re +f* +1 g +410.609 426.511 3.0108 0.2006 re +f* +0.498 0 0.482 rg +413.62 426.511 3.4123 0.2006 re +f* +0 g +250.836 426.711 20.6741 0.2005 re +f* +1 g +271.51 426.711 7.4266 0.2005 re +f* +0 g +278.937 426.711 16.0575 0.2005 re +f* +1 g +294.994 426.711 4.6166 0.2005 re +f* +0 g +299.611 426.711 4.0144 0.2005 re +f* +1 g +303.625 426.711 3.8137 0.2005 re +f* +0 g +307.439 426.711 4.8172 0.2005 re +f* +1 g +312.256 426.711 3.0108 0.2005 re +f* +0 g +315.267 426.711 7.8281 0.2005 re +f* +1 g +323.095 426.711 3.0107 0.2005 re +f* +0 g +326.106 426.711 6.2223 0.2005 re +f* +1 g +332.328 426.711 3.2116 0.2005 re +f* +0 g +335.54 426.711 7.4266 0.2005 re +f* +1 g +342.966 426.711 3.4122 0.2005 re +f* +0 g +346.379 426.711 5.018 0.2005 re +f* +1 g +351.397 426.711 8.4302 0.2005 re +f* +0.498 0 0.482 rg +359.827 426.711 3.8137 0.2005 re +f* +1 g +363.641 426.711 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 426.711 9.4339 0.2005 re +f* +1 g +376.687 426.711 2.6093 0.2005 re +f* +0.498 0 0.482 rg +379.297 426.711 7.6274 0.2005 re +f* +1 g +386.924 426.711 1.0036 0.2005 re +f* +0.498 0 0.482 rg +387.928 426.711 0.2006 0.2005 re +f* +1 g +388.128 426.711 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 426.711 9.4338 0.2005 re +f* +1 g +401.175 426.711 2.6094 0.2005 re +f* +0.498 0 0.482 rg +403.784 426.711 6.6237 0.2005 re +f* +1 g +410.408 426.711 3.0108 0.2005 re +f* +0.498 0 0.482 rg +413.419 426.711 3.4122 0.2005 re +f* +0 g +251.037 426.912 20.4734 0.2006 re +f* +1 g +271.51 426.912 7.4266 0.2006 re +f* +0 g +278.937 426.912 16.0575 0.2006 re +f* +1 g +294.994 426.912 4.6166 0.2006 re +f* +0 g +299.611 426.912 4.0144 0.2006 re +f* +1 g +303.625 426.912 3.8137 0.2006 re +f* +0 g +307.439 426.912 5.0179 0.2006 re +f* +1 g +312.457 426.912 3.0108 0.2006 re +f* +0 g +315.468 426.912 7.6274 0.2006 re +f* +1 g +323.095 426.912 2.81 0.2006 re +f* +0 g +325.905 426.912 6.6238 0.2006 re +f* +1 g +332.529 426.912 3.0108 0.2006 re +f* +0 g +335.54 426.912 7.4266 0.2006 re +f* +1 g +342.966 426.912 3.2115 0.2006 re +f* +0 g +346.178 426.912 5.2187 0.2006 re +f* +1 g +351.397 426.912 8.4302 0.2006 re +f* +0.498 0 0.482 rg +359.827 426.912 3.8137 0.2006 re +f* +1 g +363.641 426.912 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 426.912 9.6346 0.2006 re +f* +1 g +376.888 426.912 2.6093 0.2006 re +f* +0.498 0 0.482 rg +379.497 426.912 7.4267 0.2006 re +f* +1 g +386.924 426.912 1.0036 0.2006 re +f* +0.498 0 0.482 rg +387.928 426.912 0.2006 0.2006 re +f* +1 g +388.128 426.912 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 426.912 9.6345 0.2006 re +f* +1 g +401.376 426.912 2.6094 0.2006 re +f* +0.498 0 0.482 rg +403.985 426.912 6.423 0.2006 re +f* +1 g +410.408 426.912 3.0108 0.2006 re +f* +0.498 0 0.482 rg +413.419 426.912 3.4122 0.2006 re +f* +0 g +251.037 427.113 20.4734 0.2006 re +f* +1 g +271.51 427.113 7.4266 0.2006 re +f* +0 g +278.937 427.113 16.0575 0.2006 re +f* +1 g +294.994 427.113 3.613 0.2006 re +f* +0 g +298.607 427.113 0.2007 0.2006 re +f* +1 g +298.808 427.113 1.0036 0.2006 re +f* +0 g +299.812 427.113 4.0144 0.2006 re +f* +1 g +303.826 427.113 3.613 0.2006 re +f* +0 g +307.439 427.113 5.0179 0.2006 re +f* +1 g +312.457 427.113 3.0108 0.2006 re +f* +0 g +315.468 427.113 7.6274 0.2006 re +f* +1 g +323.095 427.113 2.6093 0.2006 re +f* +0 g +325.704 427.113 7.0252 0.2006 re +f* +1 g +332.73 427.113 3.0108 0.2006 re +f* +0 g +335.74 427.113 7.0252 0.2006 re +f* +1 g +342.766 427.113 3.4122 0.2006 re +f* +0 g +346.178 427.113 5.018 0.2006 re +f* +1 g +351.196 427.113 8.6309 0.2006 re +f* +0.498 0 0.482 rg +359.827 427.113 3.8137 0.2006 re +f* +1 g +363.641 427.113 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 427.113 9.8353 0.2006 re +f* +1 g +377.089 427.113 2.6094 0.2006 re +f* +0.498 0 0.482 rg +379.698 427.113 7.0251 0.2006 re +f* +1 g +386.723 427.113 1.0036 0.2006 re +f* +0.498 0 0.482 rg +387.727 427.113 0.4014 0.2006 re +f* +1 g +388.128 427.113 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 427.113 9.8352 0.2006 re +f* +1 g +401.576 427.113 2.4087 0.2006 re +f* +0.498 0 0.482 rg +403.985 427.113 6.2223 0.2006 re +f* +1 g +410.207 427.113 3.0107 0.2006 re +f* +0.498 0 0.482 rg +413.218 427.113 3.613 0.2006 re +f* +0 g +251.037 427.313 20.4734 0.2005 re +f* +1 g +271.51 427.313 7.4266 0.2005 re +f* +0 g +278.937 427.313 16.0575 0.2005 re +f* +1 g +294.994 427.313 3.613 0.2005 re +f* +0 g +298.607 427.313 0.2007 0.2005 re +f* +1 g +298.808 427.313 1.0036 0.2005 re +f* +0 g +299.812 427.313 4.0144 0.2005 re +f* +1 g +303.826 427.313 3.613 0.2005 re +f* +0 g +307.439 427.313 5.2187 0.2005 re +f* +1 g +312.658 427.313 2.81 0.2005 re +f* +0 g +315.468 427.313 7.6274 0.2005 re +f* +1 g +323.095 427.313 2.6093 0.2005 re +f* +0 g +325.704 427.313 7.2259 0.2005 re +f* +1 g +332.93 427.313 2.8101 0.2005 re +f* +0 g +335.74 427.313 7.0252 0.2005 re +f* +1 g +342.766 427.313 3.2114 0.2005 re +f* +0 g +345.977 427.313 5.2188 0.2005 re +f* +1 g +351.196 427.313 8.6309 0.2005 re +f* +0.498 0 0.482 rg +359.827 427.313 3.8137 0.2005 re +f* +1 g +363.641 427.313 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 427.313 10.036 0.2005 re +f* +1 g +377.289 427.313 2.4087 0.2005 re +f* +0.498 0 0.482 rg +379.698 427.313 6.8244 0.2005 re +f* +1 g +386.522 427.313 1.0036 0.2005 re +f* +0.498 0 0.482 rg +387.526 427.313 0.6021 0.2005 re +f* +1 g +388.128 427.313 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 427.313 10.036 0.2005 re +f* +1 g +401.777 427.313 2.4086 0.2005 re +f* +0.498 0 0.482 rg +404.186 427.313 6.0216 0.2005 re +f* +1 g +410.207 427.313 2.8101 0.2005 re +f* +0.498 0 0.482 rg +413.017 427.313 3.8136 0.2005 re +f* +0 g +251.037 427.514 20.4734 0.2006 re +f* +1 g +271.51 427.514 7.4266 0.2006 re +f* +0 g +278.937 427.514 16.0575 0.2006 re +f* +1 g +294.994 427.514 3.613 0.2006 re +f* +0 g +298.607 427.514 0.4014 0.2006 re +f* +1 g +299.009 427.514 1.0036 0.2006 re +f* +0 g +300.012 427.514 3.8137 0.2006 re +f* +1 g +303.826 427.514 3.613 0.2006 re +f* +0 g +307.439 427.514 5.4194 0.2006 re +f* +1 g +312.858 427.514 2.8101 0.2006 re +f* +0 g +315.669 427.514 7.2258 0.2006 re +f* +1 g +322.894 427.514 2.6094 0.2006 re +f* +0 g +325.504 427.514 7.4266 0.2006 re +f* +1 g +332.93 427.514 3.0108 0.2006 re +f* +0 g +335.941 427.514 6.8245 0.2006 re +f* +1 g +342.766 427.514 3.2114 0.2006 re +f* +0 g +345.977 427.514 5.018 0.2006 re +f* +1 g +350.995 427.514 8.8317 0.2006 re +f* +0.498 0 0.482 rg +359.827 427.514 3.8137 0.2006 re +f* +1 g +363.641 427.514 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 427.514 10.2367 0.2006 re +f* +1 g +377.49 427.514 2.4087 0.2006 re +f* +0.498 0 0.482 rg +379.899 427.514 6.4229 0.2006 re +f* +1 g +386.322 427.514 1.0036 0.2006 re +f* +0.498 0 0.482 rg +387.325 427.514 0.8029 0.2006 re +f* +1 g +388.128 427.514 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 427.514 10.2367 0.2006 re +f* +1 g +401.978 427.514 2.4086 0.2006 re +f* +0.498 0 0.482 rg +404.386 427.514 5.6202 0.2006 re +f* +1 g +410.007 427.514 2.81 0.2006 re +f* +0.498 0 0.482 rg +412.817 427.514 3.8137 0.2006 re +f* +0 g +251.238 427.714 20.2727 0.2005 re +f* +1 g +271.51 427.714 7.4266 0.2005 re +f* +0 g +278.937 427.714 16.0575 0.2005 re +f* +1 g +294.994 427.714 3.613 0.2005 re +f* +0 g +298.607 427.714 0.4014 0.2005 re +f* +1 g +299.009 427.714 1.0036 0.2005 re +f* +0 g +300.012 427.714 4.0144 0.2005 re +f* +1 g +304.027 427.714 3.4123 0.2005 re +f* +0 g +307.439 427.714 5.6201 0.2005 re +f* +1 g +313.059 427.714 2.6094 0.2005 re +f* +0 g +315.669 427.714 7.2258 0.2005 re +f* +1 g +322.894 427.714 2.4087 0.2005 re +f* +0 g +325.303 427.714 7.828 0.2005 re +f* +1 g +333.131 427.714 2.8101 0.2005 re +f* +0 g +335.941 427.714 6.8245 0.2005 re +f* +1 g +342.766 427.714 3.0108 0.2005 re +f* +0 g +345.776 427.714 5.018 0.2005 re +f* +1 g +350.794 427.714 9.0323 0.2005 re +f* +0.498 0 0.482 rg +359.827 427.714 3.8137 0.2005 re +f* +1 g +363.641 427.714 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 427.714 10.4375 0.2005 re +f* +1 g +377.691 427.714 2.4086 0.2005 re +f* +0.498 0 0.482 rg +380.099 427.714 6.0215 0.2005 re +f* +1 g +386.121 427.714 1.2043 0.2005 re +f* +0.498 0 0.482 rg +387.325 427.714 0.8029 0.2005 re +f* +1 g +388.128 427.714 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 427.714 10.4374 0.2005 re +f* +1 g +402.179 427.714 2.4086 0.2005 re +f* +0.498 0 0.482 rg +404.587 427.714 5.4195 0.2005 re +f* +1 g +410.007 427.714 2.6093 0.2005 re +f* +0.498 0 0.482 rg +412.616 427.714 4.0144 0.2005 re +f* +0 g +251.238 427.915 20.2727 0.2006 re +f* +1 g +271.51 427.915 7.4266 0.2006 re +f* +0 g +278.937 427.915 16.0575 0.2006 re +f* +1 g +294.994 427.915 3.613 0.2006 re +f* +0 g +298.607 427.915 0.6021 0.2006 re +f* +1 g +299.209 427.915 1.0036 0.2006 re +f* +0 g +300.213 427.915 3.8137 0.2006 re +f* +1 g +304.027 427.915 3.4123 0.2006 re +f* +0 g +307.439 427.915 5.8208 0.2006 re +f* +1 g +313.26 427.915 2.6093 0.2006 re +f* +0 g +315.869 427.915 7.0252 0.2006 re +f* +1 g +322.894 427.915 2.208 0.2006 re +f* +0 g +325.102 427.915 8.2294 0.2006 re +f* +1 g +333.332 427.915 2.8101 0.2006 re +f* +0 g +336.142 427.915 6.423 0.2006 re +f* +1 g +342.565 427.915 3.0108 0.2006 re +f* +0 g +345.576 427.915 5.2188 0.2006 re +f* +1 g +350.794 427.915 8.8316 0.2006 re +f* +0.498 0 0.482 rg +359.626 427.915 4.0144 0.2006 re +f* +1 g +363.641 427.915 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 427.915 10.6382 0.2006 re +f* +1 g +377.892 427.915 2.4086 0.2006 re +f* +0.498 0 0.482 rg +380.3 427.915 5.6201 0.2006 re +f* +1 g +385.92 427.915 1.2043 0.2006 re +f* +0.498 0 0.482 rg +387.125 427.915 1.0036 0.2006 re +f* +1 g +388.128 427.915 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 427.915 10.8388 0.2006 re +f* +1 g +402.58 427.915 2.208 0.2006 re +f* +0.498 0 0.482 rg +404.788 427.915 5.018 0.2006 re +f* +1 g +409.806 427.915 2.6093 0.2006 re +f* +0.498 0 0.482 rg +412.415 427.915 4.2151 0.2006 re +f* +0 g +251.238 428.115 20.2727 0.2006 re +f* +1 g +271.51 428.115 7.4266 0.2006 re +f* +0 g +278.937 428.115 16.0575 0.2006 re +f* +1 g +294.994 428.115 3.613 0.2006 re +f* +0 g +298.607 428.115 0.8029 0.2006 re +f* +1 g +299.41 428.115 1.0036 0.2006 re +f* +0 g +300.414 428.115 3.6129 0.2006 re +f* +1 g +304.027 428.115 3.4123 0.2006 re +f* +0 g +307.439 428.115 6.0215 0.2006 re +f* +1 g +313.461 428.115 2.4086 0.2006 re +f* +0 g +315.869 428.115 6.8246 0.2006 re +f* +1 g +322.694 428.115 2.2078 0.2006 re +f* +0 g +324.902 428.115 8.631 0.2006 re +f* +1 g +333.533 428.115 2.6093 0.2006 re +f* +0 g +336.142 428.115 6.423 0.2006 re +f* +1 g +342.565 428.115 2.8101 0.2006 re +f* +0 g +345.375 428.115 5.2187 0.2006 re +f* +1 g +350.594 428.115 9.0324 0.2006 re +f* +0.498 0 0.482 rg +359.626 428.115 4.0144 0.2006 re +f* +1 g +363.641 428.115 3.6129 0.2006 re +f* +0.498 0 0.482 rg +367.253 428.115 11.0396 0.2006 re +f* +1 g +378.293 428.115 2.2079 0.2006 re +f* +0.498 0 0.482 rg +380.501 428.115 5.018 0.2006 re +f* +1 g +385.519 428.115 1.4051 0.2006 re +f* +0.498 0 0.482 rg +386.924 428.115 1.2042 0.2006 re +f* +1 g +388.128 428.115 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 428.115 11.0396 0.2006 re +f* +1 g +402.781 428.115 2.2079 0.2006 re +f* +0.498 0 0.482 rg +404.989 428.115 4.6165 0.2006 re +f* +1 g +409.605 428.115 2.4087 0.2006 re +f* +0.498 0 0.482 rg +412.014 428.115 4.6165 0.2006 re +f* +0 g +251.238 428.316 20.2727 0.2005 re +f* +1 g +271.51 428.316 7.4266 0.2005 re +f* +0 g +278.937 428.316 16.0575 0.2005 re +f* +1 g +294.994 428.316 3.613 0.2005 re +f* +0 g +298.607 428.316 0.8029 0.2005 re +f* +1 g +299.41 428.316 1.2043 0.2005 re +f* +0 g +300.615 428.316 3.4122 0.2005 re +f* +1 g +304.027 428.316 3.2115 0.2005 re +f* +0 g +307.238 428.316 6.4231 0.2005 re +f* +1 g +313.661 428.316 2.4086 0.2005 re +f* +0 g +316.07 428.316 6.6238 0.2005 re +f* +1 g +322.694 428.316 2.0071 0.2005 re +f* +0 g +324.701 428.316 9.0324 0.2005 re +f* +1 g +333.733 428.316 2.6094 0.2005 re +f* +0 g +336.343 428.316 6.0215 0.2005 re +f* +1 g +342.364 428.316 3.0108 0.2005 re +f* +0 g +345.375 428.316 5.018 0.2005 re +f* +1 g +350.393 428.316 9.2331 0.2005 re +f* +0.498 0 0.482 rg +359.626 428.316 1.0036 0.2005 re +f* +1 g +360.63 428.316 0.2007 0.2005 re +f* +0.498 0 0.482 rg +360.83 428.316 2.8101 0.2005 re +f* +1 g +363.641 428.316 3.6129 0.2005 re +f* +0.498 0 0.482 rg +367.253 428.316 11.2403 0.2005 re +f* +1 g +378.494 428.316 2.4087 0.2005 re +f* +0.498 0 0.482 rg +380.902 428.316 4.215 0.2005 re +f* +1 g +385.117 428.316 1.6058 0.2005 re +f* +0.498 0 0.482 rg +386.723 428.316 1.405 0.2005 re +f* +1 g +388.128 428.316 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 428.316 11.441 0.2005 re +f* +1 g +403.182 428.316 2.2079 0.2005 re +f* +0.498 0 0.482 rg +405.39 428.316 3.8137 0.2005 re +f* +1 g +409.204 428.316 2.6093 0.2005 re +f* +0.498 0 0.482 rg +411.813 428.316 4.8173 0.2005 re +f* +0 g +251.438 428.516 20.072 0.2006 re +f* +1 g +271.51 428.516 7.4266 0.2006 re +f* +0 g +278.937 428.516 16.0575 0.2006 re +f* +1 g +294.994 428.516 3.613 0.2006 re +f* +0 g +298.607 428.516 1.0036 0.2006 re +f* +1 g +299.611 428.516 1.2043 0.2006 re +f* +0 g +300.815 428.516 3.2115 0.2006 re +f* +1 g +304.027 428.516 3.2115 0.2006 re +f* +0 g +307.238 428.516 6.8245 0.2006 re +f* +1 g +314.063 428.516 2.2079 0.2006 re +f* +0 g +316.271 428.516 6.2223 0.2006 re +f* +1 g +322.493 428.516 2.0072 0.2006 re +f* +0 g +324.5 428.516 9.4338 0.2006 re +f* +1 g +333.934 428.516 2.6094 0.2006 re +f* +0 g +336.543 428.516 5.8208 0.2006 re +f* +1 g +342.364 428.516 2.8101 0.2006 re +f* +0 g +345.174 428.516 5.2187 0.2006 re +f* +1 g +350.393 428.516 9.2331 0.2006 re +f* +0.498 0 0.482 rg +359.626 428.516 1.0036 0.2006 re +f* +1 g +360.63 428.516 6.6237 0.2006 re +f* +0.498 0 0.482 rg +367.253 428.516 11.6418 0.2006 re +f* +1 g +378.895 428.516 2.4086 0.2006 re +f* +0.498 0 0.482 rg +381.304 428.516 3.4122 0.2006 re +f* +1 g +384.716 428.516 1.6057 0.2006 re +f* +0.498 0 0.482 rg +386.322 428.516 1.8065 0.2006 re +f* +1 g +388.128 428.516 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 428.516 11.6417 0.2006 re +f* +1 g +403.383 428.516 2.4087 0.2006 re +f* +0.498 0 0.482 rg +405.792 428.516 3.0108 0.2006 re +f* +1 g +408.802 428.516 2.6093 0.2006 re +f* +0.498 0 0.482 rg +411.412 428.516 5.018 0.2006 re +f* +0 g +251.438 428.717 20.072 0.2005 re +f* +1 g +271.51 428.717 7.4266 0.2005 re +f* +0 g +278.937 428.717 16.0575 0.2005 re +f* +1 g +294.994 428.717 3.613 0.2005 re +f* +0 g +298.607 428.717 1.2043 0.2005 re +f* +1 g +299.812 428.717 1.2043 0.2005 re +f* +0 g +301.016 428.717 3.0108 0.2005 re +f* +1 g +304.027 428.717 3.2115 0.2005 re +f* +0 g +307.238 428.717 7.0252 0.2005 re +f* +1 g +314.263 428.717 2.2079 0.2005 re +f* +0 g +316.471 428.717 6.0216 0.2005 re +f* +1 g +322.493 428.717 1.8065 0.2005 re +f* +0 g +324.299 428.717 10.0359 0.2005 re +f* +1 g +334.335 428.717 2.4087 0.2005 re +f* +0 g +336.744 428.717 5.4194 0.2005 re +f* +1 g +342.163 428.717 2.81 0.2005 re +f* +0 g +344.973 428.717 5.2188 0.2005 re +f* +1 g +350.192 428.717 9.4338 0.2005 re +f* +0.498 0 0.482 rg +359.626 428.717 1.0036 0.2005 re +f* +1 g +360.63 428.717 6.6237 0.2005 re +f* +0.498 0 0.482 rg +367.253 428.717 12.0432 0.2005 re +f* +1 g +379.297 428.717 2.81 0.2005 re +f* +0.498 0 0.482 rg +382.107 428.717 1.8066 0.2005 re +f* +1 g +383.913 428.717 2.2078 0.2005 re +f* +0.498 0 0.482 rg +386.121 428.717 2.0072 0.2005 re +f* +1 g +388.128 428.717 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 428.717 12.0432 0.2005 re +f* +1 g +403.784 428.717 2.81 0.2005 re +f* +0.498 0 0.482 rg +406.594 428.717 1.6058 0.2005 re +f* +1 g +408.2 428.717 2.8101 0.2005 re +f* +0.498 0 0.482 rg +411.01 428.717 5.4194 0.2005 re +f* +0 g +251.438 428.918 20.072 0.2006 re +f* +1 g +271.51 428.918 7.4266 0.2006 re +f* +0 g +278.937 428.918 16.0575 0.2006 re +f* +1 g +294.994 428.918 3.613 0.2006 re +f* +0 g +298.607 428.918 1.405 0.2006 re +f* +1 g +300.012 428.918 1.2043 0.2006 re +f* +0 g +301.217 428.918 2.8101 0.2006 re +f* +1 g +304.027 428.918 3.0108 0.2006 re +f* +0 g +307.038 428.918 7.4266 0.2006 re +f* +1 g +314.464 428.918 2.2079 0.2006 re +f* +0 g +316.672 428.918 5.6202 0.2006 re +f* +1 g +322.292 428.918 1.8065 0.2006 re +f* +0 g +324.099 428.918 10.4374 0.2006 re +f* +1 g +334.536 428.918 2.4086 0.2006 re +f* +0 g +336.945 428.918 5.018 0.2006 re +f* +1 g +341.963 428.918 2.8101 0.2006 re +f* +0 g +344.773 428.918 5.2186 0.2006 re +f* +1 g +349.991 428.918 9.6346 0.2006 re +f* +0.498 0 0.482 rg +359.626 428.918 1.0036 0.2006 re +f* +1 g +360.63 428.918 6.6237 0.2006 re +f* +0.498 0 0.482 rg +367.253 428.918 12.4447 0.2006 re +f* +1 g +379.698 428.918 6.0215 0.2006 re +f* +0.498 0 0.482 rg +385.72 428.918 2.4086 0.2006 re +f* +1 g +388.128 428.918 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 428.918 12.6453 0.2006 re +f* +1 g +404.386 428.918 6.2223 0.2006 re +f* +0.498 0 0.482 rg +410.609 428.918 5.8209 0.2006 re +f* +0 g +251.438 429.118 20.2727 0.2006 re +f* +1 g +271.711 429.118 7.2259 0.2006 re +f* +0 g +278.937 429.118 16.0575 0.2006 re +f* +1 g +294.994 429.118 3.613 0.2006 re +f* +0 g +298.607 429.118 1.6057 0.2006 re +f* +1 g +300.213 429.118 1.2044 0.2006 re +f* +0 g +301.417 429.118 2.4086 0.2006 re +f* +1 g +303.826 429.118 3.2115 0.2006 re +f* +0 g +307.038 429.118 7.828 0.2006 re +f* +1 g +314.866 429.118 2.0072 0.2006 re +f* +0 g +316.873 429.118 5.2188 0.2006 re +f* +1 g +322.092 429.118 1.8064 0.2006 re +f* +0 g +323.898 429.118 10.8389 0.2006 re +f* +1 g +334.737 429.118 2.4086 0.2006 re +f* +0 g +337.146 429.118 4.6166 0.2006 re +f* +1 g +341.762 429.118 2.6093 0.2006 re +f* +0 g +344.371 429.118 5.4195 0.2006 re +f* +1 g +349.791 429.118 9.8352 0.2006 re +f* +0.498 0 0.482 rg +359.626 429.118 20.4734 0.2006 re +f* +1 g +380.099 429.118 5.2187 0.2006 re +f* +0.498 0 0.482 rg +385.318 429.118 2.81 0.2006 re +f* +1 g +388.128 429.118 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 429.118 13.0468 0.2006 re +f* +1 g +404.788 429.118 5.4194 0.2006 re +f* +0.498 0 0.482 rg +410.207 429.118 6.2223 0.2006 re +f* +0 g +251.639 429.319 20.0719 0.2005 re +f* +1 g +271.711 429.319 7.2259 0.2005 re +f* +0 g +278.937 429.319 16.0575 0.2005 re +f* +1 g +294.994 429.319 3.613 0.2005 re +f* +0 g +298.607 429.319 1.8065 0.2005 re +f* +1 g +300.414 429.319 1.405 0.2005 re +f* +0 g +301.819 429.319 1.8065 0.2005 re +f* +1 g +303.625 429.319 3.2115 0.2005 re +f* +0 g +306.837 429.319 8.4302 0.2005 re +f* +1 g +315.267 429.319 1.8065 0.2005 re +f* +0 g +317.074 429.319 4.8172 0.2005 re +f* +1 g +321.891 429.319 1.6058 0.2005 re +f* +0 g +323.497 429.319 11.6417 0.2005 re +f* +1 g +335.138 429.319 2.208 0.2005 re +f* +0 g +337.346 429.319 4.2151 0.2005 re +f* +1 g +341.561 429.319 2.6093 0.2005 re +f* +0 g +344.171 429.319 5.6202 0.2005 re +f* +1 g +349.791 429.319 9.8352 0.2005 re +f* +0.498 0 0.482 rg +359.626 429.319 21.2763 0.2005 re +f* +1 g +380.902 429.319 3.8136 0.2005 re +f* +0.498 0 0.482 rg +384.716 429.319 3.4122 0.2005 re +f* +1 g +388.128 429.319 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 429.319 13.8497 0.2005 re +f* +1 g +405.591 429.319 3.8136 0.2005 re +f* +0.498 0 0.482 rg +409.404 429.319 6.8244 0.2005 re +f* +0 g +251.639 429.519 20.0719 0.2005 re +f* +1 g +271.711 429.519 7.2259 0.2005 re +f* +0 g +278.937 429.519 13.0467 0.2005 re +f* +1 g +291.984 429.519 0.2008 0.2005 re +f* +0 g +292.184 429.519 2.81 0.2005 re +f* +1 g +294.994 429.519 3.613 0.2005 re +f* +0 g +298.607 429.519 2.0072 0.2005 re +f* +1 g +300.615 429.519 1.6057 0.2005 re +f* +0 g +302.22 429.519 1.2044 0.2005 re +f* +1 g +303.425 429.519 3.2115 0.2005 re +f* +0 g +306.636 429.519 9.0324 0.2005 re +f* +1 g +315.669 429.519 1.8064 0.2005 re +f* +0 g +317.475 429.519 4.2152 0.2005 re +f* +1 g +321.69 429.519 1.405 0.2005 re +f* +0 g +323.095 429.519 12.2439 0.2005 re +f* +1 g +335.339 429.519 2.4086 0.2005 re +f* +0 g +337.748 429.519 3.6129 0.2005 re +f* +1 g +341.361 429.519 2.4087 0.2005 re +f* +0 g +343.769 429.519 5.8208 0.2005 re +f* +1 g +349.59 429.519 10.036 0.2005 re +f* +0.498 0 0.482 rg +359.626 429.519 22.4805 0.2005 re +f* +1 g +382.107 429.519 1.4051 0.2005 re +f* +0.498 0 0.482 rg +383.512 429.519 4.6165 0.2005 re +f* +1 g +388.128 429.519 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 429.519 15.054 0.2005 re +f* +1 g +406.795 429.519 1.6057 0.2005 re +f* +0.498 0 0.482 rg +408.401 429.519 7.828 0.2005 re +f* +0 g +251.639 429.72 20.0719 0.2006 re +f* +1 g +271.711 429.72 7.2259 0.2006 re +f* +0 g +278.937 429.72 13.0467 0.2006 re +f* +1 g +291.984 429.72 6.6238 0.2006 re +f* +0 g +298.607 429.72 2.2079 0.2006 re +f* +1 g +300.815 429.72 5.6202 0.2006 re +f* +0 g +306.435 429.72 9.6345 0.2006 re +f* +1 g +316.07 429.72 1.8064 0.2006 re +f* +0 g +317.876 429.72 3.4123 0.2006 re +f* +1 g +321.289 429.72 1.4051 0.2006 re +f* +0 g +322.694 429.72 13.0467 0.2006 re +f* +1 g +335.74 429.72 2.6093 0.2006 re +f* +0 g +338.35 429.72 2.4087 0.2006 re +f* +1 g +340.758 429.72 2.81 0.2006 re +f* +0 g +343.568 429.72 5.8209 0.2006 re +f* +1 g +349.389 429.72 10.2367 0.2006 re +f* +0.498 0 0.482 rg +359.626 429.72 28.5021 0.2006 re +f* +1 g +388.128 429.72 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 429.72 24.4877 0.2006 re +f* +0 g +251.639 429.92 20.0719 0.2006 re +f* +1 g +271.711 429.92 7.2259 0.2006 re +f* +0 g +278.937 429.92 13.0467 0.2006 re +f* +1 g +291.984 429.92 6.6238 0.2006 re +f* +0 g +298.607 429.92 2.6093 0.2006 re +f* +1 g +301.217 429.92 5.018 0.2006 re +f* +0 g +306.235 429.92 10.4374 0.2006 re +f* +1 g +316.672 429.92 2.0073 0.2006 re +f* +0 g +318.679 429.92 1.8064 0.2006 re +f* +1 g +320.486 429.92 1.6058 0.2006 re +f* +0 g +322.092 429.92 14.0503 0.2006 re +f* +1 g +336.142 429.92 7.0252 0.2006 re +f* +0 g +343.167 429.92 6.0216 0.2006 re +f* +1 g +349.189 429.92 10.2367 0.2006 re +f* +0.498 0 0.482 rg +359.425 429.92 28.7028 0.2006 re +f* +1 g +388.128 429.92 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 429.92 24.2871 0.2006 re +f* +0 g +251.84 430.121 19.8712 0.2006 re +f* +1 g +271.711 430.121 7.2259 0.2006 re +f* +0 g +278.937 430.121 13.0467 0.2006 re +f* +1 g +291.984 430.121 6.6238 0.2006 re +f* +0 g +298.607 430.121 2.8101 0.2006 re +f* +1 g +301.417 430.121 4.4158 0.2006 re +f* +0 g +305.833 430.121 11.6417 0.2006 re +f* +1 g +317.475 430.121 4.0144 0.2006 re +f* +0 g +321.489 430.121 15.2547 0.2006 re +f* +1 g +336.744 430.121 6.0216 0.2006 re +f* +0 g +342.766 430.121 6.2222 0.2006 re +f* +1 g +348.988 430.121 10.4375 0.2006 re +f* +0.498 0 0.482 rg +359.425 430.121 28.7028 0.2006 re +f* +1 g +388.128 430.121 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 430.121 24.2871 0.2006 re +f* +0 g +251.84 430.322 19.8712 0.2005 re +f* +1 g +271.711 430.322 7.2259 0.2005 re +f* +0 g +278.937 430.322 23.0827 0.2005 re +f* +1 g +302.02 430.322 3.4123 0.2005 re +f* +0 g +305.432 430.322 13.4481 0.2005 re +f* +1 g +318.88 430.322 1.6058 0.2005 re +f* +0 g +320.486 430.322 16.8605 0.2005 re +f* +1 g +337.346 430.322 4.8172 0.2005 re +f* +0 g +342.163 430.322 6.6238 0.2005 re +f* +1 g +348.787 430.322 10.6381 0.2005 re +f* +0.498 0 0.482 rg +359.425 430.322 28.7028 0.2005 re +f* +1 g +388.128 430.322 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 430.322 24.2871 0.2005 re +f* +0 g +251.84 430.522 19.8712 0.2006 re +f* +1 g +271.711 430.522 7.2259 0.2006 re +f* +0 g +278.937 430.522 23.6849 0.2006 re +f* +1 g +302.622 430.522 2.2079 0.2006 re +f* +0 g +304.83 430.522 33.3194 0.2006 re +f* +1 g +338.149 430.522 3.2115 0.2006 re +f* +0 g +341.361 430.522 7.2259 0.2006 re +f* +1 g +348.586 430.522 10.8389 0.2006 re +f* +0.498 0 0.482 rg +359.425 430.522 28.7028 0.2006 re +f* +1 g +388.128 430.522 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 430.522 24.0863 0.2006 re +f* +0 g +252.04 430.723 19.8712 0.2005 re +f* +1 g +271.912 430.723 7.0252 0.2005 re +f* +0 g +278.937 430.723 69.4489 0.2005 re +f* +1 g +348.386 430.723 11.0396 0.2005 re +f* +0.498 0 0.482 rg +359.425 430.723 28.7028 0.2005 re +f* +1 g +388.128 430.723 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 430.723 24.0863 0.2005 re +f* +0 g +252.04 430.923 19.8712 0.2006 re +f* +1 g +271.912 430.923 7.0252 0.2006 re +f* +0 g +278.937 430.923 69.2482 0.2006 re +f* +1 g +348.185 430.923 11.0395 0.2006 re +f* +0.498 0 0.482 rg +359.225 430.923 28.9036 0.2006 re +f* +1 g +388.128 430.923 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 430.923 24.0863 0.2006 re +f* +0 g +252.04 431.124 19.8712 0.2006 re +f* +1 g +271.912 431.124 7.0252 0.2006 re +f* +0 g +278.937 431.124 69.0474 0.2006 re +f* +1 g +347.984 431.124 11.2403 0.2006 re +f* +0.498 0 0.482 rg +359.225 431.124 28.9036 0.2006 re +f* +1 g +388.128 431.124 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 431.124 23.8856 0.2006 re +f* +0 g +252.241 431.324 19.6705 0.2005 re +f* +1 g +271.912 431.324 7.0252 0.2005 re +f* +0 g +278.937 431.324 68.8468 0.2005 re +f* +1 g +347.784 431.324 11.4409 0.2005 re +f* +0.498 0 0.482 rg +359.225 431.324 28.9036 0.2005 re +f* +1 g +388.128 431.324 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 431.324 23.8856 0.2005 re +f* +0 g +252.241 431.525 19.6705 0.2005 re +f* +1 g +271.912 431.525 7.0252 0.2005 re +f* +0 g +278.937 431.525 68.4453 0.2005 re +f* +1 g +347.382 431.525 11.8424 0.2005 re +f* +0.498 0 0.482 rg +359.225 431.525 28.9036 0.2005 re +f* +1 g +388.128 431.525 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 431.525 23.8856 0.2005 re +f* +0 g +252.241 431.725 19.6705 0.2006 re +f* +1 g +271.912 431.725 7.0252 0.2006 re +f* +0 g +278.937 431.725 68.2446 0.2006 re +f* +1 g +347.181 431.725 11.8424 0.2006 re +f* +0.498 0 0.482 rg +359.024 431.725 29.1043 0.2006 re +f* +1 g +388.128 431.725 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 431.725 23.6849 0.2006 re +f* +0 g +252.442 431.926 19.6705 0.2006 re +f* +1 g +272.112 431.926 6.8245 0.2006 re +f* +0 g +278.937 431.926 68.0438 0.2006 re +f* +1 g +346.981 431.926 12.0432 0.2006 re +f* +0.498 0 0.482 rg +359.024 431.926 29.1043 0.2006 re +f* +1 g +388.128 431.926 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 431.926 23.6849 0.2006 re +f* +0 g +252.442 432.127 19.6705 0.2005 re +f* +1 g +272.112 432.127 6.8245 0.2005 re +f* +0 g +278.937 432.127 67.6424 0.2005 re +f* +1 g +346.579 432.127 12.4446 0.2005 re +f* +0.498 0 0.482 rg +359.024 432.127 29.1043 0.2005 re +f* +1 g +388.128 432.127 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 432.127 23.4841 0.2005 re +f* +0 g +252.643 432.327 19.4697 0.2005 re +f* +1 g +272.112 432.327 6.8245 0.2005 re +f* +0 g +278.937 432.327 67.4417 0.2005 re +f* +1 g +346.379 432.327 12.6453 0.2005 re +f* +0.498 0 0.482 rg +359.024 432.327 29.1043 0.2005 re +f* +1 g +388.128 432.327 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 432.327 23.4841 0.2005 re +f* +0 g +252.643 432.528 19.4697 0.2006 re +f* +1 g +272.112 432.528 6.8245 0.2006 re +f* +0 g +278.937 432.528 67.0402 0.2006 re +f* +1 g +345.977 432.528 12.8461 0.2006 re +f* +0.498 0 0.482 rg +358.823 432.528 29.305 0.2006 re +f* +1 g +388.128 432.528 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 432.528 23.4841 0.2006 re +f* +0 g +252.643 432.728 19.6705 0.2006 re +f* +1 g +272.313 432.728 6.6237 0.2006 re +f* +0 g +278.937 432.728 66.8396 0.2006 re +f* +1 g +345.776 432.728 13.0467 0.2006 re +f* +0.498 0 0.482 rg +358.823 432.728 29.305 0.2006 re +f* +1 g +388.128 432.728 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 432.728 23.2835 0.2006 re +f* +0 g +252.843 432.929 19.4698 0.2006 re +f* +1 g +272.313 432.929 6.6237 0.2006 re +f* +0 g +278.937 432.929 66.4381 0.2006 re +f* +1 g +345.375 432.929 13.4482 0.2006 re +f* +0.498 0 0.482 rg +358.823 432.929 29.305 0.2006 re +f* +1 g +388.128 432.929 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 432.929 23.2835 0.2006 re +f* +0 g +252.843 433.129 19.4698 0.2006 re +f* +1 g +272.313 433.129 6.6237 0.2006 re +f* +0 g +278.937 433.129 66.0366 0.2006 re +f* +1 g +344.973 433.129 13.649 0.2006 re +f* +0.498 0 0.482 rg +358.623 433.129 29.5057 0.2006 re +f* +1 g +388.128 433.129 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 433.129 23.2835 0.2006 re +f* +0 g +253.044 433.33 19.2691 0.2005 re +f* +1 g +272.313 433.33 6.8244 0.2005 re +f* +0 g +279.138 433.33 65.4345 0.2005 re +f* +1 g +344.572 433.33 14.0504 0.2005 re +f* +0.498 0 0.482 rg +358.623 433.33 29.5057 0.2005 re +f* +1 g +388.128 433.33 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 433.33 23.0827 0.2005 re +f* +0 g +253.044 433.53 19.4698 0.2005 re +f* +1 g +272.514 433.53 6.6237 0.2005 re +f* +0 g +279.138 433.53 65.0331 0.2005 re +f* +1 g +344.171 433.53 14.2511 0.2005 re +f* +0.498 0 0.482 rg +358.422 433.53 29.7064 0.2005 re +f* +1 g +388.128 433.53 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 433.53 23.0827 0.2005 re +f* +0 g +253.044 433.731 19.4698 0.2006 re +f* +1 g +272.514 433.731 6.6237 0.2006 re +f* +0 g +279.138 433.731 64.6317 0.2006 re +f* +1 g +343.769 433.731 14.6525 0.2006 re +f* +0.498 0 0.482 rg +358.422 433.731 29.7064 0.2006 re +f* +1 g +388.128 433.731 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 433.731 22.882 0.2006 re +f* +0 g +253.245 433.932 19.2691 0.2006 re +f* +1 g +272.514 433.932 6.6237 0.2006 re +f* +0 g +279.138 433.932 64.2302 0.2006 re +f* +1 g +343.368 433.932 14.8532 0.2006 re +f* +0.498 0 0.482 rg +358.221 433.932 29.9072 0.2006 re +f* +1 g +388.128 433.932 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 433.932 22.882 0.2006 re +f* +0 g +253.245 434.132 19.2691 0.2005 re +f* +1 g +272.514 434.132 6.6237 0.2005 re +f* +0 g +279.138 434.132 63.8288 0.2005 re +f* +1 g +342.966 434.132 15.2546 0.2005 re +f* +0.498 0 0.482 rg +358.221 434.132 29.9072 0.2005 re +f* +1 g +388.128 434.132 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 434.132 22.6813 0.2005 re +f* +0 g +253.445 434.333 19.2691 0.2006 re +f* +1 g +272.715 434.333 6.423 0.2006 re +f* +0 g +279.138 434.333 15.4554 0.2006 re +f* +1 g +294.593 434.333 2.4086 0.2006 re +f* +0 g +297.002 434.333 45.3626 0.2006 re +f* +1 g +342.364 434.333 15.6561 0.2006 re +f* +0.498 0 0.482 rg +358.02 434.333 30.1079 0.2006 re +f* +1 g +388.128 434.333 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 434.333 22.6813 0.2006 re +f* +0 g +253.445 434.533 19.2691 0.2005 re +f* +1 g +272.715 434.533 6.423 0.2005 re +f* +0 g +279.138 434.533 14.6525 0.2005 re +f* +1 g +293.79 434.533 3.8137 0.2005 re +f* +0 g +297.604 434.533 44.359 0.2005 re +f* +1 g +341.963 434.533 16.0575 0.2005 re +f* +0.498 0 0.482 rg +358.02 434.533 30.1079 0.2005 re +f* +1 g +388.128 434.533 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 434.533 22.4805 0.2005 re +f* +0 g +253.646 434.734 19.0683 0.2006 re +f* +1 g +272.715 434.734 6.423 0.2006 re +f* +0 g +279.138 434.734 14.0504 0.2006 re +f* +1 g +293.188 434.734 4.8172 0.2006 re +f* +0 g +298.005 434.734 43.3554 0.2006 re +f* +1 g +341.361 434.734 16.459 0.2006 re +f* +0.498 0 0.482 rg +357.82 434.734 30.3086 0.2006 re +f* +1 g +388.128 434.734 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 434.734 22.4805 0.2006 re +f* +0 g +253.646 434.934 19.269 0.2005 re +f* +1 g +272.915 434.934 6.2223 0.2005 re +f* +0 g +279.138 434.934 13.6489 0.2005 re +f* +1 g +292.786 434.934 5.6202 0.2005 re +f* +0 g +298.407 434.934 42.3518 0.2005 re +f* +1 g +340.758 434.934 17.0611 0.2005 re +f* +0.498 0 0.482 rg +357.82 434.934 30.3086 0.2005 re +f* +1 g +388.128 434.934 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 434.934 22.4805 0.2005 re +f* +0 g +253.847 435.135 19.0683 0.2006 re +f* +1 g +272.915 435.135 6.2223 0.2006 re +f* +0 g +279.138 435.135 13.2475 0.2006 re +f* +1 g +292.385 435.135 6.2223 0.2006 re +f* +0 g +298.607 435.135 41.5489 0.2006 re +f* +1 g +340.156 435.135 17.4626 0.2006 re +f* +0.498 0 0.482 rg +357.619 435.135 30.5093 0.2006 re +f* +1 g +388.128 435.135 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 435.135 22.2799 0.2006 re +f* +0 g +253.847 435.335 19.0683 0.2005 re +f* +1 g +272.915 435.335 6.2223 0.2005 re +f* +0 g +279.138 435.335 13.0468 0.2005 re +f* +1 g +292.184 435.335 6.6237 0.2005 re +f* +0 g +298.808 435.335 40.7461 0.2005 re +f* +1 g +339.554 435.335 17.864 0.2005 re +f* +0.498 0 0.482 rg +357.418 435.335 30.71 0.2005 re +f* +1 g +388.128 435.335 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 435.335 22.2799 0.2005 re +f* +0 g +254.048 435.536 19.0683 0.2006 re +f* +1 g +273.116 435.536 6.0216 0.2006 re +f* +0 g +279.138 435.536 13.0468 0.2006 re +f* +1 g +292.184 435.536 6.8244 0.2006 re +f* +0 g +299.009 435.536 39.7425 0.2006 re +f* +1 g +338.751 435.536 18.6669 0.2006 re +f* +0.498 0 0.482 rg +357.418 435.536 30.71 0.2006 re +f* +1 g +388.128 435.536 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 435.536 22.0791 0.2006 re +f* +0 g +254.048 435.737 19.0683 0.2006 re +f* +1 g +273.116 435.737 6.0216 0.2006 re +f* +0 g +279.138 435.737 12.846 0.2006 re +f* +1 g +291.984 435.737 7.0252 0.2006 re +f* +0 g +299.009 435.737 39.1403 0.2006 re +f* +1 g +338.149 435.737 19.0683 0.2006 re +f* +0.498 0 0.482 rg +357.217 435.737 30.9108 0.2006 re +f* +1 g +388.128 435.737 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 435.737 22.0791 0.2006 re +f* +0 g +254.248 435.937 19.0683 0.2006 re +f* +1 g +273.317 435.937 5.8209 0.2006 re +f* +0 g +279.138 435.937 12.6453 0.2006 re +f* +1 g +291.783 435.937 7.4266 0.2006 re +f* +0 g +299.209 435.937 38.3375 0.2006 re +f* +1 g +337.547 435.937 19.4697 0.2006 re +f* +0.498 0 0.482 rg +357.017 435.937 31.1115 0.2006 re +f* +1 g +388.128 435.937 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 435.937 21.8784 0.2006 re +f* +0 g +254.248 436.138 19.0683 0.2005 re +f* +1 g +273.317 436.138 6.0216 0.2005 re +f* +0 g +279.338 436.138 12.4446 0.2005 re +f* +1 g +291.783 436.138 7.4266 0.2005 re +f* +0 g +299.209 436.138 37.7353 0.2005 re +f* +1 g +336.945 436.138 20.0719 0.2005 re +f* +0.498 0 0.482 rg +357.017 436.138 7.4267 0.2005 re +f* +1 g +364.443 436.138 1.8064 0.2005 re +f* +0.498 0 0.482 rg +366.25 436.138 21.8784 0.2005 re +f* +1 g +388.128 436.138 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 436.138 21.8784 0.2005 re +f* +0 g +254.449 436.338 19.0684 0.2005 re +f* +1 g +273.517 436.338 5.8208 0.2005 re +f* +0 g +279.338 436.338 12.4446 0.2005 re +f* +1 g +291.783 436.338 7.6274 0.2005 re +f* +0 g +299.41 436.338 36.9324 0.2005 re +f* +1 g +336.343 436.338 20.4733 0.2005 re +f* +0.498 0 0.482 rg +356.816 436.338 7.2259 0.2005 re +f* +1 g +364.042 436.338 2.6094 0.2005 re +f* +0.498 0 0.482 rg +366.651 436.338 21.4769 0.2005 re +f* +1 g +388.128 436.338 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 436.338 21.6777 0.2005 re +f* +0 g +254.449 436.539 19.0684 0.2006 re +f* +1 g +273.517 436.539 5.8208 0.2006 re +f* +0 g +279.338 436.539 12.4446 0.2006 re +f* +1 g +291.783 436.539 7.8281 0.2006 re +f* +0 g +299.611 436.539 35.9288 0.2006 re +f* +1 g +335.54 436.539 21.0755 0.2006 re +f* +0.498 0 0.482 rg +356.615 436.539 7.2259 0.2006 re +f* +1 g +363.841 436.539 3.0108 0.2006 re +f* +0.498 0 0.482 rg +366.852 436.539 21.2762 0.2006 re +f* +1 g +388.128 436.539 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 436.539 21.6777 0.2006 re +f* +0 g +254.65 436.739 19.0684 0.2006 re +f* +1 g +273.718 436.739 5.6201 0.2006 re +f* +0 g +279.338 436.739 12.4446 0.2006 re +f* +1 g +291.783 436.739 7.8281 0.2006 re +f* +0 g +299.611 436.739 35.3266 0.2006 re +f* +1 g +334.938 436.739 21.477 0.2006 re +f* +0.498 0 0.482 rg +356.415 436.739 7.2259 0.2006 re +f* +1 g +363.641 436.739 3.4122 0.2006 re +f* +0.498 0 0.482 rg +367.053 436.739 21.0755 0.2006 re +f* +1 g +388.128 436.739 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 436.739 21.4769 0.2006 re +f* +0 g +254.65 436.94 19.0684 0.2006 re +f* +1 g +273.718 436.94 5.6201 0.2006 re +f* +0 g +279.338 436.94 12.4446 0.2006 re +f* +1 g +291.783 436.94 7.8281 0.2006 re +f* +0 g +299.611 436.94 34.7244 0.2006 re +f* +1 g +334.335 436.94 22.0792 0.2006 re +f* +0.498 0 0.482 rg +356.415 436.94 7.0252 0.2006 re +f* +1 g +363.44 436.94 3.8136 0.2006 re +f* +0.498 0 0.482 rg +367.253 436.94 20.8748 0.2006 re +f* +1 g +388.128 436.94 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 436.94 21.2763 0.2006 re +f* +0 g +254.851 437.141 19.0684 0.2005 re +f* +1 g +273.919 437.141 5.4194 0.2005 re +f* +0 g +279.338 437.141 12.4446 0.2005 re +f* +1 g +291.783 437.141 8.0288 0.2005 re +f* +0 g +299.812 437.141 33.9216 0.2005 re +f* +1 g +333.733 437.141 22.4805 0.2005 re +f* +0.498 0 0.482 rg +356.214 437.141 7.226 0.2005 re +f* +1 g +363.44 437.141 3.8136 0.2005 re +f* +0.498 0 0.482 rg +367.253 437.141 20.8748 0.2005 re +f* +1 g +388.128 437.141 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 437.141 21.2763 0.2005 re +f* +0 g +254.851 437.341 19.0684 0.2005 re +f* +1 g +273.919 437.341 5.4194 0.2005 re +f* +0 g +279.338 437.341 12.4446 0.2005 re +f* +1 g +291.783 437.341 8.0288 0.2005 re +f* +0 g +299.812 437.341 33.3194 0.2005 re +f* +1 g +333.131 437.341 22.882 0.2005 re +f* +0.498 0 0.482 rg +356.013 437.341 7.2259 0.2005 re +f* +1 g +363.239 437.341 4.2152 0.2005 re +f* +0.498 0 0.482 rg +367.454 437.341 20.674 0.2005 re +f* +1 g +388.128 437.341 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 437.341 21.0755 0.2005 re +f* +0 g +255.051 437.542 19.0683 0.2006 re +f* +1 g +274.12 437.542 5.4195 0.2006 re +f* +0 g +279.539 437.542 12.2438 0.2006 re +f* +1 g +291.783 437.542 8.0288 0.2006 re +f* +0 g +299.812 437.542 32.5165 0.2006 re +f* +1 g +332.328 437.542 23.4842 0.2006 re +f* +0.498 0 0.482 rg +355.812 437.542 7.4266 0.2006 re +f* +1 g +363.239 437.542 4.2152 0.2006 re +f* +0.498 0 0.482 rg +367.454 437.542 20.674 0.2006 re +f* +1 g +388.128 437.542 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 437.542 21.0755 0.2006 re +f* +0 g +255.252 437.742 18.8676 0.2006 re +f* +1 g +274.12 437.742 5.4195 0.2006 re +f* +0 g +279.539 437.742 12.2438 0.2006 re +f* +1 g +291.783 437.742 8.0288 0.2006 re +f* +0 g +299.812 437.742 31.9144 0.2006 re +f* +1 g +331.726 437.742 23.8856 0.2006 re +f* +0.498 0 0.482 rg +355.612 437.742 7.6273 0.2006 re +f* +1 g +363.239 437.742 4.2152 0.2006 re +f* +0.498 0 0.482 rg +367.454 437.742 20.674 0.2006 re +f* +1 g +388.128 437.742 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 437.742 20.8748 0.2006 re +f* +0 g +255.252 437.943 19.0683 0.2005 re +f* +1 g +274.32 437.943 5.2188 0.2005 re +f* +0 g +279.539 437.943 12.2438 0.2005 re +f* +1 g +291.783 437.943 8.2295 0.2005 re +f* +0 g +300.012 437.943 31.1115 0.2005 re +f* +1 g +331.124 437.943 24.2871 0.2005 re +f* +0.498 0 0.482 rg +355.411 437.943 7.828 0.2005 re +f* +1 g +363.239 437.943 4.2152 0.2005 re +f* +0.498 0 0.482 rg +367.454 437.943 20.674 0.2005 re +f* +1 g +388.128 437.943 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 437.943 20.8748 0.2005 re +f* +0 g +255.453 438.143 19.0684 0.2006 re +f* +1 g +274.521 438.143 5.018 0.2006 re +f* +0 g +279.539 438.143 12.2438 0.2006 re +f* +1 g +291.783 438.143 8.2295 0.2006 re +f* +0 g +300.012 438.143 30.5094 0.2006 re +f* +1 g +330.522 438.143 24.6885 0.2006 re +f* +0.498 0 0.482 rg +355.21 438.143 8.0287 0.2006 re +f* +1 g +363.239 438.143 4.4159 0.2006 re +f* +0.498 0 0.482 rg +367.655 438.143 20.4733 0.2006 re +f* +1 g +388.128 438.143 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 438.143 20.6741 0.2006 re +f* +0 g +255.453 438.344 19.0684 0.2005 re +f* +1 g +274.521 438.344 5.2186 0.2005 re +f* +0 g +279.74 438.344 12.0432 0.2005 re +f* +1 g +291.783 438.344 8.2295 0.2005 re +f* +0 g +300.012 438.344 29.9072 0.2005 re +f* +1 g +329.92 438.344 25.2907 0.2005 re +f* +0.498 0 0.482 rg +355.21 438.344 8.0287 0.2005 re +f* +1 g +363.239 438.344 4.4159 0.2005 re +f* +0.498 0 0.482 rg +367.655 438.344 20.4733 0.2005 re +f* +1 g +388.128 438.344 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 438.344 20.6741 0.2005 re +f* +0 g +255.653 438.544 19.0683 0.2006 re +f* +1 g +274.722 438.544 5.018 0.2006 re +f* +0 g +279.74 438.544 12.2439 0.2006 re +f* +1 g +291.984 438.544 8.0288 0.2006 re +f* +0 g +300.012 438.544 29.3051 0.2006 re +f* +1 g +329.317 438.544 25.692 0.2006 re +f* +0.498 0 0.482 rg +355.01 438.544 8.2295 0.2006 re +f* +1 g +363.239 438.544 4.2152 0.2006 re +f* +0.498 0 0.482 rg +367.454 438.544 20.674 0.2006 re +f* +1 g +388.128 438.544 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 438.544 20.4734 0.2006 re +f* +0 g +255.653 438.745 19.2691 0.2006 re +f* +1 g +274.922 438.745 4.8172 0.2006 re +f* +0 g +279.74 438.745 12.2439 0.2006 re +f* +1 g +291.984 438.745 8.0288 0.2006 re +f* +0 g +300.012 438.745 28.7029 0.2006 re +f* +1 g +328.715 438.745 26.0935 0.2006 re +f* +0.498 0 0.482 rg +354.809 438.745 8.4302 0.2006 re +f* +1 g +363.239 438.745 4.2152 0.2006 re +f* +0.498 0 0.482 rg +367.454 438.745 20.674 0.2006 re +f* +1 g +388.128 438.745 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 438.745 20.2727 0.2006 re +f* +0 g +255.854 438.946 19.0684 0.2005 re +f* +1 g +274.922 438.946 4.8172 0.2005 re +f* +0 g +279.74 438.946 12.4447 0.2005 re +f* +1 g +292.184 438.946 7.828 0.2005 re +f* +0 g +300.012 438.946 28.1007 0.2005 re +f* +1 g +328.113 438.946 26.2943 0.2005 re +f* +0.498 0 0.482 rg +354.407 438.946 8.8316 0.2005 re +f* +1 g +363.239 438.946 4.2152 0.2005 re +f* +0.498 0 0.482 rg +367.454 438.946 20.674 0.2005 re +f* +1 g +388.128 438.946 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 438.946 20.2727 0.2005 re +f* +0 g +256.055 439.146 19.0683 0.2006 re +f* +1 g +275.123 439.146 4.8173 0.2006 re +f* +0 g +279.94 439.146 12.2439 0.2006 re +f* +1 g +292.184 439.146 7.828 0.2006 re +f* +0 g +300.012 439.146 27.4986 0.2006 re +f* +1 g +327.511 439.146 26.6957 0.2006 re +f* +0.498 0 0.482 rg +354.207 439.146 9.0323 0.2006 re +f* +1 g +363.239 439.146 4.2152 0.2006 re +f* +0.498 0 0.482 rg +367.454 439.146 20.674 0.2006 re +f* +1 g +388.128 439.146 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 439.146 20.0719 0.2006 re +f* +0 g +256.055 439.347 19.269 0.2005 re +f* +1 g +275.324 439.347 4.6166 0.2005 re +f* +0 g +279.94 439.347 12.4446 0.2005 re +f* +1 g +292.385 439.347 7.6273 0.2005 re +f* +0 g +300.012 439.347 26.8964 0.2005 re +f* +1 g +326.909 439.347 27.0971 0.2005 re +f* +0.498 0 0.482 rg +354.006 439.347 9.4339 0.2005 re +f* +1 g +363.44 439.347 3.8136 0.2005 re +f* +0.498 0 0.482 rg +367.253 439.347 20.8748 0.2005 re +f* +1 g +388.128 439.347 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 439.347 19.8712 0.2005 re +f* +0 g +256.256 439.547 19.2691 0.2006 re +f* +1 g +275.525 439.547 4.4158 0.2006 re +f* +0 g +279.94 439.547 12.4446 0.2006 re +f* +1 g +292.385 439.547 7.6273 0.2006 re +f* +0 g +300.012 439.547 26.495 0.2006 re +f* +1 g +326.507 439.547 27.2979 0.2006 re +f* +0.498 0 0.482 rg +353.805 439.547 9.8352 0.2006 re +f* +1 g +363.641 439.547 3.4122 0.2006 re +f* +0.498 0 0.482 rg +367.053 439.547 21.0755 0.2006 re +f* +1 g +388.128 439.547 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 439.547 19.8712 0.2006 re +f* +0 g +256.456 439.748 19.0684 0.2006 re +f* +1 g +275.525 439.748 4.6165 0.2006 re +f* +0 g +280.141 439.748 12.4446 0.2006 re +f* +1 g +292.586 439.748 7.2259 0.2006 re +f* +0 g +299.812 439.748 26.0935 0.2006 re +f* +1 g +325.905 439.748 27.6993 0.2006 re +f* +0.498 0 0.482 rg +353.605 439.748 10.2367 0.2006 re +f* +1 g +363.841 439.748 3.2115 0.2006 re +f* +0.498 0 0.482 rg +367.053 439.748 21.0755 0.2006 re +f* +1 g +388.128 439.748 3.613 0.2006 re +f* +0.498 0 0.482 rg +391.741 439.748 19.6705 0.2006 re +f* +0 g +256.456 439.948 19.269 0.2005 re +f* +1 g +275.725 439.948 4.4159 0.2005 re +f* +0 g +280.141 439.948 12.6453 0.2005 re +f* +1 g +292.786 439.948 7.0252 0.2005 re +f* +0 g +299.812 439.948 25.6921 0.2005 re +f* +1 g +325.504 439.948 27.6993 0.2005 re +f* +0.498 0 0.482 rg +353.203 439.948 10.8388 0.2005 re +f* +1 g +364.042 439.948 2.6094 0.2005 re +f* +0.498 0 0.482 rg +366.651 439.948 18.4661 0.2005 re +f* +1 g +385.117 439.948 0.2008 0.2005 re +f* +0.498 0 0.482 rg +385.318 439.948 2.81 0.2005 re +f* +1 g +388.128 439.948 3.613 0.2005 re +f* +0.498 0 0.482 rg +391.741 439.948 19.6705 0.2005 re +f* +0 g +256.657 440.149 19.2691 0.2006 re +f* +1 g +275.926 440.149 4.2151 0.2006 re +f* +0 g +280.141 440.149 12.6453 0.2006 re +f* +1 g +292.786 440.149 7.0252 0.2006 re +f* +0 g +299.812 440.149 25.2907 0.2006 re +f* +1 g +325.102 440.149 27.8999 0.2006 re +f* +0.498 0 0.482 rg +353.002 440.149 11.2403 0.2006 re +f* +1 g +364.243 440.149 2.208 0.2006 re +f* +0.498 0 0.482 rg +366.451 440.149 18.6668 0.2006 re +f* +1 g +385.117 440.149 6.6238 0.2006 re +f* +0.498 0 0.482 rg +391.741 440.149 19.4698 0.2006 re +f* +0 g +256.858 440.35 19.2691 0.2005 re +f* +1 g +276.127 440.35 4.2151 0.2005 re +f* +0 g +280.342 440.35 12.6453 0.2005 re +f* +1 g +292.987 440.35 6.8245 0.2005 re +f* +0 g +299.812 440.35 24.6885 0.2005 re +f* +1 g +324.5 440.35 28.1007 0.2005 re +f* +0.498 0 0.482 rg +352.601 440.35 12.2439 0.2005 re +f* +1 g +364.845 440.35 1.0036 0.2005 re +f* +0.498 0 0.482 rg +365.848 440.35 19.269 0.2005 re +f* +1 g +385.117 440.35 6.6238 0.2005 re +f* +0.498 0 0.482 rg +391.741 440.35 19.2691 0.2005 re +f* +0 g +256.858 440.55 19.4698 0.2006 re +f* +1 g +276.327 440.55 4.0144 0.2006 re +f* +0 g +280.342 440.55 12.6453 0.2006 re +f* +1 g +292.987 440.55 6.6238 0.2006 re +f* +0 g +299.611 440.55 24.4878 0.2006 re +f* +1 g +324.099 440.55 28.3014 0.2006 re +f* +0.498 0 0.482 rg +352.4 440.55 32.7172 0.2006 re +f* +1 g +385.117 440.55 6.6238 0.2006 re +f* +0.498 0 0.482 rg +391.741 440.55 19.2691 0.2006 re +f* +0 g +257.058 440.751 19.4698 0.2005 re +f* +1 g +276.528 440.751 4.0144 0.2005 re +f* +0 g +280.543 440.751 12.6453 0.2005 re +f* +1 g +293.188 440.751 6.423 0.2005 re +f* +0 g +299.611 440.751 24.0863 0.2005 re +f* +1 g +323.697 440.751 28.3014 0.2005 re +f* +0.498 0 0.482 rg +351.999 440.751 58.8108 0.2005 re +f* +0 g +257.259 440.951 19.4697 0.2006 re +f* +1 g +276.729 440.951 3.8138 0.2006 re +f* +0 g +280.543 440.951 12.6453 0.2006 re +f* +1 g +293.188 440.951 6.423 0.2006 re +f* +0 g +299.611 440.951 23.6849 0.2006 re +f* +1 g +323.296 440.951 28.5022 0.2006 re +f* +0.498 0 0.482 rg +351.798 440.951 58.8107 0.2006 re +f* +0 g +257.259 441.152 19.6705 0.2006 re +f* +1 g +276.93 441.152 3.8136 0.2006 re +f* +0 g +280.743 441.152 12.4447 0.2006 re +f* +1 g +293.188 441.152 6.2223 0.2006 re +f* +0 g +299.41 441.152 23.4841 0.2006 re +f* +1 g +322.894 441.152 28.5022 0.2006 re +f* +0.498 0 0.482 rg +351.397 441.152 59.0115 0.2006 re +f* +0 g +257.46 441.352 19.6705 0.2005 re +f* +1 g +277.13 441.352 3.6129 0.2005 re +f* +0 g +280.743 441.352 12.4447 0.2005 re +f* +1 g +293.188 441.352 6.2223 0.2005 re +f* +0 g +299.41 441.352 23.0827 0.2005 re +f* +1 g +322.493 441.352 28.5021 0.2005 re +f* +0.498 0 0.482 rg +350.995 441.352 59.413 0.2005 re +f* +0 g +257.661 441.553 19.6705 0.2006 re +f* +1 g +277.331 441.553 3.613 0.2006 re +f* +0 g +280.944 441.553 12.4446 0.2006 re +f* +1 g +293.389 441.553 5.8208 0.2006 re +f* +0 g +299.209 441.553 23.0828 0.2006 re +f* +1 g +322.292 441.553 28.5022 0.2006 re +f* +0.498 0 0.482 rg +350.794 441.553 59.4129 0.2006 re +f* +0 g +257.661 441.753 19.8713 0.2005 re +f* +1 g +277.532 441.753 3.4122 0.2005 re +f* +0 g +280.944 441.753 12.4446 0.2005 re +f* +1 g +293.389 441.753 5.8208 0.2005 re +f* +0 g +299.209 441.753 22.6813 0.2005 re +f* +1 g +321.891 441.753 28.5022 0.2005 re +f* +0.498 0 0.482 rg +350.393 441.753 59.6137 0.2005 re +f* +0 g +257.861 441.954 19.8712 0.2006 re +f* +1 g +277.732 441.954 3.4123 0.2006 re +f* +0 g +281.145 441.954 12.2439 0.2006 re +f* +1 g +293.389 441.954 5.6201 0.2006 re +f* +0 g +299.009 441.954 22.4806 0.2006 re +f* +1 g +321.489 441.954 28.5021 0.2006 re +f* +0.498 0 0.482 rg +349.991 441.954 60.0152 0.2006 re +f* +0 g +258.062 442.155 19.8712 0.2006 re +f* +1 g +277.933 442.155 3.4122 0.2006 re +f* +0 g +281.346 442.155 12.0432 0.2006 re +f* +1 g +293.389 442.155 5.6201 0.2006 re +f* +0 g +299.009 442.155 22.2799 0.2006 re +f* +1 g +321.289 442.155 28.1007 0.2006 re +f* +0.498 0 0.482 rg +349.389 442.155 60.4166 0.2006 re +f* +0 g +258.263 442.355 19.8712 0.2005 re +f* +1 g +278.134 442.355 3.4123 0.2005 re +f* +0 g +281.546 442.355 11.8424 0.2005 re +f* +1 g +293.389 442.355 5.4194 0.2005 re +f* +0 g +298.808 442.355 22.0791 0.2005 re +f* +1 g +320.887 442.355 28.1007 0.2005 re +f* +0.498 0 0.482 rg +348.988 442.355 60.6173 0.2005 re +f* +0 g +258.263 442.556 20.0719 0.2006 re +f* +1 g +278.335 442.556 3.2116 0.2006 re +f* +0 g +281.546 442.556 11.8424 0.2006 re +f* +1 g +293.389 442.556 5.2187 0.2006 re +f* +0 g +298.607 442.556 22.0792 0.2006 re +f* +1 g +320.687 442.556 27.6992 0.2006 re +f* +0.498 0 0.482 rg +348.386 442.556 61.0187 0.2006 re +f* +0 g +258.463 442.756 20.072 0.2005 re +f* +1 g +278.535 442.756 3.2114 0.2005 re +f* +0 g +281.747 442.756 11.6418 0.2005 re +f* +1 g +293.389 442.756 5.2187 0.2005 re +f* +0 g +298.607 442.756 21.6777 0.2005 re +f* +1 g +320.285 442.756 27.6992 0.2005 re +f* +0.498 0 0.482 rg +347.984 442.756 61.4202 0.2005 re +f* +0 g +258.664 442.957 20.0719 0.2006 re +f* +1 g +278.736 442.957 3.2116 0.2006 re +f* +0 g +281.948 442.957 11.441 0.2006 re +f* +1 g +293.389 442.957 5.018 0.2006 re +f* +0 g +298.407 442.957 21.6777 0.2006 re +f* +1 g +320.084 442.957 27.2978 0.2006 re +f* +0.498 0 0.482 rg +347.382 442.957 61.8216 0.2006 re +f* +0 g +258.865 443.157 20.2727 0.2006 re +f* +1 g +279.138 443.157 3.0108 0.2006 re +f* +0 g +282.148 443.157 11.2403 0.2006 re +f* +1 g +293.389 443.157 4.8173 0.2006 re +f* +0 g +298.206 443.157 21.6776 0.2006 re +f* +1 g +319.884 443.157 26.8965 0.2006 re +f* +0.498 0 0.482 rg +346.78 443.157 62.223 0.2006 re +f* +0 g +258.865 443.358 20.4734 0.2005 re +f* +1 g +279.338 443.358 3.0108 0.2005 re +f* +0 g +282.349 443.358 11.0396 0.2005 re +f* +1 g +293.389 443.358 4.6165 0.2005 re +f* +0 g +298.005 443.358 21.477 0.2005 re +f* +1 g +319.482 443.358 26.6957 0.2005 re +f* +0.498 0 0.482 rg +346.178 443.358 62.6245 0.2005 re +f* +0 g +259.066 443.558 20.4734 0.2006 re +f* +1 g +279.539 443.558 3.0108 0.2006 re +f* +0 g +282.55 443.558 10.8388 0.2006 re +f* +1 g +293.389 443.558 4.4158 0.2006 re +f* +0 g +297.805 443.558 21.477 0.2006 re +f* +1 g +319.281 443.558 26.2942 0.2006 re +f* +0.498 0 0.482 rg +345.576 443.558 63.2267 0.2006 re +f* +0 g +259.266 443.759 20.4733 0.2005 re +f* +1 g +279.74 443.759 3.0108 0.2005 re +f* +0 g +282.75 443.759 10.4375 0.2005 re +f* +1 g +293.188 443.759 4.4158 0.2005 re +f* +0 g +297.604 443.759 21.4769 0.2005 re +f* +1 g +319.081 443.759 25.8928 0.2005 re +f* +0.498 0 0.482 rg +344.973 443.759 63.6281 0.2005 re +f* +0 g +259.467 443.959 20.6741 0.2006 re +f* +1 g +280.141 443.959 2.8101 0.2006 re +f* +0 g +282.951 443.959 10.2367 0.2006 re +f* +1 g +293.188 443.959 4.2151 0.2006 re +f* +0 g +297.403 443.959 21.4769 0.2006 re +f* +1 g +318.88 443.959 25.6921 0.2006 re +f* +0.498 0 0.482 rg +344.572 443.959 63.8288 0.2006 re +f* +0 g +259.668 444.16 20.6741 0.2006 re +f* +1 g +280.342 444.16 2.8101 0.2006 re +f* +0 g +283.152 444.16 9.8352 0.2006 re +f* +1 g +292.987 444.16 4.2152 0.2006 re +f* +0 g +297.202 444.16 21.477 0.2006 re +f* +1 g +318.679 444.16 25.2905 0.2006 re +f* +0.498 0 0.482 rg +343.97 444.16 64.2303 0.2006 re +f* +0 g +259.868 444.361 20.8748 0.2005 re +f* +1 g +280.743 444.361 2.6094 0.2005 re +f* +0 g +283.353 444.361 9.6345 0.2005 re +f* +1 g +292.987 444.361 4.0144 0.2005 re +f* +0 g +297.002 444.361 21.477 0.2005 re +f* +1 g +318.479 444.361 24.8892 0.2005 re +f* +0.498 0 0.482 rg +343.368 444.361 64.6317 0.2005 re +f* +0 g +259.868 444.561 21.0756 0.2005 re +f* +1 g +280.944 444.561 2.81 0.2005 re +f* +0 g +283.754 444.561 9.0324 0.2005 re +f* +1 g +292.786 444.561 4.0144 0.2005 re +f* +0 g +296.801 444.561 21.477 0.2005 re +f* +1 g +318.278 444.561 24.287 0.2005 re +f* +0.498 0 0.482 rg +342.565 444.561 65.2339 0.2005 re +f* +0 g +260.069 444.762 21.2762 0.2006 re +f* +1 g +281.346 444.762 2.6094 0.2006 re +f* +0 g +283.955 444.762 8.6309 0.2006 re +f* +1 g +292.586 444.762 4.0144 0.2006 re +f* +0 g +296.6 444.762 21.4769 0.2006 re +f* +1 g +318.077 444.762 23.8857 0.2006 re +f* +0.498 0 0.482 rg +341.963 444.762 65.836 0.2006 re +f* +0 g +260.27 444.962 21.2763 0.2006 re +f* +1 g +281.546 444.962 2.81 0.2006 re +f* +0 g +284.356 444.962 8.0288 0.2006 re +f* +1 g +292.385 444.962 3.8137 0.2006 re +f* +0 g +296.199 444.962 21.6776 0.2006 re +f* +1 g +317.876 444.962 23.4842 0.2006 re +f* +0.498 0 0.482 rg +341.361 444.962 66.2374 0.2006 re +f* +0 g +260.471 445.163 21.477 0.2006 re +f* +1 g +281.948 445.163 2.6094 0.2006 re +f* +0 g +284.557 445.163 7.6273 0.2006 re +f* +1 g +292.184 445.163 3.8136 0.2006 re +f* +0 g +295.998 445.163 21.6778 0.2006 re +f* +1 g +317.676 445.163 23.0827 0.2006 re +f* +0.498 0 0.482 rg +340.758 445.163 66.6388 0.2006 re +f* +0 g +260.671 445.363 21.6777 0.2005 re +f* +1 g +282.349 445.363 2.8101 0.2005 re +f* +0 g +285.159 445.363 6.6237 0.2005 re +f* +1 g +291.783 445.363 3.8137 0.2005 re +f* +0 g +295.597 445.363 21.8784 0.2005 re +f* +1 g +317.475 445.363 22.6813 0.2005 re +f* +0.498 0 0.482 rg +340.156 445.363 67.0403 0.2005 re +f* +0 g +260.872 445.564 21.8784 0.2006 re +f* +1 g +282.75 445.564 2.8101 0.2006 re +f* +0 g +285.561 445.564 5.6202 0.2006 re +f* +1 g +291.181 445.564 4.0144 0.2006 re +f* +0 g +295.195 445.564 22.0791 0.2006 re +f* +1 g +317.274 445.564 22.2799 0.2006 re +f* +0.498 0 0.482 rg +339.554 445.564 67.4417 0.2006 re +f* +0 g +261.073 445.765 22.0792 0.2005 re +f* +1 g +283.152 445.765 3.0108 0.2005 re +f* +0 g +286.163 445.765 4.2151 0.2005 re +f* +1 g +290.378 445.765 4.4158 0.2005 re +f* +0 g +294.794 445.765 22.2799 0.2005 re +f* +1 g +317.074 445.765 21.8784 0.2005 re +f* +0.498 0 0.482 rg +338.952 445.765 67.8432 0.2005 re +f* +0 g +261.073 445.965 22.4807 0.2006 re +f* +1 g +283.553 445.965 3.6129 0.2006 re +f* +0 g +287.166 445.965 2.2079 0.2006 re +f* +1 g +289.374 445.965 5.018 0.2006 re +f* +0 g +294.392 445.965 22.4805 0.2006 re +f* +1 g +316.873 445.965 21.477 0.2006 re +f* +0.498 0 0.482 rg +338.35 445.965 68.2446 0.2006 re +f* +0 g +261.274 446.166 22.882 0.2006 re +f* +1 g +284.156 446.166 9.8352 0.2006 re +f* +0 g +293.991 446.166 22.6813 0.2006 re +f* +1 g +316.672 446.166 21.0756 0.2006 re +f* +0.498 0 0.482 rg +337.748 446.166 68.646 0.2006 re +f* +0 g +261.474 446.366 23.2834 0.2005 re +f* +1 g +284.758 446.366 8.631 0.2005 re +f* +0 g +293.389 446.366 23.2834 0.2005 re +f* +1 g +316.672 446.366 20.4734 0.2005 re +f* +0.498 0 0.482 rg +337.146 446.366 69.0475 0.2005 re +f* +0 g +261.675 446.567 23.6849 0.2005 re +f* +1 g +285.36 446.567 7.4266 0.2005 re +f* +0 g +292.786 446.567 23.6849 0.2005 re +f* +1 g +316.471 446.567 19.8713 0.2005 re +f* +0.498 0 0.482 rg +336.343 446.567 69.8503 0.2005 re +f* +0 g +261.876 446.767 24.2871 0.2006 re +f* +1 g +286.163 446.767 5.6201 0.2006 re +f* +0 g +291.783 446.767 24.4878 0.2006 re +f* +1 g +316.271 446.767 19.4698 0.2006 re +f* +0.498 0 0.482 rg +335.74 446.767 70.2518 0.2006 re +f* +0 g +262.076 446.968 25.2907 0.2006 re +f* +1 g +287.367 446.968 3.2115 0.2006 re +f* +0 g +290.579 446.968 25.6921 0.2006 re +f* +1 g +316.271 446.968 18.8676 0.2006 re +f* +0.498 0 0.482 rg +335.138 446.968 70.6533 0.2006 re +f* +0 g +262.277 447.168 53.7928 0.2005 re +f* +1 g +316.07 447.168 18.4662 0.2005 re +f* +0.498 0 0.482 rg +334.536 447.168 71.0547 0.2005 re +f* +0 g +262.478 447.369 53.3913 0.2006 re +f* +1 g +315.869 447.369 18.0648 0.2006 re +f* +0.498 0 0.482 rg +333.934 447.369 71.4561 0.2006 re +f* +0 g +262.679 447.57 53.1906 0.2005 re +f* +1 g +315.869 447.57 17.4626 0.2005 re +f* +0.498 0 0.482 rg +333.332 447.57 71.8576 0.2005 re +f* +0 g +262.879 447.77 52.7893 0.2006 re +f* +1 g +315.669 447.77 17.0611 0.2006 re +f* +0.498 0 0.482 rg +332.73 447.77 72.259 0.2006 re +f* +0 g +263.08 447.971 52.5886 0.2006 re +f* +1 g +315.669 447.971 16.4589 0.2006 re +f* +0.498 0 0.482 rg +332.127 447.971 72.6605 0.2006 re +f* +0 g +263.281 448.171 52.187 0.2006 re +f* +1 g +315.468 448.171 16.0576 0.2006 re +f* +0.498 0 0.482 rg +331.525 448.171 73.0618 0.2006 re +f* +0 g +263.481 448.372 51.9863 0.2005 re +f* +1 g +315.468 448.372 15.4554 0.2005 re +f* +0.498 0 0.482 rg +330.923 448.372 73.4633 0.2005 re +f* +0 g +263.682 448.572 51.5849 0.2005 re +f* +1 g +315.267 448.572 15.0539 0.2005 re +f* +0.498 0 0.482 rg +330.321 448.572 73.8648 0.2005 re +f* +0 g +263.883 448.773 51.3842 0.2006 re +f* +1 g +315.267 448.773 14.4518 0.2006 re +f* +0.498 0 0.482 rg +329.719 448.773 74.2662 0.2006 re +f* +0 g +264.084 448.973 50.9828 0.2006 re +f* +1 g +315.066 448.973 14.2511 0.2006 re +f* +0.498 0 0.482 rg +329.317 448.973 74.4669 0.2006 re +f* +0 g +264.284 449.174 50.782 0.2005 re +f* +1 g +315.066 449.174 13.6489 0.2005 re +f* +0.498 0 0.482 rg +328.715 449.174 74.8683 0.2005 re +f* +0 g +264.485 449.375 50.5813 0.2006 re +f* +1 g +315.066 449.375 13.2475 0.2006 re +f* +0.498 0 0.482 rg +328.314 449.375 75.069 0.2006 re +f* +0 g +264.686 449.575 50.1798 0.2005 re +f* +1 g +314.866 449.575 12.8461 0.2005 re +f* +0.498 0 0.482 rg +327.712 449.575 75.2698 0.2005 re +f* +0 g +264.886 449.776 49.9791 0.2006 re +f* +1 g +314.866 449.776 12.4447 0.2006 re +f* +0.498 0 0.482 rg +327.31 449.776 75.4705 0.2006 re +f* +0 g +265.288 449.976 49.5776 0.2006 re +f* +1 g +314.866 449.976 12.0432 0.2006 re +f* +0.498 0 0.482 rg +326.909 449.976 75.6712 0.2006 re +f* +0 g +265.489 450.177 49.1763 0.2005 re +f* +1 g +314.665 450.177 11.8424 0.2005 re +f* +0.498 0 0.482 rg +326.507 450.177 75.8719 0.2005 re +f* +0 g +265.689 450.377 48.9756 0.2005 re +f* +1 g +314.665 450.377 11.4409 0.2005 re +f* +0.498 0 0.482 rg +326.106 450.377 76.0727 0.2005 re +f* +0 g +265.89 450.578 48.7749 0.2006 re +f* +1 g +314.665 450.578 11.0395 0.2006 re +f* +0.498 0 0.482 rg +325.704 450.578 76.2734 0.2006 re +f* +0 g +266.091 450.778 48.3733 0.2006 re +f* +1 g +314.464 450.778 10.8389 0.2006 re +f* +0.498 0 0.482 rg +325.303 450.778 76.4741 0.2006 re +f* +0 g +266.292 450.979 48.1726 0.2006 re +f* +1 g +314.464 450.979 10.4374 0.2006 re +f* +0.498 0 0.482 rg +324.902 450.979 76.6748 0.2006 re +f* +0 g +266.492 451.18 47.9719 0.2005 re +f* +1 g +314.464 451.18 10.2367 0.2005 re +f* +0.498 0 0.482 rg +324.701 451.18 76.6748 0.2005 re +f* +0 g +266.693 451.38 47.7712 0.2005 re +f* +1 g +314.464 451.38 9.8353 0.2005 re +f* +0.498 0 0.482 rg +324.299 451.38 76.6748 0.2005 re +f* +0 g +267.094 451.581 47.169 0.2006 re +f* +1 g +314.263 451.581 9.8353 0.2006 re +f* +0.498 0 0.482 rg +324.099 451.581 76.6748 0.2006 re +f* +0 g +267.295 451.781 46.9683 0.2006 re +f* +1 g +314.263 451.781 9.4338 0.2006 re +f* +0.498 0 0.482 rg +323.697 451.781 76.8755 0.2006 re +f* +0 g +267.496 451.982 46.7676 0.2006 re +f* +1 g +314.263 451.982 9.2331 0.2006 re +f* +0.498 0 0.482 rg +323.497 451.982 76.8755 0.2006 re +f* +0 g +267.697 452.183 46.5669 0.2005 re +f* +1 g +314.263 452.183 9.0324 0.2005 re +f* +0.498 0 0.482 rg +323.296 452.183 76.6748 0.2005 re +f* +0 g +268.098 452.383 46.1654 0.2005 re +f* +1 g +314.263 452.383 8.6309 0.2005 re +f* +0.498 0 0.482 rg +322.894 452.383 76.8756 0.2005 re +f* +0 g +268.299 452.583 45.764 0.2006 re +f* +1 g +314.063 452.583 8.631 0.2006 re +f* +0.498 0 0.482 rg +322.694 452.583 76.8754 0.2006 re +f* +0 g +268.499 452.784 45.5633 0.2006 re +f* +1 g +314.063 452.784 8.4302 0.2006 re +f* +0.498 0 0.482 rg +322.493 452.784 76.8755 0.2006 re +f* +0 g +268.7 452.985 45.3626 0.2005 re +f* +1 g +314.063 452.985 8.2295 0.2005 re +f* +0.498 0 0.482 rg +322.292 452.985 76.6748 0.2005 re +f* +0 g +269.102 453.185 44.9612 0.2006 re +f* +1 g +314.063 453.185 8.0288 0.2006 re +f* +0.498 0 0.482 rg +322.092 453.185 76.6748 0.2006 re +f* +0 g +269.302 453.386 44.7604 0.2005 re +f* +1 g +314.063 453.386 7.828 0.2005 re +f* +0.498 0 0.482 rg +321.891 453.386 76.6748 0.2005 re +f* +0 g +269.503 453.586 44.5597 0.2006 re +f* +1 g +314.063 453.586 7.6274 0.2006 re +f* +0.498 0 0.482 rg +321.69 453.586 76.6747 0.2006 re +f* +0 g +269.904 453.787 44.1583 0.2006 re +f* +1 g +314.063 453.787 7.4266 0.2006 re +f* +0.498 0 0.482 rg +321.489 453.787 76.4741 0.2006 re +f* +0 g +270.105 453.987 43.9576 0.2005 re +f* +1 g +314.063 453.987 7.2259 0.2005 re +f* +0.498 0 0.482 rg +321.289 453.987 76.4741 0.2005 re +f* +0 g +270.306 454.188 43.7568 0.2006 re +f* +1 g +314.063 454.188 7.2259 0.2006 re +f* +0.498 0 0.482 rg +321.289 454.188 76.2734 0.2006 re +f* +0 g +270.707 454.389 43.3554 0.2005 re +f* +1 g +314.063 454.389 7.0252 0.2005 re +f* +0.498 0 0.482 rg +321.088 454.389 76.0726 0.2005 re +f* +0 g +270.908 454.589 43.1547 0.2006 re +f* +1 g +314.063 454.589 6.8244 0.2006 re +f* +0.498 0 0.482 rg +320.887 454.589 76.0727 0.2006 re +f* +0 g +271.109 454.79 42.954 0.2006 re +f* +1 g +314.063 454.79 6.6238 0.2006 re +f* +0.498 0 0.482 rg +320.687 454.79 75.8719 0.2006 re +f* +0 g +271.51 454.99 42.3517 0.2005 re +f* +1 g +313.862 454.99 6.8246 0.2005 re +f* +0.498 0 0.482 rg +320.687 454.99 75.6711 0.2005 re +f* +0 g +271.711 455.191 42.151 0.2006 re +f* +1 g +313.862 455.191 6.6238 0.2006 re +f* +0.498 0 0.482 rg +320.486 455.191 75.6712 0.2006 re +f* +0 g +272.112 455.391 41.7496 0.2005 re +f* +1 g +313.862 455.391 6.4231 0.2005 re +f* +0.498 0 0.482 rg +320.285 455.391 75.4705 0.2005 re +f* +0 g +272.313 455.592 41.5488 0.2006 re +f* +1 g +313.862 455.592 6.4231 0.2006 re +f* +0.498 0 0.482 rg +320.285 455.592 75.2698 0.2006 re +f* +0 g +272.715 455.792 41.1474 0.2005 re +f* +1 g +313.862 455.792 6.2224 0.2005 re +f* +0.498 0 0.482 rg +320.084 455.792 75.069 0.2005 re +f* +0 g +272.915 455.993 41.1475 0.2006 re +f* +1 g +314.063 455.993 6.0216 0.2006 re +f* +0.498 0 0.482 rg +320.084 455.993 74.8683 0.2006 re +f* +0 g +273.116 456.194 40.9468 0.2006 re +f* +1 g +314.063 456.194 5.8208 0.2006 re +f* +0.498 0 0.482 rg +319.884 456.194 74.6677 0.2006 re +f* +0 g +273.517 456.394 40.5453 0.2005 re +f* +1 g +314.063 456.394 5.8208 0.2005 re +f* +0.498 0 0.482 rg +319.884 456.394 74.4669 0.2005 re +f* +0 g +273.919 456.595 40.1439 0.2006 re +f* +1 g +314.063 456.595 5.6202 0.2006 re +f* +0.498 0 0.482 rg +319.683 456.595 74.2661 0.2006 re +f* +0 g +274.12 456.795 39.9432 0.2005 re +f* +1 g +314.063 456.795 5.6202 0.2005 re +f* +0.498 0 0.482 rg +319.683 456.795 32.5165 0.2005 re +f* +1 g +352.2 456.795 1.0036 0.2005 re +f* +0.498 0 0.482 rg +353.203 456.795 40.5453 0.2005 re +f* +0 g +274.521 456.996 39.5417 0.2006 re +f* +1 g +314.063 456.996 5.4194 0.2006 re +f* +0.498 0 0.482 rg +319.482 456.996 32.7173 0.2006 re +f* +1 g +352.2 456.996 1.0036 0.2006 re +f* +0.498 0 0.482 rg +353.203 456.996 40.1439 0.2006 re +f* +0 g +274.722 457.196 39.3411 0.2006 re +f* +1 g +314.063 457.196 5.4194 0.2006 re +f* +0.498 0 0.482 rg +319.482 457.196 32.7173 0.2006 re +f* +1 g +352.2 457.196 1.0036 0.2006 re +f* +0.498 0 0.482 rg +353.203 457.196 39.9431 0.2006 re +f* +0 g +275.123 457.397 38.9396 0.2005 re +f* +1 g +314.063 457.397 5.4194 0.2005 re +f* +0.498 0 0.482 rg +319.482 457.397 32.7173 0.2005 re +f* +1 g +352.2 457.397 1.0036 0.2005 re +f* +0.498 0 0.482 rg +353.203 457.397 39.5417 0.2005 re +f* +0 g +275.324 457.597 38.7389 0.2006 re +f* +1 g +314.063 457.597 5.2187 0.2006 re +f* +0.498 0 0.482 rg +319.281 457.597 32.918 0.2006 re +f* +1 g +352.2 457.597 1.0036 0.2006 re +f* +0.498 0 0.482 rg +353.203 457.597 39.1403 0.2006 re +f* +0 g +275.725 457.798 38.3375 0.2005 re +f* +1 g +314.063 457.798 5.2187 0.2005 re +f* +0.498 0 0.482 rg +319.281 457.798 32.7172 0.2005 re +f* +1 g +351.999 457.798 1.2044 0.2005 re +f* +0.498 0 0.482 rg +353.203 457.798 38.9395 0.2005 re +f* +0 g +276.127 457.999 37.936 0.2006 re +f* +1 g +314.063 457.999 5.2187 0.2006 re +f* +0.498 0 0.482 rg +319.281 457.999 32.7172 0.2006 re +f* +1 g +351.999 457.999 1.2044 0.2006 re +f* +0.498 0 0.482 rg +353.203 457.999 38.5381 0.2006 re +f* +0 g +276.327 458.199 37.7353 0.2006 re +f* +1 g +314.063 458.199 5.0179 0.2006 re +f* +0.498 0 0.482 rg +319.081 458.199 32.918 0.2006 re +f* +1 g +351.999 458.199 1.2044 0.2006 re +f* +0.498 0 0.482 rg +353.203 458.199 38.1367 0.2006 re +f* +0 g +276.729 458.4 37.3339 0.2005 re +f* +1 g +314.063 458.4 5.0179 0.2005 re +f* +0.498 0 0.482 rg +319.081 458.4 32.918 0.2005 re +f* +1 g +351.999 458.4 1.2044 0.2005 re +f* +0.498 0 0.482 rg +353.203 458.4 37.9359 0.2005 re +f* +0 g +277.13 458.6 37.1331 0.2006 re +f* +1 g +314.263 458.6 4.8172 0.2006 re +f* +0.498 0 0.482 rg +319.081 458.6 32.7174 0.2006 re +f* +1 g +351.798 458.6 1.405 0.2006 re +f* +0.498 0 0.482 rg +353.203 458.6 37.5345 0.2006 re +f* +0 g +277.532 458.801 36.7316 0.2005 re +f* +1 g +314.263 458.801 4.8172 0.2005 re +f* +0.498 0 0.482 rg +319.081 458.801 32.7174 0.2005 re +f* +1 g +351.798 458.801 1.405 0.2005 re +f* +0.498 0 0.482 rg +353.203 458.801 37.1331 0.2005 re +f* +0 g +277.732 459.001 36.531 0.2006 re +f* +1 g +314.263 459.001 4.8172 0.2006 re +f* +0.498 0 0.482 rg +319.081 459.001 32.7174 0.2006 re +f* +1 g +351.798 459.001 1.405 0.2006 re +f* +0.498 0 0.482 rg +353.203 459.001 36.9323 0.2006 re +f* +0 g +278.134 459.202 36.1295 0.2006 re +f* +1 g +314.263 459.202 4.8172 0.2006 re +f* +0.498 0 0.482 rg +319.081 459.202 32.7174 0.2006 re +f* +1 g +351.798 459.202 1.405 0.2006 re +f* +0.498 0 0.482 rg +353.203 459.202 36.5309 0.2006 re +f* +0 g +278.535 459.403 35.728 0.2005 re +f* +1 g +314.263 459.403 4.6165 0.2005 re +f* +0.498 0 0.482 rg +318.88 459.403 32.7173 0.2005 re +f* +1 g +351.597 459.403 1.6058 0.2005 re +f* +0.498 0 0.482 rg +353.203 459.403 36.1295 0.2005 re +f* +0 g +278.736 459.603 35.5274 0.2005 re +f* +1 g +314.263 459.603 4.6165 0.2005 re +f* +0.498 0 0.482 rg +318.88 459.603 32.7173 0.2005 re +f* +1 g +351.597 459.603 1.6058 0.2005 re +f* +0.498 0 0.482 rg +353.203 459.603 35.7281 0.2005 re +f* +0 g +279.138 459.804 35.3266 0.2006 re +f* +1 g +314.464 459.804 4.4158 0.2006 re +f* +0.498 0 0.482 rg +318.88 459.804 32.7173 0.2006 re +f* +1 g +351.597 459.804 1.6058 0.2006 re +f* +0.498 0 0.482 rg +353.203 459.804 35.3266 0.2006 re +f* +0 g +279.539 460.004 34.9251 0.2006 re +f* +1 g +314.464 460.004 4.4158 0.2006 re +f* +0.498 0 0.482 rg +318.88 460.004 32.7173 0.2006 re +f* +1 g +351.597 460.004 1.6058 0.2006 re +f* +0.498 0 0.482 rg +353.203 460.004 34.9251 0.2006 re +f* +0 g +279.94 460.205 34.5237 0.2006 re +f* +1 g +314.464 460.205 4.4158 0.2006 re +f* +0.498 0 0.482 rg +318.88 460.205 32.5166 0.2006 re +f* +1 g +351.397 460.205 1.8065 0.2006 re +f* +0.498 0 0.482 rg +353.203 460.205 34.7245 0.2006 re +f* +0 g +280.342 460.405 34.1223 0.2005 re +f* +1 g +314.464 460.405 4.4158 0.2005 re +f* +0.498 0 0.482 rg +318.88 460.405 32.5166 0.2005 re +f* +1 g +351.397 460.405 1.8065 0.2005 re +f* +0.498 0 0.482 rg +353.203 460.405 34.323 0.2005 re +f* +0 g +280.743 460.606 33.9217 0.2006 re +f* +1 g +314.665 460.606 4.215 0.2006 re +f* +0.498 0 0.482 rg +318.88 460.606 32.5166 0.2006 re +f* +1 g +351.397 460.606 1.8065 0.2006 re +f* +0.498 0 0.482 rg +353.203 460.606 33.9215 0.2006 re +f* +0 g +281.145 460.806 33.5202 0.2005 re +f* +1 g +314.665 460.806 4.215 0.2005 re +f* +0.498 0 0.482 rg +318.88 460.806 32.3159 0.2005 re +f* +1 g +351.196 460.806 2.0072 0.2005 re +f* +0.498 0 0.482 rg +353.203 460.806 33.5201 0.2005 re +f* +0 g +281.546 461.007 33.1187 0.2006 re +f* +1 g +314.665 461.007 4.215 0.2006 re +f* +0.498 0 0.482 rg +318.88 461.007 32.3159 0.2006 re +f* +1 g +351.196 461.007 2.0072 0.2006 re +f* +0.498 0 0.482 rg +353.203 461.007 33.1186 0.2006 re +f* +0 g +281.948 461.208 32.7173 0.2006 re +f* +1 g +314.665 461.208 4.215 0.2006 re +f* +0.498 0 0.482 rg +318.88 461.208 32.3159 0.2006 re +f* +1 g +351.196 461.208 2.0072 0.2006 re +f* +0.498 0 0.482 rg +353.203 461.208 32.7172 0.2006 re +f* +0 g +282.349 461.408 32.3159 0.2005 re +f* +1 g +314.665 461.408 4.215 0.2005 re +f* +0.498 0 0.482 rg +318.88 461.408 32.1151 0.2005 re +f* +1 g +350.995 461.408 2.208 0.2005 re +f* +0.498 0 0.482 rg +353.203 461.408 32.3158 0.2005 re +f* +0 g +282.75 461.609 32.1151 0.2005 re +f* +1 g +314.866 461.609 4.0144 0.2005 re +f* +0.498 0 0.482 rg +318.88 461.609 32.1151 0.2005 re +f* +1 g +350.995 461.609 2.208 0.2005 re +f* +0.498 0 0.482 rg +353.203 461.609 31.9143 0.2005 re +f* +0 g +283.152 461.809 31.7136 0.2006 re +f* +1 g +314.866 461.809 4.0144 0.2006 re +f* +0.498 0 0.482 rg +318.88 461.809 32.1151 0.2006 re +f* +1 g +350.995 461.809 2.208 0.2006 re +f* +0.498 0 0.482 rg +353.203 461.809 31.5129 0.2006 re +f* +0 g +283.553 462.01 31.3121 0.2006 re +f* +1 g +314.866 462.01 4.0144 0.2006 re +f* +0.498 0 0.482 rg +318.88 462.01 31.9145 0.2006 re +f* +1 g +350.794 462.01 2.4086 0.2006 re +f* +0.498 0 0.482 rg +353.203 462.01 31.1115 0.2006 re +f* +0 g +283.955 462.21 31.1115 0.2005 re +f* +1 g +315.066 462.21 3.8136 0.2005 re +f* +0.498 0 0.482 rg +318.88 462.21 31.9145 0.2005 re +f* +1 g +350.794 462.21 2.4086 0.2005 re +f* +0.498 0 0.482 rg +353.203 462.21 30.7101 0.2005 re +f* +0 g +284.356 462.411 30.7101 0.2006 re +f* +1 g +315.066 462.411 3.8136 0.2006 re +f* +0.498 0 0.482 rg +318.88 462.411 31.9145 0.2006 re +f* +1 g +350.794 462.411 2.4086 0.2006 re +f* +0.498 0 0.482 rg +353.203 462.411 30.1079 0.2006 re +f* +0 g +284.758 462.611 30.5094 0.2005 re +f* +1 g +315.267 462.611 3.6129 0.2005 re +f* +0.498 0 0.482 rg +318.88 462.611 31.7137 0.2005 re +f* +1 g +350.594 462.611 2.6094 0.2005 re +f* +0.498 0 0.482 rg +353.203 462.611 29.7065 0.2005 re +f* +0 g +285.36 462.812 29.9072 0.2006 re +f* +1 g +315.267 462.812 3.6129 0.2006 re +f* +0.498 0 0.482 rg +318.88 462.812 31.7137 0.2006 re +f* +1 g +350.594 462.812 2.6094 0.2006 re +f* +0.498 0 0.482 rg +353.203 462.812 29.305 0.2006 re +f* +0 g +285.761 463.013 29.5058 0.2006 re +f* +1 g +315.267 463.013 3.6129 0.2006 re +f* +0.498 0 0.482 rg +318.88 463.013 31.7137 0.2006 re +f* +1 g +350.594 463.013 2.6094 0.2006 re +f* +0.498 0 0.482 rg +353.203 463.013 28.9035 0.2006 re +f* +0 g +286.163 463.213 29.305 0.2006 re +f* +1 g +315.468 463.213 3.4122 0.2006 re +f* +0.498 0 0.482 rg +318.88 463.213 31.513 0.2006 re +f* +1 g +350.393 463.213 2.8101 0.2006 re +f* +0.498 0 0.482 rg +353.203 463.213 28.5021 0.2006 re +f* +0 g +286.564 463.414 28.9036 0.2005 re +f* +1 g +315.468 463.414 3.6129 0.2005 re +f* +0.498 0 0.482 rg +319.081 463.414 31.3123 0.2005 re +f* +1 g +350.393 463.414 2.8101 0.2005 re +f* +0.498 0 0.482 rg +353.203 463.414 27.9 0.2005 re +f* +0 g +287.166 463.614 28.3014 0.2005 re +f* +1 g +315.468 463.614 3.6129 0.2005 re +f* +0.498 0 0.482 rg +319.081 463.614 31.1116 0.2005 re +f* +1 g +350.192 463.614 3.0108 0.2005 re +f* +0.498 0 0.482 rg +353.203 463.614 27.4985 0.2005 re +f* +0 g +287.568 463.815 28.1008 0.2006 re +f* +1 g +315.669 463.815 3.4121 0.2006 re +f* +0.498 0 0.482 rg +319.081 463.815 31.1116 0.2006 re +f* +1 g +350.192 463.815 3.0108 0.2006 re +f* +0.498 0 0.482 rg +353.203 463.815 27.0971 0.2006 re +f* +0 g +287.969 464.015 27.6994 0.2006 re +f* +1 g +315.669 464.015 3.4121 0.2006 re +f* +0.498 0 0.482 rg +319.081 464.015 30.9108 0.2006 re +f* +1 g +349.991 464.015 3.2116 0.2006 re +f* +0.498 0 0.482 rg +353.203 464.015 26.495 0.2006 re +f* +0 g +288.571 464.216 27.2978 0.2005 re +f* +1 g +315.869 464.216 3.2115 0.2005 re +f* +0.498 0 0.482 rg +319.081 464.216 30.9108 0.2005 re +f* +1 g +349.991 464.216 3.2116 0.2005 re +f* +0.498 0 0.482 rg +353.203 464.216 26.0935 0.2005 re +f* +0 g +288.973 464.416 26.8964 0.2006 re +f* +1 g +315.869 464.416 3.2115 0.2006 re +f* +0.498 0 0.482 rg +319.081 464.416 30.7102 0.2006 re +f* +1 g +349.791 464.416 3.4122 0.2006 re +f* +0.498 0 0.482 rg +353.203 464.416 25.4914 0.2006 re +f* +0 g +289.575 464.617 26.495 0.2005 re +f* +1 g +316.07 464.617 3.2115 0.2005 re +f* +0.498 0 0.482 rg +319.281 464.617 30.5094 0.2005 re +f* +1 g +349.791 464.617 3.4122 0.2005 re +f* +0.498 0 0.482 rg +353.203 464.617 25.0899 0.2005 re +f* +0 g +289.976 464.818 26.0936 0.2006 re +f* +1 g +316.07 464.818 3.2115 0.2006 re +f* +0.498 0 0.482 rg +319.281 464.818 30.3086 0.2006 re +f* +1 g +349.59 464.818 3.613 0.2006 re +f* +0.498 0 0.482 rg +353.203 464.818 24.4878 0.2006 re +f* +0 g +290.579 465.018 25.6921 0.2006 re +f* +1 g +316.271 465.018 3.0108 0.2006 re +f* +0.498 0 0.482 rg +319.281 465.018 30.3086 0.2006 re +f* +1 g +349.59 465.018 3.613 0.2006 re +f* +0.498 0 0.482 rg +353.203 465.018 24.0863 0.2006 re +f* +0 g +291.181 465.219 25.0899 0.2005 re +f* +1 g +316.271 465.219 3.0108 0.2005 re +f* +0.498 0 0.482 rg +319.281 465.219 30.1079 0.2005 re +f* +1 g +349.389 465.219 3.8137 0.2005 re +f* +0.498 0 0.482 rg +353.203 465.219 23.4842 0.2005 re +f* +0 g +291.582 465.419 24.8892 0.2005 re +f* +1 g +316.471 465.419 3.0108 0.2005 re +f* +0.498 0 0.482 rg +319.482 465.419 29.9072 0.2005 re +f* +1 g +349.389 465.419 3.8137 0.2005 re +f* +0.498 0 0.482 rg +353.203 465.419 22.882 0.2005 re +f* +0 g +292.184 465.62 24.287 0.2006 re +f* +1 g +316.471 465.62 3.0108 0.2006 re +f* +0.498 0 0.482 rg +319.482 465.62 29.7065 0.2006 re +f* +1 g +349.189 465.62 4.0144 0.2006 re +f* +0.498 0 0.482 rg +353.203 465.62 22.4806 0.2006 re +f* +0 g +292.786 465.82 23.8856 0.2006 re +f* +1 g +316.672 465.82 2.8101 0.2006 re +f* +0.498 0 0.482 rg +319.482 465.82 29.7065 0.2006 re +f* +1 g +349.189 465.82 4.0144 0.2006 re +f* +0.498 0 0.482 rg +353.203 465.82 21.8784 0.2006 re +f* +0 g +293.389 466.021 23.2834 0.2006 re +f* +1 g +316.672 466.021 3.0109 0.2006 re +f* +0.498 0 0.482 rg +319.683 466.021 29.3049 0.2006 re +f* +1 g +348.988 466.021 4.2152 0.2006 re +f* +0.498 0 0.482 rg +353.203 466.021 21.2762 0.2006 re +f* +0 g +293.79 466.222 23.0827 0.2005 re +f* +1 g +316.873 466.222 2.8102 0.2005 re +f* +0.498 0 0.482 rg +319.683 466.222 29.3049 0.2005 re +f* +1 g +348.988 466.222 4.2152 0.2005 re +f* +0.498 0 0.482 rg +353.203 466.222 20.6741 0.2005 re +f* +0 g +294.392 466.422 22.6813 0.2006 re +f* +1 g +317.074 466.422 2.6094 0.2006 re +f* +0.498 0 0.482 rg +319.683 466.422 29.1043 0.2006 re +f* +1 g +348.787 466.422 4.4158 0.2006 re +f* +0.498 0 0.482 rg +353.203 466.422 20.0719 0.2006 re +f* +0 g +295.195 466.623 21.8784 0.2005 re +f* +1 g +317.074 466.623 2.81 0.2005 re +f* +0.498 0 0.482 rg +319.884 466.623 28.7029 0.2005 re +f* +1 g +348.586 466.623 4.6166 0.2005 re +f* +0.498 0 0.482 rg +353.203 466.623 19.4698 0.2005 re +f* +0 g +295.797 466.823 21.477 0.2006 re +f* +1 g +317.274 466.823 2.6093 0.2006 re +f* +0.498 0 0.482 rg +319.884 466.823 28.7029 0.2006 re +f* +1 g +348.586 466.823 4.6166 0.2006 re +f* +0.498 0 0.482 rg +353.203 466.823 18.8676 0.2006 re +f* +0 g +296.399 467.024 20.8748 0.2006 re +f* +1 g +317.274 467.024 2.8101 0.2006 re +f* +0.498 0 0.482 rg +320.084 467.024 28.3014 0.2006 re +f* +1 g +348.386 467.024 4.8173 0.2006 re +f* +0.498 0 0.482 rg +353.203 467.024 18.2654 0.2006 re +f* +0 g +297.002 467.224 20.4734 0.2005 re +f* +1 g +317.475 467.224 2.6094 0.2005 re +f* +0.498 0 0.482 rg +320.084 467.224 28.1007 0.2005 re +f* +1 g +348.185 467.224 5.018 0.2005 re +f* +0.498 0 0.482 rg +353.203 467.224 17.6633 0.2005 re +f* +0 g +297.604 467.425 20.072 0.2005 re +f* +1 g +317.676 467.425 2.6093 0.2005 re +f* +0.498 0 0.482 rg +320.285 467.425 27.9 0.2005 re +f* +1 g +348.185 467.425 5.018 0.2005 re +f* +0.498 0 0.482 rg +353.203 467.425 17.0611 0.2005 re +f* +0 g +298.206 467.625 19.6704 0.2006 re +f* +1 g +317.876 467.625 2.4087 0.2006 re +f* +0.498 0 0.482 rg +320.285 467.625 27.6992 0.2006 re +f* +1 g +347.984 467.625 5.2188 0.2006 re +f* +0.498 0 0.482 rg +353.203 467.625 16.2582 0.2006 re +f* +0 g +299.009 467.826 18.8676 0.2006 re +f* +1 g +317.876 467.826 2.6094 0.2006 re +f* +0.498 0 0.482 rg +320.486 467.826 27.2979 0.2006 re +f* +1 g +347.784 467.826 5.4194 0.2006 re +f* +0.498 0 0.482 rg +353.203 467.826 15.6561 0.2006 re +f* +0 g +299.611 468.027 18.4661 0.2005 re +f* +1 g +318.077 468.027 2.6095 0.2005 re +f* +0.498 0 0.482 rg +320.687 468.027 26.8963 0.2005 re +f* +1 g +347.583 468.027 5.6202 0.2005 re +f* +0.498 0 0.482 rg +353.203 468.027 14.8532 0.2005 re +f* +0 g +300.414 468.227 17.864 0.2006 re +f* +1 g +318.278 468.227 2.4087 0.2006 re +f* +0.498 0 0.482 rg +320.687 468.227 26.8963 0.2006 re +f* +1 g +347.583 468.227 5.6202 0.2006 re +f* +0.498 0 0.482 rg +353.203 468.227 14.2511 0.2006 re +f* +0 g +301.217 468.428 17.2619 0.2005 re +f* +1 g +318.479 468.428 2.4086 0.2005 re +f* +0.498 0 0.482 rg +320.887 468.428 26.495 0.2005 re +f* +1 g +347.382 468.428 5.8209 0.2005 re +f* +0.498 0 0.482 rg +353.203 468.428 13.4482 0.2005 re +f* +0 g +301.819 468.628 16.6597 0.2006 re +f* +1 g +318.479 468.628 2.6094 0.2006 re +f* +0.498 0 0.482 rg +321.088 468.628 26.0935 0.2006 re +f* +1 g +347.181 468.628 6.0216 0.2006 re +f* +0.498 0 0.482 rg +353.203 468.628 12.6453 0.2006 re +f* +0 g +302.622 468.829 16.0576 0.2006 re +f* +1 g +318.679 468.829 2.4086 0.2006 re +f* +0.498 0 0.482 rg +321.088 468.829 25.8927 0.2006 re +f* +1 g +346.981 468.829 6.2224 0.2006 re +f* +0.498 0 0.482 rg +353.203 468.829 11.8424 0.2006 re +f* +0 g +303.425 469.029 15.4553 0.2005 re +f* +1 g +318.88 469.029 2.4087 0.2005 re +f* +0.498 0 0.482 rg +321.289 469.029 25.4914 0.2005 re +f* +1 g +346.78 469.029 6.423 0.2005 re +f* +0.498 0 0.482 rg +353.203 469.029 11.2403 0.2005 re +f* +0 g +304.227 469.23 14.8532 0.2006 re +f* +1 g +319.081 469.23 2.4087 0.2006 re +f* +0.498 0 0.482 rg +321.489 469.23 25.0899 0.2006 re +f* +1 g +346.579 469.23 6.6238 0.2006 re +f* +0.498 0 0.482 rg +353.203 469.23 10.4374 0.2006 re +f* +0 g +305.231 469.43 14.0504 0.2005 re +f* +1 g +319.281 469.43 2.4087 0.2005 re +f* +0.498 0 0.482 rg +321.69 469.43 24.8891 0.2005 re +f* +1 g +346.579 469.43 6.6238 0.2005 re +f* +0.498 0 0.482 rg +353.203 469.43 9.4338 0.2005 re +f* +0 g +306.034 469.631 13.4482 0.2006 re +f* +1 g +319.482 469.631 2.4086 0.2006 re +f* +0.498 0 0.482 rg +321.891 469.631 24.4878 0.2006 re +f* +1 g +346.379 469.631 6.8245 0.2006 re +f* +0.498 0 0.482 rg +353.203 469.631 8.6309 0.2006 re +f* +0 g +306.837 469.832 12.8461 0.2006 re +f* +1 g +319.683 469.832 2.4086 0.2006 re +f* +0.498 0 0.482 rg +322.092 469.832 24.0863 0.2006 re +f* +1 g +346.178 469.832 7.0252 0.2006 re +f* +0.498 0 0.482 rg +353.203 469.832 7.6273 0.2006 re +f* +0 g +307.841 470.032 12.0431 0.2005 re +f* +1 g +319.884 470.032 2.4087 0.2005 re +f* +0.498 0 0.482 rg +322.292 470.032 23.6848 0.2005 re +f* +1 g +345.977 470.032 7.226 0.2005 re +f* +0.498 0 0.482 rg +353.203 470.032 6.8244 0.2005 re +f* +0 g +308.844 470.233 11.2403 0.2006 re +f* +1 g +320.084 470.233 2.4086 0.2006 re +f* +0.498 0 0.482 rg +322.493 470.233 23.2835 0.2006 re +f* +1 g +345.776 470.233 7.4266 0.2006 re +f* +0.498 0 0.482 rg +353.203 470.233 5.6201 0.2006 re +f* +0 g +309.848 470.433 10.4374 0.2005 re +f* +1 g +320.285 470.433 2.4087 0.2005 re +f* +0.498 0 0.482 rg +322.694 470.433 22.6812 0.2005 re +f* +1 g +345.375 470.433 7.8281 0.2005 re +f* +0.498 0 0.482 rg +353.203 470.433 4.6165 0.2005 re +f* +0 g +311.052 470.634 9.4338 0.2006 re +f* +1 g +320.486 470.634 2.4086 0.2006 re +f* +0.498 0 0.482 rg +322.894 470.634 22.2799 0.2006 re +f* +1 g +345.174 470.634 8.0288 0.2006 re +f* +0.498 0 0.482 rg +353.203 470.634 3.6129 0.2006 re +f* +0 g +312.256 470.834 8.4303 0.2005 re +f* +1 g +320.687 470.834 2.4086 0.2005 re +f* +0.498 0 0.482 rg +323.095 470.834 21.8783 0.2005 re +f* +1 g +344.973 470.834 8.2296 0.2005 re +f* +0.498 0 0.482 rg +353.203 470.834 2.4086 0.2005 re +f* +0 g +313.461 471.035 7.6274 0.2006 re +f* +1 g +321.088 471.035 2.2079 0.2006 re +f* +0.498 0 0.482 rg +323.296 471.035 21.477 0.2006 re +f* +1 g +344.773 471.035 8.4302 0.2006 re +f* +0.498 0 0.482 rg +353.203 471.035 1.2043 0.2006 re +f* +0 g +314.665 471.235 6.6237 0.2006 re +f* +1 g +321.289 471.235 2.4086 0.2006 re +f* +0.498 0 0.482 rg +323.697 471.235 20.8748 0.2006 re +f* +0 g +316.271 471.436 5.2187 0.2005 re +f* +1 g +321.489 471.436 2.4086 0.2005 re +f* +0.498 0 0.482 rg +323.898 471.436 20.2727 0.2005 re +f* +0 g +317.676 471.637 4.215 0.2006 re +f* +1 g +321.891 471.637 2.208 0.2006 re +f* +0.498 0 0.482 rg +324.099 471.637 19.8711 0.2006 re +f* +0 g +319.482 471.837 2.6094 0.2006 re +f* +1 g +322.092 471.837 2.4086 0.2006 re +f* +0.498 0 0.482 rg +324.5 471.837 19.0683 0.2006 re +f* +0 g +321.289 472.038 0.8029 0.2005 re +f* +1 g +322.092 472.038 2.6093 0.2005 re +f* +0.498 0 0.482 rg +324.701 472.038 18.6669 0.2005 re +f* +0.498 0 0.482 rg +325.102 472.238 17.864 0.2006 re +f* +0.498 0 0.482 rg +325.504 472.439 17.2619 0.2005 re +f* +0.498 0 0.482 rg +325.905 472.639 16.459 0.2006 re +f* +0.498 0 0.482 rg +326.307 472.84 15.6561 0.2006 re +f* +0.498 0 0.482 rg +326.909 473.041 14.6526 0.2005 re +f* +0.498 0 0.482 rg +327.511 473.241 13.4482 0.2006 re +f* +0.498 0 0.482 rg +328.113 473.442 12.4447 0.2005 re +f* +0.498 0 0.482 rg +328.715 473.642 11.2403 0.2006 re +f* +0.498 0 0.482 rg +329.518 473.843 9.8352 0.2005 re +f* +0.498 0 0.482 rg +330.321 474.043 8.2296 0.2006 re +f* +0.498 0 0.482 rg +331.525 474.244 6.0216 0.2006 re +f* +0.498 0 0.482 rg +333.533 474.445 2.2079 0.2005 re +f* +Q showpage -%%Trailer +pdfEndPage end +%%Trailer +cleartomark +countdictstack +exch sub { end } repeat +restore %%EOF diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd index ce9e14d..ededfa6 100644 --- a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd +++ b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd @@ -19,8 +19,10 @@ use IO::File; my $tag = scalar(@ARGV) ? '.'.shift : ''; use vars qw( $Debug ); -$Debug = 2; #2 will turn on child logging, 3 will log packet contents, - #including potentially compromising information +$Debug = 2; #2 will turn on child logging + #3 will log packet contents,#including passwords + #4 will log receipts of all packets from server including + # keepalives (big!) my $socket = "/usr/local/freeside/selfservice_socket$tag"; my $pid_file = "$socket.pid"; @@ -41,6 +43,7 @@ $SIG{__WARN__} = \&_logmsg; warn "Creating $lock_file\n" if $Debug; open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; +close LOCKFILE; warn "Creating $socket\n" if $Debug; my $uaddr = sockaddr_un($socket); @@ -65,6 +68,9 @@ close PIDFILE; #sub REAPER { $waitedpid = wait; $SIG{CHLD} = \&REAPER; } #$SIG{CHLD} = \&REAPER; +warn "enabling keep alives\n" if $Debug; +nstore_fd( { _packet => '_enable_keepalive' } , \*STDOUT ); + warn "entering main loop\n" if $Debug; my %kids; @@ -101,10 +107,16 @@ while (1) { if ( $handle == \*STDIN ) { - warn "receiving packet from server\n" if $Debug; + warn "receiving packet from server\n" if $Debug > 3; my $packet = fd_retrieve(\*STDIN); my $token = $packet->{'_token'}; + + if ( $token eq '_keepalive' ) { + $undisp = 1; + next; + } + warn "received packet from server with token $token\n". ( $Debug > 2 ? join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) @@ -245,6 +257,9 @@ sub lock_write { #broken on freebsd? #flock(STDOUT, LOCK_EX) or die "FATAL: can't lock write stream: $!"; + #open a new one for each kid to get a unique lock + open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; + flock(LOCKFILE, LOCK_EX) or die "FATAL: can't lock $lock_file: $!"; } diff --git a/fs_signup/FS-SignupClient/cgi/signup-agentselect.html b/fs_signup/FS-SignupClient/cgi/signup-agentselect.html index 2451361..7851c56 100755 --- a/fs_signup/FS-SignupClient/cgi/signup-agentselect.html +++ b/fs_signup/FS-SignupClient/cgi/signup-agentselect.html @@ -1,7 +1,7 @@ <HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD> <BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup form</FONT><BR><BR> <FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT> -<FORM ACTION="<%= $self_url %>" METHOD=POST> +<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true"> <INPUT TYPE="hidden" NAME="magic" VALUE="process"> <INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>"> <INPUT TYPE="hidden" NAME="ss" VALUE=""> @@ -191,5 +191,5 @@ ENDOUT } %> </TABLE> -<BR><BR><INPUT TYPE="submit" VALUE="Signup"> +<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup" > </FORM></BODY></HTML> diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 28dc4c9..fa28bdf 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,6 +1,7 @@ +#!/usr/bin/perl -T #!/usr/bin/perl -Tw # -# $Id: signup.cgi,v 1.29.2.21 2004-01-04 03:52:57 ivan Exp $ +# $Id: signup.cgi,v 1.29.2.22 2004-10-01 01:38:03 ivan Exp $ use strict; use vars qw( @payby $cgi $locales $packages diff --git a/fs_signup/FS-SignupClient/cgi/signup.html b/fs_signup/FS-SignupClient/cgi/signup.html index 2b35d4a..115eee2 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.html +++ b/fs_signup/FS-SignupClient/cgi/signup.html @@ -14,7 +14,7 @@ //--></script> <FONT SIZE=7>ISP Signup form</FONT><BR><BR> <FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT> -<FORM ACTION="<%= $self_url %>" METHOD=POST> +<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true"> <INPUT TYPE="hidden" NAME="magic" VALUE="process"> <INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>"> <INPUT TYPE="hidden" NAME="ss" VALUE=""> @@ -211,5 +211,5 @@ ENDOUT } %> </TABLE> -<BR><BR><INPUT TYPE="submit" VALUE="Signup"> +<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup"> </FORM></BODY></HTML> diff --git a/fs_signup/fs_signup_server b/fs_signup/fs_signup_server deleted file mode 100755 index d6eb4a8..0000000 --- a/fs_signup/fs_signup_server +++ /dev/null @@ -1,289 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_signup_server -# - -use strict; -use vars qw($pid); -use IO::Handle; -use Storable qw(nstore_fd fd_retrieve); -use Tie::RefHash; -use Net::SSH qw(sshopen2); -use FS::UID qw(adminsuidsetup); -use FS::Conf; -use FS::Record qw( qsearch qsearchs ); -use FS::cust_main_county; -use FS::cust_main; -use FS::cust_bill; -use FS::cust_pkg; -use FS::Msgcat qw(gettext); - -use vars qw( $opt $Debug ); - -$Debug = 2; - -my $user = shift or die &usage; -&adminsuidsetup( $user ); - -my $conf = new FS::Conf; - -if ($conf->exists('signup_server-quiet')) { - $FS::cust_bill::quiet = 1; - $FS::cust_pkg::quiet = 1; -} - -#my @payby = qw(CARD PREPAY); -my @payby = $conf->config('signup_server-payby'); -my $smtpmachine = $conf->config('smtpmachine'); - -my $machine = shift or die &usage; - -my $agentnum = shift or die &usage; -my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) or die &usage; -my $pkgpart_href = $agent->pkgpart_hashref; - -my $refnum = shift or die &usage; - -#causing trouble for some folks -#$SIG{CHLD} = sub { wait() }; - -$SIG{HUP} = \&killssh; -$SIG{INT} = \&killssh; -$SIG{QUIT} = \&killssh; -$SIG{TERM} = \&killssh; -$SIG{PIPE} = \&killssh; -sub killssh { kill 'TERM', $pid if $pid; exit; }; - -my($fs_signupd)="/usr/local/sbin/fs_signupd"; - -while (1) { - my($reader,$writer)=(new IO::Handle, new IO::Handle); - #seems to be broken - calling ->flush explicitly# $writer->autoflush(1); - warn "[fs_signup_server] Connecting to $machine...\n" if $Debug; - $pid = sshopen2($machine,$reader,$writer,$fs_signupd); - - my @pops = qsearch('svc_acct_pop',{} ); - my $init_data = { - - #'_protocol' => 'signup', - #'_version' => '0.1', - #'_packet' => 'init' - - 'cust_main_county' => - [ map { $_->hashref } qsearch('cust_main_county', {}) ], - - 'part_pkg' => - [ - #map { $_->hashref } - map { { 'payby' => [ $_->payby ], %{$_->hashref} } } - grep { $_->svcpart('svc_acct') && $pkgpart_href->{ $_->pkgpart } } - qsearch( 'part_pkg', { 'disabled' => '' } ) - ], - - 'agentnum2part_pkg' => - { - map { - my $href = $_->pkgpart_hashref; - $_->agentnum => - [ - map { { 'payby' => [ $_->payby ], %{$_->hashref} } } - grep { $_->svcpart('svc_acct') && $href->{ $_->pkgpart } } - qsearch( 'part_pkg', { 'disabled' => '' } ) - ]; - } qsearch('agent', {} ) - }, - - 'svc_acct_pop' => [ map { $_->hashref } @pops ], - - 'security_phrase' => $conf->exists('security_phrase'), - - 'payby' => [ $conf->config('signup_server-payby') ], - - 'msgcat' => { map { $_=>gettext($_) } qw( - passwords_dont_match invalid_card unknown_card_type not_a - ) }, - - 'statedefault' => $conf->config('statedefault') || 'CA', - - 'countrydefault' => $conf->config('countrydefault') || 'US', - - }; - - warn "[fs_signup_server] Sending init data...\n" if $Debug; - nstore_fd($init_data, $writer) or die "can't send init data: $!"; - $writer->flush; - - warn "[fs_signup_server] Entering main loop...\n" if $Debug; - while (1) { - warn "[fs_signup_server] Reading (waiting for) signup data...\n" if $Debug; - my $signup_data = fd_retrieve($reader); - - if ( $Debug > 1 ) { - warn join('', - map { " $_ => ". $signup_data->{$_}. "\n" } keys %$signup_data ); - } - - warn "[fs_signup_server] Processing signup...\n" if $Debug; - - my $error = ''; - - #things that aren't necessary in base class, but are for signup server - #return "Passwords don't match" - # if $hashref->{'_password'} ne $hashref->{'_password2'} - $error ||= gettext('empty_password') unless $signup_data->{'_password'}; - $error ||= gettext('no_access_number_selected') - unless $signup_data->{'popnum'} || !scalar(@pops); - - #shares some stuff with htdocs/edit/process/cust_main.cgi... take any - # common that are still here and library them. - my $cust_main = new FS::cust_main ( { - #'custnum' => '', - 'agentnum' => $signup_data->{agentnum} || $agentnum, - 'refnum' => $refnum, - - map { $_ => $signup_data->{$_} } qw( - last first ss company address1 address2 city county state zip country - daytime night fax payby payinfo paydate payname referral_custnum comments - ), - - } ); - - $error ||= "Illegal payment type" - unless grep { $_ eq $signup_data->{'payby'} } @payby; - - $cust_main->payinfo($cust_main->daytime) - if $cust_main->payby eq 'LECB' && ! $cust_main->payinfo; - - my @invoicing_list = split( /\s*\,\s*/, $signup_data->{'invoicing_list'} ); - - $signup_data->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/; - my $pkgpart = $1; - - my $part_pkg = - qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } ) - or $error ||= "WARNING: unknown pkgpart: $pkgpart"; - my $svcpart = $part_pkg->svcpart('svc_acct') unless $error; - - my $cust_pkg = new FS::cust_pkg ( { - #later#'custnum' => $custnum, - 'pkgpart' => $signup_data->{'pkgpart'}, - } ); - $error ||= $cust_pkg->check; - - my $svc_acct = new FS::svc_acct ( { - 'svcpart' => $svcpart, - map { $_ => $signup_data->{$_} } - qw( username _password sec_phrase popnum ), - } ); - - my $y = $svc_acct->setdefault; # arguably should be in new method - $error ||= $y unless ref($y); - - $error ||= $svc_acct->check; - - use Tie::RefHash; - tie my %hash, 'Tie::RefHash'; - %hash = ( $cust_pkg => [ $svc_acct ] ); - $error ||= $cust_main->insert( \%hash, \@invoicing_list ); #msgcat - - if ( ! $error && $conf->exists('signup_server-realtime') ) { - - warn "[fs_signup_server] Billing customer...\n" if $Debug; - - my $bill_error = $cust_main->bill; - warn "[fs_signup_server] error billing new customer: $bill_error" - if $bill_error; - - $cust_main->apply_payments; - $cust_main->apply_credits; - - $bill_error = $cust_main->collect; - warn "[fs_signup_server] error collecting from new customer: $bill_error" - if $bill_error; - - if ( $cust_main->balance > 0 ) { - - #this makes sense. credit is "un-doing" the invoice - $cust_main->credit( $cust_main->balance, 'signup server decline' ); - $cust_main->apply_credits; - - #should check list for errors... - #$cust_main->suspend; - $cust_main->cancel; - - $error = '_decline'; - } - } - - warn "[fs_signup_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - next if $error; - - if ( $conf->config('signup_server-email') ) { - warn "[fs_signup_server] Sending email...\n" if $Debug; - - #false laziness w/FS::cust_bill::send & FS::cust_pay::delete - use Mail::Header; - use Mail::Internet 1.44; - use Date::Format; - my $from = $conf->config('invoice_from'); #??? as good as any - $ENV{MAILADDRESS} = $from; - my $header = new Mail::Header ( [ - "From: $from", - "To: ". $conf->config('signup_server-email'), - "Sender: $from", - "Reply-To: $from", - "Date: ". time2str("%a, %d %b %Y %X %z", time), - "Subject: FREESIDE NOTIFICATION: Signup Server", - ] ); - my $body = [ - "This is an automatic message from your Freeside installation\n", - "informing you a customer has signed up via the signup server:\n", - "\n", - 'custnum : '. $cust_main->custnum. "\n", - 'Name : '. $cust_main->last. ", ". $cust_main->first. "\n", - 'Agent : '. $cust_main->agent->agent. "\n", - 'Package : '. $part_pkg->pkg. ' - '. $part_pkg->comment. "\n", - 'Signup Date : '. time2str('%C', time). "\n", - 'Username : '. $svc_acct->username. "\n", - #'Password : '. # config file to turn this on if noment insists - 'Day phone : '. $cust_main->daytime. "\n", - 'Night phone : '. $cust_main->night. "\n", - 'Address : '. $cust_main->address1. "\n", - ( $cust_main->address2 - ? ' '. $cust_main->address2. "\n" - : '' ), - ' '. $cust_main->city. ', '. $cust_main->state. ' '. - $cust_main->zip. "\n", - ( $cust_main->country eq 'US' - ? '' - : ' '. $cust_main->country. "\n" ), - "\n", - ]; - #if ( $cust_main->balance > 0 ) { - # push @$body, - # "This customer has an outstanding balance and has been suspended.\n"; - #} - my $message = new Mail::Internet ( 'Header' => $header, 'Body' => $body ); - $!=0; - $message->smtpsend( Host => $smtpmachine ) - or $message->smtpsend( Host => $smtpmachine, Debug => 1 ) - or warn "[fs_signup_server] can't send email to ". - $conf->config('signup_server-email'). - " via server $smtpmachine with SMTP: $!"; - #end-of-send mail - } - - } - close $writer; - close $reader; - warn "connection to $machine lost! waiting 60 seconds...\n"; - sleep 60; - warn "reconnecting...\n"; -} - -sub usage { - die "Usage:\n\n fs_signup_server user machine agentnum refnum\n"; -} - diff --git a/htetc/global.asa b/htetc/global.asa index 446845b..c362f11 100644 --- a/htetc/global.asa +++ b/htetc/global.asa @@ -11,6 +11,10 @@ use HTML::Entities; use IO::Handle; use IO::File; use Net::Whois::Raw qw(whois); +if ( $] < 5.006 ) { + eval "use Net::Whois::Raw 0.32 qw(whois)"; + die $@ if $@; +} use Business::CreditCard; use String::Approx qw(amatch); use HTML::Widgets::SelectLayers 0.03; diff --git a/htetc/handler.pl b/htetc/handler.pl index 67719b8..aeae380 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -72,6 +72,10 @@ sub handler use IO::Handle; use IO::File; use Net::Whois::Raw qw(whois); + if ( $] < 5.006 ) { + eval "use Net::Whois::Raw 0.32 qw(whois)"; + die $@ if $@; + } use Business::CreditCard; use String::Approx qw(amatch); use HTML::Widgets::SelectLayers 0.03; diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index 180f182..be67338 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -41,9 +41,12 @@ if ( $cgi->param('active') ) { ) or die dbh->errstr; } else { - $sortby = \*pkgpart_sort; + $sortby = sub { $a->pkgpart <=> $b->pkgpart; }; } +my $conf = new FS::Conf; +my $taxclasses = $conf->exists('enable_taxclasses'); + %> <%= header("Package Definition Listing",menubar( 'Main Menu' => $p )) %> <% unless ( $cgi->param('active') ) { %> @@ -55,34 +58,36 @@ if ( $cgi->param('active') ) { <% } %> <%= $total %> package definitions -<% -if ( $cgi->param('showdisabled') ) { - $cgi->param('showdisabled', 0); - print qq!( <a href="!. $cgi->self_url. qq!">hide disabled packages</a> )!; -} else { - $cgi->param('showdisabled', 1); - print qq!( <a href="!. $cgi->self_url. qq!">show disabled packages</a> )!; -} +<% if ( $cgi->param('showdisabled') ) { $cgi->param('showdisabled', 0); %> + ( <a href="<%= $cgi->self_url %>">hide disabled packages</a> ) +<% } else { $cgi->param('showdisabled', 1); %> + ( <a href="<%= $cgi->self_url %>">show disabled packages</a> ) +<% } %> -my $colspan = $cgi->param('showdisabled') ? 2 : 3; -print &table(), <<END; +<% my $colspan = $cgi->param('showdisabled') ? 2 : 3; %> + +<%= &table() %> <TR> - <TH COLSPAN=$colspan>Package</TH> + <TH COLSPAN=<%= $colspan %>>Package</TH> <TH>Comment</TH> -END -print ' <TH><FONT SIZE=-1>Customer<BR>packages</FONT></TH>' - if $cgi->param('active'); -print <<END; +<% if ( $cgi->param('active') ) { %> + <TH><FONT SIZE=-1>Customer<BR>packages</FONT></TH> +<% } %> <TH><FONT SIZE=-1>Freq.</FONT></TH> +<% if ( $taxclasses ) { %> + <TH><FONT SIZE=-1>Taxclass</FONT></TH> +<% } %> <TH><FONT SIZE=-1>Plan</FONT></TH> <TH><FONT SIZE=-1>Data</FONT></TH> <TH>Service</TH> <TH><FONT SIZE=-1>Quan.</FONT></TH> -END -print '<TH><FONT SIZE=-1>Primary</FONT></TH>' - if dbdef->table('pkg_svc')->column('primary_svc'); -print '</TR>'; +<% if ( dbdef->table('pkg_svc')->column('primary_svc') ) { %> + <TH><FONT SIZE=-1>Primary</FONT></TH> +<% } %> + </TR> + +<% foreach my $part_pkg ( sort $sortby @part_pkg ) { my($hashref)=$part_pkg->hashref; my(@pkg_svc)=grep $_->getfield('quantity'), @@ -98,46 +103,49 @@ foreach my $part_pkg ( sort $sortby @part_pkg ) { $plandata = "Setup ". $hashref->{setup}. "<BR>Recur ". $hashref->{recur}; } - print <<END; +%> <TR> - <TD ROWSPAN=$rowspan><A HREF="${p}edit/part_pkg.cgi?$hashref->{pkgpart}">$hashref->{pkgpart}</A></TD> -END - - unless ( $cgi->param('showdisabled') ) { - print "<TD ROWSPAN=$rowspan>"; - print "DISABLED" if $hashref->{disabled}; - print '</TD>'; - } + <TD ROWSPAN=<%= $rowspan %>><A HREF="<%=$p%>edit/part_pkg.cgi?<%= $hashref->{pkgpart} %>"><%= $hashref->{pkgpart} %></A></TD> + +<% unless ( $cgi->param('showdisabled') ) { %> + <TD ROWSPAN=<%= $rowspan %>> + <% if ( $hashref->{disabled} ) { %> + DISABLED + <% } %> + </TD> +<% } %> - print <<END; - <TD ROWSPAN=$rowspan><A HREF="${p}edit/part_pkg.cgi?$hashref->{pkgpart}">$hashref->{pkg}</A></TD> - <TD ROWSPAN=$rowspan>$hashref->{comment}</TD> -END - if ( $cgi->param('active') ) { - print " <TD ROWSPAN=$rowspan>"; - print '<FONT COLOR="#00CC00"><B>'. - $num_active_cust_pkg{$hashref->{'pkgpart'}}. - qq!</B></FONT> <A HREF="${p}search/cust_pkg.cgi?magic=active;pkgpart=$hashref->{pkgpart}">active</A><BR>!; + <TD ROWSPAN=<%= $rowspan %>><A HREF="<%=$p%>edit/part_pkg.cgi?<%= $hashref->{pkgpart} %>"><%= $hashref->{pkg} %></A></TD> + <TD ROWSPAN=<%= $rowspan %>><%= $hashref->{comment} %></TD> + +<% if ( $cgi->param('active') ) { %> + <TD ROWSPAN=<%= $rowspan %>> + <FONT COLOR="#00CC00"><B><%= $num_active_cust_pkg{$hashref->{'pkgpart'}} %></B></FONT> <A HREF="<%=$p%>search/cust_pkg.cgi?magic=active;pkgpart=<%= $hashref->{pkgpart} %>">active</A><BR> + + <% $suspended_sth->execute( $part_pkg->pkgpart ) + or die $suspended_sth->errstr; + my $num_suspended = $suspended_sth->fetchrow_arrayref->[0]; + %> + <FONT COLOR="#FF9900"><B><%= $num_suspended %></B></FONT> <A HREF="<%=$p%>search/cust_pkg.cgi?magic=suspended;pkgpart=<%= $hashref->{pkgpart} %>">suspended</A><BR> + + <% $canceled_sth->execute( $part_pkg->pkgpart ) + or die $canceled_sth->errstr; + my $num_canceled = $canceled_sth->fetchrow_arrayref->[0]; + %> + <FONT COLOR="#FF0000"><B><%= $num_canceled %></B></FONT> <A HREF="<%=$p%>search/cust_pkg.cgi?magic=canceled;pkgpart=<%= $hashref->{pkgpart} %>">canceled</A> + </TD> +<% } %> - $suspended_sth->execute( $part_pkg->pkgpart ) or die $suspended_sth->errstr; - my $num_suspended = $suspended_sth->fetchrow_arrayref->[0]; - print '<FONT COLOR="#FF9900"><B>'. $num_suspended. - qq!</B></FONT> <A HREF="${p}search/cust_pkg.cgi?magic=suspended;pkgpart=$hashref->{pkgpart}">suspended</A><BR>!; + <TD ROWSPAN=<%= $rowspan %>><%= $hashref->{freq} %></TD> - $canceled_sth->execute( $part_pkg->pkgpart ) or die $canceled_sth->errstr; - my $num_canceled = $canceled_sth->fetchrow_arrayref->[0]; - print '<FONT COLOR="#FF0000"><B>'. $num_canceled. - qq!</B></FONT> <A HREF="${p}search/cust_pkg.cgi?magic=canceled;pkgpart=$hashref->{pkgpart}">canceled</A>!; +<% if ( $taxclasses ) { %> + <TD ROWSPAN=<%= $rowspan %>><%= $hashref->{taxclass} || ' ' %></TD> +<% } %> + <TD ROWSPAN=<%= $rowspan %>><%= $hashref->{plan} %></TD> + <TD ROWSPAN=<%= $rowspan %>><%= $plandata %></TD> - print '</TD>'; - } - print <<END; - <TD ROWSPAN=$rowspan>$hashref->{freq}</TD> - <TD ROWSPAN=$rowspan>$hashref->{plan}</TD> - <TD ROWSPAN=$rowspan>$plandata</TD> -END - +<% my($pkg_svc); my($n)=""; foreach $pkg_svc ( @pkg_svc ) { @@ -154,20 +162,11 @@ END print "</TR>\n"; $n="<TR>"; } +%> - print "</TR>"; -} - -$colspan = $cgi->param('showdisabled') ? 8 : 9; -print <<END; + </TR> +<% } %> </TABLE> </BODY> </HTML> -END - -sub pkgpart_sort { - $a->pkgpart <=> $b->pkgpart; -} - -%> diff --git a/httemplate/docs/install.html b/httemplate/docs/install.html index 99b40db..76c3d3b 100644 --- a/httemplate/docs/install.html +++ b/httemplate/docs/install.html @@ -126,7 +126,7 @@ chown freeside /usr/local/etc/freeside/asp-global/ <font size="-1"><pre> cp htetc/global.asa /usr/local/etc/freeside/asp-global/global.asa </pre></font> - <li>Configure Apache for the Global directory and to execute .cgi files using Apache::ASP. For example: + <li>Configure Apache for the Global directory and to execute .cgi files using Apache::ASP. For example, add something like the following to your Apache httpd.conf file, adjusting for your actual paths: <font size="-1"><pre> PerlModule Apache::ASP <Directory /usr/local/apache/htdocs/freeside-asp> @@ -153,7 +153,7 @@ PerlSetVar RequestBinaryRead Off <li> set an appropriate <tt>data_dir</tt>, such as <tt>/usr/local/etc/freeside/masondata</tt> </ul> - <li>Configure Apache to use the <tt>handler.pl</tt> file and to execute .cgi files using HTML::Mason. For example: + <li>Configure Apache to use the <tt>handler.pl</tt> file and to execute .cgi files using HTML::Mason. For example, add something like the following to your Apache httpd.conf file, adjusting for your actual paths: <font size="-1"><pre> PerlModule HTML::Mason <Directory /usr/local/apache/htdocs/freeside-mason> @@ -170,7 +170,7 @@ require "/usr/local/etc/freeside/handler.pl"; </tr> </table> <ul> -<li>Restrict access to this web interface - see the <a href="http://httpd.apache.org/docs/misc/FAQ.html#user-authentication">Apache documentation on user authentication</a>. For example, to configure user authentication with <a href="http://httpd.apache.org/docs/mod/mod_auth.html">mod_auth</a> (flat files): +<li>Restrict access to this web interface - see the <a href="http://httpd.apache.org/docs/misc/FAQ.html#user-authentication">Apache documentation on user authentication</a>. For example, to configure user authentication with <a href="http://httpd.apache.org/docs/mod/mod_auth.html">mod_auth</a> (flat files), add something like the following to your Apache httpd.conf file, adjusting for your actual paths: <pre> <Directory /usr/local/apache/htdocs/freeside-asp> AuthName Freeside diff --git a/httemplate/docs/man/FS/part_export/.cvs_is_on_crack b/httemplate/docs/man/FS/part_export/.cvs_is_on_crack deleted file mode 100644 index e69de29..0000000 --- a/httemplate/docs/man/FS/part_export/.cvs_is_on_crack +++ /dev/null diff --git a/httemplate/docs/upgrade-1.4.2.html b/httemplate/docs/upgrade-1.4.2.html index eb40df8..a246611 100644 --- a/httemplate/docs/upgrade-1.4.2.html +++ b/httemplate/docs/upgrade-1.4.2.html @@ -16,6 +16,7 @@ <li>Install <a href="http://search.cpan.org/search?dist=Crypt-PasswdMD5">Crypt::PasswdMD5</a> <li>Install <a href="http://search.cpan.org/search?dist=Net-Whois-Raw">Net::Whois::Raw</a> <li>CGI.pm minimum version 2.47 is required. You will probably need to install a current CGI.pm from CPAN if you are using Perl 5.005 or earlier. + <li>File::Temp minimum version 0.14 is required. You will probably need to install a currrent File::Temp from CPAN if you are using Perl 5.6 or earlier. <li>If using Apache::ASP, add <code>PerlSetVar RequestBinaryRead Off</code> to your Apache configuration and make sure you are using Apache::ASP minimum version 2.55. <li>Run <code>make aspdocs</code> or <code>make masondocs</code>. <li>Copy <code>aspdocs/</code> or <code>masondocs/</code> to your web server's document space. diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index fc825af..d3da7cc 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -71,7 +71,7 @@ print header("Customer $action", '', ' onUnload="myclose()"'); print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $error, "</FONT>" if $error; -print qq!<FORM ACTION="${p1}process/cust_main.cgi" METHOD=POST NAME="form1">!, +print qq!<FORM ACTION="${p1}process/cust_main.cgi" METHOD=POST NAME="form1" onSubmit="document.form1.submit.disabled=true">!, qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!, qq!Customer # !, ( $custnum ? "<B>$custnum</B>" : " (NEW)" ), @@ -551,7 +551,7 @@ END my $otaker = $cust_main->otaker; print qq!<INPUT TYPE="hidden" NAME="otaker" VALUE="$otaker">!, - qq!<BR><INPUT TYPE="submit" VALUE="!, + qq!<BR><INPUT NAME="submit" TYPE="submit" VALUE="!, $custnum ? "Apply Changes" : "Add Customer", qq!">!, "</FORM></BODY></HTML>", ; diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 683bf9e..21bb3ad 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -1,33 +1,74 @@ -<!-- mason kludge --> -<% - my $part_svc; - my $clone = ''; - if ( $cgi->param('error') ) { #error - $part_svc = new FS::part_svc ( { - map { $_, scalar($cgi->param($_)) } fields('part_svc') - } ); - } elsif ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {#clone - #$cgi->param('clone') =~ /^(\d+)$/ or die "malformed query: $query"; - $part_svc = qsearchs('part_svc', { 'svcpart'=>$1 } ) - or die "unknown svcpart: $1"; - $clone = $part_svc->svcpart; - $part_svc->svcpart(''); - } elsif ( $cgi->keywords ) { #edit - my($query) = $cgi->keywords; - $query =~ /^(\d+)$/ or die "malformed query: $query"; - $part_svc=qsearchs('part_svc', { 'svcpart'=>$1 } ) - or die "unknown svcpart: $1"; - } else { #adding - $part_svc = new FS::part_svc {}; - } - my $action = $part_svc->svcpart ? 'Edit' : 'Add'; - my $hashref = $part_svc->hashref; +<% +my $part_svc; +my $clone = ''; +my $error = ''; +if ( $cgi->param('magic') eq 'process' ) { + + my $svcpart = $cgi->param('svcpart'); + my $old = qsearchs('part_svc', { 'svcpart' => $svcpart }) if $svcpart; + + $cgi->param( 'svc_acct__usergroup', + join(',', $cgi->param('svc_acct__usergroup') ) ); + + my $new = new FS::part_svc ( { + map { + $_, scalar($cgi->param($_)); + # } qw(svcpart svc svcdb) + } ( fields('part_svc'), + map { my $svcdb = $_; + my @fields = fields($svcdb); + push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge + map { ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ) } @fields; + } grep defined( $FS::Record::dbdef->table($_) ), + qw( svc_acct svc_domain svc_forward svc_www svc_broadband ) + ) + } ); + + my %exportnums = + map { $_->exportnum => ( $cgi->param('exportnum'.$_->exportnum) || '') } + qsearch('part_export', {} ); + + if ( $svcpart ) { + $error = $new->replace($old, '1.3-COMPAT', [ 'usergroup' ], \%exportnums ); + } else { + $error = $new->insert( [ 'usergroup' ], \%exportnums ); + $svcpart = $new->getfield('svcpart'); + } + + unless ( $error ) { #no error, redirect + #print $cgi->redirect(popurl(3)."browse/part_svc.cgi"); + print $cgi->redirect("${p}browse/part_svc.cgi"); + myexit; + } + + $part_svc = $new; #?? + #$part_svc = new FS::part_svc ( { + # map { $_, scalar($cgi->param($_)) } fields('part_svc') + #} ); + +} elsif ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {#clone + #$cgi->param('clone') =~ /^(\d+)$/ or die "malformed query: $query"; + $part_svc = qsearchs('part_svc', { 'svcpart'=>$1 } ) + or die "unknown svcpart: $1"; + $clone = $part_svc->svcpart; + $part_svc->svcpart(''); +} elsif ( $cgi->keywords ) { #edit + my($query) = $cgi->keywords; + $query =~ /^(\d+)$/ or die "malformed query: $query"; + $part_svc=qsearchs('part_svc', { 'svcpart'=>$1 } ) + or die "unknown svcpart: $1"; +} else { #adding + $part_svc = new FS::part_svc {}; +} + +my $action = $part_svc->svcpart ? 'Edit' : 'Add'; +my $hashref = $part_svc->hashref; # my $p_svcdb = $part_svc->svcdb || 'svc_acct'; #" onLoad=\"visualize()\"" %> - +<!-- mason kludge --> <%= header("$action Service Definition", menubar( 'Main Menu' => $p, 'View all service definitions' => "${p}browse/part_svc.cgi" @@ -35,8 +76,8 @@ ) %> -<% if ( $cgi->param('error') ) { %> -<FONT SIZE="+1" COLOR="#ff0000">Error: <%= $cgi->param('error') %></FONT> +<% if ( $error ) { %> +<FONT SIZE="+1" COLOR="#ff0000">Error: <%= $error %></FONT> <% } %> <FORM NAME="dummy"> @@ -45,6 +86,7 @@ <BR><BR> Service <INPUT TYPE="text" NAME="svc" VALUE="<%= $hashref->{svc} %>"><BR> Disable new orders <INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"<%= $hashref->{disabled} eq 'Y' ? ' CHECKED' : '' %>><BR> +<INPUT TYPE="hidden" NAME="magic" VALUE="process"> <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%= $hashref->{svcpart} %>"> <BR> Services are items you offer to your customers. @@ -67,6 +109,7 @@ blank <B>slipip</B> as well as a fixed shell something like <B>/bin/true</B> or <% #these might belong somewhere else for other user interfaces #pry need to eventually create stuff that's shared amount UIs +my $conf = new FS::Conf; my %defs = ( 'svc_acct' => { 'dir' => 'Home directory', @@ -87,7 +130,11 @@ my %defs = ( 'quota' => '', '_password' => 'Password', 'gid' => 'GID (when blank, defaults to UID)', - 'shell' => 'Shell (all service definitions should have a default or fixed shell that is present in the <b>shells</b> configuration file)', + 'shell' => { + desc =>'Shell (all service definitions should have a default or fixed shell that is present in the <b>shells</b> configuration file)', + type =>'select', + select_list => [ $conf->config('shells') ], + }, 'finger' => 'GECOS', 'domsvc' => { desc =>'svcnum from svc_domain', @@ -137,8 +184,9 @@ my %defs = ( 'selected_layer' => $hashref->{svcdb} || 'svc_acct', 'options' => \%svcdb, 'form_name' => 'dummy', - 'form_action' => 'process/part_svc.cgi', - 'form_text' => [ qw( svc svcpart ) ], + #'form_action' => 'process/part_svc.cgi', + 'form_action' => 'part_svc.cgi', #self + 'form_text' => [ qw( magic svc svcpart ) ], 'form_checkbox' => [ 'disabled' ], 'layer_callback' => sub { my $layer = shift; @@ -175,10 +223,10 @@ my %defs = ( $part_svc->svcpart($clone) if $clone; #haha, undone below foreach my $field (@fields) { my $part_svc_column = $part_svc->part_svc_column($field); - my $value = $cgi->param('error') + my $value = $error ? $cgi->param("${layer}__${field}") : $part_svc_column->columnvalue; - my $flag = $cgi->param('error') + my $flag = $error ? $cgi->param("${layer}__${field}_flag") : $part_svc_column->columnflag; my $def = $defs{$layer}{$field}; @@ -204,12 +252,20 @@ my %defs = ( if ( $def->{type} eq 'select' ) { $html .= qq!<SELECT NAME="${layer}__${field}">!; $html .= '<OPTION> </OPTION>' unless $value; - foreach my $record ( qsearch( $def->{select_table}, {} ) ) { - my $rvalue = $record->getfield($def->{select_key}); - $html .= qq!<OPTION VALUE="$rvalue"!. - ( $rvalue==$value ? ' SELECTED>' : '>' ). - $record->getfield($def->{select_label}). '</OPTION>'; - } + if ( $def->{select_table} ) { + foreach my $record ( qsearch( $def->{select_table}, {} ) ) { + my $rvalue = $record->getfield($def->{select_key}); + $html .= qq!<OPTION VALUE="$rvalue"!. + ( $rvalue==$value ? ' SELECTED>' : '>' ). + $record->getfield($def->{select_label}). '</OPTION>'; + } #next $record + } else { # select_list + foreach my $item ( @{$def->{select_list}} ) { + $html .= qq!<OPTION VALUE="$item"!. + ( $item eq $value ? ' SELECTED>' : '>' ). + $item. '</OPTION>'; + } #next $item + } #endif $html .= '</SELECT>'; } elsif ( $def->{type} eq 'radius_usergroup_selector' ) { $html .= FS::svc_acct::radius_usergroup_selector( diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi index 718f0e5..cb95ebe 100755 --- a/httemplate/edit/process/cust_main.cgi +++ b/httemplate/edit/process/cust_main.cgi @@ -23,8 +23,6 @@ if ( $payby ) { if defined $cgi->param( $payby. '_paycvv' ); } -$cgi->param('otaker', &getotaker ); - my @invoicing_list = split( /\s*\,\s*/, $cgi->param('invoicing_list') ); push @invoicing_list, 'POST' if $cgi->param('invoicing_list_POST'); $cgi->param('invoicing_list', join(',', @invoicing_list) ); diff --git a/httemplate/edit/process/part_svc.cgi b/httemplate/edit/process/part_svc.cgi deleted file mode 100755 index 859670b..0000000 --- a/httemplate/edit/process/part_svc.cgi +++ /dev/null @@ -1,62 +0,0 @@ -<% - -my $svcpart = $cgi->param('svcpart'); - -my $old = qsearchs('part_svc',{'svcpart'=>$svcpart}) if $svcpart; - -$cgi->param( 'svc_acct__usergroup', - join(',', $cgi->param('svc_acct__usergroup') ) ); - -my $new = new FS::part_svc ( { - map { - $_, scalar($cgi->param($_)); -# } qw(svcpart svc svcdb) - } ( fields('part_svc'), - map { my $svcdb = $_; - my @fields = fields($svcdb); - push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge - map { ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ) } @fields; - } grep defined( $FS::Record::dbdef->table($_) ), - qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ) - ) -} ); - -my $error; -if ( $svcpart ) { - $error = $new->replace($old, '1.3-COMPAT', [ 'usergroup' ] ); -} else { - $error = $new->insert( [ 'usergroup' ] ); - $svcpart=$new->getfield('svcpart'); -} - -if ( $error ) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(2). "part_svc.cgi?". $cgi->query_string ); -} else { - - #false laziness w/ edit/process/agent_type.cgi - foreach my $part_export (qsearch('part_export',{})) { - my $exportnum = $part_export->exportnum; - my $export_svc = qsearchs('export_svc', { - 'exportnum' => $part_export->exportnum, - 'svcpart' => $new->svcpart, - } ); - if ( $export_svc && ! $cgi->param("exportnum". $part_export->exportnum) ) { - $error = $export_svc->delete; - die $error if $error; - } elsif ( $cgi->param("exportnum". $part_export->exportnum) - && ! $export_svc ) { - $export_svc = new FS::export_svc ( { - 'exportnum' => $part_export->exportnum, - 'svcpart' => $new->svcpart, - } ); - $error = $export_svc->insert; - die $error if $error; - } - - } - - print $cgi->redirect(popurl(3)."browse/part_svc.cgi"); -} - -%> diff --git a/httemplate/edit/svc_www.cgi b/httemplate/edit/svc_www.cgi index d2c9ade..e15978f 100644 --- a/httemplate/edit/svc_www.cgi +++ b/httemplate/edit/svc_www.cgi @@ -1,6 +1,8 @@ <!-- mason kludge --> <% +my $conf = new FS::Conf; + my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_www ); if ( $cgi->param('error') ) { $svc_www = new FS::svc_www ( { @@ -53,12 +55,17 @@ if ( $cgi->param('error') ) { } my $action = $svc_www->svcnum ? 'Edit' : 'Add'; -my( %username, %arec ); +my( %svc_acct, %arec ); if ($pkgnum) { - my($u_part_svc,@u_acct_svcparts); - foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) { - push @u_acct_svcparts,$u_part_svc->getfield('svcpart'); + my @u_acct_svcparts; + foreach my $svcpart ( + map { $_->svcpart } qsearch( 'part_svc', { 'svcdb' => 'svc_acct' } ) + ) { + next if $conf->exists('svc_www-usersvc_svcpart') + && ! grep { $svcpart == $_ } + $conf->config('svc_www-usersvc_svcpart'); + push @u_acct_svcparts, $svcpart; } my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum}); @@ -73,7 +80,8 @@ if ($pkgnum) { my($i_cust_svc); foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) { my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')}); - $username{$svc_acct->getfield('svcnum')}=$svc_acct->getfield('username'); + $svc_acct{$svc_acct->getfield('svcnum')}= + $svc_acct->cust_svc->part_svc->svc. ': '. $svc_acct->email; } } } @@ -84,33 +92,60 @@ if ($pkgnum) { push @d_acct_svcparts,$d_part_svc->getfield('svcpart'); } - foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) { - my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum'); - my($acct_svcpart); - foreach $acct_svcpart (@d_acct_svcparts) { - my($i_cust_svc); - foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) { - my($svc_domain)=qsearchs('svc_domain',{'svcnum'=>$i_cust_svc->getfield('svcnum')}); - my $domain_rec; - foreach $domain_rec ( qsearch('domain_record',{ - 'svcnum' => $svc_domain->svcnum, - 'rectype' => 'A' } ), - qsearch('domain_record',{ - 'svcnum' => $svc_domain->svcnum, - 'rectype' => 'CNAME' - } ) ) { - $arec{$domain_rec->recnum} = - $domain_rec->reczone eq '@' - ? $svc_domain->domain - : $domain_rec->reczone. '.'. $svc_domain->domain; + foreach $i_cust_pkg ( qsearch( 'cust_pkg', { 'custnum' => $custnum } ) ) { + my $cust_pkgnum = $i_cust_pkg->pkgnum; + + foreach my $acct_svcpart (@d_acct_svcparts) { + + foreach my $i_cust_svc ( + qsearch( 'cust_svc', { 'pkgnum' => $cust_pkgnum, + 'svcpart' => $acct_svcpart } ) + ) { + my $svc_domain = + qsearchs( 'svc_domain', { 'svcnum' => $i_cust_svc->svcnum } ); + + my $extra_sql = "AND ( rectype = 'A' OR rectype = 'CNAME' )"; + unless ( $conf->exists('svc_www-enable_subdomains') ) { + $extra_sql .= " AND ( reczone = '\@' OR reczone = '". + $svc_domain->domain. ".' )"; + } + + foreach my $domain_rec ( + qsearch( 'domain_record', + { + 'svcnum' => $svc_domain->svcnum, + }, + '', + $extra_sql, + ) + ) { + $arec{$domain_rec->recnum} = $domain_rec->zone; + } + + if ( $conf->exists('svc_www-enable_subdomains') ) { + $arec{'www.'. $svc_domain->domain} = 'www.'. $svc_domain->domain + unless qsearchs( 'domain_record', { + svcnum => $svc_domain->svcnum, + reczone => 'www', + } ) + || qsearchs( 'domain_record', { + svcnum => $svc_domain->svcnum, + reczone => 'www.'.$svc-domain->domain.'.', + } ); } + $arec{'@.'. $svc_domain->domain} = $svc_domain->domain - unless qsearchs('domain_record', { svcnum => $svc_domain->svcnum, - reczone => '@', } ); - $arec{'www.'. $svc_domain->domain} = 'www.'. $svc_domain->domain - unless qsearchs('domain_record', { svcnum => $svc_domain->svcnum, - reczone => 'www', } ); + unless qsearchs('domain_record', { + svcnum => $svc_domain->svcnum, + reczone => '@', + } ) + || qsearchs('domain_record', { + svcnum => $svc_domain->svcnum, + reczone => $svc_domain->domain.'.', + } ); + } + } } @@ -161,9 +196,9 @@ foreach $_ (keys %arec) { print "</SELECT></TD></TR>"; print '<TR><TD ALIGN="right">Username</TD><TD><SELECT NAME="usersvc" SIZE=1>'; -foreach $_ (keys %username) { +foreach $_ (keys %svc_acct) { print "<OPTION", ($_ eq $usersvc) ? " SELECTED" : "", - qq! VALUE="$_">$username{$_}!; + qq! VALUE="$_">$svc_acct{$_}!; } print "</SELECT></TD></TR>"; diff --git a/httemplate/elements/calendar-en.js b/httemplate/elements/calendar-en.js index e9291e1..e9d6a22 100644 --- a/httemplate/elements/calendar-en.js +++ b/httemplate/elements/calendar-en.js @@ -101,8 +101,16 @@ Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)"; Calendar._TT["SEL_DATE"] = "Select date"; Calendar._TT["DRAG_TO_MOVE"] = "Drag to move"; Calendar._TT["PART_TODAY"] = " (today)"; -Calendar._TT["MON_FIRST"] = "Display Monday first"; -Calendar._TT["SUN_FIRST"] = "Display Sunday first"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Display %s first"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + Calendar._TT["CLOSE"] = "Close"; Calendar._TT["TODAY"] = "Today"; Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; @@ -112,3 +120,4 @@ Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Time:"; diff --git a/httemplate/elements/calendar-setup.js b/httemplate/elements/calendar-setup.js index 6f1d7a2..e9ee7ea 100644 --- a/httemplate/elements/calendar-setup.js +++ b/httemplate/elements/calendar-setup.js @@ -19,7 +19,7 @@ * than modifying calendar.js itself). */ -// $Id: calendar-setup.js,v 1.1.2.2 2003-11-07 10:53:36 ivan Exp $ +// $Id: calendar-setup.js,v 1.1.2.3 2004-09-22 11:04:48 ivan Exp $ /** * This function "patches" an input field (or other element) to use a calendar @@ -36,8 +36,8 @@ * ifFormat | date format that will be stored in the input field * daFormat | the date format that will be used to display the date in displayArea * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) - * mondayFirst | (true/false) if true Monday is the first day of week, Sunday otherwise (default: true) - * align | alignment (default: "Bl"); if you don't know what's this see the calendar documentation + * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc. + * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation * range | array with 2 elements. Default: [1900, 2999] -- the range of years available * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID @@ -49,6 +49,11 @@ * date | the date that the calendar will be initially displayed to * showsTime | default: false; if true the calendar will include a time selector * timeFormat | the time format; can be "12" or "24", default is "12" + * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close + * step | configures the step of the years in drop-down boxes; default: 2 + * position | configures the calendar absolute position; default: null + * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible + * showOthers | if "true" (but default: "false") it will show days from other months too * * None of them is required, they all have default values. However, if you * pass none of "inputField", "displayArea" or "button" you'll get a warning @@ -66,8 +71,8 @@ Calendar.setup = function (params) { param_default("singleClick", true); param_default("disableFunc", null); param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined - param_default("mondayFirst", true); - param_default("align", "Bl"); + param_default("firstDay", 0); // defaults to "Sunday" first + param_default("align", "Br"); param_default("range", [1900, 2999]); param_default("weekNumbers", true); param_default("flat", null); @@ -78,6 +83,11 @@ Calendar.setup = function (params) { param_default("date", null); param_default("showsTime", false); param_default("timeFormat", "24"); + param_default("electric", true); + param_default("step", 2); + param_default("position", null); + param_default("cache", false); + param_default("showOthers", false); var tmp = ["inputField", "displayArea", "button"]; for (var i in tmp) { @@ -91,35 +101,36 @@ Calendar.setup = function (params) { } function onSelect(cal) { - if (cal.params.flat) { - if (typeof cal.params.flatCallback == "function") { - cal.params.flatCallback(cal); - } else { + var p = cal.params; + var update = (cal.dateClicked || p.electric); + if (update && p.flat) { + if (typeof p.flatCallback == "function") + p.flatCallback(cal); + else alert("No flatCallback given -- doing nothing."); - } return false; } - if (cal.params.inputField) { - cal.params.inputField.value = cal.date.print(cal.params.ifFormat); + if (update && p.inputField) { + p.inputField.value = cal.date.print(p.ifFormat); + if (typeof p.inputField.onchange == "function") + p.inputField.onchange(); } - if (cal.params.displayArea) { - cal.params.displayArea.innerHTML = cal.date.print(cal.params.daFormat); - } - if (cal.params.singleClick && cal.dateClicked) { + if (update && p.displayArea) + p.displayArea.innerHTML = cal.date.print(p.daFormat); + if (update && p.singleClick && cal.dateClicked) cal.callCloseHandler(); - } - if (typeof cal.params.onUpdate == "function") { - cal.params.onUpdate(cal); - } + if (update && typeof p.onUpdate == "function") + p.onUpdate(cal); }; if (params.flat != null) { - params.flat = document.getElementById(params.flat); + if (typeof params.flat == "string") + params.flat = document.getElementById(params.flat); if (!params.flat) { alert("Calendar.setup:\n Flat specified but can't find parent."); return false; } - var cal = new Calendar(params.mondayFirst, params.date, params.onSelect || onSelect); + var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect); cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.params = params; @@ -137,8 +148,8 @@ Calendar.setup = function (params) { var dateFmt = params.inputField ? params.ifFormat : params.daFormat; var mustCreate = false; var cal = window.calendar; - if (!window.calendar) { - window.calendar = cal = new Calendar(params.mondayFirst, + if (!(cal && params.cache)) { + window.calendar = cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect, params.onClose || function(cal) { cal.hide(); }); @@ -147,8 +158,12 @@ Calendar.setup = function (params) { cal.weekNumbers = params.weekNumbers; mustCreate = true; } else { + if (params.date) + cal.setDate(params.date); cal.hide(); } + cal.showsOtherMonths = params.showOthers; + cal.yearStep = params.step; cal.setRange(params.range[0], params.range[1]); cal.params = params; cal.setDateStatusHandler(params.dateStatusFunc); @@ -157,7 +172,10 @@ Calendar.setup = function (params) { cal.create(); cal.parseDate(dateEl.value || dateEl.innerHTML); cal.refresh(); - cal.showAtElement(params.displayArea || params.inputField, params.align); + if (!params.position) + cal.showAtElement(params.button || params.displayArea || params.inputField, params.align); + else + cal.showAt(params.position[0], params.position[1]); return false; }; }; diff --git a/httemplate/elements/calendar-win2k-2.css b/httemplate/elements/calendar-win2k-2.css index 9727d1b..6001cfa 100644 --- a/httemplate/elements/calendar-win2k-2.css +++ b/httemplate/elements/calendar-win2k-2.css @@ -92,6 +92,13 @@ text-align: right; padding: 2px 4px 2px 2px; } +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} .calendar table .wn { padding: 2px 3px 2px 2px; @@ -185,7 +192,7 @@ /* Combo boxes (menus that display months/years for direct selection) */ -.combo { +.calendar .combo { position: absolute; display: none; width: 4em; @@ -197,21 +204,21 @@ border-bottom: 1px solid #000; border-left: 1px solid #fff; background: #e4d8e0; - font-size: smaller; + font-size: 90%; padding: 1px; } -.combo .label, -.combo .label-IEfix { +.calendar .combo .label, +.calendar .combo .label-IEfix { text-align: center; padding: 1px; } -.combo .label-IEfix { +.calendar .combo .label-IEfix { width: 4em; } -.combo .active { +.calendar .combo .active { background: #d4c8d0; padding: 0px; border-top: 1px solid #000; @@ -220,7 +227,7 @@ border-left: 1px solid #000; } -.combo .hilite { +.calendar .combo .hilite { background: #408; color: #fea; } diff --git a/httemplate/elements/calendar.js b/httemplate/elements/calendar.js index 9503f39..0c88b33 100644 --- a/httemplate/elements/calendar.js +++ b/httemplate/elements/calendar.js @@ -1,7 +1,7 @@ /* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ * ------------------------------------------------------------------ * - * The DHTML Calendar, version 0.9.5 "Your favorite time, bis" + * The DHTML Calendar, version 0.9.6 "Keep cool but don't freeze" * * Details and latest version at: * http://dynarch.com/mishoo/calendar.epl @@ -10,10 +10,10 @@ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ -// $Id: calendar.js,v 1.1.2.2 2003-11-07 10:53:36 ivan Exp $ +// $Id: calendar.js,v 1.1.2.3 2004-09-22 11:04:48 ivan Exp $ /** The Calendar object constructor. */ -Calendar = function (mondayFirst, dateStr, onSelected, onClose) { +Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { // member variables this.activeDiv = null; this.currentDateEl = null; @@ -29,11 +29,13 @@ Calendar = function (mondayFirst, dateStr, onSelected, onClose) { this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"]; this.isPopup = true; this.weekNumbers = true; - this.mondayFirst = mondayFirst; + this.firstDayOfWeek = firstDayOfWeek; // 0 for Sunday, 1 for Monday, etc. + this.showsOtherMonths = false; this.dateStr = dateStr; this.ar_days = null; this.showsTime = false; this.time24 = true; + this.yearStep = 2; // HTML elements this.table = null; this.element = null; @@ -79,6 +81,8 @@ Calendar._C = null; Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) ); +Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); + /// detect Opera browser Calendar.is_opera = /opera/i.test(navigator.userAgent); @@ -97,7 +101,7 @@ Calendar.getAbsolutePos = function(el) { ST = el.scrollTop; var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; if (el.offsetParent) { - var tmp = Calendar.getAbsolutePos(el.offsetParent); + var tmp = this.getAbsolutePos(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } @@ -261,8 +265,13 @@ Calendar.showMonthsCombo = function () { s.display = "block"; if (cd.navtype < 0) s.left = cd.offsetLeft + "px"; - else - s.left = (cd.offsetLeft + cd.offsetWidth - mc.offsetWidth) + "px"; + else { + var mcw = mc.offsetWidth; + if (typeof mcw == "undefined") + // Konqueror brain-dead techniques + mcw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; + } s.top = (cd.offsetTop + cd.offsetHeight) + "px"; }; @@ -294,15 +303,20 @@ Calendar.showYearsCombo = function (fwd) { yr.style.display = "none"; } yr = yr.nextSibling; - Y += fwd ? 2 : -2; + Y += fwd ? cal.yearStep : -cal.yearStep; } if (show) { var s = yc.style; s.display = "block"; if (cd.navtype < 0) s.left = cd.offsetLeft + "px"; - else - s.left = (cd.offsetLeft + cd.offsetWidth - yc.offsetWidth) + "px"; + else { + var ycw = yc.offsetWidth; + if (typeof ycw == "undefined") + // Konqueror brain-dead techniques + ycw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; + } s.top = (cd.offsetTop + cd.offsetHeight) + "px"; } }; @@ -397,9 +411,9 @@ Calendar.tableMouseOver = function (ev) { break; while (count-- > 0) if (decrease) { - if (!(--i in range)) + if (--i < 0) i = range.length - 1; - } else if (!(++i in range)) + } else if ( ++i >= range.length ) i = 0; var newval = range[i]; el.firstChild.data = newval; @@ -474,7 +488,6 @@ Calendar.calDragEnd = function (ev) { cal.dragging = false; with (Calendar) { removeEvent(document, "mousemove", calDragIt); - removeEvent(document, "mouseover", stopEvent); removeEvent(document, "mouseup", calDragEnd); tableMouseUp(ev); } @@ -490,11 +503,12 @@ Calendar.dayMouseDown = function(ev) { cal.activeDiv = el; Calendar._C = cal; if (el.navtype != 300) with (Calendar) { - if (el.navtype == 50) + if (el.navtype == 50) { el._current = el.firstChild.data; + addEvent(document, "mousemove", tableMouseOver); + } else + addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); addClass(el, "hilite active"); - addEvent(document, "mouseover", tableMouseOver); - addEvent(document, "mousemove", tableMouseOver); addEvent(document, "mouseup", tableMouseUp); } else if (cal.isPopup) { cal._dragStart(ev); @@ -525,11 +539,7 @@ Calendar.dayMouseOver = function(ev) { } if (el.ttip) { if (el.ttip.substr(0, 1) == "_") { - var date = null; - with (el.calendar.date) { - date = new Date(getFullYear(), getMonth(), el.caldate); - } - el.ttip = date.print(el.calendar.ttDateFormat) + el.ttip.substr(1); + el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); } el.calendar.tooltips.firstChild.data = el.ttip; } @@ -573,11 +583,12 @@ Calendar.cellClick = function(el, ev) { if (!closing) { cal.currentDateEl = el; } - cal.date.setDate(el.caldate); + cal.date = new Date(el.caldate); date = cal.date; newdate = true; // a date was clicked - cal.dateClicked = true; + if (!(cal.dateClicked = !el.otherMonth)) + cal._init(cal.firstDayOfWeek, date); } else { if (el.navtype == 200) { Calendar.removeClass(el, "hilite"); @@ -644,7 +655,7 @@ Calendar.cellClick = function(el, ev) { } break; case 100: - cal.setMondayFirst(!cal.mondayFirst); + cal.setFirstDayOfWeek(el.fdow); return; case 50: var range = el._range; @@ -653,9 +664,9 @@ Calendar.cellClick = function(el, ev) { if (range[i] == current) break; if (ev && ev.shiftKey) { - if (!(--i in range)) + if (--i < 0) i = range.length - 1; - } else if (!(++i in range)) + } else if ( ++i >= range.length ) i = 0; var newval = range[i]; el.firstChild.data = newval; @@ -824,7 +835,7 @@ Calendar.prototype.create = function (_par) { cell = Calendar.createElement("td", row); cell.className = "time"; cell.colSpan = 2; - cell.innerHTML = " "; + cell.innerHTML = Calendar._TT["TIME"] || " "; cell = Calendar.createElement("td", row); cell.className = "time"; @@ -941,7 +952,7 @@ Calendar.prototype.create = function (_par) { div.appendChild(yr); } - this._init(this.mondayFirst, this.date); + this._init(this.firstDayOfWeek, this.date); parent.appendChild(this.element); }; @@ -975,7 +986,7 @@ Calendar._keyEvent = function(ev) { Calendar.cellClick(cal._nav_now); break; case 27: // KEY esc - act && cal.hide(); + act && cal.callCloseHandler(); break; case 37: // KEY left case 38: // KEY up @@ -1014,7 +1025,7 @@ Calendar._keyEvent = function(ev) { } Calendar.removeClass(el, "selected"); Calendar.addClass(ne, "selected"); - cal.date.setDate(ne.caldate); + cal.date = new Date(ne.caldate); cal.callHandler(); cal.currentDateEl = ne; } @@ -1032,12 +1043,11 @@ Calendar._keyEvent = function(ev) { }; /** - * (RE)Initializes the calendar to the given date and style (if mondayFirst is - * true it makes Monday the first day of week, otherwise the weeks start on - * Sunday. + * (RE)Initializes the calendar to the given date and firstDayOfWeek */ -Calendar.prototype._init = function (mondayFirst, date) { +Calendar.prototype._init = function (firstDayOfWeek, date) { var today = new Date(); + this.table.style.visibility = "hidden"; var year = date.getFullYear(); if (year < this.minYear) { year = this.minYear; @@ -1046,53 +1056,57 @@ Calendar.prototype._init = function (mondayFirst, date) { year = this.maxYear; date.setFullYear(year); } - this.mondayFirst = mondayFirst; + this.firstDayOfWeek = firstDayOfWeek; this.date = new Date(date); var month = date.getMonth(); var mday = date.getDate(); var no_days = date.getMonthDays(); + + // calendar voodoo for computing the first day that would actually be + // displayed in the calendar, even if it's from the previous month. + // WARNING: this is magic. ;-) date.setDate(1); - var wday = date.getDay(); - var MON = mondayFirst ? 1 : 0; - var SAT = mondayFirst ? 5 : 6; - var SUN = mondayFirst ? 6 : 0; - if (mondayFirst) { - wday = (wday > 0) ? (wday - 1) : 6; - } - var iday = 1; + var day1 = (date.getDay() - this.firstDayOfWeek) % 7; + if (day1 < 0) + day1 += 7; + date.setDate(-day1); + date.setDate(date.getDate() + 1); + var row = this.tbody.firstChild; var MN = Calendar._SMN[month]; - var hasToday = ((today.getFullYear() == year) && (today.getMonth() == month)); - var todayDate = today.getDate(); - var week_number = date.getWeekNumber(); var ar_days = new Array(); - for (var i = 0; i < 6; ++i) { - if (iday > no_days) { - row.className = "emptyrow"; - row = row.nextSibling; - continue; - } + var weekend = Calendar._TT["WEEKEND"]; + for (var i = 0; i < 6; ++i, row = row.nextSibling) { var cell = row.firstChild; if (this.weekNumbers) { cell.className = "day wn"; - cell.firstChild.data = week_number; + cell.firstChild.data = date.getWeekNumber(); cell = cell.nextSibling; } - ++week_number; row.className = "daysrow"; - for (var j = 0; j < 7; ++j) { + var hasdays = false; + for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(date.getDate() + 1)) { + var iday = date.getDate(); + var wday = date.getDay(); cell.className = "day"; - if ((!i && j < wday) || iday > no_days) { - // cell.className = "emptycell"; - cell.innerHTML = " "; - cell.disabled = true; - cell = cell.nextSibling; - continue; + var current_month = (date.getMonth() == month); + if (!current_month) { + if (this.showsOtherMonths) { + cell.className += " othermonth"; + cell.otherMonth = true; + } else { + cell.className = "emptycell"; + cell.innerHTML = " "; + cell.disabled = true; + continue; + } + } else { + cell.otherMonth = false; + hasdays = true; } cell.disabled = false; cell.firstChild.data = iday; if (typeof this.getDateStatus == "function") { - date.setDate(iday); var status = this.getDateStatus(date, year, month, iday); if (status === true) { cell.className += " disabled"; @@ -1105,29 +1119,30 @@ Calendar.prototype._init = function (mondayFirst, date) { } if (!cell.disabled) { ar_days[ar_days.length] = cell; - cell.caldate = iday; + cell.caldate = new Date(date); cell.ttip = "_"; - if (iday == mday) { + if (current_month && iday == mday) { cell.className += " selected"; this.currentDateEl = cell; } - if (hasToday && (iday == todayDate)) { + if (date.getFullYear() == today.getFullYear() && + date.getMonth() == today.getMonth() && + iday == today.getDate()) { cell.className += " today"; cell.ttip += Calendar._TT["PART_TODAY"]; } - if (wday == SAT || wday == SUN) { - cell.className += " weekend"; + if (weekend.indexOf(wday.toString()) != -1) { + cell.className += cell.otherMonth ? " oweekend" : " weekend"; } } - ++iday; - ((++wday) ^ 7) || (wday = 0); - cell = cell.nextSibling; } - row = row.nextSibling; + if (!(hasdays || this.showsOtherMonths)) + row.className = "emptyrow"; } this.ar_days = ar_days; this.title.firstChild.data = Calendar._MN[month] + ", " + year; this.onSetTime(); + this.table.style.visibility = "visible"; // PROFILE // this.tooltips.firstChild.data = "Generated in " + ((new Date()) - today) + " ms"; }; @@ -1138,7 +1153,7 @@ Calendar.prototype._init = function (mondayFirst, date) { */ Calendar.prototype.setDate = function (date) { if (!date.equalsTo(this.date)) { - this._init(this.mondayFirst, date); + this._init(this.firstDayOfWeek, date); } }; @@ -1149,12 +1164,12 @@ Calendar.prototype.setDate = function (date) { * should * change. */ Calendar.prototype.refresh = function () { - this._init(this.mondayFirst, this.date); + this._init(this.firstDayOfWeek, this.date); }; -/** Modifies the "mondayFirst" parameter (EU/US style). */ -Calendar.prototype.setMondayFirst = function (mondayFirst) { - this._init(mondayFirst, this.date); +/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ +Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { + this._init(firstDayOfWeek, this.date); this._displayWeekdays(); }; @@ -1282,6 +1297,30 @@ Calendar.prototype.showAtElement = function (el, opts) { this.showAt(p.x, p.y + el.offsetHeight); return true; } + function fixPosition(box) { + if (box.x < 0) + box.x = 0; + if (box.y < 0) + box.y = 0; + var cp = document.createElement("div"); + var s = cp.style; + s.position = "absolute"; + s.right = s.bottom = s.width = s.height = "0px"; + document.body.appendChild(cp); + var br = Calendar.getAbsolutePos(cp); + document.body.removeChild(cp); + if (Calendar.is_ie) { + br.y += document.body.scrollTop; + br.x += document.body.scrollLeft; + } else { + br.y += window.scrollY; + br.x += window.scrollX; + } + var tmp = box.x + box.width - br.x; + if (tmp > 0) box.x -= tmp; + tmp = box.y + box.height - br.y; + if (tmp > 0) box.y -= tmp; + }; this.element.style.display = "block"; Calendar.continuation_for_the_fucking_khtml_browser = function() { var w = self.element.offsetWidth; @@ -1308,6 +1347,10 @@ Calendar.prototype.showAtElement = function (el, opts) { case "r": p.x += el.offsetWidth - w; break; case "l": break; // already there } + p.width = w; + p.height = h + 40; + self.monthsCombo.style.display = "none"; + fixPosition(p); self.showAt(p.x, p.y); }; if (Calendar.is_khtml) @@ -1338,38 +1381,52 @@ Calendar.prototype.parseDate = function (str, fmt) { if (!fmt) { fmt = this.dateFormat; } - var b = []; - fmt.replace(/(%.)/g, function(str, par) { - return b[b.length] = par; - }); + var b = fmt.match(/%./g); var i = 0, j = 0; var hr = 0; var min = 0; for (i = 0; i < a.length; ++i) { - if (b[i] == "%a" || b[i] == "%A") { + if (!a[i]) continue; - } - if (b[i] == "%d" || b[i] == "%e") { + switch (b[i]) { + case "%d": + case "%e": d = parseInt(a[i], 10); - } - if (b[i] == "%m") { + break; + + case "%m": m = parseInt(a[i], 10) - 1; - } - if (b[i] == "%Y" || b[i] == "%y") { + break; + + case "%Y": + case "%y": y = parseInt(a[i], 10); (y < 100) && (y += (y > 29) ? 1900 : 2000); - } - if (b[i] == "%b" || b[i] == "%B") { + break; + + case "%b": + case "%B": for (j = 0; j < 12; ++j) { if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } } - } else if (/%[HIkl]/.test(b[i])) { + break; + + case "%H": + case "%I": + case "%k": + case "%l": hr = parseInt(a[i], 10); - } else if (/%[pP]/.test(b[i])) { + break; + + case "%P": + case "%p": if (/pm/i.test(a[i]) && hr < 12) hr += 12; - } else if (b[i] == "%M") { + break; + + case "%M": min = parseInt(a[i], 10); + break; } } if (y != 0 && m != -1 && d != 0) { @@ -1471,22 +1528,23 @@ Calendar.prototype.hideShowCovered = function () { /** Internal function; it displays the bar with the names of the weekday. */ Calendar.prototype._displayWeekdays = function () { - var MON = this.mondayFirst ? 0 : 1; - var SUN = this.mondayFirst ? 6 : 0; - var SAT = this.mondayFirst ? 5 : 6; + var fdow = this.firstDayOfWeek; var cell = this.firstdayname; + var weekend = Calendar._TT["WEEKEND"]; for (var i = 0; i < 7; ++i) { cell.className = "day name"; - if (!i) { - cell.ttip = this.mondayFirst ? Calendar._TT["SUN_FIRST"] : Calendar._TT["MON_FIRST"]; + var realday = (i + fdow) % 7; + if (i) { + cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]); cell.navtype = 100; cell.calendar = this; + cell.fdow = realday; Calendar._add_evs(cell); } - if (i == SUN || i == SAT) { + if (weekend.indexOf(realday.toString()) != -1) { Calendar.addClass(cell, "weekend"); } - cell.firstChild.data = Calendar._SDN[i + 1 - MON]; + cell.firstChild.data = Calendar._SDN[(i + fdow) % 7]; cell = cell.nextSibling; } }; @@ -1517,7 +1575,6 @@ Calendar.prototype._dragStart = function (ev) { this.yOffs = posY - parseInt(st.top); with (Calendar) { addEvent(document, "mousemove", calDragIt); - addEvent(document, "mouseover", stopEvent); addEvent(document, "mouseup", calDragEnd); } }; @@ -1550,20 +1607,20 @@ Date.prototype.getMonthDays = function(month) { /** Returns the number of day in the year. */ Date.prototype.getDayOfYear = function() { var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); - var then = new Date(this.getFullYear(), 0, 1, 0, 0, 0); + var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); var time = now - then; return Math.floor(time / Date.DAY); }; /** Returns the number of the week in year, as defined in ISO 8601. */ Date.prototype.getWeekNumber = function() { - var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); - var then = new Date(this.getFullYear(), 0, 1, 0, 0, 0); - var time = now - then; - var day = then.getDay(); // 0 means Sunday - if (day == 0) day = 7; - (day > 4) && (day -= 4) || (day += 3); - return Math.round(((time / Date.DAY) + day) / 7); + var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var DoW = d.getDay(); + d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu + var ms = d.valueOf(); // GMT + d.setMonth(0); + d.setDate(4); // Thu in Week 1 + return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; }; /** Checks dates equality (ignores time) */ @@ -1625,17 +1682,34 @@ Date.prototype.print = function (str) { s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) s["%Y"] = y; // year with the century s["%%"] = "%"; // a literal '%' character - var re = Date._msh_formatRegexp; - if (typeof re == "undefined") { - var tmp = ""; - for (var i in s) - tmp += tmp ? ("|" + i) : i; - Date._msh_formatRegexp = re = new RegExp("(" + tmp + ")", 'g'); - } - return str.replace(re, function(match, par) { return s[par]; }); + + var re = /%./g; + if (!Calendar.is_ie5) + return str.replace(re, function (par) { return s[par] || par; }); + + var a = str.match(re); + for (var i = 0; i < a.length; i++) { + var tmp = s[a[i]]; + if (tmp) { + re = new RegExp(a[i], 'g'); + str = str.replace(re, tmp); + } + } + + return str; +}; + +Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; +Date.prototype.setFullYear = function(y) { + var d = new Date(this); + d.__msh_oldSetFullYear(y); + if (d.getMonth() != this.getMonth()) + this.setDate(28); + this.__msh_oldSetFullYear(y); }; // END: DATE OBJECT PATCHES + // global object that remembers the calendar window.calendar = null; diff --git a/httemplate/elements/calendar_stripped.js b/httemplate/elements/calendar_stripped.js index 029496a..6a8e326 100644 --- a/httemplate/elements/calendar_stripped.js +++ b/httemplate/elements/calendar_stripped.js @@ -1,7 +1,7 @@ /* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ * ------------------------------------------------------------------ * - * The DHTML Calendar, version 0.9.5 "Your favorite time, bis" + * The DHTML Calendar, version 0.9.6 "Keep cool but don't freeze" * * Details and latest version at: * http://dynarch.com/mishoo/calendar.epl @@ -9,4 +9,4 @@ * This script is distributed under the GNU Lesser General Public License. * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ - Calendar=function(mondayFirst,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.mondayFirst=mondayFirst;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=Calendar.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){if(Calendar.is_ie){return window.event.srcElement;}else{return ev.currentTarget;}};Calendar.getTargetElement=function(ev){if(Calendar.is_ie){return window.event.srcElement;}else{return ev.target;}};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else s.left=(cd.offsetLeft+cd.offsetWidth-mc.offsetWidth)+"px";s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.firstChild.data=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?2:-2;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else s.left=(cd.offsetLeft+cd.offsetWidth-yc.offsetWidth)+"px";s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(!(--i in range))i=range.length-1;}else if(!(++i in range))i=0;var newval=range[i];el.firstChild.data=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseover",stopEvent);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50)el._current=el.firstChild.data;addClass(el,"hilite active");addEvent(document,"mouseover",tableMouseOver);addEvent(document,"mousemove",tableMouseOver);addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){var date=null;with(el.calendar.date){date=new Date(getFullYear(),getMonth(),el.caldate);}el.ttip=date.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.firstChild.data=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled){return false;}removeClass(el,"hilite");if(el.caldate){removeClass(el.parentNode,"rowhilite");}el.calendar.tooltips.firstChild.data=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}cal.date.setDate(el.caldate);date=cal.date;newdate=true;cal.dateClicked=true;}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=(el.navtype==0)?new Date():new Date(cal.date);cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to <mishoo@infoiasi.ro> to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year<cal.maxYear){date.setFullYear(year+1);setMonth(0);}break;case 2:if(year<cal.maxYear){date.setFullYear(year+1);}break;case 100:cal.setMondayFirst(!cal.mondayFirst);return;case 50:var range=el._range;var current=el.firstChild.data;for(var i=range.length;--i>=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(!(--i in range))i=range.length-1;}else if(!(++i in range))i=0;var newval=range[i];el.firstChild.data=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}}if(newdate){cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;if(text.substr(0,1)!="&"){cell.appendChild(document.createTextNode(text));}else{cell.innerHTML=text;}return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.appendChild(document.createTextNode(Calendar._TT["WK"]));}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=" ";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.appendChild(document.createTextNode(init));part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.appendChild(document.createTextNode(":"));span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML=" ";cal.onSetTime=function(){var hrs=this.date.getHours();var mins=this.date.getMinutes();var pm=(hrs>12);if(pm&&t12)hrs-=12;H.firstChild.data=(hrs<10)?("0"+hrs):hrs;M.firstChild.data=(mins<10)?("0"+mins):mins;if(t12)AP.firstChild.data=pm?"pm":"am";};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.firstChild.data,10);if(t12){if(/pm/i.test(AP.firstChild.data)&&h<12)h+=12;else if(/am/i.test(AP.firstChild.data)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.firstChild.data,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i<Calendar._MN.length;++i){var mn=Calendar.createElement("div");mn.className=Calendar.is_ie?"label-IEfix":"label";mn.month=i;mn.appendChild(document.createTextNode(Calendar._SMN[i]));div.appendChild(mn);}div=Calendar.createElement("div",this.element);this.yearsCombo=div;div.className="combo";for(i=12;i>0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";yr.appendChild(document.createTextNode(""));div.appendChild(yr);}this._init(this.mondayFirst,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){if(!window.calendar){return false;}(Calendar.is_ie)&&(ev=window.event);var cal=window.calendar;var act=(Calendar.is_ie||ev.type=="keypress");if(ev.ctrlKey){switch(ev.keyCode){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(ev.keyCode){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.hide();break;case 37:case 38:case 39:case 40:if(act){var date=cal.date.getDate()-1;var el=cal.currentDateEl;var ne=null;var prev=(ev.keyCode==37)||(ev.keyCode==38);switch(ev.keyCode){case 37:(--date>=0)&&(ne=cal.ar_days[date]);break;case 38:date-=7;(date>=0)&&(ne=cal.ar_days[date]);break;case 39:(++date<cal.ar_days.length)&&(ne=cal.ar_days[date]);break;case 40:date+=7;(date<cal.ar_days.length)&&(ne=cal.ar_days[date]);break;}if(!ne){if(prev){Calendar.cellClick(cal._nav_pm);}else{Calendar.cellClick(cal._nav_nm);}date=(prev)?cal.date.getMonthDays():1;el=cal.currentDateEl;ne=cal.ar_days[date-1];}Calendar.removeClass(el,"selected");Calendar.addClass(ne,"selected");cal.date.setDate(ne.caldate);cal.callHandler();cal.currentDateEl=ne;}break;case 13:if(act){cal.callHandler();cal.hide();}break;default:return false;}return Calendar.stopEvent(ev);};Calendar.prototype._init=function(mondayFirst,date){var today=new Date();var year=date.getFullYear();if(year<this.minYear){year=this.minYear;date.setFullYear(year);}else if(year>this.maxYear){year=this.maxYear;date.setFullYear(year);}this.mondayFirst=mondayFirst;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var wday=date.getDay();var MON=mondayFirst?1:0;var SAT=mondayFirst?5:6;var SUN=mondayFirst?6:0;if(mondayFirst){wday=(wday>0)?(wday-1):6;}var iday=1;var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var hasToday=((today.getFullYear()==year)&&(today.getMonth()==month));var todayDate=today.getDate();var week_number=date.getWeekNumber();var ar_days=new Array();for(var i=0;i<6;++i){if(iday>no_days){row.className="emptyrow";row=row.nextSibling;continue;}var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.firstChild.data=week_number;cell=cell.nextSibling;}++week_number;row.className="daysrow";for(var j=0;j<7;++j){cell.className="day";if((!i&&j<wday)||iday>no_days){cell.innerHTML=" ";cell.disabled=true;cell=cell.nextSibling;continue;}cell.disabled=false;cell.firstChild.data=iday;if(typeof this.getDateStatus=="function"){date.setDate(iday);var status=this.getDateStatus(date,year,month,iday);if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){ar_days[ar_days.length]=cell;cell.caldate=iday;cell.ttip="_";if(iday==mday){cell.className+=" selected";this.currentDateEl=cell;}if(hasToday&&(iday==todayDate)){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(wday==SAT||wday==SUN){cell.className+=" weekend";}}++iday;((++wday)^ 7)||(wday=0);cell=cell.nextSibling;}row=row.nextSibling;}this.ar_days=ar_days;this.title.firstChild.data=Calendar._MN[month]+", "+year;this.onSetTime();};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.mondayFirst,date);}};Calendar.prototype.refresh=function(){this._init(this.mondayFirst,this.date);};Calendar.prototype.setMondayFirst=function(mondayFirst){this._init(mondayFirst,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window.calendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){if(!window.calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window.calendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window.calendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "r":p.x+=el.offsetWidth-w;break;case "l":break;}self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){var y=0;var m=-1;var d=0;var a=str.split(/\W+/);if(!fmt){fmt=this.dateFormat;}var b=[];fmt.replace(/(%.)/g,function(str,par){return b[b.length]=par;});var i=0,j=0;var hr=0;var min=0;for(i=0;i<a.length;++i){if(b[i]=="%a"||b[i]=="%A"){continue;}if(b[i]=="%d"||b[i]=="%e"){d=parseInt(a[i],10);}if(b[i]=="%m"){m=parseInt(a[i],10)-1;}if(b[i]=="%Y"||b[i]=="%y"){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}if(b[i]=="%b"||b[i]=="%B"){for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}}else if(/%[HIkl]/.test(b[i])){hr=parseInt(a[i],10);}else if(/%[pP]/.test(b[i])){if(/pm/i.test(a[i])&&hr<12)hr+=12;}else if(b[i]=="%M"){min=parseInt(a[i],10);}}if(y!=0&&m!=-1&&d!=0){this.setDate(new Date(y,m,d,hr,min,0));return;}y=0;m=-1;d=0;for(i=0;i<a.length;++i){if(a[i].search(/[a-zA-Z]+/)!=-1){var t=-1;for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){t=j;break;}}if(t!=-1){if(m!=-1){d=m+1;}m=t;}}else if(parseInt(a[i],10)<=12&&m==-1){m=a[i]-1;}else if(parseInt(a[i],10)>31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0){var today=new Date();y=today.getFullYear();}if(m!=-1&&d!=0){this.setDate(new Date(y,m,d,hr,min,0));}};Calendar.prototype.hideShowCovered=function(){var self=this;Calendar.continuation_for_the_fucking_khtml_browser=function(){function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=self.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(self.hidden||(CX1>EX2)||(CX2<EX1)||(CY1>EY2)||(CY2<EY1)){if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility=cc.__msh_save_visibility;}else{if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility="hidden";}}}};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype._displayWeekdays=function(){var MON=this.mondayFirst?0:1;var SUN=this.mondayFirst?6:0;var SAT=this.mondayFirst?5:6;var cell=this.firstdayname;for(var i=0;i<7;++i){cell.className="day name";if(!i){cell.ttip=this.mondayFirst?Calendar._TT["SUN_FIRST"]:Calendar._TT["MON_FIRST"];cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}if(i==SUN||i==SAT){Calendar.addClass(cell,"weekend");}cell.firstChild.data=Calendar._SDN[i+1-MON];cell=cell.nextSibling;}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none";};Calendar.prototype._dragStart=function(ev){if(this.dragging){return;}this.dragging=true;var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posY=ev.clientY+window.scrollY;posX=ev.clientX+window.scrollX;}var st=this.element.style;this.xOffs=posX-parseInt(st.left);this.yOffs=posY-parseInt(st.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseover",stopEvent);addEvent(document,"mouseup",calDragEnd);}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,1,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,1,0,0,0);var time=now-then;var day=then.getDay();if(day==0)day=7;(day>4)&&(day-=4)||(day+=3);return Math.round(((time/Date.DAY)+day)/7);};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=Date._msh_formatRegexp;if(typeof re=="undefined"){var tmp="";for(var i in s)tmp+=tmp?("|"+i):i;Date._msh_formatRegexp=re=new RegExp("("+tmp+")",'g');}return str.replace(re,function(match,par){return s[par];});};window.calendar=null;
\ No newline at end of file + Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=firstDayOfWeek;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){if(Calendar.is_ie){return window.event.srcElement;}else{return ev.currentTarget;}};Calendar.getTargetElement=function(ev){if(Calendar.is_ie){return window.event.srcElement;}else{return ev.target;}};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.firstChild.data=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.firstChild.data=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.firstChild.data;addEvent(document,"mousemove",tableMouseOver);}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.firstChild.data=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled){return false;}removeClass(el,"hilite");if(el.caldate){removeClass(el.parentNode,"rowhilite");}el.calendar.tooltips.firstChild.data=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}cal.date=new Date(el.caldate);date=cal.date;newdate=true;if(!(cal.dateClicked=!el.otherMonth))cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=(el.navtype==0)?new Date():new Date(cal.date);cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to <mishoo@infoiasi.ro> to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year<cal.maxYear){date.setFullYear(year+1);setMonth(0);}break;case 2:if(year<cal.maxYear){date.setFullYear(year+1);}break;case 100:cal.setFirstDayOfWeek(el.fdow);return;case 50:var range=el._range;var current=el.firstChild.data;for(var i=range.length;--i>=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.firstChild.data=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}}if(newdate){cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;if(text.substr(0,1)!="&"){cell.appendChild(document.createTextNode(text));}else{cell.innerHTML=text;}return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.appendChild(document.createTextNode(Calendar._TT["WK"]));}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.appendChild(document.createTextNode(""));cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||" ";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.appendChild(document.createTextNode(init));part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.appendChild(document.createTextNode(":"));span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML=" ";cal.onSetTime=function(){var hrs=this.date.getHours();var mins=this.date.getMinutes();var pm=(hrs>12);if(pm&&t12)hrs-=12;H.firstChild.data=(hrs<10)?("0"+hrs):hrs;M.firstChild.data=(mins<10)?("0"+mins):mins;if(t12)AP.firstChild.data=pm?"pm":"am";};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.firstChild.data,10);if(t12){if(/pm/i.test(AP.firstChild.data)&&h<12)h+=12;else if(/am/i.test(AP.firstChild.data)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.firstChild.data,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i<Calendar._MN.length;++i){var mn=Calendar.createElement("div");mn.className=Calendar.is_ie?"label-IEfix":"label";mn.month=i;mn.appendChild(document.createTextNode(Calendar._SMN[i]));div.appendChild(mn);}div=Calendar.createElement("div",this.element);this.yearsCombo=div;div.className="combo";for(i=12;i>0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";yr.appendChild(document.createTextNode(""));div.appendChild(yr);}this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){if(!window.calendar){return false;}(Calendar.is_ie)&&(ev=window.event);var cal=window.calendar;var act=(Calendar.is_ie||ev.type=="keypress");if(ev.ctrlKey){switch(ev.keyCode){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(ev.keyCode){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var date=cal.date.getDate()-1;var el=cal.currentDateEl;var ne=null;var prev=(ev.keyCode==37)||(ev.keyCode==38);switch(ev.keyCode){case 37:(--date>=0)&&(ne=cal.ar_days[date]);break;case 38:date-=7;(date>=0)&&(ne=cal.ar_days[date]);break;case 39:(++date<cal.ar_days.length)&&(ne=cal.ar_days[date]);break;case 40:date+=7;(date<cal.ar_days.length)&&(ne=cal.ar_days[date]);break;}if(!ne){if(prev){Calendar.cellClick(cal._nav_pm);}else{Calendar.cellClick(cal._nav_nm);}date=(prev)?cal.date.getMonthDays():1;el=cal.currentDateEl;ne=cal.ar_days[date-1];}Calendar.removeClass(el,"selected");Calendar.addClass(ne,"selected");cal.date=new Date(ne.caldate);cal.callHandler();cal.currentDateEl=ne;}break;case 13:if(act){cal.callHandler();cal.hide();}break;default:return false;}return Calendar.stopEvent(ev);};Calendar.prototype._init=function(firstDayOfWeek,date){var today=new Date();this.table.style.visibility="hidden";var year=date.getFullYear();if(year<this.minYear){year=this.minYear;date.setFullYear(year);}else if(year>this.maxYear){year=this.maxYear;date.setFullYear(year);}this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.firstChild.data=date.getWeekNumber();cell=cell.nextSibling;}row.className="daysrow";var hasdays=false;for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(date.getDate()+1)){var iday=date.getDate();var wday=date.getDay();cell.className="day";var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML=" ";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}cell.disabled=false;cell.firstChild.data=iday;if(typeof this.getDateStatus=="function"){var status=this.getDateStatus(date,year,month,iday);if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){ar_days[ar_days.length]=cell;cell.caldate=new Date(date);cell.ttip="_";if(current_month&&iday==mday){cell.className+=" selected";this.currentDateEl=cell;}if(date.getFullYear()==today.getFullYear()&&date.getMonth()==today.getMonth()&&iday==today.getDate()){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(weekend.indexOf(wday.toString())!=-1){cell.className+=cell.otherMonth?" oweekend":" weekend";}}}if(!(hasdays||this.showsOtherMonths))row.className="emptyrow";}this.ar_days=ar_days;this.title.firstChild.data=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window.calendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){if(!window.calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window.calendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window.calendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}function fixPosition(box){if(box.x<0)box.x=0;if(box.y<0)box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);if(Calendar.is_ie){br.y+=document.body.scrollTop;br.x+=document.body.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "r":p.x+=el.offsetWidth-w;break;case "l":break;}p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){var y=0;var m=-1;var d=0;var a=str.split(/\W+/);if(!fmt){fmt=this.dateFormat;}var b=fmt.match(/%./g);var i=0,j=0;var hr=0;var min=0;for(i=0;i<a.length;++i){if(!a[i])continue;switch(b[i]){case "%d":case "%e":d=parseInt(a[i],10);break;case "%m":m=parseInt(a[i],10)-1;break;case "%Y":case "%y":y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);break;case "%b":case "%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}break;case "%H":case "%I":case "%k":case "%l":hr=parseInt(a[i],10);break;case "%P":case "%p":if(/pm/i.test(a[i])&&hr<12)hr+=12;break;case "%M":min=parseInt(a[i],10);break;}}if(y!=0&&m!=-1&&d!=0){this.setDate(new Date(y,m,d,hr,min,0));return;}y=0;m=-1;d=0;for(i=0;i<a.length;++i){if(a[i].search(/[a-zA-Z]+/)!=-1){var t=-1;for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){t=j;break;}}if(t!=-1){if(m!=-1){d=m+1;}m=t;}}else if(parseInt(a[i],10)<=12&&m==-1){m=a[i]-1;}else if(parseInt(a[i],10)>31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0){var today=new Date();y=today.getFullYear();}if(m!=-1&&d!=0){this.setDate(new Date(y,m,d,hr,min,0));}};Calendar.prototype.hideShowCovered=function(){var self=this;Calendar.continuation_for_the_fucking_khtml_browser=function(){function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=self.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(self.hidden||(CX1>EX2)||(CX2<EX1)||(CY1>EY2)||(CY2<EY1)){if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility=cc.__msh_save_visibility;}else{if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility="hidden";}}}};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype._displayWeekdays=function(){var fdow=this.firstDayOfWeek;var cell=this.firstdayname;var weekend=Calendar._TT["WEEKEND"];for(var i=0;i<7;++i){cell.className="day name";var realday=(i+fdow)%7;if(i){cell.ttip=Calendar._TT["DAY_FIRST"].replace("%s",Calendar._DN[realday]);cell.navtype=100;cell.calendar=this;cell.fdow=realday;Calendar._add_evs(cell);}if(weekend.indexOf(realday.toString())!=-1){Calendar.addClass(cell,"weekend");}cell.firstChild.data=Calendar._SDN[(i+fdow)%7];cell=cell.nextSibling;}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none";};Calendar.prototype._dragStart=function(ev){if(this.dragging){return;}this.dragging=true;var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posY=ev.clientY+window.scrollY;posX=ev.clientX+window.scrollX;}var st=this.element.style;this.xOffs=posX-parseInt(st.left);this.yOffs=posY-parseInt(st.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseup",calDragEnd);}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5)return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i<a.length;i++){var tmp=s[a[i]];if(tmp){re=new RegExp(a[i],'g');str=str.replace(re,tmp);}}return str;};Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(y){var d=new Date(this);d.__msh_oldSetFullYear(y);if(d.getMonth()!=this.getMonth())this.setDate(28);this.__msh_oldSetFullYear(y);};window.calendar=null;
\ No newline at end of file diff --git a/httemplate/images/mid-logo.png b/httemplate/images/mid-logo.png Binary files differdeleted file mode 100644 index d993419..0000000 --- a/httemplate/images/mid-logo.png +++ /dev/null diff --git a/httemplate/images/small-logo.png b/httemplate/images/small-logo.png Binary files differindex 406a369..a8fe807 100644 --- a/httemplate/images/small-logo.png +++ b/httemplate/images/small-logo.png diff --git a/httemplate/index.html b/httemplate/index.html index 2fc1dc3..00fe2da 100644 --- a/httemplate/index.html +++ b/httemplate/index.html @@ -7,9 +7,9 @@ <BODY BGCOLOR="#FFFFFF"> <table width="100%"> <tr><td> - <IMG BORDER=0 ALT="Silicon Interactive Software Design" SRC="images/small-logo.png"> - </td><td> - <font color="#ff0000" size=7>freeside main menu</font> + <IMG BORDER=0 ALT="freeside" SRC="images/small-logo.png"> + </td><td valign="top"> + <font color="#7f007b" size=7></font> </td><td align=right valign=bottom> version %%%VERSION%%% <BR><A HREF="http://www.sisd.com/freeside">Freeside home page</A> @@ -69,14 +69,11 @@ <LI>all invoices (<A HREF="search/cust_bill.cgi?invnum">by invoice number</A>) (<A HREF="search/cust_bill.cgi?date">by date</A>) (<A HREF="search/cust_bill.cgi?custnum">by customer number</A>) </UL> <A HREF="search/report_cust_pay.html">Payment report (by type and/or date range)</A> + <BR><BR><A HREF="search/report_cust_credit.html">Credit report (by employee and/or date range)</A> <BR><BR><A HREF="search/report_receivables.cgi">Accounts Receivable Aging Summary</A> <BR><BR><A HREF="search/report_prepaid_income.html">Prepaid Income (Unearned Revenue) Report</A> - <BR><BR>(old) Financial reports (being rewritten) - <UL> - <LI> <A HREF="search/report_tax.html">tax reports</A> - <LI> <A HREF="search/report_cc.html">credit card receipts</A> - <LI> <A HREF="search/report_credit.html">credit memos</A> - </UL> + <BR><BR><A HREF="search/report_tax.html">Sales Tax Liability Report</A> + <BR><BR> <CENTER><HR WIDTH="94%" NOSHADE></CENTER><BR> <A NAME="admin">Administration</a> <ul> diff --git a/httemplate/misc/upload-batch.cgi b/httemplate/misc/upload-batch.cgi index cc53466..5d01501 100644 --- a/httemplate/misc/upload-batch.cgi +++ b/httemplate/misc/upload-batch.cgi @@ -2,8 +2,9 @@ my $fh = $cgi->upload('batch_results'); my $filename = $cgi->param('batch_results'); - $filename =~ /^.*[\/\\]([^\/\\]+)$/ or die; - my $paybatch = $1; + $filename =~ /^(.*[\/\\])?([^\/\\]+)$/ + or die "unparsable filename: $filename\n"; + my $paybatch = $2; my $error = defined($fh) ? FS::cust_pay_batch::import_results( { diff --git a/httemplate/search/cust_main-otaker.cgi b/httemplate/search/cust_main-otaker.cgi index b7173c4..4421436 100755 --- a/httemplate/search/cust_main-otaker.cgi +++ b/httemplate/search/cust_main-otaker.cgi @@ -10,10 +10,9 @@ <FORM ACTION="cust_main.cgi" METHOD="post"> Search for <B>Order taker</B>: <INPUT TYPE="hidden" NAME="otaker_on" VALUE="TRUE"> - <% my $dbh = dbh; - my $sth = dbh->prepare("SELECT DISTINCT otaker FROM cust_main") - or eidiot $dbh->errstr; - $sth->execute() or eidiot $sth->errstr; + <% my $sth = dbh->prepare("SELECT DISTINCT otaker FROM cust_main") + or die dbh->errstr; + $sth->execute() or die $sth->errstr; # my @otakers = map { $_->[0] } @{$sth->selectall_arrayref}; %> <SELECT NAME="otaker"> diff --git a/httemplate/search/report_tax.cgi b/httemplate/search/report_tax.cgi index 835554a..aa9ed6f 100755 --- a/httemplate/search/report_tax.cgi +++ b/httemplate/search/report_tax.cgi @@ -1,26 +1,216 @@ <!-- mason kludge --> <% -#my $user = getotaker; -my $user = $FS::UID::user; #dumb 1.4 8-char workaround +my $user = getotaker; $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/; -my $beginning = $1; +my $pbeginning = $1; +my $beginning = $1 ? str2time($1) : 0; $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/; -my $ending = $1; +my $pending = $1; +my $ending = ( $1 ? str2time($1) : 4294880896 ) + 86399; -print header('Tax Report Results'); +my $from_join_cust = " + FROM cust_bill_pkg + JOIN cust_bill USING ( invnum ) + JOIN cust_main USING ( custnum ) +"; +my $join_pkg = " + JOIN cust_pkg USING ( pkgnum ) + JOIN part_pkg USING ( pkgpart ) +"; +my $where = " + WHERE _date >= $beginning AND _date <= $ending + AND ( county = ? OR ? = '' ) + AND ( state = ? OR ? = '' ) + AND ( country = ? ) + AND payby != 'COMP' +"; +my @base_param = qw( county county state state country ); -open (REPORT, "freeside-tax-report -v -s $beginning -f $ending $user |"); +my $gotcust = " + WHERE 0 < ( SELECT COUNT(*) FROM cust_main + WHERE ( cust_main.county = cust_main_county.county + OR cust_main_county.county = '' + OR cust_main_county.county IS NULL ) + AND ( cust_main.state = cust_main_county.state + OR cust_main_county.state = '' + OR cust_main_county.state IS NULL ) + AND ( cust_main.country = cust_main_county.country ) + LIMIT 1 + ) +"; -print '<PRE>'; -while(<REPORT>) { - print $_; +my($total, $exempt, $taxable, $tax) = ( 0, 0, 0, 0 ); +my $out = 'Out of taxable region(s)'; +my %regions; +foreach my $r (qsearch('cust_main_county', {}, '', $gotcust) ) { + #warn $r->county. ' '. $r->state. ' '. $r->country. "\n"; + + my $label = getlabel($r); + $regions{$label}->{'label'} = $label; + + my $fromwhere = $from_join_cust. $join_pkg. $where; + my @param = @base_param; + + if ( $r->taxclass ) { + $fromwhere .= " AND ( taxclass = ? ) "; + push @param, 'taxclass'; + } + + my $nottax = 'pkgnum != 0'; + + my $a = scalar_sql($r, \@param, + "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur) $fromwhere AND $nottax" + ); + $total += $a; + $regions{$label}->{'total'} += $a; + + foreach my $e ( grep { $r->get($_.'tax') =~ /^Y/i } + qw( cust_bill_pkg.setup cust_bill_pkg.recur ) ) { + my $x = scalar_sql($r, \@param, + "SELECT SUM($e) $fromwhere AND $nottax" + ); + $exempt += $x; + $regions{$label}->{'exempt'} += $x; + } + + foreach my $e ( grep { $r->get($_.'tax') !~ /^Y/i } + qw( cust_bill_pkg.setup cust_bill_pkg.recur ) ) { + my $t = scalar_sql($r, \@param, + "SELECT SUM($e) $fromwhere AND $nottax AND ( tax != 'Y' OR tax IS NULL )" + ); + $taxable += $t; + $regions{$label}->{'taxable'} += $t; + $owed += $t * ($r->tax/100); + $regions{$label}->{'owed'} += $t * ($r->tax/100); + + my $x = scalar_sql($r, \@param, + "SELECT SUM($e) $fromwhere AND $nottax AND tax = 'Y'" + ); + $exempt += $x; + $regions{$label}->{'exempt'} += $x; + } + + if ( defined($regions{$label}->{'rate'}) + && $regions{$label}->{'rate'} != $r->tax.'%' ) { + $regions{$label}->{'rate'} = 'variable'; + } else { + $regions{$label}->{'rate'} = $r->tax.'%'; + } + +} + +my $taxwhere = "$from_join_cust $where"; +my @taxparam = @base_param; + +#foreach my $label ( keys %regions ) { +foreach my $r ( + qsearch( 'cust_main_county', + {}, + 'DISTINCT ON (country, state, county, taxname) *', + $gotcust + ) +) { + + #warn join('-', map { $r->$_() } qw( country state county taxname ) )."\n"; + + my $label = getlabel($r); + + my $fromwhere = $join_pkg. $where; + my @param = @base_param; + + #match itemdesc if necessary! + my $named_tax = + $r->taxname + ? 'AND itemdesc = '. dbh->quote($r->taxname) + : "AND itemdesc IS NULL or itemdesc = ''"; + my $x = scalar_sql($r, \@taxparam, + "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur) $taxwhere ". + "AND pkgnum = 0 $named_tax", + ); + $tax += $x; + $regions{$label}->{'tax'} += $x; + +} + +#ordering +my @regions = map $regions{$_}, + sort { ( ($a eq $out) cmp ($b eq $out) ) || ($b cmp $a) } + keys %regions; + +push @regions, { + 'label' => 'Total', + 'total' => $total, + 'exempt' => $exempt, + 'taxable' => $taxable, + 'rate' => '', + 'tax' => $tax, +}; + +#-- + +sub getlabel { + my $r = shift; + if ( $r->tax == 0 ) { + $label = $out; + } elsif ( $r->taxname ) { + $label = $r->taxname; +# $regions{$label}->{'taxname'} = $label; +# push @{$regions{$label}->{$_}}, $r->$_() foreach qw( county state country ); + } else { + $label = $r->country; + $label = $r->state.", $label" if $r->state; + $label = $r->county." county, $label" if $r->county; + #$label = $r->taxname. " ($label)" if $r->taxname; + } + return $label; } -print '</PRE>'; -print '</BODY></HTML>'; +#false laziness w/FS::Report::Table::Monthly (sub should probably be moved up +#to FS::Report or FS::Record or who the fuck knows where) +sub scalar_sql { + my( $r, $param, $sql ) = @_; + #warn "$sql\n"; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute( map $r->$_(), @$param ) + or die "Unexpected error executing statement $sql: ". $sth->errstr; + $sth->fetchrow_arrayref->[0] || 0; +} %> +<%= header( "Sales Tax Report - $pbeginning through ".($pending||'now'), + menubar( 'Main Menu'=>$p, ) ) %> +<%= table() %> + <TR> + <TH ROWSPAN=2></TH> + <TH COLSPAN=3>Sales</TH> + <TH ROWSPAN=2>Rate</TH> + <TH ROWSPAN=2>Tax owed</TH> + <TH ROWSPAN=2>Tax invoiced</TH> + </TR> + <TR> + <TH>Total</TH> + <TH>Non-taxable</TH> + <TH>Taxable</TH> + </TR> + <% foreach my $region ( @regions ) { %> + <TR> + <TD><%= $region->{'label'} %></TD> + <TD ALIGN="right">$<%= sprintf('%.2f', $region->{'total'} ) %></TD> + <TD ALIGN="right">$<%= sprintf('%.2f', $region->{'exempt'} ) %></TD> + <TD ALIGN="right">$<%= sprintf('%.2f', $region->{'taxable'} ) %></TD> + <TD ALIGN="right"><%= $region->{'rate'} %></TD> + <TD ALIGN="right">$<%= sprintf('%.2f', $region->{'owed'} ) %></TD> + <TD ALIGN="right">$<%= sprintf('%.2f', $region->{'tax'} ) %></TD> + </TR> + <% } %> + +</TABLE> + +</BODY> +</HTML> + + diff --git a/httemplate/view/cust_main.cgi b/httemplate/view/cust_main.cgi index bb275a8..bbf34db 100755 --- a/httemplate/view/cust_main.cgi +++ b/httemplate/view/cust_main.cgi @@ -301,13 +301,25 @@ if ( defined $cust_main->dbdef_table->column('comments') '</PRE></TD></TR></TABLE></TABLE>'; } -print '</TD></TR></TABLE>'; +%> -print '<BR>'. - '<FORM ACTION="'.popurl(2).'edit/process/quick-cust_pkg.cgi" METHOD="POST">'. - qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!. - '<SELECT NAME="pkgpart"><OPTION> '; +</TD></TR></TABLE> + +<BR> +<SCRIPT TYPE="text/javascript"> +function enable_order_pkg () { + if ( document.OrderPkgForm.pkgpart.selectedIndex > 0 ) { + document.OrderPkgForm.submit.disabled = false; + } else { + document.OrderPkgForm.submit.disabled = true; + } +} +</SCRIPT> +<FORM NAME="OrderPkgForm" ACTION="<%= $p %>edit/process/quick-cust_pkg.cgi" METHOD="POST"> +<INPUT TYPE="hidden" NAME="custnum" VALUE="<%= $custnum %>"> +<SELECT NAME="pkgpart" onChange="enable_order_pkg()"><OPTION>Order additional package +<% foreach my $part_pkg ( qsearch( 'part_pkg', { 'disabled' => '' }, '', ' AND 0 < ( SELECT COUNT(*) FROM type_pkgs '. @@ -315,11 +327,13 @@ foreach my $part_pkg ( ' AND type_pkgs.pkgpart = part_pkg.pkgpart )' ) ) { - print '<OPTION VALUE="'. $part_pkg->pkgpart. '">'. $part_pkg->pkg. ' - '. - $part_pkg->comment; -} +%> +<OPTION VALUE="<%= $part_pkg->pkgpart %>"><%= $part_pkg->pkg %> - <%= $part_pkg->comment %> +<% } %> + +</SELECT><INPUT NAME="submit" TYPE="submit" VALUE="Order Package" disabled></FORM><BR> -print '</SELECT><INPUT TYPE="submit" VALUE="Order Package"></FORM><BR>'; +<% if ( $conf->config('payby-default') ne 'HIDE' ) { diff --git a/init.d/freeside-init b/init.d/freeside-init index 1ca7dff..57801dd 100644 --- a/init.d/freeside-init +++ b/init.d/freeside-init @@ -10,6 +10,10 @@ FREESIDE_PATH="%%%FREESIDE_PATH%%%" SELFSERVICE_USER=%%%SELFSERVICE_USER%%% SELFSERVICE_MACHINES="%%%SELFSERVICE_MACHINES%%%" +#INSTALLSCRIPT/INSTALLSITEBIN from Makefile.PL +PATH="$PATH:/usr/local/bin" +export PATH + case "$1" in start) # Start daemons. diff --git a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Index.pm b/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Index.pm deleted file mode 100644 index 1a92baa..0000000 --- a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Index.pm +++ /dev/null @@ -1,37 +0,0 @@ -package DBIx::DBSchema::ColGroup::Index; - -use strict; -use vars qw(@ISA); -use DBIx::DBSchema::ColGroup; - -@ISA=qw(DBIx::DBSchema::ColGroup); - -=head1 NAME - -DBIx::DBSchema::ColGroup::Index - Index column group object - -=head1 SYNOPSIS - - use DBIx::DBSchema::ColGroup::Index; - - # see DBIx::DBSchema::ColGroup methods - -=head1 DESCRIPTION - -DBIx::DBSchema::ColGroup::Index objects represent the (non-unique) indices of a -database table (L<DBIx::DBSchema::Table>). DBIx::DBSchema::ColGroup::Index -inherits from DBIx::DBSchema::ColGroup. - -=head1 BUGS - -Is this empty subclass needed? - -=head1 SEE ALSO - -L<DBIx::DBSchema::ColGroup>, L<DBIx::DBSchema::ColGroup::Unique>, -L<DBIx::DBSchema::Table>, L<DBIx::DBSchema>, L<FS::Record> - -=cut - -1; - diff --git a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Unique.pm b/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Unique.pm deleted file mode 100644 index 450043f..0000000 --- a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/ColGroup/Unique.pm +++ /dev/null @@ -1,38 +0,0 @@ -package DBIx::DBSchema::ColGroup::Unique; - -use strict; -use vars qw(@ISA); -use DBIx::DBSchema::ColGroup; - -@ISA=qw(DBIx::DBSchema::ColGroup); - -=head1 NAME - -DBIx::DBSchema::ColGroup::Unique - Unique column group object - -=head1 SYNOPSIS - - use DBIx::DBSchema::ColGroup::Unique; - - # see DBIx::DBSchema::ColGroup methods - -=head1 DESCRIPTION - -DBIx::DBSchema::ColGroup::Unique objects represent the unique indices of a -database table (L<DBIx::DBSchema::Table>). DBIx::DBSchema::ColGroup:Unique -inherits from DBIx::DBSchema::ColGroup. - -=head1 BUGS - -Is this empty subclass needed? - -=head1 SEE ALSO - -L<DBIx::DBSchema::ColGroup>, L<DBIx::DBSchema::ColGroup::Index>, -L<DBIx::DBSchema::Table>, L<DBIx::DBSchema>, L<FS::Record> - -=cut - -1; - - diff --git a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Pg.pm b/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Pg.pm deleted file mode 100644 index 018b890..0000000 --- a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Pg.pm +++ /dev/null @@ -1,175 +0,0 @@ -package DBIx::DBSchema::DBD::Pg; - -use strict; -use vars qw($VERSION @ISA %typemap); -use DBD::Pg 1.22; -use DBIx::DBSchema::DBD; - -$VERSION = '0.08'; -@ISA = qw(DBIx::DBSchema::DBD); - -%typemap = ( - 'BLOB' => 'BYTEA', - 'LONG VARBINARY' => 'BYTEA', -); - -=head1 NAME - -DBIx::DBSchema::DBD::Pg - PostgreSQL native driver for DBIx::DBSchema - -=head1 SYNOPSIS - -use DBI; -use DBIx::DBSchema; - -$dbh = DBI->connect('dbi:Pg:dbname=database', 'user', 'pass'); -$schema = new_native DBIx::DBSchema $dbh; - -=head1 DESCRIPTION - -This module implements a PostgreSQL-native driver for DBIx::DBSchema. - -=cut - -sub columns { - my($proto, $dbh, $table) = @_; - my $sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, - a.atthasdef, a.attnum - FROM pg_class c, pg_attribute a, pg_type t - WHERE c.relname = '$table' - AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid - ORDER BY a.attnum -END - $sth->execute or die $sth->errstr; - - map { - - my $default = ''; - if ( $_->{atthasdef} ) { - my $attnum = $_->{attnum}; - my $d_sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT substring(d.adsrc for 128) FROM pg_attrdef d, pg_class c - WHERE c.relname = '$table' AND c.oid = d.adrelid AND d.adnum = $attnum -END - $d_sth->execute or die $d_sth->errstr; - - $default = $d_sth->fetchrow_arrayref->[0]; - }; - - my $len = ''; - if ( $_->{attlen} == -1 && $_->{atttypmod} != -1 - && $_->{typname} ne 'text' ) { - $len = $_->{atttypmod} - 4; - if ( $_->{typname} eq 'numeric' ) { - $len = ($len >> 16). ','. ($len & 0xffff); - } - } - - my $type = $_->{'typname'}; - $type = 'char' if $type eq 'bpchar'; - - [ - $_->{'attname'}, - $type, - ! $_->{'attnotnull'}, - $len, - $default, - '' #local - ]; - - } @{ $sth->fetchall_arrayref({}) }; -} - -sub primary_key { - my($proto, $dbh, $table) = @_; - my $sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT a.attname, a.attnum - FROM pg_class c, pg_attribute a, pg_type t - WHERE c.relname = '${table}_pkey' - AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid -END - $sth->execute or die $sth->errstr; - my $row = $sth->fetchrow_hashref or return ''; - $row->{'attname'}; -} - -sub unique { - my($proto, $dbh, $table) = @_; - my $gratuitous = { map { $_ => [ $proto->_index_fields($dbh, $_ ) ] } - grep { $proto->_is_unique($dbh, $_ ) } - $proto->_all_indices($dbh, $table) - }; -} - -sub index { - my($proto, $dbh, $table) = @_; - my $gratuitous = { map { $_ => [ $proto->_index_fields($dbh, $_ ) ] } - grep { ! $proto->_is_unique($dbh, $_ ) } - $proto->_all_indices($dbh, $table) - }; -} - -sub _all_indices { - my($proto, $dbh, $table) = @_; - my $sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT c2.relname - FROM pg_class c, pg_class c2, pg_index i - WHERE c.relname = '$table' AND c.oid = i.indrelid AND i.indexrelid = c2.oid -END - $sth->execute or die $sth->errstr; - map { $_->{'relname'} } - grep { $_->{'relname'} !~ /_pkey$/ } - @{ $sth->fetchall_arrayref({}) }; -} - -sub _index_fields { - my($proto, $dbh, $index) = @_; - my $sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT a.attname, a.attnum - FROM pg_class c, pg_attribute a, pg_type t - WHERE c.relname = '$index' - AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid -END - $sth->execute or die $sth->errstr; - map { $_->{'attname'} } @{ $sth->fetchall_arrayref({}) }; -} - -sub _is_unique { - my($proto, $dbh, $index) = @_; - my $sth = $dbh->prepare(<<END) or die $dbh->errstr; - SELECT i.indisunique - FROM pg_index i, pg_class c, pg_am a - WHERE i.indexrelid = c.oid AND c.relname = '$index' AND c.relam = a.oid -END - $sth->execute or die $sth->errstr; - my $row = $sth->fetchrow_hashref or die 'guru meditation #420'; - $row->{'indisunique'}; -} - -=head1 AUTHOR - -Ivan Kohler <ivan-dbix-dbschema@420.am> - -=head1 COPYRIGHT - -Copyright (c) 2000 Ivan Kohler -Copyright (c) 2000 Mail Abuse Prevention System LLC -All rights reserved. -This program is free software; you can redistribute it and/or modify it under -the same terms as Perl itself. - -=head1 BUGS - -Yes. - -columns doesn't return column default information. - -=head1 SEE ALSO - -L<DBIx::DBSchema>, L<DBIx::DBSchema::DBD>, L<DBI>, L<DBI::DBD> - -=cut - -1; - diff --git a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Sybase.pm b/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Sybase.pm deleted file mode 100755 index 4a74069..0000000 --- a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/Sybase.pm +++ /dev/null @@ -1,141 +0,0 @@ -package DBIx::DBSchema::DBD::Sybase; - -use strict; -use vars qw($VERSION @ISA %typemap); -use DBIx::DBSchema::DBD; - -$VERSION = '0.03'; -@ISA = qw(DBIx::DBSchema::DBD); - -%typemap = ( -# 'empty' => 'empty' -); - -=head1 NAME - -DBIx::DBSchema::DBD::Sybase - Sybase database driver for DBIx::DBSchema - -=head1 SYNOPSIS - -use DBI; -use DBIx::DBSchema; - -$dbh = DBI->connect('dbi:Sybase:dbname=database', 'user', 'pass'); -$schema = new_native DBIx::DBSchema $dbh; - -=head1 DESCRIPTION - -This module implements a Sybase driver for DBIx::DBSchema. - -=cut - -sub columns { - my($proto, $dbh, $table) = @_; - - my $sth = $dbh->prepare("sp_columns \@table_name=$table") - or die $dbh->errstr; - - $sth->execute or die $sth->errstr; - my @cols = map { - [ - $_->{'column_name'}, - $_->{'type_name'}, - ($_->{'nullable'} ? 1 : ''), - $_->{'length'}, - '', #default - '' #local - ] - } @{ $sth->fetchall_arrayref({}) }; - $sth->finish; - - @cols; -} - -sub primary_key { - return("StubbedPrimaryKey"); -} - - -sub unique { - my($proto, $dbh, $table) = @_; - my $gratuitous = { map { $_ => [ $proto->_index_fields($dbh, $table, $_ ) ] } - grep { $proto->_is_unique($dbh, $_ ) } - $proto->_all_indices($dbh, $table) - }; -} - -sub index { - my($proto, $dbh, $table) = @_; - my $gratuitous = { map { $_ => [ $proto->_index_fields($dbh, $table, $_ ) ] } - grep { ! $proto->_is_unique($dbh, $_ ) } - $proto->_all_indices($dbh, $table) - }; -} - -sub _all_indices { - my($proto, $dbh, $table) = @_; - - my $sth = $dbh->prepare_cached(<<END) or die $dbh->errstr; - SELECT name - FROM sysindexes - WHERE id = object_id('$table') and indid between 1 and 254 -END - $sth->execute or die $sth->errstr; - my @indices = map { $_->[0] } @{ $sth->fetchall_arrayref() }; - $sth->finish; - $sth = undef; - @indices; -} - -sub _index_fields { - my($proto, $dbh, $table, $index) = @_; - - my @keys; - - my ($indid) = $dbh->selectrow_array("select indid from sysindexes where id = object_id('$table') and name = '$index'"); - for (1..30) { - push @keys, $dbh->selectrow_array("select index_col('$table', $indid, $_)") || (); - } - - return @keys; -} - -sub _is_unique { - my($proto, $dbh, $table, $index) = @_; - - my ($isunique) = $dbh->selectrow_array("select status & 2 from sysindexes where id = object_id('$table') and name = '$index'"); - - return $isunique; -} - -=head1 AUTHOR - -Charles Shapiro <charles.shapiro@numethods.com> -(courtesy of Ivan Kohler <ivan-dbix-dbschema@420.am>) - -Mitchell Friedman <mitchell.friedman@numethods.com> - -Bernd Dulfer <bernd@widd.de> - -=head1 COPYRIGHT - -Copyright (c) 2001 Charles Shapiro, Mitchell J. Friedman -Copyright (c) 2001 nuMethods LLC. -All rights reserved. -This program is free software; you can redistribute it and/or modify it under -the same terms as Perl itself. - -=head1 BUGS - -Yes. - -The B<primary_key> method does not yet work. - -=head1 SEE ALSO - -L<DBIx::DBSchema>, L<DBIx::DBSchema::DBD>, L<DBI>, L<DBI::DBD> - -=cut - -1; - diff --git a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/mysql.pm b/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/mysql.pm deleted file mode 100644 index f3804dd..0000000 --- a/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/mysql.pm +++ /dev/null @@ -1,126 +0,0 @@ -package DBIx::DBSchema::DBD::mysql; - -use strict; -use vars qw($VERSION @ISA %typemap); -use DBIx::DBSchema::DBD; - -$VERSION = '0.03'; -@ISA = qw(DBIx::DBSchema::DBD); - -%typemap = ( - 'TIMESTAMP' => 'DATETIME', - 'SERIAL' => 'INTEGER', - 'BOOL' => 'TINYINT', - 'LONG VARBINARY' => 'LONGBLOB', -); - -=head1 NAME - -DBIx::DBSchema::DBD::mysql - MySQL native driver for DBIx::DBSchema - -=head1 SYNOPSIS - -use DBI; -use DBIx::DBSchema; - -$dbh = DBI->connect('dbi:mysql:database', 'user', 'pass'); -$schema = new_native DBIx::DBSchema $dbh; - -=head1 DESCRIPTION - -This module implements a MySQL-native driver for DBIx::DBSchema. - -=cut - -sub columns { - my($proto, $dbh, $table ) = @_; - my $sth = $dbh->prepare("SHOW COLUMNS FROM $table") or die $dbh->errstr; - $sth->execute or die $sth->errstr; - map { - $_->{'Type'} =~ /^(\w+)\(?([\d\,]+)?\)?( unsigned)?$/ - or die "Illegal type: ". $_->{'Type'}. "\n"; - my($type, $length) = ($1, $2); - [ - $_->{'Field'}, - $type, - $_->{'Null'}, - $length, - $_->{'Default'}, - $_->{'Extra'} - ] - } @{ $sth->fetchall_arrayref( {} ) }; -} - -#sub primary_key { -# my($proto, $dbh, $table ) = @_; -# my $primary_key = ''; -# my $sth = $dbh->prepare("SHOW INDEX FROM $table") -# or die $dbh->errstr; -# $sth->execute or die $sth->errstr; -# my @pkey = map { $_->{'Column_name'} } grep { -# $_->{'Key_name'} eq "PRIMARY" -# } @{ $sth->fetchall_arrayref( {} ) }; -# scalar(@pkey) ? $pkey[0] : ''; -#} - -sub primary_key { - my($proto, $dbh, $table) = @_; - my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table); - $pkey; -} - -sub unique { - my($proto, $dbh, $table) = @_; - my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table); - $unique_href; -} - -sub index { - my($proto, $dbh, $table) = @_; - my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table); - $index_href; -} - -sub _show_index { - my($proto, $dbh, $table ) = @_; - my $sth = $dbh->prepare("SHOW INDEX FROM $table") - or die $dbh->errstr; - $sth->execute or die $sth->errstr; - - my $pkey = ''; - my(%index, %unique); - foreach my $row ( @{ $sth->fetchall_arrayref({}) } ) { - if ( $row->{'Key_name'} eq 'PRIMARY' ) { - $pkey = $row->{'Column_name'}; - } elsif ( $row->{'Non_unique'} ) { #index - push @{ $index{ $row->{'Key_name'} } }, $row->{'Column_name'}; - } else { #unique - push @{ $unique{ $row->{'Key_name'} } }, $row->{'Column_name'}; - } - } - - ( $pkey, \%unique, \%index ); -} - -=head1 AUTHOR - -Ivan Kohler <ivan-dbix-dbschema@420.am> - -=head1 COPYRIGHT - -Copyright (c) 2000 Ivan Kohler -Copyright (c) 2000 Mail Abuse Prevention System LLC -All rights reserved. -This program is free software; you can redistribute it and/or modify it under -the same terms as Perl itself. - -=head1 BUGS - -=head1 SEE ALSO - -L<DBIx::DBSchema>, L<DBIx::DBSchema::DBD>, L<DBI>, L<DBI::DBD> - -=cut - -1; - diff --git a/install/5.005/Net-Whois-Raw/COPYRIGHT b/install/5.005/Net-Whois-Raw/COPYRIGHT deleted file mode 100644 index 78fd312..0000000 --- a/install/5.005/Net-Whois-Raw/COPYRIGHT +++ /dev/null @@ -1,7 +0,0 @@ -Copyright 2003-2003 Walery Studennikov -Copyright 2003-2003 Corris Randall -Copyright 2003-2003 Gabor Szabo -Copyright 2000-2002 Ariel Brosh - -This package is free software. You may redistribute it or modify it under -the same terms as Perl itself. diff --git a/install/5.005/Net-Whois-Raw/Changes b/install/5.005/Net-Whois-Raw/Changes deleted file mode 100644 index 68310b0..0000000 --- a/install/5.005/Net-Whois-Raw/Changes +++ /dev/null @@ -1,53 +0,0 @@ -Revision history for Perl extension Net::Whois::Raw. - -0.01 Jul 05 12:35:47 2000 - - original version; created by h2xs 1.19 - -0.02 - 0.22 ??? - - ??? - -0.23 Mar 25 09:23:37 PST 2003 - - only exports &whois by default, the other variables are exportable still. - - incorporated new whois servers ( thanks Toni Mueller <support@oeko.net> ) - - now tests the main tlds - - added some more regexen to strip out disclaimers and such ( for $OMIT_MSG > 2 ). - - moved %servers to %Net::Whois::Raw::Data::servers - -0.24 Nov 18 2003 Walery Studennikov <despair@cpan.org> - - fixed whois server for .org domains and add new whois servers - for multilingual domains - - fixed recursive whois requests for .org domains - - new fail-check and strip patterns added - - more verbose error messages - - added support for third level domains - - some bugfixes - -0.25 Nov 21 2003 Walery Studennikov <despair@cpan.org> - - fixed multilingual domains whois via whois.melbourneit.com server - - whois_config function for setting config variables - (if setting imported variables $OMIT_MSG, $CHECK_FAIL etc. - doesn't work for some reason, for example because of - namespace problems in mod_perl scripts) - -0.26 Jan 09 2004 Walery Studennikov <despair@cpan.org> - - added recursive whois requests for .cc domains - - fixed recursive whois requests for whois.crsnic.net - -0.27 Feb 10 2004 Alex Kapranoff <alex@kapranoff.ru> - - patch to check availability of .info and .biz domains - -0.28 Feb 20 2004 Alex Kapranoff <alex@kapranoff.ru> - - fixed documentation for pwhois.PL - -0.29 Feb 24 2004 Walery Studennikov <despair@cpan.org> - - fixed extra rules which strips the copyright message or disclaimer - - removed pwhois.PL. "pwhois" is shipped now instead. - - data structures in Net/Whois/Raw/Data.pm reformatted - - new strip patterns for whois.crsnic.net - - -0.30 Mar 15 2004 Walery Studennikov <despair@cpan.org> - - added strip rules for whois.dns.be - -0.31 Mar 19 2004 Walery Studennikov <despair@cpan.org> - - more robust recursive whois queries diff --git a/install/5.005/Net-Whois-Raw/MANIFEST b/install/5.005/Net-Whois-Raw/MANIFEST deleted file mode 100644 index 643f3ce..0000000 --- a/install/5.005/Net-Whois-Raw/MANIFEST +++ /dev/null @@ -1,10 +0,0 @@ -Changes -MANIFEST -Makefile.PL -lib/Net/Whois/Raw.pm -lib/Net/Whois/Raw/Data.pm -t/01.t -pwhois -README -COPYRIGHT -META.yml Module meta-data (added by MakeMaker) diff --git a/install/5.005/Net-Whois-Raw/META.yml b/install/5.005/Net-Whois-Raw/META.yml deleted file mode 100644 index 56efaa6..0000000 --- a/install/5.005/Net-Whois-Raw/META.yml +++ /dev/null @@ -1,11 +0,0 @@ -# http://module-build.sourceforge.net/META-spec.html -#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# -name: Net-Whois-Raw -version: 0.29 -version_from: lib/Net/Whois/Raw.pm -installdirs: site -requires: - IO::Socket: 1 - -distribution_type: module -generated_by: ExtUtils::MakeMaker version 6.17 diff --git a/install/5.005/Net-Whois-Raw/Makefile.PL b/install/5.005/Net-Whois-Raw/Makefile.PL deleted file mode 100755 index abd0ca3..0000000 --- a/install/5.005/Net-Whois-Raw/Makefile.PL +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl -w - -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. - -sub MY::postamble { - package MY; - shift->SUPER::postamble . <<'MAKE'; -dist : README - -README : lib/Net/Whois/Raw.pm - @$(PERL) -MPod::Text -e "pod2text('$<');" > $@ - -MAKE -} - -WriteMakefile( - 'NAME' => 'Net::Whois::Raw', - 'VERSION_FROM' => 'lib/Net/Whois/Raw.pm', # finds $VERSION - 'PREREQ_PM' => {'IO::Socket' => 1.0}, - 'EXE_FILES' => ['pwhois'], - 'dist' => {'COMPRESS' => 'gzip --best --force'}, -); diff --git a/install/5.005/Net-Whois-Raw/README b/install/5.005/Net-Whois-Raw/README deleted file mode 100644 index 916a53f..0000000 --- a/install/5.005/Net-Whois-Raw/README +++ /dev/null @@ -1,129 +0,0 @@ -NAME - Net::Whois::Raw - Perl extension for unparsed raw whois information - -SYNOPSIS - use Net::Whois::Raw qw( whois ); - - $s = whois('perl.com'); - $s = whois('funet.fi'); - $s = whois('yahoo.co.uk'); - - ### if you do "use Net::Whois::Raw qw( whois $OMIT_MSG $CHECK_FAIL - ### $CACHE_DIR $CACHE_TIME $USE_CNAMES $TIMEOUT ); - ### you can use these: - - $OMIT_MSG = 1; # This will attempt to strip several known copyright - messages and disclaimers sorted by servers. - Default is to give the whole response. - - $OMIT_MSG = 2; # This will try some additional stripping rules - if none are known for the spcific server. - - $CHECK_FAIL = 1; # This will return undef if the response matches - one of the known patterns for a failed search, - sorted by servers. - Default is to give the textual response. - - $CHECK_FAIL = 2; # This will match against several more rules - if none are known for the specific server. - - $CACHE_DIR = "/var/spool/pwhois/"; # Whois information will be - cached in this directory. Default is no cache. - - $CACHE_TIME = 24; # Cache files will be cleared after not accessed - for a specific number of hours. Documents will not be - cleared if they keep get requested for, independent - of disk space. Default is not to clear the cache. - - $USE_CNAMES = 1; # Use whois-servers.net to get the whois server - name when possible. Default is to use the - hardcoded defaults. - - $TIMEOUT = 10; # Cancel the request if connection is not made within - a specific number of seconds. - - Note: as of version 0.21, extra data will be loaded only if the - OMIT_MSG or CHECK_FAIL flags were used, in order to reduce memory usage. - -DESCRIPTION - Net::Whois::Raw queries NetworkSolutions and follows the Registrar: - answer for ORG, EDU, COM and NET domains. For other TLDs it uses the - whois-servers.net namespace. ($TLD.whois-servers.net). - - Setting the variables $OMIT_MSG and $CHECK_FAIL will match the results - against a set of known patterns. The first flag will try to omit the - copyright message/disclaimer, the second will attempt to determine if - the search failed and return undef in such a case. - - IMPORTANT: these checks merely use pattern matching; they will work on - several servers but certainly not on all of them. - - (This features were contributed by Walery Studennikov despair@sama.ru) - -AUTHOR - Original author Ariel Brosh, schop@cpan.org, Inspired by jwhois.pl - available on the net. - - Since Ariel has passed away in September 2002: - - Past maintainers Gabor Szabo, gabor@perl.org.il, Corris Randall - corris@cpan.org - - Current Maintainer: Walery Studennikov despair@cpan.org - -CREDITS - Fixed regular expression to match hyphens. (Peter Chow, - peter@interq.or.jp) - - Added support for Tonga TLD. (.to) (Peter Chow, peter@interq.or.jp) - - Added support for reverse lookup of IP addresses via the ARIN registry. - (Alex Withers awithers@gonzaga.edu) - - This will work now for RIPE addresses as well, according to a - redirection from ARIN. (Philip Hands phil@uk.alcove.com, Trevor Peirce - trev@digitalcon.ca) - - Added the pattern matching switches, (Walery Studennikov - despair@sama.ru) - - Modified pattern matching, added cache. (Tony L. Svanstrom - tony@svanstrom.org) - -CHANGES - See file "Changes" in the distribution - -CLARIFICATION - As NetworkSolutions got most of the domains of InterNic as legacy, we - start by querying their server, as this way one whois query would be - sufficient for many domains. Starting at whois.internic.net or - whois.crsnic.net will result in always two requests in any case. - -NOTE - Some users complained that the die statements in the module make their - CGI scripts crash. Please consult the entries on eval and die on - perlfunc about exception handling in Perl. - -COPYRIGHT - Copyright 2000-2002 Ariel Brosh. Copyright 2003-2003 Gabor Szabo. - Copyright 2003-2003 Corris Randall. Copyright 2003-2003 Walery - Studennikov. - - This package is free software. You may redistribute it or modify it - under the same terms as Perl itself. - - I apologize for any misunderstandings caused by the lack of a clear - licence in previous versions. - -COMMERCIAL SUPPORT - Not available anymore. - -LEGAL - Notice that registrars forbid querying their whois servers as a part of - a search engine, or querying for a lot of domains by script. Also, - omitting the copyright information (that was requested by users of this - module) is forbidden by the registrars. - -SEE ALSO - perl(1), Net::Whois, whois. - diff --git a/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw.pm b/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw.pm deleted file mode 100644 index 04db671..0000000 --- a/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw.pm +++ /dev/null @@ -1,393 +0,0 @@ -package Net::Whois::Raw; - -require Net::Whois::Raw::Data; - -use strict; -use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $OMIT_MSG $CHECK_FAIL - %notfound %strip $CACHE_DIR $CACHE_TIME $USE_CNAMES - $TIMEOUT); -use IO::Socket; - -require Exporter; - -@ISA = qw(Exporter); - -@EXPORT = qw( whois whois_config ); ### It's bad manners to export lots. -@EXPORT_OK = qw( $OMIT_MSG $CHECK_FAIL $CACHE_DIR $CACHE_TIME $USE_CNAMES $TIMEOUT); - -$VERSION = '0.31'; - -($OMIT_MSG, $CHECK_FAIL, $CACHE_DIR, $CACHE_TIME, $USE_CNAMES, $TIMEOUT) = (0) x 6; - -sub whois { - my ($dom, $srv) = @_; - my $res; - unless ($srv) { - ($res, $srv) = query($dom); - } else { - $res = _whois($dom, uc($srv)); - } - finish($res, $srv); -} - -sub whois_config { - my ($par) = @_; - my @parnames = qw(OMIT_MSG CHECK_FAIL CACHE_DIR CACHE_TIME USE_CNAMES TIMEOUT); - foreach my $parname (@parnames) { - if (exists($par->{$parname})) { - eval('$'.$parname.'='.int($par->{$parname})); - } - } -} - -sub query { - my $dom = shift; - my $tld; - if ($dom =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) { - $tld = "IP"; - } else { - my @alltlds = keys %Net::Whois::Raw::Data::servers; - @alltlds = sort { dlen($b) <=> dlen($a) } @alltlds; - foreach my $awailtld (@alltlds) { - $awailtld = lc $awailtld; - if ($dom =~ /(.+?)\.($awailtld)$/) { - $tld = uc $2; - last; - } - } - unless ($tld) { - my @tokens = split(/\./, $dom); - $tld = uc($tokens[-1]); - } - } - - - $dom =~ s/.NS$//i; - my $cname = "$tld.whois-servers.net"; - my $srv = $Net::Whois::Raw::Data::servers{$tld} || $cname; - $srv = $cname if $USE_CNAMES && gethostbyname($cname); - my $flag = ( - $srv eq 'whois.crsnic.net' || - $srv eq 'whois.publicinterestregistry.net' || - $srv eq 'whois.nic.cc' || - $tld eq 'ARPA' - ); - my $res = do_whois($dom, uc($srv), $flag, [], $tld); - wantarray ? ($res, $srv) : $res; -} - -sub do_whois { - my ($dom) = @_; # receives 4 parameters, do NOT shift - return _whois(@_) unless $CACHE_DIR; - mkdir $CACHE_DIR, 0644; - if (-f "$CACHE_DIR/$dom") { - if (open(I, "$CACHE_DIR/$dom")) { - my $res = join("", <I>); - close(I); - return $res; - } - } - my $res = _whois(@_); - return $res unless $res; - return $res unless open(O, ">$CACHE_DIR/$dom"); - print O $res; - close(O); - - - return $res unless $CACHE_TIME; - - my $now = time; - foreach (glob("$CACHE_DIR/*.*")) { - my $atime = (stat($_))[8]; - my $elapsed = $now - $atime; - unlink $_ if ($elapsed / 3600 > $CACHE_TIME); - } - $res; -} - -sub finish { - my ($text, $srv) = @_; - return $text unless $CHECK_FAIL || $OMIT_MSG; - *notfound = \%Net::Whois::Raw::Data::notfound; - *strip = \%Net::Whois::Raw::Data::strip; - - my $notfound = $notfound{lc($srv)}; - my @strip = $strip{lc($srv)} ? @{$strip{lc($srv)}} : (); - my @lines; - MAIN: foreach (split(/\n/, $text)) { - return undef if $CHECK_FAIL && $notfound && /$notfound/; - if ($OMIT_MSG) { - foreach my $re (@strip) { - next MAIN if (/$re/); - } - } - push(@lines, $_); - } - local ($_) = join("\n", @lines, ""); - - if ($CHECK_FAIL > 1) { - return undef unless check_existance($_); - } - - if ($OMIT_MSG > 1) { - s/The Data.+(policy|connection)\.\n//is; - s/% NOTE:.+prohibited\.//is; - s/Disclaimer:.+\*\*\*\n?//is; - s/NeuLevel,.+A DOMAIN NAME\.//is; - s/For information about.+page=spec//is; - s/NOTICE: Access to.+this policy.//is; - s/The previous information.+completeness\.//s; - s/NOTICE AND TERMS OF USE:.*modify these terms at any time\.//s; - s/TERMS OF USE:.*?modify these terms at any time\.//s; - s/NOTICE:.*expiration for this registration\.//s; - - s/By submitting a WHOIS query.+?DOMAIN AVAILABILITY.\n?//s; - s/Registration and WHOIS.+?its accuracy.\n?//s; - s/Disclaimer:.+?\*\*\*\n?//s; - s/The .COOP Registration .+ Information\.//s; - s/Whois Server Version \d+\.\d+.//is; - s/NeuStar,.+www.whois.us\.//is; - s/\n?Domain names in the \.com, .+ detailed information.\n?//s; - s/\n?The Registry database .+?Registrars\.\n//s; - s/\n?>>> Last update of .+? <<<\n?//; - s/% .+?\n//gs; - } - $_; -} - -sub _whois { - my ($dom, $srv, $flag, $ary, $tld) = @_; - my $state; - - my $sock; - eval { - local $SIG{'ALRM'} = sub { die "Connection timeout to $srv" }; - alarm $TIMEOUT if $TIMEOUT; - $sock = new IO::Socket::INET("$srv:43") || die "$srv: $!"; - }; - alarm 0; - die $@ if $@; - my $israce = $dom =~ /ra--/ || $dom =~ /bq--/; - my $whoisquery = $dom; - if ($srv eq 'WHOIS.MELBOURNEIT.COM' && $israce) { - $whoisquery .= ' race'; - } - #warn "$srv: $whoisquery ($OMIT_MSG, $CHECK_FAIL, $CACHE_DIR, $CACHE_TIME, $USE_CNAMES, $TIMEOUT)\n"; - print $sock "$whoisquery\r\n"; - my @lines = <$sock>; - close($sock); - my $answer = join '', @lines; - if ($flag) { - foreach (@lines) { - $state ||= (/Registrar:/); - if ( $state && /Whois Server:\s*([A-Za-z0-9\-_\.]+)/ ) { - my $newsrv = uc("$1"); - next if (($newsrv) eq uc($srv)); - return undef if (grep {$_ eq $newsrv} @$ary); - my $whois = eval { _whois($dom, $newsrv, $flag, [@$ary, $srv]) }; - if ($@ && !$whois || $whois && !check_existance($whois)) { - return $answer; - } - return $whois; - } - if (/^\s+Maintainer:\s+RIPE\b/ && $tld eq 'ARPA') { - my $newsrv = uc($Net::Whois::Raw::Data::servers{'RIPE'}); - next if ($newsrv eq $srv); - return undef if (grep {$_ eq $newsrv} @$ary); - my $whois = eval { _whois($dom, $newsrv, $flag, [@$ary, $srv]) }; - if ($@ && !$whois) { - return $answer; - } - return $whois; - } - } - } - my $whois = join("", @lines); - - if ($whois =~ /To single out one record, look it up with \"xxx\",/s) { - my $newsrv = uc('whois.networksolutions.com'); - return _whois($dom, $newsrv, $flag, [@{$ary||[]}, $srv]); - } - - return $whois; -} - -sub dlen { - my ($str) = @_; - my $dotcount = $str =~ tr/././; - return length($str) * (1 + $dotcount); -} - - -sub check_existance { - $_ = $_[0]; - - return undef if - /is unavailable/is || - /No entries found for the selected source/is || - /Not found:/s || - /No match\./s || - /is available/is || - /Not found/is && - !/ your query returns "NOT FOUND"/ && - !/Domain not found locally/ || - /No match for/is || - /No Objects Found/s || - /No domain records were found/s || - /No such domain/s || - /No entries found in the /s || - /Unable to find any information for your query/s || - /is not registered and may be available for registration/s; - return 1; -} - - -# Preloaded methods go here. - -# Autoload methods go after =cut, and are processed by the autosplit program. - -1; -__END__ -# Below is the stub of documentation for your module. You better edit it! - -=head1 NAME - -Net::Whois::Raw - Perl extension for unparsed raw whois information - -=head1 SYNOPSIS - - use Net::Whois::Raw qw( whois ); - - $s = whois('perl.com'); - $s = whois('funet.fi'); - $s = whois('yahoo.co.uk'); - - ### if you do "use Net::Whois::Raw qw( whois $OMIT_MSG $CHECK_FAIL - ### $CACHE_DIR $CACHE_TIME $USE_CNAMES $TIMEOUT ); - ### you can use these: - - $OMIT_MSG = 1; # This will attempt to strip several known copyright - messages and disclaimers sorted by servers. - Default is to give the whole response. - - $OMIT_MSG = 2; # This will try some additional stripping rules - if none are known for the spcific server. - - $CHECK_FAIL = 1; # This will return undef if the response matches - one of the known patterns for a failed search, - sorted by servers. - Default is to give the textual response. - - $CHECK_FAIL = 2; # This will match against several more rules - if none are known for the specific server. - - $CACHE_DIR = "/var/spool/pwhois/"; # Whois information will be - cached in this directory. Default is no cache. - - $CACHE_TIME = 24; # Cache files will be cleared after not accessed - for a specific number of hours. Documents will not be - cleared if they keep get requested for, independent - of disk space. Default is not to clear the cache. - - $USE_CNAMES = 1; # Use whois-servers.net to get the whois server - name when possible. Default is to use the - hardcoded defaults. - - - $TIMEOUT = 10; # Cancel the request if connection is not made within - a specific number of seconds. - - Note: as of version 0.21, extra data will be loaded only if the - OMIT_MSG or CHECK_FAIL flags were used, in order to reduce memory usage. - -=head1 DESCRIPTION - -Net::Whois::Raw queries NetworkSolutions and follows the Registrar: answer -for ORG, EDU, COM and NET domains. -For other TLDs it uses the whois-servers.net namespace. -(B<$TLD>.whois-servers.net). - -Setting the variables $OMIT_MSG and $CHECK_FAIL will match the results -against a set of known patterns. The first flag will try to omit the -copyright message/disclaimer, the second will attempt to determine if -the search failed and return undef in such a case. - -B<IMPORTANT>: these checks merely use pattern matching; they will work -on several servers but certainly not on all of them. - -(This features were contributed by Walery Studennikov B<despair@sama.ru>) - -=head1 AUTHOR - -Original author Ariel Brosh, B<schop@cpan.org>, -Inspired by jwhois.pl available on the net. - -Since Ariel has passed away in September 2002: - -Past maintainers Gabor Szabo, B<gabor@perl.org.il>, -Corris Randall B<corris@cpan.org> - -Current Maintainer: Walery Studennikov B<despair@cpan.org> - -=head1 CREDITS - -Fixed regular expression to match hyphens. (Peter Chow, -B<peter@interq.or.jp>) - -Added support for Tonga TLD. (.to) (Peter Chow, B<peter@interq.or.jp>) - -Added support for reverse lookup of IP addresses via the ARIN registry. (Alex Withers B<awithers@gonzaga.edu>) - -This will work now for RIPE addresses as well, according to a redirection from ARIN. (Philip Hands B<phil@uk.alcove.com>, Trevor Peirce B<trev@digitalcon.ca>) - -Added the pattern matching switches, (Walery Studennikov B<despair@sama.ru>) - -Modified pattern matching, added cache. (Tony L. Svanstrom B<tony@svanstrom.org>) - -=head1 CHANGES - -See file "Changes" in the distribution - - -=head1 CLARIFICATION - -As NetworkSolutions got most of the domains of InterNic as legacy, we -start by querying their server, as this way one whois query would be -sufficient for many domains. Starting at whois.internic.net or -whois.crsnic.net will result in always two requests in any case. - -=head1 NOTE - -Some users complained that the B<die> statements in the module make their -CGI scripts crash. Please consult the entries on B<eval> and -B<die> on L<perlfunc> about exception handling in Perl. - -=head1 COPYRIGHT - -Copyright 2000-2002 Ariel Brosh. -Copyright 2003-2003 Gabor Szabo. -Copyright 2003-2003 Corris Randall. -Copyright 2003-2003 Walery Studennikov. - -This package is free software. You may redistribute it or modify it under -the same terms as Perl itself. - -I apologize for any misunderstandings caused by the lack of a clear -licence in previous versions. - -=head1 COMMERCIAL SUPPORT - -Not available anymore. - -=head1 LEGAL - -Notice that registrars forbid querying their whois servers as a part of -a search engine, or querying for a lot of domains by script. -Also, omitting the copyright information (that was requested by users of this -module) is forbidden by the registrars. - -=head1 SEE ALSO - -L<perl(1)>, L<Net::Whois>, L<whois>. - -=cut diff --git a/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw/Data.pm b/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw/Data.pm deleted file mode 100644 index c505117..0000000 --- a/install/5.005/Net-Whois-Raw/lib/Net/Whois/Raw/Data.pm +++ /dev/null @@ -1,509 +0,0 @@ -package Net::Whois::Raw::Data; - -use strict; -use vars qw(%notfound %strip %servers); - -%servers = qw( - COM whois.crsnic.net - NET whois.crsnic.net - EDU whois.educause.net - ORG whois.publicinterestregistry.net - ARPA whois.arin.net - RIPE whois.ripe.net - MIL whois.nic.mil - COOP whois.nic.coop - MUSEUM whois.museum - - BIZ whois.neulevel.biz - INFO whois.afilias.net - NAME whois.nic.name - GOV whois.nic.gov - AERO whois.information.aero - NS whois.internic.net - IP whois.ripe.net - - AD whois.ripe.net - AL whois.ripe.net - AM whois.ripe.net - AS whois.gdns.net - AT whois.nic.at - AU box2.aunic.net - AZ whois.ripe.net - BA whois.ripe.net - BE whois.dns.be - BG whois.ripe.net - BR whois.nic.br - BY whois.ripe.net - CA eider.cira.ca - CC whois.nic.cc - CH domex.switch.ch - CK whois.ck-nic.org.ck - CL nic.cl - CN log.cnnic.net.cn - CX whois.nic.cx - CY whois.ripe.net - CZ dc1.eunet.cz - DE whois.denic.de - DK whois.dk-hostmaster.dk - DO ns.nic.do - DZ whois.ripe.net - EE whois.ripe.net - EG whois.ripe.net - ES whois.ripe.net - FI whois.ripe.net - FO whois.ripe.net - FR winter.nic.fr - GA whois.ripe.net - GB whois.ripe.net - GE whois.ripe.net - GL whois.ripe.net - GM whois.ripe.net - GR whois.ripe.net - GS whois.adamsnames.tc - HK whois.hkdnr.net.hk - HR whois.ripe.net - HU whois.nic.hu - ID muara.idnic.net.id - IE whois.domainregistry.ie - IL whois.isoc.org.il - IN whois.ncst.ernet.in - IS horus.isnic.is - IT whois.nic.it - JO whois.ripe.net - JP whois.nic.ad.jp - KG whois.domain.kg - KH whois.nic.net.kh - KR whois.krnic.net - LA whois.nic.la - LI domex.switch.ch - LK arisen.nic.lk - LT ns.litnet.lt - LU whois.dns.lu - LV whois.ripe.net - MA whois.ripe.net - MC whois.ripe.net - MD whois.ripe.net - MM whois.nic.mm - MS whois.adamsnames.tc - MT whois.ripe.net - MX whois.nic.mx - NL gw.domain-registry.nl - NO ask.norid.no - NU whois.worldnames.net - NZ akl-iis.domainz.net.nz - PL nazgul.nask.waw.pl - PT whois.ripe.net - RO whois.rotld.ro - RU whois.ripn.net - SE ear.nic-se.se - SG qs.nic.net.sg - SH whois.nic.sh - SI whois.arnes.si - SK whois.ripe.net - SM whois.ripe.net - ST whois.nic.st - SU whois.ripn.net - TC whois.adamsnames.tc - TF whois.adamsnames.tc - TH whois.thnic.net - TJ whois.nic.tj - TN whois.ripe.net - TO whois.tonic.to - TR whois.ripe.net - TW whois.twnic.net - UA whois.net.ua - UK whois.nic.uk - US whois.nic.us - VA whois.ripe.net - VG whois.adamsnames.tc - WS whois.worldsite.ws - YU whois.ripe.net - ZA apies.frd.ac.za - - RA--AQ5D4PA whois.i-dns.net - RA--AQ6TKQQ whois.i-dns.net - RA--AQ7EAMY whois.i-dns.net - XN--P1AG ru.whois.i-dns.net - XN--P1AG ru.whois.i-dns.net - XN--J1AEF whois.i-dns.net - XN--E1APQ whois.i-dns.net - XN--C1AVG whois.i-dns.net - - NET.RU whois.ripn.net - ORG.RU whois.ripn.net - PP.RU whois.ripn.net - SPB.RU whois.relcom.ru - MSK.RU whois.relcom.ru - RU.NET whois.relcom.ru -); - -# These do not seem to work -# CN log.cnnic.net.cn -# DK whois.dk-hostmaster.dk -# US whois.isi.edu -# These serve only several subdomains -# ZA apies.frd.ac.za - - -%notfound = ( - 'whois.nic.cc' => '^No match for', - 'whois.arin.net' => '^No match for', - 'whois.nic.br' => 'No match for', - 'ear.nic-se.se' => 'No data found', - 'whois.nic.sh' => '^No match for', - 'whois.nic.mx' => '^Nombre del Dominio:', - 'whois.domainregistry.ie' => 'There was no match', - 'domex.switch.ch' => '^We do not have an entry in our database matching your', - 'whois.dns.lu' => 'No entries found', - 'whois.worldsite.ws' => 'No match for', - 'whois.nic.it' => '^No entries found', - 'whois.nic.coop' => 'No Objects Found', - 'whois.nic.at' => 'nothing found', - 'ask.norid.no' => 'no matches', - 'whois.nic.uk' => '^\\s*No match for', - 'whois.nic.ad.jp' => 'No match', - 'whois.arnes.si' => 'No entries found', - 'whois.tonic.to' => 'No match for', - 'whois.hkdnr.net.hk' => '^No Match for', - 'whois.worldnames.net' => 'NO MATCH for domain', - 'whois.rotld.ro' => 'No entries found', - 'whois.nic.st' => '^No entries found', - 'whois.isoc.org.il' => 'No data was found', - 'eider.cira.ca' => 'Status:\\s*UNAV', - 'whois.nic.tj' => '^No match for', - 'aardvark.dns.be' => 'No such domain', - 'nazgul.nask.waw.pl' => '^Domain name .* does not exists', - 'whois.ncst.ernet.in' => '^No matches', - 'whois.krnic.net' => 'Above domain name is not registered', - 'whois.museum' => '^No information for', - 'whois.net.ua' => 'No entries found', - 'apies.frd.ac.za' => 'No information is available', - 'gw.domain-registry.nl' => 'invalid query', - 'whois.denic.de' => 'No entries found', - 'whois.nic.mil' => '^No match for', - 'horus.isnic.is' => 'No entries found', - 'winter.nic.fr' => 'No entries found', - 'whois.ripe.net' => 'No entries found', - 'whois.ripn.net' => 'No entries found', - 'qs.nic.net.sg' => 'NO entry found', - 'whois.twnic.net' => '^NO MATCH: This domain is', - 'nic.cl' => 'Invalid domain name', - 'whois.gdns.net' => '^Domain Not Found', - 'box2.aunic.net' => 'No entries found', - 'whois.nic.cx' => '^No match for', - 'dc1.eunet.cz' => 'No data found', - 'akl-iis.domainz.net.nz' => 'domain_name_status: 00 Not Listed', - 'ns.litnet.lt' => 'No matches found', - 'whois.adamsnames.tc' => 'is not a domain controlled by', - 'whois.nic.la' => '^NO MATCH for', - 'whois.networksolutions.com' => '(?i)no match', - 'whois.thnic.net' => 'No entries found', - 'whois.neulevel.biz' => '^Not found:', - 'whois.afilias.net' => '^NOT FOUND', -); - -%strip = ( - 'whois.crsnic.net' => [ - '^TERMS OF USE:', - '^database through', - '^automated except', - '^modify existing', - '^Services\' \(\"VeriSign\"\)', - '^information purposes only', - '^about or related to a', - '^guarantee its accuracy\.', - '^by the following terms', - '^for lawful purposes and', - '^to: (1) allow, enable,', - '^unsolicited, commercial', - '^or facsimile; or \(2\)', - '^that apply to VeriSign', - '^repackaging, dissemination', - '^prohibited without the', - '^use electronic processes', - '^query the Whois database', - '^domain names or modify', - '^to restrict your access', - '^operational stability\.', - '^Whois database for', - '^reserves the right', - - '^NOTICE AND TERMS OF USE:', - '^Data in Network Solutions', - '^purposes only, and to assist', - '^to a domain name registration', - '^By submitting a WHOIS query,', - '^You agree that you may use', - '^circumstances will you use', - '^the transmission of mass', - '^via e-mail, telephone, or', - '^electronic processes that', - '^compilation, repackaging,', - '^high-volume, automated,', - '^database. Network Solutions', - '^database in its sole discretion,', - '^querying of the WHOIS database', - '^Network Solutions reserves the', - - '^NOTICE: The expiration date', - '^registrar\'s sponsorship of', - '^currently set to expire\.', - '^date of the domain name', - '^registrar. Users may', - '^view the registrar\'s', - '^to: \(1\) allow, enable,', - '^The Registry database', - '^Registrars\.', - '^Domain not found locally,', - '^Local WHOIS DB must be out', - - '^Whois Server Version', - '^Domain names in the .com', - '^with many different', - '^for detailed information\.', - - '^>>> Last update of whois database', - '^$', - ], - 'whois.tonic.to' => [ - '^Tonic whoisd', - ], - 'whois.net.ua' => [ - '^%', - ], - 'whois.nic.cx' => [ - '^ Registrar: Christmas Island', - '^ Whois Server: whois.nic.cx', - ], - 'gw.domain-registry.nl' => [ - 'Rights restricted by copyright', - 'http://www.domain-registry.nl', - ], - 'whois.denic.de' => [ - '^%', - ], - 'whois.gdns.net' => [ - '^\\w+ Whois Server', - '^Access to .* WHOIS information is provided to', - '^determining the contents of a domain name', - '^registrar database. The data in', - '^informational purposes only, and', - '^Compilation, repackaging, dissemination,', - '^in its entirety, or a substantial portion', - 'prior written permission. By', - '^by this policy. All rights reserved.', - ], - 'whois.isoc.org.il' => [ - '^%', - ], - 'whois.dns.lu' => [ - '^%', - ], - 'whois.worldnames.net' => [ - '^----------------------------------', - '^.\\w+ Domain .* Whois service', - '^Copyright by .* Domain LTD', - '^----------------------------------', - '^Database last updated', - ], - 'whois.nic.sh' => [ - '^NIC Whois Server', - ], - 'whois.nic.coop' => [ - '^%', - '^ The .COOP Registration', - '^ Please use the', - ], - 'domex.switch.ch' => [ - '^whois: This information is subject', - '^See http', - ], - 'whois.twnic.net' => [ - '^Registrar:', - '^URL: http://rs.twnic.net.tw', - ], - 'nic.cl' => [ - '^cl.cl:', - '^Más información: http://www.nic.cl/', - ], - 'whois.nic.mx' => [ - '^------------------', - '^La información que ha', - '^relacionados con la', - '^DNS administrado por el NIC-México.', - '^Queda absolutamente prohibido', - '^envío de e-mail no solicitado', - '^productos y servicios', - '^del NIC-México.', - '^La base de datos generada', - '^protegida por las leyes de', - '^internacionales sobre la materia.', - ], - 'whois.domainregistry.ie' => [ - '^%', - ], - 'ns.litnet.lt' => [ - '^%', - ], - 'dc1.eunet.cz' => [ - '^%', - ], - 'whois.ripn.net' => [ - '^%', - ], - 'whois.nic.uk' => [ - '^The .* Registration Host contains information', - '^registrations in the .*co.uk', - 'and .*\\.uk second-level domains.', - ], - 'whois.nic.br' => [ - '^%', - ], - 'whois.krnic.net' => [ - '^Korea Internet Information Service', - '^20\\d\\d³â 7¿ù 2ÀϺÎÅÍ´Â °³¼±µÈ Whois', - '^.com, .net, .org', - ], - 'whois.arnes.si' => [ - '^\\*', - ], - 'nazgul.nask.waw.pl' => [ - '^%', - ], - 'whois.nic.la' => [ - '^ WHOIS server', - '^ The Data in the', - 'for information purposes,', - '^ and to assist persons in obtaining', - '^ domain name registration record. Sterling Holdings, Limited,', - '^ does not guarantee its accuracy.', - '^ you will use this Data only for lawful', - '^ circumstances will you use this Data', - '^ \\(1\\) allow, enable, or otherwise s', - '^ unsolicited, commercial advertising', - '^ \\(spam\\); or', - '^ that apply to Sterling Holdings', - '^ Sterling Holdings .* reserves the right to modify', - '^ terms at any time. By submitting this', - '^ policy.', - ], - 'horus.isnic.is' => [ - '^%', - ], - 'whois.rotld.ro' => [ - '^%', - ], - 'whois.nic.st' => [ - '^The data in the .* database is provided', - '^The .* Registry does not guarantee', - '^The data in the .* database is protected', - '^By submitting a .* query, you agree that you will', - '^The Domain Council of .* reserves the right', - ], - 'ask.norid.no' => [ - '^%', - ], - 'whois.hkdnr.net.hk' => [ - '^Whois server', - '^Domain names in the', - '^and .* can now be registered', - '^Go to http://www.hkdnr.net.hk', - '^---------', - '^The Registry contains ONLY', - '^.* and .*\\.HK domains.', - ], - 'whois.arin.net' => [ - '^The ARIN Registration Services Host contains', - '^Network Information:.*Networks', - '^Please use the whois server at', - '^Information and .* for .* Information.', - ], - 'qs.nic.net.sg' => [ - '^\\*', - ], - 'akl-iis.domainz.net.nz' => [ - '^%', - ], - 'whois.nic.hu' => [ - '^%', - ], - 'whois.worldsite.ws' => [ - '^Welcome to the .* Whois Server', - '^Use of this service for any', - '^than determining the', - '^in the .* to be registered', - '^prohibited.', - ], - 'whois.ripe.net' => [ - '^%', - ], - 'whois.nic.cc' => [ - '^This information is', - '^The Data in eNIC', - '^Corporation for information', - '^in obtaining information', - '^registration record', - '^accuracy. By submitting', - '^will use this Data only', - '^no circumstances will', - '^or otherwise support', - '^commercial advertising', - '^or \\(2\\) enable high volume', - '^apply to eNIC Corporation', - '^reserves the right to', - '^submitting this query,', - ], - 'whois.nic.mil' => [ - '^To single out one record', - '^handle, shown in parenthesis', - '^Please be advised that this whois', - '^All INTERNET Domain, IP Network Number,', - '^the Internet Registry, RS.INTERNIC.NET.', - ], - 'box2.aunic.net' => [ - '^%', - ], - 'whois.nic.ad.jp' => [ - '^[', - ], - 'winter.nic.fr' => [ - '^Tous droits reserves par copyright.', - '^Voir http://www.nic.fr', - '^Rights restricted by copyright.', - '^See http://www.nic.fr/outils', - ], - 'ear.nic-se.se' => [ - '^#', - ], - 'whois.networksolutions.com' => [ - '^The Data in', - '^Solutions for information', - '^information about or', - '^Network Solutions does not guarantee', - '^WHOIS query, you agree that', - '^purposes and that, under no circumstances', - '^\\(1\\) allow, enable, or', - '^unsolicited, commercial advertising', - '^\\(spam\\); or', - '^that apply to Network', - '^reserves the right', - '^this query, you', - ], - 'aardvark.dns.be' => [ - '^%', - ], - 'whois.dns.be' => [ - '^%-', - ], - 'whois.nic.tj' => [ - '^This Whois server looks up only', - '^Please see http://nic.tj for more', - '^Tajikistan, and the Public Registrar Network.', - ], - 'whois.nic.at' => [ - '^%', - ], -); - - -1; diff --git a/install/5.005/Net-Whois-Raw/pwhois b/install/5.005/Net-Whois-Raw/pwhois deleted file mode 100755 index 56d9a7e..0000000 --- a/install/5.005/Net-Whois-Raw/pwhois +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/perl -w - -use Net::Whois::Raw qw( whois $OMIT_MSG $CHECK_FAIL $TIMEOUT $CACHE_DIR ); -use Getopt::Std; -use strict; -use vars qw($opt_s $opt_c $opt_S $opt_C $opt_t $opt_T $opt_h); - -getopts("scSCtT:h"); - -if ($opt_h) { - print <<EOM; - $0 [ -s | -S ] [ -c | -C ] [ -t <timeout> ] [ -T] <domain> [ <server> ] - -The -s switch attempts to strip the copyright message or disclaimer. -The -S switch will attempt some exra rules for it. -The -c switch attempts to return an empty answer for failed searches. -The -C switch will attempt some exra rules for it. -The -T switch takes a parameter that is used for the timeout for -connection attempts. -The -t switch enables caching. -EOM - exit; -} - - -$OMIT_MSG = $CHECK_FAIL = 0; - -$OMIT_MSG = 1 if $opt_s; -$OMIT_MSG = 2 if $opt_S; -$CHECK_FAIL = 1 if $opt_c; -$CHECK_FAIL = 2 if $opt_C; -$TIMEOUT = $opt_T; - -$CACHE_DIR = undef; -if ($opt_t) { - if ($^O =~ /Win/) { - $CACHE_DIR = $ENV{'TEMP'} || "C:\\temp"; - } else { - $CACHE_DIR = $ENV{'TEMP'} || "/tmp"; - my @ent = getpwuid($>); - if (@ent) { - foreach ("/tmp/$ent[0]", "$ent[7]/.pwhois") { - mkdir $_, 0644; - if (open(O, ">$_/__$$-$$.tmp")) { - close(O); - unlink "$_/__$$-$$.tmp"; - $CACHE_DIR = $_; - last; - } - } - } - } -} - -my $dom = $ARGV[0] || die "Usage: $0 domain"; - -my $server = $ARGV[1]; - -eval { - my $result = whois($dom, $server); - if ($result) { - print $result; - } else { - print STDERR "Failed.\n"; - } -}; -if ($@) { - my $err = $@; - $err =~ s/\s+at \S+ line \d+\.$//; - print "\nWhois information could not be fetched:\n$err\n"; - exit -1; -} - -__END__ - -=head1 NAME - -pwhois - Perl written whois client - -=head1 SYNOPSIS - - pwhois perl.com - pwhois gnu.org - pwhois -s police.co.il - pwhois -c there.is.no.tld.called.foobar - pwhois yahoo.com whois.networksolutions.com - pwhois -T 10 funet.fi - -etc etc..... - -=head1 DESCRIPTION - -Just invoke with a domain name, optionally with a whois server name. -The B<-s> switch attempts to strip the copyright message or disclaimer. -The B<-c> switch attempts to return an empty answer for failed searches. -The B<-T> switch takes a parameter that is used for the timeout for -connection attempts. - -=head1 AUTHOR - -Ariel Brosh, B<schop@cpan.org> - -=head1 SEE ALSO - -L<Net::Whois::Raw>. - diff --git a/install/5.005/Net-Whois-Raw/t/01.t b/install/5.005/Net-Whois-Raw/t/01.t deleted file mode 100644 index dd7ffc4..0000000 --- a/install/5.005/Net-Whois-Raw/t/01.t +++ /dev/null @@ -1,22 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -use strict; - -use Test::More tests => 5; -BEGIN { use_ok('Net::Whois::Raw',qw( whois )) }; - -my @domains = qw( - yahoo.com - freshmeat.net - freebsd.org - ucsb.edu -); - -print "The following tests requires internet connection...\n"; - -foreach my $domain ( @domains ) { - my $txt = whois( $domain ); - ok($txt =~ /$domain/i, "$domain resolved"); -} - |