spam/ 0040775 0005671 0000012 00000000000 11017163271 011503 5 ustar jcameron wheel spam/edit_header.cgi 0100775 0005671 0000012 00000012204 11017163270 014422 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_header.cgi
# Display extra header and body test
require './spam-lib.pl';
&can_use_check("header");
&ui_print_header(undef, $text{'header_title'}, "");
$conf = &get_config();
print "$text{'header_desc'}
\n";
&start_form("save_header.cgi", $text{'header_header'}."\n".
"($text{'header_switch'} )");
if (!$module_info{'usermin'}) {
print "
$text{'header_allow'} ";
$allow = &find("allow_user_rules", $conf);
&yes_no_field("allow_user_rules", $allow, 0);
print " \n";
}
@header = &find("header", $conf);
print " $text{'header_test'} \n";
&edit_table("header",
[ $text{'header_tname'}, $text{'header_name'}, $text{'header_op'},
$text{'header_pat'}, $text{'header_default'} ],
[ map { [ &split_header($_->{'value'}) ] } @header ], [ ], \&header_conv, 2);
print " \n";
print " \n";
push(@body, map { [ &split_body($_->{'value'}), 0 ] } &find("body", $conf));
push(@body, map { [ &split_body($_->{'value'}), 1 ] } &find("rawbody", $conf));
push(@body, map { [ &split_body($_->{'value'}), 2 ] } &find("fullbody", $conf));
push(@body, map { [ &split_body($_->{'value'}), 3 ] } &find("full", $conf));
print " $text{'header_body'} \n";
&edit_table("body",
[ $text{'header_tname'}, $text{'header_mode'}, $text{'header_op'},
$text{'header_pat'} ], \@body, [ ], \&body_conv, 2);
print " \n";
@uri = &find("uri", $conf);
print " $text{'header_uri'} \n";
&edit_table("uri",
[ $text{'header_tname'}, $text{'header_pat'} ],
[ map { $_->{'words'} } @uri ], [ 20, 40 ], undef, 2);
print " \n";
print " \n";
@meta = &find("meta", $conf);
print " $text{'header_meta'} \n";
&edit_table("meta",
[ $text{'header_tname'}, $text{'header_bool'} ],
[ map { $_->{'value'} =~ /^(\S+)\s*(.*)$/ ? [ $1, $2 ] : [ ] } @meta ],
[ 20, 40 ], undef, 2);
print " \n";
@score = &find("score", $conf);
print " $text{'score_score'} \n";
&edit_table("score",
[ $text{'score_name'}, $text{'score_points'} ],
[ map { $_->{'words'} } @score ], [ 30, 6 ]);
print " \n";
@describe = &find("describe", $conf);
print " $text{'score_describe'} \n";
&edit_table("describe",
[ $text{'score_name'}, $text{'score_descr'} ],
[ map { $_->{'value'} =~ /^(\S+)\s*(.*)/ ? [ $1, $2 ] : [ ] }
@describe ], [ 30, 40 ]);
print " \n";
&end_form(undef, $text{'save'});
&ui_print_footer("", $text{'index_return'});
# header_conv(col, name, size, value, &values)
sub header_conv
{
if ($_[0] == 0) {
return sprintf " ",
&html_escape($_[3]);
}
elsif ($_[0] == 1) {
local $h = $_[3] =~ /^exists:(\S+)$/ ? $1 : $_[3] =~ /^eval:/ ? "" : $_[3];
return sprintf " ",
&html_escape($h);
}
elsif ($_[0] == 2) {
local $rv = "\n";
$rv .= sprintf "%s\n",
$_[3] eq '=~' ? "selected" : "", $text{'header_op0'};
$rv .= sprintf " %s\n",
$_[3] eq '!~' ? "selected" : "", $text{'header_op1'};
$rv .= sprintf " %s\n",
$_[4]->[1] =~ /^exists:/ ? "selected" : "", $text{'header_op2'};
$rv .= sprintf " %s\n",
$_[4]->[1] =~ /^eval:/ ? "selected" : "", $text{'header_op3'};
$rv .= " \n";
return $rv;
}
elsif ($_[0] == 3) {
return sprintf " ",
&html_escape($_[4]->[1] =~ /^eval:(.*)/ ? $1 : $_[3]);
}
elsif ($_[0] == 4) {
return sprintf " ",
&html_escape($_[3]);
}
}
# body_conv(col, name, size, value, &values)
sub body_conv
{
if ($_[0] == 0) {
return sprintf " ",
&html_escape($_[4]->[0]);
}
elsif ($_[0] == 1) {
local $rv = "\n";
local $m;
foreach $m (0 .. 3) {
$rv .= sprintf "%s\n",
$m, $m == $_[4]->[2] ? "selected" : "", $text{'header_mode'.$m};
}
$rv .= " \n";
return $rv;
}
elsif ($_[0] == 2) {
local $rv = "\n";
$rv .= sprintf "%s\n",
$_[4]->[1] =~ /^eval:/ ? "" : "selected", $text{'header_op0'};
$rv .= sprintf " %s\n",
$_[4]->[1] =~ /^eval:/ ? "selected" : "", $text{'header_op3'};
$rv .= " \n";
return $rv;
}
elsif ($_[0] == 3) {
return sprintf " ",
&html_escape($_[4]->[1] =~ /^eval:(.*)$/ ? $1 : $_[4]->[1]);
}
}
sub split_header
{
if ($_[0] =~ /^(\S+)\s+(eval:\S+\(.*\))/) {
return ($1, $2);
}
elsif ($_[0] =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\/.*\/\S*)\s*(if-unset:\s*(.*))?/) {
return ($1, $2, $3, $4, $6);
}
else {
return ( );
}
}
sub split_body
{
if ($_[0] =~ /^(\S+)\s+((\/.*\/\S*)|(eval:\S+\(.*\)))/) {
return ($1, $2);
}
else {
return ( );
}
}
spam/edit_procmail.cgi 0100775 0005671 0000012 00000004605 11017163270 015006 0 ustar jcameron wheel #!/usr/local/bin/perl
# Allow changing of the rule for delivering spam
require './spam-lib.pl';
&can_use_check("procmail");
&ui_print_header(undef, $text{'procmail_title'}, "");
print &text('procmail_desc', "$pmrc "),"\n";
# Find the existing recipe
&foreign_require("procmail", "procmail-lib.pl");
@pmrcs = &get_procmailrc();
$pmrc = $pmrcs[$#pmrcs];
@recipes = &procmail::parse_procmail_file($pmrc);
$spamrec = &find_file_recipe(\@recipes);
if (!$spamrec) {
$mode = 4;
}
elsif ($spamrec->{'action'} eq "\$DEFAULT") {
$mode = 4;
}
elsif ($spamrec->{'action'} eq "/dev/null") {
$mode = 0;
}
elsif ($spamrec->{'action'} =~ /^(.*)\/$/) {
$mode = 2;
$file = $1;
}
elsif ($spamrec->{'action'} =~ /^(.*)\/\.$/) {
$mode = 3;
$file = $1;
}
elsif ($spamrec->{'type'} eq '!') {
$mode = 5;
$email = $spamrec->{'action'};
}
else {
$mode = 1;
$file = $spamrec->{'action'};
}
print "
\n";
&ui_print_footer("", $text{'index_return'});
spam/edit_report.cgi 0100775 0005671 0000012 00000011120 11017163270 014501 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_report.cgi
# Display a form for editing the spam report text
require './spam-lib.pl';
&can_use_check("report");
&ui_print_header(undef, $text{'report_title'}, "");
$conf = &get_config();
print "$text{'report_desc'}\n";
&start_form("save_report.cgi", $text{'report_header'});
if (&version_atleast(3.0)) {
# New version can replace subject, from and to headers
@rheader = &find("rewrite_header", $conf);
foreach $h ("subject", "from", "to") {
print "
",$text{'report_r'.$h},
" ";
($hn) = grep { lc($_->{'words'}->[0]) eq $h } @rheader;
&opt_field("rewrite_header_${h}",
$hn ? join(" ", @{$hn->{'words'}}[1..@{$hn->{'words'}}-1]) : undef, 15);
}
}
else {
# Older versions can only replace subject header
print " $text{'report_rewrite'} ";
$rewrite = &find("rewrite_subject", $conf);
&yes_no_field("rewrite_subject", $rewrite, 1);
print " \n";
print " $text{'report_subject'} ";
$subject = &find("subject_tag", $conf);
&opt_field("subject_tag", $subject, 15, "*****SPAM*****");
print " \n";
}
print " $text{'report_rheader'} ";
$header = &find("report_header", $conf);
&yes_no_field("report_header", $header, 0);
print " \n";
print " $text{'report_useterse'} ";
$terse = &find("use_terse_report", $conf);
&yes_no_field("use_terse_report", $terse, 0);
print " \n";
print " $text{'report_fold'} ";
$fold = &find("fold_headers", $conf);
&yes_no_field("fold_headers", $fold, 1);
print " \n";
print " $text{'report_detail'} ";
$detail = &find("detailed_phrase_score", $conf);
&yes_no_field("detailed_phrase_score", $detail, 0);
print " \n";
if (!&version_atleast(3.0)) {
print " $text{'report_stars'} ";
$stars = &find("spam_level_stars", $conf);
&yes_no_field("spam_level_stars", $stars, 1);
print " \n";
}
print " $text{'report_char'} ";
$char = &find("spam_level_char", $conf);
&opt_field("spam_level_char", $char, 2, "*");
print " \n";
print " $text{'report_defang'} ";
$defang = &find("defang_mime", $conf);
&yes_no_field("defang_mime", $defang, 1);
print " \n";
if (&version_atleast(2.6)) {
print " $text{'report_safe'} ";
$safe = &find("report_safe", $conf);
#&yes_no_field("report_safe", $safe, 0);
&option_field("report_safe", $safe, 1,
[ [ 0, $text{'no'} ],
[ 1, $text{'yes'} ],
[ 2, $text{'report_safe2'} ] ]);
print " \n";
}
if (&version_atleast(3)) {
print " \n";
print " $text{'report_adds'} \n";
print " \n";
print &ui_columns_start([ $text{'report_addfor'},
$text{'report_addheader'},
$text{'report_addtext'} ]);
$i = 0;
foreach $a (&find_value("add_header", $conf), undef) {
local ($for, $header, $text) = split(/\s+/, $a, 3);
print &ui_columns_row([
&ui_select("addfor_$i", $for,
[ [ "", " " ],
map { [ $_, $text{'report_add'.$_} ] }
( "spam", "ham", "all" ) ]),
&ui_textbox("addheader_$i", $header, 30),
&ui_textbox("addtext_$i", $text, 50)
]);
$i++;
}
print &ui_columns_end();
print " \n";
}
print " \n";
@report = &find_value("report", $conf);
$clear = &find("clear_report_template", $conf);
print " $text{'report_report'} \n";
printf " %s\n",
$clear ? "" : "checked", $text{'report_noclear'};
printf " %s \n",
$clear ? "checked" : "", $text{'report_clear'};
print " \n";
@report = &find_value("terse_report", $conf);
$clear = &find("clear_terse_report_template", $conf);
print " $text{'report_terse'} \n";
printf " %s\n",
$clear ? "" : "checked", $text{'report_noclear'};
printf " %s \n",
$clear ? "checked" : "", $text{'report_clear'};
print " \n";
print "\n";
&end_form(undef, $text{'save'});
&ui_print_footer("", $text{'index_return'});
spam/edit_score.cgi 0100775 0005671 0000012 00000007276 11017163270 014322 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_score.cgi
# Display a form for editing spam scoring options
require './spam-lib.pl';
&can_use_check("score");
&ui_print_header(undef, $text{'score_title'}, "");
$conf = &get_config();
print "$text{'score_desc'}\n";
&start_form("save_score.cgi", $text{'score_header'});
$hits_param = &version_atleast(3.0) ? "required_score" : "required_hits";
print "
$text{'score_hits'} ";
$hits = &find($hits_param, $conf);
&opt_field($hits_param, $hits, 5, "5");
print " \n";
print " $text{'score_auto'} ";
$auto = &find("auto_whitelist_factor", $conf);
&opt_field("auto_whitelist_factor", $auto, 5, "0.5");
print " \n";
print " $text{'score_bayes'} ";
$bayes = &find("use_bayes", $conf);
&yes_no_field("use_bayes", $bayes, 1);
print " \n";
print " $text{'score_mx'} ";
$mx = &find("check_mx_attempts", $conf);
&opt_field("check_mx_attempts", $mx, 4, "2");
print " \n";
print " $text{'score_mxdelay'} ";
$mxdelay = &find("check_mx_delay", $conf);
&opt_field("check_mx_delay", $mxdelay, 4, "2");
print " \n";
print " $text{'score_rbl'} ";
$rbl = &find("skip_rbl_checks", $conf);
&yes_no_field("skip_rbl_checks", $rbl, 0);
print " \n";
print " $text{'score_timeout'} ";
$timeout = &find("rbl_timeout", $conf);
&opt_field("rbl_timeout", $timeout, 5, "30");
print " \n";
print " $text{'score_received'} ";
$received = &find("num_check_received", $conf);
&opt_field("num_check_received", $received, 5, 2);
print " \n";
print " \n";
@langs = &find_value("ok_languages", $conf);
%langs = map { $_, 1 } split(/\s+/, join(" ", @langs));
$lmode = !@langs ? 2 : $langs{'all'} ? 1 : 0;
print " $text{'score_langs'} \n";
printf " %s (%s) \n",
$lmode == 2 ? 'checked' : '', $text{'default'}, $text{'score_langsall'};
printf " %s \n",
$lmode == 1 ? 'checked' : '', $text{'score_langsall'};
printf " %s \n",
$lmode == 0 ? 'checked' : '', $text{'score_langssel'};
print " \n";
open(LANGS, "$module_root_directory/langs");
while() {
if (/^(\S+)\s+(.*)/) {
printf "%s\n",
$1, $langs{$1} ? "selected" : "", $2;
}
}
close(LANGS);
print " \n";
@locales = &find_value("ok_locales", $conf);
%locales = map { $_, 1 } split(/\s+/, join(" ", @locales));
$lmode = !@locales ? 2 : $locales{'all'} ? 1 : 0;
print " $text{'score_locales'} \n";
printf " %s (%s) \n",
$lmode == 2 ? 'checked' : '', $text{'default'},$text{'score_localesall'};
printf " %s \n",
$lmode == 1 ? 'checked' : '', $text{'score_localesall'};
printf " %s \n",
$lmode == 0 ? 'checked' : '', $text{'score_localessel'};
print " \n";
open(LANGS, "$module_root_directory/locales");
while() {
if (/^(\S+)\s+(.*)/) {
printf "%s\n",
$1, $locales{$1} ? "selected" : "", $2;
}
}
close(LANGS);
print " \n";
&end_form(undef, $text{'save'});
&ui_print_footer("", $text{'index_return'});
spam/edit_setup.cgi 0100775 0005671 0000012 00000003720 11017163270 014335 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_setup.cgi
# Display a form for setting up SpamAssassin, either locally or globally
require './spam-lib.pl';
&can_use_check("setup");
&ui_print_header(undef, $text{'setup_title'}, "");
&foreign_require("procmail", "procmail-lib.pl");
@pmrcs = &get_procmailrc();
$pmrc = $pmrcs[$#pmrcs];
if ($module_info{'usermin'}) {
print &text('setup_desc_usermin', "$pmrc "),"\n";
}
else {
print &text('setup_desc_webmin', "$pmrc "),"
\n";
}
print "
\n";
&ui_print_footer("", $text{'index_return'});
spam/edit_simple.cgi 0100775 0005671 0000012 00000002604 11017163270 014466 0 ustar jcameron wheel #!/usr/local/bin/perl
# Show simple body tests
require './spam-lib.pl';
&can_use_check("header");
&ui_print_header(undef, $text{'simple_title'}, "");
$conf = &get_config();
print "$text{'simple_desc'}\n";
&start_form("save_simple.cgi", $text{'simple_header'}."\n".
"($text{'simple_switch'} )");
print "
\n";
# Find the tests we can handle
@simples = &get_simple_tests($conf);
print &ui_columns_start([ $text{'simple_name'},
$text{'simple_for'},
$text{'simple_regexp'},
$text{'simple_score'},
$text{'simple_describe'} ], "100");
$i = 0;
foreach $s (@simples, { }, { }, { }) {
print &ui_columns_row([
&ui_textbox("name_$i", $s->{'name'}, 20),
&ui_select("header_$i", $s->{'header'},
[ [ "subject", "Subject: header" ],
[ "from", "From: header" ],
[ "to", "To: header" ],
[ "cc", "Cc: header" ],
[ "received", "Received: header" ],
[ "uri", "URL in message" ],
[ "body", "Message body" ],
[ "full", "Un-decoded body" ] ],
0, 0, $s->{'header'} ? 1 : 0),
"/".&ui_textbox("regexp_$i", $s->{'regexp'}, 25)."/".
&ui_textbox("flags_$i", $s->{'flags'}, 2),
&ui_textbox("score_$i", $s->{'score'}, 5),
&ui_textbox("describe_$i", $s->{'describe'}, 30)
]);
$i++;
}
print &ui_columns_end();
print " \n";
&end_form(undef, $text{'save'});
&ui_print_footer("", $text{'index_return'});
spam/edit_user.cgi 0100775 0005671 0000012 00000006402 11017163270 014153 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_user.cgi
# Display other misc user-level options
require './spam-lib.pl';
&can_use_check("user");
&ui_print_header(undef, $text{'user_title'}, "");
$conf = &get_config();
print "$text{'user_desc'}\n";
&start_form("save_user.cgi", $text{'user_header'});
$dns = lc(&find_value("dns_available", $conf));
$dns = "test" if (!$dns && $config{'defaults'});
print "
$text{'user_dns'} \n";
printf " %s\n",
$dns eq 'yes' ? "checked" : "", $text{'yes'};
printf " %s\n",
$dns eq 'no' ? "checked" : "", $text{'no'};
if (!$config{'defaults'}) {
printf " %s (%s)\n",
!$dns ? "checked" : "", $text{'default'}, $text{'user_dnstest'};
}
printf " %s\n",
$dns =~ /^test/ ? "checked" : "", $text{'user_dnslist'};
printf " \n",
$dns =~ /^test:\s*(.*)/ ? $1 : "";
print " \n";
print " $text{'user_razor'} \n";
$razor = &find("razor_timeout", $conf);
&opt_field("razor_timeout", $razor, 5, 10);
print " \n";
print " \n";
print " $text{'user_dcc'} \n";
$dcc = &find("dcc_path", $conf);
&opt_field("dcc_path", $dcc, 40, $text{'user_inpath'}, 1);
print &file_chooser_button("dcc_path", 0);
print " \n";
print " $text{'user_bodymax'} \n";
$bodymax = &find("dcc_body_max", $conf);
&opt_field("dcc_body_max", $bodymax, 6, 999999);
print " \n";
print " $text{'user_timeout'} \n";
$timeout = &find("dcc_timeout", $conf);
&opt_field("dcc_timeout", $timeout, 5, 10);
print " \n";
print " $text{'user_fuz1max'} \n";
$fuz1max = &find("dcc_fuz1_max", $conf);
&opt_field("dcc_fuz1_max", $fuz1max, 6, 999999);
print " \n";
print " $text{'user_fuz2max'} \n";
$fuz2max = &find("dcc_fuz2_max", $conf);
&opt_field("dcc_fuz2_max", $fuz2max, 6, 999999);
print " \n";
if (!&version_atleast(3)) {
print " $text{'user_dheader'} \n";
$dheader = &find("dcc_add_header", $conf);
&yes_no_field("dcc_add_header", $dheader, 0);
print " \n";
}
print " \n";
print " $text{'user_pyzor'} \n";
$pyzor = &find("pyzor_path", $conf);
&opt_field("pyzor_path", $pyzor, 40, $text{'user_inpath'}, 1);
print &file_chooser_button("pyzor_path", 0);
print " \n";
print " $text{'user_pbodymax'} \n";
$pbodymax = &find("pyzor_body_max", $conf);
&opt_field("pyzor_body_max", $pbodymax, 6, 999999);
print " \n";
print " $text{'user_ptimeout'} \n";
$ptimeout = &find("pyzor_timeout", $conf);
&opt_field("pyzor_timeout", $ptimeout, 5, 10);
print " \n";
print " $text{'user_pheader'} \n";
$pheader = &find("pyzor_add_header", $conf);
&yes_no_field("pyzor_add_header", $pheader, 0);
print " \n";
&end_form(undef, $text{'save'});
&ui_print_footer("", $text{'index_return'});
spam/edit_white.cgi 0100775 0005671 0000012 00000010541 11017163270 014314 0 ustar jcameron wheel #!/usr/local/bin/perl
# edit_white.cgi
# Display white and black lists of to and from addresses
require './spam-lib.pl';
&can_use_check("white");
&ui_print_header(undef, $text{'white_title'}, "");
$conf = &get_config();
print "$text{'white_desc'}\n";
&start_form("save_white.cgi", $text{'white_header'});
print "
$text{'white_from'} ",
"$text{'white_unfrom'} \n";
print " \n";
@from = &find("whitelist_from", $conf);
&edit_textbox("whitelist_from", [ map { @{$_->{'words'}} } @from ], 40, 5);
print " \n";
@un = &find("unwhitelist_from", $conf);
&edit_textbox("unwhitelist_from", [ map { @{$_->{'words'}} } @un ], 40, 5);
print " \n";
if ($config{'show_global'}) {
print " $text{'white_gfrom'} ",
"$text{'white_gunfrom'} \n";
$gconf = &get_config($config{'global_cf'}, 1);
print " \n";
@gfrom = &find("whitelist_from", $gconf);
&edit_textbox("gwhitelist_from", [ map { @{$_->{'words'}} } @gfrom ], 40, 5);
print " \n";
@gun = &find("unwhitelist_from", $gconf);
&edit_textbox("gunwhitelist_from", [ map { @{$_->{'words'}} } @gun ], 40, 5);
print " \n";
print "\n";
}
else {
print " $text{'white_rcvd'} \n";
print " \n";
@rcvd = &find("whitelist_from_rcvd", $conf);
&edit_table("whitelist_from_rcvd",
[ $text{'white_addr'}, $text{'white_rcvdhost'} ],
[ map { $_->{'words'} } @rcvd ], [ 40, 30 ], undef, 3);
print " \n";
}
print " \n";
print " $text{'white_black'} ",
"$text{'white_unblack'} \n";
print " \n";
@from = &find("blacklist_from", $conf);
&edit_textbox("blacklist_from", [ map { @{$_->{'words'}} } @from ], 40, 5);
print " \n";
@un = &find("unblacklist_from", $conf);
&edit_textbox("unblacklist_from", [ map { @{$_->{'words'}} } @un ], 40, 5);
print " \n";
if ($config{'show_global'}) {
print " $text{'white_gblack'} ",
"$text{'white_gunblack'} \n";
print " \n";
@gfrom = &find("blacklist_from", $gconf);
&edit_textbox("gblacklist_from", [ map { @{$_->{'words'}} } @gfrom ], 40, 5);
print " \n";
@gun = &find("gunblacklist_from", $gconf);
&edit_textbox("gunblacklist_from", [ map { @{$_->{'words'}} } @gun ], 40, 5);
print " \n";
print "\n";
}
else {
print " \n";
push(@to, map { [ $_, 0 ] } map { @{$_->{'words'}} } &find("whitelist_to", $conf));
push(@to, map { [ $_, 1 ] } map { @{$_->{'words'}} } &find("more_spam_to", $conf));
push(@to, map { [ $_, 2 ] } map { @{$_->{'words'}} } &find("all_spam_to", $conf));
print " $text{'white_to'} \n";
print " \n";
&edit_table("whitelist_to", [ $text{'white_addr'}, $text{'white_level'} ],
\@to, [ 40, 0 ], \&whitelist_to_conv, 3);
print " \n";
}
&end_form(undef, $text{'save'});
# Show whitelist import form
print &ui_hr();
print "$text{'white_importdesc'}\n";
print "
\n";
&ui_print_footer("", $text{'index_return'});
# whitelist_to_conv(col, name, size, value)
sub whitelist_to_conv
{
if ($_[0] == 0) {
return &default_convfunc(@_);
}
else {
local $rv = "\n";
foreach $l (0 .. 2) {
$rv .= sprintf "%s\n",
$l, $l == $_[3] ? "selected" : "", $text{"white_level$l"};
}
$rv .= " \n";
return $rv;
}
}
spam/images/ 0040775 0005671 0000012 00000000000 11017163271 012750 5 ustar jcameron wheel spam/images/icon.gif 0100664 0005671 0000012 00000003301 11017163270 014360 0 ustar jcameron wheel GIF87a0 0 ۽ʪƞʶsh¢AAV44U|t{vwºɛ`¶_`faf|fKIoZVucjdp~z{~`YT?AgVfb^abbige:Fqf^j>Fonr^`^ba`ƹfNXvCFqbrjVNZ^Ҿblro^ab^ڎZrj`PQkfRNV22FV^lljJJBJu')J6>kvVJF6r<8Q;nJҰfDnL~T`BY>N8C5e>2@Ov4:J<4J7ZBbD`?}jGsL|S>5C7zB25>`V=fFtQuOB5j:.75,5:YdliQI6zPY^:0H6,.2*:HZN:fJV0.*9:.DL8UszFVzZh>.ZbF^~Nj6.V;U[>A2JfB6VjJ:NZ>r^BVB6JPBr¾Rn8>XQ9V@^Bº8BlZJVFxRHj^ZNƲ¦rrzW_~F:RﮒpަBJj~rvv , 0 0 H*\X0@ @\pAVH#dž?
(RF$KRJ--:9G8qZIp Y@ 9@(P@sjG$ptM
>P*hک3HfPAA{:@7
3(41t@D@G(a*,T
yQa+Xp2fpX8rȑCK
~$B)bI.=&Mb8B(KDAS-H1D1$1U`@}V\qBEZC