SILENT KILLERPanel

Current Path: > > bin


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0555 ]

Files and Folders in: //bin


Warning: filesize(): stat failed for //bin/easy_install-3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/easy_install-3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/pip-3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/pip-3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/pip3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/pip3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/pydoc-3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/pydoc-3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/pydoc3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/pydoc3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/pyvenv-3 in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/pyvenv-3 in /home/codekrsu/techflix.lk/cmd2.php on line 137

Warning: filesize(): stat failed for //bin/unversioned-python in /home/codekrsu/techflix.lk/cmd2.php on line 136

Warning: filemtime(): stat failed for //bin/unversioned-python in /home/codekrsu/techflix.lk/cmd2.php on line 137
NameTypeSizeLast ModifiedActions
7za File 46 bytes October 04 2024 01:50:29.
GET File 16217 bytes April 22 2022 20:13:06.
Mail File 418704 bytes October 13 2019 00:19:50.
[ File 54960 bytes April 01 2023 08:44:39.
aclocal File 36478 bytes October 14 2023 20:00:43.
aclocal-1.16 File 36478 bytes October 14 2023 20:00:43.
addr2line File 34216 bytes November 15 2024 09:59:32.
animate File 12128 bytes April 01 2025 13:15:58.
ar File 63448 bytes November 15 2024 09:59:32.
arch File 38304 bytes April 01 2023 08:44:39.
arpaname File 12104 bytes February 20 2025 09:05:41.
as File 911264 bytes November 15 2024 09:59:32.
aspell File 163328 bytes April 18 2022 15:10:53.
at File 1036 bytes October 10 2022 10:23:17.
atq File 1038 bytes October 10 2022 10:23:17.
atrm File 1040 bytes October 10 2022 10:23:17.
autoconf File 14768 bytes August 13 2024 19:30:48.
autoheader File 8534 bytes August 13 2024 19:30:48.
autom4te File 32181 bytes August 13 2024 19:30:48.
automake File 257949 bytes October 14 2023 20:00:43.
automake-1.16 File 257949 bytes October 14 2023 20:00:43.
autoreconf File 21066 bytes August 13 2024 19:30:48.
autoscan File 17124 bytes August 13 2024 19:30:48.
autoupdate File 33872 bytes August 13 2024 19:30:48.
awk File 685848 bytes April 18 2022 15:56:05.
b2sum File 59144 bytes April 01 2023 08:44:39.
base32 File 42544 bytes April 01 2023 08:44:39.
base64 File 42560 bytes April 01 2023 08:44:39.
basename File 38392 bytes April 01 2023 08:44:39.
bash File 1150584 bytes May 23 2024 08:55:42.
bashbug-64 File 7348 bytes May 23 2024 08:55:35.
batch File 137 bytes October 10 2022 10:23:17.
bison File 448224 bytes October 12 2019 12:28:39.
bunzip2 File 37744 bytes January 28 2025 01:38:59.
bzcat File 37744 bytes January 28 2025 01:38:59.
bzcmp File 2128 bytes January 28 2025 01:38:58.
bzdiff File 2128 bytes January 28 2025 01:38:58.
bzgrep File 1677 bytes January 28 2025 01:38:58.
bzip2 File 37744 bytes January 28 2025 01:38:59.
bzip2recover File 16832 bytes January 28 2025 01:38:59.
bzless File 1259 bytes January 28 2025 01:38:58.
bzmore File 1259 bytes January 28 2025 01:38:58.
c++ File 1270688 bytes March 31 2025 10:38:33.
c++filt File 29584 bytes November 15 2024 09:59:32.
c89 File 224 bytes March 31 2025 10:36:31.
c99 File 215 bytes March 31 2025 10:36:31.
cagefs_enter.proxied File 1056 bytes May 26 2025 11:13:23.
cal File 67560 bytes April 06 2024 13:02:53.
captoinfo File 87360 bytes October 14 2023 18:54:49.
cat File 38440 bytes April 01 2023 08:44:39.
catchsegv File 3283 bytes June 09 2025 20:25:38.
cc File 1266552 bytes March 31 2025 10:38:36.
chcon File 72120 bytes April 01 2023 08:44:39.
chgrp File 67944 bytes April 01 2023 08:44:39.
chmod File 63784 bytes April 01 2023 08:44:39.
chown File 72080 bytes April 01 2023 08:44:39.
chrt File 38072 bytes April 06 2024 13:02:53.
cksum File 38360 bytes April 01 2023 08:44:39.
cldetect File 10600 bytes June 05 2025 09:53:15.
clear File 12840 bytes October 14 2023 18:54:49.
clusterdb File 71920 bytes February 27 2024 08:25:00.
cmp File 106248 bytes May 04 2020 15:15:14.
col File 29696 bytes April 06 2024 13:02:53.
colcrt File 16872 bytes April 06 2024 13:02:53.
colrm File 25480 bytes April 06 2024 13:02:53.
column File 50656 bytes April 06 2024 13:02:53.
comm File 42632 bytes April 01 2023 08:44:39.
compare File 12136 bytes April 01 2025 13:15:58.
composite File 12120 bytes April 01 2025 13:15:58.
conjure File 12120 bytes April 01 2025 13:15:58.
convert File 12120 bytes April 01 2025 13:15:58.
cp File 151600 bytes April 01 2023 08:44:39.
cpan File 8370 bytes June 03 2025 14:32:21.
cpp File 1266600 bytes March 31 2025 10:38:33.
createdb File 71904 bytes February 27 2024 08:25:00.
createuser File 76416 bytes February 27 2024 08:25:00.
crontab File 1524 bytes April 06 2024 11:40:05.
crontab.cagefs File 55464 bytes June 23 2025 12:23:46.
csplit File 55048 bytes April 01 2023 08:44:39.
curl File 235608 bytes January 28 2025 01:43:10.
cut File 50784 bytes April 01 2023 08:44:39.
date File 108576 bytes April 01 2023 08:44:39.
dbiprof File 6206 bytes April 25 2022 16:10:04.
dd File 79920 bytes April 01 2023 08:44:39.
delv File 43480 bytes February 20 2025 09:05:41.
df File 93352 bytes April 01 2023 08:44:39.
diff File 274440 bytes May 04 2020 15:15:14.
diff3 File 131688 bytes May 04 2020 15:15:14.
dig File 166080 bytes February 20 2025 09:05:41.
dir File 143328 bytes April 01 2023 08:44:39.
dircolors File 50816 bytes April 01 2023 08:44:39.
dirname File 34240 bytes April 01 2023 08:44:39.
display File 12128 bytes April 01 2025 13:15:58.
dnstap-read File 20920 bytes February 20 2025 09:05:41.
dropdb File 67608 bytes February 27 2024 08:25:00.
dropuser File 67576 bytes February 27 2024 08:25:00.
du File 109672 bytes April 01 2023 08:44:39.
easy_install-3 File bytes January 01 1970 00:00:00.
echo File 38328 bytes April 01 2023 08:44:39.
egrep File 28 bytes October 11 2019 15:15:56.
enc2xs File 41958 bytes October 13 2019 08:46:10.
enchant File 21584 bytes October 23 2019 20:03:55.
enchant-lsmod File 13408 bytes October 23 2019 20:03:55.
env File 42424 bytes April 01 2023 08:44:39.
eps2eps File 639 bytes June 03 2025 02:48:11.
eqn File 237728 bytes October 13 2019 14:29:41.
ex File 1180368 bytes August 02 2022 16:57:02.
expand File 42664 bytes April 01 2023 08:44:39.
expr File 50840 bytes April 01 2023 08:44:39.
factor File 88120 bytes April 01 2023 08:44:39.
false File 34192 bytes April 01 2023 08:44:39.
fc-cache File 132 bytes August 16 2021 11:04:22.
fc-cache-64 File 20840 bytes October 09 2021 09:02:09.
fc-cat File 16744 bytes October 09 2021 09:02:09.
fc-conflist File 12544 bytes October 09 2021 09:02:09.
fc-list File 12544 bytes October 09 2021 09:02:09.
fc-match File 16648 bytes October 09 2021 09:02:09.
fc-pattern File 12552 bytes October 09 2021 09:02:09.
fc-query File 12536 bytes October 09 2021 09:02:09.
fc-scan File 12552 bytes October 09 2021 09:02:09.
fc-validate File 16648 bytes October 09 2021 09:02:09.
fgrep File 28 bytes October 11 2019 15:15:56.
file File 25272 bytes April 06 2024 14:44:54.
find File 228664 bytes September 24 2024 02:19:34.
flex File 438728 bytes October 12 2019 12:33:17.
flex++ File 438728 bytes October 12 2019 12:33:17.
flock File 33992 bytes April 06 2024 13:02:53.
fmt File 46664 bytes April 01 2023 08:44:39.
fold File 42480 bytes April 01 2023 08:44:39.
free File 21288 bytes October 14 2023 20:31:02.
freetype-config File 4416 bytes March 31 2025 19:37:30.
funzip File 37504 bytes June 03 2025 02:10:12.
g++ File 1270688 bytes March 31 2025 10:38:33.
gawk File 685848 bytes April 18 2022 15:56:05.
gcc File 1266552 bytes March 31 2025 10:38:36.
gcc-ar File 37536 bytes March 31 2025 10:38:33.
gcc-nm File 37536 bytes March 31 2025 10:38:36.
gcc-ranlib File 37536 bytes March 31 2025 10:38:36.
gcov File 1377552 bytes March 31 2025 10:38:36.
gcov-dump File 584584 bytes March 31 2025 10:38:36.
gcov-tool File 622336 bytes March 31 2025 10:38:36.
gem File 542 bytes May 14 2025 12:40:38.
gencat File 25432 bytes June 09 2025 20:31:29.
geoiplookup File 22416 bytes November 28 2019 22:06:01.
geoiplookup6 File 22168 bytes November 28 2019 22:06:01.
geqn File 237728 bytes October 13 2019 14:29:41.
getconf File 33240 bytes June 09 2025 20:31:29.
getent File 33920 bytes June 09 2025 20:31:29.
getopt File 21016 bytes April 06 2024 13:02:53.
ghostscript File 12648 bytes June 03 2025 02:48:22.
git File 3845928 bytes July 23 2025 06:59:57.
git-receive-pack File 3845928 bytes July 23 2025 06:59:57.
git-shell File 2236688 bytes July 23 2025 06:59:57.
git-upload-archive File 3845928 bytes July 23 2025 06:59:57.
git-upload-pack File 3845928 bytes July 23 2025 06:59:57.
gm File 8008 bytes March 28 2022 15:50:37.
gmake File 240968 bytes April 18 2022 16:38:34.
gneqn File 908 bytes October 13 2019 14:29:37.
gnroff File 3312 bytes October 13 2019 14:29:39.
gpg File 1090528 bytes September 13 2022 10:15:05.
gpg-agent File 429352 bytes September 13 2022 10:15:05.
gpg-error File 34976 bytes October 12 2019 12:20:46.
gpg-zip File 3525 bytes September 13 2022 10:15:00.
gpgsplit File 89104 bytes September 13 2022 10:15:05.
gpgv File 462416 bytes September 13 2022 10:15:05.
gpic File 300896 bytes October 13 2019 14:29:41.
gprof File 105840 bytes November 15 2024 09:59:32.
grep File 198280 bytes October 11 2019 15:15:57.
groff File 127920 bytes October 13 2019 14:29:41.
grops File 195728 bytes October 13 2019 14:29:41.
grotty File 145304 bytes October 13 2019 14:29:41.
groups File 38368 bytes April 01 2023 08:44:39.
gs File 12648 bytes June 03 2025 02:48:22.
gsnd File 277 bytes June 03 2025 02:48:11.
gsoelim File 43576 bytes October 13 2019 14:29:41.
gtar File 459768 bytes June 11 2025 14:11:24.
gtbl File 158320 bytes October 13 2019 14:29:41.
gtroff File 824344 bytes October 13 2019 14:29:41.
gunzip File 2345 bytes April 27 2022 05:49:28.
gzexe File 6375 bytes April 27 2022 05:49:28.
gzip File 96944 bytes April 27 2022 05:49:29.
h2ph File 29382 bytes July 28 2025 08:08:32.
h2xs File 60866 bytes July 28 2025 08:07:09.
head File 46672 bytes April 01 2023 08:44:39.
hexdump File 58880 bytes April 06 2024 13:02:53.
host File 145712 bytes February 20 2025 09:05:41.
hostid File 34208 bytes April 01 2023 08:44:39.
hostname File 21664 bytes October 11 2019 13:06:51.
hunspell File 148168 bytes October 13 2019 08:33:15.
iconv File 62912 bytes June 09 2025 20:31:29.
id File 46608 bytes April 01 2023 08:44:39.
identify File 12128 bytes April 01 2025 13:15:58.
idn File 40352 bytes October 13 2019 16:55:35.
ifnames File 4128 bytes August 13 2024 19:30:48.
import File 12120 bytes April 01 2025 13:15:58.
infocmp File 62512 bytes October 14 2023 18:54:49.
infotocap File 87360 bytes October 14 2023 18:54:49.
install File 160000 bytes April 01 2023 08:44:39.
instmodsh File 4194 bytes October 13 2019 08:55:21.
ionice File 29680 bytes April 06 2024 13:02:53.
ipcrm File 29688 bytes April 06 2024 13:02:53.
ipcs File 54672 bytes April 06 2024 13:02:53.
isosize File 25472 bytes April 06 2024 13:02:53.
ispell File 988 bytes April 18 2022 15:10:51.
join File 55056 bytes April 01 2023 08:44:39.
kill File 38168 bytes April 06 2024 13:02:53.
ld File 1789096 bytes November 15 2024 09:59:32.
ld.bfd File 1789096 bytes November 15 2024 09:59:32.
ldd File 5441 bytes June 09 2025 20:25:41.
less File 177928 bytes July 02 2024 20:10:37.
lessecho File 12696 bytes July 02 2024 20:10:37.
lesskey File 22520 bytes July 02 2024 20:10:37.
lesspipe.sh File 3143 bytes July 02 2024 19:57:10.
lex File 438728 bytes October 12 2019 12:33:17.
libnetcfg File 15775 bytes July 28 2025 08:08:32.
libtool File 367724 bytes October 11 2019 14:55:28.
libtoolize File 129197 bytes October 11 2019 14:55:28.
link File 34208 bytes April 01 2023 08:44:39.
ln File 72264 bytes April 01 2023 08:44:39.
locale File 57800 bytes June 09 2025 20:31:29.
localedef File 314848 bytes June 09 2025 20:31:29.
logger File 51184 bytes April 06 2024 13:02:53.
login File 41944 bytes April 06 2024 13:02:53.
logname File 34224 bytes April 01 2023 08:44:39.
look File 16848 bytes April 06 2024 13:02:53.
ls File 143328 bytes April 01 2023 08:44:39.
lynx File 1928720 bytes April 18 2022 21:01:05.
m4 File 190016 bytes October 11 2019 14:41:40.
mail File 418704 bytes October 13 2019 00:19:50.
mailx File 418704 bytes October 13 2019 00:19:50.
make File 240968 bytes April 18 2022 16:38:34.
make-dummy-cert File 610 bytes October 09 2024 13:39:22.
mariadb File 4545824 bytes May 28 2025 17:32:49.
mariadb-access File 111961 bytes May 28 2025 17:32:49.
mariadb-admin File 4070888 bytes May 28 2025 17:32:49.
mariadb-binlog File 4346304 bytes May 28 2025 17:32:49.
mariadb-check File 4063880 bytes May 28 2025 17:32:49.
mariadb-conv File 3764080 bytes May 28 2025 17:32:49.
mariadb-convert-table-format File 4221 bytes May 28 2025 17:32:49.
mariadb-dump File 4155560 bytes May 28 2025 17:32:49.
mariadb-dumpslow File 8242 bytes May 28 2025 17:32:49.
mariadb-embedded File 23688240 bytes May 28 2025 17:32:49.
mariadb-find-rows File 3290 bytes May 28 2025 17:32:49.
mariadb-hotcopy File 34973 bytes May 28 2025 17:32:49.
mariadb-import File 4058696 bytes May 28 2025 17:32:49.
mariadb-plugin File 3742920 bytes May 28 2025 17:32:49.
mariadb-secure-installation File 13810 bytes May 28 2025 17:32:49.
mariadb-setpermission File 17977 bytes May 28 2025 17:32:49.
mariadb-show File 4053024 bytes May 28 2025 17:32:49.
mariadb-slap File 4076624 bytes May 28 2025 17:32:49.
mariadb-tzinfo-to-sql File 3738248 bytes May 28 2025 17:32:49.
mariadb-waitpid File 3725568 bytes May 28 2025 17:32:49.
mc File 1360320 bytes October 18 2019 20:38:40.
mcdiff File 1360320 bytes October 18 2019 20:38:40.
mcedit File 1360320 bytes October 18 2019 20:38:40.
mcookie File 34056 bytes April 06 2024 13:02:53.
mcview File 1360320 bytes October 18 2019 20:38:40.
md5sum File 46712 bytes April 01 2023 08:44:39.
mesg File 16752 bytes April 06 2024 13:02:53.
mkdir File 84776 bytes April 01 2023 08:44:39.
mkfifo File 68160 bytes April 01 2023 08:44:39.
mknod File 72248 bytes April 01 2023 08:44:39.
mktemp File 46832 bytes April 01 2023 08:44:39.
mogrify File 12120 bytes April 01 2025 13:15:58.
montage File 12120 bytes April 01 2025 13:15:58.
more File 46016 bytes April 06 2024 13:02:53.
msql2mysql File 1446 bytes May 28 2025 17:32:49.
mv File 147488 bytes April 01 2023 08:44:39.
my_print_defaults File 3730496 bytes May 28 2025 17:32:49.
mysql File 4545824 bytes May 28 2025 17:32:49.
mysql_config File 4622 bytes May 28 2025 17:32:51.
mysql_find_rows File 3290 bytes May 28 2025 17:32:49.
mysql_waitpid File 3725568 bytes May 28 2025 17:32:49.
mysqlaccess File 111961 bytes May 28 2025 17:32:49.
mysqladmin File 4070888 bytes May 28 2025 17:32:49.
mysqlbinlog File 4346304 bytes May 28 2025 17:32:49.
mysqlcheck File 4063880 bytes May 28 2025 17:32:49.
mysqldump File 4155560 bytes May 28 2025 17:32:49.
mysqlimport File 4058696 bytes May 28 2025 17:32:49.
mysqlshow File 4053024 bytes May 28 2025 17:32:49.
mytop File 73681 bytes May 28 2025 17:32:49.
namei File 33896 bytes April 06 2024 13:02:53.
nano File 253888 bytes September 24 2024 02:16:19.
neqn File 908 bytes October 13 2019 14:29:37.
nice File 38312 bytes April 01 2023 08:44:39.
nl File 46720 bytes April 01 2023 08:44:39.
nm File 51584 bytes November 15 2024 09:59:32.
nohup File 38384 bytes April 01 2023 08:44:39.
nproc File 38384 bytes April 01 2023 08:44:39.
nroff File 3312 bytes October 13 2019 14:29:39.
nslookup File 149768 bytes February 20 2025 09:05:41.
nsupdate File 74808 bytes February 20 2025 09:05:41.
numfmt File 67288 bytes April 01 2023 08:44:39.
objcopy File 245832 bytes November 15 2024 09:59:32.
objdump File 429832 bytes November 15 2024 09:59:32.
od File 75656 bytes April 01 2023 08:44:39.
openssl File 763856 bytes October 09 2024 13:39:36.
pango-list File 12160 bytes October 08 2021 15:22:06.
pango-view File 58816 bytes October 08 2021 15:22:06.
passwd File 1044 bytes April 18 2022 22:59:33.
paste File 38360 bytes April 01 2023 08:44:39.
patch File 211416 bytes June 01 2020 15:14:25.
pathchk File 38304 bytes April 01 2023 08:44:39.
pdf2dsc File 698 bytes June 03 2025 02:48:11.
pdf2ps File 909 bytes June 03 2025 02:48:11.
perl File 12728 bytes July 28 2025 08:07:20.
perl5.26.3 File 12728 bytes July 28 2025 08:07:20.
perlbug File 45458 bytes July 28 2025 08:08:32.
perldoc File 118 bytes October 13 2019 11:53:57.
perlivp File 10813 bytes July 28 2025 08:07:09.
perlml File 7024 bytes August 10 2022 20:54:28.
perlthanks File 45458 bytes July 28 2025 08:08:32.
pg_dump File 409016 bytes February 27 2024 08:25:00.
pg_dumpall File 109680 bytes February 27 2024 08:25:00.
pg_restore File 177504 bytes February 27 2024 08:25:00.
pgrep File 29536 bytes October 14 2023 20:31:02.
php File 937 bytes April 03 2025 11:08:35.
pic File 300896 bytes October 13 2019 14:29:41.
piconv File 8271 bytes October 13 2019 08:46:10.
pinentry File 2404 bytes August 12 2018 17:18:10.
pinentry-curses File 79760 bytes November 24 2019 17:39:34.
ping File 67712 bytes October 14 2023 17:19:01.
pinky File 42528 bytes April 01 2023 08:44:39.
pip-3 File bytes January 01 1970 00:00:00.
pip3 File bytes January 01 1970 00:00:00.
pkg-config File 41000 bytes October 13 2019 06:57:31.
pkgconf File 41000 bytes October 13 2019 06:57:31.
pkill File 29536 bytes October 14 2023 20:31:02.
pl2pm File 4533 bytes July 28 2025 08:08:16.
pmap File 33568 bytes October 14 2023 20:31:02.
pod2html File 4134 bytes July 28 2025 08:08:32.
pod2man File 15034 bytes October 13 2019 14:12:32.
pod2text File 10803 bytes October 13 2019 14:12:32.
pod2usage File 3948 bytes October 13 2019 11:57:18.
podchecker File 3658 bytes October 13 2019 11:46:35.
podselect File 2527 bytes October 13 2019 11:52:55.
post-grohtml File 244456 bytes October 13 2019 14:29:41.
pr File 84200 bytes April 01 2023 08:44:39.
pre-grohtml File 133688 bytes October 13 2019 14:29:41.
precat File 5656 bytes April 18 2022 15:10:50.
preunzip File 5656 bytes April 18 2022 15:10:50.
prezip File 5656 bytes April 18 2022 15:10:50.
prezip-bin File 12264 bytes April 18 2022 15:10:53.
printenv File 34200 bytes April 01 2023 08:44:39.
printf File 54928 bytes April 01 2023 08:44:39.
prove File 13562 bytes October 13 2019 12:42:34.
ps File 137984 bytes October 14 2023 20:31:02.
ps2ascii File 631 bytes June 03 2025 02:48:11.
ps2epsi File 2752 bytes June 03 2025 02:48:11.
ps2pdf File 272 bytes June 03 2025 02:48:11.
ps2pdf12 File 215 bytes June 03 2025 02:48:11.
ps2pdf13 File 215 bytes June 03 2025 02:48:11.
ps2pdf14 File 215 bytes June 03 2025 02:48:11.
ps2pdfwr File 1097 bytes June 03 2025 02:48:11.
ps2ps File 647 bytes June 03 2025 02:48:11.
ps2ps2 File 669 bytes June 03 2025 02:48:11.
psql File 659792 bytes February 27 2024 08:25:00.
ptx File 79944 bytes April 01 2023 08:44:39.
pwd File 38400 bytes April 01 2023 08:44:39.
pwdx File 12984 bytes October 14 2023 20:31:02.
pydoc-3 File bytes January 01 1970 00:00:00.
pydoc3 File bytes January 01 1970 00:00:00.
python2 File 8032 bytes April 10 2024 04:58:50.
python2.7 File 8032 bytes April 10 2024 04:58:50.
python3 File 11872 bytes July 01 2025 22:14:50.
python3.6 File 11872 bytes July 01 2025 22:14:50.
python3.6m File 11872 bytes July 01 2025 22:14:50.
pyvenv-3 File bytes January 01 1970 00:00:00.
ranlib File 63464 bytes November 15 2024 09:59:32.
raw File 16888 bytes April 06 2024 13:02:53.
readelf File 639528 bytes November 15 2024 09:59:32.
readlink File 47064 bytes April 01 2023 08:44:39.
realpath File 51216 bytes April 01 2023 08:44:39.
recode File 48160 bytes October 18 2019 15:18:02.
reindexdb File 72008 bytes February 27 2024 08:25:00.
rename File 16896 bytes April 06 2024 13:02:53.
renew-dummy-cert File 725 bytes October 09 2024 13:39:22.
renice File 16856 bytes April 06 2024 13:02:53.
replace File 3708040 bytes May 28 2025 17:32:49.
reset File 25352 bytes October 14 2023 18:54:49.
rev File 12752 bytes April 06 2024 13:02:53.
rm File 72160 bytes April 01 2023 08:44:39.
rmdir File 46632 bytes April 01 2023 08:44:39.
rnano File 253888 bytes September 24 2024 02:16:19.
rsync File 522392 bytes June 03 2025 02:02:49.
ruby File 12128 bytes May 14 2025 12:43:45.
run-with-aspell File 85 bytes April 18 2022 15:10:50.
runcon File 38344 bytes April 01 2023 08:44:39.
rvi File 1180368 bytes August 02 2022 16:57:02.
rview File 1180368 bytes August 02 2022 16:57:02.
rvim File 3067760 bytes August 02 2022 16:57:02.
scalar File 2290912 bytes July 23 2025 06:59:57.
scl File 37752 bytes April 01 2023 16:10:31.
scl_enabled File 258 bytes August 25 2017 08:23:02.
scl_source File 1863 bytes April 01 2023 16:10:31.
scp File 105320 bytes February 19 2025 20:59:40.
screen File 494040 bytes May 05 2021 10:04:06.
script File 37672 bytes April 06 2024 13:02:53.
sdiff File 107856 bytes May 04 2020 15:15:14.
sed File 118248 bytes April 18 2022 21:41:04.
selectorctl File 7812 bytes July 11 2025 17:46:23.
seq File 54808 bytes April 01 2023 08:44:39.
setsid File 16768 bytes April 06 2024 13:02:53.
setterm File 46200 bytes April 06 2024 13:02:53.
sftp File 163576 bytes February 19 2025 20:59:40.
sh File 1150584 bytes May 23 2024 08:55:42.
sha1sum File 46720 bytes April 01 2023 08:44:39.
sha224sum File 46752 bytes April 01 2023 08:44:39.
sha256sum File 46752 bytes April 01 2023 08:44:39.
sha384sum File 46760 bytes April 01 2023 08:44:39.
sha512sum File 46760 bytes April 01 2023 08:44:39.
shred File 63424 bytes April 01 2023 08:44:39.
shuf File 59560 bytes April 01 2023 08:44:39.
size File 34048 bytes November 15 2024 09:59:32.
skill File 29488 bytes October 14 2023 20:31:02.
slabtop File 21344 bytes October 14 2023 20:31:02.
sleep File 38368 bytes April 01 2023 08:44:39.
snice File 29488 bytes October 14 2023 20:31:02.
soelim File 43576 bytes October 13 2019 14:29:41.
sort File 126512 bytes April 01 2023 08:44:39.
spell File 122 bytes April 18 2022 15:10:51.
splain File 19150 bytes July 28 2025 08:08:32.
split File 59520 bytes April 01 2023 08:44:39.
sprof File 29360 bytes June 09 2025 20:31:29.
sqlite3 File 1346512 bytes July 29 2025 01:27:56.
ssh File 775720 bytes February 19 2025 20:59:40.
ssh-add File 354432 bytes February 19 2025 20:59:40.
ssh-agent File 333392 bytes February 19 2025 20:59:40.
ssh-copy-id File 10694 bytes February 19 2025 20:59:39.
ssh-keygen File 437416 bytes February 19 2025 20:59:40.
ssh-keyscan File 438856 bytes February 19 2025 20:59:40.
stat File 88304 bytes April 01 2023 08:44:39.
stdbuf File 50768 bytes April 01 2023 08:44:39.
strace File 2029832 bytes January 28 2025 01:32:17.
stream File 12112 bytes April 01 2025 13:15:58.
strings File 38328 bytes November 15 2024 09:59:32.
strip File 245856 bytes November 15 2024 09:59:32.
stty File 79544 bytes April 01 2023 08:44:39.
sum File 46704 bytes April 01 2023 08:44:39.
sync File 38328 bytes April 01 2023 08:44:39.
tabs File 16952 bytes October 14 2023 18:54:49.
tac File 42568 bytes April 01 2023 08:44:39.
tail File 75984 bytes April 01 2023 08:44:39.
tar File 459768 bytes June 11 2025 14:11:24.
taskset File 38144 bytes April 06 2024 13:02:53.
tbl File 158320 bytes October 13 2019 14:29:41.
tclsh File 9256 bytes October 12 2019 00:25:32.
tclsh8.6 File 9256 bytes October 12 2019 00:25:32.
tee File 42552 bytes April 01 2023 08:44:39.
test File 54912 bytes April 01 2023 08:44:39.
tic File 87360 bytes October 14 2023 18:54:49.
timeout File 42936 bytes April 01 2023 08:44:39.
tload File 17160 bytes October 14 2023 20:31:02.
tmpwatch File 36320 bytes October 12 2019 11:32:29.
toe File 16848 bytes October 14 2023 18:54:49.
top File 124616 bytes October 14 2023 20:31:02.
touch File 96272 bytes April 01 2023 08:44:39.
tput File 25392 bytes October 14 2023 18:54:49.
tr File 50896 bytes April 01 2023 08:44:39.
traceroute File 72672 bytes March 11 2025 07:45:53.
troff File 824344 bytes October 13 2019 14:29:41.
true File 34200 bytes April 01 2023 08:44:39.
truncate File 42432 bytes April 01 2023 08:44:39.
tset File 25352 bytes October 14 2023 18:54:49.
tsort File 42568 bytes April 01 2023 08:44:39.
tty File 34192 bytes April 01 2023 08:44:39.
tzselect File 15370 bytes June 09 2025 20:25:25.
uapi File 1040 bytes June 28 2025 23:07:04.
ul File 21072 bytes April 06 2024 13:02:53.
uname File 38304 bytes April 01 2023 08:44:39.
unexpand File 46776 bytes April 01 2023 08:44:39.
uniq File 50912 bytes April 01 2023 08:44:39.
unlink File 34216 bytes April 01 2023 08:44:39.
unversioned-python File bytes January 01 1970 00:00:00.
unzip File 206728 bytes June 03 2025 02:10:12.
unzipsfx File 103912 bytes June 03 2025 02:10:12.
uptime File 12888 bytes October 14 2023 20:31:02.
users File 38368 bytes April 01 2023 08:44:39.
utmpdump File 29344 bytes April 06 2024 13:02:53.
vacuumdb File 80344 bytes February 27 2024 08:25:00.
vdir File 143328 bytes April 01 2023 08:44:39.
vi File 1180368 bytes August 02 2022 16:57:02.
view File 1180368 bytes August 02 2022 16:57:02.
vim File 3067760 bytes August 02 2022 16:57:02.
vimdiff File 3067760 bytes August 02 2022 16:57:02.
vimtutor File 2121 bytes August 02 2022 16:56:59.
vmstat File 37672 bytes October 14 2023 20:31:02.
watch File 29888 bytes October 14 2023 20:31:02.
wc File 50912 bytes April 01 2023 08:44:39.
wget File 533928 bytes August 13 2024 22:22:56.
whereis File 29976 bytes April 06 2024 13:02:53.
which File 30144 bytes October 15 2023 02:50:46.
who File 54968 bytes April 01 2023 08:44:39.
whoami File 34216 bytes April 01 2023 08:44:39.
word-list-compress File 12280 bytes April 18 2022 15:10:53.
x86_64-redhat-linux-c++ File 1270688 bytes March 31 2025 10:38:33.
x86_64-redhat-linux-g++ File 1270688 bytes March 31 2025 10:38:33.
x86_64-redhat-linux-gcc File 1266552 bytes March 31 2025 10:38:36.
x86_64-redhat-linux-gcc-8 File 1266552 bytes March 31 2025 10:38:36.
xargs File 75888 bytes September 24 2024 02:19:34.
xmlcatalog File 20864 bytes July 10 2025 07:02:26.
xmllint File 75128 bytes July 10 2025 07:02:26.
xmlwf File 33752 bytes April 15 2025 19:58:56.
xsltproc File 29152 bytes June 09 2025 15:03:50.
xsubpp File 5080 bytes October 13 2019 08:58:35.
xxd File 21016 bytes August 02 2022 16:57:02.
yes File 34248 bytes April 01 2023 08:44:39.
zcat File 1983 bytes April 27 2022 05:49:28.
zcmp File 1677 bytes April 27 2022 05:49:28.
zdiff File 5879 bytes April 27 2022 05:49:28.
zegrep File 29 bytes April 27 2022 05:49:28.
zfgrep File 29 bytes April 27 2022 05:49:28.
zforce File 2080 bytes April 27 2022 05:49:28.
zgrep File 7582 bytes April 27 2022 05:49:28.
zip File 234496 bytes October 11 2019 13:11:04.
zipcloak File 105376 bytes October 11 2019 13:11:04.
zipgrep File 2953 bytes October 10 2008 17:40:36.
zipinfo File 206728 bytes June 03 2025 02:10:12.
zipnote File 100104 bytes October 11 2019 13:11:04.
zipsplit File 100104 bytes October 11 2019 13:11:04.
zless File 2205 bytes April 27 2022 05:49:28.
zmore File 1841 bytes April 27 2022 05:49:28.
znew File 4552 bytes April 27 2022 05:49:28.
zsoelim File 43576 bytes October 13 2019 14:29:41.

Reading File: //bin/splain

#!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if $running_under_some_shell;

BEGIN { pop @INC if $INC[-1] eq '.' }


=head1 NAME

diagnostics, splain - produce verbose warning diagnostics

=head1 SYNOPSIS

Using the C<diagnostics> pragma:

    use diagnostics;
    use diagnostics -verbose;

    enable  diagnostics;
    disable diagnostics;

Using the C<splain> standalone filter program:

    perl program 2>diag.out
    splain [-v] [-p] diag.out

Using diagnostics to get stack traces from a misbehaving script:

    perl -Mdiagnostics=-traceonly my_script.pl

=head1 DESCRIPTION

=head2 The C<diagnostics> Pragma

This module extends the terse diagnostics normally emitted by both the
perl compiler and the perl interpreter (from running perl with a -w 
switch or C<use warnings>), augmenting them with the more
explicative and endearing descriptions found in L<perldiag>.  Like the
other pragmata, it affects the compilation phase of your program rather
than merely the execution phase.

To use in your program as a pragma, merely invoke

    use diagnostics;

at the start (or near the start) of your program.  (Note 
that this I<does> enable perl's B<-w> flag.)  Your whole
compilation will then be subject(ed :-) to the enhanced diagnostics.
These still go out B<STDERR>.

Due to the interaction between runtime and compiletime issues,
and because it's probably not a very good idea anyway,
you may not use C<no diagnostics> to turn them off at compiletime.
However, you may control their behaviour at runtime using the 
disable() and enable() methods to turn them off and on respectively.

The B<-verbose> flag first prints out the L<perldiag> introduction before
any other diagnostics.  The $diagnostics::PRETTY variable can generate nicer
escape sequences for pagers.

Warnings dispatched from perl itself (or more accurately, those that match
descriptions found in L<perldiag>) are only displayed once (no duplicate
descriptions).  User code generated warnings a la warn() are unaffected,
allowing duplicate user messages to be displayed.

This module also adds a stack trace to the error message when perl dies.
This is useful for pinpointing what
caused the death.  The B<-traceonly> (or
just B<-t>) flag turns off the explanations of warning messages leaving just
the stack traces.  So if your script is dieing, run it again with

  perl -Mdiagnostics=-traceonly my_bad_script

to see the call stack at the time of death.  By supplying the B<-warntrace>
(or just B<-w>) flag, any warnings emitted will also come with a stack
trace.

=head2 The I<splain> Program

While apparently a whole nuther program, I<splain> is actually nothing
more than a link to the (executable) F<diagnostics.pm> module, as well as
a link to the F<diagnostics.pod> documentation.  The B<-v> flag is like
the C<use diagnostics -verbose> directive.
The B<-p> flag is like the
$diagnostics::PRETTY variable.  Since you're post-processing with 
I<splain>, there's no sense in being able to enable() or disable() processing.

Output from I<splain> is directed to B<STDOUT>, unlike the pragma.

=head1 EXAMPLES

The following file is certain to trigger a few errors at both
runtime and compiletime:

    use diagnostics;
    print NOWHERE "nothing\n";
    print STDERR "\n\tThis message should be unadorned.\n";
    warn "\tThis is a user warning";
    print "\nDIAGNOSTIC TESTER: Please enter a <CR> here: ";
    my $a, $b = scalar <STDIN>;
    print "\n";
    print $x/$y;

If you prefer to run your program first and look at its problem
afterwards, do this:

    perl -w test.pl 2>test.out
    ./splain < test.out

Note that this is not in general possible in shells of more dubious heritage, 
as the theoretical 

    (perl -w test.pl >/dev/tty) >& test.out
    ./splain < test.out

Because you just moved the existing B<stdout> to somewhere else.

If you don't want to modify your source code, but still have on-the-fly
warnings, do this:

    exec 3>&1; perl -w test.pl 2>&1 1>&3 3>&- | splain 1>&2 3>&- 

Nifty, eh?

If you want to control warnings on the fly, do something like this.
Make sure you do the C<use> first, or you won't be able to get
at the enable() or disable() methods.

    use diagnostics; # checks entire compilation phase 
	print "\ntime for 1st bogus diags: SQUAWKINGS\n";
	print BOGUS1 'nada';
	print "done with 1st bogus\n";

    disable diagnostics; # only turns off runtime warnings
	print "\ntime for 2nd bogus: (squelched)\n";
	print BOGUS2 'nada';
	print "done with 2nd bogus\n";

    enable diagnostics; # turns back on runtime warnings
	print "\ntime for 3rd bogus: SQUAWKINGS\n";
	print BOGUS3 'nada';
	print "done with 3rd bogus\n";

    disable diagnostics;
	print "\ntime for 4th bogus: (squelched)\n";
	print BOGUS4 'nada';
	print "done with 4th bogus\n";

=head1 INTERNALS

Diagnostic messages derive from the F<perldiag.pod> file when available at
runtime.  Otherwise, they may be embedded in the file itself when the
splain package is built.   See the F<Makefile> for details.

If an extant $SIG{__WARN__} handler is discovered, it will continue
to be honored, but only after the diagnostics::splainthis() function 
(the module's $SIG{__WARN__} interceptor) has had its way with your
warnings.

There is a $diagnostics::DEBUG variable you may set if you're desperately
curious what sorts of things are being intercepted.

    BEGIN { $diagnostics::DEBUG = 1 } 


=head1 BUGS

Not being able to say "no diagnostics" is annoying, but may not be
insurmountable.

The C<-pretty> directive is called too late to affect matters.
You have to do this instead, and I<before> you load the module.

    BEGIN { $diagnostics::PRETTY = 1 } 

I could start up faster by delaying compilation until it should be
needed, but this gets a "panic: top_level" when using the pragma form
in Perl 5.001e.

While it's true that this documentation is somewhat subserious, if you use
a program named I<splain>, you should expect a bit of whimsy.

=head1 AUTHOR

Tom Christiansen <F<tchrist@mox.perl.com>>, 25 June 1995.

=cut

use strict;
use 5.009001;
use Carp;
$Carp::Internal{__PACKAGE__.""}++;

our $VERSION = '1.36';
our $DEBUG;
our $VERBOSE;
our $PRETTY;
our $TRACEONLY = 0;
our $WARNTRACE = 0;

use Config;
use Text::Tabs 'expand';
my $privlib = $Config{privlibexp};
if ($^O eq 'VMS') {
    require VMS::Filespec;
    $privlib = VMS::Filespec::unixify($privlib);
}
my @trypod = (
	   "$privlib/pod/perldiag.pod",
	   "$privlib/pods/perldiag.pod",
	  );
# handy for development testing of new warnings etc
unshift @trypod, "./pod/perldiag.pod" if -e "pod/perldiag.pod";
(my $PODFILE) = ((grep { -e } @trypod), $trypod[$#trypod])[0];

$DEBUG ||= 0;

local $| = 1;
local $_;
local $.;

my $standalone;
my(%HTML_2_Troff, %HTML_2_Latin_1, %HTML_2_ASCII_7);

CONFIG: {
    our $opt_p = our $opt_d = our $opt_v = our $opt_f = '';

    unless (caller) {
	$standalone++;
	require Getopt::Std;
	Getopt::Std::getopts('pdvf:')
	    or die "Usage: $0 [-v] [-p] [-f splainpod]";
	$PODFILE = $opt_f if $opt_f;
	$DEBUG = 2 if $opt_d;
	$VERBOSE = $opt_v;
	$PRETTY = $opt_p;
    }

    if (open(POD_DIAG, '<', $PODFILE)) {
	warn "Happy happy podfile from real $PODFILE\n" if $DEBUG;
	last CONFIG;
    } 

    if (caller) {
	INCPATH: {
	    for my $file ( (map { "$_/".__PACKAGE__.".pm" } @INC), $0) {
		warn "Checking $file\n" if $DEBUG;
		if (open(POD_DIAG, '<', $file)) {
		    while (<POD_DIAG>) {
			next unless
			    /^__END__\s*# wish diag dbase were more accessible/;
			print STDERR "podfile is $file\n" if $DEBUG;
			last INCPATH;
		    }
		}
	    } 
	}
    } else { 
	print STDERR "podfile is <DATA>\n" if $DEBUG;
	*POD_DIAG = *main::DATA;
    }
}
if (eof(POD_DIAG)) { 
    die "couldn't find diagnostic data in $PODFILE @INC $0";
}


%HTML_2_Troff = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote

    "Aacute"	=>	"A\\*'",	#   capital A, acute accent
    # etc

);

%HTML_2_Latin_1 = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote

    "Aacute"	=>	"\xC1"	#   capital A, acute accent

    # etc
);

%HTML_2_ASCII_7 = (
    'amp'	=>	'&',	#   ampersand
    'lt'	=>	'<',	#   left chevron, less-than
    'gt'	=>	'>',	#   right chevron, greater-than
    'quot'	=>	'"',	#   double quote

    "Aacute"	=>	"A"	#   capital A, acute accent
    # etc
);

our %HTML_Escapes;
*HTML_Escapes = do {
    if ($standalone) {
	$PRETTY ? \%HTML_2_Latin_1 : \%HTML_2_ASCII_7; 
    } else {
	\%HTML_2_Latin_1; 
    }
}; 

*THITHER = $standalone ? *STDOUT : *STDERR;

my %transfmt = (); 
my $transmo = <<EOFUNC;
sub transmo {
    #local \$^W = 0;  # recursive warnings we do NOT need!
EOFUNC

my %msg;
my $over_level = 0;     # We look only at =item lines at the first =over level
{
    print STDERR "FINISHING COMPILATION for $_\n" if $DEBUG;
    local $/ = '';
    local $_;
    my $header;
    my @headers;
    my $for_item;
    my $seen_body;
    while (<POD_DIAG>) {

	sub _split_pod_link {
	    $_[0] =~ m'(?:([^|]*)\|)?([^/]*)(?:/("?)(.*)\3)?'s;
	    ($1,$2,$4);
	}

	unescape();
	if ($PRETTY) {
	    sub noop   { return $_[0] }  # spensive for a noop
	    sub bold   { my $str =$_[0];  $str =~ s/(.)/$1\b$1/g; return $str; } 
	    sub italic { my $str = $_[0]; $str =~ s/(.)/_\b$1/g;  return $str; } 
	    s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/bold($+)/ges;
	    s/[IF]<(.*?)>/italic($1)/ges;
	    s/L<(.*?)>/
	       my($text,$page,$sect) = _split_pod_link($1);
	       defined $text
	        ? $text
	        : defined $sect
	           ? italic($sect) . ' in ' . italic($page)
	           : italic($page)
	     /ges;
	     s/S<(.*?)>/
               $1
             /ges;
	} else {
	    s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/$+/gs;
	    s/[IF]<(.*?)>/$1/gs;
	    s/L<(.*?)>/
	       my($text,$page,$sect) = _split_pod_link($1);
	       defined $text
	        ? $text
	        : defined $sect
	           ? qq '"$sect" in $page'
	           : $page
	     /ges;
	    s/S<(.*?)>/
               $1
             /ges;
	} 
	unless (/^=/) {
	    if (defined $header) { 
		if ( $header eq 'DESCRIPTION' && 
		    (   /Optional warnings are enabled/ 
		     || /Some of these messages are generic./
		    ) )
		{
		    next;
		}
		$_ = expand $_;
		s/^/    /gm;
		$msg{$header} .= $_;
		for my $h(@headers) { $msg{$h} .= $_ }
		++$seen_body;
	 	undef $for_item;	
	    }
	    next;
	} 

	# If we have not come across the body of the description yet, then
	# the previous header needs to share the same description.
	if ($seen_body) {
	    @headers = ();
	}
	else {
	    push @headers, $header if defined $header;
	}

	if ( ! s/=item (.*?)\s*\z//s || $over_level != 1) {

	    if ( s/=head1\sDESCRIPTION//) {
		$msg{$header = 'DESCRIPTION'} = '';
		undef $for_item;
	    }
	    elsif( s/^=for\s+diagnostics\s*\n(.*?)\s*\z// ) {
		$for_item = $1;
	    }
	    elsif( /^=over\b/ ) {
                $over_level++;
            }
	    elsif( /^=back\b/ ) { # Stop processing body here
                $over_level--;
                if ($over_level == 0) {
                    undef $header;
                    undef $for_item;
                    $seen_body = 0;
                    next;
                }
	    }
	    next;
	}

	if( $for_item ) { $header = $for_item; undef $for_item } 
	else {
	    $header = $1;

	    $header =~ s/\n/ /gs; # Allow multi-line headers
	}

	# strip formatting directives from =item line
	$header =~ s/[A-Z]<(.*?)>/$1/g;

	# Since we strip "(\.\s*)\n" when we search a warning, strip it here as well
	$header =~ s/(\.\s*)?$//;

        my @toks = split( /(%l?[dxX]|%[ucp]|%(?:\.\d+)?[fs])/, $header );
	if (@toks > 1) {
            my $conlen = 0;
            for my $i (0..$#toks){
                if( $i % 2 ){
                    if(      $toks[$i] eq '%c' ){
                        $toks[$i] = '.';
                    } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){
                        $toks[$i] = '\d+';
                    } elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){
                        $toks[$i] = $i == $#toks ? '.*' : '.*?';
                    } elsif( $toks[$i] =~ '%.(\d+)s' ){
                        $toks[$i] = ".{$1}";
                    } elsif( $toks[$i] =~ '^%l*([pxX])$' ){
                        $toks[$i] = $1 eq 'X' ? '[\dA-F]+' : '[\da-f]+';
                    }
                } elsif( length( $toks[$i] ) ){
                    $toks[$i] = quotemeta $toks[$i];
                    $conlen += length( $toks[$i] );
                }
            }  
            my $lhs = join( '', @toks );
            $lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
	    $transfmt{$header}{pat} =
              "    s^\\s*$lhs\\s*\Q$header\Es\n\t&& return 1;\n";
            $transfmt{$header}{len} = $conlen;
	} else {
            my $lhs = "\Q$header\E";
            $lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
            $transfmt{$header}{pat} =
	      "    s^\\s*$lhs\\s*\Q$header\E\n\t && return 1;\n";
            $transfmt{$header}{len} = length( $header );
	} 

	print STDERR __PACKAGE__.": Duplicate entry: \"$header\"\n"
	    if $msg{$header};

	$msg{$header} = '';
	$seen_body = 0;
    } 


    close POD_DIAG unless *main::DATA eq *POD_DIAG;

    die "No diagnostics?" unless %msg;

    # Apply patterns in order of decreasing sum of lengths of fixed parts
    # Seems the best way of hitting the right one.
    for my $hdr ( sort { $transfmt{$b}{len} <=> $transfmt{$a}{len} }
                  keys %transfmt ){
        $transmo .= $transfmt{$hdr}{pat};
    }
    $transmo .= "    return 0;\n}\n";
    print STDERR $transmo if $DEBUG;
    eval $transmo;
    die $@ if $@;
}

if ($standalone) {
    if (!@ARGV and -t STDIN) { print STDERR "$0: Reading from STDIN\n" } 
    while (defined (my $error = <>)) {
	splainthis($error) || print THITHER $error;
    } 
    exit;
} 

my $olddie;
my $oldwarn;

sub import {
    shift;
    $^W = 1; # yup, clobbered the global variable; 
	     # tough, if you want diags, you want diags.
    return if defined $SIG{__WARN__} && ($SIG{__WARN__} eq \&warn_trap);

    for (@_) {

	/^-d(ebug)?$/ 	   	&& do {
				    $DEBUG++;
				    next;
				   };

	/^-v(erbose)?$/ 	&& do {
				    $VERBOSE++;
				    next;
				   };

	/^-p(retty)?$/ 		&& do {
				    print STDERR "$0: I'm afraid it's too late for prettiness.\n";
				    $PRETTY++;
				    next;
			       };
	# matches trace and traceonly for legacy doc mixup reasons
	/^-t(race(only)?)?$/	&& do {
				    $TRACEONLY++;
				    next;
			       };
	/^-w(arntrace)?$/ 	&& do {
				    $WARNTRACE++;
				    next;
			       };

	warn "Unknown flag: $_";
    } 

    $oldwarn = $SIG{__WARN__};
    $olddie = $SIG{__DIE__};
    $SIG{__WARN__} = \&warn_trap;
    $SIG{__DIE__} = \&death_trap;
} 

sub enable { &import }

sub disable {
    shift;
    return unless $SIG{__WARN__} eq \&warn_trap;
    $SIG{__WARN__} = $oldwarn || '';
    $SIG{__DIE__} = $olddie || '';
} 

sub warn_trap {
    my $warning = $_[0];
    if (caller eq __PACKAGE__ or !splainthis($warning)) {
	if ($WARNTRACE) {
	    print STDERR Carp::longmess($warning);
	} else {
	    print STDERR $warning;
	}
    } 
    goto &$oldwarn if defined $oldwarn and $oldwarn and $oldwarn ne \&warn_trap;
};

sub death_trap {
    my $exception = $_[0];

    # See if we are coming from anywhere within an eval. If so we don't
    # want to explain the exception because it's going to get caught.
    my $in_eval = 0;
    my $i = 0;
    while (my $caller = (caller($i++))[3]) {
      if ($caller eq '(eval)') {
	$in_eval = 1;
	last;
      }
    }

    splainthis($exception) unless $in_eval;
    if (caller eq __PACKAGE__) {
	print STDERR "INTERNAL EXCEPTION: $exception";
    } 
    &$olddie if defined $olddie and $olddie and $olddie ne \&death_trap;

    return if $in_eval;

    # We don't want to unset these if we're coming from an eval because
    # then we've turned off diagnostics.

    # Switch off our die/warn handlers so we don't wind up in our own
    # traps.
    $SIG{__DIE__} = $SIG{__WARN__} = '';

    $exception =~ s/\n(?=.)/\n\t/gas;

    die Carp::longmess("__diagnostics__")
	  =~ s/^__diagnostics__.*?line \d+\.?\n/
		  "Uncaught exception from user code:\n\t$exception"
	      /re;
	# up we go; where we stop, nobody knows, but i think we die now
	# but i'm deeply afraid of the &$olddie guy reraising and us getting
	# into an indirect recursion loop
};

my %exact_duplicate;
my %old_diag;
my $count;
my $wantspace;
sub splainthis {
  return 0 if $TRACEONLY;
  for (my $tmp = shift) {
    local $\;
    local $!;
    ### &finish_compilation unless %msg;
    s/(\.\s*)?\n+$//;
    my $orig = $_;
    # return unless defined;

    # get rid of the where-are-we-in-input part
    s/, <.*?> (?:line|chunk).*$//;

    # Discard 1st " at <file> line <no>" and all text beyond
    # but be aware of messages containing " at this-or-that"
    my $real = 0;
    my @secs = split( / at / );
    return unless @secs;
    $_ = $secs[0];
    for my $i ( 1..$#secs ){
        if( $secs[$i] =~ /.+? (?:line|chunk) \d+/ ){
            $real = 1;
            last;
        } else {
            $_ .= ' at ' . $secs[$i];
	}
    }

    # remove parenthesis occurring at the end of some messages 
    s/^\((.*)\)$/$1/;

    if ($exact_duplicate{$orig}++) {
	return &transmo;
    } else {
	return 0 unless &transmo;
    }

    my $short = shorten($orig);
    if ($old_diag{$_}) {
	autodescribe();
	print THITHER "$short (#$old_diag{$_})\n";
	$wantspace = 1;
    } elsif (!$msg{$_} && $orig =~ /\n./s) {
	# A multiline message, like "Attempt to reload /
	# Compilation failed"
	my $found;
	for (split /^/, $orig) {
	    splainthis($_) and $found = 1;
	}
	return $found;
    } else {
	autodescribe();
	$old_diag{$_} = ++$count;
	print THITHER "\n" if $wantspace;
	$wantspace = 0;
	print THITHER "$short (#$old_diag{$_})\n";
	if ($msg{$_}) {
	    print THITHER $msg{$_};
	} else {
	    if (0 and $standalone) { 
		print THITHER "    **** Error #$old_diag{$_} ",
			($real ? "is" : "appears to be"),
			" an unknown diagnostic message.\n\n";
	    }
	    return 0;
	} 
    }
    return 1;
  }
} 

sub autodescribe {
    if ($VERBOSE and not $count) {
	print THITHER &{$PRETTY ? \&bold : \&noop}("DESCRIPTION OF DIAGNOSTICS"),
		"\n$msg{DESCRIPTION}\n";
    } 
} 

sub unescape { 
    s {
            E<  
            ( [A-Za-z]+ )       
            >   
    } { 
         do {   
             exists $HTML_Escapes{$1}
                ? do { $HTML_Escapes{$1} }
                : do {
                    warn "Unknown escape: E<$1> in $_";
                    "E<$1>";
                } 
         } 
    }egx;
}

sub shorten {
    my $line = $_[0];
    if (length($line) > 79 and index($line, "\n") == -1) {
	my $space_place = rindex($line, ' ', 79);
	if ($space_place != -1) {
	    substr($line, $space_place, 1) = "\n\t";
	} 
    } 
    return $line;
} 


1 unless $standalone;  # or it'll complain about itself
__END__ # wish diag dbase were more accessible

SILENT KILLER Tool