diff --git a/Projects/p3-skeleton/__MACOSX/._cs448p3 b/Projects/p3-skeleton/__MACOSX/._cs448p3 new file mode 100755 index 0000000..1c29b35 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/._cs448p3 differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._.gitignore b/Projects/p3-skeleton/__MACOSX/cs448p3/._.gitignore new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._.gitignore differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._Makefile b/Projects/p3-skeleton/__MACOSX/cs448p3/._Makefile new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._Makefile differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._lib b/Projects/p3-skeleton/__MACOSX/cs448p3/._lib new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._lib differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._pom.xml b/Projects/p3-skeleton/__MACOSX/cs448p3/._pom.xml new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._pom.xml differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._solution.txt b/Projects/p3-skeleton/__MACOSX/cs448p3/._solution.txt new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._solution.txt differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/._src b/Projects/p3-skeleton/__MACOSX/cs448p3/._src new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/._src differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/._main b/Projects/p3-skeleton/__MACOSX/cs448p3/src/._main new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/._main differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/._test b/Projects/p3-skeleton/__MACOSX/cs448p3/src/._test new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/._test differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/._java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/._java new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/._java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._global b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._global new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._global differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._relop b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._relop new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/._relop differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrOperator.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrOperator.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrOperator.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrType.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrType.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._AttrType.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Convert.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Convert.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Convert.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._GlobalConst.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._GlobalConst.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._GlobalConst.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Minibase.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Minibase.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Minibase.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Page.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Page.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._Page.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._PageId.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._PageId.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._PageId.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._RID.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._RID.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._RID.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SearchKey.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SearchKey.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SearchKey.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SortKey.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SortKey.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/global/._SortKey.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._FileScan.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._FileScan.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._FileScan.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashJoin.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashJoin.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashJoin.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashTableDup.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashTableDup.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._HashTableDup.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._IndexScan.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._IndexScan.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._IndexScan.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Iterator.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Iterator.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Iterator.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._KeyScan.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._KeyScan.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._KeyScan.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Predicate.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Predicate.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Predicate.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Projection.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Projection.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Projection.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Schema.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Schema.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Schema.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Selection.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Selection.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Selection.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._SimpleJoin.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._SimpleJoin.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._SimpleJoin.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Tuple.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Tuple.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/main/java/relop/._Tuple.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._java new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._resources b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._resources new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/._resources differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/._tests b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/._tests new file mode 100755 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/._tests differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._Field.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._Field.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._Field.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._QEPTest.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._QEPTest.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._QEPTest.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._ROTest.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._ROTest.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._ROTest.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._TestDriver.java b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._TestDriver.java new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/java/tests/._TestDriver.java differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._drivers.json differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._driversBig.json differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groups.json differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._groupsBig.json differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._rides.json differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.csv b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.csv new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.csv differ diff --git a/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.json b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.json new file mode 100644 index 0000000..a23c5d4 Binary files /dev/null and b/Projects/p3-skeleton/__MACOSX/cs448p3/src/test/resources/._ridesBig.json differ diff --git a/Projects/p3-skeleton/cs448p3/.gitignore b/Projects/p3-skeleton/cs448p3/.gitignore new file mode 100644 index 0000000..00b41c6 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/.gitignore @@ -0,0 +1,2 @@ +bin/ +.DS_Store diff --git a/Projects/p3-skeleton/cs448p3/Makefile b/Projects/p3-skeleton/cs448p3/Makefile new file mode 100644 index 0000000..099fa66 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/Makefile @@ -0,0 +1,20 @@ +JDKPATH = /usr +LIBPATH = lib/bufmgr.jar:lib/diskmgr.jar:lib/heap.jar:lib/index.jar:lib/junit.jar:lib/org.hamcrest.core_1.3.0.v201303031735.jar +SRCPATH = src/main/java/*/ +TESTPATH = src/test/java/*/ + +CLASSPATH = .:..:$(LIBPATH) +BINPATH = $(JDKPATH)/bin +JAVAC = $(JDKPATH)/bin/javac +JAVA = $(JDKPATH)/bin/java + +PROGS = xx + +all: $(PROGS) + +compile:${SRCPATH}*.java + $(JAVAC) -cp $(CLASSPATH) -d bin ${SRCPATH}*.java ${TESTPATH}*.java + +xx : compile + $(JAVA) -cp $(CLASSPATH):bin tests.ROTest + diff --git a/Projects/p3-skeleton/cs448p3/p3-handout.pdf b/Projects/p3-skeleton/cs448p3/p3-handout.pdf new file mode 100644 index 0000000..98ce7de Binary files /dev/null and b/Projects/p3-skeleton/cs448p3/p3-handout.pdf differ diff --git a/Projects/p3-skeleton/cs448p3/pom.xml b/Projects/p3-skeleton/cs448p3/pom.xml new file mode 100644 index 0000000..a55f734 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/pom.xml @@ -0,0 +1,131 @@ + + + + 4.0.0 + + edu.cs.purdue + cs448p3 + 1.0-SNAPSHOT + + cs448p3 + https://www.cs.purdue.edu/homes/bb/cs448f19/ + + + 10 + UTF-8 + ${java.version} + ${java.version} + + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + com.opencsv + opencsv + 4.0 + + + junit + junit + 4.11 + test + + + minibase + bufmgr + 1.0 + system + ${basedir}/lib/bufmgr.jar + + + minibase + diskmgr + 1.0 + system + ${basedir}/lib/diskmgr.jar + jar + + + minibase + heap + 1.0 + system + ${basedir}/lib/heap.jar + + + minibase + index + 1.0 + system + ${basedir}/lib/index.jar + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + ${java.version} + + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + maven-assembly-plugin + + + + test.TestDriver + + + + jar-with-dependencies + + + + + + + diff --git a/Projects/p3-skeleton/cs448p3/solution.txt b/Projects/p3-skeleton/cs448p3/solution.txt new file mode 100644 index 0000000..5e89823 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/solution.txt @@ -0,0 +1,24 @@ +proj_idx=3:18.|9:19.|2:20.|8:20.|4:22.|6:23.|7:24.|1:25.|5:26. +proj_key=2:20.|8:20. +proj_sel=2:20.|8:20. +proj_proj=1:25.|2:20.|3:18.|4:22.|5:26.|6:23.|7:24.|8:20.|9:19. +proj_sj=1:25.|1:25.|2:20.|2:20.|3:18.|3:18.|3:18.|4:22.|5:26.|6:23.|8:20.|9:19. +proj_hj=1:25.|1:25.|2:20.|2:20.|3:18.|3:18.|3:18.|4:22.|5:26.|6:23.|8:20.|9:19. +keyscan=2:Walid:Aref:20.013|8:Arif:Ghafoor:20.05 +selection=1:Ahmed:Elmagarmid:25.05|4:Sunil:Prabhakar:22.07|5:Elisa:Bertino:26.05|6:Susanne:Hambrusch:23.03|7:David:Eberts:24.08 +idxscan=3:Christopher:Clifton:18.04|9:Jeff:Vitter:19.010|2:Walid:Aref:20.013|8:Arif:Ghafoor:20.05|4:Sunil:Prabhakar:22.07|6:Susanne:Hambrusch:23.03|7:David:Eberts:24.08|1:Ahmed:Elmagarmid:25.05|5:Elisa:Bertino:26.05 +filescan=1:Ahmed:Elmagarmid:25.05|2:Walid:Aref:20.013|3:Christopher:Clifton:18.04|4:Sunil:Prabhakar:22.07|5:Elisa:Bertino:26.05|6:Susanne:Hambrusch:23.03|7:David:Eberts:24.08|8:Arif:Ghafoor:20.05|9:Jeff:Vitter:19.010 +sel_idx=2:Walid:Aref:20.013 +sel_key=2:Walid:Aref:20.013 +sel_sel=2:Walid:Aref:20.013 +sel_proj=2:Walid +sel_sj=2:Walid:Aref:20.013:2:6:2/17/2006:2/20/2006|2:Walid:Aref:20.013:2:7:2/18/2006:2/23/2006 +sel_jh=2:Walid:Aref:20.013:2:6:2/17/2006:2/20/2006|2:Walid:Aref:20.013:2:7:2/18/2006:2/23/2006 +selection_preds=1:Ahmed:Elmagarmid:25.05|3:Christopher:Clifton:18.04|5:Elisa:Bertino:26.05|7:David:Eberts:24.08 +hj_sel_sj=6:Susanne:Hambrusch:23.03:6:6:2/25/2006:2/26/2006:1:Purdue1 +hj_proj_hj=1:25.01:2:2/12/2006:2/14/2006:2:Purdue2|1:25.01:3:2/15/2006:2/16/2006:3:Purdue3|2:20.02:6:2/17/2006:2/20/2006:6:Purdue6|2:20.02:7:2/18/2006:2/23/2006:7:Purdue7|3:18.03:2:2/24/2006:2/26/2006:2:Purdue2|3:18.03:4:2/18/2006:2/19/2006:4:Purdue4|3:18.03:5:2/10/2006:2/13/2006:5:Purdue5|4:22.04:1:2/19/2006:2/19/2006:1:Purdue1|5:26.05:7:2/14/2006:2/18/2006:7:Purdue7|6:23.06:6:2/25/2006:2/26/2006:6:Purdue6|8:20.08:5:2/20/2006:2/22/2006:5:Purdue5|9:19.09:1:2/15/2006:2/15/2006:1:Purdue1 +hj_iscan_kscan=4:Sunil:Prabhakar:22.07:4:1:2/19/2006:2/19/2006|9:Jeff:Vitter:19.010:9:1:2/15/2006:2/15/2006 +hashjoin=1:Ahmed:Elmagarmid:25.05:1:2:2/12/2006:2/14/2006|1:Ahmed:Elmagarmid:25.05:1:3:2/15/2006:2/16/2006|2:Walid:Aref:20.013:2:6:2/17/2006:2/20/2006|2:Walid:Aref:20.013:2:7:2/18/2006:2/23/2006|3:Christopher:Clifton:18.04:3:5:2/10/2006:2/13/2006|3:Christopher:Clifton:18.04:3:4:2/18/2006:2/19/2006|3:Christopher:Clifton:18.04:3:2:2/24/2006:2/26/2006|4:Sunil:Prabhakar:22.07:4:1:2/19/2006:2/19/2006|5:Elisa:Bertino:26.05:5:7:2/14/2006:2/18/2006|6:Susanne:Hambrusch:23.03:6:6:2/25/2006:2/26/2006|8:Arif:Ghafoor:20.05:8:5:2/20/2006:2/22/2006|9:Jeff:Vitter:19.010:9:1:2/15/2006:2/15/2006 +projection=Ahmed:5|Walid:13|Christopher:4|Sunil:7|Elisa:5|Susanne:3|David:8|Arif:5|Jeff:10 +hashEqual=128:"Adnan":"Bob":19.010:128:"Adnan":"Bob":19.010|256:"Adnan":"Bob":19.010:256:"Adnan":"Bob":19.010|384:"Adnan":"Bob":19.010:384:"Adnan":"Bob":19.010|512:"Adnan":"Bob":19.010:512:"Adnan":"Bob":19.010|640:"Adnan":"Bob":19.010:640:"Adnan":"Bob":19.010|768:"Adnan":"Bob":19.010:768:"Adnan":"Bob":19.010|896:"Adnan":"Bob":19.010:896:"Adnan":"Bob":19.010|1:"Ahmed":"Elmagarmid":25.05:1:"Ahmed":"Elmagarmid":25.05|129:"Adnan":"Edgardo":19.010:129:"Adnan":"Edgardo":19.010|257:"Adnan":"Edgardo":19.010:257:"Adnan":"Edgardo":19.010|385:"Adnan":"Edgardo":19.010:385:"Adnan":"Edgardo":19.010|513:"Adnan":"Edgardo":19.010:513:"Adnan":"Edgardo":19.010|641:"Adnan":"Edgardo":19.010:641:"Adnan":"Edgardo":19.010|769:"Adnan":"Edgardo":19.010:769:"Adnan":"Edgardo":19.010|897:"Adnan":"Edgardo":19.010:897:"Adnan":"Edgardo":19.010|2:"Walid":"Aref":20.013:2:"Walid":"Aref":20.013|130:"Adnan":"Bob":19.010:130:"Adnan":"Bob":19.010|258:"Adnan":"Bob":19.010:258:"Adnan":"Bob":19.010|386:"Adnan":"Bob":19.010:386:"Adnan":"Bob":19.010|514:"Adnan":"Bob":19.010:514:"Adnan":"Bob":19.010|642:"Adnan":"Bob":19.010:642:"Adnan":"Bob":19.010|770:"Adnan":"Bob":19.010:770:"Adnan":"Bob":19.010|898:"Adnan":"Bob":19.010:898:"Adnan":"Bob":19.010|3:"Christopher":"Clifton":18.04:3:"Christopher":"Clifton":18.04|131:"Adnan":"Edgardo":19.010:131:"Adnan":"Edgardo":19.010|259:"Adnan":"Edgardo":19.010:259:"Adnan":"Edgardo":19.010|387:"Adnan":"Edgardo":19.010:387:"Adnan":"Edgardo":19.010|515:"Adnan":"Edgardo":19.010:515:"Adnan":"Edgardo":19.010|643:"Adnan":"Edgardo":19.010:643:"Adnan":"Edgardo":19.010|771:"Adnan":"Edgardo":19.010:771:"Adnan":"Edgardo":19.010|899:"Adnan":"Edgardo":19.010:899:"Adnan":"Edgardo":19.010|4:"Sunil":"Prabhakar":22.07:4:"Sunil":"Prabhakar":22.07|132:"Adnan":"Bob":19.010:132:"Adnan":"Bob":19.010|260:"Adnan":"Bob":19.010:260:"Adnan":"Bob":19.010|388:"Adnan":"Bob":19.010:388:"Adnan":"Bob":19.010|516:"Adnan":"Bob":19.010:516:"Adnan":"Bob":19.010|644:"Adnan":"Bob":19.010:644:"Adnan":"Bob":19.010|772:"Adnan":"Bob":19.010:772:"Adnan":"Bob":19.010|900:"Adnan":"Bob":19.010:900:"Adnan":"Bob":19.010|5:"Elisa":"Bertino":26.05:5:"Elisa":"Bertino":26.05|133:"Adnan":"Edgardo":19.010:133:"Adnan":"Edgardo":19.010|261:"Adnan":"Edgardo":19.010:261:"Adnan":"Edgardo":19.010|389:"Adnan":"Edgardo":19.010:389:"Adnan":"Edgardo":19.010|517:"Adnan":"Edgardo":19.010:517:"Adnan":"Edgardo":19.010|645:"Adnan":"Edgardo":19.010:645:"Adnan":"Edgardo":19.010|773:"Adnan":"Edgardo":19.010:773:"Adnan":"Edgardo":19.010|901:"Adnan":"Edgardo":19.010:901:"Adnan":"Edgardo":19.010|6:"Susanne":"Hambrusch":23.03:6:"Susanne":"Hambrusch":23.03|134:"Adnan":"Bob":19.010:134:"Adnan":"Bob":19.010|262:"Adnan":"Bob":19.010:262:"Adnan":"Bob":19.010|390:"Adnan":"Bob":19.010:390:"Adnan":"Bob":19.010|518:"Adnan":"Bob":19.010:518:"Adnan":"Bob":19.010|646:"Adnan":"Bob":19.010:646:"Adnan":"Bob":19.010|774:"Adnan":"Bob":19.010:774:"Adnan":"Bob":19.010|902:"Adnan":"Bob":19.010:902:"Adnan":"Bob":19.010|7:"David":"Eberts":24.08:7:"David":"Eberts":24.08|135:"Adnan":"Edgardo":19.010:135:"Adnan":"Edgardo":19.010|263:"Adnan":"Edgardo":19.010:263:"Adnan":"Edgardo":19.010|391:"Adnan":"Edgardo":19.010:391:"Adnan":"Edgardo":19.010|519:"Adnan":"Edgardo":19.010:519:"Adnan":"Edgardo":19.010|647:"Adnan":"Edgardo":19.010:647:"Adnan":"Edgardo":19.010|775:"Adnan":"Edgardo":19.010:775:"Adnan":"Edgardo":19.010|903:"Adnan":"Edgardo":19.010:903:"Adnan":"Edgardo":19.010|8:"Arif":"Ghafoor":20.05:8:"Arif":"Ghafoor":20.05|136:"Adnan":"Bob":19.010:136:"Adnan":"Bob":19.010|264:"Adnan":"Bob":19.010:264:"Adnan":"Bob":19.010|392:"Adnan":"Bob":19.010:392:"Adnan":"Bob":19.010|520:"Adnan":"Bob":19.010:520:"Adnan":"Bob":19.010|648:"Adnan":"Bob":19.010:648:"Adnan":"Bob":19.010|776:"Adnan":"Bob":19.010:776:"Adnan":"Bob":19.010|904:"Adnan":"Bob":19.010:904:"Adnan":"Bob":19.010|9:"Jeff":"Vitter":19.010:9:"Jeff":"Vitter":19.010|137:"Adnan":"Edgardo":19.010:137:"Adnan":"Edgardo":19.010|265:"Adnan":"Edgardo":19.010:265:"Adnan":"Edgardo":19.010|393:"Adnan":"Edgardo":19.010:393:"Adnan":"Edgardo":19.010|521:"Adnan":"Edgardo":19.010:521:"Adnan":"Edgardo":19.010|649:"Adnan":"Edgardo":19.010:649:"Adnan":"Edgardo":19.010|777:"Adnan":"Edgardo":19.010:777:"Adnan":"Edgardo":19.010|905:"Adnan":"Edgardo":19.010:905:"Adnan":"Edgardo":19.010|10:"Adnan":"Bob":19.010:10:"Adnan":"Bob":19.010|138:"Adnan":"Bob":19.010:138:"Adnan":"Bob":19.010|266:"Adnan":"Bob":19.010:266:"Adnan":"Bob":19.010|394:"Adnan":"Bob":19.010:394:"Adnan":"Bob":19.010|522:"Adnan":"Bob":19.010:522:"Adnan":"Bob":19.010|650:"Adnan":"Bob":19.010:650:"Adnan":"Bob":19.010|778:"Adnan":"Bob":19.010:778:"Adnan":"Bob":19.010|906:"Adnan":"Bob":19.010:906:"Adnan":"Bob":19.010|11:"Adnan":"Edgardo":19.010:11:"Adnan":"Edgardo":19.010|139:"Adnan":"Edgardo":19.010:139:"Adnan":"Edgardo":19.010|267:"Adnan":"Edgardo":19.010:267:"Adnan":"Edgardo":19.010|395:"Adnan":"Edgardo":19.010:395:"Adnan":"Edgardo":19.010|523:"Adnan":"Edgardo":19.010:523:"Adnan":"Edgardo":19.010|651:"Adnan":"Edgardo":19.010:651:"Adnan":"Edgardo":19.010|779:"Adnan":"Edgardo":19.010:779:"Adnan":"Edgardo":19.010|907:"Adnan":"Edgardo":19.010:907:"Adnan":"Edgardo":19.010|12:"Adnan":"Bob":19.010:12:"Adnan":"Bob":19.010|140:"Adnan":"Bob":19.010:140:"Adnan":"Bob":19.010|268:"Adnan":"Bob":19.010:268:"Adnan":"Bob":19.010|396:"Adnan":"Bob":19.010:396:"Adnan":"Bob":19.010|524:"Adnan":"Bob":19.010:524:"Adnan":"Bob":19.010|652:"Adnan":"Bob":19.010:652:"Adnan":"Bob":19.010|780:"Adnan":"Bob":19.010:780:"Adnan":"Bob":19.010|908:"Adnan":"Bob":19.010:908:"Adnan":"Bob":19.010|13:"Adnan":"Edgardo":19.010:13:"Adnan":"Edgardo":19.010|141:"Adnan":"Edgardo":19.010:141:"Adnan":"Edgardo":19.010|269:"Adnan":"Edgardo":19.010:269:"Adnan":"Edgardo":19.010|397:"Adnan":"Edgardo":19.010:397:"Adnan":"Edgardo":19.010|525:"Adnan":"Edgardo":19.010:525:"Adnan":"Edgardo":19.010|653:"Adnan":"Edgardo":19.010:653:"Adnan":"Edgardo":19.010|781:"Adnan":"Edgardo":19.010:781:"Adnan":"Edgardo":19.010|909:"Adnan":"Edgardo":19.010:909:"Adnan":"Edgardo":19.010|14:"Adnan":"Bob":19.010:14:"Adnan":"Bob":19.010|142:"Adnan":"Bob":19.010:142:"Adnan":"Bob":19.010|270:"Adnan":"Bob":19.010:270:"Adnan":"Bob":19.010|398:"Adnan":"Bob":19.010:398:"Adnan":"Bob":19.010|526:"Adnan":"Bob":19.010:526:"Adnan":"Bob":19.010|654:"Adnan":"Bob":19.010:654:"Adnan":"Bob":19.010|782:"Adnan":"Bob":19.010:782:"Adnan":"Bob":19.010|910:"Adnan":"Bob":19.010:910:"Adnan":"Bob":19.010|15:"Adnan":"Edgardo":19.010:15:"Adnan":"Edgardo":19.010|143:"Adnan":"Edgardo":19.010:143:"Adnan":"Edgardo":19.010|271:"Adnan":"Edgardo":19.010:271:"Adnan":"Edgardo":19.010|399:"Adnan":"Edgardo":19.010:399:"Adnan":"Edgardo":19.010|527:"Adnan":"Edgardo":19.010:527:"Adnan":"Edgardo":19.010|655:"Adnan":"Edgardo":19.010:655:"Adnan":"Edgardo":19.010|783:"Adnan":"Edgardo":19.010:783:"Adnan":"Edgardo":19.010|911:"Adnan":"Edgardo":19.010:911:"Adnan":"Edgardo":19.010|16:"Adnan":"Bob":19.010:16:"Adnan":"Bob":19.010|144:"Adnan":"Bob":19.010:144:"Adnan":"Bob":19.010|272:"Adnan":"Bob":19.010:272:"Adnan":"Bob":19.010|400:"Adnan":"Bob":19.010:400:"Adnan":"Bob":19.010|528:"Adnan":"Bob":19.010:528:"Adnan":"Bob":19.010|656:"Adnan":"Bob":19.010:656:"Adnan":"Bob":19.010|784:"Adnan":"Bob":19.010:784:"Adnan":"Bob":19.010|912:"Adnan":"Bob":19.010:912:"Adnan":"Bob":19.010|17:"Adnan":"Edgardo":19.010:17:"Adnan":"Edgardo":19.010|145:"Adnan":"Edgardo":19.010:145:"Adnan":"Edgardo":19.010|273:"Adnan":"Edgardo":19.010:273:"Adnan":"Edgardo":19.010|401:"Adnan":"Edgardo":19.010:401:"Adnan":"Edgardo":19.010|529:"Adnan":"Edgardo":19.010:529:"Adnan":"Edgardo":19.010|657:"Adnan":"Edgardo":19.010:657:"Adnan":"Edgardo":19.010|785:"Adnan":"Edgardo":19.010:785:"Adnan":"Edgardo":19.010|913:"Adnan":"Edgardo":19.010:913:"Adnan":"Edgardo":19.010|18:"Adnan":"Bob":19.010:18:"Adnan":"Bob":19.010|146:"Adnan":"Bob":19.010:146:"Adnan":"Bob":19.010|274:"Adnan":"Bob":19.010:274:"Adnan":"Bob":19.010|402:"Adnan":"Bob":19.010:402:"Adnan":"Bob":19.010|530:"Adnan":"Bob":19.010:530:"Adnan":"Bob":19.010|658:"Adnan":"Bob":19.010:658:"Adnan":"Bob":19.010|786:"Adnan":"Bob":19.010:786:"Adnan":"Bob":19.010|914:"Adnan":"Bob":19.010:914:"Adnan":"Bob":19.010|19:"Adnan":"Edgardo":19.010:19:"Adnan":"Edgardo":19.010|147:"Adnan":"Edgardo":19.010:147:"Adnan":"Edgardo":19.010|275:"Adnan":"Edgardo":19.010:275:"Adnan":"Edgardo":19.010|403:"Adnan":"Edgardo":19.010:403:"Adnan":"Edgardo":19.010|531:"Adnan":"Edgardo":19.010:531:"Adnan":"Edgardo":19.010|659:"Adnan":"Edgardo":19.010:659:"Adnan":"Edgardo":19.010|787:"Adnan":"Edgardo":19.010:787:"Adnan":"Edgardo":19.010|915:"Adnan":"Edgardo":19.010:915:"Adnan":"Edgardo":19.010|20:"Adnan":"Bob":19.010:20:"Adnan":"Bob":19.010|148:"Adnan":"Bob":19.010:148:"Adnan":"Bob":19.010|276:"Adnan":"Bob":19.010:276:"Adnan":"Bob":19.010|404:"Adnan":"Bob":19.010:404:"Adnan":"Bob":19.010|532:"Adnan":"Bob":19.010:532:"Adnan":"Bob":19.010|660:"Adnan":"Bob":19.010:660:"Adnan":"Bob":19.010|788:"Adnan":"Bob":19.010:788:"Adnan":"Bob":19.010|916:"Adnan":"Bob":19.010:916:"Adnan":"Bob":19.010|21:"Adnan":"Edgardo":19.010:21:"Adnan":"Edgardo":19.010|149:"Adnan":"Edgardo":19.010:149:"Adnan":"Edgardo":19.010|277:"Adnan":"Edgardo":19.010:277:"Adnan":"Edgardo":19.010|405:"Adnan":"Edgardo":19.010:405:"Adnan":"Edgardo":19.010|533:"Adnan":"Edgardo":19.010:533:"Adnan":"Edgardo":19.010|661:"Adnan":"Edgardo":19.010:661:"Adnan":"Edgardo":19.010|789:"Adnan":"Edgardo":19.010:789:"Adnan":"Edgardo":19.010|917:"Adnan":"Edgardo":19.010:917:"Adnan":"Edgardo":19.010|22:"Adnan":"Bob":19.010:22:"Adnan":"Bob":19.010|150:"Adnan":"Bob":19.010:150:"Adnan":"Bob":19.010|278:"Adnan":"Bob":19.010:278:"Adnan":"Bob":19.010|406:"Adnan":"Bob":19.010:406:"Adnan":"Bob":19.010|534:"Adnan":"Bob":19.010:534:"Adnan":"Bob":19.010|662:"Adnan":"Bob":19.010:662:"Adnan":"Bob":19.010|790:"Adnan":"Bob":19.010:790:"Adnan":"Bob":19.010|918:"Adnan":"Bob":19.010:918:"Adnan":"Bob":19.010|23:"Adnan":"Edgardo":19.010:23:"Adnan":"Edgardo":19.010|151:"Adnan":"Edgardo":19.010:151:"Adnan":"Edgardo":19.010|279:"Adnan":"Edgardo":19.010:279:"Adnan":"Edgardo":19.010|407:"Adnan":"Edgardo":19.010:407:"Adnan":"Edgardo":19.010|535:"Adnan":"Edgardo":19.010:535:"Adnan":"Edgardo":19.010|663:"Adnan":"Edgardo":19.010:663:"Adnan":"Edgardo":19.010|791:"Adnan":"Edgardo":19.010:791:"Adnan":"Edgardo":19.010|919:"Adnan":"Edgardo":19.010:919:"Adnan":"Edgardo":19.010|24:"Adnan":"Bob":19.010:24:"Adnan":"Bob":19.010|152:"Adnan":"Bob":19.010:152:"Adnan":"Bob":19.010|280:"Adnan":"Bob":19.010:280:"Adnan":"Bob":19.010|408:"Adnan":"Bob":19.010:408:"Adnan":"Bob":19.010|536:"Adnan":"Bob":19.010:536:"Adnan":"Bob":19.010|664:"Adnan":"Bob":19.010:664:"Adnan":"Bob":19.010|792:"Adnan":"Bob":19.010:792:"Adnan":"Bob":19.010|920:"Adnan":"Bob":19.010:920:"Adnan":"Bob":19.010|25:"Adnan":"Edgardo":19.010:25:"Adnan":"Edgardo":19.010|153:"Adnan":"Edgardo":19.010:153:"Adnan":"Edgardo":19.010|281:"Adnan":"Edgardo":19.010:281:"Adnan":"Edgardo":19.010|409:"Adnan":"Edgardo":19.010:409:"Adnan":"Edgardo":19.010|537:"Adnan":"Edgardo":19.010:537:"Adnan":"Edgardo":19.010|665:"Adnan":"Edgardo":19.010:665:"Adnan":"Edgardo":19.010|793:"Adnan":"Edgardo":19.010:793:"Adnan":"Edgardo":19.010|921:"Adnan":"Edgardo":19.010:921:"Adnan":"Edgardo":19.010|26:"Adnan":"Bob":19.010:26:"Adnan":"Bob":19.010|154:"Adnan":"Bob":19.010:154:"Adnan":"Bob":19.010|282:"Adnan":"Bob":19.010:282:"Adnan":"Bob":19.010|410:"Adnan":"Bob":19.010:410:"Adnan":"Bob":19.010|538:"Adnan":"Bob":19.010:538:"Adnan":"Bob":19.010|666:"Adnan":"Bob":19.010:666:"Adnan":"Bob":19.010|794:"Adnan":"Bob":19.010:794:"Adnan":"Bob":19.010|922:"Adnan":"Bob":19.010:922:"Adnan":"Bob":19.010|27:"Adnan":"Edgardo":19.010:27:"Adnan":"Edgardo":19.010|155:"Adnan":"Edgardo":19.010:155:"Adnan":"Edgardo":19.010|283:"Adnan":"Edgardo":19.010:283:"Adnan":"Edgardo":19.010|411:"Adnan":"Edgardo":19.010:411:"Adnan":"Edgardo":19.010|539:"Adnan":"Edgardo":19.010:539:"Adnan":"Edgardo":19.010|667:"Adnan":"Edgardo":19.010:667:"Adnan":"Edgardo":19.010|795:"Adnan":"Edgardo":19.010:795:"Adnan":"Edgardo":19.010|923:"Adnan":"Edgardo":19.010:923:"Adnan":"Edgardo":19.010|28:"Adnan":"Bob":19.010:28:"Adnan":"Bob":19.010|156:"Adnan":"Bob":19.010:156:"Adnan":"Bob":19.010|284:"Adnan":"Bob":19.010:284:"Adnan":"Bob":19.010|412:"Adnan":"Bob":19.010:412:"Adnan":"Bob":19.010|540:"Adnan":"Bob":19.010:540:"Adnan":"Bob":19.010|668:"Adnan":"Bob":19.010:668:"Adnan":"Bob":19.010|796:"Adnan":"Bob":19.010:796:"Adnan":"Bob":19.010|924:"Adnan":"Bob":19.010:924:"Adnan":"Bob":19.010|29:"Adnan":"Edgardo":19.010:29:"Adnan":"Edgardo":19.010|157:"Adnan":"Edgardo":19.010:157:"Adnan":"Edgardo":19.010|285:"Adnan":"Edgardo":19.010:285:"Adnan":"Edgardo":19.010|413:"Adnan":"Edgardo":19.010:413:"Adnan":"Edgardo":19.010|541:"Adnan":"Edgardo":19.010:541:"Adnan":"Edgardo":19.010|669:"Adnan":"Edgardo":19.010:669:"Adnan":"Edgardo":19.010|797:"Adnan":"Edgardo":19.010:797:"Adnan":"Edgardo":19.010|925:"Adnan":"Edgardo":19.010:925:"Adnan":"Edgardo":19.010|30:"Adnan":"Bob":19.010:30:"Adnan":"Bob":19.010|158:"Adnan":"Bob":19.010:158:"Adnan":"Bob":19.010|286:"Adnan":"Bob":19.010:286:"Adnan":"Bob":19.010|414:"Adnan":"Bob":19.010:414:"Adnan":"Bob":19.010|542:"Adnan":"Bob":19.010:542:"Adnan":"Bob":19.010|670:"Adnan":"Bob":19.010:670:"Adnan":"Bob":19.010|798:"Adnan":"Bob":19.010:798:"Adnan":"Bob":19.010|926:"Adnan":"Bob":19.010:926:"Adnan":"Bob":19.010|31:"Adnan":"Edgardo":19.010:31:"Adnan":"Edgardo":19.010|159:"Adnan":"Edgardo":19.010:159:"Adnan":"Edgardo":19.010|287:"Adnan":"Edgardo":19.010:287:"Adnan":"Edgardo":19.010|415:"Adnan":"Edgardo":19.010:415:"Adnan":"Edgardo":19.010|543:"Adnan":"Edgardo":19.010:543:"Adnan":"Edgardo":19.010|671:"Adnan":"Edgardo":19.010:671:"Adnan":"Edgardo":19.010|799:"Adnan":"Edgardo":19.010:799:"Adnan":"Edgardo":19.010|927:"Adnan":"Edgardo":19.010:927:"Adnan":"Edgardo":19.010|32:"Adnan":"Bob":19.010:32:"Adnan":"Bob":19.010|160:"Adnan":"Bob":19.010:160:"Adnan":"Bob":19.010|288:"Adnan":"Bob":19.010:288:"Adnan":"Bob":19.010|416:"Adnan":"Bob":19.010:416:"Adnan":"Bob":19.010|544:"Adnan":"Bob":19.010:544:"Adnan":"Bob":19.010|672:"Adnan":"Bob":19.010:672:"Adnan":"Bob":19.010|800:"Adnan":"Bob":19.010:800:"Adnan":"Bob":19.010|928:"Adnan":"Bob":19.010:928:"Adnan":"Bob":19.010|33:"Adnan":"Edgardo":19.010:33:"Adnan":"Edgardo":19.010|161:"Adnan":"Edgardo":19.010:161:"Adnan":"Edgardo":19.010|289:"Adnan":"Edgardo":19.010:289:"Adnan":"Edgardo":19.010|417:"Adnan":"Edgardo":19.010:417:"Adnan":"Edgardo":19.010|545:"Adnan":"Edgardo":19.010:545:"Adnan":"Edgardo":19.010|673:"Adnan":"Edgardo":19.010:673:"Adnan":"Edgardo":19.010|801:"Adnan":"Edgardo":19.010:801:"Adnan":"Edgardo":19.010|929:"Adnan":"Edgardo":19.010:929:"Adnan":"Edgardo":19.010|34:"Adnan":"Bob":19.010:34:"Adnan":"Bob":19.010|162:"Adnan":"Bob":19.010:162:"Adnan":"Bob":19.010|290:"Adnan":"Bob":19.010:290:"Adnan":"Bob":19.010|418:"Adnan":"Bob":19.010:418:"Adnan":"Bob":19.010|546:"Adnan":"Bob":19.010:546:"Adnan":"Bob":19.010|674:"Adnan":"Bob":19.010:674:"Adnan":"Bob":19.010|802:"Adnan":"Bob":19.010:802:"Adnan":"Bob":19.010|930:"Adnan":"Bob":19.010:930:"Adnan":"Bob":19.010|35:"Adnan":"Edgardo":19.010:35:"Adnan":"Edgardo":19.010|163:"Adnan":"Edgardo":19.010:163:"Adnan":"Edgardo":19.010|291:"Adnan":"Edgardo":19.010:291:"Adnan":"Edgardo":19.010|419:"Adnan":"Edgardo":19.010:419:"Adnan":"Edgardo":19.010|547:"Adnan":"Edgardo":19.010:547:"Adnan":"Edgardo":19.010|675:"Adnan":"Edgardo":19.010:675:"Adnan":"Edgardo":19.010|803:"Adnan":"Edgardo":19.010:803:"Adnan":"Edgardo":19.010|931:"Adnan":"Edgardo":19.010:931:"Adnan":"Edgardo":19.010|36:"Adnan":"Bob":19.010:36:"Adnan":"Bob":19.010|164:"Adnan":"Bob":19.010:164:"Adnan":"Bob":19.010|292:"Adnan":"Bob":19.010:292:"Adnan":"Bob":19.010|420:"Adnan":"Bob":19.010:420:"Adnan":"Bob":19.010|548:"Adnan":"Bob":19.010:548:"Adnan":"Bob":19.010|676:"Adnan":"Bob":19.010:676:"Adnan":"Bob":19.010|804:"Adnan":"Bob":19.010:804:"Adnan":"Bob":19.010|932:"Adnan":"Bob":19.010:932:"Adnan":"Bob":19.010|37:"Adnan":"Edgardo":19.010:37:"Adnan":"Edgardo":19.010|165:"Adnan":"Edgardo":19.010:165:"Adnan":"Edgardo":19.010|293:"Adnan":"Edgardo":19.010:293:"Adnan":"Edgardo":19.010|421:"Adnan":"Edgardo":19.010:421:"Adnan":"Edgardo":19.010|549:"Adnan":"Edgardo":19.010:549:"Adnan":"Edgardo":19.010|677:"Adnan":"Edgardo":19.010:677:"Adnan":"Edgardo":19.010|805:"Adnan":"Edgardo":19.010:805:"Adnan":"Edgardo":19.010|933:"Adnan":"Edgardo":19.010:933:"Adnan":"Edgardo":19.010|38:"Adnan":"Bob":19.010:38:"Adnan":"Bob":19.010|166:"Adnan":"Bob":19.010:166:"Adnan":"Bob":19.010|294:"Adnan":"Bob":19.010:294:"Adnan":"Bob":19.010|422:"Adnan":"Bob":19.010:422:"Adnan":"Bob":19.010|550:"Adnan":"Bob":19.010:550:"Adnan":"Bob":19.010|678:"Adnan":"Bob":19.010:678:"Adnan":"Bob":19.010|806:"Adnan":"Bob":19.010:806:"Adnan":"Bob":19.010|934:"Adnan":"Bob":19.010:934:"Adnan":"Bob":19.010|39:"Adnan":"Edgardo":19.010:39:"Adnan":"Edgardo":19.010|167:"Adnan":"Edgardo":19.010:167:"Adnan":"Edgardo":19.010|295:"Adnan":"Edgardo":19.010:295:"Adnan":"Edgardo":19.010|423:"Adnan":"Edgardo":19.010:423:"Adnan":"Edgardo":19.010|551:"Adnan":"Edgardo":19.010:551:"Adnan":"Edgardo":19.010|679:"Adnan":"Edgardo":19.010:679:"Adnan":"Edgardo":19.010|807:"Adnan":"Edgardo":19.010:807:"Adnan":"Edgardo":19.010|935:"Adnan":"Edgardo":19.010:935:"Adnan":"Edgardo":19.010|40:"Adnan":"Bob":19.010:40:"Adnan":"Bob":19.010|168:"Adnan":"Bob":19.010:168:"Adnan":"Bob":19.010|296:"Adnan":"Bob":19.010:296:"Adnan":"Bob":19.010|424:"Adnan":"Bob":19.010:424:"Adnan":"Bob":19.010|552:"Adnan":"Bob":19.010:552:"Adnan":"Bob":19.010|680:"Adnan":"Bob":19.010:680:"Adnan":"Bob":19.010|808:"Adnan":"Bob":19.010:808:"Adnan":"Bob":19.010|936:"Adnan":"Bob":19.010:936:"Adnan":"Bob":19.010|41:"Adnan":"Edgardo":19.010:41:"Adnan":"Edgardo":19.010|169:"Adnan":"Edgardo":19.010:169:"Adnan":"Edgardo":19.010|297:"Adnan":"Edgardo":19.010:297:"Adnan":"Edgardo":19.010|425:"Adnan":"Edgardo":19.010:425:"Adnan":"Edgardo":19.010|553:"Adnan":"Edgardo":19.010:553:"Adnan":"Edgardo":19.010|681:"Adnan":"Edgardo":19.010:681:"Adnan":"Edgardo":19.010|809:"Adnan":"Edgardo":19.010:809:"Adnan":"Edgardo":19.010|937:"Adnan":"Edgardo":19.010:937:"Adnan":"Edgardo":19.010|42:"Adnan":"Bob":19.010:42:"Adnan":"Bob":19.010|170:"Adnan":"Bob":19.010:170:"Adnan":"Bob":19.010|298:"Adnan":"Bob":19.010:298:"Adnan":"Bob":19.010|426:"Adnan":"Bob":19.010:426:"Adnan":"Bob":19.010|554:"Adnan":"Bob":19.010:554:"Adnan":"Bob":19.010|682:"Adnan":"Bob":19.010:682:"Adnan":"Bob":19.010|810:"Adnan":"Bob":19.010:810:"Adnan":"Bob":19.010|938:"Adnan":"Bob":19.010:938:"Adnan":"Bob":19.010|43:"Adnan":"Edgardo":19.010:43:"Adnan":"Edgardo":19.010|171:"Adnan":"Edgardo":19.010:171:"Adnan":"Edgardo":19.010|299:"Adnan":"Edgardo":19.010:299:"Adnan":"Edgardo":19.010|427:"Adnan":"Edgardo":19.010:427:"Adnan":"Edgardo":19.010|555:"Adnan":"Edgardo":19.010:555:"Adnan":"Edgardo":19.010|683:"Adnan":"Edgardo":19.010:683:"Adnan":"Edgardo":19.010|811:"Adnan":"Edgardo":19.010:811:"Adnan":"Edgardo":19.010|939:"Adnan":"Edgardo":19.010:939:"Adnan":"Edgardo":19.010|44:"Adnan":"Bob":19.010:44:"Adnan":"Bob":19.010|172:"Adnan":"Bob":19.010:172:"Adnan":"Bob":19.010|300:"Adnan":"Bob":19.010:300:"Adnan":"Bob":19.010|428:"Adnan":"Bob":19.010:428:"Adnan":"Bob":19.010|556:"Adnan":"Bob":19.010:556:"Adnan":"Bob":19.010|684:"Adnan":"Bob":19.010:684:"Adnan":"Bob":19.010|812:"Adnan":"Bob":19.010:812:"Adnan":"Bob":19.010|940:"Adnan":"Bob":19.010:940:"Adnan":"Bob":19.010|45:"Adnan":"Edgardo":19.010:45:"Adnan":"Edgardo":19.010|173:"Adnan":"Edgardo":19.010:173:"Adnan":"Edgardo":19.010|301:"Adnan":"Edgardo":19.010:301:"Adnan":"Edgardo":19.010|429:"Adnan":"Edgardo":19.010:429:"Adnan":"Edgardo":19.010|557:"Adnan":"Edgardo":19.010:557:"Adnan":"Edgardo":19.010|685:"Adnan":"Edgardo":19.010:685:"Adnan":"Edgardo":19.010|813:"Adnan":"Edgardo":19.010:813:"Adnan":"Edgardo":19.010|941:"Adnan":"Edgardo":19.010:941:"Adnan":"Edgardo":19.010|46:"Adnan":"Bob":19.010:46:"Adnan":"Bob":19.010|174:"Adnan":"Bob":19.010:174:"Adnan":"Bob":19.010|302:"Adnan":"Bob":19.010:302:"Adnan":"Bob":19.010|430:"Adnan":"Bob":19.010:430:"Adnan":"Bob":19.010|558:"Adnan":"Bob":19.010:558:"Adnan":"Bob":19.010|686:"Adnan":"Bob":19.010:686:"Adnan":"Bob":19.010|814:"Adnan":"Bob":19.010:814:"Adnan":"Bob":19.010|942:"Adnan":"Bob":19.010:942:"Adnan":"Bob":19.010|47:"Adnan":"Edgardo":19.010:47:"Adnan":"Edgardo":19.010|175:"Adnan":"Edgardo":19.010:175:"Adnan":"Edgardo":19.010|303:"Adnan":"Edgardo":19.010:303:"Adnan":"Edgardo":19.010|431:"Adnan":"Edgardo":19.010:431:"Adnan":"Edgardo":19.010|559:"Adnan":"Edgardo":19.010:559:"Adnan":"Edgardo":19.010|687:"Adnan":"Edgardo":19.010:687:"Adnan":"Edgardo":19.010|815:"Adnan":"Edgardo":19.010:815:"Adnan":"Edgardo":19.010|943:"Adnan":"Edgardo":19.010:943:"Adnan":"Edgardo":19.010|48:"Adnan":"Bob":19.010:48:"Adnan":"Bob":19.010|176:"Adnan":"Bob":19.010:176:"Adnan":"Bob":19.010|304:"Adnan":"Bob":19.010:304:"Adnan":"Bob":19.010|432:"Adnan":"Bob":19.010:432:"Adnan":"Bob":19.010|560:"Adnan":"Bob":19.010:560:"Adnan":"Bob":19.010|688:"Adnan":"Bob":19.010:688:"Adnan":"Bob":19.010|816:"Adnan":"Bob":19.010:816:"Adnan":"Bob":19.010|944:"Adnan":"Bob":19.010:944:"Adnan":"Bob":19.010|49:"Adnan":"Edgardo":19.010:49:"Adnan":"Edgardo":19.010|177:"Adnan":"Edgardo":19.010:177:"Adnan":"Edgardo":19.010|305:"Adnan":"Edgardo":19.010:305:"Adnan":"Edgardo":19.010|433:"Adnan":"Edgardo":19.010:433:"Adnan":"Edgardo":19.010|561:"Adnan":"Edgardo":19.010:561:"Adnan":"Edgardo":19.010|689:"Adnan":"Edgardo":19.010:689:"Adnan":"Edgardo":19.010|817:"Adnan":"Edgardo":19.010:817:"Adnan":"Edgardo":19.010|945:"Adnan":"Edgardo":19.010:945:"Adnan":"Edgardo":19.010|50:"Adnan":"Bob":19.010:50:"Adnan":"Bob":19.010|178:"Adnan":"Bob":19.010:178:"Adnan":"Bob":19.010|306:"Adnan":"Bob":19.010:306:"Adnan":"Bob":19.010|434:"Adnan":"Bob":19.010:434:"Adnan":"Bob":19.010|562:"Adnan":"Bob":19.010:562:"Adnan":"Bob":19.010|690:"Adnan":"Bob":19.010:690:"Adnan":"Bob":19.010|818:"Adnan":"Bob":19.010:818:"Adnan":"Bob":19.010|946:"Adnan":"Bob":19.010:946:"Adnan":"Bob":19.010|51:"Adnan":"Edgardo":19.010:51:"Adnan":"Edgardo":19.010|179:"Adnan":"Edgardo":19.010:179:"Adnan":"Edgardo":19.010|307:"Adnan":"Edgardo":19.010:307:"Adnan":"Edgardo":19.010|435:"Adnan":"Edgardo":19.010:435:"Adnan":"Edgardo":19.010|563:"Adnan":"Edgardo":19.010:563:"Adnan":"Edgardo":19.010|691:"Adnan":"Edgardo":19.010:691:"Adnan":"Edgardo":19.010|819:"Adnan":"Edgardo":19.010:819:"Adnan":"Edgardo":19.010|947:"Adnan":"Edgardo":19.010:947:"Adnan":"Edgardo":19.010|52:"Adnan":"Bob":19.010:52:"Adnan":"Bob":19.010|180:"Adnan":"Bob":19.010:180:"Adnan":"Bob":19.010|308:"Adnan":"Bob":19.010:308:"Adnan":"Bob":19.010|436:"Adnan":"Bob":19.010:436:"Adnan":"Bob":19.010|564:"Adnan":"Bob":19.010:564:"Adnan":"Bob":19.010|692:"Adnan":"Bob":19.010:692:"Adnan":"Bob":19.010|820:"Adnan":"Bob":19.010:820:"Adnan":"Bob":19.010|948:"Adnan":"Bob":19.010:948:"Adnan":"Bob":19.010|53:"Adnan":"Edgardo":19.010:53:"Adnan":"Edgardo":19.010|181:"Adnan":"Edgardo":19.010:181:"Adnan":"Edgardo":19.010|309:"Adnan":"Edgardo":19.010:309:"Adnan":"Edgardo":19.010|437:"Adnan":"Edgardo":19.010:437:"Adnan":"Edgardo":19.010|565:"Adnan":"Edgardo":19.010:565:"Adnan":"Edgardo":19.010|693:"Adnan":"Edgardo":19.010:693:"Adnan":"Edgardo":19.010|821:"Adnan":"Edgardo":19.010:821:"Adnan":"Edgardo":19.010|949:"Adnan":"Edgardo":19.010:949:"Adnan":"Edgardo":19.010|54:"Adnan":"Bob":19.010:54:"Adnan":"Bob":19.010|182:"Adnan":"Bob":19.010:182:"Adnan":"Bob":19.010|310:"Adnan":"Bob":19.010:310:"Adnan":"Bob":19.010|438:"Adnan":"Bob":19.010:438:"Adnan":"Bob":19.010|566:"Adnan":"Bob":19.010:566:"Adnan":"Bob":19.010|694:"Adnan":"Bob":19.010:694:"Adnan":"Bob":19.010|822:"Adnan":"Bob":19.010:822:"Adnan":"Bob":19.010|950:"Adnan":"Bob":19.010:950:"Adnan":"Bob":19.010|55:"Adnan":"Edgardo":19.010:55:"Adnan":"Edgardo":19.010|183:"Adnan":"Edgardo":19.010:183:"Adnan":"Edgardo":19.010|311:"Adnan":"Edgardo":19.010:311:"Adnan":"Edgardo":19.010|439:"Adnan":"Edgardo":19.010:439:"Adnan":"Edgardo":19.010|567:"Adnan":"Edgardo":19.010:567:"Adnan":"Edgardo":19.010|695:"Adnan":"Edgardo":19.010:695:"Adnan":"Edgardo":19.010|823:"Adnan":"Edgardo":19.010:823:"Adnan":"Edgardo":19.010|951:"Adnan":"Edgardo":19.010:951:"Adnan":"Edgardo":19.010|56:"Adnan":"Bob":19.010:56:"Adnan":"Bob":19.010|184:"Adnan":"Bob":19.010:184:"Adnan":"Bob":19.010|312:"Adnan":"Bob":19.010:312:"Adnan":"Bob":19.010|440:"Adnan":"Bob":19.010:440:"Adnan":"Bob":19.010|568:"Adnan":"Bob":19.010:568:"Adnan":"Bob":19.010|696:"Adnan":"Bob":19.010:696:"Adnan":"Bob":19.010|824:"Adnan":"Bob":19.010:824:"Adnan":"Bob":19.010|952:"Adnan":"Bob":19.010:952:"Adnan":"Bob":19.010|57:"Adnan":"Edgardo":19.010:57:"Adnan":"Edgardo":19.010|185:"Adnan":"Edgardo":19.010:185:"Adnan":"Edgardo":19.010|313:"Adnan":"Edgardo":19.010:313:"Adnan":"Edgardo":19.010|441:"Adnan":"Edgardo":19.010:441:"Adnan":"Edgardo":19.010|569:"Adnan":"Edgardo":19.010:569:"Adnan":"Edgardo":19.010|697:"Adnan":"Edgardo":19.010:697:"Adnan":"Edgardo":19.010|825:"Adnan":"Edgardo":19.010:825:"Adnan":"Edgardo":19.010|953:"Adnan":"Edgardo":19.010:953:"Adnan":"Edgardo":19.010|58:"Adnan":"Bob":19.010:58:"Adnan":"Bob":19.010|186:"Adnan":"Bob":19.010:186:"Adnan":"Bob":19.010|314:"Adnan":"Bob":19.010:314:"Adnan":"Bob":19.010|442:"Adnan":"Bob":19.010:442:"Adnan":"Bob":19.010|570:"Adnan":"Bob":19.010:570:"Adnan":"Bob":19.010|698:"Adnan":"Bob":19.010:698:"Adnan":"Bob":19.010|826:"Adnan":"Bob":19.010:826:"Adnan":"Bob":19.010|954:"Adnan":"Bob":19.010:954:"Adnan":"Bob":19.010|59:"Adnan":"Edgardo":19.010:59:"Adnan":"Edgardo":19.010|187:"Adnan":"Edgardo":19.010:187:"Adnan":"Edgardo":19.010|315:"Adnan":"Edgardo":19.010:315:"Adnan":"Edgardo":19.010|443:"Adnan":"Edgardo":19.010:443:"Adnan":"Edgardo":19.010|571:"Adnan":"Edgardo":19.010:571:"Adnan":"Edgardo":19.010|699:"Adnan":"Edgardo":19.010:699:"Adnan":"Edgardo":19.010|827:"Adnan":"Edgardo":19.010:827:"Adnan":"Edgardo":19.010|955:"Adnan":"Edgardo":19.010:955:"Adnan":"Edgardo":19.010|60:"Adnan":"Bob":19.010:60:"Adnan":"Bob":19.010|188:"Adnan":"Bob":19.010:188:"Adnan":"Bob":19.010|316:"Adnan":"Bob":19.010:316:"Adnan":"Bob":19.010|444:"Adnan":"Bob":19.010:444:"Adnan":"Bob":19.010|572:"Adnan":"Bob":19.010:572:"Adnan":"Bob":19.010|700:"Adnan":"Bob":19.010:700:"Adnan":"Bob":19.010|828:"Adnan":"Bob":19.010:828:"Adnan":"Bob":19.010|956:"Adnan":"Bob":19.010:956:"Adnan":"Bob":19.010|61:"Adnan":"Edgardo":19.010:61:"Adnan":"Edgardo":19.010|189:"Adnan":"Edgardo":19.010:189:"Adnan":"Edgardo":19.010|317:"Adnan":"Edgardo":19.010:317:"Adnan":"Edgardo":19.010|445:"Adnan":"Edgardo":19.010:445:"Adnan":"Edgardo":19.010|573:"Adnan":"Edgardo":19.010:573:"Adnan":"Edgardo":19.010|701:"Adnan":"Edgardo":19.010:701:"Adnan":"Edgardo":19.010|829:"Adnan":"Edgardo":19.010:829:"Adnan":"Edgardo":19.010|957:"Adnan":"Edgardo":19.010:957:"Adnan":"Edgardo":19.010|62:"Adnan":"Bob":19.010:62:"Adnan":"Bob":19.010|190:"Adnan":"Bob":19.010:190:"Adnan":"Bob":19.010|318:"Adnan":"Bob":19.010:318:"Adnan":"Bob":19.010|446:"Adnan":"Bob":19.010:446:"Adnan":"Bob":19.010|574:"Adnan":"Bob":19.010:574:"Adnan":"Bob":19.010|702:"Adnan":"Bob":19.010:702:"Adnan":"Bob":19.010|830:"Adnan":"Bob":19.010:830:"Adnan":"Bob":19.010|958:"Adnan":"Bob":19.010:958:"Adnan":"Bob":19.010|63:"Adnan":"Edgardo":19.010:63:"Adnan":"Edgardo":19.010|191:"Adnan":"Edgardo":19.010:191:"Adnan":"Edgardo":19.010|319:"Adnan":"Edgardo":19.010:319:"Adnan":"Edgardo":19.010|447:"Adnan":"Edgardo":19.010:447:"Adnan":"Edgardo":19.010|575:"Adnan":"Edgardo":19.010:575:"Adnan":"Edgardo":19.010|703:"Adnan":"Edgardo":19.010:703:"Adnan":"Edgardo":19.010|831:"Adnan":"Edgardo":19.010:831:"Adnan":"Edgardo":19.010|959:"Adnan":"Edgardo":19.010:959:"Adnan":"Edgardo":19.010|64:"Adnan":"Bob":19.010:64:"Adnan":"Bob":19.010|192:"Adnan":"Bob":19.010:192:"Adnan":"Bob":19.010|320:"Adnan":"Bob":19.010:320:"Adnan":"Bob":19.010|448:"Adnan":"Bob":19.010:448:"Adnan":"Bob":19.010|576:"Adnan":"Bob":19.010:576:"Adnan":"Bob":19.010|704:"Adnan":"Bob":19.010:704:"Adnan":"Bob":19.010|832:"Adnan":"Bob":19.010:832:"Adnan":"Bob":19.010|960:"Adnan":"Bob":19.010:960:"Adnan":"Bob":19.010|65:"Adnan":"Edgardo":19.010:65:"Adnan":"Edgardo":19.010|193:"Adnan":"Edgardo":19.010:193:"Adnan":"Edgardo":19.010|321:"Adnan":"Edgardo":19.010:321:"Adnan":"Edgardo":19.010|449:"Adnan":"Edgardo":19.010:449:"Adnan":"Edgardo":19.010|577:"Adnan":"Edgardo":19.010:577:"Adnan":"Edgardo":19.010|705:"Adnan":"Edgardo":19.010:705:"Adnan":"Edgardo":19.010|833:"Adnan":"Edgardo":19.010:833:"Adnan":"Edgardo":19.010|961:"Adnan":"Edgardo":19.010:961:"Adnan":"Edgardo":19.010|66:"Adnan":"Bob":19.010:66:"Adnan":"Bob":19.010|194:"Adnan":"Bob":19.010:194:"Adnan":"Bob":19.010|322:"Adnan":"Bob":19.010:322:"Adnan":"Bob":19.010|450:"Adnan":"Bob":19.010:450:"Adnan":"Bob":19.010|578:"Adnan":"Bob":19.010:578:"Adnan":"Bob":19.010|706:"Adnan":"Bob":19.010:706:"Adnan":"Bob":19.010|834:"Adnan":"Bob":19.010:834:"Adnan":"Bob":19.010|962:"Adnan":"Bob":19.010:962:"Adnan":"Bob":19.010|67:"Adnan":"Edgardo":19.010:67:"Adnan":"Edgardo":19.010|195:"Adnan":"Edgardo":19.010:195:"Adnan":"Edgardo":19.010|323:"Adnan":"Edgardo":19.010:323:"Adnan":"Edgardo":19.010|451:"Adnan":"Edgardo":19.010:451:"Adnan":"Edgardo":19.010|579:"Adnan":"Edgardo":19.010:579:"Adnan":"Edgardo":19.010|707:"Adnan":"Edgardo":19.010:707:"Adnan":"Edgardo":19.010|835:"Adnan":"Edgardo":19.010:835:"Adnan":"Edgardo":19.010|963:"Adnan":"Edgardo":19.010:963:"Adnan":"Edgardo":19.010|68:"Adnan":"Bob":19.010:68:"Adnan":"Bob":19.010|196:"Adnan":"Bob":19.010:196:"Adnan":"Bob":19.010|324:"Adnan":"Bob":19.010:324:"Adnan":"Bob":19.010|452:"Adnan":"Bob":19.010:452:"Adnan":"Bob":19.010|580:"Adnan":"Bob":19.010:580:"Adnan":"Bob":19.010|708:"Adnan":"Bob":19.010:708:"Adnan":"Bob":19.010|836:"Adnan":"Bob":19.010:836:"Adnan":"Bob":19.010|964:"Adnan":"Bob":19.010:964:"Adnan":"Bob":19.010|69:"Adnan":"Edgardo":19.010:69:"Adnan":"Edgardo":19.010|197:"Adnan":"Edgardo":19.010:197:"Adnan":"Edgardo":19.010|325:"Adnan":"Edgardo":19.010:325:"Adnan":"Edgardo":19.010|453:"Adnan":"Edgardo":19.010:453:"Adnan":"Edgardo":19.010|581:"Adnan":"Edgardo":19.010:581:"Adnan":"Edgardo":19.010|709:"Adnan":"Edgardo":19.010:709:"Adnan":"Edgardo":19.010|837:"Adnan":"Edgardo":19.010:837:"Adnan":"Edgardo":19.010|965:"Adnan":"Edgardo":19.010:965:"Adnan":"Edgardo":19.010|70:"Adnan":"Bob":19.010:70:"Adnan":"Bob":19.010|198:"Adnan":"Bob":19.010:198:"Adnan":"Bob":19.010|326:"Adnan":"Bob":19.010:326:"Adnan":"Bob":19.010|454:"Adnan":"Bob":19.010:454:"Adnan":"Bob":19.010|582:"Adnan":"Bob":19.010:582:"Adnan":"Bob":19.010|710:"Adnan":"Bob":19.010:710:"Adnan":"Bob":19.010|838:"Adnan":"Bob":19.010:838:"Adnan":"Bob":19.010|966:"Adnan":"Bob":19.010:966:"Adnan":"Bob":19.010|71:"Adnan":"Edgardo":19.010:71:"Adnan":"Edgardo":19.010|199:"Adnan":"Edgardo":19.010:199:"Adnan":"Edgardo":19.010|327:"Adnan":"Edgardo":19.010:327:"Adnan":"Edgardo":19.010|455:"Adnan":"Edgardo":19.010:455:"Adnan":"Edgardo":19.010|583:"Adnan":"Edgardo":19.010:583:"Adnan":"Edgardo":19.010|711:"Adnan":"Edgardo":19.010:711:"Adnan":"Edgardo":19.010|839:"Adnan":"Edgardo":19.010:839:"Adnan":"Edgardo":19.010|967:"Adnan":"Edgardo":19.010:967:"Adnan":"Edgardo":19.010|72:"Adnan":"Bob":19.010:72:"Adnan":"Bob":19.010|200:"Adnan":"Bob":19.010:200:"Adnan":"Bob":19.010|328:"Adnan":"Bob":19.010:328:"Adnan":"Bob":19.010|456:"Adnan":"Bob":19.010:456:"Adnan":"Bob":19.010|584:"Adnan":"Bob":19.010:584:"Adnan":"Bob":19.010|712:"Adnan":"Bob":19.010:712:"Adnan":"Bob":19.010|840:"Adnan":"Bob":19.010:840:"Adnan":"Bob":19.010|968:"Adnan":"Bob":19.010:968:"Adnan":"Bob":19.010|73:"Adnan":"Edgardo":19.010:73:"Adnan":"Edgardo":19.010|201:"Adnan":"Edgardo":19.010:201:"Adnan":"Edgardo":19.010|329:"Adnan":"Edgardo":19.010:329:"Adnan":"Edgardo":19.010|457:"Adnan":"Edgardo":19.010:457:"Adnan":"Edgardo":19.010|585:"Adnan":"Edgardo":19.010:585:"Adnan":"Edgardo":19.010|713:"Adnan":"Edgardo":19.010:713:"Adnan":"Edgardo":19.010|841:"Adnan":"Edgardo":19.010:841:"Adnan":"Edgardo":19.010|969:"Adnan":"Edgardo":19.010:969:"Adnan":"Edgardo":19.010|74:"Adnan":"Bob":19.010:74:"Adnan":"Bob":19.010|202:"Adnan":"Bob":19.010:202:"Adnan":"Bob":19.010|330:"Adnan":"Bob":19.010:330:"Adnan":"Bob":19.010|458:"Adnan":"Bob":19.010:458:"Adnan":"Bob":19.010|586:"Adnan":"Bob":19.010:586:"Adnan":"Bob":19.010|714:"Adnan":"Bob":19.010:714:"Adnan":"Bob":19.010|842:"Adnan":"Bob":19.010:842:"Adnan":"Bob":19.010|970:"Adnan":"Bob":19.010:970:"Adnan":"Bob":19.010|75:"Adnan":"Edgardo":19.010:75:"Adnan":"Edgardo":19.010|203:"Adnan":"Edgardo":19.010:203:"Adnan":"Edgardo":19.010|331:"Adnan":"Edgardo":19.010:331:"Adnan":"Edgardo":19.010|459:"Adnan":"Edgardo":19.010:459:"Adnan":"Edgardo":19.010|587:"Adnan":"Edgardo":19.010:587:"Adnan":"Edgardo":19.010|715:"Adnan":"Edgardo":19.010:715:"Adnan":"Edgardo":19.010|843:"Adnan":"Edgardo":19.010:843:"Adnan":"Edgardo":19.010|971:"Adnan":"Edgardo":19.010:971:"Adnan":"Edgardo":19.010|76:"Adnan":"Bob":19.010:76:"Adnan":"Bob":19.010|204:"Adnan":"Bob":19.010:204:"Adnan":"Bob":19.010|332:"Adnan":"Bob":19.010:332:"Adnan":"Bob":19.010|460:"Adnan":"Bob":19.010:460:"Adnan":"Bob":19.010|588:"Adnan":"Bob":19.010:588:"Adnan":"Bob":19.010|716:"Adnan":"Bob":19.010:716:"Adnan":"Bob":19.010|844:"Adnan":"Bob":19.010:844:"Adnan":"Bob":19.010|972:"Adnan":"Bob":19.010:972:"Adnan":"Bob":19.010|77:"Adnan":"Edgardo":19.010:77:"Adnan":"Edgardo":19.010|205:"Adnan":"Edgardo":19.010:205:"Adnan":"Edgardo":19.010|333:"Adnan":"Edgardo":19.010:333:"Adnan":"Edgardo":19.010|461:"Adnan":"Edgardo":19.010:461:"Adnan":"Edgardo":19.010|589:"Adnan":"Edgardo":19.010:589:"Adnan":"Edgardo":19.010|717:"Adnan":"Edgardo":19.010:717:"Adnan":"Edgardo":19.010|845:"Adnan":"Edgardo":19.010:845:"Adnan":"Edgardo":19.010|973:"Adnan":"Edgardo":19.010:973:"Adnan":"Edgardo":19.010|78:"Adnan":"Bob":19.010:78:"Adnan":"Bob":19.010|206:"Adnan":"Bob":19.010:206:"Adnan":"Bob":19.010|334:"Adnan":"Bob":19.010:334:"Adnan":"Bob":19.010|462:"Adnan":"Bob":19.010:462:"Adnan":"Bob":19.010|590:"Adnan":"Bob":19.010:590:"Adnan":"Bob":19.010|718:"Adnan":"Bob":19.010:718:"Adnan":"Bob":19.010|846:"Adnan":"Bob":19.010:846:"Adnan":"Bob":19.010|974:"Adnan":"Bob":19.010:974:"Adnan":"Bob":19.010|79:"Adnan":"Edgardo":19.010:79:"Adnan":"Edgardo":19.010|207:"Adnan":"Edgardo":19.010:207:"Adnan":"Edgardo":19.010|335:"Adnan":"Edgardo":19.010:335:"Adnan":"Edgardo":19.010|463:"Adnan":"Edgardo":19.010:463:"Adnan":"Edgardo":19.010|591:"Adnan":"Edgardo":19.010:591:"Adnan":"Edgardo":19.010|719:"Adnan":"Edgardo":19.010:719:"Adnan":"Edgardo":19.010|847:"Adnan":"Edgardo":19.010:847:"Adnan":"Edgardo":19.010|975:"Adnan":"Edgardo":19.010:975:"Adnan":"Edgardo":19.010|80:"Adnan":"Bob":19.010:80:"Adnan":"Bob":19.010|208:"Adnan":"Bob":19.010:208:"Adnan":"Bob":19.010|336:"Adnan":"Bob":19.010:336:"Adnan":"Bob":19.010|464:"Adnan":"Bob":19.010:464:"Adnan":"Bob":19.010|592:"Adnan":"Bob":19.010:592:"Adnan":"Bob":19.010|720:"Adnan":"Bob":19.010:720:"Adnan":"Bob":19.010|848:"Adnan":"Bob":19.010:848:"Adnan":"Bob":19.010|976:"Adnan":"Bob":19.010:976:"Adnan":"Bob":19.010|81:"Adnan":"Edgardo":19.010:81:"Adnan":"Edgardo":19.010|209:"Adnan":"Edgardo":19.010:209:"Adnan":"Edgardo":19.010|337:"Adnan":"Edgardo":19.010:337:"Adnan":"Edgardo":19.010|465:"Adnan":"Edgardo":19.010:465:"Adnan":"Edgardo":19.010|593:"Adnan":"Edgardo":19.010:593:"Adnan":"Edgardo":19.010|721:"Adnan":"Edgardo":19.010:721:"Adnan":"Edgardo":19.010|849:"Adnan":"Edgardo":19.010:849:"Adnan":"Edgardo":19.010|977:"Adnan":"Edgardo":19.010:977:"Adnan":"Edgardo":19.010|82:"Adnan":"Bob":19.010:82:"Adnan":"Bob":19.010|210:"Adnan":"Bob":19.010:210:"Adnan":"Bob":19.010|338:"Adnan":"Bob":19.010:338:"Adnan":"Bob":19.010|466:"Adnan":"Bob":19.010:466:"Adnan":"Bob":19.010|594:"Adnan":"Bob":19.010:594:"Adnan":"Bob":19.010|722:"Adnan":"Bob":19.010:722:"Adnan":"Bob":19.010|850:"Adnan":"Bob":19.010:850:"Adnan":"Bob":19.010|978:"Adnan":"Bob":19.010:978:"Adnan":"Bob":19.010|83:"Adnan":"Edgardo":19.010:83:"Adnan":"Edgardo":19.010|211:"Adnan":"Edgardo":19.010:211:"Adnan":"Edgardo":19.010|339:"Adnan":"Edgardo":19.010:339:"Adnan":"Edgardo":19.010|467:"Adnan":"Edgardo":19.010:467:"Adnan":"Edgardo":19.010|595:"Adnan":"Edgardo":19.010:595:"Adnan":"Edgardo":19.010|723:"Adnan":"Edgardo":19.010:723:"Adnan":"Edgardo":19.010|851:"Adnan":"Edgardo":19.010:851:"Adnan":"Edgardo":19.010|979:"Adnan":"Edgardo":19.010:979:"Adnan":"Edgardo":19.010|84:"Adnan":"Bob":19.010:84:"Adnan":"Bob":19.010|212:"Adnan":"Bob":19.010:212:"Adnan":"Bob":19.010|340:"Adnan":"Bob":19.010:340:"Adnan":"Bob":19.010|468:"Adnan":"Bob":19.010:468:"Adnan":"Bob":19.010|596:"Adnan":"Bob":19.010:596:"Adnan":"Bob":19.010|724:"Adnan":"Bob":19.010:724:"Adnan":"Bob":19.010|852:"Adnan":"Bob":19.010:852:"Adnan":"Bob":19.010|980:"Adnan":"Bob":19.010:980:"Adnan":"Bob":19.010|85:"Adnan":"Edgardo":19.010:85:"Adnan":"Edgardo":19.010|213:"Adnan":"Edgardo":19.010:213:"Adnan":"Edgardo":19.010|341:"Adnan":"Edgardo":19.010:341:"Adnan":"Edgardo":19.010|469:"Adnan":"Edgardo":19.010:469:"Adnan":"Edgardo":19.010|597:"Adnan":"Edgardo":19.010:597:"Adnan":"Edgardo":19.010|725:"Adnan":"Edgardo":19.010:725:"Adnan":"Edgardo":19.010|853:"Adnan":"Edgardo":19.010:853:"Adnan":"Edgardo":19.010|981:"Adnan":"Edgardo":19.010:981:"Adnan":"Edgardo":19.010|86:"Adnan":"Bob":19.010:86:"Adnan":"Bob":19.010|214:"Adnan":"Bob":19.010:214:"Adnan":"Bob":19.010|342:"Adnan":"Bob":19.010:342:"Adnan":"Bob":19.010|470:"Adnan":"Bob":19.010:470:"Adnan":"Bob":19.010|598:"Adnan":"Bob":19.010:598:"Adnan":"Bob":19.010|726:"Adnan":"Bob":19.010:726:"Adnan":"Bob":19.010|854:"Adnan":"Bob":19.010:854:"Adnan":"Bob":19.010|982:"Adnan":"Bob":19.010:982:"Adnan":"Bob":19.010|87:"Adnan":"Edgardo":19.010:87:"Adnan":"Edgardo":19.010|215:"Adnan":"Edgardo":19.010:215:"Adnan":"Edgardo":19.010|343:"Adnan":"Edgardo":19.010:343:"Adnan":"Edgardo":19.010|471:"Adnan":"Edgardo":19.010:471:"Adnan":"Edgardo":19.010|599:"Adnan":"Edgardo":19.010:599:"Adnan":"Edgardo":19.010|727:"Adnan":"Edgardo":19.010:727:"Adnan":"Edgardo":19.010|855:"Adnan":"Edgardo":19.010:855:"Adnan":"Edgardo":19.010|983:"Adnan":"Edgardo":19.010:983:"Adnan":"Edgardo":19.010|88:"Adnan":"Bob":19.010:88:"Adnan":"Bob":19.010|216:"Adnan":"Bob":19.010:216:"Adnan":"Bob":19.010|344:"Adnan":"Bob":19.010:344:"Adnan":"Bob":19.010|472:"Adnan":"Bob":19.010:472:"Adnan":"Bob":19.010|600:"Adnan":"Bob":19.010:600:"Adnan":"Bob":19.010|728:"Adnan":"Bob":19.010:728:"Adnan":"Bob":19.010|856:"Adnan":"Bob":19.010:856:"Adnan":"Bob":19.010|984:"Adnan":"Bob":19.010:984:"Adnan":"Bob":19.010|89:"Adnan":"Edgardo":19.010:89:"Adnan":"Edgardo":19.010|217:"Adnan":"Edgardo":19.010:217:"Adnan":"Edgardo":19.010|345:"Adnan":"Edgardo":19.010:345:"Adnan":"Edgardo":19.010|473:"Adnan":"Edgardo":19.010:473:"Adnan":"Edgardo":19.010|601:"Adnan":"Edgardo":19.010:601:"Adnan":"Edgardo":19.010|729:"Adnan":"Edgardo":19.010:729:"Adnan":"Edgardo":19.010|857:"Adnan":"Edgardo":19.010:857:"Adnan":"Edgardo":19.010|985:"Adnan":"Edgardo":19.010:985:"Adnan":"Edgardo":19.010|90:"Adnan":"Bob":19.010:90:"Adnan":"Bob":19.010|218:"Adnan":"Bob":19.010:218:"Adnan":"Bob":19.010|346:"Adnan":"Bob":19.010:346:"Adnan":"Bob":19.010|474:"Adnan":"Bob":19.010:474:"Adnan":"Bob":19.010|602:"Adnan":"Bob":19.010:602:"Adnan":"Bob":19.010|730:"Adnan":"Bob":19.010:730:"Adnan":"Bob":19.010|858:"Adnan":"Bob":19.010:858:"Adnan":"Bob":19.010|986:"Adnan":"Bob":19.010:986:"Adnan":"Bob":19.010|91:"Adnan":"Edgardo":19.010:91:"Adnan":"Edgardo":19.010|219:"Adnan":"Edgardo":19.010:219:"Adnan":"Edgardo":19.010|347:"Adnan":"Edgardo":19.010:347:"Adnan":"Edgardo":19.010|475:"Adnan":"Edgardo":19.010:475:"Adnan":"Edgardo":19.010|603:"Adnan":"Edgardo":19.010:603:"Adnan":"Edgardo":19.010|731:"Adnan":"Edgardo":19.010:731:"Adnan":"Edgardo":19.010|859:"Adnan":"Edgardo":19.010:859:"Adnan":"Edgardo":19.010|987:"Adnan":"Edgardo":19.010:987:"Adnan":"Edgardo":19.010|92:"Adnan":"Bob":19.010:92:"Adnan":"Bob":19.010|220:"Adnan":"Bob":19.010:220:"Adnan":"Bob":19.010|348:"Adnan":"Bob":19.010:348:"Adnan":"Bob":19.010|476:"Adnan":"Bob":19.010:476:"Adnan":"Bob":19.010|604:"Adnan":"Bob":19.010:604:"Adnan":"Bob":19.010|732:"Adnan":"Bob":19.010:732:"Adnan":"Bob":19.010|860:"Adnan":"Bob":19.010:860:"Adnan":"Bob":19.010|988:"Adnan":"Bob":19.010:988:"Adnan":"Bob":19.010|93:"Adnan":"Edgardo":19.010:93:"Adnan":"Edgardo":19.010|221:"Adnan":"Edgardo":19.010:221:"Adnan":"Edgardo":19.010|349:"Adnan":"Edgardo":19.010:349:"Adnan":"Edgardo":19.010|477:"Adnan":"Edgardo":19.010:477:"Adnan":"Edgardo":19.010|605:"Adnan":"Edgardo":19.010:605:"Adnan":"Edgardo":19.010|733:"Adnan":"Edgardo":19.010:733:"Adnan":"Edgardo":19.010|861:"Adnan":"Edgardo":19.010:861:"Adnan":"Edgardo":19.010|989:"Adnan":"Edgardo":19.010:989:"Adnan":"Edgardo":19.010|94:"Adnan":"Bob":19.010:94:"Adnan":"Bob":19.010|222:"Adnan":"Bob":19.010:222:"Adnan":"Bob":19.010|350:"Adnan":"Bob":19.010:350:"Adnan":"Bob":19.010|478:"Adnan":"Bob":19.010:478:"Adnan":"Bob":19.010|606:"Adnan":"Bob":19.010:606:"Adnan":"Bob":19.010|734:"Adnan":"Bob":19.010:734:"Adnan":"Bob":19.010|862:"Adnan":"Bob":19.010:862:"Adnan":"Bob":19.010|990:"Adnan":"Bob":19.010:990:"Adnan":"Bob":19.010|95:"Adnan":"Edgardo":19.010:95:"Adnan":"Edgardo":19.010|223:"Adnan":"Edgardo":19.010:223:"Adnan":"Edgardo":19.010|351:"Adnan":"Edgardo":19.010:351:"Adnan":"Edgardo":19.010|479:"Adnan":"Edgardo":19.010:479:"Adnan":"Edgardo":19.010|607:"Adnan":"Edgardo":19.010:607:"Adnan":"Edgardo":19.010|735:"Adnan":"Edgardo":19.010:735:"Adnan":"Edgardo":19.010|863:"Adnan":"Edgardo":19.010:863:"Adnan":"Edgardo":19.010|991:"Adnan":"Edgardo":19.010:991:"Adnan":"Edgardo":19.010|96:"Adnan":"Bob":19.010:96:"Adnan":"Bob":19.010|224:"Adnan":"Bob":19.010:224:"Adnan":"Bob":19.010|352:"Adnan":"Bob":19.010:352:"Adnan":"Bob":19.010|480:"Adnan":"Bob":19.010:480:"Adnan":"Bob":19.010|608:"Adnan":"Bob":19.010:608:"Adnan":"Bob":19.010|736:"Adnan":"Bob":19.010:736:"Adnan":"Bob":19.010|864:"Adnan":"Bob":19.010:864:"Adnan":"Bob":19.010|992:"Adnan":"Bob":19.010:992:"Adnan":"Bob":19.010|97:"Adnan":"Edgardo":19.010:97:"Adnan":"Edgardo":19.010|225:"Adnan":"Edgardo":19.010:225:"Adnan":"Edgardo":19.010|353:"Adnan":"Edgardo":19.010:353:"Adnan":"Edgardo":19.010|481:"Adnan":"Edgardo":19.010:481:"Adnan":"Edgardo":19.010|609:"Adnan":"Edgardo":19.010:609:"Adnan":"Edgardo":19.010|737:"Adnan":"Edgardo":19.010:737:"Adnan":"Edgardo":19.010|865:"Adnan":"Edgardo":19.010:865:"Adnan":"Edgardo":19.010|993:"Adnan":"Edgardo":19.010:993:"Adnan":"Edgardo":19.010|98:"Adnan":"Bob":19.010:98:"Adnan":"Bob":19.010|226:"Adnan":"Bob":19.010:226:"Adnan":"Bob":19.010|354:"Adnan":"Bob":19.010:354:"Adnan":"Bob":19.010|482:"Adnan":"Bob":19.010:482:"Adnan":"Bob":19.010|610:"Adnan":"Bob":19.010:610:"Adnan":"Bob":19.010|738:"Adnan":"Bob":19.010:738:"Adnan":"Bob":19.010|866:"Adnan":"Bob":19.010:866:"Adnan":"Bob":19.010|994:"Adnan":"Bob":19.010:994:"Adnan":"Bob":19.010|99:"Adnan":"Edgardo":19.010:99:"Adnan":"Edgardo":19.010|227:"Adnan":"Edgardo":19.010:227:"Adnan":"Edgardo":19.010|355:"Adnan":"Edgardo":19.010:355:"Adnan":"Edgardo":19.010|483:"Adnan":"Edgardo":19.010:483:"Adnan":"Edgardo":19.010|611:"Adnan":"Edgardo":19.010:611:"Adnan":"Edgardo":19.010|739:"Adnan":"Edgardo":19.010:739:"Adnan":"Edgardo":19.010|867:"Adnan":"Edgardo":19.010:867:"Adnan":"Edgardo":19.010|995:"Adnan":"Edgardo":19.010:995:"Adnan":"Edgardo":19.010|100:"Adnan":"Bob":19.010:100:"Adnan":"Bob":19.010|228:"Adnan":"Bob":19.010:228:"Adnan":"Bob":19.010|356:"Adnan":"Bob":19.010:356:"Adnan":"Bob":19.010|484:"Adnan":"Bob":19.010:484:"Adnan":"Bob":19.010|612:"Adnan":"Bob":19.010:612:"Adnan":"Bob":19.010|740:"Adnan":"Bob":19.010:740:"Adnan":"Bob":19.010|868:"Adnan":"Bob":19.010:868:"Adnan":"Bob":19.010|996:"Adnan":"Bob":19.010:996:"Adnan":"Bob":19.010|101:"Adnan":"Edgardo":19.010:101:"Adnan":"Edgardo":19.010|229:"Adnan":"Edgardo":19.010:229:"Adnan":"Edgardo":19.010|357:"Adnan":"Edgardo":19.010:357:"Adnan":"Edgardo":19.010|485:"Adnan":"Edgardo":19.010:485:"Adnan":"Edgardo":19.010|613:"Adnan":"Edgardo":19.010:613:"Adnan":"Edgardo":19.010|741:"Adnan":"Edgardo":19.010:741:"Adnan":"Edgardo":19.010|869:"Adnan":"Edgardo":19.010:869:"Adnan":"Edgardo":19.010|997:"Adnan":"Edgardo":19.010:997:"Adnan":"Edgardo":19.010|102:"Adnan":"Bob":19.010:102:"Adnan":"Bob":19.010|230:"Adnan":"Bob":19.010:230:"Adnan":"Bob":19.010|358:"Adnan":"Bob":19.010:358:"Adnan":"Bob":19.010|486:"Adnan":"Bob":19.010:486:"Adnan":"Bob":19.010|614:"Adnan":"Bob":19.010:614:"Adnan":"Bob":19.010|742:"Adnan":"Bob":19.010:742:"Adnan":"Bob":19.010|870:"Adnan":"Bob":19.010:870:"Adnan":"Bob":19.010|998:"Adnan":"Bob":19.010:998:"Adnan":"Bob":19.010|103:"Adnan":"Edgardo":19.010:103:"Adnan":"Edgardo":19.010|231:"Adnan":"Edgardo":19.010:231:"Adnan":"Edgardo":19.010|359:"Adnan":"Edgardo":19.010:359:"Adnan":"Edgardo":19.010|487:"Adnan":"Edgardo":19.010:487:"Adnan":"Edgardo":19.010|615:"Adnan":"Edgardo":19.010:615:"Adnan":"Edgardo":19.010|743:"Adnan":"Edgardo":19.010:743:"Adnan":"Edgardo":19.010|871:"Adnan":"Edgardo":19.010:871:"Adnan":"Edgardo":19.010|999:"Adnan":"Edgardo":19.010:999:"Adnan":"Edgardo":19.010|104:"Adnan":"Bob":19.010:104:"Adnan":"Bob":19.010|232:"Adnan":"Bob":19.010:232:"Adnan":"Bob":19.010|360:"Adnan":"Bob":19.010:360:"Adnan":"Bob":19.010|488:"Adnan":"Bob":19.010:488:"Adnan":"Bob":19.010|616:"Adnan":"Bob":19.010:616:"Adnan":"Bob":19.010|744:"Adnan":"Bob":19.010:744:"Adnan":"Bob":19.010|872:"Adnan":"Bob":19.010:872:"Adnan":"Bob":19.010|1000:"Adnan":"Bob":19.010:1000:"Adnan":"Bob":19.010|105:"Adnan":"Edgardo":19.010:105:"Adnan":"Edgardo":19.010|233:"Adnan":"Edgardo":19.010:233:"Adnan":"Edgardo":19.010|361:"Adnan":"Edgardo":19.010:361:"Adnan":"Edgardo":19.010|489:"Adnan":"Edgardo":19.010:489:"Adnan":"Edgardo":19.010|617:"Adnan":"Edgardo":19.010:617:"Adnan":"Edgardo":19.010|745:"Adnan":"Edgardo":19.010:745:"Adnan":"Edgardo":19.010|873:"Adnan":"Edgardo":19.010:873:"Adnan":"Edgardo":19.010|1001:"Adnan":"Edgardo":19.010:1001:"Adnan":"Edgardo":19.010|106:"Adnan":"Bob":19.010:106:"Adnan":"Bob":19.010|234:"Adnan":"Bob":19.010:234:"Adnan":"Bob":19.010|362:"Adnan":"Bob":19.010:362:"Adnan":"Bob":19.010|490:"Adnan":"Bob":19.010:490:"Adnan":"Bob":19.010|618:"Adnan":"Bob":19.010:618:"Adnan":"Bob":19.010|746:"Adnan":"Bob":19.010:746:"Adnan":"Bob":19.010|874:"Adnan":"Bob":19.010:874:"Adnan":"Bob":19.010|1002:"Adnan":"Bob":19.010:1002:"Adnan":"Bob":19.010|107:"Adnan":"Edgardo":19.010:107:"Adnan":"Edgardo":19.010|235:"Adnan":"Edgardo":19.010:235:"Adnan":"Edgardo":19.010|363:"Adnan":"Edgardo":19.010:363:"Adnan":"Edgardo":19.010|491:"Adnan":"Edgardo":19.010:491:"Adnan":"Edgardo":19.010|619:"Adnan":"Edgardo":19.010:619:"Adnan":"Edgardo":19.010|747:"Adnan":"Edgardo":19.010:747:"Adnan":"Edgardo":19.010|875:"Adnan":"Edgardo":19.010:875:"Adnan":"Edgardo":19.010|1003:"Adnan":"Edgardo":19.010:1003:"Adnan":"Edgardo":19.010|108:"Adnan":"Bob":19.010:108:"Adnan":"Bob":19.010|236:"Adnan":"Bob":19.010:236:"Adnan":"Bob":19.010|364:"Adnan":"Bob":19.010:364:"Adnan":"Bob":19.010|492:"Adnan":"Bob":19.010:492:"Adnan":"Bob":19.010|620:"Adnan":"Bob":19.010:620:"Adnan":"Bob":19.010|748:"Adnan":"Bob":19.010:748:"Adnan":"Bob":19.010|876:"Adnan":"Bob":19.010:876:"Adnan":"Bob":19.010|1004:"Adnan":"Bob":19.010:1004:"Adnan":"Bob":19.010|109:"Adnan":"Edgardo":19.010:109:"Adnan":"Edgardo":19.010|237:"Adnan":"Edgardo":19.010:237:"Adnan":"Edgardo":19.010|365:"Adnan":"Edgardo":19.010:365:"Adnan":"Edgardo":19.010|493:"Adnan":"Edgardo":19.010:493:"Adnan":"Edgardo":19.010|621:"Adnan":"Edgardo":19.010:621:"Adnan":"Edgardo":19.010|749:"Adnan":"Edgardo":19.010:749:"Adnan":"Edgardo":19.010|877:"Adnan":"Edgardo":19.010:877:"Adnan":"Edgardo":19.010|1005:"Adnan":"Edgardo":19.010:1005:"Adnan":"Edgardo":19.010|110:"Adnan":"Bob":19.010:110:"Adnan":"Bob":19.010|238:"Adnan":"Bob":19.010:238:"Adnan":"Bob":19.010|366:"Adnan":"Bob":19.010:366:"Adnan":"Bob":19.010|494:"Adnan":"Bob":19.010:494:"Adnan":"Bob":19.010|622:"Adnan":"Bob":19.010:622:"Adnan":"Bob":19.010|750:"Adnan":"Bob":19.010:750:"Adnan":"Bob":19.010|878:"Adnan":"Bob":19.010:878:"Adnan":"Bob":19.010|1006:"Adnan":"Bob":19.010:1006:"Adnan":"Bob":19.010|111:"Adnan":"Edgardo":19.010:111:"Adnan":"Edgardo":19.010|239:"Adnan":"Edgardo":19.010:239:"Adnan":"Edgardo":19.010|367:"Adnan":"Edgardo":19.010:367:"Adnan":"Edgardo":19.010|495:"Adnan":"Edgardo":19.010:495:"Adnan":"Edgardo":19.010|623:"Adnan":"Edgardo":19.010:623:"Adnan":"Edgardo":19.010|751:"Adnan":"Edgardo":19.010:751:"Adnan":"Edgardo":19.010|879:"Adnan":"Edgardo":19.010:879:"Adnan":"Edgardo":19.010|1007:"Adnan":"Edgardo":19.010:1007:"Adnan":"Edgardo":19.010|112:"Adnan":"Bob":19.010:112:"Adnan":"Bob":19.010|240:"Adnan":"Bob":19.010:240:"Adnan":"Bob":19.010|368:"Adnan":"Bob":19.010:368:"Adnan":"Bob":19.010|496:"Adnan":"Bob":19.010:496:"Adnan":"Bob":19.010|624:"Adnan":"Bob":19.010:624:"Adnan":"Bob":19.010|752:"Adnan":"Bob":19.010:752:"Adnan":"Bob":19.010|880:"Adnan":"Bob":19.010:880:"Adnan":"Bob":19.010|1008:"Adnan":"Bob":19.010:1008:"Adnan":"Bob":19.010|113:"Adnan":"Edgardo":19.010:113:"Adnan":"Edgardo":19.010|241:"Adnan":"Edgardo":19.010:241:"Adnan":"Edgardo":19.010|369:"Adnan":"Edgardo":19.010:369:"Adnan":"Edgardo":19.010|497:"Adnan":"Edgardo":19.010:497:"Adnan":"Edgardo":19.010|625:"Adnan":"Edgardo":19.010:625:"Adnan":"Edgardo":19.010|753:"Adnan":"Edgardo":19.010:753:"Adnan":"Edgardo":19.010|881:"Adnan":"Edgardo":19.010:881:"Adnan":"Edgardo":19.010|1009:"Adnan":"Edgardo":19.010:1009:"Adnan":"Edgardo":19.010|114:"Adnan":"Bob":19.010:114:"Adnan":"Bob":19.010|242:"Adnan":"Bob":19.010:242:"Adnan":"Bob":19.010|370:"Adnan":"Bob":19.010:370:"Adnan":"Bob":19.010|498:"Adnan":"Bob":19.010:498:"Adnan":"Bob":19.010|626:"Adnan":"Bob":19.010:626:"Adnan":"Bob":19.010|754:"Adnan":"Bob":19.010:754:"Adnan":"Bob":19.010|882:"Adnan":"Bob":19.010:882:"Adnan":"Bob":19.010|1010:"Adnan":"Bob":19.010:1010:"Adnan":"Bob":19.010|115:"Adnan":"Edgardo":19.010:115:"Adnan":"Edgardo":19.010|243:"Adnan":"Edgardo":19.010:243:"Adnan":"Edgardo":19.010|371:"Adnan":"Edgardo":19.010:371:"Adnan":"Edgardo":19.010|499:"Adnan":"Edgardo":19.010:499:"Adnan":"Edgardo":19.010|627:"Adnan":"Edgardo":19.010:627:"Adnan":"Edgardo":19.010|755:"Adnan":"Edgardo":19.010:755:"Adnan":"Edgardo":19.010|883:"Adnan":"Edgardo":19.010:883:"Adnan":"Edgardo":19.010|116:"Adnan":"Bob":19.010:116:"Adnan":"Bob":19.010|244:"Adnan":"Bob":19.010:244:"Adnan":"Bob":19.010|372:"Adnan":"Bob":19.010:372:"Adnan":"Bob":19.010|500:"Adnan":"Bob":19.010:500:"Adnan":"Bob":19.010|628:"Adnan":"Bob":19.010:628:"Adnan":"Bob":19.010|756:"Adnan":"Bob":19.010:756:"Adnan":"Bob":19.010|884:"Adnan":"Bob":19.010:884:"Adnan":"Bob":19.010|117:"Adnan":"Edgardo":19.010:117:"Adnan":"Edgardo":19.010|245:"Adnan":"Edgardo":19.010:245:"Adnan":"Edgardo":19.010|373:"Adnan":"Edgardo":19.010:373:"Adnan":"Edgardo":19.010|501:"Adnan":"Edgardo":19.010:501:"Adnan":"Edgardo":19.010|629:"Adnan":"Edgardo":19.010:629:"Adnan":"Edgardo":19.010|757:"Adnan":"Edgardo":19.010:757:"Adnan":"Edgardo":19.010|885:"Adnan":"Edgardo":19.010:885:"Adnan":"Edgardo":19.010|118:"Adnan":"Bob":19.010:118:"Adnan":"Bob":19.010|246:"Adnan":"Bob":19.010:246:"Adnan":"Bob":19.010|374:"Adnan":"Bob":19.010:374:"Adnan":"Bob":19.010|502:"Adnan":"Bob":19.010:502:"Adnan":"Bob":19.010|630:"Adnan":"Bob":19.010:630:"Adnan":"Bob":19.010|758:"Adnan":"Bob":19.010:758:"Adnan":"Bob":19.010|886:"Adnan":"Bob":19.010:886:"Adnan":"Bob":19.010|119:"Adnan":"Edgardo":19.010:119:"Adnan":"Edgardo":19.010|247:"Adnan":"Edgardo":19.010:247:"Adnan":"Edgardo":19.010|375:"Adnan":"Edgardo":19.010:375:"Adnan":"Edgardo":19.010|503:"Adnan":"Edgardo":19.010:503:"Adnan":"Edgardo":19.010|631:"Adnan":"Edgardo":19.010:631:"Adnan":"Edgardo":19.010|759:"Adnan":"Edgardo":19.010:759:"Adnan":"Edgardo":19.010|887:"Adnan":"Edgardo":19.010:887:"Adnan":"Edgardo":19.010|120:"Adnan":"Bob":19.010:120:"Adnan":"Bob":19.010|248:"Adnan":"Bob":19.010:248:"Adnan":"Bob":19.010|376:"Adnan":"Bob":19.010:376:"Adnan":"Bob":19.010|504:"Adnan":"Bob":19.010:504:"Adnan":"Bob":19.010|632:"Adnan":"Bob":19.010:632:"Adnan":"Bob":19.010|760:"Adnan":"Bob":19.010:760:"Adnan":"Bob":19.010|888:"Adnan":"Bob":19.010:888:"Adnan":"Bob":19.010|121:"Adnan":"Edgardo":19.010:121:"Adnan":"Edgardo":19.010|249:"Adnan":"Edgardo":19.010:249:"Adnan":"Edgardo":19.010|377:"Adnan":"Edgardo":19.010:377:"Adnan":"Edgardo":19.010|505:"Adnan":"Edgardo":19.010:505:"Adnan":"Edgardo":19.010|633:"Adnan":"Edgardo":19.010:633:"Adnan":"Edgardo":19.010|761:"Adnan":"Edgardo":19.010:761:"Adnan":"Edgardo":19.010|889:"Adnan":"Edgardo":19.010:889:"Adnan":"Edgardo":19.010|122:"Adnan":"Bob":19.010:122:"Adnan":"Bob":19.010|250:"Adnan":"Bob":19.010:250:"Adnan":"Bob":19.010|378:"Adnan":"Bob":19.010:378:"Adnan":"Bob":19.010|506:"Adnan":"Bob":19.010:506:"Adnan":"Bob":19.010|634:"Adnan":"Bob":19.010:634:"Adnan":"Bob":19.010|762:"Adnan":"Bob":19.010:762:"Adnan":"Bob":19.010|890:"Adnan":"Bob":19.010:890:"Adnan":"Bob":19.010|123:"Adnan":"Edgardo":19.010:123:"Adnan":"Edgardo":19.010|251:"Adnan":"Edgardo":19.010:251:"Adnan":"Edgardo":19.010|379:"Adnan":"Edgardo":19.010:379:"Adnan":"Edgardo":19.010|507:"Adnan":"Edgardo":19.010:507:"Adnan":"Edgardo":19.010|635:"Adnan":"Edgardo":19.010:635:"Adnan":"Edgardo":19.010|763:"Adnan":"Edgardo":19.010:763:"Adnan":"Edgardo":19.010|891:"Adnan":"Edgardo":19.010:891:"Adnan":"Edgardo":19.010|124:"Adnan":"Bob":19.010:124:"Adnan":"Bob":19.010|252:"Adnan":"Bob":19.010:252:"Adnan":"Bob":19.010|380:"Adnan":"Bob":19.010:380:"Adnan":"Bob":19.010|508:"Adnan":"Bob":19.010:508:"Adnan":"Bob":19.010|636:"Adnan":"Bob":19.010:636:"Adnan":"Bob":19.010|764:"Adnan":"Bob":19.010:764:"Adnan":"Bob":19.010|892:"Adnan":"Bob":19.010:892:"Adnan":"Bob":19.010|125:"Adnan":"Edgardo":19.010:125:"Adnan":"Edgardo":19.010|253:"Adnan":"Edgardo":19.010:253:"Adnan":"Edgardo":19.010|381:"Adnan":"Edgardo":19.010:381:"Adnan":"Edgardo":19.010|509:"Adnan":"Edgardo":19.010:509:"Adnan":"Edgardo":19.010|637:"Adnan":"Edgardo":19.010:637:"Adnan":"Edgardo":19.010|765:"Adnan":"Edgardo":19.010:765:"Adnan":"Edgardo":19.010|893:"Adnan":"Edgardo":19.010:893:"Adnan":"Edgardo":19.010|126:"Adnan":"Bob":19.010:126:"Adnan":"Bob":19.010|254:"Adnan":"Bob":19.010:254:"Adnan":"Bob":19.010|382:"Adnan":"Bob":19.010:382:"Adnan":"Bob":19.010|510:"Adnan":"Bob":19.010:510:"Adnan":"Bob":19.010|638:"Adnan":"Bob":19.010:638:"Adnan":"Bob":19.010|766:"Adnan":"Bob":19.010:766:"Adnan":"Bob":19.010|894:"Adnan":"Bob":19.010:894:"Adnan":"Bob":19.010|127:"Adnan":"Edgardo":19.010:127:"Adnan":"Edgardo":19.010|255:"Adnan":"Edgardo":19.010:255:"Adnan":"Edgardo":19.010|383:"Adnan":"Edgardo":19.010:383:"Adnan":"Edgardo":19.010|511:"Adnan":"Edgardo":19.010:511:"Adnan":"Edgardo":19.010|639:"Adnan":"Edgardo":19.010:639:"Adnan":"Edgardo":19.010|767:"Adnan":"Edgardo":19.010:767:"Adnan":"Edgardo":19.010|895:"Adnan":"Edgardo":19.010:895:"Adnan":"Edgardo":19.010 +hashSame=1:Ahmed:Elmagarmid:25.05:1:Ahmed:Elmagarmid:25.05|2:Walid:Aref:20.013:2:Walid:Aref:20.013|3:Christopher:Clifton:18.04:3:Christopher:Clifton:18.04|4:Sunil:Prabhakar:22.07:4:Sunil:Prabhakar:22.07|5:Elisa:Bertino:26.05:5:Elisa:Bertino:26.05|6:Susanne:Hambrusch:23.03:6:Susanne:Hambrusch:23.03|7:David:Eberts:24.08:7:David:Eberts:24.08|8:Arif:Ghafoor:20.05:8:Arif:Ghafoor:20.05|9:Jeff:Vitter:19.010:9:Jeff:Vitter:19.010 \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrOperator.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrOperator.java new file mode 100644 index 0000000..2b2fc0a --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrOperator.java @@ -0,0 +1,79 @@ +package global; + +/** + * Enumeration class for predicate operators. + */ +public class AttrOperator { + + public static final int EQ = 11; + public static final int NEQ = 12; + public static final int GT = 13; + public static final int GTE = 14; + public static final int LT = 15; + public static final int LTE = 16; + + // -------------------------------------------------------------------------- + + /** + * Private constructor (static class). + */ + private AttrOperator() {} + + /** + * Returns the constant value for the string representation (i.e. inverse of + * the toString() method). + */ + public static int toValue(String str) { + + // it may have been better to use the parse tree node, but this + // makes it easier to release class projects independently + if (str.equals("=")) { + return EQ; + } else if (str.equals("<>")) { + return NEQ; + } else if (str.equals(">")) { + return GT; + } else if (str.equals(">=")) { + return GTE; + } else if (str.equals("<")) { + return LT; + } else if (str.equals("<=")) { + return LTE; + } else { + throw new IllegalArgumentException("unknown operator"); + } + + } // public static int toValue(String str) + + /** + * Returns a string representation of an AttrOperator. + */ + public static String toString(int value) { + + switch (value) { + + case EQ: + return "="; + + case NEQ: + return "<>"; + + case GT: + return ">"; + + case GTE: + return ">="; + + case LT: + return "<"; + + case LTE: + return "<="; + + } // switch + + return ("Unexpected AttrOperator " + value); + + } // public static String toString(int value) + +} // public class AttrOperator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrType.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrType.java new file mode 100644 index 0000000..6334db3 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/AttrType.java @@ -0,0 +1,98 @@ +package global; + +/** + * Enumeration class for attribute data types. + */ +public class AttrType { + + public static final int INTEGER = 11; + public static final int FLOAT = 12; + public static final int STRING = 13; + + public static final int COLNAME = 21; + public static final int FIELDNO = 22; + + // -------------------------------------------------------------------------- + + /** + * Private constructor (static class). + */ + private AttrType() {} + + /** + * Gets the AttrType of the given value; i.e. not applicable for column names + * or field numbers. + * + * @throws IllegalArgumentException if obj is not an AttrType + */ + public static int getType(Object obj) { + + if (obj instanceof Integer) { + return INTEGER; + } + + if (obj instanceof Float) { + return FLOAT; + } + + if (obj instanceof String) { + return STRING; + } + + // otherwise, unknown type + throw new IllegalArgumentException("Unknown AttrType " + + obj.getClass().getName()); + + } // public static int getType(Object obj) + + /** + * Returns a string representation of an AttrType. + */ + public static String toString(int value) { + + switch (value) { + + case INTEGER: + return "INTEGER"; + + case FLOAT: + return "FLOAT"; + + case STRING: + return "STRING"; + + case COLNAME: + return "COLNAME"; + + case FIELDNO: + return "FIELDNO"; + + } // switch + + return ("Unexpected AttrType " + value); + + } // public static String toString(int value) + + + /** + * Returns the AttrType that match the given type (@link String) + * @param type + * @return + */ + public static int fromString(String type) { + + switch (type) { + case "INTEGER": + return INTEGER; + + case "FLOAT": + return FLOAT; + + case "STRING": + default: + return STRING; + } + + } // public static int fromString (String type) + +} // public class AttrType diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/Convert.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/Convert.java new file mode 100644 index 0000000..7661e6c --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/Convert.java @@ -0,0 +1,122 @@ +package global; + +/** + * Provides conversion routines for getting and setting data in byte arrays. + */ +public class Convert { + + /** + * Reads from the given byte array at the specified position, and converts it + * into a unicode character. + */ + public static char getCharValue(int pos, byte[] data) { + + // ignoring that UTF-8 could be up to six bytes + return (char) data[pos]; + + } // public static char getCharValue(int pos, byte[] data) + + /** + * Writes a unicode character into the given byte array at the specified + * position. + */ + public static void setCharValue(char value, int pos, byte[] data) { + + // ignoring that UTF-8 could be up to six bytes + data[pos] = (byte) value; + + } // public static void setCharValue(char value, int pos, byte[] data) + + /** + * Reads from the given byte array at the specified position, and converts it + * into a short. + */ + public static short getShortValue(int pos, byte[] data) { + + return (short) (((data[pos] & 0xff) << 8) | (data[pos + 1] & 0xff)); + + } // public static short getShortValue(int pos, byte[] data) + + /** + * Writes a short into the given byte array at the specified position. + */ + public static void setShortValue(short value, int pos, byte[] data) { + + data[pos] = (byte) ((value >> 8) & 0xff); + data[pos + 1] = (byte) (value & 0xff); + + } // public static void setShortValue(short value, int pos, byte[] data) + + /** + * Reads from the given byte array at the specified position, and converts it + * into an integer. + */ + public static int getIntValue(int pos, byte[] data) { + + return ((data[pos] & 0xff) << 24) | ((data[pos + 1] & 0xff) << 16) + | ((data[pos + 2] & 0xff) << 8) | (data[pos + 3] & 0xff); + + } // public static int getIntValue(int pos, byte[] data) + + /** + * Writes an integer into the given byte array at the specified position. + */ + public static void setIntValue(int value, int pos, byte[] data) { + + data[pos] = (byte) ((value >> 24) & 0xff); + data[pos + 1] = (byte) ((value >> 16) & 0xff); + data[pos + 2] = (byte) ((value >> 8) & 0xff); + data[pos + 3] = (byte) (value & 0xff); + + } // public static void setIntValue(int value, int pos, byte[] data) + + /** + * Reads from the given byte array at the specified position, and converts it + * to a float. + */ + public static float getFloatValue(int pos, byte[] data) { + + // let java do the IEEE 754 conversion + return Float.intBitsToFloat(getIntValue(pos, data)); + + } // public static float getFloatValue(int pos, byte[] data) + + /** + * Writes a float into the given byte array at the specified position. + */ + public static void setFloatValue(float value, int pos, byte[] data) { + + // let java do the IEEE 754 conversion + setIntValue(Float.floatToIntBits(value), pos, data); + + } // public static void setFloatValue(float value, int pos, byte[] data) + + /** + * Reads from the given byte array at the specified position, and converts it + * to a string of given length. + */ + public static String getStringValue(int pos, byte[] data, int length) { + + // validate the maximum length + int buflen = data.length - pos; + if (buflen < length) { + length = buflen; + } + + // is there any way in Java to avoid these mem copies? + return new String(data, pos, length).trim(); + + } // public static String getStringValue(int pos, byte[] data, int length) + + /** + * Writes a string into the given byte array at the specified position. + */ + public static void setStringValue(String value, int pos, byte[] data) { + + // is there any way in Java to avoid these mem copies? + byte[] ba = value.getBytes(); + System.arraycopy(ba, 0, data, pos, ba.length); + + } // public static void setStringValue(String value, int pos, byte[] data) + +} // public class Convert diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/GlobalConst.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/GlobalConst.java new file mode 100644 index 0000000..0b2a48d --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/GlobalConst.java @@ -0,0 +1,57 @@ +package global; + +/** + * Global constants; implement this interface to access them conveniently. + */ +public interface GlobalConst { + + // + // Disk Manager Constants + // + + /** Size of a page, in bytes. */ + public static final int PAGE_SIZE = 1024; + + /** Page number of an invalid page (i.e. null pointer). */ + public static final int INVALID_PAGEID = -1; + + /** Page number of the first page in a database file. */ + public static final int FIRST_PAGEID = 0; + + /** Maximum size of a name (i.e. of files or attributes). */ + public static final int NAME_MAXLEN = 50; + + // + // Buffer Manager Constants + // + + /** Replace the buffer frame with an existing memory page. */ + public static final boolean PIN_MEMCPY = true; + + /** Replace an existing memory page with the current disk page. */ + public static final boolean PIN_DISKIO = false; + + /** Forces the page to be written to disk when unpinned. */ + public static final boolean UNPIN_DIRTY = true; + + /** Optimization to avoid writing to disk when unpinned. */ + public static final boolean UNPIN_CLEAN = false; + + // + // Heap File Constants + // + + /** Length of an "empty" slot in a heap file page. */ + public static final int EMPTY_SLOT = -1; + + // + // System Catalog Constants + // + + /** Maximum length of a column (in bytes). */ + public static final int MAX_COLSIZE = 1001; + + /** Maximum length of a tuple (in bytes). */ + public static final int MAX_TUPSIZE = 1004; + +} // public interface GlobalConst diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/Minibase.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/Minibase.java new file mode 100644 index 0000000..92111a1 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/Minibase.java @@ -0,0 +1,89 @@ +package global; + +import bufmgr.BufMgr; +import diskmgr.DiskMgr; + +/** + * Definitions for the running Minibase system, including references to static + * layers and database-level attributes. + */ +public class Minibase { + + /** Name of the data file. */ + public static String DatabaseName; + + /** The Minibase Disk Space Manager. */ + public static DiskMgr DiskManager; + + /** The Minibase Buffer Manager. */ + public static BufMgr BufferManager; + + + // -------------------------------------------------------------------------- + + /** + * Constructs and starts an instance of Minibase, given the configuration. + * + * @param dbname Name of the data file + * @param num_pgs Number of pages to allocate + * @param bufpoolsize Buffer pool size (in pages) + * @param replacement_policy Buffer pool replacement policy + * @param exists If the database already exists on disk + */ + public Minibase(String dbname, int num_pgs, int bufpoolsize, + String replacement_policy, boolean exists) { + + // simply initialize the database + init(dbname, num_pgs, bufpoolsize, replacement_policy, exists); + + } // constructor + + /** + * Initializes the current instance of Minibase with the given configuration. + * + * @param dbname Name of the data file + * @param num_pgs Number of pages to allocate + * @param bufpoolsize Buffer pool size (in pages) + * @param replacement_policy Buffer pool replacement policy + * @param exists If the database already exists on disk + */ + public void init(String dbname, int num_pgs, int bufpoolsize, + String replacement_policy, boolean exists) { + + // save the file name + DatabaseName = dbname; + + // load the static layers + try { + DiskManager = new DiskMgr(); + BufferManager = new BufMgr(bufpoolsize); + } catch (Exception exc) { + haltSystem(exc); + } + + // create or open the database + try { + if (exists) { + DiskManager.openDB(dbname); + + } else { + DiskManager.createDB(dbname, num_pgs); + + BufferManager.flushAllPages(); + } + } catch (Exception exc) { + haltSystem(exc); + } + + } // init + + /** + * Displays an unrecoverable error and halts the system. + */ + public static void haltSystem(Exception exc) { + System.err.println("\n*** Unrecoverable system error ***"); + exc.printStackTrace(); + Runtime.getRuntime().exit(1); + } + +} // public class Minibase diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/Page.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/Page.java new file mode 100644 index 0000000..3c8b365 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/Page.java @@ -0,0 +1,133 @@ +package global; + +/** + * Lowest-level view of a disk page. + */ +public class Page implements GlobalConst { + + /** The actual byte array for the page. */ + protected byte[] data; + + // -------------------------------------------------------------------------- + + /** + * Default constructor; creates a blank page. + */ + public Page() { + data = new byte[PAGE_SIZE]; + } + + /** + * Constructor that wraps the given byte array. + */ + public Page(byte[] data) { + setData(data); + } + + /** + * Get accessor for the data byte array. + */ + public byte[] getData() { + return data; + } + + /** + * Set accessor for the data byte array. + * + * @throws IllegalArgumentException if the data array size is invalid + */ + public void setData(byte[] data) { + if (data.length != PAGE_SIZE) { + Minibase.haltSystem(new IllegalArgumentException( + "Invalid page buffer size")); + } + this.data = data; + } + + /** + * Sets this page's data array to share the given page's data array. + */ + public void setPage(Page page) { + this.data = page.data; + } + + /** + * Copies the contents of the given page's buffer into this page's buffer. + */ + public void copyPage(Page page) { + System.arraycopy(page.data, 0, this.data, 0, PAGE_SIZE); + } + + // -------------------------------------------------------------------------- + + /** + * Gets a char at the given page offset. + */ + public char getCharValue(int offset) { + return Convert.getCharValue(offset, data); + } + + /** + * Sets a char at the given page offset. + */ + public void setCharValue(char value, int offset) { + Convert.setCharValue(value, offset, data); + } + + /** + * Gets a short at the given page offset. + */ + public short getShortValue(int offset) { + return Convert.getShortValue(offset, data); + } + + /** + * Sets a short at the given page offset. + */ + public void setShortValue(short value, int offset) { + Convert.setShortValue(value, offset, data); + } + + /** + * Gets an int at the given page offset. + */ + public int getIntValue(int offset) { + return Convert.getIntValue(offset, data); + } + + /** + * Sets an int at the given page offset. + */ + public void setIntValue(int value, int offset) { + Convert.setIntValue(value, offset, data); + } + + /** + * Gets a float at the given page offset. + */ + public float getFloatValue(int offset) { + return Convert.getFloatValue(offset, data); + } + + /** + * Sets a float at the given page offset. + */ + public void setFloatValue(float value, int offset) { + Convert.setFloatValue(value, offset, data); + } + + /** + * Gets a string at the given page offset, given the maximum length. + */ + public String getStringValue(int offset, int length) { + return Convert.getStringValue(offset, data, length); + } + + /** + * Sets a string at the given page offset. + */ + public void setStringValue(String value, int offset) { + Convert.setStringValue(value, offset, data); + } + +} // public class Page implements GlobalConst diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/PageId.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/PageId.java new file mode 100644 index 0000000..d653551 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/PageId.java @@ -0,0 +1,60 @@ +package global; + +/** + * Although a PageId is simply an integer, wrapping it provides convenient + * methods and allows returning it via method parameters. + */ +public class PageId implements GlobalConst { + + /** The actual page id value. */ + public int pid; + + // -------------------------------------------------------------------------- + + /** + * Default constructor. + */ + public PageId() { + pid = INVALID_PAGEID; + } + + /** + * Constructs a PageId from the given value. + */ + public PageId(int pid) { + this.pid = pid; + } + + /** + * Makes a copy of the given PageId. + */ + public void copyPageId(PageId pageNo) { + this.pid = pageNo.pid; + } + + /** + * Returns a hash code value for the PageId. + */ + public int hashCode() { + return pid; + } + + /** + * True if obj is a PageId with the same pid; false otherwise. + */ + public boolean equals(Object obj) { + if (obj instanceof PageId) { + PageId pageno = (PageId) obj; + return (this.pid == pageno.pid); + } + return false; + } + + /** + * Returns a string representation of the PageId. + */ + public String toString() { + return Integer.toString(pid); + } + +} // public class PageId implements GlobalConst diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/RID.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/RID.java new file mode 100644 index 0000000..4dc96fa --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/RID.java @@ -0,0 +1,98 @@ +package global; + +/** + * A record is uniquely identified by its page number and slot number. + */ +public class RID { + + /** The record's page number. */ + public PageId pageno; + + /** The record's slot number. */ + public int slotno; + + // -------------------------------------------------------------------------- + + /** + * Default constructor. + */ + public RID() { + pageno = new PageId(); + slotno = 0; + } + + /** + * Copy constructor. + */ + public RID(RID rid) { + copyRID(rid); + } + + /** + * Constructs an RID from the given values. + */ + public RID(PageId pageno, int slotno) { + this.pageno = new PageId(); + this.pageno.pid = pageno.pid; + this.slotno = slotno; + } + + /** + * Constructs an RID stored in the given data buffer. + */ + public RID(byte[] data, short offset) { + pageno = new PageId(Convert.getIntValue(offset, data)); + slotno = Convert.getIntValue(offset + 4, data); + } + + /** + * Writes the RID into the given data buffer. + */ + public void writeData(byte[] data, short offset) { + Convert.setIntValue(pageno.pid, offset, data); + Convert.setIntValue(slotno, offset + 4, data); + } + + /** + * Gets the total length of the RID (in bytes). + */ + public short getLength() { + return 8; + } + + /** + * Makes a copy of the given RID. + */ + public void copyRID(RID rid) { + this.pageno = new PageId(); + this.pageno.pid = rid.pageno.pid; + slotno = rid.slotno; + } + + /** + * Returns a hash code value for the RID. + */ + public int hashCode() { + // won't work if DB supports more than 65535 pages + return ((pageno.pid & 0xFFFF) << 16) | (slotno & 0xFFFF); + } + + /** + * True if obj is an RID with the same values; false otherwise. + */ + public boolean equals(Object obj) { + if (obj instanceof RID) { + RID rid = (RID) obj; + return ((pageno.pid == rid.pageno.pid) && (slotno == rid.slotno)); + } + return false; + } + + /** + * Returns a string representation of the PageId. + */ + public String toString() { + return pageno.toString() + ":" + Integer.toString(slotno); + } + +} // public class RID diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/SearchKey.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/SearchKey.java new file mode 100644 index 0000000..c81f0df --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/SearchKey.java @@ -0,0 +1,291 @@ +package global; + +/** + * Provides a general and type-safe way to store and compare index search keys. + */ +public class SearchKey implements Comparable { + + /** Internal type number for Integer keys. */ + protected static final byte INTEGER_KEY = 1; + + /** Internal type number for Float keys. */ + protected static final byte FLOAT_KEY = 2; + + /** Internal type number for String keys. */ + protected static final byte STRING_KEY = 3; + + // -------------------------------------------------------------------------- + + /** The type of the key value. */ + protected byte type; + + /** The size of the key value (in bytes). */ + protected short size; + + /** The actual key value. */ + protected Object value; + + // -------------------------------------------------------------------------- + + /** + * Constructs a new integer search key. + */ + public SearchKey(Integer value) { + this.type = INTEGER_KEY; + this.size = Integer.SIZE / Byte.SIZE; + this.value = value; + } + + /** + * Constructs a new float search key. + */ + public SearchKey(Float value) { + this.type = FLOAT_KEY; + this.size = Float.SIZE / Byte.SIZE; + this.value = value; + } + + /** + * Constructs a new string search key. + */ + public SearchKey(String value) { + this.type = STRING_KEY; + this.size = (short) value.length(); + this.value = value; + } + + /** + * Constructs a search key from a generic value. + * + * @throws IllegalArgumentException if value's type is invalid + */ + public SearchKey(Object value) { + + // Integer key? + if (value instanceof Integer) { + this.type = INTEGER_KEY; + this.size = Integer.SIZE / Byte.SIZE; + this.value = value; + } + + // Float key? + else if (value instanceof Float) { + this.type = FLOAT_KEY; + this.size = Float.SIZE / Byte.SIZE; + this.value = value; + } + + // String key? + else if (value instanceof String) { + this.type = STRING_KEY; + this.size = (short) ((String) value).length(); + this.value = value; + } + + // otherwise, none of the above + else { + throw new IllegalArgumentException("invalid key value type"); + } + + } // public SearchKey(Object value) + + /** + * Copy constructor for a search key. + */ + public SearchKey(SearchKey key) { + + // copy the type and size + this.type = key.type; + this.size = key.size; + + // copy the value + switch (key.type) { + case INTEGER_KEY: + this.value = new Integer((Integer) key.value); + break; + case FLOAT_KEY: + this.value = new Float((Float) key.value); + break; + case STRING_KEY: + this.value = new String((String) key.value); + break; + } + + } // public SearchKey(SearchKey key) + + // -------------------------------------------------------------------------- + + /** + * Constructs a SearchKey stored in the given data buffer. + */ + public SearchKey(byte[] data, short offset) { + + // extract the type and size + type = data[offset]; + size = Convert.getShortValue(offset + 1, data); + + // extract the key value + switch (type) { + case INTEGER_KEY: + value = new Integer(Convert.getIntValue(offset + 3, data)); + break; + case FLOAT_KEY: + value = new Float(Convert.getFloatValue(offset + 3, data)); + break; + case STRING_KEY: + value = Convert.getStringValue(offset + 3, data, size); + break; + } + + } // public SearchKey(byte[] data, short offset) + + /** + * Writes the SearchKey into the given data buffer. + */ + public void writeData(byte[] data, short offset) { + + // write the type and size + data[offset] = type; + Convert.setShortValue(size, offset + 1, data); + + // write the key value + switch (type) { + case INTEGER_KEY: + Convert.setIntValue((Integer) value, offset + 3, data); + break; + case FLOAT_KEY: + Convert.setFloatValue((Float) value, offset + 3, data); + break; + case STRING_KEY: + Convert.setStringValue((String) value, offset + 3, data); + break; + } + + } // public void writeData(byte[] data, short offset) + + /** + * Gets the total length of the search key (in bytes). + */ + public short getLength() { + return (short) (3 + size); + } + + // -------------------------------------------------------------------------- + + /** + * Gets the hash value for the search key, given the depth (i.e. number of + * bits to consider). + */ + public int getHash(int depth) { + + // apply the appropriate calculation + int mask = (1 << depth) - 1; + switch (type) { + + default: + case INTEGER_KEY: + int ikey = ((Integer) value).intValue(); + return ikey & mask; + + case FLOAT_KEY: + int fkey = Float.floatToIntBits((Float) value); + return fkey & mask; + + case STRING_KEY: + + // reverse the first four bytes of the string + byte[] s = ((String) value).getBytes(); + int skey = 0; + int len = s.length > 4 ? 4 : s.length; + for (int i = 0; i < len; i++) { + skey |= (s[i] << (i * Byte.SIZE)); + } + return skey & mask; + + } // switch + + } // public int getHash(int depth) + + /** + * Returns true if the search key matches the given hash value, false + * otherwise. + */ + public boolean isHash(int hash) { + + // calculate the bit depth (i.e. the left-most '1' bit) + int depth = (int) (Math.log(hash) / Math.log(2) + 1); + + // compare the hash codes + return (getHash(depth) == hash); + + } // public boolean isHash(int hash) + + // -------------------------------------------------------------------------- + + /** + * Returns a generic hash code for the key value. + */ + public int hashCode() { + return value.hashCode(); + } + + /** + * True if obj is a SearchKey with the same values; false otherwise. + */ + public boolean equals(Object obj) { + if (obj instanceof SearchKey) { + SearchKey key = (SearchKey) obj; + return (value.equals(key.value)); + } + return false; + } + + /** + * Generically compares two search keys. + * + * @return a negative integer, zero, or a positive integer as this object is + * less than, equal to, or greater than the specified object + * @throws IllegalArgumentException if the search keys are not comparable + */ + public int compareTo(SearchKey key) { + + // Integer comparison + if (value instanceof Integer) { + if (key.value instanceof Integer) { + + Integer ikey1 = (Integer) this.value; + Integer ikey2 = (Integer) key.value; + return ikey1.compareTo(ikey2); + + } else { + throw new IllegalArgumentException("search keys are not comparable"); + } + } + + // Float comparison + if (value instanceof Float) { + if (key.value instanceof Float) { + + Float fkey1 = (Float) this.value; + Float fkey2 = (Float) key.value; + return fkey1.compareTo(fkey2); + + } else { + throw new IllegalArgumentException("search keys are not comparable"); + } + } + + // default: String comparison + if (key.value instanceof String) { + + String skey1 = (String) this.value; + String skey2 = (String) key.value; + return skey1.compareTo(skey2); + + } else { + throw new IllegalArgumentException("search keys are not comparable"); + } + + } // public int compareTo(SearchKey key) + +} // public class SearchKey implements Comparable diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/global/SortKey.java b/Projects/p3-skeleton/cs448p3/src/main/java/global/SortKey.java new file mode 100644 index 0000000..192f869 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/global/SortKey.java @@ -0,0 +1,23 @@ +package global; + +/** + * One term in an ORDER BY clause; i.e. relations can be sorted on multiple + * (distinct) attributes, as well as in ascending or descending order. + */ +public class SortKey { + + /** Column name or field number. */ + public Object field; + + /** True if descending order, false if ascending order. */ + public boolean isDesc; + + /** + * Constructs a SortKey from the given values. + */ + public SortKey(Object field, boolean isDesc) { + this.field = field; + this.isDesc = isDesc; + } + +} // public class SortKey diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/FileScan.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/FileScan.java new file mode 100644 index 0000000..73ddbcb --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/FileScan.java @@ -0,0 +1,92 @@ +package relop; + +import global.RID; +import heap.HeapFile; +import heap.HeapScan; + +/** + * Wrapper for heap file scan, the most basic access method. This "iterator" + * version takes schema into consideration and generates real tuples. + */ +public class FileScan extends Iterator { + + private HeapFile file = null; // needed for restart(), getFile(); + private HeapScan scan = null; + private RID rid = null; + private boolean isOpen; + + /** + * Constructs a file scan, given the schema and heap file. + */ + public FileScan(Schema aSchema, HeapFile aFile) { + this.schema = aSchema; + this.file = aFile; + this.scan = file.openScan(); + this.rid = new RID(); + isOpen = true; + } + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + for(int i = 0; i < depth; i++){ + System.out.printf(" "); + } + System.out.printf("FileScan\n"); + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + scan.close(); + scan = file.openScan(); + //rid = new RID(); + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + return isOpen; + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + scan.close(); + isOpen = false; + } + + /** + * Returns true if there are more tuples, false otherwise. + */ + public boolean hasNext() { + return scan.hasNext(); + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + return new Tuple(schema, scan.getNext(rid)); + } + + /** + * Gets the RID of the last tuple returned. + */ + public RID getLastRID() { + return rid; + } + + // getter; added so HashJoin doesn't have to copy the file; + public HeapFile getFile(){ + return file; + } + +} // public class FileScan extends Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashJoin.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashJoin.java new file mode 100644 index 0000000..682516f --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashJoin.java @@ -0,0 +1,52 @@ +package relop; + +import heap.HeapFile; +import index.HashIndex; +import global.SearchKey; +import global.RID; +import global.AttrOperator; +import global.AttrType; + +public class HashJoin extends Iterator { + + public HashJoin(Iterator aIter1, Iterator aIter2, int aJoinCol1, int aJoinCol2){ + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public void explain(int depth) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public void restart() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public boolean isOpen() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public void close() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public boolean hasNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + @Override + public Tuple getNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } +} // end class HashJoin; diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashTableDup.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashTableDup.java new file mode 100644 index 0000000..87cd765 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/HashTableDup.java @@ -0,0 +1,83 @@ +package relop; + +import global.SearchKey; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Hashtable; + +/** + * A extension to Java's hash table that allows duplicate keys. + * http://mindprod.com/jgloss/hashtable.html + */ +@SuppressWarnings("unchecked") +class HashTableDup extends Hashtable { + + /** + * Maps the specified key to the specified value in this hashtable. + */ + public void add(SearchKey key, Tuple value) { + + // to conserve RAM, duplicate values are either stored as single objects, + // pairs in an array, or multiples in an ArrayList + Object existing = get(key); + if (existing == null) { + + // store the single value + put(key, value); + + } else if (existing instanceof Tuple) { + + // was a single object; make into a pair + put(key, new Tuple[] { (Tuple) existing, value }); + + } else if (existing instanceof Tuple[]) { + + // was a pair; make into an ArrayList of 3 + ArrayList a = new ArrayList(); + a.addAll(Arrays.asList((Tuple[]) existing)); + a.add(value); + put(key, a); + + } else { + + // just add to tail end of existing ArrayList + ((ArrayList) existing).add(value); + + } // else + + } // public void add(SearchKey key, Tuple value) + + /** + * Returns the values to which the specified key is mapped in this hashtable. + */ + public Tuple[] getAll(SearchKey key) { + + // look up the key + Object match = get(key); + if (match == null) { + + // not found + return null; + + } else if (match instanceof Tuple) { + + // return the single match + return new Tuple[] { (Tuple) match }; + + } else if (match instanceof Tuple[]) { + + // return the matches + return (Tuple[]) match; + + } else { + + // convert ArrayList to Tuple[] + ArrayList a = (ArrayList) match; + return a.toArray(new Tuple[a.size()]); + + } // elsee + + } // public Tuple[] getAll(SearchKey key) + +} // class HashTableDup extends Hashtable diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/IndexScan.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/IndexScan.java new file mode 100644 index 0000000..9672576 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/IndexScan.java @@ -0,0 +1,89 @@ +package relop; + +import global.SearchKey; +import heap.HeapFile; +import index.HashIndex; + +/** + * Wrapper for bucket scan, an index access method. + */ +public class IndexScan extends Iterator { + + + /** + * Constructs an index scan, given the hash index and schema. + */ + public IndexScan(Schema schema, HashIndex index, HeapFile file) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gives a one-line explaination of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if there are more tuples, false otherwise. + */ + public boolean hasNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gets the key of the last tuple returned. + */ + public SearchKey getLastKey() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns the hash value for the bucket containing the next tuple, or maximum + * number of buckets if none. + */ + public int getNextHash() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + +} // public class IndexScan extends Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Iterator.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Iterator.java new file mode 100644 index 0000000..e586fc0 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Iterator.java @@ -0,0 +1,107 @@ +package relop; + +/** + * Minibase Iterators + * Query execution is driven by a tree of relational operators, all of which are + * implemented as iterators. Results are requested by successive "get next + * tuple" calls on the root of the tree, which in turn makes similar calls to + * child iterators throughout the tree. Intermediate nodes (i.e. join iterators) + * drive the leaf-level nodes (i.e. file or index scan iterators). + */ +public abstract class Iterator { + + /** Schema for resulting tuples; must be set in all subclass constructors. */ + protected Schema schema; + + // -------------------------------------------------------------------------- + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public abstract void explain(int depth); + + /** + * Outputs the indentation for the given depth. + */ + protected void indent(int depth) { + for (int i = 0; i < depth * 2; i++) { + System.out.print(' '); + } + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public abstract void restart(); + + /** + * Returns true if the iterator is open; false otherwise. + */ + public abstract boolean isOpen(); + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public abstract void close(); + + /** + * Returns true if there are more tuples, false otherwise. + */ + public abstract boolean hasNext(); + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public abstract Tuple getNext(); + + /** + * Prints the schema, gets and prints all tuples, and closes the iterator. + * + * @return number of tuples processed + */ + public int execute() { + result = ""; //Modification to store result of queries for test case comparison + int cnt = 0; + getSchema().print(); + Tuple next; + while (hasNext()) { + next = getNext(); + next.print(); + //Modification to store result of queries for test case comparison + result += next.toString() + "|"; + cnt++; + } + if(result.length() > 0) + result = result.substring(0, result.length() - 1); + close(); + return cnt; + } + + /** + * Called by the garbage collector when there are no more references to the + * object; closes the iterator if it's still open. + */ + protected void finalize() throws Throwable { + if (isOpen()) { + close(); + } + } + +public void setSchema(Schema schema) { + this.schema = schema; +} + +public Schema getSchema() { + return schema; +} + +// *** DO NOT CHANGE ANY EXISTING METHODS OR VARIABLES BELOW THIS LINE *** +//Store values for test cases only +//String format: row0|row1|row2|...rowN| +private String result; +public String getResult() { return result; } + +} // public abstract class Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/KeyScan.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/KeyScan.java new file mode 100644 index 0000000..5ae6996 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/KeyScan.java @@ -0,0 +1,72 @@ +package relop; + +import global.SearchKey; +import heap.HeapFile; +import index.HashIndex; +import index.HashScan; + +/** + * Wrapper for hash scan, an index access method. + */ +public class KeyScan extends Iterator { + + /** + * Constructs an index scan, given the hash index and schema. + */ + public KeyScan(Schema aSchema, HashIndex aIndex, SearchKey aKey, HeapFile aFile) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + throw new UnsupportedOperationException("Not implemented"); + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + throw new UnsupportedOperationException("Not implemented"); + + //Your code here + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if there are more tuples, false otherwise. + */ + public boolean hasNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + +} // public class KeyScan extends Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Predicate.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Predicate.java new file mode 100644 index 0000000..2f48a52 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Predicate.java @@ -0,0 +1,188 @@ +package relop; + +import global.AttrOperator; +import global.AttrType; + +/** + * Internal representation of simple SQL expressions. Operators are referenced + * by constants in global.AttrOperator, and operands can be constants or field + * numbers (i.e. if referring to an attribute). + */ +public class Predicate { + + /** The operator. */ + protected int oper; + + /** Type of left operand. */ + protected int ltype; + + /** Left operand. */ + protected Object left; + + /** Type of right operand. */ + protected int rtype; + + /** Right operand. */ + protected Object right; + + // -------------------------------------------------------------------------- + + /** + * Constructs a predicate, given the expression. + * + * @param oper AttrOperator constant + * @param ltype AttrType of the field + * @param left operand value, field number, or column name + * @param rtype AttrType of the field + * @param right operand value, field number, or column name + */ + public Predicate(int oper, int ltype, Object left, int rtype, Object right) { + this.oper = oper; + this.ltype = ltype; + this.rtype = rtype; + this.left = left; + this.right = right; + } + + /** + * Validates AttrType.COLNAME operands against the given schema. + * + * @return true if the predicate is valid, false otherwise + */ + public boolean validate(Schema schema) { + + // if column name, make sure it exists + int type1 = ltype; + if (type1 == AttrType.COLNAME) { + int fldno = schema.fieldNumber((String) left); + if (fldno < 0) { + return false; + } + type1 = schema.fieldType(fldno); + } + int type2 = rtype; + if (type2 == AttrType.COLNAME) { + int fldno = schema.fieldNumber((String) right); + if (fldno < 0) { + return false; + } + type2 = schema.fieldType(fldno); + } + + // test left and right type compatibility + return (type1 == type2); + + } // public boolean validate(Schema schema) + + /** + * Evaluates the predicate on the given tuple and returns true if it passes. + * + * @throws IllegalStateException if member data lead to an invalid operation + */ + public boolean evaluate(Tuple tuple) { + + // if necessary, resolve column names to field numbers + if (ltype == AttrType.COLNAME) { + left = tuple.schema.fieldNumber((String) left); + ltype = AttrType.FIELDNO; + } + if (rtype == AttrType.COLNAME) { + right = tuple.schema.fieldNumber((String) right); + rtype = AttrType.FIELDNO; + } + + // get the values to compare + int type = ltype; + Object lval = left; + if (ltype == AttrType.FIELDNO) { + type = tuple.schema.fieldType((Integer) lval); + lval = tuple.getField((Integer) lval); + } + Object rval = right; + if (rtype == AttrType.FIELDNO) { + rval = tuple.getField((Integer) rval); + } + + // compare the values + int comp = 0; + switch (type) { + + case AttrType.INTEGER: + comp = ((Integer) lval).compareTo((Integer) rval); + break; + + case AttrType.FLOAT: + comp = ((Float) lval).compareTo((Float) rval); + break; + + case AttrType.STRING: + comp = ((String) lval).compareTo((String) rval); + break; + + default: + throw new IllegalStateException("unknown types to compare"); + + } // switch (type) + + // evaluate the operator + switch (oper) { + + case AttrOperator.EQ: + return (comp == 0); + + case AttrOperator.NEQ: + return (comp != 0); + + case AttrOperator.GT: + return (comp > 0); + + case AttrOperator.GTE: + return (comp >= 0); + + case AttrOperator.LT: + return (comp < 0); + + case AttrOperator.LTE: + return (comp <= 0); + + default: + throw new IllegalStateException("unknown operator to evaluate"); + + } // switch (oper) + + } // public boolean evaluate(Tuple tuple) + + /** + * Returns a string representation of the Predicate. + */ + public String toString() { + + return opString(ltype, left) + ' ' + AttrOperator.toString(oper) + ' ' + + opString(rtype, right); + + } // public String toString() + + /** + * Returns a string representation of an operand. + */ + protected String opString(int type, Object operand) { + + // get the string version + String str = operand.toString(); + + // wrap strings in single quotes + if (type == AttrType.STRING) { + return "'" + str + "'"; + } + + // wrap column numbers in braces + if (type == AttrType.FIELDNO) { + return "{" + str + "}"; + } + + // otherwise, just return the string + return str; + + } // protected String opString(int type, Object obj) + +} // public class Predicate diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Projection.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Projection.java new file mode 100644 index 0000000..48c32b7 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Projection.java @@ -0,0 +1,79 @@ +package relop; + + +/** + * The projection operator extracts columns from a relation; unlike in + * relational algebra, this operator does NOT eliminate duplicate tuples. + */ +public class Projection extends Iterator { + + private Iterator iter = null; + private Integer[] fields = null; + private boolean isOpen; + /** + * Constructs a projection, given the underlying iterator and field numbers. + */ + public Projection(Iterator aIter, Integer... aFields) { + this.iter = aIter; + this.fields = aFields; + this.isOpen = true; + + this.schema = new Schema(fields.length); + Schema iterSchema = iter.getSchema(); + for(int i = 0; i < fields.length; i++){ + this.schema.initField(i, iterSchema, fields[i]); + } + } + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if there are more tuples, false otherwise. + */ + public boolean hasNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + +} // public class Projection extends Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Schema.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Schema.java new file mode 100644 index 0000000..dc9240e --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Schema.java @@ -0,0 +1,195 @@ +package relop; + +import global.AttrType; + +/** + * Each tuple has a schema that defines the logical view of the raw bytes; it + * describes the types, lengths, offsets, and names of a tuple's fields. + */ +public class Schema { + + /** Minimum column width for output. */ + public static final int MIN_WIDTH = 10; + + // -------------------------------------------------------------------------- + + /** Attribute types of the fields. */ + protected int[] types; + + /** Variable lengths of the fields. */ + protected int[] lengths; + + /** Relative offsets of the fields. */ + protected int[] offsets; + + /** Column names of the fields. */ + protected String[] names; + + // -------------------------------------------------------------------------- + + /** + * Constructs a schema for the given number of fields. + */ + public Schema(int fldcnt) { + types = new int[fldcnt]; + lengths = new int[fldcnt]; + offsets = new int[fldcnt]; + names = new String[fldcnt]; + } + + /** + * Sets the type, length, and name for the given field; this automatically + * calculates its offset, provided that fields are set in ascending order. + */ + public void initField(int fldno, int type, int length, String name) { + + // save the type, length, and name + types[fldno] = type; + lengths[fldno] = length; + names[fldno] = name; + + // calculate the relative offset + if (fldno > 0) { + offsets[fldno] = offsets[fldno - 1] + lengths[fldno - 1]; + } else { + offsets[fldno] = 0; + } + + } // public void initField(int fldno, int type, int length, String name) + + /** + * Copies a field from another schema. + * + * @param fldno number of this field to set + * @param schema contains the info to copy + * @param srcno number of the field to copy + */ + public void initField(int fldno, Schema schema, int srcno) { + initField(fldno, schema.types[srcno], schema.lengths[srcno], + schema.names[srcno]); + } + + /** + * Builds and returns a new schema resulting from joining two schemas. + * + * @param s1 the left schema + * @param s2 the right schema + */ + public static Schema join(Schema s1, Schema s2) { + + // construct the new schema + int s1cnt = s1.getCount(); + int s2cnt = s2.getCount(); + Schema schema = new Schema(s1cnt + s2cnt); + + // copy all fields from s1 and s2 + int fldno = 0; + for (int i = 0; i < s1cnt; i++) { + schema.initField(fldno++, s1, i); + } + for (int i = 0; i < s2cnt; i++) { + schema.initField(fldno++, s2, i); + } + + // return the resulting schema + return schema; + + } // public static Schema join(Schema s1, Schema s2) + + // -------------------------------------------------------------------------- + + /** + * Gets the number of fields in the schema. + */ + public int getCount() { + // all arrays are same length + return types.length; + } + + /** + * Gets the size of a tuple (in bytes). + */ + public int getLength() { + int len = 0; + for (int i = 0; i < lengths.length; i++) { + len += lengths[i]; + } + return len; + } + + /** + * Gets the type of the given field. + */ + public int fieldType(int fldno) { + return types[fldno]; + } + + /** + * Gets the length of the given field. + */ + public int fieldLength(int fldno) { + return lengths[fldno]; + } + + /** + * Gets the offset of the given field. + */ + public int fieldOffset(int fldno) { + return offsets[fldno]; + } + + /** + * Gets the name of the given field. + */ + public String fieldName(int fldno) { + return names[fldno]; + } + + /** + * Gets the number of the field with the given name, or -1 if not found. + */ + public int fieldNumber(String name) { + for (int i = 0; i < names.length; i++) { + if (names[i].equalsIgnoreCase(name)) { + return i; + } + } + return -1; + } + + /** + * Prints the schema (i.e. the first lines of typical query output). + */ + public void print() { + + // print and space the column names + int len = 0; + for (int i = 0; i < types.length; i++) { + + // print the column name + System.out.print(names[i]); + + // figure out the padding + int collen = Math.max(names[i].length(), MIN_WIDTH); + if (types[i] == AttrType.STRING) { + collen = Math.max(lengths[i], collen); + } + len += collen; + + // pad the output to the field length + for (int j = 0; j < collen - names[i].length(); j++) { + System.out.print(' '); + } + + } // for + + // print the line separator + System.out.println(); + for (int i = 0; i < len; i++) { + System.out.print('-'); + } + System.out.println(); + + } // public void print() + +} // public class Schema diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Selection.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Selection.java new file mode 100644 index 0000000..900b8a6 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Selection.java @@ -0,0 +1,78 @@ +package relop; + +/** + * The selection operator specifies which tuples to retain under a condition; in + * Minibase, this condition is simply a set of independent predicates logically + * connected by OR operators. + */ +public class Selection extends Iterator { + + private Iterator iter = null; + private Predicate[] preds = null; + //boolean hasNext; + Tuple next = null; + private boolean consumed; + private boolean isOpen; + /** + * Constructs a selection, given the underlying iterator and predicates. + */ + public Selection(Iterator aIter, Predicate... aPreds) { + this.schema = aIter.getSchema(); + this.iter = aIter; + this.preds = aPreds; + this.consumed = true; + this.isOpen = true; + } + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Returns true if there are more tuples, false otherwise. + */ + public boolean hasNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + throw new UnsupportedOperationException("Not implemented"); + //Your code here + } + +} // public class Selection extends Iterator diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/SimpleJoin.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/SimpleJoin.java new file mode 100644 index 0000000..3490176 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/SimpleJoin.java @@ -0,0 +1,126 @@ +package relop; + +/** + * The simplest of all join algorithms: nested loops (see textbook, 3rd edition, + * section 14.4.1, page 454). + */ +public class SimpleJoin extends Iterator { + + private Iterator outer; + private Iterator inner; + private Predicate[] preds; + + private boolean startJoin = true; + Tuple leftTuple; + + // boolean variable to indicate whether the pre-fetched tuple is consumed or not + private boolean nextTupleIsConsumed; + + // pre-fetched tuple + private Tuple nextTuple; + + /** + * Constructs a join, given the left and right iterators and join predicates + * (relative to the combined schema). + */ + public SimpleJoin(Iterator left, Iterator right, Predicate... preds) { + + this.outer = left; + this.inner = right; + this.preds = preds; + this.schema = Schema.join(left.schema, right.schema); + + nextTupleIsConsumed = true; + } + + /** + * Gives a one-line explanation of the iterator, repeats the call on any + * child iterators, and increases the indent depth along the way. + */ + public void explain(int depth) { + + throw new UnsupportedOperationException("Not implemented"); + } + + /** + * Restarts the iterator, i.e. as if it were just constructed. + */ + public void restart() { + + outer.restart(); + inner.restart(); + nextTupleIsConsumed = true; + } + + /** + * Returns true if the iterator is open; false otherwise. + */ + public boolean isOpen() { + + return outer.isOpen() && inner.isOpen(); + } + + /** + * Closes the iterator, releasing any resources (i.e. pinned pages). + */ + public void close() { + + outer.close(); + inner.close(); + } + + /** + * Returns true if there are more tuples, false otherwise. + * + */ + public boolean hasNext() { + + if (!nextTupleIsConsumed) + return true; + + if (!outer.hasNext()) + //if(!inner.hasNext() && !outer.hasNext()) // Piazza post 116 + return false; + + Tuple rightTuple; + + if (startJoin) { + leftTuple = outer.getNext(); + startJoin = false; + } + + while (true) { + + while (inner.hasNext()) { + + rightTuple = inner.getNext(); + + // try to match + nextTuple = Tuple.join(leftTuple, rightTuple, this.schema); + for (int i = 0; i < preds.length; i++) + if (preds[i].evaluate(nextTuple)) { + nextTupleIsConsumed = false; + return true; + } + } + + if (outer.hasNext()) { + leftTuple = outer.getNext(); + inner.restart(); + } + else + return false; + } + } + + /** + * Gets the next tuple in the iteration. + * + * @throws IllegalStateException if no more tuples + */ + public Tuple getNext() { + + nextTupleIsConsumed = true; + return nextTuple; + } +} diff --git a/Projects/p3-skeleton/cs448p3/src/main/java/relop/Tuple.java b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Tuple.java new file mode 100644 index 0000000..73992b4 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/main/java/relop/Tuple.java @@ -0,0 +1,315 @@ +package relop; + +import global.AttrType; +import global.Convert; +import global.RID; +import heap.HeapFile; + +/** + * Each tuple in a relation is a collection of bytes that must fit within a + * single page. The Tuple class provides a logical view of fields, allowing get + * and set operations while automatically handling offsets and type conversions. + */ +public class Tuple { + + /** Page buffer containing this tuple. */ + protected byte[] data; + + /** Schema information for the fields. */ + protected Schema schema; + + // -------------------------------------------------------------------------- + + /** + * Creates a new empty tuple, given its schema. + * + * @param schema logical information for the fields + */ + public Tuple(Schema schema) { + this.schema = schema; + data = new byte[schema.getLength()]; + } + + /** + * Creates a new tuple, given its schema and values. + * + * @param schema logical information for the fields + * @param values individual data values of the fields + */ + public Tuple(Schema schema, Object... values) { + this.schema = schema; + data = new byte[schema.getLength()]; + setAllFields(values); + } + + /** + * Creates a new tuple, given existing values to wrap. + * + * @param schema logical information for the fields + * @param data record buffer containing the tuple + */ + public Tuple(Schema schema, byte[] data) { + this.schema = schema; + this.data = data; + } + + /** + * Builds and returns a new tuple resulting from joining two tuples. + * + * @param t1 the left tuple + * @param t2 the right tuple + * @param schema of the result + */ + public static Tuple join(Tuple t1, Tuple t2, Schema schema) { + + // construct the new tuple + int t1cnt = t1.schema.getCount(); + int t2cnt = t2.schema.getCount(); + Tuple tuple = new Tuple(schema); + + // copy all fields from t1 and t2 + int fldno = 0; + for (int i = 0; i < t1cnt; i++) { + tuple.setField(fldno++, t1.getField(i)); + } + for (int i = 0; i < t2cnt; i++) { + tuple.setField(fldno++, t2.getField(i)); + } + + // return the resulting tuple + return tuple; + + } // public static Tuple join(Tuple t1, Tuple t2, Schema schema) + + /** + * Gets the underlying data buffer. + */ + public byte[] getData() { + return data; + } + + /** + * Inserts the tuple into the given heap file. + */ + public RID insertIntoFile(HeapFile file) { + return file.insertRecord(data); + } + + /** + * Gets a field's value generically. + */ + public Object getField(int fldno) { + + // refer to the schema for the appropriate conversion + switch (schema.fieldType(fldno)) { + + case AttrType.INTEGER: + return getIntFld(fldno); + + case AttrType.FLOAT: + return getFloatFld(fldno); + + case AttrType.STRING: + return getStringFld(fldno); + + default: + throw new IllegalStateException("invalid attribute type"); + } + + } // public Object getField(int fldno) + + /** + * Gets a field's value generically, by column name. + */ + public Object getField(String fldName) { + return getField(schema.fieldNumber(fldName)); + } + + /** + * Sets a field's value generically. + */ + public void setField(int fldno, Object val) { + + // refer to the schema for the appropriate conversion + switch (schema.fieldType(fldno)) { + + case AttrType.INTEGER: + setIntFld(fldno, (Integer) val); + break; + + case AttrType.FLOAT: + setFloatFld(fldno, (Float) val); + break; + + case AttrType.STRING: + setStringFld(fldno, (String) val); + break; + + default: + throw new IllegalStateException("invalid attribute type"); + } + + } // public void setField(int fldno, Object val) + + /** + * Sets a field's value generically, by column name. + */ + public void setField(String fldName, Object val) { + setField(schema.fieldNumber(fldName), val); + } + + /** + * Returns generic values for all fields. + */ + public Object[] getAllFields() { + + Object[] values = new Object[schema.getCount()]; + for (int i = 0; i < values.length; i++) { + values[i] = getField(i); + } + return values; + + } // public Object[] getAllFields() + + /** + * Sets all fields, given generic values. + */ + public void setAllFields(Object... values) { + + for (int i = 0; i < values.length; i++) { + setField(i, values[i]); + } + + } // public void setAllFields(Object... values) + + /** + * Gets an integer field. + */ + public int getIntFld(int fldno) { + return Convert.getIntValue(schema.fieldOffset(fldno), data); + } + + /** + * Sets an integer field. + */ + public void setIntFld(int fldno, int val) { + Convert.setIntValue(val, schema.fieldOffset(fldno), data); + } + + /** + * Gets a float field. + */ + public float getFloatFld(int fldno) { + return Convert.getFloatValue(schema.fieldOffset(fldno), data); + } + + /** + * Sets a float field. + */ + public void setFloatFld(int fldno, float val) { + Convert.setFloatValue(val, schema.fieldOffset(fldno), data); + } + + /** + * Gets a string field. + */ + public String getStringFld(int fldno) { + return Convert.getStringValue(schema.fieldOffset(fldno), data, schema + .fieldLength(fldno)); + } + + /** + * Sets a string field (automatically truncates, if necessary). + */ + public void setStringFld(int fldno, String val) { + + // truncate the string if too long + int len = schema.fieldLength(fldno); + if (val.length() > len) { + val = val.substring(0, len - 1); + } + + // set the string and zero out the rest + int off = schema.fieldOffset(fldno); + Convert.setStringValue(val, off, data); + for (int i = val.length(); i < len; i++) { + data[off + i] = 0; + } + + } // public void setStringFld(int fldno, String val) + + /** + * Prints the tuple in a human-readable format. + */ + public void print() { + + // print everything as a string, with padding + String str = null; + int cnt = schema.getCount(); + for (int i = 0; i < cnt; i++) { + switch (schema.fieldType(i)) { + + case AttrType.INTEGER: + str = Integer.toString(getIntFld(i)); + System.out.print(str); + padOutput(0, str.length()); + break; + + case AttrType.FLOAT: + str = Float.toString(getFloatFld(i)); + System.out.print(str); + padOutput(0, str.length()); + break; + + case AttrType.STRING: + str = getStringFld(i); + System.out.print(str); + padOutput(schema.fieldLength(i), str.length()); + break; + + } + } + System.out.println(); + + } // public void print() + + /** + * Pads the current output to make columns line up. + * + * @param fieldLen minimum length of the current field + * @param outputLen length of the current output so far + */ + protected void padOutput(int fieldLen, int outputLen) { + + fieldLen = Math.max(Schema.MIN_WIDTH, fieldLen); + for (int j = 0; j < fieldLen - outputLen; j++) { + System.out.print(' '); + } + + } // protected void padOutput(int fieldLen, int outputLen) + + + // *** DO NOT CHANGE ANY EXISTING METHODS OR VARIABLES BELOW THIS LINE *** + //String format: field0|field1|field2|...fieldN| + public String toString() + { + String res = ""; + for(int i = 0; i < schema.getCount(); i++) + { + switch(schema.fieldType(i)) + { + case AttrType.FLOAT: + res += Float.toString(getFloatFld(i)) + ""; + break; + case AttrType.INTEGER: + res += Integer.toString(getIntFld(i)) + ":"; + break; + case AttrType.STRING: + res += getStringFld(i) + ":"; + break; + } + } + if(res.length() > 0) res = res.substring(0, res.length()-1); + return res; + } +} // public class Tuple diff --git a/Projects/p3-skeleton/cs448p3/src/test/java/tests/Field.java b/Projects/p3-skeleton/cs448p3/src/test/java/tests/Field.java new file mode 100644 index 0000000..1727e1e --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/java/tests/Field.java @@ -0,0 +1,51 @@ +package tests; + +import global.AttrType; +import org.json.simple.JSONObject; + +public class Field { + + private int no; + private int type; + private int length; + private String name; + + Field(JSONObject obj) { + no = ((Long) obj.get("no")).intValue(); + type = AttrType.fromString((String) obj.get("type")); + length = ((Long) obj.get("length")).intValue(); + name = (String) obj.get("name"); + } + + public Object getValue(String val) { + switch (type) { + case AttrType.INTEGER: { + return Integer.parseInt(val.trim()); + } + + case AttrType.FLOAT: { + return Float.parseFloat(val); + } + + default: { + return val; + } + } + } + + public int getNo() { + return no; + } + + public int getType() { + return type; + } + + public int getLength() { + return length; + } + + public String getName() { + return name; + } +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/java/tests/QEPTest.java b/Projects/p3-skeleton/cs448p3/src/test/java/tests/QEPTest.java new file mode 100644 index 0000000..635b960 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/java/tests/QEPTest.java @@ -0,0 +1,262 @@ +package tests; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + + +import global.AttrOperator; +import global.AttrType; +import heap.HeapFile; +import relop.FileScan; +import relop.HashJoin; +import relop.Predicate; +import relop.Projection; +import relop.Schema; +import relop.Selection; +import relop.SimpleJoin; +import relop.Tuple; + +// YOUR CODE FOR PART3 SHOULD GO HERE. + +public class QEPTest extends TestDriver +{ + /** The display name of the test suite. */ + private static final String TEST_NAME = "QEP Tests"; + + + /** Employee table schema. */ + private static Schema s_emp; + + /** Department table schema. */ + private static Schema s_dept; + + private static String empFilePath; + private static String deptFilePath; + + private static HeapFile empHeapFile; + private static HeapFile deptHeapFile; + + // -------------------------------------------------------------------------- + + /** + * Test application entry point; runs all tests. + * @throws IOException + */ + public static void main(String argv[]) throws IOException + { + empFilePath = argv[0] + "/Employee.txt"; + deptFilePath = argv[0] + "/Department.txt"; + // create a clean Minibase instance + QEPTest qepTest = new QEPTest(); + qepTest.create_minibase(); + + initSchema(); + loadData(); + + + qepTest.q1(); + qepTest.q2(); + qepTest.q3(); + qepTest.q4(); + qepTest.q5(); + qepTest.q6(); + qepTest.q7(); + qepTest.q8(); + + /* + qepTest.q5(); + qepTest.q5_hash(); + */ + } + + public void q1() + { + System.out.println("\n 1) Display for each employee his Name and Salary:\n"); + FileScan scan = new FileScan(s_emp, empHeapFile); + Projection pro = new Projection(scan, s_emp.fieldNumber(Constants.EmpNameColName) , s_emp.fieldNumber(Constants.EmpSalaryColName)); + pro.execute(); + } + + public void q2() + { + System.out.println("\n 2) Display the Name for the departments with MinSalary = 1000:\n"); + FileScan scan = new FileScan(s_dept, deptHeapFile); + Predicate pred = new Predicate(AttrOperator.EQ, AttrType.COLNAME, Constants.DeptMinSalaryColName, AttrType.FLOAT, 1000F); + Selection sel = new Selection(scan, pred); + Projection pro = new Projection(sel, s_dept.fieldNumber(Constants.DeptNameColName)); + pro.execute(); + } + + public void q3() + { + System.out.println("\n 3) Display the Name for the departments with MinSalary = MaxSalary:\n"); + FileScan scan = new FileScan(s_dept, deptHeapFile); + Predicate pred = new Predicate(AttrOperator.EQ, AttrType.COLNAME, Constants.DeptMinSalaryColName, AttrType.COLNAME, Constants.DeptMaxSalaryColName); + Selection sel = new Selection(scan, pred); + Projection pro = new Projection(sel, s_dept.fieldNumber(Constants.DeptNameColName)); + pro.execute(); + } + + public void q4() + { + System.out.println("\n 4) Display the Name for employees whose Age > 30 and Salary < 1000:\n"); + FileScan scan = new FileScan(s_emp, empHeapFile); + Predicate predAge = new Predicate(AttrOperator.GT, AttrType.COLNAME, Constants.EmpAgeColName, AttrType.FLOAT, 30F); + Predicate predSalary = new Predicate(AttrOperator.LT, AttrType.COLNAME, Constants.EmpSalaryColName, AttrType.FLOAT, 1000F); + Selection selAge = new Selection(scan, predAge); + Selection selSalary = new Selection(selAge, predSalary); + Projection projName = new Projection(selSalary, s_emp.fieldNumber(Constants.EmpNameColName)); + projName.execute(); + } + + public void q5() + { + System.out.println("\n 5) For each employee, display his Salary and the Name of his department:\n"); + FileScan empScan = new FileScan(s_emp, empHeapFile); + FileScan deptScan = new FileScan(s_dept, deptHeapFile); + Predicate joinPred = new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 8); + SimpleJoin join = new SimpleJoin(deptScan, empScan, joinPred); + Projection proj = new Projection(join, 7, 1); + proj.execute(); + } + + public void q6() + { + System.out.println("\n 6) Display the Name and Salary for employees who work in the department that has DeptId = 3:\n"); + FileScan scan = new FileScan(s_emp, empHeapFile); + Predicate predDept = new Predicate(AttrOperator.EQ, AttrType.COLNAME, Constants.EmpDeptIDColName, AttrType.INTEGER, 3); + Selection sel = new Selection(scan, predDept); + Projection proj = new Projection(sel, s_emp.fieldNumber(Constants.EmpNameColName), s_emp.fieldNumber(Constants.EmpSalaryColName)); + proj.execute(); + } + + public void q7() + { + System.out.println("\n 7) Display the Salary for each employee who works in a department that has MaxSalary > 100000:\n"); + FileScan empScan = new FileScan(s_emp, empHeapFile); + FileScan deptScan = new FileScan(s_dept, deptHeapFile); + Predicate predMaxSalary = new Predicate(AttrOperator.GT, AttrType.COLNAME, Constants.DeptMaxSalaryColName, AttrType.FLOAT, 100000F); + Selection selDept = new Selection(deptScan, predMaxSalary); + Predicate joinPred = new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 8); + SimpleJoin join = new SimpleJoin(selDept, empScan, joinPred); + Projection proj = new Projection(join, 7); + proj.execute(); + } + + public void q8() + { + System.out.println("\n 8) Display the Name for each employee whose Salary is less than the MinSalary of his department:\n"); + FileScan empScan = new FileScan(s_emp, empHeapFile); + FileScan deptScan = new FileScan(s_dept, deptHeapFile); + Predicate joinPred = new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 8); + SimpleJoin join = new SimpleJoin(deptScan, empScan, joinPred); + Predicate pred = new Predicate(AttrOperator.LT, AttrType.FIELDNO, 7, AttrType.FIELDNO, 2); + Selection sel = new Selection(join, pred); + Projection proj = new Projection(sel, 5); + proj.execute(); + } + + + + public void q5_hash() + { + System.out.println("\n 5) For each employee, display his Salary and the Name of his department:\n"); + FileScan empScan = new FileScan(s_emp, empHeapFile); + FileScan deptScan = new FileScan(s_dept, deptHeapFile); + Predicate joinPred = new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 8); + //SimpleJoin join = new SimpleJoin(deptScan, empScan, joinPred); + HashJoin join = new HashJoin(deptScan, empScan, 0, 4); + Projection proj = new Projection(join, 7, 1); + proj.execute(); + } + + protected static void initSchema() + { + //initialize schema for the "Employee" table + s_emp = new Schema(5); + s_emp.initField(0, AttrType.INTEGER, 4, Constants.EmpIdColName); + s_emp.initField(1, AttrType.STRING, 40, Constants.EmpNameColName); + s_emp.initField(2, AttrType.FLOAT, 4, Constants.EmpAgeColName); + s_emp.initField(3, AttrType.FLOAT, 4, Constants.EmpSalaryColName); + s_emp.initField(4, AttrType.INTEGER, 4, Constants.EmpDeptIDColName); + + //initialize schema for the "Department" table + s_dept = new Schema(4); + s_dept.initField(0, AttrType.INTEGER, 4, Constants.DeptIdColName); + s_dept.initField(1, AttrType.STRING, 40, Constants.DeptNameColName); + s_dept.initField(2, AttrType.FLOAT, 4, Constants.DeptMinSalaryColName); + s_dept.initField(3, AttrType.FLOAT, 4, Constants.DeptMaxSalaryColName); + + } + + protected static void loadData() throws IOException + { + empHeapFile = new HeapFile(null); + loadEmpTable(empHeapFile); + + deptHeapFile = new HeapFile(null); + loadDeptTable(deptHeapFile); + } + + + protected static void loadEmpTable(HeapFile file) throws IOException + { + Tuple tuple = new Tuple(s_emp); + BufferedReader reader = new BufferedReader(new FileReader(empFilePath)); + reader.readLine(); //ignore the header + String line = ""; + String[] temp = null; + int empId; String empName; float age; float salary; int deptId; + while((line = reader.readLine()) != null) + { + temp = line.split(","); + empId = Integer.parseInt(temp[0].trim()); + empName = temp[1].trim(); + age = Float.parseFloat(temp[2].trim()); + salary = Float.parseFloat(temp[3].trim()); + deptId = Integer.parseInt(temp[4].trim()); + tuple.setAllFields(empId, empName, age, salary, deptId); + tuple.insertIntoFile(file); + } + reader.close(); + } + + protected static void loadDeptTable(HeapFile file) throws IOException + { + Tuple tuple = new Tuple(s_dept); + BufferedReader reader = new BufferedReader(new FileReader(deptFilePath)); + reader.readLine(); //ignore the header + String line = ""; + String[] temp = null; + int deptId; String deptName; float minSalary; float maxSalary; + while((line = reader.readLine()) != null) + { + temp = line.split(","); + deptId = Integer.parseInt(temp[0].trim()); + deptName = temp[1].trim(); + minSalary = Float.parseFloat(temp[2].trim()); + maxSalary = Float.parseFloat(temp[3].trim()); + tuple.setAllFields(deptId, deptName, minSalary, maxSalary); + tuple.insertIntoFile(file); + } + reader.close(); + } + + static class Constants + { + + public final static String EmpIdColName = "EmpId"; + public final static String EmpNameColName = "Name"; + public final static String EmpAgeColName = "Age"; + public final static String EmpSalaryColName = "Salary"; + public final static String EmpDeptIDColName = "DeptID"; + + public final static String DeptIdColName = "DeptId"; + public final static String DeptNameColName = "Name"; + public final static String DeptMinSalaryColName = "MinSalary"; + public final static String DeptMaxSalaryColName = "MaxSalary"; + + + } +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/java/tests/ROTest.java b/Projects/p3-skeleton/cs448p3/src/test/java/tests/ROTest.java new file mode 100644 index 0000000..a66a746 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/java/tests/ROTest.java @@ -0,0 +1,367 @@ +package tests; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.ParseException; +import org.junit.After; +import org.junit.Before; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; + +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import global.AttrOperator; +import global.AttrType; +import global.RID; +import global.SearchKey; +import heap.HeapFile; +import index.HashIndex; +import relop.FileScan; +import relop.HashJoin; +import relop.IndexScan; +import relop.KeyScan; +import relop.Predicate; +import relop.Projection; +import relop.Schema; +import relop.Selection; +import relop.SimpleJoin; +import relop.Tuple; +import relop.Iterator; + +import java.io.*; +import java.util.*; + +import com.opencsv.CSVReader; +import org.json.simple.parser.JSONParser; + +/** + * Test suite for the relop layer. + */ +public class ROTest extends TestDriver { + + private static ROTest rot; + + /** The display name of the test suite. */ + private static final String TEST_NAME = "relational operator tests"; + + /** Size of tables in test3. */ + private static final int SUPER_SIZE = 2000; + + private Scanner in; + + /** Drivers schema/table/index */ + private static Schema s_drivers; + private static HeapFile f_drivers; + private static HashIndex idx_drivers; + + private static Schema s_driversBig; + private static HeapFile f_driversBig; + private static HashIndex idx_driversBig; + /** Rides schema/table/index */ + + private static Schema s_rides; + private static HeapFile f_rides; + private static HashIndex idx_rides; + + private static Schema s_ridesBig; + private static HeapFile f_ridesBig; + private static HashIndex idx_ridesBig; + + /** Groups schema/table/index */ + private static Schema s_groups; + private static HeapFile f_groups; + private static HashIndex idx_groups; + + private static Schema s_groupsBig; + private static HeapFile f_groupsBig; + private static HashIndex idx_groupsBig; + + /** Expected result strings for test cases */ + private static HashMap results; + + /** */ + private static void loadTable(Schema schema, HeapFile f_table, HashIndex idx_table, String table) + throws FileNotFoundException, IOException, ParseException { + + // initialize schema for table + InputStream in = ClassLoader.getSystemResourceAsStream(table.concat(".json")); + JSONObject jsonObj = (JSONObject) new JSONParser().parse(new InputStreamReader(in)); + JSONArray jsonFields = (JSONArray) jsonObj.get("schema"); + Field[] fields = new Field[jsonFields.size()]; + + int key = ((Long) jsonObj.get("key")).intValue(); + int xx = 0; + for (Object obj : jsonFields) { + Field field = new Field((JSONObject) obj); + fields[xx] = field; xx++; + schema.initField(field.getNo(), field.getType(), field.getLength(), field.getName()); + } + + // populate relation + in = ClassLoader.getSystemResourceAsStream(table.concat(".csv")); + try (CSVReader csvReader = new CSVReader(new InputStreamReader(in))) { + String[] values = null; + Tuple tuple = new Tuple(schema); + while((values = csvReader.readNext()) != null) { + + for (int i=0; i(); + + try + { + Scanner in = new Scanner(new File("solution.txt")); + String line; + String[] res; + while(in.hasNextLine()) + { + line = in.nextLine(); + res = line.split("="); + results.put(res[0],res[1]); + + } + } catch (IOException e) + { + e.printStackTrace(); + System.exit(1); + } + + // "Drivers" table + s_drivers = new Schema(5); + f_drivers = new HeapFile("drivers"); + idx_drivers = new HashIndex("drivers_idx"); + loadTable(s_drivers, f_drivers, idx_drivers, "drivers"); + + + s_driversBig = new Schema(5); + f_driversBig = new HeapFile("driversBig"); + idx_driversBig = new HashIndex("drivers_idxBig"); + loadTable(s_driversBig, f_driversBig, idx_driversBig, "driversBig"); + // "Rides" table + s_rides = new Schema(4); + f_rides = new HeapFile("rides"); + idx_rides = new HashIndex("rides_idx"); + loadTable(s_rides, f_rides, idx_rides, "rides"); + + s_ridesBig = new Schema(4); + f_ridesBig = new HeapFile("ridesBig"); + idx_ridesBig = new HashIndex("rides_idxBig"); + loadTable(s_ridesBig, f_ridesBig, idx_ridesBig, "ridesBig"); + + // "Groups" table + s_groupsBig = new Schema(2); + f_groupsBig = new HeapFile("groupsBig"); + idx_groupsBig = new HashIndex("groups_idxBig"); + loadTable(s_groupsBig, f_groupsBig, idx_groupsBig, "groupsBig"); + + s_groups = new Schema(2); + f_groups = new HeapFile("groups"); + idx_groups = new HashIndex("groups_idx"); + loadTable(s_groups, f_groups, idx_groups, "groups"); + + System.out.println(); + + } + + @AfterClass + public static void tearDownDB() + { + idx_drivers.deleteFile(); + idx_rides.deleteFile(); + idx_groups.deleteFile(); + f_rides.deleteFile(); + f_drivers.deleteFile(); + f_groups.deleteFile(); + rot.delete_minibase(); + } + + @Test + public void testFileScan() { + //Scan drivers table + Iterator fscan = new FileScan(s_drivers, f_drivers); + execute_and_compare("Filescan", "filescan", fscan); + } + + @Test + public void testIndexScan() { + //Scan drivers index + Iterator idxscan = new IndexScan(s_drivers, idx_drivers, f_drivers); + execute_and_compare("IndexScan", "idxscan", idxscan); + } + + @Test + public void testKeyScan() { + //Scan drivers index for key 20f + Iterator keyscan = new KeyScan(s_drivers, idx_drivers, new SearchKey(20f), f_drivers); + execute_and_compare("KeyScan", "keyscan", keyscan); + } + + @Test + public void testSelection() { + //Selection drivers with age > 20 + Iterator selection = new Selection(new FileScan(s_drivers, f_drivers), + new Predicate(AttrOperator.GT, AttrType.COLNAME, "age", AttrType.FLOAT, 20F)); + execute_and_compare("Selection", "selection", selection); + } + + @Test + public void testSelectionMultiplePredicates() { + Iterator selection_preds = new Selection(new FileScan(s_drivers, f_drivers), + new Predicate(AttrOperator.GT, AttrType.COLNAME, "age", AttrType.FLOAT, 23F), + new Predicate(AttrOperator.LT, AttrType.COLNAME, "age", AttrType.FLOAT, 19F)); + execute_and_compare("Selection Multipled Predicates", "selection_preds", selection_preds); + } + + @Test + public void testProjection() { + //Projection on Drivers: {FirstName, NumSeats} + Iterator projection = new Projection(new FileScan(s_drivers, f_drivers), s_drivers.fieldNumber("FirstName"), s_drivers.fieldNumber("NumSeats")); + execute_and_compare("Projection", "projection", projection); + } + + @Test + public void testHashJoin() { + //HashJoin on Drivers X Rides on DriverID + Iterator hashjoin = new HashJoin(new FileScan(s_drivers, f_drivers), + new FileScan(s_rides, f_rides), 0, 0); + execute_and_compare("Hash Join", "hashjoin", hashjoin); + } + + @Test + public void testSelectionPipelining() { + //Test all possible Iterator inputs to Selection + Iterator sel_idx = new Selection(new IndexScan(s_drivers, idx_drivers, f_drivers), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining IndexScan", "sel_idx", sel_idx); + Iterator sel_key = new Selection(new KeyScan(s_drivers, idx_drivers, new SearchKey(20F), f_drivers), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining Keyscan", "sel_key", sel_key); + Iterator sel_sel = new Selection(new Selection(new FileScan(s_drivers, f_drivers), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "Age", AttrType.FLOAT, 20F)), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining Selection", "sel_sel", sel_sel); + Iterator sel_proj = new Selection(new Projection( + new FileScan(s_drivers, f_drivers), s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("FirstName")), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining Projection", "sel_proj", sel_proj); + /* Iterator sel_sj = new Selection(new SimpleJoin(new FileScan(s_drivers, f_drivers), new FileScan(s_rides, f_rides), + new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 5)), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining Simple Join", "sel_sj", sel_sj); + */ + Iterator sel_hj = new Selection(new HashJoin(new FileScan(s_drivers, f_drivers), new FileScan(s_rides, f_rides),0,0), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "FirstName", AttrType.STRING, "Walid")); + execute_and_compare("Selection - Pipelining Hash Join", "sel_jh", sel_hj); + } + + @Test + public void testProjectionPipelining() { + //Test all possible Iterator inputs to HashJoin + Iterator proj_idx = new Projection(new IndexScan(s_drivers, idx_drivers, f_drivers), + s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("Age")); + execute_and_compare("Projection - Pipelining IndexScan", "proj_idx", proj_idx); + Iterator proj_key = new Projection(new KeyScan(s_drivers, idx_drivers, new SearchKey(20F), f_drivers), + s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("Age")); + execute_and_compare("Projection - Pipelining KeyScan", "proj_key", proj_key); + Iterator proj_sel = new Projection(new Selection(new FileScan(s_drivers, f_drivers), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "Age", AttrType.FLOAT, 20F)), + s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("Age")); + execute_and_compare("Projection - Pipelining Selection", "proj_sel", proj_sel); + Iterator proj_proj = new Projection(new Projection(new FileScan(s_drivers, f_drivers), + s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("FirstName"), s_drivers.fieldNumber("Age")), + 0, 2); + execute_and_compare("Projection - Pipelining Projection", "proj_proj", proj_proj); + /* + Iterator proj_sj = new Projection(new SimpleJoin(new FileScan(s_drivers, f_drivers), new FileScan(s_rides, f_rides), + new Predicate(AttrOperator.EQ, AttrType.FIELDNO, 0, AttrType.FIELDNO, 5)), + 0, 3); + execute_and_compare("Projection - Pipelining Simple Join", "proj_sj", proj_sj); + */ + Iterator proj_hj = new Projection(new HashJoin(new FileScan(s_drivers, f_drivers), new FileScan(s_rides, f_rides),0,0), + 0, 3); + execute_and_compare("Projection - Pipelining Hash Join", "proj_hj", proj_hj); + } + + @Test + public void testHashjoinPipelining() { + //Test all possible Iterator inputs to HashJoin + /* + Iterator hj_sel_sj = new HashJoin(new Selection(new FileScan(s_drivers, f_drivers), + new Predicate(AttrOperator.GTE, AttrType.COLNAME, "DriverId", AttrType.INTEGER, 1)), + new SimpleJoin(new FileScan(s_rides, f_rides), new FileScan(s_groups, f_groups), + new Predicate(AttrOperator.EQ, AttrType.COLNAME, "GroupId", AttrType.COLNAME, "DriverId")),0,0); + execute_and_compare("Hash Join - Pipelining Selection/Simple Join", "hj_sel_sj", hj_sel_sj); + */ + Iterator hj_proj_hj = new HashJoin(new Projection(new FileScan(s_drivers, f_drivers), s_drivers.fieldNumber("DriverId"), s_drivers.fieldNumber("Age")), + new HashJoin(new FileScan(s_rides, f_rides), new FileScan(s_groups, f_groups), 1, 0), 0, 0); + execute_and_compare("Hash Join - Pipelining Projection/Hash Join", "hj_proj_hj", hj_proj_hj); + Iterator hj_iscan_kscan = new HashJoin(new IndexScan(s_drivers, idx_drivers, f_drivers), + new KeyScan(s_rides, idx_rides, new SearchKey(1), f_rides), 0, 0); + execute_and_compare("Hash Join - Pipelining IndexScan/KeyScan", "hj_iscan_kscan", hj_iscan_kscan); + } + + //This is an EXTRA test to do Drivers X Drivers using HashJoin and we will calibrate this by changing the value of HashTableDup in the HashTableDup class + @Test + public void testHashJoinOnBigTables() { + //HashJoin on Drivers X Rides on DriverID + //Anytime the HashTableDup count goes over the threshold, a runtimeexception is thrown + Iterator hashSame = new HashJoin(new FileScan(s_drivers, f_drivers), + new FileScan(s_drivers, f_drivers), 0, 0); + execute_and_compare("Hash Join", "hashSame", hashSame); + } + + //This is second EXTRA test to do DriversBig X DriversBig using HashJoin and we will calibrate this by changing the value of HashTableDup in the HashTableDup class + //Anytime the HashTableDup count goes over the threshold, a runtimeexception is thrown + //In addition, any call to Simplejoin throws a RunTimeException + @Test + public void testHashJoinOnEqualTables() { + //HashJoin on Drivers X Rides on DriverID + Iterator hashEqual = new HashJoin(new FileScan(s_driversBig, f_driversBig), + new FileScan(s_driversBig, f_driversBig), 0, 0); + execute_and_compare("Hash Join", "hashEqual", hashEqual); + } + +} // class ROTest extends TestDriver diff --git a/Projects/p3-skeleton/cs448p3/src/test/java/tests/TestDriver.java b/Projects/p3-skeleton/cs448p3/src/test/java/tests/TestDriver.java new file mode 100644 index 0000000..215f7d8 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/java/tests/TestDriver.java @@ -0,0 +1,179 @@ +package tests; + +import global.GlobalConst; +import global.Minibase; + +import java.io.File; +import java.util.ArrayList; +import java.util.Random; + +/** + *

