Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "plbase64.h"
#include "plstr.h"
#include "nspr.h"
#include <stdio.h>
static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/* PL_Base64Encode, single characters */
PRBool test_001(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 001 (PL_Base64Encode, single characters) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Encode((char*)plain, 1, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d): return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)cypher, result, 4)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n", a, b,
cypher, result);
return PR_FALSE;
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, double characters */
PRBool test_002(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 002 (PL_Base64Encode, double characters) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Encode((char*)plain, 2, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)cypher, result, 4)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
a, b, c, d, cypher, result);
return PR_FALSE;
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, triple characters */
PRBool test_003(void) {
PRUint32 a, b, c, d, e, f;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 003 (PL_Base64Encode, triple characters) "
"...");
fflush(stdout);
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
for (e = 0; e < 4; e++) {
cypher[2] = base[d * 4 + e];
for (f = 0; f < 64; f++) {
plain[2] = e * 64 + f;
cypher[3] = base[f];
rv = PL_Base64Encode((char*)plain, 3, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
c, d, e, f);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)cypher, result, 4)) {
printf(
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
"\"%.4s.\"\n",
a, b, c, d, e, f, cypher, result);
return PR_FALSE;
}
}
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
static struct {
const char* plaintext;
const char* cyphertext;
} array[] = {
/* Cyphertexts generated with uuenview 0.5.13 */
{" ", "IA=="},
{".", "Lg=="},
{"/", "Lw=="},
{"C", "Qw=="},
{"H", "SA=="},
{"S", "Uw=="},
{"^", "Xg=="},
{"a", "YQ=="},
{"o", "bw=="},
{"t", "dA=="},
{"AB", "QUI="},
{"AH", "QUg="},
{"AQ", "QVE="},
{"BD", "QkQ="},
{"CR", "Q1I="},
{"CS", "Q1M="},
{"DB", "REI="},
{"DC", "REM="},
{"EK", "RUs="},
{"ET", "RVQ="},
{"IM", "SU0="},
{"JR", "SlI="},
{"LO", "TE8="},
{"LW", "TFc="},
{"ML", "TUw="},
{"SB", "U0I="},
{"TO", "VE8="},
{"VS", "VlM="},
{"WP", "V1A="},
/* legitimate two-letter words */
{"ad", "YWQ="},
{"ah", "YWg="},
{"am", "YW0="},
{"an", "YW4="},
{"as", "YXM="},
{"at", "YXQ="},
{"ax", "YXg="},
{"be", "YmU="},
{"by", "Ynk="},
{"do", "ZG8="},
{"go", "Z28="},
{"he", "aGU="},
{"hi", "aGk="},
{"if", "aWY="},
{"in", "aW4="},
{"is", "aXM="},
{"it", "aXQ="},
{"me", "bWU="},
{"my", "bXk="},
{"no", "bm8="},
{"of", "b2Y="},
{"on", "b24="},
{"or", "b3I="},
{"ox", "b3g="},
{"so", "c28="},
{"to", "dG8="},
{"up", "dXA="},
{"us", "dXM="},
{"we", "d2U="},
/* all three-letter entries in /usr/dict/words */
{"1st", "MXN0"},
{"2nd", "Mm5k"},
{"3rd", "M3Jk"},
{"4th", "NHRo"},
{"5th", "NXRo"},
{"6th", "NnRo"},
{"7th", "N3Ro"},
{"8th", "OHRo"},
{"9th", "OXRo"},
{"AAA", "QUFB"},
{"AAU", "QUFV"},
{"ABA", "QUJB"},
{"abc", "YWJj"},
{"Abe", "QWJl"},
{"Abo", "QWJv"},
{"ace", "YWNl"},
{"ACM", "QUNN"},
{"ACS", "QUNT"},
{"act", "YWN0"},
{"Ada", "QWRh"},
{"add", "YWRk"},
{"ado", "YWRv"},
{"aft", "YWZ0"},
{"age", "YWdl"},
{"ago", "YWdv"},
{"aid", "YWlk"},
{"ail", "YWls"},
{"aim", "YWlt"},
{"air", "YWly"},
{"ala", "YWxh"},
{"alb", "YWxi"},
{"ale", "YWxl"},
{"Ali", "QWxp"},
{"all", "YWxs"},
{"alp", "YWxw"},
{"A&M", "QSZN"},
{"AMA", "QU1B"},
{"ami", "YW1p"},
{"amp", "YW1w"},
{"Amy", "QW15"},
{"amy", "YW15"},
{"ana", "YW5h"},
{"and", "YW5k"},
{"ani", "YW5p"},
{"Ann", "QW5u"},
{"ant", "YW50"},
{"any", "YW55"},
{"A&P", "QSZQ"},
{"ape", "YXBl"},
{"Apr", "QXBy"},
{"APS", "QVBT"},
{"apt", "YXB0"},
{"arc", "YXJj"},
{"are", "YXJl"},
{"ark", "YXJr"},
{"arm", "YXJt"},
{"art", "YXJ0"},
{"a's", "YSdz"},
{"ash", "YXNo"},
{"ask", "YXNr"},
{"ass", "YXNz"},
{"ate", "YXRl"},
{"Aug", "QXVn"},
{"auk", "YXVr"},
{"Ave", "QXZl"},
{"awe", "YXdl"},
{"awl", "YXds"},
{"awn", "YXdu"},
{"axe", "YXhl"},
{"aye", "YXll"},
{"bad", "YmFk"},
{"bag", "YmFn"},
{"bah", "YmFo"},
{"bam", "YmFt"},
{"ban", "YmFu"},
{"bar", "YmFy"},
{"bat", "YmF0"},
{"bay", "YmF5"},
{"bed", "YmVk"},
{"bee", "YmVl"},
{"beg", "YmVn"},
{"bel", "YmVs"},
{"Ben", "QmVu"},
{"bet", "YmV0"},
{"bey", "YmV5"},
{"bib", "Ymli"},
{"bid", "Ymlk"},
{"big", "Ymln"},
{"bin", "Ymlu"},
{"bit", "Yml0"},
{"biz", "Yml6"},
{"BMW", "Qk1X"},
{"boa", "Ym9h"},
{"bob", "Ym9i"},
{"bog", "Ym9n"},
{"bon", "Ym9u"},
{"boo", "Ym9v"},
{"bop", "Ym9w"},
{"bow", "Ym93"},
{"box", "Ym94"},
{"boy", "Ym95"},
{"b's", "Yidz"},
{"BTL", "QlRM"},
{"BTU", "QlRV"},
{"bub", "YnVi"},
{"bud", "YnVk"},
{"bug", "YnVn"},
{"bum", "YnVt"},
{"bun", "YnVu"},
{"bus", "YnVz"},
{"but", "YnV0"},
{"buy", "YnV5"},
{"bye", "Ynll"},
{"cab", "Y2Fi"},
{"Cal", "Q2Fs"},
{"cam", "Y2Ft"},
{"can", "Y2Fu"},
{"cap", "Y2Fw"},
{"car", "Y2Fy"},
{"cat", "Y2F0"},
{"caw", "Y2F3"},
{"CBS", "Q0JT"},
{"CDC", "Q0RD"},
{"CEQ", "Q0VR"},
{"chi", "Y2hp"},
{"CIA", "Q0lB"},
{"cit", "Y2l0"},
{"cod", "Y29k"},
{"cog", "Y29n"},
{"col", "Y29s"},
{"con", "Y29u"},
{"coo", "Y29v"},
{"cop", "Y29w"},
{"cos", "Y29z"},
{"cot", "Y290"},
{"cow", "Y293"},
{"cox", "Y294"},
{"coy", "Y295"},
{"CPA", "Q1BB"},
{"cpu", "Y3B1"},
{"CRT", "Q1JU"},
{"cry", "Y3J5"},
{"c's", "Yydz"},
{"cub", "Y3Vi"},
{"cud", "Y3Vk"},
{"cue", "Y3Vl"},
{"cup", "Y3Vw"},
{"cur", "Y3Vy"},
{"cut", "Y3V0"},
{"dab", "ZGFi"},
{"dad", "ZGFk"},
{"dam", "ZGFt"},
{"Dan", "RGFu"},
{"Dar", "RGFy"},
{"day", "ZGF5"},
{"Dec", "RGVj"},
{"Dee", "RGVl"},
{"Del", "RGVs"},
{"den", "ZGVu"},
{"Des", "RGVz"},
{"dew", "ZGV3"},
{"dey", "ZGV5"},
{"did", "ZGlk"},
{"die", "ZGll"},
{"dig", "ZGln"},
{"dim", "ZGlt"},
{"din", "ZGlu"},
{"dip", "ZGlw"},
{"Dis", "RGlz"},
{"DNA", "RE5B"},
{"DOD", "RE9E"},
{"doe", "ZG9l"},
{"dog", "ZG9n"},
{"don", "ZG9u"},
{"dot", "ZG90"},
{"Dow", "RG93"},
{"dry", "ZHJ5"},
{"d's", "ZCdz"},
{"dub", "ZHVi"},
{"dud", "ZHVk"},
{"due", "ZHVl"},
{"dug", "ZHVn"},
{"dun", "ZHVu"},
{"dye", "ZHll"},
{"ear", "ZWFy"},
{"eat", "ZWF0"},
{"ebb", "ZWJi"},
{"EDT", "RURU"},
{"eel", "ZWVs"},
{"eft", "ZWZ0"},
{"e.g", "ZS5n"},
{"egg", "ZWdn"},
{"ego", "ZWdv"},
{"eke", "ZWtl"},
{"Eli", "RWxp"},
{"elk", "ZWxr"},
{"ell", "ZWxs"},
{"elm", "ZWxt"},
{"Ely", "RWx5"},
{"end", "ZW5k"},
{"Eng", "RW5n"},
{"EPA", "RVBB"},
{"era", "ZXJh"},
{"ere", "ZXJl"},
{"erg", "ZXJn"},
{"err", "ZXJy"},
{"e's", "ZSdz"},
{"EST", "RVNU"},
{"eta", "ZXRh"},
{"etc", "ZXRj"},
{"Eva", "RXZh"},
{"eve", "ZXZl"},
{"ewe", "ZXdl"},
{"eye", "ZXll"},
{"FAA", "RkFB"},
{"fad", "ZmFk"},
{"fag", "ZmFn"},
{"fan", "ZmFu"},
{"far", "ZmFy"},
{"fat", "ZmF0"},
{"fay", "ZmF5"},
{"FBI", "RkJJ"},
{"FCC", "RkND"},
{"FDA", "RkRB"},
{"Feb", "RmVi"},
{"fed", "ZmVk"},
{"fee", "ZmVl"},
{"few", "ZmV3"},
{"fib", "Zmli"},
{"fig", "Zmln"},
{"fin", "Zmlu"},
{"fir", "Zmly"},
{"fit", "Zml0"},
{"fix", "Zml4"},
{"Flo", "Rmxv"},
{"flu", "Zmx1"},
{"fly", "Zmx5"},
{"FMC", "Rk1D"},
{"fob", "Zm9i"},
{"foe", "Zm9l"},
{"fog", "Zm9n"},
{"fop", "Zm9w"},
{"for", "Zm9y"},
{"fox", "Zm94"},
{"FPC", "RlBD"},
{"fro", "ZnJv"},
{"fry", "ZnJ5"},
{"f's", "Zidz"},
{"FTC", "RlRD"},
{"fum", "ZnVt"},
{"fun", "ZnVu"},
{"fur", "ZnVy"},
{"gab", "Z2Fi"},
{"gad", "Z2Fk"},
{"gag", "Z2Fn"},
{"gal", "Z2Fs"},
{"gam", "Z2Ft"},
{"GAO", "R0FP"},
{"gap", "Z2Fw"},
{"gar", "Z2Fy"},
{"gas", "Z2Fz"},
{"gay", "Z2F5"},
{"gee", "Z2Vl"},
{"gel", "Z2Vs"},
{"gem", "Z2Vt"},
{"get", "Z2V0"},
{"gig", "Z2ln"},
{"Gil", "R2ls"},
{"gin", "Z2lu"},
{"GMT", "R01U"},
{"GNP", "R05Q"},
{"gnu", "Z251"},
{"Goa", "R29h"},
{"gob", "Z29i"},
{"god", "Z29k"},
{"gog", "Z29n"},
{"GOP", "R09Q"},
{"got", "Z290"},
{"GPO", "R1BP"},
{"g's", "Zydz"},
{"GSA", "R1NB"},
{"gum", "Z3Vt"},
{"gun", "Z3Vu"},
{"Gus", "R3Vz"},
{"gut", "Z3V0"},
{"guy", "Z3V5"},
{"gym", "Z3lt"},
{"gyp", "Z3lw"},
{"had", "aGFk"},
{"Hal", "SGFs"},
{"ham", "aGFt"},
{"Han", "SGFu"},
{"hap", "aGFw"},
{"hat", "aGF0"},
{"haw", "aGF3"},
{"hay", "aGF5"},
{"hem", "aGVt"},
{"hen", "aGVu"},
{"her", "aGVy"},
{"hew", "aGV3"},
{"hex", "aGV4"},
{"hey", "aGV5"},
{"hid", "aGlk"},
{"him", "aGlt"},
{"hip", "aGlw"},
{"his", "aGlz"},
{"hit", "aGl0"},
{"hob", "aG9i"},
{"hoc", "aG9j"},
{"hoe", "aG9l"},
{"hog", "aG9n"},
{"hoi", "aG9p"},
{"Hom", "SG9t"},
{"hop", "aG9w"},
{"hot", "aG90"},
{"how", "aG93"},
{"hoy", "aG95"},
{"h's", "aCdz"},
{"hub", "aHVi"},
{"hue", "aHVl"},
{"hug", "aHVn"},
{"huh", "aHVo"},
{"hum", "aHVt"},
{"Hun", "SHVu"},
{"hut", "aHV0"},
{"Ian", "SWFu"},
{"IBM", "SUJN"},
{"Ibn", "SWJu"},
{"ICC", "SUND"},
{"ice", "aWNl"},
{"icy", "aWN5"},
{"I'd", "SSdk"},
{"Ida", "SWRh"},
{"i.e", "aS5l"},
{"iii", "aWlp"},
{"Ike", "SWtl"},
{"ill", "aWxs"},
{"I'm", "SSdt"},
{"imp", "aW1w"},
{"Inc", "SW5j"},
{"ink", "aW5r"},
{"inn", "aW5u"},
{"ion", "aW9u"},
{"Ira", "SXJh"},
{"ire", "aXJl"},
{"irk", "aXJr"},
{"IRS", "SVJT"},
{"i's", "aSdz"},
{"Ito", "SXRv"},
{"ITT", "SVRU"},
{"ivy", "aXZ5"},
{"jab", "amFi"},
{"jag", "amFn"},
{"jam", "amFt"},
{"Jan", "SmFu"},
{"jar", "amFy"},
{"jaw", "amF3"},
{"jay", "amF5"},
{"Jed", "SmVk"},
{"jet", "amV0"},
{"Jew", "SmV3"},
{"jig", "amln"},
{"Jim", "Smlt"},
{"job", "am9i"},
{"Joe", "Sm9l"},
{"jog", "am9n"},
{"Jon", "Sm9u"},
{"jot", "am90"},
{"joy", "am95"},
{"j's", "aidz"},
{"jug", "anVn"},
{"jut", "anV0"},
{"Kay", "S2F5"},
{"keg", "a2Vn"},
{"ken", "a2Vu"},
{"key", "a2V5"},
{"kid", "a2lk"},
{"Kim", "S2lt"},
{"kin", "a2lu"},
{"kit", "a2l0"},
{"k's", "aydz"},
{"lab", "bGFi"},
{"lac", "bGFj"},
{"lad", "bGFk"},
{"lag", "bGFn"},
{"lam", "bGFt"},
{"Lao", "TGFv"},
{"lap", "bGFw"},
{"law", "bGF3"},
{"lax", "bGF4"},
{"lay", "bGF5"},
{"lea", "bGVh"},
{"led", "bGVk"},
{"lee", "bGVl"},
{"leg", "bGVn"},
{"Len", "TGVu"},
{"Leo", "TGVv"},
{"let", "bGV0"},
{"Lev", "TGV2"},
{"Lew", "TGV3"},
{"lew", "bGV3"},
{"lid", "bGlk"},
{"lie", "bGll"},
{"lim", "bGlt"},
{"Lin", "TGlu"},
{"lip", "bGlw"},
{"lit", "bGl0"},
{"Liz", "TGl6"},
{"lob", "bG9i"},
{"log", "bG9n"},
{"lop", "bG9w"},
{"Los", "TG9z"},
{"lot", "bG90"},
{"Lou", "TG91"},
{"low", "bG93"},
{"loy", "bG95"},
{"l's", "bCdz"},
{"LSI", "TFNJ"},
{"Ltd", "THRk"},
{"LTV", "TFRW"},
{"lug", "bHVn"},
{"lux", "bHV4"},
{"lye", "bHll"},
{"Mac", "TWFj"},
{"mad", "bWFk"},
{"Mae", "TWFl"},
{"man", "bWFu"},
{"Mao", "TWFv"},
{"map", "bWFw"},
{"mar", "bWFy"},
{"mat", "bWF0"},
{"maw", "bWF3"},
{"Max", "TWF4"},
{"max", "bWF4"},
{"may", "bWF5"},
{"MBA", "TUJB"},
{"Meg", "TWVn"},
{"Mel", "TWVs"},
{"men", "bWVu"},
{"met", "bWV0"},
{"mew", "bWV3"},
{"mid", "bWlk"},
{"mig", "bWln"},
{"min", "bWlu"},
{"MIT", "TUlU"},
{"mix", "bWl4"},
{"mob", "bW9i"},
{"Moe", "TW9l"},
{"moo", "bW9v"},
{"mop", "bW9w"},
{"mot", "bW90"},
{"mow", "bW93"},
{"MPH", "TVBI"},
{"Mrs", "TXJz"},
{"m's", "bSdz"},
{"mud", "bXVk"},
{"mug", "bXVn"},
{"mum", "bXVt"},
{"nab", "bmFi"},
{"nag", "bmFn"},
{"Nan", "TmFu"},
{"nap", "bmFw"},
{"Nat", "TmF0"},
{"nay", "bmF5"},
{"NBC", "TkJD"},
{"NBS", "TkJT"},
{"NCO", "TkNP"},
{"NCR", "TkNS"},
{"Ned", "TmVk"},
{"nee", "bmVl"},
{"net", "bmV0"},
{"new", "bmV3"},
{"nib", "bmli"},
{"NIH", "TklI"},
{"nil", "bmls"},
{"nip", "bmlw"},
{"nit", "bml0"},
{"NNE", "Tk5F"},
{"NNW", "Tk5X"},
{"nob", "bm9i"},
{"nod", "bm9k"},
{"non", "bm9u"},
{"nor", "bm9y"},
{"not", "bm90"},
{"Nov", "Tm92"},
{"now", "bm93"},
{"NRC", "TlJD"},
{"n's", "bidz"},
{"NSF", "TlNG"},
{"nun", "bnVu"},
{"nut", "bnV0"},
{"NYC", "TllD"},
{"NYU", "TllV"},
{"oaf", "b2Fm"},
{"oak", "b2Fr"},
{"oar", "b2Fy"},
{"oat", "b2F0"},
{"Oct", "T2N0"},
{"odd", "b2Rk"},
{"ode", "b2Rl"},
{"off", "b2Zm"},
{"oft", "b2Z0"},
{"ohm", "b2ht"},
{"oil", "b2ls"},
{"old", "b2xk"},
{"one", "b25l"},
{"opt", "b3B0"},
{"orb", "b3Ji"},
{"ore", "b3Jl"},
{"Orr", "T3Jy"},
{"o's", "bydz"},
{"Ott", "T3R0"},
{"our", "b3Vy"},
{"out", "b3V0"},
{"ova", "b3Zh"},
{"owe", "b3dl"},
{"owl", "b3ds"},
{"own", "b3du"},
{"pad", "cGFk"},
{"pal", "cGFs"},
{"Pam", "UGFt"},
{"pan", "cGFu"},
{"pap", "cGFw"},
{"par", "cGFy"},
{"pat", "cGF0"},
{"paw", "cGF3"},
{"pax", "cGF4"},
{"pay", "cGF5"},
{"Paz", "UGF6"},
{"PBS", "UEJT"},
{"PDP", "UERQ"},
{"pea", "cGVh"},
{"pee", "cGVl"},
{"peg", "cGVn"},
{"pen", "cGVu"},
{"pep", "cGVw"},
{"per", "cGVy"},
{"pet", "cGV0"},
{"pew", "cGV3"},
{"PhD", "UGhE"},
{"phi", "cGhp"},
{"pie", "cGll"},
{"pig", "cGln"},
{"pin", "cGlu"},
{"pip", "cGlw"},
{"pit", "cGl0"},
{"ply", "cGx5"},
{"pod", "cG9k"},
{"Poe", "UG9l"},
{"poi", "cG9p"},
{"pol", "cG9s"},
{"pop", "cG9w"},
{"pot", "cG90"},
{"pow", "cG93"},
{"ppm", "cHBt"},
{"pro", "cHJv"},
{"pry", "cHJ5"},
{"p's", "cCdz"},
{"psi", "cHNp"},
{"PTA", "UFRB"},
{"pub", "cHVi"},
{"PUC", "UFVD"},
{"pug", "cHVn"},
{"pun", "cHVu"},
{"pup", "cHVw"},
{"pus", "cHVz"},
{"put", "cHV0"},
{"PVC", "UFZD"},
{"QED", "UUVE"},
{"q's", "cSdz"},
{"qua", "cXVh"},
{"quo", "cXVv"},
{"Rae", "UmFl"},
{"rag", "cmFn"},
{"raj", "cmFq"},
{"ram", "cmFt"},
{"ran", "cmFu"},
{"rap", "cmFw"},
{"rat", "cmF0"},
{"raw", "cmF3"},
{"ray", "cmF5"},
{"RCA", "UkNB"},
{"R&D", "UiZE"},
{"reb", "cmVi"},
{"red", "cmVk"},
{"rep", "cmVw"},
{"ret", "cmV0"},
{"rev", "cmV2"},
{"Rex", "UmV4"},
{"rho", "cmhv"},
{"rib", "cmli"},
{"rid", "cmlk"},
{"rig", "cmln"},
{"rim", "cmlt"},
{"Rio", "Umlv"},
{"rip", "cmlw"},
{"RNA", "Uk5B"},
{"rob", "cm9i"},
{"rod", "cm9k"},
{"roe", "cm9l"},
{"Ron", "Um9u"},
{"rot", "cm90"},
{"row", "cm93"},
{"Roy", "Um95"},
{"RPM", "UlBN"},
{"r's", "cidz"},
{"rub", "cnVi"},
{"rue", "cnVl"},
{"rug", "cnVn"},
{"rum", "cnVt"},
{"run", "cnVu"},
{"rut", "cnV0"},
{"rye", "cnll"},
{"sac", "c2Fj"},
{"sad", "c2Fk"},
{"sag", "c2Fn"},
{"Sal", "U2Fs"},
{"Sam", "U2Ft"},
{"San", "U2Fu"},
{"Sao", "U2Fv"},
{"sap", "c2Fw"},
{"sat", "c2F0"},
{"saw", "c2F3"},
{"sax", "c2F4"},
{"say", "c2F5"},
{"Sci", "U2Np"},
{"SCM", "U0NN"},
{"sea", "c2Vh"},
{"sec", "c2Vj"},
{"see", "c2Vl"},
{"sen", "c2Vu"},
{"seq", "c2Vx"},
{"set", "c2V0"},
{"sew", "c2V3"},
{"sex", "c2V4"},
{"she", "c2hl"},
{"Shu", "U2h1"},
{"shy", "c2h5"},
{"sib", "c2li"},
{"sic", "c2lj"},
{"sin", "c2lu"},
{"sip", "c2lw"},
{"sir", "c2ly"},
{"sis", "c2lz"},
{"sit", "c2l0"},
{"six", "c2l4"},
{"ski", "c2tp"},
{"sky", "c2t5"},
{"sly", "c2x5"},
{"sob", "c29i"},
{"Soc", "U29j"},
{"sod", "c29k"},
{"Sol", "U29s"},
{"son", "c29u"},
{"sop", "c29w"},
{"sou", "c291"},
{"sow", "c293"},
{"soy", "c295"},
{"spa", "c3Bh"},
{"spy", "c3B5"},
{"Sri", "U3Jp"},
{"s's", "cydz"},
{"SSE", "U1NF"},
{"SST", "U1NU"},
{"SSW", "U1NX"},
{"Stu", "U3R1"},
{"sub", "c3Vi"},
{"sud", "c3Vk"},
{"sue", "c3Vl"},
{"sum", "c3Vt"},
{"sun", "c3Vu"},
{"sup", "c3Vw"},
{"Sus", "U3Vz"},
{"tab", "dGFi"},
{"tad", "dGFk"},
{"tag", "dGFn"},
{"tam", "dGFt"},
{"tan", "dGFu"},
{"tao", "dGFv"},
{"tap", "dGFw"},
{"tar", "dGFy"},
{"tat", "dGF0"},
{"tau", "dGF1"},
{"tax", "dGF4"},
{"tea", "dGVh"},
{"Ted", "VGVk"},
{"ted", "dGVk"},
{"tee", "dGVl"},
{"Tel", "VGVs"},
{"ten", "dGVu"},
{"the", "dGhl"},
{"thy", "dGh5"},
{"tic", "dGlj"},
{"tid", "dGlk"},
{"tie", "dGll"},
{"til", "dGls"},
{"Tim", "VGlt"},
{"tin", "dGlu"},
{"tip", "dGlw"},
{"tit", "dGl0"},
{"TNT", "VE5U"},
{"toe", "dG9l"},
{"tog", "dG9n"},
{"Tom", "VG9t"},
{"ton", "dG9u"},
{"too", "dG9v"},
{"top", "dG9w"},
{"tor", "dG9y"},
{"tot", "dG90"},
{"tow", "dG93"},
{"toy", "dG95"},
{"TRW", "VFJX"},
{"try", "dHJ5"},
{"t's", "dCdz"},
{"TTL", "VFRM"},
{"TTY", "VFRZ"},
{"tub", "dHVi"},
{"tug", "dHVn"},
{"tum", "dHVt"},
{"tun", "dHVu"},
{"TVA", "VFZB"},
{"TWA", "VFdB"},
{"two", "dHdv"},
{"TWX", "VFdY"},
{"ugh", "dWdo"},
{"UHF", "VUhG"},
{"Uri", "VXJp"},
{"urn", "dXJu"},
{"U.S", "VS5T"},
{"u's", "dSdz"},
{"USA", "VVNB"},
{"USC", "VVND"},
{"use", "dXNl"},
{"USN", "VVNO"},
{"van", "dmFu"},
{"vat", "dmF0"},
{"vee", "dmVl"},
{"vet", "dmV0"},
{"vex", "dmV4"},
{"VHF", "VkhG"},
{"via", "dmlh"},
{"vie", "dmll"},
{"vii", "dmlp"},
{"vis", "dmlz"},
{"viz", "dml6"},
{"von", "dm9u"},
{"vow", "dm93"},
{"v's", "didz"},
{"WAC", "V0FD"},
{"wad", "d2Fk"},
{"wag", "d2Fn"},
{"wah", "d2Fo"},
{"wan", "d2Fu"},
{"war", "d2Fy"},
{"was", "d2Fz"},
{"wax", "d2F4"},
{"way", "d2F5"},
{"web", "d2Vi"},
{"wed", "d2Vk"},
{"wee", "d2Vl"},
{"Wei", "V2Vp"},
{"wet", "d2V0"},
{"who", "d2hv"},
{"why", "d2h5"},
{"wig", "d2ln"},
{"win", "d2lu"},
{"wit", "d2l0"},
{"woe", "d29l"},
{"wok", "d29r"},
{"won", "d29u"},
{"woo", "d29v"},
{"wop", "d29w"},
{"wow", "d293"},
{"wry", "d3J5"},
{"w's", "dydz"},
{"x's", "eCdz"},
{"yah", "eWFo"},
{"yak", "eWFr"},
{"yam", "eWFt"},
{"yap", "eWFw"},
{"yaw", "eWF3"},
{"yea", "eWVh"},
{"yen", "eWVu"},
{"yet", "eWV0"},
{"yin", "eWlu"},
{"yip", "eWlw"},
{"yon", "eW9u"},
{"you", "eW91"},
{"yow", "eW93"},
{"y's", "eSdz"},
{"yuh", "eXVo"},
{"zag", "emFn"},
{"Zan", "WmFu"},
{"zap", "emFw"},
{"Zen", "WmVu"},
{"zig", "emln"},
{"zip", "emlw"},
{"Zoe", "Wm9l"},
{"zoo", "em9v"},
{"z's", "eidz"},
/* the false rumors file */
{"\"So when I die, the first thing I will see in heaven is a score list?\"",
"IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpc"
"yBhIHNjb3JlIGxpc3Q/Ig=="},
{"1st Law of Hacking: leaving is much more difficult than entering.",
"MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhb"
"iBlbnRlcmluZy4="},
{"2nd Law of Hacking: first in, first out.",
"Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg=="},
{"3rd Law of Hacking: the last blow counts most.",
"M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg=="},
{"4th Law of Hacking: you will find the exit at the entrance.",
"NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyY"
"W5jZS4="},
{"A chameleon imitating a mail daemon often delivers scrolls of fire.",
"QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb"
"2xscyBvZiBmaXJlLg=="},
{"A cockatrice corpse is guaranteed to be untainted!",
"QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE="},
{"A dead cockatrice is just a dead lizard.",
"QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg=="},
{"A dragon is just a snake that ate a scroll of fire.",
"QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu"},
{"A fading corridor enlightens your insight.",
"QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu"},
{"A glowing potion is too hot to drink.",
"QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg=="},
{"A good amulet may protect you against guards.",
"QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu"},
{"A lizard corpse is a good thing to turn undead.",
"QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4="},
{"A long worm can be defined recursively. So how should you attack it?",
"QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQge"
"W91IGF0dGFjayBpdD8="},
{"A monstrous mind is a toy forever.",
"QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg=="},
{"A nymph will be very pleased if you call her by her real name: Lorelei.",
"QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlY"
"WwgbmFtZTogTG9yZWxlaS4="},
{"A ring of dungeon master control is a great find.",
"QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg=="},
{"A ring of extra ring finger is useless if not enchanted.",
"QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZ"
"C4="},
{"A rope may form a trail in a maze.",
"QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg=="},
{"A staff may recharge if you drop it for awhile.",
"QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4="},
{"A visit to the Zoo is very educational; you meet interesting animals.",
"QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZ"
"XN0aW5nIGFuaW1hbHMu"},
{"A wand of deaf is a more dangerous weapon than a wand of sheep.",
"QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb"
"2Ygc2hlZXAu"},
{"A wand of vibration might bring the whole cave crashing about your ears.",
"QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZ"
"yBhYm91dCB5b3VyIGVhcnMu"},
{"A winner never quits. A quitter never wins.",
"QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg=="},
{"A wish? Okay, make me a fortune cookie!",
"QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh"},
{"Afraid of mimics? Try to wear a ring of true seeing.",
"QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg="
"="},
{"All monsters are created evil, but some are more evil than others.",
"QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgd"
"GhhbiBvdGhlcnMu"},
{"Always attack a floating eye from behind!",
"QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE="},
{"An elven cloak is always the height of fashion.",
"QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4="},
{"Any small object that is accidentally dropped will hide under a larger "
"object.",
"QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZ"
"SB1bmRlciBhIGxhcmdlciBvYmplY3Qu"},
{"Balrogs do not appear above level 20.",
"QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg=="},
{"Banana peels work especially well against Keystone Kops.",
"QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wc"
"y4="},
{"Be careful when eating bananas. Monsters might slip on the peels.",
"QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uI"
"HRoZSBwZWVscy4="},
{"Better leave the dungeon; otherwise you might get hurt badly.",
"QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0I"
"GJhZGx5Lg=="},
{"Beware of the potion of nitroglycerin -- it's not for the weak of heart.",
"QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3Igd"
"GhlIHdlYWsgb2YgaGVhcnQu"},
{"Beware: there's always a chance that your wand explodes as you try to "
"zap it!",
"QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2Rlc"
"yBhcyB5b3UgdHJ5IHRvIHphcCBpdCE="},
{"Beyond the 23rd level lies a happy retirement in a room of your own.",
"QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vb"
"SBvZiB5b3VyIG93bi4="},
{"Changing your suit without dropping your sword? You must be kidding!",
"Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c"
"3QgYmUga2lkZGluZyE="},
{"Cockatrices might turn themselves to stone faced with a mirror.",
"Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggY"
"SBtaXJyb3Iu"},
{"Consumption of home-made food is strictly forbidden in this dungeon.",
"Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluI"
"HRoaXMgZHVuZ2Vvbi4="},
{"Dark room? Your chance to develop your photographs!",
"RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh"},
{"Dark rooms are not *completely* dark: just wait and let your eyes "
"adjust...",
"RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxld"
"CB5b3VyIGV5ZXMgYWRqdXN0Li4u"},
{"David London sez, \"Hey guys, *WIELD* a lizard corpse against a "
"cockatrice!\"",
"RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ"
"2FpbnN0IGEgY29ja2F0cmljZSEi"},
{"Death is just life's way of telling you you've been fired.",
"RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpc"
"mVkLg=="},
{"Demi-gods don't need any help from the gods.",
"RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4="},
{"Demons *HATE* Priests and Priestesses.",
"RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4="},
{"Didn't you forget to pay?", "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw=="},
{"Didn't your mother tell you not to eat food off the floor?",
"RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb"
"29yPw=="},
{"Direct a direct hit on your direct opponent, directing in the right "
"direction.",
"RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nI"
"GluIHRoZSByaWdodCBkaXJlY3Rpb24u"},
{"Do you want to make more money? Sure, we all do! Join the Fort Ludios "
"guard!",
"RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gd"
"GhlIEZvcnQgTHVkaW9zIGd1YXJkIQ=="},
{"Don't eat too much: you might start hiccoughing!",
"RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch"},
{"Don't play hack at your work; your boss might hit you!",
"RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3U"
"h"},
{"Don't tell a soul you found a secret door, otherwise it isn't a secret "
"anymore.",
"RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpd"
"CBpc24ndCBhIHNlY3JldCBhbnltb3JlLg=="},
{"Drinking potions of booze may land you in jail if you are under 21.",
"RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgY"
"XJlIHVuZGVyIDIxLg=="},
{"Drop your vanity and get rid of your jewels! Pickpockets about!",
"RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tld"
"HMgYWJvdXQh"},
{"Eat 10 cloves of garlic and keep all humans at a two-square distance.",
"RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zc"
"XVhcmUgZGlzdGFuY2Uu"},
{"Eels hide under mud. Use a unicorn to clear the water and make them "
"visible.",
"RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgY"
"W5kIG1ha2UgdGhlbSB2aXNpYmxlLg=="},
{"Engrave your wishes with a wand of wishing.",
"RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg=="},
{"Eventually you will come to admire the swift elegance of a retreating "
"nymph.",
"RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb"
"2YgYSByZXRyZWF0aW5nIG55bXBoLg=="},
{"Ever heard hissing outside? I *knew* you hadn't!",
"RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh"},
{"Ever lifted a dragon corpse?",
"RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw=="},
{"Ever seen a leocrotta dancing the tengu?",
"RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw=="},
{"Ever seen your weapon glow plaid?",
"RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/"},
{"Ever tamed a shopkeeper?", "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/"},
{"Ever tried digging through a Vault Guard?",
"RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8="},
{"Ever tried enchanting a rope?",
"RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8="},
{"Floating eyes can't stand Hawaiian shirts.",
"RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu"},
{"For any remedy there is a misery.",
"Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku"},
{"Giant bats turn into giant vampires.",
"R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu"},
{"Good day for overcoming obstacles. Try a steeplechase.",
"R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2U"
"u"},
{"Half Moon tonight. (At least it's better than no Moon at all.)",
"SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gY"
"XQgYWxsLik="},
{"Help! I'm being held prisoner in a fortune cookie factory!",
"SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b"
"3J5IQ=="},
{"Housecats have nine lives, kittens only one.",
"SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4="},
{"How long can you tread water?",
"SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8="},
{"Hungry? There is an abundance of food on the next level.",
"SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlb"
"C4="},
{"I guess you've never hit a mail daemon with the Amulet of Yendor...",
"SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0I"
"G9mIFllbmRvci4uLg=="},
{"If you are the shopkeeper, you can take things for free.",
"SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZ"
"S4="},
{"If you can't learn to do it well, learn to enjoy doing it badly.",
"SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nI"
"Gl0IGJhZGx5Lg=="},
{"If you thought the Wizard was bad, just wait till you meet the Warlord!",
"SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3Ugb"
"WVldCB0aGUgV2FybG9yZCE="},
{"If you turn blind, don't expect your dog to be turned into a seeing-eye "
"dog.",
"SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQga"
"W50byBhIHNlZWluZy1leWUgZG9nLg=="},
{"If you want to feel great, you must eat something real big.",
"SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsI"
"GJpZy4="},
{"If you want to float, you'd better eat a floating eye.",
"SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWU"
"u"},
{"If your ghost kills a player, it increases your score.",
"SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmU"
"u"},
{"Increase mindpower: Tame your own ghost!",
"SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ=="},
{"It furthers one to see the great man.",
"SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg=="},
{"It's easy to overlook a monster in a wood.",
"SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu"},
{"Just below any trapdoor there may be another one. Just keep falling!",
"SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0I"
"GtlZXAgZmFsbGluZyE="},
{"Katanas are very sharp; watch you don't cut yourself.",
"S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4"
"="},
{"Keep a clear mind: quaff clear potions.",
"S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu"},
{"Kicking the terminal doesn't hurt the monsters.",
"S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4="},
{"Killer bees keep appearing till you kill their queen.",
"S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4"
"="},
{"Killer bunnies can be tamed with carrots only.",
"S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg=="},
{"Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!",
"TGF0ZXN0IG5ld3M/"
"IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh"},
{"Learn how to spell. Play NetHack!",
"TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh"},
{"Leprechauns hide their gold in a secret room.",
"TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u"},
{"Let your fingers do the walking on the yulkjhnb keys.",
"TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4"
"="},
{"Let's face it: this time you're not going to win.",
"TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg=="},
{"Let's have a party, drink a lot of booze.",
"TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4="},
{"Liquor sellers do not drink; they hate to see you twice.",
"TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZ"
"S4="},
{"Lunar eclipse tonight. May as well quit now!",
"THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE="},
{"Meeting your own ghost decreases your luck considerably!",
"TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJse"
"SE="},
{"Money to invest? Take it to the local branch of the Magic Memory Vault!",
"TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ"
"2ljIE1lbW9yeSBWYXVsdCE="},
{"Monsters come from nowhere to hit you everywhere.",
"TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg=="},
{"Monsters sleep because you are boring, not because they ever get tired.",
"TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhle"
"SBldmVyIGdldCB0aXJlZC4="},
{"Most monsters prefer minced meat. That's why they are hitting you!",
"TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUga"
"Gl0dGluZyB5b3Uh"},
{"Most of the bugs in NetHack are on the floor.",
"TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu"},
{"Much ado Nothing Happens.", "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg=="},
{"Multi-player NetHack is a myth.",
"TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg=="},
{"NetHack is addictive. Too late, you're already hooked.",
"TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQ"
"u"},
{"Never ask a shopkeeper for a price list.",
"TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg=="},
{"Never burn a tree, unless you like getting whacked with a +5 shovel.",
"TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0a"
"CBhICs1IHNob3ZlbC4="},
{"Never eat with glowing hands!",
"TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE="},
{"Never mind the monsters hitting you: they just replace the charwomen.",
"TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlI"
"HRoZSBjaGFyd29tZW4u"},
{"Never play leapfrog with a unicorn.",
"TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4="},
{"Never step on a cursed engraving.",
"TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu"},
{"Never swim with a camera: there's nothing to take pictures of.",
"TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0d"
"XJlcyBvZi4="},
{"Never teach your pet rust monster to fetch.",
"TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg=="},
{"Never trust a random generator in magic fields.",
"TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4="},
{"Never use a wand of death.", "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4="},
{"No level contains two shops. The maze is no level. So...",
"Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uL"
"i4="},
{"No part of this fortune may be reproduced, stored in a retrieval system, "
"...",
"Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhI"
"HJldHJpZXZhbCBzeXN0ZW0sIC4uLg=="},
{"Not all rumors are as misleading as this one.",
"Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu"},
{"Nymphs and nurses like beautiful rings.",
"TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu"},
{"Nymphs are blondes. Are you a gentleman?",
"TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw=="},
{"Offering a unicorn a worthless piece of glass might prove to be fatal!",
"T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb"
"3ZlIHRvIGJlIGZhdGFsIQ=="},
{"Old hackers never die: young ones do.",
"T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg=="},
{"One has to leave shops before closing time.",
"T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg=="},
{"One homunculus a day keeps the doctor away.",
"T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg=="},
{"One level further down somebody is getting killed, right now.",
"T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlna"
"HQgbm93Lg=="},
{"Only a wizard can use a magic whistle.",
"T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4="},
{"Only adventurers of evil alignment think of killing their dog.",
"T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZ"
"WlyIGRvZy4="},
{"Only chaotic evils kill sleeping monsters.",
"T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu"},
{"Only real trappers escape traps.",
"T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4="},
{"Only real wizards can write scrolls.",
"T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu"},
{"Operation OVERKILL has started now.",
"T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4="},
{"PLEASE ignore previous rumor.",
"UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4="},
{"Polymorph into an ettin; meet your opponents face to face to face.",
"UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmY"
"WNlIHRvIGZhY2Uu"},
{"Praying will frighten demons.",
"UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4="},
{"Row (3x) that boat gently down the stream, Charon (4x), death is but a "
"dream.",
"Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpL"
"CBkZWF0aCBpcyBidXQgYSBkcmVhbS4="},
{"Running is good for your legs.",
"UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu"},
{"Screw up your courage! You've screwed up everything else.",
"U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc"
"2Uu"},
{"Seepage? Leaky pipes? Rising damp? Summon the plumber!",
"U2VlcGFnZT8gTGVha3kgcGlwZXM/"
"IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh"},
{"Segmentation fault (core dumped).",
"U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku"},
{"Shopkeepers sometimes die from old age.",
"U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu"},
{"Some mazes (especially small ones) have no solutions, says man 6 maze.",
"U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc"
"2F5cyBtYW4gNiBtYXplLg=="},
{"Some questions the Sphynx asks just *don't* have any answers.",
"U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhb"
"nN3ZXJzLg=="},
{"Sometimes \"mu\" is the answer.",
"U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4="},
{"Sorry, no fortune this time. Better luck next cookie!",
"U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE"
"="},
{"Spare your scrolls of make-edible until it's really necessary!",
"U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY"
"2Vzc2FyeSE="},
{"Suddenly, the dungeon will collapse...",
"U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4="},
{"Taming a mail daemon may cause a system security violation.",
"VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhd"
"Glvbi4="},
{"The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk "
"nyuk.",
"VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ"
"2VvbiBhbnltb3JlLCBueXVrIG55dWsu"},
{"The leprechauns hide their treasure in a small hidden room.",
"VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gc"
"m9vbS4="},
{"The longer the wand the better.",
"VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg=="},
{"The magic word is \"XYZZY\".", "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4="},
{"The meek shall inherit your bones files.",
"VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg=="},
{"The mines are dark and deep, and I have levels to go before I sleep.",
"VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZ"
"WZvcmUgSSBzbGVlcC4="},
{"The use of dynamite is dangerous.",
"VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu"},
{"There are no worms in the UNIX version.",
"VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u"},
{"There is a trap on this level!",
"VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh"},
{"They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law "
"firm.",
"VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgS"
"nVpYmxleCBpcyBubyBsYXcgZmlybS4="},
{"They say that Geryon has an evil twin, beware!",
"VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ=="},
{"They say that Medusa would make a terrible pet.",
"VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4="},
{"They say that NetHack bugs are Seldon planned.",
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg=="},
{"They say that NetHack comes in 256 flavors.",
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg=="},
{"They say that NetHack is just a computer game.",
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg=="},
{"They say that NetHack is more than just a computer game.",
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZ"
"S4="},
{"They say that NetHack is never what it used to be.",
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4="},
{"They say that a baby dragon is too small to hurt or help you.",
"VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlb"
"HAgeW91Lg=="},
{"They say that a black pudding is simply a brown pudding gone bad.",
"VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZ"
"yBnb25lIGJhZC4="},
{"They say that a black sheep has 3 bags full of wool.",
"VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg="
"="},
{"They say that a blank scroll is like a blank check.",
"VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su"},
{"They say that a cat named Morris has nine lives.",
"VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu"},
{"They say that a desperate shopper might pay any price in a shop.",
"VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2Uga"
"W4gYSBzaG9wLg=="},
{"They say that a diamond dog is everybody's best friend.",
"VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kL"
"g=="},
{"They say that a dwarf lord can carry a pick-axe because his armor is "
"light.",
"VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZ"
"SBoaXMgYXJtb3IgaXMgbGlnaHQu"},
{"They say that a floating eye can defeat Medusa.",
"VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4="},
{"They say that a fortune only has 1 line and you can't read between it.",
"VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3Qgc"
"mVhZCBiZXR3ZWVuIGl0Lg=="},
{"They say that a fortune only has 1 line, but you can read between it.",
"VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZ"
"WFkIGJldHdlZW4gaXQu"},
{"They say that a fountain looks nothing like a regularly erupting geyser.",
"VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJse"
"SBlcnVwdGluZyBnZXlzZXIu"},
{"They say that a gold doubloon is worth more than its weight in gold.",
"VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3Z"
"WlnaHQgaW4gZ29sZC4="},
{"They say that a grid bug won't pay a shopkeeper for zapping you in a "
"shop.",
"VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphc"
"HBpbmcgeW91IGluIGEgc2hvcC4="},
{"They say that a gypsy could tell your fortune for a price.",
"VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHBya"
"WNlLg=="},
{"They say that a hacker named Alice once level teleported by using a "
"mirror.",
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0Z"
"WQgYnkgdXNpbmcgYSBtaXJyb3Iu"},
{"They say that a hacker named David once slew a giant with a sling and a "
"rock.",
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3a"
"XRoIGEgc2xpbmcgYW5kIGEgcm9jay4="},
{"They say that a hacker named Dorothy once rode a fog cloud to Oz.",
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjb"
"G91ZCB0byBPei4="},
{"They say that a hacker named Mary once lost a white sheep in the mazes.",
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZ"
"WVwIGluIHRoZSBtYXplcy4="},
{"They say that a helm of brilliance is not to be taken lightly.",
"VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gb"
"GlnaHRseS4="},
{"They say that a hot dog and a hell hound are the same thing.",
"VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgd"
"Ghpbmcu"},
{"They say that a lamp named Aladdin's Lamp contains a djinni with 3 "
"wishes.",
"VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBka"
"mlubmkgd2l0aCAzIHdpc2hlcy4="},
{"They say that a large dog named Lassie will lead you to the amulet.",
"VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0b"
"yB0aGUgYW11bGV0Lg=="},
{"They say that a long sword is not a light sword.",
"VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu"},
{"They say that a manes won't mince words with you.",
"VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg=="},
{"They say that a mind is a terrible thing to waste.",
"VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4="},
{"They say that a plain nymph will only wear a wire ring in one ear.",
"VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nI"
"GluIG9uZSBlYXIu"},
{"They say that a plumed hat could be a previously used crested helmet.",
"VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY"
"3Jlc3RlZCBoZWxtZXQu"},
{"They say that a potion of oil is difficult to grasp.",
"VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg="
"="},
{"They say that a potion of yogurt is a cancelled potion of sickness.",
"VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uI"
"G9mIHNpY2tuZXNzLg=="},
{"They say that a purple worm is not a baby purple dragon.",
"VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvb"
"i4="},
{"They say that a quivering blob tastes different than a gelatinous cube.",
"VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhI"
"GdlbGF0aW5vdXMgY3ViZS4="},
{"They say that a runed broadsword named Stormbringer attracts vortices.",
"VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0d"
"HJhY3RzIHZvcnRpY2VzLg=="},
{"They say that a scroll of summoning has other names.",
"VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg="
"="},
{"They say that a shaman can bestow blessings but usually doesn't.",
"VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxse"
"SBkb2Vzbid0Lg=="},
{"They say that a shaman will bless you for an eye of newt and wing of "
"bat.",
"VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld"
"3QgYW5kIHdpbmcgb2YgYmF0Lg=="},
{"They say that a shimmering gold shield is not a polished silver shield.",
"VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZ"
"WQgc2lsdmVyIHNoaWVsZC4="},
{"They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)",
"VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrb"
"m93IHdoYXQgdGhhdCBpcz8p"},
{"They say that a spotted dragon is the ultimate shape changer.",
"VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBja"
"GFuZ2VyLg=="},
{"They say that a stethoscope is no good if you can only hear your "
"heartbeat.",
"VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5I"
"GhlYXIgeW91ciBoZWFydGJlYXQu"},
{"They say that a succubus named Suzy will sometimes warn you of danger.",
"VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2Fyb"
"iB5b3Ugb2YgZGFuZ2VyLg=="},
{"They say that a wand of cancellation is not like a wand of polymorph.",
"VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZ"
"CBvZiBwb2x5bW9ycGgu"},
{"They say that a wood golem named Pinocchio would be easy to control.",
"VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc"
"3kgdG8gY29udHJvbC4="},
{"They say that after killing a dragon it's time for a change of scenery.",
"VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBja"
"GFuZ2Ugb2Ygc2NlbmVyeS4="},
{"They say that an amulet of strangulation is worse than ring around the "
"collar.",
"VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuI"
"HJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu"},
{"They say that an attic is the best place to hide your toys.",
"VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgd"
"G95cy4="},
{"They say that an axe named Cleaver once belonged to a hacker named "
"Beaver.",
"VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEga"
"GFja2VyIG5hbWVkIEJlYXZlci4="},
{"They say that an eye of newt and a wing of bat are double the trouble.",
"VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91Y"
"mxlIHRoZSB0cm91YmxlLg=="},
{"They say that an incubus named Izzy sometimes makes women feel "
"sensitive.",
"VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvb"
"WVuIGZlZWwgc2Vuc2l0aXZlLg=="},
{"They say that an opulent throne room is rarely a place to wish you'd be "
"in.",
"VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlI"
"HRvIHdpc2ggeW91J2QgYmUgaW4u"},
{"They say that an unlucky hacker once had a nose bleed at an altar and "
"died.",
"VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgY"
"XQgYW4gYWx0YXIgYW5kIGRpZWQu"},
{"They say that and they say this but they never say never, never!",
"VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2Z"
"XIsIG5ldmVyIQ=="},
{"They say that any quantum mechanic knows that speed kills.",
"VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpb"
"GxzLg=="},
{"They say that applying a unicorn horn means you've missed the point.",
"VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc"
"2VkIHRoZSBwb2ludC4="},
{"They say that blue stones are radioactive, beware.",
"VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4="},
{"They say that building a dungeon is a team effort.",
"VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4="},
{"They say that chaotic characters never get a kick out of altars.",
"VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb"
"2YgYWx0YXJzLg=="},
{"They say that collapsing a dungeon often creates a panic.",
"VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFua"
"WMu"},
{"They say that counting your eggs before they hatch shows that you care.",
"VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd"
"3MgdGhhdCB5b3UgY2FyZS4="},
{"They say that dipping a bag of tricks in a fountain won't make it an "
"icebox.",
"VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvb"
"id0IG1ha2UgaXQgYW4gaWNlYm94Lg=="},
{"They say that dipping an eel and brown mold in hot water makes "
"bouillabaisse.",
"VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0Z"
"XIgbWFrZXMgYm91aWxsYWJhaXNzZS4="},
{"They say that donating a doubloon is extremely pious charity.",
"VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBja"
"GFyaXR5Lg=="},
{"They say that eating royal jelly attracts grizzly owlbears.",
"VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZ"
"WFycy4="},
{"They say that eggs, pancakes and juice are just a mundane breakfast.",
"VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kY"
"W5lIGJyZWFrZmFzdC4="},
{"They say that everyone knows why Medusa stands alone in the dark.",
"VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpb"
"iB0aGUgZGFyay4="},
{"They say that everyone wanted rec.games.hack to undergo a name change.",
"VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnb"
"yBhIG5hbWUgY2hhbmdlLg=="},
{"They say that finding a winning strategy is a deliberate move on your "
"part.",
"VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhd"
"GUgbW92ZSBvbiB5b3VyIHBhcnQu"},
{"They say that finding worthless glass is worth something.",
"VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpb"
"mcu"},
{"They say that fortune cookies are food for thought.",
"VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu"},
{"They say that gold is only wasted on a pet dragon.",
"VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4="},
{"They say that good things come to those that wait.",
"VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4="},
{"They say that greased objects will slip out of monsters' hands.",
"VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVyc"
"ycgaGFuZHMu"},
{"They say that if you can't spell then you'll wish you had a spell book.",
"VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3Uga"
"GFkIGEgc3BlbGwgYm9vay4="},
{"They say that if you live by the sword, you'll die by the sword.",
"VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgd"
"GhlIHN3b3JkLg=="},
{"They say that if you play like a monster you'll have a better game.",
"VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhI"
"GJldHRlciBnYW1lLg=="},
{"They say that if you sleep with a demon you might awake with a headache.",
"VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZ"
"SB3aXRoIGEgaGVhZGFjaGUu"},
{"They say that if you step on a crack you could break your mother's back.",
"VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b"
"3VyIG1vdGhlcidzIGJhY2su"},
{"They say that if you're invisible you can still be heard!",
"VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhc"
"mQh"},
{"They say that if you're lucky you can feel the runes on a scroll.",
"VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvb"
"iBhIHNjcm9sbC4="},
{"They say that in the big picture gold is only small change.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoY"
"W5nZS4="},
{"They say that in the dungeon it's not what you know that really matters.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoY"
"XQgcmVhbGx5IG1hdHRlcnMu"},
{"They say that in the dungeon moon rocks are really dilithium crystals.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsa"
"XRoaXVtIGNyeXN0YWxzLg=="},
{"They say that in the dungeon the boorish customer is never right.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZ"
"XZlciByaWdodC4="},
{"They say that in the dungeon you don't need a watch to tell time.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvI"
"HRlbGwgdGltZS4="},
{"They say that in the dungeon you need something old, new, burrowed and "
"blue.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZ"
"XcsIGJ1cnJvd2VkIGFuZCBibHVlLg=="},
{"They say that in the dungeon you should always count your blessings.",
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b"
"3VyIGJsZXNzaW5ncy4="},
{"They say that iron golem plate mail isn't worth wishing for.",
"VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZ"
"yBmb3Iu"},
{"They say that it takes four quarterstaffs to make one staff.",
"VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc"
"3RhZmYu"},
{"They say that it's not over till the fat ladies sing.",
"VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4"
"="},
{"They say that it's not over till the fat lady shouts `Off with its "
"head'.",
"VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT"
"2ZmIHdpdGggaXRzIGhlYWQnLg=="},
{"They say that kicking a heavy statue is really a dumb move.",
"VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgb"
"W92ZS4="},
{"They say that kicking a valuable gem doesn't seem to make sense.",
"VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtY"
"WtlIHNlbnNlLg=="},
{"They say that leprechauns know Latin and you should too.",
"VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvb"
"y4="},
{"They say that minotaurs get lost outside of the mazes.",
"VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXM"
"u"},
{"They say that most trolls are born again.",
"VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4="},
{"They say that naming your cat Garfield will make you more attractive.",
"VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb"
"3JlIGF0dHJhY3RpdmUu"},
{"They say that no one knows everything about everything in the dungeon.",
"VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nI"
"GluIHRoZSBkdW5nZW9uLg=="},
{"They say that no one plays NetHack just for the fun of it.",
"VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mI"
"Gl0Lg=="},
{"They say that no one really subscribes to rec.games.roguelike.nethack.",
"VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ"
"3VlbGlrZS5uZXRoYWNrLg=="},
{"They say that no one will admit to starting a rumor.",
"VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg="
"="},
{"They say that nurses sometimes carry scalpels and never use them.",
"VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlc"
"iB1c2UgdGhlbS4="},
{"They say that once you've met one wizard you've met them all.",
"VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZ"
"W0gYWxsLg=="},
{"They say that one troll is worth 10,000 newts.",
"VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg=="},
{"They say that only David can find the zoo!",
"VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h"},
{"They say that only angels play their harps for their pets.",
"VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZ"
"XRzLg=="},
{"They say that only big spenders carry gold.",
"VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg=="},
{"They say that orc shamans are healthy, wealthy and wise.",
"VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZ"
"S4="},
{"They say that playing NetHack is like walking into a death trap.",
"VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZ"
"WF0aCB0cmFwLg=="},
{"They say that problem breathing is best treated by a proper diet.",
"VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwc"
"m9wZXIgZGlldC4="},
{"They say that quaffing many potions of levitation can give you a "
"headache.",
"VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ"
"2l2ZSB5b3UgYSBoZWFkYWNoZS4="},
{"They say that queen bees get that way by eating royal jelly.",
"VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwga"
"mVsbHku"},
{"They say that reading a scare monster scroll is the same as saying "
"Elbereth.",
"VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhb"
"WUgYXMgc2F5aW5nIEVsYmVyZXRoLg=="},
{"They say that real hackers always are controlled.",
"VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg=="},
{"They say that real hackers never sleep.",
"VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu"},
{"They say that shopkeepers are insured by Croesus himself!",
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlb"
"GYh"},
{"They say that shopkeepers never carry more than 20 gold pieces, at "
"night.",
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZ"
"CBwaWVjZXMsIGF0IG5pZ2h0Lg=="},
{"They say that shopkeepers never sell blessed potions of invisibility.",
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZ"
"iBpbnZpc2liaWxpdHku"},
{"They say that soldiers wear kid gloves and silly helmets.",
"VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ld"
"HMu"},
{"They say that some Kops are on the take.",
"VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg=="},
{"They say that some guards' palms can be greased.",
"VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu"},
{"They say that some monsters may kiss your boots to stop your drum "
"playing.",
"VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3Rvc"
"CB5b3VyIGRydW0gcGxheWluZy4="},
{"They say that sometimes you can be the hit of the party when playing a "
"horn.",
"VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0e"
"SB3aGVuIHBsYXlpbmcgYSBob3JuLg=="},
{"They say that the NetHack gods generally welcome your sacrifices.",
"VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc"
"2FjcmlmaWNlcy4="},
{"They say that the Three Rings are named Vilya, Nenya and Narya.",
"VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhb"
"mQgTmFyeWEu"},
{"They say that the Wizard of Yendor has a death wish.",
"VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg="
"="},
{"They say that the `hair of the dog' is sometimes an effective remedy.",
"VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZ"
"mVjdGl2ZSByZW1lZHku"},
{"They say that the best time to save your game is now before its too "
"late.",
"VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZ"
"WZvcmUgaXRzIHRvbyBsYXRlLg=="},
{"They say that the biggest obstacle in NetHack is your mind.",
"VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgb"
"WluZC4="},
{"They say that the gods are angry when they hit you with objects.",
"VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0a"
"CBvYmplY3RzLg=="},
{"They say that the priesthood are specially favored by the gods.",
"VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgd"
"GhlIGdvZHMu"},
{"They say that the way to make a unicorn happy is to give it what it "
"wants.",
"VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpd"
"mUgaXQgd2hhdCBpdCB3YW50cy4="},
{"They say that there are no black or white stones, only gray.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5I"
"GdyYXku"},
{"They say that there are no skeletons hence there are no skeleton keys.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBub"
"yBza2VsZXRvbiBrZXlzLg=="},
{"They say that there is a clever rogue in every hacker just dying to "
"escape.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIga"
"nVzdCBkeWluZyB0byBlc2NhcGUu"},
{"They say that there is no such thing as free advice.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg="
"="},
{"They say that there is only one way to win at NetHack.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2s"
"u"},
{"They say that there once was a fearsome chaotic samurai named Luk No.",
"VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJha"
"SBuYW1lZCBMdWsgTm8u"},
{"They say that there was a time when cursed holy water wasn't water.",
"VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd"
"2Fzbid0IHdhdGVyLg=="},
{"They say that there's no point in crying over a gray ooze.",
"VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb"
"3plLg=="},
{"They say that there's only hope left after you've opened Pandora's box.",
"VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZ"
"WQgUGFuZG9yYSdzIGJveC4="},
{"They say that trapdoors should always be marked `Caution: Trap Door'.",
"VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb"
"246IFRyYXAgRG9vcicu"},
{"They say that using an amulet of change isn't a difficult operation.",
"VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljd"
"Wx0IG9wZXJhdGlvbi4="},
{"They say that water walking boots are better if you are fast like "
"Hermes.",
"VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZ"
"SBmYXN0IGxpa2UgSGVybWVzLg=="},
{"They say that when you wear a circular amulet you might resemble a "
"troll.",
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdod"
"CByZXNlbWJsZSBhIHRyb2xsLg=="},
{"They say that when you're hungry you can get a pizza in 30 moves or it's "
"free.",
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpb"
"iAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu"},
{"They say that when your god is angry you should try another one.",
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub"
"3RoZXIgb25lLg=="},
{"They say that wielding a unicorn horn takes strength.",
"VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4"
"="},
{"They say that with speed boots you never worry about hit and run "
"accidents.",
"VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoa"
"XQgYW5kIHJ1biBhY2NpZGVudHMu"},
{"They say that you can defeat a killer bee with a unicorn horn.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvc"
"m4gaG9ybi4="},
{"They say that you can only cross the River Styx in Charon's boat.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhc"
"m9uJ3MgYm9hdC4="},
{"They say that you can only kill a lich once and then you'd better be "
"careful.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b"
"3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4="},
{"They say that you can only wish for things you've already had.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlY"
"WR5IGhhZC4="},
{"They say that you can train a cat by talking gently to it.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvI"
"Gl0Lg=="},
{"They say that you can train a dog by talking firmly to it.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvI"
"Gl0Lg=="},
{"They say that you can trust your gold with the king.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg="
"="},
{"They say that you can't wipe your greasy bare hands on a blank scroll.",
"VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uI"
"GEgYmxhbmsgc2Nyb2xsLg=="},
{"They say that you cannot trust scrolls of rumor.",
"VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu"},
{"They say that you could fall head over heels for an energy vortex.",
"VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZ"
"XJneSB2b3J0ZXgu"},
{"They say that you need a key in order to open locked doors.",
"VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb"
"29ycy4="},
{"They say that you need a mirror to notice a mimic in an antique shop.",
"VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhb"
"iBhbnRpcXVlIHNob3Au"},
{"They say that you really can use a pick-axe unless you really can't.",
"VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91I"
"HJlYWxseSBjYW4ndC4="},
{"They say that you should always store your tools in the cellar.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZ"
"SBjZWxsYXIu"},
{"They say that you should be careful while climbing the ladder to "
"success.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlI"
"GxhZGRlciB0byBzdWNjZXNzLg=="},
{"They say that you should call your armor `rustproof'.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4"
"="},
{"They say that you should name your dog Spuds to have a cool pet.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhI"
"GNvb2wgcGV0Lg=="},
{"They say that you should name your weapon after your first monster kill.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBma"
"XJzdCBtb25zdGVyIGtpbGwu"},
{"They say that you should never introduce a rope golem to a succubus.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gd"
"G8gYSBzdWNjdWJ1cy4="},
{"They say that you should never sleep near invisible ring wraiths.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpb"
"mcgd3JhaXRocy4="},
{"They say that you should never try to leave the dungeon with a bag of "
"gems.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2Vvb"
"iB3aXRoIGEgYmFnIG9mIGdlbXMu"},
{"They say that you should remove your armor before sitting on a throne.",
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0a"
"W5nIG9uIGEgdGhyb25lLg=="},
{"This fortune cookie is copy protected.",
"VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4="},
{"This fortune cookie is the property of Fortune Cookies, Inc.",
"VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzL"
"CBJbmMu"},
{"Tired? Try a scroll of charging on yourself.",
"VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4="},
{"To achieve the next higher rating, you need 3 more points.",
"VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pb"
"nRzLg=="},
{"To reach heaven, escape the dungeon while wearing a ring of levitation.",
"VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpb"
"mcgb2YgbGV2aXRhdGlvbi4="},
{"Tourists wear shirts loud enough to wake the dead.",
"VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4="},
{"Try calling your katana Moulinette.",
"VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4="},
{"Ulch! That meat was painted!",
"VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ=="},
{"Unfortunately, this message was left intentionally blank.",
"VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhb"
"msu"},
{"Using a morning star in the evening has no effect.",
"VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4="},
{"Want a hint? Zap a wand of make invisible on your weapon!",
"V2FudCBhIGhpbnQ/"
"IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h"},
{"Want to ascend in a hurry? Apply at Gizmonic Institute.",
"V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlL"
"g=="},
{"Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level "
"35/Dungeon.",
"V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgW"
"WVuZG9yL0xldmVsIDM1L0R1bmdlb24u"},
{"Warning: fortune reading can be hazardous to your health.",
"V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsd"
"Ggu"},
{"We have new ways of detecting treachery...",
"V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u"},
{"Wet towels make great weapons!",
"V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh"},
{"What a pity, you cannot read it!",
"V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE="},
{"When a piercer drops in on you, you will be tempted to hit the ceiling!",
"V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvI"
"GhpdCB0aGUgY2VpbGluZyE="},
{"When in a maze follow the right wall and you will never get lost.",
"V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlc"
"iBnZXQgbG9zdC4="},
{"When you have a key, you don't have to wait for the guard.",
"V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1Y"
"XJkLg=="},
{"Why are you wasting time reading fortunes?",
"V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/"},
{"Wish for a master key and open the Magic Memory Vault!",
"V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQ"
"h"},
{"Wizard expects every monster to do its duty.",
"V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4="},
{"Wow! You could've had a potion of fruit juice!",
"V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ=="},
{"Yet Another Silly Message (YASM).",
"WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku"},
{"You are destined to be misled by a fortune.",
"WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg=="},
{"You can get a genuine Amulet of Yendor by doing the following: --More--",
"WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvb"
"Gxvd2luZzogLS1Nb3JlLS0="},
{"You can protect yourself from black dragons by doing the following: "
"--More--",
"WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0a"
"GUgZm9sbG93aW5nOiAtLU1vcmUtLQ=="},
{"You can't get by the snake.", "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu"},
{"You feel like someone is pulling your leg.",
"WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu"},
{"You have to outwit the Sphynx or pay her.",
"WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4="},
{"You hear the fortune cookie's hissing!",
"WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE="},
{"You may get rich selling letters, but beware of being blackmailed!",
"WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgY"
"mxhY2ttYWlsZWQh"},
{"You offend Shai-Hulud by sheathing your crysknife without having drawn "
"blood.",
"WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob"
"3V0IGhhdmluZyBkcmF3biBibG9vZC4="},
{"You swallowed the fortune!", "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE="},
{"You want to regain strength? Two levels ahead is a guesthouse!",
"WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc"
"3Rob3VzZSE="},
{"You will encounter a tall, dark, and gruesome creature...",
"WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlL"
"i4u"},
{"The End", "VGhlIEVuZA=="}};
/* PL_Base64Encode, random strings */
PRBool test_004(void) {
int i;
char result[4096];
printf(
"Test 004 (PL_Base64Encode, random strings) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 plen = PL_strlen(array[i].plaintext);
PRUint32 clen = ((plen + 2) / 3) * 4;
char* rv = PL_Base64Encode(array[i].plaintext, plen, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].plaintext, array[i].cyphertext, clen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, single characters, malloc */
PRBool test_005(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 005 (PL_Base64Encode, single characters, malloc) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Encode((char*)plain, 1, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)cypher, rv)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, cypher,
rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, double characters, malloc */
PRBool test_006(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 006 (PL_Base64Encode, double characters, malloc) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Encode((char*)plain, 2, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)cypher, rv)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
a, b, c, d, cypher, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, triple characters, malloc */
PRBool test_007(void) {
PRUint32 a, b, c, d, e, f;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 007 (PL_Base64Encode, triple characters, malloc) "
"...");
fflush(stdout);
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
for (e = 0; e < 4; e++) {
cypher[2] = base[d * 4 + e];
for (f = 0; f < 64; f++) {
plain[2] = e * 64 + f;
cypher[3] = base[f];
rv = PL_Base64Encode((char*)plain, 3, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
b, c, d, e, f);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)cypher, rv)) {
printf(
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
"\"%.4s.\"\n",
a, b, c, d, e, f, cypher, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, random strings, malloc */
PRBool test_008(void) {
int i;
printf(
"Test 008 (PL_Base64Encode, random strings, malloc) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 plen = PL_strlen(array[i].plaintext);
PRUint32 clen = ((plen + 2) / 3) * 4;
char* rv = PL_Base64Encode(array[i].plaintext, plen, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].cyphertext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].plaintext, array[i].cyphertext, rv);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, single characters */
PRBool test_009(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 009 (PL_Base64Decode, single characters, equals) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Decode((char*)cypher, 4, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d): return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)plain, result, 1)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
plain, result);
return PR_FALSE;
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, single characters */
PRBool test_010(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 010 (PL_Base64Decode, single characters, no equals) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)0;
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Decode((char*)cypher, 2, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d): return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)plain, result, 1)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
plain, result);
return PR_FALSE;
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, double characters */
PRBool test_011(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 011 (PL_Base64Decode, double characters, equals) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Decode((char*)cypher, 4, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)plain, result, 2)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
a, b, c, d, plain, result);
return PR_FALSE;
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, double characters */
PRBool test_012(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 012 (PL_Base64Decode, double characters, no equals) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)0;
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Decode((char*)cypher, 3, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)plain, result, 2)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
a, b, c, d, cypher, result);
return PR_FALSE;
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, triple characters */
PRBool test_013(void) {
PRUint32 a, b, c, d, e, f;
unsigned char plain[4];
unsigned char cypher[5];
char result[8];
char* rv;
printf(
"Test 013 (PL_Base64Decode, triple characters) "
"...");
fflush(stdout);
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
for (e = 0; e < 4; e++) {
cypher[2] = base[d * 4 + e];
for (f = 0; f < 64; f++) {
plain[2] = e * 64 + f;
cypher[3] = base[f];
rv = PL_Base64Decode((char*)cypher, 4, result);
if (rv != result) {
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
c, d, e, f);
return PR_FALSE;
}
if (0 != PL_strncmp((char*)plain, result, 3)) {
printf(
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
"\"%.3s.\"\n",
a, b, c, d, e, f, plain, result);
return PR_FALSE;
}
}
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings */
PRBool test_014(void) {
int i;
char result[4096];
printf(
"Test 014 (PL_Base64Decode, random strings, equals) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen = PL_strlen(array[i].cyphertext);
PRUint32 plen = (clen * 3) / 4;
char* rv = PL_Base64Decode(array[i].cyphertext, clen, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 == (clen & 3)) {
if ('=' == array[i].cyphertext[clen - 1]) {
if ('=' == array[i].cyphertext[clen - 2]) {
plen -= 2;
} else {
plen -= 1;
}
}
}
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].cyphertext, array[i].plaintext, plen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings */
PRBool test_015(void) {
int i;
char buffer[4096];
char result[4096];
char* rv;
printf(
"Test 015 (PL_Base64Decode, random strings, no equals) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen, plen;
PL_strcpy(buffer, array[i].cyphertext);
clen = PL_strlen(buffer);
if (0 == (clen & 3)) {
if ('=' == buffer[clen - 1]) {
if ('=' == buffer[clen - 2]) {
buffer[clen - 2] = buffer[clen - 1] = (char)0;
clen -= 2;
} else {
buffer[clen - 1] = (char)0;
clen -= 1;
}
}
}
plen = (clen * 3) / 4;
rv = PL_Base64Decode(buffer, clen, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].cyphertext, array[i].plaintext, plen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, single characters, malloc */
PRBool test_016(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 016 (PL_Base64Decode, single characters, equals, malloc) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)plain, rv)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, single characters, malloc */
PRBool test_017(void) {
PRUint32 a, b;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 017 (PL_Base64Decode, single characters, no equals, malloc) "
"...");
fflush(stdout);
plain[1] = plain[2] = plain[3] = (unsigned char)0;
cypher[2] = cypher[3] = (unsigned char)0;
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (unsigned char)(a * 4 + b);
cypher[1] = base[(b * 16)];
rv = PL_Base64Decode((char*)cypher, 2, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)plain, rv)) {
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, double characters, malloc */
PRBool test_018(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 018 (PL_Base64Decode, double characters, equals, malloc) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)'=';
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)plain, rv)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
a, b, c, d, plain, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, double characters, malloc */
PRBool test_019(void) {
PRUint32 a, b, c, d;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 019 (PL_Base64Decode, double characters, no equals, malloc) "
"...");
fflush(stdout);
plain[2] = plain[3] = (unsigned char)0;
cypher[3] = (unsigned char)0;
cypher[4] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
cypher[2] = base[d * 4];
rv = PL_Base64Decode((char*)cypher, 3, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)plain, rv)) {
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
a, b, c, d, cypher, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, triple characters, malloc */
PRBool test_020(void) {
PRUint32 a, b, c, d, e, f;
unsigned char plain[4];
unsigned char cypher[5];
char* rv;
printf(
"Test 020 (PL_Base64Decode, triple characters, malloc) "
"...");
fflush(stdout);
cypher[4] = (unsigned char)0;
plain[3] = (unsigned char)0;
for (a = 0; a < 64; a++) {
cypher[0] = base[a];
for (b = 0; b < 4; b++) {
plain[0] = (a * 4) + b;
for (c = 0; c < 16; c++) {
cypher[1] = base[b * 16 + c];
for (d = 0; d < 16; d++) {
plain[1] = c * 16 + d;
for (e = 0; e < 4; e++) {
cypher[2] = base[d * 4 + e];
for (f = 0; f < 64; f++) {
plain[2] = e * 64 + f;
cypher[3] = base[f];
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
b, c, d, e, f);
return PR_FALSE;
}
if (0 != PL_strcmp((char*)plain, rv)) {
printf(
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
"\"%.3s.\"\n",
a, b, c, d, e, f, plain, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
}
}
}
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings, malloc */
PRBool test_021(void) {
int i;
printf(
"Test 021 (PL_Base64Decode, random strings, equals, malloc) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen = PL_strlen(array[i].cyphertext);
char* rv = PL_Base64Decode(array[i].cyphertext, clen, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].plaintext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].cyphertext, array[i].plaintext, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, random strings, malloc */
PRBool test_022(void) {
int i;
char buffer[4096];
char* rv;
printf(
"Test 022 (PL_Base64Decode, random strings, no equals, malloc) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen;
PL_strcpy(buffer, array[i].cyphertext);
clen = PL_strlen(buffer);
if (0 == (clen & 3)) {
if ('=' == buffer[clen - 1]) {
if ('=' == buffer[clen - 2]) {
buffer[clen - 2] = buffer[clen - 1] = (char)0;
clen -= 2;
} else {
buffer[clen - 1] = (char)0;
clen -= 1;
}
}
}
rv = PL_Base64Decode(buffer, clen, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].plaintext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].cyphertext, array[i].plaintext, rv);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, random strings */
PRBool test_023(void) {
int i;
char result[4096];
printf(
"Test 023 (PL_Base64Encode, random strings, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 plen = PL_strlen(array[i].plaintext);
PRUint32 clen = ((plen + 2) / 3) * 4;
char* rv = PL_Base64Encode(array[i].plaintext, 0, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].plaintext, array[i].cyphertext, clen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, random strings, malloc */
PRBool test_024(void) {
int i;
printf(
"Test 024 (PL_Base64Encode, random strings, malloc, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 plen = PL_strlen(array[i].plaintext);
PRUint32 clen = ((plen + 2) / 3) * 4;
char* rv = PL_Base64Encode(array[i].plaintext, 0, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].cyphertext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].plaintext, array[i].cyphertext, rv);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings */
PRBool test_025(void) {
int i;
char result[4096];
printf(
"Test 025 (PL_Base64Decode, random strings, equals, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen = PL_strlen(array[i].cyphertext);
PRUint32 plen = (clen * 3) / 4;
char* rv = PL_Base64Decode(array[i].cyphertext, 0, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 == (clen & 3)) {
if ('=' == array[i].cyphertext[clen - 1]) {
if ('=' == array[i].cyphertext[clen - 2]) {
plen -= 2;
} else {
plen -= 1;
}
}
}
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].cyphertext, array[i].plaintext, plen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings */
PRBool test_026(void) {
int i;
char buffer[4096];
char result[4096];
char* rv;
printf(
"Test 026 (PL_Base64Decode, random strings, no equals, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen, plen;
PL_strcpy(buffer, array[i].cyphertext);
clen = PL_strlen(buffer);
if (0 == (clen & 3)) {
if ('=' == buffer[clen - 1]) {
if ('=' == buffer[clen - 2]) {
buffer[clen - 2] = buffer[clen - 1] = (char)0;
clen -= 2;
} else {
buffer[clen - 1] = (char)0;
clen -= 1;
}
}
}
plen = (clen * 3) / 4;
rv = PL_Base64Decode(buffer, 0, result);
if (rv != result) {
printf("FAIL\n\t(%d): return value\n", i);
return PR_FALSE;
}
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
array[i].cyphertext, array[i].plaintext, plen, result);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Decode, random strings, malloc */
PRBool test_027(void) {
int i;
printf(
"Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen = PL_strlen(array[i].cyphertext);
char* rv = PL_Base64Decode(array[i].cyphertext, 0, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].plaintext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].cyphertext, array[i].plaintext, rv);
PR_DELETE(rv);
return PR_FALSE;
}
PR_DELETE(rv);
}
printf("PASS\n");
return PR_TRUE;
}
/* PL_Base64Encode, random strings, malloc */
PRBool test_028(void) {
int i;
char buffer[4096];
char* rv;
printf(
"Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) "
"...");
fflush(stdout);
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
PRUint32 clen;
PL_strcpy(buffer, array[i].cyphertext);
clen = PL_strlen(buffer);
if (0 == (clen & 3)) {
if ('=' == buffer[clen - 1]) {
if ('=' == buffer[clen - 2]) {
buffer[clen - 2] = buffer[clen - 1] = (char)0;
clen -= 2;
} else {
buffer[clen - 1] = (char)0;
clen -= 1;
}
}
}
rv = PL_Base64Decode(buffer, 0, (char*)0);
if ((char*)0 == rv) {
printf("FAIL\n\t(%d): no return value\n", i);
return PR_FALSE;
}
if (0 != PL_strcmp(rv, array[i].plaintext)) {
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
array[i].cyphertext, array[i].plaintext, rv);
return PR_FALSE;
}
}
printf("PASS\n");
return PR_TRUE;
}
int main(int argc, char* argv[]) {
printf("Testing the Portable Library base64 functions:\n");
printf("(warning: the \"triple characters\" tests are slow)\n");
if (1 && test_001() && test_002() && test_003() && test_004() && test_005() &&
test_006() && test_007() && test_008() && test_009() && test_010() &&
test_011() && test_012() && test_013() && test_014() && test_015() &&
test_016() && test_017() && test_018() && test_019() && test_020() &&
test_021() && test_022() && test_023() && test_024() && test_025() &&
test_026() && test_027() && test_028()) {
printf("Suite passed.\n");
return 0;
} else {
printf("Suite failed.\n");
return 1;
}
/*NOTREACHED*/
}