From c88a670a56b9d3a1775c2394ed2b256c0600ea2a Mon Sep 17 00:00:00 2001 From: adash Date: Fri, 18 Dec 2009 06:15:56 +0000 Subject: [PATCH] add range prefetch version of SpamFilter --- .../SpamFilter/BufferedReader.java | 86 + .../SpamFilter/DistributedHashMap.java | 38 + .../SpamFilter/EphemeralSignature.java | 47 + .../SpamFilter/FilterResult.java | 80 + .../SpamFilter/FilterStatistic.java | 66 + .../ManualPrefetch/SpamFilter/GString.java | 169 + .../ManualPrefetch/SpamFilter/HashEntry.java | 68 + .../ManualPrefetch/SpamFilter/HashStat.java | 70 + .../ManualPrefetch/SpamFilter/MD5.java | 424 +++ .../ManualPrefetch/SpamFilter/Mail.java | 422 +++ .../SpamFilter/SignatureComputer.java | 289 ++ .../ManualPrefetch/SpamFilter/SpamFilter.java | 618 ++++ .../SpamFilter/WhiplashSignature.java | 258 ++ .../ManualPrefetch/SpamFilter/emails/URLList | 752 +++++ .../SpamFilter/emails/accountList | 600 ++++ .../SpamFilter/emails/filter.java | 47 + .../ManualPrefetch/SpamFilter/emails/gen.c | 197 ++ .../SpamFilter/emails/wordList1 | 2964 +++++++++++++++++ .../ManualPrefetch/SpamFilter/makefile | 32 + .../Benchmarks/Prefetch/ManualPrefetch/run.sh | 5 +- 20 files changed, 7230 insertions(+), 2 deletions(-) create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/BufferedReader.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/DistributedHashMap.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/EphemeralSignature.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterResult.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterStatistic.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/GString.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/HashEntry.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/HashStat.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/MD5.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/Mail.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/SignatureComputer.java create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/SpamFilter.java create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/WhiplashSignature.java create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/URLList create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/accountList create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/filter.java create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/gen.c create mode 100644 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/wordList1 create mode 100755 Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/makefile diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/BufferedReader.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/BufferedReader.java new file mode 100644 index 00000000..d4c96fdd --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/BufferedReader.java @@ -0,0 +1,86 @@ +public class BufferedReader { + FileInputStream fr; + byte[] buffer; + int offset; + int end; + + public BufferedReader(FileInputStream fr) { + this.fr=fr; + this.buffer=new byte[2048]; + } + + public int read() { + if (offset=arraylen) + return off; + array[off++]=buffer[offset]; + } + readBuffer(); + if (end==0) + return off; + if (end<0) + return end; + } while(true); + } + + public void readBuffer() { + offset=0; + end=fr.read(buffer); + } + + public String readLine() { + String str=null; + do { + boolean foundcr=false; + int index=offset; + for(;index> 27)) ^ str.charAt(i); + } + + return hash; + } + */ + +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterResult.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterResult.java new file mode 100755 index 00000000..196006be --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterResult.java @@ -0,0 +1,80 @@ +/** + * A FilterResult encapsulates the result of a filter made by checking a mail. + **/ +public class FilterResult { + /** + * This value is used if type is ERROR or UNKNOWN. + */ + public double NO_RESULT; + + /** + * A result value greater or equal this value indicates that the filter has + * decided on spam. + */ + public int SPAM_THRESHOLD; + public int ABSOLUTE_SPAM; + public int ABSOLUTE_HAM; + + //public double result; // the result, a value between -1 (ham) and 1000 (spam), + // negative values for "error", "unknown" etc. + + // ----------------------------------------------------------------------------- + + public FilterResult(double result) { + SPAM_THRESHOLD=50; + ABSOLUTE_SPAM=100; + ABSOLUTE_HAM=0; + NO_RESULT=-1; + //this.result = result; + } + + public FilterResult() { + SPAM_THRESHOLD=50; + ABSOLUTE_SPAM=100; + ABSOLUTE_HAM=0; + NO_RESULT=-1; + } + + public boolean getResult(int[] confidenceVals) { + int[] res = new int[3]; //3 equals spam, ham and unknown + for(int i=0; i= 0 && confidenceVals[i] < SPAM_THRESHOLD) + res[1]+=1; //ham + if(confidenceVals[i] >= SPAM_THRESHOLD) + res[2]+=1;//spam + } + int maxVotes=0; + int max; + for(int i=0; i<3;i++) { + if(res[i] > maxVotes) { + maxVotes = res[i]; + max = i; + } + } + if(max==0) + return false; + if(max==1) + return false; + if(max==2) + return true; + + System.out.println("Err: getResult() Control shouldn't come here, max= " + max); + return false; + } + + /* + public void addProperty(String key, String value) { + properties.put(key,value); + } + + public String getProperty(String key) { + return properties.get(key); + } + + public HashMap getProperties() { + return properties; + } + */ +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterStatistic.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterStatistic.java new file mode 100755 index 00000000..2e326a5d --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/FilterStatistic.java @@ -0,0 +1,66 @@ +public class FilterStatistic { + int unknown; + int spam; + int ham; + + // ------------------------------------------------------- + + public FilterStatistic() { + this.spam = 0; + this.ham = 0; + this.unknown = 0; + } + + public FilterStatistic(int spam, int ham, int unknown) { + this.spam = spam; + this.ham = ham; + this.unknown = unknown; + } + + public int getChecked() { + return getSpam() + getHam() + getUnknown(); + } + + public int getHam() { + return ham; + } + + public int getSpam() { + return spam; + } + + public void setHam(int i) { + ham = i; + } + + public void setSpam(int i) { + spam = i; + } + + public int getUnknown() { + return unknown; + } + + public void setUnknown(int u) { + unknown = u; + } + + public void increaseSpam() { + setSpam(getSpam() + 1); + } + + public void increaseHam() { + setHam(getHam() + 1); + } + + public void increaseUnknown() { + setUnknown(getUnknown() + 1); + } + + public String toString() { + String str = "Filterstats_spam_"+spam; + str += "_ham_" +ham; + str += "_unknown_"+unknown; + return str; + } +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/GString.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/GString.java new file mode 100755 index 00000000..47e3fcf3 --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/GString.java @@ -0,0 +1,169 @@ +public class GString { + public char value[]; + public int count; + public int offset; + + public GString() { + } + + public GString(char c) { + char[] str = global new char[1]; + str[0] = c; + GString(str); + } + + public GString(String str) { + value = global new char[str.count]; + for(int i =0; i< str.count;i++) { + value[i] = str.value[i+str.offset]; + } + count = str.count; + offset = 0; + } + + public GString(GString gstr) { + this.value = gstr.value; + this.count = gstr.count; + this.offset = gstr.offset; + } + + /* + public GString(StringBuffer gsb) { + value = global new char[gsb.length()]; + count = gsb.length(); + offset = 0; + for (int i = 0; i < count; i++) + value[i] = gsb.value[i]; + } + */ + + public GString(char str[]) { + char charstr[]=new char[str.length]; + for(int i=0; i 0; i--) + if (this.charAt(i) == ch) + return i; + return -1; + } + + public char charAt(int i) { + return value[i+offset]; + } + + public int indexOf(String str) { + return this.indexOf(str, 0); + } + + public int indexOf(String str, int fromIndex) { + if (fromIndex < 0) + fromIndex = 0; + for (int i = fromIndex; i <= (count-str.count); i++) + if (regionMatches(i, str, 0, str.count)) + return i; + return -1; + } + + public boolean regionMatches(int toffset, String other, int ooffset, int len) { + if (toffset < 0 || ooffset < 0 || (toffset+len) > count || (ooffset+len) > other.count) + return false; + + for (int i = 0; i < len; i++) { + if (other.value[i+other.offset+ooffset] != this.value[i+this.offset+toffset]) + return false; + } + return true; + } + + public String subString(int beginIndex, int endIndex) { + return substring(beginIndex, endIndex); + } + + public String substring(int beginIndex, int endIndex) { + String str; + str = global new String(); + str.value = this.value; + str.count = endIndex-beginIndex; + str.offset = this.offset + beginIndex; + return str; + } + + public static String valueOf(Object o) { + if (o==null) + return "null"; + else + return o.toString(); + } + + public String toLocalString() { + return new String(toLocalCharArray(this)); + } + + public static char[] toLocalCharArray(GString str) { + char[] c; + int length; + length = str.length(); + c = new char[length]; + for (int i = 0; i < length; i++) { + c[i] = str.value[i+str.offset]; + } + return c; + } + + public int hashCode() { + String s = this.toLocalString(); + return s.hashCode(); + } + + public boolean equals(Object o) { + if(o == null) + return false; + if(!(o instanceof GString)) + return false; + GString gs = (GString)o; + String s1 = gs.toLocalString(); + String s2 = this.toLocalString(); + if(s2.equals(s1)) + return true; + return false; + } +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/HashEntry.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/HashEntry.java new file mode 100755 index 00000000..f76828ca --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/HashEntry.java @@ -0,0 +1,68 @@ +public class HashEntry { + public GString engine; + public GString signature; + public HashStat stats; + + public HashEntry() { + + } + + /** + * hashCode that combines two strings using xor. + * @return a hash code value on the entire object. + */ + public int hashCode() { + int result=0; + // this will not work well if some of the strings are equal. + result = engine.hashCode(); + result ^= signature.hashCode(); + //result ^= stats.hashCode(); + //System.out.println("HashEntry: hashCode= " + result); + return result; + } + + public void setengine(GString engine) { + this.engine=engine; + } + + public void setstats(HashStat stats) { + this.stats=stats; + } + + public void setsig(GString signature) { + this.signature=signature; + } + + public GString getEngine() { + return engine; + } + + public GString getSignature() { + return signature; + } + + public HashStat getStats() { + return stats; + } + + public boolean equals(Object o) { + HashEntry he = (HashEntry)o; + if(!(he.getEngine().equals(engine))) + return false; + if(!(he.getSignature().equals(signature))) + return false; + //if(!(he.getStats().equals(stats))) + // return false; + return true; + } + + public int askForSpam() { + int[] users = stats.getUsers(); + int spamConfidence=0; + for(int i=0; i +// from some public domain C code (md5.c) included with the ssh-1.2.22 source. +// Tue Jan 19 15:55:50 EST 1999 +// $Id: MD5.java,v 1.1 2009/12/18 06:15:56 adash Exp $ +// +// To compute the message digest of a chunk of bytes, create an +// MD5 object 'md5', call md5.update() as needed on buffers full +// of bytes, and then call md5.md5final(), which +// will fill a supplied 16-byte array with the digest. +// +// A main() method is included that hashes the data on System.in. +// +// It seems to run around 25-30 times slower (JDK1.1.6) than optimized C +// (gcc -O4, version 2.7.2.3). Measured on a Sun Ultra 5 (SPARC 270MHz). +// +// Comments from md5.c from ssh-1.2.22, the basis for this code: +// +/* This code has been heavily hacked by Tatu Ylonen to + make it compile on machines like Cray that don't have a 32 bit integer + type. */ +/* + * This code implements the MD5 message-digest algorithm. + * The algorithm is due to Ron Rivest. This code was + * written by Colin Plumb in 1993, no copyright is claimed. + * This code is in the public domain; do with it what you wish. + * + * Equivalent code is available from RSA Data Security, Inc. + * This code has been tested against that, and is equivalent, + * except that you don't need to include two pages of legalese + * with every copy. + * + * To compute the message digest of a chunk of bytes, declare an + * MD5Context structure, pass it to MD5Init, call MD5Update as + * needed on buffers full of bytes, and then call MD5Final, which + * will fill a supplied 16-byte array with the digest. + */ + +public class MD5 { + int buf[]; // These were originally unsigned ints. + // This Java code makes an effort to avoid sign traps. + // buf[] is where the hash accumulates. + long bits; // This is the count of bits hashed so far. + byte in[]; // This is a buffer where we stash bytes until we have + // enough (64) to perform a transform operation. + int inint[]; + // inint[] used and discarded inside transform(), + // but why allocate it over and over? + // (In the C version this is allocated on the stack.) + + public MD5() { + buf = new int[4]; + // fill the hash accumulator with a seed value + buf[0] = 0x67452301; + buf[1] = 0xefcdab89; + buf[2] = 0x98badcfe; + buf[3] = 0x10325476; + + // initially, we've hashed zero bits + bits = 0L; + + in = new byte[64]; + inint = new int[16]; + } + + public void update(byte[] newbuf) { + update(newbuf, 0, newbuf.length); + } + + public void update(byte[] newbuf, int length) { + update(newbuf, 0, length); + } + + public void update(byte[] newbuf, int bufstart, int buflen) { + int t; + int len = buflen; + + // shash old bits value for the "Bytes already in" computation + // just below. + t = (int) bits; // (int) cast should just drop high bits, I hope + + /* update bitcount */ + /* the C code used two 32-bit ints separately, and carefully + * ensured that the carry carried. + * Java has a 64-bit long, which is just what the code really wants. + */ + bits += (long)(len<<3); + + t = (t >>> 3) & 0x3f; /* Bytes already in this->in */ + + /* Handle any leading odd-sized chunks */ + /* (that is, any left-over chunk left by last update() */ + + if (t!=0) { + int p = t; + t = 64 - t; + if (len < t) { + arraycopy(newbuf, bufstart, in, p, len); + return; + } + arraycopy(newbuf, bufstart, in, p, t); + transform(); + bufstart += t; + len -= t; + } + + /* Process data in 64-byte chunks */ + while (len >= 64) { + arraycopy(newbuf, bufstart, in, 0, 64); + transform(); + bufstart += 64; + len -= 64; + } + + /* Handle any remaining bytes of data. */ + /* that is, stash them for the next update(). */ + arraycopy(newbuf, bufstart, in, 0, len); + } + + public void arraycopy(byte[] src, int srcPos, byte[] dest, int destPos, int len) { + for (int i = 0; i < len; i++) { + dest[destPos+i] = src[srcPos+i]; + } + return; + } + + /* + * Final wrapup - pad to 64-byte boundary with the bit pattern + * 1 0* (64-bit count of bits processed, MSB-first) + */ + public void md5final(byte[] digest) { + /* "final" is a poor method name in Java. :v) */ + int count; + int p; // in original code, this is a pointer; in this java code + // it's an index into the array this->in. + + /* Compute number of bytes mod 64 */ + count = (int) ((bits >>> 3) & 0x3F); + + /* Set the first char of padding to 0x80. This is safe since there is + always at least one byte free */ + p = count; + in[p++] = (byte) 0x80; + + /* Bytes of padding needed to make 64 bytes */ + count = 64 - 1 - count; + + /* Pad out to 56 mod 64 */ + if (count < 8) { + /* Two lots of padding: Pad the first block to 64 bytes */ + zeroByteArray(in, p, count); + transform(); + + /* Now fill the next block with 56 bytes */ + zeroByteArray(in, 0, 56); + } else { + /* Pad block to 56 bytes */ + zeroByteArray(in, p, count - 8); + } + + /* Append length in bits and transform */ + // Could use a PUT_64BIT... func here. This is a fairly + // direct translation from the C code, where bits was an array + // of two 32-bit ints. + int lowbits = (int) bits; + int highbits = (int) (bits >>> 32); + PUT_32BIT_LSB_FIRST(in, 56, lowbits); + PUT_32BIT_LSB_FIRST(in, 60, highbits); + + transform(); + PUT_32BIT_LSB_FIRST(digest, 0, buf[0]); + PUT_32BIT_LSB_FIRST(digest, 4, buf[1]); + PUT_32BIT_LSB_FIRST(digest, 8, buf[2]); + PUT_32BIT_LSB_FIRST(digest, 12, buf[3]); + + /* zero sensitive data */ + /* notice this misses any sneaking out on the stack. The C + * version uses registers in some spots, perhaps because + * they care about this. + */ + zeroByteArray(in); + zeroIntArray(buf); + bits = 0; + zeroIntArray(inint); + } + + /* + public static void main(String args[]) { + // This main() method was created to easily test + // this class. It hashes whatever's on System.in. + + byte buf[] = new byte[397]; + // arbitrary buffer length designed to irritate update() + int rc; + MD5 md = new MD5(); + byte out[] = new byte[16]; + int i; + int len = 0; + + try { + while ((rc = System.in.read(buf, 0, 397)) > 0) { + md.update(buf, rc); + len += rc; + } + } catch (IOException ex) { + ex.printStackTrace(); + return; + } + md.md5final(out); + + System.out.println("file length: "+len); + System.out.println("hash: "+dumpBytes(out)); + } + */ + + + ///////////////////////////////////////////////////////////////////// + // Below here ye will only finde private functions // + ///////////////////////////////////////////////////////////////////// + + // There must be a way to do these functions that's + // built into Java, and I just haven't noticed it yet. + + private void zeroByteArray(byte[] a) { + zeroByteArray(a, 0, a.length); + } + + private void zeroByteArray(byte[] a, int start, int length) { + setByteArray(a, (byte) 0, start, length); + } + + private void setByteArray(byte[] a, byte val, int start, int length) { + int i; + int end = start+length; + for (i=start; i>>(32-s); + w += x; + return w; + } + + private int MD5STEP2(int w, int x, int y, int z, int data, int s) { + w += (y ^ (z & (x ^ y))) + data; + w = w<>>(32-s); + w += x; + return w; + } + + private int MD5STEP3(int w, int x, int y, int z, int data, int s) { + w += (x ^ y ^ z) + data; + w = w<>>(32-s); + w += x; + return w; + } + + private int MD5STEP4(int w, int x, int y, int z, int data, int s) { + w += (y ^ (x | ~z)) + data; + w = w<>>(32-s); + w += x; + return w; + } + + private void transform() { + /* load in[] byte array into an internal int array */ + int i; + int[] inint = new int[16]; + + for (i=0; i<16; i++) { + inint[i] = GET_32BIT_LSB_FIRST(in, 4*i); + } + + int a, b, c, d; + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; + + a = MD5STEP1(a, b, c, d, inint[0] + 0xd76aa478, 7); + d = MD5STEP1(d, a, b, c, inint[1] + 0xe8c7b756, 12); + c = MD5STEP1(c, d, a, b, inint[2] + 0x242070db, 17); + b = MD5STEP1(b, c, d, a, inint[3] + 0xc1bdceee, 22); + a = MD5STEP1(a, b, c, d, inint[4] + 0xf57c0faf, 7); + d = MD5STEP1(d, a, b, c, inint[5] + 0x4787c62a, 12); + c = MD5STEP1(c, d, a, b, inint[6] + 0xa8304613, 17); + b = MD5STEP1(b, c, d, a, inint[7] + 0xfd469501, 22); + a = MD5STEP1(a, b, c, d, inint[8] + 0x698098d8, 7); + d = MD5STEP1(d, a, b, c, inint[9] + 0x8b44f7af, 12); + c = MD5STEP1(c, d, a, b, inint[10] + 0xffff5bb1, 17); + b = MD5STEP1(b, c, d, a, inint[11] + 0x895cd7be, 22); + a = MD5STEP1(a, b, c, d, inint[12] + 0x6b901122, 7); + d = MD5STEP1(d, a, b, c, inint[13] + 0xfd987193, 12); + c = MD5STEP1(c, d, a, b, inint[14] + 0xa679438e, 17); + b = MD5STEP1(b, c, d, a, inint[15] + 0x49b40821, 22); + + a = MD5STEP2(a, b, c, d, inint[1] + 0xf61e2562, 5); + d = MD5STEP2(d, a, b, c, inint[6] + 0xc040b340, 9); + c = MD5STEP2(c, d, a, b, inint[11] + 0x265e5a51, 14); + b = MD5STEP2(b, c, d, a, inint[0] + 0xe9b6c7aa, 20); + a = MD5STEP2(a, b, c, d, inint[5] + 0xd62f105d, 5); + d = MD5STEP2(d, a, b, c, inint[10] + 0x02441453, 9); + c = MD5STEP2(c, d, a, b, inint[15] + 0xd8a1e681, 14); + b = MD5STEP2(b, c, d, a, inint[4] + 0xe7d3fbc8, 20); + a = MD5STEP2(a, b, c, d, inint[9] + 0x21e1cde6, 5); + d = MD5STEP2(d, a, b, c, inint[14] + 0xc33707d6, 9); + c = MD5STEP2(c, d, a, b, inint[3] + 0xf4d50d87, 14); + b = MD5STEP2(b, c, d, a, inint[8] + 0x455a14ed, 20); + a = MD5STEP2(a, b, c, d, inint[13] + 0xa9e3e905, 5); + d = MD5STEP2(d, a, b, c, inint[2] + 0xfcefa3f8, 9); + c = MD5STEP2(c, d, a, b, inint[7] + 0x676f02d9, 14); + b = MD5STEP2(b, c, d, a, inint[12] + 0x8d2a4c8a, 20); + + a = MD5STEP3(a, b, c, d, inint[5] + 0xfffa3942, 4); + d = MD5STEP3(d, a, b, c, inint[8] + 0x8771f681, 11); + c = MD5STEP3(c, d, a, b, inint[11] + 0x6d9d6122, 16); + b = MD5STEP3(b, c, d, a, inint[14] + 0xfde5380c, 23); + a = MD5STEP3(a, b, c, d, inint[1] + 0xa4beea44, 4); + d = MD5STEP3(d, a, b, c, inint[4] + 0x4bdecfa9, 11); + c = MD5STEP3(c, d, a, b, inint[7] + 0xf6bb4b60, 16); + b = MD5STEP3(b, c, d, a, inint[10] + 0xbebfbc70, 23); + a = MD5STEP3(a, b, c, d, inint[13] + 0x289b7ec6, 4); + d = MD5STEP3(d, a, b, c, inint[0] + 0xeaa127fa, 11); + c = MD5STEP3(c, d, a, b, inint[3] + 0xd4ef3085, 16); + b = MD5STEP3(b, c, d, a, inint[6] + 0x04881d05, 23); + a = MD5STEP3(a, b, c, d, inint[9] + 0xd9d4d039, 4); + d = MD5STEP3(d, a, b, c, inint[12] + 0xe6db99e5, 11); + c = MD5STEP3(c, d, a, b, inint[15] + 0x1fa27cf8, 16); + b = MD5STEP3(b, c, d, a, inint[2] + 0xc4ac5665, 23); + + a = MD5STEP4(a, b, c, d, inint[0] + 0xf4292244, 6); + d = MD5STEP4(d, a, b, c, inint[7] + 0x432aff97, 10); + c = MD5STEP4(c, d, a, b, inint[14] + 0xab9423a7, 15); + b = MD5STEP4(b, c, d, a, inint[5] + 0xfc93a039, 21); + a = MD5STEP4(a, b, c, d, inint[12] + 0x655b59c3, 6); + d = MD5STEP4(d, a, b, c, inint[3] + 0x8f0ccc92, 10); + c = MD5STEP4(c, d, a, b, inint[10] + 0xffeff47d, 15); + b = MD5STEP4(b, c, d, a, inint[1] + 0x85845dd1, 21); + a = MD5STEP4(a, b, c, d, inint[8] + 0x6fa87e4f, 6); + d = MD5STEP4(d, a, b, c, inint[15] + 0xfe2ce6e0, 10); + c = MD5STEP4(c, d, a, b, inint[6] + 0xa3014314, 15); + b = MD5STEP4(b, c, d, a, inint[13] + 0x4e0811a1, 21); + a = MD5STEP4(a, b, c, d, inint[4] + 0xf7537e82, 6); + d = MD5STEP4(d, a, b, c, inint[11] + 0xbd3af235, 10); + c = MD5STEP4(c, d, a, b, inint[2] + 0x2ad7d2bb, 15); + b = MD5STEP4(b, c, d, a, inint[9] + 0xeb86d391, 21); + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; + } + + private int GET_32BIT_LSB_FIRST(byte[] b, int off) { + return + ((int)(b[off+0]&0xff)) | + ((int)(b[off+1]&0xff) << 8) | + ((int)(b[off+2]&0xff) << 16) | + ((int)(b[off+3]&0xff) << 24); + } + + private void PUT_32BIT_LSB_FIRST(byte[] b, int off, int value) { + b[off+0] = (byte) (value & 0xff); + b[off+1] = (byte) ((value >> 8) & 0xff); + b[off+2] = (byte) ((value >> 16)& 0xff); + b[off+3] = (byte) ((value >> 24)& 0xff); + } + + // These are debug routines I was using while trying to + // get this code to generate the same hashes as the C version. + // (IIRC, all the errors were due to the absence of unsigned + // ints in Java.) + /* + private void debugStatus(String m) { + System.out.println(m+":"); + System.out.println("in: "+dumpBytes(in)); + System.out.println("bits: "+bits); + System.out.println("buf: " + +Integer.toHexString(buf[0])+" " + +Integer.toHexString(buf[1])+" " + +Integer.toHexString(buf[2])+" " + +Integer.toHexString(buf[3])); + } + + private static String dumpBytes(byte[] bytes) { + int i; + StringBuffer sb = new StringBuffer(); + for (i=0; i 2) { + s = s.substring(s.length()-2); + } + sb.append(s); + } + return sb.toString(); + } + */ +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/Mail.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/Mail.java new file mode 100755 index 00000000..3afbe19c --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/Mail.java @@ -0,0 +1,422 @@ +/** + * This class is a container for all data contained in an Email Message. + **/ +public class Mail { + + String header; // the full header + //String sentOn; // time the message was sent + //String receivedOn; // time when the message arrived + String from; // the "from" field + String to; // the "to" field + String cc; + String subject; + String body; + String noURLBody; + String sourceCode; + String spam; + boolean hasAttachement; + String encoding; //rich text, plain, html + + String messageID; // cached message ID for reuse (takes a lot of memory and is used all over the place) + //same as hashcode of a class + boolean isSpam; + + /** + * this is a really simple implementation of a tokenizer + * used to build tokens from an email and divide email into parts + **/ + int MAX_TOKEN_SIZE; + + public Mail() { + messageID=null; + } + + public Mail(String fileName) // read a mail from file + { + //System.out.println("DEBUG: fileName= " + fileName); + + BufferedReader fileinput = new BufferedReader(new FileInputStream(fileName)); + String line; + boolean chk = false; + + while((line = fileinput.readLine()) != null) + { + chk = true; + + Vector splittedLine = line.split(); + if(((String)(splittedLine.elementAt(0))).equals("Spam:")) + { + spam = (String)(splittedLine.elementAt(1)); + } + else if(((String)(splittedLine.elementAt(0))).equals("Header:")) // message id + { + header = (String)splittedLine.elementAt(1); + } + else if(((String)(splittedLine.elementAt(0))).equals("To:")) // receiver + { + to = (String)splittedLine.elementAt(1); + } + else if(((String)(splittedLine.elementAt(0))).equals("From:")) // sender + { + from = (String)splittedLine.elementAt(1); + } + else if(((String)(splittedLine.elementAt(0))).equals("Cc:")) // cc + { + cc = (String)splittedLine.elementAt(1); + } + else if(((String)(splittedLine.elementAt(0))).equals("Subject:")) // Subject + { + subject = (String)splittedLine.elementAt(1); + break; + } + } // parsed messageID, To, from, cc, Title + + /** + * error checking + **/ + if(!chk) + System.out.println("no line read"); + + + body = new String(); + byte[] readBody = new byte[256]; + + while((fileinput.read(readBody)>0)) + { + body += new String(readBody); + readBody = new byte[256]; + } + + fileinput.close(); + + MAX_TOKEN_SIZE = 1024; + } + + // ------------------------------------------------------- + + public void setHeader(String header) { + this.header = header; + } + + public String getHeader() { + return header; + } + + + /* + public void setSentOn(String sentOn) { + this.sentOn = sentOn; + } + + public String getSentOn() { + return sentOn; + } + + public Date getSentOnAsDate() { + String sentOn = getSentOn(); + return parseDate(sentOn); + } + + public void setReceivedOn(String receivedOn) { + this.receivedOn = receivedOn; + } + + public String getReceivedOn() { + return receivedOn; + } + + public Date getReceivedOnAsDate() { + String receivedOn = getReceivedOn(); + return parseDate(receivedOn); + } + */ + + + /** + * Parses a given Date-String in into a real Date-Object + * + * @param stringDate the string in format dd.mm.yyyy hh:mm + * @return a Date containing the info of the string or the actual date and time if something fails. + */ + /* + public Date parseDate(String stringDate) { + // date is in this format: dd.mm.yyyy hh:mm + if (stringDate == null || "N/A".equals(stringDate)) { + return new Date(); + } + try { + synchronized (MAIL_TIME_FORMAT) { + return MAIL_TIME_FORMAT.parse(stringDate); + } + } catch (Throwable e) { + return new Date(); + } + } + */ + + public void setFrom(String from) { + this.from = from; + } + + public String getFrom() { + return from; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTo() { + return to; + } + + public void setCc(String cc) { + this.cc = cc; + } + + public String getCc() { + return cc; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getSubject() { + return subject; + } + + public void setBody(String body) { + this.body = body; + } + + public String getBody() { + return body; + } + + public void setSourceCode(String sourceCode) { + this.sourceCode = sourceCode; + } + + public String getSourceCode() { + return sourceCode; + } + + public void setHasAttachement(boolean hasAttachement) { + this.hasAttachement = hasAttachement; + } + + public boolean getHasAttachement() { + return hasAttachement; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public String getEncoding() { + return encoding; + } + + public boolean isTextEncoding() { + return getEncoding().toLowerCase().indexOf("plain") >= 0; + } + + public boolean isHTMLEncoding() { + return getEncoding().toLowerCase().indexOf("html") >= 0; + } + + /* + public String toString() { + return getBody() + "," + getCc() + "," + getEncoding() + "," + getFrom() + "," + getHasAttachement() + "," + getHeader() + "," + getReceivedOn() + "," + getSentOn() + "," + getSourceCode() + "," + getSubject() + "," + getTo(); + } + */ + + public String toString() { + return getBody() + "," + getCc() + "," + getEncoding() + "," + getFrom() + "," + getHasAttachement() + "," + getHeader() + "," + getSourceCode() + "," + getSubject() + "," + getTo(); + } + + /* + public String getID() { + if (messageID == null) { // no cached version + // Take the message-ID header as ID (if present) + String[] messageIDs = getHeaderField("Message-ID"); + if ((messageIDs != null) && (messageIDs.length > 0)) { + messageID = messageIDs[0]; + } else { // otherwise, hash header and body as ID + return String.valueOf(getHeader().hashCode() + getBody().hashCode()); + } + } + + return messageID; + } + */ + + public String[] getHeaderField(String fieldName) { + + } + + public String extractEMailAddress() { + + } + + /* + public boolean equals(Object o) { + if (o instanceof Mail) { + Mail mail = (Mail)o; + return this.getID().equals(mail.getID()); + } + + return false; + } + */ + + public Vector getCommonPart() + { + Vector returnStrings = new Vector(); + + // add header, sender, and title + returnStrings.addElement(header); + returnStrings.addElement(from); + returnStrings.addElement(subject); + + return returnStrings; + } + + public String getBodyString() + { + return body; + } + + public Vector returnEmail() { + Vector myemail = new Vector(); + myemail.addElement(getCommonPart()); + //System.out.println("DEBUG: getCommonPart.size= " + getCommonPart().size()); + myemail.addElement(getURLs()); + //System.out.println("DEBUG: getURLs.size= " + getURLs().size()); + myemail.addElement(getSplittedBody(MAX_TOKEN_SIZE)); + //System.out.println("DEBUG: getSplittedBody.size= " + getSplittedBody(MAX_TOKEN_SIZE).size()); + return myemail; + } + + public Vector getURLs() + { + Vector returnStrings = new Vector(); + Vector splittedBody = body.split(); + + // add URL and email in the body + for(int i=0; i=end) { + String str=noURLBody.substring(i, end); + returnStrings.addElement(str); + } + else { + String str=noURLBody.substring(i, i+size); + returnStrings.addElement(str); + } + } + return returnStrings; + } + + + public void setIsSpam(boolean spam) { + isSpam = spam; + } + + public boolean getIsSpam() { + if(spam.equals("yes")) + return true; + return false; + } + + /** + * Returns result to the Spam filter + **/ + public Vector checkMail(int userid) { + //Preprocess emails + + //long startGetParts=System.currentTimeMillis(); + Vector partsOfMailStrings = returnEmail(); + //long stopGetParts=System.currentTimeMillis(); + //System.out.println("Time to read email= " + (stopGetParts-startGetParts)); + + //Compute signatures + SignatureComputer sigComp = new SignatureComputer(); + //Vector signatures = sigComp.computeSigs(partsOfMailStrings);//vector of strings + //long startGetsignatures=System.currentTimeMillis(); + Vector signatures = sigComp.computeSigs(partsOfMailStrings);//vector of vector of strings + //long stopGetsignatures=System.currentTimeMillis(); + //System.out.println("Time to Getsignatures= " + (stopGetsignatures-startGetsignatures)); + + return signatures; + } + + /* For tests only */ + /* + public static void main(String[] args) + { + Mail mail = new Mail("./emails/email1"); + + String[] a = mail.createMailStrings(); + + for(String b : a) + { + System.out.println(b); + } + } + */ +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/SignatureComputer.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/SignatureComputer.java new file mode 100755 index 00000000..4f98a2d0 --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/SignatureComputer.java @@ -0,0 +1,289 @@ +public class SignatureComputer { + public EphemeralSignature sig4; //signature engines + public WhiplashSignature sig8; //signature engines + + int[] enginesToUseForCheck; + + public SignatureComputer() { + sig4 = new EphemeralSignature(); //default values + sig8 = new WhiplashSignature(); + createEnginesToCheck(); + } + + /** + * constructor to be used when some parsing has already taken place with the + * server-provides value randomNumberSeed. + * + * @param randomNumberSeed + * a non-negative number used for seeding the random number generator + * before starting to hash values. + * @param separator + * how the mail-text should be splitted into lines. (== what chars + * separate 2 lines) + */ + public SignatureComputer(int randomNumberSeed, String separator) { + sig4 = new EphemeralSignature(randomNumberSeed,separator); + sig8 = new WhiplashSignature(); + createEnginesToCheck(); + } + + /** + * the constructor to be used most of the time. you can hand over the + * seed-string exactly as it is provided by the razor-server. + * + * @param seedAndSeparator + * a string containing the seed value for the RNG and a separator list + * (separated by ' - '). default value is + * "7542-10" which means server-seed 7542 and only one + * separator 10 (which is ascii '\n'). + */ + public SignatureComputer(String seedAndSeparator) { + sig4 = new EphemeralSignature(seedAndSeparator); + sig8 = new WhiplashSignature(); + createEnginesToCheck(); + } + + /** + * + */ + public void createEnginesToCheck() { + enginesToUseForCheck = new int[2]; + enginesToUseForCheck[0] = 4; //Ephemeral engine + enginesToUseForCheck[1] = 8;//Whiplash engine + } + + public boolean isSigSupported(int sig) { + boolean found = false; + for (int i = 0; i < enginesToUseForCheck.length && !found; i++) { + if (enginesToUseForCheck[i] == sig) { + found = true; + } + } + return found; + } + + public boolean isSigSupported(String sig) { + return (sig != null && isSigSupported(Integer.parseInt(sig))); + } + + public String getDefaultEngine() { + return "4"; + } + + public Vector computeSigs(Vector EmailParts) { + if (EmailParts == null) return null; + + Vector printableSigs = new Vector(); // vector of strings + + /** + * Step -I + * Get signatures for the common parts + **/ + + Vector commonpart = (Vector) (EmailParts.elementAt(0)); + for (int mailIndex = 0; mailIndex < commonpart.size(); mailIndex++) { + String mail = (String) (commonpart.elementAt(mailIndex)); + + if (mail == null) continue; + + /* + * Compute Sig for email header that are cleaned. + */ + for (int engineIndex = 0; engineIndex < enginesToUseForCheck.length; engineIndex++) { + int engineNo = enginesToUseForCheck[engineIndex]; + String sig = null; + + /* EphemeralSignature calculator */ + if(engineNo==4) { + sig = computeSignature(engineNo,mail); + } + + if(engineNo==8) { + continue; + } + + if((engineNo!=4)) { + System.out.println("Err: Common part Couldn't find the signature engine: " + engineNo); + } + + if (sig != null) { + String hash = engineNo + ":" + sig; + printableSigs.addElement(hash); + + //System.out.println("DEBUG: mail= " +mail + " hash= " + hash); + + } else { + // we didn't produce a signature for the mail. + } + }//engine + }//common part + + /** + * Step -II + * Get signatures for the body parts without URLs + **/ + Vector getBodywithNoURLs = (Vector)(EmailParts.elementAt(2)); + for (int mailIndex = 0; mailIndex < getBodywithNoURLs.size(); mailIndex++) { + String mail = (String) (getBodywithNoURLs.elementAt(mailIndex)); + + + if (mail == null) continue; + + /* + * Compute Sig for email header that are cleaned. + */ + for (int engineIndex = 0; engineIndex < enginesToUseForCheck.length; engineIndex++) { + int engineNo = enginesToUseForCheck[engineIndex]; + String sig = null; + + /* EphemeralSignature calculator */ + if(engineNo==4) { + sig = computeSignature(engineNo,mail); + } + + if(engineNo==8) + continue; + + if(engineNo!=4) { + System.out.println("Err: body parts without URL Couldn't find the signature engine: " + engineNo); + } + + if (sig != null) { + String hash = engineNo + ":" + sig; + printableSigs.addElement(hash); + } else { + // we didn't produce a signature for the mail. + } + }//engine + } + + /** + * Step -III + * Get signatures for the body parts with URLs + **/ + Vector getURLs = (Vector)(EmailParts.elementAt(1)); + for (int mailIndex = 0; mailIndex < getURLs.size(); mailIndex++) { + String mail = (String) (getURLs.elementAt(mailIndex)); + + /* + * Compute Sig for bodyparts that are cleaned. + */ + for (int engineIndex = 0; engineIndex < enginesToUseForCheck.length; engineIndex++) { + int engineNo = enginesToUseForCheck[engineIndex]; + if(engineNo==4) + continue; + + /* WhiplashSignature calculator */ + String[] hosts = null; + String sig = null; + if(engineNo==8) { + //hosts = computeSignature(engineNo,mail); + hosts = sig8.computeSignature(mail); + if(hosts != null) { + for(int i=0; i -e -t \n"); + System.out.println( " -n : num iterations"); + System.out.println( " -e : number of emails"); + System.out.println( " -t : number of threads"); + } + + public int[] check(Vector signatures, int userid) { + //prefetch this.mydhmap.table + short[] offsets = new short[4]; + offsets[0] = getoffset{SpamFilter, mydhmap}; + offsets[1] = (short) 0; + offsets[2] = getoffset{DistributedHashMap, table}; + offsets[3] = (short) 0; + System.rangePrefetch(this, offsets); + + int numparts = signatures.size(); + + int[] confidenceVals = new int[numparts]; + + for(int i=0; i the mail client is able to determine if it is spam or not + // --- According to the "any"-logic (in Core#check_logic) in original Razor --- + // If any answer is spam, the entire email is spam. + return confidenceVals; + } + + /** + * This method sends feedback from the user to a distributed + * spam database and trains the spam database to check future + * emails and detect spam + **/ + public void sendFeedBack(Vector signatures, boolean isSpam, int id, Random myrand) { + + for(int i=0;ipack() which + * we must do manually in java. + */ + private int convertHexToRazorEncoding(String hex3) { + if((hex3 == null)) + return 0; //error + int res = 0; + int cur = Integer.parseInt(hex3.substring(0,1),16); + cur = mirror4LSBits(cur); + res |= ( (cur&0xf) << 8); + if(hex3.length() >=2) { + cur = Integer.parseInt(hex3.substring(1,2),16); + } else { + cur = 0; + } + //cur = ( hex3.length() >=2 ? Integer.parseInt(hex3.substring(1,2),16) : 0); + cur = mirror4LSBits(cur); + res |= ((cur & 0xf) << 4); + if(hex3.length() >= 3) { + cur = Integer.parseInt(hex3.substring(2,3),16); + } else { + cur = 0; + } + //cur = ( hex3.length() >= 3 ? Integer.parseInt(hex3.substring(2,3),16): 0); + cur = mirror4LSBits(cur); + res |= (cur & 0xf); + + return res; + } + + /** + * mirrors the 4 least significant bytes of an integer + * @param cur an int containing 4 Least Singificant bytes like 00000...00abcd + * @return the mirrored 4 least significant bytes 00000...00dcba. all bits except a-b are lost. + */ + public int mirror4LSBits(int cur) { + int res = 0; + res |= (cur & 0x8)>>>3; + res |= (cur & 0x4)>>>1; + res |= (cur & 0x2)<<1; + res |= (cur & 0x1)<<3; + return res; + } + + public String[] whiplash(String text) { + + if (text == null) { + return null; + } + String[] hosts = extractHosts(text); + if (hosts == null || hosts.length < 1) { + return null; + } + String[] sigs = new String[hosts.length]; + + for (int i = 0; i < hosts.length; i++) { + MD5 md = new MD5(); + String host = hosts[i]; + int len = host.length(); + byte buf[] = host.getBytes(); + byte sig[] = new byte[16]; + md.update(buf, len); + md.md5final(sig); + String signature = new String(sig); + + // System.out.println("DEBUG: host= " + host + " whiplash sig= " + signature); + + sigs[i] = signature; + } + return sigs; + } + + public String[] extractHosts(String text) { + //System.out.println("Inside extractHosts"); + Vector hosts = new Vector(); + String buf = new String(text); + + //System.out.println("DEBUG: extractHosts() string= " + buf); + + /* Extract hosts from http:// links */ + int idx; + String strwww = new String("www."); + while ((idx = buf.indexOf(strwww)) != -1) { + int startidx = idx + strwww.length(); + String strcom = new String("."); + buf = buf.subString(startidx); + int endidx = buf.indexOf(strcom); + String host = buf.subString(0, endidx); + //System.out.println("DEBUG: http links extracted host= " + host); + + buf = buf.subString(endidx); + endidx = buf.indexOf(strcom); + host += buf.subString(0, endidx); + + hosts.addElement(host); + buf = buf.subString(endidx+strcom.length()); + } + + /* Extract hosts from email addressess */ + buf = new String(text); + String strrate = new String("@"); + while ((idx = buf.indexOf(strrate)) != -1) { + int startidx = idx + strrate.length(); + String strdot = new String("."); + buf = buf.subString(startidx); + int endidx = buf.indexOf(strdot); + String host = buf.subString(0, endidx); + //System.out.println("DEBUG: email addr extracted host= " + host); + + buf = buf.subString(endidx); + endidx = buf.indexOf(strdot); + host += buf.subString(0, endidx); + + hosts.addElement(host); + buf = buf.subString(endidx+strdot.length()); + } + + if (hosts.size() == 0) { + return null; + } + + String[] retbuf = new String[hosts.size()]; + for (int i = 0; i < hosts.size(); i++) { + retbuf[i] = (String) (hosts.elementAt(i)); + } + + return retbuf; + } + +// Testing the signature computation +// public static void main(String[] args) { +// /* String testVector = " Test Vectors: \n"+ +// "\n" + +// "1. http:www.nodg.com@www.geocities.com/nxcisdsfdfdsy/off\n"+ +// "2. http:www.ksleybiuh.com@213.171.60.74/getoff/\n"+ +// "3. \n"+ +// "4. http:217.12.4.7/rmi/http:definethis.net/526/index.html\n"+ +// "5. http:magalygr8sex.free-host.com/h.html\n"+ +// "6. http:%3CVenkatrs%3E@218.80.74.102/thecard/4index.htm\n"+ +// "7. http:EBCDVKIGURGGCEOKXHINOCANVQOIDOXJWTWGPC@218.80.74.102/thecard/5in\n"+ +// "8. http:g.india2.bag.gs/remove_page.htm\n"+ +// "9. https:220.97.40.149\n"+ +// "10. http:mjaked.biz/unsubscribe.ddd?leaving\n"+ +// "11. http:g5j99m8@it.rd.yahoo.com/bassi/*http:www.lekobas.com/c/index.php\n"+ +// "12. look great / feel great\n"+ +// "13. \n"+ +// "14. www.pillzthatwork.com # anything that starts with www. \n"; +// */ +// String testVector = "\n"+ +// "\n"+ +// "

Our first autolink: www.autolink1.com or another link like www.autolink2.co.uk or how about https:plaintextlink1.co.uk or http:plaintextlink2.com

\n"+ +// "

now a masked link http://www.coveringlink1.com and another link http:plaintextlink3.net and how about https:plaintextlink4.to

\n"+ +// "

another masked link https:coveringlink2.com and another link https:plaintextlink5.com

\n"+ +// "\n"+ +// "\n"; +// String test1 = "Our first autolink: www.autolink1.com or another link like www.autolink2.co.uk or how about https:plaintextlink1.co.uk or http:plaintextlink2.com

\n"; +// WhiplashSignature whiplash = new WhiplashSignature(); +// String[] hosts = whiplash.computeSignature(testVector); +// //String[] hosts = whiplash.computeSignature(test1); +// for (int i = 0; i < hosts.length; i++) { +// String string = hosts[i]; +// System.out.println("host " + i + ":\t" + string); +// } +// } + +} diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/URLList b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/URLList new file mode 100644 index 00000000..d0ddb91f --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/URLList @@ -0,0 +1,752 @@ +http://www.yward.co.kr +http://www.Chandler.co.uk +http://www.San.ca +http://www.Bernardino.co.kr +http://www.Oil.ca +http://www.La.co.uk +http://www.Puente.com +http://www.Lincoln.ca +http://www.Walla.ca +http://www.Walla.co.uk +http://www.Mission.co.kr +http://www.Viejo.co.uk +http://www.Hattiesburg.co.kr +http://www.Asbury.co.kr +http://www.Park.co.uk +http://www.Cicero.com +http://www.Egg.co.uk +http://www.Harbor.com +http://www.Pascagoula.com +http://www.Detroit.co.kr +http://www.Carbondale.com +http://www.Starkville.co.kr +http://www.South.ca +http://www.El.co.uk +http://www.Monte.co.uk +http://www.Port.co.uk +http://www.Arthur.co.kr +http://www.Woodruff.co.kr +http://www.Blythe.co.kr +http://www.Monrovia.ca +http://www.Areceibo.co.uk +http://www.Plattsburgh.co.uk +http://www.Visalia.co.uk +http://www.Rolla.ca +http://www.Jeffersonville.co.kr +http://www.Naperville.ca +http://www.Ada.com +http://www.Newport.co.kr +http://www.Rutland.co.uk +http://www.Urbana.ca +http://www.Agawam.ca +http://www.Valencia.ca +http://www.Pierre.co.kr +http://www.Oneida.com +http://www.Hickory.ca +http://www.Corinth.co.uk +http://www.Murray.com +http://www.West.co.kr +http://www.Hollywood.co.uk +http://www.Mission.ca +http://www.News.com +http://www.Butte.com +http://www.Shreveport.ca +http://www.Fredericksburg.co.uk +http://www.Greenville.co.uk +http://www.Wheeling.com +http://www.Claremore.ca +http://www.Corvallis.ca +http://www.Parma.ca +http://www.Cheyenne.com +http://www.Flint.co.kr +http://www.Eden.com +http://www.Prairie.ca +http://www.Commerce.co.uk +http://www.Commerce.ca +http://www.West.ca +http://www.Covina.com +http://www.Johnstown.co.kr +http://www.nus.co.uk +http://www.Uriel.ca +http://www.Connor.co.uk +http://www.Joel.co.kr +http://www.Tanek.co.uk +http://www.Luke.com +http://www.Eric.co.kr +http://www.Keith.co.uk +http://www.Giacomo.co.kr +http://www.Joseph.com +http://www.Walter.com +http://www.Barry.co.uk +http://www.Vladimir.com +http://www.Jerome.com +http://www.Derek.co.kr +http://www.Igor.co.kr +http://www.Damian.co.uk +http://www.Baxter.co.kr +http://www.Carter.com +http://www.Tate.com +http://www.Brody.com +http://www.Baxter.com +http://www.Cameron.co.kr +http://www.Oscar.com +http://www.Declan.co.uk +http://www.Carson.co.uk +http://www.Kevin.co.uk +http://www.Nero.co.kr +http://www.Abbot.co.kr +http://www.Wallace.co.uk +http://www.Calvin.co.uk +http://www.Logan.co.uk +http://www.Talon.co.kr +http://www.Graham.ca +http://www.Callum.ca +http://www.Phelan.co.uk +http://www.Amos.ca +http://www.James.com +http://www.Erich.com +http://www.Hedley.com +http://www.Amal.ca +http://www.Dolan.com +http://www.Jordan.co.uk +http://www.Zachery.ca +http://www.Richard.ca +http://www.Robert.ca +http://www.Hu.com +http://www.Travis.com +http://www.Lyle.ca +http://www.Warren.co.kr +http://www.Amir.ca +http://www.Oren.ca +http://www.Brennan.co.kr +http://www.Ralph.ca +http://www.Adrian.co.kr +http://www.Duncan.ca +http://www.Garrison.co.kr +http://www.Norman.co.kr +http://www.Dylan.com +http://www.Erasmus.ca +http://www.Theodore.ca +http://www.Wade.co.uk +http://www.Cody.ca +http://www.Dorian.co.uk +http://www.Boris.co.kr +http://www.Yoshio.co.kr +http://www.Felix.com +http://www.Len.com +http://www.Elliott.co.kr +http://www.Raphael.com +http://www.Mannix.ca +http://www.Len.co.kr +http://www.Macon.co.uk +http://www.Harlan.com +http://www.Cain.com +http://www.Brandon.co.kr +http://www.Jamal.com +http://www.Asher.ca +http://www.Porter.com +http://www.Hiram.co.kr +http://www.Branden.co.uk +http://www.Jasper.ca +http://www.Kermit.co.uk +http://www.Tucker.co.kr +http://www.Joel.ca +http://www.Theodore.co.kr +http://www.Drew.co.kr +http://www.Daniel.com +http://www.Christopher.com +http://www.Lucas.com +http://www.Cadman.ca +http://www.Cadman.co.uk +http://www.Simon.ca +http://www.Herrod.com +http://www.David.co.uk +http://www.Samuel.com +http://www.Raymond.com +http://www.Lance.com +http://www.Julian.co.kr +http://www.Quinlan.co.kr +http://www.Vladimir.co.kr +http://www.Chase.ca +http://www.Coby.co.kr +http://www.Bernard.com +http://www.Elliott.com +http://www.Nigel.co.kr +http://www.Carl.ca +http://www.Beau.com +http://www.Carson.co.kr +http://www.Dominic.co.kr +http://www.Lane.co.uk +http://www.Phelan.ca +http://www.Clarke.co.uk +http://www.Bruce.co.kr +http://www.Malcolm.ca +http://www.Steel.ca +http://www.Caesar.co.uk +http://www.Kamal.com +http://www.Ahmed.co.kr +http://www.Addison.co.kr +http://www.Abraham.com +http://www.Devin.ca +http://www.Simon.com +http://www.Reuben.com +http://www.Camden.co.kr +http://www.Alan.co.kr +http://www.Hall.ca +http://www.Nicholas.co.uk +http://www.Reed.co.uk +http://www.Francis.com +http://www.Troy.com +http://www.Alden.co.uk +http://www.Cooper.com +http://www.Oscar.ca +http://www.Lucius.ca +http://www.Emery.ca +http://www.Ulric.com +http://www.Vernon.com +http://www.Vincent.co.kr +http://www.Michael.co.uk +http://www.Byron.co.kr +http://www.Barclay.co.uk +http://www.Ezra.co.kr +http://www.Mark.com +http://www.Ira.ca +http://www.Clayton.com +http://www.Rogan.co.uk +http://www.Ali.ca +http://www.Conan.co.kr +http://www.Ryder.co.uk +http://www.Amal.co.uk +http://www.Jeremy.ca +http://www.Murphy.co.uk +http://www.Silas.co.uk +http://www.Micah.com +http://www.Noah.ca +http://www.Dennis.co.kr +http://www.Grady.co.kr +http://www.Jonah.com +http://www.Edward.co.kr +http://www.Kasimir.co.uk +http://www.Brady.com +http://www.Kareem.co.kr +http://www.Dustin.co.kr +http://www.Thaddeus.com +http://www.Colton.com +http://www.Nasim.co.uk +http://www.Russell.co.kr +http://www.Tyrone.co.uk +http://www.Seth.ca +http://www.Tucker.ca +http://www.Davis.ca +http://www.Jermaine.co.uk +http://www.Gil.co.uk +http://www.Isaac.ca +http://www.Harrison.com +http://www.Nicholas.com +http://www.Igor.co.uk +http://www.Conan.ca +http://www.Stone.com +http://www.Eric.com +http://www.Knox.co.uk +http://www.Leo.com +http://www.Elmo.ca +http://www.Brent.co.uk +http://www.Darius.com +http://www.Lucian.com +http://www.Mohammad.com +http://www.San.com +http://www.Juan.co.kr +http://www.Capistrano.co.kr +http://www.West.co.uk +http://www.Hollywood.com +http://www.Batavia.co.kr +http://www.Middletown.ca +http://www.Sturgis.co.kr +http://www.Bay.ca +http://www.St..co.uk +http://www.Louis.ca +http://www.Laredo.co.uk +http://www.Minneapolis.com +http://www.Prescott.co.kr +http://www.Stillwater.co.kr +http://www.Rome.ca +http://www.Gadsden.co.kr +http://www.Seattle.com +http://www.Glen.co.kr +http://www.Cove.ca +http://www.Waycross.ca +http://www.Wausau.com +http://www.Chula.co.uk +http://www.Vista.co.kr +http://www.Edmond.co.uk +http://www.Fort.co.uk +http://www.Collins.com +http://www.Carolina.com +http://www.Joplin.co.uk +http://www.Lodi.com +http://www.Scottsdale.com +http://www.Murfreesboro.co.uk +http://www.Sanford.com +http://www.Bend.co.kr +http://www.Antonio.com +http://www.Santa.co.kr +http://www.Cruz.co.uk +http://www.Elkhart.co.kr +http://www.Rapid.com +http://www.Dover.com +http://www.Battle.co.kr +http://www.Creek.ca +http://www.Peoria.com +http://www.Fond.co.uk +http://www.du.co.uk +http://www.Lac.co.kr +http://www.Newburgh.co.uk +http://www.Michigan.ca +http://www.Half.com +http://www.Moon.ca +http://www.Bay.co.kr +http://www.Bremerton.co.kr +http://www.Calumet.co.kr +http://www.Biddeford.com +http://www.Williamsport.co.kr +http://www.Titusville.co.kr +http://www.Huntington.com +http://www.Park.co.kr +http://www.Mateo.com +http://www.Denver.co.kr +http://www.Green.co.uk +http://www.River.com +http://www.Reedsport.co.uk +http://www.Hopkinsville.com +http://www.New.com +http://www.Bedford.co.uk +http://www.Augusta.ca +http://www.Marlborough.com +http://www.Austin.ca +http://www.Mequon.co.uk +http://www.Green.com +http://www.North.com +http://www.Platte.com +http://www.Greenfield.co.uk +http://www.Jenks.ca +http://www.Jeffersontown.ca +http://www.Cheyenne.co.uk +http://www.Philadelphia.co.kr +http://www.Chicopee.com +http://www.Hot.co.uk +http://www.Springs.co.uk +http://www.Rockford.ca +http://www.Marys.co.uk +http://www.Pico.com +http://www.Rivera.co.uk +http://www.Hermosa.ca +http://www.Beach.ca +http://www.Irwindale.co.kr +http://www.Baton.com +http://www.Rouge.com +http://www.Lawton.co.kr +http://www.Melrose.co.uk +http://www.Centennial.com +http://www.La.co.kr +http://www.Puente.ca +http://www.Kalispell.ca +http://www.Meriden.com +http://www.Harbor.co.kr +http://www.Oshkosh.com +http://www.Tupelo.co.uk +http://www.Agoura.co.kr +http://www.Hills.com +http://www.Baytown.ca +http://www.Lufkin.ca +http://www.Baldwin.ca +http://www.Myrtle.com +http://www.Midland.ca +http://www.Nanticoke.co.uk +http://www.Covington.com +http://www.Haven.co.uk +http://www.Helena.co.uk +http://www.Nome.com +http://www.Brookings.ca +http://www.Bend.co.uk +http://www.Rafael.com +http://www.Louisville.ca +http://www.Signal.com +http://www.Hill.com +http://www.Oil.co.uk +http://www.City.co.uk +http://www.Culver.com +http://www.Darlington.ca +http://www.Bellflower.com +http://www.Enid.co.kr +http://www.Pocatello.ca +http://www.New.ca +http://www.Madrid.com +http://www.Ithaca.co.uk +http://www.Clarksburg.co.uk +http://www.Wichita.co.uk +http://www.Falls.com +http://www.Kahului.ca +http://www.Pullman.com +http://www.Syracuse.co.uk +http://www.Kearns.com +http://www.Juan.ca +http://www.Capistrano.co.uk +http://www.Homer.co.kr +http://www.Lewiston.ca +http://www.Memphis.ca +http://www.Bossier.com +http://www.Grand.ca +http://www.Forks.com +http://www.Bakersfield.co.kr +http://www.Provo.com +http://www.Rafael.ca +http://www.Chino.com +http://www.Santa.com +http://www.Barbara.co.uk +http://www.Murrieta.ca +http://www.Palos.com +http://www.Verdes.com +http://www.Estates.com +http://www.North.co.kr +http://www.Chicago.co.uk +http://www.East.com +http://www.Lansing.com +http://www.The.co.uk +http://www.Dalles.co.uk +http://www.St..ca +http://www.Petersburg.co.kr +http://www.Gardena.co.kr +http://www.Chicago.co.kr +http://www.Heights.co.uk +http://www.Minnetonka.com +http://www.Waukegan.co.kr +http://www.Montpelier.com +http://www.Reno.ca +http://www.Hills.co.uk +http://www.Meridian.co.kr +http://www.Cody.co.kr +http://www.Rancho.co.kr +http://www.Cordova.co.uk +http://www.Jersey.co.kr +http://www.Newburyport.co.kr +http://www.Mandan.co.kr +http://www.Selma.com +http://www.ve.ca +http://www.Vacaville.ca +http://www.Fort.com +http://www.Worth.ca +http://www.of.co.kr +http://www.Industry.co.kr +http://www.Coatesville.com +http://www.Fremont.co.uk +http://www.Chickasha.co.kr +http://www.Broken.ca +http://www.Arrow.ca +http://www.Valley.com +http://www.Oro.co.kr +http://www.Valley.co.kr +http://www.Poughkeepsie.com +http://www.Downey.ca +http://www.Huron.co.uk +http://www.Greensburg.com +http://www.Cheyenne.ca +http://www.Fernando.co.uk +http://www.Nichols.com +http://www.Hills.ca +http://www.Lockport.co.uk +http://www.Flagstaff.com +http://www.Long.ca +http://www.Beach.co.kr +http://www.Cortland.ca +http://www.Sioux.ca +http://www.Falls.ca +http://www.Brookfield.co.uk +http://www.Merced.ca +http://www.Miami.com +http://www.Phenix.ca +http://www.Allentown.co.uk +http://www.Muncie.com +http://www.Belleville.ca +http://www.Wausau.co.uk +http://www.Longview.com +http://www.Healdsburg.ca +http://www.Buena.co.uk +http://www.Park.com +http://www.Knoxville.co.uk +http://www.Gardens.co.uk +http://www.Joliet.co.uk +http://www.New.co.uk +http://www.Kensington.com +http://www.Oxnard.com +http://www.Honolulu.co.uk +http://www.Fairmont.ca +http://www.Homer.co.uk +http://www.Norfolk.co.uk +http://www.Yuma.co.kr +http://www.Rialto.co.uk +http://www.San.co.kr +http://www.Luis.com +http://www.Obispo.co.kr +http://www.Diego.ca +http://www.Helena.co.kr +http://www.Fontana.com +http://www.Bethany.co.uk +http://www.Dalles.co.kr +http://www.Little.com +http://www.Rock.co.uk +http://www.Vancouver.com +http://www.Abilene.co.kr +http://www.Baldwin.co.uk +http://www.Park.ca +http://www.Laramie.ca +http://www.Philadelphia.co.uk +http://www.Beaumont.co.kr +http://www.Columbus.ca +http://www.Farmer.com +http://www.Carbondale.co.uk +http://www.Sandpoint.co.uk +http://www.Lynwood.co.uk +http://www.Easton.com +http://www.Easthampton.com +http://www.Berkeley.ca +http://www.Pawtucket.co.uk +http://www.Sun.com +http://www.Valley.ca +http://www.Riverside.ca +http://www.Bethany.ca +http://www.Chelsea.co.kr +http://www.Cedarburg.ca +http://www.Portland.co.uk +http://www.Chattanooga.ca +http://www.Tok.co.kr +http://www.Lowell.ca +http://www.Watertown.co.uk +http://www.Escondido.ca +http://www.Sault.ca +http://www.Ste..ca +http://www.Marie.co.kr +http://www.Ansonia.co.kr +http://www.Chico.co.uk +http://www.Frederiksted.ca +http://www.Webster.co.uk +http://www.Groves.co.kr +http://www.Chicopee.ca +http://www.Hammond.com +http://www.Jenks.co.kr +http://www.Stanton.co.uk +http://www.Johnstown.co.uk +http://www.London.com +http://www.Charleston.co.uk +http://www.Mobile.ca +http://www.Rochester.ca +http://www.Allis.ca +http://www.Blacksburg.co.uk +http://www.Albany.co.uk +http://www.Covina.co.kr +http://www.Industry.ca +http://www.Laurel.co.kr +http://www.Fernley.co.uk +http://www.Marquette.co.uk +http://www.Charleston.ca +http://www.Athens.co.kr +http://www.Sioux.co.kr +http://www.Falls.co.uk +http://www.Norwalk.co.uk +http://www.Las.co.uk +http://www.Vegas.com +http://www.Baltimore.co.kr +http://www.Lancaster.ca +http://www.Woodward.co.kr +http://www.Mentor.ca +http://www.Tucson.ca +http://www.Utica.co.uk +http://www.Spokane.co.kr +http://www.Auburn.co.kr +http://www.Hills.co.kr +http://www.Livonia.ca +http://www.Hampton.ca +http://www.Compton.com +http://www.Spartanburg.co.uk +http://www.Brea.co.uk +http://www.Dixon.co.uk +http://www.Yakima.ca +http://www.Lynwood.ca +http://www.Georgetown.com +http://www.Pittsburgh.com +http://www.Caguas.co.uk +http://www.Visalia.co.kr +http://www.Culver.co.kr +http://www.Brookfield.com +http://www.Phoenix.co.uk +http://www.Hutchinson.ca +http://www.Texarkana.co.uk +http://www.South.co.uk +http://www.Portland.com +http://www.Kenner.co.kr +http://www.Provo.ca +http://www.Liberal.ca +http://www.Vineland.com +http://www.Saipan.com +http://www.Williston.com +http://www.Vail.co.kr +http://www.Garland.co.kr +http://www.Tallahassee.co.kr +http://www.Shelton.ca +http://www.Cleveland.com +http://www.Ventura.co.kr +http://www.Gettysburg.co.kr +http://www.Medford.co.kr +http://www.Brookings.co.uk +http://www.Cohoes.com +http://www.Ogden.com +http://www.Grand.co.uk +http://www.Rapids.ca +http://www.Claremont.co.kr +http://www.of.com +http://www.Parkersburg.ca +http://www.Superior.co.uk +http://www.Florence.co.kr +http://www.New.co.kr +http://www.Bedford.co.kr +http://www.Beverly.co.uk +http://www.Independence.com +http://www.Westlake.ca +http://www.Village.co.uk +http://www.Angelo.co.uk +http://www.Schenectady.co.uk +http://www.Nogales.ca +http://www.Cerrito.ca +http://www.Monrovia.co.uk +http://www.Cambridge.co.uk +http://www.Concord.ca +http://www.Greensburg.co.uk +http://www.Bradford.ca +http://www.Brigham.co.kr +http://www.Pasadena.co.uk +http://www.Wisconsin.ca +http://www.Rapids.co.kr +http://www.Warwick.ca +http://www.Starkville.co.uk +http://www.Tupelo.co.kr +http://www.Enid.com +http://www.Idabel.co.kr +http://www.Amesbury.co.uk +http://www.Knoxville.com +http://www.Baton.co.uk +http://www.Rouge.ca +http://www.Hannibal.co.uk +http://www.News.ca +http://www.Dickinson.co.kr +http://www.Lockport.co.kr +http://www.Manitowoc.ca +http://www.Oneonta.com +http://www.Moscow.ca +http://www.Washington.co.kr +http://www.Hastings.co.uk +http://www.Lake.com +http://www.Forest.co.kr +http://www.Anaheim.co.uk +http://www.Baltimore.co.uk +http://www.Cape.com +http://www.May.co.kr +http://www.Daly.ca +http://www.Idabel.ca +http://www.Dover.ca +http://www.Garden.ca +http://www.Grove.com +http://www.Birmingham.co.kr +http://www.Dayton.ca +http://www.Paso.com +http://www.Covina.ca +http://www.Calabasas.co.uk +http://www.Marshfield.co.kr +http://www.Guthrie.co.kr +http://www.Yonkers.com +http://www.Jackson.co.kr +http://www.Lower.co.uk +http://www.Burrell.co.kr +http://www.York.com +http://www.Ogdensburg.ca +http://www.Cairo.com +http://www.College.com +http://www.Station.co.kr +http://www.Deadwood.co.uk +http://www.Orford.co.kr +http://www.Cairo.co.uk +http://www.South.com +http://www.Gate.com +http://www.Biloxi.co.kr +http://www.Tempe.ca +http://www.Galveston.co.uk +http://www.Bloomington.com +http://www.Turlock.com +http://www.Hawthorne.co.kr +http://www.Delta.co.uk +http://www.Junction.com +http://www.Burbank.co.kr +http://www.Laconia.co.uk +http://www.Keene.co.kr +http://www.Superior.co.kr +http://www.Peabody.co.uk +http://www.Pocatello.co.uk +http://www.Shamokin.ca +http://www.Schaumburg.co.uk +http://www.Dunkirk.co.kr +http://www.Columbia.co.uk +http://www.Warwick.com +http://www.Dover.co.uk +http://www.Natchitoches.co.kr +http://www.Lakeland.com +http://www.Stanton.com +http://www.Athens.co.uk +http://www.Worcester.co.uk +http://www.Kenner.com +http://www.Cerrito.co.kr +http://www.Pittston.co.uk +http://www.Mobile.co.uk +http://www.Bristol.co.kr +http://www.Gabriel.com +http://www.Kokomo.co.kr +http://www.Joliet.com +http://www.Temple.com +http://www.Half.co.uk +http://www.Moon.co.kr +http://www.Santa.ca +http://www.Rosa.ca +http://www.Brookfield.co.kr +http://www.Las.co.kr +http://www.Cruces.com +http://www.Muncie.ca +http://www.Monterey.co.uk +http://www.Villa.co.kr +http://www.Laconia.ca +http://www.Elmira.co.kr +http://www.Adams.com +http://www.Beverly.ca +http://www.Tempe.com +http://www.Aurora.com +http://www.Burlington.co.uk +http://www.Biloxi.co.uk +http://www.Malibu.co.kr +http://www.Woburn.com +http://www.Midland.com +http://www.Wichita.co.kr +http://www.Rafael.co.kr +http://www.Shamokin.co.uk +http://www.Paducah.co.uk +http://www.Hartford.com +http://www.Waltham.com +http://www.La.ca +http://www.Puente.co.kr +http://www.Sharon.com +http://www.Hartford.co.uk +http://www.Great.ca +http://www.Cleveland.co.uk +http://www.Mirada.ca +http://www.Saint.co.kr +http://www.Albans.co.kr +http://www.Atwater.co.kr +http://www.Nanticoke.co.kr +http://www.Duarte.co.kr +http://www.Fredericksburg.com +http://www.Phoenix.ca diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/accountList b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/accountList new file mode 100644 index 00000000..8fb7f8ea --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/accountList @@ -0,0 +1,600 @@ +urabitur.vel.lectus@orcilobortis.com +Aenean.gravida.nunc@Nullatemporaugue.edu +Duis@auctorveliteget.edu +erat.volutpat@Mauris.com +vel@Nullamfeugiat.edu +Aliquam@at.edu +metus.facilisis.lorem@euligulaAenean.ca +sed.tortor@Morbi.edu +lobortis@Integervulputaterisus.org +molestie.pharetra.nibh@turpisegestas.org +magna.malesuada.vel@Sedid.edu +sit.amet.dapibus@varius.com +eu.tellus@per.ca +in@aliquamerosturpis.ca +ultricies@mattisInteger.edu +Donec@Integerid.com +nulla@Cras.org +luctus.Curabitur@orci.com +ultrices.iaculis@nequenonquam.com +scelerisque.neque.sed@ametultriciessem.edu +orci.Ut.semper@montesnascetur.org +dolor.elit@cursus.ca +dui.semper@eratvitae.edu +nascetur@metusVivamuseuismod.edu +amet@ut.ca +erat.in@magnaPhasellusdolor.org +quis.diam.luctus@ut.org +tempus.lorem.fringilla@Phasellus.ca +placerat.velit.Quisque@Phasellus.edu +eget@vestibulumnec.ca +dapibus.quam@tempusloremfringilla.edu +odio.sagittis.semper@sodales.org +Nunc.mauris@vulputatenisisem.com +ullamcorper.velit@faucibuslectusa.org +aliquet.Proin.velit@risusatfringilla.ca +interdum@venenatislacus.edu +adipiscing@sit.ca +mauris@nectellusNunc.com +nunc.ac@Nullamlobortis.ca +erat.eget.ipsum@amagna.edu +purus@etnetus.com +tempus.eu@Sedcongue.ca +tincidunt.pede@Vestibulum.edu +feugiat.tellus.lorem@Maecenas.edu +sagittis.lobortis@Aenean.ca +Fusce.aliquet.magna@Crasvehicula.ca +penatibus.et.magnis@eget.org +Aliquam.nisl@neceuismodin.com +a.facilisis@arcuVestibulum.ca +fermentum.metus.Aenean@volutpatNullafacilisis.org +lobortis.mauris.Suspendisse@a.org +nunc.id.enim@miloremvehicula.com +Class.aptent@commodoipsumSuspendisse.org +mauris.blandit@suscipit.org +nulla.Integer.vulputate@enimconsequatpurus.org +sed.sem.egestas@fermentum.org +orci.luctus.et@nunc.org +lorem.eu.metus@semmagna.com +Mauris.molestie.pharetra@feliseget.edu +dictum@velarcuCurabitur.com +rhoncus@Donecegestas.com +primis.in.faucibus@nec.ca +magna.a.neque@euerosNam.ca +convallis.dolor@dictumsapienAenean.org +magna@sempertellusid.ca +porttitor@nec.com +Donec.sollicitudin.adipiscing@vestibulummassa.org +non.vestibulum.nec@auctorveliteget.edu +at.libero.Morbi@turpis.edu +Quisque@Donec.edu +torquent.per.conubia@luctus.edu +nonummy@Phasellusdolorelit.ca +metus.In@fames.edu +vel.lectus.Cum@Nulla.org +at@enimcommodo.edu +sagittis.augue@eget.ca +aliquet@iaculis.edu +nec@ipsum.edu +gravida.molestie.arcu@pellentesque.com +Aliquam.vulputate@molestie.ca +eget.venenatis.a@nibh.com +Proin.ultrices@Aenean.com +egestas@odiotristiquepharetra.com +arcu.Vestibulum.ut@Fusce.ca +mauris@blandit.edu +vulputate.nisi.sem@luctuset.com +Sed@est.org +turpis.egestas@semperpretium.com +sagittis@ullamcorper.edu +Curabitur.consequat@elitpellentesquea.ca +sed.pede@Duisami.edu +tempus@sem.edu +turpis.nec@liberoDonec.edu +luctus.ipsum@arcuimperdietullamcorper.ca +eget@nibhAliquamornare.edu +metus.Aenean.sed@metusurnaconvallis.edu +feugiat.metus.sit@orciconsectetuereuismod.ca +dictum.eu.placerat@adipiscingelit.edu +interdum.Sed@placerataugueSed.edu +tristique.neque.venenatis@elit.org +metus@semmollisdui.edu +placerat.orci.lacus@pedeCrasvulputate.com +placerat.orci.lacus@facilisisfacilisis.com +dapibus.id@ultrices.org +penatibus.et@aodiosemper.org +metus@Duis.com +nulla.Integer.urna@mus.edu +eu.nibh@maurissitamet.com +sed@Sed.org +eros.Proin@ultricies.org +Aliquam.erat.volutpat@consectetuermaurisid.ca +natoque.penatibus@duiSuspendisseac.ca +natoque@mauris.com +feugiat.non@magnisdisparturient.edu +amet@fermentum.ca +Proin.non.massa@pedeacurna.edu +consectetuer.euismod@erat.com +tincidunt.nibh.Phasellus@eget.org +elementum.purus.accumsan@Quisque.org +mi.lacinia@eutellus.edu +sed.pede@feliseget.ca +Donec.dignissim@nequevitae.org +tristique.senectus@loremfringilla.edu +dolor.tempus.non@Donec.com +egestas.lacinia.Sed@tellusimperdiet.edu +commodo.hendrerit.Donec@Sedmalesuadaaugue.edu +id.erat.Etiam@blanditmattisCras.ca +dui.Cras@diamPellentesque.org +euismod@tempuslorem.com +pellentesque.a@vel.edu +Nullam.nisl@elitEtiamlaoreet.com +est.arcu.ac@utaliquamiaculis.edu +at.pede.Cras@montes.com +facilisi.Sed.neque@milorem.com +elit.sed.consequat@MorbimetusVivamus.com +mi.felis@lobortisquama.org +sagittis@ProinmiAliquam.org +fermentum.vel@a.ca +faucibus.Morbi@maurisSuspendisse.ca +porttitor.interdum.Sed@accumsan.ca +interdum.Sed@ProinvelitSed.ca +auctor@Fuscediamnunc.edu +vestibulum.nec@Pellentesqueultriciesdignissim.ca +pharetra.Nam@sedpedenec.edu +at.lacus.Quisque@nec.com +auctor@felisullamcorperviverra.ca +aliquet.odio.Etiam@diam.edu +vitae@ProindolorNulla.org +pellentesque@commodoatlibero.com +porttitor.eros@Quisque.ca +primis@etrutrumeu.org +faucibus.orci@massaMaurisvestibulum.edu +ac.libero@mollisduiin.ca +fringilla@fermentumvelmauris.org +dolor.sit@pedeNuncsed.ca +orci@ligula.edu +Quisque@sagittissemper.edu +Donec.non.justo@pellentesquetellussem.edu +molestie.dapibus.ligula@urnaNunc.edu +sed@amalesuadaid.org +Sed.malesuada@Curae;Phasellusornare.com +ligula.Aliquam@id.org +Quisque@ipsum.edu +a@Quisquepurus.com +convallis.in.cursus@acturpisegestas.org +ut@ipsum.com +turpis@atarcuVestibulum.ca +arcu@Aliquam.edu +ridiculus.mus.Donec@enimnonnisi.com +dui@penatibus.com +erat.Vivamus@Nunc.com +non.luctus.sit@ametanteVivamus.com +purus@sempercursusInteger.ca +rhoncus.Nullam.velit@ac.org +elit@Fuscefermentum.ca +vitae.posuere.at@enim.ca +lobortis.mauris@mi.ca +dui.augue.eu@tellusnon.ca +eu.metus.In@laciniamattisInteger.ca +in.hendrerit.consectetuer@nec.org +nonummy.Fusce.fermentum@Vivamusmolestie.com +Curabitur@tempusscelerisquelorem.edu +fames.ac@massaVestibulum.ca +penatibus.et@lacuspede.edu +Praesent@eu.com +Proin.mi.Aliquam@eget.ca +in.felis@consequat.org +tempor.diam@porttitorerosnec.org +ut.dolor.dapibus@massaMaurisvestibulum.ca +nunc.Quisque@Integermollis.ca +dui.semper.et@sedconsequat.org +quis.urna.Nunc@convallisin.ca +non.bibendum@est.com +euismod.mauris.eu@arcuCurabitur.org +nibh@eratvel.org +sit@metusvitae.com +arcu.Curabitur@amagnaLorem.edu +aliquet@luctusetultrices.com +gravida.Praesent.eu@lobortisquispede.ca +dolor@Donecdignissimmagna.edu +fermentum.fermentum.arcu@cubiliaCurae;Donec.com +ullamcorper@sitamet.edu +erat@egestasa.ca +In.faucibus.Morbi@cursus.org +In@quamvelsapien.com +ac.fermentum@aliquetProinvelit.edu +eros@elitpharetra.edu +eget.lacus.Mauris@necmollisvitae.ca +sagittis@penatibusetmagnis.org +dapibus.id.blandit@Integersemelit.edu +Fusce.mollis@vulputateullamcorpermagna.org +hendrerit@litoratorquent.ca +orci.Ut.sagittis@non.com +nunc@Sedeget.edu +amet.ornare@maurissagittisplacerat.ca +est@accumsaninterdum.com +tristique.ac@ProinvelitSed.com +pharetra@venenatislacusEtiam.ca +lorem.ac.risus@elementumat.org +conubia.nostra.per@egetnisi.com +egestas.Aliquam@pharetraQuisqueac.org +Nullam.enim.Sed@dictum.org +vel.pede@litoratorquentper.edu +odio.a@felisullamcorperviverra.edu +Nulla.facilisi.Sed@nibhAliquam.com +Curabitur.dictum.Phasellus@eleifendnunc.org +nec@dolorsitamet.com +eu.ultrices@lobortistellusjusto.org +eu.eleifend@sollicitudinorci.com +mi.fringilla@justofaucibuslectus.edu +Duis@maurisSuspendisse.org +porttitor.interdum@leoelementumsem.ca +turpis.non@porttitorerosnec.ca +sit.amet@Integerurna.com +Phasellus@turpisnec.com +cursus@ac.org +sollicitudin@atpretiumaliquet.com +posuere@elitAliquamauctor.com +nulla.Cras.eu@acmetus.ca +luctus.ipsum@Maecenasmi.org +diam.Pellentesque.habitant@dolorFusce.org +parturient.montes.nascetur@ligulaDonecluctus.com +purus@dolorsit.org +torquent.per.conubia@magnaatortor.com +ut@maurisipsumporta.edu +ornare.facilisis@dolorsit.edu +justo.nec.ante@nostra.com +Fusce.diam.nunc@montesnasceturridiculus.org +lorem.eget@elitEtiamlaoreet.ca +tincidunt.orci@luctus.com +dictum.ultricies@DonecegestasAliquam.com +et.ipsum.cursus@torquentperconubia.org +non.lorem.vitae@mollisvitae.com +congue.a.aliquet@enimmi.ca +molestie@veliteusem.edu +mauris.sit@quamdignissimpharetra.com +egestas.a.dui@penatibusetmagnis.edu +magna.tellus@dolorquamelementum.ca +Duis.risus@elitafeugiat.edu +vitae.diam@Inscelerisque.org +at@nuncQuisqueornare.org +mattis.semper.dui@ornareplaceratorci.edu +Duis@vehicula.com +Donec.consectetuer@lectusjustoeu.org +mauris.id.sapien@ipsumSuspendisse.com +sem.ut.cursus@lorem.ca +a.purus.Duis@mollisduiin.com +mollis.dui@Praesenteunulla.com +orci@eu.org +gravida.Aliquam@aptenttaciti.edu +erat@ornareplaceratorci.ca +fringilla@NullamenimSed.ca +semper.egestas.urna@id.edu +morbi.tristique@enimnectempus.edu +justo.Praesent@parturientmontes.ca +et@nislQuisquefringilla.edu +sed@porttitor.edu +eget.dictum.placerat@facilisisSuspendissecommodo.ca +auctor.velit@dui.edu +urna.Nullam@egestas.ca +feugiat@dapibusid.com +commodo@odio.edu +risus.quis@idmagnaet.edu +enim.gravida.sit@condimentumDonec.com +rhoncus@risus.ca +varius@magnisdis.edu +porttitor@turpis.ca +cursus.et@idlibero.edu +sollicitudin.a.malesuada@arcu.org +Praesent.luctus@vulputate.com +vulputate.eu@dictumaugue.org +elementum.lorem@turpisegestas.edu +ac.urna@disparturient.org +Fusce.aliquet@scelerisquesed.org +habitant.morbi@liberoettristique.com +ac@turpisNullaaliquet.edu +Suspendisse@Inscelerisque.com +nisl.sem.consequat@eleifend.edu +neque.Nullam@dolor.ca +odio.vel.est@turpisvitaepurus.com +dis.parturient@velit.com +sed.libero.Proin@orciconsectetuereuismod.ca +Maecenas.mi.felis@Cumsociisnatoque.org +pede@montesnasceturridiculus.ca +ac@AeneanmassaInteger.ca +quam.Pellentesque@egetmassa.edu +vulputate.posuere.vulputate@auctorMauris.edu +leo@lacusQuisqueimperdiet.org +pede.blandit.congue@Suspendissesed.edu +tempus@Maecenaslibero.com +cursus@nec.com +ipsum@Integer.ca +massa@atpedeCras.org +luctus@portaelit.org +Donec@laciniamattis.edu +aliquam.eu@atliberoMorbi.edu +at@quamvel.edu +orci.adipiscing.non@adipiscingenim.edu +pede.Nunc@antelectus.ca +dictum@idliberoDonec.com +et.malesuada@nuncQuisqueornare.org +pellentesque.a.facilisis@placeratorcilacus.com +euismod.est.arcu@euodio.ca +accumsan.sed@fermentumvel.ca +nibh.enim@nequesedsem.ca +Nunc.ac.sem@Duiscursus.org +interdum.enim.non@atfringilla.edu +vel@Suspendissesagittis.com +Nunc.commodo.auctor@Donec.edu +tortor@egestas.com +accumsan@Curabitursedtortor.ca +fringilla.cursus.purus@nonluctussit.com +Maecenas@nonlacinia.edu +auctor.velit@nequetellusimperdiet.com +congue@Nullam.ca +pellentesque@Fusce.ca +placerat.augue.Sed@Curabiturvellectus.com +Etiam.imperdiet@Pellentesque.edu +dapibus.id@rhoncusid.edu +ullamcorper.velit@duiquisaccumsan.org +luctus@magnaPhasellus.edu +magna@blanditat.ca +mollis.vitae@posuere.ca +ut@velarcu.edu +Etiam.vestibulum@duiFusce.edu +Proin.vel.nisl@acfacilisisfacilisis.ca +eget.mollis@interdumNuncsollicitudin.com +vitae.purus.gravida@aauctornon.org +Donec.at.arcu@mauriserateget.ca +cursus.Integer.mollis@dignissimlacusAliquam.org +sit.amet.luctus@Utsagittis.ca +egestas.rhoncus.Proin@temporarcu.ca +non.egestas@cursusIntegermollis.edu +vulputate@accumsan.edu +magna.tellus.faucibus@risusDuisa.com +Cras.dolor.dolor@penatibuset.ca +nisi.Cum.sociis@felisDonectempor.ca +ac.ipsum.Phasellus@eros.ca +aliquet@imperdieteratnonummy.org +elementum.lorem.ut@Donecfeugiat.org +adipiscing.elit@nondapibus.ca +Cras.sed.leo@rhoncusid.edu +Donec.nibh@necdiam.org +Phasellus.libero@elitfermentumrisus.edu +mollis.lectus@urnajusto.org +gravida@bibendumfermentum.com +adipiscing@malesuadavel.ca +arcu@neque.com +vulputate@nibhPhasellus.com +nulla@lectusante.com +convallis.ante@auctor.ca +nisl.Quisque.fringilla@lorem.edu +dui.Cum@metusIn.com +semper@dapibusrutrum.edu +tristique@ridiculus.org +mi.lacinia@diam.org +dignissim.pharetra@non.edu +libero@mollisvitae.ca +ultricies.adipiscing.enim@Inmi.ca +lorem.vehicula.et@Morbi.edu +egestas.ligula@loremvehiculaet.edu +odio.Nam@vitaerisusDuis.edu +luctus.et@egestaslaciniaSed.ca +mi.lacinia.mattis@est.edu +Phasellus@nuncrisusvarius.com +Vivamus.non.lorem@egetlacusMauris.com +ut.eros.non@portaelita.edu +Cras.eu.tellus@vel.edu +posuere@purusMaecenas.ca +orci@sitametdapibus.org +dis.parturient.montes@duinectempus.ca +neque@Suspendisse.ca +Suspendisse.commodo@nuncsed.org +Mauris.blandit@quam.ca +neque.tellus@ultricies.edu +purus@a.org +tristique.neque.venenatis@velit.com +tempor@eu.com +nulla.vulputate.dui@urna.edu +pede.et.risus@dolor.org +mollis.dui@anteiaculis.edu +arcu.Nunc.mauris@Aeneanegetmagna.ca +consequat.dolor@sollicitudinadipiscingligula.edu +augue.id.ante@tempusnon.org +Phasellus.nulla@aliquamarcu.edu +nunc.Quisque.ornare@incursuset.org +purus@vitaediam.ca +urna.Nunc@ornare.com +risus@Phasellusdapibus.com +consectetuer.adipiscing.elit@eleifendnec.org +amet@urnaconvallis.ca +Suspendisse.eleifend@felisullamcorper.com +Duis.elementum@portaelita.edu +orci.Ut.sagittis@atlacusQuisque.ca +a@a.edu +interdum.Sed@lectus.org +a.enim.Suspendisse@auctor.ca +gravida@faucibus.com +mollis.Integer@Phasellusinfelis.ca +nunc.ac.mattis@lectuspede.ca +dictum.eu@Nullam.ca +Nunc@Aliquamerat.org +sem@diamloremauctor.com +lectus.quis@magnaa.edu +Donec.est@malesuada.com +Vivamus@vulputate.edu +Quisque@Proinnisl.edu +dui.quis@eratnonummyultricies.ca +nulla.magna@porttitor.edu +a.nunc@aliquamiaculis.com +nec.luctus.felis@sedsapien.ca +Curabitur.dictum.Phasellus@urna.org +sed.leo@utdolor.org +lectus.pede.ultrices@eu.edu +ligula.Aliquam.erat@acfermentumvel.org +Integer@scelerisqueneque.com +placerat.orci.lacus@faucibusidlibero.org +Nullam.suscipit@ipsumCurabiturconsequat.ca +Mauris.eu@ultrices.com +eget.metus.In@consectetueradipiscing.ca +ac.fermentum.vel@pretium.ca +accumsan.neque.et@elementum.ca +eu.tellus@liberonec.edu +dolor@pedeNuncsed.ca +vestibulum.lorem@et.ca +pretium.aliquet@NullafacilisiSed.org +feugiat.non.lobortis@dictumcursus.org +a.enim@Sedpharetra.org +sem.eget@placerat.org +dictum@veliteusem.ca +eget.volutpat@lectussit.edu +semper.dui@vulputatemauris.org +vestibulum@malesuadavel.org +euismod@mitemporlorem.edu +Vestibulum.ante@Crassed.edu +Proin.sed@nequeNullamut.com +lobortis.ultrices.Vivamus@sedliberoProin.org +nonummy.ipsum.non@Nulla.org +dis.parturient.montes@tellus.org +nec.metus@Phasellusdolorelit.org +dictum@vestibulumloremsit.edu +Integer.aliquam.adipiscing@purusmaurisa.edu +ac@sodaleseliterat.com +nisl.Quisque@quisaccumsan.ca +risus.quis.diam@arcuet.org +quis@pulvinararcu.edu +metus@elitCurabitursed.ca +mollis@sagittisaugueeu.org +quis.pede.Suspendisse@pedenec.org +Ut.tincidunt.vehicula@arcu.com +eu@sodaleseliterat.edu +sollicitudin.commodo@porttitorvulputateposuere.ca +habitant.morbi.tristique@lacus.edu +lacus.Cras.interdum@nequeMorbiquis.ca +Ut.tincidunt@turpisegestasFusce.com +mauris.erat@sed.ca +interdum.Nunc.sollicitudin@molestiearcuSed.org +adipiscing.elit.Aliquam@quamdignissimpharetra.ca +penatibus.et@tortordictumeu.com +a@ullamcorperDuis.com +orci@adipiscingfringillaporttitor.org +Suspendisse@vulputatemauris.edu +Duis@Vivamus.ca +pede.Nunc.sed@sitametdapibus.ca +Phasellus.at.augue@vulputatedui.ca +at.fringilla.purus@facilisiseget.ca +montes@convallisconvallis.com +In@nullaIntincidunt.ca +nec@Vivamus.edu +hendrerit.a.arcu@a.com +augue.malesuada.malesuada@viverraMaecenas.com +Sed.id@vitae.org +ac.arcu.Nunc@diam.com +fringilla.ornare@pellentesquea.com +ut.nulla@euultrices.org +aliquam.enim@turpisIn.com +quam@semmagnanec.edu +Donec@id.org +turpis.Aliquam.adipiscing@Integersemelit.org +sit@neque.ca +Integer.mollis.Integer@ultricesiaculis.org +at.pretium.aliquet@lorem.com +ridiculus@ut.edu +Morbi@pharetraQuisque.org +turpis.Aliquam.adipiscing@mattisIntegereu.edu +nunc.Quisque@nasceturridiculusmus.org +Vivamus.nisi@ametconsectetueradipiscing.com +pede@sociis.com +parturient.montes@facilisisnonbibendum.ca +enim@magnis.ca +Cum.sociis@quam.com +congue@eratneque.com +faucibus.ut.nulla@Aeneanegetmagna.com +tincidunt@ipsumDonec.edu +luctus.et.ultrices@utipsumac.edu +auctor.velit.eget@fermentumconvallis.org +neque.Nullam@ut.org +Donec.non.justo@nisiAenean.com +mauris.aliquam.eu@ullamcorpervelitin.org +dolor.nonummy@luctuset.com +Donec.porttitor.tellus@Donecluctusaliquet.com +sodales@Donecluctus.edu +risus@Nunclectus.org +eget.metus@blandit.edu +metus.facilisis.lorem@sit.com +nonummy.ac.feugiat@sitamet.org +neque.Nullam.nisl@Curabitur.edu +egestas.Sed@tinciduntpede.org +libero.mauris.aliquam@estacmattis.com +cursus.et@Donecest.org +tincidunt.neque@estNunc.edu +id.ante.Nunc@IntegerurnaVivamus.edu +mollis.Phasellus@adipiscingenim.org +Quisque.fringilla@vehiculaPellentesque.org +mauris@nonummyac.org +nisl.Maecenas.malesuada@quistristique.edu +lectus@acnulla.org +et.magnis@porttitor.edu +enim@vitae.ca +neque.Nullam.nisl@ligulaNullam.org +gravida@anteblanditviverra.com +mauris.id@porttitorvulputateposuere.edu +gravida.Praesent.eu@felisorciadipiscing.ca +non.leo@laciniaat.com +ipsum.Curabitur@acnulla.org +Proin.sed@pede.ca +sit.amet.consectetuer@dolorFusce.org +interdum.Nunc.sollicitudin@elit.ca +tellus@ut.edu +fermentum.metus.Aenean@sit.com +metus.In@tincidunt.ca +hendrerit.neque.In@Duisvolutpat.com +Duis@egetipsum.edu +ultrices@tincidunt.org +velit.in.aliquet@nunc.ca +augue.eu@duiaugue.com +congue.a.aliquet@metuseu.edu +erat@Namligulaelit.org +volutpat@tempor.org +amet.ultricies@Nullam.edu +inceptos.hymenaeos.Mauris@Naminterdumenim.edu +dictum.augue@Aliquam.edu +egestas.a@diamProin.edu +imperdiet.nec@atvelitCras.org +urna.Vivamus.molestie@Loremipsum.ca +molestie@diamlorem.ca +sem.Nulla.interdum@odio.com +odio@loremloremluctus.com +ac@viverraMaecenas.com +Nunc.ac@Namporttitor.edu +Integer.tincidunt.aliquam@auctornon.edu +Vivamus.euismod@Donecnibh.org +dictum@egestasrhoncusProin.edu +purus@aliquamadipiscing.org +sapien.gravida@massa.com +quis.accumsan@dui.ca +mollis.lectus@Loremipsumdolor.edu +lobortis@convallisest.org +penatibus@elitdictum.ca +ullamcorper.viverra@Maecenasmi.com +suscipit@porttitorscelerisque.org +scelerisque.mollis.Phasellus@Pellentesque.edu +Proin.vel.nisl@sedsemegestas.org +Proin@velit.com +sed.hendrerit@justo.edu +id.blandit.at@massaQuisque.com +placerat.velit.Quisque@taciti.ca +convallis.dolor.Quisque@nuncnullavulputate.edu +montes.nascetur.ridiculus@atpede.org +Suspendisse@aliquetsem.org +Vestibulum.ante.ipsum@Sedcongue.org +magna.nec.quam@dictum.ca +ante.Vivamus@viverraDonec.com +montes@maurisInteger.edu +lorem.Donec@dolorDonecfringilla.org +ad@quisurna.com +nulla@erat.edu +interdum.ligula.eu@pharetrautpharetra.ca +et.rutrum.non@utmolestiein.edu +ligula.consectetuer@Etiamligula.com diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/filter.java b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/filter.java new file mode 100644 index 00000000..6fbd604d --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/filter.java @@ -0,0 +1,47 @@ +import java.io.*; +import java.util.*; + +public class filter +{ + public static void main(String[] args) + { + + ArrayList wordpool = new ArrayList(); + String line; + int cnt=0; + + try { + BufferedReader br = new BufferedReader(new FileReader(args[0])); + BufferedWriter bw = new BufferedWriter(new FileWriter(args[1])); + + while((line = br.readLine()) != null) { + + + StringTokenizer stk = new StringTokenizer(line); + + while(stk.hasMoreTokens()) + { + String word = stk.nextToken(); + + // if word is not in wordpool + if(!wordpool.contains(word)) + { + wordpool.add(word); + bw.write(word); + cnt++; + bw.newLine(); + } + } + } + br.close(); + bw.close(); + }catch(IOException e) { + System.out.println(e); + } + System.out.println("Number of new Words = " + cnt); + } +} + + + + diff --git a/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/gen.c b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/gen.c new file mode 100644 index 00000000..0b21fbae --- /dev/null +++ b/Robust/src/Benchmarks/Prefetch/ManualPrefetch/SpamFilter/emails/gen.c @@ -0,0 +1,197 @@ +#include +#include +#include +#include + +#define WORD_FILE "wordList1" +#define URL_FILE "URLList" +#define ACCOUNT_FILE "accountList" +#define FILE_NAME "email" +#define NUM_EMAIL 500 + +char** readList(char* fileName,int* num); +void generateEmails(int,char**,int,char**,int,char**,int,char*); +void freeList(char**,int); +void writeString(FILE* newFile,char* prefix,char** list,int size_list,int* counter); +void shuffle(char** list,int size_int); + +int main() +{ + int num_email = NUM_EMAIL; // how many emails do you need? + char** wordList; + char** urlList; + char** accountList; + int word_num; + int url_num; + int account_num; + + wordList = readList(WORD_FILE,&word_num); + urlList = readList(URL_FILE,&url_num); + accountList = readList(ACCOUNT_FILE,&account_num); + + generateEmails(NUM_EMAIL,wordList,word_num,urlList,url_num,accountList,account_num,FILE_NAME); + + freeList(wordList,word_num); + freeList(urlList,url_num); + freeList(accountList,account_num); + + return 0; +} + +void freeList(char** list,int num) +{ + int i; + + for(i=0;i