Minibase Test Driver

+ * This base class contains common code to each layer's test suite. + */ +class TestDriver implements GlobalConst { + + /** Success value, for readability. */ + protected static final boolean PASS = true; + + /** Failure value, for readability. */ + protected static final boolean FAIL = false; + + // -------------------------------------------------------------------------- + + /** Default database file name. */ + protected String DB_PATH = System.getProperty("user.name") + ".minibase"; + + /** Default database size (in pages). */ + protected int DB_SIZE = 10000; + + /** Default buffer pool size (in pages) */ + protected int BUF_SIZE = 100; + + /** Default buffer pool replacement policy */ + protected String BUF_POLICY = "Clock"; + + // -------------------------------------------------------------------------- + + /** Random generator; use the same seed to make tests deterministic. */ + protected Random random; + + /** + * Counter values saved with a particular description. + */ + protected class CountData { + + public String desc; + + public int reads; + + public int writes; + + public int allocs; + + public int pinned; + + } // protected class CountData + + /** + * Incremental history of the performance counters; odd elements are snapshots + * before the tests, and even elements are after. + */ + protected ArrayList counts; + + // -------------------------------------------------------------------------- + + /** + * Deletes the database files from the disk. + */ + protected void delete_minibase() { + new File(DB_PATH).delete(); + } + + /** + * Creates a new database on the disk. + */ + protected void create_minibase() { + System.out.println("Creating database...\nReplacer: " + BUF_POLICY); + new Minibase(DB_PATH, DB_SIZE, BUF_SIZE, BUF_POLICY, false); + } + + /** + * Loads an existing database from the disk. + */ + protected void load_minibase() { + System.out.println("Loading database...\nReplacer: " + BUF_POLICY); + new Minibase(DB_PATH, DB_SIZE, BUF_SIZE, BUF_POLICY, true); + } + + // -------------------------------------------------------------------------- + + /** + * Resets the random generator to the default seed. + */ + protected void initRandom() { + random = new Random(74); + } + + /** + * Resets the performance counter history. + */ + protected void initCounts() { + counts = new ArrayList(); + } + + /** + * Saves the current performance counters, given the description. + */ + protected void saveCounts(String desc) { + + // create the new count data + CountData data = new CountData(); + counts.add(data); + data.desc = desc; + + // save the counts (in correct order) + Minibase.BufferManager.flushAllPages(); + data.reads = Minibase.DiskManager.getReadCount(); + data.writes = Minibase.DiskManager.getWriteCount(); + data.allocs = Minibase.DiskManager.getAllocCount(); + data.pinned = BUF_SIZE - Minibase.BufferManager.getNumUnpinned(); + + } // protected void saveCounts(String desc) + + /** + * Prints the performance counters (i.e. for the current test). + */ + protected void printCounters() { + + CountData data = counts.get(counts.size() - 1); + System.out.println(); + Minibase.BufferManager.flushAllPages(); + System.out.println(" *** Number of reads: " + + (Minibase.DiskManager.getReadCount() - data.reads)); + System.out.println(" *** Number of writes: " + + (Minibase.DiskManager.getWriteCount() - data.writes)); + System.out.println(" *** Net total pages: " + + (Minibase.DiskManager.getAllocCount() - data.allocs)); + int numbufs = Minibase.BufferManager.getNumBuffers(); + System.out + .println(" *** Remaining Pinned: " + + (numbufs - Minibase.BufferManager.getNumUnpinned()) + " / " + + numbufs); + + } // protected void printCounters() + + /** + * Prints the complete history of the performance counters. + * + * @param sepcnt how many lines to print before each separator + */ + protected void printSummary(int sepcnt) { + + System.out.println(); + String seperator = "--------------------------------------"; + System.out.println(seperator); + System.out.println("\tReads\tWrites\tAllocs\tPinned"); + int size = counts.size(); + for (int i = 1; i < size; i += 2) { + + if (i % (sepcnt * 2) == 1) { + System.out.println(seperator); + } + + CountData before = counts.get(i - 1); + CountData after = counts.get(i); + System.out.print(after.desc); + + System.out.print("\t" + (after.reads - before.reads)); + System.out.print("\t" + (after.writes - before.writes)); + System.out.print("\t" + (after.allocs - before.allocs)); + System.out.print("\t" + (after.pinned - before.pinned)); + System.out.println(); + + } // for + System.out.println(seperator); + + } // protected void printSummary(int sepcnt) + +} // class TestDriver implements GlobalConst diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.csv new file mode 100644 index 0000000..bef7605 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.csv @@ -0,0 +1,9 @@ +1, "Ahmed", "Elmagarmid", 25, 5 +2, "Walid", "Aref", 20, 13 +3, "Christopher", "Clifton", 18, 4 +4, "Sunil", "Prabhakar", 22, 7 +5, "Elisa", "Bertino", 26, 5 +6, "Susanne", "Hambrusch", 23, 3 +7, "David", "Eberts", 24, 8 +8, "Arif", "Ghafoor", 20, 5 +9, "Jeff", "Vitter", 19, 10 \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.json b/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.json new file mode 100644 index 0000000..7c7c7c5 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/drivers.json @@ -0,0 +1,35 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "DriverId" + }, + { + "no": 1, + "type": "STRING", + "length": 20, + "name": "FirstName" + }, + { + "no": 2, + "type": "STRING", + "length": 20, + "name": "LastName" + }, + { + "no": 3, + "type": "FLOAT", + "length": 4, + "name": "Age" + }, + { + "no": 4, + "type": "INTEGER", + "length": 4, + "name": "NumSeats" + } + ], + "key": 3 +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.csv new file mode 100644 index 0000000..fae9cec --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.csv @@ -0,0 +1,1010 @@ +1," ""Ahmed"""," ""Elmagarmid""",25,5 +2," ""Walid"""," ""Aref""",20,13 +3," ""Christopher"""," ""Clifton""",18,4 +4," ""Sunil"""," ""Prabhakar""",22,7 +5," ""Elisa"""," ""Bertino""",26,5 +6," ""Susanne"""," ""Hambrusch""",23,3 +7," ""David"""," ""Eberts""",24,8 +8," ""Arif"""," ""Ghafoor""",20,5 +9," ""Jeff"""," ""Vitter""",19,10 +10,"""Adnan""","""Bob""",19,10 +11,"""Adnan""","""Edgardo""",19,10 +12,"""Adnan""","""Bob""",19,10 +13,"""Adnan""","""Edgardo""",19,10 +14,"""Adnan""","""Bob""",19,10 +15,"""Adnan""","""Edgardo""",19,10 +16,"""Adnan""","""Bob""",19,10 +17,"""Adnan""","""Edgardo""",19,10 +18,"""Adnan""","""Bob""",19,10 +19,"""Adnan""","""Edgardo""",19,10 +20,"""Adnan""","""Bob""",19,10 +21,"""Adnan""","""Edgardo""",19,10 +22,"""Adnan""","""Bob""",19,10 +23,"""Adnan""","""Edgardo""",19,10 +24,"""Adnan""","""Bob""",19,10 +25,"""Adnan""","""Edgardo""",19,10 +26,"""Adnan""","""Bob""",19,10 +27,"""Adnan""","""Edgardo""",19,10 +28,"""Adnan""","""Bob""",19,10 +29,"""Adnan""","""Edgardo""",19,10 +30,"""Adnan""","""Bob""",19,10 +31,"""Adnan""","""Edgardo""",19,10 +32,"""Adnan""","""Bob""",19,10 +33,"""Adnan""","""Edgardo""",19,10 +34,"""Adnan""","""Bob""",19,10 +35,"""Adnan""","""Edgardo""",19,10 +36,"""Adnan""","""Bob""",19,10 +37,"""Adnan""","""Edgardo""",19,10 +38,"""Adnan""","""Bob""",19,10 +39,"""Adnan""","""Edgardo""",19,10 +40,"""Adnan""","""Bob""",19,10 +41,"""Adnan""","""Edgardo""",19,10 +42,"""Adnan""","""Bob""",19,10 +43,"""Adnan""","""Edgardo""",19,10 +44,"""Adnan""","""Bob""",19,10 +45,"""Adnan""","""Edgardo""",19,10 +46,"""Adnan""","""Bob""",19,10 +47,"""Adnan""","""Edgardo""",19,10 +48,"""Adnan""","""Bob""",19,10 +49,"""Adnan""","""Edgardo""",19,10 +50,"""Adnan""","""Bob""",19,10 +51,"""Adnan""","""Edgardo""",19,10 +52,"""Adnan""","""Bob""",19,10 +53,"""Adnan""","""Edgardo""",19,10 +54,"""Adnan""","""Bob""",19,10 +55,"""Adnan""","""Edgardo""",19,10 +56,"""Adnan""","""Bob""",19,10 +57,"""Adnan""","""Edgardo""",19,10 +58,"""Adnan""","""Bob""",19,10 +59,"""Adnan""","""Edgardo""",19,10 +60,"""Adnan""","""Bob""",19,10 +61,"""Adnan""","""Edgardo""",19,10 +62,"""Adnan""","""Bob""",19,10 +63,"""Adnan""","""Edgardo""",19,10 +64,"""Adnan""","""Bob""",19,10 +65,"""Adnan""","""Edgardo""",19,10 +66,"""Adnan""","""Bob""",19,10 +67,"""Adnan""","""Edgardo""",19,10 +68,"""Adnan""","""Bob""",19,10 +69,"""Adnan""","""Edgardo""",19,10 +70,"""Adnan""","""Bob""",19,10 +71,"""Adnan""","""Edgardo""",19,10 +72,"""Adnan""","""Bob""",19,10 +73,"""Adnan""","""Edgardo""",19,10 +74,"""Adnan""","""Bob""",19,10 +75,"""Adnan""","""Edgardo""",19,10 +76,"""Adnan""","""Bob""",19,10 +77,"""Adnan""","""Edgardo""",19,10 +78,"""Adnan""","""Bob""",19,10 +79,"""Adnan""","""Edgardo""",19,10 +80,"""Adnan""","""Bob""",19,10 +81,"""Adnan""","""Edgardo""",19,10 +82,"""Adnan""","""Bob""",19,10 +83,"""Adnan""","""Edgardo""",19,10 +84,"""Adnan""","""Bob""",19,10 +85,"""Adnan""","""Edgardo""",19,10 +86,"""Adnan""","""Bob""",19,10 +87,"""Adnan""","""Edgardo""",19,10 +88,"""Adnan""","""Bob""",19,10 +89,"""Adnan""","""Edgardo""",19,10 +90,"""Adnan""","""Bob""",19,10 +91,"""Adnan""","""Edgardo""",19,10 +92,"""Adnan""","""Bob""",19,10 +93,"""Adnan""","""Edgardo""",19,10 +94,"""Adnan""","""Bob""",19,10 +95,"""Adnan""","""Edgardo""",19,10 +96,"""Adnan""","""Bob""",19,10 +97,"""Adnan""","""Edgardo""",19,10 +98,"""Adnan""","""Bob""",19,10 +99,"""Adnan""","""Edgardo""",19,10 +100,"""Adnan""","""Bob""",19,10 +101,"""Adnan""","""Edgardo""",19,10 +102,"""Adnan""","""Bob""",19,10 +103,"""Adnan""","""Edgardo""",19,10 +104,"""Adnan""","""Bob""",19,10 +105,"""Adnan""","""Edgardo""",19,10 +106,"""Adnan""","""Bob""",19,10 +107,"""Adnan""","""Edgardo""",19,10 +108,"""Adnan""","""Bob""",19,10 +109,"""Adnan""","""Edgardo""",19,10 +110,"""Adnan""","""Bob""",19,10 +111,"""Adnan""","""Edgardo""",19,10 +112,"""Adnan""","""Bob""",19,10 +113,"""Adnan""","""Edgardo""",19,10 +114,"""Adnan""","""Bob""",19,10 +115,"""Adnan""","""Edgardo""",19,10 +116,"""Adnan""","""Bob""",19,10 +117,"""Adnan""","""Edgardo""",19,10 +118,"""Adnan""","""Bob""",19,10 +119,"""Adnan""","""Edgardo""",19,10 +120,"""Adnan""","""Bob""",19,10 +121,"""Adnan""","""Edgardo""",19,10 +122,"""Adnan""","""Bob""",19,10 +123,"""Adnan""","""Edgardo""",19,10 +124,"""Adnan""","""Bob""",19,10 +125,"""Adnan""","""Edgardo""",19,10 +126,"""Adnan""","""Bob""",19,10 +127,"""Adnan""","""Edgardo""",19,10 +128,"""Adnan""","""Bob""",19,10 +129,"""Adnan""","""Edgardo""",19,10 +130,"""Adnan""","""Bob""",19,10 +131,"""Adnan""","""Edgardo""",19,10 +132,"""Adnan""","""Bob""",19,10 +133,"""Adnan""","""Edgardo""",19,10 +134,"""Adnan""","""Bob""",19,10 +135,"""Adnan""","""Edgardo""",19,10 +136,"""Adnan""","""Bob""",19,10 +137,"""Adnan""","""Edgardo""",19,10 +138,"""Adnan""","""Bob""",19,10 +139,"""Adnan""","""Edgardo""",19,10 +140,"""Adnan""","""Bob""",19,10 +141,"""Adnan""","""Edgardo""",19,10 +142,"""Adnan""","""Bob""",19,10 +143,"""Adnan""","""Edgardo""",19,10 +144,"""Adnan""","""Bob""",19,10 +145,"""Adnan""","""Edgardo""",19,10 +146,"""Adnan""","""Bob""",19,10 +147,"""Adnan""","""Edgardo""",19,10 +148,"""Adnan""","""Bob""",19,10 +149,"""Adnan""","""Edgardo""",19,10 +150,"""Adnan""","""Bob""",19,10 +151,"""Adnan""","""Edgardo""",19,10 +152,"""Adnan""","""Bob""",19,10 +153,"""Adnan""","""Edgardo""",19,10 +154,"""Adnan""","""Bob""",19,10 +155,"""Adnan""","""Edgardo""",19,10 +156,"""Adnan""","""Bob""",19,10 +157,"""Adnan""","""Edgardo""",19,10 +158,"""Adnan""","""Bob""",19,10 +159,"""Adnan""","""Edgardo""",19,10 +160,"""Adnan""","""Bob""",19,10 +161,"""Adnan""","""Edgardo""",19,10 +162,"""Adnan""","""Bob""",19,10 +163,"""Adnan""","""Edgardo""",19,10 +164,"""Adnan""","""Bob""",19,10 +165,"""Adnan""","""Edgardo""",19,10 +166,"""Adnan""","""Bob""",19,10 +167,"""Adnan""","""Edgardo""",19,10 +168,"""Adnan""","""Bob""",19,10 +169,"""Adnan""","""Edgardo""",19,10 +170,"""Adnan""","""Bob""",19,10 +171,"""Adnan""","""Edgardo""",19,10 +172,"""Adnan""","""Bob""",19,10 +173,"""Adnan""","""Edgardo""",19,10 +174,"""Adnan""","""Bob""",19,10 +175,"""Adnan""","""Edgardo""",19,10 +176,"""Adnan""","""Bob""",19,10 +177,"""Adnan""","""Edgardo""",19,10 +178,"""Adnan""","""Bob""",19,10 +179,"""Adnan""","""Edgardo""",19,10 +180,"""Adnan""","""Bob""",19,10 +181,"""Adnan""","""Edgardo""",19,10 +182,"""Adnan""","""Bob""",19,10 +183,"""Adnan""","""Edgardo""",19,10 +184,"""Adnan""","""Bob""",19,10 +185,"""Adnan""","""Edgardo""",19,10 +186,"""Adnan""","""Bob""",19,10 +187,"""Adnan""","""Edgardo""",19,10 +188,"""Adnan""","""Bob""",19,10 +189,"""Adnan""","""Edgardo""",19,10 +190,"""Adnan""","""Bob""",19,10 +191,"""Adnan""","""Edgardo""",19,10 +192,"""Adnan""","""Bob""",19,10 +193,"""Adnan""","""Edgardo""",19,10 +194,"""Adnan""","""Bob""",19,10 +195,"""Adnan""","""Edgardo""",19,10 +196,"""Adnan""","""Bob""",19,10 +197,"""Adnan""","""Edgardo""",19,10 +198,"""Adnan""","""Bob""",19,10 +199,"""Adnan""","""Edgardo""",19,10 +200,"""Adnan""","""Bob""",19,10 +201,"""Adnan""","""Edgardo""",19,10 +202,"""Adnan""","""Bob""",19,10 +203,"""Adnan""","""Edgardo""",19,10 +204,"""Adnan""","""Bob""",19,10 +205,"""Adnan""","""Edgardo""",19,10 +206,"""Adnan""","""Bob""",19,10 +207,"""Adnan""","""Edgardo""",19,10 +208,"""Adnan""","""Bob""",19,10 +209,"""Adnan""","""Edgardo""",19,10 +210,"""Adnan""","""Bob""",19,10 +211,"""Adnan""","""Edgardo""",19,10 +212,"""Adnan""","""Bob""",19,10 +213,"""Adnan""","""Edgardo""",19,10 +214,"""Adnan""","""Bob""",19,10 +215,"""Adnan""","""Edgardo""",19,10 +216,"""Adnan""","""Bob""",19,10 +217,"""Adnan""","""Edgardo""",19,10 +218,"""Adnan""","""Bob""",19,10 +219,"""Adnan""","""Edgardo""",19,10 +220,"""Adnan""","""Bob""",19,10 +221,"""Adnan""","""Edgardo""",19,10 +222,"""Adnan""","""Bob""",19,10 +223,"""Adnan""","""Edgardo""",19,10 +224,"""Adnan""","""Bob""",19,10 +225,"""Adnan""","""Edgardo""",19,10 +226,"""Adnan""","""Bob""",19,10 +227,"""Adnan""","""Edgardo""",19,10 +228,"""Adnan""","""Bob""",19,10 +229,"""Adnan""","""Edgardo""",19,10 +230,"""Adnan""","""Bob""",19,10 +231,"""Adnan""","""Edgardo""",19,10 +232,"""Adnan""","""Bob""",19,10 +233,"""Adnan""","""Edgardo""",19,10 +234,"""Adnan""","""Bob""",19,10 +235,"""Adnan""","""Edgardo""",19,10 +236,"""Adnan""","""Bob""",19,10 +237,"""Adnan""","""Edgardo""",19,10 +238,"""Adnan""","""Bob""",19,10 +239,"""Adnan""","""Edgardo""",19,10 +240,"""Adnan""","""Bob""",19,10 +241,"""Adnan""","""Edgardo""",19,10 +242,"""Adnan""","""Bob""",19,10 +243,"""Adnan""","""Edgardo""",19,10 +244,"""Adnan""","""Bob""",19,10 +245,"""Adnan""","""Edgardo""",19,10 +246,"""Adnan""","""Bob""",19,10 +247,"""Adnan""","""Edgardo""",19,10 +248,"""Adnan""","""Bob""",19,10 +249,"""Adnan""","""Edgardo""",19,10 +250,"""Adnan""","""Bob""",19,10 +251,"""Adnan""","""Edgardo""",19,10 +252,"""Adnan""","""Bob""",19,10 +253,"""Adnan""","""Edgardo""",19,10 +254,"""Adnan""","""Bob""",19,10 +255,"""Adnan""","""Edgardo""",19,10 +256,"""Adnan""","""Bob""",19,10 +257,"""Adnan""","""Edgardo""",19,10 +258,"""Adnan""","""Bob""",19,10 +259,"""Adnan""","""Edgardo""",19,10 +260,"""Adnan""","""Bob""",19,10 +261,"""Adnan""","""Edgardo""",19,10 +262,"""Adnan""","""Bob""",19,10 +263,"""Adnan""","""Edgardo""",19,10 +264,"""Adnan""","""Bob""",19,10 +265,"""Adnan""","""Edgardo""",19,10 +266,"""Adnan""","""Bob""",19,10 +267,"""Adnan""","""Edgardo""",19,10 +268,"""Adnan""","""Bob""",19,10 +269,"""Adnan""","""Edgardo""",19,10 +270,"""Adnan""","""Bob""",19,10 +271,"""Adnan""","""Edgardo""",19,10 +272,"""Adnan""","""Bob""",19,10 +273,"""Adnan""","""Edgardo""",19,10 +274,"""Adnan""","""Bob""",19,10 +275,"""Adnan""","""Edgardo""",19,10 +276,"""Adnan""","""Bob""",19,10 +277,"""Adnan""","""Edgardo""",19,10 +278,"""Adnan""","""Bob""",19,10 +279,"""Adnan""","""Edgardo""",19,10 +280,"""Adnan""","""Bob""",19,10 +281,"""Adnan""","""Edgardo""",19,10 +282,"""Adnan""","""Bob""",19,10 +283,"""Adnan""","""Edgardo""",19,10 +284,"""Adnan""","""Bob""",19,10 +285,"""Adnan""","""Edgardo""",19,10 +286,"""Adnan""","""Bob""",19,10 +287,"""Adnan""","""Edgardo""",19,10 +288,"""Adnan""","""Bob""",19,10 +289,"""Adnan""","""Edgardo""",19,10 +290,"""Adnan""","""Bob""",19,10 +291,"""Adnan""","""Edgardo""",19,10 +292,"""Adnan""","""Bob""",19,10 +293,"""Adnan""","""Edgardo""",19,10 +294,"""Adnan""","""Bob""",19,10 +295,"""Adnan""","""Edgardo""",19,10 +296,"""Adnan""","""Bob""",19,10 +297,"""Adnan""","""Edgardo""",19,10 +298,"""Adnan""","""Bob""",19,10 +299,"""Adnan""","""Edgardo""",19,10 +300,"""Adnan""","""Bob""",19,10 +301,"""Adnan""","""Edgardo""",19,10 +302,"""Adnan""","""Bob""",19,10 +303,"""Adnan""","""Edgardo""",19,10 +304,"""Adnan""","""Bob""",19,10 +305,"""Adnan""","""Edgardo""",19,10 +306,"""Adnan""","""Bob""",19,10 +307,"""Adnan""","""Edgardo""",19,10 +308,"""Adnan""","""Bob""",19,10 +309,"""Adnan""","""Edgardo""",19,10 +310,"""Adnan""","""Bob""",19,10 +311,"""Adnan""","""Edgardo""",19,10 +312,"""Adnan""","""Bob""",19,10 +313,"""Adnan""","""Edgardo""",19,10 +314,"""Adnan""","""Bob""",19,10 +315,"""Adnan""","""Edgardo""",19,10 +316,"""Adnan""","""Bob""",19,10 +317,"""Adnan""","""Edgardo""",19,10 +318,"""Adnan""","""Bob""",19,10 +319,"""Adnan""","""Edgardo""",19,10 +320,"""Adnan""","""Bob""",19,10 +321,"""Adnan""","""Edgardo""",19,10 +322,"""Adnan""","""Bob""",19,10 +323,"""Adnan""","""Edgardo""",19,10 +324,"""Adnan""","""Bob""",19,10 +325,"""Adnan""","""Edgardo""",19,10 +326,"""Adnan""","""Bob""",19,10 +327,"""Adnan""","""Edgardo""",19,10 +328,"""Adnan""","""Bob""",19,10 +329,"""Adnan""","""Edgardo""",19,10 +330,"""Adnan""","""Bob""",19,10 +331,"""Adnan""","""Edgardo""",19,10 +332,"""Adnan""","""Bob""",19,10 +333,"""Adnan""","""Edgardo""",19,10 +334,"""Adnan""","""Bob""",19,10 +335,"""Adnan""","""Edgardo""",19,10 +336,"""Adnan""","""Bob""",19,10 +337,"""Adnan""","""Edgardo""",19,10 +338,"""Adnan""","""Bob""",19,10 +339,"""Adnan""","""Edgardo""",19,10 +340,"""Adnan""","""Bob""",19,10 +341,"""Adnan""","""Edgardo""",19,10 +342,"""Adnan""","""Bob""",19,10 +343,"""Adnan""","""Edgardo""",19,10 +344,"""Adnan""","""Bob""",19,10 +345,"""Adnan""","""Edgardo""",19,10 +346,"""Adnan""","""Bob""",19,10 +347,"""Adnan""","""Edgardo""",19,10 +348,"""Adnan""","""Bob""",19,10 +349,"""Adnan""","""Edgardo""",19,10 +350,"""Adnan""","""Bob""",19,10 +351,"""Adnan""","""Edgardo""",19,10 +352,"""Adnan""","""Bob""",19,10 +353,"""Adnan""","""Edgardo""",19,10 +354,"""Adnan""","""Bob""",19,10 +355,"""Adnan""","""Edgardo""",19,10 +356,"""Adnan""","""Bob""",19,10 +357,"""Adnan""","""Edgardo""",19,10 +358,"""Adnan""","""Bob""",19,10 +359,"""Adnan""","""Edgardo""",19,10 +360,"""Adnan""","""Bob""",19,10 +361,"""Adnan""","""Edgardo""",19,10 +362,"""Adnan""","""Bob""",19,10 +363,"""Adnan""","""Edgardo""",19,10 +364,"""Adnan""","""Bob""",19,10 +365,"""Adnan""","""Edgardo""",19,10 +366,"""Adnan""","""Bob""",19,10 +367,"""Adnan""","""Edgardo""",19,10 +368,"""Adnan""","""Bob""",19,10 +369,"""Adnan""","""Edgardo""",19,10 +370,"""Adnan""","""Bob""",19,10 +371,"""Adnan""","""Edgardo""",19,10 +372,"""Adnan""","""Bob""",19,10 +373,"""Adnan""","""Edgardo""",19,10 +374,"""Adnan""","""Bob""",19,10 +375,"""Adnan""","""Edgardo""",19,10 +376,"""Adnan""","""Bob""",19,10 +377,"""Adnan""","""Edgardo""",19,10 +378,"""Adnan""","""Bob""",19,10 +379,"""Adnan""","""Edgardo""",19,10 +380,"""Adnan""","""Bob""",19,10 +381,"""Adnan""","""Edgardo""",19,10 +382,"""Adnan""","""Bob""",19,10 +383,"""Adnan""","""Edgardo""",19,10 +384,"""Adnan""","""Bob""",19,10 +385,"""Adnan""","""Edgardo""",19,10 +386,"""Adnan""","""Bob""",19,10 +387,"""Adnan""","""Edgardo""",19,10 +388,"""Adnan""","""Bob""",19,10 +389,"""Adnan""","""Edgardo""",19,10 +390,"""Adnan""","""Bob""",19,10 +391,"""Adnan""","""Edgardo""",19,10 +392,"""Adnan""","""Bob""",19,10 +393,"""Adnan""","""Edgardo""",19,10 +394,"""Adnan""","""Bob""",19,10 +395,"""Adnan""","""Edgardo""",19,10 +396,"""Adnan""","""Bob""",19,10 +397,"""Adnan""","""Edgardo""",19,10 +398,"""Adnan""","""Bob""",19,10 +399,"""Adnan""","""Edgardo""",19,10 +400,"""Adnan""","""Bob""",19,10 +401,"""Adnan""","""Edgardo""",19,10 +402,"""Adnan""","""Bob""",19,10 +403,"""Adnan""","""Edgardo""",19,10 +404,"""Adnan""","""Bob""",19,10 +405,"""Adnan""","""Edgardo""",19,10 +406,"""Adnan""","""Bob""",19,10 +407,"""Adnan""","""Edgardo""",19,10 +408,"""Adnan""","""Bob""",19,10 +409,"""Adnan""","""Edgardo""",19,10 +410,"""Adnan""","""Bob""",19,10 +411,"""Adnan""","""Edgardo""",19,10 +412,"""Adnan""","""Bob""",19,10 +413,"""Adnan""","""Edgardo""",19,10 +414,"""Adnan""","""Bob""",19,10 +415,"""Adnan""","""Edgardo""",19,10 +416,"""Adnan""","""Bob""",19,10 +417,"""Adnan""","""Edgardo""",19,10 +418,"""Adnan""","""Bob""",19,10 +419,"""Adnan""","""Edgardo""",19,10 +420,"""Adnan""","""Bob""",19,10 +421,"""Adnan""","""Edgardo""",19,10 +422,"""Adnan""","""Bob""",19,10 +423,"""Adnan""","""Edgardo""",19,10 +424,"""Adnan""","""Bob""",19,10 +425,"""Adnan""","""Edgardo""",19,10 +426,"""Adnan""","""Bob""",19,10 +427,"""Adnan""","""Edgardo""",19,10 +428,"""Adnan""","""Bob""",19,10 +429,"""Adnan""","""Edgardo""",19,10 +430,"""Adnan""","""Bob""",19,10 +431,"""Adnan""","""Edgardo""",19,10 +432,"""Adnan""","""Bob""",19,10 +433,"""Adnan""","""Edgardo""",19,10 +434,"""Adnan""","""Bob""",19,10 +435,"""Adnan""","""Edgardo""",19,10 +436,"""Adnan""","""Bob""",19,10 +437,"""Adnan""","""Edgardo""",19,10 +438,"""Adnan""","""Bob""",19,10 +439,"""Adnan""","""Edgardo""",19,10 +440,"""Adnan""","""Bob""",19,10 +441,"""Adnan""","""Edgardo""",19,10 +442,"""Adnan""","""Bob""",19,10 +443,"""Adnan""","""Edgardo""",19,10 +444,"""Adnan""","""Bob""",19,10 +445,"""Adnan""","""Edgardo""",19,10 +446,"""Adnan""","""Bob""",19,10 +447,"""Adnan""","""Edgardo""",19,10 +448,"""Adnan""","""Bob""",19,10 +449,"""Adnan""","""Edgardo""",19,10 +450,"""Adnan""","""Bob""",19,10 +451,"""Adnan""","""Edgardo""",19,10 +452,"""Adnan""","""Bob""",19,10 +453,"""Adnan""","""Edgardo""",19,10 +454,"""Adnan""","""Bob""",19,10 +455,"""Adnan""","""Edgardo""",19,10 +456,"""Adnan""","""Bob""",19,10 +457,"""Adnan""","""Edgardo""",19,10 +458,"""Adnan""","""Bob""",19,10 +459,"""Adnan""","""Edgardo""",19,10 +460,"""Adnan""","""Bob""",19,10 +461,"""Adnan""","""Edgardo""",19,10 +462,"""Adnan""","""Bob""",19,10 +463,"""Adnan""","""Edgardo""",19,10 +464,"""Adnan""","""Bob""",19,10 +465,"""Adnan""","""Edgardo""",19,10 +466,"""Adnan""","""Bob""",19,10 +467,"""Adnan""","""Edgardo""",19,10 +468,"""Adnan""","""Bob""",19,10 +469,"""Adnan""","""Edgardo""",19,10 +470,"""Adnan""","""Bob""",19,10 +471,"""Adnan""","""Edgardo""",19,10 +472,"""Adnan""","""Bob""",19,10 +473,"""Adnan""","""Edgardo""",19,10 +474,"""Adnan""","""Bob""",19,10 +475,"""Adnan""","""Edgardo""",19,10 +476,"""Adnan""","""Bob""",19,10 +477,"""Adnan""","""Edgardo""",19,10 +478,"""Adnan""","""Bob""",19,10 +479,"""Adnan""","""Edgardo""",19,10 +480,"""Adnan""","""Bob""",19,10 +481,"""Adnan""","""Edgardo""",19,10 +482,"""Adnan""","""Bob""",19,10 +483,"""Adnan""","""Edgardo""",19,10 +484,"""Adnan""","""Bob""",19,10 +485,"""Adnan""","""Edgardo""",19,10 +486,"""Adnan""","""Bob""",19,10 +487,"""Adnan""","""Edgardo""",19,10 +488,"""Adnan""","""Bob""",19,10 +489,"""Adnan""","""Edgardo""",19,10 +490,"""Adnan""","""Bob""",19,10 +491,"""Adnan""","""Edgardo""",19,10 +492,"""Adnan""","""Bob""",19,10 +493,"""Adnan""","""Edgardo""",19,10 +494,"""Adnan""","""Bob""",19,10 +495,"""Adnan""","""Edgardo""",19,10 +496,"""Adnan""","""Bob""",19,10 +497,"""Adnan""","""Edgardo""",19,10 +498,"""Adnan""","""Bob""",19,10 +499,"""Adnan""","""Edgardo""",19,10 +500,"""Adnan""","""Bob""",19,10 +501,"""Adnan""","""Edgardo""",19,10 +502,"""Adnan""","""Bob""",19,10 +503,"""Adnan""","""Edgardo""",19,10 +504,"""Adnan""","""Bob""",19,10 +505,"""Adnan""","""Edgardo""",19,10 +506,"""Adnan""","""Bob""",19,10 +507,"""Adnan""","""Edgardo""",19,10 +508,"""Adnan""","""Bob""",19,10 +509,"""Adnan""","""Edgardo""",19,10 +510,"""Adnan""","""Bob""",19,10 +511,"""Adnan""","""Edgardo""",19,10 +512,"""Adnan""","""Bob""",19,10 +513,"""Adnan""","""Edgardo""",19,10 +514,"""Adnan""","""Bob""",19,10 +515,"""Adnan""","""Edgardo""",19,10 +516,"""Adnan""","""Bob""",19,10 +517,"""Adnan""","""Edgardo""",19,10 +518,"""Adnan""","""Bob""",19,10 +519,"""Adnan""","""Edgardo""",19,10 +520,"""Adnan""","""Bob""",19,10 +521,"""Adnan""","""Edgardo""",19,10 +522,"""Adnan""","""Bob""",19,10 +523,"""Adnan""","""Edgardo""",19,10 +524,"""Adnan""","""Bob""",19,10 +525,"""Adnan""","""Edgardo""",19,10 +526,"""Adnan""","""Bob""",19,10 +527,"""Adnan""","""Edgardo""",19,10 +528,"""Adnan""","""Bob""",19,10 +529,"""Adnan""","""Edgardo""",19,10 +530,"""Adnan""","""Bob""",19,10 +531,"""Adnan""","""Edgardo""",19,10 +532,"""Adnan""","""Bob""",19,10 +533,"""Adnan""","""Edgardo""",19,10 +534,"""Adnan""","""Bob""",19,10 +535,"""Adnan""","""Edgardo""",19,10 +536,"""Adnan""","""Bob""",19,10 +537,"""Adnan""","""Edgardo""",19,10 +538,"""Adnan""","""Bob""",19,10 +539,"""Adnan""","""Edgardo""",19,10 +540,"""Adnan""","""Bob""",19,10 +541,"""Adnan""","""Edgardo""",19,10 +542,"""Adnan""","""Bob""",19,10 +543,"""Adnan""","""Edgardo""",19,10 +544,"""Adnan""","""Bob""",19,10 +545,"""Adnan""","""Edgardo""",19,10 +546,"""Adnan""","""Bob""",19,10 +547,"""Adnan""","""Edgardo""",19,10 +548,"""Adnan""","""Bob""",19,10 +549,"""Adnan""","""Edgardo""",19,10 +550,"""Adnan""","""Bob""",19,10 +551,"""Adnan""","""Edgardo""",19,10 +552,"""Adnan""","""Bob""",19,10 +553,"""Adnan""","""Edgardo""",19,10 +554,"""Adnan""","""Bob""",19,10 +555,"""Adnan""","""Edgardo""",19,10 +556,"""Adnan""","""Bob""",19,10 +557,"""Adnan""","""Edgardo""",19,10 +558,"""Adnan""","""Bob""",19,10 +559,"""Adnan""","""Edgardo""",19,10 +560,"""Adnan""","""Bob""",19,10 +561,"""Adnan""","""Edgardo""",19,10 +562,"""Adnan""","""Bob""",19,10 +563,"""Adnan""","""Edgardo""",19,10 +564,"""Adnan""","""Bob""",19,10 +565,"""Adnan""","""Edgardo""",19,10 +566,"""Adnan""","""Bob""",19,10 +567,"""Adnan""","""Edgardo""",19,10 +568,"""Adnan""","""Bob""",19,10 +569,"""Adnan""","""Edgardo""",19,10 +570,"""Adnan""","""Bob""",19,10 +571,"""Adnan""","""Edgardo""",19,10 +572,"""Adnan""","""Bob""",19,10 +573,"""Adnan""","""Edgardo""",19,10 +574,"""Adnan""","""Bob""",19,10 +575,"""Adnan""","""Edgardo""",19,10 +576,"""Adnan""","""Bob""",19,10 +577,"""Adnan""","""Edgardo""",19,10 +578,"""Adnan""","""Bob""",19,10 +579,"""Adnan""","""Edgardo""",19,10 +580,"""Adnan""","""Bob""",19,10 +581,"""Adnan""","""Edgardo""",19,10 +582,"""Adnan""","""Bob""",19,10 +583,"""Adnan""","""Edgardo""",19,10 +584,"""Adnan""","""Bob""",19,10 +585,"""Adnan""","""Edgardo""",19,10 +586,"""Adnan""","""Bob""",19,10 +587,"""Adnan""","""Edgardo""",19,10 +588,"""Adnan""","""Bob""",19,10 +589,"""Adnan""","""Edgardo""",19,10 +590,"""Adnan""","""Bob""",19,10 +591,"""Adnan""","""Edgardo""",19,10 +592,"""Adnan""","""Bob""",19,10 +593,"""Adnan""","""Edgardo""",19,10 +594,"""Adnan""","""Bob""",19,10 +595,"""Adnan""","""Edgardo""",19,10 +596,"""Adnan""","""Bob""",19,10 +597,"""Adnan""","""Edgardo""",19,10 +598,"""Adnan""","""Bob""",19,10 +599,"""Adnan""","""Edgardo""",19,10 +600,"""Adnan""","""Bob""",19,10 +601,"""Adnan""","""Edgardo""",19,10 +602,"""Adnan""","""Bob""",19,10 +603,"""Adnan""","""Edgardo""",19,10 +604,"""Adnan""","""Bob""",19,10 +605,"""Adnan""","""Edgardo""",19,10 +606,"""Adnan""","""Bob""",19,10 +607,"""Adnan""","""Edgardo""",19,10 +608,"""Adnan""","""Bob""",19,10 +609,"""Adnan""","""Edgardo""",19,10 +610,"""Adnan""","""Bob""",19,10 +611,"""Adnan""","""Edgardo""",19,10 +612,"""Adnan""","""Bob""",19,10 +613,"""Adnan""","""Edgardo""",19,10 +614,"""Adnan""","""Bob""",19,10 +615,"""Adnan""","""Edgardo""",19,10 +616,"""Adnan""","""Bob""",19,10 +617,"""Adnan""","""Edgardo""",19,10 +618,"""Adnan""","""Bob""",19,10 +619,"""Adnan""","""Edgardo""",19,10 +620,"""Adnan""","""Bob""",19,10 +621,"""Adnan""","""Edgardo""",19,10 +622,"""Adnan""","""Bob""",19,10 +623,"""Adnan""","""Edgardo""",19,10 +624,"""Adnan""","""Bob""",19,10 +625,"""Adnan""","""Edgardo""",19,10 +626,"""Adnan""","""Bob""",19,10 +627,"""Adnan""","""Edgardo""",19,10 +628,"""Adnan""","""Bob""",19,10 +629,"""Adnan""","""Edgardo""",19,10 +630,"""Adnan""","""Bob""",19,10 +631,"""Adnan""","""Edgardo""",19,10 +632,"""Adnan""","""Bob""",19,10 +633,"""Adnan""","""Edgardo""",19,10 +634,"""Adnan""","""Bob""",19,10 +635,"""Adnan""","""Edgardo""",19,10 +636,"""Adnan""","""Bob""",19,10 +637,"""Adnan""","""Edgardo""",19,10 +638,"""Adnan""","""Bob""",19,10 +639,"""Adnan""","""Edgardo""",19,10 +640,"""Adnan""","""Bob""",19,10 +641,"""Adnan""","""Edgardo""",19,10 +642,"""Adnan""","""Bob""",19,10 +643,"""Adnan""","""Edgardo""",19,10 +644,"""Adnan""","""Bob""",19,10 +645,"""Adnan""","""Edgardo""",19,10 +646,"""Adnan""","""Bob""",19,10 +647,"""Adnan""","""Edgardo""",19,10 +648,"""Adnan""","""Bob""",19,10 +649,"""Adnan""","""Edgardo""",19,10 +650,"""Adnan""","""Bob""",19,10 +651,"""Adnan""","""Edgardo""",19,10 +652,"""Adnan""","""Bob""",19,10 +653,"""Adnan""","""Edgardo""",19,10 +654,"""Adnan""","""Bob""",19,10 +655,"""Adnan""","""Edgardo""",19,10 +656,"""Adnan""","""Bob""",19,10 +657,"""Adnan""","""Edgardo""",19,10 +658,"""Adnan""","""Bob""",19,10 +659,"""Adnan""","""Edgardo""",19,10 +660,"""Adnan""","""Bob""",19,10 +661,"""Adnan""","""Edgardo""",19,10 +662,"""Adnan""","""Bob""",19,10 +663,"""Adnan""","""Edgardo""",19,10 +664,"""Adnan""","""Bob""",19,10 +665,"""Adnan""","""Edgardo""",19,10 +666,"""Adnan""","""Bob""",19,10 +667,"""Adnan""","""Edgardo""",19,10 +668,"""Adnan""","""Bob""",19,10 +669,"""Adnan""","""Edgardo""",19,10 +670,"""Adnan""","""Bob""",19,10 +671,"""Adnan""","""Edgardo""",19,10 +672,"""Adnan""","""Bob""",19,10 +673,"""Adnan""","""Edgardo""",19,10 +674,"""Adnan""","""Bob""",19,10 +675,"""Adnan""","""Edgardo""",19,10 +676,"""Adnan""","""Bob""",19,10 +677,"""Adnan""","""Edgardo""",19,10 +678,"""Adnan""","""Bob""",19,10 +679,"""Adnan""","""Edgardo""",19,10 +680,"""Adnan""","""Bob""",19,10 +681,"""Adnan""","""Edgardo""",19,10 +682,"""Adnan""","""Bob""",19,10 +683,"""Adnan""","""Edgardo""",19,10 +684,"""Adnan""","""Bob""",19,10 +685,"""Adnan""","""Edgardo""",19,10 +686,"""Adnan""","""Bob""",19,10 +687,"""Adnan""","""Edgardo""",19,10 +688,"""Adnan""","""Bob""",19,10 +689,"""Adnan""","""Edgardo""",19,10 +690,"""Adnan""","""Bob""",19,10 +691,"""Adnan""","""Edgardo""",19,10 +692,"""Adnan""","""Bob""",19,10 +693,"""Adnan""","""Edgardo""",19,10 +694,"""Adnan""","""Bob""",19,10 +695,"""Adnan""","""Edgardo""",19,10 +696,"""Adnan""","""Bob""",19,10 +697,"""Adnan""","""Edgardo""",19,10 +698,"""Adnan""","""Bob""",19,10 +699,"""Adnan""","""Edgardo""",19,10 +700,"""Adnan""","""Bob""",19,10 +701,"""Adnan""","""Edgardo""",19,10 +702,"""Adnan""","""Bob""",19,10 +703,"""Adnan""","""Edgardo""",19,10 +704,"""Adnan""","""Bob""",19,10 +705,"""Adnan""","""Edgardo""",19,10 +706,"""Adnan""","""Bob""",19,10 +707,"""Adnan""","""Edgardo""",19,10 +708,"""Adnan""","""Bob""",19,10 +709,"""Adnan""","""Edgardo""",19,10 +710,"""Adnan""","""Bob""",19,10 +711,"""Adnan""","""Edgardo""",19,10 +712,"""Adnan""","""Bob""",19,10 +713,"""Adnan""","""Edgardo""",19,10 +714,"""Adnan""","""Bob""",19,10 +715,"""Adnan""","""Edgardo""",19,10 +716,"""Adnan""","""Bob""",19,10 +717,"""Adnan""","""Edgardo""",19,10 +718,"""Adnan""","""Bob""",19,10 +719,"""Adnan""","""Edgardo""",19,10 +720,"""Adnan""","""Bob""",19,10 +721,"""Adnan""","""Edgardo""",19,10 +722,"""Adnan""","""Bob""",19,10 +723,"""Adnan""","""Edgardo""",19,10 +724,"""Adnan""","""Bob""",19,10 +725,"""Adnan""","""Edgardo""",19,10 +726,"""Adnan""","""Bob""",19,10 +727,"""Adnan""","""Edgardo""",19,10 +728,"""Adnan""","""Bob""",19,10 +729,"""Adnan""","""Edgardo""",19,10 +730,"""Adnan""","""Bob""",19,10 +731,"""Adnan""","""Edgardo""",19,10 +732,"""Adnan""","""Bob""",19,10 +733,"""Adnan""","""Edgardo""",19,10 +734,"""Adnan""","""Bob""",19,10 +735,"""Adnan""","""Edgardo""",19,10 +736,"""Adnan""","""Bob""",19,10 +737,"""Adnan""","""Edgardo""",19,10 +738,"""Adnan""","""Bob""",19,10 +739,"""Adnan""","""Edgardo""",19,10 +740,"""Adnan""","""Bob""",19,10 +741,"""Adnan""","""Edgardo""",19,10 +742,"""Adnan""","""Bob""",19,10 +743,"""Adnan""","""Edgardo""",19,10 +744,"""Adnan""","""Bob""",19,10 +745,"""Adnan""","""Edgardo""",19,10 +746,"""Adnan""","""Bob""",19,10 +747,"""Adnan""","""Edgardo""",19,10 +748,"""Adnan""","""Bob""",19,10 +749,"""Adnan""","""Edgardo""",19,10 +750,"""Adnan""","""Bob""",19,10 +751,"""Adnan""","""Edgardo""",19,10 +752,"""Adnan""","""Bob""",19,10 +753,"""Adnan""","""Edgardo""",19,10 +754,"""Adnan""","""Bob""",19,10 +755,"""Adnan""","""Edgardo""",19,10 +756,"""Adnan""","""Bob""",19,10 +757,"""Adnan""","""Edgardo""",19,10 +758,"""Adnan""","""Bob""",19,10 +759,"""Adnan""","""Edgardo""",19,10 +760,"""Adnan""","""Bob""",19,10 +761,"""Adnan""","""Edgardo""",19,10 +762,"""Adnan""","""Bob""",19,10 +763,"""Adnan""","""Edgardo""",19,10 +764,"""Adnan""","""Bob""",19,10 +765,"""Adnan""","""Edgardo""",19,10 +766,"""Adnan""","""Bob""",19,10 +767,"""Adnan""","""Edgardo""",19,10 +768,"""Adnan""","""Bob""",19,10 +769,"""Adnan""","""Edgardo""",19,10 +770,"""Adnan""","""Bob""",19,10 +771,"""Adnan""","""Edgardo""",19,10 +772,"""Adnan""","""Bob""",19,10 +773,"""Adnan""","""Edgardo""",19,10 +774,"""Adnan""","""Bob""",19,10 +775,"""Adnan""","""Edgardo""",19,10 +776,"""Adnan""","""Bob""",19,10 +777,"""Adnan""","""Edgardo""",19,10 +778,"""Adnan""","""Bob""",19,10 +779,"""Adnan""","""Edgardo""",19,10 +780,"""Adnan""","""Bob""",19,10 +781,"""Adnan""","""Edgardo""",19,10 +782,"""Adnan""","""Bob""",19,10 +783,"""Adnan""","""Edgardo""",19,10 +784,"""Adnan""","""Bob""",19,10 +785,"""Adnan""","""Edgardo""",19,10 +786,"""Adnan""","""Bob""",19,10 +787,"""Adnan""","""Edgardo""",19,10 +788,"""Adnan""","""Bob""",19,10 +789,"""Adnan""","""Edgardo""",19,10 +790,"""Adnan""","""Bob""",19,10 +791,"""Adnan""","""Edgardo""",19,10 +792,"""Adnan""","""Bob""",19,10 +793,"""Adnan""","""Edgardo""",19,10 +794,"""Adnan""","""Bob""",19,10 +795,"""Adnan""","""Edgardo""",19,10 +796,"""Adnan""","""Bob""",19,10 +797,"""Adnan""","""Edgardo""",19,10 +798,"""Adnan""","""Bob""",19,10 +799,"""Adnan""","""Edgardo""",19,10 +800,"""Adnan""","""Bob""",19,10 +801,"""Adnan""","""Edgardo""",19,10 +802,"""Adnan""","""Bob""",19,10 +803,"""Adnan""","""Edgardo""",19,10 +804,"""Adnan""","""Bob""",19,10 +805,"""Adnan""","""Edgardo""",19,10 +806,"""Adnan""","""Bob""",19,10 +807,"""Adnan""","""Edgardo""",19,10 +808,"""Adnan""","""Bob""",19,10 +809,"""Adnan""","""Edgardo""",19,10 +810,"""Adnan""","""Bob""",19,10 +811,"""Adnan""","""Edgardo""",19,10 +812,"""Adnan""","""Bob""",19,10 +813,"""Adnan""","""Edgardo""",19,10 +814,"""Adnan""","""Bob""",19,10 +815,"""Adnan""","""Edgardo""",19,10 +816,"""Adnan""","""Bob""",19,10 +817,"""Adnan""","""Edgardo""",19,10 +818,"""Adnan""","""Bob""",19,10 +819,"""Adnan""","""Edgardo""",19,10 +820,"""Adnan""","""Bob""",19,10 +821,"""Adnan""","""Edgardo""",19,10 +822,"""Adnan""","""Bob""",19,10 +823,"""Adnan""","""Edgardo""",19,10 +824,"""Adnan""","""Bob""",19,10 +825,"""Adnan""","""Edgardo""",19,10 +826,"""Adnan""","""Bob""",19,10 +827,"""Adnan""","""Edgardo""",19,10 +828,"""Adnan""","""Bob""",19,10 +829,"""Adnan""","""Edgardo""",19,10 +830,"""Adnan""","""Bob""",19,10 +831,"""Adnan""","""Edgardo""",19,10 +832,"""Adnan""","""Bob""",19,10 +833,"""Adnan""","""Edgardo""",19,10 +834,"""Adnan""","""Bob""",19,10 +835,"""Adnan""","""Edgardo""",19,10 +836,"""Adnan""","""Bob""",19,10 +837,"""Adnan""","""Edgardo""",19,10 +838,"""Adnan""","""Bob""",19,10 +839,"""Adnan""","""Edgardo""",19,10 +840,"""Adnan""","""Bob""",19,10 +841,"""Adnan""","""Edgardo""",19,10 +842,"""Adnan""","""Bob""",19,10 +843,"""Adnan""","""Edgardo""",19,10 +844,"""Adnan""","""Bob""",19,10 +845,"""Adnan""","""Edgardo""",19,10 +846,"""Adnan""","""Bob""",19,10 +847,"""Adnan""","""Edgardo""",19,10 +848,"""Adnan""","""Bob""",19,10 +849,"""Adnan""","""Edgardo""",19,10 +850,"""Adnan""","""Bob""",19,10 +851,"""Adnan""","""Edgardo""",19,10 +852,"""Adnan""","""Bob""",19,10 +853,"""Adnan""","""Edgardo""",19,10 +854,"""Adnan""","""Bob""",19,10 +855,"""Adnan""","""Edgardo""",19,10 +856,"""Adnan""","""Bob""",19,10 +857,"""Adnan""","""Edgardo""",19,10 +858,"""Adnan""","""Bob""",19,10 +859,"""Adnan""","""Edgardo""",19,10 +860,"""Adnan""","""Bob""",19,10 +861,"""Adnan""","""Edgardo""",19,10 +862,"""Adnan""","""Bob""",19,10 +863,"""Adnan""","""Edgardo""",19,10 +864,"""Adnan""","""Bob""",19,10 +865,"""Adnan""","""Edgardo""",19,10 +866,"""Adnan""","""Bob""",19,10 +867,"""Adnan""","""Edgardo""",19,10 +868,"""Adnan""","""Bob""",19,10 +869,"""Adnan""","""Edgardo""",19,10 +870,"""Adnan""","""Bob""",19,10 +871,"""Adnan""","""Edgardo""",19,10 +872,"""Adnan""","""Bob""",19,10 +873,"""Adnan""","""Edgardo""",19,10 +874,"""Adnan""","""Bob""",19,10 +875,"""Adnan""","""Edgardo""",19,10 +876,"""Adnan""","""Bob""",19,10 +877,"""Adnan""","""Edgardo""",19,10 +878,"""Adnan""","""Bob""",19,10 +879,"""Adnan""","""Edgardo""",19,10 +880,"""Adnan""","""Bob""",19,10 +881,"""Adnan""","""Edgardo""",19,10 +882,"""Adnan""","""Bob""",19,10 +883,"""Adnan""","""Edgardo""",19,10 +884,"""Adnan""","""Bob""",19,10 +885,"""Adnan""","""Edgardo""",19,10 +886,"""Adnan""","""Bob""",19,10 +887,"""Adnan""","""Edgardo""",19,10 +888,"""Adnan""","""Bob""",19,10 +889,"""Adnan""","""Edgardo""",19,10 +890,"""Adnan""","""Bob""",19,10 +891,"""Adnan""","""Edgardo""",19,10 +892,"""Adnan""","""Bob""",19,10 +893,"""Adnan""","""Edgardo""",19,10 +894,"""Adnan""","""Bob""",19,10 +895,"""Adnan""","""Edgardo""",19,10 +896,"""Adnan""","""Bob""",19,10 +897,"""Adnan""","""Edgardo""",19,10 +898,"""Adnan""","""Bob""",19,10 +899,"""Adnan""","""Edgardo""",19,10 +900,"""Adnan""","""Bob""",19,10 +901,"""Adnan""","""Edgardo""",19,10 +902,"""Adnan""","""Bob""",19,10 +903,"""Adnan""","""Edgardo""",19,10 +904,"""Adnan""","""Bob""",19,10 +905,"""Adnan""","""Edgardo""",19,10 +906,"""Adnan""","""Bob""",19,10 +907,"""Adnan""","""Edgardo""",19,10 +908,"""Adnan""","""Bob""",19,10 +909,"""Adnan""","""Edgardo""",19,10 +910,"""Adnan""","""Bob""",19,10 +911,"""Adnan""","""Edgardo""",19,10 +912,"""Adnan""","""Bob""",19,10 +913,"""Adnan""","""Edgardo""",19,10 +914,"""Adnan""","""Bob""",19,10 +915,"""Adnan""","""Edgardo""",19,10 +916,"""Adnan""","""Bob""",19,10 +917,"""Adnan""","""Edgardo""",19,10 +918,"""Adnan""","""Bob""",19,10 +919,"""Adnan""","""Edgardo""",19,10 +920,"""Adnan""","""Bob""",19,10 +921,"""Adnan""","""Edgardo""",19,10 +922,"""Adnan""","""Bob""",19,10 +923,"""Adnan""","""Edgardo""",19,10 +924,"""Adnan""","""Bob""",19,10 +925,"""Adnan""","""Edgardo""",19,10 +926,"""Adnan""","""Bob""",19,10 +927,"""Adnan""","""Edgardo""",19,10 +928,"""Adnan""","""Bob""",19,10 +929,"""Adnan""","""Edgardo""",19,10 +930,"""Adnan""","""Bob""",19,10 +931,"""Adnan""","""Edgardo""",19,10 +932,"""Adnan""","""Bob""",19,10 +933,"""Adnan""","""Edgardo""",19,10 +934,"""Adnan""","""Bob""",19,10 +935,"""Adnan""","""Edgardo""",19,10 +936,"""Adnan""","""Bob""",19,10 +937,"""Adnan""","""Edgardo""",19,10 +938,"""Adnan""","""Bob""",19,10 +939,"""Adnan""","""Edgardo""",19,10 +940,"""Adnan""","""Bob""",19,10 +941,"""Adnan""","""Edgardo""",19,10 +942,"""Adnan""","""Bob""",19,10 +943,"""Adnan""","""Edgardo""",19,10 +944,"""Adnan""","""Bob""",19,10 +945,"""Adnan""","""Edgardo""",19,10 +946,"""Adnan""","""Bob""",19,10 +947,"""Adnan""","""Edgardo""",19,10 +948,"""Adnan""","""Bob""",19,10 +949,"""Adnan""","""Edgardo""",19,10 +950,"""Adnan""","""Bob""",19,10 +951,"""Adnan""","""Edgardo""",19,10 +952,"""Adnan""","""Bob""",19,10 +953,"""Adnan""","""Edgardo""",19,10 +954,"""Adnan""","""Bob""",19,10 +955,"""Adnan""","""Edgardo""",19,10 +956,"""Adnan""","""Bob""",19,10 +957,"""Adnan""","""Edgardo""",19,10 +958,"""Adnan""","""Bob""",19,10 +959,"""Adnan""","""Edgardo""",19,10 +960,"""Adnan""","""Bob""",19,10 +961,"""Adnan""","""Edgardo""",19,10 +962,"""Adnan""","""Bob""",19,10 +963,"""Adnan""","""Edgardo""",19,10 +964,"""Adnan""","""Bob""",19,10 +965,"""Adnan""","""Edgardo""",19,10 +966,"""Adnan""","""Bob""",19,10 +967,"""Adnan""","""Edgardo""",19,10 +968,"""Adnan""","""Bob""",19,10 +969,"""Adnan""","""Edgardo""",19,10 +970,"""Adnan""","""Bob""",19,10 +971,"""Adnan""","""Edgardo""",19,10 +972,"""Adnan""","""Bob""",19,10 +973,"""Adnan""","""Edgardo""",19,10 +974,"""Adnan""","""Bob""",19,10 +975,"""Adnan""","""Edgardo""",19,10 +976,"""Adnan""","""Bob""",19,10 +977,"""Adnan""","""Edgardo""",19,10 +978,"""Adnan""","""Bob""",19,10 +979,"""Adnan""","""Edgardo""",19,10 +980,"""Adnan""","""Bob""",19,10 +981,"""Adnan""","""Edgardo""",19,10 +982,"""Adnan""","""Bob""",19,10 +983,"""Adnan""","""Edgardo""",19,10 +984,"""Adnan""","""Bob""",19,10 +985,"""Adnan""","""Edgardo""",19,10 +986,"""Adnan""","""Bob""",19,10 +987,"""Adnan""","""Edgardo""",19,10 +988,"""Adnan""","""Bob""",19,10 +989,"""Adnan""","""Edgardo""",19,10 +990,"""Adnan""","""Bob""",19,10 +991,"""Adnan""","""Edgardo""",19,10 +992,"""Adnan""","""Bob""",19,10 +993,"""Adnan""","""Edgardo""",19,10 +994,"""Adnan""","""Bob""",19,10 +995,"""Adnan""","""Edgardo""",19,10 +996,"""Adnan""","""Bob""",19,10 +997,"""Adnan""","""Edgardo""",19,10 +998,"""Adnan""","""Bob""",19,10 +999,"""Adnan""","""Edgardo""",19,10 +1000,"""Adnan""","""Bob""",19,10 +1001,"""Adnan""","""Edgardo""",19,10 +1002,"""Adnan""","""Bob""",19,10 +1003,"""Adnan""","""Edgardo""",19,10 +1004,"""Adnan""","""Bob""",19,10 +1005,"""Adnan""","""Edgardo""",19,10 +1006,"""Adnan""","""Bob""",19,10 +1007,"""Adnan""","""Edgardo""",19,10 +1008,"""Adnan""","""Bob""",19,10 +1009,"""Adnan""","""Edgardo""",19,10 +1010,"""Adnan""","""Bob""",19,10 \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.json b/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.json new file mode 100644 index 0000000..7c7c7c5 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/driversBig.json @@ -0,0 +1,35 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "DriverId" + }, + { + "no": 1, + "type": "STRING", + "length": 20, + "name": "FirstName" + }, + { + "no": 2, + "type": "STRING", + "length": 20, + "name": "LastName" + }, + { + "no": 3, + "type": "FLOAT", + "length": 4, + "name": "Age" + }, + { + "no": 4, + "type": "INTEGER", + "length": 4, + "name": "NumSeats" + } + ], + "key": 3 +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/groups.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/groups.csv new file mode 100644 index 0000000..ce95fe1 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/groups.csv @@ -0,0 +1,7 @@ +1, "Purdue1" +2, "Purdue2" +3, "Purdue3" +4, "Purdue4" +5, "Purdue5" +6, "Purdue6" +7, "Purdue7" diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/groups.json b/Projects/p3-skeleton/cs448p3/src/test/resources/groups.json new file mode 100644 index 0000000..f0858c0 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/groups.json @@ -0,0 +1,17 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "GroupId" + }, + { + "no": 1, + "type": "STRING", + "length": 10, + "name": "GroupName" + } + ], + "key": 0 +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.csv new file mode 100644 index 0000000..bc08997 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.csv @@ -0,0 +1,10 @@ +1," ""Purdue1""" +2," ""Purdue2""" +3," ""Purdue3""" +4," ""Purdue4""" +5," ""Purdue5""" +6," ""Purdue6""" +7," ""Purdue7""" +8," ""Purdue8""" +9," ""Purdue9""" +10," ""Purdue10""" \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.json b/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.json new file mode 100644 index 0000000..f0858c0 --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/groupsBig.json @@ -0,0 +1,17 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "GroupId" + }, + { + "no": 1, + "type": "STRING", + "length": 10, + "name": "GroupName" + } + ], + "key": 0 +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/rides.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/rides.csv new file mode 100644 index 0000000..b6acb3c --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/rides.csv @@ -0,0 +1,12 @@ +3, 5, "2/10/2006", "2/13/2006" +1, 2, "2/12/2006", "2/14/2006" +9, 1, "2/15/2006", "2/15/2006" +5, 7, "2/14/2006", "2/18/2006" +1, 3, "2/15/2006", "2/16/2006" +2, 6, "2/17/2006", "2/20/2006" +3, 4, "2/18/2006", "2/19/2006" +4, 1, "2/19/2006", "2/19/2006" +2, 7, "2/18/2006", "2/23/2006" +8, 5, "2/20/2006", "2/22/2006" +3, 2, "2/24/2006", "2/26/2006" +6, 6, "2/25/2006", "2/26/2006" \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/rides.json b/Projects/p3-skeleton/cs448p3/src/test/resources/rides.json new file mode 100644 index 0000000..041754b --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/rides.json @@ -0,0 +1,29 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "DriverId" + }, + { + "no": 1, + "type": "INTEGER", + "length": 4, + "name": "GroupId" + }, + { + "no": 2, + "type": "STRING", + "length": 10, + "name": "FromDate" + }, + { + "no": 3, + "type": "STRING", + "length": 10, + "name": "ToDate" + } + ], + "key": 1 +} diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.csv b/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.csv new file mode 100644 index 0000000..338c7fd --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.csv @@ -0,0 +1,1000 @@ +1,1," ""2/10/2006"""," ""2/13/2006""" +2,2," ""2/12/2006"""," ""2/14/2006""" +3,3," ""2/15/2006"""," ""2/15/2006""" +4,4," ""2/14/2006"""," ""2/18/2006""" +5,5," ""2/15/2006"""," ""2/16/2006""" +6,6," ""2/17/2006"""," ""2/20/2006""" +7,7," ""2/18/2006"""," ""2/19/2006""" +8,8," ""2/19/2006"""," ""2/19/2006""" +9,9," ""2/18/2006"""," ""2/23/2006""" +10,10," ""2/20/2006"""," ""2/22/2006""" +11,1," ""2/24/2006"""," ""2/26/2006""" +12,2," ""2/25/2006"""," ""2/26/2006""" +13,3," ""2/10/2006"""," ""2/13/2006""" +14,4," ""2/12/2006"""," ""2/14/2006""" +15,5," ""2/15/2006"""," ""2/15/2006""" +16,6," ""2/14/2006"""," ""2/18/2006""" +17,7," ""2/15/2006"""," ""2/16/2006""" +18,8," ""2/17/2006"""," ""2/20/2006""" +19,9," ""2/18/2006"""," ""2/19/2006""" +20,10," ""2/19/2006"""," ""2/19/2006""" +21,1," ""2/18/2006"""," ""2/23/2006""" +22,2," ""2/20/2006"""," ""2/22/2006""" +23,3," ""2/24/2006"""," ""2/26/2006""" +24,4," ""2/25/2006"""," ""2/26/2006""" +25,5," ""2/10/2006"""," ""2/13/2006""" +26,6," ""2/12/2006"""," ""2/14/2006""" +27,7," ""2/15/2006"""," ""2/15/2006""" +28,8," ""2/14/2006"""," ""2/18/2006""" +29,9," ""2/15/2006"""," ""2/16/2006""" +30,10," ""2/17/2006"""," ""2/20/2006""" +31,1," ""2/18/2006"""," ""2/19/2006""" +32,2," ""2/19/2006"""," ""2/19/2006""" +33,3," ""2/18/2006"""," ""2/23/2006""" +34,4," ""2/20/2006"""," ""2/22/2006""" +35,5," ""2/24/2006"""," ""2/26/2006""" +36,6," ""2/25/2006"""," ""2/26/2006""" +37,7," ""2/10/2006"""," ""2/13/2006""" +38,8," ""2/12/2006"""," ""2/14/2006""" +39,9," ""2/15/2006"""," ""2/15/2006""" +40,10," ""2/14/2006"""," ""2/18/2006""" +41,1," ""2/15/2006"""," ""2/16/2006""" +42,2," ""2/17/2006"""," ""2/20/2006""" +43,3," ""2/18/2006"""," ""2/19/2006""" +44,4," ""2/19/2006"""," ""2/19/2006""" +45,5," ""2/18/2006"""," ""2/23/2006""" +46,6," ""2/20/2006"""," ""2/22/2006""" +47,7," ""2/24/2006"""," ""2/26/2006""" +48,8," ""2/25/2006"""," ""2/26/2006""" +49,9," ""2/10/2006"""," ""2/13/2006""" +50,10," ""2/12/2006"""," ""2/14/2006""" +51,1," ""2/15/2006"""," ""2/15/2006""" +52,2," ""2/14/2006"""," ""2/18/2006""" +53,3," ""2/15/2006"""," ""2/16/2006""" +54,4," ""2/17/2006"""," ""2/20/2006""" +55,5," ""2/18/2006"""," ""2/19/2006""" +56,6," ""2/19/2006"""," ""2/19/2006""" +57,7," ""2/18/2006"""," ""2/23/2006""" +58,8," ""2/20/2006"""," ""2/22/2006""" +59,9," ""2/24/2006"""," ""2/26/2006""" +60,10," ""2/25/2006"""," ""2/26/2006""" +61,1," ""2/10/2006"""," ""2/13/2006""" +62,2," ""2/12/2006"""," ""2/14/2006""" +63,3," ""2/15/2006"""," ""2/15/2006""" +64,4," ""2/14/2006"""," ""2/18/2006""" +65,5," ""2/15/2006"""," ""2/16/2006""" +66,6," ""2/17/2006"""," ""2/20/2006""" +67,7," ""2/18/2006"""," ""2/19/2006""" +68,8," ""2/19/2006"""," ""2/19/2006""" +69,9," ""2/18/2006"""," ""2/23/2006""" +70,10," ""2/20/2006"""," ""2/22/2006""" +71,1," ""2/24/2006"""," ""2/26/2006""" +72,2," ""2/25/2006"""," ""2/26/2006""" +73,3," ""2/10/2006"""," ""2/13/2006""" +74,4," ""2/12/2006"""," ""2/14/2006""" +75,5," ""2/15/2006"""," ""2/15/2006""" +76,6," ""2/14/2006"""," ""2/18/2006""" +77,7," ""2/15/2006"""," ""2/16/2006""" +78,8," ""2/17/2006"""," ""2/20/2006""" +79,9," ""2/18/2006"""," ""2/19/2006""" +80,10," ""2/19/2006"""," ""2/19/2006""" +81,1," ""2/18/2006"""," ""2/23/2006""" +82,2," ""2/20/2006"""," ""2/22/2006""" +83,3," ""2/24/2006"""," ""2/26/2006""" +84,4," ""2/25/2006"""," ""2/26/2006""" +85,5," ""2/10/2006"""," ""2/13/2006""" +86,6," ""2/12/2006"""," ""2/14/2006""" +87,7," ""2/15/2006"""," ""2/15/2006""" +88,8," ""2/14/2006"""," ""2/18/2006""" +89,9," ""2/15/2006"""," ""2/16/2006""" +90,10," ""2/17/2006"""," ""2/20/2006""" +91,1," ""2/18/2006"""," ""2/19/2006""" +92,2," ""2/19/2006"""," ""2/19/2006""" +93,3," ""2/18/2006"""," ""2/23/2006""" +94,4," ""2/20/2006"""," ""2/22/2006""" +95,5," ""2/24/2006"""," ""2/26/2006""" +96,6," ""2/25/2006"""," ""2/26/2006""" +97,7," ""2/10/2006"""," ""2/13/2006""" +98,8," ""2/12/2006"""," ""2/14/2006""" +99,9," ""2/15/2006"""," ""2/15/2006""" +100,10," ""2/14/2006"""," ""2/18/2006""" +101,1," ""2/15/2006"""," ""2/16/2006""" +102,2," ""2/17/2006"""," ""2/20/2006""" +103,3," ""2/18/2006"""," ""2/19/2006""" +104,4," ""2/19/2006"""," ""2/19/2006""" +105,5," ""2/18/2006"""," ""2/23/2006""" +106,6," ""2/20/2006"""," ""2/22/2006""" +107,7," ""2/24/2006"""," ""2/26/2006""" +108,8," ""2/25/2006"""," ""2/26/2006""" +109,9," ""2/10/2006"""," ""2/13/2006""" +110,10," ""2/12/2006"""," ""2/14/2006""" +111,1," ""2/15/2006"""," ""2/15/2006""" +112,2," ""2/14/2006"""," ""2/18/2006""" +113,3," ""2/15/2006"""," ""2/16/2006""" +114,4," ""2/17/2006"""," ""2/20/2006""" +115,5," ""2/18/2006"""," ""2/19/2006""" +116,6," ""2/19/2006"""," ""2/19/2006""" +117,7," ""2/18/2006"""," ""2/23/2006""" +118,8," ""2/20/2006"""," ""2/22/2006""" +119,9," ""2/24/2006"""," ""2/26/2006""" +120,10," ""2/25/2006"""," ""2/26/2006""" +121,1," ""2/10/2006"""," ""2/13/2006""" +122,2," ""2/12/2006"""," ""2/14/2006""" +123,3," ""2/15/2006"""," ""2/15/2006""" +124,4," ""2/14/2006"""," ""2/18/2006""" +125,5," ""2/15/2006"""," ""2/16/2006""" +126,6," ""2/17/2006"""," ""2/20/2006""" +127,7," ""2/18/2006"""," ""2/19/2006""" +128,8," ""2/19/2006"""," ""2/19/2006""" +129,9," ""2/18/2006"""," ""2/23/2006""" +130,10," ""2/20/2006"""," ""2/22/2006""" +131,1," ""2/24/2006"""," ""2/26/2006""" +132,2," ""2/25/2006"""," ""2/26/2006""" +133,3," ""2/10/2006"""," ""2/13/2006""" +134,4," ""2/12/2006"""," ""2/14/2006""" +135,5," ""2/15/2006"""," ""2/15/2006""" +136,6," ""2/14/2006"""," ""2/18/2006""" +137,7," ""2/15/2006"""," ""2/16/2006""" +138,8," ""2/17/2006"""," ""2/20/2006""" +139,9," ""2/18/2006"""," ""2/19/2006""" +140,10," ""2/19/2006"""," ""2/19/2006""" +141,1," ""2/18/2006"""," ""2/23/2006""" +142,2," ""2/20/2006"""," ""2/22/2006""" +143,3," ""2/24/2006"""," ""2/26/2006""" +144,4," ""2/25/2006"""," ""2/26/2006""" +145,5," ""2/10/2006"""," ""2/13/2006""" +146,6," ""2/12/2006"""," ""2/14/2006""" +147,7," ""2/15/2006"""," ""2/15/2006""" +148,8," ""2/14/2006"""," ""2/18/2006""" +149,9," ""2/15/2006"""," ""2/16/2006""" +150,10," ""2/17/2006"""," ""2/20/2006""" +151,1," ""2/18/2006"""," ""2/19/2006""" +152,2," ""2/19/2006"""," ""2/19/2006""" +153,3," ""2/18/2006"""," ""2/23/2006""" +154,4," ""2/20/2006"""," ""2/22/2006""" +155,5," ""2/24/2006"""," ""2/26/2006""" +156,6," ""2/25/2006"""," ""2/26/2006""" +157,7," ""2/10/2006"""," ""2/13/2006""" +158,8," ""2/12/2006"""," ""2/14/2006""" +159,9," ""2/15/2006"""," ""2/15/2006""" +160,10," ""2/14/2006"""," ""2/18/2006""" +161,1," ""2/15/2006"""," ""2/16/2006""" +162,2," ""2/17/2006"""," ""2/20/2006""" +163,3," ""2/18/2006"""," ""2/19/2006""" +164,4," ""2/19/2006"""," ""2/19/2006""" +165,5," ""2/18/2006"""," ""2/23/2006""" +166,6," ""2/20/2006"""," ""2/22/2006""" +167,7," ""2/24/2006"""," ""2/26/2006""" +168,8," ""2/25/2006"""," ""2/26/2006""" +169,9," ""2/10/2006"""," ""2/13/2006""" +170,10," ""2/12/2006"""," ""2/14/2006""" +171,1," ""2/15/2006"""," ""2/15/2006""" +172,2," ""2/14/2006"""," ""2/18/2006""" +173,3," ""2/15/2006"""," ""2/16/2006""" +174,4," ""2/17/2006"""," ""2/20/2006""" +175,5," ""2/18/2006"""," ""2/19/2006""" +176,6," ""2/19/2006"""," ""2/19/2006""" +177,7," ""2/18/2006"""," ""2/23/2006""" +178,8," ""2/20/2006"""," ""2/22/2006""" +179,9," ""2/24/2006"""," ""2/26/2006""" +180,10," ""2/25/2006"""," ""2/26/2006""" +181,1," ""2/10/2006"""," ""2/13/2006""" +182,2," ""2/12/2006"""," ""2/14/2006""" +183,3," ""2/15/2006"""," ""2/15/2006""" +184,4," ""2/14/2006"""," ""2/18/2006""" +185,5," ""2/15/2006"""," ""2/16/2006""" +186,6," ""2/17/2006"""," ""2/20/2006""" +187,7," ""2/18/2006"""," ""2/19/2006""" +188,8," ""2/19/2006"""," ""2/19/2006""" +189,9," ""2/18/2006"""," ""2/23/2006""" +190,10," ""2/20/2006"""," ""2/22/2006""" +191,1," ""2/24/2006"""," ""2/26/2006""" +192,2," ""2/25/2006"""," ""2/26/2006""" +193,3," ""2/10/2006"""," ""2/13/2006""" +194,4," ""2/12/2006"""," ""2/14/2006""" +195,5," ""2/15/2006"""," ""2/15/2006""" +196,6," ""2/14/2006"""," ""2/18/2006""" +197,7," ""2/15/2006"""," ""2/16/2006""" +198,8," ""2/17/2006"""," ""2/20/2006""" +199,9," ""2/18/2006"""," ""2/19/2006""" +200,10," ""2/19/2006"""," ""2/19/2006""" +201,1," ""2/18/2006"""," ""2/23/2006""" +202,2," ""2/20/2006"""," ""2/22/2006""" +203,3," ""2/24/2006"""," ""2/26/2006""" +204,4," ""2/25/2006"""," ""2/26/2006""" +205,5," ""2/10/2006"""," ""2/13/2006""" +206,6," ""2/12/2006"""," ""2/14/2006""" +207,7," ""2/15/2006"""," ""2/15/2006""" +208,8," ""2/14/2006"""," ""2/18/2006""" +209,9," ""2/15/2006"""," ""2/16/2006""" +210,10," ""2/17/2006"""," ""2/20/2006""" +211,1," ""2/18/2006"""," ""2/19/2006""" +212,2," ""2/19/2006"""," ""2/19/2006""" +213,3," ""2/18/2006"""," ""2/23/2006""" +214,4," ""2/20/2006"""," ""2/22/2006""" +215,5," ""2/24/2006"""," ""2/26/2006""" +216,6," ""2/25/2006"""," ""2/26/2006""" +217,7," ""2/10/2006"""," ""2/13/2006""" +218,8," ""2/12/2006"""," ""2/14/2006""" +219,9," ""2/15/2006"""," ""2/15/2006""" +220,10," ""2/14/2006"""," ""2/18/2006""" +221,1," ""2/15/2006"""," ""2/16/2006""" +222,2," ""2/17/2006"""," ""2/20/2006""" +223,3," ""2/18/2006"""," ""2/19/2006""" +224,4," ""2/19/2006"""," ""2/19/2006""" +225,5," ""2/18/2006"""," ""2/23/2006""" +226,6," ""2/20/2006"""," ""2/22/2006""" +227,7," ""2/24/2006"""," ""2/26/2006""" +228,8," ""2/25/2006"""," ""2/26/2006""" +229,9," ""2/10/2006"""," ""2/13/2006""" +230,10," ""2/12/2006"""," ""2/14/2006""" +231,1," ""2/15/2006"""," ""2/15/2006""" +232,2," ""2/14/2006"""," ""2/18/2006""" +233,3," ""2/15/2006"""," ""2/16/2006""" +234,4," ""2/17/2006"""," ""2/20/2006""" +235,5," ""2/18/2006"""," ""2/19/2006""" +236,6," ""2/19/2006"""," ""2/19/2006""" +237,7," ""2/18/2006"""," ""2/23/2006""" +238,8," ""2/20/2006"""," ""2/22/2006""" +239,9," ""2/24/2006"""," ""2/26/2006""" +240,10," ""2/25/2006"""," ""2/26/2006""" +241,1," ""2/10/2006"""," ""2/13/2006""" +242,2," ""2/12/2006"""," ""2/14/2006""" +243,3," ""2/15/2006"""," ""2/15/2006""" +244,4," ""2/14/2006"""," ""2/18/2006""" +245,5," ""2/15/2006"""," ""2/16/2006""" +246,6," ""2/17/2006"""," ""2/20/2006""" +247,7," ""2/18/2006"""," ""2/19/2006""" +248,8," ""2/19/2006"""," ""2/19/2006""" +249,9," ""2/18/2006"""," ""2/23/2006""" +250,10," ""2/20/2006"""," ""2/22/2006""" +251,1," ""2/24/2006"""," ""2/26/2006""" +252,2," ""2/25/2006"""," ""2/26/2006""" +253,3," ""2/10/2006"""," ""2/13/2006""" +254,4," ""2/12/2006"""," ""2/14/2006""" +255,5," ""2/15/2006"""," ""2/15/2006""" +256,6," ""2/14/2006"""," ""2/18/2006""" +257,7," ""2/15/2006"""," ""2/16/2006""" +258,8," ""2/17/2006"""," ""2/20/2006""" +259,9," ""2/18/2006"""," ""2/19/2006""" +260,10," ""2/19/2006"""," ""2/19/2006""" +261,1," ""2/18/2006"""," ""2/23/2006""" +262,2," ""2/20/2006"""," ""2/22/2006""" +263,3," ""2/24/2006"""," ""2/26/2006""" +264,4," ""2/25/2006"""," ""2/26/2006""" +265,5," ""2/10/2006"""," ""2/13/2006""" +266,6," ""2/12/2006"""," ""2/14/2006""" +267,7," ""2/15/2006"""," ""2/15/2006""" +268,8," ""2/14/2006"""," ""2/18/2006""" +269,9," ""2/15/2006"""," ""2/16/2006""" +270,10," ""2/17/2006"""," ""2/20/2006""" +271,1," ""2/18/2006"""," ""2/19/2006""" +272,2," ""2/19/2006"""," ""2/19/2006""" +273,3," ""2/18/2006"""," ""2/23/2006""" +274,4," ""2/20/2006"""," ""2/22/2006""" +275,5," ""2/24/2006"""," ""2/26/2006""" +276,6," ""2/25/2006"""," ""2/26/2006""" +277,7," ""2/10/2006"""," ""2/13/2006""" +278,8," ""2/12/2006"""," ""2/14/2006""" +279,9," ""2/15/2006"""," ""2/15/2006""" +280,10," ""2/14/2006"""," ""2/18/2006""" +281,1," ""2/15/2006"""," ""2/16/2006""" +282,2," ""2/17/2006"""," ""2/20/2006""" +283,3," ""2/18/2006"""," ""2/19/2006""" +284,4," ""2/19/2006"""," ""2/19/2006""" +285,5," ""2/18/2006"""," ""2/23/2006""" +286,6," ""2/20/2006"""," ""2/22/2006""" +287,7," ""2/24/2006"""," ""2/26/2006""" +288,8," ""2/25/2006"""," ""2/26/2006""" +289,9," ""2/10/2006"""," ""2/13/2006""" +290,10," ""2/12/2006"""," ""2/14/2006""" +291,1," ""2/15/2006"""," ""2/15/2006""" +292,2," ""2/14/2006"""," ""2/18/2006""" +293,3," ""2/15/2006"""," ""2/16/2006""" +294,4," ""2/17/2006"""," ""2/20/2006""" +295,5," ""2/18/2006"""," ""2/19/2006""" +296,6," ""2/19/2006"""," ""2/19/2006""" +297,7," ""2/18/2006"""," ""2/23/2006""" +298,8," ""2/20/2006"""," ""2/22/2006""" +299,9," ""2/24/2006"""," ""2/26/2006""" +300,10," ""2/25/2006"""," ""2/26/2006""" +301,1," ""2/10/2006"""," ""2/13/2006""" +302,2," ""2/12/2006"""," ""2/14/2006""" +303,3," ""2/15/2006"""," ""2/15/2006""" +304,4," ""2/14/2006"""," ""2/18/2006""" +305,5," ""2/15/2006"""," ""2/16/2006""" +306,6," ""2/17/2006"""," ""2/20/2006""" +307,7," ""2/18/2006"""," ""2/19/2006""" +308,8," ""2/19/2006"""," ""2/19/2006""" +309,9," ""2/18/2006"""," ""2/23/2006""" +310,10," ""2/20/2006"""," ""2/22/2006""" +311,1," ""2/24/2006"""," ""2/26/2006""" +312,2," ""2/25/2006"""," ""2/26/2006""" +313,3," ""2/10/2006"""," ""2/13/2006""" +314,4," ""2/12/2006"""," ""2/14/2006""" +315,5," ""2/15/2006"""," ""2/15/2006""" +316,6," ""2/14/2006"""," ""2/18/2006""" +317,7," ""2/15/2006"""," ""2/16/2006""" +318,8," ""2/17/2006"""," ""2/20/2006""" +319,9," ""2/18/2006"""," ""2/19/2006""" +320,10," ""2/19/2006"""," ""2/19/2006""" +321,1," ""2/18/2006"""," ""2/23/2006""" +322,2," ""2/20/2006"""," ""2/22/2006""" +323,3," ""2/24/2006"""," ""2/26/2006""" +324,4," ""2/25/2006"""," ""2/26/2006""" +325,5," ""2/10/2006"""," ""2/13/2006""" +326,6," ""2/12/2006"""," ""2/14/2006""" +327,7," ""2/15/2006"""," ""2/15/2006""" +328,8," ""2/14/2006"""," ""2/18/2006""" +329,9," ""2/15/2006"""," ""2/16/2006""" +330,10," ""2/17/2006"""," ""2/20/2006""" +331,1," ""2/18/2006"""," ""2/19/2006""" +332,2," ""2/19/2006"""," ""2/19/2006""" +333,3," ""2/18/2006"""," ""2/23/2006""" +334,4," ""2/20/2006"""," ""2/22/2006""" +335,5," ""2/24/2006"""," ""2/26/2006""" +336,6," ""2/25/2006"""," ""2/26/2006""" +337,7," ""2/10/2006"""," ""2/13/2006""" +338,8," ""2/12/2006"""," ""2/14/2006""" +339,9," ""2/15/2006"""," ""2/15/2006""" +340,10," ""2/14/2006"""," ""2/18/2006""" +341,1," ""2/15/2006"""," ""2/16/2006""" +342,2," ""2/17/2006"""," ""2/20/2006""" +343,3," ""2/18/2006"""," ""2/19/2006""" +344,4," ""2/19/2006"""," ""2/19/2006""" +345,5," ""2/18/2006"""," ""2/23/2006""" +346,6," ""2/20/2006"""," ""2/22/2006""" +347,7," ""2/24/2006"""," ""2/26/2006""" +348,8," ""2/25/2006"""," ""2/26/2006""" +349,9," ""2/10/2006"""," ""2/13/2006""" +350,10," ""2/12/2006"""," ""2/14/2006""" +351,1," ""2/15/2006"""," ""2/15/2006""" +352,2," ""2/14/2006"""," ""2/18/2006""" +353,3," ""2/15/2006"""," ""2/16/2006""" +354,4," ""2/17/2006"""," ""2/20/2006""" +355,5," ""2/18/2006"""," ""2/19/2006""" +356,6," ""2/19/2006"""," ""2/19/2006""" +357,7," ""2/18/2006"""," ""2/23/2006""" +358,8," ""2/20/2006"""," ""2/22/2006""" +359,9," ""2/24/2006"""," ""2/26/2006""" +360,10," ""2/25/2006"""," ""2/26/2006""" +361,1," ""2/10/2006"""," ""2/13/2006""" +362,2," ""2/12/2006"""," ""2/14/2006""" +363,3," ""2/15/2006"""," ""2/15/2006""" +364,4," ""2/14/2006"""," ""2/18/2006""" +365,5," ""2/15/2006"""," ""2/16/2006""" +366,6," ""2/17/2006"""," ""2/20/2006""" +367,7," ""2/18/2006"""," ""2/19/2006""" +368,8," ""2/19/2006"""," ""2/19/2006""" +369,9," ""2/18/2006"""," ""2/23/2006""" +370,10," ""2/20/2006"""," ""2/22/2006""" +371,1," ""2/24/2006"""," ""2/26/2006""" +372,2," ""2/25/2006"""," ""2/26/2006""" +373,3," ""2/10/2006"""," ""2/13/2006""" +374,4," ""2/12/2006"""," ""2/14/2006""" +375,5," ""2/15/2006"""," ""2/15/2006""" +376,6," ""2/14/2006"""," ""2/18/2006""" +377,7," ""2/15/2006"""," ""2/16/2006""" +378,8," ""2/17/2006"""," ""2/20/2006""" +379,9," ""2/18/2006"""," ""2/19/2006""" +380,10," ""2/19/2006"""," ""2/19/2006""" +381,1," ""2/18/2006"""," ""2/23/2006""" +382,2," ""2/20/2006"""," ""2/22/2006""" +383,3," ""2/24/2006"""," ""2/26/2006""" +384,4," ""2/25/2006"""," ""2/26/2006""" +385,5," ""2/10/2006"""," ""2/13/2006""" +386,6," ""2/12/2006"""," ""2/14/2006""" +387,7," ""2/15/2006"""," ""2/15/2006""" +388,8," ""2/14/2006"""," ""2/18/2006""" +389,9," ""2/15/2006"""," ""2/16/2006""" +390,10," ""2/17/2006"""," ""2/20/2006""" +391,1," ""2/18/2006"""," ""2/19/2006""" +392,2," ""2/19/2006"""," ""2/19/2006""" +393,3," ""2/18/2006"""," ""2/23/2006""" +394,4," ""2/20/2006"""," ""2/22/2006""" +395,5," ""2/24/2006"""," ""2/26/2006""" +396,6," ""2/25/2006"""," ""2/26/2006""" +397,7," ""2/10/2006"""," ""2/13/2006""" +398,8," ""2/12/2006"""," ""2/14/2006""" +399,9," ""2/15/2006"""," ""2/15/2006""" +400,10," ""2/14/2006"""," ""2/18/2006""" +401,1," ""2/15/2006"""," ""2/16/2006""" +402,2," ""2/17/2006"""," ""2/20/2006""" +403,3," ""2/18/2006"""," ""2/19/2006""" +404,4," ""2/19/2006"""," ""2/19/2006""" +405,5," ""2/18/2006"""," ""2/23/2006""" +406,6," ""2/20/2006"""," ""2/22/2006""" +407,7," ""2/24/2006"""," ""2/26/2006""" +408,8," ""2/25/2006"""," ""2/26/2006""" +409,9," ""2/10/2006"""," ""2/13/2006""" +410,10," ""2/12/2006"""," ""2/14/2006""" +411,1," ""2/15/2006"""," ""2/15/2006""" +412,2," ""2/14/2006"""," ""2/18/2006""" +413,3," ""2/15/2006"""," ""2/16/2006""" +414,4," ""2/17/2006"""," ""2/20/2006""" +415,5," ""2/18/2006"""," ""2/19/2006""" +416,6," ""2/19/2006"""," ""2/19/2006""" +417,7," ""2/18/2006"""," ""2/23/2006""" +418,8," ""2/20/2006"""," ""2/22/2006""" +419,9," ""2/24/2006"""," ""2/26/2006""" +420,10," ""2/25/2006"""," ""2/26/2006""" +421,1," ""2/10/2006"""," ""2/13/2006""" +422,2," ""2/12/2006"""," ""2/14/2006""" +423,3," ""2/15/2006"""," ""2/15/2006""" +424,4," ""2/14/2006"""," ""2/18/2006""" +425,5," ""2/15/2006"""," ""2/16/2006""" +426,6," ""2/17/2006"""," ""2/20/2006""" +427,7," ""2/18/2006"""," ""2/19/2006""" +428,8," ""2/19/2006"""," ""2/19/2006""" +429,9," ""2/18/2006"""," ""2/23/2006""" +430,10," ""2/20/2006"""," ""2/22/2006""" +431,1," ""2/24/2006"""," ""2/26/2006""" +432,2," ""2/25/2006"""," ""2/26/2006""" +433,3," ""2/10/2006"""," ""2/13/2006""" +434,4," ""2/12/2006"""," ""2/14/2006""" +435,5," ""2/15/2006"""," ""2/15/2006""" +436,6," ""2/14/2006"""," ""2/18/2006""" +437,7," ""2/15/2006"""," ""2/16/2006""" +438,8," ""2/17/2006"""," ""2/20/2006""" +439,9," ""2/18/2006"""," ""2/19/2006""" +440,10," ""2/19/2006"""," ""2/19/2006""" +441,1," ""2/18/2006"""," ""2/23/2006""" +442,2," ""2/20/2006"""," ""2/22/2006""" +443,3," ""2/24/2006"""," ""2/26/2006""" +444,4," ""2/25/2006"""," ""2/26/2006""" +445,5," ""2/10/2006"""," ""2/13/2006""" +446,6," ""2/12/2006"""," ""2/14/2006""" +447,7," ""2/15/2006"""," ""2/15/2006""" +448,8," ""2/14/2006"""," ""2/18/2006""" +449,9," ""2/15/2006"""," ""2/16/2006""" +450,10," ""2/17/2006"""," ""2/20/2006""" +451,1," ""2/18/2006"""," ""2/19/2006""" +452,2," ""2/19/2006"""," ""2/19/2006""" +453,3," ""2/18/2006"""," ""2/23/2006""" +454,4," ""2/20/2006"""," ""2/22/2006""" +455,5," ""2/24/2006"""," ""2/26/2006""" +456,6," ""2/25/2006"""," ""2/26/2006""" +457,7," ""2/10/2006"""," ""2/13/2006""" +458,8," ""2/12/2006"""," ""2/14/2006""" +459,9," ""2/15/2006"""," ""2/15/2006""" +460,10," ""2/14/2006"""," ""2/18/2006""" +461,1," ""2/15/2006"""," ""2/16/2006""" +462,2," ""2/17/2006"""," ""2/20/2006""" +463,3," ""2/18/2006"""," ""2/19/2006""" +464,4," ""2/19/2006"""," ""2/19/2006""" +465,5," ""2/18/2006"""," ""2/23/2006""" +466,6," ""2/20/2006"""," ""2/22/2006""" +467,7," ""2/24/2006"""," ""2/26/2006""" +468,8," ""2/25/2006"""," ""2/26/2006""" +469,9," ""2/10/2006"""," ""2/13/2006""" +470,10," ""2/12/2006"""," ""2/14/2006""" +471,1," ""2/15/2006"""," ""2/15/2006""" +472,2," ""2/14/2006"""," ""2/18/2006""" +473,3," ""2/15/2006"""," ""2/16/2006""" +474,4," ""2/17/2006"""," ""2/20/2006""" +475,5," ""2/18/2006"""," ""2/19/2006""" +476,6," ""2/19/2006"""," ""2/19/2006""" +477,7," ""2/18/2006"""," ""2/23/2006""" +478,8," ""2/20/2006"""," ""2/22/2006""" +479,9," ""2/24/2006"""," ""2/26/2006""" +480,10," ""2/25/2006"""," ""2/26/2006""" +481,1," ""2/10/2006"""," ""2/13/2006""" +482,2," ""2/12/2006"""," ""2/14/2006""" +483,3," ""2/15/2006"""," ""2/15/2006""" +484,4," ""2/14/2006"""," ""2/18/2006""" +485,5," ""2/15/2006"""," ""2/16/2006""" +486,6," ""2/17/2006"""," ""2/20/2006""" +487,7," ""2/18/2006"""," ""2/19/2006""" +488,8," ""2/19/2006"""," ""2/19/2006""" +489,9," ""2/18/2006"""," ""2/23/2006""" +490,10," ""2/20/2006"""," ""2/22/2006""" +491,1," ""2/24/2006"""," ""2/26/2006""" +492,2," ""2/25/2006"""," ""2/26/2006""" +493,3," ""2/10/2006"""," ""2/13/2006""" +494,4," ""2/12/2006"""," ""2/14/2006""" +495,5," ""2/15/2006"""," ""2/15/2006""" +496,6," ""2/14/2006"""," ""2/18/2006""" +497,7," ""2/15/2006"""," ""2/16/2006""" +498,8," ""2/17/2006"""," ""2/20/2006""" +499,9," ""2/18/2006"""," ""2/19/2006""" +500,10," ""2/19/2006"""," ""2/19/2006""" +501,1," ""2/18/2006"""," ""2/23/2006""" +502,2," ""2/20/2006"""," ""2/22/2006""" +503,3," ""2/24/2006"""," ""2/26/2006""" +504,4," ""2/25/2006"""," ""2/26/2006""" +505,5," ""2/10/2006"""," ""2/13/2006""" +506,6," ""2/12/2006"""," ""2/14/2006""" +507,7," ""2/15/2006"""," ""2/15/2006""" +508,8," ""2/14/2006"""," ""2/18/2006""" +509,9," ""2/15/2006"""," ""2/16/2006""" +510,10," ""2/17/2006"""," ""2/20/2006""" +511,1," ""2/18/2006"""," ""2/19/2006""" +512,2," ""2/19/2006"""," ""2/19/2006""" +513,3," ""2/18/2006"""," ""2/23/2006""" +514,4," ""2/20/2006"""," ""2/22/2006""" +515,5," ""2/24/2006"""," ""2/26/2006""" +516,6," ""2/25/2006"""," ""2/26/2006""" +517,7," ""2/10/2006"""," ""2/13/2006""" +518,8," ""2/12/2006"""," ""2/14/2006""" +519,9," ""2/15/2006"""," ""2/15/2006""" +520,10," ""2/14/2006"""," ""2/18/2006""" +521,1," ""2/15/2006"""," ""2/16/2006""" +522,2," ""2/17/2006"""," ""2/20/2006""" +523,3," ""2/18/2006"""," ""2/19/2006""" +524,4," ""2/19/2006"""," ""2/19/2006""" +525,5," ""2/18/2006"""," ""2/23/2006""" +526,6," ""2/20/2006"""," ""2/22/2006""" +527,7," ""2/24/2006"""," ""2/26/2006""" +528,8," ""2/25/2006"""," ""2/26/2006""" +529,9," ""2/10/2006"""," ""2/13/2006""" +530,10," ""2/12/2006"""," ""2/14/2006""" +531,1," ""2/15/2006"""," ""2/15/2006""" +532,2," ""2/14/2006"""," ""2/18/2006""" +533,3," ""2/15/2006"""," ""2/16/2006""" +534,4," ""2/17/2006"""," ""2/20/2006""" +535,5," ""2/18/2006"""," ""2/19/2006""" +536,6," ""2/19/2006"""," ""2/19/2006""" +537,7," ""2/18/2006"""," ""2/23/2006""" +538,8," ""2/20/2006"""," ""2/22/2006""" +539,9," ""2/24/2006"""," ""2/26/2006""" +540,10," ""2/25/2006"""," ""2/26/2006""" +541,1," ""2/10/2006"""," ""2/13/2006""" +542,2," ""2/12/2006"""," ""2/14/2006""" +543,3," ""2/15/2006"""," ""2/15/2006""" +544,4," ""2/14/2006"""," ""2/18/2006""" +545,5," ""2/15/2006"""," ""2/16/2006""" +546,6," ""2/17/2006"""," ""2/20/2006""" +547,7," ""2/18/2006"""," ""2/19/2006""" +548,8," ""2/19/2006"""," ""2/19/2006""" +549,9," ""2/18/2006"""," ""2/23/2006""" +550,10," ""2/20/2006"""," ""2/22/2006""" +551,1," ""2/24/2006"""," ""2/26/2006""" +552,2," ""2/25/2006"""," ""2/26/2006""" +553,3," ""2/10/2006"""," ""2/13/2006""" +554,4," ""2/12/2006"""," ""2/14/2006""" +555,5," ""2/15/2006"""," ""2/15/2006""" +556,6," ""2/14/2006"""," ""2/18/2006""" +557,7," ""2/15/2006"""," ""2/16/2006""" +558,8," ""2/17/2006"""," ""2/20/2006""" +559,9," ""2/18/2006"""," ""2/19/2006""" +560,10," ""2/19/2006"""," ""2/19/2006""" +561,1," ""2/18/2006"""," ""2/23/2006""" +562,2," ""2/20/2006"""," ""2/22/2006""" +563,3," ""2/24/2006"""," ""2/26/2006""" +564,4," ""2/25/2006"""," ""2/26/2006""" +565,5," ""2/10/2006"""," ""2/13/2006""" +566,6," ""2/12/2006"""," ""2/14/2006""" +567,7," ""2/15/2006"""," ""2/15/2006""" +568,8," ""2/14/2006"""," ""2/18/2006""" +569,9," ""2/15/2006"""," ""2/16/2006""" +570,10," ""2/17/2006"""," ""2/20/2006""" +571,1," ""2/18/2006"""," ""2/19/2006""" +572,2," ""2/19/2006"""," ""2/19/2006""" +573,3," ""2/18/2006"""," ""2/23/2006""" +574,4," ""2/20/2006"""," ""2/22/2006""" +575,5," ""2/24/2006"""," ""2/26/2006""" +576,6," ""2/25/2006"""," ""2/26/2006""" +577,7," ""2/10/2006"""," ""2/13/2006""" +578,8," ""2/12/2006"""," ""2/14/2006""" +579,9," ""2/15/2006"""," ""2/15/2006""" +580,10," ""2/14/2006"""," ""2/18/2006""" +581,1," ""2/15/2006"""," ""2/16/2006""" +582,2," ""2/17/2006"""," ""2/20/2006""" +583,3," ""2/18/2006"""," ""2/19/2006""" +584,4," ""2/19/2006"""," ""2/19/2006""" +585,5," ""2/18/2006"""," ""2/23/2006""" +586,6," ""2/20/2006"""," ""2/22/2006""" +587,7," ""2/24/2006"""," ""2/26/2006""" +588,8," ""2/25/2006"""," ""2/26/2006""" +589,9," ""2/10/2006"""," ""2/13/2006""" +590,10," ""2/12/2006"""," ""2/14/2006""" +591,1," ""2/15/2006"""," ""2/15/2006""" +592,2," ""2/14/2006"""," ""2/18/2006""" +593,3," ""2/15/2006"""," ""2/16/2006""" +594,4," ""2/17/2006"""," ""2/20/2006""" +595,5," ""2/18/2006"""," ""2/19/2006""" +596,6," ""2/19/2006"""," ""2/19/2006""" +597,7," ""2/18/2006"""," ""2/23/2006""" +598,8," ""2/20/2006"""," ""2/22/2006""" +599,9," ""2/24/2006"""," ""2/26/2006""" +600,10," ""2/25/2006"""," ""2/26/2006""" +601,1," ""2/10/2006"""," ""2/13/2006""" +602,2," ""2/12/2006"""," ""2/14/2006""" +603,3," ""2/15/2006"""," ""2/15/2006""" +604,4," ""2/14/2006"""," ""2/18/2006""" +605,5," ""2/15/2006"""," ""2/16/2006""" +606,6," ""2/17/2006"""," ""2/20/2006""" +607,7," ""2/18/2006"""," ""2/19/2006""" +608,8," ""2/19/2006"""," ""2/19/2006""" +609,9," ""2/18/2006"""," ""2/23/2006""" +610,10," ""2/20/2006"""," ""2/22/2006""" +611,1," ""2/24/2006"""," ""2/26/2006""" +612,2," ""2/25/2006"""," ""2/26/2006""" +613,3," ""2/10/2006"""," ""2/13/2006""" +614,4," ""2/12/2006"""," ""2/14/2006""" +615,5," ""2/15/2006"""," ""2/15/2006""" +616,6," ""2/14/2006"""," ""2/18/2006""" +617,7," ""2/15/2006"""," ""2/16/2006""" +618,8," ""2/17/2006"""," ""2/20/2006""" +619,9," ""2/18/2006"""," ""2/19/2006""" +620,10," ""2/19/2006"""," ""2/19/2006""" +621,1," ""2/18/2006"""," ""2/23/2006""" +622,2," ""2/20/2006"""," ""2/22/2006""" +623,3," ""2/24/2006"""," ""2/26/2006""" +624,4," ""2/25/2006"""," ""2/26/2006""" +625,5," ""2/10/2006"""," ""2/13/2006""" +626,6," ""2/12/2006"""," ""2/14/2006""" +627,7," ""2/15/2006"""," ""2/15/2006""" +628,8," ""2/14/2006"""," ""2/18/2006""" +629,9," ""2/15/2006"""," ""2/16/2006""" +630,10," ""2/17/2006"""," ""2/20/2006""" +631,1," ""2/18/2006"""," ""2/19/2006""" +632,2," ""2/19/2006"""," ""2/19/2006""" +633,3," ""2/18/2006"""," ""2/23/2006""" +634,4," ""2/20/2006"""," ""2/22/2006""" +635,5," ""2/24/2006"""," ""2/26/2006""" +636,6," ""2/25/2006"""," ""2/26/2006""" +637,7," ""2/10/2006"""," ""2/13/2006""" +638,8," ""2/12/2006"""," ""2/14/2006""" +639,9," ""2/15/2006"""," ""2/15/2006""" +640,10," ""2/14/2006"""," ""2/18/2006""" +641,1," ""2/15/2006"""," ""2/16/2006""" +642,2," ""2/17/2006"""," ""2/20/2006""" +643,3," ""2/18/2006"""," ""2/19/2006""" +644,4," ""2/19/2006"""," ""2/19/2006""" +645,5," ""2/18/2006"""," ""2/23/2006""" +646,6," ""2/20/2006"""," ""2/22/2006""" +647,7," ""2/24/2006"""," ""2/26/2006""" +648,8," ""2/25/2006"""," ""2/26/2006""" +649,9," ""2/10/2006"""," ""2/13/2006""" +650,10," ""2/12/2006"""," ""2/14/2006""" +651,1," ""2/15/2006"""," ""2/15/2006""" +652,2," ""2/14/2006"""," ""2/18/2006""" +653,3," ""2/15/2006"""," ""2/16/2006""" +654,4," ""2/17/2006"""," ""2/20/2006""" +655,5," ""2/18/2006"""," ""2/19/2006""" +656,6," ""2/19/2006"""," ""2/19/2006""" +657,7," ""2/18/2006"""," ""2/23/2006""" +658,8," ""2/20/2006"""," ""2/22/2006""" +659,9," ""2/24/2006"""," ""2/26/2006""" +660,10," ""2/25/2006"""," ""2/26/2006""" +661,1," ""2/10/2006"""," ""2/13/2006""" +662,2," ""2/12/2006"""," ""2/14/2006""" +663,3," ""2/15/2006"""," ""2/15/2006""" +664,4," ""2/14/2006"""," ""2/18/2006""" +665,5," ""2/15/2006"""," ""2/16/2006""" +666,6," ""2/17/2006"""," ""2/20/2006""" +667,7," ""2/18/2006"""," ""2/19/2006""" +668,8," ""2/19/2006"""," ""2/19/2006""" +669,9," ""2/18/2006"""," ""2/23/2006""" +670,10," ""2/20/2006"""," ""2/22/2006""" +671,1," ""2/24/2006"""," ""2/26/2006""" +672,2," ""2/25/2006"""," ""2/26/2006""" +673,3," ""2/10/2006"""," ""2/13/2006""" +674,4," ""2/12/2006"""," ""2/14/2006""" +675,5," ""2/15/2006"""," ""2/15/2006""" +676,6," ""2/14/2006"""," ""2/18/2006""" +677,7," ""2/15/2006"""," ""2/16/2006""" +678,8," ""2/17/2006"""," ""2/20/2006""" +679,9," ""2/18/2006"""," ""2/19/2006""" +680,10," ""2/19/2006"""," ""2/19/2006""" +681,1," ""2/18/2006"""," ""2/23/2006""" +682,2," ""2/20/2006"""," ""2/22/2006""" +683,3," ""2/24/2006"""," ""2/26/2006""" +684,4," ""2/25/2006"""," ""2/26/2006""" +685,5," ""2/10/2006"""," ""2/13/2006""" +686,6," ""2/12/2006"""," ""2/14/2006""" +687,7," ""2/15/2006"""," ""2/15/2006""" +688,8," ""2/14/2006"""," ""2/18/2006""" +689,9," ""2/15/2006"""," ""2/16/2006""" +690,10," ""2/17/2006"""," ""2/20/2006""" +691,1," ""2/18/2006"""," ""2/19/2006""" +692,2," ""2/19/2006"""," ""2/19/2006""" +693,3," ""2/18/2006"""," ""2/23/2006""" +694,4," ""2/20/2006"""," ""2/22/2006""" +695,5," ""2/24/2006"""," ""2/26/2006""" +696,6," ""2/25/2006"""," ""2/26/2006""" +697,7," ""2/10/2006"""," ""2/13/2006""" +698,8," ""2/12/2006"""," ""2/14/2006""" +699,9," ""2/15/2006"""," ""2/15/2006""" +700,10," ""2/14/2006"""," ""2/18/2006""" +701,1," ""2/15/2006"""," ""2/16/2006""" +702,2," ""2/17/2006"""," ""2/20/2006""" +703,3," ""2/18/2006"""," ""2/19/2006""" +704,4," ""2/19/2006"""," ""2/19/2006""" +705,5," ""2/18/2006"""," ""2/23/2006""" +706,6," ""2/20/2006"""," ""2/22/2006""" +707,7," ""2/24/2006"""," ""2/26/2006""" +708,8," ""2/25/2006"""," ""2/26/2006""" +709,9," ""2/10/2006"""," ""2/13/2006""" +710,10," ""2/12/2006"""," ""2/14/2006""" +711,1," ""2/15/2006"""," ""2/15/2006""" +712,2," ""2/14/2006"""," ""2/18/2006""" +713,3," ""2/15/2006"""," ""2/16/2006""" +714,4," ""2/17/2006"""," ""2/20/2006""" +715,5," ""2/18/2006"""," ""2/19/2006""" +716,6," ""2/19/2006"""," ""2/19/2006""" +717,7," ""2/18/2006"""," ""2/23/2006""" +718,8," ""2/20/2006"""," ""2/22/2006""" +719,9," ""2/24/2006"""," ""2/26/2006""" +720,10," ""2/25/2006"""," ""2/26/2006""" +721,1," ""2/10/2006"""," ""2/13/2006""" +722,2," ""2/12/2006"""," ""2/14/2006""" +723,3," ""2/15/2006"""," ""2/15/2006""" +724,4," ""2/14/2006"""," ""2/18/2006""" +725,5," ""2/15/2006"""," ""2/16/2006""" +726,6," ""2/17/2006"""," ""2/20/2006""" +727,7," ""2/18/2006"""," ""2/19/2006""" +728,8," ""2/19/2006"""," ""2/19/2006""" +729,9," ""2/18/2006"""," ""2/23/2006""" +730,10," ""2/20/2006"""," ""2/22/2006""" +731,1," ""2/24/2006"""," ""2/26/2006""" +732,2," ""2/25/2006"""," ""2/26/2006""" +733,3," ""2/10/2006"""," ""2/13/2006""" +734,4," ""2/12/2006"""," ""2/14/2006""" +735,5," ""2/15/2006"""," ""2/15/2006""" +736,6," ""2/14/2006"""," ""2/18/2006""" +737,7," ""2/15/2006"""," ""2/16/2006""" +738,8," ""2/17/2006"""," ""2/20/2006""" +739,9," ""2/18/2006"""," ""2/19/2006""" +740,10," ""2/19/2006"""," ""2/19/2006""" +741,1," ""2/18/2006"""," ""2/23/2006""" +742,2," ""2/20/2006"""," ""2/22/2006""" +743,3," ""2/24/2006"""," ""2/26/2006""" +744,4," ""2/25/2006"""," ""2/26/2006""" +745,5," ""2/10/2006"""," ""2/13/2006""" +746,6," ""2/12/2006"""," ""2/14/2006""" +747,7," ""2/15/2006"""," ""2/15/2006""" +748,8," ""2/14/2006"""," ""2/18/2006""" +749,9," ""2/15/2006"""," ""2/16/2006""" +750,10," ""2/17/2006"""," ""2/20/2006""" +751,1," ""2/18/2006"""," ""2/19/2006""" +752,2," ""2/19/2006"""," ""2/19/2006""" +753,3," ""2/18/2006"""," ""2/23/2006""" +754,4," ""2/20/2006"""," ""2/22/2006""" +755,5," ""2/24/2006"""," ""2/26/2006""" +756,6," ""2/25/2006"""," ""2/26/2006""" +757,7," ""2/10/2006"""," ""2/13/2006""" +758,8," ""2/12/2006"""," ""2/14/2006""" +759,9," ""2/15/2006"""," ""2/15/2006""" +760,10," ""2/14/2006"""," ""2/18/2006""" +761,1," ""2/15/2006"""," ""2/16/2006""" +762,2," ""2/17/2006"""," ""2/20/2006""" +763,3," ""2/18/2006"""," ""2/19/2006""" +764,4," ""2/19/2006"""," ""2/19/2006""" +765,5," ""2/18/2006"""," ""2/23/2006""" +766,6," ""2/20/2006"""," ""2/22/2006""" +767,7," ""2/24/2006"""," ""2/26/2006""" +768,8," ""2/25/2006"""," ""2/26/2006""" +769,9," ""2/10/2006"""," ""2/13/2006""" +770,10," ""2/12/2006"""," ""2/14/2006""" +771,1," ""2/15/2006"""," ""2/15/2006""" +772,2," ""2/14/2006"""," ""2/18/2006""" +773,3," ""2/15/2006"""," ""2/16/2006""" +774,4," ""2/17/2006"""," ""2/20/2006""" +775,5," ""2/18/2006"""," ""2/19/2006""" +776,6," ""2/19/2006"""," ""2/19/2006""" +777,7," ""2/18/2006"""," ""2/23/2006""" +778,8," ""2/20/2006"""," ""2/22/2006""" +779,9," ""2/24/2006"""," ""2/26/2006""" +780,10," ""2/25/2006"""," ""2/26/2006""" +781,1," ""2/10/2006"""," ""2/13/2006""" +782,2," ""2/12/2006"""," ""2/14/2006""" +783,3," ""2/15/2006"""," ""2/15/2006""" +784,4," ""2/14/2006"""," ""2/18/2006""" +785,5," ""2/15/2006"""," ""2/16/2006""" +786,6," ""2/17/2006"""," ""2/20/2006""" +787,7," ""2/18/2006"""," ""2/19/2006""" +788,8," ""2/19/2006"""," ""2/19/2006""" +789,9," ""2/18/2006"""," ""2/23/2006""" +790,10," ""2/20/2006"""," ""2/22/2006""" +791,1," ""2/24/2006"""," ""2/26/2006""" +792,2," ""2/25/2006"""," ""2/26/2006""" +793,3," ""2/10/2006"""," ""2/13/2006""" +794,4," ""2/12/2006"""," ""2/14/2006""" +795,5," ""2/15/2006"""," ""2/15/2006""" +796,6," ""2/14/2006"""," ""2/18/2006""" +797,7," ""2/15/2006"""," ""2/16/2006""" +798,8," ""2/17/2006"""," ""2/20/2006""" +799,9," ""2/18/2006"""," ""2/19/2006""" +800,10," ""2/19/2006"""," ""2/19/2006""" +801,1," ""2/18/2006"""," ""2/23/2006""" +802,2," ""2/20/2006"""," ""2/22/2006""" +803,3," ""2/24/2006"""," ""2/26/2006""" +804,4," ""2/25/2006"""," ""2/26/2006""" +805,5," ""2/10/2006"""," ""2/13/2006""" +806,6," ""2/12/2006"""," ""2/14/2006""" +807,7," ""2/15/2006"""," ""2/15/2006""" +808,8," ""2/14/2006"""," ""2/18/2006""" +809,9," ""2/15/2006"""," ""2/16/2006""" +810,10," ""2/17/2006"""," ""2/20/2006""" +811,1," ""2/18/2006"""," ""2/19/2006""" +812,2," ""2/19/2006"""," ""2/19/2006""" +813,3," ""2/18/2006"""," ""2/23/2006""" +814,4," ""2/20/2006"""," ""2/22/2006""" +815,5," ""2/24/2006"""," ""2/26/2006""" +816,6," ""2/25/2006"""," ""2/26/2006""" +817,7," ""2/10/2006"""," ""2/13/2006""" +818,8," ""2/12/2006"""," ""2/14/2006""" +819,9," ""2/15/2006"""," ""2/15/2006""" +820,10," ""2/14/2006"""," ""2/18/2006""" +821,1," ""2/15/2006"""," ""2/16/2006""" +822,2," ""2/17/2006"""," ""2/20/2006""" +823,3," ""2/18/2006"""," ""2/19/2006""" +824,4," ""2/19/2006"""," ""2/19/2006""" +825,5," ""2/18/2006"""," ""2/23/2006""" +826,6," ""2/20/2006"""," ""2/22/2006""" +827,7," ""2/24/2006"""," ""2/26/2006""" +828,8," ""2/25/2006"""," ""2/26/2006""" +829,9," ""2/10/2006"""," ""2/13/2006""" +830,10," ""2/12/2006"""," ""2/14/2006""" +831,1," ""2/15/2006"""," ""2/15/2006""" +832,2," ""2/14/2006"""," ""2/18/2006""" +833,3," ""2/15/2006"""," ""2/16/2006""" +834,4," ""2/17/2006"""," ""2/20/2006""" +835,5," ""2/18/2006"""," ""2/19/2006""" +836,6," ""2/19/2006"""," ""2/19/2006""" +837,7," ""2/18/2006"""," ""2/23/2006""" +838,8," ""2/20/2006"""," ""2/22/2006""" +839,9," ""2/24/2006"""," ""2/26/2006""" +840,10," ""2/25/2006"""," ""2/26/2006""" +841,1," ""2/10/2006"""," ""2/13/2006""" +842,2," ""2/12/2006"""," ""2/14/2006""" +843,3," ""2/15/2006"""," ""2/15/2006""" +844,4," ""2/14/2006"""," ""2/18/2006""" +845,5," ""2/15/2006"""," ""2/16/2006""" +846,6," ""2/17/2006"""," ""2/20/2006""" +847,7," ""2/18/2006"""," ""2/19/2006""" +848,8," ""2/19/2006"""," ""2/19/2006""" +849,9," ""2/18/2006"""," ""2/23/2006""" +850,10," ""2/20/2006"""," ""2/22/2006""" +851,1," ""2/24/2006"""," ""2/26/2006""" +852,2," ""2/25/2006"""," ""2/26/2006""" +853,3," ""2/10/2006"""," ""2/13/2006""" +854,4," ""2/12/2006"""," ""2/14/2006""" +855,5," ""2/15/2006"""," ""2/15/2006""" +856,6," ""2/14/2006"""," ""2/18/2006""" +857,7," ""2/15/2006"""," ""2/16/2006""" +858,8," ""2/17/2006"""," ""2/20/2006""" +859,9," ""2/18/2006"""," ""2/19/2006""" +860,10," ""2/19/2006"""," ""2/19/2006""" +861,1," ""2/18/2006"""," ""2/23/2006""" +862,2," ""2/20/2006"""," ""2/22/2006""" +863,3," ""2/24/2006"""," ""2/26/2006""" +864,4," ""2/25/2006"""," ""2/26/2006""" +865,5," ""2/10/2006"""," ""2/13/2006""" +866,6," ""2/12/2006"""," ""2/14/2006""" +867,7," ""2/15/2006"""," ""2/15/2006""" +868,8," ""2/14/2006"""," ""2/18/2006""" +869,9," ""2/15/2006"""," ""2/16/2006""" +870,10," ""2/17/2006"""," ""2/20/2006""" +871,1," ""2/18/2006"""," ""2/19/2006""" +872,2," ""2/19/2006"""," ""2/19/2006""" +873,3," ""2/18/2006"""," ""2/23/2006""" +874,4," ""2/20/2006"""," ""2/22/2006""" +875,5," ""2/24/2006"""," ""2/26/2006""" +876,6," ""2/25/2006"""," ""2/26/2006""" +877,7," ""2/10/2006"""," ""2/13/2006""" +878,8," ""2/12/2006"""," ""2/14/2006""" +879,9," ""2/15/2006"""," ""2/15/2006""" +880,10," ""2/14/2006"""," ""2/18/2006""" +881,1," ""2/15/2006"""," ""2/16/2006""" +882,2," ""2/17/2006"""," ""2/20/2006""" +883,3," ""2/18/2006"""," ""2/19/2006""" +884,4," ""2/19/2006"""," ""2/19/2006""" +885,5," ""2/18/2006"""," ""2/23/2006""" +886,6," ""2/20/2006"""," ""2/22/2006""" +887,7," ""2/24/2006"""," ""2/26/2006""" +888,8," ""2/25/2006"""," ""2/26/2006""" +889,9," ""2/10/2006"""," ""2/13/2006""" +890,10," ""2/12/2006"""," ""2/14/2006""" +891,1," ""2/15/2006"""," ""2/15/2006""" +892,2," ""2/14/2006"""," ""2/18/2006""" +893,3," ""2/15/2006"""," ""2/16/2006""" +894,4," ""2/17/2006"""," ""2/20/2006""" +895,5," ""2/18/2006"""," ""2/19/2006""" +896,6," ""2/19/2006"""," ""2/19/2006""" +897,7," ""2/18/2006"""," ""2/23/2006""" +898,8," ""2/20/2006"""," ""2/22/2006""" +899,9," ""2/24/2006"""," ""2/26/2006""" +900,10," ""2/25/2006"""," ""2/26/2006""" +901,1," ""2/10/2006"""," ""2/13/2006""" +902,2," ""2/12/2006"""," ""2/14/2006""" +903,3," ""2/15/2006"""," ""2/15/2006""" +904,4," ""2/14/2006"""," ""2/18/2006""" +905,5," ""2/15/2006"""," ""2/16/2006""" +906,6," ""2/17/2006"""," ""2/20/2006""" +907,7," ""2/18/2006"""," ""2/19/2006""" +908,8," ""2/19/2006"""," ""2/19/2006""" +909,9," ""2/18/2006"""," ""2/23/2006""" +910,10," ""2/20/2006"""," ""2/22/2006""" +911,1," ""2/24/2006"""," ""2/26/2006""" +912,2," ""2/25/2006"""," ""2/26/2006""" +913,3," ""2/10/2006"""," ""2/13/2006""" +914,4," ""2/12/2006"""," ""2/14/2006""" +915,5," ""2/15/2006"""," ""2/15/2006""" +916,6," ""2/14/2006"""," ""2/18/2006""" +917,7," ""2/15/2006"""," ""2/16/2006""" +918,8," ""2/17/2006"""," ""2/20/2006""" +919,9," ""2/18/2006"""," ""2/19/2006""" +920,10," ""2/19/2006"""," ""2/19/2006""" +921,1," ""2/18/2006"""," ""2/23/2006""" +922,2," ""2/20/2006"""," ""2/22/2006""" +923,3," ""2/24/2006"""," ""2/26/2006""" +924,4," ""2/25/2006"""," ""2/26/2006""" +925,5," ""2/10/2006"""," ""2/13/2006""" +926,6," ""2/12/2006"""," ""2/14/2006""" +927,7," ""2/15/2006"""," ""2/15/2006""" +928,8," ""2/14/2006"""," ""2/18/2006""" +929,9," ""2/15/2006"""," ""2/16/2006""" +930,10," ""2/17/2006"""," ""2/20/2006""" +931,1," ""2/18/2006"""," ""2/19/2006""" +932,2," ""2/19/2006"""," ""2/19/2006""" +933,3," ""2/18/2006"""," ""2/23/2006""" +934,4," ""2/20/2006"""," ""2/22/2006""" +935,5," ""2/24/2006"""," ""2/26/2006""" +936,6," ""2/25/2006"""," ""2/26/2006""" +937,7," ""2/10/2006"""," ""2/13/2006""" +938,8," ""2/12/2006"""," ""2/14/2006""" +939,9," ""2/15/2006"""," ""2/15/2006""" +940,10," ""2/14/2006"""," ""2/18/2006""" +941,1," ""2/15/2006"""," ""2/16/2006""" +942,2," ""2/17/2006"""," ""2/20/2006""" +943,3," ""2/18/2006"""," ""2/19/2006""" +944,4," ""2/19/2006"""," ""2/19/2006""" +945,5," ""2/18/2006"""," ""2/23/2006""" +946,6," ""2/20/2006"""," ""2/22/2006""" +947,7," ""2/24/2006"""," ""2/26/2006""" +948,8," ""2/25/2006"""," ""2/26/2006""" +949,9," ""2/10/2006"""," ""2/13/2006""" +950,10," ""2/12/2006"""," ""2/14/2006""" +951,1," ""2/15/2006"""," ""2/15/2006""" +952,2," ""2/14/2006"""," ""2/18/2006""" +953,3," ""2/15/2006"""," ""2/16/2006""" +954,4," ""2/17/2006"""," ""2/20/2006""" +955,5," ""2/18/2006"""," ""2/19/2006""" +956,6," ""2/19/2006"""," ""2/19/2006""" +957,7," ""2/18/2006"""," ""2/23/2006""" +958,8," ""2/20/2006"""," ""2/22/2006""" +959,9," ""2/24/2006"""," ""2/26/2006""" +960,10," ""2/25/2006"""," ""2/26/2006""" +961,1," ""2/10/2006"""," ""2/13/2006""" +962,2," ""2/12/2006"""," ""2/14/2006""" +963,3," ""2/15/2006"""," ""2/15/2006""" +964,4," ""2/14/2006"""," ""2/18/2006""" +965,5," ""2/15/2006"""," ""2/16/2006""" +966,6," ""2/17/2006"""," ""2/20/2006""" +967,7," ""2/18/2006"""," ""2/19/2006""" +968,8," ""2/19/2006"""," ""2/19/2006""" +969,9," ""2/18/2006"""," ""2/23/2006""" +970,10," ""2/20/2006"""," ""2/22/2006""" +971,1," ""2/24/2006"""," ""2/26/2006""" +972,2," ""2/25/2006"""," ""2/26/2006""" +973,3," ""2/10/2006"""," ""2/13/2006""" +974,4," ""2/12/2006"""," ""2/14/2006""" +975,5," ""2/15/2006"""," ""2/15/2006""" +976,6," ""2/14/2006"""," ""2/18/2006""" +977,7," ""2/15/2006"""," ""2/16/2006""" +978,8," ""2/17/2006"""," ""2/20/2006""" +979,9," ""2/18/2006"""," ""2/19/2006""" +980,10," ""2/19/2006"""," ""2/19/2006""" +981,1," ""2/18/2006"""," ""2/23/2006""" +982,2," ""2/20/2006"""," ""2/22/2006""" +983,3," ""2/24/2006"""," ""2/26/2006""" +984,4," ""2/25/2006"""," ""2/26/2006""" +985,5," ""2/10/2006"""," ""2/13/2006""" +986,6," ""2/12/2006"""," ""2/14/2006""" +987,7," ""2/15/2006"""," ""2/15/2006""" +988,8," ""2/14/2006"""," ""2/18/2006""" +989,9," ""2/15/2006"""," ""2/16/2006""" +990,10," ""2/17/2006"""," ""2/20/2006""" +991,1," ""2/18/2006"""," ""2/19/2006""" +992,2," ""2/19/2006"""," ""2/19/2006""" +993,3," ""2/18/2006"""," ""2/23/2006""" +994,4," ""2/20/2006"""," ""2/22/2006""" +995,5," ""2/24/2006"""," ""2/26/2006""" +996,6," ""2/25/2006"""," ""2/26/2006""" +997,7," ""2/10/2006"""," ""2/13/2006""" +998,8," ""2/12/2006"""," ""2/14/2006""" +999,9," ""2/15/2006"""," ""2/15/2006""" +1000,10," ""2/14/2006"""," ""2/18/2006""" \ No newline at end of file diff --git a/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.json b/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.json new file mode 100644 index 0000000..041754b --- /dev/null +++ b/Projects/p3-skeleton/cs448p3/src/test/resources/ridesBig.json @@ -0,0 +1,29 @@ +{ + "schema": [ + { + "no": 0, + "type": "INTEGER", + "length": 4, + "name": "DriverId" + }, + { + "no": 1, + "type": "INTEGER", + "length": 4, + "name": "GroupId" + }, + { + "no": 2, + "type": "STRING", + "length": 10, + "name": "FromDate" + }, + { + "no": 3, + "type": "STRING", + "length": 10, + "name": "ToDate" + } + ], + "key": 1 +}