This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #127494] TODO test for $AUTOLOAD being set for DESTROY
[perl5.git] / Porting / checkAUTHORS.pl
CommitLineData
5649b9c9
NC
1#!/usr/bin/perl -w
2use strict;
8a5e2fa6 3my ($committer, $patch, $author);
cdad3b53 4use utf8;
5649b9c9 5use Getopt::Long;
0be47eca 6use Unicode::Collate;
7582f0f6
JV
7use Text::Wrap;
8$Text::Wrap::columns = 80;
5649b9c9 9
946fbe37
DG
10my ($rank, $ta, $ack, $who, $tap) = (0) x 5;
11my ($author_file, $percentage, $cumulative, $reverse);
12my (%authors, %untraced, %patchers, %committers, %real_names);
13
14my $result = GetOptions (
15 # modes
c673b32a
MH
16 "who" => \$who,
17 "rank" => \$rank,
946fbe37 18 "thanks-applied" => \$ta,
c673b32a
MH
19 "missing" => \$ack ,
20 "tap" => \$tap,
21
946fbe37 22 # modifiers
c673b32a
MH
23 "authors=s" => \$author_file,
24 "percentage" => \$percentage, # show as %age
25 "cumulative" => \$cumulative,
26 "reverse" => \$reverse,
00229b97 27 );
5649b9c9 28
946fbe37 29if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) {
7582f0f6
JV
30 usage();
31}
32
946fbe37 33$author_file ||= './AUTHORS';
c673b32a 34die "Can't locate '$author_file'. Specify it with '--authors <path>'."
946fbe37
DG
35 unless -f $author_file;
36
7582f0f6
JV
37my $map = generate_known_author_map();
38
946fbe37 39read_authors_files($author_file);
7582f0f6 40
7582f0f6
JV
41
42if ($rank) {
3877da06 43 parse_commits_from_stdin();
7582f0f6
JV
44 display_ordered(\%patchers);
45} elsif ($ta) {
3877da06 46 parse_commits_from_stdin();
7582f0f6 47 display_ordered(\%committers);
946fbe37 48} elsif ($tap) {
3877da06 49 parse_commits_from_stdin_authors();
7582f0f6 50 display_test_output(\%patchers, \%authors, \%real_names);
946fbe37 51} elsif ($ack) {
3877da06 52 parse_commits_from_stdin();
7582f0f6 53 display_missing_authors(\%patchers, \%authors, \%real_names);
64265e98 54} elsif ($who) {
3877da06 55 parse_commits_from_stdin();
946fbe37 56 list_authors(\%patchers, \%authors);
7582f0f6
JV
57}
58
7582f0f6
JV
59exit(0);
60
61sub usage {
62
5649b9c9 63 die <<"EOS";
946fbe37
DG
64Usage: $0 [modes] [modifiers] <git-log-output-file>
65
66Modes (use only one):
67 --who # show list of unique authors by full name
68 --rank # rank authors by patches
69 --thanks-applied # ranks committers of others' patches
70 --missing # display authors not in AUTHORS
71 --tap # show authors present/missing as TAP
72
73Modifiers:
74 --authors <authors-file> # path to authors file (default: ./AUTHORS)
75 --percentage # show rankings as percentages
76 --cumulative # show rankings cumulatively
77 --reverse # show rankings in reverse
78
79Generate git-log-output-file with git log --pretty=fuller rev1..rev2
47e01c32 80(or pipe by specifying '-' for stdin). For example:
64265e98 81 \$ git log --pretty=fuller v5.12.0..v5.12.1 > gitlog
946fbe37 82 \$ perl Porting/checkAUTHORS.pl --rank --percentage gitlog
5649b9c9
NC
83EOS
84}
85
64265e98 86sub list_authors {
946fbe37
DG
87 my ($patchers, $authors) = @_;
88 binmode(STDOUT, ":utf8");
0be47eca 89 print wrap '', '', join(', ', Unicode::Collate->new(level => 1)->sort(
946fbe37 90 map { $authors->{$_} }
0be47eca 91 keys %$patchers)) . ".\n";
64265e98 92}
7582f0f6
JV
93
94sub parse_commits_from_stdin {
95 my @lines = split( /^commit\s*/sm, join( '', <> ) );
96 for (@lines) {
97 next if m/^$/;
98 next if m/^(\S*?)^Merge:/ism; # skip merge commits
8a5e2fa6 99 if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*.*?^Commit:\s*(.*?)^(.*)$/gism) {
7582f0f6
JV
100
101 # new patch
8a5e2fa6 102 ( $patch, $author, $committer ) = ( $1, $2, $3 );
7582f0f6
JV
103 chomp($author);
104 unless ($author) { die $_ }
105 chomp($committer);
106 unless ($committer) { die $_ }
107 process( $committer, $patch, $author );
108 } else {
109 die "XXX $_ did not match";
110 }
e427132c 111 }
e427132c 112
e427132c
JV
113}
114
3877da06
DM
115# just grab authors. Quicker than parse_commits_from_stdin
116
117sub parse_commits_from_stdin_authors {
118 while (<>) {
119 next unless /^Author:\s*(.*)$/;
120 my $author = $1;
121 $author = _raw_address($author);
122 $patchers{$author}++;
123 }
124}
125
e427132c 126
7582f0f6
JV
127sub generate_known_author_map {
128 my %map;
e427132c 129
7582f0f6
JV
130 my $prev = "";
131 while (<DATA>) {
132 chomp;
133 s/\\100/\@/g;
134 $_ = lc;
135 if ( my ( $correct, $alias ) = /^\s*([^#\s]\S*)\s+(.*\S)/ ) {
136 $correct =~ s/^\\043/#/;
137 if ( $correct eq '+' ) { $correct = $prev }
138 else { $prev = $correct }
139 $map{$alias} = $correct;
140 }
141 }
8513229b 142
7582f0f6
JV
143 #
144 # Email addresses for we do not have names.
145 #
146 $map{$_} = "?"
147 for
148 "bah\100longitude.com",
149 "bbucklan\100jpl-devvax.jpl.nasa.gov",
150 "bilbo\100ua.fm",
151 "bob\100starlabs.net",
152 "cygwin\100cygwin.com",
153 "david\100dhaller.de", "erik\100cs.uni-jena.de", "info\100lingo.kiev.ua", # Lingo Translation agency
154 "jms\100mathras.comcast.net",
155 "premchai21\100yahoo.com",
156 "pxm\100nubz.org",
157 "raf\100tradingpost.com.au",
158 "smoketst\100hp46t243.cup.hp.com", "root\100chronos.fi.muni.cz", # no clue - jrv 20090803
159 "gomar\100md.media-web.de", # no clue - jrv 20090803
160 "data-drift\100so.uio.no", # no data. originally private message from 199701282014.VAA12645@selters.uio.no
161 "arbor\100al37al08.telecel.pt"
162 , # reported perlbug ticket 5196 - no actual code contribution. no real name - jrv 20091006
163 "oracle\100pcr8.pcr.com", # Reported perlbug ticket 1015 - no patch - Probably Ed Eddington ed@pcr.com
48f3d0c6 164 "snaury\100gmail.com", # Reported cpan ticket 35943, with patch for fix
7582f0f6
JV
165 ;
166
167 #
168 # Email addresses for people that don't have an email address in AUTHORS
169 # Presumably deliberately?
170 #
171
172 $map{$_} = '!' for
173
174 # Nick Ing-Simmons has passed away (2006-09-25).
175 "nick\100ing-simmons.net",
176 "nik\100tiuk.ti.com",
177 "nick.ing-simmons\100elixent.com",
178 "nick\100ni-s.u-net.com",
179 "nick.ing-simmons\100tiuk.ti.com",
180
181 # Iain Truskett has passed away (2003-12-29).
182 "perl\100dellah.anu.edu.au", "spoon\100dellah.org", "spoon\100cpan.org",
183
184 # Ton Hospel
185 "me-02\100ton.iguana.be", "perl-5.8.0\100ton.iguana.be", "perl5-porters\100ton.iguana.be",
186
187 # Beau Cox
188 "beau\100beaucox.com",
189
190 # Randy W. Sims
191 "ml-perl\100thepierianspring.org",
192
193 # perl internal addresses
194 "perl5-porters\100africa.nicoh.com",
195 "perlbug\100perl.org",,
196 "perl5-porters.nicoh.com",
197 "perlbug-followup\100perl.org",
198 "perlbug-comment\100perl.org",
199 "bug-module-corelist\100rt.cpan.org",
200 "bug-storable\100rt.cpan.org",
201 "bugs-perl5\100bugs6.perl.org",
202 "unknown",
203 "unknown\100unknown",
204 "unknown\100longtimeago",
205 "unknown\100perl.org",
206 "",
207 "(none)",
208 ;
209
210 return \%map;
211}
e427132c 212
7582f0f6
JV
213sub read_authors_files {
214 my @authors = (@_);
215 return unless (@authors);
946fbe37 216 my (%count, %raw);
7582f0f6
JV
217 foreach my $filename (@authors) {
218 open FH, "<$filename" or die "Can't open $filename: $!";
60d42009 219 binmode FH, ':encoding(UTF-8)';
7582f0f6
JV
220 while (<FH>) {
221 next if /^\#/;
222 next if /^-- /;
946fbe37 223 if (/^([^<]+)<([^>]+)>/) {
7582f0f6 224 # Easy line.
946fbe37
DG
225 my ($name, $email) = ($1, $2);
226 $name =~ s/\s*\z//;
227 $raw{$email} = $name;
228 $count{$email}++;
cdad3b53 229 } elsif (/^([-A-Za-z0-9 .\'À-ÖØöø-ÿ]+)[\t\n]/) {
7582f0f6
JV
230
231 # Name only
232 $untraced{$1}++;
233 } elsif ( length $_ ) {
234 chomp;
235 warn "Can't parse line '$_'";
236 } else {
237 next;
238 }
239 }
8513229b 240 }
7582f0f6 241 foreach ( keys %raw ) {
946fbe37
DG
242 print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
243 my $lc = lc $_;
244 $authors{ $map->{$lc} || $lc } = $raw{$_};
7582f0f6 245 }
946fbe37 246 $authors{$_} = $_ for qw(? !);
8513229b
A
247}
248
7582f0f6
JV
249sub display_test_output {
250 my $patchers = shift;
251 my $authors = shift;
252 my $real_names = shift;
253 my $count = 0;
3877da06 254 printf "1..%d\n", scalar keys %$patchers;
7582f0f6 255 foreach ( sort keys %$patchers ) {
3877da06 256 $count++;
7582f0f6
JV
257 if ($authors->{$_}) {
258 print "ok $count - ".$real_names->{$_} ." $_\n";
259 } else {
260 print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
7ce1b4c4 261 print STDERR ($real_names->{$_} || '???' )." <$_> not found in AUTHORS\n";
7582f0f6 262 }
8513229b 263
7582f0f6 264 }
5649b9c9
NC
265}
266
e427132c 267sub display_missing_authors {
7582f0f6
JV
268 my $patchers = shift;
269 my $authors = shift;
e427132c 270 my $real_names = shift;
7582f0f6
JV
271 my %missing;
272 foreach ( sort keys %$patchers ) {
273 next if $authors->{$_};
274
275 # Sort by number of patches, then name.
276 $missing{ $patchers{$_} }->{$_}++;
277 }
278 foreach my $patches ( sort { $b <=> $a } keys %missing ) {
279 print "\n\n=head1 $patches patch(es)\n\n";
280 foreach my $author ( sort keys %{ $missing{$patches} } ) {
281 my $xauthor = $author;
282 $xauthor =~ s/@/\\100/g; # xxx temp hack
283 print "" . ( $real_names->{$author} || $author ) . "\t\t\t<" . $xauthor . ">\n";
284 }
5649b9c9 285 }
5649b9c9
NC
286}
287
288sub display_ordered {
7582f0f6
JV
289 my $what = shift;
290 my @sorted;
291 my $total;
292
293 while ( my ( $name, $count ) = each %$what ) {
294 push @{ $sorted[$count] }, $name;
295 $total += $count;
296 }
297
298 my $i = @sorted;
299 return unless @sorted;
300 my $sum = 0;
301 foreach my $i ( $reverse ? 0 .. $#sorted : reverse 0 .. $#sorted ) {
302 next unless $sorted[$i];
303 my $prefix;
304 $sum += $i * @{ $sorted[$i] };
305
306 # Value to display is either this one, or the cumulative sum.
307 my $value = $cumulative ? $sum : $i;
308 if ($percentage) {
309 $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
310 } else {
311 $prefix = "$value:\t";
312 }
313 print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
15b8f96d 314 }
5649b9c9
NC
315}
316
317sub process {
7582f0f6
JV
318 my ( $committer, $patch, $author ) = @_;
319 return unless $author;
320 return unless $committer;
321
322 $author = _raw_address($author);
323 $patchers{$author}++;
324
325 $committer = _raw_address($committer);
326 if ( $committer ne $author ) {
327
328 # separate commit credit only if committing someone else's patch
329 $committers{$committer}++;
330 }
5649b9c9
NC
331}
332
00229b97
JV
333sub _raw_address {
334 my $addr = shift;
335 my $real_name;
350bd8f1 336 if ($addr =~ /(?:\\?")?\s*\(via RT\) <perlbug-followup\@perl\.org>$/p) {
08dc3bc8 337 my $name = ${^PREMATCH};
e529a387 338 $addr = 'perlbug-followup@perl.org';
08dc3bc8
A
339 #
340 # Try to find the author
341 #
ac664a5e
DR
342 if (exists $map->{$name}) {
343 $addr = $map->{$name};
344 $real_name = $authors{$addr};
345 }
346 else {
347 while (my ($email, $author_name) = each %authors) {
348 if ($name eq $author_name) {
349 $addr = $email;
350 $real_name = $name;
351 last;
352 }
08dc3bc8
A
353 }
354 }
355 }
356 elsif ( $addr =~ /<.*>/ ) {
7582f0f6
JV
357 $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/;
358 $real_name = $1;
00229b97 359 }
5a528087
CB
360 $addr =~ s/\[mailto://;
361 $addr =~ s/\]//;
00229b97 362 $addr = lc $addr;
e427132c 363 $addr = $map->{$addr} || $addr;
7582f0f6 364 $addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
5e8353a0 365
7582f0f6 366 if ($real_name) { $real_names{$addr} = $real_name }
00229b97
JV
367 return $addr;
368}
369
5649b9c9 370
8513229b
A
371__DATA__
372
373#
374# List of mappings. First entry the "correct" email address, as appears
375# in the AUTHORS file. Second is any "alias" mapped to it.
376#
a695a9ef 377# If the "correct" email address is a '+', the entry above it is reused;
8513229b
A
378# this for addresses with more than one alias.
379#
380# Note that all entries are in lowercase. Further, no '@' signs should
381# appear; use \100 instead.
382#
383#
384# Committers.
385#
386adi enache\100rdslink.ro
387alanbur alan.burlison\100sun.com
388+ alan.burlison\100uk.sun.com
00229b97
JV
389+ aburlison\100cix.compulink.co.uk
390ams ams\100toroid.org
391+ ams\100wiw.org
8513229b 392chip chip\100pobox.com
00229b97
JV
393+ chip\100perl.com
394+ salzench\100nielsenmedia.com
395+ chip\100atlantic.net
396+ chip\100rio.atlantic.net
397+ salzench\100dun.nielsen.com
3bf51dad 398+ chip\100ci005.sv2.upperbeyond.com
8513229b
A
399craigb craig.berry\100psinetcs.com
400+ craig.berry\100metamorgs.com
401+ craig.berry\100signaltreesolutions.com
402+ craigberry\100mac.com
a94e4597 403+ craig.a.berry\100gmail.com
e82692ac 404+ craig a. berry)
8513229b
A
405davem davem\100fdgroup.com
406+ davem\100iabyn.nospamdeletethisbit.com
a94e4597 407+ davem\100iabyn.com
8513229b
A
408+ davem\100fdgroup.co.uk
409+ davem\100fdisolutions.com
410+ davem\100iabyn.com
411demerphq demerphq\100gmail.com
412+ yves.orton\100de.mci.com
413+ yves.orton\100mciworldcom.de
745b54e4 414+ yves.orton\100booking.com
00229b97
JV
415+ demerphq\100dromedary.booking.com
416+ demerphq\100gemini.(none)
417+ demerphq\100camel.booking.com
418+ demerphq\100hotmail.com
8513229b 419doughera doughera\100lafayette.edu
00229b97
JV
420+ doughera\100lafcol.lafayette.edu
421+ doughera\100fractal.phys.lafayette.edu
422+ doughera.lafayette.edu
423+ doughera\100newton.phys.lafayette.edu
424
8513229b 425gbarr gbarr\100pobox.com
00229b97
JV
426+ bodg\100tiuk.ti.com
427+ gbarr\100ti.com
428+ graham.barr\100tiuk.ti.com
e82692ac 429+ gbarr\100monty.mutatus.co.uk
8513229b
A
430gisle gisle\100activestate.com
431+ gisle\100aas.no
00229b97
JV
432+ aas\100aas.no
433+ aas\100bergen.sn.no
8513229b
A
434gsar gsar\100activestate.com
435+ gsar\100cpan.org
00229b97 436+ gsar\100engin.umich.edu
8513229b
A
437hv hv\100crypt.compulink.co.uk
438+ hv\100crypt.org
00229b97 439+ hv\100iii.co.uk
8513229b
A
440jhi jhi\100iki.fi
441+ jhietaniemi\100gmail.com
442+ jhi\100kosh.hut.fi
00229b97 443+ jhi\100alpha.hut.fi
8513229b 444+ jhi\100cc.hut.fi
fda5b70a 445+ jhi\100hut.fi
8513229b 446+ jarkko.hietaniemi\100nokia.com
00229b97 447+ jarkko.hietaniemi\100cc.hut.fi
63d7924f 448+ jarkko.hietaniemi\100booking.com
00229b97
JV
449jesse jesse\100bestpractical.com
450+ jesse\100fsck.com
451+ jesse\100perl.org
8513229b
A
452merijn h.m.brand\100xs4all.nl
453+ h.m.brand\100hccnet.nl
454+ merijn\100l1.procura.nl
e82692ac 455+ merijn\100a5.(none)
8513229b 456mhx mhx-perl\100gmx.net
e82692ac 457+ mhx\100r2d2.(none)
93456aa7
JV
458mst mst\100shadowcat.co.uk
459+ matthewt\100hercule.scsys.co.uk
8513229b
A
460nicholas nick\100unfortu.net
461+ nick\100ccl4.org
462+ nick\100talking.bollo.cx
463+ nick\100plum.flirble.org
464+ nick\100babyhippo.co.uk
465+ nick\100bagpuss.unfortu.net
e82692ac 466+ nick\100babyhippo.com
93456aa7 467+ nicholas\100dromedary.ams6.corp.booking.com
e82692ac 468+ Nicholas Clark (sans From field in mail header)
8513229b
A
469pudge pudge\100pobox.com
470rgs rgarciasuarez\100free.fr
471+ rgarciasuarez\100mandrakesoft.com
472+ rgarciasuarez\100mandriva.com
473+ rgarciasuarez\100gmail.com
474+ raphel.garcia-suarez\100hexaflux.com
12feb466 475+ rgs@consttype.org
8513229b
A
476sky sky\100nanisky.com
477+ artur\100contiller.se
478+ arthur\100contiller.se
86e2f329
S
479smueller 7k8lrvf02\100sneakemail.com
480+ kjx9zthh3001\100sneakemail.com
481+ dtr8sin02\100sneakemail.com
482+ rt8363b02\100sneakemail.com
483+ o6hhmk002\100sneakemail.com
484+ smueller\100cpan.org
485+ l2ot9pa02\100sneakemail.com
486+ wyp3rlx02\100sneakemail.com
487+ 0mgwtfbbq\100sneakemail.com
488+ xyey9001\100sneakemail.com
03c4920e
SH
489steveh steve.m.hay\100googlemail.com
490+ stevehay\100planit.com
b692cd7a 491+ steve.hay\100uk.radan.com
8513229b
A
492stevep steve\100fisharerojo.org
493+ steve.peters\100gmail.com
e82692ac 494+ root\100dixie.cscaper.com
00229b97
JV
495timb Tim.Bunce\100pobox.com
496+ tim.bunce\100ig.co.uk
87ff2bbe
TC
497tonyc tony\100develop-help.com
498+ tony\100openbsd32.tony.develop-help.com
a2d496af 499+ tony\100saturn.(none)
8513229b
A
500
501#
502# Mere mortals.
503#
00229b97 504\043####\100juerd.nl juerd\100cpan.org
212682ea 505+ juerd\100c3.convolution.nl
00229b97 506+ juerd\100convolution.nl
00229b97 507a.r.ferreira\100gmail.com aferreira\100shopzilla.com
8513229b 508abe\100ztreet.demon.nl abeltje\100cpan.org
00229b97 509abela\100hsc.fr abela\100geneanet.org
8513229b
A
510abigail\100abigail.be abigail\100foad.org
511+ abigail\100abigail.nl
00229b97 512+ abigail\100fnx.com
e82692ac 513aburt\100isis.cs.du.edu isis!aburt
00229b97 514ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
e82692ac 515adavies\100ptc.com alex.davies\100talktalk.net
8513229b 516ajohnson\100nvidia.com ajohnson\100wischip.com
e82692ac 517+ anders\100broadcom.com
8513229b 518alexm\100netli.com alexm\100w-m.ru
a94e4597 519alex-p5p\100earth.li alex\100rcon.rog
00229b97 520alexmv\100mit.edu alex\100chmrr.net
8513229b 521alian\100cpan.org alian\100alianwebserver.com
00229b97
JV
522allen\100grumman.com allen\100gateway.grumman.com
523allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
e82692ac 524+ nort\100qnx.com
8513229b 525allens\100cpan.org easmith\100beatrice.rutgers.edu
e82692ac 526+ root\100dogberry.rutgers.edu
00229b97
JV
527andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
528+ andreas.koenig.7os6vvqr\100franz.ak.mind.de
8513229b 529+ a.koenig\100mind.de
00229b97
JV
530+ k\100anna.in-berlin.de
531+ andk\100cpan.org
532+ koenig\100anna.mind.de
533+ k\100anna.mind.de
e82692ac
MB
534+ root\100ak-71.mind.de
535+ root\100ak-75.mind.de
536+ k\100sissy.in-berlin.de
537+ a.koenig\100kulturbox.de
538+ k\100sissy.in-berlin.de
539+ root\100dubravka.in-berlin.de
8513229b
A
540anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
541+ siegel\100zrz.tu-berlin.de
25b68122 542apocal@cpan.org perl\1000ne.us
e82692ac
MB
543arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
544+ gatech!skeeve!arnold
7dbe2044 545arodland\100cpan.org andrew\100hbslabs.com
e82692ac 546arussell\100cs.uml.edu adam\100adam-pc.(none)
8513229b
A
547ash\100cpan.org ash_cpan\100firemirror.com
548avarab\100gmail.com avar\100cpan.org
549
00229b97
JV
550bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
551+ bailey\100genetics.upenn.edu
e82692ac 552+ bailey.charles\100gmail.com
8513229b 553bah\100ecnvantage.com bholzman\100longitude.com
e82692ac
MB
554barries\100slaysys.com root\100jester.slaysys.com
555bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
00229b97 556bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
8513229b 557ben_tilly\100operamail.com btilly\100gmail.com
e82692ac
MB
558+ ben_tilly\100hotmail.com
559ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
560+ mauzo\100.(none)
561bepi\100perl.it enrico.sorcinelli\100gmail.com
562bert\100alum.mit.edu bert\100genscan.com
93456aa7 563bigbang7\100gmail.com ddascalescu+github\100gmail.com
f8a89dce 564blgl\100stacken.kth.se blgl\100hagernas.com
6fd0ab63 565+ 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
d203773f 566brian.d.foy\100gmail.com bdfoy\100cpan.org
e82692ac 567BQW10602\100nifty.com sadahiro\100cpan.org
ac664a5e 568bulk88\100hotmail.com bulk88
8513229b 569
4bba85d0 570chad.granum\100dreamhost.com exodist7\100gmail.com
4d88742b 571choroba\100cpan.org choroba\100weed.(none)
8513229b 572chromatic\100wgz.org chromatic\100rmci.net
201da6ff 573ckuskie\100cadence.com colink\100perldreamer.com
040d2336 574claes\100surfar.nu claes\100versed.se
e82692ac 575clintp\100geeksalad.org cpierce1\100ford.com
8513229b 576clkao\100clkao.org clkao\100bestpractical.com
00229b97 577corion\100corion.net corion\100cpan.org
8513229b
A
578cp\100onsitetech.com publiustemp-p5p\100yahoo.com
579+ publiustemp-p5p3\100yahoo.com
580cpan\100audreyt.org autrijus\100egb.elixus.org
581+ autrijus\100geb.elixus.org
582+ autrijus\100gmail.com
583+ autrijus\100ossf.iis.sinica.edu.tw
584+ autrijus\100autrijus.org
585+ audreyt\100audreyt.org
e82692ac 586cpan\100ton.iguana.be me-01\100ton.iguana.be
d203773f 587crt\100kiski.net perl\100ctweten.amsite.com
8513229b 588
e82692ac 589dairiki\100dairiki.org dairiki at dairiki.org
fda5b70a 590dagolden\100cpan.org xdaveg\100gmail.com
6fb5c52d 591+ xdg\100xdg.me
895db057 592damian\100conway.org damian\100cs.monash.edu.au
00229b97
JV
593dan\100sidhe.org sugalsd\100lbcc.cc.or.us
594+ sugalskd\100osshe.edu
e82692ac 595daniel\100bitpusher.com daniel\100biz.bitpusher.com
8513229b 596david.dyck\100fluke.com dcd\100tc.fluke.com
9d1ee727
KW
597david\100justatheory.com david\100wheeler.net
598+ david\100kineticode.com
599+ david\100wheeler.com
e82692ac 600+ david\100wheeler.net
3bf51dad 601dennis\100booking.com dennis\100camel.ams6.corp.booking.com
6439ee77 602+ dennis.kaarsemaker\100booking.com
a4d824de 603+ dennis\100kaarsemaker.net
d203773f 604dev-perl\100pimb.org knew-p5p\100pimb.org
5a528087 605+ lists-p5p\100pimb.org
e82692ac 606djberg86\100attbi.com djberg96\100attbi.com
09c3cef4 607dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
8513229b 608domo\100computer.org shouldbedomo\100mac.com
00229b97 609+ domo\100slipper.ip.lu
e82692ac 610+ domo\100tcp.ip.lu
00229b97
JV
611dougm\100covalent.net dougm\100opengroup.org
612+ dougm\100osf.org
e82692ac
MB
613dougw\100cpan.org doug_wilson\100intuit.com
614dwegscheid\100qtm.net wegscd\100whirlpool.com
615edwardp\100excitehome.net epeschko\100den-mdev1
616+ epeschko\100elmer.tci.com
617+ esp5\100pge.com
00229b97 618egf7\100columbia.edu efifer\100sanwaint.com
e82692ac 619eggert\100twinsun.com eggert\100sea.sm.unisys.com
2330d9b7 620etj\100cpan.org mohawk2\100users.noreply.github.com
8513229b
A
621
622fugazi\100zyx.net larrysh\100cpan.org
e82692ac 623+ lshatzer\100islanddata.com
8513229b 624
e82692ac 625gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
d203773f 626gerberb\100zenez.com root\100devsys0.zenez.com
e82692ac
MB
627gfuji\100cpan.org g.psy.va\100gmail.com
628gerard\100ggoossen.net gerard\100tty.nl
fda5b70a
JV
629gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
630+ srz\100loopback
b9ff0c49 631gideon\100cpan.org gidisrael\100gmail.com
00229b97 632gnat\100frii.com gnat\100prometheus.frii.com
8513229b
A
633gp\100familiehaase.de gerrit\100familiehaase.de
634grazz\100pobox.com grazz\100nyc.rr.com
d203773f 635gward\100ase.com greg\100bic.mni.mcgill.ca
a22ececd
AHA
636haggai\100cpan.org alanhaggai\100alanhaggai.org
637+ alanhaggai\100gmail.com
00229b97
JV
638hansmu\100xs4all.nl hansm\100icgroup.nl
639+ hansm\100icgned.nl
640+ hans\100icgned.nl
b5e2dde1 641+ hans\100icgroup.nl
00229b97 642+ hansm\100euronet.nl
e82692ac 643+ hansm\100euro.net
8513229b 644hio\100ymir.co.jp hio\100hio.jp
e82692ac 645hops\100sco.com hops\100scoot.pdev.sco.com
8513229b 646
74314d7a 647ian.goodacre\100xtra.co.nz ian\100debian.lan
e82692ac 648ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
c07671d7 649
e82692ac 650james\100mastros.biz theorb\100desert-island.me.uk
5ab3d1b3
JD
651jan\100jandubois.com jand\100activestate.com
652+ jan.dubois\100ibm.net
8513229b
A
653japhy\100pobox.com japhy\100pobox.org
654+ japhy\100perlmonk.org
655+ japhy\100cpan.org
e82692ac 656+ jeffp\100crusoe.net
8513229b 657jari.aalto\100poboxes.com jari.aalto\100cante.net
e82692ac
MB
658jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
659jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
660jbuehler\100hekimian.com jhpb\100hekimian.com
661jcromie\100100divsol.com jcromie\100cpan.org
8513229b
A
662+ jim.cromie\100gmail.com
663jdhedden\100cpan.org jerry\100hedden.us
664+ jdhedden\1001979.usna.com
665+ jdhedden\100gmail.com
666+ jdhedden\100yahoo.com
e82692ac 667+ jhedden\100pn100-02-2-356p.corp.bloomberg.com
9846bace 668+ jdhedden\100solydxk
e82692ac 669jeremy\100zawodny.com jzawodn\100wcnet.org
d203773f 670jesse\100sig.bsh.com jesse\100ginger
8513229b 671jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
e82692ac 672jfs\100fluent.com jfs\100jfs.fluent.com
fd548ba4
FC
673jhannah\100mutationgrid.com jay\100jays.net
674+ jhannah\100omnihotels.com
675jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
8513229b 676jjore\100cpan.org twists\100gmail.com
dfe12d64
JK
677jkeenan\100cpan.org jkeen\100verizon.net
678+ jkeenan\100dromedary-001.ams6.corp.booking.com
fda5b70a
JV
679jns\100integration-house.com jns\100gellyfish.com
680+ gellyfish\100gellyfish.com
e82692ac
MB
681john\100atlantech.com john\100titanic.atlantech.com
682john\100johnwright.org john.wright\100hp.com
683joseph\100cscaper.com joseph\1005sigma.com
684joshua\100rodd.us jrodd\100pbs.org
685jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
9feb1316 686jpeacock\100messagesystems.com john.peacock\100havurah-software.org
fda5b70a 687+ jpeacock\100havurah-software.org
e82692ac 688+ jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
feaafc86 689+ jpeacock\100jpeacock-hp.doesntexist.org
05ddb96b 690+ jpeacock\100cpan.org
9feb1316 691+ jpeacock\100rowman.com
277c21af 692jpl.jpl\100gmail.com jpl\100research.att.com
d203773f 693jql\100accessone.com jql\100jql.accessone.com
e82692ac 694jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
8513229b
A
695
696kane\100dwim.org kane\100xs4all.net
697+ kane\100cpan.org
698+ kane\100xs4all.nl
699+ jos\100dwim.org
700+ jib\100ripe.net
60d42009 701keith.s.thompson\100gmail.com kst\100mib.org
00229b97 702ken\100mathforum.org kenahoo\100gmail.com
e82692ac 703+ ken.williams\100thomsonreuters.com
31a15f36 704kentfredric\100gmail.com kentnl\100cpan.org
63781094
RS
705kmx\100volny.cz kmx\100volny.cz
706+ kmx\100cpan.org
8513229b 707kroepke\100dolphin-services.de kay\100dolphin-services.de
78d25b6c
JV
708kst\100mib.org kst\100cts.com
709+ kst\100SDSC.EDU
8513229b 710kstar\100wolfetech.com kstar\100cpan.org
00229b97 711+ kurt_starsinic\100ml.com
e82692ac
MB
712+ kstar\100www.chapin.edu
713+ kstar\100chapin.edu
00229b97
JV
714larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
715+ lwall\100netlabs.com
716+ larry\100netlabs.com
717+ lwall\100sems.com
718+ lwall\100scalpel.netlabs.com
e82692ac
MB
719laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
720+ ml1050\100freemail.hu
946fbe37 721lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
00229b97 722+ d-lewart\100uiuc.edu
84ad9c6c 723lkundrak\100v3.sk lubo.rintel\100gooddata.com
e82692ac
MB
724lstein\100cshl.org lstein\100formaggio.cshl.org
725+ lstein\100genome.wi.mit.edu
84ad9c6c 726l.mai\100web.de plokinom\100gmail.com
e82692ac
MB
727lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
728lutherh\100stratcom.com lutherh\100infinet.com
729mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
00229b97 730marcel\100codewerk.com gr\100univie.ac.at
06fdbb00 731+ hanekomu\100gmail.com
9d0e037a 732marcgreen\100cpan.org marcgreen\100wpi.edu
d4cb306b 733markleightonfisher\100gmail.com fisherm\100tce.com
e82692ac
MB
734mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
735marnix\100gmail.com pttesac!marnix!vanam
88048be8 736marty+p5p\100kasei.com marty\100martian.org
8513229b
A
737mats\100sm6sxl.net mats\100sm5sxl.net
738mbarbon\100dsi.unive.it mattia.barbon\100libero.it
a73beef9 739+ mattia\100barbon.org
8513229b 740mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
e82692ac
MB
741me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
742merijnb\100iloquent.nl merijnb\100ms.com
743+ merijnb\100iloquent.com
d203773f 744merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
d5564dc4 745mestre.smash\100gmail.com smash\100cpan.org
8513229b 746mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
e82692ac 747mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
8513229b
A
748michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
749mike\100stok.co.uk mike\100exegenix.com
e7613a67 750miyagawa\100bulknews.net miyagawa\100edge.co.jp
8513229b 751mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
e82692ac 752mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
fda5b70a 753moritz\100casella.verplant.org moritz\100faui2k3.org
e82692ac 754+ moritz lenz
fda5b70a 755
e82692ac 756neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
d203773f 757neeracher\100mac.com neeri\100iis.ee.ethz.ch
e82692ac 758neil\100bowers.com neilb\100cre.canon.co.uk
20b15ed1 759
8513229b
A
760nospam-abuse\100bloodgate.com tels\100bloodgate.com
761+ perl_dummy\100bloodgate.com
00229b97 762
e82692ac
MB
763ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
764+ ian\100dial.pipex.com
00229b97 765ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
e82692ac 766ikegami\100adaelis.com eric\100fmdev10.(none)
d203773f 767ilmari\100ilmari.org ilmari\100vesla.ilmari.org
e82692ac 768illpide\100telecel.pt arbor\100al37al08.telecel.pt
20b15ed1
JV
769# see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
770#
a94e4597
S
771ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
772+ nospam-abuse\100ilyaz.org
e82692ac 773+ [9]ilya\100math.ohio-state.edu
d203773f 774ilya\100martynov.org ilya\100juil.nonet
8513229b 775
31febfb6
FC
776joshua.pritikin\100db.com joshua\100paloalto.com
777
9fcef2a0
FC
778litt\100acm.org tlhackque\100yahoo.com
779
3b8d3bda
FC
780meyering@asic.sc.ti.com jim\100meyering.net
781
00229b97 782okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
e82692ac 783orwant\100oreilly.com orwant\100media.mit.edu
00229b97 784
8513229b
A
785p5-authors\100crystalflame.net perl\100crystalflame.net
786+ rs\100crystalflame.net
00229b97
JV
787+ coral\100eekeek.org
788+ coral\100moonlight.crystalflame.net
789+ rs\100oregonnet.com
93456aa7 790+ rs\100topsy.com
8513229b 791paul.green\100stratus.com paul_greenvos\100vos.stratus.com
e82692ac 792+ pgreen\100seussnt.stratus.com
8513229b
A
793paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
794+ paul.marquess\100ntlworld.com
795+ paul.marquess\100openwave.com
00229b97
JV
796+ pmarquess\100bfsec.bt.co.uk
797+ pmqs\100cpan.org
e82692ac
MB
798+ paul\100paul-desktop.(none)
799Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
8513229b 800pcg\100goof.com schmorp\100schmorp.de
00229b97 801perl\100cadop.com cdp\100hpescdp.fc.hp.com
e82692ac 802perl\100greerga.m-l.org greerga\100m-l.org
00229b97
JV
803perl\100profvince.com vince\100profvince.com
804perl-rt\100wizbit.be p5p\100perl.wizbit.be
8513229b 805# Maybe we should special case this to get real names out?
946fbe37 806Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
fda5b70a 807# NOTE: There is an intentional trailing space in the line above
00229b97 808pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
e82692ac 809+ upf\100de.uu.net
36a4e1d1
NC
810ribasushi@cpan.org rabbit\100rabbit.us
811+ rabbit+bugs\100rabbit.us
d6abd0a3 812perl\100aaroncrane.co.uk arc\100cpan.org
8513229b
A
813phil\100perkpartners.com phil\100finchcomputer.com
814pimlott\100idiomtech.com andrew\100pimlott.net
e82692ac
MB
815+ pimlott\100abel.math.harvard.edu
816pixel\100mandriva.com pixel\100mandrakesoft.com
8513229b
A
817pne\100cpan.org philip.newton\100gmx.net
818+ philip.newton\100datenrevision.de
819+ pnewton\100gmx.de
00229b97 820pprymmer\100factset.com pvhp\100forte.com
3eab96ca
KW
821khw\100cpan.org khw\100karl.(none)
822+ public\100khwilliamson.com
e82692ac 823+ khw\100khw-desktop.(none)
8513229b
A
824
825radu\100netsoft.ro rgreab\100fx.ro
549122ae 826rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
00229b97 827raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
117a8c22
RB
828module@renee-baecker.de renee.baecker\100smart-websolutions.de
829+ reneeb\100reneeb-desktop.(none)
a7f7a167 830+ github@renee-baecker.de
2bacf451 831+ otrs\100ubuntu.(none)
524cd813 832+ perl\100renee-baecker.de
f157ad77 833richard.foley\100rfi.net richard.foley\100t-online.de
8513229b 834+ richard.foley\100ubs.com
f157ad77 835+ richard.foley\100ubsw.com
8513229b
A
836rick\100consumercontact.com rick\100bort.ca
837+ rick.delaney\100rogers.com
a94e4597 838+ rick\100bort.ca
e82692ac 839+ rick.delaney\100home.com
4bc69901 840rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
e82692ac 841+ perl.p5p\100rjbs.manxome.org
8513229b
A
842rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
843+ rjk-perl-p5p\100tamias.net
ec36440e 844+ rjk\100tamias.net
e82692ac 845rjray\100redhat.com rjray\100uswest.com
8513229b 846rmgiroux\100acm.org rmgiroux\100hotmail.com
e82692ac 847+ mgiroux\100bear.com
a94e4597
S
848rmbarker\100cpan.org rmb1\100cise.npl.co.uk
849+ robin.barker\100npl.co.uk
00229b97 850+ rmb\100cise.npl.co.uk
5b2081f5 851+ robin\100spade-ubuntu.(none)
b2061475 852+ r.m.barker\100btinternet.com
34c029c7 853+ rmbarker.cpan\100btinternet.com
00229b97 854robertmay\100cpan.org rob\100themayfamily.me.uk
d203773f 855roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
00229b97
JV
856robin\100cpan.org robin\100kitsite.com
857roderick\100argon.org roderick\100gate.net
e82692ac 858+ roderick\100ibcinc.com
3560ee4d 859argrath\100ub32.org root\100ub32.org
8513229b 860rootbeer\100teleport.com rootbeer\100redcat.com
e82692ac 861+ tomphoenix\100unknown
3bf51dad 862rurban\100x-ray.at rurban\100cpan.org
080d4cd3 863+ rurban\100cpanel.net
2515a12c 864rvtol+news\100isolution.nl rvtol\100isolution.nl
c0e9ef6a 865sartak\100bestpractical.com sartak\100gmail.com
a3d8b840 866+ code\100sartak.org
ed429a63 867sadinoff\100olf.com danny-cpan\100sadinoff.com
8513229b
A
868schubiger\100cpan.org steven\100accognoscere.org
869+ sts\100accognoscere.org
00229b97 870+ schubiger\100gmail.com
f273d1e7 871+ stsc\100refcnt.org
8513229b 872schwern\100pobox.com schwern\100gmail.com
8ed05479
MS
873+ schwern\100athens.arena-i.com
874+ schwern\100blackrider.aocn.com
875+ schwern\100ool-18b93024.dyn.optonline.net
e82692ac
MB
876scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
877+ schotth\100sgi.com
878schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
879+ schwab\100ls5.informatik.uni-dortmund.de
8513229b
A
880sebastien\100aperghis.net maddingue\100free.fr
881+ saper\100cpan.org
1048cfac 882shigeya\100wide.ad.jp shigeya\100foretune.co.jp
917cc27d
SF
883shlomif\100cpan.org shlomif\100vipe.technion.ac.il
884+ shlomif\100iglu.org.il
ff47f462 885+ shlomif+processed-by-perl\100gmail.com
be235cc1 886+ shlomif\100shlomifish.org
8513229b
A
887simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
888+ simon\100brecon.co.uk
889+ simon\100othersideofthe.earth.li
890+ simon\100cozens.net
891+ simon\100netthink.co.uk
cd799e5a
SL
892lannings\100who.int lannings\100gmail.com
893+ slanning\100cpan.org
8513229b 894slaven\100rezic.de slaven.rezic\100berlin.de
a94e4597 895+ srezic\100iconmobile.com
00229b97 896+ srezic\100cpan.org
e82692ac
MB
897+ eserte\100cs.tu-berlin.de
898+ eserte\100vran.herceg.de
8513229b
A
899smcc\100mit.edu smcc\100ocf.berkeley.edu
900+ smcc\100csua.berkeley.edu
00229b97 901+ alias\100mcs.com
fda5b70a 902+ smccam\100uclink4.berkeley.edu
8513229b
A
903spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
904+ spider\100leggy.zk3.dec.com
905+ spider-perl\100orb.nashua.nh.us
906+ spider\100peano.zk3.dec.com
fda5b70a
JV
907+ spider.boardman\100orb.nashua.nh.us>
908+ spidb\100cpan.org
e82692ac
MB
909+ spider.boardman\100orb.nashua.nh.us
910+ root\100peano.zk3.dec.com
1ea085fc 911spiros\100lokku.com s.denaxas\100gmail.com
00229b97 912spp\100ds.net spp\100psa.pencom.com
fda5b70a
JV
913+ spp\100psasolar.colltech.com
914+ spp\100spotter.yi.org
8513229b
A
915stef\100mongueurs.net stef\100payrard.net
916+ s.payrard\100wanadoo.fr
e82692ac
MB
917+ properler\100freesurf.fr
918+ stef\100francenet.fr
cb991fd8 919stevan\100cpan.org stevan.little\100gmail.com
c6a7f572 920+ stevan.little\100iinteractive.com
e82692ac 921sthoenna\100efn.org ysth\100raven.shiftboard.com
8b2d7fd7 922sisyphus1\100optusnet.com.au sisyphus\100cpan.org
8513229b
A
923
924tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
e82692ac
MB
925tchrist\100perl.com tchrist\100mox.perl.com
926+ tchrist\100jhereg.perl.com
927thomas.dorner\100start.de tdorner\100amadeus.net
928tjenness\100cpan.org t.jenness\100jach.hawaii.edu
929+ timj\100jach.hawaii.edu
930tobez\100tobez.org tobez\100plab.ku.dk
2fe8fc10 931toddr\100cpan.org toddr\100cpanel.net
e82692ac
MB
932tom\100compton.nu thh\100cyberscience.com
933tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
934+ tom\100amber.ssd.hcsc.com
935
936vkonovalov\100lucent.com vkonovalov\100peterstar.ru
937+ konovalo\100mail.wplus.net
938+ vadim\100vkonovalov.ru
939+ vkonovalov\100spb.lucent.com
940+ vkonovalov\100alcatel-lucent.com
058a5f6c 941+ vadim.konovalov\100alcatel-lucent.com
e82692ac
MB
942
943whatever\100davidnicol.com davidnicol\100gmail.com
944wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
945+ wolfgang.laun\100thalesgroup.com
946+ wolfgang.laun\100gmail.com
64698074 947wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
e82692ac 948yath\100yath.de yath-perlbug\100yath.de
691b316a 949